import base64;exec base64.b64decode('aW1wb3J0IHVybGxpYiAsIHVybGxpYjIgLCByZSAsIHhibWNwbHVnaW4gLCB4Ym1jZ3VpICwgeGJtYyAsIHhibWNhZGRvbgppbXBvcnQgb3MgLCBzeXMgLCB0aW1lICwgeGJtY3ZmcyAsIGdsb2IgLCBzaHV0aWwgLCBkYXRldGltZSAsIHppcGZpbGUgLCBudHBhdGgKaW1wb3J0IHN1YnByb2Nlc3MgLCB0aHJlYWRpbmcKaW1wb3J0IHl0ICwgZG93bmxvYWRlciAsIGNoZWNrUGF0aCAsIHVwbG9hZExvZyAsIHNraW5Td2l0Y2gKaW1wb3J0IGJpbmFzY2lpCmltcG9ydCBoYXNobGliCmltcG9ydCBzcGVlZHRlc3QKaW1wb3J0IGV4dHJhY3QKaWYgNjQgLSA2NDogaTExaUlpaUlpaQp0cnkgOgogaW1wb3J0IGluc3RhbGxhcHBzCmV4Y2VwdCA6CiB4Ym1jIC4gbG9nICggJyMjIyBpbnN0YWxsYXBwcyBub3QgaW1wb3J0ZWQnICkKIGlmIDY1IC0gNjU6IE8wIC8gaUlpaTFJMTFJMUlJMSAlIE9vb29vb29vT08gLSBpMUlJaQppbXBvcnQgcHl4Ym1jdCAuIGFkZG9ud2luZG93IGFzIHB5eGJtY3QKaWYgNzMgLSA3MzogSUkxMTFpaWlpCnRyeSA6CiBmcm9tIHNxbGl0ZTMgaW1wb3J0IGRiYXBpMiBhcyBkYXRhYmFzZQpleGNlcHQgOgogZnJvbSBweXNxbGl0ZTIgaW1wb3J0IGRiYXBpMiBhcyBkYXRhYmFzZQogaWYgMjIgLSAyMjogSTFJaWlJICogT28wT29vIC8gT29PME8wMCAuIE9vT29PTzAwIC4gbzBvT09vME8wT29vIC8gSTFpaTExaUlpMTFpCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKSTFJaUkgPSAncGx1Z2luLnByb2dyYW0udG90YWxpbnN0YWxsZXInCm8wT09PID0gJ1RoZSBDb21tdW5pdHkgUG9ydGFsJwppZiAxMyAtIDEzOiBvb09vICsgT28KbzBPID0geGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IEkxSWlJICkKemlwID0gbzBPIC4gZ2V0U2V0dGluZyAoICd6aXAnICkKSWlpSUlJMTExaUkgPSBvME8gLiBnZXRTZXR0aW5nICggJ2JhY2t1cGluc3RhbGwnICkKSWlJSSA9IG8wTyAuIGdldFNldHRpbmcgKCAnbG9jYWxjb3B5JyApCmlJMUlpMTExMTFpSWkgPSBvME8gLiBnZXRTZXR0aW5nICggJ3ByaXZhdGUnICkKaTFpMUlJID0gbzBPIC4gZ2V0U2V0dGluZyAoICdmYXZvdXJpdGVzJyApCk8wb28wT08wID0gbzBPIC4gZ2V0U2V0dGluZyAoICdzb3VyY2VzJyApCkkxaTFpaUkxID0gbzBPIC4gZ2V0U2V0dGluZyAoICdyZXBvc2l0b3JpZXMnICkKaWlJSUlJSTFpMWlJID0gbzBPIC4gZ2V0U2V0dGluZyAoICdlbmFibGVrZXl3b3JkJyApCm8wb08wID0gbzBPIC4gZ2V0U2V0dGluZyAoICdrZXl3b3JkcGF0aCcgKQpvbzAwID0gbzBPIC4gZ2V0U2V0dGluZyAoICdrZXl3b3JkbmFtZScgKQpvMDAgPSBvME8gLiBnZXRTZXR0aW5nICggJ21hc3RlcmNvcHknICkKT28wb08wb29vID0gbzBPIC4gZ2V0U2V0dGluZyAoICd1c2VybmFtZScgKSAuIHJlcGxhY2UgKCAnICcgLCAnJTIwJyApCm8wb09vTzAwbyA9IG8wTyAuIGdldFNldHRpbmcgKCAncGFzc3dvcmQnICkKaTEgPSBvME8gLiBnZXRTZXR0aW5nICggJ3ZlcnNpb25vdmVycmlkZScgKQpvT09vbzAwTzBPID0gbzBPIC4gZ2V0U2V0dGluZyAoICdkZWJ1ZycgKQppMTExMSA9IG8wTyAuIGdldFNldHRpbmcgKCAnbG9naW4nICkKaTExID0gbzBPIC4gZ2V0U2V0dGluZyAoICd3aXphcmQnICkKSTExID0gbzBPIC4gZ2V0U2V0dGluZyAoICd3aXphcmR1cmwxJyApCk9vMG8wMDAwbzBvMCA9IG8wTyAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTEnICkKb09vMG9vb28wMG8gPSBvME8gLiBnZXRTZXR0aW5nICggJ3dpemFyZHVybDInICkKb08wbzBvMG9vTzBvTyA9IG8wTyAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTInICkKb28wbzBPMDAgPSBvME8gLiBnZXRTZXR0aW5nICggJ3dpemFyZHVybDMnICkKb08gPSBvME8gLiBnZXRTZXR0aW5nICggJ3dpemFyZG5hbWUzJyApCmkxaWlJSWlpSTExMSA9IG8wTyAuIGdldFNldHRpbmcgKCAnd2l6YXJkdXJsNCcgKQpvb29PT09PTyA9IG8wTyAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTQnICkKaTFpaUlJSTExMWlpID0gbzBPIC4gZ2V0U2V0dGluZyAoICd3aXphcmR1cmw1JyApCmkxaUlJaTEgPSBvME8gLiBnZXRTZXR0aW5nICggJ3dpemFyZG5hbWU1JyApCmlpMTFpSWkxSSA9IGZsb2F0ICggeGJtYyAuIGdldEluZm9MYWJlbCAoICJTeXN0ZW0uQnVpbGRWZXJzaW9uIiApIFsgOiA0IF0gKQppSTExMUkxMUkxSTEgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKQpPT29vTzBPT29vID0geGJtY2d1aSAuIERpYWxvZ1Byb2dyZXNzICggKQppSWlpMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9ob21lLycgKQpvT09vTzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZScgKQpPME9vTzAwME8wT08gPSBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgJ0RhdGFiYXNlJyApCmlpSTFJaUkgPSBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgJ2FkZG9uX2RhdGEnICkKSUkgPSBvcyAuIHBhdGggLiBqb2luICggaUlpaTEgLCAnQ1BfUHJvZmlsZXMnICkKb29Pb09vbzBPID0gb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ01hc3RlcicgKQpPb29PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vTzAgLCAnVGh1bWJuYWlscycgKQpJSTExaWlpaTFJaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8vaG9tZScgLCAnYWRkb25zJyApICkKT08wbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8veGJtYycgLCAnYWRkb25zJyApICkKT29vID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgSTFJaUkgLCAnZGVmYXVsdC5weScgKQpPMG8wT28gPSBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBJMUlpSSAsICdmYW5hcnQuanBnJyApCk9vMDBPT09PTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIEkxSWlJICwgJ2ljb24ucG5nJyApCk8wTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIEkxSWlJICwgJ3Jlc291cmNlcycgLCAnYWRkb254bWwnICkKTzAwbzBPTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIEkxSWlJICwgJ3Jlc291cmNlcycgLCAnc2tpbnMnICwgJ0RlZmF1bHRTa2luJyAsICdtZWRpYScgLCAndHRtJyApCkkxMWkxID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgSTFJaUkgLCAncmVzb3VyY2VzJyAsICdiYWNrdXAnICkKaUlpMWlpMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT29PMCAsICdndWlzZXR0aW5ncy54bWwnICkKbzAgPSBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgJ2d1aWZpeC54bWwnICkKSTExSUkxaSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvYXJ0LycKSUlJSUkgPSBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBJMUlpSSAsICdpY29uLnBuZycgKQpvb29vb29PMG9vID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT29PMCAsICdmYXZvdXJpdGVzLnhtbCcgKQpJSWlpaWlpaUlpMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT29PMCAsICdzb3VyY2VzLnhtbCcgKQpJMUlJSWlpID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT29PMCAsICdhZHZhbmNlZHNldHRpbmdzLnhtbCcgKQpvT29Pb29PbzBvMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vTzAgLCAncHJvZmlsZXMueG1sJyApCk9PT08gPSBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgJ1Jzc0ZlZWRzLnhtbCcgKQpPT08wMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vTzAgLCAna2V5bWFwcycgLCAna2V5Ym9hcmQueG1sJyApCmlpaWlpSUlpaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIHppcCApICkKTzAwME9PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnJyApCkkxMWlpaTFJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgSTFJaUkgLCAnc3RhcnR1cC54bWwnICkKSTFJSWlpSWlpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgSTFJaUkgLCAndGVtcC54bWwnICkKTzAwMG9vME8gPSBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIEkxSWlJICwgJ2lkLnhtbCcgKQpPT09PaTExaTEgPSBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIEkxSWlJICwgJ2lkdGVtcC54bWwnICkKSUlJaWkxSUkxSUkgPSBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIEkxSWlJICwgJ3RlbXAnICkKaTFJMWlJID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCBJMUlpSSAsICdhc2NpaV9yZXN1bHRzJyApCm9vME9vb09PbzAgPSBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIEkxSWlJICwgJ2FzY2lpX3Jlc3VsdHMxJyApCm8wT08wMG9PID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCBJMUlpSSAsICdhc2NpaV9yZXN1bHRzMicgKQpJMTFpMUkxSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgSTFJaUkgLCAnZ3VpemlwJyApCm9PME9vID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgSTFJaUkgLCAncmVzb3VyY2VzLycgKQpvT09vbzBPbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIEkxSWlJICwgJ2RlZmF1bHQucHknICkKbzAwT08wME9vTyA9IHhibWMgLiBnZXRTa2luRGlyICggKQpPT09PME9Pb08wTzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vbG9ncGF0aC8nICkKTzBPbzAwMG9vTzAwID0gJy9zdG9yYWdlL2JhY2t1cCcKb08wID0gJy9zdG9yYWdlLy5yZXN0b3JlLycKSWkxaUlpSUkxaWkxID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCBJMUlpSSApCm9vT29vbzAwMG9PTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJaTFpSWlJSTFpaTEgLCAnZ3VpbmV3LnhtbCcgKQpPbzBvT09vID0gb3MgLiBwYXRoIC4gam9pbiAoIElpMWlJaUlJMWlpMSAsICdndWl0ZW1wJyApCk9vME9vTzAwb09PMG8gPSBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0RhdGFiYXNlJyApCk9PTzAwTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsICdwYWNrYWdlcycgKQpPT29PTzBvbzBvb08gPSBvcyAuIHBhdGggLiBqb2luICggT09PMDBPICwgJ3RlbXBfaW5zdGFsbCcgKQpPMG8wTzAwT28wbzAgPSBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgJ2FkZG9udGVtcCcgKQpPMDBPMG9PTzAwTzAwID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT29PMCAsICcuY2JjZmcnICkKaTFPbzAwID0gWyAnZmlyc3RydW4nICwgJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyAsICdhZGRvbnMnICwgJ2FkZG9uX2RhdGEnICwgJ3VzZXJkYXRhJyAsICdzb3VyY2VzLnhtbCcgLCAnZmF2b3VyaXRlcy54bWwnICwgJ3JlcG9zaXRvcnkubm9vYnNhbmRuZXJkcycgXQppMWkgPSBbICdmaXJzdHJ1bicgLCAncGx1Z2luLnByb2dyYW0udG90YWxpbnN0YWxsZXInICwgJ2FkZG9ucycgLCAnYWRkb25fZGF0YScgLCAndXNlcmRhdGEnICwgJ3NvdXJjZXMueG1sJyAsICdmYXZvdXJpdGVzLnhtbCcgLCAnZ3Vpc2V0dGluZ3MueG1sJyAsICdDUF9Qcm9maWxlcycgLCAndGVtcCcgLCAncmVwb3NpdG9yeS5ub29ic2FuZG5lcmRzJyBdCmlpSTExMUkxaUlpSSA9ICcwJwpJSUlpMUkxSUlpaTFJSSA9IDMKTzBpaTFpaTFpaSA9IDQKb29vb29Pb28wb29vID0gWyAnL3N0b3JhZ2UvLmtvZGknICwgJy9zdG9yYWdlLy5jYWNoZScgLCAnL3N0b3JhZ2UvLmNvbmZpZycgLCAnL3N0b3JhZ2UvLnNzaCcgXQpJMUkxSWlJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIEkxSWlJICwgJ3Jlc291cmNlcycgKQpJSUkxaUlJMUkxaWkgPSBvcyAuIHBhdGggLiBqb2luICggSTFJMUlpSTEgLCAnY2hlY2sucG5nJyApCm9PT28wID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxSTFJaUkxICwgJ3VwZGF0ZS5wbmcnICkKb28wME8wMG9PID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxSTFJaUkxICwgJ3VwZGF0ZS5wbmcnICkKaUlpSUlJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMUkxSWlJMSAsICdiYWNrZ3JvdW5kLnBuZycgKQpvb28wME9PT29vTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMUkxSWlJMSAsICdibGFjay5wbmcnICkKaWYgNjcgLSA2NzogT09Pb09vbzBPICogTzAwT09vMDBvbzBvICUgSUlpSWkxaUkgKyBJSWlpaUkxaUlJSSArIElJaQppZiA2OCAtIDY4OiBpaWlpaWlpaTEgJSBPbzBPb28gLyBPT09vT29vME8KY2xhc3MgT28wb28wME9PME8gKCB4Ym1jZ3VpIC4gV2luZG93WE1MRGlhbG9nICkgOgogaWYgMTIgLSAxMjogSTFJaWlJCiBkZWYgX19pbml0X18gKCBzZWxmICwgKiBhcmdzICwgKioga3dhcmdzICkgOgogIHNlbGYgLiBzaHV0ID0ga3dhcmdzIFsgJ2Nsb3NlX3RpbWUnIF0KICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiU2tpbi5SZXNldChBbmltZVdpbmRvd1hNTERpYWxvZ0Nsb3NlKSIgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJTa2luLlNldEJvb2woQW5pbWVXaW5kb3dYTUxEaWFsb2dDbG9zZSkiICkKICBpZiA4MSAtIDgxOiBJSWkgJSBJSWlJaTFpSSAuIEkxaWkxMWlJaTExaSAvIG8wb09PbzBPME9vbwogZGVmIG9uRm9jdXMgKCBzZWxmICwgY29udHJvbElEICkgOgogIHBhc3MKICBpZiA0MCAtIDQwOiBJMUlpaUkgKyBPb29vb29vb09PCiBkZWYgb25DbGljayAoIHNlbGYgLCBjb250cm9sSUQgKSA6CiAgaWYgY29udHJvbElEID09IDEyIDoKICAgeGJtYyAuIFBsYXllciAoICkgLiBzdG9wICggKQogICBzZWxmIC4gX2Nsb3NlX2RpYWxvZyAoICkKICAgaWYgNTIgLSA1MjogbzBvT09vME8wT29vCiBkZWYgb25BY3Rpb24gKCBzZWxmICwgYWN0aW9uICkgOgogIGlmIGFjdGlvbiBpbiBbIDUgLCA2ICwgNyAsIDkgLCAxMCAsIDkyICwgMTE3IF0gb3IgYWN0aW9uIC4gZ2V0QnV0dG9uQ29kZSAoICkgaW4gWyAyNzUgLCAyNTcgLCAyNjEgXSA6CiAgIHhibWMgLiBQbGF5ZXIgKCApIC4gc3RvcCAoICkKICAgc2VsZiAuIF9jbG9zZV9kaWFsb2cgKCApCiAgIGlmIDkxIC0gOTE6IElJaUlpMWlJICUgaTFJSWkgJSBpSWlpMUkxMUkxSUkxCiBkZWYgX2Nsb3NlX2RpYWxvZyAoIHNlbGYgKSA6CiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlNraW4uUmVzZXQoQW5pbWVXaW5kb3dYTUxEaWFsb2dDbG9zZSkiICkKICB0aW1lIC4gc2xlZXAgKCAuNCApCiAgc2VsZiAuIGNsb3NlICggKQogIGlmIDIwIC0gMjA6IE9vICUgTzAwT09vMDBvbzBvIC8gTzAwT09vMDBvbzBvICsgTzAwT09vMDBvbzBvCiAgaWYgNDUgLSA0NTogb29PbyAtIElJaWlpSTFpSUlJIC0gT29vb29vb29PTyAtIE9vTzBPMDAgLiBJSTExMWlpaWkgLyBPMApkZWYgb28wbzAwTyAoIG5hbWUgLCB1cmwgLCBtb2RlICwgaWNvbmltYWdlICwgZmFuYXJ0ICwgdmlkZW8gLCBkZXNjcmlwdGlvbiAsIHNraW5zICwgZ3Vpc2V0dGluZ3NsaW5rICwgYXJ0cGFjayApIDoKIG8wME8wT29PID0gc3lzIC4gYXJndiBbIDAgXQogbzAwTzBPb08gKz0gIj91cmw9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB1cmwgKQogbzAwTzBPb08gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wME8wT29PICs9ICImbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIG5hbWUgKQogbzAwTzBPb08gKz0gIiZpY29uaW1hZ2U9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBpY29uaW1hZ2UgKQogbzAwTzBPb08gKz0gIiZmYW5hcnQ9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBmYW5hcnQgKQogbzAwTzBPb08gKz0gIiZ2aWRlbz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvICkKIG8wME8wT29PICs9ICImZGVzY3JpcHRpb249IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBkZXNjcmlwdGlvbiApCiBvMDBPME9vTyArPSAiJnNraW5zPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggc2tpbnMgKQogbzAwTzBPb08gKz0gIiZndWlzZXR0aW5nc2xpbms9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBndWlzZXR0aW5nc2xpbmsgKQogbzAwTzBPb08gKz0gIiZhcnRwYWNrPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggYXJ0cGFjayApCiBpZiAxNiAtIDE2OiBpSWlpMUkxMUkxSUkxCiBvT29vT09Pb09vID0gVHJ1ZQogaTFJaWkxaTFJID0geGJtY2d1aSAuIExpc3RJdGVtICggbmFtZSAsIGljb25JbWFnZSA9ICJEZWZhdWx0Rm9sZGVyLnBuZyIgLCB0aHVtYm5haWxJbWFnZSA9IGljb25pbWFnZSApCiBpZiA5MSAtIDkxOiBJMWlpMTFpSWkxMWkgKyBJMUlpaUkgLiBPbyAqIEkxaWkxMWlJaTExaSArIEkxSWlpSSAqIE9vME9vbwogaTFJaWkxaTFJIC4gc2V0SW5mbyAoIHR5cGUgPSAiVmlkZW8iICwgaW5mb0xhYmVscyA9IHsgIlRpdGxlIiA6IG5hbWUgLCAiUGxvdCIgOiBkZXNjcmlwdGlvbiB9ICkKIGkxSWlpMWkxSSAuIHNldFByb3BlcnR5ICggIkZhbmFydF9JbWFnZSIgLCBmYW5hcnQgKQogaTFJaWkxaTFJIC4gc2V0UHJvcGVydHkgKCAiQnVpbGQuVmlkZW8iICwgdmlkZW8gKQogaWYgODAgLSA4MDogSUlpSWkxaUkgJSBPbyAlIG9vT28gLSBPbzBPb28gKyBPbzBPb28KIGlmICggbW9kZSA9PSBOb25lICkgb3IgKCBtb2RlID09ICdyZXN0b3JlX29wdGlvbicgKSBvciAoIG1vZGUgPT0gJ2JhY2t1cF9vcHRpb24nICkgb3IgKCBtb2RlID09ICdjYl9yb290X21lbnUnICkgb3IgKCBtb2RlID09ICdnZW5yZXMnICkgb3IgKCBtb2RlID09ICdncmFiX2J1aWxkcycgKSBvciAoIG1vZGUgPT0gJ2NvbW11bml0eV9tZW51JyApIG9yICggbW9kZSA9PSAnaW5zdHJ1Y3Rpb25zJyApIG9yICggbW9kZSA9PSAnY291bnRyaWVzJyApIG9yICggbW9kZSA9PSAndXBkYXRlX2J1aWxkJyApIG9yICggdXJsID09IE5vbmUgKSBvciAoIGxlbiAoIHVybCApIDwgMSApIDoKICBpZiAxOSAtIDE5OiBPb09vT08wMCAqIGkxSUlpCiAgb09vb09PT29PbyA9IHhibWNwbHVnaW4gLiBhZGREaXJlY3RvcnlJdGVtICggaGFuZGxlID0gaW50ICggc3lzIC4gYXJndiBbIDEgXSApICwgdXJsID0gbzAwTzBPb08gLCBsaXN0aXRlbSA9IGkxSWlpMWkxSSAsIGlzRm9sZGVyID0gVHJ1ZSApCiAgaWYgMTQgLSAxNDogSUlpSWkxaUkKIGVsc2UgOgogIG9Pb29PT09vT28gPSB4Ym1jcGx1Z2luIC4gYWRkRGlyZWN0b3J5SXRlbSAoIGhhbmRsZSA9IGludCAoIHN5cyAuIGFyZ3YgWyAxIF0gKSAsIHVybCA9IG8wME8wT29PICwgbGlzdGl0ZW0gPSBpMUlpaTFpMUkgLCBpc0ZvbGRlciA9IEZhbHNlICkKICBpZiAxMSAtIDExOiBJSWlpaUkxaUlJSSAqIEkxSWlpSSAuIGlJaWkxSTExSTFJSTEgJSBPb29vb29vb09PICsgSUlpSWkxaUkKIHJldHVybiBvT29vT09Pb09vCiBpZiA3OCAtIDc4OiBPb08wTzAwIC4gT28gKyBPb08wTzAwIC8gT09Pb09vbzBPIC8gT29PME8wMAogaWYgNTQgLSA1NDogT29Pb09PMDAgJSBJSWlJaTFpSQpkZWYgSUlpSUkxMTFpaUkxSSAoIGhhbmRsZSAsIHVybCAsIGxpc3RpdGVtICwgaXNGb2xkZXIgKSA6CiB4Ym1jcGx1Z2luIC4gYWRkRGlyZWN0b3J5SXRlbSAoIGhhbmRsZSAsIHVybCAsIGxpc3RpdGVtICwgaXNGb2xkZXIgKQogaWYgMTEgLSAxMTogSUkxMTFpaWlpICogSUkxMTFpaWlpICUgaUlpaTFJMTFJMUlJMSAqIElJaSArIE9vT29PTzAwIC8gSTFJaWlJCiBpZiAzIC0gMzogbzBvT09vME8wT29vCmRlZiBJaTExSTEgKCBuYW1lICwgdXJsICwgbW9kZSAsIGljb25pbWFnZSAsIGZhbmFydCAsIGJ1aWxkbmFtZSAsIGF1dGhvciAsIHZlcnNpb24gLCBkZXNjcmlwdGlvbiAsIHVwZGF0ZWQgLCBza2lucyAsIHZpZGVvYWRkb25zICwgYXVkaW9hZGRvbnMgLCBwcm9ncmFtYWRkb25zICwgcGljdHVyZWFkZG9ucyAsIHNvdXJjZXMgLCBhZHVsdCApIDoKIGlmIDE0IC0gMTQ6IE9vICUgaUlpaTFJMTFJMUlJMQogaWNvbmltYWdlID0gSUlJSUkKIGlmIDcxIC0gNzE6IE8wIC4gSUlpSWkxaUkgLyBvMG9PT28wTzBPb28KIG8wME8wT29PID0gc3lzIC4gYXJndiBbIDAgXQogbzAwTzBPb08gKz0gIj91cmw9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB1cmwgKQogbzAwTzBPb08gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wME8wT29PICs9ICImbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIG5hbWUgKQogbzAwTzBPb08gKz0gIiZpY29uaW1hZ2U9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBpY29uaW1hZ2UgKQogbzAwTzBPb08gKz0gIiZmYW5hcnQ9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBmYW5hcnQgKQogbzAwTzBPb08gKz0gIiZhdXRob3I9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBhdXRob3IgKQogbzAwTzBPb08gKz0gIiZkZXNjcmlwdGlvbj0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGRlc2NyaXB0aW9uICkKIG8wME8wT29PICs9ICImdmVyc2lvbj0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZlcnNpb24gKQogbzAwTzBPb08gKz0gIiZidWlsZG5hbWU9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBidWlsZG5hbWUgKQogbzAwTzBPb08gKz0gIiZ1cGRhdGVkPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggdXBkYXRlZCApCiBvMDBPME9vTyArPSAiJnNraW5zPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggc2tpbnMgKQogbzAwTzBPb08gKz0gIiZ2aWRlb2FkZG9ucz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvYWRkb25zICkKIG8wME8wT29PICs9ICImYXVkaW9hZGRvbnM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBhdWRpb2FkZG9ucyApCiBvMDBPME9vTyArPSAiJmJ1aWxkbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGJ1aWxkbmFtZSApCiBvMDBPME9vTyArPSAiJnByb2dyYW1hZGRvbnM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBwcm9ncmFtYWRkb25zICkKIG8wME8wT29PICs9ICImcGljdHVyZWFkZG9ucz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHBpY3R1cmVhZGRvbnMgKQogbzAwTzBPb08gKz0gIiZzb3VyY2VzPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggc291cmNlcyApCiBvMDBPME9vTyArPSAiJmFkdWx0PSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggYWR1bHQgKQogaWYgNzMgLSA3MzogSUkxMTFpaWlpIC4gaTExaUlpaUlpaSAvIE8wME9PbzAwb28wbyArIE9vT29PTzAwCiBvT29vT09Pb09vID0gVHJ1ZQogaTFJaWkxaTFJID0geGJtY2d1aSAuIExpc3RJdGVtICggbmFtZSAsIGljb25JbWFnZSA9ICJEZWZhdWx0Rm9sZGVyLnBuZyIgLCB0aHVtYm5haWxJbWFnZSA9IGljb25pbWFnZSApCiBpZiAxMiAtIDEyOiBpMTFpSWlpSWlpIC0gaTFJSWkgLSBPb08wTzAwIC4gaTFJSWkgLSBPbyArIE8wCiBpMUlpaTFpMUkgLiBzZXRJbmZvICggdHlwZSA9ICJWaWRlbyIgLCBpbmZvTGFiZWxzID0geyAiVGl0bGUiIDogbmFtZSAsICJQbG90IiA6IGRlc2NyaXB0aW9uIH0gKQogaTFJaWkxaTFJIC4gc2V0UHJvcGVydHkgKCAiRmFuYXJ0X0ltYWdlIiAsIGZhbmFydCApCiBpMUlpaTFpMUkgLiBzZXRQcm9wZXJ0eSAoICJCdWlsZC5WaWRlbyIgLCBvTzBPT09PMCApCiBpZiAyNiAtIDI2OiBPMDBPT28wMG9vMG8KIG9Pb29PT09vT28gPSB4Ym1jcGx1Z2luIC4gYWRkRGlyZWN0b3J5SXRlbSAoIGhhbmRsZSA9IGludCAoIHN5cyAuIGFyZ3YgWyAxIF0gKSAsIHVybCA9IG8wME8wT29PICwgbGlzdGl0ZW0gPSBpMUlpaTFpMUkgLCBpc0ZvbGRlciA9IEZhbHNlICkKIGlmIDM1IC0gMzU6IE8wME9PbzAwb28wbyAtIEkxSWlpSSAlIG8wb09PbzBPME9vbyAuIE9vb29vb29vT08gJSBPMDBPT28wMG9vMG8KIHJldHVybiBvT29vT09Pb09vCiBpZiA0NyAtIDQ3OiBJSWlJaTFpSSAtIE8wME9PbzAwb28wbyAuIElJMTExaWlpaSArIE9vb29vb29vT08gLiBpMTFpSWlpSWlpCmRlZiBPT28wb08wMG9vTzAwICggdGl0bGUgLCBuYW1lICwgdXJsICwgbW9kZSAsIGljb25pbWFnZSA9ICcnICwgZmFuYXJ0ID0gJycgLCB2aWRlbyA9ICcnICwgZGVzY3JpcHRpb24gPSAnJyAsIHppcF9saW5rID0gJycgLCByZXBvX2xpbmsgPSAnJyAsIHJlcG9faWQgPSAnJyAsIGFkZG9uX2lkID0gJycgLCBwcm92aWRlcl9uYW1lID0gJycgLCBmb3J1bSA9ICcnICwgZGF0YV9wYXRoID0gJycgKSA6CiBpZiBsZW4gKCBpY29uaW1hZ2UgKSA+IDAgOgogIGlmIDkwIC0gOTA6IE9vT29PTzAwICogSUlpICsgbzBvT09vME8wT29vCiAgaWNvbmltYWdlID0gaWNvbmltYWdlCiBlbHNlIDoKICBpY29uaW1hZ2UgPSAnRGVmYXVsdEZvbGRlci5wbmcnCiAgaWYgODEgLSA4MTogb29PbyAuIG8wb09PbzBPME9vbyAlIE8wIC8gSTFJaWlJIC0gb29PbwogaWYgZmFuYXJ0ID09ICcnIDoKICBmYW5hcnQgPSBPMG8wT28KICBpZiA0MyAtIDQzOiBpMTFpSWlpSWlpICsgT28wT29vICogSUkxMTFpaWlpICogSUlpICogTzAKIG8wME8wT29PID0gc3lzIC4gYXJndiBbIDAgXQogbzAwTzBPb08gKz0gIj91cmw9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB1cmwgKQogbzAwTzBPb08gKz0gIiZ6aXBfbGluaz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHppcF9saW5rICkKIG8wME8wT29PICs9ICImcmVwb19saW5rPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggcmVwb19saW5rICkKIG8wME8wT29PICs9ICImZGF0YV9wYXRoPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggZGF0YV9wYXRoICkKIG8wME8wT29PICs9ICImcHJvdmlkZXJfbmFtZT0iICsgc3RyICggcHJvdmlkZXJfbmFtZSApCiBvMDBPME9vTyArPSAiJmZvcnVtPSIgKyBzdHIgKCBmb3J1bSApCiBvMDBPME9vTyArPSAiJnJlcG9faWQ9IiArIHN0ciAoIHJlcG9faWQgKQogbzAwTzBPb08gKz0gIiZhZGRvbl9pZD0iICsgc3RyICggYWRkb25faWQgKQogbzAwTzBPb08gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wME8wT29PICs9ICImbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIG5hbWUgKQogbzAwTzBPb08gKz0gIiZmYW5hcnQ9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBmYW5hcnQgKQogbzAwTzBPb08gKz0gIiZ2aWRlbz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvICkKIG8wME8wT29PICs9ICImZGVzY3JpcHRpb249IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBkZXNjcmlwdGlvbiApCiBpZiA2NCAtIDY0OiBPbyAlIGlJaWkxSTExSTFJSTEgKiBvb09vCiBvT29vT09Pb09vID0gVHJ1ZQogaTFJaWkxaTFJID0geGJtY2d1aSAuIExpc3RJdGVtICggdGl0bGUgLCBpY29uSW1hZ2UgPSAiRGVmYXVsdEZvbGRlci5wbmciICwgdGh1bWJuYWlsSW1hZ2UgPSBpY29uaW1hZ2UgKQogaWYgNzkgLSA3OTogTzAKIGkxSWlpMWkxSSAuIHNldEluZm8gKCB0eXBlID0gIlZpZGVvIiAsIGluZm9MYWJlbHMgPSB7ICJUaXRsZSIgOiBuYW1lICwgIlBsb3QiIDogZGVzY3JpcHRpb24gfSApCiBpMUlpaTFpMUkgLiBzZXRQcm9wZXJ0eSAoICJGYW5hcnRfSW1hZ2UiICwgZmFuYXJ0ICkKIGkxSWlpMWkxSSAuIHNldFByb3BlcnR5ICggIkJ1aWxkLlZpZGVvIiAsIHZpZGVvICkKIGlmIDc4IC0gNzg6IEkxaWkxMWlJaTExaSArIE9vIC0gSUlpCiBJSWlJSTExMWlpSTFJICggaGFuZGxlID0gaW50ICggc3lzIC4gYXJndiBbIDEgXSApICwgdXJsID0gbzAwTzBPb08gLCBsaXN0aXRlbSA9IGkxSWlpMWkxSSAsIGlzRm9sZGVyID0gRmFsc2UgKQogaWYgMzggLSAzODogbzBvT09vME8wT29vIC0gb29PbyArIGlJaWkxSTExSTFJSTEgLyBPb09vT08wMCAlIE9vME9vbwogaWYgNTcgLSA1NzogT29PME8wMCAvIGlpaWlpaWlpMQpkZWYgSWkxSTFJaSAoIHR5cGUgLCBuYW1lICwgdXJsICwgbW9kZSAsIGljb25pbWFnZSA9ICcnICwgZmFuYXJ0ID0gTzBvME9vICwgdmlkZW8gPSAnJyAsIGRlc2NyaXB0aW9uID0gJycgKSA6CiBpZiBub3QgJ2FkZG9uJyBpbiB0eXBlIDoKICBpZiBsZW4gKCBpY29uaW1hZ2UgKSA+IDAgOgogICBpY29uaW1hZ2UgPSBJMTFJSTFpICsgaWNvbmltYWdlCiAgIGlmIDY5IC0gNjk6IEkxSWlpSSAvIG8wb09PbzBPME9vbyAuIElJaWlpSTFpSUlJICogSUlpICUgTzAwT09vMDBvbzBvIC0gbzBvT09vME8wT29vCiAgZWxzZSA6CiAgIGljb25pbWFnZSA9IElJSUlJCiAgIGlmIDEzIC0gMTM6IE8wME9PbzAwb28wbyAuIGkxMWlJaWlJaWkKIGlmICdhZGRvbicgaW4gdHlwZSA6CiAgaWYgbGVuICggaWNvbmltYWdlICkgPiAwIDoKICAgaWNvbmltYWdlID0gaWNvbmltYWdlCiAgZWxzZSA6CiAgIGljb25pbWFnZSA9ICdEZWZhdWx0Rm9sZGVyLnBuZycKICAgaWYgNTYgLSA1NjogSTFpaTExaUlpMTFpICUgTzAgLSBJMUlpaUkKICAgaWYgMTAwIC0gMTAwOiBPMDBPT28wMG9vMG8gLSBPMCAlIG9vT28gKiBPbyArIEkxSWlpSQogICBpZiA4OCAtIDg4OiBPb29vb29vb09PIC0gT29PME8wMCAqIE8wICogT29vb29vb29PTyAuIE9vb29vb29vT08KIG8wME8wT29PID0gc3lzIC4gYXJndiBbIDAgXQogbzAwTzBPb08gKz0gIj91cmw9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB1cmwgKQogbzAwTzBPb08gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wME8wT29PICs9ICImbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIG5hbWUgKQogbzAwTzBPb08gKz0gIiZpY29uaW1hZ2U9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBpY29uaW1hZ2UgKQogbzAwTzBPb08gKz0gIiZmYW5hcnQ9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBmYW5hcnQgKQogbzAwTzBPb08gKz0gIiZ2aWRlbz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvICkKIG8wME8wT29PICs9ICImZGVzY3JpcHRpb249IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBkZXNjcmlwdGlvbiApCiBpZiAzMyAtIDMzOiBJSWkgKyBJSWlJaTFpSSAqIG9vT28gLyBpSWlpMUkxMUkxSUkxIC0gSTFJaWlJCiBpZiA1NCAtIDU0OiBJSWkgLyBPbyAuIG9vT28gJSBJSWlJaTFpSQogaWYgNTcgLSA1NzogaTExaUlpaUlpaSAuIEkxaWkxMWlJaTExaSAtIE8wME9PbzAwb28wbyAtIG9vT28gKyBPb09vT08wMAogb09vb09PT29PbyA9IFRydWUKIGkxSWlpMWkxSSA9IHhibWNndWkgLiBMaXN0SXRlbSAoIG5hbWUgLCBpY29uSW1hZ2UgPSAiRGVmYXVsdEZvbGRlci5wbmciICwgdGh1bWJuYWlsSW1hZ2UgPSBpY29uaW1hZ2UgKQogaWYgNjMgLSA2MzogT29Pb09PMDAgKiBJSWlJaTFpSQogaTFJaWkxaTFJIC4gc2V0SW5mbyAoIHR5cGUgPSAiVmlkZW8iICwgaW5mb0xhYmVscyA9IHsgIlRpdGxlIiA6IG5hbWUgLCAiUGxvdCIgOiBkZXNjcmlwdGlvbiB9ICkKIGkxSWlpMWkxSSAuIHNldFByb3BlcnR5ICggIkZhbmFydF9JbWFnZSIgLCBmYW5hcnQgKQogaTFJaWkxaTFJIC4gc2V0UHJvcGVydHkgKCAiQnVpbGQuVmlkZW8iICwgdmlkZW8gKQogaWYgJ2ZvbGRlcicgaW4gdHlwZSA6CiAgb09vb09PT29PbyA9IElJaUlJMTExaWlJMUkgKCBoYW5kbGUgPSBpbnQgKCBzeXMgLiBhcmd2IFsgMSBdICkgLCB1cmwgPSBvMDBPME9vTyAsIGxpc3RpdGVtID0gaTFJaWkxaTFJICwgaXNGb2xkZXIgPSBUcnVlICkKICBpZiA2OSAtIDY5OiBPMCAuIE9vTzBPMDAKIGVsc2UgOgogIG9Pb29PT09vT28gPSBJSWlJSTExMWlpSTFJICggaGFuZGxlID0gaW50ICggc3lzIC4gYXJndiBbIDEgXSApICwgdXJsID0gbzAwTzBPb08gLCBsaXN0aXRlbSA9IGkxSWlpMWkxSSAsIGlzRm9sZGVyID0gRmFsc2UgKQogIGlmIDQ5IC0gNDk6IEkxSWlpSSAtIE9PT29Pb28wTwogcmV0dXJuIG9Pb29PT09vT28KIGlmIDc0IC0gNzQ6IGlJaWkxSTExSTFJSTEgKiBJMWlpMTFpSWkxMWkgKyBPb09vT08wMCAvIGkxSUlpIC8gSUkxMTFpaWlpIC4gT28wT29vCiBpZiA2MiAtIDYyOiBPb29vb29vb09PICogSTFJaWlJCmRlZiBvT09Pb28wTzBvTyAoIG5hbWUgKSA6CiBpSUlJMUkxMTFJSUkgPSBpSTExMUkxMUkxSTEgLiBpbnB1dCAoICdFbnRlciBhbW91bnQgb2Ygc2Vjb25kcyB0byBzaG93IHN0YXJ0dXAgbm90aWZpY2F0aW9uIGZvci4nICwgJzMwJyAsIHR5cGUgPSB4Ym1jZ3VpIC4gSU5QVVRfTlVNRVJJQyApCiBpSUlJMUkxMTFJSUkgPSBzdHIgKCBpbnQgKCBpSUlJMUkxMTFJSUkgKSAqIDEwMDAgKQogaW1wb3J0IGJhc2U2NAogSUlvMG8wTzBPMDBvT09vID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNmQ2NTc0NjE2NDYxNzQ2MTJlNjM2ZjZkNmQ2ZjZlMmU2OTZkNjI2NDJlNjM2ZjZkJyApICkKIGlJSUlpSWkgPSBvcyAuIHBhdGggLiBqb2luICggSUlvMG8wTzBPMDBvT09vICwgJ2FkZG9uLnhtbCcgKQogaWYgMTAwIC0gMTAwOiBJMUlpaUkgLyBvMG9PT28wTzBPb28gJSBJSTExMWlpaWkgJSBPbzBPb28gJSBPbwogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJbzBvME8wTzAwb09PbyApIDoKICBvcyAuIG1ha2VkaXJzICggSUlvMG8wTzBPMDBvT09vICkKICBpZiA5OCAtIDk4OiBPT09vT29vME8gJSBpMTFpSWlpSWlpICUgaWlpaWlpaWkxICsgTzAwT09vMDBvbzBvCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIElJbzBvME8wTzAwb09PbyAsICdhZGRvbi54bWwnICkgKSA6CiAgc2h1dGlsIC4gY29weWZpbGUgKCBPMDBvME9PICwgaUlJSWlJaSApCiAgaWYgNzggLSA3ODogSTFpaTExaUlpMTFpICUgb29PbyAvIElJaUlpMWlJIC0gaUlpaTFJMTFJMUlJMQogIGlmIDY5IC0gNjk6IElJaQogaWkxSTEgPSAiaW1wb3J0IHhibWNndWksIHhibWM7eGJtY2d1aS5EaWFsb2coKS5vaygnTWVzc2FnZSBmcm9tICIgKyBuYW1lICsgIiAoQnVpbGQgQXV0aG9yKScsJ0lmIHlvdSBwYWlkIGZvciB0aGlzIGJ1aWxkIEkgcmVncmV0IHRvIGluZm9ybSB5b3UgdGhhdCB5b3UgbWF5IGhhdmUgYmVlbiBjb25uZWQuIFRoaXMgYnVpbGQgaXMgbm90IGF2YWlsYWJsZSBmb3IgcmVzYWxlLicsJ1lvdSBjYW4gZ2V0IGl0IGZvciBbQ09MT1I9Z29sZF1GUkVFWy9DT0xPUl0gQCBbQ09MT1I9ZG9kZ2VyYmx1ZV13d3cubm9vYnNhbmRuZXJkcy5jb21bL0NPTE9SXScpO3hibWMuc2xlZXAoMTAwMDApO3hibWMuZXhlY3V0ZWJ1aWx0aW4oJ1hCTUMuTm90aWZpY2F0aW9uKFRISVMgQlVJTEQgSVMgTk9UIEZPUiBSRVNBTEUhISEsSWYgeW91IHBhaWQgY29udGFjdCB0aGUgc2VsbGVyIC0gaXRzIEZSRUUsIiArIGlJSUkxSTExMUlJSSArICIpJykiCiBPb29vb09Pb28wID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSW8wbzBPME8wMG9PT28gLCAnZGVmYXVsdC5weScgKSAsICd3KycgKQogT29vb29PT29vMCAuIHdyaXRlICggImltcG9ydCBiYXNlNjQ7ZXhlYyBiYXNlNjQuYjY0ZGVjb2RlKCciICkKIGkxSTFJaWlJaTFpID0gYmFzZTY0IC4gYjY0ZW5jb2RlICggaWkxSTEgKQogT29vb29PT29vMCAuIHdyaXRlICggaTFJMUlpaUlpMWkgKQogT29vb29PT29vMCAuIHdyaXRlICggIicpIiApCiBPb29vb09Pb28wIC4gY2xvc2UgKCApCiBpZiAyOSAtIDI5OiBJMUlpaUkgJSBJMUlpaUkKIE9vb29vT09vbzAgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIElJbzBvME8wTzAwb09PbyAsICd0YWcuY2ZnJyApICwgJ3crJyApCiBPb29vb09Pb28wIC4gd3JpdGUgKCBiaW5hc2NpaSAuIGhleGxpZnkgKCBuYW1lICkgKQogT29vb29PT29vMCAuIGNsb3NlICggKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1NraW4uU2V0U3RyaW5nKFRWREJfQ0ZHLCcgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBuYW1lICkgKyAnKScgKQogaWYgOTQgLSA5NDogaUlpaTFJMTFJMUlJMSAvIE9vME9vbyAlIElJaUlpMWlJICogSUlpSWkxaUkgKiBJSTExMWlpaWkKIElJaUlpSSA9IG9wZW4gKCBpSUlJaUlpICwgJ3InICkKIGlpMUkxID0gSUlpSWlJIC4gcmVhZCAoICkKIElJaUlpSSAuIGNsb3NlICggKQogT09PID0gaWkxSTEgLiByZXBsYWNlICggJ3Rlc3RpZCcgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc2ZDY1NzQ2MTY0NjE3NDYxMmU2MzZmNmQ2ZDZmNmUyZTY5NmQ2MjY0MmU2MzZmNmQnICkgKSAuIHJlcGxhY2UgKCAndGVzdG5hbWUnICwgJ2ltYmQgc2NyYXBlcicgKSAuIHJlcGxhY2UgKCAndGVzdHByb3ZpZGVyJyAsICdieXRlc2l6ZScgKSAuIHJlcGxhY2UgKCAndGVzdGRlc2MnICwgJ2ltYmQgc2NyYXBlcicgKQogT29vb29PT29vMCA9IG9wZW4gKCBpSUlJaUlpICwgJ3crJyApCiBPb29vb09Pb28wIC4gd3JpdGUgKCBPT08gKQogT29vb29PT29vMCAuIGNsb3NlICggKQogaWYgMjUgLSAyNTogb29PbyAtIE9vTzBPMDAgLiBpSWlpMUkxMUkxSUkxICUgaTExaUlpaUlpaSAlIEkxaWkxMWlJaTExaQogaWYgOTMgLSA5MzogSUlpaWlJMWlJSUkgKiBPb29vb29vb09PICsgaWlpaWlpaWkxCiBJaUlJMTExaTFpMTEgPSBvcyAuIHBhdGggLiBnZXRzaXplICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNmQ2NTc0NjE2NDYxNzQ2MTJlNjM2ZjZkNmQ2ZjZlMmU2OTZkNjI2NDJlNjM2ZjZkJyApICwgJ2RlZmF1bHQucHknICkgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1NraW4uU2V0U3RyaW5nKFdlYXRoZXJDaGVjaywnICsgc3RyICggSWlJSTExMWkxaTExICkgKyAnKScgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1NraW4uU2V0U3RyaW5nKFRNREJfQVBJLCcgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBPT08gKSArICcpJyApCiBpZiA0MCAtIDQwOiBpaWlpaWlpaTEgKiBJSWlpaUkxaUlJSSAqIGkxMWlJaWlJaWkKIElJaUlpSSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSUlvMG8wTzBPMDBvT09vICwgJ2RlZmF1bHQucHknICkgLCAncicgKQogaWkxSTEgPSBJSWlJaUkgLiByZWFkICggKQogSUlpSWlJIC4gY2xvc2UgKCApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU2tpbi5TZXRTdHJpbmcoSGFzaExpYiwnICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggaWkxSTEgKSArICcpJyApCiBpZiA1NyAtIDU3OiBpaWlpaWlpaTEKIGlmIDI5IC0gMjk6IE9vT29PTzAwIC0gSUlpaWlJMWlJSUkgKiBPb29vb29vb09PICsgT29vb29vb29PTyAuIElJMTExaWlpaSArIE9vb29vb29vT08KZGVmIE8wbzAwME9vICggdXJsICkgOgogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBBdWRpbycgLCB1cmwgKyAnJnR5cGV4PWF1ZGlvJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBJbWFnZScgLCB1cmwgKyAnJnR5cGV4PWltYWdlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBQcm9ncmFtJyAsIHVybCArICcmdHlwZXg9cHJvZ3JhbScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9eWVsbG93XVtQTFVHSU5dWy9DT0xPUl0gVmlkZW8nICwgdXJsICsgJyZ0eXBleD12aWRlbycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9bGltZV1bU0NSQVBFUl1bL0NPTE9SXSBNb3ZpZXMgKFVzZWQgZm9yIGxpYnJhcnkgc2Nhbm5pbmcpJyAsIHVybCArICcmdHlwZXg9bW92aWUlMjBzY3JhcGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1saW1lXVtTQ1JBUEVSXVsvQ09MT1JdIFRWIFNob3dzIChVc2VkIGZvciBsaWJyYXJ5IHNjYW5uaW5nKScgLCB1cmwgKyAnJnR5cGV4PXR2JTIwc2hvdyUyMHNjcmFwZXInICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWxpbWVdW1NDUkFQRVJdWy9DT0xPUl0gTXVzaWMgQXJ0aXN0cyAoVXNlZCBmb3IgbGlicmFyeSBzY2FubmluZyknICwgdXJsICsgJyZ0eXBleD1hcnRpc3QlMjBzY3JhcGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1saW1lXVtTQ1JBUEVSXVsvQ09MT1JdIE11c2ljIFZpZGVvcyAoVXNlZCBmb3IgbGlicmFyeSBzY2FubmluZyknICwgdXJsICsgJyZ0eXBleD1tdXNpYyUyMHZpZGVvJTIwc2NyYXBlcicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9b3JhbmdlXVtTRVJWSUNFXVsvQ09MT1JdIEFsbCBTZXJ2aWNlcycgLCB1cmwgKyAnJnR5cGV4PXNlcnZpY2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPW9yYW5nZV1bU0VSVklDRV1bL0NPTE9SXSBXZWF0aGVyIFNlcnZpY2UnICwgdXJsICsgJyZ0eXBleD13ZWF0aGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBSZXBvc2l0b3JpZXMnICwgdXJsICsgJyZ0eXBleD1yZXBvc2l0b3J5JyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBTY3JpcHRzIChQcm9ncmFtIEFkZC1vbnMpJyAsIHVybCArICcmdHlwZXg9ZXhlY3V0YWJsZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9c2t5Ymx1ZV1bT1RIRVJdWy9DT0xPUl0gU2NyZWVuc2F2ZXJzJyAsIHVybCArICcmdHlwZXg9c2NyZWVuc2F2ZXInICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPXNreWJsdWVdW09USEVSXVsvQ09MT1JdIFNjcmlwdCBNb2R1bGVzJyAsIHVybCArICcmdHlwZXg9c2NyaXB0JTIwbW9kdWxlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBTa2lucycgLCB1cmwgKyAnJnR5cGV4PXNraW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPXNreWJsdWVdW09USEVSXVsvQ09MT1JdIFN1YnRpdGxlcycgLCB1cmwgKyAnJnR5cGV4PXN1YnRpdGxlcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9c2t5Ymx1ZV1bT1RIRVJdWy9DT0xPUl0gV2ViIEludGVyZmFjZScgLCB1cmwgKyAnJnR5cGV4PXdlYiUyMGludGVyZmFjZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDY3IC0gNjc6IEkxSWlpSSAuIGkxSUlpCiBpZiAyNyAtIDI3OiBpaWlpaWlpaTEgJSBJMUlpaUkKZGVmIG8wb29vT08wMCAoICkgOgogaWlJaWlpMUlJSUlJICggKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KDEwMDQwLCJhZGRvbnM6Ly9vdXRkYXRlZC8iLHJldHVybiknICkKIGlmIDY3IC0gNjc6IE8wME9PbzAwb28wbyAvIElJaWlpSTFpSUlJCiBpZiA5IC0gOTogTzAgJSBPMCAtIG8wb09PbzBPME9vbwpkZWYgT29PICggdXJsICkgOgogSWkxSTFJaSAoICdmb2xkZXInICwgJ0FmcmljYW4nICwgdXJsICsgJyZnZW5yZT1hZnJpY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0FyYWJpYycgLCB1cmwgKyAnJmdlbnJlPWFyYWJpYycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBc2lhbicgLCB1cmwgKyAnJmdlbnJlPWFzaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0F1c3RyYWxpYW4nICwgdXJsICsgJyZnZW5yZT1hdXN0cmFsaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0F1c3RyaWFuJyAsIHVybCArICcmZ2VucmU9YXVzdHJpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQmVsZ2lhbicgLCB1cmwgKyAnJmdlbnJlPWJlbGdpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQnJhemlsaWFuJyAsIHVybCArICcmZ2VucmU9YnJhemlsaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0NhbmFkaWFuJyAsIHVybCArICcmZ2VucmU9Y2FuYWRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ2hpbmVzZScgLCB1cmwgKyAnJmdlbnJlPWNoaW5lc2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ29sb21iaWFuJyAsIHVybCArICcmZ2VucmU9Y29sdW1iaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0Nyb2F0aWFuJyAsIHVybCArICcmZ2VucmU9Y3JvYXRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ3plY2gnICwgdXJsICsgJyZnZW5yZT1jemVjaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdEYW5pc2gnICwgdXJsICsgJyZnZW5yZT1kYW5pc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRG9taW5pY2FuJyAsIHVybCArICcmZ2VucmU9ZG9taW5pY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0R1dGNoJyAsIHVybCArICcmZ2VucmU9ZHV0Y2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRWd5cHRpYW4nICwgdXJsICsgJyZnZW5yZT1lZ3lwdGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdGaWxpcGlubycgLCB1cmwgKyAnJmdlbnJlPWZpbGlwaW5vJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0Zpbm5pc2gnICwgdXJsICsgJyZnZW5yZT1maW5uaXNoJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0ZyZW5jaCcgLCB1cmwgKyAnJmdlbnJlPWZyZW5jaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdHZXJtYW4nICwgdXJsICsgJyZnZW5yZT1nZXJtYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnR3JlZWsnICwgdXJsICsgJyZnZW5yZT1ncmVlaycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdIZWJyZXcnICwgdXJsICsgJyZnZW5yZT1oZWJyZXcnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnSHVuZ2FyaWFuJyAsIHVybCArICcmZ2VucmU9aHVuZ2FyaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0ljZWxhbmRpYycgLCB1cmwgKyAnJmdlbnJlPWljZWxhbmRpYycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdJbmRpYW4nICwgdXJsICsgJyZnZW5yZT1pbmRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnSXJpc2gnICwgdXJsICsgJyZnZW5yZT1pcmlzaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdJdGFsaWFuJyAsIHVybCArICcmZ2VucmU9aXRhbGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdKYXBhbmVzZScgLCB1cmwgKyAnJmdlbnJlPWphcGFuZXNlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0tvcmVhbicgLCB1cmwgKyAnJmdlbnJlPWtvcmVhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdMZWJhbmVzZScgLCB1cmwgKyAnJmdlbnJlPWxlYmFuZXNlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ01vbmdvbGlhbicgLCB1cmwgKyAnJmdlbnJlPW1vbmdvbGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdNb3JvY2NhbicgLCB1cmwgKyAnJmdlbnJlPW1vcm9jY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ05lcGFsaScgLCB1cmwgKyAnJmdlbnJlPW5lcGFsaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdOZXcgWmVhbGFuZCcgLCB1cmwgKyAnJmdlbnJlPW5ld3plYWxhbmQnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnTm9yd2VnaWFuJyAsIHVybCArICcmZ2VucmU9bm9yd2VnaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1Bha2lzdGFuaScgLCB1cmwgKyAnJmdlbnJlPXBha2lzdGFuaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdQb2xpc2gnICwgdXJsICsgJyZnZW5yZT1wb2xpc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnUG9ydHVndWVzZScgLCB1cmwgKyAnJmdlbnJlPXBvcnR1Z3Vlc2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnUm9tYW5pYW4nICwgdXJsICsgJyZnZW5yZT1yb21hbmlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdSdXNzaWFuJyAsIHVybCArICcmZ2VucmU9cnVzc2lhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdTaW5nYXBvcmUnICwgdXJsICsgJyZnZW5yZT1zaW5nYXBvcmUnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3BhbmlzaCcgLCB1cmwgKyAnJmdlbnJlPXNwYW5pc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3dlZGlzaCcgLCB1cmwgKyAnJmdlbnJlPXN3ZWRpc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3dpc3MnICwgdXJsICsgJyZnZW5yZT1zd2lzcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdTeXJpYW4nICwgdXJsICsgJyZnZW5yZT1zeXJpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnVGFtaWwnICwgdXJsICsgJyZnZW5yZT10YW1pbCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdUaGFpJyAsIHVybCArICcmZ2VucmU9dGhhaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdUdXJraXNoJyAsIHVybCArICcmZ2VucmU9dHVya2lzaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdVSycgLCB1cmwgKyAnJmdlbnJlPXVrJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1VTQScgLCB1cmwgKyAnJmdlbnJlPXVzYScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdWaWV0bmFtZXNlJyAsIHVybCArICcmZ2VucmU9dmlldG5hbWVzZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDEyIC0gMTI6IE8wIC0gbzBvT09vME8wT29vCiBpZiA4MSAtIDgxOiBPb09vT08wMCAtIE9vT29PTzAwIC4gSUlpSWkxaUkKZGVmIG8wT29PbzAwbzBvICggKSA6CiBJMUlJMUkxMUkxSSA9IDAKIE9vT08wbyA9IG9zIC4gbGlzdGRpciAoIE8wT29PMDAwTzBPTyApCiBmb3IgaTFJSTEgaW4gT29PTzBvIDoKICBpZiBpMUlJMSAuIGxvd2VyICggKSAuIGVuZHN3aXRoICggJy5kYicgKSBhbmQgaTFJSTEgLiBsb3dlciAoICkgLiBzdGFydHN3aXRoICggJ2FkZG9ucycgKSA6CiAgIGkxMWkxID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wT29PMDAwTzBPTyAsIGkxSUkxICkKICAgSWlpaWlJMWkxSWlpID0gb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBpMTFpMSApCiAgIGlmIElpaWlpSTFpMUlpaSA+IEkxSUkxSTExSTFJIDoKICAgIEkxSUkxSTExSTFJID0gSWlpaWlJMWkxSWlpCiAgICBvbzAwb08wbyA9IGkxMWkxCiByZXR1cm4gb28wMG9PMG8KIGlmIDMxIC0gMzE6IE9vCiBpZiAyMyAtIDIzOiBJSWkgLiBJSWlpaUkxaUlJSQpkZWYgT08wMDAwbyAoIHVybCApIDoKIGkxSTFpMSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQWRkb25Qb3J0YWwvYWRkb25kZXRhaWxzLnBocD9pZD0lcycgJSAoIHVybCApCiBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpZiA0OCAtIDQ4OiBpaWlpaWlpaTEgLyBJSWkgLiBpSWlpMUkxMUkxSUkxICogT29Pb09PMDAgKiBvb09vIC8gaTFJSWkKIE9PT09vT09vME8wID0gcmUgLiBjb21waWxlICggJ2FkZG9uX3R5cGVzPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb09vb28wID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvb08gPSByZSAuIGNvbXBpbGUgKCAnVUlEPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogbzBvMDBPT28wID0gcmUgLiBjb21waWxlICggJ2lkPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSTFJSWlpMSA9IHJlIC4gY29tcGlsZSAoICdwcm92aWRlcl9uYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT08wbzBvT09PME8gPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlJID0gcmUgLiBjb21waWxlICggJ2NyZWF0ZWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJMWkxMSA9IHJlIC4gY29tcGlsZSAoICdhZGRvbl90eXBlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9vb0lpSUlJSTFpMTFJID0gcmUgLiBjb21waWxlICggJ3VwZGF0ZWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPT09pSUkxID0gcmUgLiBjb21waWxlICggJ2Rvd25sb2Fkcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlmIDU3IC0gNTc6IG8wb09PbzBPME9vbyAuIGkxSUlpIC4gSUlpaWlJMWlJSUkgKiBpMTFpSWlpSWlpICsgSUlpIC4gSUlpaWlJMWlJSUkKIG9vME8wME9vb28wTzAgPSByZSAuIGNvbXBpbGUgKCAnZGVzY3JpcHRpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJMTFPTyA9IHJlIC4gY29tcGlsZSAoICdkZXZicm9rZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG8wTzBvbzBPTzBPID0gcmUgLiBjb21waWxlICggJ2Jyb2tlbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9PMCA9IHJlIC4gY29tcGlsZSAoICdkZWxldGVkPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogbzBPb29vID0gcmUgLiBjb21waWxlICggJ21haW5icmFuY2hfbm90ZXM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpZiAzNiAtIDM2OiBPb29vb29vb09PIC4gT29PME8wMAogb09JSWlJaSA9IHJlIC4gY29tcGlsZSAoICdyZXBvX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9Pb09vb09vT09Pb28gPSByZSAuIGNvbXBpbGUgKCAnZGF0YV91cmw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJaWlpMWlJMWkgPSByZSAuIGNvbXBpbGUgKCAnemlwX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIEkxaWkxaWkxMWkxSSA9IHJlIC4gY29tcGlsZSAoICdnZW5yZXM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvME9vT08gPSByZSAuIGNvbXBpbGUgKCAnZm9ydW09IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPME8wT28wMCA9IHJlIC4gY29tcGlsZSAoICdyZXBvX2lkPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb09vTzAwbyA9IHJlIC4gY29tcGlsZSAoICdsaWNlbnNlPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb08wME8wID0gcmUgLiBjb21waWxlICggJ3BsYXRmb3JtPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSUlpMUlJSWkgPSByZSAuIGNvbXBpbGUgKCAndmlzaWJsZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE8wME9vbyA9IHJlIC4gY29tcGlsZSAoICdzY3JpcHQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPT09PME9PTyA9IHJlIC4gY29tcGlsZSAoICdwcm9ncmFtX3BsdWdpbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGkxaTFpaSA9IHJlIC4gY29tcGlsZSAoICdzY3JpcHRfbW9kdWxlPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaUlJMWlpMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19wbHVnaW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJMWkxaWlpSTEgPSByZSAuIGNvbXBpbGUgKCAnYXVkaW9fcGx1Z2luPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaUlJaSA9IHJlIC4gY29tcGlsZSAoICdpbWFnZV9wbHVnaW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvTzBvMDBvbzAgPSByZSAuIGNvbXBpbGUgKCAncmVwb3NpdG9yeT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpMUlJSUkgPSByZSAuIGNvbXBpbGUgKCAnd2VhdGhlcl9zZXJ2aWNlPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb08wMG9Pb29vb28wID0gcmUgLiBjb21waWxlICggJ3NraW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvT28gPSByZSAuIGNvbXBpbGUgKCAnc2VydmljZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE8wT09vb09vTyA9IHJlIC4gY29tcGlsZSAoICd3YXJuaW5nPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaTFJSTFJMUlpaTEgPSByZSAuIGNvbXBpbGUgKCAnd2ViX2ludGVyZmFjZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpSTExSWlpID0gcmUgLiBjb21waWxlICggJ21vdmllX3NjcmFwZXI9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPMG8wTzAgPSByZSAuIGNvbXBpbGUgKCAndHZfc2NyYXBlcj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElpMUlJMUkxMWkxID0gcmUgLiBjb21waWxlICggJ2FydGlzdF9zY3JhcGVyPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb09vb29vb09vTyA9IHJlIC4gY29tcGlsZSAoICdtdXNpY192aWRlb19zY3JhcGVyPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSWkxMTEgPSByZSAuIGNvbXBpbGUgKCAnc3VidGl0bGVzPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSTExMWkxaTExMTEgPSByZSAuIGNvbXBpbGUgKCAncmVxdWlyZXM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJSUlJMSA9IHJlIC4gY29tcGlsZSAoICdtb2R1bGVzPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSTFJMWkgPSByZSAuIGNvbXBpbGUgKCAnaWNvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIEkxSUlJaUlpSWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fcHJldmlldz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElJSUlJMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlJaTFJaTFpMWlJID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlMT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElJaUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlMj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGkxaUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlMz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJMUlpaUkxaWkxaSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPMG8gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fZ3VpZGU2PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb08wT29PMDBvID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlNz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElJMWlpaWlJSSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTg9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPME9vT08wb28wID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlOT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG9PTyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTEwPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogTzBvME9PMDAwMG9vbyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDE9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpSUlJSTFpSUlpaSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDI9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvT09PMDBvMDAwbyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpSWkxMWkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsND0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG9PMDBvbzBvMDBvMG8gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw1PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSWlJSUlJSWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw2PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSWlJaTFpSUlpMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDc9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPME9vTzBvb09PMG8gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw4PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT29PbzBvT29vT29PTyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDk9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvbzAwb29Pb08wMCA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDEwPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWYgOTYgLSA5NjogT28KIGlmIDg1IC0gODU6IG8wb09PbzBPME9vbyAuIE9vT29PTzAwIC8gaWlpaWlpaWkxIC4gTzAgJSBJSWkKIGlmIDkwIC0gOTA6IE9vME9vbyAlIE8wICogaUlpaTFJMTFJMUlJMSAuIElJaUlpMWlJCiBJMWlpaTExID0gT09PT29PT28wTzAgWyAwIF0gaWYgKCBsZW4gKCBPT09Pb09PbzBPMCApID4gMCApIGVsc2UgJycKIG9vbzBPID0gb09vb28wIFsgMCBdIGlmICggbGVuICggb09vb28wICkgPiAwICkgZWxzZSAnJwogaUlJMWlpaSA9IG9vTyBbIDAgXSBpZiAoIGxlbiAoIG9vTyApID4gMCApIGVsc2UgJycKIGkxMWkxaWlpSUkgPSBvMG8wME9PbzAgWyAwIF0gaWYgKCBsZW4gKCBvMG8wME9PbzAgKSA+IDAgKSBlbHNlICcnCiBvb09PMG9PMG9vMDBvID0gSTFJSWlpMSBbIDAgXSBpZiAoIGxlbiAoIEkxSUlpaTEgKSA+IDAgKSBlbHNlICcnCiBvT09vMG9vME8gPSBPTzBvMG9PT08wTyBbIDAgXSBpZiAoIGxlbiAoIE9PMG8wb09PTzBPICkgPiAwICkgZWxzZSAnJwogSWlpSWlJMUlpMWkgPSBpSSBbIDAgXSBpZiAoIGxlbiAoIGlJICkgPiAwICkgZWxzZSAnJwogaTFpSWkgPSBJMWkxMSBbIDAgXSBpZiAoIGxlbiAoIEkxaTExICkgPiAwICkgZWxzZSAnJwogaWlpaWkxSUkgPSBPb29JaUlJSUkxaTExSSBbIDAgXSBpZiAoIGxlbiAoIE9vb0lpSUlJSTFpMTFJICkgPiAwICkgZWxzZSAnJwogTzBPT08wT09vb28wMCA9IE9PT2lJSTEgWyAwIF0gaWYgKCBsZW4gKCBPT09pSUkxICkgPiAwICkgZWxzZSAnJwogaWYgNiAtIDY6IE8wME9PbzAwb28wbyAtIGlpaWlpaWlpMSAqIE9vIC4gSUlpSWkxaUkgLyBPMCAqIGlpaWlpaWlpMQogSUkxMWlJMTExaTEgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1EZXNjcmlwdGlvbjogWy9DT0xPUl0nICsgb28wTzAwT29vbzBPMCBbIDAgXSBpZiAoIGxlbiAoIG9vME8wME9vb28wTzAgKSA+IDAgKSBlbHNlICcnCiBPbzAwT29PbyA9IEkxMU9PIFsgMCBdIGlmICggbGVuICggSTExT08gKSA+IDAgKSBlbHNlICcnCiBpaTFpaTExMSA9IG8wTzBvbzBPTzBPIFsgMCBdIGlmICggbGVuICggbzBPMG9vME9PME8gKSA+IDAgKSBlbHNlICcnCiBpMTExMTFJMUkgPSAnW0NSXScgKyBPTzAgWyAwIF0gaWYgKCBsZW4gKCBPTzAgKSA+IDAgKSBlbHNlICcnCiBpaTFPbzAwMDBvT28gPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Vc2VyIE5vdGVzOiBbL0NPTE9SXScgKyBvME9vb28gWyAwIF0gaWYgKCBsZW4gKCBvME9vb28gKSA+IDAgKSBlbHNlICcnCiBpZiAzMSAtIDMxOiBPT09vT29vME8gLiBJSWkgKiBpaWlpaWlpaTEgKyBpMTFpSWlpSWlpICogb29PbwogT08wb29vMG8wTzBPb29vb28gPSBvT0lJaUlpIFsgMCBdIGlmICggbGVuICggb09JSWlJaSApID4gMCApIGVsc2UgJycKIGkxMUlJSWlJMUkgPSBPT29Pb29Pb09PT29vIFsgMCBdIGlmICggbGVuICggT09vT29vT29PT09vbyApID4gMCApIGVsc2UgJycKIG8waWlpSTFJMWlJSUlpMSA9IElpaWkxaUkxaSBbIDAgXSBpZiAoIGxlbiAoIElpaWkxaUkxaSApID4gMCApIGVsc2UgJycKIElpaSA9IEkxaWkxaWkxMWkxSSBbIDAgXSBpZiAoIGxlbiAoIEkxaWkxaWkxMWkxSSApID4gMCApIGVsc2UgJycKIEkxaWlpaUkxaUkgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdXBwb3J0IEZvcnVtOiBbL0NPTE9SXScgKyBvME9vT08gWyAwIF0gaWYgKCBsZW4gKCBvME9vT08gKSA+IDAgKSBlbHNlICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN1cHBvcnQgRm9ydW06IFsvQ09MT1JdTm8gZm9ydW0gZGV0YWlscyBnaXZlbiBieSBkZXZlbG9wZXInCiBpSWlpaWlpMWkgPSBvME9vT08gWyAwIF0gaWYgKCBsZW4gKCBvME9vT08gKSA+IDAgKSBlbHNlICdOb25lJwogaWlJaTFJSWlJID0gTzBPME9vMDAgWyAwIF0gaWYgKCBsZW4gKCBPME8wT28wMCApID4gMCApIGVsc2UgJycKIGxpY2Vuc2UgPSBvT29PMDBvIFsgMCBdIGlmICggbGVuICggb09vTzAwbyApID4gMCApIGVsc2UgJycKIGkxb08wT08wID0gJ1tDT0xPUj1vcmFuZ2VdICAgICBQbGF0Zm9ybTogWy9DT0xPUl0nICsgb08wME8wIFsgMCBdIGlmICggbGVuICggb08wME8wICkgPiAwICkgZWxzZSAnJwogbzBPME9vMDAgPSBJSWkxSUlJaSBbIDAgXSBpZiAoIGxlbiAoIElJaTFJSUlpICkgPiAwICkgZWxzZSAnJwogTzBPbzBvMDAwb08gPSBPMDBPb28gWyAwIF0gaWYgKCBsZW4gKCBPMDBPb28gKSA+IDAgKSBlbHNlICcnCiBvTzBvMDBvT09vb08wID0gT09PTzBPT08gWyAwIF0gaWYgKCBsZW4gKCBPT09PME9PTyApID4gMCApIGVsc2UgJycKIE9PT29PMDAwID0gaTFpMWlpIFsgMCBdIGlmICggbGVuICggaTFpMWlpICkgPiAwICkgZWxzZSAnJwogb09PT08gPSBpSUkxaWkxIFsgMCBdIGlmICggbGVuICggaUlJMWlpMSApID4gMCApIGVsc2UgJycKIElpID0gSTFpMWlpaUkxIFsgMCBdIGlmICggbGVuICggSTFpMWlpaUkxICkgPiAwICkgZWxzZSAnJwogSWkxaWkxMTFpMSA9IGlJSWkgWyAwIF0gaWYgKCBsZW4gKCBpSUlpICkgPiAwICkgZWxzZSAnJwogaTFpMWkxSSA9IG9PMG8wMG9vMCBbIDAgXSBpZiAoIGxlbiAoIG9PMG8wMG9vMCApID4gMCApIGVsc2UgJycKIG9Pb28wMDAgPSBvT28gWyAwIF0gaWYgKCBsZW4gKCBvT28gKSA+IDAgKSBlbHNlICcnCiBvMDBPTzAwT29PID0gb08wMG9Pb29vb28wIFsgMCBdIGlmICggbGVuICggb08wMG9Pb29vb28wICkgPiAwICkgZWxzZSAnJwogT29vT28wMG8gPSBPME9Pb29Pb08gWyAwIF0gaWYgKCBsZW4gKCBPME9Pb29Pb08gKSA+IDAgKSBlbHNlICcnCiBJaUkxMWkxSUlpaUkgPSBpMUlJMUkxSWlpMSBbIDAgXSBpZiAoIGxlbiAoIGkxSUkxSTFJaWkxICkgPiAwICkgZWxzZSAnJwogb09PbzAwMG9Pb08wID0gaWkxSUlJSSBbIDAgXSBpZiAoIGxlbiAoIGlpMUlJSUkgKSA+IDAgKSBlbHNlICcnCiBPb09vMDBvME9PID0gaWlJMTFJaWkgWyAwIF0gaWYgKCBsZW4gKCBpaUkxMUlpaSApID4gMCApIGVsc2UgJycKIGlpMUlJSUlpSTExID0gTzBvME8wIFsgMCBdIGlmICggbGVuICggTzBvME8wICkgPiAwICkgZWxzZSAnJwogaUkxSUlJaWkgPSBJaTFJSTFJMTFpMSBbIDAgXSBpZiAoIGxlbiAoIElpMUlJMUkxMWkxICkgPiAwICkgZWxzZSAnJwogSTFpMTFpaTExID0gb09vb29vb09vTyBbIDAgXSBpZiAoIGxlbiAoIG9Pb29vb29Pb08gKSA+IDAgKSBlbHNlICcnCiBPTzAwTzBvT08gPSBJaTExMSBbIDAgXSBpZiAoIGxlbiAoIElpMTExICkgPiAwICkgZWxzZSAnJwogSWkxaUkxMTEgPSBJMTExaTFpMTExMSBbIDAgXSBpZiAoIGxlbiAoIEkxMTFpMWkxMTExICkgPiAwICkgZWxzZSAnJwogTzBvb29vMDBvME9vID0gSUlJSTEgWyAwIF0gaWYgKCBsZW4gKCBJSUlJMSApID4gMCApIGVsc2UgJycKIEkxaWlpID0gSTFJMWkgWyAwIF0gaWYgKCBsZW4gKCBJMUkxaSApID4gMCApIGVsc2UgJycKIG9PMG8wTzBPb28wbyA9IEkxSUlJaUlpSWkgWyAwIF0gaWYgKCBsZW4gKCBJMUlJSWlJaUlpICkgPiAwICkgZWxzZSAnTm9uZScKIGkxSWkxMUlJID0gSUlJSUkxIFsgMCBdIGlmICggbGVuICggSUlJSUkxICkgPiAwICkgZWxzZSAnTm9uZScKIElpb08wb09PTzBPb28gPSBpSWkxSWkxaTFpSSBbIDAgXSBpZiAoIGxlbiAoIGlJaTFJaTFpMWlJICkgPiAwICkgZWxzZSAnTm9uZScKIGkxaTFJID0gSUlpSTEgWyAwIF0gaWYgKCBsZW4gKCBJSWlJMSApID4gMCApIGVsc2UgJ05vbmUnCiBJaUlJaTEgPSBpMWlJMSBbIDAgXSBpZiAoIGxlbiAoIGkxaUkxICkgPiAwICkgZWxzZSAnTm9uZScKIGlJSTExSTFJaTEgPSBpaTEgWyAwIF0gaWYgKCBsZW4gKCBpaTEgKSA+IDAgKSBlbHNlICdOb25lJwogbzBvMCA9IEkxSWlpSTFpaTFpIFsgMCBdIGlmICggbGVuICggSTFJaWlJMWlpMWkgKSA+IDAgKSBlbHNlICdOb25lJwogb09vMG9PID0gTzBvIFsgMCBdIGlmICggbGVuICggTzBvICkgPiAwICkgZWxzZSAnTm9uZScKIElJaTFJSUlJaSA9IG9PME9vTzAwbyBbIDAgXSBpZiAoIGxlbiAoIG9PME9vTzAwbyApID4gMCApIGVsc2UgJ05vbmUnCiBPT09vTyA9IElJMWlpaWlJSSBbIDAgXSBpZiAoIGxlbiAoIElJMWlpaWlJSSApID4gMCApIGVsc2UgJ05vbmUnCiBJMWkgPSBPME9vT08wb28wIFsgMCBdIGlmICggbGVuICggTzBPb09PMG9vMCApID4gMCApIGVsc2UgJ05vbmUnCiBpaWlJID0gb09PIFsgMCBdIGlmICggbGVuICggb09PICkgPiAwICkgZWxzZSAnTm9uZScKIElpSWkxID0gTzBvME9PMDAwMG9vbyBbIDAgXSBpZiAoIGxlbiAoIE8wbzBPTzAwMDBvb28gKSA+IDAgKSBlbHNlICdOb25lJwogaTExMWlpSTFpaSA9IGlJSUlJMWlJSWlpIFsgMCBdIGlmICggbGVuICggaUlJSUkxaUlJaWkgKSA+IDAgKSBlbHNlICdOb25lJwogSUlpaWkgPSBvT09PMDBvMDAwbyBbIDAgXSBpZiAoIGxlbiAoIG9PT08wMG8wMDBvICkgPiAwICkgZWxzZSAnTm9uZScKIEkxaTFpID0gaUlpMTFpMSBbIDAgXSBpZiAoIGxlbiAoIGlJaTExaTEgKSA+IDAgKSBlbHNlICdOb25lJwogT09PT29vTzBvTzAwTzBvID0gb08wMG9vMG8wMG8wbyBbIDAgXSBpZiAoIGxlbiAoIG9PMDBvbzBvMDBvMG8gKSA+IDAgKSBlbHNlICdOb25lJwogb29PTzAwb09PbzAwMCA9IElpSUlJSUlpIFsgMCBdIGlmICggbGVuICggSWlJSUlJSWkgKSA+IDAgKSBlbHNlICdOb25lJwogSUlpaTExSUkxMUlJMSA9IElpSWkxaUlJaTEgWyAwIF0gaWYgKCBsZW4gKCBJaUlpMWlJSWkxICkgPiAwICkgZWxzZSAnTm9uZScKIElJMUkgPSBPME9vTzBvb09PMG8gWyAwIF0gaWYgKCBsZW4gKCBPME9vTzBvb09PMG8gKSA+IDAgKSBlbHNlICdOb25lJwogT29PbzAwMG9PbzBvbyA9IE9vT28wb09vb09vT08gWyAwIF0gaWYgKCBsZW4gKCBPb09vMG9Pb29Pb09PICkgPiAwICkgZWxzZSAnTm9uZScKIG9PME8gPSBvbzAwb29Pb08wMCBbIDAgXSBpZiAoIGxlbiAoIG9vMDBvb09vTzAwICkgPiAwICkgZWxzZSAnTm9uZScKIGlmIDg2IC0gODY6IE9vT29PTzAwIC4gaUlpaTFJMTFJMUlJMSAtIE9vTzBPMDAKIHByaW50ICIjIyMgQWRkb24gRGV0YWlsczogIiArIG9vbzBPCiBpZiA1NiAtIDU2OiBPMAogaWYgaTExMTExSTFJICE9ICcnIDoKICBPT28wMCA9ICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN0YXR1czogWy9DT0xPUl1bQ09MT1I9cmVkXVRoaXMgYWRkLW9uIGlzIGRlcHJlY2lhdGVkLCBpdFwncyBubyBsb25nZXIgYXZhaWxhYmxlLlsvQ09MT1JdJwogIGlmIDM3IC0gMzc6IGkxSUlpCiBlbGlmIGlpMWlpMTExID09ICcnIGFuZCBPbzAwT29PbyA9PSAnJyBhbmQgT29vT28wMG8gPT0gJycgOgogIE9PbzAwID0gJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdU3RhdHVzOiBbL0NPTE9SXVtDT0xPUj1saW1lXU5vIHJlcG9ydGVkIHByb2JsZW1zWy9DT0xPUl0nCiAgaWYgNDYgLSA0NjogT29Pb09PMDAgLSBPT09vT29vME8gLSBPMDBPT28wMG9vMG8gLiBpMUlJaQogZWxpZiBpaTFpaTExMSA9PSAnJyBhbmQgT28wME9vT28gPT0gJycgYW5kIE9vb09vMDBvICE9ICcnIGFuZCBpMTExMTFJMUkgPT0gJycgOgogIE9PbzAwID0gJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdU3RhdHVzOiBbL0NPTE9SXVtDT0xPUj1vcmFuZ2VdQWx0aG91Z2ggdGhlcmUgaGF2ZSBiZWVuIG5vIHJlcG9ydGVkIHByb2JsZW1zIHRoZXJlIG1heSBiZSBpc3N1ZXMgd2l0aCB0aGlzIGFkZC1vbiwgc2VlIGJlbG93LlsvQ09MT1JdJwogIGlmIDM1IC0gMzU6IElJMTExaWlpaSAqIE9PT29Pb28wTyAtIE9vb29vb29vT08gLiBPT09vT29vME8gLiBPT09vT29vME8KIGVsaWYgaWkxaWkxMTEgPT0gJycgYW5kIE9vMDBPb09vICE9ICcnIDoKICBPT28wMCA9ICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN0YXR1czogWy9DT0xPUl1NYXJrZWQgYXMgYnJva2VuIGJ5IHRoZSBhZGQtb24gZGV2ZWxvcGVyLltDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1EZXZlbG9wZXIgQ29tbWVudHM6IFsvQ09MT1JdJyArIE9vMDBPb09vCiAgaWYgMTEgLSAxMTogSUlpIC8gT29Pb09PMDAgKyBPT09vT29vME8gJSBpSWlpMUkxMUkxSUkxCiBlbGlmIGlpMWlpMTExICE9ICcnIGFuZCBPbzAwT29PbyA9PSAnJyA6CiAgT09vMDAgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdGF0dXM6IFsvQ09MT1JdTWFya2VkIGFzIGJyb2tlbiBieSBhIG1lbWJlciBvZiB0aGUgY29tbXVuaXR5IGF0IFdXVy5OT09CU0FORE5FUkRTLkNPTVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Vc2VyIENvbW1lbnRzOiBbL0NPTE9SXScgKyBpaTFpaTExMQogIGlmIDQyIC0gNDI6IEkxaWkxMWlJaTExaSAqIE9vT29PTzAwICUgaWlpaWlpaWkxIC0gT29Pb09PMDAgLiBpMTFpSWlpSWlpIC0gSUlpCiBlbGlmIGlpMWlpMTExICE9ICcnIGFuZCBPbzAwT29PbyAhPSAnJyA6CiAgT09vMDAgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdGF0dXM6IFsvQ09MT1JdTWFya2VkIGFzIGJyb2tlbiBieSBib3RoIHRoZSBhZGQtb24gZGV2ZWxvcGVyIGFuZCBhIG1lbWJlciBvZiB0aGUgY29tbXVuaXR5IGF0IFdXVy5OT09CU0FORE5FUkRTLkNPTVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1EZXZlbG9wZXIgQ29tbWVudHM6IFsvQ09MT1JdJyArIE9vMDBPb09vICsgJ1tDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Vc2VyIENvbW1lbnRzOiBbL0NPTE9SXScgKyBpaTFpaTExMQogIGlmIDg0IC0gODQ6IElJaSAtIEkxaWkxMWlJaTExaSAvIE9PT29Pb28wTwogIGlmIDEzIC0gMTM6IElJaWlpSTFpSUlJIC0gT28wT29vIC0gaWlpaWlpaWkxCiBPMDBPbyA9IHN0ciAoICdbQ09MT1I9b3JhbmdlXU5hbWU6IFsvQ09MT1JdJyArIG9vbzBPICsgJ1tDT0xPUj1vcmFuZ2VdICAgICBBdXRob3Iocyk6IFsvQ09MT1JdJyArIG9vT08wb08wb28wMG8gKyAnW0NPTE9SPW9yYW5nZV1bQ1JdW0NSXVZlcnNpb246IFsvQ09MT1JdJyArIG9PT28wb28wTyArICdbQ09MT1I9b3JhbmdlXSAgICAgQ3JlYXRlZDogWy9DT0xPUl0nICsgSWlpSWlJMUlpMWkgKyAnW0NPTE9SPW9yYW5nZV0gICAgIFVwZGF0ZWQ6IFsvQ09MT1JdJyArIGlpaWlpMUlJICsgJ1tDT0xPUj1vcmFuZ2VdW0NSXVtDUl1SZXBvc2l0b3J5OiBbL0NPTE9SXScgKyBpaUlpMUlJaUkgKyBpMW9PME9PMCArICdbQ09MT1I9b3JhbmdlXSAgICAgQWRkLW9uIFR5cGUocyk6IFsvQ09MT1JdJyArIGkxaUlpICsgSWkxaUkxMTEgKyBPT28wMCArIGkxMTExMUkxSSArIE9vb09vMDBvICsgSTFpaWlpSTFpSSArIElJMTFpSTExMWkxICsgaWkxT28wMDAwb09vICkKIGlmIDQyIC0gNDI6IElJMTExaWlpaSAlIElJaWlpSTFpSUlJICUgSUlpICUgaTFJSWkgLSBvb09vCiBpZiAzMCAtIDMwOiBpaWlpaWlpaTEgJSBpaWlpaWlpaTEgLSBvMG9PT28wTzBPb28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGkxMWkxaWlpSUkgKSApIDoKICBpZiAnc2NyaXB0Lm1vZHVsZScgaW4gaTExaTFpaWlJSSBvciAncmVwbycgaW4gaTExaTFpaWlJSSA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9b3JhbmdlXShBbHJlYWR5IEluc3RhbGxlZClbL0NPTE9SXScgLCAnJyAsICcnICwgSTFpaWkgLCAnJyAsICcnICwgJycgKQogIGVsc2UgOgogICBJaTFJMUlpICggJycgLCAnW0NPTE9SPW9yYW5nZV0oQWxyZWFkeSBJbnN0YWxsZWQpWy9DT0xPUl0gQ2xpY2sgaGVyZSB0byBydW4gdGhlIGFkZC1vbicgLCBpMTFpMWlpaUlJICwgJ3J1bl9hZGRvbicgLCBJMWlpaSAsICcnICwgJycgLCAnJyApCiAgIGlmIDcwIC0gNzA6IE9vME9vbyAuIE9vT29PTzAwCiAgIGlmIDU4IC0gNTg6IE9PT29Pb28wTyArIElJMTExaWlpaSAqIElJaUlpMWlJICogaTExaUlpaUlpaSAtIGlJaWkxSTExSTFJSTEKIGlmIG9vbzBPID09ICcnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPXllbGxvd11Tb3JyeSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gaGlnaCB0cmFmZmljIG9uIHNlcnZlciwgcGxlYXNlIHRyeSBhZ2FpblsvQ09MT1JdJyAsICcnICwgJycgLCBJMWlpaSAsICcnICwgJycgLCAnJyApCiAgaWYgNjggLSA2ODogT29vb29vb29PTyAlIElJMTExaWlpaQogIGlmIDI2IC0gMjY6IElJMTExaWlpaSAlIGkxMWlJaWlJaWkgJSBpSWlpMUkxMUkxSUkxICUgT09Pb09vbzBPICogT09Pb09vbzBPICogSTFpaTExaUlpMTFpCiBlbGlmIG9vbzBPICE9ICcnIDoKICBpZiAyNCAtIDI0OiBJSTExMWlpaWkgJSBJSWkgLSBpaWlpaWlpaTEgKyBJMUlpaUkgKiBJMWlpMTFpSWkxMWkKICBpZiAoIGlpMWlpMTExID09ICcnICkgYW5kICggT28wME9vT28gPT0gJycgKSBhbmQgKCBpMTExMTFJMUkgPT0gJycgKSBhbmQgKCBPb29PbzAwbyA9PSAnJyApIDoKICAgSWkxSTFJaSAoICdhZGRvbicgLCAnW0NPTE9SPXllbGxvd11bRlVMTCBERVRBSUxTXVsvQ09MT1JdIE5vIHByb2JsZW1zIHJlcG9ydGVkJyAsIE8wME9vICwgJ3RleHRfZ3VpZGUnICwgSTFpaWkgLCAnJyAsICcnICwgTzAwT28gKQogICBpZiAyIC0gMjogTzAwT09vMDBvbzBvIC0gSUlpaWlJMWlJSUkKICBpZiAoIGlpMWlpMTExICE9ICcnIGFuZCBpMTExMTFJMUkgPT0gJycgKSBvciAoIE9vMDBPb09vICE9ICcnIGFuZCBpMTExMTFJMUkgPT0gJycgKSBvciAoIE9vb09vMDBvICE9ICcnIGFuZCBpMTExMTFJMUkgPT0gJycgKSA6CiAgIElpMUkxSWkgKCAnYWRkb24nICwgJ1tDT0xPUj15ZWxsb3ddW0ZVTEwgREVUQUlMU11bL0NPTE9SXVtDT0xPUj1vcmFuZ2VdIFBvc3NiaWxlIHByb2JsZW1zIHJlcG9ydGVkWy9DT0xPUl0nICwgTzAwT28gLCAndGV4dF9ndWlkZScgLCBJMWlpaSAsICcnICwgJycgLCBPMDBPbyApCiAgIGlmIDgzIC0gODM6IG9vT28gJSBvMG9PT28wTzBPb28gJSBPMDBPT28wMG9vMG8gLSBJSTExMWlpaWkgKiBPbyAvIE9vb29vb29vT08KICBpZiBpMTExMTFJMUkgIT0gJycgOgogICBJaTFJMUlpICggJ2FkZG9uJyAsICdbQ09MT1I9eWVsbG93XVtGVUxMIERFVEFJTFNdWy9DT0xPUl1bQ09MT1I9cmVkXSBBZGQtb24gbm93IGRlcHJlY2lhdGVkWy9DT0xPUl0nICwgTzAwT28gLCAndGV4dF9ndWlkZScgLCBJMWlpaSAsICcnICwgJycgLCBPMDBPbyApCiAgIGlmIDE4IC0gMTg6IE9vTzBPMDAgKyBpSWlpMUkxMUkxSUkxIC0gSUkxMTFpaWlpIC0gSTFJaWlJCiAgIGlmIDcxIC0gNzE6IE9vb29vb29vT08KICBpZiBpMTExMTFJMUkgPT0gJycgOgogICBpZiAzMyAtIDMzOiBJSWkKICAgaWYgaWlJaTFJSWlJICE9ICcnIGFuZCAnc3VwZXJyZXBvJyBub3QgaW4gaWlJaTFJSWlJIDoKICAgIGlmIElpaUlJSTExMWlJID09ICd0cnVlJyA6CiAgICAgT09vMG9PMDBvb08wMCAoICdbQ09MT1I9bGltZV1bSU5TVEFMTCAtIFJlY29tbWVuZGVkXSBbL0NPTE9SXScgKyBvb28wTyAsIG9vbzBPICwgJycgLCAnYWRkb25faW5zdGFsbF96ZXJvJyAsIEkxaWlpICwgJycgLCAnJyAsIElJMTFpSTExMWkxICwgSTFpaWkxMSAsIE9PMG9vbzBvME8wT29vb29vICwgaWlJaTFJSWlJICwgaTExaTFpaWlJSSAsIG9vT08wb08wb28wMG8gLCBpSWlpaWlpMWkgLCBpMTFJSUlpSTFJICkKICAgICBPT28wb08wMG9vTzAwICggJ1tDT0xPUj1saW1lXVtJTlNUQUxMIC0gQmFja3VwIE9wdGlvbl0gWy9DT0xPUl0nICsgb29vME8gLCBvb28wTyAsICcnICwgJ2FkZG9uX2luc3RhbGwnICwgSTFpaWkgLCAnJyAsICcnICwgSUkxMWlJMTExaTEgLCBvMGlpaUkxSTFpSUlJaTEgLCBPTzBvb28wbzBPME9vb29vbyAsIGlpSWkxSUlpSSAsIGkxMWkxaWlpSUkgLCBvb09PMG9PMG9vMDBvICwgaUlpaWlpaTFpICwgaTExSUlJaUkxSSApCiAgICBlbHNlIDoKICAgICBPT28wb08wMG9vTzAwICggJ1tDT0xPUj1saW1lXVtJTlNUQUxMXSBbL0NPTE9SXScgKyBvb28wTyAsIG9vbzBPICwgJycgLCAnYWRkb25faW5zdGFsbF96ZXJvJyAsIEkxaWlpICwgJycgLCAnJyAsIElJMTFpSTExMWkxICwgSTFpaWkxMSAsIE9PMG9vbzBvME8wT29vb29vICwgaWlJaTFJSWlJICwgaTExaTFpaWlJSSAsIG9vT08wb08wb28wMG8gLCBpSWlpaWlpMWkgLCBpMTFJSUlpSTFJICkKICAgICBpZiA2MiAtIDYyOiBJMWlpMTFpSWkxMWkgKyBPMDBPT28wMG9vMG8gKyBpMUlJaSAvIE9vb29vb29vT08KICAgaWYgaWlJaTFJSWlJID09ICcnIG9yICdzdXBlcnJlcG8nIGluIGlpSWkxSUlpSSA6CiAgICBPT28wb08wMG9vTzAwICggJ1tDT0xPUj1saW1lXVtJTlNUQUxMXSBbL0NPTE9SXScgKyBvb28wTyArICcgLSBUSElTIElTIE5PVCBJTiBBIFNFTEYgVVBEQVRJTkcgUkVQTycgLCBvb28wTyAsICcnICwgJ2FkZG9uX2luc3RhbGwnICwgJycgLCAnJyAsICcnICwgSUkxMWlJMTExaTEgLCBvMGlpaUkxSTFpSUlJaTEgLCBPTzBvb28wbzBPME9vb29vbyAsIGlpSWkxSUlpSSAsIGkxMWkxaWlpSUkgLCBvb09PMG9PMG9vMDBvICwgaUlpaWlpaTFpICwgaTExSUlJaUkxSSApCiAgICBpZiA3IC0gNzogbzBvT09vME8wT29vICsgaTFJSWkgLiBJMUlpaUkgLyBPbzBPb28KICAgIGlmIDIyIC0gMjI6IGlpaWlpaWlpMSAtIGlpaWlpaWlpMSAlIE9vIC4gSUlpICsgb29PbwogIGlmIG9PMG8wTzBPb28wbyAhPSAnTm9uZScgOgogICBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICBQcmV2aWV3JyAsIElpb08wb09PTzBPb28gLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDYzIC0gNjM6IEkxSWlpSSAlIElJaSAqIG8wb09PbzBPME9vbyArIElJaSAvIE9vME9vbyAlIElJaUlpMWlJCiAgaWYgSWlvTzBvT09PME9vbyAhPSAnTm9uZScgOgogICBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICAnICsgSWlJaTEgLCBJaW9PMG9PT08wT29vICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA0NSAtIDQ1OiBJSWlpaUkxaUlJSQogIGlmIGkxaTFJICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBpMTExaWlJMWlpICwgaTFpMUkgLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDIwIC0gMjA6IE9vb29vb29vT08gKiBvMG9PT28wTzBPb28gKiBPMCAuIE9vCiAgaWYgSWlJSWkxICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBJSWlpaSAsIElpSUlpMSAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgNzggLSA3ODogaUlpaTFJMTFJMUlJMSArIE9PT29Pb28wTyAtIE8wME9PbzAwb28wbyAqIElJaSAtIE9vb29vb29vT08gJSBPb09vT08wMAogIGlmIGlJSTExSTFJaTEgIT0gJ05vbmUnIDoKICAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtWSURFT11bL0NPTE9SXSAgJyArIEkxaTFpICwgaUlJMTFJMUlpMSAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgMzQgLSAzNDogTzAKICBpZiBvMG8wICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBPT09Pb29PMG9PMDBPMG8gLCBvMG8wICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA4MCAtIDgwOiBpMUlJaSAtIE9vME9vbyAvIE9vTzBPMDAgLSBpMTFpSWlpSWlpCiAgaWYgb09vMG9PICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBvb09PMDBvT09vMDAwICwgb09vMG9PICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA2OCAtIDY4OiBvb09vIC0gSTFpaTExaUlpMTFpICUgTzAgJSBJSWkKICBpZiBJSWkxSUlJSWkgIT0gJ05vbmUnIDoKICAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtWSURFT11bL0NPTE9SXSAgJyArIElJaWkxMUlJMTFJSTEgLCBJSWkxSUlJSWkgLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDExIC0gMTE6IE8wIC8gT29PME8wMCAlIE9vICsgbzBvT09vME8wT29vICsgaUlpaTFJMTFJMUlJMQogIGlmIE9PT29PICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBJSTFJICwgT09Pb08gLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDQwIC0gNDA6IGlpaWlpaWlpMSAtIE9vIC4gTzAwT09vMDBvbzBvICogT28wT29vICUgSUlpCiAgaWYgSTFpICE9ICdOb25lJyA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBPb09vMDAwb09vMG9vICwgSTFpICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA1NiAtIDU2OiBpMTFpSWlpSWlpIC4gbzBvT09vME8wT29vIC0gSTFJaWlJICogT09Pb09vbzBPCiAgaWYgaWlpSSAhPSAnTm9uZScgOgogICBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICAnICsgb08wTyAsIGlpaUkgLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDkxIC0gOTE6IG9vT28gKyBPb29vb29vb09PIC0gaTFJSWkKICAgaWYgODQgLSA4NDogTzAwT09vMDBvbzBvIC8gSUlpaWlJMWlJSUkKZGVmIE9PT29vbzBPb29Pb08gKCB1cmwgKSA6CiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQW5pbWUnICwgdXJsICsgJyZnZW5yZT1hbmltZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBdWRpb2Jvb2tzJyAsIHVybCArICcmZ2VucmU9YXVkaW9ib29rcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdDb21lZHknICwgdXJsICsgJyZnZW5yZT1jb21lZHknICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ29taWNzJyAsIHVybCArICcmZ2VucmU9Y29taWNzJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0RvY3VtZW50YXJ5JyAsIHVybCArICcmZ2VucmU9ZG9jdW1lbnRhcnknICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRG93bmxvYWRzJyAsIHVybCArICcmZ2VucmU9ZG93bmxvYWRzJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0Zvb2QnICwgdXJsICsgJyZnZW5yZT1mb29kJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0dhbWluZycgLCB1cmwgKyAnJmdlbnJlPWdhbWluZycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdIZWFsdGgnICwgdXJsICsgJyZnZW5yZT1oZWFsdGgnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnSG93IFRvLi4uJyAsIHVybCArICcmZ2VucmU9aG93dG8nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnS2lkcycgLCB1cmwgKyAnJmdlbnJlPWtpZHMnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnTGl2ZSBUVicgLCB1cmwgKyAnJmdlbnJlPWxpdmV0dicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdNb3ZpZXMnICwgdXJsICsgJyZnZW5yZT1tb3ZpZXMnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnTXVzaWMnICwgdXJsICsgJyZnZW5yZT1tdXNpYycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdOZXdzJyAsIHVybCArICcmZ2VucmU9bmV3cycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdQaG90b3MnICwgdXJsICsgJyZnZW5yZT1waG90b3MnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnUG9kY2FzdHMnICwgdXJsICsgJyZnZW5yZT1wb2RjYXN0cycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdSYWRpbycgLCB1cmwgKyAnJmdlbnJlPXJhZGlvJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1JlbGlnaW9uJyAsIHVybCArICcmZ2VucmU9cmVsaWdpb24nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3BhY2UnICwgdXJsICsgJyZnZW5yZT1zcGFjZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdTcG9ydHMnICwgdXJsICsgJyZnZW5yZT1zcG9ydHMnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3Vic2NyaXB0aW9uJyAsIHVybCArICcmZ2VucmU9c3Vic2NyaXB0aW9uJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1RlY2hub2xvZ3knICwgdXJsICsgJyZnZW5yZT10ZWNoJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1RyYWlsZXJzJyAsIHVybCArICcmZ2VucmU9dHJhaWxlcnMnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnVFYgU2hvd3MnICwgdXJsICsgJyZnZW5yZT10dicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdNaXNjLicgLCB1cmwgKyAnJmdlbnJlPW90aGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgOTEgLSA5MTogb29PbyArIEkxSWlpSQogaWYgbzBPIC4gZ2V0U2V0dGluZyAoICdhZHVsdCcgKSA9PSAndHJ1ZScgOgogIElpMUkxSWkgKCAnZm9sZGVyJyAsICdYWFgnICwgdXJsICsgJyZnZW5yZT1hZHVsdCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKICBpZiA1OSAtIDU5OiBJMUlpaUkgKyBpMTFpSWlpSWlpICsgaTFJSWkgLyBPT09vT29vME8KICBpZiA0NCAtIDQ0OiBPT09vT29vME8gLiBPb09vT08wMCAqIEkxSWlpSSArIE9vb29vb29vT08gLSBJSWlJaTFpSSAtIElJaWlpSTFpSUlJCmRlZiBJMWlpaW9PTzBPTzBPICggbmFtZSAsIHppcF9saW5rICwgcmVwb19saW5rICwgcmVwb19pZCAsIGFkZG9uX2lkICwgcHJvdmlkZXJfbmFtZSAsIGZvcnVtICwgZGF0YV9wYXRoICkgOgogZm9ydW0gPSBzdHIgKCBmb3J1bSApCiByZXBvX2lkID0gc3RyICggcmVwb19pZCApCiBvMDBvID0gMQogSUlJMTFJID0gMQogSWkxSTExSSA9IDEKIGlpSWlpMUkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGFkZG9uX2lkICkgKQogaWYgNDcgLSA0NzogaWlpaWlpaWkxIC4gT09Pb09vbzBPIC8gbzBvT09vME8wT29vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaUlpaTFJICkgOgogIE9Pb09PID0gMQogIGlmIDY2IC0gNjY6IE9vME9vbyAtIG8wb09PbzBPME9vbyAqIElJaWlpSTFpSUlJICsgT29Pb09PMDAgKyBvMG9PT28wTzBPb28gLSBpSWlpMUkxMUkxSUkxCiBlbHNlIDoKICBPT29PTyA9IDAKICBpZiAxNyAtIDE3OiBvb09vCiBpMWlpMTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wME8gLCBuYW1lICsgJy56aXAnICkgKQogaWkxaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYWRkb25faWQgKSApCiBpZiA1IC0gNTogb29PbyAuIEkxaWkxMWlJaTExaSAuIElJMTExaWlpaSAuIE9vb29vb29vT08KIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiSW5zdGFsbGluZyBBZGRvbiIgLCAiUGxlYXNlIHdhaXQgd2hpbHN0IHlvdXIgYWRkb24gaXMgaW5zdGFsbGVkIiAsICcnICwgJycgKQogaWYgOTYgLSA5NjogaTExaUlpaUlpaSAtIE9vICUgTzAgLyBPb08wTzAwCiB0cnkgOgogIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHJlcG9fbGluayAsIGkxaWkxMSAsIE9Pb29PME9Pb28gKQogIGV4dHJhY3QgLiBhbGwgKCBpMWlpMTEgLCBJSTExaWlpaTFJaSAsIE9Pb29PME9Pb28gKQogIGlmIDEwMCAtIDEwMDogSUlpSWkxaUkgLyBPMDBPT28wMG9vMG8gLSBPb29vb29vb09PICUgSUkxMTFpaWlpIC0gSTFJaWlJICUgT29Pb09PMDAKIGV4Y2VwdCA6CiAgaWYgNjAgLSA2MDogaUlpaTFJMTFJMUlJMSArIGkxSUlpCiAgdHJ5IDoKICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggemlwX2xpbmsgLCBpMWlpMTEgLCBPT29vTzBPT29vICkKICAgZXh0cmFjdCAuIGFsbCAoIGkxaWkxMSAsIElJMTFpaWlpMUlpICwgT09vb08wT09vbyApCiAgIGlmIDg2IC0gODY6IGlJaWkxSTExSTFJSTEgKyBPb09vT08wMCAuIGkxMWlJaWlJaWkgLSBPMDBPT28wMG9vMG8KICBleGNlcHQgOgogICBpZiA1MSAtIDUxOiBPb09vT08wMAogICB0cnkgOgogICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpMWkgKSA6CiAgICAgb3MgLiBtYWtlZGlycyAoIGlpMWkgKQogICAgIGlmIDE0IC0gMTQ6IElJaWlpSTFpSUlJICUgb29PbyAlIE9vME9vbyAtIGkxMWlJaWlJaWkKICAgIE8wT29vb08wID0gb29vME8wbzAwTyAoIGRhdGFfcGF0aCAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICAgIG8wT08wMDBvb09vID0gcmUgLiBjb21waWxlICggJ2hyZWY9IiguKz8pIicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIE8wT29vb08wICkKICAgIGlmIDg2IC0gODY6IE9vTzBPMDAgKiBPb29vb29vb09PCiAgICBmb3IgT29vTzBvT28gaW4gbzBPTzAwMG9vT28gOgogICAgIG9PT28wME8wT09PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpMWkgLCBPb29PMG9PbyApICkKICAgICBpZiAzMSAtIDMxOiBPT09vT29vME8gJSBPbyAqIE9PT29Pb28wTwogICAgIGlmIGFkZG9uX2lkIG5vdCBpbiBPb29PMG9PbyBhbmQgJy8nIG5vdCBpbiBPb29PMG9PbyA6CiAgICAgIGlmIDQ1IC0gNDU6IGkxSUlpIC4gSTFJaWlJICsgT28gLSBPb29vb29vb09PICUgaWlpaWlpaWkxCiAgICAgIHRyeSA6CiAgICAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJEb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XSIgKyBPb29PMG9PbyArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggZGF0YV9wYXRoICsgT29vTzBvT28gLCBvT09vMDBPME9PT28gLCBPT29vTzBPT29vICkKICAgICAgIGlmIDEgLSAxOiBpSWlpMUkxMUkxSUkxCiAgICAgIGV4Y2VwdCA6CiAgICAgICBwcmludCAiZmFpbGVkIHRvIGluc3RhbGwiICsgT29vTzBvT28KICAgICAgIGlmIDkzIC0gOTM6IGkxSUlpIC4gaTExaUlpaUlpaSAuIE9vME9vbwogICAgIGlmICcvJyBpbiBPb29PMG9PbyBhbmQgJy4uJyBub3QgaW4gT29vTzBvT28gYW5kICdodHRwJyBub3QgaW4gT29vTzBvT28gOgogICAgICBPME8wME9PbyA9IGRhdGFfcGF0aCArIE9vb08wb09vCiAgICAgIE9vT09vICggb09PbzAwTzBPT09vICwgTzBPMDBPT28gKQogICAgICBpZiAxNyAtIDE3OiBpMUlJaQogICBleGNlcHQgOgogICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiRXJyb3IgZG93bmxvYWRpbmcgYWRkLW9uIiAsICdUaGVyZSB3YXMgYW4gZXJyb3IgZG93bmxvYWRpbmcgW0NPTE9SPXllbGxvd10nICsgbmFtZSAsICdbL0NPTE9SXVBsZWFzZSBjb25zaWRlciB1cGRhdGluZyB0aGUgYWRkLW9uIHBvcnRhbCB3aXRoIGRldGFpbHMgb3IgcmVwb3J0IHRoZSBlcnJvciBvbiB0aGUgZm9ydW0gYXQgV1dXLk5PT0JTQU5ETkVSRFMuQ09NJyApCiAgICBvMDBvID0gMAogICAgaWYgMSAtIDE6IGlpaWlpaWlpMQogaWYgbzAwbyA9PSAxIDoKICB0aW1lIC4gc2xlZXAgKCAxICkKICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJbQ09MT1I9eWVsbG93XSIgKyBuYW1lICsgJ1svQ09MT1JdICBbQ09MT1I9bGltZV1TdWNjZXNzZnVsbHkgSW5zdGFsbGVkWy9DT0xPUl0nICwgJycgLCAnTm93IGluc3RhbGxpbmcgcmVwb3NpdG9yeScgKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIG9PTzBvbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgcmVwb19pZCApICkKICBpZiAyOSAtIDI5OiBJMUlpaUkgKiBJSTExMWlpaWkgKiBPb29vb29vb09PIC0gSTFpaTExaUlpMTFpICogSUkxMTFpaWlpCiAgaWYgKCByZXBvX2lkICE9ICdyZXBvc2l0b3J5LnhibWMub3JnJyApIGFuZCBub3QgKCBvcyAuIHBhdGggLiBleGlzdHMgKCBvT08wb28gKSApIGFuZCAoIHJlcG9faWQgIT0gJycgKSBhbmQgKCAnc3VwZXJyZXBvJyBub3QgaW4gcmVwb19pZCApIDoKICAgaWkgKCByZXBvX2lkICkKICAgaWYgOTUgLSA5NTogSUlpaWlJMWlJSUkgKiBJMWlpMTFpSWkxMWkgJSBpaWlpaWlpaTEgJSBPMDBPT28wMG9vMG8gLSBPMDBPT28wMG9vMG8KICB4Ym1jIC4gc2xlZXAgKCAyMDAwICkKICBpZiA5NyAtIDk3OiBJMWlpMTFpSWkxMWkgKyBpSWlpMUkxMUkxSUkxIC4gTzAKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaUlpaTFJICkgYW5kIE9Pb09PID09IDAgOgogICBPb28wT28wb28wID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kb3dubG9hZGNvdW50LnBocD9pZD0lcycgJSAoIGFkZG9uX2lkICkKICAgdHJ5IDoKICAgIG9vbzBPMG8wME8gKCBPb28wT28wb28wICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDgzIC0gODM6IElJaQogIGlpMTExSWkxMWlpaSAoIG5hbWUgLCBhZGRvbl9pZCApCiAgaWlJaWlpMUlJSUlJICggc2hvd2RpYWxvZyA9IEZhbHNlICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQ29udGFpbmVyLlJlZnJlc2gnICkKICBpZiA2MiAtIDYyOiBpSWlpMUkxMUkxSUkxCiAgaWYgSUlJMTFJID09IDAgOgogICBpSTExMUkxMUkxSTEgLiBvayAoIG5hbWUgKyAiIEluc3RhbGwgQ29tcGxldGUiICwgJ1RoZSBhZGQtb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBidXQnICwgJ3RoZXJlIHdhcyBhbiBlcnJvciBpbnN0YWxsaW5nIHRoZSByZXBvc2l0b3J5LicgLCAnVGhpcyB3aWxsIG1lYW4gdGhlIGFkZC1vbiBmYWlscyB0byB1cGRhdGUnICkKICAgaWYgOTMgLSA5Mzogb29PbyAtIG8wb09PbzBPME9vbyAlIE9vT29PTzAwIC4gT29Pb09PMDAgLSBpaWlpaWlpaTEKICBpZiBJaTFJMTFJID09IDAgOgogICBpSTExMUkxMUkxSTEgLiBvayAoIG5hbWUgKyAiIEluc3RhbGwgQ29tcGxldGUiICwgJ1RoZSBhZGQtb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBidXQnICwgJ3RoZXJlIHdhcyBhbiBlcnJvciBpbnN0YWxsaW5nIG1vZHVsZXMuJyAsICdUaGlzIGNvdWxkIHJlc3VsdCBpbiBlcnJvcnMgd2l0aCB0aGUgYWRkLW9uLicgKQogICBpZiA5MCAtIDkwOiBpaWlpaWlpaTEgKyBJSTExMWlpaWkgKiBJMWlpMTFpSWkxMWkgLyBPMDBPT28wMG9vMG8gLiBvMG9PT28wTzBPb28gKyBvMG9PT28wTzBPb28KICBpZiBJaTFJMTFJICE9IDAgYW5kIElJSTExSSAhPSAwIGFuZCBmb3J1bSAhPSAnTm9uZScgOgogICBpSTExMUkxMUkxSTEgLiBvayAoIG5hbWUgKyAiIEluc3RhbGwgQ29tcGxldGUiICwgJ1BsZWFzZSBzdXBwb3J0IHRoZSBkZXZlbG9wZXIocykgW0NPTE9SPWRvZGdlcmJsdWVdJyArIHByb3ZpZGVyX25hbWUgLCAnWy9DT0xPUl1TdXBwb3J0IGZvciB0aGlzIGFkZC1vbiBjYW4gYmUgZm91bmQgYXQgW0NPTE9SPXllbGxvd10nICsgZm9ydW0gLCAnWy9DT0xPUl1bQ1JdVmlzaXQgV1dXLk5PT0JTQU5ETkVSRFMuQ09NIGZvciBhbGwgeW91ciBLb2RpIG5lZWRzLicgKQogICBpZiA0MCAtIDQwOiBpaWlpaWlpaTEgLyBPb09vT08wMCAlIGkxMWlJaWlJaWkgJSBJMWlpMTFpSWkxMWkgLyBJMUlpaUkKICBpZiBJaTFJMTFJICE9IDAgYW5kIElJSTExSSAhPSAwIGFuZCBmb3J1bSA9PSAnTm9uZScgOgogICBpSTExMUkxMUkxSTEgLiBvayAoIG5hbWUgKyAiIEluc3RhbGwgQ29tcGxldGUiICwgJ1BsZWFzZSBzdXBwb3J0IHRoZSBkZXZlbG9wZXIocykgW0NPTE9SPWRvZGdlcmJsdWVdJyArIHByb3ZpZGVyX25hbWUgLCAnWy9DT0xPUl1ObyBkZXRhaWxzIG9mIGZvcnVtIHN1cHBvcnQgaGF2ZSBiZWVuIGdpdmVuLicgKQogICBpZiA2MiAtIDYyOiBpMUlJaSAtIE9vT29PTzAwCiAgIGlmIDYyIC0gNjI6IGkxSUlpICsgT28wT29vICUgSUlpaWlJMWlJSUkKZGVmIGlJaSAoIGFkZG9uX2lkICkgOgogdHJ5IDoKICB4Ym1jYWRkb24gLiBBZGRvbiAoIGlkID0gYWRkb25faWQgKSAuIGdldEFkZG9uSW5mbyAoICdwYXRoJyApCiAgcmV0dXJuIFRydWUKIGV4Y2VwdCA6CiAgcmV0dXJuIEZhbHNlCiAgaWYgMTAgLSAxMDogT29PME8wMCAvIE9vME9vbwogIGlmIDE1IC0gMTU6IElJaUlpMWlJIC4gT29Pb09PMDAgLyBJSWlJaTFpSSAqIE9PT29Pb28wTyAtIEkxSWlpSSAlIEkxaWkxMWlJaTExaQpkZWYgb28wT09PT09PMCAoIGFkZG9uX2lkICkgOgogT29vME9vMG9vMCA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQWRkb25Qb3J0YWwvZG93bmxvYWRjb3VudC5waHA/aWQ9JXMnICUgKCBhZGRvbl9pZCApCiB0cnkgOgogIG9vbzBPMG8wME8gKCBPb28wT28wb28wICwgMTAgKQogZXhjZXB0IDoKICBwYXNzCiAgaWYgMjYgLSAyNjogaUlpaTFJMTFJMUlJMQogIGlmIDg3IC0gODc6IEkxaWkxMWlJaTExaSAvIE9vb29vb29vT08gLSBPbzBPb28gJSBPb09vT08wMCAlIElJaWlpSTFpSUlJICUgT28wT29vCmRlZiBJaTEgKCBuYW1lICwgY29udGVudHR5cGVzICwgcmVwb19saW5rICwgcmVwb19pZCAsIGFkZG9uX2lkICwgcHJvdmlkZXJfbmFtZSAsIGZvcnVtICwgZGF0YV9wYXRoICkgOgogaWYgMzQgLSAzNDogSUlpSWkxaUkgLSBPb29vb29vb09PIC4gSTFJaWlJIC8gSUkxMTFpaWlpCiBpZiAyNyAtIDI3OiBPb08wTzAwIC8gT28wT29vICogaWlpaWlpaWkxIC0gT29PME8wMAogaWYgaUlpICggcmVwb19pZCApIGFuZCBub3QgaUlpICggYWRkb25faWQgKSA6CiAgeGJtYyAuIGxvZyAoICdSZXBvIGV4aXN0czogJXMnICUgcmVwb19pZCApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1hCTUMuUnVuUGx1Z2luKHBsdWdpbjovLyVzKScgJSBhZGRvbl9pZCApCiAgaWYgMTkgLSAxOTogT09Pb09vbzBPCiAgaWYgNjcgLSA2NzogTzAgJSBpSWlpMUkxMUkxSUkxIC8gSUlpaWlJMWlJSUkgLiBpMTFpSWlpSWlpIC0gTzAwT09vMDBvbzBvICsgTzAKICBpMWlpaUlpMWkgPSB0aHJlYWRpbmcgLiBUaHJlYWQgKCB0YXJnZXQgPSBPTzBPbyAsIGFyZ3MgPSBbICd5ZXNub2RpYWxvZycgXSApCiAgaTFpaWlJaTFpIC4gc3RhcnQgKCApCiAgSWlJSUlJSUlpSSA9IFRydWUKICBPT29vbzAwID0gMAogIHdoaWxlIElpSUlJSUlJaUkgYW5kIE9Pb29vMDAgPCAyMCA6CiAgIHhibWMgLiBzbGVlcCAoIDUwMCApCiAgIE9Pb29vMDAgKz0gMQogICBJaUlJSUlJSWlJID0gaTFpaWlJaTFpIC4gaXNBbGl2ZSAoICkKICAgaWYgMzUgLSAzNTogSUlpIC4gT29Pb09PMDAgKiBpMTFpSWlpSWlpCiAgIGlmIDQ0IC0gNDQ6IGkxMWlJaWlJaWkgLyBPbzBPb28KICBpZiBPTzBPbyAoICdva2RpYWxvZycgKSA6CiAgIHhibWMgLiBsb2cgKCAnIyMjIEtvZGkgZmFpbGVkIHRvIGluc3RhbGwgYWRkLW9uJyApCiAgIHJldHVybgogICBpZiA0MiAtIDQyOiBPb29vb29vb09PICsgT28wT29vICUgSUkxMTFpaWlpICsgT29PME8wMAogICBpZiAyNCAtIDI0OiBJSWlJaTFpSSAqIElJMTExaWlpaSAlIElJaUlpMWlJICUgSUlpaWlJMWlJSUkgKyBPb29vb29vb09PCiAgaTFpaWlJaTFpID0gdGhyZWFkaW5nIC4gVGhyZWFkICggdGFyZ2V0ID0gT08wT28gLCBhcmdzID0gWyAncHJvZ3Jlc3NkaWFsb2cnIF0gKQogIGkxaWlpSWkxaSAuIHN0YXJ0ICggKQogIElpSUlJSUlJaUkgPSBUcnVlCiAgT09vb28wMCA9IDAKICB3aGlsZSBJaUlJSUlJSWlJIGFuZCBPT29vbzAwIDwgNDAgOgogICB4Ym1jIC4gc2xlZXAgKCA1MDAgKQogICBPT29vbzAwICs9IDEKICAgSWlJSUlJSUlpSSA9IGkxaWlpSWkxaSAuIGlzQWxpdmUgKCApCiAgaWYgaUlpICggYWRkb25faWQgKSA6CiAgIG9vME9PT09PTzAgKCBhZGRvbl9pZCApCiAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdDb250YWluZXIuUmVmcmVzaCcgKQogICBpZiAyOSAtIDI5OiBJSTExMWlpaWkgLSBPb29vb29vb09PIC0gaTExaUlpaUlpaSAuIG8wb09PbzBPME9vbwogICBpZiAxOSAtIDE5OiBJSTExMWlpaWkKICBlbHNlIDoKICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnVU5BQkxFIFRPIElOU1RBTEwnICwgJ1RoZSBtb3N0IGNvbW1vbiBjYXVzZSBmb3IgdGhpcyBpcyB0aGUgYWRkLW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgb24gdGhlIHJlcG8uIElmIHlvdSBmaW5kIGFuIGFsdGVybmF0aXZlIHJlcG8gdGhhdCBoYXMgaXQgcGxlYXNlIGNvbnNpZGVyIHVwZGF0aW5nIHRoZSB0ZWFtIGF0IG5vb2JzYW5kbmVyZHMuY29tIHNvIHRoZXkgY2FuIGZpeCBpbiB0aGUgZGF0YWJhc2UuJyApCiAgIGlmIDcyIC0gNzI6IE9vb29vb29vT08gLyBJMUlpaUkgKyBPMDBPT28wMG9vMG8gLyBPb09vT08wMCAqIE8wME9PbzAwb28wbwogICBpZiAzNCAtIDM0OiBPMCAqIE8wICUgT29vb29vb29PTyArIElJaUlpMWlJICogaUlpaTFJMTFJMUlJMSAlIE8wME9PbzAwb28wbwogZWxpZiBpSWkgKCBhZGRvbl9pZCApIDoKICBpZiBpSTExMUkxMUkxSTEgLiB5ZXNubyAoICdBZGQtb24gQWxyZWFkeSBJbnN0YWxsZWQnICwgJ1RoaXMgYWRkLW9uIGhhcyBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgb24geW91ciBzeXN0ZW0uIFdvdWxkIHlvdSBsaWtlIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gYW5kIHJlLWluc3RhbGw/IFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzIHVubGVzcyB5b3VcJ3ZlIG1hbnVhbGx5IG9wZW5lZCB1cCB0aGUgYWRkLW9uIGNvZGUgYW5kIGVkaXRlZCBpbiBhIHRleHQgZWRpdG9yLicgKSA6CiAgIGlpSWlpMUkgPSB4Ym1jYWRkb24gLiBBZGRvbiAoIGlkID0gYWRkb25faWQgKSAuIGdldEFkZG9uSW5mbyAoICdwYXRoJyApCiAgIGlmIDI1IC0gMjU6IE9PT29Pb28wTyArIE9vT29PTzAwIC4gbzBvT09vME8wT29vICUgT29Pb09PMDAgKiBPbwogICB0cnkgOgogICAgc2h1dGlsIC4gcm10cmVlICggaWlJaWkxSSApCiAgIGV4Y2VwdCA6CiAgICB4Ym1jIC4gbG9nICggJ0ZhaWxlZCB0byByZW1vdmUgJXMnICUgaWlJaWkxSSApCiAgICBpZiAzMiAtIDMyOiBpMTFpSWlpSWlpIC0gSUlpCiAgIE9vb29vT09vbzAgPSBvcGVuICggT09vT08wb28wb29PICwgJ3cnICkKICAgT29vb29PT29vMCAuIHdyaXRlICggJ2ltcG9ydCBkZWZhdWx0O2RlZmF1bHQuVXBkYXRlX1JlcG8oc2hvd2RpYWxvZyA9IEZhbHNlKTt4Ym1jLnNsZWVwKDE1MDApO2RlZmF1bHQuQWRkb25fSW5zdGFsbF9aZXJvKCIlcyIsIiVzIiwiJXMiLCIlcyIsIiVzIiwiJXMiLCIlcyIsIiVzIiknICUgKCBuYW1lICwgY29udGVudHR5cGVzICwgcmVwb19saW5rICwgcmVwb19pZCAsIGFkZG9uX2lkICwgcHJvdmlkZXJfbmFtZSAsIGZvcnVtICwgZGF0YV9wYXRoICkgKQogICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgIGlmIDUzIC0gNTM6IE9vb29vb29vT08gLSBJSWlpaUkxaUlJSQogICBvT29pMWkgPSB4Ym1jIC4gZ2V0SW5mb0xhYmVsICggJ1N5c3RlbS5Qcm9maWxlTmFtZScgKQogICB4Ym1jIC4gbG9nICggJyMjIyBhdHRlbXB0aW5nIHRvIGxvYWQgcHJvZmlsZTogJXMnICUgb09vaTFpICkKICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0xvYWRQcm9maWxlKCVzKScgJSBvT29pMWkgKQogICByZXR1cm4KICAgaWYgNSAtIDU6IEkxaWkxMWlJaTExaSArIE8wICsgTzAgLiBJSWkgLSBpaWlpaWlpaTEKICBlbHNlIDoKICAgcmV0dXJuCiAgIGlmIDYzIC0gNjM6IG9vT28KIGVsaWYgKCByZXBvX2lkICE9ICdyZXBvc2l0b3J5LnhibWMub3JnJyApIGFuZCAoIHJlcG9faWQgIT0gJycgKSBhbmQgKCAnc3VwZXJyZXBvJyBub3QgaW4gcmVwb19pZCApIDoKICBPbzAgPSBpaSAoIHJlcG9faWQgKQogIHhibWMgLiBsb2cgKCAnIyMjIHJlcG8gaW5zdGFsbGVkLCBzbGVlcGluZyBmb3IgMjAwMCcgKQogIHhibWMgLiBzbGVlcCAoIDIwMDAgKQogIGlmIE9vMCA6CiAgIHhibWMgLiBsb2cgKCAnIyMjIHJ1bm5pbmcgcGx1Z2luJyApCiAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdYQk1DLlJ1blBsdWdpbihwbHVnaW46Ly8lcyknICUgYWRkb25faWQgKQogICB4Ym1jIC4gbG9nICggJyMjIyBydW5uaW5nIHllc25vIHdpbmRvdyBjaGVjaycgKQogICBpZiA3OSAtIDc5OiBPb08wTzAwICUgT28gLyBpSWlpMUkxMUkxSUkxICsgT29Pb09PMDAgKiBPb08wTzAwCiAgIGkxaWlpSWkxaSA9IHRocmVhZGluZyAuIFRocmVhZCAoIHRhcmdldCA9IE9PME9vICwgYXJncyA9IFsgJ3llc25vZGlhbG9nJyBdICkKICAgaTFpaWlJaTFpIC4gc3RhcnQgKCApCiAgIElpSUlJSUlJaUkgPSBUcnVlCiAgIE9Pb29vMDAgPSAwCiAgIHdoaWxlIElpSUlJSUlJaUkgYW5kIE9Pb29vMDAgPCAyMCA6CiAgICB4Ym1jIC4gc2xlZXAgKCA1MDAgKQogICAgT09vb28wMCArPSAxCiAgICBJaUlJSUlJSWlJID0gaTFpaWlJaTFpIC4gaXNBbGl2ZSAoICkKICAgeGJtYyAuIGxvZyAoICcjIyMgeWVzbm8gc3RhdHVzOiAlcycgJSBJaUlJSUlJSWlJICkKICAgaWYgMzAgLSAzMDogT29vb29vb29PTyAvIE9PT29Pb28wTyArIElJaUlpMWlJIC8gSTFpaTExaUlpMTFpICogTzAKICAgaWYgZ2xvYmFseWVzbm8gOgogICAgeGJtYyAuIGxvZyAoICcjIyMgeWVzL25vIHdhcyB0cnVlLCBjaGVja2luZyBwcm9ncmVzc2RpYWxvZycgKQogICAgaUlpSUkgPSB0aHJlYWRpbmcgLiBUaHJlYWQgKCB0YXJnZXQgPSBPTzBPbyAsIGFyZ3MgPSBbICdwcm9ncmVzc2RpYWxvZycgXSApCiAgICBpSWlJSSAuIHN0YXJ0ICggKQogICAgSWlJSUlJSUlpSSA9IFRydWUKICAgIE9Pb29vMDAgPSAwCiAgICB3aGlsZSBJaUlJSUlJSWlJIGFuZCBPT29vbzAwIDwgNDAgOgogICAgIHhibWMgLiBzbGVlcCAoIDUwMCApCiAgICAgT09vb28wMCArPSAxCiAgICAgSWlJSUlJSUlpSSA9IGlJaUlJIC4gaXNBbGl2ZSAoICkKICAgIHhibWMgLiBsb2cgKCAnIyMjIHByb2dyZXNzZGlhbG9nIHN0YXR1czogJXMnICUgaTFpaWlJaTFpICkKICAgIGlmIGlJaSAoIGFkZG9uX2lkICkgOgogICAgIG9vME9PT09PTzAgKCBhZGRvbl9pZCApCiAgICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0NvbnRhaW5lci5SZWZyZXNoJyApCiAgICBPT29vTzBPT29vIC4gY2xvc2UgKCApCiAgICBpZiAxOSAtIDE5OiBJSWlpaUkxaUlJSQogICBlbHNlIDoKICAgIGlJMTExSTExSTFJMSAuIG9rICggJ1VOQUJMRSBUTyBJTlNUQUxMJyAsICdUaGUgbW9zdCBjb21tb24gY2F1c2UgZm9yIHRoaXMgaXMgdGhlIGFkZC1vbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIG9uIHRoZSByZXBvLiBJZiB5b3UgZmluZCBhbiBhbHRlcm5hdGl2ZSByZXBvIHRoYXQgaGFzIGl0IHBsZWFzZSBjb25zaWRlciB1cGRhdGluZyB0aGUgdGVhbSBhdCBub29ic2FuZG5lcmRzLmNvbSBzbyB0aGV5IGNhbiBmaXggaW4gdGhlIGRhdGFiYXNlLicgKQogIGVsc2UgOgogICBpSTExMUkxMUkxSTEgLiBvayAoICdGYWlsZWQgSW5zdGFsbCcgLCAnVGhlIHJlcG9zaXRvcnkgY291bGQgbm90IGJlIGluc3RhbGxlZCwgdGhlIGRldmVsb3BlciBtYXkgaGF2ZSBkZWxldGVkIGl0LiBQbGVhc2UgdHJ5IHRoZSBiYWNrdXAgaW5zdGFsbCBvcHRpb24uJyApCiB0cnkgOgogIG9zIC4gcGF0aCAuIHJlbW92ZSAoIE9Pb09PMG9vMG9vTyApCiBleGNlcHQgOgogIHBhc3MKICBpZiA3OCAtIDc4OiBPbyAlIG8wb09PbzBPME9vbwogIGlmIDM5IC0gMzk6IEkxaWkxMWlJaTExaSArIEkxSWlpSSAtIGlJaWkxSTExSTFJSTEgLSBvMG9PT28wTzBPb28KZGVmIEkxaWkxSUkxaUlJICggc2lnbiApIDoKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9Z29sZF1Qb3B1bGFyWy9DT0xPUl0gKFNob3cgdGhlIHRvcCAxMDAgbW9zdCBkb3dubG9hZGVkIGFkZC1vbnMpJyAsICdwb3B1bGFyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1nb2xkXUJyYW5kIE5ld1svQ09MT1JdIChTaG93IHRoZSBuZXcgcmVsZWFzZXMpJyAsICdsYXRlc3QnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWdvbGRdTWFudWFsIFNlYXJjaFsvQ09MT1JdIChUeXBlIGluIGF1dGhvci9uYW1lL2NvbnRlbnQpJyAsICdkZXNjPScgLCAnc2VhcmNoX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0ZpbHRlciBSZXN1bHRzIChCeSBHZW5yZXMpJyAsICdwJyAsICdhZGRvbl9nZW5yZXMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdGaWx0ZXIgUmVzdWx0cyAoQnkgQ291bnRyaWVzKScgLCAncCcgLCAnYWRkb25fY291bnRyaWVzJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRmlsdGVyIFJlc3VsdHMgKEJ5IEtvZGkgQ2F0ZWdvcmllcyknICwgJ3AnICwgJ2FkZG9uX2NhdGVnb3JpZXMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdLb2RpIEFkZC1vbiBCcm93c2VyIChJbnN0YWxsIEZyb20gWmlwKScgLCAnJyAsICdpbnN0YWxsX2Zyb21femlwJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnS29kaSBBZGQtb24gQnJvd3NlciAoQnJvd3NlIE15IFJlcG9zaXRvcmllcyknICwgJycgLCAnYnJvd3NlX3JlcG9zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnS29kaSBBZGQtb24gQnJvd3NlciAoQ2hlY2sgRm9yIEFkZC1vbiBVcGRhdGVzKScgLCAnJyAsICdjaGVja191cGRhdGVzJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA4IC0gODogT29Pb09PMDAgLyBPMCAqIE8wICUgSUlpIC0gT28wT29vICsgT09Pb09vbzBPCiBpZiA4MyAtIDgzOiBPMCAuIEkxSWlpSQpkZWYgTzBPSUlpMSAoICkgOgogaUlJSTFpaUlJID0gWyBdCiBJSWkxaUkxID0gWyBdCiBJSWkxMWkxSUkgPSBbIF0KIE9PMG9vbzBvMCA9IFsgXQogb08wb29Pb08gPSBbIF0KIGlmIDU5IC0gNTk6IE8wICUgT28wT29vCiBmb3IgZmlsZSBpbiBvcyAuIGxpc3RkaXIgKCBJSTExaWlpaTFJaSApIDoKICBpZiBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGZpbGUgKSApIGFuZCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBmaWxlICwgJ2FkZG9uLnhtbCcgKSApIDoKICAgaWYgOTIgLSA5MjogTzAwT09vMDBvbzBvICUgSUlpSWkxaUkgLyBJMWlpMTFpSWkxMWkgJSBJMWlpMTFpSWkxMWkgKiBJMUlpaUkKICAgaWYgNzQgLSA3NDogTzAgLiBJMUlpaUkgJSBPb08wTzAwICUgSUlpaWlJMWlJSUkKICAgSUlpSWlJID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGZpbGUgLCAnYWRkb24ueG1sJyApICwgJ3InICkKICAgaWkxSTEgPSBJSWlJaUkgLiByZWFkICggKQogICBJSWlJaUkgLiBjbG9zZSAoICkKICAgb09vME9vb09vID0gcmUgLiBjb21waWxlICggJ2lkPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKSBbIDAgXQogICBpZiA1MSAtIDUxOiBPT09vT29vME8gLiBPbzBPb28KICAgdHJ5IDoKICAgIElpaUlpaUlpID0geGJtY2FkZG9uIC4gQWRkb24gKCBvT28wT29vT28gKQogICAgaTFpaUlJSWkgPSBJaWlJaWlJaSAuIGdldEFkZG9uSW5mbyAoICd0eXBlJyApIC4gcmVwbGFjZSAoICd4Ym1jLicgLCAnJyApCiAgICBvb28wTyA9IElpaUlpaUlpIC4gZ2V0QWRkb25JbmZvICggJ25hbWUnICkKICAgIE9vMG8gPSBJaWlJaWlJaSAuIGdldEFkZG9uSW5mbyAoICdpY29uJyApCiAgICBPMDBPbyA9IElpaUlpaUlpIC4gZ2V0QWRkb25JbmZvICggJ2Rlc2NyaXB0aW9uJyApCiAgICBvT09vMDBPME9PT28gPSBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBmaWxlICkKICAgIGlmIDkzIC0gOTM6IE9vCiAgICBpSUlJMWlpSUkgLiBhcHBlbmQgKCAnW0NPTE9SPWdvbGRdJXM6Wy9DT0xPUl0gICVzJyAlICggaTFpaUlJSWkgLCBvb28wTyApICkKICAgIElJaTFpSTEgLiBhcHBlbmQgKCBPbzBvICkKICAgIElJaTExaTFJSSAuIGFwcGVuZCAoIE8wME9vICkKICAgIE9PMG9vbzBvMCAuIGFwcGVuZCAoIG9PT28wME8wT09PbyApCiAgICBpZiA0MyAtIDQzOiBJMWlpMTFpSWkxMWkgLyBJMUlpaUkgLiBpaWlpaWlpaTEKICAgZXhjZXB0IDoKICAgIHhibWMgLiBsb2cgKCAnIyMjIEFkZC1vbiBEaXNhYmxlZCwgY2Fubm90IHJlbW92ZSB1bnRpbCByZWFjdGl2YXRlZDogJXMnICUgZmlsZSApCiAgICBpZiA2MiAtIDYyOiBpSWlpMUkxMUkxSUkxICsgSUlpSWkxaUkgLiBPbzBPb28gLyBJSWlpaUkxaUlJSSAlIE8wIC4gSUlpCiBPbzBvT29vT29PbyA9IEkxaU9vICggJ0FkZC1vbnMgVG8gRnVsbHkgUmVtb3ZlJyAsIGlJSUkxaWlJSSAsIElJaTFpSTEgLCBJSWkxMWkxSUkgKQogZm9yIGkxSUkxIGluIE9vMG9Pb29Pb09vIDoKICBJaUlpSWkxSTEgPSBPTzBvb28wbzAgWyBpMUlJMSBdCiAgSWlJMWlpMUlpID0gaUlJSTFpaUlJIFsgaTFJSTEgXQogIG9PMG9vT29PIC4gYXBwZW5kICggWyBJaUkxaWkxSWkgLCBJaUlpSWkxSTEgXSApCiBpZiBsZW4gKCBvTzBvb09vTyApID4gMCA6CiAgb29vT09Pb09PT28wTyAoIG9PMG9vT29PICkKICBpZiA4MiAtIDgyOiBJSWlpaUkxaUlJSSAqIGkxMWlJaWlJaWkgJSBJSTExMWlpaWkgLSBPb29vb29vb09PCiAgaWYgOTAgLSA5MDogT28wT29vIC4gb29PbyAqIGkxSUlpIC0gaTFJSWkKZGVmIElpSWlpSTExaTFJaSAoICkgOgogbzBPIC4gb3BlblNldHRpbmdzICggc3lzIC4gYXJndiBbIDAgXSApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQ29udGFpbmVyLlJlZnJlc2gnICkKIGlmIDEwMCAtIDEwMDogSUlpIC4gSTFJaWlJICogSUlpIC0gSTFJaWlJIC4gT09Pb09vbzBPICogTzAwT09vMDBvbzBvCiBpZiA4OSAtIDg5OiBPb08wTzAwICsgSUlpaWlJMWlJSUkgKiBJSWkKZGVmIElpMW9vbzBPME9PICggdmFsdWUgKSA6CiBPME9vb28gPSBvb28wTzBvMDBPICggJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9hZHVsdC5waHAnICwgMTAgKQogb08wMDAgPSByZSAuIGNvbXBpbGUgKCAnaT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vbyApCiBpZiA3IC0gNzogSUlpaWlJMWlJSUkgKiBJMUlpaUkgKyBpMUlJaSArIGkxMWlJaWlJaWkgKyBPbzBPb28gJSBJMUlpaUkKIGZvciBpMTFpMWlpaUlJIGluIG9PMDAwIDoKICBpMTFpMWlpaUlJID0gJyIlcyInICUgaTExaTFpaWlJSQogIE9PMDBPTzBvMCA9ICd7Impzb25ycGMiOiIyLjAiLCAibWV0aG9kIjoiQWRkb25zLlNldEFkZG9uRW5hYmxlZCIsInBhcmFtcyI6eyJhZGRvbmlkIjolcywiZW5hYmxlZCI6JXN9LCAiaWQiOjF9JyAlICggaTExaTFpaWlJSSAsIHZhbHVlICkKICBvT09Pb29PbzBPID0geGJtYyAuIGV4ZWN1dGVKU09OUlBDICggT08wME9PMG8wICkKICB4Ym1jIC4gbG9nICggT08wME9PMG8wICkKICB4Ym1jIC4gbG9nICggJyMjIyBSRVRVUk4gJXMnICUgb09PT29vT28wTyApCiAgaWYgNDMgLSA0MzogbzBvT09vME8wT29vIC4gSUlpSWkxaUkgLiBPT09vT29vME8gKyBpSWlpMUkxMUkxSUkxCiBpZiB2YWx1ZSA9PSAnZmFsc2UnIDoKICBPb09Pb08wb09vID0gJ2Rpc2FibGVkJwogZWxzZSA6CiAgT29PT29PMG9PbyA9ICdlbmFibGVkJwogaUkxMTFJMTFJMUkxIC4gb2sgKCAnQURVTFQgQ09OVEVOVCAlcycgJSBPb09Pb08wb09vIC4gdXBwZXIgKCApICwgJ1lvdXIgYWR1bHQgcmF0ZWQgYWRkLW9ucyBoYXZlIG5vdyBiZWVuICVzJyAlIE9vT09vTzBvT28gKQogaWYgNzAgLSA3MDogT09Pb09vbzBPICUgaUlpaTFJMTFJMUlJMSAuIE9vME9vbyArIE9vME9vbyAtIG8wb09PbzBPME9vbyAlIElJaQpkZWYgaTFJSWkxaTFJaTEgKCApIDoKIGlpMUkxID0gSWlpbzBPbzBvTyAoICkKIGlJSUkxaWlJaTExID0gcmUgLiBjb21waWxlICggJ0V4dGVybmFsIHN0b3JhZ2UgcGF0aCA9ICguKz8pOycgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiBpSUlJMWlpSWkxMSA9IGlJSUkxaWlJaTExIFsgMCBdIGlmICggbGVuICggaUlJSTFpaUlpMTEgKSA+IDAgKSBlbHNlICcnCiByZXR1cm4gaUlJSTFpaUlpMTEKIGlmIDg0IC0gODQ6IGkxMWlJaWlJaWkgKiBPb08wTzAwCiBpZiAxOCAtIDE4OiBPbyAtIE8wME9PbzAwb28wbyAtIE9vT29PTzAwIC8gSUlpIC0gTzAKZGVmIGlpSUlpaSAoIHNvdXJjZWZpbGUgLCBkZXN0ZmlsZSAsIG1lc3NhZ2VfaGVhZGVyICwgbWVzc2FnZTEgLCBtZXNzYWdlMiAsIG1lc3NhZ2UzICwgZXhjbHVkZV9kaXJzICwgZXhjbHVkZV9maWxlcyApIDoKIG9PME9vME8wID0gemlwZmlsZSAuIFppcEZpbGUgKCBkZXN0ZmlsZSAsICd3JyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogSTFpSWlJMUlpSUlJSSA9IGxlbiAoIHNvdXJjZWZpbGUgKQogSTFpaUlpMTExSSA9IFsgXQogSWlpaTFpSWlpID0gWyBdCiBpZiA2OSAtIDY5OiBvb09vICUgT29vb29vb29PTyAuIEkxSWlpSQogT09vb08wT09vbyAuIGNyZWF0ZSAoIG1lc3NhZ2VfaGVhZGVyICwgbWVzc2FnZTEgLCBtZXNzYWdlMiAsIG1lc3NhZ2UzICkKIGlmIDM0IC0gMzQ6IE8wME9PbzAwb28wbyAqIE9vT29PTzAwIC0gSUlpaWlJMWlJSUkgLSBJMUlpaUkgLSBPMDBPT28wMG9vMG8KIGZvciBJaTFpSWkxMTFJMWkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIHNvdXJjZWZpbGUgKSA6CiAgaWYgNzkgLSA3OTogT29PME8wMCAqIE9vT29PTzAwIC4gT29vb29vb29PTyAtIE9PT29Pb28wTyAqIG8wb09PbzBPME9vbwogIGZvciBmaWxlIGluIGlpSTFpaWkgOgogICBJaWlpMWlJaWkgLiBhcHBlbmQgKCBmaWxlICkKICAgaWYgNzggLSA3ODogSUlpaWlJMWlJSUkKIE9vME8wT28wME8gPSBsZW4gKCBJaWlpMWlJaWkgKQogaWYgOSAtIDk6IG8wb09PbzBPME9vbyAuIEkxSWlpSSAtIEkxaWkxMWlJaTExaQogZm9yIElpMWlJaTExMUkxaSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggc291cmNlZmlsZSApIDoKICBpZiAzMiAtIDMyOiBPb29vb29vb09PIC8gSTFJaWlJIC8gaUlpaTFJMTFJMUlJMSArIElJMTExaWlpaSAuIG9vT28gLiBvMG9PT28wTzBPb28KICBJMUlJSTExMWkgWyA6IF0gPSBbIGlpMWlpIGZvciBpaTFpaSBpbiBJMUlJSTExMWkgaWYgaWkxaWkgbm90IGluIGV4Y2x1ZGVfZGlycyBdCiAgaWlJMWlpaSBbIDogXSA9IFsgSUlpSTFpIGZvciBJSWlJMWkgaW4gaWlJMWlpaSBpZiBJSWlJMWkgbm90IGluIGV4Y2x1ZGVfZmlsZXMgYW5kIG5vdCAnY3Jhc2hsb2cnIGluIElJaUkxaSBhbmQgbm90ICdzdGFja3RyYWNlJyBpbiBJSWlJMWkgXQogIGlmIDYgLSA2OiBJMWlpMTFpSWkxMWkgLyBJSWlJaTFpSSAtIE9vCiAgZm9yIGZpbGUgaW4gaWlJMWlpaSA6CiAgIGlmIDYyIC0gNjI6IE9PT29Pb28wTyAlIE9vCiAgIHRyeSA6CiAgICBJMWlpSWkxMTFJIC4gYXBwZW5kICggZmlsZSApCiAgICBPT28wME9PMDBPbyA9IGxlbiAoIEkxaWlJaTExMUkgKSAvIGZsb2F0ICggT28wTzBPbzAwTyApICogMTAwCiAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgaWkxaWkgLCAnUGxlYXNlIFdhaXQnICkKICAgIEkxSTFJMTFJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJaTFpSWkxMTFJMWkgLCBmaWxlICkKICAgIGlmIDQ4IC0gNDg6IE9vb29vb29vT08gKyBvb09vICUgaUlpaTFJMTFJMUlJMQogICBleGNlcHQgOgogICAgcHJpbnQgIlVuYWJsZSB0byBiYWNrdXAgZmlsZTogIiArIGZpbGUKICAgIGlmIDExIC0gMTE6IEkxSWlpSSAlIE8wME9PbzAwb28wbyAtIE9vTzBPMDAgLSBvb09vICsgbzBvT09vME8wT29vCiAgIGlmIG5vdCAndGVtcCcgaW4gSTFJSUkxMTFpIDoKICAgIGlmIDk4IC0gOTg6IElJaUlpMWlJICsgTzAwT09vMDBvbzBvIC0gT29PME8wMAogICAgaWYgbm90IEkxSWlJIGluIEkxSUlJMTExaSA6CiAgICAgaWYgNzkgLSA3OTogT28gLyBJSWkgLiBPb09vT08wMCAtIEkxaWkxMWlJaTExaQogICAgIHRyeSA6CiAgICAgIElpMWlpMTFJSUlpID0gJzAxLzAxLzE5ODAnCiAgICAgIE9Pb29vT09PbzBvTyA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBJMUkxSTExSWkgKSApICkKICAgICAgaWYgOTIgLSA5MjogT29PME8wMCAqIGlpaWlpaWlpMQogICAgICBpZiBPT29vb09PT28wb08gPiBJaTFpaTExSUlJaSA6CiAgICAgICBvTzBPbzBPMCAuIHdyaXRlICggSTFJMUkxMUlpICwgSTFJMUkxMUlpIFsgSTFpSWlJMUlpSUlJSSA6IF0gKQogICAgICAgaWYgMzUgLSAzNTogaTExaUlpaUlpaQogICAgIGV4Y2VwdCA6CiAgICAgIHByaW50ICJVbmFibGUgdG8gYmFja3VwIGZpbGU6ICIgKyBmaWxlCiAgICAgIGlmIDk5IC0gOTk6IElJMTExaWlpaSAuIG8wb09PbzBPME9vbyArIE8wCiBvTzBPbzBPMCAuIGNsb3NlICggKQogT09vb08wT09vbyAuIGNsb3NlICggKQogaWYgNzEgLSA3MTogSUlpaWlJMWlJSUkgKyBpMUlJaSAqIE9vME9vbyAlIE9vME9vbyAvIE9vME9vbwogaWYgNTUgLSA1NTogT29vb29vb29PTyArIElJaSArIE9vb29vb29vT08gKiBpaWlpaWlpaTEKZGVmIG9vICggc291cmNlZmlsZSAsIGRlc3RmaWxlICkgOgogb08wT28wTzAgPSB6aXBmaWxlIC4gWmlwRmlsZSAoIGRlc3RmaWxlICwgJ3cnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiBJMWlJaUkxSWlJSUlJID0gbGVuICggc291cmNlZmlsZSApCiBJMWlpSWkxMTFJID0gWyBdCiBJaWlpMWlJaWkgPSBbIF0KIGlmIDczIC0gNzM6IGlpaWlpaWlpMSArIG9vT28gLiBPb08wTzAwCiBPT29vTzBPT29vIC4gY3JlYXRlICggIkJhY2tpbmcgVXAgRmlsZXMiICwgIkFyY2hpdmluZy4uLiIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogaWYgNDYgLSA0NjogT29PME8wMCAtIG8wb09PbzBPME9vbyAvIE9vT29PTzAwIC0gT29vb29vb29PTyArIG9vT28KIGZvciBJaTFpSWkxMTFJMWkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIHNvdXJjZWZpbGUgKSA6CiAgaWYgNTggLSA1ODogbzBvT09vME8wT29vIC8gbzBvT09vME8wT29vICsgaWlpaWlpaWkxICsgT09Pb09vbzBPIC0gT29Pb09PMDAgLiBPbwogIGZvciBmaWxlIGluIGlpSTFpaWkgOgogICBJaWlpMWlJaWkgLiBhcHBlbmQgKCBmaWxlICkKICAgaWYgMTUgLSAxNTogaWlpaWlpaWkxICogT29Pb09PMDAgJSBJSWlpaUkxaUlJSSAuIE9vT29PTzAwIC4gT09Pb09vbzBPCiBPbzBPME9vMDBPID0gbGVuICggSWlpaTFpSWlpICkKIGlmIDk3IC0gOTc6IG9vT28KIGZvciBJaTFpSWkxMTFJMWkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIHNvdXJjZWZpbGUgKSA6CiAgaWYgODAgLSA4MDogSTFJaWlJIC4gTzAwT09vMDBvbzBvCiAgZm9yIGZpbGUgaW4gaWlJMWlpaSA6CiAgIEkxaWlJaTExMUkgLiBhcHBlbmQgKCBmaWxlICkKICAgT09vMDBPTzAwT28gPSBsZW4gKCBJMWlpSWkxMTFJICkgLyBmbG9hdCAoIE9vME8wT28wME8gKSAqIDEwMAogICBPT29vTzBPT29vIC4gdXBkYXRlICggaW50ICggT09vMDBPTzAwT28gKSAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgZmlsZSAsICdQbGVhc2UgV2FpdCcgKQogICBJMUkxSTExSWkgPSBvcyAuIHBhdGggLiBqb2luICggSWkxaUlpMTExSTFpICwgZmlsZSApCiAgIGlmIDQ3IC0gNDc6IE9PT29Pb28wTyArIGlpaWlpaWlpMSArIElJMTExaWlpaSAlIGkxMWlJaWlJaWkKICAgaWYgbm90ICd0ZW1wJyBpbiBJMUlJSTExMWkgOgogICAgaWYgOTMgLSA5MzogSTFpaTExaUlpMTFpICUgT29Pb09PMDAgLiBPMCAvIElJaUlpMWlJICogb29PbwogICAgaWYgbm90IEkxSWlJIGluIEkxSUlJMTExaSA6CiAgICAgaWYgMjkgLSAyOTogbzBvT09vME8wT29vCiAgICAgaW1wb3J0IHRpbWUKICAgICBJaTFpaTExSUlJaSA9ICcwMS8wMS8xOTgwJwogICAgIE9Pb29vT09PbzBvTyA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBJMUkxSTExSWkgKSApICkKICAgICBpZiA4NiAtIDg2OiBJSTExMWlpaWkgLiBJSWlpaUkxaUlJSQogICAgIGlmIE9Pb29vT09PbzBvTyA+IElpMWlpMTFJSUlpIDoKICAgICAgb08wT28wTzAgLiB3cml0ZSAoIEkxSTFJMTFJaSAsIEkxSTFJMTFJaSBbIEkxaUlpSTFJaUlJSUkgOiBdICkKIG9PME9vME8wIC4gY2xvc2UgKCApCiBPT29vTzBPT29vIC4gY2xvc2UgKCApCiBpZiAyIC0gMjogT29vb29vb29PTwogaWYgNjAgLSA2MDogT29PME8wMApkZWYgb08wME9vbzBvTyAoICkgOgogT09PbyA9IGlJMTExSTExSTFJMSAuIGJyb3dzZSAoIDMgLCAnU2VsZWN0IHRoZSBmb2xkZXIgeW91IHdhbnQgdG8gc2NhbicgLCAnZmlsZXMnICwgJycgLCBGYWxzZSAsIEZhbHNlICkKIEkxaUlpSTFJaUlJSUkgPSBsZW4gKCBPT09vICkKIEkxaWlJaTExMUkgPSBbIF0KIElpaWkxaUlpaSA9IFsgXQogaWYgNzQgLSA3NDogTzAwT09vMDBvbzBvIC0gT29vb29vb29PTyAuIE9vME9vbwogT09vb08wT09vbyAuIGNyZWF0ZSAoICdDaGVja2luZyBGaWxlIFN0cnVjdHVyZScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBpZiAzMSAtIDMxOiBvMG9PT28wTzBPb28gJSBPT09vT29vME8gKyBpSWlpMUkxMUkxSUkxICsgaTExaUlpaUlpaSAqIElJaQogSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ0RlbGV0ZSBvciBTY2FuPycgLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIGFsbCBmaWxlbmFtZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgb3Igd291bGQgeW91IHJhdGhlciBqdXN0IHNjYW4gYW5kIHZpZXcgdGhlIHJlc3VsdHMgaW4gdGhlIGxvZz8nICwgeWVzbGFiZWwgPSAnRGVsZXRlJyAsIG5vbGFiZWwgPSAnU2NhbicgKQogaWYgNDAgLSA0MDogT09Pb09vbzBPICUgT29vb29vb29PTyAtIE9vICsgbzBvT09vME8wT29vIC8gT28KIG9vT2lpaTEgPSBvcGVuICggb28wT29vT09vMCAsIG1vZGUgPSAndysnICkKIE9PMG8wb08wTzAwMG8gPSBvcGVuICggbzBPTzAwb08gLCBtb2RlID0gJ3crJyApCiBpZiA0NyAtIDQ3OiBJSWkgLSBPb08wTzAwIC8gTzAwT09vMDBvbzBvICogT29vb29vb29PTyAvIE8wME9PbzAwb28wbyAuIE9vME9vbwogZm9yIElpMWlJaTExMUkxaSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggT09PbyApIDoKICBpZiAzNCAtIDM0OiBpaWlpaWlpaTEKICBmb3IgZmlsZSBpbiBpaUkxaWlpIDoKICAgSWlpaTFpSWlpIC4gYXBwZW5kICggZmlsZSApCiAgIGlmIDI3IC0gMjc6IElJaSArIE9vb29vb29vT08gLSBPb09vT08wMAogT28wTzBPbzAwTyA9IGxlbiAoIElpaWkxaUlpaSApCiBpZiAxNSAtIDE1OiBvb09vIC8gT09Pb09vbzBPICogTzAgLiBJSTExMWlpaWkgLSBPb08wTzAwCiBmb3IgSWkxaUlpMTExSTFpICwgSTFJSUkxMTFpICwgaWlJMWlpaSBpbiBvcyAuIHdhbGsgKCBPT09vICkgOgogIGlmIDkwIC0gOTA6IG9vT28KICBJMUlJSTExMWkgWyA6IF0gPSBbIGlpMWlpIGZvciBpaTFpaSBpbiBJMUlJSTExMWkgXQogIGlpSTFpaWkgWyA6IF0gPSBbIElJaUkxaSBmb3IgSUlpSTFpIGluIGlpSTFpaWkgXQogIGlmIDk0IC0gOTQ6IE9PT29Pb28wTyAvIEkxaWkxMWlJaTExaSAqIElJaSAtIE9vT29PTzAwCiAgZm9yIGZpbGUgaW4gaWlJMWlpaSA6CiAgIGlmIDQ0IC0gNDQ6IE8wME9PbzAwb28wbyAlIGkxMWlJaWlJaWkgLSBJSWlJaTFpSSAqIEkxaWkxMWlJaTExaSArIE9vME9vbyAqIE9vCiAgIEkxaWlJaTExMUkgLiBhcHBlbmQgKCBmaWxlICkKICAgT09vMDBPTzAwT28gPSBsZW4gKCBJMWlpSWkxMTFJICkgLyBmbG9hdCAoIE9vME8wT28wME8gKSAqIDEwMAogICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJDaGVja2luZyBmb3Igbm9uIEFTQ0lJIGZpbGVzIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgaWkxaWkgLCAnUGxlYXNlIFdhaXQnICkKICAgaWYgNDEgLSA0MTogTzAgKiBpaWlpaWlpaTEgLSBPb09vT08wMCAuIE8wME9PbzAwb28wbwogICB0cnkgOgogICAgZmlsZSAuIGVuY29kZSAoICdhc2NpaScgKQogICAgaWYgNjUgLSA2NTogT28wT29vIC4gT29vb29vb29PTwogICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIDoKICAgIE9Pb08wb28wTyA9ICggc3RyICggSWkxaUlpMTExSTFpICkgKyAnLycgKyBzdHIgKCBmaWxlICkgKSAuIHJlcGxhY2UgKCAnXFwnICwgJy8nICkgLiByZXBsYWNlICggJzovJyAsICc6XFwnICkKICAgIGlmIDQ5IC0gNDk6IG8wb09PbzBPME9vbwogICAgcHJpbnQgIiBub24tQVNDSUkgZmlsZSBzdGF0dXMgbG9nZ2VkIHN1Y2Nlc3NmdWxseTogIiArIE9Pb08wb28wTwogICAgaWYgSTFpMUkxSTExSWlpSSAhPSAxIDoKICAgICBvb09paWkxIC4gd3JpdGUgKCAnW0NPTE9SPWRvZGdlcmJsdWVdTm9uLUFTQ0lJIEZpbGU6Wy9DT0xPUl1cbicgKQogICAgIGZvciBJSTFpaTFpaTExSTEgaW4gbzBvb09PMG8gKCBPT29PMG9vME8gLCA3NSApIDoKICAgICAgb29PaWlpMSAuIHdyaXRlICggSUkxaWkxaWkxMUkxICsgJ1tDUl0nICkKICAgICBvb09paWkxIC4gd3JpdGUgKCAnXG4nICkKICAgIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgICAgdHJ5IDoKICAgICAgb3MgLiByZW1vdmUgKCBPT29PMG9vME8gKQogICAgICBwcmludCAiIyMjIFNVQ0NFU1MgLSBkZWxldGVkICIgKyBPT29PMG9vME8KICAgICAgb29PaWlpMSAuIHdyaXRlICggJ1tDT0xPUj1kb2RnZXJibHVlXVNVQ0NFU1NGVUxMWSBERUxFVEVEOlsvQ09MT1JdXG4nICkKICAgICAgZm9yIElJMWlpMWlpMTFJMSBpbiBvMG9vT08wbyAoIE9Pb08wb28wTyAsIDc1ICkgOgogICAgICAgb29PaWlpMSAuIHdyaXRlICggSUkxaWkxaWkxMUkxICsgJ1tDUl0nICkKICAgICAgb29PaWlpMSAuIHdyaXRlICggJ1xuJyApCiAgICAgIGlmIDcxIC0gNzE6IE9vb29vb29vT08KICAgICBleGNlcHQgOgogICAgICBwcmludCAiIyMjIyMjIyMgRkFJTEVEIFRPIFJFTU9WRTogIiArIE9Pb08wb28wTwogICAgICBwcmludCAiIyMjIyMjIyMgTWFrZSBzdXJlIHlvdSBtYW51YWxseSByZW1vdmUgdGhpcyBmaWxlICMjIyMjIyMjIyMiCiAgICAgIE9PMG8wb08wTzAwMG8gLiB3cml0ZSAoICdbQ09MT1I9cmVkXUZBSUxFRCBUTyBERUxFVEU6Wy9DT0xPUl1cbicgKQogICAgICBmb3IgSUkxaWkxaWkxMUkxIGluIG8wb29PTzBvICggT09vTzBvbzBPICwgNzUgKSA6CiAgICAgICBPTzBvMG9PME8wMDBvIC4gd3JpdGUgKCBJSTFpaTFpaTExSTEgKyAnW0NSXScgKQogICAgICBPTzBvMG9PME8wMDBvIC4gd3JpdGUgKCAnXG4nICkKICAgICAgaWYgNSAtIDU6IE9vT29PTzAwICUgT29vb29vb29PTwogT08wbzBvTzBPMDAwbyAuIGNsb3NlICggKQogb29PaWlpMSAuIGNsb3NlICggKQogaWYgNjAgLSA2MDogT29Pb09PMDAgLiBpMUlJaSAlIE9vTzBPMDAgJSBpaWlpaWlpaTEgJSBPbwogaWYgMzMgLSAzMzogaUlpaTFJMTFJMUlJMSAtIE8wME9PbzAwb28wbyAqIEkxaWkxMWlJaTExaSAlIGlJaWkxSTExSTFJSTEgKyBPb08wTzAwIC4gT28KIG9vT2lpaTEgPSBvcGVuICggb28wT29vT09vMCAsIG1vZGUgPSAncicgKQogb29vME8wb09vb29PMCA9IG9vT2lpaTEgLiByZWFkICggKQogb29PaWlpMSAuIGNsb3NlICggKQogT08wbzBvTzBPMDAwbyA9IG9wZW4gKCBvME9PMDBvTyAsIG1vZGUgPSAncicgKQogSTFpSUlJMUlpaUkgPSBPTzBvMG9PME8wMDBvIC4gcmVhZCAoICkKIE9PMG8wb08wTzAwMG8gLiBjbG9zZSAoICkKIGlmIG9vbzBPMG9Pb29vTzAgPT0gJycgYW5kIEkxaUlJSTFJaWlJID09ICcnIDoKICBpSTExMUkxMUkxSTEgLiBvayAoICdObyBTcGVjaWFsIENoYXJhY3RlcnMgRm91bmQnICwgJ0dyZWF0IG5ld3MsIGFsbCBmaWxlbmFtZXMgaW4gdGhlIHBhdGggeW91IHNjYW5uZWQgYXJlIEFTQ0lJIGJhc2VkIC0gbm8gc3BlY2lhbCBjaGFyYWN0ZXJzIGZvdW5kLicgKQogZWxzZSA6CiAgT09vb29Pb08wT28gPSBvcGVuICggaTFJMWlJICwgbW9kZSA9ICd3KycgKQogIE9Pb29vT29PME9vIC4gd3JpdGUgKCBvb28wTzBvT29vb08wICsgJ1xuXG4nICsgSTFpSUlJMUlpaUkgKQogIE9Pb29vT29PME9vIC4gY2xvc2UgKCApCiAgT28wMDAgPSBvcGVuICggaTFJMWlJICwgbW9kZSA9ICdyJyApCiAgaWlJaUlJMTFpMSA9IE9vMDAwIC4gcmVhZCAoICkKICBPbzAwMCAuIGNsb3NlICggKQogIG9PbzAwT29vMG8wICggJ0ZpbmFsIFJlc3VsdHMnICwgaWlJaUlJMTFpMSApCiAgb3MgLiByZW1vdmUgKCBpMUkxaUkgKQogb3MgLiByZW1vdmUgKCBvbzBPb29PT28wICkKIG9zIC4gcmVtb3ZlICggbzBPTzAwb08gKQogaWYgMzMgLSAzMzogT09Pb09vbzBPCiBpZiA4NyAtIDg3OiBPb09vT08wMCAvIElJaWlpSTFpSUlJICsgaUlpaTFJMTFJMUlJMQpkZWYgb28wTzBvICggKSA6CiBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdSG93IHRvIGNyZWF0ZSBhbmQgc2hhcmUgbXkgYnVpbGRbL0NPTE9SXScgLCAnJyAsICdpbnN0cnVjdGlvbnNfMScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIEZ1bGwgU3lzdGVtJyApCiBJaTFJMUlpICggJycgLCAnW0NPTE9SPWdvbGRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnJyAsICcnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0NyZWF0ZSBDb21tdW5pdHkgQnVpbGQgKGZvciBzaGFyaW5nIG9uIENQIG9ubHkpJyAsICd1cmwnICwgJ2NvbW11bml0eV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBGdWxsIFN5c3RlbScgKQogaWYgSWlvTzBPICggKSA6CiAgSWkxSTFJaSAoICcnICwgJ0NyZWF0ZSBPcGVuRUxFQyBCYWNrdXAgKGZ1bGwgYmFja3VwIGNhbiBvbmx5IGJlIHVzZWQgb24gT3BlbkVMRUMpJyAsICdub25lJyAsICdvcGVuZWxlY19iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0NyZWF0ZSBVbml2ZXJzYWwgQnVpbGQgKGxvY2FsIGJhY2t1cHMgb25seSknICwgJ25vbmUnICwgJ2NvbW11bml0eV9iYWNrdXBfMicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnQ3JlYXRlIEZ1bGwgQmFja3VwICh3aWxsIG9ubHkgd29yayBvbiBUSElTIGRldmljZSknICwgJ2xvY2FsJyAsICdsb2NhbF9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBGdWxsIFN5c3RlbScgKQogSWkxSTFJaSAoICcnICwgJ0JhY2t1cCBBZGRvbnMgT25seScgLCAnYWRkb25zJyAsICdyZXN0b3JlX3ppcCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIEFkZG9ucycgKQogSWkxSTFJaSAoICcnICwgJ0JhY2t1cCBBZGRvbiBEYXRhIE9ubHknICwgJ2FkZG9uX2RhdGEnICwgJ3Jlc3RvcmVfemlwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgQWRkb24gVXNlcmRhdGEnICkKIElpMUkxSWkgKCAnJyAsICdCYWNrdXAgR3Vpc2V0dGluZ3MueG1sJyAsIGlJaTFpaTFJMSAsICdyZXN0b3JlX2JhY2t1cCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIGd1aXNldHRpbmdzLnhtbCcgKQogaWYgNzkgLSA3OTogT29vb29vb29PTyAtIElJaWlpSTFpSUlJICogSUlpaWlJMWlJSUkgLiBPb09vT08wMAogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb29vb29vTzBvbyApIDoKICBJaTFJMUlpICggJycgLCAnQmFja3VwIEZhdm91cml0ZXMueG1sJyAsIG9vb29vb08wb28gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBmYXZvdXJpdGVzLnhtbCcgKQogIGlmIDEwMCAtIDEwMDogSUkxMTFpaWlpICogT09Pb09vbzBPICUgSTFJaWlJIC8gSTFpaTExaUlpMTFpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSWlpaWlpaUlpMUkxICkgOgogIElpMUkxSWkgKCAnJyAsICdCYWNrdXAgU291cmNlLnhtbCcgLCBJSWlpaWlpaUlpMUkxICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgc291cmNlcy54bWwnICkKICBpZiA5MCAtIDkwOiBJMWlpMTFpSWkxMWkgLiBpaWlpaWlpaTEgLiBPb09vT08wMCAuIE8wME9PbzAwb28wbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggSTFJSUlpaSApIDoKICBJaTFJMUlpICggJycgLCAnQmFja3VwIEFkdmFuY2Vkc2V0dGluZ3MueG1sJyAsIEkxSUlJaWkgLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBhZHZhbmNlZHNldHRpbmdzLnhtbCcgKQogIGlmIDQgLSA0OiBPMDBPT28wMG9vMG8gKyBPb09vT08wMCAlIEkxaWkxMWlJaTExaSAvIGkxMWlJaWlJaWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9PTzAwICkgOgogIElpMUkxSWkgKCAnJyAsICdCYWNrdXAgQWR2YW5jZWRzZXR0aW5ncy54bWwnICwgT09PMDAgLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBrZXlib2FyZC54bWwnICkKICBpZiA3NCAtIDc0OiBJSTExMWlpaWkgLiBPMCAtIEkxSWlpSSArIElJaWlpSTFpSUlJICUgaTExaUlpaUlpaSAlIE9vT29PTzAwCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPT09PICkgOgogIElpMUkxSWkgKCAnJyAsICdCYWNrdXAgUnNzRmVlZHMueG1sJyAsIE9PT08gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBSc3NGZWVkcy54bWwnICkKICBpZiA3OCAtIDc4OiBPMDBPT28wMG9vMG8gKyBPb09vT08wMCArIElJaWlpSTFpSUlJIC0gSUlpaWlJMWlJSUkgLiBpMTFpSWlpSWlpIC8gT29PME8wMAogIGlmIDI3IC0gMjc6IE8wME9PbzAwb28wbyAtIE8wICUgT09Pb09vbzBPICogSUlpIC4gSUlpaWlJMWlJSUkgJSBpSWlpMUkxMUkxSUkxCmRlZiBJaUlpMWkgKCApIDoKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdCYWNrdXAgTXkgQ29udGVudCcgLCAnbm9uZScgLCAnYmFja3VwX29wdGlvbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnUmVzdG9yZSBNeSBDb250ZW50JyAsICdub25lJyAsICdyZXN0b3JlX29wdGlvbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA5OSAtIDk5OiBPb09vT08wMCAuIElJaQogaWYgNTkgLSA1OTogT09Pb09vbzBPIC8gT28wT29vIC8gT28gLyBPMCAvIE9vT29PTzAwICsgbzBvT09vME8wT29vCmRlZiBJSWlJMTExMWkxICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coMTAwNDAsImFkZG9uczovL3JlcG9zLyIscmV0dXJuKScgKQogaWYgNDYgLSA0NjogSUlpaWlJMWlJSUkKIGlmIDI5IC0gMjk6IElJMTExaWlpaSAuIE9vT29PTzAwICUgbzBvT09vME8wT29vICogSUkxMTFpaWlpIC0gbzBvT09vME8wT29vICogaUlpaTFJMTFJMUlJMQpkZWYgaWlpMWkxSUlJICggKSA6CiBpZiA2NSAtIDY1OiBPbyAtIElJaUlpMWlJCiBvT09vMDBPME9PT28gPSBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICwgJ3RhZy5jZmcnICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9PT28wME8wT09PbyApIDoKICBJSWlJaUkgPSBvcGVuICggb09PbzAwTzBPT09vICwgJ3InICkKICBpaTFJMSA9IElJaUlpSSAuIHJlYWQgKCApCiAgSUlpSWlJIC4gY2xvc2UgKCApCiAgcmV0dXJuIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggaWkxSTEgKQogZWxzZSA6CiAgcmV0dXJuIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzZlNmM2MTZiNzM2NDZhNjY2YzZiNjE3MzZhNjQ2NjZjNmE2MTZjNzM2YjZhNjY2YzZiNjE2YTczNjYnICkKICBpZiA0NSAtIDQ1OiBPMDBPT28wMG9vMG8gLiBPb29vb29vb09PCiAgaWYgMjcgLSAyNzogTzAwT09vMDBvbzBvICogT28wT29vIC4gT29Pb09PMDAKZGVmIElpMTExSWlpaWkgKCBsb2NhbGJ1aWxkY2hlY2sgLCBsb2NhbHZlcnNpb25jaGVjayAsIGlkICwgd2VsY29tZXRleHQgLCBsaXZlbXNnICkgOgogaUlpaSAoICkKIGlmIGxpdmVtc2cgIT0gJ25vbmUnIDoKICB0cnkgOgogICBleGVjICggbGl2ZW1zZyApCiAgIGlmIDM1IC0gMzU6IE9vb29vb29vT08gLSBJSWkgLyBPb08wTzAwCiAgZXhjZXB0IDoKICAgcGFzcwogaWYgKCBPbzBvTzBvb28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiB3ZWxjb21ldGV4dCApIGFuZCAoICdlbGMnIGluIHdlbGNvbWV0ZXh0ICkgYW5kIE9vMG9PMG9vbyAhPSAnJyA6CiAgSWkxSTFJaSAoICcnICwgd2VsY29tZXRleHQgLCAnc2hvdycgLCAndXNlcl9pbmZvJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiA1MCAtIDUwOiBPb09vT08wMAogaWYgaWQgIT0gJ05vbmUnIDoKICBpZiAzMyAtIDMzOiBPT09vT29vME8KICBpZiBpZCAhPSAnTG9jYWwnIDoKICAgb09vMDBPb08wTyA9IE9vT29PME9vb09PbyAoIGxvY2FsYnVpbGRjaGVjayAsIGxvY2FsdmVyc2lvbmNoZWNrICwgaWQgKQogICBpZiA5NCAtIDk0OiBvMG9PT28wTzBPb28gLiBPb08wTzAwCiAgIGlmIG9PbzAwT29PME8gPT0gVHJ1ZSA6CiAgICBpZiA2OCAtIDY4OiBvMG9PT28wTzBPb28KICAgIGlmIG5vdCAnUGFydGlhbGx5IGluc3RhbGxlZCcgaW4gbG9jYWxidWlsZGNoZWNrIDoKICAgICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdJyArIGxvY2FsYnVpbGRjaGVjayArICc6Wy9DT0xPUl0gW0NPTE9SPWxpbWVdTkVXIFZFUlNJT04gQVZBSUxBQkxFWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8nICwgJycgLCAnJyAsICcnICwgJycgKQogICAgIGlmIDIwIC0gMjA6IElJaSAtIElJaQogICAgaWYgJyhQYXJ0aWFsbHkgaW5zdGFsbGVkKScgaW4gbG9jYWxidWlsZGNoZWNrIDoKICAgICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXUN1cnJlbnQgQnVpbGQgSW5zdGFsbGVkOiBbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXScgKyBsb2NhbGJ1aWxkY2hlY2sgKyAnWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8yJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgZWxzZSA6CiAgICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXUN1cnJlbnQgQnVpbGQgSW5zdGFsbGVkOiBbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXScgKyBsb2NhbGJ1aWxkY2hlY2sgKyAnWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8nICwgJycgLCAnJyAsICcnICwgJycgKQogICAgaWYgMzcgLSAzNzogSUlpaWlJMWlJSUkKICBlbHNlIDoKICAgaWYgMzcgLSAzNzogT28wT29vIC8gSUlpaWlJMWlJSUkgKiBPMAogICBpZiBsb2NhbGJ1aWxkY2hlY2sgPT0gJ0luY29tcGxldGUnIDoKICAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZGFya2N5YW5dWW91ciBsYXN0IHJlc3RvcmUgaXMgbm90IHlldCBjb21wbGV0ZWRbL0NPTE9SXScgLCAndXJsJyAsIG8wbzAwTzBvT29vTzAgKCApICwgJycgLCAnJyAsICcnICwgJycgKQogICAgaWYgOTkgLSA5OTogaWlpaWlpaWkxCiAgIGVsc2UgOgogICAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kYXJrY3lhbl1DdXJyZW50IEJ1aWxkIEluc3RhbGxlZDogWy9DT0xPUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Mb2NhbCBCdWlsZCAoJyArIGxvY2FsYnVpbGRjaGVjayArICcpWy9DT0xPUl0nICwgJycgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKIG8wT08wMCA9IDAKIGlmIDE0IC0gMTQ6IEkxaWkxMWlJaTExaSArIGkxMWlJaWlJaWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJICkgOgogIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBJSSApIDoKICAgaWYgb29vME8gIT0gJ01hc3RlcicgOgogICAgbzBPTzAwICs9IDEKICAgIGlmIDgzIC0gODM6IEkxaWkxMWlJaTExaSAvIGkxMWlJaWlJaWkgKyBJSTExMWlpaWkgLiBJSWlJaTFpSSAqIE9vICsgSUlpaWlJMWlJSUkKICBpZiBvME9PMDAgPiAxIDoKICAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kYXJrY3lhbl1Td2l0Y2ggQnVpbGQgUHJvZmlsZVsvQ09MT1JdJyAsIGxvY2FsYnVpbGRjaGVjayAsICdzd2l0Y2hfcHJvZmlsZV9tZW51JyAsICcnICwgJycgLCAnJyAsICcnICkKICAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1vcmFuZ2VdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWy9DT0xPUl0nICwgJ05vbmUnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDQyIC0gNDI6IGkxSUlpICUgSUkxMTFpaWlpIC4gaWlpaWlpaWkxCiAgIGlmIDcgLSA3OiBJMWlpMTFpSWkxMWkgLSBvb09vICogT28gKyBvMG9PT28wTzBPb28gLiBJMWlpMTFpSWkxMWkKICAgaWYgODUgLSA4NTogTzAKIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9eWVsbG93XVNldHRpbmdzWy9DT0xPUl0nICwgJ3NldHRpbmdzJyAsICdhZGRvbl9zZXR0aW5ncycgLCAnbWFpbm1lbnUvc2V0dGluZ3MucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiAzMiAtIDMyOiBPb29vb29vb09PIC4gT29PME8wMCAvIE9vME9vbyAqIG8wb09PbzBPME9vbyAvIG8wb09PbzBPME9vbyAqIE8wME9PbzAwb28wbwogaWYgMTkgLSAxOTogTzAwT09vMDBvbzBvCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQWRkLW9uIFBvcnRhbCcgLCAnJyAsICdhZGRvbm1lbnUnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDU1IC0gNTU6IE9vICUgT28gLyBPMCAlIElJaUlpMWlJIC0gbzBvT09vME8wT29vIC4gT28wT29vCiBpZiB4Ym1jIC4gZ2V0Q29uZFZpc2liaWxpdHkgKCAnc3lzdGVtLnBsYXRmb3JtLmFuZHJvaWQnICkgOgogIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBcHAgSW5zdGFsbGVyJyAsICcnICwgJ2FwcF9pbnN0YWxsZXInICwgJ21haW5tZW51L2FwcHMucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgNDkgLSA0OTogaUlpaTFJMTFJMUlJMSAqIGkxSUlpIC4gT29vb29vb29PTwogSWkxSTFJaSAoICdmb2xkZXInICwgJ0NvbW11bml0eSBCdWlsZHMnICwgJycgLCAnQ0JfTWVudScgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0tleXdvcmQgSW5zdGFsbGVyJyAsICcnICwgJ25hbl9tZW51JyAsICdtYWlubWVudS9rZXl3b3JkLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ1R1dG9yaWFscycgLCAnJyAsICd0dXRvcmlhbF9yb290X21lbnUnICwgJ21haW5tZW51L3R1dHMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnTWFpbnRlbmFuY2UnICwgJ25vbmUnICwgJ3Rvb2xzJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDkwIC0gOTA6IG8wb09PbzBPME9vbyAlIEkxaWkxMWlJaTExaSAtIGlJaWkxSTExSTFJSTEgJSBPb09vT08wMAogaWYgOCAtIDg6IE9vT29PTzAwICogT28wT29vIC8gSUlpaWlJMWlJSUkgJSBPMDBPT28wMG9vMG8gLSBJMUlpaUkKZGVmIG9vMG9vb29vMDBvICggKSA6CiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG8wTzAwT28wbzAgKSA6CiAgc2h1dGlsIC4gcm10cmVlICggTzBvME8wME9vMG8wICkKICBpZiA3OCAtIDc4OiBpSWlpMUkxMUkxSUkxIC4gbzBvT09vME8wT29vICUgaUlpaTFJMTFJMUlJMSAuIE8wIC8gT28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG8wTzAwT28wbzAgKSA6CiAgb3MgLiBtYWtlZGlycyAoIE8wbzBPMDBPbzBvMCApCiAgaWYgNzYgLSA3NjogaTFJSWkgKiBPb29vb29vb09PICogTzAgKyBJSWkgKiBJSWkKIGkxaUlpSWlpID0gaUkxaWlJMUlJSTFpICggKQogaWlpMSA9IG9vbzBPMG8wME8gKCAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2FwcHJvdmVkLnBocCcgLCAxMCApCiBpZiAxMyAtIDEzOiBpSWlpMUkxMUkxSUkxCiBPT29vTzBPT29vIC4gY3JlYXRlICggJ0JhY2tpbmcgVXAgQWRkLW9ucycgLCAnJyAsICdQbGVhc2UgV2FpdC4uLicgKQogaWYgNzcgLSA3NzogaTExaUlpaUlpaSAtIGlJaWkxSTExSTFJSTEgLyBvb09vIC8gaWlpaWlpaWkxIC8gT29PME8wMAogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIElJMTFpaWlpMUlpICkgOgogIGlmIDU2IC0gNTY6IE9vb29vb29vT08gKiBPMAogIGlmIDg1IC0gODU6IE9vb29vb29vT08gJSBPb09vT08wMCAqIGlJaWkxSTExSTFJSTEKICBpZiBub3QgJ3RvdGFsaW5zdGFsbGVyJyBpbiBvb28wTyBhbmQgbm90ICdwbHVnaW4ucHJvZ3JhbS50YnMnIGluIG9vbzBPIGFuZCBub3QgJ3BhY2thZ2VzJyBpbiBvb28wTyBhbmQgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyApICkgOgogICBpZiA0NCAtIDQ0OiBpSWlpMUkxMUkxSUkxIC4gSTFpaTExaUlpMTFpICsgSUlpIC4gaWlpaWlpaWkxCiAgIGlmIDcgLSA3OiBJMWlpMTFpSWkxMWkgKyBpSWlpMUkxMUkxSUkxICogT09Pb09vbzBPICogT09Pb09vbzBPIC8gSUkxMTFpaWlpIC0gTzAwT09vMDBvbzBvCiAgIGlmIG9vbzBPIGluIGlpaTEgYW5kIG5vdCBvb28wTyBpbiBpMWlJaUlpaSBhbmQgbm90ICdyZXBvLicgaW4gb29vME8gYW5kIG5vdCAncmVwb3NpdG9yeS4nIGluIG9vbzBPIGFuZCBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIG9vbzBPICkgKSA6CiAgICBpZiA2NSAtIDY1OiBvb09vICsgT29Pb09PMDAgKyBJSTExMWlpaWkKICAgIGlmIDc3IC0gNzc6IElJMTExaWlpaQogICAgaWYgbm90ICdzZXJ2aWNlLnhibWMudmVyc2lvbmNoZWNrJyBpbiBvb28wTyBhbmQgbm90ICdwYWNrYWdlcycgaW4gb29vME8gYW5kIG9zIC4gcGF0aCAuIGlzZGlyICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgb29vME8gKSApIDoKICAgICBpZiA1MCAtIDUwOiBPMCAuIE8wIC4gaWlpaWlpaWkxICUgT28wT29vCiAgICAgdHJ5IDoKICAgICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiQmFja2luZyBVcCIgLCAnW0NPTE9SIHllbGxvd10lc1svQ09MT1JdJyAlIG9vbzBPICwgJ1BsZWFzZSBXYWl0Li4uJyApCiAgICAgIG9zIC4gbWFrZWRpcnMgKCBvcyAuIHBhdGggLiBqb2luICggTzBvME8wME9vMG8wICwgb29vME8gKSApCiAgICAgIGlmIDY4IC0gNjg6IG9vT28KICAgICAgSWlJaUlpMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wbzBPMDBPbzBvMCAsIG9vbzBPICwgJ2FkZG9uLnhtbCcgKQogICAgICBpMTFpSUlpSTFJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPMG8wTzAwT28wbzAgLCBvb28wTyAsICdkZWZhdWx0LnB5JyApCiAgICAgIGlJaUlJaUkxaTFJaSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyAsICdhZGRvbi54bWwnICkgLCBtb2RlID0gJ3InICkKICAgICAgaWkxSTEgPSBpSWlJSWlJMWkxSWkgLiByZWFkICggKQogICAgICBpSWlJSWlJMWkxSWkgLiBjbG9zZSAoICkKICAgICAgaWYgNzIgLSA3MjogT28gLiBPbyAtIEkxaWkxMWlJaTExaQogICAgICBJSUkxSUkxaSA9IHJlIC4gY29tcGlsZSAoICcgbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKICAgICAgaUkxaTFJaUlJSUlpID0gcmUgLiBjb21waWxlICggJ3Byb3ZpZGVyLW5hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgICAgIE9vb09vb08wTzBvMCA9IHJlIC4gY29tcGlsZSAoICc8YWRkb25bXHNcU10qPyI+JyApIC4gZmluZGFsbCAoIGlpMUkxICkKICAgICAgT09PMG8wID0gcmUgLiBjb21waWxlICggJzxkZXNjcmlwdGlvbltcc1xTXSo/PFwvZGVzY3JpcHRpb24+JyApIC4gZmluZGFsbCAoIGlpMUkxICkKICAgICAgb09vb28wID0gSUlJMUlJMWkgWyAwIF0gaWYgKCBsZW4gKCBJSUkxSUkxaSApID4gMCApIGVsc2UgJ05vbmUnCiAgICAgIEkxSUlpaTEgPSBpSTFpMUlpSUlJSWkgWyAwIF0gaWYgKCBsZW4gKCBpSTFpMUlpSUlJSWkgKSA+IDAgKSBlbHNlICdBbm9ueW1vdXMnCiAgICAgIElJSUlJSTExMUlpID0gT29vT29vTzBPMG8wIFsgMCBdIGlmICggbGVuICggT29vT29vTzBPMG8wICkgPiAwICkgZWxzZSAnTm9uZScKICAgICAgb28wTzAwT29vbzBPMCA9IE9PTzBvMCBbIDAgXSBpZiAoIGxlbiAoIE9PTzBvMCApID4gMCApIGVsc2UgJ05vbmUnCiAgICAgIGlmIDUgLSA1OiBpMUlJaSArIE8wICUgTzAgKiBPMCArIE9vT29PTzAwICUgaTFJSWkKICAgICAgTzBPT28gPSAnPGFkZG9uIGlkPSInICsgb29vME8gKyAnIiBuYW1lPSInICsgb09vb28wICsgJyIgdmVyc2lvbj0iMCIgcHJvdmlkZXItbmFtZT0iJyArIEkxSUlpaTEgKyAnIj4nCiAgICAgIE8wME9vID0gJzxkZXNjcmlwdGlvbj5JZiB5b3VcJ3JlIHNlZWluZyB0aGlzIG1lc3NhZ2UgaXQgbWVhbnMgdGhlIGFkZC1vbiBpcyBzdGlsbCB1cGRhdGluZywgcGxlYXNlIHdhaXQgZm9yIHRoZSB1cGRhdGUgcHJvY2VzcyB0byBjb21wbGV0ZS48L2Rlc2NyaXB0aW9uPicKICAgICAgaWYgNDEgLSA0MTogTzAwT09vMDBvbzBvICsgaTExaUlpaUlpaSAvIElJaWlpSTFpSUlJICUgSTFpaTExaUlpMTFpCiAgICAgIGlmIElJSUlJSTExMUlpICE9ICdOb25lJyA6CiAgICAgICBPT08gPSBpaTFJMSAuIHJlcGxhY2UgKCBvbzBPMDBPb29vME8wICwgTzAwT28gKSAuIHJlcGxhY2UgKCBJSUlJSUkxMTFJaSAsIE8wT09vICkKICAgICAgIGlmIDIyIC0gMjI6IE9vT29PTzAwICUgbzBvT09vME8wT29vICogTzAwT09vMDBvbzBvIC0gSTFpaTExaUlpMTFpICsgbzBvT09vME8wT29vIC0gT28wT29vCiAgICAgIGVsc2UgOgogICAgICAgT09PID0gaWkxSTEgLiByZXBsYWNlICggb28wTzAwT29vbzBPMCAsIE8wME9vICkKICAgICAgIGlmIDE1IC0gMTU6IE9vCiAgICAgIE9vb29vT09vbzAgPSBvcGVuICggSWlJaUlpMUkxICwgbW9kZSA9ICd3KycgKQogICAgICBPb29vb09Pb28wIC4gd3JpdGUgKCBzdHIgKCBPT08gKSApCiAgICAgIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICAgICAgaTFpaUkgPSBvcGVuICggaTExaUlJaUkxSTEgLCBtb2RlID0gJ3crJyApCiAgICAgIGkxaWlJIC4gd3JpdGUgKCAnaW1wb3J0IHhibWNwbHVnaW4seGJtY2d1aSx4Ym1jLHhibWNhZGRvbixvcyxzeXNcbkFkZG9uSUQ9IicgKyBvb28wTyArICciXG5BZGRvbk5hbWU9IicgKyBvT29vbzAgKyAnIlxuZGlhbG9nPXhibWNndWkuRGlhbG9nKClcbmRpYWxvZy5vayhBZGRvbk5hbWUrIiBBZGQtb24gUmVxdWlyZXMgVXBkYXRlIiwiVGhpcyBhZGQtb24gbWF5IHN0aWxsIGJlIGluIHRoZSBwcm9jZXNzIG9mIHRoZSB1cGRhdGluZyBzbyB3ZSByZWNvbW1lbmQgd2FpdGluZyBhIGZldyBtaW51dGVzIHRvIHNlZSBpZiBpdCB1cGRhdGVzIG5hdHVyYWxseS4gSWYgaXQgaGFzblwndCB1cGRhdGVkIGFmdGVyIDVtaW5zIHBsZWFzZSB0cnkgcmVpbnN0YWxsaW5nIHZpYSB0aGUgQ29tbXVuaXR5IFBvcnRhbCBhZGQtb24iKVxueGJtY3BsdWdpbi5lbmRPZkRpcmVjdG9yeShpbnQoc3lzLmFyZ3ZbMV0pKScgKQogICAgICBpMWlpSSAuIGNsb3NlICggKQogICAgICBpZiA4MyAtIDgzOiBvb09vIC8gaUlpaTFJMTFJMUlJMSArIGkxSUlpIC8gSUlpSWkxaUkKICAgICBleGNlcHQgOgogICAgICBwcmludCAiIyMjIEZhaWxlZCB0byBiYWNrdXA6ICIgKyBvb28wTwogICAgICBpZiA0NyAtIDQ3OiBvb09vICsgT29vb29vb29PTyAuIElJMTExaWlpaSAuIElJaUlpMWlJCiAgICAgIGlmIDY2IC0gNjY6IGlpaWlpaWlpMSAqIE9vT29PTzAwCiAgIGVsc2UgOgogICAgdHJ5IDoKICAgICBzaHV0aWwgLiBjb3B5dHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIG9vbzBPICkgLCBvcyAuIHBhdGggLiBqb2luICggTzBvME8wME9vMG8wICwgb29vME8gKSApCiAgICBleGNlcHQgOgogICAgIHByaW50ICIjIyMgRmFpbGVkIHRvIGNvcHk6ICIgKyBvb28wTwogICAgIGlmIDIgLSAyOiBvb09vIC4gSUlpICogT28wT29vICsgTzAgLSBPT09vT29vME8gKiBpSWlpMUkxMUkxSUkxCiBPT29vTzBPT29vIC4gY2xvc2UgKCApCiBpZiAxMiAtIDEyOiBvMG9PT28wTzBPb28gKiBJSWkgJSBJSTExMWlpaWkgKiBpMUlJaSAqIGlJaWkxSTExSTFJSTEKIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBCYWNrdXAiCiBJSTFpSTExID0gIkFyY2hpdmluZy4uLiIKIE8wMG8wTyA9ICIiCiBPMDBvT28wTzBvMDBPID0gIlBsZWFzZSBXYWl0IgogaWYgOTEgLSA5MTogSUkxMTFpaWlpICogSUlpSWkxaUkgLiBpMUlJaQogaWlJSWlpICggTzBvME8wME9vMG8wICwgTzAwTzBvT08wME8wMCAsIG9PMG9Pb28wTyAsIElJMWlJMTEgLCBPMDBvME8gLCBPMDBvT28wTzBvMDBPICwgJycgLCAnJyApCiBpZiAyMiAtIDIyOiBvb09vICogTzAwT09vMDBvbzBvICogaTExaUlpaUlpaSArIElJaUlpMWlJICogT29Pb09PMDAgKiBPb08wTzAwCiB0cnkgOgogIHNodXRpbCAuIHJtdHJlZSAoIE8wbzBPMDBPbzBvMCApCiAgaWYgODUgLSA4NTogSUlpSWkxaUkgKiBPbyAlIE9vME9vbyAtIElJaUlpMWlJIC0gT09Pb09vbzBPCiBleGNlcHQgOgogIHByaW50ICIjIyMgQ09NTVVOSVRZIEJVSUxEUzogRmFpbGVkIHRvIHJlbW92ZSB0ZW1wIGFkZG9ucyBmb2xkZXIgLSBtYW51YWwgZGVsZXRlIHJlcXVpcmVkICMjIyIKICBpZiA0NiAtIDQ2OiBPMAogIGlmIDY1IC0gNjU6IGlJaWkxSTExSTFJSTEgJSBvb09vICsgTzAgLyBPb29vb29vb09PCmRlZiBPMDAwMG9PMG8wMCAoIHVybCApIDoKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnQ2xlYW5pbmcgVGVtcCBQYXRocycgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggTzBvME8wME9vMG8wICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIE8wbzBPMDBPbzBvMCApCiAgaWYgODAgLSA4MDogT29vb29vb29PTyArIElJaWlpSTFpSUlJCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggTzBvME8wME9vMG8wICkgOgogIG9zIC4gbWFrZWRpcnMgKCBPMG8wTzAwT28wbzAgKQogIGlmIDk1IC0gOTU6IElJaSAvIG9vT28gKiBJSWkgLSBPb29vb29vb09PICogT29vb29vb29PTyAlIE9vTzBPMDAKIGV4dHJhY3QgLiBhbGwgKCBPMDBPMG9PTzAwTzAwICwgTzBvME8wME9vMG8wICwgT09vb08wT09vbyApCiBpZiA0MyAtIDQzOiBPbzBPb28gLiBJSWkKIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBPMG8wTzAwT28wbzAgKSA6CiAgaWYgMTIgLSAxMjogSUlpICsgT28gKyBPT09vT29vME8gLiBJSWlpaUkxaUlJSSAvIE8wME9PbzAwb28wbwogIGlmIG5vdCAndG90YWxpbnN0YWxsZXInIGluIG9vbzBPIGFuZCBub3QgJ3BsdWdpbi5wcm9ncmFtLnRicycgaW4gb29vME8gOgogICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgb29vME8gKSApIDoKICAgIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIE8wbzBPMDBPbzBvMCAsIG9vbzBPICkgLCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyApICkKICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkluc3RhbGxpbmc6IFtDT0xPUj15ZWxsb3ddIiArIG9vbzBPICsgJ1svQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICBwcmludCAiIyMjIFN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQ6ICIgKyBvb28wTwogICAgaWYgMjkgLSAyOTogSUlpaWlJMWlJSUkgLiBpaWlpaWlpaTEgLSBJSTExMWlpaWkKICAgZWxzZSA6CiAgICBwcmludCAiIyMjICIgKyBvb28wTyArICIgQWxyZWFkeSBleGlzdHMgb24gc3lzdGVtIgogICAgaWYgNjggLSA2ODogaUlpaTFJMTFJMUlJMSArIElJMTExaWlpaSAvIG9vT28KICAgIGlmIDkxIC0gOTE6IE9vT29PTzAwICUgaUlpaTFJMTFJMUlJMSAuIEkxSWlpSQpkZWYgTzAwb29vb28wMCAoIHdlbGNvbWV0ZXh0ICkgOgogaWYgeGJtYyAuIGdldENvbmRWaXNpYmlsaXR5ICggJ3N5c3RlbS5wbGF0Zm9ybS5hbmRyb2lkJyApIDoKICBpSUlJMWlpSWkxMSA9IGkxSUlpMWkxSWkxICggKQogIE8wb29Pb09PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSUlJMWlpSWkxMSAsICdEb3dubG9hZCcgKQogIHRyeSA6CiAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG9vT29PTzAgKSA6CiAgICBvcyAuIG1ha2VkaXJzICggTzBvb09vT08wICkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gbWFrZSBkb3dubG9hZCBmb2xkZXIiICkKICAgaWYgNTYgLSA1NjogbzBvT09vME8wT29vIC8gSUlpaWlJMWlJSUkgKiBJMUlpaUkgLiBvMG9PT28wTzBPb28KIGlpTzBvME8wb28wbyA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAiU3lzdGVtLkJ1aWxkVmVyc2lvbiIgKQogTzBPb29vSTExaUkxSSA9IGZsb2F0ICggaWlPMG8wTzBvbzBvIFsgOiAyIF0gKQogb09PbzBvbzBPID0gaW50ICggTzBPb29vSTExaUkxSSApCiBpZiA1MCAtIDUwOiBpSWlpMUkxMUkxSUkxICogSUlpaWlJMWlJSUkgLiBPb29vb29vb09PIC8gSUkxMTFpaWlpIC0gSTFpaTExaUlpMTFpICogSTFpaTExaUlpMTFpCiBpZiBpSTFJaTExMTExaUlpID09ICd0cnVlJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNob3cgTXkgUHJpdmF0ZSBMaXN0Wy9DT0xPUl0nICwgJyZ2aXNpYmlsaXR5PXByaXZhdGUnICwgJ2dyYWJfYnVpbGRzJyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgOTggLSA5ODogT29PME8wMCAtIE8wME9PbzAwb28wbyAuIElJaWlpSTFpSUlJICUgaTExaUlpaUlpaQogaWYgKCBvT09vMG9vME8gPCAxNCApIG9yICggaTEgPT0gJ3RydWUnICkgOgogIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1TaG93IEFsbCBHb3RoYW0gQ29tcGF0aWJsZSBCdWlsZHNbL0NPTE9SXScgLCAnJnhibWM9Z290aGFtJnZpc2liaWxpdHk9cHVibGljJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogIGlmIDY5IC0gNjk6IEkxaWkxMWlJaTExaSArIElJaUlpMWlJICogTzAgLiBPbyAlIE9vT29PTzAwCiBpZiAoIG9PT28wb28wTyA9PSAxNCApIG9yICggaTEgPT0gJ3RydWUnICkgOgogIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1TaG93IEFsbCBIZWxpeCBDb21wYXRpYmxlIEJ1aWxkc1svQ09MT1JdJyAsICcmeGJtYz1oZWxpeCZ2aXNpYmlsaXR5PXB1YmxpYycgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKICBpZiA5NiAtIDk2OiBpaWlpaWlpaTEgLiBpaWlpaWlpaTEgLSBPT09vT29vME8gLyBPT09vT29vME8KIGlmICggb09PbzBvbzBPID09IDE1ICkgb3IgKCBpMSA9PSAndHJ1ZScgKSA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNob3cgQWxsIElzZW5nYXJkIENvbXBhdGlibGUgQnVpbGRzWy9DT0xPUl0nICwgJyZ4Ym1jPWlzZW5nYXJkJnZpc2liaWxpdHk9cHVibGljJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgKCBvT09vMG9vME8gPT0gMTYgKSBvciAoIGkxID09ICd0cnVlJyApIDoKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU2hvdyBBbGwgSmFydmlzIENvbXBhdGlibGUgQnVpbGRzWy9DT0xPUl0nICwgJyZ4Ym1jPWphcnZpcyZ2aXNpYmlsaXR5PXB1YmxpYycgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKICBpZiA5NiAtIDk2OiBpMTFpSWlpSWlpIC8gSTFJaWlJIC0gTzAgLiBpaWlpaWlpaTEKIGlmIGkxMSA9PSAnZmFsc2UnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPWdvbGRdSG93IHRvIGZpeCBidWlsZHMgYnJva2VuIG9uIG90aGVyIHdpemFyZHMhWy9DT0xPUl0nICwgJycgLCAnaW5zdHJ1Y3Rpb25zXzUnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIEkxMSAhPSAnJyBhbmQgaTExID09ICd0cnVlJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kYXJrY3lhbl1TaG93ICcgKyBPbzBvMDAwMG8wbzAgKyAnIEJ1aWxkc1svQ09MT1JdJyAsICcmaWQ9MScgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIG9PbzBvb29vMDBvICE9ICcnIGFuZCBpMTEgPT0gJ3RydWUnIDoKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVNob3cgJyArIG9PMG8wbzBvb08wb08gKyAnIEJ1aWxkc1svQ09MT1JdJyAsICcmaWQ9MicgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIG9vMG8wTzAwICE9ICcnIGFuZCBpMTEgPT0gJ3RydWUnIDoKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVNob3cgJyArIG9PICsgJyBCdWlsZHNbL0NPTE9SXScgLCAnJmlkPTMnICwgJ2dyYWJfYnVpbGRzJyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiBpMWlpSUlpaUkxMTEgIT0gJycgYW5kIGkxMSA9PSAndHJ1ZScgOgogIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZGFya2N5YW5dU2hvdyAnICsgb29vT09PT08gKyAnIEJ1aWxkc1svQ09MT1JdJyAsICcmaWQ9NCcgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIGkxaWlJSUkxMTFpaSAhPSAnJyBhbmQgaTExID09ICd0cnVlJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kYXJrY3lhbl1TaG93ICcgKyBpMWlJSWkxICsgJyBCdWlsZHNbL0NPTE9SXScgLCAnJmlkPTUnICwgJ2dyYWJfYnVpbGRzJyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ3JlYXRlIE15IE93biBDb21tdW5pdHkgQnVpbGQnICwgJ3VybCcgLCAnYmFja3VwX29wdGlvbicgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBGdWxsIFN5c3RlbScgKQogaWYgMzkgLSAzOTogaWlpaWlpaWkxIC8gTzAgKiBJSWlpaUkxaUlJSQogaWYgMTcgLSAxNzogTzAwT09vMDBvbzBvIC8gaUlpaTFJMTFJMUlJMSAtIE9vTzBPMDAgKyBJMUlpaUkgJSBPbwpkZWYgSUlJMUlJSTExSUkgKCBza2luICkgOgogaUlpMWlJID0gJzxvbmxlZnQ+JXM8L29ubGVmdD4nCiBPTzBPb0lJaWlpaWlJaUlJaSA9ICc8b25yaWdodD4lczwvb25yaWdodD4nCiBpaUlpaUlpMSA9ICc8b251cD4lczwvb251cD4nCiBJMUlpMTFpID0gJzxvbmRvd24+JXM8L29uZG93bj4nCiBJMWlJaWlpSTEgPSAnPGNvbnRyb2wgdHlwZT0iYnV0dG9uIiBpZD0iJXMiPicKIGlmIDg3IC0gODc6IE9vT29PTzAwIC0gaWlpaWlpaWkxIC0gT28gKyBPbzBPb28gJSBpSWlpMUkxMUkxSUkxIC8gaTExaUlpaUlpaQogaWYgMTIgLSAxMjogaWlpaWlpaWkxCiBvT09PMG9vT08gPSBbCiAoICc2NScgLCAnMTQwJyApICwKICggJzY2JyAsICcxNjQnICkgLAogKCAnNjcnICwgJzE2MicgKSAsCiAoICc2OCcgLCAnMTQyJyApICwKICggJzY5JyAsICcxMjInICkgLAogKCAnNzAnICwgJzE0MycgKSAsCiAoICc3MScgLCAnMTQ0JyApICwKICggJzcyJyAsICcxNDUnICkgLAogKCAnNzMnICwgJzEyNycgKSAsCiAoICc3NCcgLCAnMTQ2JyApICwKICggJzc1JyAsICcxNDcnICkgLAogKCAnNzYnICwgJzE0OCcgKSAsCiAoICc3NycgLCAnMTY2JyApICwKICggJzc4JyAsICcxNjUnICkgLAogKCAnNzknICwgJzEyOCcgKSAsCiAoICc4MCcgLCAnMTI5JyApICwKICggJzgxJyAsICcxMjAnICkgLAogKCAnODInICwgJzEyMycgKSAsCiAoICc4MycgLCAnMTQxJyApICwKICggJzg0JyAsICcxMjQnICkgLAogKCAnODUnICwgJzEyNicgKSAsCiAoICc4NicgLCAnMTYzJyApICwKICggJzg3JyAsICcxMjEnICkgLAogKCAnODgnICwgJzE2MScgKSAsCiAoICc4OScgLCAnMTI1JyApICwKICggJzkwJyAsICcxNjAnICkgXQogaWYgMyAtIDM6IE9vb29vb29vT08KIGZvciBPME9vTzBvICwgSTExMUlJaUlJSSBpbiBvT09PMG9vT08gOgogIE9PME9Pb28wT09PID0gb3BlbiAoIHNraW4gKSAuIHJlYWQgKCApCiAgb29vb09vbzBPTyA9IE9PME9Pb28wT09PIC4gcmVwbGFjZSAoIEkxaUlpaWlJMSAlIE8wT29PMG8gLCBJMWlJaWlpSTEgJSBJMTExSUlpSUlJICkgLiByZXBsYWNlICggaUlpMWlJICUgTzBPb08wbyAsIGlJaTFpSSAlIEkxMTFJSWlJSUkgKSAuIHJlcGxhY2UgKCBPTzBPb0lJaWlpaWlJaUlJaSAlIE8wT29PMG8gLCBPTzBPb0lJaWlpaWlJaUlJaSAlIEkxMTFJSWlJSUkgKSAuIHJlcGxhY2UgKCBpaUlpaUlpMSAlIE8wT29PMG8gLCBpaUlpaUlpMSAlIEkxMTFJSWlJSUkgKSAuIHJlcGxhY2UgKCBJMUlpMTFpICUgTzBPb08wbyAsIEkxSWkxMWkgJSBJMTExSUlpSUlJICkKICBJSWlJMWkgPSBvcGVuICggc2tpbiAsIG1vZGUgPSAndycgKQogIElJaUkxaSAuIHdyaXRlICggb29vb09vbzBPTyApCiAgSUlpSTFpIC4gY2xvc2UgKCApCiAgaWYgODUgLSA4NTogSUkxMTFpaWlpIC4gaWlpaWlpaWkxICUgT28gJSBPT09vT29vME8KZGVmIE9PbzAwb29Pb08wbyAoIHUgLCBza2luICkgOgogaUlpMWlJID0gJzxvbmxlZnQ+JXM8L29ubGVmdD4nCiBPTzBPb0lJaWlpaWlJaUlJaSA9ICc8b25yaWdodD4lczwvb25yaWdodD4nCiBpaUlpaUlpMSA9ICc8b251cD4lczwvb251cD4nCiBJMUlpMTFpID0gJzxvbmRvd24+JXM8L29uZG93bj4nCiBJMWlJaWlpSTEgPSAnPGNvbnRyb2wgdHlwZT0iYnV0dG9uIiBpZD0iJXMiPicKIGlmIDIxIC0gMjE6IGkxMWlJaWlJaWkKIGlmIHUgPCA0OSA6CiAgbzAwaUlpaWlJSSA9IHUgKyA2MQogIGlmIDUgLSA1OiBPb29vb29vb09PIC8gbzBvT09vME8wT29vICUgT09Pb09vbzBPICUgT29PME8wMCAqIElJaUlpMWlJICsgaUlpaTFJMTFJMUlJMQogZWxzZSA6CiAgbzAwaUlpaWlJSSA9IHUgKyA1MQogIGlmIDExIC0gMTE6IElJaSAlIGkxMWlJaWlJaWkgJSBvb09vIC4gSUlpaWlJMWlJSUkKIE9PME9Pb28wT09PID0gb3BlbiAoIHNraW4gKSAuIHJlYWQgKCApCiBvb29vT29vME9PID0gT08wT09vbzBPT08gLiByZXBsYWNlICggaUlpMWlJICUgdSAsIGlJaTFpSSAlIG8wMGlJaWlpSUkgKSAuIHJlcGxhY2UgKCBPTzBPb0lJaWlpaWlJaUlJaSAlIHUgLCBPTzBPb0lJaWlpaWlJaUlJaSAlIG8wMGlJaWlpSUkgKSAuIHJlcGxhY2UgKCBpaUlpaUlpMSAlIHUgLCBpaUlpaUlpMSAlIG8wMGlJaWlpSUkgKSAuIHJlcGxhY2UgKCBJMUlpMTFpICUgdSAsIEkxSWkxMWkgJSBvMDBpSWlpaUlJICkgLiByZXBsYWNlICggSTFpSWlpaUkxICUgdSAsIEkxaUlpaWlJMSAlIG8wMGlJaWlpSUkgKQogSUlpSTFpID0gb3BlbiAoIHNraW4gLCBtb2RlID0gJ3cnICkKIElJaUkxaSAuIHdyaXRlICggb29vb09vbzBPTyApCiBJSWlJMWkgLiBjbG9zZSAoICkKIGlmIDkyIC0gOTI6IElJMTExaWlpaQpkZWYgSWlJSWkxSUkxaSAoIGRlc2NyaXB0aW9uICkgOgogb29PME9PbzAgPSBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnZXh0cmFjdGVkJyApCiBpSUlJMTFJaWlpMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsICd0ZW1wJyApCiBvMG9vMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvb08wT09vMCAsICd1c2VyZGF0YScgLCAnLmNiY2ZnJyApCiBPb08wT09vTzBPbzAgPSBvcyAuIHBhdGggLiBqb2luICggSUkgLCBkZXNjcmlwdGlvbiAsICdhZGRvbmxpc3QnICkKIG9PMDBPID0gb3BlbiAoIE9vTzBPT29PME9vMCAsICd3KycgKQogSUkxMTFJaWlpSTEgPSBbIF0KIGlmIDc1IC0gNzU6IGlpaWlpaWlpMQogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIGRlc2NyaXB0aW9uICkgKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIGRlc2NyaXB0aW9uICkgKQogIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ3JlYXRlZDogJXMiICUgb3MgLiBwYXRoIC4gam9pbiAoIElJICwgZGVzY3JpcHRpb24gKSApCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb29Pb09vbzBPICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvb09vT29vME8gKQogIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ3JlYXRlZDogJXMiICUgb29Pb09vbzBPICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlJSUkxMUlpaWkxICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIGlJSUkxMUlpaWkxICkKICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIFJlbW92ZWQ6ICVzIiAlIGlJSUkxMUlpaWkxICkKICAgaWYgMjkgLSAyOTogSTFpaTExaUlpMTFpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvMG9vMCApIDoKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggaUlJSTExSWlpaTEgKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBpSUlJMTFJaWlpMSApCiAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgIHhibWMgLiBsb2cgKCAiIyMjIENyZWF0ZWQ6ICVzIiAlIGlJSUkxMUlpaWkxICkKICBleHRyYWN0IC4gYWxsICggbzBvbzAgLCBpSUlJMTFJaWlpMSAsIE9Pb29PME9Pb28gKQogIHhibWMgLiBsb2cgKCAiIyMjIE5FVyBTVFlMRSBCVUlMRCIgKQogIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgRXh0cmFjdGVkICIgKyBvMG9vMCArICIgdG86ICIgKyBpSUlJMTFJaWlpMSApCiBlbGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvb08wT09vMCAsICdhZGRvbnMnICkgKSA6CiAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggb29PME9PbzAgLCAnYWRkb25zJyApICwgaUlJSTExSWlpaTEgKQogIHhibWMgLiBsb2cgKCAiIyMjIE9MRCBCVUlMRCAtIFJFTkFNRUQgQURET05TIEZPTERFUiIgKQogIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgKGxpbmUgMTQ2NSkgcmVuYW1lZCAiICsgb3MgLiBwYXRoIC4gam9pbiAoIG9vTzBPT28wICwgJ2FkZG9ucycgKSArICIgdG8gIiArIGlJSUkxMUlpaWkxICkKICAgaWYgNTMgLSA1MzogaTExaUlpaUlpaSAuIEkxaWkxMWlJaTExaSAlIE8wME9PbzAwb28wbyAvIGlpaWlpaWlpMSAlIGlJaWkxSTExSTFJSTEKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnQ29weWluZyBBZGRvbnMnICwgJycgLCAnJyAsICcnICkKIGlmIDYgLSA2OiBPbzBPb28gLSBPbyAuIGlJaWkxSTExSTFJSTEKIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBPTzBvICkgOgogIElJMTExSWlpaUkxIC4gYXBwZW5kICggb29vME8gKQogIGlmIDMwIC0gMzA6IGlpaWlpaWlpMSArIGlpaWlpaWlpMSAlIElJaWlpSTFpSUlJIC0gbzBvT09vME8wT29vIC0gSTFpaTExaUlpMTFpCiBmb3Igb29vME8gaW4gb3MgLiBsaXN0ZGlyICggSUkxMWlpaWkxSWkgKSA6CiAgSUkxMTFJaWlpSTEgLiBhcHBlbmQgKCBvb28wTyApCiAgaWYgMzYgLSAzNjogT09Pb09vbzBPICUgT28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9vT29Pb28wTyApIDoKICBmb3Igb29vME8gaW4gb3MgLiBsaXN0ZGlyICggb29Pb09vbzBPICkgOgogICBpZiBub3Qgb29vME8gaW4gSUkxMTFJaWlpSTEgOgogICAgSUkxMTFJaWlpSTEgLiBhcHBlbmQgKCBvb28wTyApCiAgICBpZiA3MiAtIDcyOiBJMUlpaUkgLyBJSWlJaTFpSSAtIE8wICsgT09Pb09vbzBPCiAgICBpZiA4MyAtIDgzOiBPMAogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvb09vT29vME8gLCAnYmFja3VwcycgKSApIDoKICBvcyAuIG1ha2VkaXJzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vT29Pb28wTyAsICdiYWNrdXBzJyApICkKICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIENyZWF0ZWQ6ICIgKyBvcyAuIHBhdGggLiBqb2luICggb29Pb09vbzBPICwgJ2JhY2t1cHMnICkgKQogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIGlJSUkxMUlpaWkxICkgOgogIHRyeSA6CiAgIGlmIDg5IC0gODk6IE9vME9vbyArIEkxaWkxMWlJaTExaSAtIG8wb09PbzBPME9vbwogICBpZiA0MCAtIDQwOiBPb08wTzAwICsgT29PME8wMAogICBvTzAwTyAuIHdyaXRlICggb29vME8gKyAnfCcgKQogICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBBZGRlZDogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBvb09vT29vME8gLCAnYmFja3VwcycgLCBvb28wTyApICkKICAgIHhibWMgLiBsb2cgKCAiIyMjIEFkZGVkICIgKyBvb28wTyArICIgdG8gIiArIG9PMDBPICkKICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDk0IC0gOTQ6IElJaUlpMWlJICogaUlpaTFJMTFJMUlJMSAuIE9PT29Pb28wTwogIGlmIG5vdCBvb28wTyBpbiBJSTExMUlpaWlJMSA6CiAgIHRyeSA6CiAgICBvcyAuIHJlbmFtZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpSUlJMTFJaWlpMSAsIG9vbzBPICkgLCBvcyAuIHBhdGggLiBqb2luICggb29Pb09vbzBPICwgb29vME8gKSApCiAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJDb25maWd1cmluZyIgLCAnW0NPTE9SIHllbGxvd10lc1svQ09MT1JdJyAlIG9vbzBPICwgJ1BsZWFzZSBXYWl0Li4uJyApCiAgICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICAgeGJtYyAuIGxvZyAoICIjIyMgUmVuYW1lZCBmcm9tICIgKyBvcyAuIHBhdGggLiBqb2luICggaUlJSTExSWlpaTEgLCBvb28wTyApICsgIiB0byAiICsgb3MgLiBwYXRoIC4gam9pbiAoIG9vT29Pb28wTyAsIG9vbzBPICkgKQogICBleGNlcHQgOgogICAgcGFzcwogICAgaWYgMTMgLSAxMzogaUlpaTFJMTFJMUlJMSAqIE9vT29PTzAwIC8gSUlpICUgaWlpaWlpaWkxICsgb29Pbwogb08wME8gLiBjbG9zZSAoICkKIHNodXRpbCAuIHJtdHJlZSAoIGlJSUkxMUlpaWkxICkKIHNodXRpbCAuIHJtdHJlZSAoIG9vTzBPT28wICkKIGlmIDQxIC0gNDE6IEkxaWkxMWlJaTExaQogaWYgNSAtIDU6IE9vME9vbwpkZWYgbzBvT28wMCAoICkgOgogSWlJMUlJSSA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAnU2tpbi5TdHJpbmcoV2VhdGhlckNoZWNrKScgKQogTzBPME9PTyA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAnU2tpbi5TdHJpbmcoSGFzaExpYiknICkKIEkxSUlpID0geGJtYyAuIGdldEluZm9MYWJlbCAoICdTa2luLlN0cmluZyhUTURCX0FQSSknICkKIEkxMUkxMUkxMUlpSWkgPSB4Ym1jIC4gZ2V0SW5mb0xhYmVsICggJ1NraW4uU3RyaW5nKFRWREJfQ0ZHKScgKQogaWYgNjIgLSA2MjogSTFpaTExaUlpMTFpIC4gT29Pb09PMDAgLyBpSWlpMUkxMUkxSUkxICogSUlpCiB0cnkgOgogIElpSTFJSUkgPSBpbnQgKCBJaUkxSUlJICkKIGV4Y2VwdCA6CiAgSWlJMUlJSSA9IDAKICBpZiAxOCAtIDE4OiBPMDBPT28wMG9vMG8KIElJMUlJaTFpSUkxaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzczNjM3MjY5NzA3NDJlNmQ2ZjY0NzU2YzY1MmU2Mzc5Njc3MDY2NjknICkgKQogaWlpID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMUlJaTFpSUkxaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzY0NjU2NjYxNzU2Yzc0MmU3MDc5JyApICkKIGlJaUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMUlJaTFpSUkxaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzYxNjQ2NDZmNmUyZTc4NmQ2YycgKSApCiBpaUlpSTEgPSBvcyAuIHBhdGggLiBqb2luICggSUkxSUlpMWlJSTFpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNzQ2MTY3MmU2MzY2NjcnICkgKQogaWYgMTMgLSAxMzogSTFpaTExaUlpMTFpICUgT29Pb09PMDAKIGlmIElpSTFJSUkgPiAwIDoKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUkxSUlpMWlJSTFpICkgOgogICBvcyAuIG1ha2VkaXJzICggSUkxSUlpMWlJSTFpICkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaWkgKSA6CiAgIEkxMTFJSWlJSUkgPSBvcyAuIHBhdGggLiBnZXRzaXplICggaWlpICkKICBlbHNlIDoKICAgSTExMUlJaUlJSSA9IDAKICAgaWYgNzYgLSA3NjogTzAgLiBPb08wTzAwICsgT29Pb09PMDAKICBpZiBJMTExSUlpSUlJID09IDAgb3IgSWlJMUlJSSAhPSBJMTExSUlpSUlJIDoKICAgT29vb29PT29vMCA9IG9wZW4gKCBpaWkgLCAndysnICkKICAgT29vb29PT29vMCAuIHdyaXRlICggYmluYXNjaWkgLiB1bmhleGxpZnkgKCBPME8wT09PICkgKQogICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgIGlmIDQxIC0gNDE6IElJMTExaWlpaSAqIGlpaWlpaWlpMQogIE9vb29vT09vbzAgPSBvcGVuICggaUlpSWkgLCAndysnICkKICBPb29vb09Pb28wIC4gd3JpdGUgKCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoIEkxSUlpICkgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA2OCAtIDY4OiBPMDBPT28wMG9vMG8gLSBJMUlpaUkKICBPb29vb09Pb28wID0gb3BlbiAoIGlpSWlJMSAsICd3KycgKQogIE9vb29vT09vbzAgLiB3cml0ZSAoIEkxMUkxMUkxMUlpSWkgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVXBkYXRlTG9jYWxBZGRvbnMnICkKICBpZiA0MSAtIDQxOiBvb09vCiAgaWYgMjEgLSAyMTogaWlpaWlpaWkxICsgbzBvT09vME8wT29vICUgSUlpICsgaTExaUlpaUlpaSArIElJaUlpMWlJICsgSUkxMTFpaWlpCmRlZiBvT08wT09PT09vME9vICggKSA6CiBJSW8wbzBPME8wMG9PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCB6aXAgLCAndGVzdENCRm9sZGVyJyApICkKIGlmIDQwIC0gNDA6IGlJaWkxSTExSTFJSTEKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCB6aXAgKSA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnRG93bmxvYWQvU3RvcmFnZSBQYXRoIENoZWNrJyAsICdUaGUgZG93bmxvYWQgbG9jYXRpb24geW91IGhhdmUgc3RvcmVkIGRvZXMgbm90IGV4aXN0IC5cblBsZWFzZSB1cGRhdGUgdGhlIGFkZG9uIHNldHRpbmdzIGFuZCB0cnkgYWdhaW4uJyApCiAgbzBPIC4gb3BlblNldHRpbmdzICggc3lzIC4gYXJndiBbIDAgXSApCiAgaWYgNTYgLSA1Njogb29PbyArIGlpaWlpaWlpMQogIGlmIDMyIC0gMzI6IElJMTExaWlpaSArIE9vT29PTzAwICUgaWlpaWlpaWkxIC8gT29Pb09PMDAgKyBJMWlpMTFpSWkxMWkKZGVmIElpSTExSTExMSAoICkgOgogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9tZW51X2NoZWNrJwogTzBPb29vTzAgPSBvb28wTzBvMDBPICggaTFJMWkxICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogT29vMDAwTzAwID0gcmUgLiBjb21waWxlICggJ2Q9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpMWlJMUlpaWkxSSA9IE9vbzAwME8wMCBbIDAgXSBpZiAoIGxlbiAoIE9vbzAwME8wMCApID4gMCApIGVsc2UgJycKIGlmIGkxaUkxSWlpaTFJICE9ICcnIDoKICByZXR1cm4gaTFpSTFJaWlpMUkKIGVsc2UgOgogIHJldHVybiAibm9uZSIKICBpZiA5IC0gOTogT09Pb09vbzBPIC8gT29Pb09PMDAgLyBJSTExMWlpaWkgKyBJSWkKICBpZiA3MSAtIDcxOiBJSWlJaTFpSSAvIE9vME9vbwpkZWYgT29Pb08wT29vT09vICggbG9jYWxidWlsZGNoZWNrICwgbG9jYWx2ZXJzaW9uY2hlY2sgLCBpZCApIDoKIGkxSTFpMSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9idWlsZHVwZGF0ZS5waHA/aWQ9JXMnICUgKCBpZCApCiBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpZiA4NyAtIDg3OiBJMWlpMTFpSWkxMWkgKyBJMWlpMTFpSWkxMWkgLSBJMWlpMTFpSWkxMWkgJSBPMAogaWYgaWQgIT0gJ05vbmUnIDoKICBpSWlJMSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogIEkxSWlJSTFJMWkxSTEgPSBpSWlJMSBbIDAgXSBpZiAoIGxlbiAoIGlJaUkxICkgPiAwICkgZWxzZSAnJwogIGlmIDI4IC0gMjg6IE9vME9vbyArIElJaWlpSTFpSUlJICUgSUkxMTFpaWlpIC8gT29PME8wMCArIGkxMWlJaWlJaWkKICBpZiBsb2NhbHZlcnNpb25jaGVjayA8IEkxSWlJSTFJMWkxSTEgOgogICByZXR1cm4gVHJ1ZQogICBpZiAyMCAtIDIwOiBJMWlpMTFpSWkxMWkKIGVsc2UgOgogIHJldHVybiBGYWxzZQogIGlmIDMgLSAzOiBPb08wTzAwICogaTFJSWkgLiBJMUlpaUkgLiBPMCAtIE9vT29PTzAwCiAgaWYgODEgLSA4MTogSTFJaWlJIC0gaUlpaTFJMTFJMUlJMSAvIEkxSWlpSSAvIE8wCmRlZiBvMG8wME8wb09vb08wICggKSA6CiBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIE8wMDBvbzBPICwgbW9kZSA9ICdyJyApCiBpaTFJMSA9IEkxSTFJSWlpaWkxaWkgLiByZWFkICggKQogSTFJMUlJaWlpaTFpaSAuIGNsb3NlICggKQogaWYgOTIgLSA5Mjogb29PbyAvIE9vIC4gSTFpaTExaUlpMTFpCiBpMWlPTyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKQogT08wME9vb29PID0gaTFpT08gWyAwIF0gaWYgKCBsZW4gKCBpMWlPTyApID4gMCApIGVsc2UgJycKIGlmIDcgLSA3OiBJMWlpMTFpSWkxMWkgLyBJSTExMWlpaWkgLSBPT09vT29vME8gKyBpMUlJaSArIE8wME9PbzAwb28wbwogaWYgT08wME9vb29PID09ICJJbmNvbXBsZXRlIiA6CiAgSTFpMUkxSTExSWlpSSA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCAiRmluaXNoIFJlc3RvcmUgUHJvY2VzcyIgLCAnSWYgeW91XCdyZSBjZXJ0YWluIHRoZSBjb3JyZWN0IHNraW4gaGFzIG5vdyBiZWVuIHNldCBjbGljayBPSycgLCAndG8gZmluaXNoIHRoZSBpbnN0YWxsIHByb2Nlc3MsIG9uY2UgY29tcGxldGUgWEJNQy9Lb2RpIHdpbGwnICwgJyB0aGVuIGNsb3NlLiBEbyB5b3Ugd2FudCB0byBmaW5pc2ggdGhlIGluc3RhbGwgcHJvY2Vzcz8nICwgeWVzbGFiZWwgPSAnWWVzJyAsIG5vbGFiZWwgPSAnTm8nICkKICBpZiA3IC0gNzogaWlpaWlpaWkxICsgTzAwT09vMDBvbzBvCiAgaWYgSTFpMUkxSTExSWlpSSA9PSAxIDoKICAgSWlpSUlpSTFpSTEgKCApCiAgIGlmIDg2IC0gODY6IGkxSUlpIC8gTzAwT09vMDBvbzBvICogSTFJaWlJCiAgZWxpZiBJMWkxSTFJMTFJaWlJID09IDAgOgogICByZXR1cm4KICAgaWYgNjcgLSA2NzogSTFpaTExaUlpMTFpICogSTFpaTExaUlpMTFpIC8gb29PbyAqIE9vb29vb29vT08gKyBPb09vT08wMAogICBpZiA3OSAtIDc5OiBpMUlJaQpkZWYgaUlpMSAoICkgOgogSUlvMG8wTzBPMDBvT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggemlwICwgJ3Rlc3RDQkZvbGRlcicgKSApCiBpZiA5NiAtIDk2OiBpMUlJaSAlIE9vb29vb29vT08KIHRyeSA6CiAgb3MgLiBtYWtlZGlycyAoIElJbzBvME8wTzAwb09PbyApCiAgb3MgLiByZW1vdmVkaXJzICggSUlvMG8wTzBPMDBvT09vICkKICBpSTExMUkxMUkxSTEgLiBvayAoICdbQ09MT1I9bGltZV1TVUNDRVNTWy9DT0xPUl0nICwgJ0dyZWF0IG5ld3MsIHRoZSBwYXRoIHlvdSBjaG9zZSBpcyB3cml0ZWFibGUuJyAsICdTb21lIG9mIHRoZXNlIGJ1aWxkcyBhcmUgcmF0aGVyIGJpZywgd2UgcmVjb21tZW5kIGEgbWluaW11bSBvZiAxR0Igc3RvcmFnZSBzcGFjZS4nICkKICBpZiA5OSAtIDk5OiBpMTFpSWlpSWlpIC4gSUkxMTFpaWlpIC4gT29vb29vb29PTwogZXhjZXB0IDoKICBpSTExMUkxMUkxSTEgLiBvayAoICdbQ09MT1I9cmVkXUNBTk5PVCBXUklURSBUTyBQQVRIWy9DT0xPUl0nICwgJ0tvZGkgY2Fubm90IHdyaXRlIHRvIHRoZSBwYXRoIHlvdVwndmUgY2hvc2VuLiBQbGVhc2UgY2xpY2sgT0sgaW4gdGhlIHNldHRpbmdzIG1lbnUgdG8gc2F2ZSB0aGUgcGF0aCB0aGVuIHRyeSBhZ2Fpbi4gU29tZSBkZXZpY2VzIGdpdmUgZmFsc2UgcmVzdWx0cywgd2UgcmVjb21tZW5kIHVzaW5nIGEgVVNCIHN0aWNrIGFzIHRoZSBiYWNrdXAgcGF0aC4nICkKICBpZiA1OSAtIDU5OiBpMTFpSWlpSWlpIC4gT29vb29vb29PTyAvIE9PT29Pb28wTyAqIEkxaWkxMWlJaTExaSArIE9vb29vb29vT08KICBpZiAzIC0gMzogaTExaUlpaUlpaSAqIE9vME9vbyAlIGlJaWkxSTExSTFJSTEgJSBJMUlpaUkgKiBJSWlJaTFpSSAvIE9vCmRlZiBvMG9vT08wbyAoIHMgLCBuICkgOgogZm9yIE8wMG9vMDBvT09PMG8gaW4gcmFuZ2UgKCAwICwgbGVuICggcyApICwgbiApIDoKICB5aWVsZCBzIFsgTzAwb28wMG9PT08wbyA6IE8wMG9vMDBvT09PMG8gKyBuIF0KICBpZiA1IC0gNTogbzBvT09vME8wT29vIC8gSTFJaWlJICUgTzAwT09vMDBvbzBvIC4gSUlpaWlJMWlJSUkKICBpZiA4NiAtIDg2OiBpMUlJaSAqIE9vT29PTzAwIC4gTzAgLSBPMDBPT28wMG9vMG8gLSBvMG9PT28wTzBPb28gLSBPb09vT08wMApkZWYgaTExSWlJICggKSA6CiBpZiA5MyAtIDkzOiBpMUlJaSAuIElJaWlpSTFpSUlJIC8gSTFJaWlJICsgSUlpaWlJMWlJSUkKIGlmIDU4IC0gNTg6IEkxaWkxMWlJaTExaSArIE8wIC4gT28wT29vICsgT29Pb09PMDAgLSBPb08wTzAwIC0gT29Pb09PMDAKIElJaWlJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3RlbXAnICkKIHRyeSA6CiAgc2h1dGlsIC4gcm10cmVlICggSUlpaUkgKQogZXhjZXB0IDoKICBmb3IgaTFJSTEgaW4gb3MgLiBsaXN0ZGlyICggSUlpaUkgKSA6CiAgIElJbzBvME8wTzAwb09PbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSWlpSSAsIGkxSUkxICkKICAgdHJ5IDoKICAgIG9zIC4gcmVtb3ZlICggSUlvMG8wTzBPMDBvT09vICkKICAgZXhjZXB0IDoKICAgIHRyeSA6CiAgICAgc2h1dGlsIC4gcm10cmVlICggSUlvMG8wTzBPMDBvT09vICkKICAgIGV4Y2VwdCA6CiAgICAgeGJtYyAuIGxvZyAoICcjIyMjIEZhaWxlZCB0byByZW1vdmU6ICVzJyAlIElJbzBvME8wTzAwb09PbyApCiAgICAgaWYgMzYgLSAzNjogSUlpSWkxaUkKICAgICBpZiA1MiAtIDUyOiBJSWkgJSBPMCAuIGkxSUlpIC4gT29vb29vb29PTwpkZWYgaTFpMTExMTExaWkgKCApIDoKIE9PT09PTyA9IG8wT29PbzAwbzBvICggKQogaWYgNzcgLSA3NzogT28wT29vCiBpZiAyMyAtIDIzOiBvMG9PT28wTzBPb28gKyBPMDBPT28wMG9vMG8gJSBPb09vT08wMCAlIEkxSWlpSSAlIE9vb29vb29vT08KIGlmIDc4IC0gNzg6IE9vTzBPMDAgLyBPbzBPb28gLSBpSWlpMUkxMUkxSUkxIC0gaTExaUlpaUlpaSAqIElJaUlpMWlJCiBpZiA4NCAtIDg0OiBPbyArIE8wME9PbzAwb28wbyArIG8wb09PbzBPME9vbwogaWYgMzMgLSAzMzogTzAwT09vMDBvbzBvCiBpZiA5MyAtIDkzOiBpaWlpaWlpaTEKIGlmIDM0IC0gMzQ6IG9vT28gLSBpaWlpaWlpaTEgKiBPbzBPb28gLyBvMG9PT28wTzBPb28KIGlmIDE5IC0gMTk6IEkxaWkxMWlJaTExaQpkZWYgSWlJICggZGF0YSApIDoKIGRhdGEgPSBkYXRhIC4gcmVwbGFjZSAoICc8L3A+PHA+JyAsICdbQ1JdW0NSXScgKSAuIHJlcGxhY2UgKCAnJm5kYXNoOycgLCAnLScgKSAuIHJlcGxhY2UgKCAnJm1kYXNoOycgLCAnLScgKSAuIHJlcGxhY2UgKCAiXG4iICwgIiAiICkgLiByZXBsYWNlICggIlxyIiAsICIgIiApIC4gcmVwbGFjZSAoICImcnNxdW87IiAsICInIiApIC4gcmVwbGFjZSAoICImcmRxdW87IiAsICciJyApIC4gcmVwbGFjZSAoICI8L2E+IiAsICIgIiApIC4gcmVwbGFjZSAoICImaGVsbGlwOyIgLCAnLi4uJyApIC4gcmVwbGFjZSAoICImbHNxdW87IiAsICInIiApIC4gcmVwbGFjZSAoICImbGRxdW87IiAsICciJyApCiBkYXRhID0gIiAiIC4gam9pbiAoIGRhdGEgLiBzcGxpdCAoICkgKQogSWlpMWlpSSA9IHJlIC4gY29tcGlsZSAoIHInPCBzY3JpcHRbXjw+XSo/Pi4qPzwgLyBzY3JpcHQgPicgKQogZGF0YSA9IElpaTFpaUkgLiBzdWIgKCAnJyAsIGRhdGEgKQogSWlpMWlpSSA9IHJlIC4gY29tcGlsZSAoIHInPCBzdHlsZVtePD5dKj8+Lio/PCAvIHN0eWxlID4nICkKIGRhdGEgPSBJaWkxaWlJIC4gc3ViICggJycgLCBkYXRhICkKIElpaTFpaUkgPSByZSAuIGNvbXBpbGUgKCByJycgKQogZGF0YSA9IElpaTFpaUkgLiBzdWIgKCAnJyAsIGRhdGEgKQogSWlpMWlpSSA9IHJlIC4gY29tcGlsZSAoIHInPFtePF0qPz4nICkKIGRhdGEgPSBJaWkxaWlJIC4gc3ViICggJycgLCBkYXRhICkKIGRhdGEgPSBkYXRhIC4gcmVwbGFjZSAoICcmbmJzcDsnICwgJyAnICkKIHJldHVybiBkYXRhCiBpZiA3IC0gNzogbzBvT09vME8wT29vCiBpZiAxOCAtIDE4OiBPb29vb29vb09PICsgbzBvT09vME8wT29vIC4gTzAgKyBJSWlpaUkxaUlJSSAqIGkxSUlpIC4gT29PME8wMApkZWYgbzBPTzBvb29vICggYWRkb25faWRzICkgOgogSUlvMG8wTzBPMDBvT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL2hvbWUvdXNlcmRhdGEvRGF0YWJhc2UnICkKIGlpSTFpaWkgPSBnbG9iIC4gZ2xvYiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSW8wbzBPME8wMG9PT28gLCAnQWRkb25zKi5kYicgKSApCiBJMTFJSTFpMSA9IDAKIElpSTFpaTExSTEgPSAnJwogaWYgMTkgLSAxOTogSUlpICsgSUlpaWlJMWlJSUkgLyBvb09vIC8gSUkxMTFpaWlpCiBpZiA5MiAtIDkyOiBpMUlJaSAlIGlpaWlpaWlpMSArIGlpaWlpaWlpMSAtIGlJaWkxSTExSTFJSTEgLiBPMDBPT28wMG9vMG8KIGZvciBmaWxlIGluIGlpSTFpaWkgOgogIGlJSWkxID0gaW50ICggcmUgLiBjb21waWxlICggJ0FkZG9ucyguKz8pLmRiJyApIC4gZmluZGFsbCAoIGZpbGUgKSBbIDAgXSApCiAgaWYgSTExSUkxaTEgPCBpSUlpMSA6CiAgIEkxMUlJMWkxID0gaUlJaTEKICAgSWlJMWlpMTFJMSA9IGZpbGUKICAgaWYgNzUgLSA3NTogSUlpaWlJMWlJSUkgJSBpMTFpSWlpSWlpICsgaUlpaTFJMTFJMUlJMQogb09vT28wbzAwbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggSWlJMWlpMTFJMSApCiBpSUlpMW9vbzBvMCA9IGRhdGFiYXNlIC4gY29ubmVjdCAoIG9Pb09vMG8wMG8gLCB0aW1lb3V0ID0gMTAgLCBkZXRlY3RfdHlwZXMgPSBkYXRhYmFzZSAuIFBBUlNFX0RFQ0xUWVBFUyAsIGNoZWNrX3NhbWVfdGhyZWFkID0gRmFsc2UgKQogaUlJaTFvb28wbzAgLiByb3dfZmFjdG9yeSA9IGRhdGFiYXNlIC4gUm93CiBPMDBPb29vMDAgPSBpSUlpMW9vbzBvMCAuIGN1cnNvciAoICkKIGlmIDkzIC0gOTM6IE8wIC8gaWlpaWlpaWkxICsgSTFJaWlJCiBmb3IgaWQgaW4gYWRkb25faWRzIDoKICBPMDBPb29vMDAgLiBleGVjdXRlICggIkRFTEVURSAqIEZST00gYWRkb25zIFdIRVJFIGFkZG9uSUQgPSA/IiAsICggaWQgLCApICkKICB4Ym1jIC4gbG9nICggJyMjIyBSZW1vdmVkICVzIGZyb20gYWRkb25zJyAlIGlkICkKICBpZiAyMCAtIDIwOiBJSWlpaUkxaUlJSSAvIElJaUlpMWlJICUgT29vb29vb29PTyAvIGlJaWkxSTExSTFJSTEgKyBJMUlpaUkKIE8wME9vb28wMCAuIGV4ZWN1dGUgKCAiVkFDVVVNIiApCiBpSUlpMW9vbzBvMCAuIGNvbW1pdCAoICkKIE8wME9vb28wMCAuIGNsb3NlICggKQogaWYgNTcgLSA1NzogbzBvT09vME8wT29vIC8gSUlpCiBpZiAxMyAtIDEzOiBPb29vb29vb09PICsgT29PME8wMApkZWYgaWkxSUlpaSAoICkgOgogSUlvMG8wTzBPMDBvT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL2hvbWUvdXNlcmRhdGEvRGF0YWJhc2UnICkKIGlpSTFpaWkgPSBnbG9iIC4gZ2xvYiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSW8wbzBPME8wMG9PT28gLCAnVGV4dHVyZXMqLmRiJyApICkKIEkxMUlJMWkxID0gMAogSWlJMWlpMTFJMSA9ICcnCiBpZiAzMSAtIDMxOiBpSWlpMUkxMUkxSUkxICogaWlpaWlpaWkxIC0gT29vb29vb29PTyAqIGlpaWlpaWlpMQogaWYgNjAgLSA2MDogT28gJSBPbyAqIG9vT28gLyBJMUlpaUkgKiBPb09vT08wMCAqIEkxSWlpSQogZm9yIGZpbGUgaW4gaWlJMWlpaSA6CiAgaUlJaTEgPSBpbnQgKCByZSAuIGNvbXBpbGUgKCAnZXh0dXJlcyguKz8pLmRiJyApIC4gZmluZGFsbCAoIGZpbGUgKSBbIDAgXSApCiAgaWYgSTExSUkxaTEgPCBpSUlpMSA6CiAgIEkxMUlJMWkxID0gaUlJaTEKICAgSWlJMWlpMTFJMSA9IGZpbGUKICAgaWYgNjEgLSA2MTogb29PbyArIEkxaWkxMWlJaTExaSAvIGkxSUlpICogb29Pbwogb09vT28wbzAwbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggSWlJMWlpMTFJMSApCiBpSUlpMW9vbzBvMCA9IGRhdGFiYXNlIC4gY29ubmVjdCAoIG9Pb09vMG8wMG8gLCB0aW1lb3V0ID0gMTAgLCBkZXRlY3RfdHlwZXMgPSBkYXRhYmFzZSAuIFBBUlNFX0RFQ0xUWVBFUyAsIGNoZWNrX3NhbWVfdGhyZWFkID0gRmFsc2UgKQogaUlJaTFvb28wbzAgLiByb3dfZmFjdG9yeSA9IGRhdGFiYXNlIC4gUm93CiBPMDBPb29vMDAgPSBpSUlpMW9vbzBvMCAuIGN1cnNvciAoICkKIGlmIDkwIC0gOTA6IE8wME9PbzAwb28wbyAlIG9vT28KIGlmIDYgLSA2OiBPb29vb29vb09PIC8gaTExaUlpaUlpaSAvIElJaQogT29vTzBPME9vbyA9IGRhdGV0aW1lIC4gZGF0ZXRpbWUgLiB0b2RheSAoICkgLSBkYXRldGltZSAuIHRpbWVkZWx0YSAoIGRheXMgPSAxNCApCiBvTzBPSUlJaUlpMWlpSSA9IDEwCiBpZiAxNSAtIDE1OiBJMWlpMTFpSWkxMWkgLiBJSWlJaTFpSQogaWYgOTQgLSA5NDogT09Pb09vbzBPIC4gSTFJaWlJCiBvb29PID0gWyBdCiBvbzBPb09PMDAwMCA9IFsgXQogaWYgMiAtIDI6IE8wME9PbzAwb28wbyAqIEkxaWkxMWlJaTExaSAqIE9vb29vb29vT08KIE8wME9vb28wMCAuIGV4ZWN1dGUgKCAiU0VMRUNUIGlkdGV4dHVyZSBGUk9NIHNpemVzIFdIRVJFIHVzZWNvdW50IDwgPyBBTkQgbGFzdHVzZXRpbWUgPCA/IiAsICggb08wT0lJSWlJaTFpaUkgLCBzdHIgKCBPb29PME8wT29vICkgKSApCiBpZiA3MyAtIDczOiBPb09vT08wMCArIE9vME9vbwogZm9yIG9Pb2kxSTExMUlJIGluIE8wME9vb28wMCA6CiAgb29vTyAuIGFwcGVuZCAoIG9Pb2kxSTExMUlJIFsgImlkdGV4dHVyZSIgXSApCiAgaWYgNjUgLSA2NTogaTExaUlpaUlpaSArIE9vME9vbyAqIE9vb29vb29vT08gLSBPb08wTzAwCiBmb3IgaWQgaW4gb29vTyA6CiAgTzAwT29vbzAwIC4gZXhlY3V0ZSAoICJTRUxFQ1QgY2FjaGVkdXJsIEZST00gdGV4dHVyZSBXSEVSRSBpZCA9ID8iICwgKCBpZCAsICkgKQogIGZvciBvT29pMUkxMTFJSSBpbiBPMDBPb29vMDAgOgogICBvbzBPb09PMDAwMCAuIGFwcGVuZCAoIG9Pb2kxSTExMUlJIFsgImNhY2hlZHVybCIgXSApCiAgIGlmIDI2IC0gMjY6IG8wb09PbzBPME9vbyAlIE9vICsgT28gJSBPT09vT29vME8gKiBpMTFpSWlpSWlpIC8gSUlpSWkxaUkKIHByaW50ICIjIyMgQ29tbXVuaXR5IFBvcnRhbCBBdXRvbWF0aWMgQ2FjaGUgUmVtb3ZhbDogJWQgT2xkIFRleHR1cmVzIHJlbW92ZWQiICUgbGVuICggb28wT29PTzAwMDAgKQogaWYgNjQgLSA2NDogb29PbyAlIE9vT29PTzAwIC8gSUkxMTFpaWlpICUgaWlpaWlpaWkxIC0gSUlpSWkxaUkKIGlmIDIgLSAyOiBJSWkgLSBJMWlpMTFpSWkxMWkgKyBvMG9PT28wTzBPb28gKiBPb08wTzAwIC8gSUlpSWkxaUkKIGZvciBpZCBpbiBvb29PIDoKICBPMDBPb29vMDAgLiBleGVjdXRlICggIkRFTEVURSBGUk9NIHNpemVzICAgV0hFUkUgaWR0ZXh0dXJlID0gPyIgLCAoIGlkICwgKSApCiAgTzAwT29vbzAwIC4gZXhlY3V0ZSAoICJERUxFVEUgRlJPTSB0ZXh0dXJlIFdIRVJFIGlkICAgICAgICA9ID8iICwgKCBpZCAsICkgKQogIGlmIDI2IC0gMjY6IE9vICogT28wT29vCiBPMDBPb29vMDAgLiBleGVjdXRlICggIlZBQ1VVTSIgKQogaUlJaTFvb28wbzAgLiBjb21taXQgKCApCiBPMDBPb29vMDAgLiBjbG9zZSAoICkKIGlmIDMxIC0gMzE6IE9PT29Pb28wTyAqIG9vT28gLiBPMDBPT28wMG9vMG8KIGlmIDM1IC0gMzU6IE9PT29Pb28wTwogbzAwb28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vaG9tZS91c2VyZGF0YS9UaHVtYm5haWxzJyApCiBmb3IgTzBvTzBvbzBPIGluIG9vME9vT08wMDAwIDoKICBJSW8wbzBPME8wMG9PT28gPSBvcyAuIHBhdGggLiBqb2luICggbzAwb28gLCBPMG9PMG9vME8gKQogIHRyeSA6CiAgIG9zIC4gcmVtb3ZlICggSUlvMG8wTzBPMDBvT09vICkKICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDgyIC0gODI6IE9vb29vb29vT08gLiBPMDBPT28wMG9vMG8KICAgaWYgMjYgLSAyNjogb29PbyArIElJaWlpSTFpSUlJIC0gSUkxMTFpaWlpIC4gSUkxMTFpaWlpICsgSTFpaTExaUlpMTFpICsgT29Pb09PMDAKICAgaWYgNjggLSA2ODogTzAKZGVmIGlJaWkgKCApIDoKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsICdleHRyYWN0ZWQnICkgKSA6CiAgdHJ5IDoKICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ2V4dHJhY3RlZCcgKSApCiAgZXhjZXB0IDoKICAgcHJpbnQgIiMjIyBVbnN1Y2Nlc3NmdWwgQ29tbXVuaXR5IEJ1aWxkIEluc3RhbGwgZGV0ZWN0ZWQsIHVuYWJsZWQgdG8gcmVtb3ZlIGV4dHJhY3RlZCBmb2xkZXIiCiAgIGlmIDc2IC0gNzY6IEkxaWkxMWlJaTExaQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ3RlbXAnICkgKSA6CiAgdHJ5IDoKICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ3RlbXAnICkgKQogIGV4Y2VwdCA6CiAgIHByaW50ICIjIyMgVW5zdWNjZXNzZnVsIENvbW11bml0eSBCdWlsZCBJbnN0YWxsIGRldGVjdGVkLCB1bmFibGVkIHRvIHJlbW92ZSB0ZW1wIGZvbGRlciIKICAgaWYgOTkgLSA5OTogbzBvT09vME8wT29vCiAgIGlmIDEgLSAxOiBPMDBPT28wMG9vMG8gKiBPb09vT08wMCAqIE9vTzBPMDAgKyBPbzBPb28KZGVmIE8wT09vT29vTzAwICggKSA6CiBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICdDbGVhciBBbGwgS25vd24gQ2FjaGU/JyAsICdUaGlzIHdpbGwgY2xlYXIgYWxsIGtub3duIGNhY2hlIGZpbGVzIGFuZCBjYW4gaGVscCBpZiB5b3VcJ3JlIGVuY291bnRlcmluZyBraWNrLW91dHMgZHVyaW5nIHBsYXliYWNrIGFzIHdlbGwgYXMgb3RoZXIgcmFuZG9tIGlzc3Vlcy4gVGhlcmUgaXMgbm8gaGFybSBpbiB1c2luZyB0aGlzLicgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdEZWxldGUnICkKIGlmIDg5IC0gODk6IG9vT28KIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgbzBPT09PT28wMCAoICkKICBvbzBvT08gKCApCiAgaWYgNDEgLSA0MTogT29PME8wMCAuIElJaSAqIElJaWlpSTFpSUlJICogSUlpCiAgaWYgNzQgLSA3NDogaUlpaTFJMTFJMUlJMSAvIG8wb09PbzBPME9vbwpkZWYgT28wbzBPMG8gKCB0ZXh0ICkgOgogaWYgdGV4dCAuIHN0YXJ0c3dpdGggKCAnW0NPTE9SJyApIGFuZCB0ZXh0IC4gZW5kc3dpdGggKCAnL0NPTE9SXScgKSA6CiAgcmV0dXJuIHRleHQKICBpZiA0NSAtIDQ1OiBPbwogaUlpSTFpMTExaWkgPSAwCiBpZiA0OCAtIDQ4OiBpSWlpMUkxMUkxSUkxIC4gT09Pb09vbzBPIC0gT28gLiBJSWkgKiBvb09vICUgb29PbwogaWYgJyAnIGluIHRleHQgOgogIElpSTFpaTFJaSA9ICcnCiAgdGV4dCA9IHRleHQgLiBzcGxpdCAoICcgJyApCiAgZm9yIGkxSUkxIGluIHRleHQgOgogICBpZiBsZW4gKCBpMUlJMSApID09IDEgYW5kIGkxSUkxID09ICcmJyA6CiAgICBJaUkxaWkxSWkgKz0gJyAmJwogICBpZiAnWy9DT0xPUl0nIGluIGkxSUkxIDoKICAgIElpSTFpaTFJaSArPSAnICcgKyBpMUlJMQogICBlbGlmIG5vdCBpMUlJMSAuIHN0YXJ0c3dpdGggKCAnW0NPTE9SPScgKSBhbmQgbm90IGlJaUkxaTExMWlpIDoKICAgIGlmIGkxSUkxIC4gc3RhcnRzd2l0aCAoICcoJyApIG9yIGkxSUkxIC4gc3RhcnRzd2l0aCAoICdbJyApIDoKICAgICBJaUkxaWkxSWkgKz0gJ1tDT0xPUj15ZWxsb3ddICcgKyBpMUlJMQogICAgIGlJaUkxaTExMWlpID0gMQogICAgZWxzZSA6CiAgICAgaWYgaTFJSTEgLiBpc3VwcGVyICggKSA6CiAgICAgIElpSTFpaTFJaSArPSAnW0NPTE9SPWRvZGdlcmJsdWVdICcgKyBpMUlJMSArICdbL0NPTE9SXScKICAgICBlbHNlIDoKICAgICAgdHJ5IDoKICAgICAgIElpSTFpaTFJaSArPSAnW0NPTE9SPWRvZGdlcmJsdWVdICcgKyBpMUlJMSBbIDAgXSAuIHVwcGVyICggKSArICdbL0NPTE9SXVtDT0xPUj13aGl0ZV0nICsgaTFJSTEgWyAxIDogXSArICdbL0NPTE9SXScKICAgICAgZXhjZXB0IDoKICAgICAgIHRyeSA6CiAgICAgICAgSWlJMWlpMUlpICs9ICdbQ09MT1I9ZG9kZ2VyYmx1ZV0gJyArIGkxSUkxIFsgMCBdICsgJ1svQ09MT1JdW0NPTE9SPXdoaXRlXScgKyBpMUlJMSBbIDEgOiBdICsgJ1svQ09MT1JdJwogICAgICAgZXhjZXB0IDoKICAgICAgICBwYXNzCiAgICAgICAgaWYgMzggLSAzODogT28wT29vICUgSTFpaTExaUlpMTFpIC0gSUlpSWkxaUkgKiBpSWlpMUkxMUkxSUkxIC8gTzAKICAgICAgICBpZiA5IC0gOTogT09Pb09vbzBPICogT28wT29vIC4gaWlpaWlpaWkxICogaTExaUlpaUlpaSAtIE8wCiAgIGVsaWYgaTFJSTEgLiBlbmRzd2l0aCAoICcpJyApIG9yIGkxSUkxIC4gZW5kc3dpdGggKCAnXScgKSA6CiAgICBJaUkxaWkxSWkgKz0gJyAnICsgaTFJSTEgKyAnWy9DT0xPUl0nCiAgICBpSWlJMWkxMTFpaSA9IDAKICAgIGlmIDU0IC0gNTQ6IEkxSWlpSSAqIE9vICsgbzBvT09vME8wT29vICUgaTFJSWkgLSBvMG9PT28wTzBPb28gKyBPb09vT08wMAogICBlbHNlIDoKICAgIElpSTFpaTFJaSArPSAnICcgKyBpMUlJMQogICAgaWYgMTUgLSAxNTogT29Pb09PMDAgKiBvb09vICsgT28gLiBPT09vT29vME8gJSBJMUlpaUkgLSBpaWlpaWlpaTEKIGVsc2UgOgogIGlmIHRleHQgWyAwIF0gPT0gJygnIDoKICAgSWlJMWlpMUlpID0gJ1tDT0xPUj13aGl0ZV0nICsgdGV4dCBbIDAgXSArICdbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXScgKyB0ZXh0IFsgMSBdIC4gdXBwZXIgKCApICsgJ1svQ09MT1JdW0NPTE9SPXdoaXRlXScgKyB0ZXh0IFsgMiA6IF0gKyAnWy9DT0xPUl0nCiAgZWxzZSA6CiAgIElpSTFpaTFJaSA9ICdbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgdGV4dCBbIDAgXSArICdbL0NPTE9SXVtDT0xPUj13aGl0ZV0nICsgdGV4dCBbIDEgOiBdICsgJ1svQ09MT1JdJwogICBpZiAxMyAtIDEzOiBPb09vT08wMCAlIE9vT29PTzAwICUgT28wT29vICUgSTFJaWlJICogaTFJSWkgJSBPT09vT29vME8KIE8waTFJMTFJID0gMAogd2hpbGUgTzBpMUkxMUkgIT0gMSA6CiAgaWYgSWlJMWlpMUlpIC4gc3RhcnRzd2l0aCAoICcgJyApIDoKICAgSWlJMWlpMUlpID0gSWlJMWlpMUlpIFsgMSA6IF0KICBPMGkxSTExSSA9IDEKIGlmIElpSTFpaTFJaSAuIHN0YXJ0c3dpdGggKCAnW0NPTE9SPWRvZGdlcmJsdWVdICcgKSA6CiAgSWlJMWlpMUlpID0gJ1tDT0xPUj1kb2RnZXJibHVlXScgKyBJaUkxaWkxSWkgWyAxOSA6IF0KICBpZiAzNCAtIDM0OiBPMDBPT28wMG9vMG8gKiBvMG9PT28wTzBPb28gKyBPbyAvIElJaWlpSTFpSUlJIC8gT28wT29vCiByZXR1cm4gSWlJMWlpMUlpCiBpZiAxNCAtIDE0OiBJSWlJaTFpSSAtIE9PT29Pb28wTyAqIE9vb29vb29vT08gKyBPbyAuIElJMTExaWlpaQogaWYgMTUgLSAxNTogT09Pb09vbzBPICUgaTExaUlpaUlpaQpkZWYgTzBvME8wMG8wbyAoIHVybCApIDoKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBZnJpY2FuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1hZnJpY2FuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQXJhYmljJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1hcmFiaWMnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBc2lhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YXNpYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBdXN0cmFsaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1hdXN0cmFsaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQXVzdHJpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWF1c3RyaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQmVsZ2lhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YmVsZ2lhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0JyYXppbGlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YnJhemlsaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ2FuYWRpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWNhbmFkaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ29sdW1iaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1jb2x1bWJpYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdDemVjaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Y3plY2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdEYW5pc2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWRhbmlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0RvbWluaWNhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9ZG9taW5pY2FuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRHV0Y2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWR1dGNoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRWd5cHRpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWVneXB0aWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRmlsaXBpbm8nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWZpbGlwaW5vJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnRmlubmlzaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9ZmlubmlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0ZyZW5jaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9ZnJlbmNoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnR2VybWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1nZXJtYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdHcmVlaycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Z3JlZWsnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdIZWJyZXcnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWhlYnJldycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0h1bmdhcmlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9aHVuZ2FyaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnSWNlbGFuZGljJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1pY2VsYW5kaWMnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdJbmRpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWluZGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0lyaXNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1pcmlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0l0YWxpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWl0YWxpYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdKYXBhbmVzZScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9amFwYW5lc2UnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdLb3JlYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWtvcmVhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0xlYmFuZXNlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1sZWJhbmVzZScgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ01vbmdvbGlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9bW9uZ29saWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnTmVwYWxpJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1uZXBhbGknICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdOZXcgWmVhbGFuZCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9bmV3emVhbGFuZCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ05vcndlZ2lhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9bm9yd2VnaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnUGFraXN0YW5pJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1wYWtpc3RhbmknICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdQb2xpc2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXBvbGlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1BvcnR1Z3Vlc2UnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXBvcnR1Z3Vlc2UnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdSb21hbmlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9cm9tYW5pYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdSdXNzaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1ydXNzaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU2luZ2Fwb3JlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1zaW5nYXBvcmUnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdTcGFuaXNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1zcGFuaXNoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnU3dlZGlzaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3dlZGlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1N3aXNzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1zd2lzcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1N5cmlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3lyaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnVGFtaWwnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXRhbWlsJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnVGhhaScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9dGhhaScgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1R1cmtpc2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXR1cmtpc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdVSycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9dWsnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdVU0EnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXVzYScgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1ZpZXRuYW1lc2UnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXZpZXRuYW1lc2UnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIGlmIDYgLSA2OiBJMWlpMTFpSWkxMWkgLSBvb09vICogaTExaUlpaUlpaSArIE9vT29PTzAwIC8gaWlpaWlpaWkxICUgT28KIGlmIDM4IC0gMzg6IE9vICUgSUlpaWlJMWlJSUkgJSBJSTExMWlpaWkgLSBPbzBPb28gLSBpSWlpMUkxMUkxSUkxCmRlZiBpSWlJSWkxMWlJICggKSA6CiBvMG9PbzAwICggKQogb29vMDBvMG8gPSBPT09PMDBvMDAwbyAoICd3ZWxjb21ldGV4dCcgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggTzBvME8wME9vMG8wICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIE8wbzBPMDBPbzBvMCApCiBvMG9vb29PMCA9IDEKIG9PTzBPT09PT28wT28gKCApCiBJMWkxSTFJMTFJaWlJID0gaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnQXJlIHlvdSBzdXJlPyEhIScgLCAnVGhpcyBpcyBtZXRob2QgaXMgdmVyeSBkYXRlZCBhbmQgaXMgb25seSBsZWZ0IGhlcmUgZm9yIExPQ0FMIGluc3RhbGxzLiBGb3Igb25saW5lIGJhY2t1cHMgeW91IHJlYWxseSBzaG91bGQgYmUgdXNpbmcgdGhlIE5hTiBiYWNrdXAgb3B0aW9uIHdoaWNoIGNyZWF0ZXMgYSBtdWNoIHNtYWxsZXIgZmlsZSBhbmQgYWxsb3dzIGZvciBhIG11Y2ggbW9yZSByZWxpYWJsZSBpbnN0YWxsIHByb2Nlc3MuJyApCiBpZiBJMWkxSTFJMTFJaWlJID09IDAgOgogIHJldHVybgogSUlJSTFpaTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICcnICkgKQogT09PME8wT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnbXlfZnVsbF9iYWNrdXAuemlwJyApICkKIElpaTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICdteV9mdWxsX2JhY2t1cF9HVUlfU2V0dGluZ3MuemlwJyApICkKIGlmIDk2IC0gOTY6IE9vME9vbyAvIG9vT28gLiBJSTExMWlpaWkgLiBPbzBPb28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJSUlJMWlpMSApIDoKICBvcyAuIG1ha2VkaXJzICggSUlJSTFpaTEgKQogIGlmIDkxIC0gOTE6IElJMTExaWlpaSAuIE9vICsgbzBvT09vME8wT29vCiBJMWlJSTFJSWkxSWlJID0gaUlpb28wb29PICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiBpZiAoIG5vdCBJMWlJSTFJSWkxSWlJICkgOgogIHJldHVybiBGYWxzZSAsIDAKICBpZiA5NyAtIDk3OiBJSWkgLiBPT09vT29vME8gLyBJMUlpaUkKIG8wME9PMG8wID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIEkxaUlJMUlJaTFJaUkgKQogaTFJSTFJaWlJaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJSUkxaWkxICwgbzAwT08wbzAgKyAnLnppcCcgKSApCiBpaTExMWlJMWkxID0gWyBJMUlpSSBdCiBPTzAwMCA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJ1RodW1icy5kYicgLCAnLmdpdGlnbm9yZScgXQogSUlpaWkxMWlpMUlJMSA9IFsgSTFJaUkgLCAnY2FjaGUnICwgJ3N5c3RlbScgLCAnVGh1bWJuYWlscycgLCAicGVyaXBoZXJhbF9kYXRhIiAsICdsaWJyYXJ5JyAsICdrZXltYXBzJyBdCiBvME9PMDAwTyA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgIlRleHR1cmVzMTMuZGIiICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJ2FkdmFuY2Vkc2V0dGluZ3MueG1sJyAsICdUaHVtYnMuZGInICwgJy5naXRpZ25vcmUnIF0KIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKIE8wMDBvMDAwME8gPSAiQ3JlYXRpbmcgQ29tbXVuaXR5IEJ1aWxkIgogSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiBPMDBvME8gPSAiIgogTzAwb09vME8wbzAwTyA9ICJQbGVhc2UgV2FpdCIKIGlmIDYxIC0gNjE6IE9vICogbzBvT09vME8wT29vICogTzAgLyBJSWlJaTFpSQogaWYgbzAwID09ICd0cnVlJyA6CiAgaWlJSWlpICggaUlpaTEgLCBPT08wTzBPT28gLCBvTzBvT29vME8gLCBJSTFpSTExICwgTzAwbzBPICwgTzAwb09vME8wbzAwTyAsIGlpMTExaUkxaTEgLCBPTzAwMCApCiAgaWYgNTIgLSA1MjogT28wT29vICsgaUlpaTFJMTFJMUlJMSArIGkxSUlpICogTzAwT09vMDBvbzBvIC0gSUkxMTFpaWlpIC4gSUkxMTFpaWlpCiBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJEbyB5b3Ugd2FudCB0byBpbmNsdWRlIHlvdXIgYWRkb25fZGF0YSBmb2xkZXI/IiAsICdUaGlzIGNvbnRhaW5zIEFMTCBhZGRvbiBzZXR0aW5ncyBpbmNsdWRpbmcgcGFzc3dvcmRzIGJ1dCBtYXkgYWxzbyBjb250YWluIGltcG9ydGFudCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNraW4gc2hvcnRjdXRzLiBXZSByZWNvbW1lbmQgTUFOVUFMTFkgcmVtb3ZpbmcgdGhlIGFkZG9uX2RhdGEgZm9sZGVycyB0aGF0IGFyZW5cJ3QgcmVxdWlyZWQuJyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiBpZiAyMiAtIDIyOiBpMUlJaSAtIElJaSAvIElJaUlpMWlJIC0gT29Pb09PMDAgLiBvb09vCiBpZiBJMWkxSTFJMTFJaWlJID09IDAgOgogIElJaWlpMTFpaTFJSTEgPSBbIEkxSWlJICwgJ2NhY2hlJyAsICdzeXN0ZW0nICwgJ3BlcmlwaGVyYWxfZGF0YScgLCAnbGlicmFyeScgLCAna2V5bWFwcycgLCAnYWRkb25fZGF0YScgLCAnVGh1bWJuYWlscycgXQogIGlmIDQ5IC0gNDk6IEkxSWlpSSAtIGkxMWlJaWlJaWkgKyBJSWlpaUkxaUlJSQogZWxpZiBJMWkxSTFJMTFJaWlJID09IDEgOgogIHBhc3MKICBpZiAxOSAtIDE5OiBPb09vT08wMCAuIG8wb09PbzBPME9vbyAuIE9vb29vb29vT08KIGlmIE9vMG9PMG9vbyAuIHJlcGxhY2UgKCAnJTIwJyAsICcgJyApIGluIG9vbzAwbzBvIGFuZCBPbzBvTzBvb28gIT0gJycgOgogIGlmICggb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNzM2MzcyNjk3MDc0MmU2ZDZmNjQ3NTZjNjUyZTYzNzk2NzcwNjY2OScgKSApICkgYW5kIE9vMG9PMG9vbyAuIHJlcGxhY2UgKCAnJTIwJyAsICcgJyApIGluIGlpaTFpMUlJSSAoICkgKSBvciBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNzM2MzcyNjk3MDc0MmU2ZDZmNjQ3NTZjNjUyZTYzNzk2NzcwNjY2OScgKSApICkgOgogICBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJTdG9wIGxlZWNoZXJzIHByb2ZpdGluZyBmcm9tIHlvdXIgd29yaz8iICwgJ0lmIHlvdVwnZCBwcmVmZXIgc2VsbGVycyBub3QgdG8gcHJvZml0IGZyb20geW91ciBidWlsZCBjbGljayB5ZXMgdG8gYWRkIGEgc3RhcnR1cCBtZXNzYWdlIG9uIHlvdXIgYnVpbGQuIERvIHlvdSB3YW50IGFkZCB0aGUgbWVzc2FnZT8nICwgeWVzbGFiZWwgPSAnTm8nICwgbm9sYWJlbCA9ICdZZXMnICkKICAgaWYgSTFpMUkxSTExSWlpSSA9PSAwIDoKICAgIG9PT09vbzBPMG9PICggT28wb08wb29vICkKICAgaWYgSTFpMUkxSTExSWlpSSA9PSAxIDoKICAgIHRyeSA6CiAgICAgaUlpaWkxaUkxaSAoICkKICAgIGV4Y2VwdCA6CiAgICAgcGFzcwogICAgIGlmIDM2IC0gMzY6IElJaWlpSTFpSUlJICsgT29vb29vb29PTyAvIGkxMWlJaWlJaWkKIElpaUlJaUlJMTFpMSAoIGlJaWkxICkKIE8wT29vb29PMG8wTzAgKCApCiBpaUlJaWkgKCBpSWlpMSAsIGkxSUkxSWlpSWkgLCBPMDAwbzAwMDBPICwgSUkxaUkxMSAsIE8wMG8wTyAsIE8wMG9PbzBPMG8wME8gLCBJSWlpaTExaWkxSUkxICwgbzBPTzAwME8gKQogdGltZSAuIHNsZWVwICggMSApCiBpZiA3NCAtIDc0OiBPb09vT08wMCAvIGkxSUlpICUgT29vb29vb29PTwogbzAwbzBvMDAwT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlJMWlpMSAsIG8wME9PMG8wICsgJ19ndWlzZXR0aW5ncy56aXAnICkgKQogT29vbzAwT09vID0gemlwZmlsZSAuIFppcEZpbGUgKCBvMDBvMG8wMDBPbyAsIG1vZGUgPSAndycgKQogaWYgNiAtIDY6IG9vT28gLyBJMUlpaUkgLyBPb09vT08wMAogdHJ5IDoKICBPb29vMDBPT28gLiB3cml0ZSAoIGlJaTFpaTFJMSAsICdndWlzZXR0aW5ncy54bWwnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiBleGNlcHQgOgogIG8wb29vb08wID0gMAogIGlmIDUxIC0gNTE6IElJMTExaWlpaSAvIE9vME9vbyAvIEkxSWlpSSArIGkxMWlJaWlJaWkKIHRyeSA6CiAgT29vbzAwT09vIC4gd3JpdGUgKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpMSAsICd1c2VyZGF0YScgLCAncHJvZmlsZXMueG1sJyApICkgLCAncHJvZmlsZXMueG1sJyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogZXhjZXB0IDoKICBwYXNzCiAgaWYgNSAtIDU6IE9PT29Pb28wTwogT29vbzAwT09vIC4gY2xvc2UgKCApCiBpZiAyMiAtIDIyOiBpSWlpMUkxMUkxSUkxICogSUlpIC8gT28wT29vCiBpZiBvMDAgPT0gJ3RydWUnIDoKICBpSW9PME9PT29PMG8gPSB6aXBmaWxlIC4gWmlwRmlsZSAoIElpaTEgLCBtb2RlID0gJ3cnICkKICB0cnkgOgogICBpSW9PME9PT29PMG8gLiB3cml0ZSAoIGlJaTFpaTFJMSAsICdndWlzZXR0aW5ncy54bWwnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiAgZXhjZXB0IDoKICAgbzBvb29vTzAgPSAwCiAgIGlmIDc1IC0gNzU6IEkxaWkxMWlJaTExaQogIHRyeSA6CiAgIGlJb08wT09Pb08wbyAuIHdyaXRlICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaUlpaTEgLCAndXNlcmRhdGEnICwgJ3Byb2ZpbGVzLnhtbCcgKSApICwgJ3Byb2ZpbGVzLnhtbCcgLCB6aXBmaWxlIC4gWklQX0RFRkxBVEVEICkKICBleGNlcHQgOgogICBwYXNzCiAgaUlvTzBPT09vTzBvIC4gY2xvc2UgKCApCiAgaWYgOTIgLSA5MjogT09Pb09vbzBPIC8gTzAgKiBJMUlpaUkgLSBPT09vT29vME8KIGlmIG8wb29vb08wID09IDAgOgogIGlJMTExSTExSTFJMSAuIG9rICggIkZBSUxFRCEiICwgJ1RoZSBndWlzZXR0aW5ncy54bWwgZmlsZSBjb3VsZCBub3QgYmUgZm91bmQgb24geW91ciBzeXN0ZW0sIHBsZWFzZSByZWJvb3QgYW5kIHRyeSBhZ2Fpbi4nICwgJycgLCAnJyApCiAgaWYgOTkgLSA5OTogaTExaUlpaUlpaSAlIE9vb29vb29vT08KIGVsc2UgOgogIGlJMTExSTExSTFJMSAuIG9rICggIlNVQ0NFU1MhIiAsICdZb3UgQXJlIE5vdyBCYWNrZWQgVXAuIFJlbWVtYmVyIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgbG9jYWwgYmFja3VwIHB1cnBvc2VzIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHNoYXJpbmcgb25saW5lLiBVc2UgdGhlIGZhciBzdXBlcmlvciBOYU4gQ1AgYmFja3VwIG1ldGhvZCBmb3Igb25saW5lIHVzZS4nICkKICBpZiA1NiAtIDU2OiBJSWlpaUkxaUlJSSAqIElJaQogIGlmIG8wMCA9PSAndHJ1ZScgOgogICBpSTExMUkxMUkxSTEgLiBvayAoICJCdWlsZCBMb2NhdGlvbnMiICwgJ0Z1bGwgQmFja3VwIChvbmx5IHVzZWQgdG8gcmVzdG9yZSBvbiB0aGlzIGRldmljZSk6IFtDT0xPUj1kb2RnZXJibHVlXScgKyBPT08wTzBPT28gLCAnWy9DT0xPUl1Vbml2ZXJzYWwgQmFja3VwOiBbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgaTFJSTFJaWlJaSArICdbL0NPTE9SXScgKQogICBpZiA5OCAtIDk4OiBPT09vT29vME8gKyBPMCAqIElJaSArIGkxMWlJaWlJaWkgLSBPbyAtIGlJaWkxSTExSTFJSTEKICBlbHNlIDoKICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiQnVpbGQgTG9jYXRpb24iICwgJ1VuaXZlcnNhbCBCYWNrdXA6W0NSXVtDT0xPUj1kb2RnZXJibHVlXScgKyBpMUlJMUlpaUlpICsgJ1svQ09MT1JdJyApCiAgIGlmIDUgLSA1OiBPbyAlIE9vME9vbyAlIElJaWlpSTFpSUlJICUgaWlpaWlpaWkxCiAgIGlmIDE3IC0gMTc6IE8wME9PbzAwb28wbyArIElJMTExaWlpaSArIE9vb29vb29vT08gLyBPbyAvIElJaWlpSTFpSUlJCmRlZiBvT29vME9vb29vICggKSA6CiBvMG9PbzAwICggKQogb29vMDBvMG8gPSBPT09PMDBvMDAwbyAoICd3ZWxjb21ldGV4dCcgKQogb09PME9PT09PbzBPbyAoICkKIGlmIDE1IC0gMTU6IElJMTExaWlpaSAqIG9vT28gJSBJSWlJaTFpSSAvIGkxMWlJaWlJaWkgLSBvb09vICsgT28wT29vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG8wTzAwT28wbzAgKSA6CiAgc2h1dGlsIC4gcm10cmVlICggTzBvME8wME9vMG8wICkKICBpZiA5IC0gOTogT09Pb09vbzBPIC0gb29PbyArIE8wIC8gSUlpSWkxaUkgJSBpMUlJaQogSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ0NyZWF0ZSBub29ic2FuZG5lcmRzIEJ1aWxkJyAsICdUaGlzIGJhY2t1cCB3aWxsIG9ubHkgd29yayBpZiB5b3Ugc2hhcmUgeW91ciBidWlsZCBvbiB0aGUgW0NPTE9SPWRvZGdlcmJsdWVdTk9PQlNBTkRORVJEU1svQ09MT1JdIHBvcnRhbCB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb21tdW5pdHkuIEl0IHdpbGwgbm90IHdvcmsgd2l0aCBhbnkgb3RoZXIgaW5zdGFsbGVyL3dpemFyZCwgZG8geW91IHdpc2ggdG8gY29udGludWU/JyApCiBpZiA5NyAtIDk3OiBvMG9PT28wTzBPb28gKiBpaWlpaWlpaTEKIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgT09vb08wT09vbyAuIGNyZWF0ZSAoICdDaGVja2luZyBGaWxlIFN0cnVjdHVyZScgLCAnJyAsICdQbGVhc2Ugd2FpdCcgLCAnJyApCiAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMWkxSTFJICkgOgogICBvcyAuIG1ha2VkaXJzICggSTExaTFJMUkgKQogICBpZiA3OCAtIDc4OiBPT09vT29vME8gLiBPbyArIG9vT28gKiBJSWlJaTFpSSAtIGkxSUlpCiAgbzBvb29vTzAgPSAxCiAgSUlJSTFpaTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICcnICkgKQogIE9PTzBPME9PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJ215X2Z1bGxfYmFja3VwLnppcCcgKSApCiAgSWlpMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJ215X2Z1bGxfYmFja3VwX0dVSV9TZXR0aW5ncy56aXAnICkgKQogIGlmIDI3IC0gMjc6IE8wME9PbzAwb28wbyAlIGkxSUlpIC4gT28wT29vICUgSUlpCiAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJSUkxaWkxICkgOgogICBvcyAuIG1ha2VkaXJzICggSUlJSTFpaTEgKQogICBpZiAxMCAtIDEwOiBJSWlpaUkxaUlJSSAvIE9vb29vb29vT08KICBJMWlJSTFJSWkxSWlJID0gaUlpb28wb29PICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiAgaWYgNTAgLSA1MDogaTExaUlpaUlpaSAtIE9vb29vb29vT08gLiBvb09vICsgTzAgLiBpMUlJaQogIGlmICggbm90IEkxaUlJMUlJaTFJaUkgKSA6CiAgIHJldHVybiBGYWxzZSAsIDAKICAgaWYgOTEgLSA5MTogbzBvT09vME8wT29vIC4gSUlpSWkxaUkgJSBPbzBPb28gLSBJSWlJaTFpSSAuIG9vT28gJSBpMTFpSWlpSWlpCiAgbzAwT08wbzAgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggSTFpSUkxSUlpMUlpSSApCiAgaTFJSTFJaWlJaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJSUkxaWkxICwgbzAwT08wbzAgKyAnLnppcCcgKSApCiAgaWYgMjUgLSAyNTogaUlpaTFJMTFJMUlJMQogIGlmIDYzIC0gNjM6IGlpaWlpaWlpMQogIGlpMTExaUkxaTEgPSBbIEkxSWlJIF0KICBPTzAwMCA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJ1RodW1icy5kYicgLCAnLmdpdGlnbm9yZScgXQogIG8wT08wMDBPID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAiVGV4dHVyZXMxMy5kYiIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnYWR2YW5jZWRzZXR0aW5ncy54bWwnICwgJ1RodW1icy5kYicgLCAnLmdpdGlnbm9yZScgXQogIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKICBPMDAwbzAwMDBPID0gIkNyZWF0aW5nIENvbW11bml0eSBCdWlsZCIKICBJSTFpSTExID0gIkFyY2hpdmluZy4uLiIKICBPMDBvME8gPSAiIgogIE8wMG9PbzBPMG8wME8gPSAiUGxlYXNlIFdhaXQiCiAgaWYgOTYgLSA5NjogT09Pb09vbzBPCiAgaWYgMzQgLSAzNDogT29Pb09PMDAgLyBPb08wTzAwIC0gSTFJaWlJIC4gTzAgLiBPbwogIGlmIG8wMCA9PSAndHJ1ZScgOgogICBpaUlJaWkgKCBpSWlpMSAsIE9PTzBPME9PbyAsIG9PMG9Pb28wTyAsIElJMWlJMTEgLCBPMDBvME8gLCBPMDBvT28wTzBvMDBPICwgaWkxMTFpSTFpMSAsIE9PMDAwICkKICAgaWYgNjMgLSA2MzogSUlpSWkxaUkKICBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJEbyB5b3Ugd2FudCB0byBpbmNsdWRlIHlvdXIgYWRkb25fZGF0YSBmb2xkZXI/IiAsICdUaGlzIGNvbnRhaW5zIEFMTCBhZGRvbiBzZXR0aW5ncyBpbmNsdWRpbmcgcGFzc3dvcmRzIGJ1dCBtYXkgYWxzbyBjb250YWluIGltcG9ydGFudCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNraW4gc2hvcnRjdXRzLiBXZSByZWNvbW1lbmQgTUFOVUFMTFkgcmVtb3ZpbmcgdGhlIGFkZG9uX2RhdGEgZm9sZGVycyB0aGF0IGFyZW5cJ3QgcmVxdWlyZWQuJyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiAgaWYgMTEgLSAxMTogSUlpSWkxaUkgLSBpSWlpMUkxMUkxSUkxCiAgaWYgOTIgLSA5MjogT29PME8wMAogIGlmIEkxaTFJMUkxMUlpaUkgPT0gMCA6CiAgIElJaWlpMTFpaTFJSTEgPSBbIEkxSWlJICwgJ2NhY2hlJyAsICdzeXN0ZW0nICwgJ2FkZG9ucycgLCAnVGh1bWJuYWlscycgLCAnQ1BfUHJvZmlsZXMnICwgJ3BlcmlwaGVyYWxfZGF0YScgLCAnbGlicmFyeScgLCAna2V5bWFwcycgLCAnYWRkb25fZGF0YScgXQogICBpZiAxNSAtIDE1OiBJSWlpaUkxaUlJSSAvIElJaWlpSTFpSUlJICsgaUlpaTFJMTFJMUlJMSAlIE9vb29vb29vT08KICBlbGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgIElJaWlpMTFpaTFJSTEgPSBbIEkxSWlJICwgJ2NhY2hlJyAsICdzeXN0ZW0nICwgJ2FkZG9ucycgLCAnVGh1bWJuYWlscycgLCAnQ1BfUHJvZmlsZXMnICwgInBlcmlwaGVyYWxfZGF0YSIgLCAnbGlicmFyeScgLCAna2V5bWFwcycgXQogICBpZiAxMiAtIDEyOiBpaWlpaWlpaTEKICBpZiBPbzBvTzBvb28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBvb28wMG8wbyBhbmQgT28wb08wb29vICE9ICcnIDoKICAgaWYgKCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSBhbmQgT28wb08wb29vIC4gcmVwbGFjZSAoICclMjAnICwgJyAnICkgaW4gaWlpMWkxSUlJICggKSApIG9yIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSA6CiAgICBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJTdG9wIGxlZWNoZXJzIHByb2ZpdGluZyBmcm9tIHlvdXIgd29yaz8iICwgJ0lmIHlvdVwnZCBwcmVmZXIgc2VsbGVycyBub3QgdG8gcHJvZml0IGZyb20geW91ciBidWlsZCBjbGljayB5ZXMgdG8gYWRkIGEgc3RhcnR1cCBtZXNzYWdlIG9uIHlvdXIgYnVpbGQuIERvIHlvdSB3YW50IGFkZCB0aGUgbWVzc2FnZT8nICwgeWVzbGFiZWwgPSAnTm8nICwgbm9sYWJlbCA9ICdZZXMnICkKICAgIGlmIEkxaTFJMUkxMUlpaUkgPT0gMCA6CiAgICAgb09PT29vME8wb08gKCBPbzBvTzBvb28gKQogICAgaWYgSTFpMUkxSTExSWlpSSA9PSAxIDoKICAgICB0cnkgOgogICAgICBpSWlpaTFpSTFpICggKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKICAgICAgaWYgMzYgLSAzNjogSUlpIC4gSUlpaWlJMWlJSUkgKiBPb29vb29vb09PIC0gbzBvT09vME8wT29vCiAgb28wb29vb28wMG8gKCApCiAgSWlpSUlpSUkxMWkxICggaUlpaTEgKQogIGlpSUlpaSAoIGlJaWkxICwgaTFJSTFJaWlJaSAsIE8wMDBvMDAwME8gLCBJSTFpSTExICwgTzAwbzBPICwgTzAwb09vME8wbzAwTyAsIElJaWlpMTFpaTFJSTEgLCBvME9PMDAwTyApCiAgaWYgNjAgLSA2MDogT28gLiBJSWlJaTFpSSAvIGlJaWkxSTExSTFJSTEgKyBPbyAqIElJaQogIGlmIDgyIC0gODI6IGkxMWlJaWlJaWkgLiBpSWlpMUkxMUkxSUkxICogSTFJaWlJIC0gT09Pb09vbzBPICsgTzAwT09vMDBvbzBvCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBPMDBPMG9PTzAwTzAwICkKICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDQ4IC0gNDg6IEkxaWkxMWlJaTExaQogIHRyeSA6CiAgIG9zIC4gcmVtb3ZlICggTzBvME8wME9vMG8wICkKICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDk2IC0gOTY6IGlpaWlpaWlpMSAuIE9vb29vb29vT08KICB0aW1lIC4gc2xlZXAgKCAxICkKICBpZiAzOSAtIDM5OiBPbyArIE9vTzBPMDAKICBpZiA4MCAtIDgwOiBPbyAlIE9vTzBPMDAgLyBPb09vT08wMAogIG8wMG8wbzAwME9vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSUlJSTFpaTEgLCBvMDBPTzBvMCArICdfZ3Vpc2V0dGluZ3MuemlwJyApICkKICBpZiA1NCAtIDU0OiBPbzBPb28gJSBPb08wTzAwIC0gT28gLSBPT09vT29vME8KICB0cnkgOgogICBzaHV0aWwgLiBjb3B5ZmlsZSAoIGlJaTFpaTFJMSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsICdndWlzZXR0aW5ncy54bWwnICkgKQogICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICBwcmludCAiIyMjIFN1Y2Nlc3NmdWxseSBjb3BpZWQgZ3Vpc2V0dGluZ3MgdG8gOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxSTFJICwgJ2d1aXNldHRpbmdzLnhtbCcgKQogIGV4Y2VwdCA6CiAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgIHByaW50ICIjIyMgRkFJTEVEIFRPIGNvcHkgZ3Vpc2V0dGluZ3MgdG8gOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxSTFJICwgJ2d1aXNldHRpbmdzLnhtbCcgKQogICBvMG9vb29PMCA9IDAKICAgaWYgNzEgLSA3MTogaWlpaWlpaWkxIC4gaTExaUlpaUlpaQogIHRyeSA6CiAgIHNodXRpbCAuIGNvcHlmaWxlICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaUlpaTEgLCAndXNlcmRhdGEnICwgJ3Byb2ZpbGVzLnhtbCcgKSApICwgeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSTExaTFJMUkgLCAncHJvZmlsZXMueG1sJyApICkgKQogICBwcmludCAiIyMjIFN1Y2Nlc3NmdWxseSBjb3BpZWQgcHJvZmlsZXMgdG8gOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxSTFJICwgJ3Byb2ZpbGVzLnhtbCcgKQogIGV4Y2VwdCA6CiAgIHBhc3MKICAgaWYgNTYgLSA1NjogTzAgKiBJSWlJaTFpSSArIElJaUlpMWlJICogaUlpaTFJMTFJMUlJMSAvIGlpaWlpaWlpMSAqIElJaQogIElpT28wTzBPID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJaU9vME8wTyApIDoKICAgdHJ5IDoKICAgIHNodXRpbCAuIGNvcHl0cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkgLCBvcyAuIHBhdGggLiBqb2luICggSTExaTFJMUkgLCAnYWRkb25fZGF0YScgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkgKQogICAgaWYgb09Pb28wME8wTyA9PSAndHJ1ZScgOgogICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGNvcGllZCBza2luc2hvcnRjdXRzIHRvIDogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsICdhZGRvbl9kYXRhJyAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKQogICBleGNlcHQgOgogICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnRmFpbGVkIHRvIGNvcHkgU2tpbiBTaG9ydGN1dHMnICwgJ1RoZXJlIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYmFja3VwIHlvdXIgc2NyaXB0LnNraW5zaG9ydGN1dHMsIHBsZWFzZSB0cnkgYWdhaW4gYW5kIGlmIHlvdSBjb250aW51ZSB0byByZWNlaXZlIHRoaXMgbWVzc2FnZSB1cGxvYWQgYSBsb2cgYW5kIHNlbmQgZGV0YWlscyB0byB0aGUgbm9vYnNhbmRuZXJkcyBmb3J1bS4nICkKICAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgICBwcmludCAiIyMjIEZBSUxFRCB0byBjb3B5IHNraW5zaG9ydGN1dHMgdG86ICIgKyBvcyAuIHBhdGggLiBqb2luICggSTExaTFJMUkgLCAnYWRkb25fZGF0YScgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkKICAgICBpZiA4IC0gODogaTExaUlpaUlpaSAqIE8wICsgSTFpaTExaUlpMTFpIC4gaUlpaTFJMTFJMUlJMSAlIE9PT29Pb28wTyAvIE9PT29Pb28wTwogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgbzAwT08wME9vTyApICkgOgogICB0cnkgOgogICAgc2h1dGlsIC4gY29weXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIG8wME9PMDBPb08gKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsICdhZGRvbl9kYXRhJyAsIG8wME9PMDBPb08gKSApCiAgICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICAgcHJpbnQgIiMjIyBTdWNjZXNzZnVsbHkgY29waWVkIHNraW4gZGF0YSB0byA6ICIgKyBvcyAuIHBhdGggLiBqb2luICggSTExaTFJMUkgLCAnYWRkb25fZGF0YScgLCBvMDBPTzAwT29PICkKICAgZXhjZXB0IDoKICAgIGlJMTExSTExSTFJMSAuIG9rICggJ0ZhaWxlZCB0byBjb3B5IHNraW4gZGF0YScgLCAnVGhlcmUgd2FzIGFuIGVycm9yIHRyeWluZyB0byBiYWNrdXAgeW91ciBza2luIGRhdGEsIHBsZWFzZSB0cnkgYWdhaW4gYW5kIGlmIHlvdSBjb250aW51ZSB0byByZWNlaXZlIHRoaXMgbWVzc2FnZSB1cGxvYWQgYSBsb2cgYW5kIHNlbmQgZGV0YWlscyB0byB0aGUgbm9vYnNhbmRuZXJkcyBmb3J1bS4nICkKICAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgICBwcmludCAiIyMjIEZBSUxFRCB0byBjb3B5IHNraW4gZGF0YSB0bzogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsICdhZGRvbl9kYXRhJyAsIG8wME9PMDBPb08gKQogICAgIGlmIDcwIC0gNzA6IEkxSWlpSSArIE8wME9PbzAwb28wbwogIG9vICggSTExaTFJMUkgLCBvMDBvMG8wMDBPbyApCiAgaWYgNzAgLSA3MDogSUlpaWlJMWlJSUkgLiBpMTFpSWlpSWlpCiAgaWYgNzYgLSA3NjogSUlpSWkxaUkgLiBJSWlpaUkxaUlJSSAlIElJaUlpMWlJIC0gSUlpCiAgaWYgNTEgLSA1MTogT29vb29vb29PTyArIG8wb09PbzBPME9vbyAqIGlJaWkxSTExSTFJSTEgKiBvb09vIC8gaTFJSWkKICBpZiAxOSAtIDE5OiBJSWlJaTFpSSAtIE9vT29PTzAwICUgb29PbyAvIE9vb29vb29vT08gJSBJSWlJaTFpSQogIGlmIG8wMCA9PSAndHJ1ZScgOgogICBvbyAoIEkxMWkxSTFJICwgSWlpMSApCiAgIGlmIDY1IC0gNjU6IE8wIC4gb29PbwogICBpZiA4NSAtIDg1OiBJSTExMWlpaWkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJMTFpMUkxSSApIDoKICAgc2h1dGlsIC4gcm10cmVlICggSTExaTFJMUkgKQogICBpZiA1NSAtIDU1OiBJMWlpMTFpSWkxMWkKICBpZiBvMG9vb29PMCA9PSAwIDoKICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnRVJST1InICwgJ1RoZXJlIHdhcyBhbiBlcnJvciBiYWNraW5nIHVwIHlvdXIgZ3Vpc2V0dGluZ3MueG1sLCB5b3UgY2Fubm90IHNoYXJlIGEgYnVpbGQgd2l0aG91dCBvbmUgc28gcGxlYXNlIHRyeSBhZ2Fpbi4gSWYgdGhpcyBrZWVwcyBoYXBwZW5pbmcgcGxlYXNlIHVwbG9hZCBhIGxvZyBhbmQgY29udGFjdCB0aGUgbm9vYnNhbmRuZXJkcyBmb3J1bSB3aXRoIGRldGFpbHMuJyApCiAgIGlmIDc2IC0gNzY6IG9vT28gLSBpMTFpSWlpSWlpCiAgZWxzZSA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggIlNVQ0NFU1MhIiAsICdZb3UgQXJlIE5vdyBCYWNrZWQgVXAgYW5kIGNhbiBzaGFyZSB0aGlzIGJ1aWxkIHdpdGggdGhlIGNvbW11bml0eS4nICkKICAgaWYgMjcgLSAyNzogSTFpaTExaUlpMTFpIC0gaTExaUlpaUlpaSAlIElJaSAvIE9vME9vbyAuIE9vME9vbyAvIE9vb29vb29vT08KICAgaWYgbzAwID09ICd0cnVlJyA6CiAgICBpSTExMUkxMUkxSTEgLiBvayAoICJCdWlsZCBMb2NhdGlvbnMiICwgJ0Z1bGwgQmFja3VwIChvbmx5IHVzZWQgdG8gcmVzdG9yZSBvbiB0aGlzIGRldmljZSk6IFtDT0xPUj1kb2RnZXJibHVlXScgKyBPT08wTzBPT28gLCAnWy9DT0xPUl1Vbml2ZXJzYWwgQmFja3VwICh0aGlzIHdpbGwgT05MWSB3b3JrIGZvciBzaGFyaW5nIG9uIHRoZSBbQ09MT1I9ZG9kZ2VyYmx1ZV1OT09CU0FORE5FUkRTWy9DT0xPUl0gcG9ydGFsKTpbQ1JdW0NPTE9SPWRvZGdlcmJsdWVdJyArIGkxSUkxSWlpSWkgKyAnWy9DT0xPUl0nICkKICAgIGlmIDc2IC0gNzY6IE9PT29Pb28wTyAqIE9vTzBPMDAgLiBpSWlpMUkxMUkxSUkxICUgT29vb29vb29PTyAlIEkxaWkxMWlJaTExaQogICBlbHNlIDoKICAgIGlJMTExSTExSTFJMSAuIG9rICggIkJ1aWxkIExvY2F0aW9uIiAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1OT09CU0FORE5FUkRTWy9DT0xPUl0gQmFja3VwICh0aGlzIHdpbGwgT05MWSB3b3JrIGZvciBzaGFyaW5nIG9uIHRoZSBDb21tdW5pdHkgUG9ydGFsKTpbQ1JdW0NPTE9SPWRvZGdlcmJsdWVdJyArIGkxSUkxSWlpSWkgKyAnWy9DT0xPUl0nICkKICAgIGlmIDM5IC0gMzk6IElJMTExaWlpaSAqIE9vT29PTzAwIC4gTzAgKiBPT09vT29vME8KICAgIGlmIDg5IC0gODk6IE8wME9PbzAwb28wbyAtIGlpaWlpaWlpMSAuIE9PT29Pb28wTyAtIElJaSAtIEkxSWlpSQpkZWYgbzBPMDBPICggdXJsICwgdmlkZW8gKSA6CiBpSWlpICggKQogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9Db21tdW5pdHlfQnVpbGRzL2NvbW11bml0eV9idWlsZHNfdGVzdC5waHA/aWQ9JXMnICUgKCB1cmwgKQogTzBPb29vTzAgPSBvb28wTzBvMDBPICggaTFJMWkxICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogSWlvbzBPMDBvb28wbyA9IHJlIC4gY29tcGlsZSAoICdwYXRoPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWkxaTFJaWkgPSByZSAuIGNvbXBpbGUgKCAnbXlhcnQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvTzAwb08wME8wT28gPSByZSAuIGNvbXBpbGUgKCAnYXJ0cGFjaz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIEkxSUlJaUlpSWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9wcmV2aWV3PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT08wbzBvMG9vID0gcmUgLiBjb21waWxlICggJ3ZpZGVvZ3VpZGUxPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaUlpSUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvZ3VpZGUyPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaTExMWlpaTFJMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2d1aWRlMz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpSWlJSTEgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9ndWlkZTQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpaTExMWlJID0gcmUgLiBjb21waWxlICggJ3ZpZGVvZ3VpZGU1PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWkxMUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWwxPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSTFJID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWwyPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogb09PMG8wID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWwzPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogSWkxSWkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWw0PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogbzAwMG9vT28wbzBPTyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2xhYmVsNT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG9Pb29vMCA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWlJMWlpMUlJaUkgPSByZSAuIGNvbXBpbGUgKCAnYXV0aG9yPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT08wbzBvT09PME8gPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9PTzBvMCA9IHJlIC4gY29tcGlsZSAoICdkZXNjcmlwdGlvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElJaTFpMUkxMUlJSUkgPSByZSAuIGNvbXBpbGUgKCAnRG93bmxvYWRVUkw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPb29Pb09PTzAwTyA9IHJlIC4gY29tcGlsZSAoICdVcGRhdGVVUkw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJMTExaUlJSUkxMWlJID0gcmUgLiBjb21waWxlICggJ1VwZGF0ZURhdGU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvT29PTyA9IHJlIC4gY29tcGlsZSAoICdVcGRhdGVEZXNjPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT29vSWlJSUlJMWkxMUkgPSByZSAuIGNvbXBpbGUgKCAndXBkYXRlZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGkxMUkxaUlpaTFpMTEgPSByZSAuIGNvbXBpbGUgKCAnZGVmYXVsdHNraW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpSWlpSTExSUkxMWkgPSByZSAuIGNvbXBpbGUgKCAnc2tpbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvMDBPb08wbzAgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9hZGRvbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvME9PT29PMG9vT09PbzAgPSByZSAuIGNvbXBpbGUgKCAnYXVkaW9hZGRvbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvMG9PT08gPSByZSAuIGNvbXBpbGUgKCAncHJvZ3JhbWFkZG9ucz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElJaTExID0gcmUgLiBjb21waWxlICggJ3BpY3R1cmVhZGRvbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBPME9PTyA9IHJlIC4gY29tcGlsZSAoICdzb3VyY2VzPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWlpMWlJSTFJID0gcmUgLiBjb21waWxlICggJ2FkdWx0PSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaTFJaTExaWkgPSByZSAuIGNvbXBpbGUgKCAnZ3Vpc2V0dGluZ3M9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJaTExSUlJaTEgPSByZSAuIGNvbXBpbGUgKCAndGh1bWI9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvb29vb29vMDBvTzBPTyA9IHJlIC4gY29tcGlsZSAoICdmYW5hcnQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJSUlpaTExID0gcmUgLiBjb21waWxlICggJ29wZW5lbGVjPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogaWYgMjkgLSAyOTogTzAwT09vMDBvbzBvIC0gTzAwT09vMDBvbzBvIC8gaWlpaWlpaWkxCiBJMUkxSWlJMSA9IGlpMWkxSWlpIFsgMCBdIGlmICggbGVuICggaWkxaTFJaWkgKSA+IDAgKSBlbHNlICcnCiBJMTFJSUlJID0gb08wMG9PMDBPME9vIFsgMCBdIGlmICggbGVuICggb08wMG9PMDBPME9vICkgPiAwICkgZWxzZSAnJwogSUlvMG8wTzBPMDBvT09vID0gSWlvbzBPMDBvb28wbyBbIDAgXSBpZiAoIGxlbiAoIElpb28wTzAwb29vMG8gKSA+IDAgKSBlbHNlICcnCiBvb28wTyA9IG9Pb29vMCBbIDAgXSBpZiAoIGxlbiAoIG9Pb29vMCApID4gMCApIGVsc2UgJycKIElpSWkxSTFJaWlpID0gaWlJMWlpMUlJaUkgWyAwIF0gaWYgKCBsZW4gKCBpaUkxaWkxSUlpSSApID4gMCApIGVsc2UgJycKIG9PT28wb28wTyA9IE9PMG8wb09PTzBPIFsgMCBdIGlmICggbGVuICggT08wbzBvT09PME8gKSA+IDAgKSBlbHNlICcnCiBPMDBPbyA9IE9PTzBvMCBbIDAgXSBpZiAoIGxlbiAoIE9PTzBvMCApID4gMCApIGVsc2UgJ05vIGluZm9ybWF0aW9uIGF2YWlsYWJsZScKIGlpaWlpMUlJID0gT29vSWlJSUlJMWkxMUkgWyAwIF0gaWYgKCBsZW4gKCBPb29JaUlJSUkxaTExSSApID4gMCApIGVsc2UgJycKIG9PSWlpID0gaTExSTFpSWlpMWkxMSBbIDAgXSBpZiAoIGxlbiAoIGkxMUkxaUlpaTFpMTEgKSA+IDAgKSBlbHNlICcnCiBpMUlJSUlpaUkxMSA9IGlJaWlJMTFJSTExaSBbIDAgXSBpZiAoIGxlbiAoIGlJaWlJMTFJSTExaSApID4gMCApIGVsc2UgJycKIEkxaWlpMUkgPSBvMDBPb08wbzAgWyAwIF0gaWYgKCBsZW4gKCBvMDBPb08wbzAgKSA+IDAgKSBlbHNlICcnCiBvb28gPSBvME9PT29PMG9vT09PbzAgWyAwIF0gaWYgKCBsZW4gKCBvME9PT29PMG9vT09PbzAgKSA+IDAgKSBlbHNlICcnCiBJSTExMSA9IG8wb09PTyBbIDAgXSBpZiAoIGxlbiAoIG8wb09PTyApID4gMCApIGVsc2UgJycKIEkxMWlJaSA9IElJaTExIFsgMCBdIGlmICggbGVuICggSUlpMTEgKSA+IDAgKSBlbHNlICcnCiBJaTFJSWlJSTFJID0gTzBPT08gWyAwIF0gaWYgKCBsZW4gKCBPME9PTyApID4gMCApIGVsc2UgJycKIE9PT2lpID0gaWlpMWlJSTFJIFsgMCBdIGlmICggbGVuICggaWlpMWlJSTFJICkgPiAwICkgZWxzZSAnJwogSWlpMUkxMSA9IGkxSWkxMWlpIFsgMCBdIGlmICggbGVuICggaTFJaTExaWkgKSA+IDAgKSBlbHNlICdOb25lJwogTzBvMG8gPSBJSWkxaTFJMTFJSUlJIFsgMCBdIGlmICggbGVuICggSUlpMWkxSTExSUlJSSApID4gMCApIGVsc2UgJ05vbmUnCiBJaWlpSWkxMTExSSA9IE9vb09vT09PMDBPIFsgMCBdIGlmICggbGVuICggT29vT29PT08wME8gKSA+IDAgKSBlbHNlICdOb25lJwogaUlJMWkxaWkgPSBJMTExaUlJSUkxMWlJIFsgMCBdIGlmICggbGVuICggSTExMWlJSUlJMTFpSSApID4gMCApIGVsc2UgJ05vbmUnCiBpMUkxaWkxaSA9IG9Pb09PIFsgMCBdIGlmICggbGVuICggb09vT08gKSA+IDAgKSBlbHNlICdOb25lJwogb08wbzBPME9vbzBvID0gSTFJSUlpSWlJaSBbIDAgXSBpZiAoIGxlbiAoIEkxSUlJaUlpSWkgKSA+IDAgKSBlbHNlICdOb25lJwogSWlvTzBvT09PME9vbyA9IE9PMG8wbzBvbyBbIDAgXSBpZiAoIGxlbiAoIE9PMG8wbzBvbyApID4gMCApIGVsc2UgJ05vbmUnCiBpMWkxSSA9IGlJaUlJMSBbIDAgXSBpZiAoIGxlbiAoIGlJaUlJMSApID4gMCApIGVsc2UgJ05vbmUnCiBJaUlJaTEgPSBpMTExaWlpMUkxIFsgMCBdIGlmICggbGVuICggaTExMWlpaTFJMSApID4gMCApIGVsc2UgJ05vbmUnCiBpSUkxMUkxSWkxID0gaWlJaUlJMSBbIDAgXSBpZiAoIGxlbiAoIGlpSWlJSTEgKSA+IDAgKSBlbHNlICdOb25lJwogbzBvMCA9IGlpMTExaUkgWyAwIF0gaWYgKCBsZW4gKCBpaTExMWlJICkgPiAwICkgZWxzZSAnTm9uZScKIElpSWkxID0gaWkxMUkxIFsgMCBdIGlmICggbGVuICggaWkxMUkxICkgPiAwICkgZWxzZSAnTm9uZScKIGkxMTFpaUkxaWkgPSBJMUkgWyAwIF0gaWYgKCBsZW4gKCBJMUkgKSA+IDAgKSBlbHNlICdOb25lJwogSUlpaWkgPSBvT08wbzAgWyAwIF0gaWYgKCBsZW4gKCBvT08wbzAgKSA+IDAgKSBlbHNlICdOb25lJwogSTFpMWkgPSBJaTFJaTEgWyAwIF0gaWYgKCBsZW4gKCBJaTFJaTEgKSA+IDAgKSBlbHNlICdOb25lJwogT09PT29vTzBvTzAwTzBvID0gbzAwMG9vT28wbzBPTyBbIDAgXSBpZiAoIGxlbiAoIG8wMDBvb09vMG8wT08gKSA+IDAgKSBlbHNlICdOb25lJwogT28wbyA9IElpMTFJSUlpMSBbIDAgXSBpZiAoIGxlbiAoIElpMTFJSUlpMSApID4gMCApIGVsc2UgJ05vbmUnCiBpaWlpSUkxMWlJaSA9IG9vb29vb28wMG9PME9PIFsgMCBdIGlmICggbGVuICggb29vb29vbzAwb08wT08gKSA+IDAgKSBlbHNlICdOb25lJwogT08wMCA9IElJSWlpMTEgWyAwIF0gaWYgKCBsZW4gKCBJSUlpaTExICkgPiAwICkgZWxzZSAnTm9uZScKIGlmIDUyIC0gNTI6IElJMTExaWlpaSAvIEkxSWlpSSAuIG9vT28gKiBJSWlpaUkxaUlJSSAuIE9PT29Pb28wTwogSTFJMUlJaWlpaTFpaSA9IG9wZW4gKCBJMUlJaWlJaWlpICwgbW9kZSA9ICd3KycgKQogSTFJMUlJaWlpaTFpaSAuIHdyaXRlICggJ2lkPSInICsgc3RyICggdmlkZW8gKSArICciXG5uYW1lPSInICsgb29vME8gKyAnIlxudmVyc2lvbj0iJyArIG9PT28wb28wTyArICciJyApCiBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiBpZiAyNSAtIDI1OiBpMTFpSWlpSWlpIC8gT29Pb09PMDAgLSBJSWkgLyBPb08wTzAwIC4gbzBvT09vME8wT29vIC4gbzBvT09vME8wT29vCiBpSTEgPSBvcGVuICggTzAwMG9vME8gLCBtb2RlID0gJ3InICkKIGlJSUlJMSA9IGlJMSAuIHJlYWQgKCApCiBpSTEgLiBjbG9zZSAoICkKIGlmIDY1IC0gNjU6IE8wIC8gSUkxMTFpaWlpIC4gaUlpaTFJMTFJMUlJMSAuIG9vT28gLyBPbzBPb28gJSBpSWlpMUkxMUkxSUkxCiBPbzBPbyA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlJSUlJMSApCiBPTzBpaWlpaTFpaUlJaWkgPSBPbzBPbyBbIDAgXSBpZiAoIGxlbiAoIE9vME9vICkgPiAwICkgZWxzZSAnTm9uZScKIElJMUlJaWkxSTExSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggaUlJSUkxICkKIGlpSTExMUkxaUlpSSA9IElJMUlJaWkxSTExSSBbIDAgXSBpZiAoIGxlbiAoIElJMUlJaWkxSTExSSApID4gMCApIGVsc2UgJ05vbmUnCiBpaTFJaUlJaUkxMTExMUlpICwgTzBPT29PMG8wTzAgLCBPTzBPbzAwT08wb28gPSB1cmwgLiBwYXJ0aXRpb24gKCAnJicgKQogcHJpbnQgIiMjIyBDb21tdW5pdHkgQnVpbGQgRGV0YWlsczoiCiBwcmludCAiIyMjIE5hbWU6ICIgKyBvb28wTwogcHJpbnQgIiMjIyBVUkw6ICIgKyBPMG8wbwogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj15ZWxsb3ddSU1QT1JUQU5UOlsvQ09MT1JdIEluc3RhbGwgSW5zdHJ1Y3Rpb25zJyAsICcnICwgJ2luc3RydWN0aW9uc18yJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMTFJMSAoICdbQ09MT1I9eWVsbG93XURlc2NyaXB0aW9uOlsvQ09MT1JdIFRoaXMgY29udGFpbnMgaW1wb3J0YW50IGluZm8gZnJvbSB0aGUgYnVpbGQgYXV0aG9yJyAsICdOb25lJyAsICdkZXNjcmlwdGlvbicgLCAnJyAsIGlpaWlJSTExaUlpICwgb29vME8gLCBJaUlpMUkxSWlpaSAsIG9PT28wb28wTyAsIE8wME9vICwgaWlpaWkxSUkgLCBpMUlJSUlpaUkxMSAsIEkxaWlpMUkgLCBvb28gLCBJSTExMSAsIEkxMWlJaSAsIElpMUlJaUlJMUkgLCBPT09paSApCiBpZiA1MyAtIDUzOiBPb08wTzAwIC0gaWlpaWlpaWkxICsgTzAwT09vMDBvbzBvCiBpZiBPTzBpaWlpaTFpaUlJaWkgPT0gaWkxSWlJSWlJMTExMTFJaSBhbmQgaWlJMTExSTFpSWlJICE9IG9PT28wb28wTyA6CiAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1vcmFuZ2VdLS0tLS0tLS0tLS0tLS0tLS0gVVBEQVRFIEFWQUlMQUJMRSAtLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnTm9uZScgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKICBvbzBvMDBPICggJ1tDT0xPUj1kb2RnZXJibHVlXTEuIFVwZGF0ZTpbL0NPTE9SXSBPdmVyd3JpdGUgTXkgTGlicmFyeSAmIFByb2ZpbGVzJyAsIE8wbzBvICwgJ3VwZGF0ZV9jb21tdW5pdHknICwgT28wbyAsICcnICwgJ3VwZGF0ZScgLCBvb28wTyAsIG9PSWlpICwgSWlpMUkxMSAsIEkxMUlJSUkgKQogIG9vMG8wME8gKCAnW0NPTE9SPWRvZGdlcmJsdWVdMi4gVXBkYXRlOlsvQ09MT1JdIEtlZXAgTXkgTGlicmFyeSAmIFByb2ZpbGVzJyAsIE8wbzBvICwgJ3VwZGF0ZV9jb21tdW5pdHknICwgT28wbyAsICcnICwgJ3VwZGF0ZWxpYnByb2ZpbGUnICwgb29vME8gLCBvT0lpaSAsIElpaTFJMTEgLCBJMTFJSUlJICkKICBvbzBvMDBPICggJ1tDT0xPUj1kb2RnZXJibHVlXTMuIFVwZGF0ZTpbL0NPTE9SXSBLZWVwIE15IExpYnJhcnkgT25seScgLCBPMG8wbyAsICd1cGRhdGVfY29tbXVuaXR5JyAsIE9vMG8gLCAnJyAsICd1cGRhdGVsaWJyYXJ5JyAsIG9vbzBPICwgb09JaWkgLCBJaWkxSTExICwgSTExSUlJSSApCiAgb28wbzAwTyAoICdbQ09MT1I9ZG9kZ2VyYmx1ZV00LiBVcGRhdGU6Wy9DT0xPUl0gS2VlcCBNeSBQcm9maWxlcyBPbmx5JyAsIE8wbzBvICwgJ3VwZGF0ZV9jb21tdW5pdHknICwgT28wbyAsICcnICwgJ3VwZGF0ZXByb2ZpbGVzJyAsIG9vbzBPICwgb09JaWkgLCBJaWkxSTExICwgSTExSUlJSSApCiAgaWYgMjkgLSAyOTogT28gKyBPb29vb29vb09PICsgb29PbyAqIEkxSWlpSSAtIE8wME9PbzAwb28wbyAvIGkxMWlJaWlJaWkKIGlmIG9PMG8wTzBPb28wbyAhPSAnTm9uZScgb3IgSWlvTzBvT09PME9vbyAhPSAnTm9uZScgb3IgaTFpMUkgIT0gJ05vbmUnIG9yIElpSUlpMSAhPSAnTm9uZScgb3IgaUlJMTFJMUlpMSAhPSAnTm9uZScgb3IgbzBvMCAhPSAnTm9uZScgOgogIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9b3JhbmdlXS0tLS0tLS0tLS0tLS0tLS0tLSBWSURFTyBHVUlERVMgLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnTm9uZScgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiA1IC0gNTogTzAgLSBJMUlpaUkKIGlmIG9PMG8wTzBPb28wbyAhPSAnTm9uZScgOgogIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9b3JhbmdlXVZpZGVvOlsvQ09MT1JdW0NPTE9SPXdoaXRlXSBQcmV2aWV3Wy9DT0xPUl0nICwgb08wbzBPME9vbzBvICwgJ3BsYXlfdmlkZW8nICwgJycgLCBpaWlpSUkxMWlJaSAsICcnICwgJycgKQogIGlmIDQ0IC0gNDQ6IElJMTExaWlpaSAuIElJMTExaWlpaSArIE9vICogTzAwT09vMDBvbzBvCiBpZiBJaW9PMG9PT08wT29vICE9ICdOb25lJyA6CiAgSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1vcmFuZ2VdVmlkZW86Wy9DT0xPUl1bQ09MT1I9d2hpdGVdICcgKyBJaUlpMSArICdbL0NPTE9SXScgLCBJaW9PMG9PT08wT29vICwgJ3BsYXlfdmlkZW8nICwgJycgLCBpaWlpSUkxMWlJaSAsICcnICwgJycgKQogIGlmIDE2IC0gMTY6IElJMTExaWlpaQogaWYgaTFpMUkgIT0gJ05vbmUnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIGkxMTFpaUkxaWkgKyAnWy9DT0xPUl0nICwgaTFpMUkgLCAncGxheV92aWRlbycgLCAnJyAsIGlpaWlJSTExaUlpICwgJycgLCAnJyApCiAgaWYgMTAwIC0gMTAwOiBPMCAtIGkxSUlpCiBpZiBJaUlJaTEgIT0gJ05vbmUnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIElJaWlpICsgJ1svQ09MT1JdJyAsIElpSUlpMSAsICdwbGF5X3ZpZGVvJyAsICcnICwgaWlpaUlJMTFpSWkgLCAnJyAsICcnICkKICBpZiA0OCAtIDQ4OiBvb09vICUgaWlpaWlpaWkxICsgTzAKIGlmIGlJSTExSTFJaTEgIT0gJ05vbmUnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIEkxaTFpICsgJ1svQ09MT1JdJyAsIGlJSTExSTFJaTEgLCAncGxheV92aWRlbycgLCAnJyAsIGlpaWlJSTExaUlpICwgJycgLCAnJyApCiAgaWYgMjcgLSAyNzogSTFpaTExaUlpMTFpIC8gT28KIGlmIG8wbzAgIT0gJ05vbmUnIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIE9PT09vb08wb08wME8wbyArICdbL0NPTE9SXScgLCBvMG8wICwgJ3BsYXlfdmlkZW8nICwgJycgLCBpaWlpSUkxMWlJaSAsICcnICwgJycgKQogIGlmIDMzIC0gMzM6IE9vb29vb29vT08gJSBJMWlpMTFpSWkxMWkgLiBPMCAvIEkxaWkxMWlJaTExaQogaWYgT08waWlpaWkxaWlJSWlpICE9IGlpMUlpSUlpSTExMTExSWkgOgogIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9b3JhbmdlXS0tLS0tLS0tLS0tLS0tLS0tLSBJTlNUQUxMIE9QVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tWy9DT0xPUl0nICwgJ05vbmUnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgaWYgNjMgLSA2MzogSUlpaWlJMWlJSUkgKyBpSWlpMUkxMUkxSUkxICsgSTFJaWlJICsgSUlpCiBpZiBPMG8wbyA9PSAnTm9uZScgOgogIG9vMG8wME8gKCAnW0NPTE9SPW9yYW5nZV1Tb3JyeSB0aGlzIGJ1aWxkIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZVsvQ09MT1JdJyAsICcnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgaWYgNzIgLSA3MjogT29PME8wMCArIGkxMWlJaWlJaWkgKyBJMWlpMTFpSWkxMWkKIGlmIE9PMGlpaWlpMWlpSUlpaSAhPSBpaTFJaUlJaUkxMTExMUlpIDoKICBpZiBJaW9PME8gKCApIGFuZCBPTzAwICE9ICdOb25lJyA6CiAgIGlmIDk2IC0gOTY6IG9vT28gJSBpMUlJaSAvIG8wb09PbzBPME9vbwogICBvbzBvMDBPICggJ1tDT0xPUj1kYXJrY3lhbl1PcGVuRUxFQyBGUkVTSCBJTlNUQUxMWy9DT0xPUl0nICwgT08wMCAsICdyZXN0b3JlX29wZW5lbGVjJyAsIE9vMG8gLCBpaWlpSUkxMWlJaSAsIElpaTFJMTEgLCBvb28wTyAsICcnICwgJycgLCAnJyApCiAgIGlmIDEzIC0gMTM6IElJMTExaWlpaSAtIE9vME9vbyAlIGkxMWlJaWlJaWkgKyBJSWlJaTFpSQogICBpZiA4OCAtIDg4OiBPMCAuIG9vT28gJSBJMUlpaUkKICBvbzBvMDBPICggJ1tDT0xPUj1kb2RnZXJibHVlXVN0YW5kYXJkIEluc3RhbGxbL0NPTE9SXScgLCBPMG8wbyAsICdyZXN0b3JlX2NvbW11bml0eScgLCBPbzBvICwgaWlpaUlJMTFpSWkgLCAnbWVyZ2UnICwgb29vME8gLCBvT0lpaSAsIElpaTFJMTEgLCBJMTFJSUlJICkKICBpZiAxMCAtIDEwOiBJMUlpaUkgKyBPMAogIGlmIDc1IC0gNzU6IE8wICUgaUlpaTFJMTFJMUlJMSAvIE9vT29PTzAwICUgT28gLyBJSWlpaUkxaUlJSQogIGlmIDMxIC0gMzE6IGkxMWlJaWlJaWkgKiBPb09vT08wMAogIGlmIDY5IC0gNjk6IGkxMWlJaWlJaWkKIGlmIElpaTFJMTEgIT0gJ05vbmUnIDoKICBpZiA2MSAtIDYxOiBPMAogIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV0oT3B0aW9uYWwpIEFwcGx5IGd1aXNldHRpbmdzLnhtbCBmaXhbL0NPTE9SXScgLCBJaWkxSTExICwgJ2d1aXNldHRpbmdzZml4JyAsICcnICwgaWlpaUlJMTFpSWkgLCAnJyAsICcnICkKICBpZiAyMSAtIDIxOiBPb08wTzAwICUgaUlpaTFJMTFJMUlJMSAuIE9vTzBPMDAKICBpZiA5OSAtIDk5OiBvMG9PT28wTzBPb28gKiBPbyAlIG9vT28gKiBvb09vICsgT29vb29vb29PTwpkZWYgTzBPTyAoIHVybCApIDoKIGlmIDMwIC0gMzA6IE9vT29PTzAwICogT28wT29vICUgaUlpaTFJMTFJMUlJMSAlIE9vTzBPMDAgKyBpMTFpSWlpSWlpCiBpaWkxID0gJycKIGlmIHVybCA9PSAnY3JlYXRlX3BhY2snIDoKICBpaWkxID0gb29vME8wbzAwTyAoICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQWRkb25Qb3J0YWwvYXBwcm92ZWQucGhwJyAsIDEwICkKICBJaU9vMDBPMG8wTyA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4gYnJvd3NlICggMyAsICdTZWxlY3QgdGhlIGZvbGRlciB5b3Ugd2FudCB0byBzdG9yZSB0aGlzIGZpbGUgaW4nICwgJ2ZpbGVzJyAsICcnICwgRmFsc2UgLCBGYWxzZSApCiAgSTFpSUkxSUlpMUlpSSA9IGlJaW9vMG9vTyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGtleXdvcmQiICkKICBpZiA4NiAtIDg2OiBPT09vT29vME8gKyBPMCArIE9vME9vbyAtIE9PT29Pb28wTwogIGlmICggbm90IEkxaUlJMUlJaTFJaUkgKSA6CiAgIHJldHVybiBGYWxzZSAsIDAKICAgaWYgMzQgLSAzNDogSUkxMTFpaWlpICUgSTFJaWlJICUgSUlpICsgT28wT29vIC0gT29Pb09PMDAKICBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnQmFja2luZyBVcCBBZGRvbnMgJiBSZXBvc2l0b3JpZXMnICwgJycgLCAnUGxlYXNlIFdhaXQuLi4nICkKIGlmIDY2IC0gNjY6IE8wME9PbzAwb28wbyAqIGlJaWkxSTExSTFJSTEgLSBpaWlpaWlpaTEgLyBJMUlpaUkKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG8wTzAwT28wbzAgKSA6CiAgb3MgLiBtYWtlZGlycyAoIE8wbzBPMDBPbzBvMCApCiAgaWYgNjIgLSA2MjogSUlpaWlJMWlJSUkgLiBPMCAuIGlJaWkxSTExSTFJSTEKICBpZiA5NCAtIDk0OiBpaWlpaWlpaTEgJSBPT09vT29vME8gJSBpMUlJaQogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIElJMTFpaWlpMUlpICkgOgogIGlmIG5vdCAnbWV0YWRhdGEnIGluIG9vbzBPIGFuZCBub3QgJ21vZHVsZScgaW4gb29vME8gYW5kIG5vdCAnc2NyaXB0LmNvbW1vbicgaW4gb29vME8gYW5kIG5vdCAncGFja2FnZXMnIGluIG9vbzBPIGFuZCBub3QgJ3NlcnZpY2UueGJtYy52ZXJzaW9uY2hlY2snIGluIG9vbzBPIGFuZCBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIG9vbzBPICkgKSA6CiAgIHRyeSA6CiAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgb29vME8gLCAnUGxlYXNlIFdhaXQuLi4nICkKICAgIGlmIDkwIC0gOTA6IE8wME9PbzAwb28wbyAqIE9vTzBPMDAKICAgIGlmIDcgLSA3OiBJSWlJaTFpSSAuIE8wME9PbzAwb28wbyAuIElJaUlpMWlJIC0gSUlpCiAgICBpZiBvb28wTyBpbiBpaWkxIG9yIHVybCAhPSAnY3JlYXRlX3BhY2snIDoKICAgICBpZiAzMyAtIDMzOiBpaWlpaWlpaTEgKyBPb29vb29vb09PIC0gT29PME8wMCAvIGkxSUlpIC8gT29vb29vb29PTwogICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggTzBvME8wME9vMG8wICwgJ2FkZG9ucycgLCBvb28wTyApICkgOgogICAgICBvcyAuIG1ha2VkaXJzICggb3MgLiBwYXRoIC4gam9pbiAoIE8wbzBPMDBPbzBvMCAsICdhZGRvbnMnICwgb29vME8gKSApCiAgICAgc2h1dGlsIC4gY29weWZpbGUgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyAsICdhZGRvbi54bWwnICkgLCBvcyAuIHBhdGggLiBqb2luICggTzBvME8wME9vMG8wICwgJ2FkZG9ucycgLCBvb28wTyAsICdhZGRvbi54bWwnICkgKQogICAgaWYgbm90IG9vbzBPIGluIGlpaTEgOgogICAgIHNodXRpbCAuIGNvcHl0cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgb29vME8gKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBPMG8wTzAwT28wbzAgLCAnYWRkb25zJyAsIG9vbzBPICkgKQogICAgIGlmIDgyIC0gODI6IEkxaWkxMWlJaTExaSAvIE9vIC0gSUlpSWkxaUkgLyBPbzBPb28gKiBPb08wTzAwCiAgICBvMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wbzBPMDBPbzBvMCAsICdhZGRvbnMnICwgb29vME8gLCAnYWRkb24ueG1sJyApCiAgICBpZiA1MCAtIDUwOiBPb09vT08wMCAtIG9vT28gKyBpSWlpMUkxMUkxSUkxIC0gT29PME8wMCAuIE9vME9vbwogICAgaWYgOCAtIDg6IE8wME9PbzAwb28wbwogICAgaWYgMzAgLSAzMDogaTFJSWkKICAgIElJaUlpSSA9IG9wZW4gKCBvMDBPICwgbW9kZSA9ICdyJyApCiAgICBpaTFJMSA9IElJaUlpSSAuIHJlYWQgKCApCiAgICBJSWlJaUkgLiBjbG9zZSAoICkKICAgIGlmIDYxIC0gNjE6IElJaSAvIElJaQogICAgaWYgMjYgLSAyNjogSUlpaWlJMWlJSUkgLiBPMCAqIElJaWlpSTFpSUlJIC0gbzBvT09vME8wT29vICogT28wT29vCiAgICBPb29Pb29PME8wbzAgPSByZSAuIGNvbXBpbGUgKCAnPGFkZG9uW1xzXFNdKj8iPicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgICBJSUlJSUkxMTFJaSA9IE9vb09vb08wTzBvMCBbIDAgXSBpZiAoIGxlbiAoIE9vb09vb08wTzBvMCApID4gMCApIGVsc2UgJ05vbmUnCiAgICBJSTEgPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iW1xzXFNdKj8iJyApIC4gZmluZGFsbCAoIElJSUlJSTExMUlpICkKICAgIGlpSTFpSSA9IElJMSBbIDAgXSBpZiAoIGxlbiAoIElJMSApID4gMCApIGVsc2UgJzAnCiAgICBpZiA3NCAtIDc0OiBJSWlpaUkxaUlJSSAtIE8wIC8gSUlpICogTzAwT09vMDBvbzBvICUgaWlpaWlpaWkxIC4gSUlpCiAgICBpZiA2MCAtIDYwOiBJMWlpMTFpSWkxMWkgLiBJSTExMWlpaWkgKiBpMTFpSWlpSWlpIC4gbzBvT09vME8wT29vCiAgICBvMDBvb08wMDBPbzAwID0gc3RyICggSUlJSUlJMTExSWkgKSAuIHJlcGxhY2UgKCBpaUkxaUkgLCAndmVyc2lvbj0iMC4wLjAuMSInICkKICAgIE9PTyA9IGlpMUkxIC4gcmVwbGFjZSAoIElJSUlJSTExMUlpICwgbzAwb29PMDAwT28wMCApCiAgICBpZiA0MyAtIDQzOiBPb08wTzAwIC4gaWlpaWlpaWkxICogT28wT29vCiAgICBpMWlpSSA9IG9wZW4gKCBvMDBPICwgbW9kZSA9ICd3JyApCiAgICBpMWlpSSAuIHdyaXRlICggc3RyICggT09PICkgKQogICAgaTFpaUkgLiBjbG9zZSAoICkKICAgIGlmIDIwIC0gMjA6IGkxSUlpIC4gaTFJSWkgLSBPT09vT29vME8KICAgZXhjZXB0IDoKICAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgICBwcmludCAiIyMjIEZhaWxlZCB0byBjcmVhdGU6ICIgKyBvb28wTyArICcgIyMjJwogICAgIGlmIDg5IC0gODk6IGlpaWlpaWlpMSAtIE9PT29Pb28wTyAuIE8wICUgT29vb29vb29PTyAuIGkxMWlJaWlJaWkKIGlmIHVybCA9PSAnY3JlYXRlX3BhY2snIDoKICBJSWlpaTExaWkxSUkxID0gWyAnLnN2bicgLCAnLmdpdCcgXQogIG8wT08wMDBPID0gWyAnLkRTX1N0b3JlJyAsICdUaHVtYnMuZGInICwgJy5naXRpZ25vcmUnIF0KICBJaUlJaUlJMUkgPSBvcyAuIHBhdGggLiBqb2luICggSWlPbzAwTzBvME8gLCBvMDBPTzBvMCArICcuemlwJyApCiAgaWlJSWlpICggTzBvME8wME9vMG8wICwgSWlJSWlJSTFJICwgJ0NyZWF0aW5nIEFkZG9ucyBBcmNoaXZlJyAsICcnICwgJycgLCAnJyAsIElJaWlpMTFpaTFJSTEgLCBvME9PMDAwTyApCiAgdHJ5IDoKICAgc2h1dGlsIC4gcm10cmVlICggTzBvME8wME9vMG8wICkKICBleGNlcHQgOgogICBwYXNzCiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnTmV3IEtleXdvcmQgQ3JlYXRlZCcgLCAnUGxlYXNlIHJlYWQgdGhlIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc2hhcmUgdGhpcyBrZXl3b3JkIHdpdGggdGhlIGNvbW11bml0eS4gWW91ciB6aXAgZmlsZSBjYW4gYmUgZm91bmQgYXQ6JyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgSWlJSWlJSTFJICsgJ1svQ09MT1JdJyApCiAgaWYgOTIgLSA5MjogSUlpICUgTzAwT09vMDBvbzBvCiAgaWYgMzAgLSAzMDogSUkxMTFpaWlpIC0gbzBvT09vME8wT29vICUgSUlpIC4gT09Pb09vbzBPCmRlZiBvbzBvICggbmFtZSApIDoKIGlmIDc1IC0gNzU6IElJaUlpMWlJICsgaUlpaTFJMTFJMUlJMQogSTFJMUlJaWlpaTFpaSA9IG9wZW4gKCBPMDAwb28wTyAsIG1vZGUgPSAncicgKQogaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKIGkxaU9PID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiBPTzAwT29vb08gPSBpMWlPTyBbIDAgXSBpZiAoIGxlbiAoIGkxaU9PICkgPiAwICkgZWxzZSAnTm9uZScKIElJMTExSWlpaUkxID0gWyBdCiBpZiA5OCAtIDk4OiBPb09vT08wMCAtIE9vT29PTzAwIC4gSUkxMTFpaWlpIC4gSUlpSWkxaUkgKyBPMAogaWYgMjggLSAyODogSUlpaWlJMWlJSUkgKyBpMTFpSWlpSWlpICsgT29vb29vb29PTyAvIE9vTzBPMDAKIGlmIE9PMDBPb29vTyA9PSAnTm9uZScgb3IgT08wME9vb29PID09ICd1bmtub3duJyA6CiAgTzBpMUkxMUkgPSAwCiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnTm8gUHJvZmlsZSBTZXQnICwgIlRoZXJlJ3Mgbm8gcHJvZmlsZSBuYW1lIHNldCB0byB0aGUgYnVpbGQgeW91J3JlIGN1cnJlbnRseSBydW5uaW5nLiBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIGJ1aWxkIHNvIHdlIGNhbiBzYXZlIGl0IGFuZCBtYWtlIHN1cmUgbm8gZGF0YSBpcyBsb3N0LiIgKQogIEkxaUlJMUlJaTFJaUkgPSBpSWlvbzBvb08gKCBoZWFkaW5nID0gIkVudGVyIGEgbmFtZSBmb3IgdGhpcyBiYWNrdXAiICkKICBpZiAoIG5vdCBJMWlJSTFJSWkxSWlJICkgOgogICByZXR1cm4gRmFsc2UgLCAwCiAgSTFpSUkxSUlpMUlpSSA9IEkxaUlJMUlJaTFJaUkgLiByZXBsYWNlICggJyAnICwgJ18nICkKICBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSUkgLCBvMDBPTzBvMCApICkgOgogICBPMGkxSTExSSA9IDAKICAgd2hpbGUgbm90IE8waTFJMTFJIDoKICAgIGlJMTExSTExSTFJMSAuIG9rICggJ1BST0ZJTEUgQUxSRUFEWSBFWElTVFMnICwgIlRoZXJlIGlzIGFscmVhZHkgYSBwcm9maWxlIG9uIHlvdXIgc3lzdGVtIHdpdGggdGhpcyBuYW1lLiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgbmFtZSBmb3IgdGhpcyBwcm9maWxlLiIgKQogICAgSTFpSUkxSUlpMUlpSSA9IGlJaW9vMG9vTyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciBleGlzdGluZyBwcm9maWxlIiApCiAgICBpZiAoIG5vdCBJMWlJSTFJSWkxSWlJICkgOgogICAgIHJldHVybiBGYWxzZSAsIDAKICAgIEkxaUlJMUlJaTFJaUkgPSBJMWlJSTFJSWkxSWlJIC4gcmVwbGFjZSAoICcgJyAsICdfJyApCiAgICBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSUkgLCBvMDBPTzBvMCApICkgOgogICAgIE8waTFJMTFJID0gMQogICAgIGlmIDYgLSA2OiBJMUlpaUkgLSBpMTFpSWlpSWlpCiAgb3MgLiBtYWtlZGlycyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIG8wME9PMG8wICkgKQogIE8wME8wTzBPTzAwb28gPSBvMDBPTzBvMAogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggTzAwMG9vME8gLCAndycgKQogIE9PTyA9IGlpMUkxIC4gcmVwbGFjZSAoICdpZD0iTm9uZSInICwgJ2lkPSJMb2NhbCInICkgLiByZXBsYWNlICggJ25hbWU9Ik5vbmUiJyAsICduYW1lPSInICsgc3RyICggTzAwTzBPME9PMDBvbyApICsgJyInICkKICBJMUkxSUlpaWlpMWlpIC4gd3JpdGUgKCBPT08gKQogIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKICBpZiAzOSAtIDM5OiBJSWlpaUkxaUlJSSAlIE9vT29PTzAwICogSTFpaTExaUlpMTFpIC0gT29vb29vb29PTyAtIE9vME9vbwogIGlmIDc1IC0gNzU6IGkxMWlJaWlJaWkgLiBpaWlpaWlpaTEgJSBpMUlJaSAuIEkxSWlpSSAtIG9vT28gKyBPbzBPb28KICBmb3IgaTFJSTEgaW4gb3MgLiBsaXN0ZGlyICggT08wbyApIDoKICAgSUkxMTFJaWlpSTEgLiBhcHBlbmQgKCBpMUlJMSApCiAgIGlmIDY2IC0gNjY6IG9vT28gJSBJMWlpMTFpSWkxMWkgLiBJSTExMWlpaWkgLyBPb09vT08wMCAvIE9vTzBPMDAKICBJMWlpMWlJID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIG8wME9PMG8wICwgJ2FkZG9ubGlzdCcgKSAsIG1vZGUgPSAndysnICkKICBmb3IgaTFJSTEgaW4gb3MgLiBsaXN0ZGlyICggSUkxMWlpaWkxSWkgKSA6CiAgIGlmIG5vdCBpMUlJMSBpbiBJSTExMUlpaWlJMSBhbmQgaTFJSTEgIT0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyBhbmQgaTFJSTEgIT0gJ3BhY2thZ2VzJyA6CiAgICBJMWlpMWlJIC4gd3JpdGUgKCBpMUlJMSArICd8JyApCiAgSTFpaTFpSSAuIGNsb3NlICggKQogIGlmIDMyIC0gMzI6IE9vb29vb29vT08KICBpaTExMWlJMWkxID0gWyAnYWRkb25zJyAsICdjYWNoZScgLCAnQ1BfUHJvZmlsZXMnICwgJ3N5c3RlbScgLCAndGVtcCcgLCAnVGh1bWJuYWlscycgXQogIE9PMDAwID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnLmdpdGlnbm9yZScgLCAnYWRkb25zKi5kYicgLCAndGV4dHVyZXMxMy5kYicgXQogIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiAgTzAwbzBPID0gIiIKICBPMDBvT28wTzBvMDBPID0gIlBsZWFzZSBXYWl0IgogIGlpSUlpaSAoIGlJaWkxICwgb3MgLiBwYXRoIC4gam9pbiAoIElJICwgbzAwT08wbzAgLCAnYnVpbGQuemlwJyApICwgb08wb09vbzBPICwgSUkxaUkxMSAsIE8wMG8wTyAsIE8wMG9PbzBPMG8wME8gLCBpaTExMWlJMWkxICwgT08wMDAgKQogIGlmIDc3IC0gNzc6IGlJaWkxSTExSTFJSTEgKiBvb09vCiAgaWYgMTUgLSAxNTogaUlpaTFJMTFJMUlJMSAuIE9vIC4gSTFpaTExaUlpMTFpICogaTExaUlpaUlpaQogIGlmIDcyIC0gNzI6IE9PT29Pb28wTwogZWxzZSA6CiAgTzAwTzBPME9PMDBvbyA9IE9PMDBPb29vTyAuIHJlcGxhY2UgKCAnICcgLCAnXycgKSAuIHJlcGxhY2UgKCAnOicgLCAnLScgKSAuIHJlcGxhY2UgKCAiJyIgLCAnJyApCiAgaWYgMjYgLSAyNjogSUlpaWlJMWlJSUkgJSBPbzBPb28KICBJMWlpMWlJID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIE8wME8wTzBPTzAwb28gLCAnYWRkb25saXN0JyApICwgbW9kZSA9ICd3KycgKQogIGZvciBpMUlJMSBpbiBvcyAuIGxpc3RkaXIgKCBJSTExaWlpaTFJaSApIDoKICAgaWYgbm90IGkxSUkxIGluIElJMTExSWlpaUkxIGFuZCBpMUlJMSAhPSAncGx1Z2luLnByb2dyYW0udG90YWxpbnN0YWxsZXInIGFuZCBpMUlJMSAhPSAncGFja2FnZXMnIDoKICAgIEkxaWkxaUkgLiB3cml0ZSAoIGkxSUkxICsgJ3wnICkKICBJMWlpMWlJIC4gY2xvc2UgKCApCiAgaWYgNzIgLSA3MjogTzAgKyBvMG9PT28wTzBPb28gKyBJMUlpaUkgLyBPbzBPb28KICBpaTExMWlJMWkxID0gWyAnYWRkb25zJyAsICdjYWNoZScgLCAnQ1BfUHJvZmlsZXMnICwgJ3N5c3RlbScgLCAndGVtcCcgLCAnVGh1bWJuYWlscycgXQogIE9PMDAwID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnLmdpdGlnbm9yZScgLCAnYWRkb25zKi5kYicgLCAndGV4dHVyZXMxMy5kYicgXQogIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiAgTzAwbzBPID0gIiIKICBPMDBvT28wTzBvMDBPID0gIlBsZWFzZSBXYWl0IgogIGlpSUlpaSAoIGlJaWkxICwgb3MgLiBwYXRoIC4gam9pbiAoIElJICwgTzAwTzBPME9PMDBvbyAsICdidWlsZC56aXAnICkgLCBvTzBvT29vME8gLCBJSTFpSTExICwgTzAwbzBPICwgTzAwb09vME8wbzAwTyAsIGlpMTExaUkxaTEgLCBPTzAwMCApCiByZXR1cm4gTzAwTzBPME9PMDBvbwogaWYgODMgLSA4MzogSUlpaWlJMWlJSUkgLSBJMUlpaUkgLiBPMDBPT28wMG9vMG8KIGlmIDM0IC0gMzQ6IE9vT29PTzAwIC0gb29PbyAqIE9vb29vb29vT08KZGVmIElpSTFJMUlJSWkxaSAoIGRiX3BhdGggKSA6CiBnbG9iYWwgY3VyCiBnbG9iYWwgY29uCiBjb24gPSBkYXRhYmFzZSAuIGNvbm5lY3QgKCBkYl9wYXRoICkKIGN1ciA9IGNvbiAuIGN1cnNvciAoICkKIGlmIDczIC0gNzM6IE8wICogSUlpIC4gaTFJSWkKIGlmIDUxIC0gNTE6IE9vTzBPMDAgLSBJSWlJaTFpSSAlIE8wIC0gT29Pb09PMDAKZGVmIG8wb29vICggKSA6CiBvMG9vMDBPID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggJ3NwZWNpYWw6Ly9ob21lL3VzZXJkYXRhL2FkZG9uX2RhdGEnICwgJycgKSApCiBpZiAzNiAtIDM2OiBPbyAqIE9vTzBPMDAgLSBJMWlpMTFpSWkxMWkgKyBJSWlJaTFpSQogZm9yIElJSWlpaWlpSTFJICwgSTFJSUkxMTFpICwgaWlJMWlpaSBpbiBvcyAuIHdhbGsgKCBvMG9vMDBPICkgOgogIE8wb29vTzAwb29PMCA9IDAKICBPMG9vb08wMG9vTzAgKz0gbGVuICggaWlJMWlpaSApCiAgaWYgOTkgLSA5OTogSUlpaWlJMWlJSUkKICBpZiBPMG9vb08wMG9vTzAgPj0gMCA6CiAgIGlmIDkyIC0gOTI6IE9vTzBPMDAgKyBPT09vT29vME8gLSBJSWlpaUkxaUlJSSAuIEkxaWkxMWlJaTExaSAqIGlpaWlpaWlpMSAtIGkxMWlJaWlJaWkKICAgZm9yIElJaUkxaSBpbiBpaUkxaWlpIDoKICAgIG9zIC4gdW5saW5rICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgSUlpSTFpICkgKQogICAgaWYgNzQgLSA3NDogT29PME8wMCArIElJaUlpMWlJICsgSUkxMTFpaWlpCiAgIGZvciBpaTFpaSBpbiBJMUlJSTExMWkgOgogICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgaWkxaWkgKSApCiAgICBpZiA0OCAtIDQ4OiBPb29vb29vb09PCiAgICBpZiA3NyAtIDc3OiBPMCAqIEkxaWkxMWlJaTExaSAqIG9vT28gKyBPb08wTzAwICsgSTFpaTExaUlpMTFpIC0gSUlpCmRlZiBpSTFJMUkgKCApIDoKIGZvciBpaTExIGluIGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIE9PT08wT09vTzBPMCAsICd4Ym1jX2NyYXNobG9nKi4qJyApICkgOgogIG9PT29vb29PID0gaWkxMQogIG9zIC4gcmVtb3ZlICggaWkxMSApCiAgaUkxMTFJMTFJMUkxID0geGJtY2d1aSAuIERpYWxvZyAoICkKICBpSTExMUkxMUkxSTEgLiBvayAoICJDcmFzaCBMb2dzIERlbGV0ZWQiICwgIllvdXIgb2xkIGNyYXNoIGxvZ3MgaGF2ZSBub3cgYmVlbiBkZWxldGVkLiIgKQogIGlmIDg5IC0gODk6IGlpaWlpaWlpMSAqIE8wME9PbzAwb28wbwogIGlmIDkzIC0gOTM6IGkxSUlpIC4gTzAwT09vMDBvbzBvICogSUlpIC4gaWlpaWlpaWkxCmRlZiBPME9vb29vTzBvME8wICggKSA6CiBPMGlJMUkxaWkxMUlJaTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL2hvbWUvYWRkb25zL3BhY2thZ2VzJyAsICcnICkgKQogaWYgMTAwIC0gMTAwOiBPbzBPb28gLiBPMDBPT28wMG9vMG8gLiBJMUlpaUkgJSBJSTExMWlpaWkgLSBvb09vCiBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIE8waUkxSTFpaTExSUlpMSApIDoKICBPMG9vb08wMG9vTzAgPSAwCiAgTzBvb29PMDBvb08wICs9IGxlbiAoIGlpSTFpaWkgKQogIGlmIDUyIC0gNTI6IEkxSWlpSSAlIE9vTzBPMDAgKiBPMDBPT28wMG9vMG8gKiBJSWlJaTFpSSAvIE9vCiAgaWYgTzBvb29PMDBvb08wID4gMCA6CiAgIGlmIDg4IC0gODg6IG9vT28KICAgZm9yIElJaUkxaSBpbiBpaUkxaWlpIDoKICAgIG9zIC4gdW5saW5rICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgSUlpSTFpICkgKQogICAgaWYgMSAtIDE6IE9vME9vbwogICBmb3IgaWkxaWkgaW4gSTFJSUkxMTFpIDoKICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIGlpMWlpICkgKQogICAgaWYgOTUgLSA5NTogT29vb29vb29PTyAvIE9PT29Pb28wTyAlIE9vb29vb29vT08gLyBpaWlpaWlpaTEgKiBJSWlpaUkxaUlJSQogICAgaWYgNzUgLSA3NTogTzAKZGVmIG9Pb08gKCBwYXRoICkgOgogSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ0FyZSB5b3UgY2VydGFpbj8nICwgJ1RoaXMgd2lsbCBjb21wbGV0ZWx5IHdpcGUgdGhpcyBmb2xkZXIsIGFyZSB5b3UgYWJzb2x1dGVseSBjZXJ0YWluIHlvdSB3YW50IHRvIGNvbnRpbnVlPyBUaGVyZSBpcyBOTyBnb2luZyBiYWNrIGFmdGVyIHRoaXMhJyApCiBpZiBJMWkxSTFJMTFJaWlJID09IDEgOgogIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiQ2xlYW5pbmcgRm9sZGVycyIgLCAiV2lwaW5nLi4uIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgc2h1dGlsIC4gcm10cmVlICggcGF0aCAsIGlnbm9yZV9lcnJvcnMgPSBUcnVlICkKICBPT29vTzBPT29vIC4gY2xvc2UgKCApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ2NvbnRhaW5lci5SZWZyZXNoJyApCiAgaWYgNTkgLSA1OTogT28gKyBJMUlpaUkgLyBJSTExMWlpaWkgLyBPb09vT08wMAogIGlmIDgwIC0gODA6IE9vT29PTzAwICsgaUlpaTFJMTFJMUlJMSAuIElJaWlpSTFpSUlJCmRlZiBvb09vT29vMDAwTzBPICggdXJsICkgOgogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIElJICkgOgogIGlmIG9vbzBPICE9ICdNYXN0ZXInIGFuZCBvb28wTyAhPSB1cmwgLiByZXBsYWNlICggJyAnICwgJ18nICkgLiByZXBsYWNlICggIiciICwgJycgKSAuIHJlcGxhY2UgKCAnOicgLCAnLScgKSA6CiAgIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZGFya2N5YW5dREVMRVRFWy9DT0xPUl0gJyArIG9vbzBPIC4gcmVwbGFjZSAoICdfJyAsICcgJyApICwgb3MgLiBwYXRoIC4gam9pbiAoIElJICwgb29vME8gKSAsICdkZWxldGVfcGF0aCcgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDQyIC0gNDI6IG8wb09PbzBPME9vbyAvIElJaWlpSTFpSUlJCiAgIGlmIDc5IC0gNzk6IE8wME9PbzAwb28wbwpkZWYgaUlJMWkxICggKSA6CiBvMG9vMDBPID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggJ3NwZWNpYWw6Ly9ob21lL3VzZXJkYXRhL2FkZG9uX2RhdGEnICwgJycgKSApCiBpZiAzNCAtIDM0OiBPb08wTzAwIC8gT29vb29vb29PTyAtIG9vT28gLyBvb09vICogSTFJaWlJCiBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIG8wb28wME8gKSA6CiAgTzBvb29PMDBvb08wID0gMAogIE8wb29vTzAwb29PMCArPSBsZW4gKCBpaUkxaWlpICkKICBpZiA2MSAtIDYxOiBPT09vT29vME8KICBpZiBPMG9vb08wMG9vTzAgPj0gMCA6CiAgIGlmIDgxIC0gODE6IE9PT29Pb28wTwogICBmb3IgSUlpSTFpIGluIGlpSTFpaWkgOgogICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBJSWlJMWkgKSApCiAgICBpZiA5MiAtIDkyOiBPbyAtIE9vME9vbyAtIE9vb29vb29vT08gLyBJSWlpaUkxaUlJSSAtIGkxSUlpCiAgIGZvciBpaTFpaSBpbiBJMUlJSTExMWkgOgogICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgaWkxaWkgKSApCiAgICBpZiA4MSAtIDgxOiBpMUlJaSAvIElJaSAlIGkxMWlJaWlJaWkgLiBpSWlpMUkxMUkxSUkxICogT29Pb09PMDAgKyBPb29vb29vb09PCiAgICBpZiAzMSAtIDMxOiBpMUlJaSAlIElJMTExaWlpaQpkZWYgaUkxaWlJMUlJSTFpICggKSA6CiBPT29vTzBPT29vIC4gY3JlYXRlICggJ0NoZWNraW5nIGRlcGVuZGVuY2llcycgLCAnJyAsICdQbGVhc2UgV2FpdC4uLicgKQogSWkxaWlpMTFJID0gWyBdCiBpZiAyIC0gMjogT29vb29vb29PTyAtIE8wME9PbzAwb28wbyAlIG9vT28gLyBJMUlpaUkgLyBvMG9PT28wTzBPb28KIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBJSTExaWlpaTFJaSApIDoKICBpZiBvb28wTyAhPSAncGFja2FnZXMnIDoKICAgdHJ5IDoKICAgIGlpSUkgPSBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyAsICdhZGRvbi54bWwnICkKICAgIGlJSTFJaWlJSUlJaWkgPSBvcGVuICggaWlJSSAsIG1vZGUgPSAncicgKQogICAgb09PTyA9IGlJSTFJaWlJSUlJaWkgLiByZWFkICggKQogICAgaUlJMUlpaUlJSUlpaSAuIGNsb3NlICggKQogICAgSWlpMUlpaUlJMUlpMSA9IHJlIC4gY29tcGlsZSAoICdpbXBvcnQgYWRkb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT09PICkKICAgIGlmIDI2IC0gMjY6IE9vb29vb29vT08gKyBJMUlpaUkKICAgIGZvciBJaTFpSTExMSBpbiBJaWkxSWlpSUkxSWkxIDoKICAgICBpZiA1NyAtIDU3OiBPbyAuIE8wME9PbzAwb28wbyAlIG8wb09PbzBPME9vbwogICAgIGlmIG5vdCAneGJtYy5weXRob24nIGluIElpMWlJMTExIGFuZCBub3QgSWkxaUkxMTEgaW4gSWkxaWlpMTFJIDoKICAgICAgSWkxaWlpMTFJIC4gYXBwZW5kICggSWkxaUkxMTEgKQogICAgICBwcmludCAnU2NyaXB0IFJlcXVpcmVzIC0tLSAnICsgSWkxaUkxMTEKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDMyIC0gMzI6IE9PT29Pb28wTyAvIElJaWlpSTFpSUlJIC0gTzAgKiBpSWlpMUkxMUkxSUkxCiByZXR1cm4gSWkxaWlpMTFJCiBpZiA3MCAtIDcwOiBPb29vb29vb09PICUgT29vb29vb29PTyAlIE9vTzBPMDAKIGlmIDk4IC0gOTg6IE9vTzBPMDAKZGVmIGlpMTExSWkxMWlpaSAoIG5hbWUgLCBhZGRvbl9pZCApIDoKIElpMUkxMUkgPSAxCiBvMDBvID0gMQogaWlJSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgYWRkb25faWQgLCAnYWRkb24ueG1sJyApICkKIGlJSTFJaWlJSUlJaWkgPSBvcGVuICggaWlJSSAsIG1vZGUgPSAncicgKQogb09PTyA9IGlJSTFJaWlJSUlJaWkgLiByZWFkICggKQogaUlJMUlpaUlJSUlpaSAuIGNsb3NlICggKQogSWlpMUlpaUlJMUlpMSA9IHJlIC4gY29tcGlsZSAoICdpbXBvcnQgYWRkb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT09PICkKIGlmIDE4IC0gMTg6IE9PT29Pb28wTyArIE9vME9vbyAtIE9vTzBPMDAgLyBJSWkgLyBPbwogZm9yIElpMWlJMTExIGluIElpaTFJaWlJSTFJaTEgOgogIGlmIDUzIC0gNTM6IE9vICsgbzBvT09vME8wT29vIC4gb29PbyAvIE9PT29Pb28wTwogIGlmIG5vdCAneGJtYy5weXRob24nIGluIElpMWlJMTExIDoKICAgcHJpbnQgJ1NjcmlwdCBSZXF1aXJlcyAtLS0gJyArIElpMWlJMTExCiAgIG8wMDAwb08gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIElpMWlJMTExICkgKQogICBpZiA4MyAtIDgzOiBPb08wTzAwCiAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvMDAwMG9PICkgOgogICAgaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kZXBlbmRlbmN5aW5zdGFsbC5waHA/aWQ9JXMnICUgKCBJaTFpSTExMSApCiAgICBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgICBvT29vbzAgPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKICAgIE9PMG8wb09PTzBPID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgICBvT0lJaUlpID0gcmUgLiBjb21waWxlICggJ3JlcG9fdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogICAgT09vT29vT29PT09vbyA9IHJlIC4gY29tcGlsZSAoICdkYXRhX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKICAgIElpaWkxaUkxaSA9IHJlIC4gY29tcGlsZSAoICd6aXBfdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogICAgTzBPME9vMDAgPSByZSAuIGNvbXBpbGUgKCAncmVwb19pZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKICAgIGlpaTFJaWlJaUlJaUkgPSBvT29vbzAgWyAwIF0gaWYgKCBsZW4gKCBvT29vbzAgKSA+IDAgKSBlbHNlICcnCiAgICBvT09vMG9vME8gPSBPTzBvMG9PT08wTyBbIDAgXSBpZiAoIGxlbiAoIE9PMG8wb09PTzBPICkgPiAwICkgZWxzZSAnJwogICAgbzBPb09Pb09Pb28gPSBvT0lJaUlpIFsgMCBdIGlmICggbGVuICggb09JSWlJaSApID4gMCApIGVsc2UgJycKICAgIG9vME8wID0gT09vT29vT29PT09vbyBbIDAgXSBpZiAoIGxlbiAoIE9Pb09vb09vT09Pb28gKSA+IDAgKSBlbHNlICcnCiAgICBJaTExMUlpMTEgPSBJaWlpMWlJMWkgWyAwIF0gaWYgKCBsZW4gKCBJaWlpMWlJMWkgKSA+IDAgKSBlbHNlICcnCiAgICBJaTFJSSA9IE8wTzBPbzAwIFsgMCBdIGlmICggbGVuICggTzBPME9vMDAgKSA+IDAgKSBlbHNlICcnCiAgICBJSWlJSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIE9PTzAwTyAsIGlpaTFJaWlJaUlJaUkgKyAnLnppcCcgKSApCiAgICBpZiAzOSAtIDM5OiBvMG9PT28wTzBPb28gLyBJSWlpaUkxaUlJSSAtIElJaUlpMWlJCiAgICBPT29vTzBPT29vIC4gY3JlYXRlICggJ0Rvd25sb2FkaW5nIERlcGVuZGVuY2llcycgLCAnSW5zdGFsbGluZyBbQ09MT1I9eWVsbG93XScgKyBpaWkxSWlpSWlJSWlJICwgJycgLCAnJyApCiAgICBpZiA5NiAtIDk2OiBPT09vT29vME8gKiBJMWlpMTFpSWkxMWkgKiBPMDBPT28wMG9vMG8gKyBJMWlpMTFpSWkxMWkgJSBJMUlpaUkgKyBpMTFpSWlpSWlpCiAgICB0cnkgOgogICAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIG8wT29PT29PT29vICwgSUlpSUkgLCBPT29vTzBPT29vICkKICAgICBleHRyYWN0IC4gYWxsICggSUlpSUkgLCBJSTExaWlpaTFJaSAsIE9Pb29PME9Pb28gKQogICAgIGlmIDM3IC0gMzc6IE9PT29Pb28wTyAlIEkxaWkxMWlJaTExaSAvIGlpaWlpaWlpMQogICAgZXhjZXB0IDoKICAgICBpZiA5NCAtIDk0OiBPT09vT29vME8gLyBPb08wTzAwIC4gbzBvT09vME8wT29vCiAgICAgdHJ5IDoKICAgICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggSWkxMTFJaTExICwgSUlpSUkgLCBPT29vTzBPT29vICkKICAgICAgZXh0cmFjdCAuIGFsbCAoIElJaUlJICwgSUkxMWlpaWkxSWkgLCBPT29vTzBPT29vICkKICAgICAgaWYgMSAtIDE6IE9vME9vbyAuIElJMTExaWlpaQogICAgIGV4Y2VwdCA6CiAgICAgIGlmIDkzIC0gOTM6IElJMTExaWlpaSAuIGkxMWlJaWlJaWkgKyBJSTExMWlpaWkgJSBvb09vCiAgICAgIHRyeSA6CiAgICAgICBpZiA5OCAtIDk4OiBJSWkgKiBvb09vICogT29Pb09PMDAgKyBPMDBPT28wMG9vMG8gKiBJSWlJaTFpSQogICAgICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wMDAwb08gKSA6CiAgICAgICAgb3MgLiBtYWtlZGlycyAoIG8wMDAwb08gKQogICAgICAgIGlmIDQgLSA0OiBJSWlpaUkxaUlJSQogICAgICAgTzBPb29vTzAgPSBvb28wTzBvMDBPICggb28wTzAgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgICAgICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICdocmVmPSIoLis/KSInICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgICAgICBpZiAxNiAtIDE2OiBpSWlpMUkxMUkxSUkxICogSUlpSWkxaUkgKyBvb09vIC4gTzAgLiBvMG9PT28wTzBPb28KICAgICAgIGZvciBPb29PMG9PbyBpbiBvME9PMDAwb29PbyA6CiAgICAgICAgb09PbzAwTzBPT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggbzAwMDBvTyAsIE9vb08wb09vICkgKQogICAgICAgIGlmIDk5IC0gOTk6IGkxMWlJaWlJaWkgLSBJSWlJaTFpSQogICAgICAgIGlmIGFkZG9uX2lkIG5vdCBpbiBPb29PMG9PbyBhbmQgJy8nIG5vdCBpbiBPb29PMG9PbyA6CiAgICAgICAgIGlmIDg1IC0gODU6IElJaSAlIEkxaWkxMWlJaTExaQogICAgICAgICB0cnkgOgogICAgICAgICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAnJyAsICdEb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XScgKyBPb29PMG9PbyArICdbL0NPTE9SXScgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICAgICAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIG9vME8wICsgT29vTzBvT28gLCBvT09vMDBPME9PT28gLCBPT29vTzBPT29vICkKICAgICAgICAgIGlmIDk1IC0gOTU6IE9vTzBPMDAgKiBPbyAqIElJaUlpMWlJIC4gbzBvT09vME8wT29vCiAgICAgICAgIGV4Y2VwdCA6CiAgICAgICAgICBwcmludCAiZmFpbGVkIHRvIGluc3RhbGwiICsgT29vTzBvT28KICAgICAgICAgIGlmIDczIC0gNzM6IE9vTzBPMDAKICAgICAgICBpZiAnLycgaW4gT29vTzBvT28gYW5kICcuLicgbm90IGluIE9vb08wb09vIGFuZCAnaHR0cCcgbm90IGluIE9vb08wb09vIDoKICAgICAgICAgTzBPMDBPT28gPSBvbzBPMCArIE9vb08wb09vCiAgICAgICAgIE9vT09vICggb09PbzAwTzBPT09vICwgTzBPMDBPT28gKQogICAgICAgICBpZiAyOCAtIDI4OiBPb29vb29vb09PIC0gT09Pb09vbzBPCiAgICAgIGV4Y2VwdCA6CiAgICAgICBpSTExMUkxMUkxSTEgLiBvayAoICJFcnJvciBkb3dubG9hZGluZyBkZXBlbmRlbmN5IiAsICdUaGVyZSB3YXMgYW4gZXJyb3IgZG93bmxvYWRpbmcgW0NPTE9SPWRvZGdlcmJsdWVdJyArIGlpaTFJaWlJaUlJaUkgKyAnWy9DT0xPUl0uIFBsZWFzZSBjb25zaWRlciB1cGRhdGluZyB0aGUgYWRkLW9uIHBvcnRhbCB3aXRoIGRldGFpbHMgb3IgcmVwb3J0IHRoZSBlcnJvciBvbiB0aGUgZm9ydW0gYXQgV1dXLk5PT0JTQU5ETkVSRFMuQ09NJyApCiAgICAgICBvMDBvID0gMAogICAgICAgSWkxSTExSSA9IDAKICAgICAgIGlmIDg0IC0gODQ6IElJMTExaWlpaQogICAgaWYgbzAwbyA9PSAxIDoKICAgICB0aW1lIC4gc2xlZXAgKCAxICkKICAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJbQ09MT1I9eWVsbG93XSIgKyBpaWkxSWlpSWlJSWlJICsgJ1svQ09MT1JdICBbQ09MT1I9bGltZV1TdWNjZXNzZnVsbHkgSW5zdGFsbGVkWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICB0aW1lIC4gc2xlZXAgKCAxICkKICAgICBPb28wT28wb28wID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kb3dubG9hZGNvdW50LnBocD9pZD0lcycgJSAoIElpMWlJMTExICkKICAgICB0cnkgOgogICAgICBvb28wTzBvMDBPICggT29vME9vMG9vMCAsIDUgKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKIE9Pb29PME9Pb28gLiBjbG9zZSAoICkKIHRpbWUgLiBzbGVlcCAoIDEgKQogaWYgMzYgLSAzNjogT28gLSBPb09vT08wMCAtIGlJaWkxSTExSTFJSTEKIGlmIDEwIC0gMTA6IEkxaWkxMWlJaTExaSAvIE8wME9PbzAwb28wbyAqIGkxSUlpICUgTzAgKyBPT09vT29vME8KZGVmIEkxaTFpaTFpaSAoIG5hbWUgLCB1cmwgLCBidWlsZG5hbWUgLCBhdXRob3IgLCB2ZXJzaW9uICwgZGVzY3JpcHRpb24gLCB1cGRhdGVkICwgc2tpbnMgLCB2aWRlb2FkZG9ucyAsIGF1ZGlvYWRkb25zICwgcHJvZ3JhbWFkZG9ucyAsIHBpY3R1cmVhZGRvbnMgLCBzb3VyY2VzICwgYWR1bHQgKSA6CiBvT28wME9vbzBvMCAoIGJ1aWxkbmFtZSArICcgICAgIHYuJyArIHZlcnNpb24gLCAnW0NPTE9SPXllbGxvd11bQl1BdXRob3I6ICAgWy9CXVsvQ09MT1JdJyArIGF1dGhvciArICdbQ09MT1I9eWVsbG93XVtCXSAgICAgICAgICAgICAgIExhc3QgVXBkYXRlZDogICBbL0JdWy9DT0xPUl0nICsgdXBkYXRlZCArICdbQ09MT1I9eWVsbG93XVtCXSAgICAgICAgICAgICAgIEFkdWx0IENvbnRlbnQ6ICAgWy9CXVsvQ09MT1JdJyArIGFkdWx0ICsgJ1tDUl1bQ1JdW0NPTE9SPXllbGxvd11bQl1EZXNjcmlwdGlvbjpbQ1JdWy9CXVsvQ09MT1JdJyArIGRlc2NyaXB0aW9uICsKICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVNraW5zOiAgIFsvQl1bL0NPTE9SXScgKyBza2lucyArICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVZpZGVvIEFkZG9uczogICBbL0JdWy9DT0xPUl0nICsgdmlkZW9hZGRvbnMgKyAnW0NSXVtDUl1bQ09MT1I9Ymx1ZV1bQl1BdWRpbyBBZGRvbnM6ICAgWy9CXVsvQ09MT1JdJyArIGF1ZGlvYWRkb25zICsKICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVByb2dyYW0gQWRkb25zOiAgIFsvQl1bL0NPTE9SXScgKyBwcm9ncmFtYWRkb25zICsgJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdUGljdHVyZSBBZGRvbnM6ICAgWy9CXVsvQ09MT1JdJyArIHBpY3R1cmVhZGRvbnMgKyAnW0NSXVtDUl1bQ09MT1I9Ymx1ZV1bQl1Tb3VyY2VzOiAgIFsvQl1bL0NPTE9SXScgKyBzb3VyY2VzICsKICdbQ1JdW0NSXVtDT0xPUj1vcmFuZ2VdRGlzY2xhaW1lcjogWy9DT0xPUl1UaGVzZSBhcmUgY29tbXVuaXR5IGJ1aWxkcyBhbmQgdGhleSBtYXkgb3ZlcndyaXRlIHNvbWUgb2YgeW91ciBleGlzdGluZyBzZXR0aW5ncywgJwogJ0l0XCdzIHB1cmVseSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIgdG8gY2hvb3NlIHdoZXRoZXIgb3Igbm90IHRoZXkgd2lzaCB0byBpbnN0YWxsIHRoZXNlIGJ1aWxkcywgdGhlIGluZGl2aWR1YWwgd2hvIHVwbG9hZHMgdGhlIGJ1aWxkIHNob3VsZCBzdGF0ZSB3aGF0XCdzIGluY2x1ZGVkIGFuZCB0aGVuIGl0XCdzIHRoZSB1c2VycyBkZWNpc2lvbiB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdGhhdCBjb250ZW50IGlzIHN1aXRhYmxlIGZvciB0aGVtLicgKQogaWYgMzIgLSAzMjogSUlpaWlJMWlJSUkgLyBPb29vb29vb09PCiBpZiAzMCAtIDMwOiBPb09vT08wMCAvIEkxSWlpSSAtIE9vTzBPMDAgLSBJSWlJaTFpSSAtIGkxMWlJaWlJaWkKZGVmIG9vME8wMG8wICggcGF0aCApIDoKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiQ2xlYW5pbmcgRm9sZGVycyIgLCAiV2lwaW5nLi4uIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiBzaHV0aWwgLiBybXRyZWUgKCBwYXRoICwgaWdub3JlX2Vycm9ycyA9IFRydWUgKQogaWYgNTEgLSA1MTogTzAgJSBJSTExMWlpaWkgJSBpMTFpSWlpSWlpICsgT28gLiBPb29vb29vb09PCiBpZiAxNCAtIDE0OiBPbzBPb28gKyBpMTFpSWlpSWlpIC0gb29PbyAlIElJaWlpSTFpSUlJCmRlZiBpSWkxaUlpSUlJSTFpSUkxaSAoICkgOgogSWkxSTFJaSAoICcnICwgIltJXVtCXVtDT0xPUiByZWRdISFOb3RpY2U6IERpc2FibGluZyBTb21lIEFkZG9ucyBDYW4gQ2F1c2UgSXNzdWVzISFbL0NPTE9SXVsvQl1bL0ldIiAsICcnICwgJycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPME9PMDBPb08wMCA9IGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgJyovJyApICkKIGZvciBPMDBvIGluIHNvcnRlZCAoIE8wT08wME9vTzAwICwga2V5ID0gbGFtYmRhIElpMTFJaWlpMWlpaWkgOiBJaTExSWlpaTFpaWlpICkgOgogIGlmIEkxSWlJIGluIE8wMG8gOiBjb250aW51ZQogIGlpSUkgPSBvcyAuIHBhdGggLiBqb2luICggTzAwbyAsICdhZGRvbi54bWwnICkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaUlJICkgOgogICBPME9PMDBPb08wMCA9IE8wMG8gLiByZXBsYWNlICggSUkxMWlpaWkxSWkgLCAnJyApIFsgMSA6IC0gMSBdCiAgIElJaUkxaSA9IG9wZW4gKCBpaUlJICkKICAgT08wT09vbzBPT08gPSBJSWlJMWkgLiByZWFkICggKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKSAuIHJlcGxhY2UgKCAnXHQnICwgJycgKQogICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICc8YWRkby4rP2lkPSIoLis/KSIuKz8+JyApIC4gZmluZGFsbCAoIE9PME9Pb28wT09PICkKICAgaTFJSUlJMTExMSA9IHJlIC4gY29tcGlsZSAoICc8YWRkby4rPyBuYW1lPSIoLis/KSIuKz8+JyApIC4gZmluZGFsbCAoIE9PME9Pb28wT09PICkKICAgdHJ5IDoKICAgIE9vbzBvMDAwME9PID0gbzBPTzAwMG9vT28gWyAwIF0KICAgIG9vbzBPID0gaTFJSUlJMTExMSBbIDAgXQogICBleGNlcHQgOgogICAgY29udGludWUKICAgdHJ5IDoKICAgIGlJaUkxSUkxSTEgPSB4Ym1jYWRkb24gLiBBZGRvbiAoIGlkID0gT29vMG8wMDAwT08gKQogICAgT29vaUlpSTFpMUlpID0gIltDT0xPUiBncmVlbl1bRW5hYmxlZF1bL0NPTE9SXSIKICAgIE9vMG8wMG8gPSAiZmFsc2UiCiAgIGV4Y2VwdCA6CiAgICBPb29pSWlJMWkxSWkgPSAiW0NPTE9SIHJlZF1bRGlzYWJsZWRdWy9DT0xPUl0iCiAgICBPbzBvMDBvID0gInRydWUiCiAgICBwYXNzCiAgIEkxaWlpID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMG8gLCAnaWNvbi5wbmcnICkgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIE8wMG8gLCAnaWNvbi5wbmcnICkgKSBlbHNlIE9vMDBPT09PTwogICBpaWlpSUkxMWlJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPMDBvICwgJ2ZhbmFydC5qcGcnICkgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIE8wMG8gLCAnZmFuYXJ0LmpwZycgKSApIGVsc2UgTzBvME9vCiAgIElpMUkxSWkgKCAnYWRkb24nICwgIiVzICVzIiAlICggT29vaUlpSTFpMUlpICwgb29vME8gKSAsICIlc1tdJXMiICUgKCBPME9PMDBPb08wMCAsIE9vMG8wMG8gKSAsICd0b2dnbGVhZGRvbicgLCBJMWlpaSAsIGlpaWlJSTExaUlpICwgJycgLCAnJyApCiAgIElJaUkxaSAuIGNsb3NlICggKQogICBpZiAzMiAtIDMyOiBPb09vT08wMCArIGlpaWlpaWlpMSArIE8wME9PbzAwb28wbyArIEkxSWlpSQpkZWYgSWlpSUlpSTFpSTEgKCApIDoKIG9zIC4gcmVtb3ZlICggTzAwMG9vME8gKQogb3MgLiByZW5hbWUgKCBPT09PaTExaTEgLCBPMDAwb28wTyApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVW5sb2FkU2tpbicgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlJlbG9hZFNraW4iICkKIGlJMTExSTExSTFJMSAuIG9rICggIkxvY2FsIFJlc3RvcmUgQ29tcGxldGUiICwgJ1hCTUMvS29kaSB3aWxsIG5vdyBjbG9zZS4nICwgJycgLCAnJyApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiUXVpdCIgKQogaWYgMjYgLSAyNjogSUlpSWkxaUkgLSBPbzBPb28gKyBJMUlpaUkgKyBvMG9PT28wTzBPb28KIGlmIDM3IC0gMzc6IG8wb09PbzBPME9vbyAqIE9vICsgSTFJaWlJIC4gSTFpaTExaUlpMTFpICogT29vb29vb29PTwpkZWYgSWlpSUlpSUkxMWkxICggdXJsICkgOgogT09vb08wT09vbyAuIGNyZWF0ZSAoICJDaGFuZ2luZyBQaHlzaWNhbCBQYXRocyBUbyBTcGVjaWFsIiAsICJSZW5hbWluZyBwYXRocy4uLiIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogZm9yIElJSWlpaWlpSTFJICwgSTFJSUkxMTFpICwgaWlJMWlpaSBpbiBvcyAuIHdhbGsgKCB1cmwgKSA6CiAgZm9yIGZpbGUgaW4gaWlJMWlpaSA6CiAgIGlmIGZpbGUgLiBlbmRzd2l0aCAoICIueG1sIiApIG9yIGZpbGUgLiBlbmRzd2l0aCAoICIuaGFzaCIgKSBvciBmaWxlIC4gZW5kc3dpdGggKCAicHJvcGVyaWVzIiApIDoKICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkZpeGluZyIgLCBmaWxlICwgJ1BsZWFzZSBXYWl0JyApCiAgICBPTzBPT29vME9PTyA9IG9wZW4gKCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIGZpbGUgKSApICkgLiByZWFkICggKQogICAgT29vb09PMCA9IHVybGxpYiAuIHF1b3RlICggaUlpaTEgKQogICAgb28wT29PID0gdXJsbGliIC4gcXVvdGUgKCBpSWlpMSApIC4gcmVwbGFjZSAoICclM0EnICwgJyUzYScgKSAuIHJlcGxhY2UgKCAnJTVDJyAsICclNWMnICkKICAgIGlJSWkxaWlpMSA9IE9PME9Pb28wT09PIC4gcmVwbGFjZSAoIGlJaWkxICwgJ3NwZWNpYWw6Ly9ob21lLycgKSAuIHJlcGxhY2UgKCBPb29vT08wICwgJ3NwZWNpYWw6Ly9ob21lLycgKSAuIHJlcGxhY2UgKCBvbzBPb08gLCAnc3BlY2lhbDovL2hvbWUvJyApCiAgICBJSWlJMWkgPSBvcGVuICggKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBmaWxlICkgKSAsIG1vZGUgPSAndycgKQogICAgSUlpSTFpIC4gd3JpdGUgKCBzdHIgKCBpSUlpMWlpaTEgKSApCiAgICBJSWlJMWkgLiBjbG9zZSAoICkKICAgIGlmIDY0IC0gNjQ6IGlpaWlpaWlpMSAvIGkxSUlpICUgSUlpSWkxaUkKICAgIGlmIDg0IC0gODQ6IE9vT29PTzAwIC0gT28wT29vIC4gaWlpaWlpaWkxIC4gSUlpaWlJMWlJSUkgLSBPbzBPb28KZGVmIG8wT28wb08wME9vb28gKCApIDoKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wbzBPMDBPbzBvMCApIDoKICBzaHV0aWwgLiBybXRyZWUgKCBPMG8wTzAwT28wbzAgKQogaWkxMTFpSTFpMSA9IFsgXQogT08wMDAgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICcuZ2l0aWdub3JlJyBdCiBvTzBvT29vME8gPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiBPMDAwbzAwMDBPID0gIkNyZWF0aW5nIENvbW11bml0eSBCdWlsZCIKIElJMWlJMTEgPSAiQXJjaGl2aW5nLi4uIgogTzAwbzBPID0gIiIKIE8wMG9PbzBPMG8wME8gPSAiUGxlYXNlIFdhaXQiCiBpZiAzMSAtIDMxOiBpMUlJaSAqIE9vME9vbyAlIE8wME9PbzAwb28wbyArIE9vTzBPMDAKIGlpSUlpaSAoIGlJaWkxICwgbXlmdWxsYmFja3VwICwgb08wb09vbzBPICwgSUkxaUkxMSAsIE8wMG8wTyAsIE8wMG9PbzBPMG8wME8gLCBpaTExMWlJMWkxICwgT08wMDAgKQogaWYgNzUgLSA3NTogT28gLyBJSWkgLSBJSTExMWlpaWkgJSBpMTFpSWlpSWlpICsgT29PME8wMApkZWYgaTFpaWlpaWkxICggKSA6CiBPb08wb09PT08gPSAwCiBvMG9vMDBPT09vID0gb3MgLiBwYXRoIC4gam9pbiAoICcvcHJpdmF0ZS92YXIvbW9iaWxlL0xpYnJhcnkvQ2FjaGVzL0FwcGxlVFYvVmlkZW8vJyAsICdPdGhlcicgKQogb28wb08gPSBvcyAuIHBhdGggLiBqb2luICggJy9wcml2YXRlL3Zhci9tb2JpbGUvTGlicmFyeS9DYWNoZXMvQXBwbGVUVi9WaWRlby8nICwgJ0xvY2FsdXNlcmFjY291bnRuYW1lbnRhbCcgKQogaTFpMUlJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3NjcmlwdC5tb2R1bGUuc2ltcGxlLmRvd25sb2FkZXInICkgLCAnJyApCiBvMG9vME9vbzAgPSBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3Byb2ZpbGUvYWRkb25fZGF0YS9zY3JpcHQuaW1hZ2UubXVzaWMuc2xpZGVzaG93L2NhY2hlJyApICwgJycgKQogbzBPT29PID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLmlwbGF5ZXIvaXBsYXllcl9odHRwX2NhY2hlJyApICwgJycgKQogSTFpSUkxSUkxSTFpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3BsdWdpbi52aWRlby5pdHYvSW1hZ2VzJyApICwgJycgKQogb28wT08wTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3NjcmlwdC5uYXZpLXgvY2FjaGUnICkgLCAnJyApCiBPTzBPb29PT29PMDBPTzAwID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLnBoc3RyZWFtcy9DYWNoZScgKSAsICcnICkKIGlpMTFpaTFpSWlJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3BsdWdpbi5hdWRpby5yYW1mbS9jYWNoZScgKSAsICcnICkKIE9vT28wb08wID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLndoYXR0aGVmdXJrL2NhY2hlJyApICwgJycgKQogaTExMWlJaTFpMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3BsdWdpbi52aWRlby5nZW5lc2lzJyApICwgJ2NhY2hlLmRiJyApCiBJSWlpSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpMSAsICd0ZW1wJyApCiBPT29vTzBPT29vIC4gY3JlYXRlICggJ0NhbGN1bGF0aW5nIFVzZWQgU3BhY2UnICwgJycgLCAnUGxlYXNlIHdhaXQnICwgJycgKQogaWYgNjUgLSA2NTogT29Pb09PMDAgLiBJSTExMWlpaWkgJSBJSWlJaTFpSSArIE8wME9PbzAwb28wbwogaWYgMzcgLSAzNzogb29PbyAtIGlJaWkxSTExSTFJSTEgKyBJSTExMWlpaWkgLiBPMDBPT28wMG9vMG8gJSBpSWlpMUkxMUkxSUkxCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvMG9vMDBPT09vICkgOgogIE9vTzBvT09PTyA9IGkxMWlpSSAoIG8wb28wME9PT28gLCBPb08wb09PT08gKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb28wb08gKSA6CiAgT29PMG9PT09PID0gaTExaWlJICggb28wb08gLCBPb08wb09PT08gKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaTFpMUlJaSApIDoKICBPb08wb09PT08gPSBpMTFpaUkgKCBpMWkxSUlpICwgT29PMG9PT09PICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wb28wT29vMCApIDoKICBPb08wb09PT08gPSBpMTFpaUkgKCBvMG9vME9vbzAgLCBPb08wb09PT08gKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBPT29PICkgOgogIE9vTzBvT09PTyA9IGkxMWlpSSAoIG8wT09vTyAsIE9vTzBvT09PTyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJMWlJSTFJSTFJMWlpICkgOgogIE9vTzBvT09PTyA9IGkxMWlpSSAoIEkxaUlJMUlJMUkxaWkgLCBPb08wb09PT08gKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb28wT08wTyApIDoKICBPb08wb09PT08gPSBpMTFpaUkgKCBvbzBPTzBPICwgT29PMG9PT09PICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9PME9vb09Pb08wME9PMDAgKSA6CiAgT29PMG9PT09PID0gaTExaWlJICggT08wT29vT09vTzAwT08wMCAsIE9vTzBvT09PTyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaTExaWkxaUlpSTEgKSA6CiAgT29PMG9PT09PID0gaTExaWlJICggaWkxMWlpMWlJaUkxICwgT29PMG9PT09PICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9vT28wb08wICkgOgogIE9vTzBvT09PTyA9IGkxMWlpSSAoIE9vT28wb08wICwgT29PMG9PT09PICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGkxMTFpSWkxaTEgKSA6CiAgT29PMG9PT09PID0gaTExaWlJICggaTExMWlJaTFpMSAsIE9vTzBvT09PTyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSWlpSSApIDoKICBPb08wb09PT08gPSBpMTFpaUkgKCBJSWlpSSAsIE9vTzBvT09PTyApCiBPb08wb09PT08gPSBpMTFpaUkgKCBPb29PMCAsIE9vTzBvT09PTyApCiBPb08wb09PT08gPSBpMTFpaUkgKCBPT08wME8gLCBPb08wb09PT08gKSAvIDEwMDAwMDAKIEkxaTFJMUkxMUlpaUkgPSBpSTExMUkxMUkxSTEgLiB5ZXNubyAoICdSZXN1bHRzJyAsICdZb3UgY2FuIGZyZWUgdXAgW0NPTE9SPWRvZGdlcmJsdWVdJyArIHN0ciAoIE9vTzBvT09PTyApICsgJ01CWy9DT0xPUl0gb2Ygc3BhY2UgaWYgeW91IHJ1biB0aGlzIGNsZWFudXAgcHJvZ3JhbS4gV291bGQgeW91IGxpa2UgdG8gcnVuIHRoZSBjbGVhbnVwIHByb2NlZHVyZT8nICkKIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgbzBPT09PT28wMCAoICkKICB0cnkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBPT08wME8gKQogIGV4Y2VwdCA6CiAgIHBhc3MKICBJMWkxSTFJMTFJaWlJID0gaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnVGh1bWJuYWlsIENsZWFudXAnICwgJ1dlIGhpZ2hseSByZWNvbW1lbmQgb25seSB3aXBpbmcgeW91ciBPTEQgdW51c2VkIHRodW1ibmFpbHMuIERvIHlvdSB3YW50IHRvIGNsZWFyIGp1c3QgdGhlIG9sZCBvbmVzIG9yIGFsbCB0aHVtYm5haWxzPycgLCB5ZXNsYWJlbCA9ICdBTEwnICwgbm9sYWJlbCA9ICdPTEQgT05MWScgKQogIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgIElpaWlJMTEgKCApCiAgIG9vME8wMG8wICggT29vTzAgKQogICBPb29vT09vMG9PTyAoICkKICBlbHNlIDoKICAgaWkxSUlpaSAoICkKICAgaWYgNDQgLSA0NDogT28gJSBpSWlpMUkxMUkxSUkxCiAgIGlmIDMwIC0gMzA6IGkxMWlJaWlJaWkgLSBJMUlpaUkgLyBJMWlpMTFpSWkxMWkKZGVmIEkxSUlpSWkxaUkgKCB1cmwgKSA6CiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQW5pbWUnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWFuaW1lJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQXVkaW9ib29rcycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YXVkaW9ib29rcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0NvbWVkeScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Y29tZWR5JyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQ29taWNzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1jb21pY3MnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdEb2N1bWVudGFyeScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9ZG9jdW1lbnRhcnknICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdEb3dubG9hZHMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWRvd25sb2FkcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0Zvb2QnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWZvb2QnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdHYW1pbmcnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWdhbWluZycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0hlYWx0aCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9aGVhbHRoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnSG93IFRvLi4uJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1ob3d0bycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0tpZHMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWtpZHMnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdMaXZlIFRWJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1saXZldHYnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdNb3ZpZXMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW1vdmllcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ011c2ljJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1tdXNpYycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ05ld3MnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW5ld3MnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdQaG90b3MnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXBob3RvcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1BvZGNhc3RzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1wb2RjYXN0cycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1JhZGlvJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1yYWRpbycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1JlbGlnaW9uJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1yZWxpZ2lvbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1NwYWNlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1zcGFjZScgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1Nwb3J0cycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3BvcnRzJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnVGVjaG5vbG9neScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9dGVjaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1RyYWlsZXJzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10cmFpbGVycycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ1RWIFNob3dzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10dicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ01pc2MuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1vdGhlcicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogaWYgODcgLSA4NzogbzBvT09vME8wT29vIC8gSUlpaWlJMWlJSUkgLyBpMTFpSWlpSWlpCiBpZiBvME8gLiBnZXRTZXR0aW5nICggJ2FkdWx0JyApID09ICd0cnVlJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1hYWCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YWR1bHQnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiA5NSAtIDk1OiBpMUlJaSAvIE8wME9PbzAwb28wbyAvIE8wME9PbzAwb28wbwogIGlmIDY1IC0gNjU6IElJaSArIElJaUlpMWlJICogSUlpSWkxaUkKZGVmIGkxMWlpSSAoIHBhdGggLCBzaXplICkgOgogZm9yIE9vT08gLCBpSU8wb09vbzAwT28wTyAsIElpaTFpMUlpIGluIG9zIC4gd2FsayAoIHBhdGggKSA6CiAgZm9yIElJaUkxaSBpbiBJaWkxaTFJaSA6CiAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkNhbHVsYXRpbmcuLi4iICwgJ1tDT0xPUj1kb2RnZXJibHVlXScgKyBJSWlJMWkgKyAnWy9DT0xPUl0nICwgJ1BsZWFzZSBXYWl0JyApCiAgIElJSTFpSWlpID0gb3MgLiBwYXRoIC4gam9pbiAoIE9vT08gLCBJSWlJMWkgKQogICBzaXplICs9IG9zIC4gcGF0aCAuIGdldHNpemUgKCBJSUkxaUlpaSApCiByZXR1cm4gc2l6ZQogaWYgOSAtIDk6IGkxSUlpIC0gT29Pb09PMDAKZGVmIGlJaW9vMG9vTyAoIGRlZmF1bHQgPSAiIiAsIGhlYWRpbmcgPSAiIiAsIGhpZGRlbiA9IEZhbHNlICkgOgogT28wMG8wT09vME9PID0geGJtYyAuIEtleWJvYXJkICggZGVmYXVsdCAsIGhlYWRpbmcgLCBoaWRkZW4gKQogT28wMG8wT09vME9PIC4gZG9Nb2RhbCAoICkKIGlmICggT28wMG8wT09vME9PIC4gaXNDb25maXJtZWQgKCApICkgOgogIHJldHVybiB1bmljb2RlICggT28wMG8wT09vME9PIC4gZ2V0VGV4dCAoICkgLCAidXRmLTgiICkKIHJldHVybiBkZWZhdWx0CiBpZiAxOCAtIDE4OiBpaWlpaWlpaTEgLSBJSWlpaUkxaUlJSSAvIElJMTExaWlpaSAvIEkxaWkxMWlJaTExaQpkZWYgaTFJaTFJaWlJaTFJSSAoICkgOgogaW1wb3J0IHRyYWNlYmFjawogaWYgNTQgLSA1NDogTzAwT09vMDBvbzBvICUgaTFJSWkKIG9vb09Pb28wID0gdHJhY2ViYWNrIC4gcHJpbnRfZXhjICggKQogeGJtYyAuIGxvZyAoICcjIyMgRVJST1IgU1RSSU5HOiAlcycgJSBvb29PT29vMCApCiBpZiA3OSAtIDc5OiBPb29vb29vb09PIC0gaWlpaWlpaWkxICogTzAwT09vMDBvbzBvIC0gSUkxMTFpaWlpICUgT29Pb09PMDAgKiBJSWlpaUkxaUlJSQogaWYgMzEgLSAzMTogSTFJaWlJCmRlZiBpMTFpaUkgKCBwYXRoICwgc2l6ZSApIDoKIGZvciBPb09PICwgaUlPMG9Pb28wME9vME8gLCBJaWkxaTFJaSBpbiBvcyAuIHdhbGsgKCBwYXRoICkgOgogIGZvciBJSWlJMWkgaW4gSWlpMWkxSWkgOgogICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJDYWxjdWxhdGluZy4uLiIgLCAnW0NPTE9SPWRvZGdlcmJsdWVdJyArIElJaUkxaSArICdbL0NPTE9SXScgLCAnUGxlYXNlIFdhaXQnICkKICAgSUlJMWlJaWkgPSBvcyAuIHBhdGggLiBqb2luICggT29PTyAsIElJaUkxaSApCiAgIHNpemUgKz0gb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIElJSTFpSWlpICkKIHJldHVybiBzaXplCiBpZiAzNiAtIDM2OiBPb08wTzAwICsgT29PME8wMCArIE9vTzBPMDAgJSBPbzBPb28gKiBJSWlJaTFpSQogaWYgOTggLSA5ODogT09Pb09vbzBPIC4gT09Pb09vbzBPIC8gT28wT29vIC8gTzAwT09vMDBvbzBvIC8gSTFJaWlJCmRlZiBvTzBvICggKSA6CiBpMUkxaUkxID0gWyBdCiBvT09vTyA9IHN5cyAuIGFyZ3YgWyAyIF0KIGlmIGxlbiAoIG9PT29PICkgPj0gMiA6CiAgaWlpMWkxSWlpaWlpaSA9IHN5cyAuIGFyZ3YgWyAyIF0KICBPT29vMCA9IGlpaTFpMUlpaWlpaWkgLiByZXBsYWNlICggJz8nICwgJycgKQogIGlmICggaWlpMWkxSWlpaWlpaSBbIGxlbiAoIGlpaTFpMUlpaWlpaWkgKSAtIDEgXSA9PSAnLycgKSA6CiAgIGlpaTFpMUlpaWlpaWkgPSBpaWkxaTFJaWlpaWlpIFsgMCA6IGxlbiAoIGlpaTFpMUlpaWlpaWkgKSAtIDIgXQogIElpMTFJMWlJSWkgPSBPT29vMCAuIHNwbGl0ICggJyYnICkKICBpMUkxaUkxID0geyB9CiAgZm9yIE8wb29PIGluIHJhbmdlICggbGVuICggSWkxMUkxaUlJaSApICkgOgogICBpSU9PID0geyB9CiAgIGlJT08gPSBJaTExSTFpSUlpIFsgTzBvb08gXSAuIHNwbGl0ICggJz0nICkKICAgaWYgKCBsZW4gKCBpSU9PICkgKSA9PSAyIDoKICAgIGkxSTFpSTEgWyBpSU9PIFsgMCBdIF0gPSBpSU9PIFsgMSBdCiAgICBpZiA0IC0gNDogTzAwT09vMDBvbzBvICUgSTFpaTExaUlpMTFpICsgT09Pb09vbzBPIC0gSTFpaTExaUlpMTFpCiByZXR1cm4gaTFJMWlJMQogaWYgOTggLSA5ODogTzAwT09vMDBvbzBvIC0gTzAgKiBvb09vICogTzAwT09vMDBvbzBvICogTzAwT09vMDBvbzBvCmRlZiBpMTFJaUlJICggKSA6CiBJSW8wbzBPME8wMG9PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL2hvbWUnICwgJ2FkZG9ucycgKSApCiBPT29vTzBPT29vID0geGJtY2d1aSAuIERpYWxvZ1Byb2dyZXNzICggKQogT09vb08wT09vbyAuIGNyZWF0ZSAoICJHb3RoYW0gQWRkb24gRml4IiAsICJQbGVhc2Ugd2FpdCB3aGlsc3QgeW91ciBhZGRvbnMiICwgJycgLCAnYXJlIGJlaW5nIG1hZGUgR290aGFtIGNvbXBhdGlibGUuJyApCiBpZiA1MyAtIDUzOiBPb08wTzAwICUgSTFpaTExaUlpMTFpIC4gSUlpSWkxaUkgLiBpMUlJaSAuIE9vTzBPMDAKIGZvciBpaTExIGluIGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIElJbzBvME8wTzAwb09PbyAsICcqLionICkgKSA6CiAgaWYgMjYgLSAyNjogSTFJaWlJICUgT29Pb09PMDAKICBmb3IgZmlsZSBpbiBnbG9iIC4gZ2xvYiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaTExICwgJyouKicgKSApIDoKICAgaWYgNjcgLSA2NzogT28wT29vIC0gSUlpaWlJMWlJSUkgKiBPMDBPT28wMG9vMG8gLiBPb29vb29vb09PIC8gaTExaUlpaUlpaQogICBpZiAnYWRkb24ueG1sJyBpbiBmaWxlIDoKICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkZpeGluZyIgLCBmaWxlICwgJ1BsZWFzZSBXYWl0JyApCiAgICBPTzBPT29vME9PTyA9IG9wZW4gKCBmaWxlICkgLiByZWFkICggKQogICAgaUlJaTFpaWkxID0gT08wT09vbzBPT08gLiByZXBsYWNlICggJ2FkZG9uPSJ4Ym1jLnB5dGhvbiIgdmVyc2lvbj0iMS4wIicgLCAnYWRkb249InhibWMucHl0aG9uIiB2ZXJzaW9uPSIyLjEuMCInICkgLiByZXBsYWNlICggJ2FkZG9uPSJ4Ym1jLnB5dGhvbiIgdmVyc2lvbj0iMi4wIicgLCAnYWRkb249InhibWMucHl0aG9uIiB2ZXJzaW9uPSIyLjEuMCInICkKICAgIElJaUkxaSA9IG9wZW4gKCBmaWxlICwgbW9kZSA9ICd3JyApCiAgICBJSWlJMWkgLiB3cml0ZSAoIHN0ciAoIGlJSWkxaWlpMSApICkKICAgIElJaUkxaSAuIGNsb3NlICggKQogICAgaWYgNjEgLSA2MTogbzBvT09vME8wT29vICUgSTFJaWlJICogaTFJSWkgLyBJMUlpaUkgLyBJSTExMWlpaWkgKyBJSWkKIGlJMTExSTExSTFJMSA9IHhibWNndWkgLiBEaWFsb2cgKCApCiBpSTExMUkxMUkxSTEgLiBvayAoICJZb3VyIGFkZG9ucyBoYXZlIG5vdyBiZWVuIG1hZGUgY29tcGF0aWJsZSIgLCAiSWYgeW91IHN0aWxsIGZpbmQgeW91IGhhdmUgYWRkb25zIHRoYXQgYXJlbid0IHdvcmtpbmcgcGxlYXNlIHJ1biB0aGUgYWRkb24gc28gaXQgdGhyb3dzIHVwIGEgc2NyaXB0IGVycm9yLCB1cGxvYWQgYSBsb2cgYW5kIHBvc3QgZGV0YWlscyBvbiB0aGUgcmVsZXZhbnQgc3VwcG9ydCBmb3J1bS4iICkKIGlmIDIyIC0gMjI6IElJaWlpSTFpSUlJIC4gSUlpSWkxaUkgKyBPbzBPb28KZGVmIElJSUlpSTFpaTEgKCApIDoKIGlmIGlJMTExSTExSTFJMSAuIHllc25vICggJ0NvbnZlcnQgQWRkb25zIFRvIEdvdGhhbScgLCAnVGhpcyB3aWxsIGVkaXQgeW91ciBhZGRvbi54bWwgZmlsZXMgc28gdGhleSBzaG93IGFzIEdvdGhhbSBjb21wYXRpYmxlLiBJdFwncyBkb3VidGZ1bCB0aGlzIHdpbGwgaGF2ZSBhbnkgZWZmZWN0IG9uIHdoZXRoZXIgb3Igbm90IHRoZXkgd29yayBidXQgaXQgd2lsbCBnZXQgcmlkIG9mIHRoZSBhbm5veWluZyBpbmNvbXBhdGlibGUgcG9wLXVwIG1lc3NhZ2UuIERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgKSA6CiAgaTExSWlJSSAoICkKICBpZiA3MyAtIDczOiBPMDBPT28wMG9vMG8KICBpZiAxMyAtIDEzOiBPT09vT29vME8gLSBPb29vb29vb09PIC8gaWlpaWlpaWkxCmRlZiBJaWlvME9vMG9PICggKSA6CiBJMUlJMUkxMUkxSSA9IDAKIG9vT28wID0gb3MgLiBsaXN0ZGlyICggT09PTzBPT29PME8wICkKIGZvciBpMUlJMSBpbiBvb09vMCA6CiAgaWYgaTFJSTEgLiBlbmRzd2l0aCAoICcubG9nJyApIGFuZCBub3QgaTFJSTEgLiBlbmRzd2l0aCAoICcub2xkLmxvZycgKSA6CiAgIG15bG9nID0gb3MgLiBwYXRoIC4gam9pbiAoIE9PT08wT09vTzBPMCAsIGkxSUkxICkKICAgbGFzdG1vZGlmaWVkID0gb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBteWxvZyApCiAgIGlmIGxhc3Rtb2RpZmllZCA+IEkxSUkxSTExSTFJIDoKICAgIEkxSUkxSTExSTFJID0gbGFzdG1vZGlmaWVkCiAgICBsb2dmaWxlID0gbXlsb2cKICAgIGlmIDQxIC0gNDE6IElJaSArIE9vTzBPMDAgKiBJMUlpaUkgKiBPMCAqIE9vME9vbyAtIE9vT29PTzAwCiBvb29vT29vMDAgPSBvcGVuICggbG9nZmlsZSAsICdyJyApCiBJSUlJaWkxMTExaTEgPSBvb29vT29vMDAgLiByZWFkICggKQogb29vb09vbzAwIC4gY2xvc2UgKCApCiByZXR1cm4gSUlJSWlpMTExMWkxCiBpZiAxMSAtIDExOiBPb09vT08wMAogaWYgMzEgLSAzMTogSUkxMTFpaWlpICogTzAwT09vMDBvbzBvIC8gSUlpaWlJMWlJSUkgLyBpMTFpSWlpSWlpCmRlZiBPTyAoIHVybCApIDoKIGlmIG8wTyAuIGdldFNldHRpbmcgKCAnYWR1bHQnICkgPT0gJ3RydWUnIDoKICBPT09paSA9ICd5ZXMnCiAgaWYgNjAgLSA2MDogaTExaUlpaUlpaSAuIE8wICogaUlpaTFJMTFJMUlJMSAqIE9vT29PTzAwCiBlbHNlIDoKICBPT09paSA9ICdubycKICBpZiA5OSAtIDk5OiBpSWlpMUkxMUkxSUkxIC0gb29PbyAtIE9vT29PTzAwIC8gaUlpaTFJMTFJMUlJMSAqIE9vME9vbyAtIG9vT28KIGlmIHVybCA9PSAncG9wdWxhcicgOgogIG8wb29vMG9vb08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL3BvcHVsYXJfbmV3LnBocD9hZHVsdD0lcycgJSAoIE9PT2lpICkKIGVsaWYgdXJsID09ICdsYXRlc3QnIDoKICBvMG9vbzBvb29PID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9sYXRlc3RfbmV3LnBocD9hZHVsdD0lcycgJSAoIE9PT2lpICkKIGVsaWYgdXJsICE9ICdwb3B1bGFyJyBhbmQgdXJsICE9ICdsYXRlc3QnIDoKICBvMG9vbzBvb29PID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9zb3J0YnlfbmV3LnBocD9zb3J0eD1uYW1lJnVzZXI9JXMmYWR1bHQ9JXMmJXMnICUgKCBPbzBvTzBvb28gLCBPT09paSAsIHVybCApCiAgeGJtYyAuIGxvZyAoIG8wb29vMG9vb08gKQogIGlmIG5vdCAiZGVzYyIgaW4gdXJsIDoKICAgdXJsID0gdXJsICsgJyZkZXNjPScKICBpZiBub3QgImdlbnJlIiBpbiB1cmwgOgogICB1cmwgPSB1cmwgKyAnJmdlbnJlPScKIHByaW50ICJVUkw6ICIgKyBvMG9vbzBvb29PCiBpZiA4OSAtIDg5OiBpMUlJaQogTzBPb29vTzAgPSBvb28wTzBvMDBPICggbzBvb28wb29vTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIGlmIDE5IC0gMTk6IGlpaWlpaWlpMSAvIG8wb09PbzBPME9vbyAlIElJaWlpSTFpSUlJIC0gTzAwT09vMDBvbzBvCiBpZiAxNCAtIDE0OiBJMWlpMTFpSWkxMWkgLSBpMTFpSWlpSWlpICogSUlpCiBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSIgIDxicj4gZG93bmxvYWRzPSIoLis/KSIgIDxicj4gaWNvbj0iKC4rPykiICA8YnI+IGJyb2tlbj0iKC4rPykiICA8YnI+IGlkPSIoLis/KSIgIDxicj4gVUlEPSIoLis/KSIgIDxicj4nICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpZiBvME9PMDAwb29PbyA9PSBbIF0gOgogIGlmIDM5IC0gMzk6IE9vb29vb29vT08KICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSIgPGJyPiBkb3dubG9hZHM9IiguKz8pIiA8YnI+IGljb249IiguKz8pIiA8YnI+IGJyb2tlbj0iKC4rPykiIDxicj4gaWQ9IiguKz8pIiA8YnI+IFVJRD0iKC4rPykiIDxicj4nICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgaWYgMTkgLSAxOTogaTExaUlpaUlpaQogaWYgbzBPTzAwMG9vT28gIT0gWyBdIGFuZCB1cmwgIT0gJ3BvcHVsYXInIGFuZCB1cmwgIT0gJ2xhdGVzdCcgOgogIG9PT09PT29PT29vMCAoIG8wb29vMG9vb08gLCAnYWRkb25zJyApCiAgaWYgOTMgLSA5MzogSUkxMTFpaWlpICogT29Pb09PMDAgJSBvMG9PT28wTzBPb28KICBmb3Igb29vME8gLCBPME9PTzBPT29vbzAwICwgSTFpaWkgLCBpaTFpaTExMSAsIE9Pb09PMCAsIGlpSWkxaUkgaW4gbzBPTzAwMG9vT28gOgogICB0cnkgOgogICAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IE9Pb09PMCApIC4gZ2V0QWRkb25JbmZvICggJ3BhdGgnICkKICAgIG9PTzAwbzBvbzBPTyA9ICdbQ09MT1I9bGltZV1bSU5TVEFMTEVEXVsvQ09MT1JdICcKICAgZXhjZXB0IDoKICAgIG9PTzAwbzBvbzBPTyA9ICcnCiAgICBpZiAxNiAtIDE2OiBJSWlJaTFpSSAtIGkxSUlpICsgbzBvT09vME8wT29vICogaUlpaTFJMTFJMUlJMSArIG9vT28gLiBvb09vCiAgIGlmIGlpMWlpMTExID09ICcwJyA6CiAgICBJaTFJMUlpICggJ2FkZG9uZm9sZGVyJyAsIG9PTzAwbzBvbzBPTyArIG9vbzBPICsgJyBbJyArIE8wT09PME9Pb29vMDAgKyAnIGRvd25sb2Fkc10nICwgaWlJaTFpSSAsICdhZGRvbl9maW5hbF9tZW51JyAsIEkxaWlpICwgJycgLCAnJyApCiAgICBpZiA4NSAtIDg1OiBJSWkgLiBJSWlpaUkxaUlJSSAtIGlpaWlpaWlpMSAvIElJMTExaWlpaSAqIElJaQogICBpZiBpaTFpaTExMSA9PSAnMScgOgogICAgSWkxSTFJaSAoICdhZGRvbmZvbGRlcicgLCBvT08wMG8wb28wT08gKyAnW0NPTE9SPXJlZF0nICsgb29vME8gKyAnIFtSRVBPUlRFRCBBUyBCUk9LRU5dWy9DT0xPUl0nICwgaWlJaTFpSSAsICdhZGRvbl9maW5hbF9tZW51JyAsIEkxaWlpICwgJycgLCAnJyApCiAgICBpZiA5OCAtIDk4OiBpSWlpMUkxMUkxSUkxICsgaTExaUlpaUlpaSAqIEkxaWkxMWlJaTExaSAvIElJaSAvIGlpaWlpaWlpMSAtIE8wCiBlbGlmIG8wT08wMDBvb09vICE9IFsgXSBhbmQgKCB1cmwgPT0gJ3BvcHVsYXInIG9yIHVybCA9PSAnbGF0ZXN0JyApIDoKICBmb3Igb29vME8gLCBPME9PTzBPT29vbzAwICwgSTFpaWkgLCBpaTFpaTExMSAsIE9Pb09PMCAsIGlpSWkxaUkgaW4gbzBPTzAwMG9vT28gOgogICB0cnkgOgogICAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IE9Pb09PMCApIC4gZ2V0QWRkb25JbmZvICggJ3BhdGgnICkKICAgIG9PTzAwbzBvbzBPTyA9ICdbQ09MT1I9bGltZV1bSU5TVEFMTEVEXVsvQ09MT1JdICcKICAgZXhjZXB0IDoKICAgIG9PTzAwbzBvbzBPTyA9ICcnCiAgICBpZiA0MiAtIDQyOiBJSWlJaTFpSQogICBpZiBpaTFpaTExMSA9PSAnMCcgOgogICAgSWkxSTFJaSAoICdhZGRvbmZvbGRlcicgLCBvT08wMG8wb28wT08gKyBvb28wTyArICcgWycgKyBPME9PTzBPT29vbzAwICsgJyBkb3dubG9hZHNdJyAsIGlpSWkxaUkgLCAnYWRkb25fZmluYWxfbWVudScgLCBJMWlpaSAsICcnICwgJycgKQogICAgaWYgNzcgLSA3NzogaTFJSWkgKiBvb09vICUgT29vb29vb29PTyArIE8wICogaWlpaWlpaWkxCiAgIGlmIGlpMWlpMTExID09ICcxJyA6CiAgICBJaTFJMUlpICggJ2FkZG9uZm9sZGVyJyAsIG9PTzAwbzBvbzBPTyArICdbQ09MT1I9cmVkXScgKyBvb28wTyArICcgW1JFUE9SVEVEIEFTIEJST0tFTl1bL0NPTE9SXScgLCBpaUlpMWlJICwgJ2FkZG9uX2ZpbmFsX21lbnUnICwgSTFpaWkgLCAnJyAsICcnICkKICAgIGlmIDI4IC0gMjg6IE9PT29Pb28wTyAuIE9vb29vb29vT08gKiBPbyArIGkxMWlJaWlJaWkgJSBJMUlpaUkgLiBpSWlpMUkxMUkxSUkxCiBlbGlmICcmcmVkaXJlY3QnIGluIHVybCA6CiAgSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ05vIENvbnRlbnQgRm91bmQnICwgJ1RoaXMgYWRkLW9uIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgQWRkLW9uIFBvcnRhbC4nICwgJycgLCAnV291bGQgeW91IGxpa2UgdG8gcmVtb3ZlIHRoaXMgaXRlbSBmcm9tIHlvdXIgc2V0dXA/JyApCiAgaWYgNjMgLSA2MzogSUkxMTFpaWlpIC0gT09Pb09vbzBPIC4gT29Pb09PMDAKICBpZiBJMWkxSTFJMTFJaWlJID09IDEgOgogICBwcmludCAiIyMjIE5lZWQgdG8gYWRkIHJlbW92ZSBmdW5jdGlvbiB0byBjb2RlIHN0aWxsIgogICBpZiA4IC0gODogSTFJaWlJICogaWlpaWlpaWkxIC8gSUlpaWlJMWlJSUkgKyBPb09vT08wMCAuIElJaWlpSTFpSUlJIC0gT28KIGVsc2UgOgogIGlJMTExSTExSTFJMSAuIG9rICggJ05vIENvbnRlbnQgRm91bmQnICwgJ1NvcnJ5IG5vIGNvbnRlbnQgY2FuIGJlIGZvdW5kIHRoYXQgbWF0Y2hlcycgLCAneW91ciBzZWFyY2ggY3JpdGVyaWEuJyAsICcnICkKICBpZiA4MCAtIDgwOiBpSWlpMUkxMUkxSUkxIC8gb29PbyAqIE9vME9vbyAtIE9vICogSUlpSWkxaUkKICBpZiA5NyAtIDk3OiBJSWlpaUkxaUlJSSAtIE9PT29Pb28wTyAvIElJMTExaWlpaQpkZWYgSTExaWkxaSAoIHVybCApIDoKIGlmIHppcCA9PSAnJyA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnU3RvcmFnZS9Eb3dubG9hZCBGb2xkZXIgTm90IFNldCcgLCAnWW91IGhhdmUgbm90IHNldCB5b3VyIGJhY2t1cCBzdG9yYWdlIGZvbGRlci5cblBsZWFzZSB1cGRhdGUgdGhlIGFkZG9uIHNldHRpbmdzIGFuZCB0cnkgYWdhaW4uJyAsICcnICwgJycgKQogIG8wTyAuIG9wZW5TZXR0aW5ncyAoIHN5cyAuIGFyZ3YgWyAwIF0gKQogIGlmIDUwIC0gNTA6IGlJaWkxSTExSTFJSTEgLSBPT09vT29vME8gJSBJSWlJaTFpSSAtIE9vME9vbwogaWYgbzBPIC4gZ2V0U2V0dGluZyAoICdhZHVsdCcgKSA9PSAndHJ1ZScgOgogIE9PT2lpID0gJycKICBpZiA1MiAtIDUyOiBvb09vICsgTzAwT09vMDBvbzBvIC0gSTFpaTExaUlpMTFpICogTzAwT09vMDBvbzBvIC4gT28gKyBJSWkKIGVsc2UgOgogIE9PT2lpID0gJ25vJwogIGlmIDQzIC0gNDM6IEkxSWlpSSAlIElJaWlpSTFpSUlJICUgSTFpaTExaUlpMTFpCiBpZiAnZ2VucmUnIGluIHVybCA6CiAgbzBvb28wb29vTyA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9zb3J0X2J5X3Rlc3QucGhwP3NvcnR4PW5hbWUmb3JkZXJ4PUFTQyZhZHVsdD0lcyYlcycgJSAoIE9PT2lpICwgdXJsICkKIGVsc2UgOgogIG8wb29vMG9vb08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvc29ydF9ieV90ZXN0LnBocD9zb3J0eD1uYW1lJm9yZGVyeD1BU0MmZ2VucmU9JmFkdWx0PSVzJiVzJyAlICggT09PaWkgLCB1cmwgKQogaWYgb09Pb28wME8wTyA9PSAndHJ1ZScgOgogIHhibWMgLiBsb2cgKCAiQlVJTEQgVVJMOiAlcyIgJSBvMG9vbzBvb29PICkKIE8wT29vb08wID0gb29vME8wbzAwTyAoIG8wb29vMG9vb08gLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpZiA1MyAtIDUzOiBvb09vICUgT28gJSBJMWlpMTFpSWkxMWkgLiBJSWkgLiBJSWkgLiBJSWlJaTFpSQogbzBPTzAwMG9vT28gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiICA8YnI+IGlkPSIoLis/KSIgIDxicj4gVGh1bWJuYWlsPSIoLis/KSIgIDxicj4gRmFuYXJ0PSIoLis/KSIgIDxicj4gZG93bmxvYWRzPSIoLis/KSIgIDxicj4gPGJyPicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlmIG8wT08wMDBvb09vID09IFsgXSA6CiAgaWYgNzMgLSA3MzogSUlpSWkxaUkgLyBpaWlpaWlpaTEgKyBPb08wTzAwIC8gT29Pb09PMDAgLiBJSTExMWlpaWkgKiBPMDBPT28wMG9vMG8KICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSIgPGJyPiBpZD0iKC4rPykiIDxicj4gVGh1bWJuYWlsPSIoLis/KSIgPGJyPiBGYW5hcnQ9IiguKz8pIiA8YnI+IGRvd25sb2Fkcz0iKC4rPykiIDxicj4gPGJyPicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlmIG5vdCAnJnZpc2liaWxpdHk9cHJpdmF0ZScgaW4gdXJsIDoKICBvT09PT09vT09vbzAgKCB1cmwgLCAnY29tbXVuaXR5YnVpbGRzJyApCiAgaWYgMjEgLSAyMTogSTFJaWlJIC0gSTFJaWlJICsgSUlpSWkxaUkgJSBJMUlpaUkgKiBvb09vCiBmb3Igb29vME8gLCBpZCAsIE8wbzAgLCBvb09vME8wICwgTzBPT08wT09vb28wMCBpbiBvME9PMDAwb29PbyA6CiAgb28wbzAwTyAoIG9vbzBPICsgJ1tDT0xPUj1saW1lXSAoJyArIE8wT09PME9Pb29vMDAgKyAnIGRvd25sb2FkcylbL0NPTE9SXScgLCBpZCArIHVybCAsICdjb21tdW5pdHlfbWVudScgLCBPMG8wICwgb29PbzBPMCAsIGlkICwgJycgLCAnJyAsICcnICwgJycgKQogIGlmIDkwIC0gOTA6IEkxSWlpSSAqIEkxaWkxMWlJaTExaSAuIE9PT29Pb28wTyAqIE8wME9PbzAwb28wbyAtIG8wb09PbzBPME9vbwogaWYgJ2lkPTEnIGluIHVybCA6IG8wb29vMG9vb08gPSBJMTEKIGlmICdpZD0yJyBpbiB1cmwgOiBvMG9vbzBvb29PID0gb09vMG9vb28wMG8KIGlmICdpZD0zJyBpbiB1cmwgOiBvMG9vbzBvb29PID0gb28wbzBPMDAKIGlmICdpZD00JyBpbiB1cmwgOiBvMG9vbzBvb29PID0gaTFpaUlJaWlJMTExCiBpZiAnaWQ9NScgaW4gdXJsIDogbzBvb28wb29vTyA9IGkxaWlJSUkxMTFpaQogaWYgNDAgLSA0MDogTzAgLyBJSWlpaUkxaUlJSSAtIElJMTExaWlpaSArIG8wb09PbzBPME9vbyAlIE9vME9vbwogTzBPb29vTzAgPSBvb28wTzBvMDBPICggbzBvb28wb29vTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIG8wT08wMDBvb09vID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIi4rP3JsPSIoLis/KSIuKz9tZz0iKC4rPykiLis/YW5hcnQ9IiguKz8pIi4rP2VzY3JpcHRpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBpZiA5MyAtIDkzOiBpaWlpaWlpaTEKIGZvciBvb28wTyAsIHVybCAsIE9vMG8gLCBpaWlpSUkxMWlJaSAsIE8wME9vIGluIG8wT08wMDBvb09vIDoKICBpZiBub3QgJ3ZpZXdwb3J0JyBpbiBvb28wTyA6CiAgIElpMUkxSWkgKCAnYWRkb24nICwgb29vME8gLCB1cmwgLCAncmVzdG9yZV9sb2NhbF9DQicgLCBPbzBvICwgaWlpaUlJMTFpSWkgLCBPMDBPbyAsICcnICkKICAgaWYgODIgLSA4MjogSTFpaTExaUlpMTFpIC8gaWlpaWlpaWkxIC4gaTExaUlpaUlpaSArIE9vIC0gT29Pb09PMDAgLyBJSWlJaTFpSQogICBpZiA5OSAtIDk5OiBvb09vIC8gaTFJSWkKZGVmIElpaW8wT28wb08gKCBmaWxlID0gRmFsc2UgLCBvbGQgPSBGYWxzZSApIDoKIEkxSUkxSTExSTFJID0gMAogb29PbzAgPSBvcyAuIGxpc3RkaXIgKCBPT09PME9Pb08wTzAgKQogaUlvT08wT08wMCA9IFsgXQogaWYgNzUgLSA3NTogSUlpSWkxaUkgKiBPbzBPb28gLyBJSWkgKiBPbzBPb28gLyBpaWlpaWlpaTEKIGZvciBpMUlJMSBpbiBvb09vMCA6CiAgaWYgb2xkID09IFRydWUgYW5kIGkxSUkxIC4gZW5kc3dpdGggKCAnLm9sZC5sb2cnICkgOiBpSW9PTzBPTzAwIC4gYXBwZW5kICggb3MgLiBwYXRoIC4gam9pbiAoIE9PT08wT09vTzBPMCAsIGkxSUkxICkgKQogIGVsaWYgb2xkID09IEZhbHNlIGFuZCBpMUlJMSAuIGVuZHN3aXRoICggJy5sb2cnICkgYW5kIG5vdCBpMUlJMSAuIGVuZHN3aXRoICggJy5vbGQubG9nJyApIDogaUlvT08wT08wMCAuIGFwcGVuZCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPT09PME9Pb08wTzAgLCBpMUlJMSApICkKICBpZiAxNCAtIDE0OiBpMUlJaSAqIGlJaWkxSTExSTFJSTEgLSBPMDBPT28wMG9vMG8gKiBPb09vT08wMCAtIElJaUlpMWlJIC8gb29PbwogaWYgbGVuICggaUlvT08wT08wMCApID4gMCA6CiAgaUlvT08wT08wMCAuIHNvcnQgKCBrZXkgPSBsYW1iZGEgSUlpSTFpIDogb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBJSWlJMWkgKSApCiAgaWYgZmlsZSA9PSBUcnVlIDogcmV0dXJuIGlJb09PME9PMDAgWyAtIDEgXQogIGVsc2UgOgogICBvb29vT29vMDAgPSBvcGVuICggaUlvT08wT08wMCBbIC0gMSBdICwgJ3InICkKICAgSUlJSWlpMTExMWkxID0gb29vb09vbzAwIC4gcmVhZCAoICkKICAgb29vb09vbzAwIC4gY2xvc2UgKCApCiAgIHJldHVybiBJSUlJaWkxMTExaTEKIGVsc2UgOgogIHJldHVybiBGYWxzZQogIGlmIDczIC0gNzM6IEkxaWkxMWlJaTExaSAtIE9vT29PTzAwICogTzAgLSBPb09vT08wMCAtIE9vTzBPMDAKICBpZiA5NiAtIDk2OiBJMWlpMTFpSWkxMWkgLSBPMApkZWYgSTFpTzAwTzAwMG9PTzBvTyAoIHVybCAsIGxvY2FsICkgOgogb09PME9PT09PbzBPbyAoICkKIEkxaTFJMUkxMUlpaUkgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggb29vME8gLCAnVGhpcyB3aWxsIG92ZXItd3JpdGUgeW91ciBleGlzdGluZyBndWlzZXR0aW5ncy54bWwuJyAsICdBcmUgeW91IHN1cmUgdGhpcyBpcyB0aGUgYnVpbGQgeW91IGhhdmUgaW5zdGFsbGVkPycgLCAnJyAsIG5vbGFiZWwgPSAnTm8sIENhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIEZpeCcgKQogaWYgODggLSA4ODogbzBvT09vME8wT29vIC4gSTFJaWlJICUgb29PbyAuIE9vME9vbyAlIGlpaWlpaWlpMSAuIG9vT28KIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgT29PMG9vT09vbyAoIHVybCAsIGxvY2FsICkKICBpZiA5NSAtIDk1OiBPbzBPb28gKiBPbyArIEkxSWlpSSAuIE8wCmRlZiBJSWlJaTFJSTFJaUkgKCBwYXRoICkgOgogaWYgOTkgLSA5OTogT28wT29vCiBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIGlJaTFpaTFJMSAsIG1vZGUgPSAncicgKQogaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKIGlmIDE3IC0gMTc6IGkxMWlJaWlJaWkgLSBpMTFpSWlpSWlpICsgSTFpaTExaUlpMTFpICogaWlpaWlpaWkxICogb29PbyAvIE9vb29vb29vT08KIGkxSUkxMTFpaTFpaSA9IHJlIC4gY29tcGlsZSAoICc8c2tpbnNldHRpbmdzPltcc1xTXSo/PFwvc2tpbnNldHRpbmdzPicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiBPMG9vT29PME9PMDAwID0gcmUgLiBjb21waWxlICggJzxza2luIGRlZmF1bHRbXHNcU10qPzxcL3NraW4+JyApIC4gZmluZGFsbCAoIGlpMUkxICkKIE9Pb09PTyA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogSUlJMSA9IGkxSUkxMTFpaTFpaSBbIDAgXSBpZiAoIGxlbiAoIGkxSUkxMTFpaTFpaSApID4gMCApIGVsc2UgJycKIE8wMG9PT29PT09PTyA9IE8wb29Pb08wT08wMDAgWyAwIF0gaWYgKCBsZW4gKCBPMG9vT29PME9PMDAwICkgPiAwICkgZWxzZSAnJwogaWkxSUlpaUlpMTExMUlpMSA9IE9Pb09PTyBbIDAgXSBpZiAoIGxlbiAoIE9Pb09PTyApID4gMCApIGVsc2UgJycKIGlmIDMxIC0gMzE6IG8wb09PbzBPME9vbyAqIE9PT29Pb28wTyAtIGkxMWlJaWlJaWkgLSBJMUlpaUkKIGlmIDE5IC0gMTk6IElJaUlpMWlJIC4gT09Pb09vbzBPICogT29vb29vb29PTyAtIE9vICsgTzAgKiBJSWkKIGlJMSA9IG9wZW4gKCBwYXRoICwgbW9kZSA9ICdyJyApCiBpSUlJSTEgPSBpSTEgLiByZWFkICggKQogaUkxIC4gY2xvc2UgKCApCiBpZiA5MCAtIDkwOiBpMUlJaSAuIG9vT28gLyBJSWkgLiBPbyAvIElJaQogaTExMTFJMWlpaTEgPSByZSAuIGNvbXBpbGUgKCAnPHNraW5zZXR0aW5ncz5bXHNcU10qPzxcL3NraW5zZXR0aW5ncz4nICkgLiBmaW5kYWxsICggaUlJSUkxICkKIG8wT28wMG8wID0gcmUgLiBjb21waWxlICggJzxza2luIGRlZmF1bHRbXHNcU10qPzxcL3NraW4+JyApIC4gZmluZGFsbCAoIGlJSUlJMSApCiBpMTFJSSA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggaUlJSUkxICkKIG9PT29PbzBPb28gPSBpMTExMUkxaWlpMSBbIDAgXSBpZiAoIGxlbiAoIGkxMTExSTFpaWkxICkgPiAwICkgZWxzZSAnJwogbzBPT29Pb28wMCA9IG8wT28wMG8wIFsgMCBdIGlmICggbGVuICggbzBPbzAwbzAgKSA+IDAgKSBlbHNlICcnCiBPbzBPb28wID0gaTExSUkgWyAwIF0gaWYgKCBsZW4gKCBpMTFJSSApID4gMCApIGVsc2UgJycKIE9PTyA9IGlpMUkxIC4gcmVwbGFjZSAoIElJSTEgLCBvT09vT28wT29vICkgLiByZXBsYWNlICggaWkxSUlpaUlpMTExMUlpMSAsIE9vME9vbzAgKSAuIHJlcGxhY2UgKCBPMDBvT09vT09PT08gLCBvME9Pb09vbzAwICkKIGlmIDE5IC0gMTk6IGkxSUlpICUgT29PME8wMCAtIEkxaWkxMWlJaTExaSAuIElJaSAuIE8wME9PbzAwb28wbwogcHJpbnQgIiMjIyBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBuZXcgZ3Vpc2V0dGluZ3MgYXQ6ICIgKyBwYXRoCiBPb29vb09Pb28wID0gb3BlbiAoIHBhdGggLCBtb2RlID0gJ3crJyApCiBPb29vb09Pb28wIC4gd3JpdGUgKCBzdHIgKCBPT08gKSApCiBPb29vb09Pb28wIC4gY2xvc2UgKCApCiBpZiAxOSAtIDE5OiBJMWlpMTFpSWkxMWkgLyBJSWkKIGlmIDM1IC0gMzU6IE9vME9vbyAqIG9vT28gLyBPb29vb29vb09PICsgTzAgLyBPb29vb29vb09PIC8gT28KZGVmIE9vTzBvb09Pb28gKCB1cmwgLCBsb2NhbCApIDoKIE8waTFJMTFJID0gRmFsc2UKIElpTzBvID0gMAogb09vME9vb28gPSAxCiBpZiAzOSAtIDM5OiBPMDBPT28wMG9vMG8gJSBpMUlJaSAuIEkxaWkxMWlJaTExaSAtIE8wCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvb09vb28wMDBvT08gKSA6CiAgb3MgLiByZW1vdmUgKCBvb09vb28wMDBvT08gKQogIGlmIDY1IC0gNjU6IG9vT28gKiBvb09vIC8gT09Pb09vbzBPICsgb29PbyAlIGlpaWlpaWlpMSArIE9vT29PTzAwCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvMCApIDoKICBvcyAuIHJlbW92ZSAoIG8wICkKICBpZiA5MiAtIDkyOiBvMG9PT28wTzBPb28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9Pb09vb09vMG8wICkgOgogIG9zIC4gcmVtb3ZlICggb09vT29vT28wbzAgKQogIGlmIDM3IC0gMzc6IG9vT28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPbzBvT09vICkgOgogIG9zIC4gbWFrZWRpcnMgKCBPbzBvT09vICkKICBpZiAxOCAtIDE4OiBJSWlpaUkxaUlJSSAqIGkxMWlJaWlJaWkgKyBpSWlpMUkxMUkxSUkxICUgT09Pb09vbzBPICsgaTFJSWkgLSBPb08wTzAwCiAgaWYgODUgLSA4NTogT29PME8wMCAqIE9PT29Pb28wTyArIE9vTzBPMDAKIHRyeSA6CiAgc2h1dGlsIC4gY29weWZpbGUgKCBpSWkxaWkxSTEgLCBvb09vb28wMDBvT08gKQogIGlmIDM5IC0gMzk6IE9vME9vbyAvIGkxSUlpICUgaTFJSWkKIGV4Y2VwdCA6CiAgcHJpbnQgIk5vIGd1aXNldHRpbmdzIGZvdW5kLCBtb3N0IGxpa2VseSBkdWUgdG8gYSBwcmV2aW91c2x5IGZhaWxlZCBhdHRlbXB0IGF0IGluc3RhbGwiCiAgaWYgMjAgLSAyMDogT28gKiBvb09vCiBpZiBsb2NhbCAhPSAxIDoKICBPT09vb29PbzAwTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnZ3VpZml4LnppcCcgKQogIGlmIDYgLSA2OiBPb29vb29vb09PIC0gT28wT29vCiAgdHJ5IDoKICAgT09vb08wT09vbyAuIGNyZWF0ZSAoICdEb3dubG9hZGluZyBTa2luIEZpeCcgLCAnJyAsICcnICwgJycgKQogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCB1cmwgLCBPT09vb29PbzAwTyApCiAgZXhjZXB0IDoKICAgcHJpbnQgIkZhaWxlZCB0byBkb3dubG9hZCBndWlzZXR0aW5ncyIKIGVsc2UgOgogIE9PT29vb09vMDBPID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCB1cmwgKQogaWYgb09Pb28wME8wTyA9PSAndHJ1ZScgOgogIHByaW50ICIjIyMgbGliPSIgKyBPT09vb29PbzAwTwogIGlmIDUyIC0gNTI6IE9vICsgT28wT29vCiBvT29PMG9PTzBvID0gc3RyICggb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIE9PT29vb09vMDBPICkgKQogT09vb08wT09vbyAuIGNyZWF0ZSAoICJJbnN0YWxsaW5nIFNraW4gRml4IiAsICJDaGVja2luZyAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIGlmIDk0IC0gOTQ6IG9vT28gKiBPT09vT29vME8KIGV4dHJhY3QgLiBhbGwgKCBPT09vb29PbzAwTyAsIE9vMG9PT28gKQogaWYgODggLSA4ODogTzAgJSBJSWlpaUkxaUlJSSAuIElJaWlpSTFpSUlJIC4gSUlpIC8gaTFJSWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ3NjcmlwdC5za2luc2hvcnRjdXRzJyApICkgOgogIHRyeSA6CiAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgJ3NjcmlwdC5za2luc2hvcnRjdXRzJyApICkKICBleGNlcHQgOgogICBwYXNzCiAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggT28wb09PbyAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgJ3NjcmlwdC5za2luc2hvcnRjdXRzJyApICkKICBpZiAxNiAtIDE2OiBPbzBPb28gKiBJSWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ2FkZG9uX2RhdGEnICkgKSA6CiAgTzBvb08wbyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ2FkZG9uX2RhdGEnICkgLCBvT09vTzAgLCAxICkKICBpZiA0MiAtIDQyOiBPb29vb29vb09PIC0gT29Pb09PMDAgLSBPbyAqIElJaQogaWYgbG9jYWwgIT0gJ2xpYnJhcnknIG9yIGxvY2FsICE9ICd1cGRhdGVsaWJyYXJ5JyBvciBsb2NhbCAhPSAnZnJlc2gnIDoKICBpZiA5OCAtIDk4OiBPb08wTzAwIC4gaUlpaTFJMTFJMUlJMSAlIE9vME9vbyArIE9vb29vb29vT08KICB0cnkgOgogICBJSWlJaUkgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG9PT28gLCAncHJvZmlsZXMueG1sJyApICwgbW9kZSA9ICdyJyApCiAgIEkxSWkxMTFJMTExID0gSUlpSWlJIC4gcmVhZCAoICkKICAgSUlpSWlJIC4gY2xvc2UgKCApCiAgIGlmIDcgLSA3OiBJMUlpaUkKICAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG9PT28gLCAncHJvZmlsZXMueG1sJyApICkgOgogICAgaWYgNDAgLSA0MDogaWlpaWlpaWkxCiAgICBpZiBsb2NhbCA9PSBOb25lIDoKICAgICBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJLT0RJIFBST0ZJTEVTIERFVEVDVEVEIiAsICdUaGlzIGJ1aWxkIGhhcyBwcm9maWxlcyBpbmNsdWRlZCAoc3RhbmRhcmQgS29kaSBwcm9maWxlcywgbm90IENQIFByb2ZpbGVzKSwgd291bGQgeW91IGxpa2UgdG8gb3ZlcndyaXRlIHlvdXIgZXhpc3RpbmcgcHJvZmlsZXMgb3Iga2VlcCB0aGUgb25lcyB5b3UgaGF2ZT8nICwgJycgLCAnJyAsIG5vbGFiZWwgPSAnS2VlcCBteSBwcm9maWxlcycgLCB5ZXNsYWJlbCA9ICdVc2UgbmV3IHByb2ZpbGVzJyApCiAgICAgaWYgODAgLSA4MDogSTFJaWlJICogSUlpICUgb29PbyAuIGkxMWlJaWlJaWkgJSBJSWlpaUkxaUlJSQogICAgaWYgbG9jYWwgIT0gTm9uZSA6CiAgICAgSTFpMUkxSTExSWlpSSA9IDEKICAgICBpZiA0MiAtIDQyOiBPb29vb29vb09PICogSUkxMTFpaWlpCiAgICBpZiBJMWkxSTFJMTFJaWlJID09IDEgOgogICAgIE9vb29vT09vbzAgPSBvcGVuICggb09vT29vT28wbzAgLCBtb2RlID0gJ3cnICkKICAgICB0aW1lIC4gc2xlZXAgKCAxICkKICAgICBPb29vb09Pb28wIC4gd3JpdGUgKCBJMUlpMTExSTExMSApCiAgICAgdGltZSAuIHNsZWVwICggMSApCiAgICAgT29vb29PT29vMCAuIGNsb3NlICggKQogICAgIG9PbzBPb29vID0gMAogICAgIGlmIDUzIC0gNTM6IElJaSArIGkxSUlpIC4gT29PME8wMCAvIGkxMWlJaWlJaWkgKyBPMDBPT28wMG9vMG8gJSBPb09vT08wMAogIGV4Y2VwdCA6CiAgIHByaW50ICJubyBwcm9maWxlcy54bWwgZmlsZSIKICAgaWYgOSAtIDk6IGlpaWlpaWlpMSAuIE9PT29Pb28wTyAtIE9vME9vbyAuIElJaQogICBpZiAzOSAtIDM5OiBPbwogdHJ5IDoKICBvcyAuIHJlbmFtZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ2d1aXNldHRpbmdzLnhtbCcgKSAsIG8wICkKIGV4Y2VwdCA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnRklMRSBNSVNTSU5HJyAsICdObyBndWlzZXR0aW5ncy54bWwgY291bGQgYmUgZm91bmQgaW4geW91ciB6aXAgZmlsZS4gUGxlYXNlIGRvdWJsZSBjaGVjayB0aGlzIGZpbGUgaXMgYSB2YWxpZCB6aXAgYW5kIGhhc25cJ3QgYmVjb21lIGNvcnJ1cHQuJyApCiBpZiBsb2NhbCAhPSAnZnJlc2gnIDoKICBvMDBPTzAwT09vMCA9IGlJMTExSTExSTFJMSAuIHllc25vICggIktlZXAgS29kaSBTZXR0aW5ncz8iICwgJ0RvIHlvdSB3YW50IHRvIGtlZXAgeW91ciBleGlzdGluZyBLT0RJIHNldHRpbmdzICh3ZWF0aGVyLCBzY3JlZW4gY2FsaWJyYXRpb24sIFBWUiBldGMuKSBvciB3aXBlIGFuZCBpbnN0YWxsIHRoZSBvbmVzIGluIHRoaXMgYnVpbGQ/JyAsIG5vbGFiZWwgPSAnS2VlcCBteSBzZXR0aW5ncycgLCB5ZXNsYWJlbCA9ICdSZXBsYWNlIG15IHNldHRpbmdzJyApCiAgaWYgOTIgLSA5MjogT28KIGlmIGxvY2FsID09ICdmcmVzaCcgOgogIG8wME9PMDBPT28wID0gMQogIGlmIDMyIC0gMzI6IElJaUlpMWlJIC4gaUlpaTFJMTFJMUlJMSAlIE9vME9vbyAuIE9vb29vb29vT08KIGlmIG8wME9PMDBPT28wID09IDEgOgogIGlmIDgxIC0gODE6IGkxMWlJaWlJaWkgKiBJSWlJaTFpSSAuIG9vT28gKiBvb09vIC4gSUlpaWlJMWlJSUkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpSWkxaWkxSTEgKSA6CiAgIGlmIDQ3IC0gNDc6IGlJaWkxSTExSTFJSTEgJSBPT09vT29vME8gLiBPT09vT29vME8gLyBPMCAuIGkxMWlJaWlJaWkgKiBPMDBPT28wMG9vMG8KICAgdHJ5IDoKICAgIHByaW50ICIjIyMgQXR0ZW1wdGluZyB0byByZW1vdmUgZ3Vpc2V0dGluZ3MiCiAgICBvcyAuIHJlbW92ZSAoIGlJaTFpaTFJMSApCiAgICBPMGkxSTExSSA9IFRydWUKICAgIGlmIDI0IC0gMjQ6IE8wCiAgIGV4Y2VwdCA6CiAgICBwcmludCAiIyMjIFByb2JsZW0gcmVtb3ZpbmcgZ3Vpc2V0dGluZ3MiCiAgICBPMGkxSTExSSA9IEZhbHNlCiAgICBpZiAzMyAtIDMzOiBPb29vb29vb09PICsgb29PbyAqIElJMTExaWlpaSAvIE9vCiAgIHRyeSA6CiAgICBwcmludCAiIyMjIEF0dGVtcHRpbmcgdG8gcmVwbGFjZSBndWlzZXR0aW5ncyB3aXRoIG5ldyIKICAgIG9zIC4gcmVuYW1lICggbzAgLCBpSWkxaWkxSTEgKQogICAgTzBpMUkxMUkgPSBUcnVlCiAgICBpZiA4NyAtIDg3OiBPb29vb29vb09PCiAgIGV4Y2VwdCA6CiAgICBwcmludCAiIyMjIEZhaWxlZCB0byByZXBsYWNlIGd1aXNldHRpbmdzIHdpdGggbmV3IgogICAgTzBpMUkxMUkgPSBGYWxzZQogICAgaWYgMSAtIDE6IGlJaWkxSTExSTFJSTEgLyBvMG9PT28wTzBPb28KICAgIGlmIDk4IC0gOTg6IE8wICUgSTFJaWlJIC8gT29vb29vb29PTyAqIEkxaWkxMWlJaTExaSAtIG9vT28KIGlmIG8wME9PMDBPT28wID09IDAgOgogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggb29Pb29vMDAwb09PICwgbW9kZSA9ICdyJyApCiAgaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKICBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiAgaWYgNTEgLSA1MTogSUlpSWkxaUkgKyBPT09vT29vME8KICBpMUlJMTExaWkxaWkgPSByZSAuIGNvbXBpbGUgKCAnPHNraW5zZXR0aW5ncz5bXHNcU10qPzxcL3NraW5zZXR0aW5ncz4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogIE8wb29Pb08wT08wMDAgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogIE9Pb09PTyA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogIElJSTEgPSBpMUlJMTExaWkxaWkgWyAwIF0gaWYgKCBsZW4gKCBpMUlJMTExaWkxaWkgKSA+IDAgKSBlbHNlICcnCiAgTzAwb09Pb09PT09PID0gTzBvb09vTzBPTzAwMCBbIDAgXSBpZiAoIGxlbiAoIE8wb29Pb08wT08wMDAgKSA+IDAgKSBlbHNlICcnCiAgaWkxSUlpaUlpMTExMUlpMSA9IE9Pb09PTyBbIDAgXSBpZiAoIGxlbiAoIE9Pb09PTyApID4gMCApIGVsc2UgJycKICBpZiA1NCAtIDU0OiBJSTExMWlpaWkgKiBPMCAlIEkxSWlpSSAuIE9PT29Pb28wTwogIGlmIDYyIC0gNjI6IE8wME9PbzAwb28wbyAuIGkxMWlJaWlJaWkgJSBPMCAlIElJaSAtIE9vME9vbwogIGlJMSA9IG9wZW4gKCBvMCAsIG1vZGUgPSAncicgKQogIGlJSUlJMSA9IGlJMSAuIHJlYWQgKCApCiAgaUkxIC4gY2xvc2UgKCApCiAgaWYgNjkgLSA2OTogSUkxMTFpaWlpIC4gT29Pb09PMDAgKiBPb09vT08wMCAlIE8wME9PbzAwb28wbyArIEkxSWlpSQogIGkxMTExSTFpaWkxID0gcmUgLiBjb21waWxlICggJzxza2luc2V0dGluZ3M+W1xzXFNdKj88XC9za2luc2V0dGluZ3M+JyApIC4gZmluZGFsbCAoIGlJSUlJMSApCiAgbzBPbzAwbzAgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggaUlJSUkxICkKICBpMTFJSSA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggaUlJSUkxICkKICBvT09vT28wT29vID0gaTExMTFJMWlpaTEgWyAwIF0gaWYgKCBsZW4gKCBpMTExMUkxaWlpMSApID4gMCApIGVsc2UgJycKICBvME9Pb09vbzAwID0gbzBPbzAwbzAgWyAwIF0gaWYgKCBsZW4gKCBvME9vMDBvMCApID4gMCApIGVsc2UgJycKICBPbzBPb28wID0gaTExSUkgWyAwIF0gaWYgKCBsZW4gKCBpMTFJSSApID4gMCApIGVsc2UgJycKICBPT08gPSBpaTFJMSAuIHJlcGxhY2UgKCBJSUkxICwgb09Pb09vME9vbyApIC4gcmVwbGFjZSAoIGlpMUlJaWlJaTExMTFJaTEgLCBPbzBPb28wICkgLiByZXBsYWNlICggTzAwb09Pb09PT09PICwgbzBPT29Pb28wMCApCiAgaWYgMTAwIC0gMTAwOiBpMTFpSWlpSWlpIC0gT28wT29vCiAgT29vb29PT29vMCA9IG9wZW4gKCBvb09vb28wMDBvT08gLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggc3RyICggT09PICkgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA0NyAtIDQ3OiBJSWlJaTFpSSAqIE9vT29PTzAwICogSUlpaWlJMWlJSUkKICBpZiA0NiAtIDQ2OiBPMDBPT28wMG9vMG8KICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpSWkxaWkxSTEgKSA6CiAgIGlmIDQyIC0gNDI6IGlJaWkxSTExSTFJSTEKICAgdHJ5IDoKICAgIG9zIC4gcmVtb3ZlICggaUlpMWlpMUkxICkKICAgIE8waTFJMTFJID0gVHJ1ZQogICAgaWYgMzIgLSAzMjogT28wT29vIC0gTzAwT09vMDBvbzBvIC4gT29vb29vb29PTyAtIE9vb29vb29vT08gLSBPbzBPb28gLiBpSWlpMUkxMUkxSUkxCiAgIGV4Y2VwdCA6CiAgICBPMGkxSTExSSA9IEZhbHNlCiAgICBpZiAzNCAtIDM0OiBPbzBPb28KICB0cnkgOgogICBvcyAuIHJlbmFtZSAoIG9vT29vbzAwMG9PTyAsIGlJaTFpaTFJMSApCiAgIG9zIC4gcmVtb3ZlICggbzAgKQogICBPMGkxSTExSSA9IFRydWUKICAgaWYgMzEgLSAzMTogaTFJSWkgLSBPT09vT29vME8gKyBJSWkgKyBpaWlpaWlpaTEgLiBpaWlpaWlpaTEgLiBPMAogIGV4Y2VwdCA6CiAgIE8waTFJMTFJID0gRmFsc2UKICAgaWYgMzMgLSAzMzogaTFJSWkgLyBJSWlJaTFpSSAqIE9vTzBPMDAKICAgaWYgMiAtIDI6IG9vT28gLiBPbwogaWYgTzBpMUkxMUkgPT0gVHJ1ZSBvciBsb2NhbCA9PSBOb25lIDoKICBpZiA0MyAtIDQzOiBpSWlpMUkxMUkxSUkxCiAgdHJ5IDoKICAgSTFJMUlJaWlpaTFpaSA9IG9wZW4gKCBJMUlJaWlJaWlpICwgbW9kZSA9ICdyJyApCiAgIGlpMUkxID0gSTFJMUlJaWlpaTFpaSAuIHJlYWQgKCApCiAgIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKICAgaWYgMjkgLSAyOTogSUlpaWlJMWlJSUkgJSBpaWlpaWlpaTEgKyBPb08wTzAwIC4gaTFJSWkgKyBJMUlpaUkKICAgSTExMUkgPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgIG9vb09vbzBPT29PbzAgPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKICAgb08wMG9PMCA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKQogICBvMG8gPSBJMTExSSBbIDAgXSBpZiAoIGxlbiAoIEkxMTFJICkgPiAwICkgZWxzZSAnJwogICBJMUlpaSA9IG9vb09vbzBPT29PbzAgWyAwIF0gaWYgKCBsZW4gKCBvb29Pb28wT09vT28wICkgPiAwICkgZWxzZSAnJwogICBJMUlpSUkxSTFpMUkxID0gb08wMG9PMCBbIDAgXSBpZiAoIGxlbiAoIG9PMDBvTzAgKSA+IDAgKSBlbHNlICcnCiAgIGlmIDMzIC0gMzM6IG8wb09PbzBPME9vbyAtIG9vT28gJSBJMWlpMTFpSWkxMWkgKiBPT09vT29vME8gLiBPb29vb29vb09PICUgTzAwT09vMDBvbzBvCiAgIE9vb29vT09vbzAgPSBvcGVuICggTzAwMG9vME8gLCBtb2RlID0gJ3crJyApCiAgIE9vb29vT09vbzAgLiB3cml0ZSAoICdpZD0iJyArIHN0ciAoIG8wbyApICsgJyJcbm5hbWU9IicgKyBJMUlpaSArICciXG52ZXJzaW9uPSInICsgSTFJaUlJMUkxaTFJMSArICciXG5ndWk9IicgKyBvT29PMG9PTzBvICsgJyInICkKICAgT29vb29PT29vMCAuIGNsb3NlICggKQogICBpZiAyOSAtIDI5OiBJSWlJaTFpSSArIElJMTExaWlpaSAuIGkxMWlJaWlJaWkgLiBPMDBPT28wMG9vMG8gLSBPMAogICBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIEkxMWlpaTFJaSAsIG1vZGUgPSAncicgKQogICBpaTFJMSA9IEkxSTFJSWlpaWkxaWkgLiByZWFkICggKQogICBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiAgIGlmIDQ3IC0gNDc6IG9vT28gLiBJMWlpMTFpSWkxMWkgLSBpSWlpMUkxMUkxSUkxICUgSUkxMTFpaWlpIC8gT29Pb09PMDAgJSBPb29vb29vb09PCiAgIGlpSTFpSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKQogICBpaUkxMTFJMWlJaUkgPSBpaUkxaUkgWyAwIF0gaWYgKCBsZW4gKCBpaUkxaUkgKSA+IDAgKSBlbHNlICcnCiAgIE9PTyA9IGlpMUkxIC4gcmVwbGFjZSAoIGlpSTExMUkxaUlpSSAsIEkxSWlJSTFJMWkxSTEgKQogICBpZiAxMyAtIDEzOiBJSWlpaUkxaUlJSSAuIE9vME9vbyAtIE9PT29Pb28wTyAvIG9vT28gLSBPbzBPb28gLSBJMUlpaUkKICAgT29vb29PT29vMCA9IG9wZW4gKCBJMTFpaWkxSWkgLCBtb2RlID0gJ3cnICkKICAgT29vb29PT29vMCAuIHdyaXRlICggc3RyICggT09PICkgKQogICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgIG9zIC4gcmVtb3ZlICggSTFJSWlpSWlpaSApCiAgIGlmIDg0IC0gODQ6IElJMTExaWlpaQogIGV4Y2VwdCA6CiAgIE9vb29vT09vbzAgPSBvcGVuICggTzAwMG9vME8gLCBtb2RlID0gJ3crJyApCiAgIE9vb29vT09vbzAgLiB3cml0ZSAoICdpZD0iTm9uZSJcbm5hbWU9IlVua25vd24iXG52ZXJzaW9uPSJVbmtub3duIlxuZ3VpPSInICsgb09vTzBvT08wbyArICciJyApCiAgIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICAgaWYgNTcgLSA1NzogTzAgKiBpSWlpMUkxMUkxSUkxICUgTzAgLiBPb29vb29vb09PCiAgIGlmIDUzIC0gNTM6IE8wME9PbzAwb28wbyAvIEkxSWlpSSAqIE8wME9PbzAwb28wbyArIG8wb09PbzBPME9vbyArIG9vT28gLSBPbzBPb28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ3Byb2ZpbGVzLnhtbCcgKSApIDoKICBvcyAuIHJlbW92ZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ3Byb2ZpbGVzLnhtbCcgKSApCiAgdGltZSAuIHNsZWVwICggMSApCiAgaWYgMTYgLSAxNjogT29PME8wMCAlIElJaSAuIGkxSUlpIC8gSTFpaTExaUlpMTFpIC0gTzAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9vMG9PT28gKSA6CiAgb3MgLiByZW1vdmVkaXJzICggT28wb09PbyApCiAgaWYgODUgLSA4NTogaTFJSWkgLiBpMUlJaQogSWkxMWkxSTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgSTFJaUkgLCAnbm90aWZpY2F0aW9uLnR4dCcgKSApCiBpZiA3MCAtIDcwOiBJMWlpMTFpSWkxMWkgLiBJMWlpMTFpSWkxMWkgLyBPT09vT29vME8gLiBJMWlpMTFpSWkxMWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElpMTFpMUkxICkgOgogIG9zIC4gcmVtb3ZlICggSWkxMWkxSTEgKQogIGlmIDM3IC0gMzc6IGkxSUlpIC4gSUlpIC0gSUkxMTFpaWlpICUgbzBvT09vME8wT29vIC0gaTFJSWkgLiBvb09vCiBpZiBPMGkxSTExSSA9PSBUcnVlIDoKICBJaWlpSTExICggKQogIE9vb29PT28wb09PICggKQogIGlmIDM0IC0gMzQ6IGlJaWkxSTExSTFJSTEgLyBJSTExMWlpaWkKICBpZiAzIC0gMzogbzBvT09vME8wT29vIC0gT29vb29vb29PTyArIElJaUlpMWlJIC4gT09Pb09vbzBPCiAgaWYgODggLSA4ODogT09Pb09vbzBPIC0gSUlpSWkxaUkKZGVmIE9Pb09PMG9Pb29vICggKSA6CiBvMDBPTzAwT29PID0geGJtYyAuIGdldFNraW5EaXIgKCApCiBJSW8wbzBPME8wMG9PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIG8wME9PMDBPb08gKSApCiBpZiAzNCAtIDM0OiBPT09vT29vME8gJSBPbzBPb28gKyBPMDBPT28wMG9vMG8KIGZvciBJSUlpaWlpaUkxSSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggSUlvMG8wTzBPMDBvT09vICkgOgogIGlmIDkzIC0gOTM6IE8wME9PbzAwb28wbyAtIElJaSAlIE8wCiAgZm9yIElJaUkxaSBpbiBpaUkxaWlpIDoKICAgaWYgMTEgLSAxMTogaTExaUlpaUlpaQogICBpZiAnRGlhbG9nS2V5Ym9hcmQueG1sJyBpbiBJSWlJMWkgOgogICAgbzAwT08wME9vTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIElJaUkxaSApCiAgICBPTzBPT29vME9PTyA9IG9wZW4gKCBvMDBPTzAwT29PICkgLiByZWFkICggKQogICAgb29vb09vbzBPTyA9IE9PME9Pb28wT09PIC4gcmVwbGFjZSAoICc8Y29udHJvbCB0eXBlPSJsYWJlbCIgaWQ9IjMxMCInICwgJzxjb250cm9sIHR5cGU9ImVkaXQiIGlkPSIzMTIiJyApCiAgICBJSWlJMWkgPSBvcGVuICggbzAwT08wME9vTyAsIG1vZGUgPSAndycgKQogICAgSUlpSTFpIC4gd3JpdGUgKCBvb29vT29vME9PICkKICAgIElJaUkxaSAuIGNsb3NlICggKQogICAgSUlJMUlJSTExSUkgKCBvMDBPTzAwT29PICkKICAgIGlmIDYgLSA2OiBJSTExMWlpaWkKICAgIGZvciBPMG9vTyBpbiByYW5nZSAoIDQ4ICwgNTggKSA6CiAgICAgT09vMDBvb09vTzBvICggTzBvb08gLCBvMDBPTzAwT29PICkKICAgICBpZiAxIC0gMTogaWlpaWlpaWkxICUgT28wT29vIC4gb29PbwogaUkxMTFJMTFJMUkxID0geGJtY2d1aSAuIERpYWxvZyAoICkKIGlJMTExSTExSTFJMSAuIG9rICggIlNraW4gQ2hhbmdlcyBTdWNjZXNzZnVsIiAsICdBIEJJRyB0aGFuayB5b3UgdG8gTWlrZXkxMjM0IGZvciB0aGlzIGZpeC4gVGhlIGNvZGUgdXNlZCBmb3IgdGhpcyBmdW5jdGlvbiB3YXMgcG9ydGVkIGZyb20gdGhlIFh1bml0eSBNYWludGVuYW5jZSBhZGQtb24nICkKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdSZWxvYWRTa2luKCknICkKIGlmIDk4IC0gOTg6IElJMTExaWlpaSArIElJMTExaWlpaSAtIGlJaWkxSTExSTFJSTEgLiBPb09vT08wMCAuIElJaQpkZWYgT08wT29vME8wMG9vT28wbyAoICkgOgogaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnQ29udmVydCBUaGlzIFNraW4gVG8gS29kaSAoSGVsaXgpPycgLCAnVGhpcyB3aWxsIGZpeCB0aGUgcHJvYmxlbSB3aXRoIGEgYmxhbmsgb24tc2NyZWVuIGtleWJvYXJkIHNob3dpbmcgaW4gc2tpbnMgZGVzaWduZWQgZm9yIEdvdGhhbSAoYmVpbmcgcnVuIG9uIEtvZGkpLiBUaGlzIHdpbGwgb25seSBhZmZlY3QgdGhlIGN1cnJlbnRseSBydW5uaW5nIHNraW4uJyAsIG5vbGFiZWwgPSAnTm8sIENhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIEZpeCcgKSA6CiAgT09vT08wb09vb28gKCApCiAgaWYgNDAgLSA0MDogT29PME8wMCAuIE9vb29vb29vT08gKyBpMTFpSWlpSWlpCiAgaWYgOTAgLSA5MDogSUlpaWlJMWlJSUkgKiBPT09vT29vME8gJSBJSTExMWlpaWkgLyBPbwpkZWYgbzAwb08wTzAwMCAoICkgOgogaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAiSGlkZSBQYXNzd29yZHMiICwgIlRoaXMgd2lsbCBoaWRlIGFsbCB5b3VyIHBhc3N3b3JkcyBpbiB5b3VyIiAsICJhZGQtb24gc2V0dGluZ3MsIGFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBjb250aW51ZT8iICkgOgogIGZvciBJSUlpaWlpaUkxSSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggSUkxMWlpaWkxSWkgKSA6CiAgIGZvciBJSWlJMWkgaW4gaWlJMWlpaSA6CiAgICBpZiBJSWlJMWkgPT0gJ3NldHRpbmdzLnhtbCcgOgogICAgIG9PMG8wT29PT09PMDBvMCA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBJSWlJMWkgKSApIC4gcmVhZCAoICkKICAgICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICc8c2V0dGluZyBpZD0oLis/KT4nICkgLiBmaW5kYWxsICggb08wbzBPb09PT08wMG8wICkKICAgICBmb3IgTzBvb28wIGluIG8wT08wMDBvb09vIDoKICAgICAgaWYgJ3Bhc3MnIGluIE8wb29vMCA6CiAgICAgICBpZiBub3QgJ29wdGlvbj0iaGlkZGVuIicgaW4gTzBvb28wIDoKICAgICAgICB0cnkgOgogICAgICAgICBvMDBPMDBvTyA9IE8wb29vMCAuIHJlcGxhY2UgKCAnLycgLCAnIG9wdGlvbj0iaGlkZGVuIi8nICkKICAgICAgICAgSUlpSTFpID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIElJaUkxaSApICwgbW9kZSA9ICd3JyApCiAgICAgICAgIElJaUkxaSAuIHdyaXRlICggc3RyICggb08wbzBPb09PT08wMG8wICkgLiByZXBsYWNlICggTzBvb28wICwgbzAwTzAwb08gKSApCiAgICAgICAgIElJaUkxaSAuIGNsb3NlICggKQogICAgICAgIGV4Y2VwdCA6CiAgICAgICAgIHBhc3MKICBpSTExMUkxMUkxSTEgLiBvayAoICJQYXNzd29yZHMgSGlkZGVuIiAsICJZb3VyIHBhc3N3b3JkcyB3aWxsIG5vdyBzaG93IGFzIHN0YXJzIChoaWRkZW4pLCBpZiB5b3Ugd2FudCB0byB1bmRvIHRoaXMgcGxlYXNlIHVzZSB0aGUgb3B0aW9uIHRvIHVuaGlkZSBwYXNzd29yZHMuIiApCiAgaWYgNjQgLSA2NDogSTFpaTExaUlpMTFpICogTzAwT09vMDBvbzBvICogT28wT29vICUgSUlpaWlJMWlJSUkgJSBpaWlpaWlpaTEKICBpZiA1NSAtIDU1OiBJSTExMWlpaWkgLSBJSWkgLSBPbyAlIE8wME9PbzAwb28wbwpkZWYgaUkxSTFpSUkxaUlJICggdXJsICkgOgogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9Db21tdW5pdHlfQnVpbGRzL2d1aXNldHRpbmdzLnBocD9pZD0lcycgJSAoIHVybCApCiBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpMUlpMTFpaSA9IHJlIC4gY29tcGlsZSAoICdndWlzZXR0aW5ncz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElpaTFJMTEgPSBpMUlpMTFpaSBbIDAgXSBpZiAoIGxlbiAoIGkxSWkxMWlpICkgPiAwICkgZWxzZSAnTm9uZScKIGlmIDg0IC0gODQ6IGkxMWlJaWlJaWkgLyBvMG9PT28wTzBPb28gJSBpSWlpMUkxMUkxSUkxIC4gaWlpaWlpaWkxIC4gT29PME8wMCAvIElJaUlpMWlJCiBPb08wb29PT29vICggSWlpMUkxMSAsIGxvY2FsICkKIGlmIDU1IC0gNTU6IElJaUlpMWlJCiBpZiAzIC0gMzogaUlpaTFJMTFJMUlJMQpkZWYgSWlvTzBvT28gKCApIDoKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdBY3RpdmF0ZVdpbmRvdygxMDA0MCwiYWRkb25zOi8vaW5zdGFsbC8iLHJldHVybiknICkKIGlmIDQzIC0gNDM6IG9vT28gKyBPb09vT08wMCAuIEkxSWlpSSAuIGkxMWlJaWlJaWkKIGlmIDcxIC0gNzE6IG8wb09PbzBPME9vbyArIE9vIC4gT28wT29vIC0gT29Pb09PMDAgKiBpMTFpSWlpSWlpIC4gT29Pb09PMDAKZGVmIGlpICggcmVwb19pZCApIDoKIElJSTExSSA9IDEKIGkxSTFpMSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQWRkb25Qb3J0YWwvZGVwZW5kZW5jeWluc3RhbGwucGhwP2lkPSVzJyAlICggcmVwb19pZCApCiBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBvT29vbzAgPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9PMG8wb09PTzBPID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvT0lJaUlpID0gcmUgLiBjb21waWxlICggJ3JlcG9fdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT09vT29vT29PT09vbyA9IHJlIC4gY29tcGlsZSAoICdkYXRhX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIElpaWkxaUkxaSA9IHJlIC4gY29tcGlsZSAoICd6aXBfdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogTzBPME9vMDAgPSByZSAuIGNvbXBpbGUgKCAncmVwb19pZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG9vMDAwTzBvID0gb09vb28wIFsgMCBdIGlmICggbGVuICggb09vb28wICkgPiAwICkgZWxzZSAnJwogb09PbzBvbzBPID0gT08wbzBvT09PME8gWyAwIF0gaWYgKCBsZW4gKCBPTzBvMG9PT08wTyApID4gMCApIGVsc2UgJycKIG8wT29PT29PT29vID0gb09JSWlJaSBbIDAgXSBpZiAoIGxlbiAoIG9PSUlpSWkgKSA+IDAgKSBlbHNlICcnCiBvbzBPMCA9IE9Pb09vb09vT09Pb28gWyAwIF0gaWYgKCBsZW4gKCBPT29Pb29Pb09PT29vICkgPiAwICkgZWxzZSAnJwogSWkxMTFJaTExID0gSWlpaTFpSTFpIFsgMCBdIGlmICggbGVuICggSWlpaTFpSTFpICkgPiAwICkgZWxzZSAnJwogSWkxSUkgPSBPME8wT28wMCBbIDAgXSBpZiAoIGxlbiAoIE8wTzBPbzAwICkgPiAwICkgZWxzZSAnJwogbzAwb08gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wME8gLCBJaTFJSSArICcuemlwJyApICkKIGkxMUlJSTFJMUlpSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgSWkxSUkgKSApCiBpZiA3MCAtIDcwOiBJSTExMWlpaWkgKiBJSTExMWlpaWkgLiBJMUlpaUkKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnSW5zdGFsbGluZyBSZXBvc2l0b3J5JyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBpZiAxMSAtIDExOiBJSWlJaTFpSQogdHJ5IDoKICBpMU9vb08wMG9PMDBvID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9ub29ic2FuZG5lcmRzL25vb2JzYW5kbmVyZHMvYmxvYi9tYXN0ZXIvemlwcy8lcy8lcy0wLjAuMC4xLnppcD9yYXc9dHJ1ZScgJSAoIHJlcG9faWQgLCByZXBvX2lkICkKICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBpMU9vb08wMG9PMDBvICwgbzAwb08gLCBPT29vTzBPT29vICkKICB4Ym1jIC4gbG9nICggJ0Rvd25sb2FkIFVSTDogJXMnICUgaTFPb29PMDBvTzAwbyApCiAgZXh0cmFjdCAuIGFsbCAoIG8wMG9PICwgSUkxMWlpaWkxSWkgLCBPT29vTzBPT29vICkKIGV4Y2VwdCA6CiAgdHJ5IDoKICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggbzBPb09Pb09Pb28gLCBvMDBvTyAsIE9Pb29PME9Pb28gKQogICBleHRyYWN0IC4gYWxsICggbzAwb08gLCBJSTExaWlpaTFJaSAsIE9Pb29PME9Pb28gKQogIGV4Y2VwdCA6CiAgIHRyeSA6CiAgICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBJaTExMUlpMTEgLCBvMDBvTyAsIE9Pb29PME9Pb28gKQogICAgZXh0cmFjdCAuIGFsbCAoIG8wMG9PICwgSUkxMWlpaWkxSWkgLCBPT29vTzBPT29vICkKICAgZXhjZXB0IDoKICAgIHRyeSA6CiAgICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIGkxMUlJSTFJMUlpSSApIDoKICAgICAgb3MgLiBtYWtlZGlycyAoIGkxMUlJSTFJMUlpSSApCiAgICAgIGlmIDE0IC0gMTQ6IEkxaWkxMWlJaTExaSAqIE9vME9vbyArIGkxMWlJaWlJaWkgJSBPbyAtIG9vT28KICAgICBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBvbzBPMCAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICAgICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoICdocmVmPSIoLis/KSInICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgICAgaWYgMTEgLSAxMTogSTFpaTExaUlpMTFpIC8gTzAgKyBJSTExMWlpaWkKICAgICBmb3IgT29vTzBvT28gaW4gbzBPTzAwMG9vT28gOgogICAgICBvT09vMDBPME9PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMTFJSUkxSTFJaUkgLCBPb29PMG9PbyApICkKICAgICAgaWYgOTUgLSA5NTogSUlpICsgSUlpaWlJMWlJSUkgKiBpSWlpMUkxMUkxSUkxCiAgICAgIGlmIGkxMWkxaWlpSUkgbm90IGluIE9vb08wb09vIGFuZCAnLycgbm90IGluIE9vb08wb09vIDoKICAgICAgIGlmIDE3IC0gMTc6IE9vTzBPMDAgLSBPbzBPb28gKiBPMCAvIE8wME9PbzAwb28wbwogICAgICAgdHJ5IDoKICAgICAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJEb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XSIgKyBPb29PMG9PbyArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgICAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIG9vME8wICsgT29vTzBvT28gLCBvT09vMDBPME9PT28gLCBPT29vTzBPT29vICkKICAgICAgICBpZiAxOSAtIDE5OiBpMUlJaSAtIGlJaWkxSTExSTFJSTEgLiBPT09vT29vME8KICAgICAgIGV4Y2VwdCA6CiAgICAgICAgcHJpbnQgImZhaWxlZCB0byBpbnN0YWxsIiArIE9vb08wb09vCiAgICAgICAgaWYgMiAtIDI6IE8wME9PbzAwb28wbwogICAgICBpZiAnLycgaW4gT29vTzBvT28gYW5kICcuLicgbm90IGluIE9vb08wb09vIGFuZCAnaHR0cCcgbm90IGluIE9vb08wb09vIDoKICAgICAgIE8wTzAwT09vID0gb28wTzAgKyBPb29PMG9PbwogICAgICAgT29PT28gKCBvT09vMDBPME9PT28gLCBPME8wME9PbyApCiAgICAgICBpZiAxMiAtIDEyOiBpMTFpSWlpSWlpIC0gaUlpaTFJMTFJMUlJMSAqIElJaWlpSTFpSUlJICogSUlpSWkxaUkKICAgIGV4Y2VwdCA6CiAgICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiRXJyb3IgZG93bmxvYWRpbmcgcmVwb3NpdG9yeSIgLCAnVGhlcmUgd2FzIGFuIGVycm9yIGRvd25sb2FkaW5nW0NSXVtDT0xPUj1kb2RnZXJibHVlXScgKyBvbzAwME8wbyArICdbL0NPTE9SXS4gUGxlYXNlIGNvbnNpZGVyIHVwZGF0aW5nIHRoZSBhZGQtb24gcG9ydGFsIHdpdGggZGV0YWlscyBvciByZXBvcnQgdGhlIGVycm9yIG9uIHRoZSBmb3J1bSBhdCBXV1cuTk9PQlNBTkRORVJEUy5DT00nICkKICAgICBJSUkxMUkgPSAwCiAgICAgaWYgMTkgLSAxOTogTzAgKyBvb09vICsgbzBvT09vME8wT29vCiAgICAgaWYgODEgLSA4MTogaUlpaTFJMTFJMUlJMQogaWYgSUlJMTFJID09IDEgOgogIGlpSWlpaTFJSUlJSSAoIHNob3dkaWFsb2cgPSBGYWxzZSApCiAgeGJtYyAuIHNsZWVwICggMTAwMCApCiAgT08wME9PMG8wID0gJ3sianNvbnJwYyI6IjIuMCIsICJtZXRob2QiOiJBZGRvbnMuU2V0QWRkb25FbmFibGVkIiwicGFyYW1zIjp7ImFkZG9uaWQiOiIlcyIsImVuYWJsZWQiOnRydWV9fScgJSByZXBvX2lkCiAgb09PT29vT28wTyA9IHhibWMgLiBleGVjdXRlSlNPTlJQQyAoIE9PMDBPTzBvMCApCiAgeGJtYyAuIGxvZyAoIHN0ciAoIE9PMDBPTzBvMCApICkKICB4Ym1jIC4gbG9nICggc3RyICggb09PT29vT28wTyApICkKICB4Ym1jIC4gbG9nICggJyMjIyByZXBvIGluc3RhbGwgd2FzIGdvb2QnICkKICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJbQ09MT1I9eWVsbG93XSIgKyBvbzAwME8wbyArICdbL0NPTE9SXSAgW0NPTE9SPWxpbWVdU3VjY2Vzc2Z1bGx5IEluc3RhbGxlZFsvQ09MT1JdJyAsICcnICwgJ05vdyBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcycgKQogIE9Pb29PME9Pb28gLiBjbG9zZSAoICkKICBPb28wT28wb28wID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kb3dubG9hZGNvdW50LnBocD9pZD0lcycgJSAoIHJlcG9faWQgKQogIHRyeSA6CiAgIG9vbzBPMG8wME8gKCBPb28wT28wb28wICwgNSApCiAgZXhjZXB0IDoKICAgcGFzcwogIHJldHVybiBUcnVlCiBlbHNlIDoKICB4Ym1jIC4gbG9nICggJyMjIyByZXBvIGluc3RhbGwgZmFpbGVkIHJldHVybmluZyBmYWxzZScgKQogIHJldHVybiBGYWxzZQogIGlmIDUxIC0gNTE6IG8wb09PbzBPME9vbyAuIEkxaWkxMWlJaTExaSAqIE8wME9PbzAwb28wbyAvIE9vME9vbyAqIElJMTExaWlpaSAvIE8wCiAgaWYgNDQgLSA0NDogaTExaUlpaUlpaSAlIElJaSAlIG9vT28gKyBPT09vT29vME8gKiBvb09vIC4gTzAwT09vMDBvbzBvCmRlZiBPb09vME9vb28wbyAoICkgOgogb09vMDBPb28wbzAgKCAnQ3JlYXRpbmcgQSBCYWNrdXAgVG8gU2hhcmUnICwKICdbQ09MT1I9Z29sZF1USEUgT1BUSU9OUzpbL0NPTE9SXVtDUl1UaGVyZSBhcmUgMyBvcHRpb25zIHdoZW4gY2hvb3NpbmcgdG8gY3JlYXRlIGEgYmFja3VwLCB3ZSBzaGFsbCBleHBsYWluIGhlcmUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbTpbQ1JdW0NSXScKICdbQ09MT1I9ZG9kZ2VyYmx1ZV0xLiBub29ic2FuZG5lcmRzIENvbW11bml0eSBCdWlsZFsvQ09MT1JdIC0gVGhpcyBpcyBieSBmYXIgdGhlIGJlc3Qgd2F5IHRvIGNyZWF0ZSBhIGJ1aWxkIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgd2l0aCBvdGhlcnMsIGl0IHdpbGwgY3JlYXRlIGEgemlwIGZpbGUgZm9yIHlvdSB0byBzaGFyZSB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgb24gd2l0aCB0aGlzIGFkZC1vbi4gVGhlIHNpemUgb2YgdGhlIHppcCB3aWxsIGJlIGluY3JlZGlibHkgc21hbGwgY29tcGFyZWQgdG8gb3RoZXIgYmFja3VwIG9wdGlvbnMgb3V0IHRoZXJlIGFuZCBpdCB3aWxsIGFsc28gZG8gbG90cyBvZiBvdGhlciBjbGV2ZXIgc3R1ZmYgdG9vIHN1Y2ggYXMgZXJyb3IgY2hlY2tpbmcgYWdhaW5zdCB0aGUgQWRkb24gUG9ydGFsIGFuZCB0aGUgYWRkb25zIHdpbGwgYWx3YXlzIGJlIHVwZGF0ZWQgdmlhIHRoZSByZWxldmFudCBkZXZlbG9wZXIgcmVwb3NpdG9yaWVzLiBBZGRlZCB0byB0aGlzIHdoZW4gaXQgY29tZXMgdG8gdXBkYXRpbmcgaXRcJ3MgYSBicmVlemUsIG9ubHkgdGhlIG5ldyBhZGRvbnMgbm90IGFscmVhZHkgb24gdGhlIHN5c3RlbSB3aWxsIGJlIGluc3RhbGxlZCBhbmQgZm9yIHRoZSBtYWpvcml0eSBvZiBidWlsZHMgS29kaSB3b25cJ3QgZXZlbiBoYXZlIHRvIHJlc3RhcnQgYWZ0ZXIgaW5zdGFsbGluZyFbQ1JdW0NSXScKICdbQ09MT1I9ZG9kZ2VyYmx1ZV0yLiBVbml2ZXJzYWwgQnVpbGRbL0NPTE9SXSAtIFRoaXMgd2FzIHRoZSBvcmlnaW5hbCBtZXRob2QgY3JlYXRlZCBieSBUb3RhbFhCTUMsIHdlIHdvdWxkIHJlYWxseSBvbmx5IHJlY29tbWVuZCB0aGlzIGlmIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uIHlvdSB3YW50IHlvdXIgYnVpbGQgYXZhaWxhYmxlIG9uIG90aGVyIGluZmVyaW9yIHdpemFyZHMuIFRoZSB6aXAgc2l6ZSBpcyBtdWNoIGxhcmdlciBhbmQgZXZlcnkgdGltZSBzb21lb25lIHdhbnRzIHRvIHVwZGF0ZSB0aGVpciBidWlsZCB0aGV5IGhhdmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIHdob2xlIHRoaW5nIGFnYWluIHdoaWNoIGNhbiBiZSB2ZXJ5IGZydXN0cmF0aW5nIGFuZCB0aW1lIGNvbnN1bWluZy4gVGhlIHdob2xlIGJ1aWxkIGlzIGJhY2tlZCB1cCBpbiBmdWxsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcGFja2FnZXMgYW5kIHRodW1ibmFpbHMgZm9sZGVyLiBKdXN0IGxpa2UgdGhlIG9wdGlvbiBhYm92ZSBhbGwgcGh5c2ljYWwgcGF0aHMgKHNvIGxvbmcgYXMgdGhleSBleGlzdCBzb21ld2hlcmUgaW4gdGhlIEtvZGkgZW52aXJvbm1lbnQpIHdpbGwgYmUgY2hhbmdlZCB0byBzcGVjaWFsIHBhdGhzIHNvIHRoZXkgd29yayBvbiBhbGwgZGV2aWNlcy5bQ1JdW0NSXScKICdbQ09MT1I9ZG9kZ2VyYmx1ZV0zLiBGdWxsIEJhY2t1cFsvQ09MT1JdIC0gSXRcJ3MgaGlnaGx5IHVubGlrZWx5IHlvdSB3aWxsIGV2ZXIgd2FudCB0byB1c2UgdGhpcyBvcHRpb24gYW5kIGl0XCdzIG1vcmUgZm9yIHRoZSBnZWVrcyBvdXQgdGhlcmUuIEl0IHdpbGwgY3JlYXRlIGEgY29tcGxldGUgYmFja3VwIG9mIHlvdXIgc2V0dXAgYW5kIG5vdCBkbyBhbnkgZXh0cmEgY2xldmVyIHN0dWZmLiBUaGluZ3MgbGlrZSBwYWNrYWdlcyB3aWxsIHJlbWFpbiBpbnRhY3QgYXMgd2lsbCB0ZW1wIGNhY2hlIGZpbGVzLCBiZSB3YXJuZWQgdGhlIHNpemUgY291bGQgYmUgVkVSWSBsYXJnZSFbQ1JdW0NSXScKICdbQ1JdW0NPTE9SPWdvbGRdQ1JFQVRJTkcgQSBDT01NVU5JVFkgQlVJTEQ6Wy9DT0xPUl1bQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVN0ZXAgMTpbL0NPTE9SXSBSZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhWy9CXVtDUl1NYWtlIHN1cmUgeW91XCd2ZSByZW1vdmVkIGFueSBzZW5zaXRpdmUgZGF0YSBzdWNoIGFzIHBhc3N3b3JkcyBhbmQgdXNlcm5hbWVzIGluIHlvdXIgYWRkb25fZGF0YSBmb2xkZXIuJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAyOlsvQ09MT1JdIEJhY2t1cCB5b3VyIHN5c3RlbVsvQl1bQ1JdQ2hvb3NlIHRoZSBiYWNrdXAgb3B0aW9uIHlvdSB3YW50IGZyb20gdGhlIGxpc3Qgb24gdGhlIHByZXZpb3VzIHBhZ2UsIGlmIHlvdVwncmUgc2hhcmluZyB0aGlzIHZpYSB0aGUgQ1AgQWRkb24gdGhlbiBwbGVhc2UgdXNlIHRoZSBub29ic2FuZG5lcmRzIGJhY2t1cCBvcHRpb24sIHRoaXMgd2lsbCBjcmVhdGUgdHdvIHppcCBmaWxlcyB0aGF0IHlvdSBuZWVkIHRvIHVwbG9hZCB0byBhIHNlcnZlci4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDM6Wy9DT0xPUl0gVXBsb2FkIHRoZSB6aXBzWy9CXVtDUl1VcGxvYWQgdGhlIHR3byB6aXAgZmlsZXMgdG8gYSBzZXJ2ZXIgdGhhdCBLb2RpIGNhbiBhY2Nlc3MsIGl0IGhhcyB0byBiZSBhIGRpcmVjdCBsaW5rIGFuZCBub3Qgc29tZXdoZXJlIHRoYXQgYXNrcyBmb3IgY2FwdGNoYSAtIGFyY2hpdmUub3JnIGFuZCBjb3B5LmNvbSBhcmUgdHdvIGdvb2QgZXhhbXBsZXMuIERvIG5vdCB1c2UgRHJvcGJveCB1bmxlc3MgeW91IGhhdmUgYSBwYWlkIGFjY291bnQsIHRoZXkgaGF2ZSBhIGZhaXIgdXNlYWdlIHBvbGljeSBhbmQgdGhlIGNoYW5jZXMgYXJlIHlvdVwnbGwgZmluZCB3aXRoaW4gMjQgaG91cnMgeW91ciBkb3dubG9hZCBoYXMgYmVlbiBibG9ja2VkIGFuZCBub2JvZHkgY2FuIGRvd25sb2FkIGl0LiBbQ09MT1I9bGltZV1Ub3AgVGlwOiBbL0NPTE9SXVRoZSB2YXN0IG1ham9yaXR5IG9mIHByb2JsZW1zIG9jY3VyIHdoZW4gdGhlIHdyb25nIGRvd25sb2FkIFVSTCBoYXMgYmVlbiBlbnRlcmVkIGluIHRoZSBvbmxpbmUgZm9ybSwgYSBnb29kIGRvd25sb2FkIFVSTCBub3JtYWxseSBlbmRzIGluICI9MSIgb3IgInppcD10cnVlIi4gUGxlYXNlIGRvdWJsZSBjaGVjayB3aGVuIHlvdSBjb3B5IHRoZSBVUkwgaW50byBhIHdlYiBicm93c2VyIGl0IGltbWVkaWF0ZWx5IHN0YXJ0cyBkb3dubG9hZGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIHByZXNzIGFueSBvdGhlciBidXR0b24uJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCA0OlsvQ09MT1JdIFN1Ym1pdCB0aGUgYnVpbGRbL0JdJwogJ1tDUl1DcmVhdGUgYSB0aHJlYWQgb24gdGhlIENvbW11bml0eSBCdWlsZHMgc2VjdGlvbiBvZiB0aGUgZm9ydW0gYXQgW0NPTE9SPW9yYW5nZV13d3cubm9vYnNbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXWFuZFsvQ09MT1JdW0NPTE9SPW9yYW5nZV1uZXJkcy5jb21bL0NPTE9SXS5bQ1JdRnVsbCBkZXRhaWxzIGNhbiBiZSBmb3VuZCBvbiB0aGVyZSBvZiB0aGUgdGVtcGxhdGUgeW91IHNob3VsZCB1c2Ugd2hlbiBwb3N0aW5nLCBvbmNlIHlvdVwndmUgY3JlYXRlZCB5b3VyIHN1cHBvcnQgdGhyZWFkIChOT1QgQkVGT1JFKSB5b3UgY2FuIHJlcXVlc3QgdG8gYmVjb21lIGEgbWVtYmVyIG9mIHRoZSBDb21tdW5pdHkgQnVpbGRlciBncm91cCBhbmQgeW91XCdsbCB0aGVuIGJlIGFibGUgdG8gYWRkIHlvdXIgYnVpbGQgdmlhIHRoZSB3ZWIgZm9ybS4gQXMgc29vbiBhcyB5b3VcJ3ZlIHN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgZGV0YWlscyB5b3VyIGJ1aWxkIHdpbGwgYmUgbGl2ZSwgaWYgeW91IGNhblwndCBmaW5kIGl0IGluIHRoZSBDUCBhZGRvbiBtYWtlIHN1cmUgeW91IGhhdmUgWFhYIGVuYWJsZWQgKGlmIHlvdSBtYXJrZWQgaXQgYXMgaGF2aW5nIGFkdWx0IGNvbnRlbnQpIGFuZCBhbHNvIG1ha2Ugc3VyZSB5b3VcJ3JlIHJ1bm5pbmcgdGhlIHNhbWUgdmVyc2lvbiBvZiBLb2RpIHRoYXQgeW91IHNhaWQgaXQgd2FzIGNvbXBhdGlibGUgd2l0aC4gSWYgeW91XCdyZSBydW5uaW5nIGFub3RoZXIgdmVyc2lvbiB0aGVuIHlvdSBjYW4gc2VsZWN0IHRoZSBvcHRpb24gdG8gInNob3cgYWxsIGNvbW11bml0eSBidWlsZHMiIGluIHRoZSBhZGRvbiBzZXR0aW5ncyBhbmQgdGhhdCB3aWxsIHNob3cgZXZlbiB0aGUgYnVpbGRzIHRoYXQgYXJlblwndCBtYXJrZWQgYXMgY29tcGF0aWJsZSB3aXRoIHlvdXIgdmVyc2lvbiBvZiBLb2RpLicKICdbQ1JdW0NSXVtDT0xPUj1nb2xkXVBSSVZBVEUgQlVJTERTWy9DT0xPUl1bQ1JdSWYgeW91IGFyZW5cJ3QgaW50ZXJlc3RlZCBpbiBzaGFyaW5nIHlvdXIgYnVpbGQgd2l0aCB0aGUgY29tbXVuaXR5IHlvdSBjYW4gc3RpbGwgdXNlIG91ciBzeXN0ZW0gZm9yIHByaXZhdGUgYnVpbGRzLiBKdXN0IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGJ1dCB5b3Ugd2lsbCBub3QgbmVlZCB0byBjcmVhdGUgYSBzdXBwb3J0IHRocmVhZCBhbmQgeW91IFdJTEwgcmVxdWlyZSBhIG1pbmltdW0gb2YgNSB1c2VmdWwgKG5vdCBzcGFtKSBwb3N0cyBvbiB0aGUgZm9ydW0uIFRoZSA1IHBvc3QgcnVsZSBvbmx5IGFwcGxpZXMgdG8gdXNlcnMgdGhhdCB3aXNoIHRvIHVzZSB0aGUgcHJpdmF0ZSBidWlsZHMgb3B0aW9uLiBPbmNlIHlvdSBoYXZlIDUgcG9zdHMgeW91XCdsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgd2ViIGZvcm0gYW5kIGluIHRoZXJlIHlvdSBjYW4gZW50ZXIgdXAgdG8gMyBJUCBhZGRyZXNzZXMgdGhhdCB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHZpZXcgeW91ciBidWlsZChzKS4gQW55Ym9keSBjYXVnaHQgZGlzb2JleWluZyB0aGUgZm9ydW0gcnVsZXMgd2lsbCBiZSBiYW5uZWQgc28gcGxlYXNlIG1ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCB0aGUgZm9ydW0gcnVsZXMgYmVmb3JlIHBvc3RpbmcsIHdlIHdlbGNvbWUgZXZlcnlvbmUgYnV0IHRoZXJlIGlzIHN0cmljdGx5IG5vIHNwYW1taW5nIG9yIG5vbnNlbnNlIHBvc3RzIGp1c3Qgc2F5aW5nIHNvbWV0aGluZyBsaWtlICJUaGFua3MiIGluIG9yZGVyIHRvIGJ1bXAgdXAgeW91ciBwb3N0IGNvdW50LiBUaGUgc2l0ZSBydWxlcyBldmVuIGhhdmUgZXhhbXBsZXMgb2YgaG93IHlvdSBjYW4gZ2V0IHRvIDUgcG9zdHMgd2l0aG91dCByZWNlaXZpbmcgYSBiYW4uJyApCiBpZiA2NSAtIDY1OiBPb09vT08wMCArIElJaSAlIEkxSWlpSQogaWYgNTQgLSA1NDogSUlpIC8gbzBvT09vME8wT29vCmRlZiBJMTFJSUlJaUlJICggKSA6CiBvT28wME9vbzBvMCAoICdJbnN0YWxsaW5nIGEgYnVpbGQnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMSAoT3B0aW9uYWwpOlsvQ09MT1JdIEJhY2t1cCB5b3VyIHN5c3RlbVsvQl1bQ1JdV2hlbiBzZWxlY3RpbmcgYW4gaW5zdGFsbCBvcHRpb24geW91XCdsbCBiZSBhc2tlZCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBiYWNrdXAgLSB3ZSBzdHJvbmdseSByZWNvbW1lbmQgY3JlYXRpbmcgYSBiYWNrdXAgb2YgeW91ciBzeXN0ZW0gaW4gY2FzZSB5b3UgZG9uXCd0IGxpa2UgdGhlIGJ1aWxkIGFuZCB3YW50IHRvIHJldmVydCBiYWNrLiBSZW1lbWJlciB5b3VyIGJhY2t1cCBtYXkgYmUgcXVpdGUgbGFyZ2Ugc28gaWYgeW91XCdyZSB1c2luZyBhIGRldmljZSB3aXRoIGEgdmVyeSBzbWFsbCBhbW91bnQgb2Ygc3RvcmFnZSB3ZSByZWNvbW1lbmQgdXNpbmcgYSBVU0Igc3RpY2sgb3IgU0QgY2FyZCBhcyB0aGUgc3RvcmFnZSBsb2NhdGlvbiBvdGhlcndpc2UgeW91IG1heSBydW4gb3V0IG9mIHNwYWNlIGFuZCB0aGUgaW5zdGFsbCBtYXkgZmFpbC4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDI6Wy9DT0xPUl0gQ2hvb3NlIGFuIGluc3RhbGwgbWV0aG9kOlsvQl1bQ1JdW0NSXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bQ1JdW0NSXVtDT0xPUj1nb2xkXTEuIE92ZXJ3cml0ZSBteSBjdXJyZW50IHNldHVwICYgaW5zdGFsbCBuZXcgYnVpbGQ6Wy9DT0xPUl0gVGhpcyBjb3B5IG92ZXIgdGhlIHdob2xlIGJ1aWxkW0NSXUFzIHRoZSB0aXRsZSBzdWdnZXN0cyB0aGlzIHdpbGwgb3ZlcndyaXRlIHlvdXIgZXhpc3Rpbmcgc2V0dXAgd2l0aCB0aGUgb25lIGNyZWF0ZWQgYnkgdGhlIGNvbW11bml0eSBidWlsZGVyLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHdpcGUgb3B0aW9uIGluIHRoZSBtYWludGVuYW5jZSBzZWN0aW9uIGJlZm9yZSBydW5uaW5nIHRoaXMsIHRoYXQgd2lsbCBjb21wbGV0ZWx5IHdpcGUgeW91ciBleGlzdGluZyBzZXR0aW5ncyBhbmQgd2lsbCBlbnN1cmUgeW91IGRvblwndCBoYXZlIGFueSBjb25mbGljdGluZyBkYXRhIGxlZnQgb24gdGhlIGRldmljZS4gT25jZSB5b3VcJ3ZlIHdpcGVkIHBsZWFzZSByZXN0YXJ0IEtvZGkgYW5kIGluc3RhbGwgdGhlIGJ1aWxkLCB5b3UgY2FuIG9mIGNvdXJzZSB1c2UgdGhpcyBpbnN0YWxsIG9wdGlvbiAxIHdpdGhvdXQgd2lwaW5nIGJ1dCB5b3UgbWF5IGVuY291bnRlciBwcm9ibGVtcy4gSWYgeW91IGNob29zZSB0byBkbyB0aGlzIERPIE5PVCBib21iYXJkIHRoZSBjb21tdW5pdHkgYnVpbGRlciB3aXRoIHF1ZXN0aW9ucyBvbiBob3cgdG8gZml4IGNlcnRhaW4gdGhpbmdzLCB0aGV5IHdpbGwgZXhwZWN0IHlvdSB0byBoYXZlIGluc3RhbGxlZCBvdmVyIGEgY2xlYW4gc2V0dXAgYW5kIGlmIHlvdVwndmUgaW5zdGFsbGVkIG92ZXIgYW5vdGhlciBidWlsZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGJ1ZyB0cmFja2luZyBsaWVzIHNvbGVseSB3aXRoIHlvdSEnCiAnW0NSXVtDUl0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0NSXVtDUl1bQ09MT1I9Z29sZF0yLiBJbnN0YWxsOlsvQ09MT1JdIEtlZXAgbXkgbGlicmFyeSAmIHByb2ZpbGVzW0NSXVRoaXMgd2lsbCBpbnN0YWxsIGEgYnVpbGQgb3ZlciB0aGUgdG9wIG9mIHlvdXIgZXhpc3Rpbmcgc2V0dXAgc28geW91IHdvblwndCBsb3NlIGFueXRoaW5nIGFscmVhZHkgaW5zdGFsbGVkIGluIEtvZGkuIFlvdXIgbGlicmFyeSBhbmQgYW55IHByb2ZpbGVzIHlvdSBtYXkgaGF2ZSBzZXR1cCB3aWxsIGFsc28gcmVtYWluIHVuY2hhbmdlZC4nCiAnW0NSXVtDUl0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0NSXVtDUl1bQ09MT1I9Z29sZF0zLiBJbnN0YWxsOlsvQ09MT1JdIEtlZXAgbXkgbGlicmFyeSBvbmx5W0NSXVRoaXMgd2lsbCBkbyBleGFjdGx5IHRoZSBzYW1lIGFzIG51bWJlciAyIChhYm92ZSkgYnV0IGl0IHdpbGwgZGVsZXRlIGFueSBwcm9maWxlcyB5b3UgbWF5IGhhdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBvbmVzIHRoZSBidWlsZCBhdXRob3IgaGFzIGNyZWF0ZWQuJwogJ1tDUl1bQ1JdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtDUl1bQ1JdW0NPTE9SPWdvbGRdNC4gSW5zdGFsbDpbL0NPTE9SXSBLZWVwIG15IHByb2ZpbGVzIG9ubHlbQ1JdQWdhaW4sIHRoZSBzYW1lIGFzIG51bWJlciAyIGJ1dCB5b3VyIGxpYnJhcnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgY3JlYXRlZCBieSB0aGUgYnVpbGQgYXV0aG9yLiBJZiB5b3VcJ3ZlIHNwZW50IGEgbG9uZyB0aW1lIHNldHRpbmcgdXAgeW91ciBsaWJyYXJ5IGFuZCBoYXZlIGl0IGp1c3QgaG93IHlvdSB3YW50IGl0IHRoZW4gdXNlIHRoaXMgd2l0aCBjYXV0aW9uIGFuZCBtYWtlIHN1cmUgeW91IGRvIGEgYmFja3VwIScKICdbQ1JdW0NSXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMzpbL0NPTE9SXSBSZXBsYWNlIG9yIGtlZXAgc2V0dGluZ3M/Wy9CXVtDUl1XaGVuIGNvbXBsZXRpbmcgdGhlIGluc3RhbGwgcHJvY2VzcyB5b3VcJ2xsIGJlIGFza2VkIGlmIHlvdSB3YW50IHRvIGtlZXAgeW91ciBleGlzdGluZyBLb2RpIHNldHRpbmdzIG9yIHJlcGxhY2Ugd2l0aCB0aGUgb25lcyBpbiB0aGUgYnVpbGQuIElmIHlvdSBjaG9vc2UgdG8ga2VlcCB5b3VyIHNldHRpbmdzIHRoZW4gb25seSB0aGUgaW1wb3J0YW50IHNraW4gcmVsYXRlZCBzZXR0aW5ncyBhcmUgY29waWVkIG92ZXIgZnJvbSB0aGUgYnVpbGQuIEFsbCB5b3VyIG90aGVyIEtvZGkgc2V0dGluZ3Mgc3VjaCBhcyBzY3JlZW4gY2FsaWJyYXRpb24sIHJlZ2lvbiwgYXVkaW8gb3V0cHV0LCByZXNvbHV0aW9uIGV0Yy4gd2lsbCByZW1haW4gaW50YWN0LiBDaG9vc2luZyB0byByZXBsYWNlIHlvdXIgc2V0dGluZ3MgY291bGQgcG9zc2libHkgY2F1c2UgYSBmZXcgaXNzdWVzLCB1bmxlc3MgdGhlIGJ1aWxkIGF1dGhvciBoYXMgc3BlY2lmaWNhbGx5IHJlY29tbWVuZGVkIHlvdSByZXBsYWNlIHRoZSBzZXR0aW5ncyB3aXRoIHRoZWlycyB3ZSB3b3VsZCBhbHdheXMgcmVjb21tZW5kIGtlZXBpbmcgeW91ciBvd24uJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCA0OiBbL0NPTE9SXVtDT0xPUj1yZWRdVkVSWSBJTVBPUlRBTlRbL0NPTE9SXVsvQl1bQ1JdRm9yIHRoZSBpbnN0YWxsIHRvIGNvbXBsZXRlIHByb3Blcmx5IEtvZGkgTVVTVCBmb3JjZSBjbG9zZSwgdGhpcyBtZWFucyBmb3JjaW5nIGl0IHRvIGNsb3NlIHZpYSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gcmF0aGVyIHRoYW4gZWxlZ2FudGx5IHZpYSB0aGUgS29kaSBtZW51LiBCeSBkZWZhdWx0IHRoaXMgYWRkLW9uIHdpbGwgYXR0ZW1wdCB0byBtYWtlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBmb3JjZSBjbG9zZSBLb2RpIGJ1dCB0aGVyZSBhcmUgc3lzdGVtcyB0aGF0IHdpbGwgbm90IGFsbG93IHRoaXMgKGRldmljZXMgdGhhdCBkbyBub3QgYWxsb3cgS29kaSB0byBoYXZlIHJvb3QgcGVybWlzc2lvbnMpLicKICcgT25jZSB0aGUgZmluYWwgc3RlcCBvZiB0aGUgaW5zdGFsbCBwcm9jZXNzIGhhcyBiZWVuIGNvbXBsZXRlZCB5b3VcJ2xsIHNlZSBhIGRpYWxvZyBleHBsYWluaW5nIEtvZGkgaXMgYXR0ZW1wdGluZyBhIGZvcmNlIGNsb3NlLCBwbGVhc2UgYmUgcGF0aWVudCBhbmQgZ2l2ZSBpdCBhIG1pbnV0ZS4gSWYgYWZ0ZXIgYSBtaW51dGUgS29kaSBoYXNuXCd0IGNsb3NlZCBvciByZXN0YXJ0ZWQgeW91IHdpbGwgbmVlZCB0byBtYW51YWxseSBmb3JjZSBjbG9zZS4gVGhlIHJlY29tbWVuZGVkIHNvbHV0aW9uIGZvciBmb3JjZSBjbG9zaW5nIGlzIHRvIGdvIGludG8geW91ciBvcGVyYXRpbmcgc3lzdGVtIG1lbnUgYW5kIG1ha2UgaXQgZm9yY2UgY2xvc2UgdGhlIEtvZGkgYXBwIGJ1dCBpZiB5b3UgZG9udFwndCBrbm93IGhvdyB0byBkbyB0aGF0IHlvdSBjYW4ganVzdCBwdWxsIHRoZSBwb3dlciBmcm9tIHRoZSB1bml0LicKICcgUHVsbGluZyB0aGUgcG93ZXIgaXMgZmFpcmx5IHNhZmUgdGhlc2UgZGF5cywgb24gbW9zdCBzZXQgdG9wIGJveGVzIGl0XCdzIHRoZSBvbmx5IHdheSB0byBzd2l0Y2ggdGhlbSBvZmYgLSB0aGV5IHJhcmVseSBoYXZlIGEgcG93ZXIgc3dpdGNoLiBFdmVuIHRob3VnaCBpdFwncyBjb25zaWRlcmVkIGZhaXJseSBzYWZlIG5vd2FkYXlzIHlvdSBkbyB0aGlzIGF0IHlvdXIgb3duIHJpc2sgYW5kIHdlIHdvdWxkIGFsd2F5cyByZWNvbW1lbmQgZm9yY2UgY2xvc2luZyB2aWEgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbWVudS4nICkKIGlmIDUyIC0gNTI6IElJMTExaWlpaSAvIElJMTExaWlpaSAvIEkxSWlpSSAtIElJaQogaWYgOTEgLSA5MTogSTFJaWlJICsgbzBvT09vME8wT29vICUgSUkxMTFpaWlpICsgT29PME8wMApkZWYgT28wbzBPT28wT28wICggKSA6CiBvT28wME9vbzBvMCAoICdXaGF0IGlzIGEgbm9vYnNhbmRuZXJkcyBrZXl3b3JkPycgLCAnW0NPTE9SPWdvbGRdV0hBVCBJUyBBIEtFWVdPUkQ/Wy9DT0xPUl1bQ1JdVGhlIG5vb2JzYW5kbmVyZHMga2V5d29yZHMgYXJlIGJhc2VkIG9uIHRoZSBpbmdlbmlvdXMgVExCQiBrZXl3b3JkIHN5c3RlbSB0aGF0IHdhcyBpbnRyb2R1Y2VkIHllYXJzIGFnby4gSXRcJ3Mgbm90aGluZyBuZXcgYW5kIHVubGlrZSBjZXJ0YWluIG90aGVyIHBlb3BsZSBvdXQgdGhlcmUgd2VcJ3JlIG5vdCBnb2luZyB0byBjbGFpbSBpdCBhcyBvdXIgaWRlYS4gSWYgeW91XCdyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggVExCQiBLZXl3b3JkcyBvciBldmVuIHNvbWUgb2YgdGhlIGNvcGllcyBvdXQgdGhlcmUgbGlrZSBDbG91ZHdvcmRzIHlvdSB3aWxsIGFscmVhZHkga25vdyBob3cgdGhpcyB3b3JrcyBidXQgZm9yIHRob3NlIG9mIHlvdSB0aGF0IGRvblwndCBoYXZlIG9uZSBvZiB0aG9zZSBkZXZpY2VzIHdlXCdsbCBqdXN0IGdvIHRocm91Z2ggdGhlIGRldGFpbHMuLi4nCiAnW0NSXVtDUl1BbnlvbmUgaW4gdGhlIGNvbW11bml0eSBjYW4gbWFrZSB0aGVpciBvd24ga2V5d29yZHMgYW5kIHNoYXJlIHRoZW0gd2l0aCBvdGhlcnMsIGl0XCdzIGEgc2ltcGxlIHdvcmQgeW91IHR5cGUgaW4gYW5kIHRoZW4gdGhlIGNvbnRlbnQgeW91IHVwbG9hZGVkIHRvIHRoZSB3ZWIgaXMgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkLiBQcmV2aW91c2x5IGtleXdvcmRzIGhhdmUgbW9zdGx5IGJlZW4gdXNlZCBmb3IgYWRkb24gcGFja3MsIHRoaXMgaXMgYSBncmVhdCB3YXkgdG8gZ2V0IHdob2xlIHBhY2tzIG9mIGFkZG9ucyBpbiBvbmUgZ28gd2l0aG91dCB0aGUgbmVlZCB0byBpbnN0YWxsIGEgd2hvbGUgbmV3IGJ1aWxkLiBXZSBhcmUgdGFraW5nIHRoaXMgdG8gdGhlIG5leHQgbGV2ZWwgYW5kIHdpbGwgYmUgaW50cm9kdWNpbmcgYXJ0d29yayBwYWNrcyBhbmQgYWxzbyBhZGRvbiBmaXhlcy4gTW9yZSBkZXRhaWxzIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBDb21tdW5pdHkgUG9ydGFsIHNlY3Rpb24gb2YgdGhlIGZvcnVtIG9uIHd3dy5ub29ic2FuZG5lcmRzLmNvbScKICdbQ1JdW0NSXVtDUl1bQ09MT1I9Z29sZF1IT1cgRE8gSSBGSU5EIEEgS0VZV09SRD9bL0NPTE9SXVtDUl1UaGUgZnVsbCBsaXN0IG9mIG5vb2JzYW5kbmVyZHMga2V5d29yZHMgY2FuIGJlIGZvdW5kIG9uIHRoZSBmb3J1bSwgaW4gdGhlIENvbW11bml0eSBQb3J0YWwgc2VjdGlvbiB5b3VcJ2xsIHNlZSBhIHNlY3Rpb24gZm9yIHRoZSBrZXl3b3JkcyBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBKdXN0IGZpbmQgdGhlIHBhY2sgeW91IHdvdWxkIGxpa2UgdG8gaW5zdGFsbCB0aGVuIHVzaW5nIHRoaXMgYWRkb24gdHlwZSB0aGUga2V5d29yZCBpbiB3aGVuIHByb21wdGVkIChhZnRlciBjbGlja2luZyAiSW5zdGFsbCBhIG5vb2JzYW5kbmVyZHMga2V5d29yZCIpLiBZb3VyIGNvbnRlbnQgd2lsbCBub3cgYmUgaW5zdGFsbGVkLCBpZiBpbnN0YWxsaW5nIGFkZG9uIHBhY2tzIHBsZWFzZSBiZSBwYXRpZW50IHdoaWxlIGVhY2ggYWRkb24gdXBkYXRlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gZGlyZWN0bHkgZnJvbSB0aGUgZGV2ZWxvcGVycyByZXBvLicKICdbQ1JdW0NSXVtDUl1bQ09MT1I9Z29sZF1DQU4gSSBVU0UgT1RIRVIgS0VZV09SRFM/Wy9DT0xPUl0gKENsb3Vkd29yZHMsIFRMQkIgZXRjLilbQ1JdWWVzIHlvdSBjYW4sIGp1c3QgZ28gdG8gdGhlIGFkZG9uIHNldHRpbmdzIGFuZCBlbnRlciB0aGUgdXJsIHNob3J0ZW5lciB0aGF0IHBhcnRpY3VsYXIgY29tcGFueSB1c2UuIEFnYWluIHlvdSB3aWxsIGZpbmQgZnVsbCBkZXRhaWxzIG9mIHN1cHBvcnRlZCBrZXl3b3JkcyBvbiB0aGUgZm9ydW0uJyApCiBpZiA4OCAtIDg4OiBPMDBPT28wMG9vMG8gLyBPb29vb29vb09PICUgT29Pb09PMDAgLSBpMUlJaQogaWYgNDkgLSA0OTogbzBvT09vME8wT29vIC0gaUlpaTFJMTFJMUlJMQpkZWYgbzAwb28wME8wT29PbyAoICkgOgogb09vMDBPb28wbzAgKCAnSG93IHRvIGNyZWF0ZSBhIGtleXdvcmQ/JyAsICdbQ09MT1I9Z29sZF1OYU4gTUFLRSBJVCBFQVNZIVsvQ09MT1JdW0NSXVRoZSBrZXl3b3JkcyBjYW4gbm93IGJlIG1hZGUgdmVyeSBzaW1wbHkgYnkgYW55b25lLiBXZVwndmUgbm90IGxvY2tlZCB0aGlzIGRvd24gdG8ganVzdCBvdXIgYWRkb24gYW5kIG90aGVycyBjYW4gdXNlIHRoaXMgb24gc2ltaWxhciBzeXN0ZW1zIGZvciBjcmVhdGluZyBrZXl3b3JkcyBpZiB0aGV5IHdhbnQuLi4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDE6Wy9DT0xPUl0gVXNlIGEgdmFuaWxsYSBLb2RpIHNldHVwWy9CXVtDUl1Zb3Ugd2lsbCByZXF1aXJlIGEgY29tcGxldGUgZnJlc2ggaW5zdGFsbCBvZiBLb2RpIHdpdGggYWJzb2x1dGVseSBub3RoaW5nIGVsc2UgaW5zdGFsbGVkIGFuZCBydW5uaW5nIHRoZSBkZWZhdWx0IHNraW4uIERlY2lkZSB3aGF0IGtpbmQgb2YgcGFjayB5b3Ugd2FudCB0byBjcmVhdGUsIGxldHMgc2F5IHdlIHdhbnQgdG8gY3JlYXRlIGEga2lkcyBwYWNrLi4uIEFkZCBhbGwgdGhlIGtpZCByZWxhdGVkIGFkZG9ucyB5b3Ugd2FudCBhbmQgbWFrZSBzdXJlIHlvdSBhbHNvIGhhdmUgdGhlIHJlbGV2YW50IHJlcG9zaXRvcnkgaW5zdGFsbGVkIHRvby4gSW4gdGhlIHVubGlrZWx5IGV2ZW50IHlvdVwndmUgZm91bmQgYW4gYWRkb24gdGhhdCBkb2VzblwndCBiZWxvbmcgaW4gYSByZXBvc2l0b3J5IHRoYXRcJ3MgZmluZSB0aGUgc3lzdGVtIHdpbGwgY3JlYXRlIGEgZnVsbCBiYWNrdXAgb2YgdGhhdCBhZGRvbiB0b28gKGp1c3QgbWVhbnMgaXQgd29uXCd0IGF1dG8gdXBkYXRlIHdpdGggZnV0dXJlIHVwZGF0ZXMgdG8gdGhlIGFkZG9uKS4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDI6Wy9DT0xPUl0gQ3JlYXRlIHRoZSBiYWNrdXBbL0JdW0NSXVVzaW5nIHRoaXMgYWRkb24gY3JlYXRlIHlvdXIgYmFja3VwLCBjdXJyZW50bHkgb25seSBhZGRvbiBwYWNrcyBhcmUgc3VwcG9ydGVkIGJ1dCBzb29uIG1vcmUgcGFja3Mgd2lsbCBiZSBhZGRlZC4gV2hlbiB5b3UgY3JlYXRlIHRoZSBrZXl3b3JkIHlvdVwnbGwgYmUgYXNrZWQgZm9yIGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHppcCBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBhIG5hbWUsIHRoaXMgY2FuIGJlIGFueXdod2VyZSB5b3UgbGlrZSBhbmQgY2FuIGJlIGNhbGxlZCB3aGF0ZXZlciB5b3Ugd2FudCAtIHlvdSBkbyBub3QgbmVlZCB0byBhZGQgdGhlIHppcCBleHRlbnNpb24sIHRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIGZvciB5b3Ugc28gaW4gb3VyIGV4YW1wbGUgaGVyZSB3ZSB3b3VsZCBjYWxsIGl0ICJraWRzIi4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDM6Wy9DT0xPUl0gVXBsb2FkIHRoZSB6aXBzWy9CXVtDUl1VcGxvYWQgdGhlIHR3byB6aXAgZmlsZSB0byBhIHNlcnZlciB0aGF0IEtvZGkgY2FuIGFjY2VzcywgaXQgaGFzIHRvIGJlIGEgZGlyZWN0IGxpbmsgYW5kIG5vdCBzb21ld2hlcmUgdGhhdCBhc2tzIGZvciBjYXB0Y2hhIC0gYXJjaGl2ZS5vcmcgYW5kIGNvcHkuY29tIGFyZSB0d28gZ29vZCBleGFtcGxlcy4gRG8gbm90IHVzZSBEcm9wYm94IHVubGVzcyB5b3UgaGF2ZSBhIHBhaWQgYWNjb3VudCwgdGhleSBoYXZlIGEgZmFpciB1c2VhZ2UgcG9saWN5IGFuZCB0aGUgY2hhbmNlcyBhcmUgeW91XCdsbCBmaW5kIHdpdGhpbiAyNCBob3VycyB5b3VyIGRvd25sb2FkIGhhcyBiZWVuIGJsb2NrZWQgYW5kIG5vYm9keSBjYW4gZG93bmxvYWQgaXQuW0NSXVtDUl1bQ09MT1I9bGltZV1Ub3AgVGlwOiBbL0NPTE9SXVRoZSB2YXN0IG1ham9yaXR5IG9mIHByb2JsZW1zIG9jY3VyIHdoZW4gdGhlIHdyb25nIGRvd25sb2FkIFVSTCBoYXMgYmVlbiBlbnRlcmVkIGluIHRoZSBvbmxpbmUgZm9ybSwgYSBnb29kIGRvd25sb2FkIFVSTCBub3JtYWxseSBlbmRzIGluICI9MSIgb3IgInppcD10cnVlIi4gUGxlYXNlIGRvdWJsZSBjaGVjayB3aGVuIHlvdSBjb3B5IHRoZSBVUkwgaW50byBhIHdlYiBicm93c2VyIGl0IGltbWVkaWF0ZWx5IHN0YXJ0cyBkb3dubG9hZGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIHByZXNzIGFueSBvdGhlciBidXR0b24uJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCA0OlsvQ09MT1JdIENyZWF0ZSB0aGUga2V5d29yZFsvQl1bQ1JdQ29weSB0aGUgZG93bmxvYWQgVVJMIHRvIHlvdXIgY2xpcGJvYXJkIGFuZCB0aGVuIGdvIHRvIHd3dy51cmxzaG9ydGJvdC5jb20uIEluIGhlcmUgeW91IG5lZWQgdG8gZW50ZXIgdGhlIFVSTCBpbiB0aGUgIkxvbmcgVVJMIiBmaWVsZCBhbmQgdGhlbiBpbiB0aGUgIkN1c3RvbSBLZXl3b3JkIiBmaWVsZCB5b3UgbmVlZCB0byBlbnRlciAibm9vYnMiICh3aXRob3V0IHRoZSBxdW90YXRpb24gbWFya3MpIGZvbGxvd2VkIGJ5IHlvdXIga2V5d29yZC4gV2UgcmVjb21tZW5kIGFsd2F5cyB1c2luZyBhIHJhbmRvbSB0ZXN0IGtleXdvcmQgZm9yIHRlc3RpbmcgYmVjYXVzZSBvbmNlIHlvdSBoYXZlIGEga2V5d29yZCB5b3UgY2FuXCd0IGNoYW5nZSBpdCwgYWxzbyB3aGVuIHVwbG9hZGluZyBtYWtlIHN1cmUgaXRcJ3MgYSBsaW5rIHlvdSBjYW4gZWRpdCBhbmQgc3RpbGwga2VlcCB0aGUgc2FtZSBVUkwgLSB0aGF0IHdheSBpdFwncyBlYXN5IHRvIGtlZXAgdXAgdG8gZGF0ZSBhbmQgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHNhbWUga2V5d29yZC4gSW4gb3VyIGV4YW1wbGUgb2Yga2lkcyB3ZSB3b3VsZCBzZXQgdGhlIGN1c3RvbSBrZXl3b3JkIGFzICJub29ic2tpZHMiLiBUaGUgbm9vYnMgYml0IGlzIGlnbm9yZWQgYW5kIGlzIG9ubHkgZm9yIGhlbHBpbmcgdGhlIGFkZG9uIGtub3cgd2hhdCB0byBsb29rIGZvciwgdGhlIHVzZXIgd291bGQganVzdCB0eXBlIGluICJraWRzIiBmb3IgdGhlIGtpZHMgcGFjayB0byBiZSBpbnN0YWxsZWQuJyApCiBpZiA2IC0gNjogSTFpaTExaUlpMTFpICogT28wT29vICsgaUlpaTFJMTFJMUlJMQogaWYgMTkgLSAxOTogTzAgJSBJSTExMWlpaWkgKiBvMG9PT28wTzBPb28KZGVmIEkxaTFJaUlJaUlpSUkgKCApIDoKIG9PbzAwT29vMG8wICggJ0FkZGluZyBUaGlyZCBQYXJ0eSBXaXphcmRzJyAsICdbQ09MT1I9Z29sZF1PTkUgV0laQVJEIFRPIFJVTEUgVEhFTSBBTEwhWy9DT0xPUl1bQ1JdRGlkIHlvdSBrbm93IHRoZSB2YXN0IG1ham9yaXR5IG9mIHdpemFyZHMgb3V0IHRoZXJlIChldmVyeSBzaW5nbGUgb25lIHdlXCd2ZSB0ZXN0ZWQpIGhhcyBqdXN0IGJlZW4gYSBjb3B5L3Bhc3RlIG9mIHZlcnkgb2xkIGNvZGUgY3JlYXRlZCBieSB0aGUgdGVhbSBoZXJlPyBXZVwndmUgbm90aWNlZCBhIGxvdCBvZiB0aGUgdXNlcnMgaW5zdGFsbGluZyBidWlsZHMgdmlhIHRoZXNlIHRoaXJkIHBhcnR5IHdpemFyZHMgaGF2ZSBydW4gaW50byBtYW55IGRpZmZlcmVudCBwcm9ibGVtcyBzbyB3ZSB0aG91Z2h0IHdlXCdkIHRha2UgaXQgdXBvbiBvdXJzZWx2ZXMgdG8gaGVscCBvdXQuLi4nCiAnW0NSXVtDUl1bQ1JdW0NPTE9SPWdvbGRdV0hBVCBCRU5FRklUUyBET0VTIFRISVMgSEFWRT9bL0NPTE9SXVtDUl1XZVwndmUgYWRkZWQgZXh0cmEgY29kZSB0aGF0IGNoZWNrcyBmb3IgY29tbW9uIGVycm9ycywgdW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZSBwZW9wbGUgb3V0IHRoZXJlIHVzaW5nIGluZmVyaW9yIHByb2dyYW1zIHRvIGNyZWF0ZSB0aGVpciBiYWNrdXBzIGFuZCB0aGF0IGlzIGNhdXNpbmcgcHJvYmxlbXMgaW4gdGhlaXIgd2l6YXJkcy4gSWYgc3VjaCBhIHByb2JsZW0gZXhpc3RzIHdoZW4gdHJ5aW5nIHRvIHVzZSBhbm90aGVyIHdpemFyZCB5b3UgY2FuIHRyeSBhZGRpbmcgdGhlIGRldGFpbHMgdG8gdGhpcyBhZGRvbiBhbmQgaXQgYXV0b21hdGljYWxseSBmaXhlcyBhbnkgY29ycnVwdCBmaWxlcyBpdCBmaW5kcy4gT2YgY291cnNlIHRoZXJlIGFyZSBvdGhlciBiZW5lZml0cy4uLiBpbnN0YWxsaW5nIGNvZGUgZnJvbSBhbiB1bmtub3duIHNvdXJjZSBjYW4gZ2l2ZSB0aGUgYXV0aG9yIGFjY2VzcyB0byB5b3VyIHN5c3RlbSBzbyBtYWtlIHN1cmUgeW91IGFsd2F5cyB0cnVzdCB0aGUgYXV0aG9yKHMpLiBXaHkgdGFrZSB0aGUgcmlzayBvZiBpbnN0YWxsaW5nIHdpemFyZHMgY3JlYXRlZCBieSBhbm9ueW1vdXMgdXNlcm5hbWVzIG9uIHNvY2lhbCBtZWRpYSBzaXRlcyB3aGVuIHlvdSBjYW4gaW5zdGFsbCBmcm9tIGEgdHJ1c3RlZCBzb3VyY2UgbGlrZSBub29ic2FuZG5lcmRzIGFuZCB5b3VcJ2xsIGFsc28gYmUgc2FmZSBpbiB0aGUga25vd2xlZGdlIHRoYXQgYW55IG5ldyB1cGRhdGVzIGFuZCBpbXByb3ZlbWVudHMgd2lsbCBiZSBtYWRlIGhlcmUgZmlyc3QgLSB3ZSBkbyBub3QgY29weS9wYXN0ZSBjb2RlLCB3ZSBhcmUgYWN0aXZlbHkgY3JlYXRpbmcgbmV3IGV4Y2l0aW5nIHNvbHV0aW9ucyEnCiAnW0NSXVtDUl1bQ1JdW0NPTE9SPWdvbGRdQURESU5HIDNSRCBQQVJUWSBXSVpBUkRTIFRPIFRISVMgQURET05bL0NPTE9SXVtDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAxOlsvQ09MT1JdIEVuYWJsaW5nIDNyZCBQYXJ0eSBXaXphcmRzWy9CXVtDUl1JbiB0aGUgYWRkb24gc2V0dGluZ3MgdW5kZXIgdGhlIENvbW11bml0eSBCdWlsZHMgc2VjdGlvbiB5b3UgaGF2ZSB0aGUgb3B0aW9uIHRvIGVuYWJsZSB0aGlyZCBwYXJ0eSBjb21tdW5pdHkgYnVpbGRzLCBpZiB5b3UgY2xpY2sgb24gdGhpcyB5b3Ugd2lsbCBiZSBhYmxlIHRvIGVudGVyIGRldGFpbHMgb2YgdXAgdG8gNSBkaWZmZXJlbnQgd2l6YXJkcy4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDI6Wy9DT0xPUl0gRW50ZXIgdGhlIFVSTFsvQl1bQ1JdQXMgdmlydHVhbGx5IGFsbCB3aXphcmRzIHVzZSBleGFjdGx5IHRoZSBzYW1lIHN0cnVjdHVyZSBhbGwgeW91IG5lZWQgdG8gZG8gaXMgZmluZCBvdXQgd2hhdCBVUkwgdGhleSBhcmUgbG9va2luZyB1cCBpbiB0aGUgY29kZSwgeW91IGNhbiBvcGVuIHRoZSBkZWZhdWx0LnB5IGZpbGUgb2YgdGhlIHdpemFyZCBpbiBhIHRleHQgZWRpdG9yIGFuZCBzZWFyY2ggZm9yICJodHRwIiBhbmQgeW91IHdpbGwgbW9yZSB0aGFuIGxpa2VseSBmaW5kIHRoZSBVUkwgc3RyYWlnaHQgYXdheS4gVHJ5IGVudGVyaW5nIGl0IGluIGEgd2ViIGFkZHJlc3MsIGl0IHNob3VsZCBzaG93IHRoZSBkZXRhaWxzIGZvciBhbGwgdGhlIGJ1aWxkcyBpbiB0aGF0IHdpemFyZCBpbiBhIHRleHQgYmFzZWQgcGFnZS4gSWYgdGhlIHBhZ2UgaXMgYmxhbmsgZG9uXCd0IHdvcnJ5IGl0IG1heSBqdXN0IGJlIGxvY2tlZCBmcm9tIHdlYiBicm93c2VycyBhbmQgY2FuIG9ubHkgYmUgb3BlbmVkIGluIEtvZGksIHRyeSBpdCBvdXQgYW5kIHNlZSBpZiBpdCB3b3Jrcy4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDM6Wy9DT0xPUl0gRW50ZXIgdGhlIG5hbWVbL0JdW0NSXUdpdmUgdGhlIHdpemFyZCBhIG5hbWUsIG5vdyB3aGVuIHlvdSBnbyBpbnRvIHRoZSBDb21tdW5pdHkgQnVpbGRzIHNlY3Rpb24geW91XCdsbCBoYXZlIHRoZSBvZmZpY2lhbCBub29ic2FuZG5lcmRzIGJ1aWxkcyBhcyBhbiBvcHRpb24gYW5kIGFsc28gYW55IG5ldyBvbmVzIHlvdVwndmUgYWRkZWQuJyApCiBpZiAyNyAtIDI3OiBPb29vb29vb09PICogSTFJaWlJIC0gSUlpSWkxaUkgLyBJSWlJaTFpSQogaWYgMjEgLSAyMTogTzAgKiBpaWlpaWlpaTEgJSBPb09vT08wMCAvIE8wCmRlZiBvb29vb29vICggKSA6CiBPb29vME8gPSBvME8gLiBnZXRTZXR0aW5nICggJ2lwX3NpdGUnICkKIHRyeSA6CiAgaWYgT29vbzBPID09ICJ3aGF0aXNteWlwYWRkcmVzcy5jb20iIDoKICAgaTFJMWkxID0gJ2h0dHA6Ly93aGF0aXNteWlwYWRkcmVzcy5jb20vJwogICBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAzMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgIGlmIG5vdCAnQWNjZXNzIERlbmllZCcgaW4gTzBPb29vTzAgOgogICAgb09PbzBPME9vID0gcmUgLiBjb21waWxlICggJ3doYXRpc215aXBhZGRyZXNzLmNvbS9pcC8oLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogICAgSUlJMUkxSTFpaUlpID0gb09PbzBPME9vIFsgMCBdIGlmICggbGVuICggb09PbzBPME9vICkgPiAwICkgZWxzZSAnVW5rbm93bicKICAgIHhibWMgLiBsb2cgKCBJSUkxSTFJMWlpSWkgKQogICAgaUlpMWkxSTFJID0gcmUgLiBjb21waWxlICggJyJmb250LXNpemU6MTRweDsiPiguKz8pPC90ZD4nICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogICAgeGJtYyAuIGxvZyAoIHN0ciAoIGlJaTFpMUkxSSApICkKICAgIGkxMWlpaUkgPSBpSWkxaTFJMUkgWyAwIF0gaWYgKCBsZW4gKCBpSWkxaTFJMUkgKSA+IDAgKSBlbHNlICdVbmtub3duJwogICAgeGJtYyAuIGxvZyAoIGkxMWlpaUkgKQogICAgbzBPTyA9IGlJaTFpMUkxSSBbIDEgXSArICcsICcgKyBpSWkxaTFJMUkgWyAyIF0gKyAnLCAnICsgaUlpMWkxSTFJIFsgMyBdIGlmICggbGVuICggaUlpMWkxSTFJICkgPiAyICkgZWxzZSAnVW5rbm93bicKICAgIHhibWMgLiBsb2cgKCBvME9PICkKICAgIGlJMTExSTExSTFJMSAuIG9rICggJ3d3dy53aGF0aXNteWlwYWRkcmVzcy5jb20nICwgIltCXVtDT0xPUiBnb2xkXUFkZHJlc3M6IFsvQ09MT1JdWy9CXSAlcyIgJSBJSUkxSTFJMWlpSWkgLCAnW0JdW0NPTE9SIGdvbGRdUHJvdmlkZXI6IFsvQ09MT1JdWy9CXSAlcycgJSBpMTFpaWlJICwgJ1tCXVtDT0xPUiBnb2xkXUxvY2F0aW9uOiBbL0NPTE9SXVsvQl0gJXMnICUgbzBPTyApCiAgZWxzZSA6CiAgIGkxSTFpMSA9ICdodHRwczovL3d3dy5pcGxvY2F0aW9uLm5ldC9maW5kLWlwLWFkZHJlc3MnCiAgIE8wT29vb08wID0gb29vME8wbzAwTyAoIGkxSTFpMSAsIDMwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICAgeGJtYyAuIGxvZyAoIE8wT29vb08wICkKICAgT08wbzBvMG9vME9vMCA9IHJlIC4gY29tcGlsZSAoICc8dGFibGUgY2xhc3M9ImlwdGFibGUiPiguKz8pPC90YWJsZT4nICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogICB4Ym1jIC4gbG9nICggc3RyICggT08wbzBvMG9vME9vMCApICkKICAgb09PbzBPME9vID0gcmUgLiBjb21waWxlICggJ2ZvbnQtd2VpZ2h0OiBib2xkOyI+KC4rPyk8L3NwYW4+JyApIC4gZmluZGFsbCAoIHN0ciAoIE9PMG8wbzBvbzBPbzAgKSApCiAgIHhibWMgLiBsb2cgKCBvT09vME8wT28gKQogICBJSUkxSTFJMWlpSWkgPSBvT09vME8wT28gWyAwIF0gaWYgKCBsZW4gKCBvT09vME8wT28gKSA+IDAgKSBlbHNlICdVbmtub3duJwogICBJaUlpID0gcmUgLiBjb21waWxlICggJ0hvc3QgTmFtZTwvdGg+PHRkPiguKz8pPC90ZD4nICkgLiBmaW5kYWxsICggc3RyICggT08wbzBvMG9vME9vMCApICkKICAgaTExMWlJMTFpID0gSWlJaSBbIDAgXSBpZiAoIGxlbiAoIElpSWkgKSA+IDAgKSBlbHNlICdVbmtub3duJwogICBvb28wb29PMDBvID0gcmUgLiBjb21waWxlICggJ0lQIExvY2F0aW9uPC90aD48dGQ+KC4rPykmbmJzcDsnICkgLiBmaW5kYWxsICggc3RyICggT08wbzBvMG9vME9vMCApICkKICAgbzBPTyA9IG9vbzBvb08wMG8gWyAwIF0gaWYgKCBsZW4gKCBvb28wb29PMDBvICkgPiAwICkgZWxzZSAnVW5rbm93bicKICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnd3d3LmlwbG9jYXRpb24ubmV0JyAsICJbQl1bQ09MT1IgZ29sZF1BZGRyZXNzOiBbL0NPTE9SXVsvQl0gJXMiICUgSUlJMUkxSTFpaUlpICwgJ1tCXVtDT0xPUiBnb2xkXUhvc3Q6IFsvQ09MT1JdWy9CXSAlcycgJSBpMTExaUkxMWkgLCAnW0JdW0NPTE9SIGdvbGRdTG9jYXRpb246IFsvQ09MT1JdWy9CXSAlcycgJSBvME9PICkKIGV4Y2VwdCA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnU0VSVklDRSBVTkFWQUlMQUJMRScgLCAnSXQgd2FzIG5vdCBwb3NzaWJsZSB0byBjb250YWN0IHRoZSByZWxldmFudCB3ZWJzaXRlIHRvIGNoZWNrIHlvdXIgZGV0YWlscy4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgaWYgdGhhdFwncyBvayB0cnkgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgc2l0ZSBpbiB0aGUgc2V0dGluZ3MuJyApCiAgaWYgOTQgLSA5NDogSUlpaWlJMWlJSUkgLiBPMDBPT28wMG9vMG8KICBpZiA1MiAtIDUyOiBvMG9PT28wTzBPb28KZGVmIE9PME9vICggd2luZG93X3R5cGUgKSA6CiBnbG9iYWwgZ2xvYmFseWVzbm8KIGdsb2JhbHllc25vID0gRmFsc2UKIGlpSUlpaWlpaUkxaUlpID0gRmFsc2UKIE9Pb29vMDAgPSAwCiBpZiA0NyAtIDQ3OiBPbzBPb28gJSBPb08wTzAwIC0gaWlpaWlpaWkxIC0gT28wT29vICogb29PbwogaWYgd2luZG93X3R5cGUgPT0gJ3llc25vZGlhbG9nJyA6CiAgT09PT08wb09Pb08gPSAzMAogZWxzZSA6CiAgT09PT08wb09Pb08gPSAxMAogIGlmIDQyIC0gNDI6IEkxSWlpSSArIGkxMWlJaWlJaWkgLyBPb08wTzAwCiBvMDBPb29vb09PT08gPSBGYWxzZQogaWYgODkgLSA4OTogTzAgKyBJSWlpaUkxaUlJSSAqIElJaQogaWYgMzAgLSAzMDogT29Pb09PMDAKIHdoaWxlIG5vdCBvMDBPb29vb09PT08gYW5kIE9Pb29vMDAgPCBPT09PTzBvT09vTyA6CiAgeGJtYyAuIHNsZWVwICggMTAwICkKICB4Ym1jIC4gbG9nICggJyMjIyAlcyBub3QgYWN0aXZlIC0gc2xlZXBpbmcgKCVzKScgJSAoIHdpbmRvd190eXBlICwgT09vb28wMCApICkKICBvMDBPb29vb09PT08gPSB4Ym1jIC4gZ2V0Q29uZFZpc2liaWxpdHkgKCAnV2luZG93LklzQWN0aXZlKCVzKScgJSB3aW5kb3dfdHlwZSApCiAgT09vb28wMCArPSAxCiAgaWYgMzkgLSAzOTogSTFpaTExaUlpMTFpICsgbzBvT09vME8wT29vICsgSUlpICsgSUlpaWlJMWlJSUkKIGlmIG8wME9vb29vT09PTyA6CiAgZ2xvYmFseWVzbm8gPSBUcnVlCiAgaWYgNDggLSA0ODogSUlpIC8gaWlpaWlpaWkxIC4gaUlpaTFJMTFJMUlJMQogIGlmIDcyIC0gNzI6IGkxSUlpIC4gbzBvT09vME8wT29vCiB3aGlsZSBvMDBPb29vb09PT08gOgogIG8wME9vb29vT09PTyA9IHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICdXaW5kb3cuSXNBY3RpdmUoJXMpJyAlIHdpbmRvd190eXBlICkKICB4Ym1jIC4gc2xlZXAgKCAyNTAgKQogIGlmIDMgLSAzOiBPb09vT08wMCAlIElJMTExaWlpaSAtIE8wCiByZXR1cm4gbzAwT29vb29PT09PCiBpZiA1MiAtIDUyOiBPb08wTzAwCiBpZiA0OSAtIDQ5OiBPMDBPT28wMG9vMG8gLiBJMWlpMTFpSWkxMWkgJSBpaWlpaWlpaTEgLiBPbzBPb28gKiBPbwpkZWYgSWkxaUkgKCB1cmwgKSA6CiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT09PMDBPICkgOgogIG9zIC4gbWFrZWRpcnMgKCBPT08wME8gKQogIGlmIDQwIC0gNDA6IEkxSWlpSQogb08wb09vMG8gPSAnJwogbzAwT08wbzAgPSAnRW50ZXIgS2V5d29yZCcKIElJaUkxb08gPSBPMDBvTzAwb09PMDBPICggbzAwT08wbzAgKQogb08wb09vMG8gPSB1cmwgKyBJSWlJMW9PCiBPT09vb29PbzAwTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wME8gLCBJSWlJMW9PICsgJy56aXAnICkKIGlmIDY5IC0gNjk6IGkxSUlpICUgT29PME8wMCAlIElJaSAvIGlpaWlpaWlpMSAvIGlpaWlpaWlpMQogaWYgSUlpSTFvTyAhPSAnJyA6CiAgSWkxSTFpMUlpaUkgPSBpSTExMUkxMUkxSTEgLiB5ZXNubyAoICdCYWNrdXAgZXhpc3Rpbmcgc2V0dXAnICwgJ0luc3RhbGxpbmcgY2VydGFpbiBrZXl3b3JkcyBjYW4gcmVzdWx0IGluIHNvbWUgZXhpc3Rpbmcgc2V0dGluZ3Mgb3IgYWRkLW9ucyB0byBiZSByZXBsYWNlZC4gV291bGQgeW91IGxpa2UgdG8gY3JlYXRlIGEgYmFja3VwIGJlZm9yZSBwcm9jZWVkaW5nPycgKQogIGlmIDM3IC0gMzc6IEkxSWlpSSArIE9vb29vb29vT08gLiBJSWkgKyBJMUlpaUkgLiBJSWlpaUkxaUlJSQogIGlmIElpMUkxaTFJaWlJID09IDEgOgogICBJSWlvME8wICggKQogICBpZiA1OSAtIDU5OiBJSTExMWlpaWkgKiBPb29vb29vb09PIC0gT29vb29vb29PTwogIHRyeSA6CiAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgIHhibWMgLiBsb2cgKCAiIyMjIEF0dGVtcHRpbmcgZG93bmxvYWQgIiArIG9PMG9PbzBvICsgIiB0byAiICsgT09Pb29vT28wME8gKQogICBPT29vTzBPT29vIC4gY3JlYXRlICggIldlYiBJbnN0YWxsZXIiICwgIkRvd25sb2FkaW5nICIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBvTzBvT28wbyAsIE9PT29vb09vMDBPICkKICAgeGJtYyAuIGxvZyAoICIjIyMgS2V5d29yZCAiICsgSUlpSTFvTyArICIgU3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQiICkKICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiIiAsICJFeHRyYWN0aW5nIFppcCBQbGVhc2UgV2FpdCIgKQogICBpZiAzMyAtIDMzOiBPMCAuIGkxMWlJaWlJaWkgJSBvMG9PT28wTzBPb28KICAgaWYgemlwZmlsZSAuIGlzX3ppcGZpbGUgKCBPT09vb29PbzAwTyApIDoKICAgIGlmIDUwIC0gNTA6IGlpaWlpaWlpMQogICAgdHJ5IDoKICAgICBleHRyYWN0IC4gYWxsICggT09Pb29vT28wME8gLCBpSWlpMSAsIE9Pb29PME9Pb28gKQogICAgIGlpSWlpaTFJSUlJSSAoIHNob3dkaWFsb2cgPSBGYWxzZSApCiAgICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiS0VZV09SRCBJTlNUQUxMIiAsICIiICwgIkNvbnRlbnQgbm93IGluc3RhbGxlZCIgLCAiIiApCiAgICAgT09vb08wT09vbyAuIGNsb3NlICggKQogICAgIGlmIDgxIC0gODE6IGkxMWlJaWlJaWkgKiBpSWlpMUkxMUkxSUkxIC8gT28wT29vICogT28KICAgIGV4Y2VwdCA6CiAgICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiRXJyb3Igd2l0aCB6aXAiICwgJ1RoZXJlIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gaW5zdGFsbCB0aGlzIGZpbGUuIEl0IG1heSBwb3NzaWJseSBiZSBjb3JydXB0LCBlaXRoZXIgdHJ5IGFnYWluIG9yIGNvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGlzIGtleXdvcmQuJyApCiAgICAgeGJtYyAuIGxvZyAoICIjIyMgVW5hYmxlIHRvIGluc3RhbGwga2V5d29yZCAocGFzc2VkIHppcCBjaGVjayk6ICVzIiAlIElJaUkxb08gKQogICBlbHNlIDoKICAgIGlJMTExSTExSTFJMSAuIG9rICggIktleXdvcmQgRXJyb3IiICwgJ1RoZSBrZXl3b3JkIHlvdSB0eXBlZCBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLiBQbGVhc2UgY2hlY2sgdGhlIHNwZWxsaW5nIGFuZCBpZiB5b3UgY29udGludWUgdG8gcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgaXQgcHJvYmFibHkgbWVhbnMgdGhhdCBrZXl3b3JkIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuJyApCiAgICBpZiA4MyAtIDgzOiBpMTFpSWlpSWlpIC0gSTFJaWlJICogaTExaUlpaUlpaQogIGV4Y2VwdCA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggIktleXdvcmQgRXJyb3IiICwgJ1RoZSBrZXl3b3JkIHlvdSB0eXBlZCBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLiBQbGVhc2UgY2hlY2sgdGhlIHNwZWxsaW5nIGFuZCBpZiB5b3UgY29udGludWUgdG8gcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgaXQgcHJvYmFibHkgbWVhbnMgdGhhdCBrZXl3b3JkIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuJyApCiAgIHhibWMgLiBsb2cgKCAiIyMjIFVuYWJsZSB0byBpbnN0YWxsIGtleXdvcmQgKHVua25vd24gZXJyb3IsIG1vc3QgbGlrZWx5IGEgdHlwbyBpbiBrZXl3b3JkIGVudHJ5KTogJXMiICUgSUlpSTFvTyApCiAgIGlmIDU5IC0gNTk6IElJaUlpMWlJIC0gT29vb29vb29PTyAvIGlpaWlpaWlpMSArIEkxaWkxMWlJaTExaSAuIG8wb09PbzBPME9vbyAtIElJaUlpMWlJCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPT09vb29PbzAwTyApIDoKICBvcyAuIHJlbW92ZSAoIE9PT29vb09vMDBPICkKICBpZiAyOSAtIDI5OiBvb09vCiAgaWYgMjYgLSAyNjogTzAgJSBPbyAtIElJaWlpSTFpSUlJIC4gT28KZGVmIE9vb29PT28wb09PICggKSA6CiBvcyAuIF9leGl0ICggMSApCiBpZiA3MCAtIDcwOiBvMG9PT28wTzBPb28gKyBPT09vT29vME8gLyBJSWlJaTFpSSArIGlpaWlpaWlpMSAvIEkxSWlpSQogaWYgMzMgLSAzMzogT29vb29vb29PTyAuIE8wCmRlZiBvT29JSTFJaUkxSUkxICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnUmVwbGFjZVdpbmRvdyhzZXR0aW5ncyknICkKIGlmIDIxIC0gMjE6IE9vb29vb29vT08gLiBPMCAvIGkxMWlJaWlJaWkKIGlmIDg2IC0gODY6IE9vT29PTzAwIC8gT28KZGVmIElpaTFJICggREIgKSA6CiBpZiBEQiBpbiBbICdBZGRvbnMnICwgJ0FEU1AnICwgJ0VwZycgLCAnTXlNdXNpYycgLCAnTXlWaWRlb3MnICwgJ1RleHR1cmVzJyAsICdUVicgLCAnVmlld01vZGVzJyBdIDoKICBvME9PMDAwb29PbyA9IGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIE8wT29PMDAwTzBPTyAsICclcyouZGInICUgREIgKSApCiAgSTFpMTFJSTEgPSAnJXMoLis/KS5kYicgJSBEQiBbIDEgOiBdCiAgSUkxMSA9IDAKICBmb3IgZmlsZSBpbiBvME9PMDAwb29PbyA6CiAgIHRyeSA6CiAgICBvTzAwT29PME9vbyA9IGludCAoIHJlIC4gY29tcGlsZSAoIEkxaTExSUkxICkgLiBmaW5kYWxsICggZmlsZSApIFsgMCBdICkKICAgZXhjZXB0IDoKICAgIG9PMDBPb08wT29vID0gMAogICBpZiBJSTExIDwgb08wME9vTzBPb28gOgogICAgSUkxMSA9IG9PMDBPb08wT29vCiAgcmV0dXJuICclcyVzLmRiJyAlICggREIgLCBJSTExICkKIGVsc2UgOgogIHJldHVybiBGYWxzZQogIGlmIDY2IC0gNjY6IG8wb09PbzBPME9vbyAtIGlpaWlpaWlpMSAqIG9vT28gLSBJSWkgKyBJSWlJaTFpSQogIGlmIDQ2IC0gNDY6IG8wb09PbzBPME9vbyAtIGkxMWlJaWlJaWkgJSBPb08wTzAwIC8gTzAwT09vMDBvbzBvIC0gT29Pb09PMDAKZGVmIElJaW8wTzAgKCApIDoKIG9PTzBPT09PT28wT28gKCApCiBpZiA4OCAtIDg4OiBvb09vICogSTFJaWlJIC8gT29PME8wMCAtIE9vIC8gaTFJSWkgLiBJSWkKIElJSUkxaWkxID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnJyApICkKIE9PTzBPME9PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJ215X2Z1bGxfYmFja3VwLnppcCcgKSApCiBJaWkxID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnbXlfZnVsbF9iYWNrdXBfR1VJX1NldHRpbmdzLnppcCcgKSApCiBpZiAyNiAtIDI2OiBpMTFpSWlpSWlpIC0gaWlpaWlpaWkxCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJSTFpaTEgKSA6CiAgb3MgLiBtYWtlZGlycyAoIElJSUkxaWkxICkKICBpZiA0NSAtIDQ1OiBpaWlpaWlpaTEgKyBJSTExMWlpaWkgJSBJSWlJaTFpSQogSTFpSUkxSUlpMUlpSSA9IGlJaW9vMG9vTyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogaWYgNTUgLSA1NTogaWlpaWlpaWkxIC0gb29PbyAlIEkxSWlpSQogaWYgKCBub3QgSTFpSUkxSUlpMUlpSSApIDoKICByZXR1cm4gRmFsc2UgLCAwCiAgaWYgNjEgLSA2MTogaWlpaWlpaWkxCiBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKIGkxSUkxSWlpSWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlJMWlpMSAsIG8wME9PMG8wICsgJy56aXAnICkgKQogaWkxMTFpSTFpMSA9IFsgSTFJaUkgXQogT08wMDAgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICdUaHVtYnMuZGInICwgJy5naXRpZ25vcmUnIF0KIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKIE8wMDBvMDAwME8gPSAiQ3JlYXRpbmcgQ29tbXVuaXR5IEJ1aWxkIgogSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiBPMDBvME8gPSAiIgogTzAwb09vME8wbzAwTyA9ICJQbGVhc2UgV2FpdCIKIGlmIDIyIC0gMjI6IGlJaWkxSTExSTFJSTEgLyBpaWlpaWlpaTEgLyBJMUlpaUkgLSBvMG9PT28wTzBPb28KIGlpSUlpaSAoIGlJaWkxICwgT09PME8wT09vICwgb08wb09vbzBPICwgSUkxaUkxMSAsIE8wMG8wTyAsIE8wMG9PbzBPMG8wME8gLCBpaTExMWlJMWkxICwgT08wMDAgKQogaUkxMTFJMTFJMUkxIC4gb2sgKCAnRnVsbCBCYWNrdXAgQ29tcGxldGUnICwgJ1lvdSBjYW4gbG9jYXRlIHlvdXIgYmFja3VwIGF0OltDT0xPUj1kb2RnZXJibHVlXScgLCBPT08wTzBPT28gKyAnWy9DT0xPUl0nICkKIGlmIDIxIC0gMjE6IG9vT28gLiBpMTFpSWlpSWlpICogT09Pb09vbzBPIC4gT28gLyBPbwogaWYgNDIgLSA0MjogT29vb29vb29PTyAvIElJaSAuIG8wb09PbzBPME9vbyAvIE8wIC0gSUlpaWlJMWlJSUkgKiBJSWlpaUkxaUlJSQpkZWYgaTExMWlJaTExSWkgKCApIDoKIGlpMUkxID0gSWlpbzBPbzBvTyAoICkKIG9PbzAwT29vMG8wICggJ0xvZyBWaWV3ZXInICwgaWkxSTEgKQogaWYgNjcgLSA2NzogTzAwT09vMDBvbzBvIC4gT28wT29vCiBpZiAzOSAtIDM5OiBPT09vT29vME8gKiBJSWkKZGVmIE8wb09PMG8wME9PICggKSA6CiBpSTExMUkxMUkxSTEgLiBvayAoICJSZXN0b3JlIGxvY2FsIGd1aXNldHRpbmdzIGZpeCIgLCAiWW91IHNob3VsZCBbQ09MT1I9bGltZV1PTkxZWy9DT0xPUl0gdXNlIHRoaXMgb3B0aW9uIGlmIHRoZSBndWlzZXR0aW5ncyBmaXggaXMgZmFpbGluZyB0byBkb3dubG9hZCB2aWEgdGhlIGFkZG9uLiBJbnN0YWxsaW5nIHZpYSB0aGlzIG1ldGhvZCBtZWFucyB5b3UgZG8gbm90IHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvZiB1cGRhdGVzIiApCiBJSTFpMTFpMWlJMUkgKCApCiBpZiA3OCAtIDc4OiBPb29vb29vb09PIC0gT29Pb09PMDAgLiBpMTFpSWlpSWlpCiBpZiAzNiAtIDM2OiBvb09vICogSUlpSWkxaUkgKyBJSWlpaUkxaUlJSSAqIElJaUlpMWlJIC4gSTFpaTExaUlpMTFpIC0gaUlpaTFJMTFJMUlJMQpkZWYgaTFJSWkxaWkxaTFpaSAoIG1vZGUgKSA6CiBJMWlJSTFJSWkxSWlJID0gaUlpb28wb29PICggaGVhZGluZyA9ICJTZWFyY2ggZm9yIGNvbnRlbnQiICkKIGlmICggbm90IEkxaUlJMUlJaTFJaUkgKSA6CiAgcmV0dXJuIEZhbHNlICwgMAogbzAwT08wbzAgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggSTFpSUkxSUlpMUlpSSApCiBJMTFpaTFpICggbW9kZSArICcmbmFtZT0nICsgbzAwT08wbzAgKQogaWYgOTcgLSA5NzogSUkxMTFpaWlpCiBpZiAzOCAtIDM4OiBJMUlpaUkKZGVmIE8wb29PMG8gKCBzcmMgLCBkc3QgLCBjbGVhbiApIDoKIGZvciBpaWlpaTFpMSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggc3JjICkgOgogIE8wT29vTzBvbyA9IGlpaWlpMWkxIC4gcmVwbGFjZSAoIHNyYyAsIGRzdCAsIDEgKQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPME9vb08wb28gKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBPME9vb08wb28gKQogIGZvciBvME9PMCBpbiBpaUkxaWlpIDoKICAgTzBvT28wMG8gPSBvcyAuIHBhdGggLiBqb2luICggaWlpaWkxaTEgLCBvME9PMCApCiAgIG9vb28wT29PTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPME9vb08wb28gLCBvME9PMCApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9vb28wT29PTyApIDoKICAgIG9zIC4gcmVtb3ZlICggb29vbzBPb09PICkKICAgc2h1dGlsIC4gbW92ZSAoIE8wb09vMDBvICwgTzBPb29PMG9vICkKIGlmIGNsZWFuID09IDEgOgogIHRyeSA6CiAgIHNodXRpbCAuIHJtdHJlZSAoIHNyYyApCiAgZXhjZXB0IDoKICAgcGFzcwogICBpZiAzNyAtIDM3OiBJMWlpMTFpSWkxMWkgLyBPMDBPT28wMG9vMG8gLSBPb29vb29vb09PIC4gb29PbwogICBpZiA1NyAtIDU3OiBpMTFpSWlpSWlpIC0gT09Pb09vbzBPIC8gaWlpaWlpaWkxIC8gbzBvT09vME8wT29vICogaTExaUlpaUlpaSAqIG8wb09PbzBPME9vbwpkZWYgSTFpT28gKCB0aXRsZSAsIGxpc3QgLCBpbWFnZXMgLCBkZXNjcmlwdGlvbiApIDoKIGdsb2JhbCBwb3MKIGdsb2JhbCBsaXN0aWNvbgogY2xhc3MgSWlJaWkxaUlJSUkgKCBweXhibWN0IC4gQWRkb25EaWFsb2dXaW5kb3cgKSA6CiAgZGVmIF9faW5pdF9fICggc2VsZiAsIHRpdGxlID0gIiIgLCBpdGVtcyA9IE5vbmUgLCBpbWFnZXMgPSBOb25lICwgZGVzY3JpcHRpb24gPSBOb25lICkgOgogICBzdXBlciAoIElpSWlpMWlJSUlJICwgc2VsZiApIC4gX19pbml0X18gKCB0aXRsZSApCiAgIHNlbGYgLiBzZXRHZW9tZXRyeSAoIDExMDAgLCA3MDAgLCAyMCAsIDIwICkKICAgc2VsZiAuIHNlbGVjdGVkID0gWyBdCiAgIHNlbGYgLiBzZXRfY29udHJvbHMgKCApCiAgIHNlbGYgLiBjb25uZWN0X2NvbnRyb2xzICggKQogICBzZWxmIC4gbGlzdGluZyAuIGFkZEl0ZW1zICggaXRlbXMgb3IgWyBdICkKICAgc2VsZiAuIHNldF9uYXZpZ2F0aW9uICggKQogICBzZWxmIC4gY29ubmVjdCAoIElJSWkxSTFJSWlpMUlJICwgc2VsZiAuIHVwZGF0ZV9saXN0ICkKICAgc2VsZiAuIGNvbm5lY3QgKCBPMGlpMWlpMWlpICwgc2VsZiAuIHVwZGF0ZV9saXN0ICkKICAgaWYgOTIgLSA5MjogSUlpaWlJMWlJSUkgLyBpSWlpMUkxMUkxSUkxCiAgZGVmIHNldF9jb250cm9scyAoIHNlbGYgKSA6CiAgIEkxSWlpaWkgPSBweXhibWN0IC4gSW1hZ2UgKCBpSWlJSUlpICwgYXNwZWN0UmF0aW8gPSAwICkKICAgSTFJaWlpaSAuIHNldEltYWdlICggaUlpSUlJaSApCiAgIHNlbGYgLiBsaXN0aW5nID0gcHl4Ym1jdCAuIExpc3QgKCBfaW1hZ2VXaWR0aCA9IDE1ICkKICAgc2VsZiAuIHBsYWNlQ29udHJvbCAoIEkxSWlpaWkgLCAwICwgMCAsIHJvd3NwYW4gPSAyMCAsIGNvbHVtbnNwYW4gPSAyMCApCiAgIG9vbzAwMDBvbzAgPSBweXhibWN0IC4gSW1hZ2UgKCBpbWFnZXMgWyAwIF0gLCBhc3BlY3RSYXRpbyA9IDIgKQogICBvb28wMDAwb28wIC4gc2V0SW1hZ2UgKCBpbWFnZXMgWyAwIF0gKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggb29vMDAwMG9vMCAsIDAgLCAxMSAsIHJvd3NwYW4gPSA4ICwgY29sdW1uc3BhbiA9IDggLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCApCiAgIHNlbGYgLiB0ZXh0Ym94ID0gcHl4Ym1jdCAuIFRleHRCb3ggKCApCiAgIHNlbGYgLiBwbGFjZUNvbnRyb2wgKCBzZWxmIC4gdGV4dGJveCAsIDggLCAxMSAsIHJvd3NwYW4gPSA5ICwgY29sdW1uc3BhbiA9IDkgLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCApCiAgIHNlbGYgLiB0ZXh0Ym94IC4gc2V0VGV4dCAoIGRlc2NyaXB0aW9uIFsgMCBdICkKICAgc2VsZiAuIHRleHRib3ggLiBhdXRvU2Nyb2xsICggNTAwMCAsIDIwMDAgLCA4MDAwICkKICAgc2VsZiAuIG9rX2J1dHRvbiA9IHB5eGJtY3QgLiBCdXR0b24gKCAiT0siICkKICAgc2VsZiAuIHBsYWNlQ29udHJvbCAoIHNlbGYgLiBva19idXR0b24gLCAxNyAsIDEzICwgcGFkX3ggPSAxMCAsIHBhZF95ID0gMTAgLCByb3dzcGFuID0gMiAsIGNvbHVtbnNwYW4gPSAzICkKICAgc2VsZiAuIGNhbmNlbF9idXR0b24gPSBweXhibWN0IC4gQnV0dG9uICggIkNhbmNlbCIgKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggc2VsZiAuIGNhbmNlbF9idXR0b24gLCAxNyAsIDE2ICwgcGFkX3ggPSAxMCAsIHBhZF95ID0gMTAgLCByb3dzcGFuID0gMiAsIGNvbHVtbnNwYW4gPSAzICkKICAgc2VsZiAuIHBsYWNlQ29udHJvbCAoIHNlbGYgLiBsaXN0aW5nICwgMCAsIDAgLCByb3dzcGFuID0gMjAgLCBjb2x1bW5zcGFuID0gMTAgLCBwYWRfeSA9IDEwICkKICAgaWYgNTggLSA1ODogSUlpSWkxaUkgJSBpSWlpMUkxMUkxSUkxIC4gaUlpaTFJMTFJMUlJMSAvIE9PT29Pb28wTwogIGRlZiBjb25uZWN0X2NvbnRyb2xzICggc2VsZiApIDoKICAgc2VsZiAuIGNvbm5lY3QgKCBzZWxmIC4gbGlzdGluZyAsIHNlbGYgLiBjaGVja191bmNoZWNrICkKICAgc2VsZiAuIGNvbm5lY3QgKCBzZWxmIC4gb2tfYnV0dG9uICwgc2VsZiAuIG9rICkKICAgc2VsZiAuIGNvbm5lY3QgKCBzZWxmIC4gY2FuY2VsX2J1dHRvbiAsIHNlbGYgLiBjbG9zZSApCiAgIGlmIDc5IC0gNzk6IE9vTzBPMDAgLyBPbyAtIGkxSUlpICsgaTFJSWkgLSBJSWlpaUkxaUlJSSArIElJaWlpSTFpSUlJCiAgZGVmIHNldF9uYXZpZ2F0aW9uICggc2VsZiApIDoKICAgc2VsZiAuIGxpc3RpbmcgLiBjb250cm9sTGVmdCAoIHNlbGYgLiBva19idXR0b24gKQogICBzZWxmIC4gbGlzdGluZyAuIGNvbnRyb2xSaWdodCAoIHNlbGYgLiBva19idXR0b24gKQogICBzZWxmIC4gb2tfYnV0dG9uIC4gc2V0TmF2aWdhdGlvbiAoIHNlbGYgLiBsaXN0aW5nICwgc2VsZiAuIGxpc3RpbmcgLCBzZWxmIC4gY2FuY2VsX2J1dHRvbiAsIHNlbGYgLiBjYW5jZWxfYnV0dG9uICkKICAgc2VsZiAuIGNhbmNlbF9idXR0b24gLiBzZXROYXZpZ2F0aW9uICggc2VsZiAuIGxpc3RpbmcgLCBzZWxmIC4gbGlzdGluZyAsIHNlbGYgLiBva19idXR0b24gLCBzZWxmIC4gb2tfYnV0dG9uICkKICAgaWYgc2VsZiAuIGxpc3RpbmcgLiBzaXplICggKSA6CiAgICBzZWxmIC4gc2V0Rm9jdXMgKCBzZWxmIC4gbGlzdGluZyApCiAgIGVsc2UgOgogICAgc2VsZiAuIHNldEZvY3VzICggc2VsZiAuIGNhbmNlbF9idXR0b24gKQogICAgaWYgNjcgLSA2NzogT29PME8wMCAqIE9vTzBPMDAgLyBPb29vb29vb09PCiAgZGVmIHVwZGF0ZV9saXN0ICggc2VsZiApIDoKICAgT09vb29vbzBPMCA9IHB5eGJtY3QgLiBJbWFnZSAoIG9vbzAwT09Pb29PICwgYXNwZWN0UmF0aW8gPSAwICkKICAgT09vb29vbzBPMCAuIHNldEltYWdlICggb29vMDBPT09vb08gKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggT09vb29vbzBPMCAsIDAgLCAxMSAsIHJvd3NwYW4gPSA4ICwgY29sdW1uc3BhbiA9IDggLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCApCiAgIGlpaTExID0gc2VsZiAuIGxpc3RpbmcgLiBnZXRTZWxlY3RlZFBvc2l0aW9uICggKQogICBvT28wT08wID0gaW1hZ2VzIFsgaWlpMTEgXQogICBvb28wMDAwb28wID0gcHl4Ym1jdCAuIEltYWdlICggb09vME9PMCAsIGFzcGVjdFJhdGlvID0gMiApCiAgIG9vbzAwMDBvbzAgLiBzZXRJbWFnZSAoIG9PbzBPTzAgKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggb29vMDAwMG9vMCAsIDAgLCAxMSAsIHJvd3NwYW4gPSA4ICwgY29sdW1uc3BhbiA9IDggLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCApCiAgIHNlbGYgLiB0ZXh0Ym94IC4gc2V0VGV4dCAoIGRlc2NyaXB0aW9uIFsgaWlpMTEgXSApCiAgIGlmIDU2IC0gNTY6IElJMTExaWlpaSAuIElJMTExaWlpaSArIElJaWlpSTFpSUlJIC4gbzBvT09vME8wT29vCiAgZGVmIGNoZWNrX3VuY2hlY2sgKCBzZWxmICkgOgogICBpMUlpMTExID0gc2VsZiAuIGxpc3RpbmcgLiBnZXRTZWxlY3RlZEl0ZW0gKCApCiAgIGlmIGkxSWkxMTEgLiBnZXRMYWJlbDIgKCApID09ICJjaGVja2VkIiA6CiAgICBpMUlpMTExIC4gc2V0SWNvbkltYWdlICggIiIgKQogICAgaTFJaTExMSAuIHNldExhYmVsMiAoICJ1bmNoZWNrZWQiICkKICAgZWxzZSA6CiAgICBpMUlpMTExIC4gc2V0SWNvbkltYWdlICggSUlJMWlJSTFJMWlpICkKICAgIGkxSWkxMTEgLiBzZXRMYWJlbDIgKCAiY2hlY2tlZCIgKQogICAgaWYgNTggLSA1ODogb29PbyAqIGkxMWlJaWlJaWkgKiBJMUlpaUkgKiBJMWlpMTFpSWkxMWkgJSBpMTFpSWlpSWlpIC0gT29vb29vb29PTwogIGRlZiBvayAoIHNlbGYgKSA6CiAgIHNlbGYgLiBzZWxlY3RlZCA9IFsgaWkxSUkxMUlJSUkgZm9yIGlpMUlJMTFJSUlJIGluIHhyYW5nZSAoIHNlbGYgLiBsaXN0aW5nIC4gc2l6ZSAoICkgKQogaWYgc2VsZiAuIGxpc3RpbmcgLiBnZXRMaXN0SXRlbSAoIGlpMUlJMTFJSUlJICkgLiBnZXRMYWJlbDIgKCApID09ICJjaGVja2VkIiBdCiAgIHN1cGVyICggSWlJaWkxaUlJSUkgLCBzZWxmICkgLiBjbG9zZSAoICkKICAgaWYgOTAgLSA5MDogT28wT29vICogTzAwT09vMDBvbzBvCiAgZGVmIGNsb3NlICggc2VsZiApIDoKICAgc2VsZiAuIHNlbGVjdGVkID0gWyBdCiAgIHN1cGVyICggSWlJaWkxaUlJSUkgLCBzZWxmICkgLiBjbG9zZSAoICkKICAgaWYgNTQgLSA1NDogSTFpaTExaUlpMTFpICsgaUlpaTFJMTFJMUlJMSAlIElJaWlpSTFpSUlJCiBpSTExMUkxMUkxSTEgPSBJaUlpaTFpSUlJSSAoIHRpdGxlICwgbGlzdCAsIGltYWdlcyAsIGRlc2NyaXB0aW9uICkKIGlJMTExSTExSTFJMSAuIGRvTW9kYWwgKCApCiByZXR1cm4gaUkxMTFJMTFJMUkxIC4gc2VsZWN0ZWQKIGRlbCBpSTExMUkxMUkxSTEKIGlmIDI0IC0gMjQ6IE9vTzBPMDAgLyBPMCAqIGlpaWlpaWlpMSAlIGlJaWkxSTExSTFJSTEgKyBpMUlJaSAlIE8wCiBpZiAyNiAtIDI2OiBpaWlpaWlpaTEgKyBJSWlpaUkxaUlJSSAtIE8wICogb29PbyAqIElJMTExaWlpaSAuIEkxaWkxMWlJaTExaQpkZWYgT09vbyAoICkgOgogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXUhvdyB0byBpbnN0YWxsIGtleXdvcmRzWy9DT0xPUl0nICwgJycgLCAnaW5zdHJ1Y3Rpb25zXzMnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdSG93IHRvIGNyZWF0ZSBrZXl3b3Jkc1svQ09MT1JdJyAsICcnICwgJ2luc3RydWN0aW9uc180JyAsICdtYWlubWVudS9rZXl3b3JkLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1nb2xkXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWy9DT0xPUl0nICwgJycgLCAnJyAsICdtYWlubWVudS9rZXl3b3JkLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0luc3RhbGwgS2V5d29yZHMnICwgJ2h0dHA6Ly91cmxzaG9ydGJvdC5jb20vbm9vYnMnICwgJ2tleXdvcmRzJyAsICdtYWlubWVudS9rZXl3b3JkLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0NyZWF0ZSBLZXl3b3JkcycgLCAnY3JlYXRlX3BhY2snICwgJ2NyZWF0ZV9rZXl3b3JkJyAsICdtYWlubWVudS9rZXl3b3JkLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgNzYgLSA3NjogT29Pb09PMDAgKiBPMDBPT28wMG9vMG8gKiBpSWlpMUkxMUkxSUkxICogaTFJSWkgLSBJMWlpMTFpSWkxMWkKIGlmIDEgLSAxOiBPMDBPT28wMG9vMG8gKiBPb29vb29vb09PIC0gaWlpaWlpaWkxICUgT28gLSBPb29vb29vb09PCmRlZiBvb29vT09vICggdGl0bGUgLCBtZXNzYWdlICwgdGltZXMgPSAyMDAwICwgaWNvbiA9IE9vMDBPT09PTyApIDoKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdYQk1DLk5vdGlmaWNhdGlvbiglcywgJXMsICVzLCAlcyknICUgKCB0aXRsZSAsIG1lc3NhZ2UgLCB0aW1lcyAsIGljb24gKSApCiBpZiA3MyAtIDczOiBPMDBPT28wMG9vMG8gKyBJSWlJaTFpSSAlIE9vICsgT29vb29vb29PTyAqIE9vME9vbwogaWYgMTggLSAxODogT29vb29vb29PTwpkZWYgb29vaWkxMTFJMUkxSSAoICkgOgogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KGZpbGVtYW5hZ2VyLHJldHVybiknICkKIHJldHVybgogaWYgMzQgLSAzNDogSTFpaTExaUlpMTFpICUgaTFJSWkgLSBPb08wTzAwCiBpZiAxOCAtIDE4OiBJMUlpaUkgKyBJSWkgLSBJSWlJaTFpSSAlIElJMTExaWlpaSAvIE9vT29PTzAwICUgTzAKZGVmIE9vME9PTzAwb28wICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coc3lzdGVtaW5mbyknICkKIGlmIDgwIC0gODA6IElJaWlpSTFpSUlJIC4gbzBvT09vME8wT29vCiBpZiA4IC0gODogbzBvT09vME8wT29vIC4gSUkxMTFpaWlpIC4gSUlpSWkxaUkgLSBpMTFpSWlpSWlpCmRlZiBvb28wTzBvMDBPICggdXJsICwgdCApIDoKIEkxMWlJSWkxSTEgPSB1cmxsaWIyIC4gUmVxdWVzdCAoIHVybCApCiBJMTFpSUlpMUkxIC4gYWRkX2hlYWRlciAoICdVc2VyLUFnZW50JyAsICdNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCAxMC4wOyBXT1c2NDsgV2luZG93cyBOVCA1LjE7IGVuLUdCOyBydjoxLjkuMC4zKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDUuMC4yNDU0Ljg1IFNhZmFyaS81MzcuMzYgR2Vja28vMjAwODA5MjQxNyBGaXJlZm94LzMuMC4zJyApCiBpZiAxMDAgLSAxMDA6IGkxMWlJaWlJaWkgLiBPbyAuIGkxMWlJaWlJaWkKIE9Pb29vMDAgPSAwCiBPMGkxSTExSSA9IEZhbHNlCiB3aGlsZSBPT29vbzAwIDwgNSBhbmQgTzBpMUkxMUkgPT0gRmFsc2UgOgogIG9PT09vb09vME8gPSB1cmxsaWIyIC4gdXJsb3BlbiAoIEkxMWlJSWkxSTEgLCB0aW1lb3V0ID0gdCApCiAgTzBPb29vTzAgPSBvT09Pb29PbzBPIC4gcmVhZCAoICkKICBvT09Pb29PbzBPIC4gY2xvc2UgKCApCiAgT09vb28wMCArPSAxCiAgaWYgTzBPb29vTzAgIT0gJycgOgogICBPMGkxSTExSSA9IFRydWUKIGlmIE8waTFJMTFJID09IFRydWUgOgogIHJldHVybiBPME9vb29PMCAuIHJlcGxhY2UgKCAnXHInICwgJycgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHQnICwgJycgKQogZWxzZSA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnVW5hYmxlIHRvIGNvbnRhY3Qgc2VydmVyJyAsICdUaGVyZSB3YXMgYSBwcm9ibGVtIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNlcnZlciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nICkKICByZXR1cm4KICBpZiA4MSAtIDgxOiBJMUlpaUkKICBpZiA3NiAtIDc2OiBPMCAtIGlpaWlpaWlpMSAvIE8wME9PbzAwb28wbyAuIE9vME9vbyAtIE8wME9PbzAwb28wbwpkZWYgTzBvMDBPb29vTyAoICkgOgogaW1wb3J0IHRhcmZpbGUKIGlmIDE1IC0gMTU6IElJMTExaWlpaSAtIE8wME9PbzAwb28wbyAtIElJaUlpMWlJIC4gb29PbyAvIGkxMWlJaWlJaWkKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPME9vMDAwb29PMDAgKSA6CiAgb3MgLiBtYWtlZGlycyAoIE8wT28wMDBvb08wMCApCiAgaWYgMzggLSAzODogT29PME8wMAogT09vb08wT09vbyAuIGNyZWF0ZSAoICJDcmVhdGluZyBCYWNrdXAiICwgIkFkZGluZyBmaWxlcy4uLiAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIElpaUlJSUlJID0gdGFyZmlsZSAuIG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggTzBPbzAwMG9vTzAwICwgaWlpSUkgKCApICsgJy50YXInICkgLCAndycgKQogaWYgODMgLSA4MzogaTExaUlpaUlpaSArIG9vT28gJSBpMUlJaSAuIElJaWlpSTFpSUlJICsgSTFpaTExaUlpMTFpCiBmb3IgT09Pb29vb29PMG9PT29PIGluIG9vb29vT29vMG9vbyA6CiAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiQmFja2luZyBVcCIgLCAnW0NPTE9SIGJsdWVdJXNbL0NPTE9SXScgJSBPT09vb29vb08wb09Pb08gLCAnUGxlYXNlIFdhaXQnICkKICBJaWlJSUlJSSAuIGFkZCAoIE9PT29vb29vTzBvT09vTyApCiAgaWYgMjYgLSAyNjogSUlpIC8gSUlpICsgT28wT29vIC0gbzBvT09vME8wT29vICUgSUkxMTFpaWlpIC4gT29vb29vb29PTwogSWlpSUlJSUkgLiBjbG9zZSAoICkKIE9Pb29PME9Pb28gLiBjbG9zZSAoICkKIGlmIDcgLSA3OiBJSTExMWlpaWkgLSBJMWlpMTFpSWkxMWkgLyBPT09vT29vME8gJSBPb29vb29vb09PICsgaTFJSWkKIGlmIDQyIC0gNDI6IE9PT29Pb28wTyArIGkxSUlpIC0gTzAwT09vMDBvbzBvIC8gSUlpaWlJMWlJSUkgLiBJSWlJaTFpSQpkZWYgSWlvTzBPICggKSA6CiBpaTFJMSA9IElpaW8wT28wb08gKCApCiBpZiAnUnVubmluZyBvbiBPcGVuRUxFQycgaW4gaWkxSTEgb3IgJ1J1bm5pbmcgb24gTGlicmVFTEVDJyBpbiBpaTFJMSA6CiAgcmV0dXJuIFRydWUKICBpZiAzMCAtIDMwOiBPbzBPb28gKyBPMDBPT28wMG9vMG8gJSBpMTFpSWlpSWlpICogaTFJSWkgKyBJMUlpaUkgJSBPbwogIGlmIDMwIC0gMzA6IGkxMWlJaWlJaWkgKiBPbzBPb28gLiBJSTExMWlpaWkgKyBJMWlpMTFpSWkxMWkgLyBvMG9PT28wTzBPb28gJSBJSWkKZGVmIE9PT28wbyAoICkgOgogdHJ5IDoKICB4Ym1jYWRkb24gLiBBZGRvbiAoIGlkID0gJ3NlcnZpY2Uub3BlbmVsZWMuc2V0dGluZ3MnICkgLiBnZXRBZGRvbkluZm8gKCAnbmFtZScgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdBY3RpdmF0ZVdpbmRvdygxMDAyNSxwbHVnaW46Ly9zZXJ2aWNlLm9wZW5lbGVjLnNldHRpbmdzLHJldHVybiknICkKIGV4Y2VwdCA6CiAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9ICdzZXJ2aWNlLmxpYnJlZWxlYy5zZXR0aW5ncycgKSAuIGdldEFkZG9uSW5mbyAoICduYW1lJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KDEwMDI1LHBsdWdpbjovL3NlcnZpY2UubGlicmVlbGVjLnNldHRpbmdzLHJldHVybiknICkKICBpZiA5OCAtIDk4OiBPMCAlIGkxMWlJaWlJaWkgJSBPbwogIGlmIDYgLSA2OiBJSWkgLyBPMDBPT28wMG9vMG8gLyBJSWlJaTFpSSArIEkxSWlpSSAvIE9vME9vbyAlIGkxSUlpCmRlZiBpSUkgKCB4bWxmaWxlICkgOgogaWYgNzMgLSA3Mzogb29PbyAtIEkxaWkxMWlJaTExaSAvIE9vb29vb29vT08gLSBPb08wTzAwIC8gSTFJaWlJCiBpZiAnaHR0cCcgaW4geG1sZmlsZSA6CiAgSTExMUlJMWlJSUlJID0gJ25vbmUnCiAgT29vMDBvbzBvb08wID0geG1sZmlsZSBbIC0gMTAgOiBdCiAgT29vMDBvbzBvb08wID0gT29vMDBvbzBvb08wIFsgOiAtIDQgXQogIGkxaWkxaTEgPSBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIEkxSWlJICwgJ2xhdGVzdCcgKQogIGlmIDQyIC0gNDI6IG9vT28KICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpMWlpMWkxICkgOgogICBJSWlJaUkgPSBvcGVuICggaTFpaTFpMSAsIG1vZGUgPSAncicgKQogICBJMTExSUkxaUlJSUkgPSBJSWlJaUkgLiByZWFkICggKQogICBJSWlJaUkgLiBjbG9zZSAoICkKICAgaWYgMjIgLSAyMjogaUlpaTFJMTFJMUlJMSAlIEkxSWlpSSAuIE8wCiAgaWYgSTExMUlJMWlJSUlJID09IE9vbzAwb28wb29PMCA6CiAgIE9vbzAwb28wb29PMCA9IEkxMTFJSTFpSUlJSQogICBpZiAxMyAtIDEzOiBJSTExMWlpaWkgJSBpMUlJaSAtIE9vT29PTzAwICsgSUlpSWkxaUkKICBlbHNlIDoKICAgT09vb08wT09vbyAuIGNyZWF0ZSAoICdHcmFiYmluZyBMYXRlc3QgVXBkYXRlcycgLCAnJyAsICcnICwgJycgKQogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCB4bWxmaWxlICwgb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgSTFJaUkgLCAncmVzb3VyY2VzJyAsICdza2lucycgLCAnRGVmYXVsdFNraW4nICwgJ21lZGlhJyAsICdsYXRlc3QuanBnJyApICkKICAgT29vb29PT29vMCA9IG9wZW4gKCBpMWlpMWkxICwgbW9kZSA9ICd3KycgKQogICBPb29vb09Pb28wIC4gd3JpdGUgKCBPb28wMG9vMG9vTzAgKQogICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgeG1sZmlsZSA9ICdsYXRlc3QueG1sJwogT28wME9PID0gT28wb28wME9PME8gKCB4bWxmaWxlICwgbzBPIC4gZ2V0QWRkb25JbmZvICggJ3BhdGgnICkgLCAnRGVmYXVsdFNraW4nICwgY2xvc2VfdGltZSA9IDM0ICkKIE9vMDBPTyAuIGRvTW9kYWwgKCApCiBkZWwgT28wME9PCiBpZiA4IC0gODogT29PME8wMCArIElJaSAuIE9vCiBpZiA4NiAtIDg2OiBPb08wTzAwIC0gT09Pb09vbzBPCmRlZiBPb09PbyAoIHJlY3Vyc2l2ZV9sb2NhdGlvbiAsIHJlbW90ZV9wYXRoICkgOgogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIHJlY3Vyc2l2ZV9sb2NhdGlvbiApIDoKICBvcyAuIG1ha2VkaXJzICggcmVjdXJzaXZlX2xvY2F0aW9uICkKICBpZiA4MyAtIDgzOiBJMUlpaUkgJSBPbzBPb28gKyBPMDBPT28wMG9vMG8gKyBpMTFpSWlpSWlpCiBPME9vb29PMCA9IG9vbzBPMG8wME8gKCByZW1vdGVfcGF0aCAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIG8wT08wMDBvb09vID0gcmUgLiBjb21waWxlICggJ2hyZWY9IiguKz8pIicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlmIDcwIC0gNzA6IGlJaWkxSTExSTFJSTEKIGZvciBPb29PMG9PbyBpbiBvME9PMDAwb29PbyA6CiAgb09PbzAwTzBPT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggcmVjdXJzaXZlX2xvY2F0aW9uICwgT29vTzBvT28gKSApCiAgaWYgNzkgLSA3OTogaTExaUlpaUlpaQogIGlmICcvJyBub3QgaW4gT29vTzBvT28gOgogICBpZiAyMCAtIDIwOiBpMUlJaSAtIElJaWlpSTFpSUlJICsgSUlpaWlJMWlJSUkgLiBPb29vb29vb09PIC4gSTFJaWlJICsgT09Pb09vbzBPCiAgIHRyeSA6CiAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJEb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XSIgKyBPb29PMG9PbyArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggcmVtb3RlX3BhdGggKyBPb29PMG9PbyAsIG9PT28wME8wT09PbyAsIE9Pb29PME9Pb28gKQogICAgaWYgMTAgLSAxMDogSUlpaWlJMWlJSUkgLyBPbzBPb28KICAgZXhjZXB0IDoKICAgIHByaW50ICJmYWlsZWQgdG8gaW5zdGFsbCIgKyBPb29PMG9PbwogICAgaWYgODIgLSA4MjogSTFpaTExaUlpMTFpIC8gSUlpSWkxaUkgKyBJMWlpMTFpSWkxMWkgKyBJSWkKICBpZiAnLycgaW4gT29vTzBvT28gYW5kICcuLicgbm90IGluIE9vb08wb09vIGFuZCAnaHR0cCcgbm90IGluIE9vb08wb09vIDoKICAgT28wb29PMDAwT28gPSByZW1vdGVfcGF0aCArIE9vb08wb09vCiAgIE9vT09vICggb09PbzAwTzBPT09vICwgT28wb29PMDAwT28gKQogICBpZiA4NyAtIDg3OiBvMG9PT28wTzBPb28gJSBpMUlJaSArIG9vT28gLSBpSWlpMUkxMUkxSUkxIC4gT28gKyBpMTFpSWlpSWlpCiAgZWxzZSA6CiAgIHBhc3MKICAgaWYgODMgLSA4MzogSTFpaTExaUlpMTFpICogSUkxMTFpaWlpIC4gSUlpIC0gT09Pb09vbzBPCiAgIGlmIDQ2IC0gNDY6IE9vTzBPMDAgJSBJMWlpMTFpSWkxMWkKZGVmIE9PMDBPME8gKCApIDoKIGlJMTExSTExSTFJMSAuIG9rICggIlJlZ2lzdGVyIHRvIHVubG9jayBmZWF0dXJlcyIgLCAiVG8gZ2V0IHRoZSBtb3N0IG91dCBvZiB0aGlzIGFkZG9uIHBsZWFzZSByZWdpc3RlciBhdCB0aGUgTk9PQlNBTkRORVJEUyBmb3J1bSBmb3IgZnJlZS4iICwgJ1dXVy5OT09CU0FORE5FUkRTLkNPTS9TVVBQT1JUJyApCiBpZiA3NiAtIDc2OiBPMDBPT28wMG9vMG8gJSBPMCAqIGlJaWkxSTExSTFJSTEgLSBJMWlpMTFpSWkxMWkgJSBvb09vCiBpZiA1NyAtIDU3OiBJMWlpMTFpSWkxMWkKZGVmIElJMTExMWkxMWkxMSAoICkgOgogSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ0RFTEVURSBBREQtT04gREFUQScgLCAnRG8geW91IHdhbnQgdG8gcmVtb3ZlIGluZGl2aWR1YWwgYWRkb25fZGF0YSBmb2xkZXJzIG9yIHdpcGUgYWxsIGFkZG9uX2RhdGE/JyAsIHllc2xhYmVsID0gJ0VWRVJZVEhJTkcnICwgbm9sYWJlbCA9ICdJTkRJVklEVUFMIElURU1TJyApCiBpZiA0MyAtIDQzOiBPMCAqIGkxMWlJaWlJaWkgLSBPb29vb29vb09PIC0gb29PbwogaWYgSTFpMUkxSTExSWlpSSA6CiAgSTFpMUkxSTExSWlpSSA9IGlJMTExSTExSTFJMSAuIHllc25vICggJ0FyZSB5b3UgQUJTT0xVVEVMWSBjZXJ0YWluPycgLCAnVGhpcyB3aWxsIHJlbW92ZSBBTEwgeW91ciBhZGRvbl9kYXRhLCB0aGVyZVwncyBubyBnZXR0aW5nIGl0IGJhY2shIEFyZSB5b3UgY2VydGFpbiB5b3Ugd2FudCB0byBjb250aW51ZT8nICkKICBpZiBJMWkxSTFJMTFJaWlJIDoKICAgaUlJMWkxICggKQogICBpSTExMUkxMUkxSTEgLiBvayAoICJBZGRvbl9EYXRhIFJlbW92ZWQiICwgJycgLCAnWW91ciBhZGRvbl9kYXRhIGZvbGRlciBoYXMgbm93IGJlZW4gcmVtb3ZlZC4nICwgJycgKQogZWxzZSA6CiAgaUlJSTFpaUlJID0gWyBdCiAgSUlpMWlJMSA9IFsgXQogIElJaTExaTFJSSA9IFsgXQogIE9PMG9vbzBvMCA9IFsgXQogIG9PMG9vT29PID0gWyBdCiAgaWYgNDYgLSA0Njogb29PbyAqIGkxSUlpIC8gSTFpaTExaUlpMTFpCiAgZm9yIGZpbGUgaW4gb3MgLiBsaXN0ZGlyICggaWlJMUlpSSApIDoKICAgaWYgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIGZpbGUgKSApIDoKICAgIHRyeSA6CiAgICAgSWlpSWlpSWkgPSB4Ym1jYWRkb24gLiBBZGRvbiAoIGZpbGUgKQogICAgIG9vbzBPID0gSWlpSWlpSWkgLiBnZXRBZGRvbkluZm8gKCAnbmFtZScgKQogICAgIE9vMG8gPSBJaWlJaWlJaSAuIGdldEFkZG9uSW5mbyAoICdpY29uJyApCiAgICAgTzAwT28gPSBJaWlJaWlJaSAuIGdldEFkZG9uSW5mbyAoICdkZXNjcmlwdGlvbicgKQogICAgZXhjZXB0IDoKICAgICBvb28wTyA9ICdVbmtub3duIEFkZC1vbicKICAgICBPbzBvID0gb28wME8wMG9PCiAgICAgTzAwT28gPSAnTm8gYWRkLW9uIGhhcyBiZWVuIGZvdW5kIG9uIHlvdXIgc3lzdGVtIHRoYXQgbWF0Y2hlcyB0aGlzIElELiBUaGUgbW9zdCBsaWtlbHkgc2NlbmFyaW8gZm9yIHRoaXMgaXMgeW91XCd2ZSBwcmV2aW91c2x5IHVuaW5zdGFsbGVkIHRoaXMgYWRkLW9uIGFuZCBsZWZ0IHRoZSBvbGQgYWRkb25fZGF0YSBvbiB0aGUgc3lzdGVtLicKICAgICBpZiAxMDAgLSAxMDA6IEkxSWlpSSAtIE9vCiAgIGVsc2UgOgogICAgb29vME8gPSAnVW5rbm93biBBZGQtb24nCiAgICBPbzBvID0gb28wME8wMG9PCiAgICBPMDBPbyA9ICdObyBhZGQtb24gaGFzIGJlZW4gZm91bmQgb24geW91ciBzeXN0ZW0gdGhhdCBtYXRjaGVzIHRoaXMgSUQuIFRoZSBtb3N0IGxpa2VseSBzY2VuYXJpbyBmb3IgdGhpcyBpcyB5b3VcJ3ZlIHByZXZpb3VzbHkgdW5pbnN0YWxsZWQgdGhpcyBhZGQtb24gYW5kIGxlZnQgdGhlIG9sZCBhZGRvbl9kYXRhIG9uIHRoZSBzeXN0ZW0uJwogICAgaWYgOTEgLSA5MTogbzBvT09vME8wT29vICogSTFpaTExaUlpMTFpIC0gSUlpSWkxaUkgLiBJSTExMWlpaWkKICAgb09PbzAwTzBPT09vID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCBmaWxlICkKICAgaUlJSTFpaUlJIC4gYXBwZW5kICggJyVzIFtDT0xPUj1nb2xkXSglcylbL0NPTE9SXScgJSAoIGZpbGUgLCBvb28wTyApICkKICAgSUlpMWlJMSAuIGFwcGVuZCAoIE9vMG8gKQogICBJSWkxMWkxSUkgLiBhcHBlbmQgKCBPMDBPbyApCiAgIE9PMG9vbzBvMCAuIGFwcGVuZCAoIG9PT28wME8wT09PbyApCiAgIGlmIDEgLSAxOiBPbyArIElJaSAqIEkxaWkxMWlJaTExaQogIE9vMG9Pb29Pb09vID0gSTFpT28gKCAnQWRkb25fRGF0YSBUbyBSZW1vdmUnICwgaUlJSTFpaUlJICwgSUlpMWlJMSAsIElJaTExaTFJSSApCiAgZm9yIGkxSUkxIGluIE9vMG9Pb29Pb09vIDoKICAgSWlJaUlpMUkxID0gT08wb29vMG8wIFsgaTFJSTEgXQogICBJaUkxaWkxSWkgPSBpSUlJMWlpSUkgWyBpMUlJMSBdCiAgIG9PMG9vT29PIC4gYXBwZW5kICggWyBJaUkxaWkxSWkgLCBJaUlpSWkxSTEgXSApCiAgeGJtYyAuIGxvZyAoICdGSU5BTDogJXMnICUgb08wb29Pb08gKQogIGlmIGxlbiAoIG9PMG9vT29PICkgPiAwIDoKICAgb29vT09Pb09PT28wTyAoIG9PMG9vT29PICkKICAgaWYgNDQgLSA0NDogSUlpSWkxaUkKICAgaWYgNzkgLSA3OTogbzBvT09vME8wT29vICUgT28gLiBPMApkZWYgb29vT09Pb09PT28wTyAoIHVybCApIDoKIE9PMG9PMCA9IDAKIGZvciBpMUlJMSBpbiB1cmwgOgogIEkxMWlJMWkxMUlpSSA9IGkxSUkxIFsgMSBdIC4gcmVwbGFjZSAoIElJMTFpaWlpMUlpICwgaWlJMUlpSSApCiAgaWYgJ2FkZG9uX2RhdGEnIGluIGkxSUkxIFsgMSBdIDoKICAgaTFpaUlJSWkgPSAnQWRkb25fRGF0YScKICBlbHNlIDoKICAgaTFpaUlJSWkgPSAnQWRkb24nCiAgaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAiUmVtb3ZlICVzIiAlIGkxaWlJSUlpICwgIkRvIHlvdSB3YW50IHRvIFJlbW92ZToiICwgJ1tDT0xPUj1kb2RnZXJibHVlXSVzWy9DT0xPUl0nICUgaTFJSTEgWyAwIF0gKSA6CiAgIGlmIG5vdCAnYWRkb25fZGF0YScgaW4gaTFJSTEgWyAxIF0gOgogICAgT08wb08wID0gMQogICBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIGkxSUkxIFsgMSBdICkgOgogICAgaWYgNzggLSA3ODogSUlpaWlJMWlJSUkgLyBJSWlJaTFpSSAqIE8wME9PbzAwb28wbyAuIE9vIC4gb29PbyAtIElJaQogICAgZm9yIElJaUkxaSBpbiBpaUkxaWlpIDoKICAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIElJaUkxaSApICkKICAgICBpZiAzOSAtIDM5OiBpaWlpaWlpaTEgLiBpMUlJaSArIE9vb29vb29vT08gLiBJSWlJaTFpSSAtIGkxMWlJaWlJaWkgJSBJSWkKICAgIGZvciBpaTFpaSBpbiBJMUlJSTExMWkgOgogICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIGlpMWlpICkgKQogICBvcyAuIHJtZGlyICggaTFJSTEgWyAxIF0gKQogICBpZiBub3QgJ2FkZG9uX2RhdGEnIGluIGkxSUkxIFsgMSBdIDoKICAgIGlmIGlJMTExSTExSTFJMSAuIHllc25vICggJ1JlbW92ZSBBZGRvbl9EYXRhPycgLCAnV291bGQgeW91IGFsc28gbGlrZSB0byByZW1vdmUgdGhlIGFkZG9uX2RhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkLW9uPyBUaGlzIGNvbnRhaW5zIHlvdXIgYWRkLW9uIHNldHRpbmdzIGFuZCBjYW4gY29udGFpbiBwZXJzb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHVzZXJuYW1lL3Bhc3N3b3JkLicgKSA6CiAgICAgdHJ5IDoKICAgICAgZm9yIElJSWlpaWlpSTFJICwgSTFJSUkxMTFpICwgaWlJMWlpaSBpbiBvcyAuIHdhbGsgKCBJMTFpSTFpMTFJaUkgKSA6CiAgICAgICBmb3IgSUlpSTFpIGluIGlpSTFpaWkgOgogICAgICAgIG9zIC4gdW5saW5rICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgSUlpSTFpICkgKQogICAgICAgZm9yIGlpMWlpIGluIEkxSUlJMTExaSA6CiAgICAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgaWkxaWkgKSApCiAgICAgIG9zIC4gcm1kaXIgKCBJMTFpSTFpMTFJaUkgKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKIGlmIE9PMG9PMCA6CiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUxvY2FsQWRkb25zJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUFkZG9uUmVwb3MnICkKICBpaUlpMWlJaUkgKCAnbm9kaWFsb2cnICkKICBpMTFJaUkgKCApCiAgaWYgMjAgLSAyMDogT29PME8wMCArIE9PT29Pb28wTyAuIElJMTExaWlpaSAvIGkxMWlJaWlJaWkKICBpZiA1MCAtIDUwOiBPb29vb29vb09PIC8gT29PME8wMCAlIGlJaWkxSTExSTFJSTEKICBpSTExMUkxMUkxSTEgLiBvayAoICdSRU1PVkFMIENPTVBMRVRFJyAsICdUaGUgYWRkb25zIGRhdGFiYXNlIGZpbGUgbm93IG5lZWRzIHB1cmdpbmcsIHRvIGRvIHNvIHdlIG5lZWQgdG8gcmVzdGFydC4gSWYgcHJvbXB0ZWQgcGxlYXNlIGFncmVlIHRvIHRoZSBkZWxldGlvbiBvdGhlcndpc2UgeW91ciBhZGQtb25zIG1heSBzdGlsbCBhcHBlYXIgaW4gS29kaSBldmVuIGlmIHRoZXkgZG9uXCd0IHBoeXNpY2FsbHkgZXhpc3QuJyApCiAgT29vb09PbzBvT08gKCAnd2lwZScgKQogIGlmIDQxIC0gNDE6IEkxaWkxMWlJaTExaSAlIEkxaWkxMWlJaTExaSArIElJaWlpSTFpSUlJIC4gSUlpSWkxaUkgJSBJSWkgKiBpaWlpaWlpaTEKICBpZiA1NyAtIDU3OiBPMDBPT28wMG9vMG8gLiBJSWkgLiBJSTExMWlpaWkgJSBPb29vb29vb09PICogTzAgKyBpSWlpMUkxMUkxSUkxCmRlZiBvbzBPTzBPbzAwMG9vICggKSA6CiBvT08wT09PT09vME9vICggKQogb29vb09vbzAwID0gaUkxMTFJMTFJMUkxIC4gYnJvd3NlICggMSAsICdTZWxlY3QgdGhlIGJhY2t1cCBmaWxlIHlvdSB3YW50IHRvIERFTEVURScgLCAnZmlsZXMnICwgJy56aXAnICwgRmFsc2UgLCBGYWxzZSAsIGlpaWlpSUlpaSApCiBpZiAzOCAtIDM4OiBJSWlJaTFpSSArIGlpaWlpaWlpMQogaWYgb29vb09vbzAwICE9IGlpaWlpSUlpaSA6CiAgaTFJaUkxSWkgPSBudHBhdGggLiBiYXNlbmFtZSAoIG9vb29Pb28wMCApCiAgaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnRGVsZXRlIEJhY2t1cCBGaWxlJyAsICdUaGlzIHdpbGwgY29tcGxldGVseSByZW1vdmUgJyArIGkxSWlJMUlpICwgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGU/JyAsICcnICwgbm9sYWJlbCA9ICdObywgQ2FuY2VsJyAsIHllc2xhYmVsID0gJ1llcywgRGVsZXRlJyApIDoKICAgb3MgLiByZW1vdmUgKCBvb29vT29vMDAgKQogICBpZiA2MCAtIDYwOiBJMWlpMTFpSWkxMWkgLyBJSWlpaUkxaUlJSSAuIGkxMWlJaWlJaWkgLyBPb08wTzAwICUgSUkxMTFpaWlpCiAgIGlmIDYgLSA2OiBJSWlJaTFpSSAlIG8wb09PbzBPME9vbyArIElJaQpkZWYgT08wbzBPMCAoICkgOgogaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnUmVtb3ZlIEFsbCBDcmFzaCBMb2dzPycgLCAnVGhlcmUgaXMgYWJzb2x1dGVseSBubyBoYXJtIGluIGRvaW5nIHRoaXMsIHRoZXNlIGFyZSBsb2cgZmlsZXMgZ2VuZXJhdGVkIHdoZW4gS29kaSBjcmFzaGVzIGFuZCBhcmUgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuJyAsIG5vbGFiZWwgPSAnQ2FuY2VsJyAsIHllc2xhYmVsID0gJ0RlbGV0ZScgKSA6CiAgaUkxSTFJICggKQogIGlJMTExSTExSTFJMSAuIG9rICggIkNyYXNoIExvZ3MgUmVtb3ZlZCIgLCAnJyAsICdZb3VyIGNyYXNoIGxvZyBmaWxlcyBoYXZlIG5vdyBiZWVuIHJlbW92ZWQuJyAsICcnICkKICBpZiA5MCAtIDkwOiBpSWlpMUkxMUkxSUkxICUgbzBvT09vME8wT29vIC8gT29vb29vb29PTyAqIG8wb09PbzBPME9vbwogIGlmIDc0IC0gNzQ6IG9vT28gJSBPb08wTzAwIC8gSUlpSWkxaUkKZGVmIGlJaWlpMWlJMWkgKCApIDoKIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzczNjM3MjY5NzA3NDJlNmQ2ZjY0NzU2YzY1MmU2Mzc5Njc3MDY2NjknICkgKSApCiBpSTExMUkxMUkxSTEgLiBvayAoIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzUzNzQ2MTcyNzQ3NTcwMjA2NDY5NjE2YzZmNjcyMDY0Njk3MzYxNjI2YzY1NjQnICkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc1NDY4NjUyMDQzNmY2ZDZkNzU2ZTY5NzQ3OTIwNTA3MjZmNzQ2NTYzNzQ2OTZmNmUyMDZlNjE2NzIwNzM2MzcyNjU2NTZlMjA2ODYxNzMyMDZlNmY3NzIwNjI2NTY1NmUyMDY0Njk3MzYxNjI2YzY1NjQyZTIwNTk2Zjc1MjA2MzYxNmUyMDZlNmY3NzIwNjM3MjY1NjE3NDY1MjA2MTIwNjI2MTYzNmI3NTcwMjA3NDY4NjE3NDIwNmU2ZjIwNmM2ZjZlNjc2NTcyMjA2ODYxNzMyMDc0Njg2NTIwNzA3MjZmNzQ2NTYzNzQ2OTZmNmUyYzIwNGY0ZTRjNTkyMDc5NmY3NTIwNzQ2ODY1MjA2Mjc1Njk2YzY0MjA2MTc1NzQ2ODZmNzIyMDYzNjE2ZTIwNjQ2OTczNjE2MjZjNjUyMDc0Njg2OTczMjA3MzZmMjA2ZDYxNmI2NTIwNzM3NTcyNjUyMDc5NmY3NTIwNjQ2ZjZlMjc3NDIwNzM2ODYxNzI2NTIwNmM2ZjY3Njk2ZTIwNjk2ZTY2NmYyZScgKSApCiBpZiA4OCAtIDg4OiBJSWlJaTFpSSAqIE9vIC8gaTExaUlpaUlpaSAvIGkxSUlpCiBpZiA3NiAtIDc2OiBPMDBPT28wMG9vMG8gLiBPT09vT29vME8gLSBPbyArIE9vT29PTzAwICogT29PME8wMCAlIElJaQpkZWYgaWlJaTFpSWlJICggKSA6CiBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICdEZWxldGUgUGFja2FnZXMgRm9sZGVyJyAsICdEbyB5b3Ugd2FudCB0byBjbGVhbiB0aGUgcGFja2FnZXMgZm9sZGVyPyBUaGlzIHdpbGwgZnJlZSB1cCBzcGFjZSBieSBkZWxldGluZyB0aGUgb2xkIHppcCBpbnN0YWxsIGZpbGVzIG9mIHlvdXIgYWRkb25zLiBLZWVwaW5nIHRoZXNlIGZpbGVzIGNhbiBhbHNvIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcyB3aGVuIHJlaW5zdGFsbGluZyBhZGRvbnMnICwgbm9sYWJlbCA9ICdDYW5jZWwnICwgeWVzbGFiZWwgPSAnRGVsZXRlJyApCiBpZiAyNCAtIDI0OiBpSWlpMUkxMUkxSUkxICUgT28wT29vICUgaTExaUlpaUlpaQogaWYgSTFpMUkxSTExSWlpSSA9PSAxIDoKICBPME9vb29vTzBvME8wICggKQogIGlJMTExSTExSTFJMSAuIG9rICggIlBhY2thZ2VzIFJlbW92ZWQiICwgJycgLCAnWW91ciB6aXAgaW5zdGFsbCBmaWxlcyBoYXZlIG5vdyBiZWVuIHJlbW92ZWQuJyAsICcnICkKICBpZiA1NSAtIDU1OiBJSWlJaTFpSQogIGlmIDE5IC0gMTk6IE9vb29vb29vT08gLyBPbyAqIGkxMWlJaWlJaWkgLSBJMUlpaUkKZGVmIG9vMG9PTyAoICkgOgogaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAnQ2xlYXIgQ2FjaGVkIEltYWdlcz8nICwgJ1RoaXMgd2lsbCBjbGVhciB5b3VyIHRleHR1cmVzMTMuZGIgZmlsZSBhbmQgcmVtb3ZlIHlvdXIgVGh1bWJuYWlscyBmb2xkZXIuIFRoZXNlIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXBvcHVsYXRlZCBhZnRlciBhIHJlc3RhcnQuJyAsIG5vbGFiZWwgPSAnQ2FuY2VsJyAsIHllc2xhYmVsID0gJ0RlbGV0ZScgKSA6CiAgSWlpaUkxMSAoICkKICBvbzBPMDBvMCAoIE9vb08wICkKICBpZiA5OSAtIDk5OiBPb08wTzAwICUgTzAgLiBJSWkgLSBJMWlpMTFpSWkxMWkgLiBPbzBPb28gLyBPb09vT08wMAogIGlmIGlJMTExSTExSTFJMSAuIHllc25vICggJ1F1aXQgS29kaSBOb3c/JyAsICdDYWNoZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC4nICwgJ1lvdSBtdXN0IG5vdyByZXN0YXJ0IEtvZGksIHdvdWxkIHlvdSBsaWtlIHRvIHF1aXQgbm93PycgLCAnJyAsIG5vbGFiZWwgPSAnSVwnbGwgcmVzdGFydCBsYXRlcicgLCB5ZXNsYWJlbCA9ICdZZXMsIHF1aXQnICkgOgogICB0cnkgOgogICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlJlc3RhcnRBcHAiICkKICAgZXhjZXB0IDoKICAgIE9vb29PT28wb09PICggKQogICAgaWYgNjAgLSA2MDogSTFpaTExaUlpMTFpCiAgICBpZiA3OCAtIDc4OiBvb09vICsgSUkxMTFpaWlpCmRlZiBJaWlpSTExICggKSA6CiBvMG9pMUlJMUkxSWkgPSBvcyAuIHBhdGggLiBqb2luICggTzBPb08wMDBPME9PICwgSWlpMUkgKCAnVGV4dHVyZXMnICkgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBvaTFJSTFJMUlpICkgOgogIHRyeSA6CiAgIEkxSUlJaSA9IGRhdGFiYXNlIC4gY29ubmVjdCAoIG8wb2kxSUkxSTFJaSApCiAgIEkxMTFJSWkgPSBJMUlJSWkgLiBjdXJzb3IgKCApCiAgZXhjZXB0IEV4Y2VwdGlvbiAsIG9vME9vT0lpSTFJSUlpSTFJMWkgOgogICB4Ym1jIC4gbG9nICggc3RyICggb28wT29PSWlJMUlJSWlJMUkxaSApICkKICAgcmV0dXJuIEZhbHNlCiBlbHNlIDoKICB4Ym1jIC4gbG9nICggJyVzIG5vdCBmb3VuZC4nICUgbzBvaTFJSTFJMUlpICkKICByZXR1cm4gRmFsc2UKICBpZiA4NCAtIDg0OiBPb09vT08wMCAtIE9PT29Pb28wTwogSTExMUlJaSAuIGV4ZWN1dGUgKCAiIiJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0YWJsZSc7IiIiICkKIGZvciBPb08wME8wME8wIGluIEkxMTFJSWkgLiBmZXRjaGFsbCAoICkgOgogIGlmIE9vTzAwTzAwTzAgWyAwIF0gPT0gJ3ZlcnNpb24nIDoKICAgeGJtYyAuIGxvZyAoICdEYXRhIGZyb20gdGFibGUgYCVzYCBza2lwcGVkLicgJSBPb08wME8wME8wIFsgMCBdICkKICBlbHNlIDoKICAgdHJ5IDoKICAgIEkxMTFJSWkgLiBleGVjdXRlICggIiIiREVMRVRFIEZST00gJXMiIiIgJSBPb08wME8wME8wIFsgMCBdICkKICAgIEkxSUlJaSAuIGNvbW1pdCAoICkKICAgIHhibWMgLiBsb2cgKCAnRGF0YSBmcm9tIHRhYmxlIGAlc2AgY2xlYXJlZC4nICUgT29PMDBPMDBPMCBbIDAgXSApCiAgIGV4Y2VwdCBvbzBPb09JaUkxSUlJaUkxSTFpIDoKICAgIHhibWMgLiBsb2cgKCBzdHIgKCBvbzBPb09JaUkxSUlJaUkxSTFpICkgKQogICAgaWYgNzYgLSA3NjogSTFJaWlJICUgaTExaUlpaUlpaSArIE9vCiB4Ym1jIC4gbG9nICggJyVzIERCIFB1cmdpbmcgQ29tcGxldGUuJyAlIG8wb2kxSUkxSTFJaSApCiBJMTFpID0gbzBvaTFJSTFJMUlpIC4gcmVwbGFjZSAoICdcXCcgLCAnLycgKSAuIHNwbGl0ICggJy8nICkKIG9vb29PT28gKCAiUHVyZ2UgRGF0YWJhc2UiICwgIiVzIENvbXBsZXRlIiAlIEkxMWkgWyBsZW4gKCBJMTFpICkgLSAxIF0gKQogaWYgMTkgLSAxOTogT28wT29vICsgSUlpSWkxaUkgLiBPb29vb29vb09PIC0gaTFJSWkKIGlmIDk2IC0gOTY6IElJaUlpMWlJICUgSUlpSWkxaUkgJSBJSWkgLyBJSWkgLSBJMWlpMTFpSWkxMWkKZGVmIGkxMWkxTzBPMCAoIG5hbWUgLCB1cmwgLCBkZXNjcmlwdGlvbiApIDoKIGlmICdCYWNrdXAnIGluIG5hbWUgOgogIG9PTzBPT09PT28wT28gKCApCiAgSTFJSSA9IG9wZW4gKCB1cmwgKSAuIHJlYWQgKCApCiAgbzBvME9vT08wME9vID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsIGRlc2NyaXB0aW9uIC4gc3BsaXQgKCAnWW91ciAnICkgWyAxIF0gKQogIElJaUkxaSA9IG9wZW4gKCBvMG8wT29PTzAwT28gLCBtb2RlID0gJ3cnICkKICBJSWlJMWkgLiB3cml0ZSAoIEkxSUkgKQogIElJaUkxaSAuIGNsb3NlICggKQogIGlmIDMzIC0gMzM6IElJaUlpMWlJICUgT29vb29vb29PTyAvIG9vT28KIGVsc2UgOgogIGlmICdndWlzZXR0aW5ncy54bWwnIGluIGRlc2NyaXB0aW9uIDoKICAgT08wT09vbzBPT08gPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsIGRlc2NyaXB0aW9uIC4gc3BsaXQgKCAnWW91ciAnICkgWyAxIF0gKSApIC4gcmVhZCAoICkKICAgSUkxaUlJaUkgPSAnPHNldHRpbmcgdHlwZT0iKC4rPykiIG5hbWU9IiVzLiguKz8pIj4oLis/KTwvc2V0dGluZz4nICUgbzAwT08wME9vTwogICBvME9PMDAwb29PbyA9IHJlIC4gY29tcGlsZSAoIElJMWlJSWlJICkgLiBmaW5kYWxsICggT08wT09vbzBPT08gKQogICBpZiA3MSAtIDcxOiBpMTFpSWlpSWlpIC8gaTFJSWkgKiBJMUlpaUkgLyBPb09vT08wMAogICBmb3IgdHlwZSAsIGkxSSAsIE8wT29PMG9vME9vMDBvT09PMG8gaW4gbzBPTzAwMG9vT28gOgogICAgTzBPb08wb28wT28wMG9PT08wbyA9IE8wT29PMG9vME9vMDBvT09PMG8gLiByZXBsYWNlICggJyZxdW90OycgLCAnJyApIC4gcmVwbGFjZSAoICcmYW1wOycgLCAnJicgKQogICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlNraW4uU2V0JXMoJXMsJXMpIiAlICggdHlwZSAuIHRpdGxlICggKSAsIGkxSSAsIE8wT29PMG9vME9vMDBvT09PMG8gKSApCiAgICBpZiA2MCAtIDYwOiBPT09vT29vME8gLiBPb09vT08wMCAuIElJMTExaWlpaQogIGVsc2UgOgogICBvMG8wT29PTzAwT28gPSBvcyAuIHBhdGggLiBqb2luICggdXJsICkKICAgSTFJSSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgZGVzY3JpcHRpb24gLiBzcGxpdCAoICdZb3VyICcgKSBbIDEgXSApICkgLiByZWFkICggKQogICBJSWlJMWkgPSBvcGVuICggbzBvME9vT08wME9vICwgbW9kZSA9ICd3JyApCiAgIElJaUkxaSAuIHdyaXRlICggSTFJSSApCiAgIElJaUkxaSAuIGNsb3NlICggKQogICBpZiAxMyAtIDEzOiBJSWlpaUkxaUlJSSAtIE9vb29vb29vT08gKyBJMUlpaUkgLiBJSWlJaTFpSSAlIE8wICsgSTFJaWlJCiBpSTExMUkxMUkxSTEgLiBvayAoICJSZXN0b3JlIENvbXBsZXRlIiAsICIiICwgJ0FsbCBEb25lICEnICwgJycgKQogaWYgNzggLSA3ODogT29PME8wMCAlIElJMTExaWlpaSArIE9vT29PTzAwIC8gSTFJaWlJCiBpZiAzNCAtIDM0OiBvMG9PT28wTzBPb28gJSBJMWlpMTFpSWkxMWkgKyBPMDBPT28wMG9vMG8gKiBPT09vT29vME8gLyBvb09vCmRlZiBpMTExSWlpMTFpMUlpICggbmFtZSAsIHVybCAsIHZpZGVvICwgZGVzY3JpcHRpb24gLCBza2lucyAsIGd1aXNldHRpbmdzbGluayAsIGFydHBhY2sgKSA6CiBvbzAwMDAwb29Pb29PID0gMQogb28wID0gMAogbzBPTzAwb09PID0gb3MgLiBwYXRoIC4gam9pbiAoIGlJaWkxICwgJ0NQX1Byb2ZpbGVzJyApCiBJaWlJSTFpSWkgPSBvcyAuIHBhdGggLiBqb2luICggbzBPTzAwb09PICwgJ2xpc3QudHh0JyApCiBJSTExMUlpaWlJMSA9IFsgXQogb29vb09vbzAwID0gZGVzY3JpcHRpb24gLiByZXBsYWNlICggJyAnICwgJ18nICkgLiByZXBsYWNlICggIiciICwgIiIgKSAuIHJlcGxhY2UgKCAiOiIgLCAiLSIgKQogaWYgOTYgLSA5NjogT29vb29vb29PTyAlIElJaUlpMWlJIC0gT29vb29vb29PTyAlIE8wCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBPTzAwb09PICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvME9PMDBvT08gKQogIGlmIDIxIC0gMjE6IElJaUlpMWlJCiBpSWlpaTFJaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvME9PMDBvT08gLCBvb29vT29vMDAgKQogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlJaWlpMUlpICkgOgogIG9zIC4gbWFrZWRpcnMgKCBpSWlpaTFJaSApCiBlbHNlIDoKICBvbzAgPSBpSTExMUkxMUkxSTEgLiB5ZXNubyAoICdQcm9maWxlIEFscmVhZHkgRXhpc3RzJyAsICdUaGlzIGJ1aWxkIGlzIGFscmVhZHkgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLCB3b3VsZCB5b3UgbGlrZSB0byByZW1vdmUgdGhlIG9sZCBvbmUgYW5kIHJlaW5zdGFsbD8nICkKICBpZiBvbzAgPT0gMSA6CiAgIHRyeSA6CiAgICBzaHV0aWwgLiBybXRyZWUgKCBpSWlpaTFJaSApCiAgICBvcyAuIG1ha2VkaXJzICggaUlpaWkxSWkgKQogICBleGNlcHQgOgogICAgcGFzcwogIGVsc2UgOgogICBvbzAwMDAwb29Pb29PID0gMgogICBpZiAxNyAtIDE3OiBPMCAtIE8wME9PbzAwb28wbyArIElJaWlpSTFpSUlJCiBpZiBvbzAwMDAwb29Pb29PID09IDEgOgogIE9PT29vb09vMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBPTzAgLCBvb29vT29vMDAgKyAnX2d1aS56aXAnICkKICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIERvd25sb2FkIHBhdGggPSAlcyIgJSBPT09vb29PbzAwTyApCiAgIGlmIDQ5IC0gNDk6IE9vME9vbyAlIG9vT28KICBPT29vTzBPT29vIC4gY3JlYXRlICggIkNvbW11bml0eSBCdWlsZHMiICwgIkRvd25sb2FkaW5nIFNraW4gVHdlYWtzIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgdHJ5IDoKICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggZ3Vpc2V0dGluZ3NsaW5rICwgT09Pb29vT28wME8gKQogICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBndWlzZXR0aW5ncy54bWwiICkKICBleGNlcHQgOgogICBpSTExMUkxMUkxSTEgLiBvayAoICdQcm9ibGVtIERldGVjdGVkJyAsICdTb3JyeSB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHRoZSBndWlzZXR0aW5ncyBmaWxlLiBQbGVhc2UgY2hlY2sgeW91ciBzdG9yYWdlIGxvY2F0aW9uLCBpZiB5b3VcJ3JlIGNlcnRhaW4gdGhhdFwncyBvayBwbGVhc2Ugbm90aWZ5IHRoZSBidWlsZCBhdXRob3Igb24gdGhlIHJlbGV2YW50IHN1cHBvcnQgdGhyZWFkLicgKQogICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBGQUlMRUQgdG8gZG93bmxvYWQgJXMiICUgZ3Vpc2V0dGluZ3NsaW5rICkKICAgIGlmIDQ5IC0gNDk6IElJaSAqIG9vT28gLyBvMG9PT28wTzBPb28KICAgIGlmIDc4IC0gNzg6IElJaWlpSTFpSUlJICsgT09Pb09vbzBPIC0gbzBvT09vME8wT29vICsgT29PME8wMCAvIGlJaWkxSTExSTFJSTEKICBpZiB6aXBmaWxlIC4gaXNfemlwZmlsZSAoIE9PT29vb09vMDBPICkgOgogICBvT29PMG9PTzBvID0gc3RyICggb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIE9PT29vb09vMDBPICkgKQogIGVsc2UgOgogICBvT29PMG9PTzBvID0gJzAnCiAgIGlmIDQ3IC0gNDc6IE9vCiAgT09vb08wT09vbyAuIGNyZWF0ZSAoICJDb21tdW5pdHkgQnVpbGRzIiAsICJEb3dubG9hZGluZyAiICsgZGVzY3JpcHRpb24gLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogIE9PT29vb09vMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBPTzAgLCBvb29vT29vMDAgKyAnLnppcCcgKQogIGlmIDIwIC0gMjA6IElJaSAlIGlpaWlpaWlpMSAtIElJaSAqIE9vb29vb29vT08gLyBJMWlpMTFpSWkxMWkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggTzAwME9PMCApIDoKICAgb3MgLiBtYWtlZGlycyAoIE8wMDBPTzAgKQogICBpZiA1NyAtIDU3OiBJSWlpaUkxaUlJSSAlIE9PT29Pb28wTyAqIE9vICUgSTFpaTExaUlpMTFpCiAgIGlmIDY1IC0gNjU6IGkxSUlpIC0gT29vb29vb29PTwogIE9PMG9vT08wMG8wID0gb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ2V4dHJhY3RlZCcgKQogIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHVybCAsIE9PT29vb09vMDBPICwgT09vb08wT09vbyApCiAgaWYgbm90IHppcGZpbGUgLiBpc196aXBmaWxlICggT09Pb29vT28wME8gKSA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggJ05PVCBBIFZBTElEIEJVSUxEJyAsICdUaGUgbWFpbiBmaWxlIGZvciB0aGlzIGJ1aWxkIGlzIG5vdCBhIHZhbGlkIHppcC4gUGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGUgYnVpbGQgYW5kIGxldCB0aGVtIGtub3cgc28gdGhleSBjYW4gZWl0aGVyIHJlbW92ZSB0aGlzIGJ1aWxkIG9yIHVwZGF0ZSBpdC4gVGhhbmsgeW91LicgKQogICByZXR1cm4KICAgaWYgMjkgLSAyOTogSUkxMTFpaWlpIC0gSUlpSWkxaUkgLyBvb09vICUgT29vb29vb29PTyAlIElJaUlpMWlJICsgSUlpaWlJMWlJSUkKICBPT29vTzBPT29vIC4gY3JlYXRlICggIkNvbW11bml0eSBCdWlsZHMiICwgIkV4dHJhY3RpbmcgIiArIGRlc2NyaXB0aW9uICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBleHRyYWN0IC4gYWxsICggT09Pb29vT28wME8gLCBPTzBvb09PMDBvMCAsIE9Pb29PME9Pb28gKQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPTzBvb09PMDBvMCAsICd1c2VyZGF0YScgLCAnLmNiY2ZnJyApICkgOgogICB0cnkgOgogICAgaWlpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPTzBvb09PMDBvMCAsICd1c2VyZGF0YScgLCAnYWRkb25fZGF0YScgLCAnZmlyc3RydW4nICkKICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBpaWlpICkgOgogICAgIG9zIC4gbWFrZWRpcnMgKCBpaWlpICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIERvd25sb2FkZWQgYnVpbGQgdG86ICIgKyBPT09vb29PbzAwTyApCiAgIHhibWMgLiBsb2cgKCAiIyMjIEV4dHJhY3RlZCBidWlsZCB0bzogIiArIE9PMG9vT08wMG8wICkKICAgaWYgOTEgLSA5MTogT29Pb09PMDAgLSBPb09vT08wMCAuIElJaWlpSTFpSUlJCiAgIGlmIDMzIC0gMzM6IElJaSAtIGlJaWkxSTExSTFJSTEgLyBPMDBPT28wMG9vMG8gJSBPMAogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggSTFJSWlpSWlpaSAsIG1vZGUgPSAncicgKQogIGlpMUkxID0gSTFJMUlJaWlpaTFpaSAuIHJlYWQgKCApCiAgSTFJMUlJaWlpaTFpaSAuIGNsb3NlICggKQogIGlmIDgwIC0gODA6IElJaWlpSTFpSUlJICUgT29vb29vb29PTyAtIElJaWlpSTFpSUlJCiAgSTExMUkgPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgb29vT29vME9Pb09vMCA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKQogIG9PMDBvTzAgPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKICBpZiAyNyAtIDI3OiBJSWkgLSBvMG9PT28wTzBPb28gKiBJMWlpMTFpSWkxMWkgLSBJMUlpaUkKICBvMG8gPSBJMTExSSBbIDAgXSBpZiAoIGxlbiAoIEkxMTFJICkgPiAwICkgZWxzZSAnJwogIEkxSWlpID0gb29vT29vME9Pb09vMCBbIDAgXSBpZiAoIGxlbiAoIG9vb09vbzBPT29PbzAgKSA+IDAgKSBlbHNlICcnCiAgSTFJaUlJMUkxaTFJMSA9IG9PMDBvTzAgWyAwIF0gaWYgKCBsZW4gKCBvTzAwb08wICkgPiAwICkgZWxzZSAnJwogIGlmIDIyIC0gMjI6IE9vME9vbyAlIE9vb29vb29vT08gLSBPbzBPb28gLSBJSWlJaTFpSSAuIE8wME9PbzAwb28wbwogIHhibWMgLiBsb2cgKCAiIyMjIEJ1aWxkIG5hbWUgZGV0YWlscyB0byBzdG9yZSBpbiB0aV9pZDogJXMiICUgSTFJaWkgKQogIGlmIDEwMCAtIDEwMDogSUkxMTFpaWlpIC8gSUlpIC8gSUlpSWkxaUkgLSBJMWlpMTFpSWkxMWkgKiBpSWlpMUkxMUkxSUkxCiAgSWkxT28gPSBvcyAuIHBhdGggLiBqb2luICggT08wb29PTzAwbzAgLCAndXNlcmRhdGEnICwgJ2FkZG9uX2RhdGEnICwgJ3RpX2lkJyApCiAgT09Pb29PTzBvTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJaTFPbyAsICdpZC54bWwnICkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSWkxT28gKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBJaTFPbyApCiAgIGlmIDIwIC0gMjA6IE9vTzBPMDAKICBPb29vb09Pb28wID0gb3BlbiAoIE9PT29vT08wb08gLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggJ2lkPSInICsgc3RyICggbzBvICkgKyAnIlxubmFtZT0iJyArIEkxSWlpICsgJyJcbnZlcnNpb249IicgKyBJMUlpSUkxSTFpMUkxICsgJyJcbmd1aT0iJyArIG9Pb08wb09PMG8gKyAnIicgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA0OCAtIDQ4OiBPMCAtIGlpaWlpaWlpMQogIGlmIDE1IC0gMTU6IE9vb29vb29vT08KICBJMTFpaWkxSWkgPSBvcyAuIHBhdGggLiBqb2luICggSWkxT28gLCAnc3RhcnR1cC54bWwnICkKICBPb29vb09Pb28wID0gb3BlbiAoIEkxMWlpaTFJaSAsIG1vZGUgPSAndysnICkKICBPb29vb09Pb28wIC4gd3JpdGUgKCAnZGF0ZT0iMDEwMTEwMDEiXG52ZXJzaW9uPSInICsgSTFJaUlJMUkxaTFJMSArICciJyApCiAgT29vb29PT29vMCAuIGNsb3NlICggKQogIGlmIDE2IC0gMTY6IE9vIC4gT09Pb09vbzBPCiAgaWlJMWlpSWlpID0gb3BlbiAoIE9PT29vT08wb08gLCAncicgKQogIEkxSTExMWkgPSBpaUkxaWlJaWkgLiByZWFkICggKQogIGlpSTFpaUlpaSAuIGNsb3NlICggKQogIHhibWMgLiBsb2cgKCAiIyMjIHRpX2lkL2lkLnhtbCBjb250ZW50czogJXMiICUgSTFJMTExaSApCiAgaWYgNjMgLSA2MzogSTFpaTExaUlpMTFpIC4gSTFJaWlJICsgT28gLSBJSWlpaUkxaUlJSSArIElJaUlpMWlJCiAgaWYgNzggLSA3ODogTzAwT09vMDBvbzBvCiAgaTExSWkgPSBpSTExMUkxMUkxSTEgLiB5ZXNubyAoICJLZWVwIEtvZGkgU2V0dGluZ3M/IiAsICdEbyB5b3Ugd2FudCB0byBrZWVwIHlvdXIgZXhpc3RpbmcgS09ESSBzZXR0aW5ncyAod2VhdGhlciwgc2NyZWVuIGNhbGlicmF0aW9uLCBQVlIgZXRjLikgb3Igd2lwZSBhbmQgaW5zdGFsbCB0aGUgb25lcyBzdXBwbGllZCBpbiB0aGlzIGJ1aWxkPycgLCB5ZXNsYWJlbCA9ICdSZXBsYWNlIG15IHNldHRpbmdzJyAsIG5vbGFiZWwgPSAnS2VlcCBteSBzZXR0aW5ncycgKQogIGlmIGkxMUlpID09IDAgOgogICBJSWlJaTFJSTFJaUkgKCBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnZXh0cmFjdGVkJyAsICd1c2VyZGF0YScgLCAnZ3Vpc2V0dGluZ3MueG1sJyApICkKICAgaWYgMzQgLSAzNDogT28KICAgaWYgOTkgLSA5OTogSUkxMTFpaWlpCiAgZm9yIGkxSUkxIGluIG9zIC4gbGlzdGRpciAoIE9PMG8gKSA6CiAgIElJMTExSWlpaUkxIC4gYXBwZW5kICggaTFJSTEgKQogICBpZiAxMyAtIDEzOiBPT09vT29vME8gLSBpaWlpaWlpaTEgKyBJSWlJaTFpSSAlIE9PT29Pb28wTyAuIElJaUlpMWlJIC0gaTFJSWkKICAgaWYgNjcgLSA2NzogT28gLiBpMTFpSWlpSWlpICsgaWlpaWlpaWkxIC4gaUlpaTFJMTFJMUlJMQogIEkxaWkxaUkgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIGlJaWlpMUlpICwgJ2FkZG9ubGlzdCcgKSAsIG1vZGUgPSAndysnICkKICBmb3IgaTFJSTEgaW4gb3MgLiBsaXN0ZGlyICggSUkxMWlpaWkxSWkgKSA6CiAgIGlmIG5vdCBpMUlJMSBpbiBJSTExMUlpaWlJMSBhbmQgaTFJSTEgIT0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyBhbmQgaTFJSTEgIT0gJ3BhY2thZ2VzJyA6CiAgICBJMWlpMWlJIC4gd3JpdGUgKCBpMUlJMSArICd8JyApCiAgSTFpaTFpSSAuIGNsb3NlICggKQogIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ3JlYXRlZCBhZGRvbmxpc3QgdG86ICVzIiAlIG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpaTFJaSAsICdhZGRvbmxpc3QnICkgKQogIGlpMTExaUkxaTEgPSBbICdhZGRvbnMnICwgJ2NhY2hlJyAsICdDUF9Qcm9maWxlcycgLCAnc3lzdGVtJyAsICd0ZW1wJyAsICdUaHVtYm5haWxzJyBdCiAgT08wMDAgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICcuZ2l0aWdub3JlJyAsICdhZGRvbnMqLmRiJyAsICd0ZXh0dXJlczEzLmRiJyAsICcuY2JjZmcnIF0KICBvTzBvT29vME8gPSAiQ3JlYXRpbmcgUHJvZmlsZSBEYXRhIEZpbGUiCiAgSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiAgTzAwbzBPID0gIiIKICBPMDBvT28wTzBvMDBPID0gIlBsZWFzZSBXYWl0IgogIGlpSUlpaSAoIE9PMG9vT08wMG8wICwgb3MgLiBwYXRoIC4gam9pbiAoIGlJaWlpMUlpICwgJ2J1aWxkLnppcCcgKSAsIG9PMG9Pb28wTyAsIElJMWlJMTEgLCBPMDBvME8gLCBPMDBvT28wTzBvMDBPICwgaWkxMTFpSTFpMSAsIE9PMDAwICkKICBpZiBvT09vbzAwTzBPID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIENyZWF0ZWQ6ICVzIiAlIG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpaTFJaSAsICdidWlsZC56aXAnICkgKQogICBpZiAyOCAtIDI4OiBJMUlpaUkgKyBJMUlpaUkgKyBJSWkKICAgaWYgMjIgLSAyMjogSUlpCiAgaWYgSWlJSSA9PSAnZmFsc2UnIDoKICAgb3MgLiByZW1vdmUgKCBPT09vb29PbzAwTyApCiAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgIHhibWMgLiBsb2cgKCAiIyMjIHJlbW92ZWQ6ICVzIiAlIE9PT29vb09vMDBPICkKICAgIGlmIDg5IC0gODk6IGlpaWlpaWlpMSAuIE9vTzBPMDAgKiBPb29vb29vb09PICsgT29Pb09PMDAgLyBPMAogIElpSUlpMUlJMWkgKCBvb29vT29vMDAgKQogIE9vbzBPbzBvbzAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvZG93bmxvYWRjb3VudC5waHA/aWQ9JXMnICUgKCBvMG8gKQogIGlmIG5vdCAndXBkYXRlJyBpbiB2aWRlbyA6CiAgIHRyeSA6CiAgICBvb28wTzBvMDBPICggT29vME9vMG9vMCAsIDUgKQogICBleGNlcHQgOgogICAgcGFzcwogICAgaWYgNjAgLSA2MDogT09Pb09vbzBPCiAgICBpZiA5NyAtIDk3OiBpMTFpSWlpSWlpICogaUlpaTFJMTFJMUlJMSAvIElJMTExaWlpaQogIE9vMDAwTyAoIGlJaWlpMUlpICkKICBpZiAyMyAtIDIzOiBpMUlJaSAvIG9vT28gLiBPb08wTzAwICogSUlpICsgb29PbwogIGlmIDM3IC0gMzc6IE8wIC8gT28gKyBPbzBPb28gKiBPb29vb29vb09PICsgT29Pb09PMDAgLyBpSWlpMUkxMUkxSUkxCiAgaWYgODQgLSA4NDogaUlpaTFJMTFJMUlJMSArIEkxaWkxMWlJaTExaQogIGlmIDc3IC0gNzc6IGkxMWlJaWlJaWkgLSBJSWkgLiBJMWlpMTFpSWkxMWkgJSBPbzBPb28gLiBPMDBPT28wMG9vMG8KZGVmIGlJSTExSWlpICggdXJsICkgOgogT09vb09vT29vbyA9IDAKIG9vbzBvMG9PID0gMAogaWYgMTkgLSAxOTogT28wT29vIC0gT29PME8wMCArIGkxMWlJaWlJaWkgLyBpSWlpMUkxMUkxSUkxCiBvT08wT09PT09vME9vICggKQogaWYgMSAtIDE6IElJaWlpSTFpSUlJICUgaTFJSWkKIGlmIHVybCA9PSAnbG9jYWwnIDoKICBvb29vT29vMDAgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIGJyb3dzZSAoIDEgLCAnU2VsZWN0IHRoZSBiYWNrdXAgZmlsZSB5b3Ugd2FudCB0byByZXN0b3JlJyAsICdmaWxlcycgLCAnLnppcCcgLCBGYWxzZSAsIEZhbHNlICwgaWlpaWlJSWlpICkKICBpZiBvb29vT29vMDAgPT0gJycgOgogICBPT29vT29Pb29vID0gMQogICBpZiA0MSAtIDQxOiBPb08wTzAwICogT29PME8wMCAvIElJaUlpMWlJICsgSTFpaTExaUlpMTFpIC4gbzBvT09vME8wT29vCiBpZiBPT29vT29Pb29vID09IDEgOgogIHByaW50ICIjIyMgTm8gZmlsZSBzZWxlY3RlZCwgcXVpdHRpbmcgcmVzdG9yZSBwcm9jZXNzICMjIyIKICByZXR1cm4KICBpZiA4NCAtIDg0OiBpMTFpSWlpSWlpICsgT29PME8wMCAqIEkxSWlpSSArIEkxaWkxMWlJaTExaSAvIE8wME9PbzAwb28wbwogaWYgdXJsICE9ICdsb2NhbCcgOgogIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiQ29tbXVuaXR5IEJ1aWxkcyIgLCAiRG93bmxvYWRpbmcgYnVpbGQuIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgb29vb09vbzAwID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBPTzAgLCBpaWlJSSAoICkgKyAnLnppcCcgKQogIGlmIDgwIC0gODA6IEkxaWkxMWlJaTExaQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPMDAwT08wICkgOgogICBvcyAuIG1ha2VkaXJzICggTzAwME9PMCApCiAgIGlmIDY3IC0gNjc6IElJMTExaWlpaQogIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHVybCAsIG9vb29Pb28wMCAsIE9Pb29PME9Pb28gKQogIGlmIDIgLSAyOiBvMG9PT28wTzBPb28gLSBPMCAqIE8wME9PbzAwb28wbyAlIElJaWlpSTFpSUlJCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvb09vb28wMDBvT08gKSA6CiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaUlpMWlpMUkxICkgOgogICBvcyAuIHJlbW92ZSAoIG9vT29vbzAwMG9PTyApCiAgZWxzZSA6CiAgIG9zIC4gcmVuYW1lICggb29Pb29vMDAwb09PICwgaUlpMWlpMUkxICkKICAgaWYgNjQgLSA2NDogaTFJSWkgLiBpaWlpaWlpaTEKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wICkgOgogIG9zIC4gcmVtb3ZlICggbzAgKQogIGlmIDcgLSA3OiBvb09vIC4gSUlpSWkxaUkgLSBJSWlJaTFpSSAvIElJaSAlIE9vME9vbwogIGlmIDYxIC0gNjE6IG9vT28gLSBJMWlpMTFpSWkxMWkgLyBJSWlJaTFpSSAlIEkxaWkxMWlJaTExaSArIE9vTzBPMDAgLyBPbzBPb28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJMUlJaWlJaWlpICkgOgogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggSTFJSWlpSWlpaSAsIG1vZGUgPSAndysnICkKICBpZiAxMCAtIDEwOiBpMTFpSWlpSWlpIC8gT29Pb09PMDAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9vMG9PT28gKSA6CiAgb3MgLiByZW1vdmVkaXJzICggT28wb09PbyApCiAgaWYgMjcgLSAyNzogSTFJaWlJIC8gT29vb29vb29PTwogIGlmIDc0IC0gNzQ6IEkxaWkxMWlJaTExaSAlIElJaSAtIE9vTzBPMDAgKiBPT09vT29vME8gLiBPb29vb29vb09PICogT29PME8wMAogdHJ5IDoKICBvcyAuIHJlbmFtZSAoIGlJaTFpaTFJMSAsIG9vT29vbzAwMG9PTyApCiAgaWYgOTkgLSA5OTogT29Pb09PMDAgLiBJSWlJaTFpSSAtIE9vb29vb29vT08gLSBPMAogZXhjZXB0IDoKICBpSTExMUkxMUkxSTEgLiBvayAoICJOTyBHVUlTRVRUSU5HUyEiICwgJ05vIGd1aXNldHRpbmdzLnhtbCBmaWxlIGhhcyBiZWVuIGZvdW5kLicgLCAnUGxlYXNlIGV4aXQgWEJNQyBhbmQgdHJ5IGFnYWluJyAsICcnICkKICByZXR1cm4KICBpZiA2IC0gNjogT28KIEkxaTFJMUkxMUlpaUkgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggb29vME8gLCAnV2UgaGlnaGx5IHJlY29tbWVuZCBiYWNraW5nIHVwIHlvdXIgZXhpc3RpbmcgYnVpbGQgYmVmb3JlIGluc3RhbGxpbmcgYW55IGJ1aWxkcy4gV291bGQgeW91IGxpa2UgdG8gcGVyZm9ybSBhIGJhY2t1cCBmaXJzdD8nICwgbm9sYWJlbCA9ICdCYWNrdXAnICwgeWVzbGFiZWwgPSAnSW5zdGFsbCcgKQogaWYgSTFpMUkxSTExSWlpSSA9PSAwIDoKICBJaTExMTFpMTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyApICkKICBpZiA1OCAtIDU4OiBPMDBPT28wMG9vMG8gKiBpSWlpMUkxMUkxSUkxICsgaWlpaWlpaWkxIC4gaWlpaWlpaWkxCiAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElpMTExMWkxMSApIDoKICAgb3MgLiBtYWtlZGlycyAoIElpMTExMWkxMSApCiAgIGlmIDc0IC0gNzQ6IGlpaWlpaWlpMSAtIG8wb09PbzBPME9vbyAqIElJaWlpSTFpSUlJICUgaWlpaWlpaWkxCiAgSTFpSUkxSUlpMUlpSSA9IGlJaW9vMG9vTyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogIGlmICggbm90IEkxaUlJMUlJaTFJaUkgKSA6CiAgIHJldHVybiBGYWxzZSAsIDAKICAgaWYgOTMgLSA5MzogaUlpaTFJMTFJMUlJMSAvIE9vT29PTzAwICUgT28wT29vICogSUlpIC0gT29PME8wMCAtIG8wb09PbzBPME9vbwogIG8wME9PMG8wID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIEkxaUlJMUlJaTFJaUkgKQogIGkxSUkxSWlpSWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJaTExMTFpMTEgLCBvMDBPTzBvMCArICcuemlwJyApICkKICBpaTExMWlJMWkxID0gWyBJMUlpSSBdCiAgT08wMDAgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICcuZ2l0aWdub3JlJyBdCiAgb08wb09vbzBPID0gIkNyZWF0aW5nIGZ1bGwgYmFja3VwIG9mIGV4aXN0aW5nIGJ1aWxkIgogIElJMWlJMTEgPSAiQXJjaGl2aW5nLi4uIgogIE8wMG8wTyA9ICIiCiAgTzAwb09vME8wbzAwTyA9ICJQbGVhc2UgV2FpdCIKICBpZiA0NCAtIDQ0OiBPb29vb29vb09PCiAgaWlJSWlpICggaUlpaTEgLCBpMUlJMUlpaUlpICwgb08wb09vbzBPICwgSUkxaUkxMSAsIE8wMG8wTyAsIE8wMG9PbzBPMG8wME8gLCBpaTExMWlJMWkxICwgT08wMDAgKQogb09pMUlpSWlJaWkxMUkgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggb29vME8gLCAnV291bGQgeW91IGxpa2UgdG8ga2VlcCB5b3VyIGV4aXN0aW5nIGRhdGFiYXNlIGZpbGVzIG9yIG92ZXJ3cml0ZT8gT3ZlcndyaXRpbmcgd2lsbCB3aXBlIGFueSBleGlzdGluZyBtdXNpYyBvciB2aWRlbyBsaWJyYXJ5IHlvdSBtYXkgaGF2ZSBzY2FubmVkIGluLicgLCBub2xhYmVsID0gJ092ZXJ3cml0ZScgLCB5ZXNsYWJlbCA9ICdLZWVwIEV4aXN0aW5nJyApCiBpZiBvT2kxSWlJaUlpaTExSSA9PSAxIDoKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPbzBPb08wMG9PTzBvICkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBPbzBPb08wMG9PTzBvICkKICAgaWYgODAgLSA4MDogSUlpICsgT09Pb09vbzBPIC4gSUlpICsgT28KICB0cnkgOgogICBzaHV0aWwgLiBjb3B5dHJlZSAoIE8wT29PMDAwTzBPTyAsIE9vME9vTzAwb09PMG8gLCBzeW1saW5rcyA9IEZhbHNlICwgaWdub3JlID0gc2h1dGlsIC4gaWdub3JlX3BhdHRlcm5zICggIlRleHR1cmVzMTMuZGIiICwgIkFkZG9uczE2LmRiIiAsICJBZGRvbnMxNS5kYiIgLCAic2FsdHNjYWNoZS5kYi13YWwiICwgInNhbHRzY2FjaGUuZGItc2htIiAsICJzYWx0c2NhY2hlLmRiIiAsICJvbmVjaGFubmVsY2FjaGUuZGIiICkgKQogICBpZiA4NSAtIDg1OiBpMTFpSWlpSWlpIC4gT09Pb09vbzBPICsgTzAwT09vMDBvbzBvIC8gTzAwT09vMDBvbzBvCiAgZXhjZXB0IDoKICAgb29vMG8wb08gPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggb29vME8gLCAnVGhlcmUgd2FzIGFuIGVycm9yIHRyeWluZyB0byBiYWNrdXAgc29tZSBkYXRhYmFzZXMuIENvbnRpbnVpbmcgbWF5IHdpcGUgeW91ciBleGlzdGluZyBsaWJyYXJ5LiBEbyB5b3Ugd2lzaCB0byBjb250aW51ZT8nICwgbm9sYWJlbCA9ICdObywgY2FuY2VsJyAsIHllc2xhYmVsID0gJ1llcywgb3ZlcndyaXRlJyApCiAgIGlmIG9vbzBvMG9PID09IDEgOiBwYXNzCiAgIGlmIG9vbzBvMG9PID09IDAgOiBPT29vT29Pb29vID0gMSA7IHJldHVybgogICBpZiA0MyAtIDQzOiBJSWlpaUkxaUlJSSAuIE9vb29vb29vT08gLSBJSTExMWlpaWkKICBpMUlJMUlpaUlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0RhdGFiYXNlLnppcCcgKSApCiAgb28gKCBPbzBPb08wMG9PTzBvICwgaTFJSTFJaWlJaSApCiAgaWYgOTAgLSA5MDogSTFJaWlJIC0gaUlpaTFJMTFJMUlJMSArIEkxaWkxMWlJaTExaSAqIE9vICogb29PbwogaWYgT09vb09vT29vbyA9PSAxIDoKICBwcmludCAiIyMjIFVzZXIgZGVjaWRlZCB0byBleGl0IHJlc3RvcmUgZnVuY3Rpb24gIyMjIgogIHJldHVybgogIGlmIDE5IC0gMTk6IElJaSAqIElJMTExaWlpaSAlIE9vME9vbyAtIGkxSUlpCiBlbHNlIDoKICB0aW1lIC4gc2xlZXAgKCAxICkKICBJSWlJaUkgPSBvcGVuICggT29vICwgbW9kZSA9ICdyJyApCiAgSTFJaTExMUkxMTEgPSBJSWlJaUkgLiByZWFkICggKQogIElJaUlpSSAuIGNsb3NlICggKQogIGlmIDI3IC0gMjc6IE9vT29PTzAwIC4gTzAgLyBJMWlpMTFpSWkxMWkgLiBpSWlpMUkxMUkxSUkxCiAgaWYgMTUgLSAxNTogTzAwT09vMDBvbzBvICsgT29PME8wMCAlIGlJaWkxSTExSTFJSTEgLSBJMWlpMTFpSWkxMWkgLSBpMUlJaSAlIG8wb09PbzBPME9vbwogIHByaW50ICIjIyMgQ2hlY2tpbmcgemlwIGZpbGUgc3RydWN0dXJlICMjIyIKICBPMG9vTzAwT08gPSB6aXBmaWxlIC4gWmlwRmlsZSAoIG9vb29Pb28wMCApCiAgaWYgJ3hibWMubG9nJyBpbiBPMG9vTzAwT08gLiBuYW1lbGlzdCAoICkgb3IgJ2tvZGkubG9nJyBpbiBPMG9vTzAwT08gLiBuYW1lbGlzdCAoICkgb3IgJy5naXQnIGluIE8wb29PMDBPTyAuIG5hbWVsaXN0ICggKSBvciAnLnN2bicgaW4gTzBvb08wME9PIC4gbmFtZWxpc3QgKCApIDoKICAgcHJpbnQgIiMjIyBXaG9ldmVyIGNyZWF0ZWQgdGhpcyBidWlsZCBoYXMgdXNlZCBjb21wbGV0ZWx5IHRoZSB3cm9uZyBiYWNrdXAgbWV0aG9kLCBsZXRzIHRyeSBhbmQgZml4IGl0ISAjIyMiCiAgIGlJMTExSTExSTFJMSAuIG9rICggJ0ZpeGluZyBCYWQgWmlwJyAsICdXaG9ldmVyIGNyZWF0ZWQgdGhpcyBidWlsZCBoYXMgdXNlZCB0aGUgd3JvbmcgYmFja3VwIG1ldGhvZCwgcGxlYXNlIHdhaXQgd2hpbGUgd2UgZml4IGl0IC0gdGhpcyBjb3VsZCB0YWtlIHNvbWUgdGltZSEgQ2xpY2sgT0sgdG8gcHJvY2VlZCcgKQogICBJaUkxMUkxSTExMSA9IHppcGZpbGUgLiBaaXBGaWxlICggb29vb09vbzAwICwgJ3InICkKICAgbzAwT29Pb28wID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBPTzAgLCAnZml4ZWQuemlwJyApCiAgIGlpaWlpaWlpaWlpSSA9IHppcGZpbGUgLiBaaXBGaWxlICggbzAwT29Pb28wICwgJ3cnICkKICAgaWYgNDEgLSA0MTogTzAwT09vMDBvbzBvCiAgIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiRml4aW5nIEJ1aWxkIiAsICJDaGVja2luZyAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICAgaWYgNDkgLSA0OTogTzAwT09vMDBvbzBvICUgSUkxMTFpaWlpIC4gTzAwT09vMDBvbzBvIC0gbzBvT09vME8wT29vIC0gT09Pb09vbzBPICogSUlpaWlJMWlJSUkKICAgZm9yIGkxSUkxIGluIElpSTExSTFJMTExIC4gaW5mb2xpc3QgKCApIDoKICAgIGJ1ZmZlciA9IElpSTExSTFJMTExIC4gcmVhZCAoIGkxSUkxIC4gZmlsZW5hbWUgKQogICAgSWlpTzBPME8wT09PMG8gPSBzdHIgKCBpMUlJMSAuIGZpbGVuYW1lICkKICAgIGlmIDk4IC0gOTg6IE9vTzBPMDAgLSBPbzBPb28gKiBJMUlpaUkKICAgIGlmICggaTFJSTEgLiBmaWxlbmFtZSBbIC0gNCA6IF0gIT0gJy5sb2cnICkgYW5kIG5vdCAnLmdpdCcgaW4gSWlpTzBPME8wT09PMG8gYW5kIG5vdCAnLnN2bicgaW4gSWlpTzBPME8wT09PMG8gOgogICAgIGlpaWlpaWlpaWlpSSAuIHdyaXRlc3RyICggaTFJSTEgLCBidWZmZXIgKQogICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkZpeGluZy4uLiIgLCAnW0NPTE9SIHllbGxvd10lc1svQ09MT1JdJyAlIGkxSUkxIC4gZmlsZW5hbWUgLCAnUGxlYXNlIFdhaXQnICkKICAgICBpZiA5MCAtIDkwOiBJMUlpaUkKICAgT09vb08wT09vbyAuIGNsb3NlICggKQogICBpaWlpaWlpaWlpaUkgLiBjbG9zZSAoICkKICAgSWlJMTFJMUkxMTEgLiBjbG9zZSAoICkKICAgb29vb09vbzAwID0gbzAwT29Pb28wCiAgIGlmIDI3IC0gMjc6IGlJaWkxSTExSTFJSTEgLSBvb09vCiAgT09vb08wT09vbyAuIGNyZWF0ZSAoICJSZXN0b3JpbmcgQmFja3VwIEJ1aWxkIiAsICJDaGVja2luZyAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiAgaWYgNzMgLSA3MzogT28gLiBPbzBPb28gKyBPbzBPb28gJSBPbzBPb28gJSBPMAogIHRyeSA6CiAgIGV4dHJhY3QgLiBhbGwgKCBvb29vT29vMDAgLCBpSWlpMSAsIE9Pb29PME9Pb28gKQogIGV4Y2VwdCA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggJ0VSUk9SIElOIEJVSUxEIFpJUCcgLCAnUGxlYXNlIGNvbnRhY3QgdGhlIGJ1aWxkIGF1dGhvciwgdGhlcmUgYXJlIGVycm9ycyBpbiB0aGlzIHppcCBmaWxlIHRoYXQgaGFzIGNhdXNlZCB0aGUgaW5zdGFsbCBwcm9jZXNzIHRvIGZhaWwuIE1vc3QgbGlrZWx5IGNhdXNlIGlzIGl0IGNvbnRhaW5zIGZpbGVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBuYW1lLicgKQogICByZXR1cm4KICAgaWYgOCAtIDg6IElJaUlpMWlJIC4gTzAwT09vMDBvbzBvIC0gaTFJSWkgJSBPb08wTzAwIC8gT09Pb09vbzBPCiAgdGltZSAuIHNsZWVwICggMSApCiAgaWYgMTMgLSAxMzogT28wT29vIC8gT29Pb09PMDAgLiBJMWlpMTFpSWkxMWkgLiBPbwogIGlmIG9PaTFJaUlpSWlpMTFJID09IDEgOgogICBleHRyYWN0IC4gYWxsICggaTFJSTFJaWlJaSAsIE8wT29PMDAwTzBPTyAsIE9Pb29PME9Pb28gKQogICBpZiAzMSAtIDMxOiBvMG9PT28wTzBPb28KICAgaWYgb29vMG8wb08gIT0gMSA6CiAgICBzaHV0aWwgLiBybXRyZWUgKCBPbzBPb08wMG9PTzBvICkKICAgIGlmIDU5IC0gNTk6IE9vME9vbyAvIE9vME9vbwogIE9PT09vMG9vMG8gPSBvcGVuICggT29vICwgbW9kZSA9ICd3KycgKQogIE9PT09vMG9vMG8gLiB3cml0ZSAoIEkxSWkxMTFJMTExICkKICBPT09PbzBvbzBvIC4gY2xvc2UgKCApCiAgdHJ5IDoKICAgb3MgLiByZW5hbWUgKCBpSWkxaWkxSTEgLCBvMCApCiAgIGlmIDQzIC0gNDM6IEkxSWlpSSAlIEkxaWkxMWlJaTExaSAqIE8wME9PbzAwb28wbwogIGV4Y2VwdCA6CiAgIHByaW50ICJOTyBHVUlTRVRUSU5HUyBET1dOTE9BREVEIgogICBpZiAzMSAtIDMxOiBPMDBPT28wMG9vMG8gLyBJSWlJaTFpSQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggb29Pb29vMDAwb09PICwgbW9kZSA9ICdyJyApCiAgaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKICBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiAgaTFJSTExMWlpMWlpID0gcmUgLiBjb21waWxlICggJzxza2luc2V0dGluZ3M+W1xzXFNdKj88XC9za2luc2V0dGluZ3M+JyApIC4gZmluZGFsbCAoIGlpMUkxICkKICBJSUkxID0gaTFJSTExMWlpMWlpIFsgMCBdIGlmICggbGVuICggaTFJSTExMWlpMWlpICkgPiAwICkgZWxzZSAnJwogIE8wb29Pb08wT08wMDAgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogIE8wMG9PT29PT09PTyA9IE8wb29Pb08wT08wMDAgWyAwIF0gaWYgKCBsZW4gKCBPMG9vT29PME9PMDAwICkgPiAwICkgZWxzZSAnJwogIE9Pb09PTyA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogIGlpMUlJaWlJaTExMTFJaTEgPSBPT29PT08gWyAwIF0gaWYgKCBsZW4gKCBPT29PT08gKSA+IDAgKSBlbHNlICcnCiAgaWYgMyAtIDM6IElJaWlpSTFpSUlJCiAgdHJ5IDoKICAgaUkxID0gb3BlbiAoIG8wICwgbW9kZSA9ICdyJyApCiAgIGlJSUlJMSA9IGlJMSAuIHJlYWQgKCApCiAgIGlJMSAuIGNsb3NlICggKQogICBpMTExMUkxaWlpMSA9IHJlIC4gY29tcGlsZSAoICc8c2tpbnNldHRpbmdzPltcc1xTXSo/PFwvc2tpbnNldHRpbmdzPicgKSAuIGZpbmRhbGwgKCBpSUlJSTEgKQogICBvT09vT28wT29vID0gaTExMTFJMWlpaTEgWyAwIF0gaWYgKCBsZW4gKCBpMTExMUkxaWlpMSApID4gMCApIGVsc2UgJycKICAgbzBPbzAwbzAgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggaUlJSUkxICkKICAgbzBPT29Pb28wMCA9IG8wT28wMG8wIFsgMCBdIGlmICggbGVuICggbzBPbzAwbzAgKSA+IDAgKSBlbHNlICcnCiAgIGkxMUlJID0gcmUgLiBjb21waWxlICggJzxsb29rYW5kZmVlbD5bXHNcU10qPzxcL2xvb2thbmRmZWVsPicgKSAuIGZpbmRhbGwgKCBpSUlJSTEgKQogICBPbzBPb28wID0gaTExSUkgWyAwIF0gaWYgKCBsZW4gKCBpMTFJSSApID4gMCApIGVsc2UgJycKICAgT09PID0gaWkxSTEgLiByZXBsYWNlICggSUlJMSAsIG9PT29PbzBPb28gKSAuIHJlcGxhY2UgKCBpaTFJSWlpSWkxMTExSWkxICwgT28wT29vMCApIC4gcmVwbGFjZSAoIE8wMG9PT29PT09PTyAsIG8wT09vT29vMDAgKQogICBPb29vb09Pb28wID0gb3BlbiAoIG9vT29vbzAwMG9PTyAsIG1vZGUgPSAndysnICkKICAgT29vb29PT29vMCAuIHdyaXRlICggc3RyICggT09PICkgKQogICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgIGlmIDM3IC0gMzc6IE8wME9PbzAwb28wbyAqIE9vb29vb29vT08gKiBPT09vT29vME8gKyBPbzBPb28gLiBJMUlpaUkKICBleGNlcHQgOgogICBwcmludCAiIyMjIE5PIEdVSVNFVFRJTkdTIERPV05MT0FERUQiCiAgIGlmIDYxIC0gNjE6IE9vIC4gT28KICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpSWkxaWkxSTEgKSA6CiAgIG9zIC4gcmVtb3ZlICggaUlpMWlpMUkxICkKICAgaWYgMTcgLSAxNzogSUkxMTFpaWlpIC8gaWlpaWlpaWkxCiAgb3MgLiByZW5hbWUgKCBvb09vb28wMDBvT08gLCBpSWkxaWkxSTEgKQogIHRyeSA6CiAgIG9zIC4gcmVtb3ZlICggbzAgKQogICBpZiA4MCAtIDgwOiBPbyAqIE9vTzBPMDAgKyBPMDBPT28wMG9vMG8KICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDYyIC0gNjI6IE9vb29vb29vT08gLiBPMCAlIE9vME9vbwogIG9zIC4gbWFrZWRpcnMgKCBPbzBvT09vICkKICB0aW1lIC4gc2xlZXAgKCAxICkKICBPb29vT09vMG9PTyAoICkKICBpZiA5OCAtIDk4OiBvMG9PT28wTzBPb28gKiBPbzBPb28gLSBPMDBPT28wMG9vMG8gLiBpaWlpaWlpaTEKICBpZiAyIC0gMjogT28wT29vIC0gaWlpaWlpaWkxICUgaUlpaTFJMTFJMUlJMQpkZWYgSUkxaTExaTFpSTFJICggKSA6CiBvT08wT09PT09vME9vICggKQogbzBPMG8wTzBPID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiBicm93c2UgKCAxICwgJ1NlbGVjdCB0aGUgZ3Vpc2V0dGluZ3MgemlwIGZpbGUgeW91IHdhbnQgdG8gcmVzdG9yZScgLCAnZmlsZXMnICwgJy56aXAnICwgRmFsc2UgLCBGYWxzZSAsIGlpaWlpSUlpaSApCiBpZiAyNyAtIDI3OiBJSWlJaTFpSQogaWYgbzBPMG8wTzBPID09ICcnIDoKICByZXR1cm4KICBpZiA4IC0gODogTzAgKiBpMUlJaSAtIE9vT29PTzAwICUgSTFJaWlJIC8gSTFpaTExaUlpMTFpCiBlbHNlIDoKICBJSU9vT29vTyA9IDEKICBJMWlPMDBPMDAwb09PMG9PICggbzBPMG8wTzBPICwgSUlPb09vb08gKQogIGlmIDc2IC0gNzY6IE9vME9vbyAqIGlpaWlpaWlpMSAlIE9vIC4gT29PME8wMAogIGlmIDMxIC0gMzE6IEkxSWlpSSAtIE9vb29vb29vT08gLiBJSWlpaUkxaUlJSQpkZWYgSTFJTzAwTzBvTzAwbyAoIG5hbWUgLCB1cmwgLCB2aWRlbyApIDoKIEkxaTFJMUkxMUlpaUkgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggJ0Z1bGwgV2lwZSBBbmQgTmV3IEluc3RhbGwnICwgJ1RoaXMgaXMgYSBncmVhdCBvcHRpb24gZm9yIGZpcnN0IHRpbWUgaW5zdGFsbCBvciBpZiB5b3VcJ3JlIGVuY291bnRlcmluZyBhbnkgaXNzdWVzIHdpdGggeW91ciBkZXZpY2UuIFRoaXMgd2lsbCB3aXBlIGFsbCB5b3VyIEtvZGkgc2V0dGluZ3MsIGRvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdBY2NlcHQnICkKIGlmIEkxaTFJMUkxMUlpaUkgPT0gMCA6CiAgcmV0dXJuCiAgaWYgMzAgLSAzMDogT29Pb09PMDAgJSBJSWlpaUkxaUlJSSAuIE9vME9vbyAtIE9vb29vb29vT08KIGVsaWYgSTFpMUkxSTExSWlpSSA9PSAxIDoKICBpZiA4IC0gODogT28gJSBJSWlJaTFpSSAuIG9vT28KICBPT09vb29PbzAwTyA9ICcvc3RvcmFnZS9vcGVuZWxlY190ZW1wLycKICBpaW8wbzBPb09vMCA9ICcvc3RvcmFnZS8ucmVzdG9yZS8nCiAgSUlvMG8wTzBPMDBvT09vID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpbzBvME9vT28wICwgaWlpSUkgKCApICsgJy50YXInICkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggaWlvMG8wT29PbzAgKSA6CiAgIHRyeSA6CiAgICBvcyAuIG1ha2VkaXJzICggaWlvMG8wT29PbzAgKQogICBleGNlcHQgOgogICAgcGFzcwogIHRyeSA6CiAgIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnRG93bmxvYWRpbmcgQnVpbGQnICwgJ1BsZWFzZSB3YWl0JyAsICcnICwgJycgKQogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCB1cmwgLCBJSW8wbzBPME8wMG9PT28gKQogICBPMGkxSTExSSA9IFRydWUKICBleGNlcHQgOgogICBPMGkxSTExSSA9IEZhbHNlCiAgdGltZSAuIHNsZWVwICggMiApCiAgaWYgODkgLSA4OTogSUlpaWlJMWlJSUkKICBpZiBPMGkxSTExSSA9PSBUcnVlIDoKICAgaWYgODcgLSA4NzogbzBvT09vME8wT29vICUgT28wT29vICUgSUkxMTFpaWlpICsgSUlpSWkxaUkgKiBJMUlpaUkKICAgdHJ5IDoKICAgIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggSTFJSWlpSWlpaSAsIG1vZGUgPSAncicgKQogICAgaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKICAgIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKICAgIGlmIDE4IC0gMTg6IGlpaWlpaWlpMSAqIElJMTExaWlpaQogICAgSTExMUkgPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgICBvMG8gPSBJMTExSSBbIDAgXSBpZiAoIGxlbiAoIEkxMTFJICkgPiAwICkgZWxzZSAnJwogICAgaWYgNDMgLSA0MzogbzBvT09vME8wT29vIC8gTzAgKyBpMUlJaSAtIEkxaWkxMWlJaTExaSAlIGkxMWlJaWlJaWkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgaWYgbzBvICE9ICcnIDoKICAgIE9vbzBPbzBvbzAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvZG93bmxvYWRjb3VudC5waHA/aWQ9JXMnICUgKCBvMG8gKQogICB0cnkgOgogICAgb29vME8wbzAwTyAoIE9vbzBPbzBvbzAgLCA1ICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDY5IC0gNjk6IE9vICUgSTFpaTExaUlpMTFpIC8gT29Pb09PMDAgLiBPbyAtIElJaWlpSTFpSUlJCiAgICBpZiA3NCAtIDc0OiBPb08wTzAwIC0gbzBvT09vME8wT29vIC0gSUlpaWlJMWlJSUkgLiBPMCAlIGlpaWlpaWlpMQogICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT09Pb29vT28wME8gKSA6CiAgICB0cnkgOgogICAgIG9zIC4gbWFrZWRpcnMgKCBPT09vb29PbzAwTyApCiAgICBleGNlcHQgOgogICAgIHBhc3MKICAgICBpZiAzMiAtIDMyOiBPb09vT08wMCAuIE9vTzBPMDAgLyBPbzBPb28gLiBpMTFpSWlpSWlpCiAgIGlJMTExSTExSTFJMSAuIG9rICggIkRvd25sb2FkIENvbXBsZXRlIC0gUHJlc3MgT0sgVG8gUmVib290IiAsICdPbmNlIHlvdSBwcmVzcyBPSyB5b3VyIGRldmljZSB3aWxsIGF0dGVtcHQgdG8gcmVib290LCBpZiBpdCBoYXNuXCd0IHJlYm9vdGVkIHdpdGhpbiAzMCBzZWNvbmRzIHBsZWFzZSBwdWxsIHRoZSBwb3dlciB0byBtYW51YWxseSBzaHV0ZG93bi4gV2hlbiBib290aW5nIHlvdSBtYXkgc2VlIGxpbmVzIG9mIHRleHQsIGRvblwndCB3b3JyeSB0aGlzIGlzIG5vcm1hbCB1cGRhdGUgYmVoYXZpb3VyIScgKQogICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnUmVib290JyApCiAgIGlmIDkgLSA5OiBPT09vT29vME8gLSBJSTExMWlpaWkgKyBJSWkgLyBvb09vICUgSTFpaTExaUlpMTFpCiAgIGlmIDE3IC0gMTc6IGlJaWkxSTExSTFJSTEgLSBpaWlpaWlpaTEKZGVmIE9PMDBPME9vMG9vMG9vMCAoICkgOgogT09vb09vT29vbyA9IDAKIGlmIGlJMTExSTExSTFJMSAuIHllc25vICggJ0Z1bGwgV2lwZSBBbmQgTmV3IEluc3RhbGwnICwgJ1RoaXMgaXMgYSBncmVhdCBvcHRpb24gaWYgeW91XCdyZSBlbmNvdW50ZXJpbmcgYW55IGlzc3VlcyB3aXRoIHlvdXIgZGV2aWNlLiBUaGlzIHdpbGwgd2lwZSBhbGwgeW91ciBLb2RpIHNldHRpbmdzIGFuZCByZXN0b3JlIHdpdGggd2hhdGV2ZXIgaXMgaW4gdGhlIGJhY2t1cCwgZG8geW91IHdpc2ggdG8gY29udGludWU/JyAsIG5vbGFiZWwgPSAnQ2FuY2VsJyAsIHllc2xhYmVsID0gJ0FjY2VwdCcgKSA6CiAgb29vb09vbzAwID0gaUkxMTFJMTFJMUkxIC4gYnJvd3NlICggMSAsICdTZWxlY3QgdGhlIGJhY2t1cCBmaWxlIHlvdSB3YW50IHRvIHJlc3RvcmUnICwgJ2ZpbGVzJyAsICcudGFyJyAsIEZhbHNlICwgRmFsc2UgLCBPME9vMDAwb29PMDAgKQogIGlmIG9vb29Pb28wMCA9PSAnJyA6CiAgIE9Pb29Pb09vb28gPSAxCiAgIGlmIDIgLSAyOiBPb08wTzAwICsgSUlpIC4gb29PbyAtIEkxaWkxMWlJaTExaSAlIElJaUlpMWlJCiAgaWYgT09vb09vT29vbyA9PSAxIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgTm8gZmlsZSBzZWxlY3RlZCwgcXVpdHRpbmcgcmVzdG9yZSBwcm9jZXNzICMjIyIgKQogICByZXR1cm4KICBJSW8wbzBPME8wMG9PT28gPSBvcyAuIHBhdGggLiBqb2luICggb08wICwgaWlpSUkgKCApICsgJy50YXInICkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb08wICkgOgogICB0cnkgOgogICAgb3MgLiBtYWtlZGlycyAoIG9PMCApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgT09vb08wT09vbyAuIGNyZWF0ZSAoICdDb3B5aW5nIEZpbGUgVG8gUmVzdG9yZSBGb2xkZXInICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICBzaHV0aWwgLiBjb3B5ZmlsZSAoIG9vb29Pb28wMCAsIElJbzBvME8wTzAwb09PbyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1JlYm9vdCcgKQogIGlmIDQ5IC0gNDk6IE8wIC4gT28wT29vIC8gTzAwT09vMDBvbzBvCiAgaWYgMjkgLSAyOTogSTFpaTExaUlpMTFpIC8gb29PbyAqIE8wIC0gaTExaUlpaUlpaSAtIE9vTzBPMDAgKyBPMDBPT28wMG9vMG8KZGVmIE9vME8gKCApIDoKIG8wbzAwTzBvT29vTzAgKCApCiBpZiBJaW9PME8gKCApIDoKICBJaTFJMUlpICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdUmVzdG9yZSBhIGxvY2FsbHkgc3RvcmVkIE9wZW5FTEVDIEJhY2t1cFsvQ09MT1JdJyAsICcnICwgJ3Jlc3RvcmVfbG9jYWxfT0UnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgQSBGdWxsIE9FIFN5c3RlbSBCYWNrdXAnICkKICBpZiA4NCAtIDg0OiBPb29vb29vb09PIC4gaTExaUlpaUlpaSAlIE9vTzBPMDAgKiBPbzBPb28gLyBJSWlJaTFpSQogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVJlc3RvcmUgQSBMb2NhbGx5IHN0b3JlZCBidWlsZFsvQ09MT1JdJyAsICdsb2NhbCcgLCAncmVzdG9yZV9sb2NhbF9DQicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnUmVzdG9yZSBBIEZ1bGwgU3lzdGVtIEJhY2t1cCcgKQogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVJlc3RvcmUgTG9jYWwgZ3Vpc2V0dGluZ3MgZmlsZVsvQ09MT1JdJyAsICd1cmwnICwgJ0xvY2FsR1VJRGlhbG9nJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgRnVsbCBTeXN0ZW0nICkKIGlmIDk1IC0gOTU6IE9vTzBPMDAgLSBpMTFpSWlpSWlpIC4gT29PME8wMCAlIE9vICogTzAgKyBpMTFpSWlpSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ2FkZG9ucy56aXAnICkgKSA6CiAgSWkxSTFJaSAoICcnICwgJ1Jlc3RvcmUgWW91ciBBZGRvbnMnICwgJ2FkZG9ucycgLCAncmVzdG9yZV96aXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBBZGRvbnMnICkKICBpZiA2NSAtIDY1OiBPMCAvIElJaUlpMWlJIC4gaTFJSWkgKiBJSWlJaTFpSSAvIGlJaWkxSTExSTFJSTEgLSBvb09vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ2FkZG9uX2RhdGEuemlwJyApICkgOgogIElpMUkxSWkgKCAnJyAsICdSZXN0b3JlIFlvdXIgQWRkb24gVXNlckRhdGEnICwgJ2FkZG9uX2RhdGEnICwgJ3Jlc3RvcmVfemlwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgQWRkb24gVXNlckRhdGEnICkKICBpZiA5MyAtIDkzOiBPb09vT08wMCAlIGkxMWlJaWlJaWkgLSBPMDBPT28wMG9vMG8gJSBPb08wTzAwCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ2d1aXNldHRpbmdzLnhtbCcgKSApIDoKICBJaTFJMUlpICggJycgLCAnUmVzdG9yZSBHdWlzZXR0aW5ncy54bWwnICwgaUlpMWlpMUkxICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgZ3Vpc2V0dGluZ3MueG1sJyApCiAgaWYgNTUgLSA1NTogbzBvT09vME8wT29vIC4gSTFpaTExaUlpMTFpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ2Zhdm91cml0ZXMueG1sJyApICkgOgogIElpMUkxSWkgKCAnJyAsICdSZXN0b3JlIEZhdm91cml0ZXMueG1sJyAsIG9vb29vb08wb28gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBmYXZvdXJpdGVzLnhtbCcgKQogIGlmIDYzIC0gNjM6IG9vT28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnc291cmNlcy54bWwnICkgKSA6CiAgSWkxSTFJaSAoICcnICwgJ1Jlc3RvcmUgU291cmNlLnhtbCcgLCBJSWlpaWlpaUlpMUkxICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgc291cmNlcy54bWwnICkKICBpZiA3OSAtIDc5OiBJMWlpMTFpSWkxMWkgLSBvb09vIC0gbzBvT09vME8wT29vIC4gT28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnYWR2YW5jZWRzZXR0aW5ncy54bWwnICkgKSA6CiAgSWkxSTFJaSAoICcnICwgJ1Jlc3RvcmUgQWR2YW5jZWRzZXR0aW5ncy54bWwnICwgSTFJSUlpaSAsICdyZXN0b3JlX2JhY2t1cCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnUmVzdG9yZSBZb3VyIGFkdmFuY2Vkc2V0dGluZ3MueG1sJyApCiAgaWYgNjUgLSA2NTogaTExaUlpaUlpaSAuIE9vTzBPMDAgJSBJSWlJaTFpSSArIElJaWlpSTFpSUlJIC0gaTExaUlpaUlpaQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdrZXlib2FyZC54bWwnICkgKSA6CiAgSWkxSTFJaSAoICcnICwgJ1Jlc3RvcmUgQWR2YW5jZWRzZXR0aW5ncy54bWwnICwgT09PMDAgLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBrZXlib2FyZC54bWwnICkKICBpZiA2MCAtIDYwOiBJSWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnUnNzRmVlZHMueG1sJyApICkgOgogIElpMUkxSWkgKCAnJyAsICdSZXN0b3JlIFJzc0ZlZWRzLnhtbCcgLCBPT09PICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgUnNzRmVlZHMueG1sJyApCiAgaWYgMTQgLSAxNDogT28wT29vICUgb29PbyAqIElJaUlpMWlJIC0gaTExaUlpaUlpaSAvIEkxaWkxMWlJaTExaSAqIGkxMWlJaWlJaWkKICBpZiA5NSAtIDk1OiBpSWlpMUkxMUkxSUkxICsgT29Pb09PMDAgLiBJMUlpaUkgKyBPb09vT08wMCAqIE9PT29Pb28wTyArIE9vCmRlZiBpMWkxMUlpSUkgKCB1cmwgKSA6CiBvT08wT09PT09vME9vICggKQogaWYgJ2FkZG9ucycgaW4gdXJsIDoKICBvbzBPID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ2FkZG9ucy56aXAnICkgKQogIG8wMG8wb28wT29PID0gSUkxMWlpaWkxSWkKICBpZiA4NCAtIDg0OiBpSWlpMUkxMUkxSUkxICUgSUlpSWkxaUkKIGVsc2UgOgogIG9vME8gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnYWRkb25fZGF0YS56aXAnICkgKQogIG8wMG8wb28wT29PID0gaWlJMUlpSQogIGlmIDE1IC0gMTU6IElJaUlpMWlJICsgaTExaUlpaUlpaSAlIE8wICUgSUlpICsgT29PME8wMCAqIGlpaWlpaWlpMQogaWYgJ0JhY2t1cCcgaW4gb29vME8gOgogIE8wT29vb29PMG8wTzAgKCApCiAgT09vb08wT09vbyAuIGNyZWF0ZSAoICJDcmVhdGluZyBCYWNrdXAiICwgIkJhY2tpbmcgVXAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBvTzBPbzBPMCA9IHppcGZpbGUgLiBaaXBGaWxlICggb28wTyAsICd3JyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogIEkxaUlpSTFJaUlJSUkgPSBsZW4gKCBvMDBvMG9vME9vTyApCiAgSTFpaUlpMTExSSA9IFsgXQogIElpaWkxaUlpaSA9IFsgXQogIGZvciBJaTFpSWkxMTFJMWkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIG8wMG8wb28wT29PICkgOgogICBmb3IgZmlsZSBpbiBpaUkxaWlpIDoKICAgIElpaWkxaUlpaSAuIGFwcGVuZCAoIGZpbGUgKQogIE9vME8wT28wME8gPSBsZW4gKCBJaWlpMWlJaWkgKQogIGZvciBJaTFpSWkxMTFJMWkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIG8wMG8wb28wT29PICkgOgogICBmb3IgZmlsZSBpbiBpaUkxaWlpIDoKICAgIEkxaWlJaTExMUkgLiBhcHBlbmQgKCBmaWxlICkKICAgIE9PbzAwT08wME9vID0gbGVuICggSTFpaUlpMTExSSApIC8gZmxvYXQgKCBPbzBPME9vMDBPICkgKiAxMDAKICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCBpbnQgKCBPT28wME9PMDBPbyApICwgIkJhY2tpbmcgVXAiICwgJ1tDT0xPUiB5ZWxsb3ddJXNbL0NPTE9SXScgJSBmaWxlICwgJ1BsZWFzZSBXYWl0JyApCiAgICBJMUkxSTExSWkgPSBvcyAuIHBhdGggLiBqb2luICggSWkxaUlpMTExSTFpICwgZmlsZSApCiAgICBpZiBub3QgJ3RlbXAnIGluIEkxSUlJMTExaSA6CiAgICAgaWYgbm90IEkxSWlJIGluIEkxSUlJMTExaSA6CiAgICAgIGltcG9ydCB0aW1lCiAgICAgIElpMWlpMTFJSUlpID0gJzAxLzAxLzE5ODAnCiAgICAgIE9Pb29vT09PbzBvTyA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBJMUkxSTExSWkgKSApICkKICAgICAgaWYgT09vb29PT09vMG9PID4gSWkxaWkxMUlJSWkgOgogICAgICAgb08wT28wTzAgLiB3cml0ZSAoIEkxSTFJMTFJaSAsIEkxSTFJMTFJaSBbIEkxaUlpSTFJaUlJSUkgOiBdICkKICBvTzBPbzBPMCAuIGNsb3NlICggKQogIE9Pb29PME9Pb28gLiBjbG9zZSAoICkKICBpSTExMUkxMUkxSTEgLiBvayAoICJCYWNrdXAgQ29tcGxldGUiICwgIllvdSBBcmUgTm93IEJhY2tlZCBVcCIgLCAnJyAsICcnICkKICBpZiA0NiAtIDQ2OiBJSWlJaTFpSSAuIE9vT29PTzAwCiBlbHNlIDoKICBPT29vTzBPT29vIC4gY3JlYXRlICggIkV4dHJhY3RpbmcgWmlwIiAsICJDaGVja2luZyAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiAgZXh0cmFjdCAuIGFsbCAoIG9vME8gLCBvMDBvMG9vME9vTyAsIE9Pb29PME9Pb28gKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVMb2NhbEFkZG9ucyAnICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiVXBkYXRlQWRkb25SZXBvcyIgKQogIGlmIDE4IC0gMTg6IEkxaWkxMWlJaTExaQogIGlmICdCYWNrdXAnIGluIG9vbzBPIDoKICAgaUkxMTFJMTFJMUkxIC4gb2sgKCAiSW5zdGFsbCBDb21wbGV0ZSIgLCAnS29kaSB3aWxsIG5vdyBjbG9zZS4gSnVzdCByZS1vcGVuIEtvZGkgYW5kIHdhaXQgZm9yIGFsbCB0aGUgdXBkYXRlcyB0byBjb21wbGV0ZS4nICkKICAgT29vb09PbzBvT08gKCApCiAgIGlmIDMzIC0gMzM6IGkxMWlJaWlJaWkgJSBvMG9PT28wTzBPb28gLiBJSWlJaTFpSSAqIE9vIC8gT09Pb09vbzBPCiAgZWxzZSA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggIlNVQ0NFU1MhIiAsICJZb3UgQXJlIE5vdyBSZXN0b3JlZCIgLCAnJyAsICcnICkKICAgaWYgMjUgLSAyNTogT29PME8wMAogICBpZiAzOSAtIDM5OiBPMDBPT28wMG9vMG8gKiBPb09vT08wMCArIE9vME9vbyAuIE9vIC0gTzAgKiBJMWlpMTFpSWkxMWkKZGVmIE8wbzBvb28wMG8wMCAoIHVybCApIDoKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdSdW5BZGRvbiglcyknICUgdXJsICkKIGlmIDYgLSA2OiBpMTFpSWlpSWlpIC8gT29PME8wMCAuIGkxMWlJaWlJaWkgLyBpaWlpaWlpaTEKIGlmIDI2IC0gMjY6IE8wICogTzAwT09vMDBvbzBvIC0gSTFJaWlJIC0gSUlpSWkxaUkgLyBpSWlpMUkxMUkxSUkxCmRlZiBPMDBvTzAwb09PMDBPICggdGl0bGUgKSA6CiBvTzBPb28wME8gPSAnJwogT28wMG8wT09vME9PID0geGJtYyAuIEtleWJvYXJkICggb08wT29vMDBPICwgdGl0bGUgKQogT28wMG8wT09vME9PIC4gZG9Nb2RhbCAoICkKIGlmIE9vMDBvME9PbzBPTyAuIGlzQ29uZmlybWVkICggKSA6CiAgb08wT29vMDBPID0gT28wMG8wT09vME9PIC4gZ2V0VGV4dCAoICkgLiByZXBsYWNlICggJyAnICwgJyUyMCcgKQogIGlmIG9PME9vbzAwTyA9PSBOb25lIDoKICAgcmV0dXJuIEZhbHNlCiByZXR1cm4gb08wT29vMDBPCiBpZiA3NCAtIDc0OiBvMG9PT28wTzBPb28gJSBPb09vT08wMCAuIElJaUlpMWlJICUgSUlpIC4gTzAgJSBJSTExMWlpaWkKIGlmIDUgLSA1OiBvb09vIC0gT29vb29vb29PTyAvIE9vT29PTzAwCmRlZiBJMUlJMWkxaUlJaSAoIHVybCApIDoKIEkxaUlJMUlJaTFJaUkgPSBpSWlvbzBvb08gKCBoZWFkaW5nID0gIlNlYXJjaCBmb3IgYWRkLW9ucyIgKQogaWYgNTUgLSA1NTogT29PME8wMAogaWYgKCBub3QgSTFpSUkxSUlpMUlpSSApIDogcmV0dXJuIEZhbHNlICwgMAogaWYgMjAgLSAyMDogaWlpaWlpaWkxICogSUlpICogbzBvT09vME8wT29vIC0gaWlpaWlpaWkxCiBpZiAzMiAtIDMyOiBPMDBPT28wMG9vMG8gKiBvb09vCiBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKIHVybCArPSBvMDBPTzBvMAogT08gKCB1cmwgKQogaWYgODUgLSA4NTogaTExaUlpaUlpaSAuIE9vTzBPMDAgKyBPb08wTzAwCiBpZiAyOCAtIDI4OiBPbzBPb28KZGVmIG9Pb28wTyAoIHVybCApIDoKIEkxaUlJMUlJaTFJaUkgPSBpSWlvbzBvb08gKCBoZWFkaW5nID0gIlNlYXJjaCBmb3IgY29udGVudCIgKQogaWYgNTUgLSA1NTogaUlpaTFJMTFJMUlJMSAlIE9vT29PTzAwCiBpZiA3MCAtIDcwOiBvb09vIC0gTzAgKiBpSWlpMUkxMUkxSUkxIC4gSUlpICUgTzAKIGlmICggbm90IEkxaUlJMUlJaTFJaUkgKSA6IHJldHVybiBGYWxzZSAsIDAKIGlmIDk5IC0gOTk6IEkxSWlpSQogaWYgMzAgLSAzMDogTzAgJSBPb29vb29vb09PICUgT09Pb09vbzBPIC4gaTFJSWkgKyBJSWkgJSBPbwogbzAwT08wbzAgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggSTFpSUkxSUlpMUlpSSApCiB1cmwgKz0gbzAwT08wbzAKIEkxMWlpMWkgKCB1cmwgKQogaWYgOSAtIDk6IE8wIC4gaUlpaTFJMTFJMUlJMQpkZWYgaUkxaWlJMTFpaWkgKCB1cmwgKSA6CiBpMUkxaTEgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvY29tbXVuaXR5X2J1aWxkcy5waHA/aWQ9JXMnICUgKCB1cmwgKQogTzBPb29vTzAgPSBvb28wTzBvMDBPICggaTFJMWkxICwgNSApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBvT29vbzAgPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpSTFpaTFJSWlJID0gcmUgLiBjb21waWxlICggJ2F1dGhvcj0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIE9PMG8wb09PTzBPID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvb28wTyA9IG9Pb29vMCBbIDAgXSBpZiAoIGxlbiAoIG9Pb29vMCApID4gMCApIGVsc2UgJycKIElpSWkxSTFJaWlpID0gaWlJMWlpMUlJaUkgWyAwIF0gaWYgKCBsZW4gKCBpaUkxaWkxSUlpSSApID4gMCApIGVsc2UgJycKIG9PT28wb28wTyA9IE9PMG8wb09PTzBPIFsgMCBdIGlmICggbGVuICggT08wbzBvT09PME8gKSA+IDAgKSBlbHNlICcnCiBpSTExMUkxMUkxSTEgLiBvayAoIG9vbzBPICwgJ0F1dGhvcjogW0NPTE9SPWRvZGdlcmJsdWVdJyArIElpSWkxSTFJaWlpICsgJ1svQ09MT1JdICAgICAgTGF0ZXN0IFZlcnNpb246IFtDT0xPUj1kb2RnZXJibHVlXScgKyBvT09vMG9vME8gKyAnWy9DT0xPUl0nICwgJycgLCAnQ2xpY2sgT0sgdG8gdmlldyB0aGUgYnVpbGQgcGFnZS4nICkKIHRyeSA6CiAgbzBPMDBPICggdXJsICsgJyZ2aXNpYmlsaXR5PWhvbWVwYWdlJyAsIHVybCApCiBleGNlcHQgOgogIHJldHVybgogIHhibWMgLiBsb2cgKCAiIyMjIENvdWxkIG5vdCBmaW5kIGJ1aWxkIE5vLiAlcyIgJSB1cmwgKQogIGlJMTExSTExSTFJMSAuIG9rICggJ0J1aWxkIE5vdCBGb3VuZCcgLCAnU29ycnkgd2UgY291bGRuXCd0IGZpbmQgdGhlIGJ1aWxkLCBpdCBtYXkgYmUgaXRcJ3MgbWFya2VkIGFzIHByaXZhdGUgb3Igc2VydmVycyBtYXkgYmUgYnVzeS4gUGxlYXNlIHRyeSBtYW51YWxseSBzZWFyY2hpbmcgdmlhIHRoZSBDb21tdW5pdHkgQnVpbGRzIHNlY3Rpb24nICkKICBpZiA3MiAtIDcyOiBpaWlpaWlpaTEgKiBPbwogIGlmIDY5IC0gNjk6IG9vT28gLSBpMTFpSWlpSWlpCmRlZiBJMTExSUkxICggdXJsICkgOgogaUkxMTFJMTFJMUkxIC4gb2sgKCAiVGhpcyBidWlsZCBpcyBub3QgY29tcGxldGUiICwgJ1RoZSBndWlzZXR0aW5ncy54bWwgZmlsZSB3YXMgbm90IGNvcGllZCBvdmVyIGR1cmluZyB0aGUgbGFzdCBpbnN0YWxsIHByb2Nlc3MuIENsaWNrIE9LIHRvIGdvIHRvIHRoZSBidWlsZCBwYWdlIGFuZCBjb21wbGV0ZSBJbnN0YWxsIFN0ZXAgMiAoZ3Vpc2V0dGluZ3MgZml4KS4nICkKIGlmIDcxIC0gNzE6IGkxMWlJaWlJaWkgKyBPMDBPT28wMG9vMG8gLyBpMTFpSWlpSWlpIC4gT28wT29vCiB0cnkgOgogIG8wTzAwTyAoIHVybCArICcmdmlzaWJpbGl0eT1ob21lcGFnZScgLCB1cmwgKQogIGlmIDk2IC0gOTY6IE8wME9PbzAwb28wbyAqIE9vIC4gaTExaUlpaUlpaSAtIEkxSWlpSQogZXhjZXB0IDoKICByZXR1cm4KICB4Ym1jIC4gbG9nICggIiMjIyBDb3VsZCBub3QgZmluZCBidWlsZCBOby4gJXMiICUgdXJsICkKICBpSTExMUkxMUkxSTEgLiBvayAoICdCdWlsZCBOb3QgRm91bmQnICwgJ1NvcnJ5IHdlIGNvdWxkblwndCBmaW5kIHRoZSBidWlsZCwgaXQgbWF5IGJlIGl0XCdzIG1hcmtlZCBhcyBwcml2YXRlLiBQbGVhc2UgdHJ5IG1hbnVhbGx5IHNlYXJjaGluZyB2aWEgdGhlIENvbW11bml0eSBCdWlsZHMgc2VjdGlvbicgKQogIGlmIDk0IC0gOTQ6IG8wb09PbzBPME9vbyArIE8wME9PbzAwb28wbyAlIG8wb09PbzBPME9vbyAuIElJaSAtIGlpaWlpaWlpMSAqIEkxSWlpSQogIGlmIDYyIC0gNjI6IE9vME9vbyAqIGkxSUlpICUgSTFpaTExaUlpMTFpICsgT28wT29vIC4gTzAgLiBpaWlpaWlpaTEKZGVmIE9PTzAwb08wTyAoICkgOgogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9sb2dpbi9sb2dpbl9kZXRhaWxzLnBocD91c2VyPSVzJnBhc3M9JXMnICUgKCBPbzBvTzBvb28gLCBvMG9Pb08wMG8gKQogTzBPb29vTzAgPSBvb28wTzBvMDBPICggaTFJMWkxICwgNSApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBJSWkxID0gcmUgLiBjb21waWxlICggJ2xvZ2luX21zZz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIG9vbzAwbzBvID0gSUlpMSBbIDAgXSBpZiAoIGxlbiAoIElJaTEgKSA+IDAgKSBlbHNlICcnCiBPT29PME9vb08gPSByZSAuIGNvbXBpbGUgKCAncG9zdHM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBJaWlPbyA9IHJlIC4gY29tcGlsZSAoICdtZXNzYWdlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKIGlpaUlpaWkxMWkxaSA9IHJlIC4gY29tcGlsZSAoICd1bnJlYWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiBvb28wTzBPbzBPID0gcmUgLiBjb21waWxlICggJ2VtYWlsPSIoLis/KSInICkgLiBmaW5kYWxsICggTzBPb29vTzAgKQogT28wb2kxaSA9IElpaU9vIFsgMCBdIGlmICggbGVuICggSWlpT28gKSA+IDAgKSBlbHNlICcnCiBPTzAwTzBPMDBvT09PID0gaWlpSWlpaTExaTFpIFsgMCBdIGlmICggbGVuICggaWlpSWlpaTExaTFpICkgPiAwICkgZWxzZSAnJwogaWkxMTExaUlJaUlJaSA9IG9vbzBPME9vME8gWyAwIF0gaWYgKCBsZW4gKCBvb28wTzBPbzBPICkgPiAwICkgZWxzZSAnJwogb29PbzBPbyA9IE9Pb08wT29vTyBbIDAgXSBpZiAoIGxlbiAoIE9Pb08wT29vTyApID4gMCApIGVsc2UgJycKIGlmIDQ0IC0gNDQ6IE8wME9PbzAwb28wbyAuIE9vb29vb29vT08gJSBJSWkgKyBvMG9PT28wTzBPb28gJSBPT09vT29vME8gKiBPbwogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9tZW51X2NoZWNrJwogdHJ5IDoKICBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgT29vMDAwTzAwID0gcmUgLiBjb21waWxlICggJ2Q9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgaTFpSTFJaWlpMUkgPSBPb28wMDBPMDAgWyAwIF0gaWYgKCBsZW4gKCBPb28wMDBPMDAgKSA+IDAgKSBlbHNlICdub25lJwogZXhjZXB0IDoKICBpMWlJMUlpaWkxSSA9ICdub25lJwogIGlmIDU3IC0gNTc6IG8wb09PbzBPME9vbyAlIE9vME9vbyAvIEkxaWkxMWlJaTExaQogaWYgJ1dlbGNvbWUgQmFjaycgaW4gb29vMDBvMG8gOgogIHByaW50ICIjIyMgQVRURU1QVElORyBUTyBXUklURSBDT09LSUUgIgogIE9vb29vT09vbzAgPSBvcGVuICggSUlJaWkxSUkxSUkgLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggJ2Q9IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBpaWlJSSAoICkgKSArICciXG5sPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggb29vMDBvMG8gKSArICciXG5wPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggb29PbzBPbyApICsgJyJcbm09IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBpMWlJMUlpaWkxSSApICsgJyInICkKICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiBpZiBub3QgIkFjY291bnQgY3VycmVudGx5IHJlc3RyaWN0ZWQiIGluIG9vbzAwbzBvIDoKICBpSTExMUkxMUkxSTEgLiBvayAoICdBY2NvdW50IERldGFpbHMnICwgJ1VzZXJuYW1lOiAgJyArIE9vMG9PMG9vbyAsICdFbWFpbDogJyArIGlpMTExMWlJSWlJSWkgLCAnVW5yZWFkIE1lc3NhZ2VzOiAnICsgT08wME8wTzAwb09PTyArICcvJyArIE9vMG9pMWkgKyAnW0NSXVBvc3RzOiAnICsgb29PbzBPbyApCiBlbHNlIDoKICBpSTExMUkxMUkxSTEgLiBvayAoICdBY2NvdW50IEN1cnJlbnRseSBSZXN0cmljdGVkJyAsICdZb3VyIGFjY291bnQgaGFzIGEgcmVzdHJpY3Rpb24gaW4gcGxhY2UsIHRoaXMgaXMgdXN1YWxseSBmb3IgYWNjb3VudCBzaGFyaW5nLiBBbnkgdXNlcnMgY2F1Z2h0IHNoYXJpbmcgYWNjb3VudHMgYXJlIGF1dG9tYXRpY2FsbHkgcHV0IG9uIGEgc3VzcGVuc2lvbiBhbmQgY29udGludWFsIGFidXNlIHdpbGwgcmVzdWx0IGluIGEgcGVybWFuZW50IGJhbi4nICkKICBpZiA5IC0gOTogT09Pb09vbzBPIC8gT29Pb09PMDAgJSBPMCAlIEkxaWkxMWlJaTExaQogIGlmIDUgLSA1OiBpaWlpaWlpaTEKZGVmIG9PT09PT29PT29vMCAoIHVybCAsIHR5cGUgKSA6CiBJMWlpaSA9IE9vMDBPT09PTwogaWYgdHlwZSA9PSAnY29tbXVuaXR5YnVpbGRzJyA6CiAgSTFpaWkgPSAnbWFpbm1lbnUvYnVpbGRzLnBuZycKICBpMUlpSUkxSSA9ICdncmFiX2J1aWxkcycKICBpZiB1cmwgLiBlbmRzd2l0aCAoICJ2aXNpYmlsaXR5PXB1YmxpYyIgKSA6CiAgIElpMUkxSWkgKCAnZm9sZGVyJyAsICdbQ09MT1I9eWVsbG93XU1hbnVhbCBTZWFyY2hbL0NPTE9SXScgLCAnJnZpc2liaWxpdHk9cHVibGljJyAsICdtYW51YWxfc2VhcmNoJyAsIEkxaWlpICwgJycgLCAnJyAsICcnICkKICBpZiB1cmwgLiBlbmRzd2l0aCAoICJ2aXNpYmlsaXR5PXByaXZhdGUiICkgOgogICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPXllbGxvd11NYW51YWwgU2VhcmNoWy9DT0xPUl0nICwgJyZ2aXNpYmlsaXR5PXByaXZhdGUnICwgJ21hbnVhbF9zZWFyY2gnICwgSTFpaWkgLCAnJyAsICcnICwgJycgKQogaWYgdHlwZSA9PSAnYWRkb25zJyA6CiAgSTFpaWkgPSAnbWFpbm1lbnUvYWRkb25zLnBuZycKICBpMUlpSUkxSSA9ICdncmFiX2FkZG9ucycKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU29ydCBieSBNb3N0IFBvcHVsYXJbL0NPTE9SXScgLCBzdHIgKCB1cmwgKSArICcmc29ydHg9ZG93bmxvYWRzJm9yZGVyeD1ERVNDJyAsIGkxSWlJSTFJICwgSTFpaWkgLCAnJyAsICcnICwgJycgKQogaWYgdHlwZSAhPSAnYWRkb25zJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNvcnQgYnkgTW9zdCBQb3B1bGFyWy9DT0xPUl0nICwgc3RyICggdXJsICkgKyAnJnNvcnR4PWRvd25sb2FkY291bnQmb3JkZXJ4PURFU0MnICwgaTFJaUlJMUkgLCBJMWlpaSAsICcnICwgJycgLCAnJyApCiBlbHNlIDoKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU29ydCBieSBOZXdlc3RbL0NPTE9SXScgLCBzdHIgKCB1cmwgKSArICcmc29ydHg9Y3JlYXRlZCZvcmRlcng9REVTQycgLCBpMUlpSUkxSSAsIEkxaWlpICwgJycgLCAnJyAsICcnICkKICBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU29ydCBieSBSZWNlbnRseSBVcGRhdGVkWy9DT0xPUl0nICwgc3RyICggdXJsICkgKyAnJnNvcnR4PXVwZGF0ZWQmb3JkZXJ4PURFU0MnICwgaTFJaUlJMUkgLCBJMWlpaSAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU29ydCBieSBBLVpbL0NPTE9SXScgLCBzdHIgKCB1cmwgKSArICcmc29ydHg9bmFtZSZvcmRlcng9QVNDJyAsIGkxSWlJSTFJICwgSTFpaWkgLCAnJyAsICcnICwgJycgKQogaWYgdHlwZSA9PSAncHVibGljX0NCJyA6CiAgSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNvcnQgYnkgR2VucmVbL0NPTE9SXScgLCB1cmwgLCAnZ2VucmVzJyAsIEkxaWlpICwgJycgLCAnJyAsICcnICkKICBpZiA1OSAtIDU5OiBJSTExMWlpaWkgJSBJMUlpaUkgKiBPMCAuIE9vb29vb29vT08gLSBPb29vb29vb09PICUgTzAKICBpZiA1NiAtIDU2OiBvb09vIC0gaTFJSWkgKiBPb29vb29vb09PIC0gSUkxMTFpaWlpCmRlZiBpaWkxSSAoICkgOgogb09vMDBPb28wbzAgKCAnU3BlZWQgVGVzdCBJbnN0cnVjdGlvbnMnICwgJ1tDT0xPUj1ibHVlXVtCXVdoYXQgZmlsZSBzaG91bGQgSSB1c2U6IFsvQl1bL0NPTE9SXVtDUl1UaGlzIGZ1bmN0aW9uIHdpbGwgZG93bmxvYWQgYSBmaWxlIGFuZCB3aWxsIHdvcmsgb3V0IHlvdXIgc3BlZWQgYmFzZWQgb24gaG93IGxvbmcgaXQgdG9vayB0byBkb3dubG9hZC4gWW91IHdpbGwgdGhlbiBiZSBub3RpZmllZCBvZiAnCiAnd2hhdCBxdWFsaXR5IHN0cmVhbXMgeW91IGNhbiBleHBlY3QgdG8gc3RyZWFtIHdpdGhvdXQgYnVmZmVyaW5nLiBZb3UgY2FuIGNob29zZSB0byBkb3dubG9hZCBhIDEwTUIsIDE2TUIsIDMyTUIsIDY0TUIgb3IgMTI4TUIgZmlsZSB0byB1c2Ugd2l0aCB0aGUgdGVzdC4gVXNpbmcgdGhlIGxhcmdlciBmaWxlcyB3aWxsIGdpdmUgeW91IGEgYmV0dGVyICcKICdpbmRpY2F0aW9uIG9mIGhvdyByZWxpYWJsZSB5b3VyIHNwZWVkcyBhcmUgYnV0IG9idmlvdXNseSBpZiB5b3UgaGF2ZSBhIGxpbWl0ZWQgYW1vdW50IG9mIGJhbmR3aWR0aCBhbGxvd2FuY2UgeW91IG1heSB3YW50IHRvIG9wdCBmb3IgYSBzbWFsbGVyIGZpbGUuJwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdSG93IGFjY3VyYXRlIGlzIHRoaXMgc3BlZWQgdGVzdDpbL0JdWy9DT0xPUl1bQ1JdTm90IHZlcnkgYWNjdXJhdGUgYXQgYWxsISBBcyB0aGlzIHRlc3QgaXMgYmFzZWQgb24gZG93bmxvYWRpbmcgYSBmaWxlIGZyb20gYSBzZXJ2ZXIgaXRcJ3MgcmVsaWFudCBvbiB0aGUgc2VydmVyIG5vdCBoYXZpbmcgYSBnby1zbG93IGRheSAnCiAnYnV0IHRoZSBzZXJ2ZXJzIHVzZWQgc2hvdWxkIGJlIHByZXR0eSByZWxpYWJsZS4gVGhlIDEwTUIgZmlsZSBpcyBob3N0ZWQgb24gYSBkaWZmZXJlbnQgc2VydmVyIHRvIHRoZSBvdGhlcnMgc28gaWYgeW91XCdyZSBub3QgZ2V0dGluZyB0aGUgcmVzdWx0cyBleHBlY3RlZCBwbGVhc2UgdHJ5IGFub3RoZXIgZmlsZS4gSWYgeW91IGhhdmUgYSBmYXN0IGZpYmVyICcKICdjb25uZWN0aW9uIHRoZSBjaGFuY2VzIGFyZSB5b3VyIHNwZWVkIHdpbGwgc2hvdyBhcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4geW91ciByZWFsIGRvd25sb2FkIHNwZWVkIGR1ZSB0byB0aGUgc2VydmVyIG5vdCBiZWluZyBhYmxlIHRvIHNlbmQgdGhlIGZpbGUgYXMgZmFzdCBhcyB5b3VyIGRvd25sb2FkIHNwZWVkIGFsbG93cy4gRXNzZW50aWFsbHkgdGhlICcKICd0ZXN0IHJlc3VsdHMgd2lsbCBiZSBsaW1pdGVkIGJ5IHRoZSBzcGVlZCBvZiB0aGUgc2VydmVyIGJ1dCB5b3Ugd2lsbCBhdCBsZWFzdCBiZSBhYmxlIHRvIHNlZSBpZiBpdFwncyB5b3VyIGNvbm5lY3Rpb24gdGhhdFwncyBjYXVzaW5nIGJ1ZmZlcmluZyBvciBpZiBpdFwncyB0aGUgaG9zdCB5b3VcJ3JlIHRyeWluZyB0byBzdHJlYW0gZnJvbScKICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVdoYXQgaXMgdGhlIGRpZmZlcm5jZSBiZXR3ZWVuIExpdmUgU3RyZWFtcyBhbmQgT25saW5lIFZpZGVvOlsvQ09MT1JdWy9CXVtDUl1XaGVuIHlvdSBydW4gdGhlIHRlc3QgeW91XCdsbCBzZWUgcmVzdWx0cyBiYXNlZCBvbiB5b3VyIHNwZWVkcyBhbmQgdGhlc2UgbGV0IHlvdSBrbm93IHRoZSBxdWFsaXR5IHlvdSBzaG91bGQgZXhwZWN0IHRvICcKICdiZSBhYmxlIHN0cmVhbSB3aXRoIHlvdXIgY29ubmVjdGlvbi4gTGl2ZSBTdHJlYW1zIGFzIHRoZSB0aXRsZSBzdWdnZXN0cyBhcmUgbGlrZSB0cmFkaXRpb25hbCBUViBjaGFubmVscywgdGhleSBhcmUgYmVpbmcgc3RyZWFtZWQgbGl2ZSBzbyBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudGVkIHRvIHdhdGNoIENOTiB0aGlzIHdvdWxkIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiAnCiAnT25saW5lIFZpZGVvcyByZWxhdGVzIHRvIG1vdmllcywgdHYgc2hvd3MsIHlvdXR1YmUgY2xpcHMgZXRjLiBCYXNpY2FsbHkgYW55dGhpbmcgdGhhdCBpc25cJ3QgbGl2ZSAtIGlmIHlvdVwncmUgbmV3IHRvIHRoZSB3b3JsZCBvZiBzdHJlYW1pbmcgdGhlbiB0aGluayBvZiBpdCBhcyBPbiBEZW1hbmQgY29udGVudCwgdGhpcyBpcyBjb250ZW50IHRoYXRcJ3MgYmVlbiByZWNvcmRlZCBhbmQgc3RvcmVkIG9uIHRoZSB3ZWIuJwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdV2h5IGFtIEkgc3RpbGwgZ2V0dGluZyBidWZmZXJpbmc6Wy9DT0xPUl1bL0JdW0NSXVRoZSByZXN1bHRzIHlvdSBnZXQgZnJvbSB0aGlzIHRlc3QgYXJlIHN0cmljdGx5IGJhc2VkIG9uIHlvdXIgZG93bmxvYWQgc3BlZWQsIHRoZXJlIGFyZSBtYW55IG90aGVyIGZhY3RvcnMgdGhhdCBjYW4gY2F1c2UgYnVmZmVyaW5nIGFuZCBjb250cmFyeSB0byBwb3B1bGFyIGJlbGllZiAnCiAnaGF2aW5nIGEgbWFzc2l2ZWx5IGZhc3QgaW50ZXJuZXQgY29ubmVjdGlvbiB3aWxsIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlIHRvIHlvdXIgYnVmZmVyaW5nIGlzc3VlcyBpZiB0aGUgc2VydmVyIHlvdVwncmUgdHJ5aW5nIHRvIGdldCB0aGUgY29udGVudCBmcm9tIGlzIHVuYWJsZSB0byBzZW5kIGl0IGZhc3QgZW5vdWdoLiBUaGlzIGNhbiBvZnRlbiBoYXBwZW4gYW5kIGlzIHVzdWFsbHkgJwogJ2Rvd24gdG8gaGVhdnkgdHJhZmZpYyAodG9vIG1hbnkgdXNlcnMgYWNjZXNzaW5nIHRoZSBzYW1lIHNlcnZlcikuIEEgMTAgTWIvcyBjb25uZWN0aW9uIHNob3VsZCBiZSBwbGVudHkgZmFzdCBlbm91Z2ggZm9yIGFsbW9zdCBhbGwgY29udGVudCBhcyBpdFwncyB2ZXJ5IHJhcmUgYSBzZXJ2ZXIgY2FuIHNlbmQgaXQgYW55IHF1aWNrZXIgdGhhbiB0aGF0LicKICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVdoYXRcJ3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBNQi9zIGFuZCBNYi9zOlsvQ09MT1JdWy9CXVtDUl1BIGxvdCBvZiBwZW9wbGUgdGhpbmsgdGhlIHNwZWVkIHRoZXkgc2VlIGFkdmVydGlzZWQgYnkgdGhlaXIgSVNQIGlzIE1lZ2FieXRlcyAoTUIvUykgcGVyIHNlY29uZCAtIHRoaXMgaXMgbm90IHRydWUuIFNwZWVkcyBhcmUgdXN1YWxseSBzaG93biBhcyBNYi9zICcKICd3aGljaCBpcyBNZWdhYml0IHBlciBzZWNvbmQgLSB0aGVyZSBhcmUgOCBvZiB0aGVzZSB0byBhIG1lZ2FieXRlIHNvIGlmIHlvdSB3YW50IHRvIHdvcmsgb3V0IGhvdyBtYW55IG1lZ2FieXRlcyBwZXIgc2Vjb25kIHlvdVwncmUgZ2V0dGluZyB5b3UgbmVlZCB0byBkaXZpZGUgdGhlIHNwZWVkIGJ5IDguIEl0IG1heSBzb3VuZCBzbmVha3kgYnV0IHJlYWxseSBpdFwncyBqdXN0IHRoZSB1bml0IHRoYXQgaGFzIGFsd2F5cyBiZWVuIHVzZWQuJwogJ1tDUl1bQ1JdQSBkaXJlY3QgbGluayB0byB0aGUgYnVmZmVyaW5nIHRocmVhZCBleHBsYWluaW5nIHdoYXQgeW91IGNhbiBkbyB0byBpbXByb3ZlIHlvdXIgdmlld2luZyBleHBlcmllbmNlIGNhbiBiZSBmb3VuZCBhdCBbQ09MT1I9eWVsbG93XWh0dHA6Ly9iaXQubHkvYnVmZmVyaW5nZml4Wy9DT0xPUl0nCiAnW0NSXVtDUl1UaGFuayB5b3UsIFtDT0xPUj1kb2RnZXJibHVlXW5vb2JzYW5kbmVyZHNbL0NPTE9SXSBUZWFtLicgKQogaWYgMTEgLSAxMTogT28wT29vICogT29vb29vb29PTyAtIGkxMWlJaWlJaWkKIGlmIDEzIC0gMTM6IGkxMWlJaWlJaWkgLiBPMCAvIE9vICogaTFJSWkKZGVmIEkxaTFpMWkgKCApIDoKIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9Ymx1ZV1JbnN0cnVjdGlvbnMgLSBSZWFkIG1lIGZpcnN0Wy9DT0xPUl0nICwgJ25vbmUnICwgJ3NwZWVkX2luc3RydWN0aW9ucycgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnRG93bmxvYWQgNU1CIGZpbGUnICwgJ2h0dHA6Ly9kb3dubG9hZC50aGlua2Jyb2FkYmFuZC5jb20vNU1CLnppcCcgLCAncnVudGVzdCcgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnRG93bmxvYWQgMTBNQiBmaWxlJyAsICdodHRwOi8vZG93bmxvYWQudGhpbmticm9hZGJhbmQuY29tLzEwTUIuemlwJyAsICdydW50ZXN0JyAsICcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdEb3dubG9hZCAyME1CIGZpbGUnICwgJ2h0dHA6Ly9kb3dubG9hZC50aGlua2Jyb2FkYmFuZC5jb20vMjBNQi56aXAnICwgJ3J1bnRlc3QnICwgJycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0Rvd25sb2FkIDUwTUIgZmlsZScgLCAnaHR0cDovL2Rvd25sb2FkLnRoaW5rYnJvYWRiYW5kLmNvbS81ME1CLnppcCcgLCAncnVudGVzdCcgLCAnJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnRG93bmxvYWQgMTAwTUIgZmlsZScgLCAnaHR0cDovL2Rvd25sb2FkLnRoaW5rYnJvYWRiYW5kLmNvbS8xMDBNQi56aXAnICwgJ3J1bnRlc3QnICwgJycgLCAnJyAsICcnICwgJycgKQogaWYgNzggLSA3ODogTzAKZGVmIE9vMDAwTyAoIG5hbWUgKSA6CiBpZiAzNCAtIDM0OiBJSTExMWlpaWkKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAnQ3JlYXRpbmcgUHJvZmlsZScgLCAnJyAsICcnICwgJycgKQogTzAwTzBPME9PMDBvbyA9IG9vMG8gKCBuYW1lICkKIGlmIDIwIC0gMjA6IEkxSWlpSSAlIGkxSUlpICUgT29Pb09PMDAgJSBJSWkgKyBPMAogaWYgNTQgLSA1NDogTzAKIElJMTExSWlpaUkxID0gWyBdCiBmb3IgaTFJSTEgaW4gb3MgLiBsaXN0ZGlyICggT08wbyApIDoKICBJSTExMUlpaWlJMSAuIGFwcGVuZCAoIGkxSUkxICkKICBpZiAzIC0gMzogSTFpaTExaUlpMTFpCiAgaWYgNDIgLSA0MjogT09Pb09vbzBPICUgT28wT29vICsgSUlpaWlJMWlJSUkgLSBPT09vT29vME8gLiBpSWlpMUkxMUkxSUkxIC0gTzAwT09vMDBvbzBvCiAgSTFpSWlJMWlpSSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSUkgLCBuYW1lICwgJ2FkZG9ubGlzdCcgKSAsIG1vZGUgPSAncicgKQogIG9PMDAwTzAwID0gSTFpSWlJMWlpSSAuIHJlYWQgKCApCiAgSTFpSWlJMWlpSSAuIGNsb3NlICggKQogIG9PMDAwTzAwID0gb08wMDBPMDAgLiBzcGxpdCAoICd8JyApCiAgaWYgMzkgLSAzOTogTzAgKiBPbzBPb28gLSBJMUlpaUkgKyBPMDBPT28wMG9vMG8gLyBJSTExMWlpaWkKICBpZiA2NiAtIDY2OiBpaWlpaWlpaTEgKyBvb09vICUgT29vb29vb29PTwogTzBPTyAoICdwcm9maWxlcycgKQogZm9yIGkxSUkxIGluIG9zIC4gbGlzdGRpciAoIElJMTFpaWlpMUlpICkgOgogIGlmIG5vdCBpMUlJMSBpbiBJSTExMUlpaWlJMSBhbmQgaTFJSTEgIT0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyBhbmQgaTFJSTEgIT0gJ3JlcG9zaXRvcnkubm9vYnNhbmRuZXJkcycgYW5kIGkxSUkxICE9ICdwYWNrYWdlcycgOgogICB0cnkgOgogICAgc2h1dGlsIC4gY29weXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggTzBvME8wME9vMG8wICwgJ2FkZG9ucycgLCBpMUlJMSApICwgb3MgLiBwYXRoIC4gam9pbiAoIElJICwgJ01hc3RlcicgLCAnYmFja3VwcycgLCBpMUlJMSApICkKICAgIGlmIG9PT29vMDBPME8gPT0gJ3RydWUnIDoKICAgICB4Ym1jIC4gbG9nICggIiMjIyBTdWNjZXNzZnVsbHkgY29waWVkICVzIHRvICVzIiAlICggaTFJSTEgLCBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnTWFzdGVyJyAsICdiYWNrdXBzJyAsIGkxSUkxICkgKSApCiAgIGV4Y2VwdCA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gY29weSAlcyB0byBiYWNrdXAgZm9sZGVyLCBtdXN0IGFscmVhZHkgZXhpc3QiICUgaTFJSTEgKQogICBpZiBub3QgaTFJSTEgaW4gb08wMDBPMDAgYW5kIGkxSUkxICE9IG8wME9PMDBPb08gOgogICAgdHJ5IDoKICAgICBvcyAuIHJlbmFtZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGkxSUkxICkgLCBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnTWFzdGVyJyAsIGkxSUkxICkgKQogICAgZXhjZXB0IDoKICAgICB0cnkgOgogICAgICBzaHV0aWwgLiBjb3B5dHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExaWlpaTFJaSAsIGkxSUkxICkgLCBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnTWFzdGVyJyAsIGkxSUkxICkgKQogICAgIGV4Y2VwdCA6CiAgICAgIHRyeSA6CiAgICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBpMUlJMSApICkKICAgICAgZXhjZXB0IDoKICAgICAgIHhibWMgLiBsb2cgKCAiIyMjIFVuYWJsZSB0byBtb3ZlICVzIGFzIGl0J3MgY3VycmVudGx5IGluIHVzZSIgJSBpMUlJMSApCiBzaHV0aWwgLiBybXRyZWUgKCBPMG8wTzAwT28wbzAgKQogaWYgMjMgLSAyMzogb29PbyAuIE9vT29PTzAwICsgaUlpaTFJMTFJMUlJMQogaWYgMTcgLSAxNzogSUlpaWlJMWlJSUkKIGZvciBpMUlJMSBpbiBvTzAwME8wMCA6CiAgaWYgbm90IGkxSUkxIGluIElJMTExSWlpaUkxIGFuZCBub3QgaTFJSTEgaW4gSUkxMWlpaWkxSWkgOgogICB0cnkgOgogICAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggSUkgLCAnTWFzdGVyJyAsIGkxSUkxICkgLCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBpMUlJMSApICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDEyIC0gMTI6IGkxSUlpIC4gT29PME8wMAogSUkxaWkxICggKQogT09PMDBPMDBvb28wbyAoICkKIE9vT29vICggaTFpICkKIHhibWMgLiBsb2cgKCAiIyMjIFdJUEUgRlVOQ1RJT05TIENPTVBMRVRFIiApCiBpZiA5NyAtIDk3OiBpaWlpaWlpaTEgKiBPbzBPb28gLyBvMG9PT28wTzBPb28gLiBJSTExMWlpaWkgLyBJSWlJaTFpSSAvIElJaUlpMWlJCiBpZiAyNSAtIDI1OiBJSWlJaTFpSQogdHJ5IDoKICBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIE8wMDBvbzBPICwgbW9kZSA9ICdyJyApCiAgaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKICBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiAgeGJtYyAuIGxvZyAoICIjIyMgb3JpZ2luYWwgaWRmaWxlIGNvbnRlbnRzOiAlcyIgJSBpaTFJMSApCiBleGNlcHQgOgogIHhibWMgLiBsb2cgKCAiIyMjIG9yaWdpbmFsIGlkIGZpbGUgZG9lcyBub3QgZXhpc3QiICkKICBpZiA4NSAtIDg1OiBPbzBPb28gKyBPbzBPb28gJSBPT09vT29vME8gKyBJSWkKIHRyeSA6CiAgZXh0cmFjdCAuIGFsbCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSSAsIG5hbWUgLCAnYnVpbGQuemlwJyApICwgaUlpaTEgLCBPT29vTzBPT29vICkKICBPMGkxSTExSSA9IDEKICB4Ym1jIC4gbG9nICggIiMjIyBFeHRyYWN0aW9uIG9mIGJ1aWxkIHN1Y2Nlc3NmdWwiICkKIGV4Y2VwdCA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnRXJyb3InICwgIlNvcnJ5IGl0IHdhc24ndCBwb3NzaWJsZSB0byBleHRyYWN0IHlvdXIgYnVpbGQsIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHlvdXIgYnVpbGQgemlwIGZpbGUuIiApCiAgTzBpMUkxMUkgPSAwCiAgaWYgNTcgLSA1NzogT29Pb09PMDAgLyBJMWlpMTFpSWkxMWkKICBpZiA5MCAtIDkwOiBPMDBPT28wMG9vMG8gLyBvb09vICogT28wT29vICogT28wT29vIC8gT29Pb09PMDAKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJaTFpSWlJSTFpaTEgKSA6CiAgb3MgLiBtYWtlZGlycyAoIElpMWlJaUlJMWlpMSApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAnaWQueG1sJyApICkgYW5kIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgJ3RpX2lkJyAsICdpZC54bWwnICkgKSA6CiAgb3MgLiByZW1vdmUgKCBPMDAwb28wTyApCiAgeGJtYyAuIGxvZyAoICcjIyMgUkVNT1ZFRCBTVEFOREFSRCBpZC54bWwnICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgJ3RpX2lkJyAsICdpZC54bWwnICkgKSA6CiAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsICd0aV9pZCcgLCAnaWQueG1sJyApICwgTzAwMG9vME8gKQogZWxzZSA6CiAgeGJtYyAuIGxvZyAoICcjIyMgaWQgZmlsZSBkb2VzIG5vdCBleGlzdCcgKQogIGlmIDg2IC0gODY6IEkxaWkxMWlJaTExaSAqIGlpaWlpaWlpMSAtIE8wCiAgaWYgMjEgLSAyMTogSTFJaWlJIC4gT28wT29vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJMTFpaWkxSWkgKSBhbmQgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAndGlfaWQnICwgJ3N0YXJ0dXAueG1sJyApICkgOgogIHhibWMgLiBsb2cgKCAiIyMjIHN0YXJ0dXAueG1sIGFuZCB0ZW1wb3Jhcnkgc3RhcnR1cC54bWwgZXhpc3RzLCBhdHRlbXB0aW5nIHJlbW92ZSBvZiBvcmlnaW5hbCBhbmQgcmVwbGFjZSB3aXRoIHRlbXAiICkKICBvcyAuIHJlbW92ZSAoIEkxMWlpaTFJaSApCiAgeGJtYyAuIGxvZyAoICIjIyMgcmVtb3ZhbCBvayIgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAndGlfaWQnICwgJ3N0YXJ0dXAueG1sJyApICkgOgogIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAndGlfaWQnICwgJ3N0YXJ0dXAueG1sJyApICwgSTExaWlpMUlpICkKICB4Ym1jIC4gbG9nICggIiMjIyByZW5hbWUgb2siICkKICBpZiA1NCAtIDU0OiBJSWkgLSBJSWkgKiBPMCAvIE8wME9PbzAwb28wbyArIEkxSWlpSSAtIElJaQogaWYgTzBpMUkxMUkgPT0gMSA6CiAgT29vb09PbzBvT08gKCApCiAgaWYgNTggLSA1ODogT29vb29vb29PTyAqIGkxSUlpICogT29Pb09PMDAKICBpZiA5OSAtIDk5OiBPbzBPb28KZGVmIE9PMG8wICggdXJsICkgOgogSWkxSTFJaSAoICdmb2xkZXInICwgJ1tDT0xPUj1kYXJrY3lhbl1ERUxFVEUgQSBCVUlMRFsvQ09MT1JdJyAsIHVybCAsICdkZWxldGVfcHJvZmlsZScgLCAnJyAsICcnICwgJycgKQogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIElJICkgOgogIGlmIG9vbzBPICE9ICdNYXN0ZXInIGFuZCBvb28wTyAhPSB1cmwgLiByZXBsYWNlICggJyAnICwgJ18nICkgLiByZXBsYWNlICggIiciICwgJycgKSAuIHJlcGxhY2UgKCAnOicgLCAnLScgKSA6CiAgIElpMUkxSWkgKCAnJyAsICdMb2FkIFByb2ZpbGU6IFtDT0xPUj1kb2RnZXJibHVlXScgKyBvb28wTyAuIHJlcGxhY2UgKCAnXycgLCAnICcgKSArICdbL0NPTE9SXScgLCBvb28wTyAsICdzd2l0Y2hfcHJvZmlsZScgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDk2IC0gOTY6IGkxSUlpIC0gSUlpICogSTFJaWlJICUgSTFJaWlJCiAgIGlmIDMxIC0gMzE6IEkxaWkxMWlJaTExaSAuIE8wME9PbzAwb28wbyAvIGlpaWlpaWlpMSAvIGkxMWlJaWlJaWkgJSBvMG9PT28wTzBPb28KZGVmIG9PbzAwT29vMG8wICggaGVhZGluZyAsIGFub3VuY2UgKSA6CiBjbGFzcyBvMDBvb09PbzBvb08wICggKSA6CiAgV0lORE9XID0gMTAxNDcKICBDT05UUk9MX0xBQkVMID0gMQogIENPTlRST0xfVEVYVEJPWCA9IDUKICBkZWYgX19pbml0X18gKCBzZWxmICwgKiBhcmdzICwgKioga3dhcmdzICkgOgogICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiQWN0aXZhdGVXaW5kb3coJWQpIiAlICggc2VsZiAuIFdJTkRPVyAsICkgKQogICBzZWxmIC4gd2luID0geGJtY2d1aSAuIFdpbmRvdyAoIHNlbGYgLiBXSU5ET1cgKQogICB4Ym1jIC4gc2xlZXAgKCA1MDAgKQogICBzZWxmIC4gc2V0Q29udHJvbHMgKCApCiAgZGVmIHNldENvbnRyb2xzICggc2VsZiApIDoKICAgc2VsZiAuIHdpbiAuIGdldENvbnRyb2wgKCBzZWxmIC4gQ09OVFJPTF9MQUJFTCApIC4gc2V0TGFiZWwgKCBoZWFkaW5nICkKICAgdHJ5IDoKICAgIElJaUkxaSA9IG9wZW4gKCBhbm91bmNlICkgOyBJMTFpMUkxID0gSUlpSTFpIC4gcmVhZCAoICkKICAgZXhjZXB0IDoKICAgIEkxMWkxSTEgPSBhbm91bmNlCiAgIHNlbGYgLiB3aW4gLiBnZXRDb250cm9sICggc2VsZiAuIENPTlRST0xfVEVYVEJPWCApIC4gc2V0VGV4dCAoIHN0ciAoIEkxMWkxSTEgKSApCiAgIHJldHVybgogbzAwb29PT28wb29PMCAoICkKIHdoaWxlIHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICdXaW5kb3cuSXNWaXNpYmxlKDEwMTQ3KScgKSA6CiAgeGJtYyAuIHNsZWVwICggNTAwICkKICBpZiA1IC0gNTogT29vb29vb29PTyAtIElJaUlpMWlJIC0gaTExaUlpaUlpaQogIGlmIDUzIC0gNTM6IElJaUlpMWlJICogT29PME8wMCAvIEkxaWkxMWlJaTExaSArIEkxSWlpSSArIE9vb29vb29vT08KZGVmIGlJaTExMTExaTFJSSAoIHVybCApIDoKIHRyeSA6CiAgb29vb28gLCBJMTFpMUkxID0gdXJsIC4gc3BsaXQgKCAnfCcgKQogIG9PbzAwT29vMG8wICggb29vb28gLCBJMTFpMUkxICkKIGV4Y2VwdCA6CiAgb09vMDBPb28wbzAgKCAnJyAsIHVybCApCiAgaWYgNjcgLSA2NzogaTExaUlpaUlpaSAuIGlpaWlpaWlpMSAvIGlJaWkxSTExSTFJSTEgJSBPMDBPT28wMG9vMG8gKiBvb09vIC0gTzAKICBpZiAxMDAgLSAxMDA6IE9vb29vb29vT08gLyBPbzBPb28gLSBPMDBPT28wMG9vMG8gLiBPT09vT29vME8gLyBPb29vb29vb09PIC0gT09Pb09vbzBPCmRlZiBpaWlJSSAoICkgOgogTzAwTzBPID0gdGltZSAuIHRpbWUgKCApCiBpSTFJID0gdGltZSAuIGxvY2FsdGltZSAoIE8wME8wTyApCiByZXR1cm4gdGltZSAuIHN0cmZ0aW1lICggJyVZJW0lZCVIJU0lUycgLCBpSTFJICkKIGlmIDcwIC0gNzA6IG9vT28gLSBpMTFpSWlpSWlpCiBpZiAzNyAtIDM3OiBJSWlpaUkxaUlJSSAlIE8wME9PbzAwb28wbyAlIGkxSUlpCmRlZiBpMUlpaTFpaSAoIGlkICwgdmFsdWUgKSA6CiBpaUlJID0gb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgaWQgLCAnYWRkb24ueG1sJyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpaUlJICkgOgogIElJaUkxaSA9IG9wZW4gKCBpaUlJICkKICBPTzBPT29vME9PTyA9IElJaUkxaSAuIHJlYWQgKCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApIC4gcmVwbGFjZSAoICdcdCcgLCAnJyApCiAgbzBPTzAwMG9vT28gPSByZSAuIGNvbXBpbGUgKCAnPGFkZG8uKz9pZD0iKC4rPykiLis/PicgKSAuIGZpbmRhbGwgKCBPTzBPT29vME9PTyApCiAgeGJtYyAuIGxvZyAoICcjIyMgQURET04gSUQgVE8gU1RPUDogJXMnICUgbzBPTzAwMG9vT28gWyAwIF0gKQogIE9PbyA9IHJlIC4gY29tcGlsZSAoICc8ZXh0ZW5zaW9uIHBvaW50PS4rP2licmFyeT0iKC4rPykiLis/c3RhcnQ9IicgKSAuIGZpbmRhbGwgKCBPTzBPT29vME9PTyApCiAgaWYgbGVuICggT09vICkgPiAwIDoKICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1N0b3BTY3JpcHQoJXMpJyAlIG8wT08wMDBvb09vIFsgMCBdICkKIE9PMDBPTzBvMCA9ICd7Impzb25ycGMiOiIyLjAiLCAibWV0aG9kIjoiQWRkb25zLlNldEFkZG9uRW5hYmxlZCIsInBhcmFtcyI6eyJhZGRvbmlkIjoiJXMiLCJlbmFibGVkIjolc30sICJpZCI6MX0nICUgKCBvME9PMDAwb29PbyBbIDAgXSAsIHZhbHVlICkKIG9PT09vb09vME8gPSB4Ym1jIC4gZXhlY3V0ZUpTT05SUEMgKCBPTzAwT08wbzAgKQogeGJtYyAuIGxvZyAoIHN0ciAoIE9PMDBPTzBvMCApICkKIHhibWMgLiBsb2cgKCBzdHIgKCBvT09Pb29PbzBPICkgKQogaWYgJ2Vycm9yJyBpbiBvT09Pb29PbzBPIDoKICBvT29JMWkxMUlpaTFJMUkxID0gJ0VuYWJsaW5nJyBpZiB2YWx1ZSA9PSAndHJ1ZScgZWxzZSAnRGlzYWJsaW5nJwogIGlJMTExSTExSTFJMSAuIG9rICggIkNvbW11bml0eSBQb3J0YWwiICwgIkVycm9yICVzIFtDT0xPUiB5ZWxsb3ddJXNbL0NPTE9SXSIgJSAoIG9Pb0kxaTExSWlpMUkxSTEgLCBpZCApICwgIkNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYWRkb24gbGlzdCBpcyB1cHRvIGRhdGUgYW5kIHRyeSBhZ2Fpbi4iICkKICBpaUlpaWkxSUlJSUkgKCApCiAgaWYgMjcgLSAyNzogT29Pb09PMDAgJSBPMDBPT28wMG9vMG8gLyBpMUlJaSAuIGkxSUlpICogT29vb29vb29PTyAlIGlpaWlpaWlpMQogIGlmIDkyIC0gOTI6IE8wME9PbzAwb28wbyAtIGlpaWlpaWlpMSAvIGlpaWlpaWlpMSArIElJaWlpSTFpSUlJCmRlZiBPMDBvME9PME8gKCApIDoKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdBZGQtb24gVG9vbHMnICwgJ25vbmUnICwgJ3Rvb2xzX2FkZG9ucycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJ2ZvbGRlcicgLCAnQmFja3VwL1Jlc3RvcmUnICwgJ25vbmUnICwgJ2JhY2t1cF9yZXN0b3JlJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdDbGVhbiB1cCBteSBLb2RpJyAsICcnICwgJ3Rvb2xzX2NsZWFuJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdNaXNjLiBUb29scycgLCAnJyAsICd0b29sc19taXNjJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIElpb08wTyAoICkgOgogIElpMUkxSWkgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1XaS1GaSAvIE9wZW5FTEVDIFNldHRpbmdzWy9DT0xPUl0nICwgJycgLCAnb3BlbmVsZWNfc2V0dGluZ3MnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogIGlmIDEwMCAtIDEwMDogSUlpIC0gaTFJSWkKICBpZiA5MCAtIDkwOiBPMDBPT28wMG9vMG8gKyBvb09vIC4gSUkxMTFpaWlpIC0gT29Pb09PMDAgJSBpSWlpMUkxMUkxSUkxCmRlZiBpMTExSSAoICkgOgogSWkxSTFJaSAoICcnICwgJ0NvbXBsZXRlbHkgUmVtb3ZlIEFuIEFkZC1vbiAoaW5jLiBwYXNzd29yZHMpJyAsICdwbHVnaW4nICwgJ2FkZG9uX3JlbW92YWxfbWVudScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnRGVsZXRlIEFkZG9uIERhdGEnICwgJ3VybCcgLCAncmVtb3ZlX2FkZG9uX2RhdGEnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICdmb2xkZXInICwgJ0VuYWJsZS9EaXNhYmxlIEFkZG9ucycgLCAndHJ1ZScgLCAnZW5hYmxlYWRkb25zJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdNYWtlIEFkZC1vbnMgR290aGFtL0hlbGl4IENvbXBhdGlibGUnICwgJ25vbmUnICwgJ2dvdGhhbScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnTWFrZSBTa2lucyBLb2RpIChIZWxpeCkgQ29tcGF0aWJsZScgLCAnbm9uZScgLCAnaGVsaXgnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ1Bhc3N3b3JkcyAtIEhpZGUgd2hlbiB0eXBpbmcgaW4nICwgJ25vbmUnICwgJ2hpZGVfcGFzc3dvcmRzJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdQYXNzd29yZHMgLSBVbmhpZGUgd2hlbiB0eXBpbmcgaW4nICwgJ25vbmUnICwgJ3VuaGlkZV9wYXNzd29yZHMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ1VwZGF0ZSBNeSBBZGQtb25zIChGb3JjZSBSZWZyZXNoKScgLCAnbm9uZScgLCAndXBkYXRlJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDMzIC0gMzM6IE9vCiBpZiAyMiAtIDIyOiBPMCArIE9vICUgaTFJSWkKZGVmIG9vMDBvbyAoICkgOgogSWkxSTFJaSAoICcnICwgJ1tDT0xPUj1nb2xkXUNMRUFOIE1ZIEtPREkgRk9MREVSUyAoU2F2ZSBTcGFjZSlbL0NPTE9SXScgLCAnJyAsICdmdWxsX2NsZWFuJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdDbGVhciBBbGwgQ2FjaGUgRm9sZGVycycgLCAndXJsJyAsICdjbGVhcl9jYWNoZScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnQ2xlYXIgQ2FjaGVkIEFydHdvcmsgKHRodW1ibmFpbHMgJiB0ZXh0dXJlcyknICwgJ25vbmUnICwgJ3JlbW92ZV90ZXh0dXJlcycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnQ2xlYXIgUGFja2FnZXMgRm9sZGVyJyAsICd1cmwnICwgJ3JlbW92ZV9wYWNrYWdlcycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnRGVsZXRlIE9sZCBCdWlsZHMvWmlwcyBGcm9tIERldmljZScgLCAndXJsJyAsICdyZW1vdmVfYnVpbGQnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0RlbGV0ZSBPbGQgQ3Jhc2ggTG9ncycgLCAndXJsJyAsICdyZW1vdmVfY3Jhc2hfbG9ncycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnV2lwZSBNeSBJbnN0YWxsIChGcmVzaCBTdGFydCknICwgJycgLCAnd2lwZV94Ym1jJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDU3IC0gNTc6IE9vICogT29PME8wMCArIE8wICUgSUlpIC0gSTFJaWlJCiBpZiA0MyAtIDQzOiBJSWkKZGVmIElpaUlJaUlpaSAoICkgOgogaWlJID0gaWlpMWkxSUlJICggKQogSWkxSTFJaSAoICcnICwgJ0NoZWNrIEZvciBTcGVjaWFsIENoYXJhY3RlcnMgSW4gRmlsZW5hbWVzJyAsICcnICwgJ0FTQ0lJX0NoZWNrJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnZm9sZGVyJyAsICdDaGVjayBNeSBJbnRlcm5ldCBTcGVlZCcgLCAnbm9uZScgLCAnc3BlZWR0ZXN0X21lbnUnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0NoZWNrIE15IElQIEFkZHJlc3MnICwgJ25vbmUnICwgJ2lwY2hlY2snICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ0NoZWNrIFhCTUMvS29kaSBWZXJzaW9uJyAsICdub25lJyAsICd4Ym1jdmVyc2lvbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnQ29udmVydCBQaHlzaWNhbCBQYXRocyBUbyBTcGVjaWFsJyAsIGlJaWkxICwgJ2ZpeF9zcGVjaWFsJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdGb3JjZSBDbG9zZSBLb2RpJyAsICd1cmwnICwgJ2tpbGxfeGJtYycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiBPbzBvTzBvb28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBpaUkgYW5kIE9vMG9PMG9vbyAhPSAnJyA6CiAgSWkxSTFJaSAoICcnICwgJ1JlbW92ZSBDb21tdW5pdHkgQnVpbGQgUHJvdGVjdGlvbicgLCAnbm9uZScgLCAncmVtb3ZlX25hZycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBJaTFJMUlpICggJycgLCAnVXBsb2FkIExvZycgLCAnbm9uZScgLCAndXBsb2FkbG9nJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdWaWV3IE15IExvZycgLCAnbm9uZScgLCAnbG9nJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIElpMUkxSWkgKCAnJyAsICdYWFggLSBIaWRlIG15IGFkdWx0IGFkZC1vbnMnICwgJ2ZhbHNlJyAsICdhZHVsdF9maWx0ZXInICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogSWkxSTFJaSAoICcnICwgJ1hYWCAtIFNob3cgbXkgYWR1bHQgYWRkLW9ucycgLCAndHJ1ZScgLCAnYWR1bHRfZmlsdGVyJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDY2IC0gNjY6IE9PT29Pb28wTwogaWYgOSAtIDk6IEkxaWkxMWlJaTExaSAqIE8wME9PbzAwb28wbwpkZWYgSUlJSUlJICggKSA6CiBpSTExMUkxMUkxSTEgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKQogaWYgaUkxMTFJMTFJMUkxIC4geWVzbm8gKCAiTWFrZSBBZGQtb24gUGFzc3dvcmRzIFZpc2libGU/IiAsICJUaGlzIHdpbGwgbWFrZSBhbGwgeW91ciBhZGQtb24gcGFzc3dvcmRzIHZpc2libGUgaW4gdGhlIGFkZC1vbiBzZXR0aW5ncy4gQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyIgKSA6CiAgZm9yIElJSWlpaWlpSTFJICwgSTFJSUkxMTFpICwgaWlJMWlpaSBpbiBvcyAuIHdhbGsgKCBJSTExaWlpaTFJaSApIDoKICAgZm9yIElJaUkxaSBpbiBpaUkxaWlpIDoKICAgIGlmIElJaUkxaSA9PSAnc2V0dGluZ3MueG1sJyA6CiAgICAgb08wbzBPb09PT08wMG8wID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIElJaUkxaSApICkgLiByZWFkICggKQogICAgIG8wT08wMDBvb09vID0gcmUgLiBjb21waWxlICggJzxzZXR0aW5nIGlkPSguKz8pPicgKSAuIGZpbmRhbGwgKCBvTzBvME9vT09PTzAwbzAgKQogICAgIGZvciBPMG9vbzAgaW4gbzBPTzAwMG9vT28gOgogICAgICBpZiAncGFzcycgaW4gTzBvb28wIDoKICAgICAgIGlmICdvcHRpb249ImhpZGRlbiInIGluIE8wb29vMCA6CiAgICAgICAgdHJ5IDoKICAgICAgICAgbzAwTzAwb08gPSBPMG9vbzAgLiByZXBsYWNlICggJyBvcHRpb249ImhpZGRlbiInICwgJycgKQogICAgICAgICBJSWlJMWkgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgSUlpSTFpICkgLCBtb2RlID0gJ3cnICkKICAgICAgICAgSUlpSTFpIC4gd3JpdGUgKCBzdHIgKCBvTzBvME9vT09PTzAwbzAgKSAuIHJlcGxhY2UgKCBPMG9vbzAgLCBvMDBPMDBvTyApICkKICAgICAgICAgSUlpSTFpIC4gY2xvc2UgKCApCiAgICAgICAgZXhjZXB0IDoKICAgICAgICAgcGFzcwogIGlJMTExSTExSTFJMSAuIG9rICggIlBhc3N3b3JkcyBBcmUgbm93IHZpc2libGUiICwgIllvdXIgcGFzc3dvcmRzIHdpbGwgbm93IGJlIHZpc2libGUgaW4geW91ciBhZGQtb24gc2V0dGluZ3MuIElmIHlvdSB3YW50IHRvIHVuZG8gdGhpcyBwbGVhc2UgdXNlIHRoZSBvcHRpb24gdG8gaGlkZSBwYXNzd29yZHMuIiApCiAgaWYgMjIgLSAyMjogT29Pb09PMDAKICBpZiA0OSAtIDQ5OiBvb09vCmRlZiBvMG8wMDBPT08gKCBuYW1lICwgdXJsICwgdmlkZW8gLCBkZXNjcmlwdGlvbiAsIHNraW5zICwgZ3Vpc2V0dGluZ3NsaW5rICwgYXJ0cGFjayApIDoKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiQmFja2luZyBVcCBJbXBvcnRhbnQgRGF0YSIgLCAnUGxlYXNlIHdhaXQuLi4nICwgJycgLCAnJyApCiBpZiAzNiAtIDM2OiBJSWkgKiBJSWkgJSBJMUlpaUkgJSBPMCAuIEkxSWlpSSAlIE9vb29vb29vT08KIGlmIDk2IC0gOTY6IG9vT28gJSBpSWlpMUkxMUkxSUkxIC8gaUlpaTFJMTFJMUlJMSAuIElJaUlpMWlJIC4gTzAwT09vMDBvbzBvCiBpSUkxSTFpSUlJaUlJID0gb3BlbiAoIE8wMDBvbzBPICwgbW9kZSA9ICdyJyApCiBJMTFpMUlJMWkgPSBpSUkxSTFpSUlJaUlJIC4gcmVhZCAoICkKIGlJSTFJMWlJSUlpSUkgLiBjbG9zZSAoICkKIGlmIDg2IC0gODY6IE9vTzBPMDAKIElpMTFJSTEgPSByZSAuIGNvbXBpbGUgKCAnZ3VpPSIoLis/KSInICkgLiBmaW5kYWxsICggSTExaTFJSTFpICkKIGlJaTFpaTFJMWlpSSA9IElpMTFJSTEgWyAwIF0gaWYgKCBsZW4gKCBJaTExSUkxICkgPiAwICkgZWxzZSAnMCcKIGlmIDIxIC0gMjE6IElJaWlpSTFpSUlJICogb29PbwogaWYgOTIgLSA5MjogSTFpaTExaUlpMTFpIC0gT28wT29vICsgT29PME8wMCAqIE9vTzBPMDAKIGlmIGkxaTFJSSA9PSAndHJ1ZScgOgogIHRyeSA6CiAgIGkxMTFpID0gb3BlbiAoIG9vb29vb08wb28gLCBtb2RlID0gJ3InICkKICAgaUlJMUkxaTExaUlpID0gaTExMWkgLiByZWFkICggKQogICBpMTExaSAuIGNsb3NlICggKQogICBpZiA4OSAtIDg5OiBvMG9PT28wTzBPb28gLyBPbyAlIGlJaWkxSTExSTFJSTEgLSBJMUlpaUkgLiBvb09vICsgT29Pb09PMDAKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBObyBmYXZvdXJpdGVzIGZpbGUgdG8gY29weSIgKQogICBpZiA5NCAtIDk0OiBvMG9PT28wTzBPb28gJSBvMG9PT28wTzBPb28gJSBJSTExMWlpaWkgKiBpSWlpMUkxMUkxSUkxIC8gSUlpaWlJMWlJSUkgLiBJMWlpMTFpSWkxMWkKIGlmIE8wb28wT08wID09ICd0cnVlJyA6CiAgdHJ5IDoKICAgSUlpSWlJMUlJSTEgPSBvcGVuICggSUlpaWlpaWlJaTFJMSAsIG1vZGUgPSAncicgKQogICBpaWlpSUkxaTFJaWkxSTEgPSBJSWlJaUkxSUlJMSAuIHJlYWQgKCApCiAgIElJaUlpSTFJSUkxIC4gY2xvc2UgKCApCiAgIGlmIDg3IC0gODc6IE9vb29vb29vT08gLSBvb09vIC0gaWlpaWlpaWkxICogSTFpaTExaUlpMTFpCiAgZXhjZXB0IDoKICAgeGJtYyAuIGxvZyAoICIjIyMgTm8gc291cmNlcyBmaWxlIHRvIGNvcHkiICkKICAgaWYgNDQgLSA0NDogb29PbyAqIElJMTExaWlpaSAqIElJMTExaWlpaSArIEkxSWlpSSAvIE9vME9vbwogb29vMG8wb08gPSAxCiBvT08wT09PT09vME9vICggKQogaWYgOSAtIDk6IE9vME9vbyAtIElJaWlpSTFpSUlJCiBpZiAzMCAtIDMwOiBPb29vb29vb09PICUgT28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9vT29vbzAwMG9PTyApIDoKICBpZiAxNCAtIDE0OiBPb09vT08wMCAvIE9vTzBPMDAgLyBpMTFpSWlpSWlpIC0gT29Pb09PMDAgLyBvMG9PT28wTzBPb28gLSBPbwogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlJaTFpaTFJMSApIDoKICAgb3MgLiByZW1vdmUgKCBvb09vb28wMDBvT08gKQogICBpZiA4MSAtIDgxOiBJSWlJaTFpSSAlIE8wME9PbzAwb28wbyAuIGlpaWlpaWlpMQogIGVsc2UgOgogICBvcyAuIHJlbmFtZSAoIG9vT29vbzAwMG9PTyAsIGlJaTFpaTFJMSApCiAgIGlmIDY2IC0gNjY6IEkxaWkxMWlJaTExaSAqIE8wME9PbzAwb28wbyAvIE9vb29vb29vT08gKiBPMCAlIE9vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvMCApIDoKICBvcyAuIHJlbW92ZSAoIG8wICkKICBpZiA0OSAtIDQ5OiBJSTExMWlpaWkgLiBJMUlpaUkgKiBPMCAqIE8wME9PbzAwb28wbyAvIElJaSAqIE9vb29vb29vT08KICBpZiA4MiAtIDgyOiBPbzBPb28gLyBPMDBPT28wMG9vMG8gLyBPMDBPT28wMG9vMG8gJSBPMDBPT28wMG9vMG8KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJMUlJaWlJaWlpICkgOgogIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggSTFJSWlpSWlpaSAsIG1vZGUgPSAndysnICkKICBJMUkxSUlpaWlpMWlpIC4gY2xvc2UgKCApCiAgaWYgMjAgLSAyMDogaWlpaWlpaWkxCiBPT29vTzBPT29vIC4gY2xvc2UgKCApCiBPT29vTzBPT29vIC4gY3JlYXRlICggIkRvd25sb2FkaW5nIFNraW4gRml4IiAsICJEb3dubG9hZGluZyBndWlzZXR0aW5ncy54bWwiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIE9PT29vb09vMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdndWlmaXguemlwJyApCiBpZiA2MyAtIDYzOiBpSWlpMUkxMUkxSUkxIC4gT29PME8wMAogaWYgMTAwIC0gMTAwOiBpMUlJaSAqIGkxSUlpCiB0cnkgOgogIHhibWMgLiBsb2cgKCAiIyMjIGF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZ3Vpc2V0dGluZ3MueG1sIiApCiAgZG93bmxvYWRlciAuIGRvd25sb2FkICggZ3Vpc2V0dGluZ3NsaW5rICwgT09Pb29vT28wME8gLCBPT29vTzBPT29vICkKICBPT29vTzBPT29vIC4gY2xvc2UgKCApCiBleGNlcHQgOgogIGlJMTExSTExSTFJMSAuIG9rICggJ1Byb2JsZW0gRGV0ZWN0ZWQnICwgJ1NvcnJ5IHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgdGhlIGd1aXNldHRpbmdzIGZpbGUuIFBsZWFzZSBjaGVjayB5b3VyIHN0b3JhZ2UgbG9jYXRpb24sIGlmIHlvdVwncmUgY2VydGFpbiB0aGF0XCdzIG9rIHBsZWFzZSBub3RpZnkgdGhlIGJ1aWxkIGF1dGhvciBvbiB0aGUgcmVsZXZhbnQgc3VwcG9ydCB0aHJlYWQuJyApCiAgeGJtYyAuIGxvZyAoICIjIyMgRkFJTEVEIHRvIGRvd25sb2FkICVzIiAlIGd1aXNldHRpbmdzbGluayApCiAgaWYgMjYgLSAyNjogT28gLiBPb08wTzAwICUgT29Pb09PMDAKICBpZiA5NCAtIDk0OiBJSWlpaUkxaUlJSQogaWYgemlwZmlsZSAuIGlzX3ppcGZpbGUgKCBPT09vb29PbzAwTyApIDoKICBvT29PMG9PTzBvID0gc3RyICggb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIE9PT29vb09vMDBPICkgKQogIGlmIDE1IC0gMTU6IE8wME9PbzAwb28wbyAtIElJaWlpSTFpSUlJIC8gTzAKIGVsc2UgOgogIG9Pb08wb09PMG8gPSBpSWkxaWkxSTFpaUkKICBpZiAyOCAtIDI4OiBJSWkgLiBpMUlJaSAvIEkxaWkxMWlJaTExaQogIGlmIDc3IC0gNzc6IGkxMWlJaWlJaWkgLyBJSWkgLyBpMTFpSWlpSWlpICUgT29Pb09PMDAgLSBJSWkKIEkxSTFJSWlpaWkxaWkgPSBvcGVuICggSTFJSWlpSWlpaSAsIG1vZGUgPSAncicgKQogaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKIGlmIDgwIC0gODA6IElJaSAlIE9vT29PTzAwIC4gT29vb29vb29PTyAuIElJMTExaWlpaSAlIElJaWlpSTFpSUlJCiBJMTExSSA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKIG9vb09vbzBPT29PbzAgPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKIG9PMDBvTzAgPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKIGlmIDYgLSA2OiBJSWkgJSBJSWlpaUkxaUlJSSAvIE8wME9PbzAwb28wbyArIElJaSAuIG9vT28KIG8wbyA9IEkxMTFJIFsgMCBdIGlmICggbGVuICggSTExMUkgKSA+IDAgKSBlbHNlICcnCiBJMUlpaSA9IG9vb09vbzBPT29PbzAgWyAwIF0gaWYgKCBsZW4gKCBvb29Pb28wT09vT28wICkgPiAwICkgZWxzZSAnJwogSTFJaUlJMUkxaTFJMSA9IG9PMDBvTzAgWyAwIF0gaWYgKCBsZW4gKCBvTzAwb08wICkgPiAwICkgZWxzZSAnJwogaWYgNzAgLSA3MDogaUlpaTFJMTFJMUlJMSAvIE8wME9PbzAwb28wbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT28wb09PbyApIDoKICBvcyAuIHJlbW92ZWRpcnMgKCBPbzBvT09vICkKICBpZiA2MSAtIDYxOiBPMCAqIG8wb09PbzBPME9vbyArIElJaSAtIE9vIC4gSTFJaWlJIC0gSUlpaWlJMWlJSUkKICBpZiA3IC0gNzogSTFpaTExaUlpMTFpCiBpZiBpSWkxaWkxSTFpaUkgIT0gb09vTzBvT08wbyA6CiAgdHJ5IDoKICAgb3MgLiByZW5hbWUgKCBpSWkxaWkxSTEgLCBvb09vb28wMDBvT08gKQogICBpZiA4MSAtIDgxOiBPbzBPb28gJSBJSTExMWlpaWkgJSBvMG9PT28wTzBPb28gLyBPT09vT29vME8KICBleGNlcHQgOgogICBpSTExMUkxMUkxSTEgLiBvayAoICJOTyBHVUlTRVRUSU5HUyEiICwgJ05vIGd1aXNldHRpbmdzLnhtbCBmaWxlIGhhcyBiZWVuIGZvdW5kLicgLCAnUGxlYXNlIGV4aXQgS29kaSBhbmQgdHJ5IGFnYWluJyAsICcnICkKICAgcmV0dXJuCiAgIGlmIDk1IC0gOTU6IE9vT29PTzAwIC0gTzAgJSBPb29vb29vb09PCiAgIGlmIDEzIC0gMTM6IGkxMWlJaWlJaWkKIGlmIHZpZGVvICE9ICdmcmVzaCcgOgogIEkxaTFJMUkxMUlpaUkgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggbmFtZSAsICdXZSBoaWdobHkgcmVjb21tZW5kIGJhY2tpbmcgdXAgeW91ciBleGlzdGluZyBidWlsZCBiZWZvcmUgaW5zdGFsbGluZyBhbnkgY29tbXVuaXR5IGJ1aWxkcy4gV291bGQgeW91IGxpa2UgdG8gcGVyZm9ybSBhIGJhY2t1cCBmaXJzdD8nICwgbm9sYWJlbCA9ICdCYWNrdXAnICwgeWVzbGFiZWwgPSAnSW5zdGFsbCcgKQogIGlmIDU0IC0gNTQ6IE9vIC4gSTFpaTExaUlpMTFpICogT09Pb09vbzBPICUgSUlpIC4gTzAgKiBJSWlpaUkxaUlJSQogIGlmIEkxaTFJMUkxMUlpaUkgPT0gMCA6CiAgIElpMTExMWkxMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaWlpSUlpaSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICkgKQogICBpZiA4NyAtIDg3OiBPMDBPT28wMG9vMG8gJSBJMWlpMTFpSWkxMWkgKiBPbzBPb28KICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElpMTExMWkxMSApIDoKICAgIG9zIC4gbWFrZWRpcnMgKCBJaTExMTFpMTEgKQogICAgaWYgNTkgLSA1OTogT28wT29vIC8gT09Pb09vbzBPIC0gaUlpaTFJMTFJMUlJMSAqIGlJaWkxSTExSTFJSTEKICAgSTFpSUkxSUlpMUlpSSA9IGlJaW9vMG9vTyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogICBpZiAxOCAtIDE4OiBPT09vT29vME8gKiBJMWlpMTFpSWkxMWkgLyBpMTFpSWlpSWlpIC8gaUlpaTFJMTFJMUlJMSAqIE9vb29vb29vT08gLiBPbwogICBpZiAoIG5vdCBJMWlJSTFJSWkxSWlJICkgOgogICAgcmV0dXJuIEZhbHNlICwgMAogICAgaWYgNjkgLSA2OTogT28wT29vICogaWlpaWlpaWkxCiAgIG8wME9PMG8wID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIEkxaUlJMUlJaTFJaUkgKQogICBpMUlJMUlpaUlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSWkxMTExaTExICwgbzAwT08wbzAgKyAnLnppcCcgKSApCiAgIGlpMTExaUkxaTEgPSBbICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAncGx1Z2luLnByb2dyYW0udGJzJyBdCiAgIE9PMDAwID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiAgIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKICAgSUkxaUkxMSA9ICJBcmNoaXZpbmcuLi4iCiAgIE8wMG8wTyA9ICIiCiAgIE8wMG9PbzBPMG8wME8gPSAiUGxlYXNlIFdhaXQiCiAgIGlpSUlpaSAoIGlJaWkxICwgaTFJSTFJaWlJaSAsIG9PMG9Pb28wTyAsIElJMWlJMTEgLCBPMDBvME8gLCBPMDBvT28wTzBvMDBPICwgaWkxMTFpSTFpMSAsIE9PMDAwICkKICAgaWYgOTEgLSA5MTogbzBvT09vME8wT29vIC4gaWlpaWlpaWkxIC8gT29PME8wMCAvIGkxMWlJaWlJaWkgKiBvMG9PT28wTzBPb28KIE9vb29vT09vbzAgPSBvcGVuICggTzAwMG9vME8gLCBtb2RlID0gJ3crJyApCiBpZiA1MiAtIDUyOiBJMUlpaUkgLSBpMTFpSWlpSWlpIC8gSUlpaWlJMWlJSUkgLiBvb09vCiBpZiBpSWkxaWkxSTFpaUkgIT0gb09vTzBvT08wbyA6CiAgT29vb29PT29vMCAuIHdyaXRlICggJ2lkPSInICsgc3RyICggbzBvICkgKyAnIlxubmFtZT0iJyArIEkxSWlpICsgJyBbQ09MT1I9eWVsbG93XShQYXJ0aWFsbHkgaW5zdGFsbGVkKVsvQ09MT1JdIlxudmVyc2lvbj0iJyArIEkxSWlJSTFJMWkxSTEgKyAnIlxuZ3VpPSInICsgb09vTzBvT08wbyArICciJyApCiAgaWYgMzggLSAzODogb29PbyArIE9vb29vb29vT08gKiBPb09vT08wMCAlIG9vT28KIGVsc2UgOgogIE9vb29vT09vbzAgLiB3cml0ZSAoICdpZD0iJyArIHN0ciAoIG8wbyApICsgJyJcbm5hbWU9IicgKyBJMUlpaSArICciXG52ZXJzaW9uPSInICsgSTFJaUlJMUkxaTFJMSArICciXG5ndWk9IicgKyBvT29PMG9PTzBvICsgJyInICkKIE9vb29vT09vbzAgLiBjbG9zZSAoICkKIGlmIDkxIC0gOTE6IGkxSUlpIC0gSTFpaTExaUlpMTFpICogSTFJaWlJCiBpZiAyNCAtIDI0OiBPb09vT08wMCAqIE8wME9PbzAwb28wbwogaWYgdmlkZW8gPT0gJ2xpYnByb2ZpbGUnIG9yIHZpZGVvID09ICdsaWJyYXJ5JyBvciB2aWRlbyA9PSAndXBkYXRlbGlicHJvZmlsZScgb3IgdmlkZW8gPT0gJ3VwZGF0ZWxpYnJhcnknIDoKICB0cnkgOgogICBzaHV0aWwgLiBjb3B5dHJlZSAoIE8wT29PMDAwTzBPTyAsIE9vME9vTzAwb09PMG8gLCBzeW1saW5rcyA9IEZhbHNlICwgaWdub3JlID0gc2h1dGlsIC4gaWdub3JlX3BhdHRlcm5zICggIlRleHR1cmVzMTMuZGIiICwgIkFkZG9uczE2LmRiIiAsICJBZGRvbnMxNS5kYiIgLCAic2FsdHNjYWNoZS5kYi13YWwiICwgInNhbHRzY2FjaGUuZGItc2htIiAsICJzYWx0c2NhY2hlLmRiIiAsICJvbmVjaGFubmVsY2FjaGUuZGIiICkgKQogICBpZiAxNyAtIDE3OiBPb08wTzAwIC4gSTFJaWlJICogTzAKICBleGNlcHQgOgogICBvb28wbzBvTyA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCBuYW1lICwgJ1RoZXJlIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYmFja3VwIHNvbWUgZGF0YWJhc2VzLiBDb250aW51aW5nIG1heSB3aXBlIHlvdXIgZXhpc3RpbmcgbGlicmFyeS4gRG8geW91IHdpc2ggdG8gY29udGludWU/JyAsIG5vbGFiZWwgPSAnTm8sIGNhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIG92ZXJ3cml0ZScgKQogICBpZiA4MSAtIDgxOiBPbwogICBpZiBvb28wbzBvTyA9PSAwIDoKICAgIHJldHVybgogICAgaWYgNTggLSA1ODogSUkxMTFpaWlpIC4gSUlpIC4gTzAwT09vMDBvbzBvICogT29vb29vb29PTyAvIE8wME9PbzAwb28wbyAvIE9PT29Pb28wTwogIGkxSUkxSWlpSWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlpaUlJaWkgLCAnRGF0YWJhc2UuemlwJyApICkKICBvbyAoIE9vME9vTzAwb09PMG8gLCBpMUlJMUlpaUlpICkKICBpZiA0MSAtIDQxOiBPT09vT29vME8gKyBPb08wTzAwIC4gSUlpSWkxaUkKIGlmIG9vbzBvMG9PID09IDAgOgogIHJldHVybgogIGlmIDczIC0gNzM6IGkxMWlJaWlJaWkgKiBJMUlpaUkgKyBvMG9PT28wTzBPb28gLyBvb09vCiB0aW1lIC4gc2xlZXAgKCAxICkKIGlmIDU2IC0gNTY6IGkxSUlpCiBpZiAxMSAtIDExOiBpMTFpSWlpSWlpICUgbzBvT09vME8wT29vIC8gT09Pb09vbzBPICogT29vb29vb29PTwogb28wME9vTzAwTzBPID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaUlpaTEgLCAnLi4nICwgJ2tvZGl0ZW1wLnppcCcgKSApCiB0aW1lIC4gc2xlZXAgKCAyICkKIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiQ29tbXVuaXR5IEJ1aWxkcyIgLCAiRG93bmxvYWRpbmcgIiArIGRlc2NyaXB0aW9uICsgIiBidWlsZC4iICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIG9vb29Pb28wMCA9IGRlc2NyaXB0aW9uIC4gcmVwbGFjZSAoICcgJyAsICdfJyApIC4gcmVwbGFjZSAoICc6JyAsICctJyApIC4gcmVwbGFjZSAoICInIiAsICcnICkKIE9PT29vb09vMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBPTzAgLCBvb29vT29vMDAgKyAnLnppcCcgKQogaWYgNTQgLSA1NDogaTExaUlpaUlpaSAvIGlJaWkxSTExSTFJSTEgJSBJMWlpMTFpSWkxMWkgLyBJMUlpaUkgLiBpSWlpMUkxMUkxSUkxIC8gSUlpSWkxaUkKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPMDAwT08wICkgOgogIG9zIC4gbWFrZWRpcnMgKCBPMDAwT08wICkKICBpZiAxIC0gMTogSUlpIC8gT29Pb09PMDAgKiBPb09vT08wMCAtIG8wb09PbzBPME9vbyAlIE8wME9PbzAwb28wbwogZG93bmxvYWRlciAuIGRvd25sb2FkICggdXJsICwgT09Pb29vT28wME8gLCBPT29vTzBPT29vICkKIGlmIDk2IC0gOTY6IElJaWlpSTFpSUlJIC8gTzAwT09vMDBvbzBvICUgT29PME8wMCAuIGlJaWkxSTExSTFJSTEKIGlmIDMwIC0gMzA6IE9PT29Pb28wTyAtIE9vTzBPMDAKIHRyeSA6CiAgaWlpaU9vMDAwTzAwbzBPID0gb3BlbiAoIG9Pb09vb09vMG8wICwgbW9kZSA9ICdyJyApCiAgbzBvMG9vMG9PID0gaWlpaU9vMDAwTzAwbzBPIC4gcmVhZCAoICkKICBpaWlpT28wMDBPMDBvME8gLiBjbG9zZSAoICkKIGV4Y2VwdCA6CiAgeGJtYyAuIGxvZyAoICIjIyMgTm8gcHJvZmlsZXMgZGV0ZWN0ZWQsIG1vc3QgbGlrZWx5IGEgZnJlc2ggd2lwZSBwZXJmb3JtZWQiICkKICBpZiA2IC0gNjogaTExaUlpaUlpaSArIE9vb29vb29vT08gJSBpMTFpSWlpSWlpIC4gT09Pb09vbzBPICogT29vb29vb29PTyAtIE9vME9vbwogT09vb08wT09vbyAuIGNsb3NlICggKQogT09vb08wT09vbyAuIGNyZWF0ZSAoICJDb21tdW5pdHkgQnVpbGRzIiAsICJDaGVja2luZyAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIGlmIDg4IC0gODg6IG9vT28KIGlmIDMzIC0gMzM6IG8wb09PbzBPME9vbyAvIGkxSUlpCiBpZiB6aXBmaWxlIC4gaXNfemlwZmlsZSAoIE9PT29vb09vMDBPICkgOgogIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIiIgLCAiRXh0cmFjdGluZyBaaXAgUGxlYXNlIFdhaXQiICkKICBleHRyYWN0IC4gYWxsICggT09Pb29vT28wME8gLCBpSWlpMSAsIE9Pb29PME9Pb28gKQogIGlmIDcxIC0gNzE6IE9vb29vb29vT08gLSBJSWlJaTFpSSArIE8wME9PbzAwb28wbyAvIE8wICUgbzBvT09vME8wT29vICsgT29PME8wMAogZWxzZSA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnTm90IGEgdmFsaWQgemlwIGZpbGUnICwgJ1RoaXMgZmlsZSBpcyBub3QgYSB2YWxpZCB6aXAgZmlsZSwgcGxlYXNlIGxldCB0aGUgYnVpbGQgYXV0aG9yIGtub3cgb24gdGhlaXIgc3VwcG9ydCB0aHJlYWQgc28gdGhleSBjYW4gYW1lbmQgdGhlIGRvd25sb2FkIHBhdGguIEl0XCdzIG1vc3QgbGlrZWx5IGp1c3QgYSBzaW1wbGUgdHlwbyBvbiB0aGVpciBiZWhhbGYuJyApCiAgcmV0dXJuCiAgaWYgODMgLSA4MzogSUlpaWlJMWlJSUkgKiBJMWlpMTFpSWkxMWkgLyBJSWlpaUkxaUlJSSAqIElJaWlpSTFpSUlJIC0gT28KIE9Pb29PME9Pb28gLiBjcmVhdGUgKCAiUmVzdG9yaW5nIERlcGVuZGVuY2llcyIgLCAiQ2hlY2tpbmcgIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiBpZiA4OSAtIDg5OiBPb08wTzAwICUgT09Pb09vbzBPCiBpZiBpMWkxSUkgPT0gJ3RydWUnIDoKICB0cnkgOgogICB4Ym1jIC4gbG9nICggIiMjIyBBdHRlbXB0aW5nIHRvIGFkZCBiYWNrIGZhdm91cml0ZXMgIyMjIiApCiAgIE9vb29vT09vbzAgPSBvcGVuICggb29vb29vTzBvbyAsIG1vZGUgPSAndysnICkKICAgT29vb29PT29vMCAuIHdyaXRlICggaUlJMUkxaTExaUlpICkKICAgT29vb29PT29vMCAuIGNsb3NlICggKQogICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICIiICwgIkNvcHlpbmcgRmF2b3VyaXRlcyIgKQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEZhaWxlZCB0byBjb3B5IGJhY2sgZmF2b3VyaXRlcyIgKQogICBpZiA1MSAtIDUxOiBpaWlpaWlpaTEgKiBPMDBPT28wMG9vMG8gKiBPb29vb29vb09PICUgT29Pb09PMDAKIGlmIE8wb28wT08wID09ICd0cnVlJyA6CiAgdHJ5IDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQXR0ZW1wdGluZyB0byBhZGQgYmFjayBzb3VyY2VzICMjIyIgKQogICBPb29vb09Pb28wID0gb3BlbiAoIElJaWlpaWlpSWkxSTEgLCBtb2RlID0gJ3crJyApCiAgIE9vb29vT09vbzAgLiB3cml0ZSAoIGlpaWlJSTFpMUlpaTFJMSApCiAgIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiIiAsICJDb3B5aW5nIFNvdXJjZXMiICkKICAgaWYgMjUgLSAyNTogaUlpaTFJMTFJMUlJMSAqIE9vb29vb29vT08gKiBPMDBPT28wMG9vMG8gLSBpMUlJaQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEZhaWxlZCB0byBjb3B5IGJhY2sgc291cmNlcyIgKQogICBpZiAyMyAtIDIzOiBvMG9PT28wTzBPb28gLiBpaWlpaWlpaTEgLSBPb29vb29vb09PICsgT09Pb09vbzBPCiB0aW1lIC4gc2xlZXAgKCAxICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9vME9vTzAwb09PMG8gKSA6CiAgc2h1dGlsIC4gcm10cmVlICggT28wT29PMDBvT08wbyApCiAgaWYgNzMgLSA3MzogT29Pb09PMDAKICBpZiA3MSAtIDcxOiBpMTFpSWlpSWlpICogT29Pb09PMDAgKiBPbyArIG9vT28gKyBPbzBPb28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMWlpaTFJaSApIDoKICBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIEkxMWlpaTFJaSAsIG1vZGUgPSAncicgKQogIGlpMUkxID0gSTFJMUlJaWlpaTFpaSAuIHJlYWQgKCApCiAgSTFJMUlJaWlpaTFpaSAuIGNsb3NlICggKQogIGlpSTFpSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSJbXHNcU10qPyInICkgLiBmaW5kYWxsICggaWkxSTEgKQogIGlpSTExMUkxaUlpSSA9IGlpSTFpSSBbIDAgXSBpZiAoIGxlbiAoIGlpSTFpSSApID4gMCApIGVsc2UgJycKICBPT08gPSBpaTFJMSAuIHJlcGxhY2UgKCBpaUkxMTFJMWlJaUkgLCAndmVyc2lvbj0iJyArIEkxSWlJSTFJMWkxSTEgKyAnIicgKQogIE9vb29vT09vbzAgPSBvcGVuICggSTExaWlpMUlpICwgbW9kZSA9ICd3JyApCiAgT29vb29PT29vMCAuIHdyaXRlICggc3RyICggT09PICkgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA1OSAtIDU5OiBJSWlpaUkxaUlJSQogZWxzZSA6CiAgT29vb29PT29vMCA9IG9wZW4gKCBJMTFpaWkxSWkgLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggJ2RhdGU9IjAxMDExMDAxIlxudmVyc2lvbj0iJyArIEkxSWlJSTFJMWkxSTEgKyAnIicgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA1NCAtIDU0OiBPbwogIGlmIDI3IC0gMjc6IE9vT29PTzAwIC0gT29PME8wMCArIG8wb09PbzBPME9vbyArIGlpaWlpaWlpMSAuIE9vTzBPMDAKIGlmIElpSUkgPT0gJ2ZhbHNlJyA6CiAgb3MgLiByZW1vdmUgKCBPT09vb29PbzAwTyApCiAgaWYgODYgLSA4NjogSUkxMTFpaWlpIC0gT29vb29vb29PTyAtIGlpaWlpaWlpMSAlIElJaUlpMWlJCiAgaWYgMTYgLSAxNjogaWlpaWlpaWkxICsgT28wT29vICsgT29vb29vb29PTwogaWYgJ3Byb2YnIGluIHZpZGVvIDoKICB0cnkgOgogICBPb29Pb29PME9vT29vMG8gPSBvcGVuICggb09vT29vT28wbzAgLCBtb2RlID0gJ3crJyApCiAgIE9vb09vb08wT29Pb28wbyAuIHdyaXRlICggbzBvMG9vMG9PICkKICAgT29vT29vTzBPb09vbzBvIC4gY2xvc2UgKCApCiAgZXhjZXB0IDoKICAgeGJtYyAuIGxvZyAoICIjIyMgRmFpbGVkIHRvIHdyaXRlIGV4aXN0aW5nIHByb2ZpbGUgaW5mbyBiYWNrIGludG8gcHJvZmlsZXMueG1sIiApCiAgIGlmIDI3IC0gMjc6IE9vTzBPMDAgJSBpaWlpaWlpaTEgLSBPMAogICBpZiA0NCAtIDQ0OiBJMWlpMTFpSWkxMWkgKyBJMWlpMTFpSWkxMWkgLSBPbyAvIElJMTExaWlpaQogaWYgdmlkZW8gPT0gJ2xpYnJhcnknIG9yIHZpZGVvID09ICdsaWJwcm9maWxlJyBvciB2aWRlbyA9PSAndXBkYXRlbGlicHJvZmlsZScgb3IgdmlkZW8gPT0gJ3VwZGF0ZWxpYnJhcnknIDoKICBleHRyYWN0IC4gYWxsICggaTFJSTFJaWlJaSAsIE8wT29PMDAwTzBPTyAsIE9Pb29PME9Pb28gKQogIGlmIDM2IC0gMzY6IE9vTzBPMDAgLSBvMG9PT28wTzBPb28gLiBJSWlJaTFpSSAlIElJaUlpMWlJCiAgaWYgMTIgLSAxMjogT29Pb09PMDAgLyBJMUlpaUkgKiBPbzBPb28KICBpZiBvb28wbzBvTyAhPSAxIDoKICAgc2h1dGlsIC4gcm10cmVlICggT28wT29PMDBvT08wbyApCiB0cnkgOgogIE9Pb29PME9Pb28gLiBjbG9zZSAoICkKIGV4Y2VwdCA6CiAgcGFzcwogIGlmIDU5IC0gNTk6IE9vME9vbyAuIG8wb09PbzBPME9vbyAlIEkxSWlpSSAvIE9vb29vb29vT08gJSBvb09vCiAgaWYgODEgLSA4MTogT29vb29vb29PTyAvIGlpaWlpaWlpMSAqIGlJaWkxSTExSTFJSTEgLiBPbzBPb28gKyBvb09vIC8gTzAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wME8wb09PMDBPMDAgKSA6CiAgTzAwMDBvTzBvMDAgKCBkZXNjcmlwdGlvbiApCiAgaWYgODQgLSA4NDogSUkxMTFpaWlpIC0gbzBvT09vME8wT29vCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBPMDBPMG9PTzAwTzAwICkKICAgaWYgNzggLSA3ODogSUlpaWlJMWlJSUkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIycgRmFpbGVkIHRvIHJlbW92ZTogJXMiICUgTzAwTzBvT08wME8wMCApCiAgIGlmIDU4IC0gNTg6IGkxMWlJaWlJaWkgLSBPb09vT08wMAogIHRyeSA6CiAgIHNodXRpbCAuIHJtdHJlZSAoIE8wbzBPMDBPbzBvMCApCiAgIGlmIDY3IC0gNjc6IEkxaWkxMWlJaTExaSAvIElJaUlpMWlJICsgaUlpaTFJMTFJMUlJMSAlIEkxSWlpSQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjJyBGYWlsZWQgdG8gcmVtb3ZlOiAlcyIgJSBPMG8wTzAwT28wbzAgKQogICBpZiA5OSAtIDk5OiBpaWlpaWlpaTEgLiBPMDBPT28wMG9vMG8KIGVsc2UgOgogIHhibWMgLiBsb2cgKCAiIyMjIENvbW11bml0eSBCdWlsZHMgLSB1c2luZyBhbiBvbGQgYnVpbGQiICkKICBpZiA5MiAtIDkyOiBpMUlJaQogIGlmIDY4IC0gNjg6IE9vTzBPMDAgJSBJSWlpaUkxaUlJSSAtIG9vT28gLSBpaWlpaWlpaTEgLiBPbzBPb28KIGlmIGlJaTFpaTFJMWlpSSAhPSBvT29PMG9PTzBvIDoKICB4Ym1jIC4gbG9nICggIiMjIyBHVUkgU0laRSBESUZGRVJFTlQgQVRURU1QVElORyBNRVJHRSAjIyMiICkKICBJaUlJMTFJSUlJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpMSAsICduZXdidWlsZCcgKQogIGlmIDIgLSAyOiBPb09vT08wMAogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJaUlJMTFJSUlJMSApIDoKICAgb3MgLiBtYWtlZGlycyAoIElpSUkxMUlJSUkxICkKICAgaWYgNDIgLSA0MjogaUlpaTFJMTFJMUlJMSAuIE9vTzBPMDAgJSBpSWlpMUkxMUkxSUkxICogaTFJSWkKICBvcyAuIG1ha2VkaXJzICggT28wb09PbyApCiAgdGltZSAuIHNsZWVwICggMSApCiAgT29PMG9vT09vbyAoIGd1aXNldHRpbmdzbGluayAsIHZpZGVvICkKICB0aW1lIC4gc2xlZXAgKCAxICkKICBPb29vT09vMG9PTyAoICkKICBpSTExMUkxMUkxSTEgLiBvayAoICJGb3JjZSBDbG9zZSBSZXF1aXJlZCIgLCAiSWYgeW91XCdyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGl0IG1lYW5zIHRoZSBmb3JjZSBjbG9zZSB3YXMgdW5zdWNjZXNzZnVsLiBQbGVhc2UgY2xvc2UgWEJNQy9Lb2RpIHZpYSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gb3IgcHVsbCB0aGUgcG93ZXIuIiApCiAgaWYgOTIgLSA5MjogaUlpaTFJMTFJMUlJMSAqIEkxaWkxMWlJaTExaQogaWYgaUlpMWlpMUkxaWlJID09IG9Pb08wb09PMG8gOgogIGlJMTExSTExSTFJMSAuIG9rICggJ1N1Y2Nlc3NmdWxseSBVcGRhdGVkJyAsICdDb25ncmF0dWxhdGlvbnMgdGhlIGZvbGxvd2luZyBidWlsZDpbQ09MT1I9ZG9kZ2VyYmx1ZV0nICwgZGVzY3JpcHRpb24gLCAnWy9DT0xPUl1oYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZCEnICkKICBpZiA1IC0gNTogaWlpaWlpaWkxIC0gSUlpIC0gSUlpSWkxaUkKICBpZiAzOCAtIDM4OiBpSWlpMUkxMUkxSUkxIC4gTzAwT09vMDBvbzBvCmRlZiBJSUlpSWkxaUkgKCApIDoKIGlmIG8wTyAuIGdldFNldHRpbmcgKCAnZW1haWwnICkgPT0gJycgOgogIGlJMTExSTExSTFJMSAuIG9rICggIk5vIEVtYWlsIEFkZHJlc3MgU2V0IiAsICJBIG5ldyB3aW5kb3cgd2lsbCBOb3cgb3BlbiBmb3IgeW91IHRvIGVudGVyIHlvdXIgRW1haWwgYWRkcmVzcy4gVGhlIGxvZ2ZpbGUgd2lsbCBiZSBzZW50IGhlcmUiICkKICBvME8gLiBvcGVuU2V0dGluZ3MgKCApCiB1cGxvYWRMb2cgLiBNYWluICggKQogaWYgMzQgLSAzNDogT28gLSBPb08wTzAwCiBpZiAzIC0gMzogT28wT29vICsgT28gLSBJMUlpaUkKZGVmIE9PT08wMG8wMDBvICggaW5mbyApIDoKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJSWlpMUlJMUlJICkgOgogIElJaUlpSSA9IG9wZW4gKCBJSUlpaTFJSTFJSSAsICdyJyApCiAgaWkxSTEgPSBJSWlJaUkgLiByZWFkICggKQogIElJaUlpSSAuIGNsb3NlICggKQogIElJaTEgPSByZSAuIGNvbXBpbGUgKCAnbD0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKICBvb28wMG8wbyA9IElJaTEgWyAwIF0gaWYgKCBsZW4gKCBJSWkxICkgPiAwICkgZWxzZSAnJwogIE9vMG9vID0gcmUgLiBjb21waWxlICggJ3A9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpaTFJMSApCiAgb29PbzBPbyA9IE9vMG9vIFsgMCBdIGlmICggbGVuICggT28wb28gKSA+IDAgKSBlbHNlICcwJwogIGlmIG9vT28wT28gIT0gJzAnIDoKICAgb29PbzBPbyA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggb29PbzBPbyApCiAgaWYgb29vMDBvMG8gIT0gJycgOgogICBvb28wMG8wbyA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggb29vMDBvMG8gKQogIGlmICdXZWxjb21lIEJhY2snIGluIG9vbzAwbzBvIGFuZCBPbzBvTzBvb28gLiByZXBsYWNlICggJyUyMCcgLCAnJyApIGluIG9vbzAwbzBvIGFuZCBpbmZvID09ICdwb3N0cycgOgogICByZXR1cm4gb29PbzBPbwogIGlmICdXZWxjb21lIEJhY2snIGluIG9vbzAwbzBvIGFuZCBPbzBvTzBvb28gLiByZXBsYWNlICggJyUyMCcgLCAnJyApIGluIG9vbzAwbzBvIGFuZCBpbmZvID09ICd3ZWxjb21ldGV4dCcgOgogICByZXR1cm4gb29vMDBvMG8KICBlbHNlIDoKICAgcmV0dXJuICdGYWxzZScKIGVsc2UgOgogIHJldHVybiAnRmFsc2UnCiAgaWYgMSAtIDE6IElJMTExaWlpaSAqIGkxSUlpICUgSUlpSWkxaUkgLiBPMCAqIE9PT29Pb28wTwogIGlmIDQwIC0gNDA6IElJaSAqIE9PT29Pb28wTyAuIElJaSArIG9vT28KZGVmIG8wT29vME9vTyAoIGxvY2FsYnVpbGRjaGVjayAsIGxvY2FsdmVyc2lvbmNoZWNrICwgbG9jYWxpZGNoZWNrICkgOgogcHJpbnQgIiMjIyBVU0VSX0lORk8gQ0hFQ0siCiBpZiBpMTExMSA9PSAndHJ1ZScgOgogIHRyeSA6CiAgIGkxSTFpMSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvbG9naW4vbG9naW5fZGV0YWlscy5waHA/dXNlcj0lcyZwYXNzPSVzJyAlICggT28wb08wb29vICwgbzBvT29PMDBvICkKICAgTzBPb29vTzAgPSBvb28wTzBvMDBPICggaTFJMWkxICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogICBJSWkxID0gcmUgLiBjb21waWxlICggJ2xvZ2luX21zZz0iKC4rPykiJyApIC4gZmluZGFsbCAoIE8wT29vb08wICkKICAgb29vMDBvMG8gPSBJSWkxIFsgMCBdIGlmICggbGVuICggSUlpMSApID4gMCApIGVsc2UgJycKICAgT28wb28gPSByZSAuIGNvbXBpbGUgKCAncG9zdHM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgIG9vT28wT28gPSBPbzBvbyBbIDAgXSBpZiAoIGxlbiAoIE9vMG9vICkgPiAwICkgZWxzZSAnMCcKICBleGNlcHQgOgogICBvb28wMG8wbyA9ICdbQ09MT1I9bGltZV1VTkFCTEUgVE8gVkVSSUZZIExPR0lOWy9DT0xPUl0nCiAgIGlmIDMxIC0gMzE6IE9PT29Pb28wTyArIE9vTzBPMDAgLyBJMUlpaUkgKiBPMCArIE8wCiBlbHNlIDoKICBvb28wMG8wbyA9ICdbQ09MT1I9bGltZV1SRUdJU1RFUiBGT1IgRlJFRSBUTyBVTkxPQ0sgRkVBVFVSRVNbL0NPTE9SXScKICBpZiAzNCAtIDM0OiBJSWlpaUkxaUlJSQogcHJpbnQgIiMjIyBXRUxDT01FVEVYVDogIiArIG9vbzAwbzBvCiBpZiA1IC0gNTogT29PME8wMCAuIEkxSWlpSQogaTFJMWkxID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9tZW51X2NoZWNrJwogdHJ5IDoKICBPME9vb29PMCA9IG9vbzBPMG8wME8gKCBpMUkxaTEgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgT29vMDAwTzAwID0gcmUgLiBjb21waWxlICggJ2Q9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBPME9vb29PMCApCiAgaTFpSTFJaWlpMUkgPSBPb28wMDBPMDAgWyAwIF0gaWYgKCBsZW4gKCBPb28wMDBPMDAgKSA+IDAgKSBlbHNlICdub25lJwogZXhjZXB0IDoKICBpMWlJMUlpaWkxSSA9ICdub25lJwogIGlmIDQ4IC0gNDg6IE9vME9vbyAtIE9vTzBPMDAgLiBPT09vT29vME8gLSBpSWlpMUkxMUkxSUkxICUgTzAwT09vMDBvbzBvCiBwcmludCAiIyMjIE1FTlU6ICIgKyBpMWlJMUlpaWkxSQogaWYgNDcgLSA0NzogSUlpSWkxaUkgLyBPb29vb29vb09PIC0gSUkxMTFpaWlpCiBpZiA5MSAtIDkxOiBPb09vT08wMCArIG8wb09PbzBPME9vbwogaWYgbm90ICdSRUdJU1RFUiBGT1IgRlJFRScgaW4gb29vMDBvMG8gYW5kIG5vdCAnVU5BQkxFIFRPIFZFUklGWScgaW4gb29vMDBvMG8gOgogIHhibWMgLiBsb2cgKCAiIyMjIEFUVEVNUFRJTkcgVE8gV1JJVEUgQ09PS0lFICIgKQogIE9vb29vT09vbzAgPSBvcGVuICggSUlJaWkxSUkxSUkgLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggJ2Q9IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBpaWlJSSAoICkgKSArICciXG5sPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggb29vMDBvMG8gKSArICciXG5wPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggb29PbzBPbyApICsgJyJcbm09IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBpMWlJMUlpaWkxSSApICsgJyInICkKICBPb29vb09Pb28wIC4gY2xvc2UgKCApCiAgaWYgMjMgLSAyMzogaTFJSWkKIElpMTExSWlpaWkgKCBsb2NhbGJ1aWxkY2hlY2sgLCBsb2NhbHZlcnNpb25jaGVjayAsIGxvY2FsaWRjaGVjayAsIG9vbzAwbzBvICwgaTFpSTFJaWlpMUkgKQogaWYgOSAtIDk6IGkxSUlpICUgSUlpIC0gT29PME8wMCAqIE9vT29PTzAwIC4gbzBvT09vME8wT29vCiBpZiAxOCAtIDE4OiBPMDBPT28wMG9vMG8gLiBPb09vT08wMCArIElJaUlpMWlJIC4gSTFJaWlJICsgT29vb29vb29PTyAuIE9vTzBPMDAKZGVmIGlpSWlpaTFJSUlJSSAoIHNob3dkaWFsb2cgPSBUcnVlICkgOgogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUxvY2FsQWRkb25zJyApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVXBkYXRlQWRkb25SZXBvcycgKQogaWYgc2hvd2RpYWxvZyA6CiAgeGJtY2d1aSAuIERpYWxvZyAoICkgLiBvayAoICdGb3JjZSBSZWZyZXNoIFN0YXJ0ZWQgU3VjY2Vzc2Z1bGx5JyAsICdEZXBlbmRpbmcgb24gdGhlIHNwZWVkIG9mIHlvdXIgZGV2aWNlIGl0IGNvdWxkIHRha2UgYSBmZXcgbWludXRlcyBmb3IgdGhlIHVwZGF0ZSB0byB0YWtlIGVmZmVjdC4nICkKICBpZiAzMSAtIDMxOiBJSWkgLSBPT09vT29vME8KICBpZiA0OSAtIDQ5OiBpSWlpMUkxMUkxSUkxIC0gaUlpaTFJMTFJMUlJMSAtIE9vT29PTzAwICsgSUlpaWlJMWlJSUkgLyBPb09vT08wMApkZWYgb28wT29vICggKSA6CiBpSTFJSTFJSUkgPSAxCiB0cnkgOgogIG9vbzBPMG8wME8gKCAnaHR0cDovL2dvb2dsZS5jb20nICwgNSApCiBleGNlcHQgOgogIHRyeSA6CiAgIG9vbzBPMG8wME8gKCAnaHR0cDovL2dvb2dsZS5jb20nICwgNSApCiAgZXhjZXB0IDoKICAgdHJ5IDoKICAgIG9vbzBPMG8wME8gKCAnaHR0cDovL2dvb2dsZS5jb20nICwgNSApCiAgIGV4Y2VwdCA6CiAgICB0cnkgOgogICAgIG9vbzBPMG8wME8gKCAnaHR0cDovL2dvb2dsZS5jbicgLCA1ICkKICAgIGV4Y2VwdCA6CiAgICAgdHJ5IDoKICAgICAgb29vME8wbzAwTyAoICdodHRwOi8vZ29vZ2xlLmNuJyAsIDUgKQogICAgIGV4Y2VwdCA6CiAgICAgIGlJMTExSTExSTFJMSAuIG9rICggIk5PIElOVEVSTkVUIENPTk5FQ1RJT04iICwgJ0l0IGxvb2tzIGxpa2UgdGhpcyBkZXZpY2UgaXNuXCd0IGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQuIE9ubHkgc29tZSBvZiB0aGUgbWFpbnRlbmFuY2Ugb3B0aW9ucyB3aWxsIHdvcmsgdW50aWwgeW91IGZpeCB0aGUgY29ubmVjdGl2aXR5IHByb2JsZW0uJyApCiAgICAgIElpMTExSWlpaWkgKCAnJyAsICcnICwgJycgLCAnW0NPTE9SPW9yYW5nZV1OTyBJTlRFUk5FVCBDT05ORUNUSU9OWy9DT0xPUl0nICkKICAgICAgaUkxSUkxSUlJID0gMAogaWYgaUkxSUkxSUlJID09IDEgOgogIE9PT0lpMTFpMUlJICggKQogIGlmIDUzIC0gNTM6IElJMTExaWlpaSAvIElJaSAvIElJMTExaWlpaSAlIElJaSAlIE9PT29Pb28wTyAlIEkxaWkxMWlJaTExaQogIGlmIDQ0IC0gNDQ6IElJaUlpMWlJICogSTFJaWlJICogSTFJaWlJICUgbzBvT09vME8wT29vCmRlZiBPT09JaTExaTFJSSAoICkgOgogT08wME9vb29PID0gJ05vbmUnCiBPTzBpaWlpaTFpaUlJaWkgPSAnMCcKIGlmIDk1IC0gOTU6IE8wICogT29PME8wMCAuIE9PT29Pb28wTyAtIElJaWlpSTFpSUlJIC0gSUlpSWkxaUkKIGlmIDg0IC0gODQ6IG8wb09PbzBPME9vbyAvIElJaSAtIE8wICsgSTFJaWlJIC4gSTFpaTExaUlpMTFpCiBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIEkxMWlpaTFJaSAsIG1vZGUgPSAncicgKQogaWkxSTEgPSBJMUkxSUlpaWlpMWlpIC4gcmVhZCAoICkKIEkxSTFJSWlpaWkxaWkgLiBjbG9zZSAoICkKIGlmIDMwIC0gMzA6IElJaUlpMWlJICogTzAwT09vMDBvbzBvICUgT29Pb09PMDAgLyBvMG9PT28wTzBPb28gKiBvMG9PT28wTzBPb28gKyBPMAogT08wMGkxSUkgPSByZSAuIGNvbXBpbGUgKCAnZGF0ZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIGlpMUkxICkKIEkxaTFJMTFJID0gT08wMGkxSUkgWyAwIF0gaWYgKCBsZW4gKCBPTzAwaTFJSSApID4gMCApIGVsc2UgJycKIGlpSTFpSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggaWkxSTEgKQogaWlJMTExSTFpSWlJID0gaWlJMWlJIFsgMCBdIGlmICggbGVuICggaWlJMWlJICkgPiAwICkgZWxzZSAnJwogaWYgODUgLSA4NTogSTFpaTExaUlpMTFpICsgaUlpaTFJMTFJMUlJMSArIElJaSAqIGkxSUlpIC0gTzAgJSBJSWlJaTFpSQogaUkxID0gb3BlbiAoIE8wMDBvbzBPICwgbW9kZSA9ICdyJyApCiBpSUlJSTEgPSBpSTEgLiByZWFkICggKQogaUkxIC4gY2xvc2UgKCApCiBpZiAzMiAtIDMyOiBPMDBPT28wMG9vMG8gJSBPT09vT29vME8gKyBPbyAlIE9vb29vb29vT08KIE9vME9vID0gcmUgLiBjb21waWxlICggJ2lkPSIoLis/KSInICkgLiBmaW5kYWxsICggaUlJSUkxICkKIGkxaU9PID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBpSUlJSTEgKQogT08waWlpaWkxaWlJSWlpID0gT28wT28gWyAwIF0gaWYgKCBsZW4gKCBPbzBPbyApID4gMCApIGVsc2UgJ05vbmUnCiBPTzAwT29vb08gPSBpMWlPTyBbIDAgXSBpZiAoIGxlbiAoIGkxaU9PICkgPiAwICkgZWxzZSAnJwogaWYgNjggLSA2ODogT09Pb09vbzBPCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJaWkxSUkxSUkgKSA6CiAgeGJtYyAuIGxvZyAoICIjIyMgRmlyc3QgbG9naW4gY2hlY2sgIyMjIiApCiAgbzBPb28wT29PICggT08wME9vb29PICwgaWlJMTExSTFpSWlJICwgT08waWlpaWkxaWlJSWlpICkKICBpZiAxMyAtIDEzOiBpMTFpSWlpSWlpIC0gaWlpaWlpaWkxCiAgaWYgNTQgLSA1NDogSTFJaWlJICogSTFJaWlJIC0gT09Pb09vbzBPIC4gTzAgLiBJSWlJaTFpSSAtIE8wME9PbzAwb28wbwogZWxzZSA6CiAgdHJ5IDoKICAgT29vb29PMDBPT08wID0gb3BlbiAoIElJSWlpMUlJMUlJICwgbW9kZSA9ICdyJyApCiAgIElJSWlpSTFJID0gT29vb29PMDBPT08wIC4gcmVhZCAoICkKICAgT29vb29PMDBPT08wIC4gY2xvc2UgKCApCiAgIGlmIDU1IC0gNTU6IElJaUlpMWlJICogT28wT29vICsgT29Pb09PMDAgKiBPbyAvIElJaUlpMWlJICogaTFJSWkKICAgaTFpaUkxID0gcmUgLiBjb21waWxlICggJ2Q9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJSUlpaUkxSSApCiAgIGlpSUkxSUkxID0gcmUgLiBjb21waWxlICggJ2w9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJSUlpaUkxSSApCiAgIGlpSUlpaTFJaWkxSSA9IHJlIC4gY29tcGlsZSAoICdtPSIoLis/KSInICkgLiBmaW5kYWxsICggSUlJaWlJMUkgKQogICBvT28wME9vTzBPID0gaTFpaUkxIFsgMCBdIGlmICggbGVuICggaTFpaUkxICkgPiAwICkgZWxzZSAnMCcKICAgaWYgOTUgLSA5NTogbzBvT09vME8wT29vIC8gSUlpICUgSUkxMTFpaWlpICsgaWlpaWlpaWkxCiAgIGlmIG9PbzAwT29PME8gIT0gJzAnIDoKICAgIG9PbzAwT29PME8gPSBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoIG9PbzAwT29PME8gKQogICAgaWYgOTcgLSA5NzogT28KICAgb29vMDBvMG8gPSBpaUlJMUlJMSBbIDAgXSBpZiAoIGxlbiAoIGlpSUkxSUkxICkgPiAwICkgZWxzZSAnJwogICBvb28wMG8wbyA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggb29vMDBvMG8gKQogICBvb29PTzBPb08wT09PID0gaWlJSWlpMUlpaTFJIFsgMCBdIGlmICggbGVuICggaWlJSWlpMUlpaTFJICkgPiAwICkgZWxzZSAnJwogICBvb29PTzBPb08wT09PID0gYmluYXNjaWkgLiB1bmhleGxpZnkgKCBvb29PTzBPb08wT09PICkKICBleGNlcHQgOgogICBvcyAuIHJlbW92ZSAoIElJSWlpMUlJMUlJICkKICBpZiBpbnQgKCBvT28wME9vTzBPICkgKyAyMDAwMDAwID4gaW50ICggaWlpSUkgKCApICkgOgogICB4Ym1jIC4gbG9nICggIiMjIyBMb2dpbiBzdWNjZXNzZnVsICMjIyIgKQogICBJaTExMUlpaWlpICggT08wME9vb29PICwgaWlJMTExSTFpSWlJICwgT08waWlpaWkxaWlJSWlpICwgb29vMDBvMG8gLCBvb29PTzBPb08wT09PICkKICBlbHNlIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ2hlY2tpbmcgbG9naW4gIyMjIiApCiAgIG8wT29vME9vTyAoIE9PMDBPb29vTyAsIGlpSTExMUkxaUlpSSAsIE9PMGlpaWlpMWlpSUlpaSApCiAgIGlmIDYwIC0gNjA6IEkxaWkxMWlJaTExaSAqIGkxMWlJaWlJaWkgLSBJSTExMWlpaWkgKyBJSWkgJSBJSWlpaUkxaUlJSQogICBpZiA2MyAtIDYzOiBPb29vb29vb09PIC4gTzAwT09vMDBvbzBvIC0gb29PbyAvIElJMTExaWlpaSArIEkxSWlpSQpkZWYgbzBPT09PT28wMCAoICkgOgogbzAwTzBvT08wbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL3Byb2ZpbGUnICwgJ2FkZG9uX2RhdGEnICkgKSApCiBpZiA5NyAtIDk3OiBpaWlpaWlpaTEgKiBPMDBPT28wMG9vMG8gJSBJSWlJaTFpSSAqIE8wME9PbzAwb28wbyAlIGkxMWlJaWlJaWkKIGlJaUlJSTExID0gWwogKCBvMDBPMG9PTzBvICkgLAogKCBpaUkxSWlJICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggaUlpaTEgLCAnY2FjaGUnICkgKSAsCiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpMSAsICd0ZW1wJyApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggJy9wcml2YXRlL3Zhci9tb2JpbGUvTGlicmFyeS9DYWNoZXMvQXBwbGVUVi9WaWRlby8nICwgJ090aGVyJyApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggJy9wcml2YXRlL3Zhci9tb2JpbGUvTGlicmFyeS9DYWNoZXMvQXBwbGVUVi9WaWRlby8nICwgJ0xvY2FsdXNlcmFjY291bnRuYW1lbnRhbCcgKSApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCAnc2NyaXB0Lm1vZHVsZS5zaW1wbGUuZG93bmxvYWRlcicgKSApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8vcHJvZmlsZScgLCAnYWRkb25fZGF0YScgLCAnc2NyaXB0Lm1vZHVsZS5zaW1wbGUuZG93bmxvYWRlcicgKSApICkgKSAsCiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaUkxSWlJICwgJ3BsdWdpbi52aWRlby5pdHYnICwgJ0ltYWdlcycgKSApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8vcHJvZmlsZScgLCAnYWRkb25fZGF0YScgLCAncGx1Z2luLnZpZGVvLml0dicgLCAnSW1hZ2VzJyApICkgKSApIF0KIGlmIDIzIC0gMjM6IE8wME9PbzAwb28wbyArIE9vTzBPMDAKIGZvciBpMUlJMSBpbiBpSWlJSUkxMSA6CiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaTFJSTEgKSBhbmQgaTFJSTEgIT0gaWlJMUlpSSBhbmQgaTFJSTEgIT0gbzAwTzBvT08wbyA6CiAgIGZvciBJSUlpaWlpaUkxSSAsIEkxSUlJMTExaSAsIGlpSTFpaWkgaW4gb3MgLiB3YWxrICggaTFJSTEgKSA6CiAgICBPMG9vb08wMG9vTzAgPSAwCiAgICBPMG9vb08wMG9vTzAgKz0gbGVuICggaWlJMWlpaSApCiAgICBpZiBPMG9vb08wMG9vTzAgPiAwIDoKICAgICBmb3IgSUlpSTFpIGluIGlpSTFpaWkgOgogICAgICB0cnkgOgogICAgICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBJSWlJMWkgKSApCiAgICAgIGV4Y2VwdCA6CiAgICAgICBwYXNzCiAgICAgZm9yIGlpMWlpIGluIEkxSUlJMTExaSA6CiAgICAgIHRyeSA6CiAgICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBpaTFpaSApICkKICAgICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGNsZWFyZWQgIiArIHN0ciAoIE8wb29vTzAwb29PMCApICsgIiBmaWxlcyBmcm9tICIgKyBvcyAuIHBhdGggLiBqb2luICggaTFJSTEgLCBpaTFpaSApCiAgICAgIGV4Y2VwdCA6CiAgICAgICBwcmludCAiIyMjIEZhaWxlZCB0byB3aXBlIGNhY2hlIGluOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIGkxSUkxICwgaWkxaWkgKQogIGVsc2UgOgogICBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIGkxSUkxICkgOgogICAgZm9yIGlpMWlpIGluIEkxSUlJMTExaSA6CiAgICAgaWYgJ0NhY2hlJyBpbiBpaTFpaSBvciAnY2FjaGUnIGluIGlpMWlpIG9yICdDQUNIRScgaW4gaWkxaWkgOgogICAgICB0cnkgOgogICAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgaWkxaWkgKSApCiAgICAgICBwcmludCAiIyMjIFN1Y2Nlc3NmdWxseSB3aXBlZCAiICsgb3MgLiBwYXRoIC4gam9pbiAoIGkxSUkxICwgaWkxaWkgKQogICAgICBleGNlcHQgOgogICAgICAgcHJpbnQgIiMjIyBGYWlsZWQgdG8gd2lwZSBjYWNoZSBpbjogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBpMUlJMSAsIGlpMWlpICkKICAgICAgIGlmIDgzIC0gODM6IE9PT29Pb28wTwogICAgICAgaWYgNjEgLSA2MTogaWlpaWlpaWkxIC4gSUlpSWkxaUkgLyBpaWlpaWlpaTEgKiBPb29vb29vb09PCiB0cnkgOgogIGkxMTFpSWkxaTEgPSBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3Byb2ZpbGUvYWRkb25fZGF0YS9wbHVnaW4udmlkZW8uZ2VuZXNpcycgKSAsICdjYWNoZS5kYicgKQogIGlpaWlJID0gZGF0YWJhc2UgLiBjb25uZWN0ICggaTExMWlJaTFpMSApCiAgSUkxSUlpMWlpMTExID0gaWlpaUkgLiBjdXJzb3IgKCApCiAgSUkxSUlpMWlpMTExIC4gZXhlY3V0ZSAoICJEUk9QIFRBQkxFIElGIEVYSVNUUyByZWxfbGlzdCIgKQogIElJMUlJaTFpaTExMSAuIGV4ZWN1dGUgKCAiVkFDVVVNIiApCiAgaWlpaUkgLiBjb21taXQgKCApCiAgSUkxSUlpMWlpMTExIC4gZXhlY3V0ZSAoICJEUk9QIFRBQkxFIElGIEVYSVNUUyByZWxfbGliIiApCiAgSUkxSUlpMWlpMTExIC4gZXhlY3V0ZSAoICJWQUNVVU0iICkKICBpaWlpSSAuIGNvbW1pdCAoICkKIGV4Y2VwdCA6CiAgcGFzcwogIGlmIDI4IC0gMjg6IE9vME9vbyAuIElJaUlpMWlJICUgTzAgLSBPb09vT08wMAogIGlmIDYyIC0gNjI6IG9vT28KZGVmIElJSTFJMTExICggbW9kZSApIDoKIGlmIHppcCA9PSAnJyA6CiAgaUkxMTFJMTFJMUkxIC4gb2sgKCAnUGxlYXNlIHNldCB5b3VyIGJhY2t1cCBsb2NhdGlvbiBiZWZvcmUgcHJvY2VlZGluZycgLCAnWW91IGhhdmUgbm90IHNldCB5b3VyIGJhY2t1cCBzdG9yYWdlIGZvbGRlci5cblBsZWFzZSB1cGRhdGUgdGhlIGFkZG9uIHNldHRpbmdzIGFuZCB0cnkgYWdhaW4uJyApCiAgbzBPIC4gb3BlblNldHRpbmdzICggc3lzIC4gYXJndiBbIDAgXSApCiAgb29Pb2kxSWlJID0gbzBPIC4gZ2V0U2V0dGluZyAoICd6aXAnICkKICBpZiBvb09vaTFJaUkgPT0gJycgOgogICBJSUkxSTExMSAoIG1vZGUgKQogSWkxMTExaTExID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaWlpaWlJSWlpICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgKSApCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSWkxMTExaTExICkgOgogIG9zIC4gbWFrZWRpcnMgKCBJaTExMTFpMTEgKQogSTFpMUkxSTExSWlpSSA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCAiQUJTT0xVVEVMWSBDRVJUQUlOPyEhISIgLCAnQXJlIHlvdSBhYnNvbHV0ZWx5IGNlcnRhaW4geW91IHdhbnQgdG8gd2lwZT8nICwgJycgLCAnQWxsIGFkZG9ucyBhbmQgc2V0dGluZ3Mgd2lsbCBiZSBjb21wbGV0ZWx5IHdpcGVkIScgLCB5ZXNsYWJlbCA9ICdZZXMnICwgbm9sYWJlbCA9ICdObycgKQogaWYgMTEgLSAxMTogT29vb29vb29PTyAuIE9vTzBPMDAgKyBpMUlJaSAlIGlJaWkxSTExSTFJSTEgKyBPbzBPb28KIGlmIEkxaTFJMUkxMUlpaUkgPT0gMSA6CiAgbzAwT08wME9vTyA9IHhibWMgLiBnZXRTa2luRGlyICggKQogIHhibWMgLiBsb2cgKCAnIyMjIHNraW46ICVzJyAlIG8wME9PMDBPb08gKQogIGlmIG5vdCBvMDBPTzAwT29PIGluIFsgJ3NraW4uY29uZmx1ZW5jZScgLCAnc2tpbi5lc3R1YXJ5JyBdIDoKICAgbzAwT08wME9vTyA9ICdza2luLmNvbmZsdWVuY2UnIGlmIGlpMTFpSWkxSSA8IDE3IGVsc2UgJ3NraW4uZXN0dWFyeScKICAgc2tpblN3aXRjaCAuIHN3YXBTa2lucyAoIG8wME9PMDBPb08gKQogICBJaTExSWlpaTFpaWlpID0gMAogICB4Ym1jIC4gc2xlZXAgKCAxMDAwICkKICAgd2hpbGUgbm90IHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICJXaW5kb3cuaXNWaXNpYmxlKHllc25vZGlhbG9nKSIgKSA6CiAgICBpZiBJaTExSWlpaTFpaWlpID09IDE1MCA6CiAgICAgYnJlYWsKICAgIElpMTFJaWlpMWlpaWkgKz0gMQogICAgeGJtYyAuIHNsZWVwICggMjAwICkKICAgIGlmIDcwIC0gNzA6IE9vb29vb29vT08gKiBpMTFpSWlpSWlpCiAgIGlmIHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICJXaW5kb3cuaXNWaXNpYmxlKHllc25vZGlhbG9nKSIgKSA6CiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU2V0Rm9jdXMoMTEpJyApCiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aW9uKFNlbGVjdCknICkKICBpZiBub3QgbzAwT08wME9vTyBpbiBbICdza2luLmNvbmZsdWVuY2UnICwgJ3NraW4uZXN0dWFyeScgXSA6CiAgIGlJMTExSTExSTFJMSAuIG9rICggIkNvbW11bml0eSBQb3J0YWwiICwgIlVuYWJsZSB0byByZXNldCBza2luIGJhY2sgdG8gW0NPTE9SIHllbGxvd10lc1svQ09MT1JdIiAlIG8wME9PMDBPb08gWyA1IDogXSApCiAgIHJldHVybgogIGVsc2UgOgogICBpZiA2MCAtIDYwOiBJSWlpaUkxaUlJSSAvIGlJaWkxSTExSTFJSTEgKyBPb29vb29vb09PIC0gSTFpaTExaUlpMTFpICogaTExaUlpaUlpaQogICBJMWkxSTFJMTFJaWlJID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJWRVJZIElNUE9SVEFOVCIgLCAnVGhpcyB3aWxsIGNvbXBsZXRlbHkgd2lwZSB5b3VyIGluc3RhbGwuJyAsICdXb3VsZCB5b3UgbGlrZSB0byBjcmVhdGUgYSBiYWNrdXAgYmVmb3JlIHByb2NlZWRpbmc/JyAsICcnICwgeWVzbGFiZWwgPSAnTm8nICwgbm9sYWJlbCA9ICdZZXMnICkKICAgaWYgSTFpMUkxSTExSWlpSSA9PSAwIDoKICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJaTExMTFpMTEgKSA6CiAgICAgb3MgLiBtYWtlZGlycyAoIElpMTExMWkxMSApCiAgICBJMWlJSTFJSWkxSWlJID0gaUlpb28wb29PICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiAgICBpZiAoIG5vdCBJMWlJSTFJSWkxSWlJICkgOiByZXR1cm4gRmFsc2UgLCAwCiAgICBvMDBPTzBvMCA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBJMWlJSTFJSWkxSWlJICkKICAgIGkxSUkxSWlpSWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJaTExMTFpMTEgLCBvMDBPTzBvMCArICcuemlwJyApICkKICAgIGlpMTExaUkxaTEgPSBbICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAncGx1Z2luLnByb2dyYW0udGJzJyBdCiAgICBPTzAwMCA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJy5naXRpZ25vcmUnIF0KICAgIG9PMG9Pb28wTyA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKICAgIElJMWlJMTEgPSAiQXJjaGl2aW5nLi4uIgogICAgTzAwbzBPID0gIiIKICAgIE8wMG9PbzBPMG8wME8gPSAiUGxlYXNlIFdhaXQiCiAgICBpaUlJaWkgKCBpSWlpMSAsIGkxSUkxSWlpSWkgLCBvTzBvT29vME8gLCBJSTFpSTExICwgTzAwbzBPICwgTzAwb09vME8wbzAwTyAsIGlpMTExaUkxaTEgLCBPTzAwMCApCiAgIElpaTFpSUlpMWlJaWkgKCBpMWkgKQogICBJSTFpaTEgKCApCiAgIG9PT29vMG8wMCAoIDEgKQogICBPT08wME8wMG9vbzBvICggKQogICBPb09vbyAoIGkxT28wMCApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMWlpaTFJaSApIDoKICAgIG9zIC4gcmVtb3ZlICggSTExaWlpMUlpICkKICAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggSTFJSWlpSWlpaSApIDoKICAgIG9zIC4gcmVtb3ZlICggSTFJSWlpSWlpaSApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wMDBvbzBPICkgOgogICAgb3MgLiByZW1vdmUgKCBPMDAwb28wTyApCiAgaWYgbW9kZSAhPSAnQ0InIDoKICAgT29vb09PbzBvT08gKCApCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBJMTFpaWkxSWkgKQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEZhaWxlZCB0byByZW1vdmUgc3RhcnR1cC54bWwiICkKICB0cnkgOgogICBvcyAuIHJlbW92ZSAoIE8wMDBvbzBPICkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gcmVtb3ZlIGlkLnhtbCIgKQogZWxzZSA6CiAgcmV0dXJuCiAgaWYgNzUgLSA3NTogaUlpaTFJMTFJMUlJMSAqIElJaUlpMWlJIC8gT29Pb09PMDAgKiBJSTExMWlpaWkgLiBpMUlJaQogIGlmIDYgLSA2OiBPMDBPT28wMG9vMG8gJSBPMDBPT28wMG9vMG8gLyBPb29vb29vb09PICogb29PbyAuIEkxSWlpSSAuIGkxSUlpCmRlZiBJaWkxaUlJaTFpSWlpICggZXhjbHVkZWZpbGVzICkgOgogT09vb08wT09vbyAuIGNyZWF0ZSAoICJXaXBpbmcgRXhpc3RpbmcgQ29udGVudCIgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIGlJaWkxICwgdG9wZG93biA9IFRydWUgKSA6CiAgSTFJSUkxMTFpIFsgOiBdID0gWyBpaTFpaSBmb3IgaWkxaWkgaW4gSTFJSUkxMTFpIGlmIGlpMWlpIG5vdCBpbiBleGNsdWRlZmlsZXMgXQogIGZvciBvb28wTyBpbiBpaUkxaWlpIDoKICAgdHJ5IDoKICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIlJlbW92aW5nIFtDT0xPUj15ZWxsb3ddIiArIG9vbzBPICsgJ1svQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaWlpaUkxSSAsIG9vbzBPICkgKQogICAgb3MgLiByZW1vdmUgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBvb28wTyApICkKICAgIG9zIC4gcm1kaXIgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBvb28wTyApICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDU5IC0gNTk6IE9PT29Pb28wTyAuIE9PT29Pb28wTyAqIEkxSWlpSSAtIE8wME9PbzAwb28wbyAlIE9vT29PTzAwCiAgICBpZiAxOSAtIDE5OiBPb29vb29vb09PIC8gT28wT29vIC0gSUlpIC4gT29Pb09PMDAKZGVmIElJMWlpMSAoICkgOgogaTFpMWkxMUlJaWkgPSBbIG9vbzBPIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBvT09vTzAgKSBpZiBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vTzAgLCBvb28wTyApICkgXQogdHJ5IDoKICBmb3Igb29vME8gaW4gaTFpMWkxMUlJaWkgOgogICB0cnkgOgogICAgaWYgb29vME8gbm90IGluIGkxT28wMCA6CiAgICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiQ2xlYW5pbmcgRGlyZWN0b3J5OiBbQ09MT1I9eWVsbG93XSIgKyBvb28wTyArICcgWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggb09Pb08wICwgb29vME8gKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiBleGNlcHQgOgogIHBhc3MKICBpZiAxMSAtIDExOiBpaWlpaWlpaTEgLiBJSWkgLSBJSWlJaTFpSSAuIG8wb09PbzBPME9vbwogIGlmIDQxIC0gNDE6IG9vT28gLyBPb08wTzAwIC0gT29PME8wMCArIGlpaWlpaWlpMSAqIE9vCiBmb3IgSUlJaWlpaWlJMUkgLCBJMUlJSTExMWkgLCBpaUkxaWlpIGluIG9zIC4gd2FsayAoIG9PT29PMCAsIHRvcGRvd24gPSBUcnVlICkgOgogIEkxSUlJMTExaSBbIDogXSA9IFsgaWkxaWkgZm9yIGlpMWlpIGluIEkxSUlJMTExaSBpZiBpaTFpaSBub3QgaW4gaTFPbzAwIF0KICBmb3Igb29vME8gaW4gaWlJMWlpaSA6CiAgIHRyeSA6CiAgICBPT29vTzBPT29vIC4gdXBkYXRlICggMCAsICJSZW1vdmluZyBbQ09MT1I9eWVsbG93XSIgKyBvb28wTyArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggSUlJaWlpaWlJMUkgLCBvb28wTyApICkKICAgIG9zIC4gcmVtb3ZlICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWlpaWlpSTFJICwgb29vME8gKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiAxMyAtIDEzOiBJSWkgKiBJSTExMWlpaWkgLSBPb09vT08wMAogICAgaWYgMyAtIDM6IE9vICsgaWlpaWlpaWkxICogaTExaUlpaUlpaSAuIElJaUlpMWlJIC8gaUlpaTFJMTFJMUlJMQpkZWYgb09Pb28wbzAwICgga2VlcHJlcG9zICkgOgogZm9yIG9vbzBPIGluIG9zIC4gbGlzdGRpciAoIElJMTFpaWlpMUlpICkgOgogIGlmIG5vdCBrZWVwcmVwb3MgOgogICBpZiBvb28wTyBub3QgaW4gaTFPbzAwIGFuZCBub3QgJ3JlcG8nIGluIG9vbzBPIDoKICAgIHRyeSA6CiAgICAgT09vb08wT09vbyAuIHVwZGF0ZSAoIDAgLCAiUmVtb3ZpbmcgQWRkLW9uOiBbQ09MT1I9eWVsbG93XSIgKyBvb28wTyArICcgWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyApICkKICAgIGV4Y2VwdCA6CiAgICAgdHJ5IDoKICAgICAgb3MgLiByZW1vdmUgKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBvb28wTyApICkKICAgICBleGNlcHQgOgogICAgICBwYXNzCiAgICAgIGlmIDQ0IC0gNDQ6IE9vTzBPMDAKICBlbHNlIDoKICAgdHJ5IDoKICAgIGlmIG9vbzBPIG5vdCBpbiBpMU9vMDAgOgogICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIlJlbW92aW5nIEFkZC1vbjogW0NPTE9SPXllbGxvd10iICsgb29vME8gKyAnIFsvQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgb29vME8gKSApCiAgIGV4Y2VwdCA6CiAgICB0cnkgOgogICAgIG9zIC4gcmVtb3ZlICggb3MgLiBwYXRoIC4gam9pbiAoIElJMTFpaWlpMUlpICwgb29vME8gKSApCiAgICBleGNlcHQgOgogICAgIHBhc3MKICAgICBpZiA3NCAtIDc0OiBPMDBPT28wMG9vMG8gKiBpMUlJaSAqIE9PT29Pb28wTyAtIE9vb29vb29vT08gLiBJMUlpaUkKICAgICBpZiAyNCAtIDI0OiBJSTExMWlpaWkgLSBpMTFpSWlpSWlpICogaTFJSWkgLiBpaWlpaWlpaTEKZGVmIE9PTzAwTzAwb29vMG8gKCApIDoKIGZvciBvb28wTyBpbiBvcyAuIGxpc3RkaXIgKCBpaUkxSWlJICkgOgogIHRyeSA6CiAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIlJlbW92aW5nIEFkZC1vbiBEYXRhOiBbQ09MT1I9eWVsbG93XSIgKyBvb28wTyArICcgWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGlpSTFJaUkgLCBvb28wTyApICkKICBleGNlcHQgOgogICB0cnkgOgogICAgb3MgLiByZW1vdmUgKCBvcyAuIHBhdGggLiBqb2luICggaWlJMUlpSSAsIG9vbzBPICkgKQogICBleGNlcHQgOgogICAgcGFzcwogICAgaWYgNDIgLSA0MjogT09Pb09vbzBPIC8gaTExaUlpaUlpaQogICAgaWYgNyAtIDc6IE9PT29Pb28wTwpkZWYgT29Pb28gKCBleGNsdWRlZmlsZXMgKSA6CiBJaTFpaWlJID0gWyBvb28wTyBmb3Igb29vME8gaW4gb3MgLiBsaXN0ZGlyICggaUlpaTEgKSBpZiBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpSWlpMSAsIG9vbzBPICkgKSBdCiB0cnkgOgogIGZvciBvb28wTyBpbiBJaTFpaWlJIDoKICAgdHJ5IDoKICAgIGlmIG9vbzBPIG5vdCBpbiBleGNsdWRlZmlsZXMgOgogICAgIE9Pb29PME9Pb28gLiB1cGRhdGUgKCAwICwgIkNsZWFuaW5nIERpcmVjdG9yeTogW0NPTE9SPXllbGxvd10iICsgb29vME8gKyAnIFsvQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGlJaWkxICwgb29vME8gKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiBleGNlcHQgOgogIHBhc3MKICBpZiAyNSAtIDI1OiBPb08wTzAwICUgaTFJSWkKICBpZiAxMiAtIDEyOiBvMG9PT28wTzBPb28KZGVmIE9vbzBvMDBPME8wb08gKCB1cmwgKSA6CiBpaU8wbzBPMG9vMG8gPSB4Ym1jIC4gZ2V0SW5mb0xhYmVsICggIlN5c3RlbS5CdWlsZFZlcnNpb24iICkKIG9PT28wb28wTyA9IGZsb2F0ICggaWlPMG8wTzBvbzBvIFsgOiA0IF0gKQogT08wMDBPT08gPSBpSWlpMSAuIHNwbGl0ICggb3MgLiBzZXAgKQogeGJtYyAuIGxvZyAoIHN0ciAoIE9PMDAwT09PICkgKQogbzAwME9Pb29vMDAwTyA9IGxlbiAoIE9PMDAwT09PICkKIG9vMG8wbyA9IE9PMDAwT09PIFsgbzAwME9Pb29vMDAwTyAtIDEgXQogaWYgb28wbzBvID09ICcnIDoKICBvbzBvMG8gPSBPTzAwME9PTyBbIG8wMDBPT29vbzAwME8gLSAyIF0KIG9vMG8wbyA9IG9vMG8wbyAuIHJlcGxhY2UgKCAnLicgLCAnJyApIC4gdXBwZXIgKCApCiBpSTExMUkxMUkxSTEgLiBvayAoICdZb3UgYXJlIHJ1bm5pbmc6ICVzJyAlIG9vMG8wbyAsICJZb3VyIHZlcnNpb24gaXM6ICVzIiAlIG9PT28wb28wTyApCiBpZiA2NyAtIDY3OiBJSTExMWlpaWkgKyBPMDBPT28wMG9vMG8gLSBJMUlpaUkgKiBpaWlpaWlpaTEKIGlmIDE5IC0gMTk6IGkxMWlJaWlJaWkgKiBPbzBPb28KaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyA6CiBpaWkxaTFJaWlpaWlpID0gb08wbyAoICkKIGkxMWkxaWlpSUkgPSBOb25lCiBJMTFJSUlJID0gTm9uZQogb29vID0gTm9uZQogSWlJaTFJMUlpaWkgPSBOb25lCiBPMDBPME8wT08wMG9vID0gTm9uZQogSTExaUkxaTExSWlJID0gTm9uZQogTzAwT28gPSBOb25lCiBpaWlpSUkxMWlJaSA9IE5vbmUKIEkxaWlpaUkxaUkgPSBOb25lCiBPbzBvID0gTm9uZQogaWlpMUlpID0gTm9uZQogb29vME8gPSBOb25lCiBJSTExMSA9IE5vbmUKIG9vT08wb08wb28wMG8gPSBOb25lCiBpaUlpMUlJaUkgPSBOb25lCiBPT29vb28wMDAwT28gPSBOb25lCiBpMUlJSUlpaUkxMSA9IE5vbmUKIElpMUlJaUlJMUkgPSBOb25lCiBvMDBPTzBvMCA9IE5vbmUKIGlpaWlpMUlJID0gTm9uZQogT09PMDBvMG9PID0gTm9uZQogb09PbzBvbzBPID0gTm9uZQogb08wT09PTzAgPSBOb25lCiBJMWlpaTFJID0gTm9uZQogb29vbzAgPSBOb25lCiBvMG8wbyA9ICdtYWludGVuYW5jZScKIGlmIDMwIC0gMzA6IE8wCiB0cnkgOgogIGkxMWkxaWlpSUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgImFkZG9uX2lkIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBPT09paSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAiYWR1bHQiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIEkxMUlJSUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgImFydHBhY2siIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIG9vbyA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAiYXVkaW9hZGRvbnMiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIElpSWkxSTFJaWlpID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJhdXRob3IiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIE8wME8wTzBPTzAwb28gPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgImJ1aWxkbmFtZSIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgSTExaUkxaTExSWlJID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJkYXRhX3BhdGgiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIE8wME9vID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJkZXNjcmlwdGlvbiIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgaWlpaUlJMTFpSWkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgImZhbmFydCIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgSTFpaWlpSTFpSSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAiZm9ydW0iIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIElpaTFJMTEgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgImd1aXNldHRpbmdzbGluayIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgT28wbyA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAiaWNvbmltYWdlIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBpaWkxSWkgPSBzdHIgKCBpaWkxaTFJaWlpaWlpIFsgIm1vZGUiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIG9vbzBPID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJuYW1lIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBJMTFpSWkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgInBpY3R1cmVhZGRvbnMiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIElJMTExID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJwcm9ncmFtYWRkb25zIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBvb09PMG9PMG9vMDBvID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJwcm92aWRlcl9uYW1lIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBPT29vb28wMDAwT28gPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgInJlcG9fbGluayIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgaWlJaTFJSWlJID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJyZXBvX2lkIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBpMUlJSUlpaUkxMSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAic2tpbnMiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIElpMUlJaUlJMUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgInNvdXJjZXMiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIG8wME9PMG8wID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJ0aXRsZSIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgaWlpaWkxSUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgInVwZGF0ZWQiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIE9PTzAwbzBvTyA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAidXJsIiBdICkKIGV4Y2VwdCA6CiAgcGFzcwogdHJ5IDoKICBvT09vMG9vME8gPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaWkxaTFJaWlpaWlpIFsgInZlcnNpb24iIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIG9PME9PT08wID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJ2aWRlbyIgXSApCiBleGNlcHQgOgogIHBhc3MKIHRyeSA6CiAgSTFpaWkxSSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpaTFpMUlpaWlpaWkgWyAidmlkZW9hZGRvbnMiIF0gKQogZXhjZXB0IDoKICBwYXNzCiB0cnkgOgogIG9vb28wID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlpMWkxSWlpaWlpaSBbICJ6aXBfbGluayIgXSApCiBleGNlcHQgOgogIHBhc3MKICBpZiA3OCAtIDc4OiBJMUlpaUkgLSBPbyAtIG9vT28gKiBpaWlpaWlpaTEgJSBpMTFpSWlpSWlpICsgT28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJaTFpSWlJSTFpaTEgKSA6CiAgb3MgLiBtYWtlZGlycyAoIElpMWlJaUlJMWlpMSApCiAgaWYgOTAgLSA5MDogaTExaUlpaUlpaQogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMWlpaTFJaSApIDoKICBJMUkxSUlpaWlpMWlpID0gb3BlbiAoIEkxMWlpaTFJaSAsIG1vZGUgPSAndysnICkKICBJMUkxSUlpaWlpMWlpIC4gd3JpdGUgKCAnZGF0ZT0iMDEwMTEwMDEiXG52ZXJzaW9uPSIwLjAiJyApCiAgSTFJMUlJaWlpaTFpaSAuIGNsb3NlICggKQogIGlmIDQ3IC0gNDc6IE9vTzBPMDAgLiBpMTFpSWlpSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggTzAwMG9vME8gKSA6CiAgSTFJMUlJaWlpaTFpaSA9IG9wZW4gKCBPMDAwb28wTyAsIG1vZGUgPSAndysnICkKICBJMUkxSUlpaWlpMWlpIC4gd3JpdGUgKCAnaWQ9Ik5vbmUiXG5uYW1lPSJOb25lIicgKQogIEkxSTFJSWlpaWkxaWkgLiBjb250ZW50bG9zZSAoICkKICBpZiA5IC0gOTogT29Pb09PMDAgLSBPT09vT29vME8gLiBPb29vb29vb09PICUgaWlpaWlpaWkxCiBJSUlpSWlJSUlJMWkxID0gYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNjE2NDY0NmY2ZTJlNzg2ZDZjJyApCiBpaUlJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSUkxMWlpaWkxSWkgLCBJMUlpSSAsIElJSWlJaUlJSUkxaTEgKSApCiBPbzAwb29vTzAwbyA9IG9wZW4gKCBpaUlJICwgbW9kZSA9ICdyJyApCiBpaTFJMSA9IGZpbGUgLiByZWFkICggT28wMG9vb08wMG8gKQogZmlsZSAuIGNsb3NlICggT28wMG9vb08wMG8gKQogb29vTzBPbzBPID0gcmUgLiBjb21waWxlICggJzxyZWY+KC4rPyk8L3JlZj4nICkgLiBmaW5kYWxsICggaWkxSTEgKQogaUlJSWkxMTEgPSBvb29PME9vME8gWyAwIF0gaWYgKCBsZW4gKCBvb29PME9vME8gKSA+IDAgKSBlbHNlICcnCiBpSTFJMTFJSTFJaWkxID0gaGFzaGxpYiAuIG1kNSAoIG9wZW4gKCBvT09vbzBPbyAsICdyYicgKSAuIHJlYWQgKCApICkgLiBoZXhkaWdlc3QgKCApCiBpZiBpSUlJaTExMSAhPSBpSTFJMTFJSTFJaWkxIDoKICBJSWlJaUkgPSBvcGVuICggSTExaTEgLCBtb2RlID0gJ3InICkKICBpaTFJMSA9IGZpbGUgLiByZWFkICggSUlpSWlJICkKICBmaWxlIC4gY2xvc2UgKCBJSWlJaUkgKQogIE9vb29vT09vbzAgPSBvcGVuICggb09Pb28wT28gLCBtb2RlID0gJ3crJyApCiAgT29vb29PT29vMCAuIHdyaXRlICggaWkxSTEgKQogIE9vb29vT09vbzAgLiBjbG9zZSAoICkKICBpZiA5NiAtIDk2OiBpaWlpaWlpaTEgKyBPb08wTzAwICogSUkxMTFpaWlpICogb29PbwogaWYgaWlpMUlpID09IE5vbmUgOiBPT09JaTExaTFJSSAoICkKIGVsaWYgaWlpMUlpID09ICdBU0NJSV9DaGVjaycgOiBvTzAwT29vMG9PICggKQogZWxpZiBpaWkxSWkgPT0gJ2FkZG9uX2ZpbmFsX21lbnUnIDogT08wMDAwbyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnYWRkb25fY2F0ZWdvcmllcycgOiBPMG8wMDBPbyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnYWRkb25fY291bnRyaWVzJyA6IE9vTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnYWRkb25fZ2VucmVzJyA6IE9PT29vbzBPb29Pb08gKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2FkZG9uX2luc3RhbGwnIDogSTFpaWlvT08wT08wTyAoIG9vbzBPICwgb29vbzAgLCBPT29vb28wMDAwT28gLCBpaUlpMUlJaUkgLCBpMTFpMWlpaUlJICwgb29PTzBvTzBvbzAwbyAsIEkxaWlpaUkxaUkgLCBJMTFpSTFpMTFJaUkgKQogZWxpZiBpaWkxSWkgPT0gJ2FkZG9uX2luc3RhbGxfemVybycgOiBJaTEgKCBvb28wTyAsIG9vb28wICwgT09vb29vMDAwME9vICwgaWlJaTFJSWlJICwgaTExaTFpaWlJSSAsIG9vT08wb08wb28wMG8gLCBJMWlpaWlJMWlJICwgSTExaUkxaTExSWlJICkKIGVsaWYgaWlpMUlpID09ICdhZGRvbl9sb29wJyA6IG9vMG9vb29vMDBvICggKQogZWxpZiBpaWkxSWkgPT0gJ2FkZG9uX3JlbW92YWxfbWVudScgOiBPME9JSWkxICggKQogZWxpZiBpaWkxSWkgPT0gJ2FkZG9ubWVudScgOiBJMWlpMUlJMWlJSSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnYWRkb25fc2V0dGluZ3MnIDogSWlJaWlJMTFpMUlpICggKQogZWxpZiBpaWkxSWkgPT0gJ2FkdWx0X2ZpbHRlcicgOiBJaTFvb28wTzBPTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnYXBwX2luc3RhbGxlcicgOiBpbnN0YWxsYXBwcyAuIElOREVYMSAoICkKIGVsaWYgaWlpMUlpID09ICdiYWNrdXAnIDogQkFDS1VQICggKQogZWxpZiBpaWkxSWkgPT0gJ2JhY2t1cF9vcHRpb24nIDogb28wTzBvICggKQogZWxpZiBpaWkxSWkgPT0gJ2JhY2t1cF9yZXN0b3JlJyA6IElpSWkxaSAoICkKIGVsaWYgaWlpMUlpID09ICdicm93c2VfcmVwb3MnIDogSUlpSTExMTFpMSAoICkKIGVsaWYgaWlpMUlpID09ICdDQl9NZW51JyA6IE8wMG9vb29vMDAgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2NoZWNrX3N0b3JhZ2UnIDogY2hlY2tQYXRoIC4gY2hlY2sgKCBvMG8wbyApCiBlbGlmIGlpaTFJaSA9PSAnY2hlY2tfdXBkYXRlcycgOiBvMG9vb09PMDAgKCApCiBlbGlmIGlpaTFJaSA9PSAnY2xlYXJfY2FjaGUnIDogTzBPT29Pb29PMDAgKCApCiBlbGlmIGlpaTFJaSA9PSAnY3JlYXRlX2tleXdvcmQnIDogTzBPTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnY29tbXVuaXR5X2JhY2t1cCcgOiBvT29vME9vb29vICggKQogZWxpZiBpaWkxSWkgPT0gJ2NvbW11bml0eV9iYWNrdXBfMicgOiBpSWlJSWkxMWlJICggKQogZWxpZiBpaWkxSWkgPT0gJ2NvbW11bml0eV9tZW51JyA6IG8wTzAwTyAoIE9PTzAwbzBvTyAsIG9PME9PT08wICkKIGVsaWYgaWlpMUlpID09ICdjb3VudHJpZXMnIDogTzBvME8wMG8wbyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnZGVzY3JpcHRpb24nIDogSTFpMWlpMWlpICggb29vME8gLCBPT08wMG8wb08gLCBPMDBPME8wT08wMG9vICwgSWlJaTFJMUlpaWkgLCBvT09vMG9vME8gLCBPMDBPbyAsIGlpaWlpMUlJICwgaTFJSUlJaWlJMTEgLCBJMWlpaTFJICwgb29vICwgSUkxMTEgLCBJMTFpSWkgLCBJaTFJSWlJSTFJICwgT09PaWkgKQogZWxpZiBpaWkxSWkgPT0gJ2RlbGV0ZV9wYXRoJyA6IG9Pb08gKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2RlbGV0ZV9wcm9maWxlJyA6IG9vT29Pb28wMDBPME8gKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2VuYWJsZWFkZG9ucycgOiBpSWkxaUlpSUlJSTFpSUkxaSAoICkKIGVsaWYgaWlpMUlpID09ICdmaXhfc3BlY2lhbCcgOiBJaWlJSWlJSTExaTEgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2Z1bGxfYmFja3VwJyA6IG8wT28wb08wME9vb28gKCApCiBlbGlmIGlpaTFJaSA9PSAnZnVsbF9jbGVhbicgOiBpMWlpaWlpaTEgKCApCiBlbGlmIGlpaTFJaSA9PSAnZ2VucmVzJyA6IEkxSUlpSWkxaUkgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ2dvdGhhbScgOiBJSUlJaUkxaWkxICggKQogZWxpZiBpaWkxSWkgPT0gJ2dyYWJfYWRkb25zJyA6IE9PICggT09PMDBvMG9PICkKIGVsaWYgaWlpMUlpID09ICdncmFiX2J1aWxkcycgOiBJMTFpaTFpICggT09PMDBvMG9PICkKIGVsaWYgaWlpMUlpID09ICdndWlzZXR0aW5nc2ZpeCcgOiBJMWlPMDBPMDAwb09PMG9PICggT09PMDBvMG9PICwgbG9jYWwgKQogZWxpZiBpaWkxSWkgPT0gJ2hlbGl4JyA6IE9PME9vbzBPMDBvb09vMG8gKCApCiBlbGlmIGlpaTFJaSA9PSAnaGlkZV9wYXNzd29yZHMnIDogbzAwb08wTzAwMCAoICkKIGVsaWYgaWlpMUlpID09ICdpcGNoZWNrJyA6IG9vb29vb28gKCApCiBlbGlmIGlpaTFJaSA9PSAnaW5zdGFsbF9mcm9tX3ppcCcgOiBJaW9PMG9PbyAoICkKIGVsaWYgaWlpMUlpID09ICdpbnN0cnVjdGlvbnMnIDogSW5zdHJ1Y3Rpb25zICggKQogZWxpZiBpaWkxSWkgPT0gJ2luc3RydWN0aW9uc18xJyA6IE9vT28wT29vbzBvICggKQogZWxpZiBpaWkxSWkgPT0gJ2luc3RydWN0aW9uc18yJyA6IEkxMUlJSUlpSUkgKCApCiBlbGlmIGlpaTFJaSA9PSAnaW5zdHJ1Y3Rpb25zXzMnIDogT28wbzBPT28wT28wICggKQogZWxpZiBpaWkxSWkgPT0gJ2luc3RydWN0aW9uc180JyA6IG8wMG9vMDBPME9vT28gKCApCiBlbGlmIGlpaTFJaSA9PSAnaW5zdHJ1Y3Rpb25zXzUnIDogSTFpMUlpSUlpSWlJSSAoICkKIGVsaWYgaWlpMUlpID09ICdpbnN0cnVjdGlvbnNfNicgOiBJbnN0cnVjdGlvbnNfNiAoICkKIGVsaWYgaWlpMUlpID09ICdrZXl3b3JkcycgOiBJaTFpSSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAna2lsbF94Ym1jJyA6IE9vb29PT28wb09PICggKQogZWxpZiBpaWkxSWkgPT0gJ2tvZGlfc2V0dGluZ3MnIDogb09vSUkxSWlJMUlJMSAoICkKIGVsaWYgaWlpMUlpID09ICdsb2NhbF9iYWNrdXAnIDogSUlpbzBPMCAoICkKIGVsaWYgaWlpMUlpID09ICdMb2NhbEdVSURpYWxvZycgOiBPMG9PTzBvMDBPTyAoICkKIGVsaWYgaWlpMUlpID09ICdsb2cnIDogaTExMWlJaTExSWkgKCApCiBlbGlmIGlpaTFJaSA9PSAnbG9naW5fY2hlY2snIDogb28wT29vICggKQogZWxpZiBpaWkxSWkgPT0gJ21hbnVhbF9zZWFyY2gnIDogaTFJSWkxaWkxaTFpaSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnbmFuX21lbnUnIDogT09vbyAoICkKIGVsaWYgaWlpMUlpID09ICduZXdzX3Jvb3RfbWVudScgOiBOZXdzX1Jvb3RfTWVudSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnbmV3c19tZW51JyA6IE5ld3NfTWVudSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnb3Blbl9zeXN0ZW1faW5mbycgOiBPbzBPT08wMG9vMCAoICkKIGVsaWYgaWlpMUlpID09ICdvcGVuX2ZpbGVtYW5hZ2VyJyA6IG9vb2lpMTExSTFJMUkgKCApCiBlbGlmIGlpaTFJaSA9PSAnb3BlbmVsZWNfYmFja3VwJyA6IE8wbzAwT29vb08gKCApCiBlbGlmIGlpaTFJaSA9PSAnb3BlbmVsZWNfc2V0dGluZ3MnIDogT09PbzBvICggKQogZWxpZiBpaWkxSWkgPT0gJ3BsYXlfdmlkZW8nIDogeXQgLiBQbGF5VmlkZW8gKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ3JlZ2lzdGVyJyA6IE9PMDBPME8gKCApCiBlbGlmIGlpaTFJaSA9PSAncmVtb3ZlX2FkZG9uX2RhdGEnIDogSUkxMTExaTExaTExICggKQogZWxpZiBpaWkxSWkgPT0gJ3JlbW92ZV9hZGRvbnMnIDogb29vT09Pb09PT28wTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAncmVtb3ZlX2J1aWxkJyA6IG9vME9PME9vMDAwb28gKCApCiBlbGlmIGlpaTFJaSA9PSAncmVtb3ZlX2NyYXNoX2xvZ3MnIDogT08wbzBPMCAoICkKIGVsaWYgaWlpMUlpID09ICdyZW1vdmVfbmFnJyA6IGlJaWlpMWlJMWkgKCApCiBlbGlmIGlpaTFJaSA9PSAncmVtb3ZlX3BhY2thZ2VzJyA6IGlpSWkxaUlpSSAoICkKIGVsaWYgaWlpMUlpID09ICdyZW1vdmVfdGV4dHVyZXMnIDogb28wb09PICggKQogZWxpZiBpaWkxSWkgPT0gJ3Jlc3RvcmUnIDogUkVTVE9SRSAoICkKIGVsaWYgaWlpMUlpID09ICdyZXN0b3JlX2JhY2t1cCcgOiBpMTFpMU8wTzAgKCBvb28wTyAsIE9PTzAwbzBvTyAsIE8wME9vICkKIGVsaWYgaWlpMUlpID09ICdyZXN0b3JlX2NvbW11bml0eScgOiBpMTExSWlpMTFpMUlpICggb29vME8gLCBPT08wMG8wb08gLCBvTzBPT09PMCAsIE8wME9vICwgaTFJSUlJaWlJMTEgLCBJaWkxSTExICwgSTExSUlJSSApCiBlbGlmIGlpaTFJaSA9PSAncmVzdG9yZV9sb2NhbF9DQicgOiBpSUkxMUlpaSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAncmVzdG9yZV9sb2NhbF9ndWknIDogSUkxaTExaTFpSTFJICggKQogZWxpZiBpaWkxSWkgPT0gJ3Jlc3RvcmVfbG9jYWxfT0UnIDogT08wME8wT28wb28wb28wICggKQogZWxpZiBpaWkxSWkgPT0gJ3Jlc3RvcmVfb3BlbmVsZWMnIDogSTFJTzAwTzBvTzAwbyAoIG9vbzBPICwgT09PMDBvMG9PICwgb08wT09PTzAgKQogZWxpZiBpaWkxSWkgPT0gJ3Jlc3RvcmVfb3B0aW9uJyA6IE9vME8gKCApCiBlbGlmIGlpaTFJaSA9PSAncmVzdG9yZV96aXAnIDogaTFpMTFJaUlJICggT09PMDBvMG9PICkKIGVsaWYgaWlpMUlpID09ICdydW5fYWRkb24nIDogTzBvMG9vbzAwbzAwICggT09PMDBvMG9PICkKIGVsaWYgaWlpMUlpID09ICdydW50ZXN0JyA6IHNwZWVkdGVzdCAuIHJ1bnRlc3QgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ3NlYXJjaF9hZGRvbnMnIDogSTFJSTFpMWlJSWkgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ3NlYXJjaF9idWlsZHMnIDogb09vbzBPICggT09PMDBvMG9PICkKIGVsaWYgaWlpMUlpID09ICdzaG93aW5mbycgOiBpSTFpaUkxMWlpaSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnc2hvd2luZm8yJyA6IEkxMTFJSTEgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ1NvcnRCeScgOiBvT09PT09vT09vbzAgKCBCdWlsZFVSTCAsIHR5cGUgKQogZWxpZiBpaWkxSWkgPT0gJ3NwZWVkX2luc3RydWN0aW9ucycgOiBpaWkxSSAoICkKIGVsaWYgaWlpMUlpID09ICdzcGVlZHRlc3RfbWVudScgOiBJMWkxaTFpICggKQogZWxpZiBpaWkxSWkgPT0gJ3N3aXRjaF9wcm9maWxlX21lbnUnIDogT08wbzAgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ3N3aXRjaF9wcm9maWxlJyA6IE9vMDAwTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAndGV4dF9ndWlkZScgOiBpSWkxMTExMWkxSUkgKCBPT08wMG8wb08gKQogZWxpZiBpaWkxSWkgPT0gJ3RvZ2dsZWFkZG9uJyA6IElJSUlpMWlJSSAsIE9vb2lJaUkxaTFJaSA9IE9PTzAwbzBvTyAuIHNwbGl0ICggJ1tdJyApIDsgaTFJaWkxaWkgKCBJSUlJaTFpSUkgLCBPb29pSWlJMWkxSWkgKSA7IHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdDb250YWluZXIuUmVmcmVzaCcgKQogZWxpZiBpaWkxSWkgPT0gJ3Rvb2xzJyA6IE8wMG8wT08wTyAoICkKIGVsaWYgaWlpMUlpID09ICd0b29sc19hZGRvbnMnIDogaTExMUkgKCApCiBlbGlmIGlpaTFJaSA9PSAndG9vbHNfY2xlYW4nIDogb28wMG9vICggKQogZWxpZiBpaWkxSWkgPT0gJ3Rvb2xzX21pc2MnIDogSWlpSUlpSWlpICggKQogZWxpZiBpaWkxSWkgPT0gJ3R1dG9yaWFsX3Jvb3RfbWVudScgOiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coVmlkZW9zLCBwbHVnaW46Ly9wbHVnaW4udmlkZW8ubmFudHV0cywgcmV0dXJuKScgKQogZWxpZiBpaWkxSWkgPT0gJ3VuaGlkZV9wYXNzd29yZHMnIDogSUlJSUlJICggKQogZWxpZiBpaWkxSWkgPT0gJ3VwZGF0ZScgOiBpaUlpaWkxSUlJSUkgKCApCiBlbGlmIGlpaTFJaSA9PSAndXBkYXRlX2NvbW11bml0eScgOiBvMG8wMDBPT08gKCBvb28wTyAsIE9PTzAwbzBvTyAsIG9PME9PT08wICwgTzAwT28gLCBpMUlJSUlpaUkxMSAsIElpaTFJMTEgLCBJMTFJSUlJICkKIGVsaWYgaWlpMUlpID09ICd1cGxvYWRsb2cnIDogSUlJaUlpMWlJICggKQogZWxpZiBpaWkxSWkgPT0gJ3VzZXJfaW5mbycgOiBPT08wMG9PME8gKCApCiBlbGlmIGlpaTFJaSA9PSAneGJtY19tZW51JyA6IFhCTUNfTWVudSAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAneGJtY3ZlcnNpb24nIDogT29vMG8wME8wTzBvTyAoIE9PTzAwbzBvTyApCiBlbGlmIGlpaTFJaSA9PSAnd2lwZV94Ym1jJyA6IElJSTFJMTExICggaWlpMUlpICkKIHhibWNwbHVnaW4gLiBlbmRPZkRpcmVjdG9yeSAoIGludCAoIHN5cyAuIGFyZ3YgWyAxIF0gKSApICMgZGQ2NzhmYWFlOWFjMTY3YmM4M2FiZjc4ZTVjYjJmM2YwNjg4ZDNhMwo=')