Le Tensile Strength Calculator is a practical engineering tool designed to calculate tensile stress, allowable load, ultimate tensile capacity, required cross-sectional area, and safety factor for components under axial tension. By entering material strength, applied load, and component dimensions, users can quickly evaluate structural performance and potential failure risks. The Tensile Strength Calculator is ideal for rods, bars, plates, wires, and other mechanical components, helping engineers optimize material selection, component sizing, and design safety.
KGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgUk9PVF9JRCA9ICd0ZW5zaWxlLXN0cmVuZ3RoLWNhbGN1bGF0b3InOwoKICAgIHZhciBNQVRFUklBTFMgPSB7CiAgICAgICAgJ3N0cnVjdHVyYWwtc3RlZWwnOiB7IHN5OiAzNTUsIHN1OiA1MTAsIGU6IDIwMCwgbGFiZWw6ICdTdHJ1Y3R1cmFsIFN0ZWVsJyB9LAogICAgICAgICdjYXJib24tc3RlZWwnOiB7IHN5OiAyNTAsIHN1OiA0MDAsIGU6IDIwMCwgbGFiZWw6ICdDYXJib24gU3RlZWwnIH0sCiAgICAgICAgJ2FsbG95LXN0ZWVsJzogeyBzeTogNjkwLCBzdTogODYwLCBlOiAyMDUsIGxhYmVsOiAnQWxsb3kgU3RlZWwnIH0sCiAgICAgICAgJ3N0YWlubGVzcy1zdGVlbCc6IHsgc3k6IDIwNSwgc3U6IDUxNSwgZTogMTkzLCBsYWJlbDogJ1N0YWlubGVzcyBTdGVlbCcgfSwKICAgICAgICAnYWx1bWludW0tYWxsb3knOiB7IHN5OiAyNzYsIHN1OiAzMTAsIGU6IDY5LCBsYWJlbDogJ0FsdW1pbnVtIEFsbG95JyB9LAogICAgICAgICd0aXRhbml1bS1hbGxveSc6IHsgc3k6IDg4MCwgc3U6IDk1MCwgZTogMTE0LCBsYWJlbDogJ1RpdGFuaXVtIEFsbG95JyB9LAogICAgICAgIGJyYXNzOiB7IHN5OiAxMjQsIHN1OiAzMzgsIGU6IDk3LCBsYWJlbDogJ0JyYXNzJyB9LAogICAgICAgIGNvcHBlcjogeyBzeTogNzAsIHN1OiAyMjAsIGU6IDExNywgbGFiZWw6ICdDb3BwZXInIH0sCiAgICAgICAgY3VzdG9tOiB7IHN5OiBudWxsLCBzdTogbnVsbCwgZTogbnVsbCwgbGFiZWw6ICdDdXN0b20gTWF0ZXJpYWwnIH0KICAgIH07CgogICAgdmFyIENPTVBPTkVOVF9TRUNUSU9OID0gewogICAgICAgICdyb3VuZC1yb2QnOiAnc29saWQtcm91bmQnLAogICAgICAgICdob2xsb3ctdHViZSc6ICdob2xsb3ctcm91bmQnLAogICAgICAgICdyZWN0YW5ndWxhci1iYXInOiAncmVjdGFuZ2xlJywKICAgICAgICAnZmxhdC1wbGF0ZSc6ICdyZWN0YW5nbGUnLAogICAgICAgIHdpcmU6ICdzb2xpZC1yb3VuZCcsCiAgICAgICAgJ2N1c3RvbS1zZWN0aW9uJzogJ2N1c3RvbS1hcmVhJwogICAgfTsKCiAgICB2YXIgREVGQVVMVFMgPSB7CiAgICAgICAgdW5pdFN5c3RlbTogJ21ldHJpYycsCiAgICAgICAgY2FsY01vZGU6ICdzdHJlc3MtY2hlY2snLAogICAgICAgIGNvbXBvbmVudFR5cGU6ICdyb3VuZC1yb2QnLAogICAgICAgIHNlY3Rpb25UeXBlOiAnc29saWQtcm91bmQnLAogICAgICAgIGRpYW1ldGVyOiAyMCwKICAgICAgICBvdXRlckRpYW1ldGVyOiAyNSwKICAgICAgICBpbm5lckRpYW1ldGVyOiAyMCwKICAgICAgICB3aWR0aDogNDAsCiAgICAgICAgdGhpY2tuZXNzOiAxMCwKICAgICAgICBjdXN0b21BcmVhOiAnJywKICAgICAgICBuZXRBcmVhOiAnJywKICAgICAgICBhcHBsaWVkTG9hZDogNTAsCiAgICAgICAgbG9hZFVuaXQ6ICdrTicsCiAgICAgICAgbWF0ZXJpYWw6ICdzdHJ1Y3R1cmFsLXN0ZWVsJywKICAgICAgICB5aWVsZFN0cmVuZ3RoOiAzNTUsCiAgICAgICAgdWx0aW1hdGVTdHJlbmd0aDogNTEwLAogICAgICAgIHN0cmVuZ3RoUmVmOiAneWllbGQnLAogICAgICAgIGN1c3RvbUFsbG93YWJsZTogJycsCiAgICAgICAgZGVzaWduU2Y6IDIuMCwKICAgICAgICBrdDogMS4wLAogICAgICAgIHlvdW5nc01vZHVsdXM6IDIwMCwKICAgICAgICBtb2R1bHVzVW5pdDogJ0dQYScsCiAgICAgICAgZ2F1Z2VMZW5ndGg6ICcnLAogICAgICAgIGdhdWdlVW5pdDogJ21tJwogICAgfTsKCiAgICB2YXIgTVBBX1RPX1BTSSA9IDE0NS4wMzc3MzgwMDc7CiAgICB2YXIgUFNJX1RPX01QQSA9IDEgLyBNUEFfVE9fUFNJOwogICAgdmFyIEtOX1RPX04gPSAxMDAwOwogICAgdmFyIExCRl9UT19OID0gNC40NDgyMjE2MTUzOwogICAgdmFyIElOMl9UT19NTTIgPSA2NDUuMTY7CiAgICB2YXIgR1BBX1RPX01QQSA9IDEwMDA7CgogICAgdmFyIHJvb3QsIGVscywgbWFudWFsTWF0ZXJpYWxFZGl0OwoKICAgIGZ1bmN0aW9uICQoaWQpIHsKICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZU51bSh2KSB7CiAgICAgICAgaWYgKHYgPT09ICcnIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHYpLnJlcGxhY2UoJywnLCAnLicpKTsKICAgICAgICByZXR1cm4gaXNOYU4obikgPyBudWxsIDogbjsKICAgIH0KCiAgICB2YXIgRU1QVFkgPSAnLSc7CgogICAgZnVuY3Rpb24gZm10KHYsIGQpIHsKICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgIWlzRmluaXRlKHYpKSByZXR1cm4gRU1QVFk7CiAgICAgICAgcmV0dXJuIHYudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgewogICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsCiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZCAhPT0gdW5kZWZpbmVkID8gZCA6IDIKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc01ldHJpYygpIHsKICAgICAgICByZXR1cm4gZWxzLnVuaXRTeXN0ZW0udmFsdWUgPT09ICdtZXRyaWMnOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTWV0cmljTGVuZ3RoKHYsIHVuaXQpIHsKICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ21tJyA/IHYgOiB2ICogMjUuNDsKICAgIH0KCiAgICBmdW5jdGlvbiBmcm9tTWV0cmljTGVuZ3RoKHYsIHVuaXQpIHsKICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ21tJyA/IHYgOiB2IC8gMjUuNDsKICAgIH0KCiAgICBmdW5jdGlvbiBpc01ldHJpY0FyZWFVbml0KHVuaXQpIHsKICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ21tMicgfHwgdW5pdCA9PT0gJ21tXHUwMGIyJzsKICAgIH0KCiAgICBmdW5jdGlvbiB0b01ldHJpY0FyZWEodiwgdW5pdCkgewogICAgICAgIHJldHVybiBpc01ldHJpY0FyZWFVbml0KHVuaXQpID8gdiA6IHYgKiBJTjJfVE9fTU0yOwogICAgfQoKICAgIGZ1bmN0aW9uIGZyb21NZXRyaWNBcmVhKHYsIHVuaXQpIHsKICAgICAgICByZXR1cm4gaXNNZXRyaWNBcmVhVW5pdCh1bml0KSA/IHYgOiB2IC8gSU4yX1RPX01NMjsKICAgIH0KCiAgICBmdW5jdGlvbiB0b01ldHJpY0ZvcmNlKHYsIHVuaXQpIHsKICAgICAgICBpZiAodW5pdCA9PT0gJ04nKSByZXR1cm4gdjsKICAgICAgICBpZiAodW5pdCA9PT0gJ2tOJykgcmV0dXJuIHYgKiBLTl9UT19OOwogICAgICAgIHJldHVybiB2ICogTEJGX1RPX047CiAgICB9CgogICAgZnVuY3Rpb24gZnJvbU1ldHJpY0ZvcmNlKHYsIHVuaXQpIHsKICAgICAgICBpZiAodW5pdCA9PT0gJ04nKSByZXR1cm4gdjsKICAgICAgICBpZiAodW5pdCA9PT0gJ2tOJykgcmV0dXJuIHYgLyBLTl9UT19OOwogICAgICAgIHJldHVybiB2IC8gTEJGX1RPX047CiAgICB9CgogICAgZnVuY3Rpb24gdG9NZXRyaWNTdHJlc3ModiwgdW5pdCkgewogICAgICAgIHJldHVybiB1bml0ID09PSAnTVBhJyA/IHYgOiB2ICogUFNJX1RPX01QQTsKICAgIH0KCiAgICBmdW5jdGlvbiBmcm9tTWV0cmljU3RyZXNzKHYsIHVuaXQpIHsKICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ01QYScgPyB2IDogdiAqIE1QQV9UT19QU0k7CiAgICB9CgogICAgZnVuY3Rpb24gdG9NZXRyaWNNb2R1bHVzKHYsIHVuaXQpIHsKICAgICAgICBpZiAodW5pdCA9PT0gJ0dQYScpIHJldHVybiB2ICogR1BBX1RPX01QQTsKICAgICAgICBpZiAodW5pdCA9PT0gJ01QYScpIHJldHVybiB2OwogICAgICAgIHJldHVybiB2ICogUFNJX1RPX01QQTsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXNwbGF5U3RyZXNzKG1wYSkgewogICAgICAgIHJldHVybiBpc01ldHJpYygpID8gbXBhIDogbXBhICogTVBBX1RPX1BTSTsKICAgIH0KCiAgICBmdW5jdGlvbiBzdHJlc3NVbml0TGFiZWwoKSB7CiAgICAgICAgcmV0dXJuIGlzTWV0cmljKCkgPyAnTVBhJyA6ICdwc2knOwogICAgfQoKICAgIGZ1bmN0aW9uIGFyZWFVbml0TGFiZWwoKSB7CiAgICAgICAgcmV0dXJuIGlzTWV0cmljKCkgPyAnbW0yJyA6ICdpbjInOwogICAgfQoKICAgIGZ1bmN0aW9uIGxlbmd0aFVuaXRMYWJlbCgpIHsKICAgICAgICByZXR1cm4gaXNNZXRyaWMoKSA/ICdtbScgOiAnaW4nOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcmNlVW5pdExhYmVsKCkgewogICAgICAgIHJldHVybiBlbHMubG9hZFVuaXQudmFsdWU7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0VmlzaWJsZShzZWxlY3Rvciwgc2hvdykgewogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgndHNjLWhpZGRlbicsICFzaG93KTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhckVycm9ycygpIHsKICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy50c2MtZXJyb3InKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCd0c2MtZXJyb3InKTsKICAgICAgICB9KTsKICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy50c2MtZmllbGQtZXJyb3InKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEZpZWxkRXJyb3IoaW5wdXRJZCwgZXJySWQsIG1zZykgewogICAgICAgIHZhciBpbnB1dCA9ICQoaW5wdXRJZCk7CiAgICAgICAgdmFyIGVyciA9ICQoZXJySWQpOwogICAgICAgIGlmIChpbnB1dCkgaW5wdXQuY2xhc3NMaXN0LmFkZCgndHNjLWVycm9yJyk7CiAgICAgICAgaWYgKGVycikgZXJyLnRleHRDb250ZW50ID0gbXNnIHx8ICcnOwogICAgICAgIHJldHVybiAhIW1zZzsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxjU29saWRSb3VuZEFyZWEoZE1tKSB7CiAgICAgICAgcmV0dXJuIE1hdGguUEkgKiBkTW0gKiBkTW0gLyA0OwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGNIb2xsb3dSb3VuZEFyZWEob2RNbSwgaWRNbSkgewogICAgICAgIHJldHVybiBNYXRoLlBJICogKG9kTW0gKiBvZE1tIC0gaWRNbSAqIGlkTW0pIC8gNDsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxjUmVjdEFyZWEod01tLCB0TW0pIHsKICAgICAgICByZXR1cm4gd01tICogdE1tOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGNSZXF1aXJlZERpYW1ldGVyKGFyZWFNbTIpIHsKICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDQgKiBhcmVhTW0yIC8gTWF0aC5QSSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q3Jvc3NTZWN0aW9uQXJlYSgpIHsKICAgICAgICB2YXIgc2VjdGlvbiA9IGVscy5zZWN0aW9uVHlwZS52YWx1ZTsKICAgICAgICB2YXIgbmV0ID0gcGFyc2VOdW0oZWxzLm5ldEFyZWEudmFsdWUpOwogICAgICAgIGlmIChuZXQgIT09IG51bGwgJiYgbmV0ID4gMCkgewogICAgICAgICAgICByZXR1cm4gdG9NZXRyaWNBcmVhKG5ldCwgZWxzLm5ldEFyZWFVbml0LnZhbHVlKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWN0aW9uID09PSAnY3VzdG9tLWFyZWEnKSB7CiAgICAgICAgICAgIHZhciBjYSA9IHBhcnNlTnVtKGVscy5jdXN0b21BcmVhLnZhbHVlKTsKICAgICAgICAgICAgaWYgKGNhID09PSBudWxsIHx8IGNhIDw9IDApIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gdG9NZXRyaWNBcmVhKGNhLCBlbHMuY3VzdG9tQXJlYVVuaXQudmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdzb2xpZC1yb3VuZCcpIHsKICAgICAgICAgICAgdmFyIGQgPSBwYXJzZU51bShlbHMuZGlhbWV0ZXIudmFsdWUpOwogICAgICAgICAgICBpZiAoZCA9PT0gbnVsbCB8fCBkIDw9IDApIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gY2FsY1NvbGlkUm91bmRBcmVhKHRvTWV0cmljTGVuZ3RoKGQsIGVscy5kaWFtZXRlclVuaXQudmFsdWUpKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWN0aW9uID09PSAnaG9sbG93LXJvdW5kJykgewogICAgICAgICAgICB2YXIgb2QgPSBwYXJzZU51bShlbHMub3V0ZXJEaWFtZXRlci52YWx1ZSk7CiAgICAgICAgICAgIHZhciBpZCA9IHBhcnNlTnVtKGVscy5pbm5lckRpYW1ldGVyLnZhbHVlKTsKICAgICAgICAgICAgaWYgKG9kID09PSBudWxsIHx8IG9kIDw9IDAgfHwgaWQgPT09IG51bGwgfHwgaWQgPCAwKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgdmFyIG9kTW0gPSB0b01ldHJpY0xlbmd0aChvZCwgZWxzLm91dGVyRGlhbWV0ZXJVbml0LnZhbHVlKTsKICAgICAgICAgICAgdmFyIGlkTW0gPSB0b01ldHJpY0xlbmd0aChpZCwgZWxzLmlubmVyRGlhbWV0ZXJVbml0LnZhbHVlKTsKICAgICAgICAgICAgaWYgKGlkTW0gPj0gb2RNbSkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIHJldHVybiBjYWxjSG9sbG93Um91bmRBcmVhKG9kTW0sIGlkTW0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdyZWN0YW5nbGUnKSB7CiAgICAgICAgICAgIHZhciB3ID0gcGFyc2VOdW0oZWxzLndpZHRoLnZhbHVlKTsKICAgICAgICAgICAgdmFyIHQgPSBwYXJzZU51bShlbHMudGhpY2tuZXNzLnZhbHVlKTsKICAgICAgICAgICAgaWYgKHcgPT09IG51bGwgfHwgdyA8PSAwIHx8IHQgPT09IG51bGwgfHwgdCA8PSAwKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGNhbGNSZWN0QXJlYSgKICAgICAgICAgICAgICAgIHRvTWV0cmljTGVuZ3RoKHcsIGVscy53aWR0aFVuaXQudmFsdWUpLAogICAgICAgICAgICAgICAgdG9NZXRyaWNMZW5ndGgodCwgZWxzLnRoaWNrbmVzc1VuaXQudmFsdWUpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRSZWZlcmVuY2VTdHJlbmd0aE1wYShzeU1wYSwgc3VNcGEpIHsKICAgICAgICB2YXIgcmVmID0gZWxzLnN0cmVuZ3RoUmVmLnZhbHVlOwogICAgICAgIGlmIChyZWYgPT09ICd5aWVsZCcpIHJldHVybiBzeU1wYTsKICAgICAgICBpZiAocmVmID09PSAndWx0aW1hdGUnKSByZXR1cm4gc3VNcGE7CiAgICAgICAgdmFyIGN1c3RvbSA9IHBhcnNlTnVtKGVscy5jdXN0b21BbGxvd2FibGUudmFsdWUpOwogICAgICAgIGlmIChjdXN0b20gPT09IG51bGwgfHwgY3VzdG9tIDw9IDApIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB0b01ldHJpY1N0cmVzcyhjdXN0b20sIHN0cmVzc1VuaXRMYWJlbCgpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRTYWZldHlTdGF0dXModXRpbFBjdCwgc2ZBY3R1YWwsIGRlc2lnblNmLCBzaWdtYUFjdHVhbCwgc2lnbWFBbGxvdywgc3lNcGEsIHN1TXBhKSB7CiAgICAgICAgaWYgKHNpZ21hQWN0dWFsID4gc3VNcGEgfHwgdXRpbFBjdCA+IDEwMCB8fCBzZkFjdHVhbCA8IDEpIHJldHVybiAndW5zYWZlJzsKICAgICAgICBpZiAodXRpbFBjdCA+PSA4NSB8fCBzZkFjdHVhbCA8IGRlc2lnblNmIHx8IHNpZ21hQWN0dWFsID4gc3lNcGEpIHJldHVybiAnY2F1dGlvbic7CiAgICAgICAgaWYgKHV0aWxQY3QgPj0gNzAgfHwgc2ZBY3R1YWwgPCBkZXNpZ25TZiAqIDEuMSkgcmV0dXJuICdjYXV0aW9uJzsKICAgICAgICByZXR1cm4gJ3NhZmUnOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpIHsKICAgICAgICB2YXIgc2VjdGlvbiA9IGVscy5zZWN0aW9uVHlwZS52YWx1ZTsKICAgICAgICB2YXIgbW9kZSA9IGVscy5jYWxjTW9kZS52YWx1ZTsKICAgICAgICB2YXIgc2l6aW5nTW9kZSA9IG1vZGUgPT09ICdyZXF1aXJlZC1hcmVhJyB8fCBtb2RlID09PSAncmVxdWlyZWQtZGlhbWV0ZXInOwogICAgICAgIHZhciBuZWVkc0dlb21ldHJ5ID0gbW9kZSA9PT0gJ3N0cmVzcy1jaGVjaycgfHwgbW9kZSA9PT0gJ21heC1sb2FkJyB8fCBtb2RlID09PSAnYWxsb3dhYmxlLWxvYWQnOwoKICAgICAgICBzZXRWaXNpYmxlKCcudHNjLWZpZWxkLXNvbGlkJywgbmVlZHNHZW9tZXRyeSAmJiBzZWN0aW9uID09PSAnc29saWQtcm91bmQnKTsKICAgICAgICBzZXRWaXNpYmxlKCcudHNjLWZpZWxkLWhvbGxvdycsIG5lZWRzR2VvbWV0cnkgJiYgc2VjdGlvbiA9PT0gJ2hvbGxvdy1yb3VuZCcpOwogICAgICAgIHNldFZpc2libGUoJy50c2MtZmllbGQtcmVjdCcsIG5lZWRzR2VvbWV0cnkgJiYgc2VjdGlvbiA9PT0gJ3JlY3RhbmdsZScpOwogICAgICAgIHNldFZpc2libGUoJy50c2MtZmllbGQtY3VzdG9tLWFyZWEnLCBuZWVkc0dlb21ldHJ5ICYmIHNlY3Rpb24gPT09ICdjdXN0b20tYXJlYScpOwogICAgICAgIHNldFZpc2libGUoJy50c2MtZmllbGQtbmV0LWFyZWEnLCBuZWVkc0dlb21ldHJ5KTsKICAgICAgICBzZXRWaXNpYmxlKCcudHNjLWZpZWxkLWxvYWQnLCBtb2RlICE9PSAnbWF4LWxvYWQnICYmIG1vZGUgIT09ICdhbGxvd2FibGUtbG9hZCcpOwogICAgICAgIHNldFZpc2libGUoJy50c2MtZmllbGQtY3VzdG9tLWFsbG93JywgZWxzLnN0cmVuZ3RoUmVmLnZhbHVlID09PSAnY3VzdG9tJyk7CiAgICAgICAgc2V0VmlzaWJsZSgnLnRzYy1maWVsZC1lbG9uZ2F0aW9uJywgbW9kZSA9PT0gJ3N0cmVzcy1jaGVjaycpOwoKICAgICAgICBlbHMuZ2VvbWV0cnlTZWN0aW9uLmNsYXNzTGlzdC50b2dnbGUoJ3RzYy1oaWRkZW4nLCBzaXppbmdNb2RlKTsKICAgICAgICBlbHMuc2VjdGlvblJvdy5jbGFzc0xpc3QudG9nZ2xlKCd0c2MtaGlkZGVuJywgc2l6aW5nTW9kZSk7CiAgICB9CgogICAgZnVuY3Rpb24gc3luY0NvbXBvbmVudFRvU2VjdGlvbigpIHsKICAgICAgICB2YXIgY29tcCA9IGVscy5jb21wb25lbnRUeXBlLnZhbHVlOwogICAgICAgIHZhciBtYXBwZWQgPSBDT01QT05FTlRfU0VDVElPTltjb21wXTsKICAgICAgICBpZiAobWFwcGVkICYmIGVscy5zZWN0aW9uVHlwZS52YWx1ZSAhPT0gbWFwcGVkKSB7CiAgICAgICAgICAgIGVscy5zZWN0aW9uVHlwZS52YWx1ZSA9IG1hcHBlZDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNYXRlcmlhbFByZXNldCgpIHsKICAgICAgICBpZiAobWFudWFsTWF0ZXJpYWxFZGl0KSByZXR1cm47CiAgICAgICAgdmFyIG1hdCA9IE1BVEVSSUFMU1tlbHMubWF0ZXJpYWwudmFsdWVdOwogICAgICAgIGlmICghbWF0IHx8IG1hdC5zeSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICAgIGVscy55aWVsZFN0cmVuZ3RoLnZhbHVlID0gZm10KGRpc3BsYXlTdHJlc3MobWF0LnN5KSwgMSk7CiAgICAgICAgZWxzLnVsdGltYXRlU3RyZW5ndGgudmFsdWUgPSBmbXQoZGlzcGxheVN0cmVzcyhtYXQuc3UpLCAxKTsKICAgICAgICBpZiAobWF0LmUgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGlzTWV0cmljKCkpIHsKICAgICAgICAgICAgICAgIGVscy55b3VuZ3NNb2R1bHVzLnZhbHVlID0gbWF0LmU7CiAgICAgICAgICAgICAgICBlbHMubW9kdWx1c1VuaXQudmFsdWUgPSAnR1BhJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVscy55b3VuZ3NNb2R1bHVzLnZhbHVlID0gZm10KG1hdC5lICogTVBBX1RPX1BTSSwgMCk7CiAgICAgICAgICAgICAgICBlbHMubW9kdWx1c1VuaXQudmFsdWUgPSAncHNpJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgewogICAgICAgIHZhciBzdSA9IHN0cmVzc1VuaXRMYWJlbCgpOwogICAgICAgIHZhciBhdSA9IGFyZWFVbml0TGFiZWwoKTsKICAgICAgICB2YXIgbHUgPSBsZW5ndGhVbml0TGFiZWwoKTsKCiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10c2MtdW5pdD0ic3RyZXNzIl0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHN1OwogICAgICAgIH0pOwogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHNjLXVuaXQ9ImFyZWEiXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gYXU7CiAgICAgICAgfSk7CiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10c2MtdW5pdD0ibGVuZ3RoIl0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IGx1OwogICAgICAgIH0pOwoKICAgICAgICBpZiAoaXNNZXRyaWMoKSkgewogICAgICAgICAgICBlbHMuZGlhbWV0ZXJVbml0LnZhbHVlID0gJ21tJzsKICAgICAgICAgICAgZWxzLm91dGVyRGlhbWV0ZXJVbml0LnZhbHVlID0gJ21tJzsKICAgICAgICAgICAgZWxzLmlubmVyRGlhbWV0ZXJVbml0LnZhbHVlID0gJ21tJzsKICAgICAgICAgICAgZWxzLndpZHRoVW5pdC52YWx1ZSA9ICdtbSc7CiAgICAgICAgICAgIGVscy50aGlja25lc3NVbml0LnZhbHVlID0gJ21tJzsKICAgICAgICAgICAgZWxzLmN1c3RvbUFyZWFVbml0LnZhbHVlID0gJ21tMic7CiAgICAgICAgICAgIGVscy5uZXRBcmVhVW5pdC52YWx1ZSA9ICdtbTInOwogICAgICAgICAgICBlbHMuZ2F1Z2VVbml0LnZhbHVlID0gJ21tJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbHMuZGlhbWV0ZXJVbml0LnZhbHVlID0gJ2luJzsKICAgICAgICAgICAgZWxzLm91dGVyRGlhbWV0ZXJVbml0LnZhbHVlID0gJ2luJzsKICAgICAgICAgICAgZWxzLmlubmVyRGlhbWV0ZXJVbml0LnZhbHVlID0gJ2luJzsKICAgICAgICAgICAgZWxzLndpZHRoVW5pdC52YWx1ZSA9ICdpbic7CiAgICAgICAgICAgIGVscy50aGlja25lc3NVbml0LnZhbHVlID0gJ2luJzsKICAgICAgICAgICAgZWxzLmN1c3RvbUFyZWFVbml0LnZhbHVlID0gJ2luMic7CiAgICAgICAgICAgIGVscy5uZXRBcmVhVW5pdC52YWx1ZSA9ICdpbjInOwogICAgICAgICAgICBlbHMuZ2F1Z2VVbml0LnZhbHVlID0gJ2luJzsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY29udmVydFZhbHVlc09uVW5pdENoYW5nZSgpIHsKICAgICAgICB2YXIgd2FzTWV0cmljID0gcm9vdC5kYXRhc2V0LnByZXZVbml0ICE9PSAnaW1wZXJpYWwnOwogICAgICAgIHZhciBub3dNZXRyaWMgPSBpc01ldHJpYygpOwogICAgICAgIGlmICh3YXNNZXRyaWMgPT09IG5vd01ldHJpYykgcmV0dXJuOwoKICAgICAgICBmdW5jdGlvbiBjb252TGVuZ3RoKHZhbCwgZWwpIHsKICAgICAgICAgICAgdmFyIG4gPSBwYXJzZU51bSh2YWwpOwogICAgICAgICAgICBpZiAobiA9PT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICBlbC52YWx1ZSA9IGZtdChub3dNZXRyaWMgPyBuICogMjUuNCA6IG4gLyAyNS40LCAzKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNvbnZBcmVhKHZhbCwgZWwpIHsKICAgICAgICAgICAgdmFyIG4gPSBwYXJzZU51bSh2YWwpOwogICAgICAgICAgICBpZiAobiA9PT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICBlbC52YWx1ZSA9IGZtdChub3dNZXRyaWMgPyBuICogSU4yX1RPX01NMiA6IG4gLyBJTjJfVE9fTU0yLCA0KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNvbnZTdHJlc3ModmFsLCBlbCkgewogICAgICAgICAgICB2YXIgbiA9IHBhcnNlTnVtKHZhbCk7CiAgICAgICAgICAgIGlmIChuID09PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgIGVsLnZhbHVlID0gZm10KG5vd01ldHJpYyA/IG4gKiBQU0lfVE9fTVBBIDogbiAqIE1QQV9UT19QU0ksIDEpOwogICAgICAgIH0KCiAgICAgICAgY29udkxlbmd0aChlbHMuZGlhbWV0ZXIudmFsdWUsIGVscy5kaWFtZXRlcik7CiAgICAgICAgY29udkxlbmd0aChlbHMub3V0ZXJEaWFtZXRlci52YWx1ZSwgZWxzLm91dGVyRGlhbWV0ZXIpOwogICAgICAgIGNvbnZMZW5ndGgoZWxzLmlubmVyRGlhbWV0ZXIudmFsdWUsIGVscy5pbm5lckRpYW1ldGVyKTsKICAgICAgICBjb252TGVuZ3RoKGVscy53aWR0aC52YWx1ZSwgZWxzLndpZHRoKTsKICAgICAgICBjb252TGVuZ3RoKGVscy50aGlja25lc3MudmFsdWUsIGVscy50aGlja25lc3MpOwogICAgICAgIGNvbnZBcmVhKGVscy5jdXN0b21BcmVhLnZhbHVlLCBlbHMuY3VzdG9tQXJlYSk7CiAgICAgICAgY29udkFyZWEoZWxzLm5ldEFyZWEudmFsdWUsIGVscy5uZXRBcmVhKTsKICAgICAgICBjb252U3RyZXNzKGVscy55aWVsZFN0cmVuZ3RoLnZhbHVlLCBlbHMueWllbGRTdHJlbmd0aCk7CiAgICAgICAgY29udlN0cmVzcyhlbHMudWx0aW1hdGVTdHJlbmd0aC52YWx1ZSwgZWxzLnVsdGltYXRlU3RyZW5ndGgpOwogICAgICAgIGNvbnZTdHJlc3MoZWxzLmN1c3RvbUFsbG93YWJsZS52YWx1ZSwgZWxzLmN1c3RvbUFsbG93YWJsZSk7CiAgICAgICAgY29udkxlbmd0aChlbHMuZ2F1Z2VMZW5ndGgudmFsdWUsIGVscy5nYXVnZUxlbmd0aCk7CgogICAgICAgIHJvb3QuZGF0YXNldC5wcmV2VW5pdCA9IG5vd01ldHJpYyA/ICdtZXRyaWMnIDogJ2ltcGVyaWFsJzsKICAgIH0KCiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0cygpIHsKICAgICAgICBjbGVhckVycm9ycygpOwogICAgICAgIHZhciBoYXNFcnJvciA9IGZhbHNlOwogICAgICAgIHZhciBtb2RlID0gZWxzLmNhbGNNb2RlLnZhbHVlOwogICAgICAgIHZhciBzZWN0aW9uID0gZWxzLnNlY3Rpb25UeXBlLnZhbHVlOwoKICAgICAgICB2YXIgc3kgPSBwYXJzZU51bShlbHMueWllbGRTdHJlbmd0aC52YWx1ZSk7CiAgICAgICAgdmFyIHN1ID0gcGFyc2VOdW0oZWxzLnVsdGltYXRlU3RyZW5ndGgudmFsdWUpOwogICAgICAgIHZhciBzZiA9IHBhcnNlTnVtKGVscy5kZXNpZ25TZi52YWx1ZSk7CiAgICAgICAgdmFyIGt0ID0gcGFyc2VOdW0oZWxzLmt0LnZhbHVlKTsKCiAgICAgICAgaWYgKHN5ID09PSBudWxsIHx8IHN5IDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjWWllbGRTdHJlbmd0aCcsICd0c2NZaWVsZEVycicsICdFbnRlciBhIHBvc2l0aXZlIHlpZWxkIHN0cmVuZ3RoLicpOwogICAgICAgIGlmIChzdSA9PT0gbnVsbCB8fCBzdSA8PSAwKSBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ3RzY1VsdGltYXRlU3RyZW5ndGgnLCAndHNjVWx0aW1hdGVFcnInLCAnRW50ZXIgYSBwb3NpdGl2ZSB1bHRpbWF0ZSBzdHJlbmd0aC4nKSB8fCBoYXNFcnJvcjsKICAgICAgICBpZiAoc2YgPT09IG51bGwgfHwgc2YgPD0gMCkgaGFzRXJyb3IgPSBzZXRGaWVsZEVycm9yKCd0c2NEZXNpZ25TZicsICd0c2NEZXNpZ25TZkVycicsICdTYWZldHkgZmFjdG9yIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJykgfHwgaGFzRXJyb3I7CiAgICAgICAgaWYgKGt0ID09PSBudWxsIHx8IGt0IDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjS3QnLCAndHNjS3RFcnInLCAnS3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKSB8fCBoYXNFcnJvcjsKCiAgICAgICAgaWYgKGVscy5zdHJlbmd0aFJlZi52YWx1ZSA9PT0gJ2N1c3RvbScpIHsKICAgICAgICAgICAgdmFyIGNhID0gcGFyc2VOdW0oZWxzLmN1c3RvbUFsbG93YWJsZS52YWx1ZSk7CiAgICAgICAgICAgIGlmIChjYSA9PT0gbnVsbCB8fCBjYSA8PSAwKSB7CiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ3RzY0N1c3RvbUFsbG93YWJsZScsICd0c2NDdXN0b21BbGxvd0VycicsICdFbnRlciBhIHBvc2l0aXZlIGN1c3RvbSBhbGxvd2FibGUgc3RyZXNzLicpIHx8IGhhc0Vycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgbmVlZHNHZW9tZXRyeSA9IG1vZGUgPT09ICdzdHJlc3MtY2hlY2snIHx8IG1vZGUgPT09ICdtYXgtbG9hZCcgfHwgbW9kZSA9PT0gJ2FsbG93YWJsZS1sb2FkJzsKCiAgICAgICAgaWYgKG5lZWRzR2VvbWV0cnkgJiYgc2VjdGlvbiA9PT0gJ3NvbGlkLXJvdW5kJykgewogICAgICAgICAgICB2YXIgZCA9IHBhcnNlTnVtKGVscy5kaWFtZXRlci52YWx1ZSk7CiAgICAgICAgICAgIGlmIChkID09PSBudWxsIHx8IGQgPD0gMCkgaGFzRXJyb3IgPSBzZXRGaWVsZEVycm9yKCd0c2NEaWFtZXRlcicsICd0c2NEaWFtZXRlckVycicsICdEaWFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpIHx8IGhhc0Vycm9yOwogICAgICAgIH0gZWxzZSBpZiAobmVlZHNHZW9tZXRyeSAmJiBzZWN0aW9uID09PSAnaG9sbG93LXJvdW5kJykgewogICAgICAgICAgICB2YXIgb2QgPSBwYXJzZU51bShlbHMub3V0ZXJEaWFtZXRlci52YWx1ZSk7CiAgICAgICAgICAgIHZhciBpZCA9IHBhcnNlTnVtKGVscy5pbm5lckRpYW1ldGVyLnZhbHVlKTsKICAgICAgICAgICAgaWYgKG9kID09PSBudWxsIHx8IG9kIDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjT3V0ZXJEaWFtZXRlcicsICd0c2NPdXRlckRpYW1ldGVyRXJyJywgJ091dGVyIGRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJykgfHwgaGFzRXJyb3I7CiAgICAgICAgICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA8IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjSW5uZXJEaWFtZXRlcicsICd0c2NJbm5lckRpYW1ldGVyRXJyJywgJ0lubmVyIGRpYW1ldGVyIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKSB8fCBoYXNFcnJvcjsKICAgICAgICAgICAgaWYgKG9kICE9PSBudWxsICYmIGlkICE9PSBudWxsICYmIGlkID49IG9kKSB7CiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ3RzY0lubmVyRGlhbWV0ZXInLCAndHNjSW5uZXJEaWFtZXRlckVycicsICdJbm5lciBkaWFtZXRlciBtdXN0IGJlIGxlc3MgdGhhbiBvdXRlciBkaWFtZXRlci4nKSB8fCBoYXNFcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAobmVlZHNHZW9tZXRyeSAmJiBzZWN0aW9uID09PSAncmVjdGFuZ2xlJykgewogICAgICAgICAgICB2YXIgdyA9IHBhcnNlTnVtKGVscy53aWR0aC52YWx1ZSk7CiAgICAgICAgICAgIHZhciB0ID0gcGFyc2VOdW0oZWxzLnRoaWNrbmVzcy52YWx1ZSk7CiAgICAgICAgICAgIGlmICh3ID09PSBudWxsIHx8IHcgPD0gMCkgaGFzRXJyb3IgPSBzZXRGaWVsZEVycm9yKCd0c2NXaWR0aCcsICd0c2NXaWR0aEVycicsICdXaWR0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpIHx8IGhhc0Vycm9yOwogICAgICAgICAgICBpZiAodCA9PT0gbnVsbCB8fCB0IDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjVGhpY2tuZXNzJywgJ3RzY1RoaWNrbmVzc0VycicsICdUaGlja25lc3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKSB8fCBoYXNFcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKG5lZWRzR2VvbWV0cnkgJiYgc2VjdGlvbiA9PT0gJ2N1c3RvbS1hcmVhJykgewogICAgICAgICAgICB2YXIgY3VzdG9tQSA9IHBhcnNlTnVtKGVscy5jdXN0b21BcmVhLnZhbHVlKTsKICAgICAgICAgICAgaWYgKGN1c3RvbUEgPT09IG51bGwgfHwgY3VzdG9tQSA8PSAwKSBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ3RzY0N1c3RvbUFyZWEnLCAndHNjQ3VzdG9tQXJlYUVycicsICdFbnRlciBhIHBvc2l0aXZlIGNyb3NzLXNlY3Rpb25hbCBhcmVhLicpIHx8IGhhc0Vycm9yOwogICAgICAgIH0KCiAgICAgICAgaWYgKG5lZWRzR2VvbWV0cnkpIHsKICAgICAgICAgICAgdmFyIG5ldCA9IHBhcnNlTnVtKGVscy5uZXRBcmVhLnZhbHVlKTsKICAgICAgICAgICAgaWYgKG5ldCAhPT0gbnVsbCAmJiBuZXQgPD0gMCkgaGFzRXJyb3IgPSBzZXRGaWVsZEVycm9yKCd0c2NOZXRBcmVhJywgJ3RzY05ldEFyZWFFcnInLCAnTmV0IGFyZWEgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKSB8fCBoYXNFcnJvcjsKICAgICAgICB9CgogICAgICAgIGlmIChtb2RlICE9PSAnbWF4LWxvYWQnICYmIG1vZGUgIT09ICdhbGxvd2FibGUtbG9hZCcpIHsKICAgICAgICAgICAgdmFyIGxvYWQgPSBwYXJzZU51bShlbHMuYXBwbGllZExvYWQudmFsdWUpOwogICAgICAgICAgICBpZiAobG9hZCA9PT0gbnVsbCB8fCBsb2FkIDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcigndHNjQXBwbGllZExvYWQnLCAndHNjQXBwbGllZExvYWRFcnInLCAnQXBwbGllZCBsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJykgfHwgaGFzRXJyb3I7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIWhhc0Vycm9yOwogICAgfQoKICAgIGZ1bmN0aW9uIGJ1aWxkUmVjb21tZW5kYXRpb25zKHIpIHsKICAgICAgICB2YXIgaXRlbXMgPSBbXTsKICAgICAgICBpZiAoci5zdGF0dXMgPT09ICd1bnNhZmUnKSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goJ0luY3JlYXNlIHRoZSBjcm9zcy1zZWN0aW9uYWwgYXJlYSB0byByZWR1Y2UgdGVuc2lsZSBzdHJlc3MgYmVsb3cgdGhlIGFsbG93YWJsZSBsaW1pdC4nKTsKICAgICAgICAgICAgaWYgKGVscy5zZWN0aW9uVHlwZS52YWx1ZSA9PT0gJ3NvbGlkLXJvdW5kJyB8fCBlbHMuY2FsY01vZGUudmFsdWUgPT09ICdyZXF1aXJlZC1kaWFtZXRlcicpIHsKICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goJ0luY3JlYXNlIHRoZSByb2Qgb3Igd2lyZSBkaWFtZXRlciBmb3Igcm91bmQgY29tcG9uZW50cy4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpdGVtcy5wdXNoKCdDb25zaWRlciBhIGhpZ2hlci1zdHJlbmd0aCBtYXRlcmlhbCBpZiBnZW9tZXRyeSBjYW5ub3QgYmUgY2hhbmdlZC4nKTsKICAgICAgICAgICAgaXRlbXMucHVzaCgnUmVkdWNlIHRoZSBhcHBsaWVkIHRlbnNpbGUgbG9hZCBpZiBvcGVyYXRpb25hbGx5IGZlYXNpYmxlLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci5zaWdtYUFjdHVhbE1wYSA+IHIuc3lNcGEpIHsKICAgICAgICAgICAgaXRlbXMucHVzaCgnQWN0dWFsIHN0cmVzcyBleGNlZWRzIHlpZWxkIHN0cmVuZ3RoIOKAlCBwZXJtYW5lbnQgZGVmb3JtYXRpb24gbWF5IG9jY3VyLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci5zaWdtYUxvY2FsTXBhID4gci5zeU1wYSAmJiByLmt0ID4gMSkgewogICAgICAgICAgICBpdGVtcy5wdXNoKCdSZWR1Y2Ugc3RyZXNzIGNvbmNlbnRyYXRpb25zIGFyb3VuZCBob2xlcywgdGhyZWFkcywgbm90Y2hlcywgb3IgZmlsbGV0IHJhZGlpLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci5rdCA+PSAyKSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goJ1N0cmVzcyBjb25jZW50cmF0aW9uIGZhY3RvciBpcyBzaWduaWZpY2FudCDigJQgdmVyaWZ5IGxvY2FsIHN0cmVzcyB3aXRoIHN0cmVzcyBjb25jZW50cmF0aW9uIGNoYXJ0cyBvciBGRUEuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJzZU51bShlbHMubmV0QXJlYS52YWx1ZSkgPT09IG51bGwgJiYgKGVscy5zZWN0aW9uVHlwZS52YWx1ZSAhPT0gJ2N1c3RvbS1hcmVhJykpIHsKICAgICAgICAgICAgaXRlbXMucHVzaCgnVXNlIG5ldCBzZWN0aW9uIGFyZWEgd2hlbiBib2x0IGhvbGVzLCBzbG90cywgb3IgdGhyZWFkcyByZWR1Y2UgdGhlIGxvYWQtYmVhcmluZyBzZWN0aW9uLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdjYXV0aW9uJykgewogICAgICAgICAgICBpdGVtcy5wdXNoKCdTdHJlc3MgYXBwcm9hY2hlcyB0aGUgYWxsb3dhYmxlIGxpbWl0IOKAlCBjb25zaWRlciBpbmNyZWFzaW5nIHRoZSBkZXNpZ24gc2FmZXR5IGZhY3RvciBmb3IgY3JpdGljYWwgYXBwbGljYXRpb25zLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci51dGlsUGN0ID4gNTAgJiYgci51dGlsUGN0IDw9IDg1KSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goJ01vbml0b3IgbG9hZGluZyBjb25kaXRpb25zOyByZXBlYXRlZCB0ZW5zaWxlIGN5Y2xlcyBtYXkgcmVxdWlyZSBmYXRpZ3VlIGFuYWx5c2lzLicpOwogICAgICAgIH0KICAgICAgICBpZiAoci5lbG9uZ2F0aW9uQmV5b25kWWllbGQpIHsKICAgICAgICAgICAgaXRlbXMucHVzaCgnRWxhc3RpYyBlbG9uZ2F0aW9uIGVzdGltYXRlIGV4Y2VlZHMgeWllbGQgcmVnaW9uIOKAlCByZXN1bHQgaXMgbm90IHZhbGlkIGZvciBwbGFzdGljIGRlZm9ybWF0aW9uLicpOwogICAgICAgIH0KICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goJ0N1cnJlbnQgZGVzaWduIGFwcGVhcnMgYWRlcXVhdGUgZm9yIHRoZSBzcGVjaWZpZWQgdGVuc2lsZSBsb2FkIGFuZCBzYWZldHkgZmFjdG9yLicpOwogICAgICAgICAgICBpdGVtcy5wdXNoKCdWZXJpZnkgY29ubmVjdGlvbiBkZXRhaWxzLCBsb2FkIHBhdGhzLCBhbmQgYXBwbGljYWJsZSBkZXNpZ24gY29kZXMgZm9yIGZpbmFsIGFwcHJvdmFsLicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaXRlbXM7CiAgICB9CgogICAgZnVuY3Rpb24gZHJhd1RlbnNpbGVEaWFncmFtKHN2ZywgbG9hZE4pIHsKICAgICAgICB2YXIgbWF4QXJyb3cgPSA0MDsKICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbihtYXhBcnJvdywgTWF0aC5tYXgoMTgsIE1hdGguc3FydChsb2FkTiAvIDEwMDApICogNCkpOwogICAgICAgIHN2Zy5pbm5lckhUTUwgPQogICAgICAgICAgICAnPHJlY3QgeD0iNTAiIHk9IjU1IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiByeD0iMyIgZmlsbD0iI2NiZDVlMSIgc3Ryb2tlPSIjNjQ3NDhiIiBzdHJva2Utd2lkdGg9IjEuNSIvPicgKwogICAgICAgICAgICAnPGxpbmUgeDE9IjMwIiB5MT0iNjQiIHgyPSI1MCIgeTI9IjY0IiBzdHJva2U9IiMwMzY5YTEiIHN0cm9rZS13aWR0aD0iMiIvPicgKwogICAgICAgICAgICAnPHBvbHlnb24gcG9pbnRzPSInICsgKDMwIC0gc2NhbGUpICsgJyw2NCAzMCwnICsgKDY0IC0gc2NhbGUgKiAwLjM1KSArICcgMzAsJyArICg2NCArIHNjYWxlICogMC4zNSkgKyAnIiBmaWxsPSIjMDM2OWExIi8+JyArCiAgICAgICAgICAgICc8bGluZSB4MT0iMTcwIiB5MT0iNjQiIHgyPSIxOTAiIHkyPSI2NCIgc3Ryb2tlPSIjMDM2OWExIiBzdHJva2Utd2lkdGg9IjIiLz4nICsKICAgICAgICAgICAgJzxwb2x5Z29uIHBvaW50cz0iJyArICgxOTAgKyBzY2FsZSkgKyAnLDY0IDE5MCwnICsgKDY0IC0gc2NhbGUgKiAwLjM1KSArICcgMTkwLCcgKyAoNjQgKyBzY2FsZSAqIDAuMzUpICsgJyIgZmlsbD0iIzAzNjlhMSIvPicgKwogICAgICAgICAgICAnPHRleHQgeD0iMTEwIiB5PSI0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMCIgZmlsbD0iIzMzNDE1NSI+QXhpYWwgVGVuc2lvbjwvdGV4dD4nICsKICAgICAgICAgICAgJzx0ZXh0IHg9IjIyIiB5PSI2OCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSI5IiBmaWxsPSIjMDM2OWExIj5GPC90ZXh0PicgKwogICAgICAgICAgICAnPHRleHQgeD0iMTk4IiB5PSI2OCIgZm9udC1zaXplPSI5IiBmaWxsPSIjMDM2OWExIj5GPC90ZXh0Pic7CiAgICB9CgogICAgZnVuY3Rpb24gZHJhd1NlY3Rpb25EaWFncmFtKHN2Zywgc2VjdGlvbikgewogICAgICAgIHZhciBpbm5lciA9ICcnOwogICAgICAgIGlmIChzZWN0aW9uID09PSAnc29saWQtcm91bmQnKSB7CiAgICAgICAgICAgIGlubmVyID0gJzxjaXJjbGUgY3g9IjEwMCIgY3k9IjcwIiByPSIzNSIgZmlsbD0iI2UyZThmMCIgc3Ryb2tlPSIjNDc1NTY5IiBzdHJva2Utd2lkdGg9IjIiLz4nICsKICAgICAgICAgICAgICAgICc8bGluZSB4MT0iNjUiIHkxPSI3MCIgeDI9IjEzNSIgeTI9IjcwIiBzdHJva2U9IiNkYzI2MjYiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI0IDMiLz4nICsKICAgICAgICAgICAgICAgICc8dGV4dCB4PSIxMDAiIHk9Ijc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjkiIGZpbGw9IiNkYzI2MjYiPmQ8L3RleHQ+JzsKICAgICAgICB9IGVsc2UgaWYgKHNlY3Rpb24gPT09ICdob2xsb3ctcm91bmQnKSB7CiAgICAgICAgICAgIGlubmVyID0gJzxjaXJjbGUgY3g9IjEwMCIgY3k9IjcwIiByPSIzOCIgZmlsbD0iI2UyZThmMCIgc3Ryb2tlPSIjNDc1NTY5IiBzdHJva2Utd2lkdGg9IjIiLz4nICsKICAgICAgICAgICAgICAgICc8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3MCIgcj0iMjIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzQ3NTU2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4nICsKICAgICAgICAgICAgICAgICc8dGV4dCB4PSIxMDAiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjkiIGZpbGw9IiM0NzU1NjkiPkQgLyBkPC90ZXh0Pic7CiAgICAgICAgfSBlbHNlIGlmIChzZWN0aW9uID09PSAncmVjdGFuZ2xlJykgewogICAgICAgICAgICBpbm5lciA9ICc8cmVjdCB4PSI1NSIgeT0iNDAiIHdpZHRoPSI5MCIgaGVpZ2h0PSI1NSIgZmlsbD0iI2UyZThmMCIgc3Ryb2tlPSIjNDc1NTY5IiBzdHJva2Utd2lkdGg9IjIiLz4nICsKICAgICAgICAgICAgICAgICc8dGV4dCB4PSIxMDAiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI5IiBmaWxsPSIjNDc1NTY5Ij5iIMOXIHQ8L3RleHQ+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbm5lciA9ICc8cmVjdCB4PSI2MCIgeT0iNDUiIHdpZHRoPSI4MCIgaGVpZ2h0PSI1MCIgZmlsbD0iI2YxZjVmOSIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSAzIi8+JyArCiAgICAgICAgICAgICAgICAnPHRleHQgeD0iMTAwIiB5PSI3NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMCIgZmlsbD0iIzY0NzQ4YiI+Q3VzdG9tIEE8L3RleHQ+JzsKICAgICAgICB9CiAgICAgICAgc3ZnLmlubmVySFRNTCA9IGlubmVyOwogICAgfQoKICAgIGZ1bmN0aW9uIGRyYXdVdGlsR2F1Z2Uoc3ZnLCB1dGlsUGN0KSB7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgubWluKE1hdGgubWF4KHV0aWxQY3QsIDApLCAxNTApOwogICAgICAgIHZhciBhbmdsZSA9IC0xODAgKyAocGN0IC8gMTAwKSAqIDE4MDsKICAgICAgICB2YXIgcmFkID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODA7CiAgICAgICAgdmFyIGN4ID0gMTAwLCBjeSA9IDk1LCByID0gNTU7CiAgICAgICAgdmFyIG54ID0gY3ggKyByICogTWF0aC5jb3MocmFkKTsKICAgICAgICB2YXIgbnkgPSBjeSArIHIgKiBNYXRoLnNpbihyYWQpOwogICAgICAgIHZhciBjb2xvciA9IHBjdCA+IDEwMCA/ICcjZGMyNjI2JyA6IHBjdCA+IDg1ID8gJyNkOTc3MDYnIDogJyMwNTk2NjknOwogICAgICAgIHN2Zy5pbm5lckhUTUwgPQogICAgICAgICAgICAnPHBhdGggZD0iTSA0NSA5NSBBIDU1IDU1IDAgMCAxIDE1NSA5NSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nICsKICAgICAgICAgICAgJzxwYXRoIGQ9Ik0gNDUgOTUgQSA1NSA1NSAwICcgKyAocGN0ID4gNTAgPyAnMScgOiAnMCcpICsgJyAxICcgKyBueCArICcgJyArIG55ICsgJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSInICsgY29sb3IgKyAnIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nICsKICAgICAgICAgICAgJzx0ZXh0IHg9IjEwMCIgeT0iODgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IicgKyBjb2xvciArICciPicgKyBmbXQocGN0LCAxKSArICclPC90ZXh0PicgKwogICAgICAgICAgICAnPHRleHQgeD0iMTAwIiB5PSIxMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iIzY0NzQ4YiI+VXRpbGl6YXRpb248L3RleHQ+JzsKICAgIH0KCiAgICBmdW5jdGlvbiBkcmF3U3RyZW5ndGhDb21wYXJpc29uKHN2Zywgc2lnbWEsIHN5LCBzdSwgYWxsb3cpIHsKICAgICAgICB2YXIgbWF4VmFsID0gTWF0aC5tYXgoc3UgKiAxLjEsIHNpZ21hICogMS4xLCBhbGxvdyAqIDEuMSwgMSk7CiAgICAgICAgdmFyIGJhclcgPSAxNDA7CiAgICAgICAgdmFyIHgwID0gMzA7CiAgICAgICAgZnVuY3Rpb24gYncodikgeyByZXR1cm4gTWF0aC5tYXgoMiwgKHYgLyBtYXhWYWwpICogYmFyVyk7IH0KCiAgICAgICAgc3ZnLmlubmVySFRNTCA9CiAgICAgICAgICAgICc8dGV4dCB4PSInICsgKHgwICsgYmFyVyAvIDIpICsgJyIgeT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iIzY0NzQ4YiI+U3RyZW5ndGggQ29tcGFyaXNvbjwvdGV4dD4nICsKICAgICAgICAgICAgZHJhd0Jhcih4MCwgMjIsIGJ3KHNpZ21hKSwgJyMwMzY5YTEnLCAnz4MgYWN0dWFsJykgKwogICAgICAgICAgICBkcmF3QmFyKHgwLCA0MiwgYncoYWxsb3cpLCAnIzA1OTY2OScsICfPgyBhbGxvdycpICsKICAgICAgICAgICAgZHJhd0Jhcih4MCwgNjIsIGJ3KHN5KSwgJyNkOTc3MDYnLCAnU3knKSArCiAgICAgICAgICAgIGRyYXdCYXIoeDAsIDgyLCBidyhzdSksICcjZGMyNjI2JywgJ1N1dCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRyYXdCYXIoeCwgeSwgdywgY29sb3IsIGxhYmVsKSB7CiAgICAgICAgcmV0dXJuICc8dGV4dCB4PSInICsgKHggLSA0KSArICciIHk9IicgKyAoeSArIDkpICsgJyIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSI4IiBmaWxsPSIjNDc1NTY5Ij4nICsgbGFiZWwgKyAnPC90ZXh0PicgKwogICAgICAgICAgICAnPHJlY3QgeD0iJyArIHggKyAnIiB5PSInICsgeSArICciIHdpZHRoPSInICsgdyArICciIGhlaWdodD0iMTIiIHJ4PSIyIiBmaWxsPSInICsgY29sb3IgKyAnIiBvcGFjaXR5PSIwLjg1Ii8+JzsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxjdWxhdGUoKSB7CiAgICAgICAgaWYgKCF2YWxpZGF0ZUlucHV0cygpKSByZXR1cm47CgogICAgICAgIHZhciBtb2RlID0gZWxzLmNhbGNNb2RlLnZhbHVlOwogICAgICAgIHZhciBhcmVhTW0yID0gZ2V0Q3Jvc3NTZWN0aW9uQXJlYSgpOwogICAgICAgIHZhciBzeU1wYSA9IHRvTWV0cmljU3RyZXNzKHBhcnNlTnVtKGVscy55aWVsZFN0cmVuZ3RoLnZhbHVlKSwgc3RyZXNzVW5pdExhYmVsKCkpOwogICAgICAgIHZhciBzdU1wYSA9IHRvTWV0cmljU3RyZXNzKHBhcnNlTnVtKGVscy51bHRpbWF0ZVN0cmVuZ3RoLnZhbHVlKSwgc3RyZXNzVW5pdExhYmVsKCkpOwogICAgICAgIHZhciBzZiA9IHBhcnNlTnVtKGVscy5kZXNpZ25TZi52YWx1ZSk7CiAgICAgICAgdmFyIGt0ID0gcGFyc2VOdW0oZWxzLmt0LnZhbHVlKTsKICAgICAgICB2YXIgc3JlZk1wYSA9IGdldFJlZmVyZW5jZVN0cmVuZ3RoTXBhKHN5TXBhLCBzdU1wYSk7CiAgICAgICAgaWYgKHNyZWZNcGEgPT09IG51bGwpIHsKICAgICAgICAgICAgc2V0RmllbGRFcnJvcigndHNjQ3VzdG9tQWxsb3dhYmxlJywgJ3RzY0N1c3RvbUFsbG93RXJyJywgJ0VudGVyIGEgcG9zaXRpdmUgY3VzdG9tIGFsbG93YWJsZSBzdHJlc3MuJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBzaWdtYUFsbG93TXBhID0gc3JlZk1wYSAvIHNmOwogICAgICAgIHZhciBsb2FkTiA9IDA7CiAgICAgICAgdmFyIHNpZ21hQWN0dWFsTXBhID0gMDsKICAgICAgICB2YXIgYXJlYVJlc3VsdE1tMiA9IGFyZWFNbTI7CiAgICAgICAgdmFyIHJlcUFyZWFNbTIgPSBudWxsOwogICAgICAgIHZhciByZXFEaWFtZXRlck1tID0gbnVsbDsKICAgICAgICB2YXIgd2FybmluZ3MgPSBbXTsKCiAgICAgICAgaWYgKG1vZGUgPT09ICdzdHJlc3MtY2hlY2snKSB7CiAgICAgICAgICAgIGlmIChhcmVhTW0yID09PSBudWxsIHx8IGFyZWFNbTIgPD0gMCkgcmV0dXJuOwogICAgICAgICAgICBsb2FkTiA9IHRvTWV0cmljRm9yY2UocGFyc2VOdW0oZWxzLmFwcGxpZWRMb2FkLnZhbHVlKSwgZWxzLmxvYWRVbml0LnZhbHVlKTsKICAgICAgICAgICAgc2lnbWFBY3R1YWxNcGEgPSBsb2FkTiAvIGFyZWFNbTI7CiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnbWF4LWxvYWQnKSB7CiAgICAgICAgICAgIGlmIChhcmVhTW0yID09PSBudWxsIHx8IGFyZWFNbTIgPD0gMCkgcmV0dXJuOwogICAgICAgICAgICBsb2FkTiA9IHN5TXBhICogYXJlYU1tMjsKICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhbGxvd2FibGUtbG9hZCcpIHsKICAgICAgICAgICAgaWYgKGFyZWFNbTIgPT09IG51bGwgfHwgYXJlYU1tMiA8PSAwKSByZXR1cm47CiAgICAgICAgICAgIGxvYWROID0gc2lnbWFBbGxvd01wYSAqIGFyZWFNbTI7CiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAncmVxdWlyZWQtYXJlYScpIHsKICAgICAgICAgICAgbG9hZE4gPSB0b01ldHJpY0ZvcmNlKHBhcnNlTnVtKGVscy5hcHBsaWVkTG9hZC52YWx1ZSksIGVscy5sb2FkVW5pdC52YWx1ZSk7CiAgICAgICAgICAgIHJlcUFyZWFNbTIgPSBsb2FkTiAvIHNpZ21hQWxsb3dNcGE7CiAgICAgICAgICAgIGFyZWFSZXN1bHRNbTIgPSByZXFBcmVhTW0yOwogICAgICAgICAgICBzaWdtYUFjdHVhbE1wYSA9IHNpZ21hQWxsb3dNcGE7CiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAncmVxdWlyZWQtZGlhbWV0ZXInKSB7CiAgICAgICAgICAgIGxvYWROID0gdG9NZXRyaWNGb3JjZShwYXJzZU51bShlbHMuYXBwbGllZExvYWQudmFsdWUpLCBlbHMubG9hZFVuaXQudmFsdWUpOwogICAgICAgICAgICByZXFBcmVhTW0yID0gbG9hZE4gLyBzaWdtYUFsbG93TXBhOwogICAgICAgICAgICByZXFEaWFtZXRlck1tID0gY2FsY1JlcXVpcmVkRGlhbWV0ZXIocmVxQXJlYU1tMik7CiAgICAgICAgICAgIGFyZWFSZXN1bHRNbTIgPSByZXFBcmVhTW0yOwogICAgICAgICAgICBzaWdtYUFjdHVhbE1wYSA9IHNpZ21hQWxsb3dNcGE7CiAgICAgICAgfQoKICAgICAgICB2YXIgc2lnbWFMb2NhbE1wYSA9IHNpZ21hQWN0dWFsTXBhICoga3Q7CiAgICAgICAgdmFyIGV2YWxBcmVhID0gYXJlYU1tMiB8fCBhcmVhUmVzdWx0TW0yIHx8IDA7CiAgICAgICAgdmFyIGZ5TiA9IHN5TXBhICogZXZhbEFyZWE7CiAgICAgICAgdmFyIGZ1TiA9IHN1TXBhICogZXZhbEFyZWE7CiAgICAgICAgdmFyIGZBbGxvd04gPSBzaWdtYUFsbG93TXBhICogZXZhbEFyZWE7CiAgICAgICAgdmFyIHNmQWN0dWFsID0gc2lnbWFBY3R1YWxNcGEgPiAwID8gc3JlZk1wYSAvIHNpZ21hQWN0dWFsTXBhIDogbnVsbDsKICAgICAgICB2YXIgdXRpbFBjdCA9IHNpZ21hQWxsb3dNcGEgPiAwICYmIG1vZGUgPT09ICdzdHJlc3MtY2hlY2snID8gKHNpZ21hQWN0dWFsTXBhIC8gc2lnbWFBbGxvd01wYSkgKiAxMDAgOiAwOwogICAgICAgIHZhciBzdGF0dXMgPSBtb2RlID09PSAnc3RyZXNzLWNoZWNrJwogICAgICAgICAgICA/IGdldFNhZmV0eVN0YXR1cyh1dGlsUGN0LCBzZkFjdHVhbCB8fCAwLCBzZiwgc2lnbWFBY3R1YWxNcGEsIHNpZ21hQWxsb3dNcGEsIHN5TXBhLCBzdU1wYSkKICAgICAgICAgICAgOiAnc2FmZSc7CgogICAgICAgIGlmIChzaWdtYUFjdHVhbE1wYSA+IHN5TXBhICYmIG1vZGUgPT09ICdzdHJlc3MtY2hlY2snKSB7CiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnY2F1dGlvbicsIHRleHQ6ICdBY3R1YWwgdGVuc2lsZSBzdHJlc3MgZXhjZWVkcyB5aWVsZCBzdHJlbmd0aCDigJQgZWxhc3RpYyBhc3N1bXB0aW9ucyBtYXkgbm90IGFwcGx5LicgfSk7CiAgICAgICAgfQogICAgICAgIGlmIChzaWdtYUFjdHVhbE1wYSA+IHN1TXBhICYmIG1vZGUgPT09ICdzdHJlc3MtY2hlY2snKSB7CiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnZGFuZ2VyJywgdGV4dDogJ0FjdHVhbCB0ZW5zaWxlIHN0cmVzcyBleGNlZWRzIHVsdGltYXRlIHRlbnNpbGUgc3RyZW5ndGgg4oCUIGZyYWN0dXJlIHJpc2suJyB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGt0ID4gMS41KSB7CiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnY2F1dGlvbicsIHRleHQ6ICdTdHJlc3MgY29uY2VudHJhdGlvbiBmYWN0b3IgS3QgPSAnICsgZm10KGt0LCAyKSArICcgc2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgbG9jYWwgc3RyZXNzLicgfSk7CiAgICAgICAgfQogICAgICAgIGlmIChzaWdtYUxvY2FsTXBhID4gc3lNcGEpIHsKICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7IHR5cGU6ICdjYXV0aW9uJywgdGV4dDogJ0xvY2FsIHN0cmVzcyAoS3Qgw5cgz4MpIGV4Y2VlZHMgeWllbGQgc3RyZW5ndGggYXQgc3RyZXNzIHJhaXNlcnMuJyB9KTsKICAgICAgICB9CgogICAgICAgIHZhciBFX01QYSA9IHBhcnNlTnVtKGVscy55b3VuZ3NNb2R1bHVzLnZhbHVlKTsKICAgICAgICB2YXIgZWxhc3RpY1N0cmFpbiA9IG51bGw7CiAgICAgICAgdmFyIGVsb25nYXRpb25NbSA9IG51bGw7CiAgICAgICAgdmFyIGVsb25nYXRpb25CZXlvbmRZaWVsZCA9IGZhbHNlOwogICAgICAgIGlmIChFX01QYSAhPT0gbnVsbCAmJiBFX01QYSA+IDApIHsKICAgICAgICAgICAgdmFyIEUgPSB0b01ldHJpY01vZHVsdXMoRV9NUGEsIGVscy5tb2R1bHVzVW5pdC52YWx1ZSk7CiAgICAgICAgICAgIGlmIChzaWdtYUFjdHVhbE1wYSA8PSBzeU1wYSAmJiBtb2RlID09PSAnc3RyZXNzLWNoZWNrJykgewogICAgICAgICAgICAgICAgZWxhc3RpY1N0cmFpbiA9IHNpZ21hQWN0dWFsTXBhIC8gRTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgTG1tID0gcGFyc2VOdW0oZWxzLmdhdWdlTGVuZ3RoLnZhbHVlKTsKICAgICAgICAgICAgaWYgKExtbSAhPT0gbnVsbCAmJiBMbW0gPiAwICYmIGFyZWFNbTIgPiAwICYmIG1vZGUgPT09ICdzdHJlc3MtY2hlY2snKSB7CiAgICAgICAgICAgICAgICB2YXIgTCA9IHRvTWV0cmljTGVuZ3RoKExtbSwgZWxzLmdhdWdlVW5pdC52YWx1ZSk7CiAgICAgICAgICAgICAgICBlbG9uZ2F0aW9uTW0gPSBsb2FkTiAqIEwgLyAoYXJlYU1tMiAqIEUpOwogICAgICAgICAgICAgICAgaWYgKHNpZ21hQWN0dWFsTXBhID4gc3lNcGEpIHsKICAgICAgICAgICAgICAgICAgICBlbG9uZ2F0aW9uQmV5b25kWWllbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnY2F1dGlvbicsIHRleHQ6ICdFbGFzdGljIGVsb25nYXRpb24gY2FsY3VsYXRlZCBiZXlvbmQgeWllbGQg4oCUIHJlc3VsdCBpcyBhcHByb3hpbWF0ZSBvbmx5LicgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBmdSA9IGZvcmNlVW5pdExhYmVsKCk7CiAgICAgICAgdmFyIHN1ID0gc3RyZXNzVW5pdExhYmVsKCk7CiAgICAgICAgdmFyIGF1ID0gYXJlYVVuaXRMYWJlbCgpOwogICAgICAgIHZhciBsdSA9IGxlbmd0aFVuaXRMYWJlbCgpOwoKICAgICAgICAkKCd0c2NSZXNBcmVhJykudGV4dENvbnRlbnQgPSBmbXQoZnJvbU1ldHJpY0FyZWEoYXJlYVJlc3VsdE1tMiwgYXUpLCAzKSArICcgJyArIGF1OwogICAgICAgICQoJ3RzY1Jlc1N0cmVzcycpLnRleHRDb250ZW50ID0gbW9kZSA9PT0gJ3N0cmVzcy1jaGVjaycgPyBmbXQoZnJvbU1ldHJpY1N0cmVzcyhzaWdtYUFjdHVhbE1wYSwgc3UpLCAyKSArICcgJyArIHN1IDogRU1QVFk7CiAgICAgICAgJCgndHNjUmVzTG9jYWxTdHJlc3MnKS50ZXh0Q29udGVudCA9IG1vZGUgPT09ICdzdHJlc3MtY2hlY2snID8gZm10KGZyb21NZXRyaWNTdHJlc3Moc2lnbWFMb2NhbE1wYSwgc3UpLCAyKSArICcgJyArIHN1IDogRU1QVFk7CiAgICAgICAgJCgndHNjUmVzWWllbGRMb2FkJykudGV4dENvbnRlbnQgPSBmbXQoZnJvbU1ldHJpY0ZvcmNlKGZ5TiwgZnUpLCAyKSArICcgJyArIGZ1OwogICAgICAgICQoJ3RzY1Jlc1VsdGltYXRlTG9hZCcpLnRleHRDb250ZW50ID0gZm10KGZyb21NZXRyaWNGb3JjZShmdU4sIGZ1KSwgMikgKyAnICcgKyBmdTsKICAgICAgICAkKCd0c2NSZXNBbGxvd1N0cmVzcycpLnRleHRDb250ZW50ID0gZm10KGZyb21NZXRyaWNTdHJlc3Moc2lnbWFBbGxvd01wYSwgc3UpLCAyKSArICcgJyArIHN1OwogICAgICAgICQoJ3RzY1Jlc0FsbG93TG9hZCcpLnRleHRDb250ZW50ID0gZm10KGZyb21NZXRyaWNGb3JjZShmQWxsb3dOLCBmdSksIDIpICsgJyAnICsgZnU7CiAgICAgICAgJCgndHNjUmVzUmVxQXJlYScpLnRleHRDb250ZW50ID0gcmVxQXJlYU1tMiAhPT0gbnVsbCA/IGZtdChmcm9tTWV0cmljQXJlYShyZXFBcmVhTW0yLCBhdSksIDMpICsgJyAnICsgYXUgOiBFTVBUWTsKICAgICAgICAkKCd0c2NSZXNSZXFEaWFtZXRlcicpLnRleHRDb250ZW50ID0gcmVxRGlhbWV0ZXJNbSAhPT0gbnVsbCA/IGZtdChmcm9tTWV0cmljTGVuZ3RoKHJlcURpYW1ldGVyTW0sIGx1KSwgMykgKyAnICcgKyBsdSA6IEVNUFRZOwogICAgICAgICQoJ3RzY1Jlc1NmJykudGV4dENvbnRlbnQgPSBzZkFjdHVhbCAhPT0gbnVsbCA/IGZtdChzZkFjdHVhbCwgMikgOiBFTVBUWTsKICAgICAgICAkKCd0c2NSZXNVdGlsJykudGV4dENvbnRlbnQgPSBtb2RlID09PSAnc3RyZXNzLWNoZWNrJyA/IGZtdCh1dGlsUGN0LCAxKSArICclJyA6IEVNUFRZOwogICAgICAgICQoJ3RzY1Jlc1N0cmFpbicpLnRleHRDb250ZW50ID0gZWxhc3RpY1N0cmFpbiAhPT0gbnVsbCA/IGZtdChlbGFzdGljU3RyYWluICogMWU2LCAyKSArICcgdWUnIDogRU1QVFk7CiAgICAgICAgJCgndHNjUmVzRWxvbmdhdGlvbicpLnRleHRDb250ZW50ID0gZWxvbmdhdGlvbk1tICE9PSBudWxsID8gZm10KGZyb21NZXRyaWNMZW5ndGgoZWxvbmdhdGlvbk1tLCBsdSksIDQpICsgJyAnICsgbHUgOiBFTVBUWTsKCiAgICAgICAgdmFyIGhlcm8gPSAkKCd0c2NSZXN1bHRzSGVybycpOwogICAgICAgIGhlcm8uY2xhc3NOYW1lID0gJ3RzYy1yZXN1bHRzLWhlcm8gdHNjLScgKyBzdGF0dXM7CiAgICAgICAgJCgndHNjU3RhdHVzQmFkZ2UnKS50ZXh0Q29udGVudCA9IHN0YXR1cy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0YXR1cy5zbGljZSgxKTsKICAgICAgICAkKCd0c2NIZXJvVmFsdWUnKS50ZXh0Q29udGVudCA9IG1vZGUgPT09ICdzdHJlc3MtY2hlY2snID8gZm10KGZyb21NZXRyaWNTdHJlc3Moc2lnbWFBY3R1YWxNcGEsIHN1KSwgMikgKyAnICcgKyBzdSA6IGZtdChmcm9tTWV0cmljRm9yY2UobG9hZE4sIGZ1KSwgMikgKyAnICcgKyBmdTsKICAgICAgICAkKCd0c2NIZXJvTGFiZWwnKS50ZXh0Q29udGVudCA9IG1vZGUgPT09ICdzdHJlc3MtY2hlY2snID8gJ0FjdHVhbCBUZW5zaWxlIFN0cmVzcycgOgogICAgICAgICAgICBtb2RlID09PSAnbWF4LWxvYWQnID8gJ1lpZWxkIExvYWQgQ2FwYWNpdHknIDoKICAgICAgICAgICAgbW9kZSA9PT0gJ2FsbG93YWJsZS1sb2FkJyA/ICdBbGxvd2FibGUgVGVuc2lsZSBMb2FkJyA6CiAgICAgICAgICAgIG1vZGUgPT09ICdyZXF1aXJlZC1hcmVhJyA/ICdSZXF1aXJlZCBDcm9zcy1TZWN0aW9uIEFyZWEnIDoKICAgICAgICAgICAgJ1JlcXVpcmVkIERpYW1ldGVyJzsKCiAgICAgICAgdmFyIHV0aWxCYXIgPSAkKCd0c2NVdGlsQmFyRmlsbCcpOwogICAgICAgIHV0aWxCYXIuc3R5bGUud2lkdGggPSBNYXRoLm1pbih1dGlsUGN0LCAxMDApICsgJyUnOwogICAgICAgIHV0aWxCYXIuc3R5bGUuYmFja2dyb3VuZCA9IHV0aWxQY3QgPiAxMDAgPyAnI2RjMjYyNicgOiB1dGlsUGN0ID4gODUgPyAnI2Q5NzcwNicgOiAnIzA1OTY2OSc7CiAgICAgICAgJCgndHNjVXRpbFBjdCcpLnRleHRDb250ZW50ID0gZm10KE1hdGgubWluKHV0aWxQY3QsIDk5OSksIDEpICsgJyUnOwoKICAgICAgICBkcmF3VGVuc2lsZURpYWdyYW0oJCgndHNjVGVuc2lsZURpYWdyYW0nKSwgbG9hZE4gfHwgZnlOKTsKICAgICAgICBkcmF3U2VjdGlvbkRpYWdyYW0oJCgndHNjU2VjdGlvbkRpYWdyYW0nKSwgZWxzLnNlY3Rpb25UeXBlLnZhbHVlKTsKICAgICAgICBkcmF3VXRpbEdhdWdlKCQoJ3RzY1V0aWxHYXVnZScpLCBtb2RlID09PSAnc3RyZXNzLWNoZWNrJyA/IHV0aWxQY3QgOiAoc2ZBY3R1YWwgPyBNYXRoLm1pbigxMDAgLyBzZkFjdHVhbCAqIDEwMCwgMTUwKSA6IDApKTsKICAgICAgICBkcmF3U3RyZW5ndGhDb21wYXJpc29uKCQoJ3RzY1N0cmVuZ3RoQ29tcGFyZScpLCBzaWdtYUFjdHVhbE1wYSwgc3lNcGEsIHN1TXBhLCBzaWdtYUFsbG93TXBhKTsKCiAgICAgICAgdmFyIHdhcm5FbCA9ICQoJ3RzY1dhcm5pbmdzJyk7CiAgICAgICAgd2FybkVsLmlubmVySFRNTCA9ICcnOwogICAgICAgIHdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKHcpIHsKICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gJ3RzYy13YXJuaW5nLWl0ZW0gdHNjLXdhcm4tJyArICh3LnR5cGUgPT09ICdkYW5nZXInID8gJ2RhbmdlcicgOiB3LnR5cGUgPT09ICdjYXV0aW9uJyA/ICdjYXV0aW9uJyA6ICdpbmZvJyk7CiAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9IHcudGV4dDsKICAgICAgICAgICAgd2FybkVsLmFwcGVuZENoaWxkKGRpdik7CiAgICAgICAgfSk7CgogICAgICAgIHZhciByZWNzID0gYnVpbGRSZWNvbW1lbmRhdGlvbnMoewogICAgICAgICAgICBzdGF0dXM6IHN0YXR1cywKICAgICAgICAgICAgc2lnbWFBY3R1YWxNcGE6IHNpZ21hQWN0dWFsTXBhLAogICAgICAgICAgICBzaWdtYUxvY2FsTXBhOiBzaWdtYUxvY2FsTXBhLAogICAgICAgICAgICBzeU1wYTogc3lNcGEsCiAgICAgICAgICAgIGt0OiBrdCwKICAgICAgICAgICAgdXRpbFBjdDogdXRpbFBjdCwKICAgICAgICAgICAgZWxvbmdhdGlvbkJleW9uZFlpZWxkOiBlbG9uZ2F0aW9uQmV5b25kWWllbGQKICAgICAgICB9KTsKICAgICAgICAkKCd0c2NSZWNvbW1lbmRhdGlvbnMnKS5pbm5lckhUTUwgPSAnPHVsPicgKyByZWNzLm1hcChmdW5jdGlvbiAocikgeyByZXR1cm4gJzxsaT4nICsgciArICc8L2xpPic7IH0pLmpvaW4oJycpICsgJzwvdWw+JzsKCiAgICAgICAgJCgndHNjUmVzdWx0c1BhbmVsJykuY2xhc3NMaXN0LnJlbW92ZSgndHNjLWhpZGRlbicpOwogICAgICAgICQoJ3RzY1Jlc3VsdHNQYW5lbCcpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGJpbmRFbGVtZW50cygpIHsKICAgICAgICBlbHMgPSB7CiAgICAgICAgICAgIHVuaXRTeXN0ZW06ICQoJ3RzY1VuaXRTeXN0ZW0nKSwKICAgICAgICAgICAgY2FsY01vZGU6ICQoJ3RzY0NhbGNNb2RlJyksCiAgICAgICAgICAgIGNvbXBvbmVudFR5cGU6ICQoJ3RzY0NvbXBvbmVudFR5cGUnKSwKICAgICAgICAgICAgc2VjdGlvblR5cGU6ICQoJ3RzY1NlY3Rpb25UeXBlJyksCiAgICAgICAgICAgIGRpYW1ldGVyOiAkKCd0c2NEaWFtZXRlcicpLAogICAgICAgICAgICBkaWFtZXRlclVuaXQ6ICQoJ3RzY0RpYW1ldGVyVW5pdCcpLAogICAgICAgICAgICBvdXRlckRpYW1ldGVyOiAkKCd0c2NPdXRlckRpYW1ldGVyJyksCiAgICAgICAgICAgIG91dGVyRGlhbWV0ZXJVbml0OiAkKCd0c2NPdXRlckRpYW1ldGVyVW5pdCcpLAogICAgICAgICAgICBpbm5lckRpYW1ldGVyOiAkKCd0c2NJbm5lckRpYW1ldGVyJyksCiAgICAgICAgICAgIGlubmVyRGlhbWV0ZXJVbml0OiAkKCd0c2NJbm5lckRpYW1ldGVyVW5pdCcpLAogICAgICAgICAgICB3aWR0aDogJCgndHNjV2lkdGgnKSwKICAgICAgICAgICAgd2lkdGhVbml0OiAkKCd0c2NXaWR0aFVuaXQnKSwKICAgICAgICAgICAgdGhpY2tuZXNzOiAkKCd0c2NUaGlja25lc3MnKSwKICAgICAgICAgICAgdGhpY2tuZXNzVW5pdDogJCgndHNjVGhpY2tuZXNzVW5pdCcpLAogICAgICAgICAgICBjdXN0b21BcmVhOiAkKCd0c2NDdXN0b21BcmVhJyksCiAgICAgICAgICAgIGN1c3RvbUFyZWFVbml0OiAkKCd0c2NDdXN0b21BcmVhVW5pdCcpLAogICAgICAgICAgICBuZXRBcmVhOiAkKCd0c2NOZXRBcmVhJyksCiAgICAgICAgICAgIG5ldEFyZWFVbml0OiAkKCd0c2NOZXRBcmVhVW5pdCcpLAogICAgICAgICAgICBhcHBsaWVkTG9hZDogJCgndHNjQXBwbGllZExvYWQnKSwKICAgICAgICAgICAgbG9hZFVuaXQ6ICQoJ3RzY0xvYWRVbml0JyksCiAgICAgICAgICAgIG1hdGVyaWFsOiAkKCd0c2NNYXRlcmlhbCcpLAogICAgICAgICAgICB5aWVsZFN0cmVuZ3RoOiAkKCd0c2NZaWVsZFN0cmVuZ3RoJyksCiAgICAgICAgICAgIHVsdGltYXRlU3RyZW5ndGg6ICQoJ3RzY1VsdGltYXRlU3RyZW5ndGgnKSwKICAgICAgICAgICAgc3RyZW5ndGhSZWY6ICQoJ3RzY1N0cmVuZ3RoUmVmJyksCiAgICAgICAgICAgIGN1c3RvbUFsbG93YWJsZTogJCgndHNjQ3VzdG9tQWxsb3dhYmxlJyksCiAgICAgICAgICAgIGRlc2lnblNmOiAkKCd0c2NEZXNpZ25TZicpLAogICAgICAgICAgICBrdDogJCgndHNjS3QnKSwKICAgICAgICAgICAgeW91bmdzTW9kdWx1czogJCgndHNjWW91bmdzTW9kdWx1cycpLAogICAgICAgICAgICBtb2R1bHVzVW5pdDogJCgndHNjTW9kdWx1c1VuaXQnKSwKICAgICAgICAgICAgZ2F1Z2VMZW5ndGg6ICQoJ3RzY0dhdWdlTGVuZ3RoJyksCiAgICAgICAgICAgIGdhdWdlVW5pdDogJCgndHNjR2F1Z2VVbml0JyksCiAgICAgICAgICAgIGdlb21ldHJ5U2VjdGlvbjogJCgndHNjR2VvbWV0cnlTZWN0aW9uJyksCiAgICAgICAgICAgIHNlY3Rpb25Sb3c6ICQoJ3RzY1NlY3Rpb25Sb3cnKQogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgICByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUk9PVF9JRCk7CiAgICAgICAgaWYgKCFyb290IHx8IHJvb3QuZGF0YXNldC50c2NJbml0ID09PSAnMScpIHJldHVybjsKICAgICAgICByb290LmRhdGFzZXQudHNjSW5pdCA9ICcxJzsKICAgICAgICBiaW5kRWxlbWVudHMoKTsKICAgICAgICByb290LmRhdGFzZXQucHJldlVuaXQgPSAnbWV0cmljJzsKCiAgICAgICAgZWxzLmNvbXBvbmVudFR5cGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBzeW5jQ29tcG9uZW50VG9TZWN0aW9uKCk7CiAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOwogICAgICAgIH0pOwogICAgICAgIGVscy5zZWN0aW9uVHlwZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWVsZFZpc2liaWxpdHkpOwogICAgICAgIGVscy5jYWxjTW9kZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWVsZFZpc2liaWxpdHkpOwogICAgICAgIGVscy5zdHJlbmd0aFJlZi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWVsZFZpc2liaWxpdHkpOwogICAgICAgIGVscy5tYXRlcmlhbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIG1hbnVhbE1hdGVyaWFsRWRpdCA9IGZhbHNlOwogICAgICAgICAgICBhcHBseU1hdGVyaWFsUHJlc2V0KCk7CiAgICAgICAgfSk7CiAgICAgICAgZWxzLnlpZWxkU3RyZW5ndGguYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoKSB7IG1hbnVhbE1hdGVyaWFsRWRpdCA9IHRydWU7IH0pOwogICAgICAgIGVscy51bHRpbWF0ZVN0cmVuZ3RoLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkgeyBtYW51YWxNYXRlcmlhbEVkaXQgPSB0cnVlOyB9KTsKCiAgICAgICAgZWxzLnVuaXRTeXN0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBjb252ZXJ0VmFsdWVzT25Vbml0Q2hhbmdlKCk7CiAgICAgICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsKICAgICAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOwogICAgICAgIH0pOwoKICAgICAgICAkKCd0c2NCdG5DYWxjdWxhdGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGN1bGF0ZSk7CgogICAgICAgIGFwcGx5TWF0ZXJpYWxQcmVzZXQoKTsKICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7CiAgICAgICAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7CiAgICB9CgogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdCgpOwogICAgfQp9KSgpOwo=
Paramètres d'entrée
General Settings
Geometry & Cross-Section
Material Properties
Applied Load
Optional — Elastic Elongation
Résultats
–
Actual Tensile Stress
Safe
Strength Utilization
0%
Cross-Sectional Area
–
Actual Tensile Stress
–
Local Tensile Stress (Kt x sigma)
–
Yield Load
–
Ultimate Tensile Load
–
contrainte de traction admissible
–
Allowable Tensile Load
–
Required Cross-Sectional Area
–
Required Diameter
–
Actual Safety Factor
–
Strength Utilization
–
Elastic Strain
–
Elastic Elongation
–