REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 232.25 KB
Close
//proc/self/root/opt/alt/python310/lib/python3.10/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-310.pyc
Text
Base64
bw0NCgAAAAAVHGFp8isEAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABz2g0AAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAGQEZAhsEm0TWhMBAGQEZAVsFFoUZARkCWwVbRZaFgEAZARkCmwXbRhaGAEAeghkBGQLbBRtGVoZAQBXAG4PBABlGnlpAQABAAEAZARkDGwUbRtaGQEAWQBuAXcAeghkBGQNbBxtHVodAQBXAG4PBABlGnmBAQABAAEAZARkDWwebR1aHQEAWQBuAXcAehBkBGQObB9tIFogAQBkBGQPbB9tIVohbSJaIgEAVwBuFwQAZRp5qQEAAQABAGQEZA5sDW0gWiABAGQEZA9sDW0hWiFtIloiAQBZAG4BdwB6CGQEZBBsDW0jWiQBAFcAbh0EAGUaec8BAAEAAQB6CGQEZBBsJW0jWiQBAFcAbgsEAGUaecwBAAEAAQBkBVokWQBuAXcAWQBuAXcAeghkBGQRbBBtJlomAQBXAG4QBABlGnnoAQABAAEARwBkEmQThABkE4MCWiZZAG4BdwBlJoMAWidkFGUnXwBkFWUnXyhlJoMAWilkFmUpXwBkF2UpXypkF2UpXytkF2UpXyxkF2UpXy1kF2UpXy5kGGQZhABlL2UpgwFEAIMBZSlfMGQaZBuEAFoxZTFlKV8yZwBkHKIBWjNlNGUJajWDAWQFZB2FAhkAWjZlNmQEGQBkHWsCWjdlN5ABckdlCWo4WjllOlo7ZTxaPWU6Wj5lOlo/ZUBlQWVCZUNlRGU0ZUVlRmVHZUhlSWcLWkpuLGUJaktaOWVMWk1kHmQfhABaP2cAWkpkBGQFbE5aTmQgoE+hAEQAXRhaUHoLZUqgUWVSZU5lUIMCoQEBAFcAkAFxWgQAZVOQAXlyAQABAAEAWQCQAXFadwBlVGQhZCKEAGVNZCODAUQAgwGDAVpVZCRkJYQAWlZlBGpXZQRqWBcAWllkJlpaZVpkJxcAWltlWWVaFwBaXGU8ZCiDAVpdZCmgXmQqZCKEAGUEal9EAIMBoQFaYJABZENkK2QshAFaYUcAZC1kLoQA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AAAKcHlwYXJzaW5nIG1vZHVsZSAtIENsYXNzZXMgYW5kIG1ldGhvZHMgdG8gZGVmaW5lIGFuZCBleGVjdXRlIHBhcnNpbmcgZ3JhbW1hcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBweXBhcnNpbmcgbW9kdWxlIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIGNyZWF0aW5nIGFuZApleGVjdXRpbmcgc2ltcGxlIGdyYW1tYXJzLCB2cy4gdGhlIHRyYWRpdGlvbmFsIGxleC95YWNjIGFwcHJvYWNoLCBvciB0aGUKdXNlIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBXaXRoIHB5cGFyc2luZywgeW91IGRvbid0IG5lZWQgdG8gbGVhcm4KYSBuZXcgc3ludGF4IGZvciBkZWZpbmluZyBncmFtbWFycyBvciBtYXRjaGluZyBleHByZXNzaW9ucyAtIHRoZSBwYXJzaW5nCm1vZHVsZSBwcm92aWRlcyBhIGxpYnJhcnkgb2YgY2xhc3NlcyB0aGF0IHlvdSB1c2UgdG8gY29uc3RydWN0IHRoZQpncmFtbWFyIGRpcmVjdGx5IGluIFB5dGhvbi4KCkhlcmUgaXMgYSBwcm9ncmFtIHRvIHBhcnNlICJIZWxsbywgV29ybGQhIiAob3IgYW55IGdyZWV0aW5nIG9mIHRoZSBmb3JtCmBgIjxzYWx1dGF0aW9uPiwgPGFkZHJlc3NlZT4hImBgKSwgYnVpbHQgdXAgdXNpbmcgOmNsYXNzOmBXb3JkYCwKOmNsYXNzOmBMaXRlcmFsYCwgYW5kIDpjbGFzczpgQW5kYCBlbGVtZW50cwoodGhlIDpjbGFzczpgJysnPFBhcnNlckVsZW1lbnQuX19hZGRfXz5gIG9wZXJhdG9ycyBjcmVhdGUgOmNsYXNzOmBBbmRgIGV4cHJlc3Npb25zLAphbmQgdGhlIHN0cmluZ3MgYXJlIGF1dG8tY29udmVydGVkIHRvIDpjbGFzczpgTGl0ZXJhbGAgZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHBpcC5fdmVuZG9yLnB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUKc2VsZi1leHBsYW5hdG9yeSBjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdCByZXR1cm5lZCBmcm9tCjpjbGFzczpgUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2AgY2FuIGJlCmFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4gb2JqZWN0IHdpdGggbmFtZWQKYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5CnZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgoKICAtIGV4dHJhIG9yIG1pc3Npbmcgd2hpdGVzcGFjZSAodGhlIGFib3ZlIHByb2dyYW0gd2lsbCBhbHNvIGhhbmRsZQogICAgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogIC0gcXVvdGVkIHN0cmluZ3MKICAtIGVtYmVkZGVkIGNvbW1lbnRzCgoKR2V0dGluZyBTdGFydGVkIC0KLS0tLS0tLS0tLS0tLS0tLS0KVmlzaXQgdGhlIGNsYXNzZXMgOmNsYXNzOmBQYXJzZXJFbGVtZW50YCBhbmQgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIHRvCnNlZSB0aGUgYmFzZSBjbGFzc2VzIHRoYXQgbW9zdCBvdGhlciBweXBhcnNpbmcKY2xhc3NlcyBpbmhlcml0IGZyb20uIFVzZSB0aGUgZG9jc3RyaW5ncyBmb3IgZXhhbXBsZXMgb2YgaG93IHRvOgoKIC0gY29uc3RydWN0IGxpdGVyYWwgbWF0Y2ggZXhwcmVzc2lvbnMgZnJvbSA6Y2xhc3M6YExpdGVyYWxgIGFuZAogICA6Y2xhc3M6YENhc2VsZXNzTGl0ZXJhbGAgY2xhc3NlcwogLSBjb25zdHJ1Y3QgY2hhcmFjdGVyIHdvcmQtZ3JvdXAgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIDpjbGFzczpgV29yZGAKICAgY2xhc3MKIC0gc2VlIGhvdyB0byBjcmVhdGUgcmVwZXRpdGl2ZSBleHByZXNzaW9ucyB1c2luZyA6Y2xhc3M6YFplcm9Pck1vcmVgCiAgIGFuZCA6Y2xhc3M6YE9uZU9yTW9yZWAgY2xhc3NlcwogLSB1c2UgOmNsYXNzOmAnKyc8QW5kPmAsIDpjbGFzczpgJ3wnPE1hdGNoRmlyc3Q+YCwgOmNsYXNzOmAnXic8T3I+YCwKICAgYW5kIDpjbGFzczpgJyYnPEVhY2g+YCBvcGVyYXRvcnMgdG8gY29tYmluZSBzaW1wbGUgZXhwcmVzc2lvbnMgaW50bwogICBtb3JlIGNvbXBsZXggb25lcwogLSBhc3NvY2lhdGUgbmFtZXMgd2l0aCB5b3VyIHBhcnNlZCByZXN1bHRzIHVzaW5nCiAgIDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZWAKIC0gYWNjZXNzIHRoZSBwYXJzZWQgZGF0YSwgd2hpY2ggaXMgcmV0dXJuZWQgYXMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AKICAgb2JqZWN0CiAtIGZpbmQgc29tZSBoZWxwZnVsIGV4cHJlc3Npb24gc2hvcnQtY3V0cyBsaWtlIDpjbGFzczpgZGVsaW1pdGVkTGlzdGAKICAgYW5kIDpjbGFzczpgb25lT2ZgCiAtIGZpbmQgbW9yZSB1c2VmdWwgY29tbW9uIGV4cHJlc3Npb25zIGluIHRoZSA6Y2xhc3M6YHB5cGFyc2luZ19jb21tb25gCiAgIG5hbWVzcGFjZSBjbGFzcwp6BTIuNC43ehUzMCBNYXIgMjAyMCAwMDo0MyBVVEN6KlBhdWwgTWNHdWlyZSA8cHRtY2dAdXNlcnMuc291cmNlZm9yZ2UubmV0PukAAAAATikB2gNyZWYpAdoIZGF0ZXRpbWUpAdoKaXRlbWdldHRlcikB2gV3cmFwcykB2g5jb250ZXh0bWFuYWdlcikB2gtmaWx0ZXJmYWxzZSkB2gxpZmlsdGVyZmFsc2UpAdoFUkxvY2spAdoISXRlcmFibGUpAtoOTXV0YWJsZU1hcHBpbmfaB01hcHBpbmcpAdoLT3JkZXJlZERpY3QpAdoPU2ltcGxlTmFtZXNwYWNlYwAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAHMMAAAAZQBaAWQAWgJkAVMAKQJyDgAAAE4pA9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX6kAchIAAAByEgAAAPqHL2J1aWxkZGlyL2J1aWxkL0JVSUxEUk9PVC9hbHQtcHl0aG9uMzEwLXBpcC0yMS4zLjEtNS5lbDgueDg2XzY0L29wdC9hbHQvcHl0aG9uMzEwL2xpYi9weXRob24zLjEwL3NpdGUtcGFja2FnZXMvcGlwL192ZW5kb3IvcHlwYXJzaW5nLnB5cg4AAACWAAAA8wIAAAAMAHIOAAAAYUECAAAKICAgIEEgY3Jvc3MtdmVyc2lvbiBjb21wYXRpYmlsaXR5IGNvbmZpZ3VyYXRpb24gZm9yIHB5cGFyc2luZyBmZWF0dXJlcyB0aGF0IHdpbGwgYmUKICAgIHJlbGVhc2VkIGluIGEgZnV0dXJlIHZlcnNpb24uIEJ5IHNldHRpbmcgdmFsdWVzIGluIHRoaXMgY29uZmlndXJhdGlvbiB0byBUcnVlLAogICAgdGhvc2UgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgaW4gcHJpb3IgdmVyc2lvbnMgZm9yIGNvbXBhdGliaWxpdHkgZGV2ZWxvcG1lbnQKICAgIGFuZCB0ZXN0aW5nLgoKICAgICAtIGNvbGxlY3RfYWxsX0FuZF90b2tlbnMgLSBmbGFnIHRvIGVuYWJsZSBmaXggZm9yIElzc3VlICM2MyB0aGF0IGZpeGVzIGVycm9uZW91cyBncm91cGluZwogICAgICAgb2YgcmVzdWx0cyBuYW1lcyB3aGVuIGFuIEFuZCBleHByZXNzaW9uIGlzIG5lc3RlZCB3aXRoaW4gYW4gT3Igb3IgTWF0Y2hGaXJzdDsgc2V0IHRvCiAgICAgICBUcnVlIHRvIGVuYWJsZSBidWdmaXggcmVsZWFzZWQgaW4gcHlwYXJzaW5nIDIuMy4wLCBvciBGYWxzZSB0byBwcmVzZXJ2ZQogICAgICAgcHJlLTIuMy4wIGhhbmRsaW5nIG9mIG5hbWVkIHJlc3VsdHMKVGGTAwAACkRpYWdub3N0aWMgY29uZmlndXJhdGlvbiAoYWxsIGRlZmF1bHQgdG8gRmFsc2UpCiAgICAgLSB3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgICBuYW1lIGlzIGRlZmluZWQgb24gYSBNYXRjaEZpcnN0IG9yIE9yIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSBBbmQgc3ViZXhwcmVzc2lvbnMKICAgICAgIChvbmx5IHdhcm5zIGlmIF9fY29tcGF0X18uY29sbGVjdF9hbGxfQW5kX3Rva2VucyBpcyBGYWxzZSkKICAgICAtIHdhcm5fdW5ncm91cGVkX25hbWVkX3Rva2Vuc19pbl9jb2xsZWN0aW9uIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIGNvbnRhaW5pbmcgZXhwcmVzc2lvbiB3aXRoIHVuZ3JvdXBlZCBzdWJleHByZXNzaW9ucyB0aGF0IGFsc28KICAgICAgIGhhdmUgcmVzdWx0cyBuYW1lcwogICAgIC0gd2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJkIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBhIEZvcndhcmQgaXMgZGVmaW5lZAogICAgICAgd2l0aCBhIHJlc3VsdHMgbmFtZSwgYnV0IGhhcyBubyBjb250ZW50cyBkZWZpbmVkCiAgICAgLSB3YXJuX29uX211bHRpcGxlX3N0cmluZ19hcmdzX3RvX29uZW9mIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBvbmVPZiBpcwogICAgICAgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggbXVsdGlwbGUgc3RyIGFyZ3VtZW50cwogICAgIC0gZW5hYmxlX2RlYnVnX29uX25hbWVkX2V4cHJlc3Npb25zIC0gZmxhZyB0byBhdXRvLWVuYWJsZSBkZWJ1ZyBvbiBhbGwgc3Vic2VxdWVudAogICAgICAgY2FsbHMgdG8gUGFyc2VyRWxlbWVudC5zZXROYW1lKCkKRmMBAAAAAAAAAAAAAAACAAAABQAAAEMAAABzJAAAAGcAfABdDn0BfAGgAGQAoQFzDnwBoABkAaEBcgJ8AZECcQJTACkCWgdlbmFibGVfWgV3YXJuX6kB2gpzdGFydHN3aXRoKQLaAi4w2gJubXISAAAAchIAAAByEwAAANoKPGxpc3Rjb21wPrwAAADzAgAAACQAchkAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAcxwAAABkAXQAXwFkAXQAXwJkAXQAXwNkAXQAXwRkAFMAqQJOVCkF2ghfX2RpYWdfX9opd2Fybl9tdWx0aXBsZV90b2tlbnNfaW5fbmFtZWRfYWx0ZXJuYXRpb27aKXdhcm5fdW5ncm91cGVkX25hbWVkX3Rva2Vuc19pbl9jb2xsZWN0aW9u2h53YXJuX25hbWVfc2V0X29uX2VtcHR5X0ZvcndhcmTaJXdhcm5fb25fbXVsdGlwbGVfc3RyaW5nX2FyZ3NfdG9fb25lb2ZyEgAAAHISAAAAchIAAAByEwAAANoUX2VuYWJsZV9hbGxfd2FybmluZ3O+AAAAcwgAAAAGAQYBBgEKAXIhAAAAKXTaC19fdmVyc2lvbl9f2g9fX3ZlcnNpb25UaW1lX1/aCl9fYXV0aG9yX1/aCl9fY29tcGF0X19yHAAAANoDQW5k2g9DYXNlbGVzc0tleXdvcmTaD0Nhc2VsZXNzTGl0ZXJhbNoKQ2hhcnNOb3RJbtoHQ29tYmluZdoERGljdNoERWFjaNoFRW1wdHnaCkZvbGxvd2VkQnnaB0ZvcndhcmTaCkdvVG9Db2x1bW7aBUdyb3Vw2gdLZXl3b3Jk2gdMaW5lRW5k2glMaW5lU3RhcnTaB0xpdGVyYWzaClByZWNlZGVkQnnaCk1hdGNoRmlyc3TaB05vTWF0Y2jaBk5vdEFuedoJT25lT3JNb3Jl2ghPbmx5T25jZdoIT3B0aW9uYWzaAk9y2hJQYXJzZUJhc2VFeGNlcHRpb27aE1BhcnNlRWxlbWVudEVuaGFuY2XaDlBhcnNlRXhjZXB0aW9u2g9QYXJzZUV4cHJlc3Npb27aE1BhcnNlRmF0YWxFeGNlcHRpb27aDFBhcnNlUmVzdWx0c9oUUGFyc2VTeW50YXhFeGNlcHRpb27aDVBhcnNlckVsZW1lbnTaDFF1b3RlZFN0cmluZ9oZUmVjdXJzaXZlR3JhbW1hckV4Y2VwdGlvbtoFUmVnZXjaBlNraXBUb9oJU3RyaW5nRW5k2gtTdHJpbmdTdGFydNoIU3VwcHJlc3PaBVRva2Vu2g5Ub2tlbkNvbnZlcnRlctoFV2hpdGXaBFdvcmTaB1dvcmRFbmTaCVdvcmRTdGFydNoKWmVyb09yTW9yZdoEQ2hhctoJYWxwaGFudW1z2gZhbHBoYXPaCmFscGhhczhiaXTaC2FueUNsb3NlVGFn2gphbnlPcGVuVGFn2g1jU3R5bGVDb21tZW502gNjb2zaEmNvbW1hU2VwYXJhdGVkTGlzdNoQY29tbW9uSFRNTEVudGl0edoMY291bnRlZEFycmF52g9jcHBTdHlsZUNvbW1lbnTaD2RibFF1b3RlZFN0cmluZ9oPZGJsU2xhc2hDb21tZW502g1kZWxpbWl0ZWRMaXN02gZkaWN0T2baDmRvd25jYXNlVG9rZW5z2gVlbXB0edoHaGV4bnVtc9oLaHRtbENvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaBGxpbmXaB2xpbmVFbmTaCWxpbmVTdGFydNoGbGluZW5v2gxtYWtlSFRNTFRhZ3PaC21ha2VYTUxUYWdz2g5tYXRjaE9ubHlBdENvbNoRbWF0Y2hQcmV2aW91c0V4cHLaFG1hdGNoUHJldmlvdXNMaXRlcmFs2gpuZXN0ZWRFeHBy2g9udWxsRGVidWdBY3Rpb27aBG51bXPaBW9uZU9m2gdvcEFzc29j2hJvcGVyYXRvclByZWNlZGVuY2XaCnByaW50YWJsZXPaCHB1bmM4Yml02hJweXRob25TdHlsZUNvbW1lbnTaDHF1b3RlZFN0cmluZ9oMcmVtb3ZlUXVvdGVz2hFyZXBsYWNlSFRNTEVudGl0edoLcmVwbGFjZVdpdGjaCnJlc3RPZkxpbmXaD3NnbFF1b3RlZFN0cmluZ9oGc3Jhbmdl2glzdHJpbmdFbmTaC3N0cmluZ1N0YXJ02hB0cmFjZVBhcnNlQWN0aW9u2g11bmljb2RlU3RyaW5n2gx1cGNhc2VUb2tlbnPaDXdpdGhBdHRyaWJ1dGXaDWluZGVudGVkQmxvY2vaD29yaWdpbmFsVGV4dEZvctoHdW5ncm91cNoNaW5maXhOb3RhdGlvbtoLbG9jYXRlZEV4cHLaCXdpdGhDbGFzc9oKQ2xvc2VNYXRjaNoIdG9rZW5NYXDaEHB5cGFyc2luZ19jb21tb27aEXB5cGFyc2luZ191bmljb2Rl2gt1bmljb2RlX3NldNoWY29uZGl0aW9uQXNQYXJzZUFjdGlvbtoCcmXpAwAAAGMBAAAAAAAAAAAAAAADAAAACAAAAEMAAABzYAAAAHQAfAB0AYMCcgd8AFMAegV0AnwAgwFXAFMABAB0A3kvAQABAAEAdAF8AIMBoAR0BaAGoQBkAaECfQF0B2QCgwF9AnwCoAhkA2QEhAChAQEAfAKgCXwBoQEGAFkAUwB3ACkFYR8BAABEcm9wLWluIHJlcGxhY2VtZW50IGZvciBzdHIob2JqKSB0aGF0IHRyaWVzIHRvIGJlIFVuaWNvZGUKICAgICAgICBmcmllbmRseS4gSXQgZmlyc3QgdHJpZXMgc3RyKG9iaikuIElmIHRoYXQgZmFpbHMgd2l0aAogICAgICAgIGEgVW5pY29kZUVuY29kZUVycm9yLCB0aGVuIGl0IHRyaWVzIHVuaWNvZGUob2JqKS4gSXQgdGhlbgogICAgICAgIDwgcmV0dXJucyB0aGUgdW5pY29kZSBvYmplY3QgfCBlbmNvZGVzIGl0IHdpdGggdGhlIGRlZmF1bHQKICAgICAgICBlbmNvZGluZyB8IC4uLiA+LgogICAgICAgINoReG1sY2hhcnJlZnJlcGxhY2V6BiYjXGQrO2MBAAAAAAAAAAAAAAABAAAABgAAAFMAAABzJAAAAGQBdAB0AXwAZAIZAGQDZASF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Y2sgaW4gdGhlIHN0YWNrIHRyYWNlIHRvIGxpc3QgZXhwcmVzc2lvbgogICAgICAgICAgIGFuZCBmdW5jdGlvbiBuYW1lczsgaWYgTm9uZSwgdGhlIGZ1bGwgc3RhY2sgdHJhY2UgbmFtZXMgd2lsbCBiZSBsaXN0ZWQ7IGlmIDAsIG9ubHkKICAgICAgICAgICB0aGUgZmFpbGluZyBpbnB1dCBsaW5lLCBtYXJrZXIsIGFuZCBleGNlcHRpb24gc3RyaW5nIHdpbGwgYmUgc2hvd24KCiAgICAgICAgUmV0dXJucyBhIG11bHRpLWxpbmUgc3RyaW5nIGxpc3RpbmcgdGhlIFBhcnNlckVsZW1lbnRzIGFuZC9vciBmdW5jdGlvbiBuYW1lcyBpbiB0aGUKICAgICAgICBleGNlcHRpb24ncyBzdGFjayB0cmFjZS4KCiAgICAgICAgTm90ZTogdGhlIGRpYWdub3N0aWMgb3V0cHV0IHdpbGwgaW5jbHVkZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBleHByZXNzaW9ucwogICAgICAgIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBUaGVzZSByZXByZXNlbnRhdGlvbnMgd2lsbCBiZSBtb3JlIGhlbHBmdWwgaWYgeW91IHVzZSBgc2V0TmFtZWAgdG8KICAgICAgICBnaXZlIGlkZW50aWZpYWJsZSBuYW1lcyB0byB5b3VyIGV4cHJlc3Npb25zLiBPdGhlcndpc2UgdGhleSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBzdHJpbmcKICAgICAgICBmb3Jtcywgd2hpY2ggbWF5IGJlIGNyeXB0aWMgdG8gcmVhZC4KCiAgICAgICAgZXhwbGFpbigpIGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIFB5dGhvbiAzLgogICAgICAgIHIBAAAATvoBIHKtAAAA+gFeegh7MH06IHsxfSkB2gdjb250ZXh0ctMAAAApAtoJcGFyc2VJbXBs2g1fcGFyc2VOb0NhY2hleg17MH0uezF9IC0gezJ9egd7MH0uezF9KQLaB3dyYXBwZXJ6CDxtb2R1bGU+egN7MH3aAQopF9oHaW5zcGVjdHKjAAAA2hFnZXRyZWN1cnNpb25saW1pdHKeAAAAcj4AAADa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ZW5zLiBJZiBwYXNzZWQKICAgICAgICBhIG5vbi1pbnRlZ2VyIGFyZ3VtZW50IChtb3N0IGxpa2VseSBhIHN0cmluZyksIGl0IHdpbGwgdXNlIGBgZGljdGBgCiAgICAgICAgc2VtYW50aWNzIGFuZCBwb3AgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZnJvbSBhbnkgZGVmaW5lZCByZXN1bHRzCiAgICAgICAgbmFtZXMuIEEgc2Vjb25kIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGFyZ3VtZW50IGlzIHN1cHBvcnRlZCwganVzdCBhcyBpbgogICAgICAgIGBgZGljdC5wb3AoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRlZiByZW1vdmVfZmlyc3QodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoMCkKICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzAnLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5hZGRQYXJzZUFjdGlvbihyZW1vdmVfZmlyc3QpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzEyMycsICczMjEnXQoKICAgICAgICAgICAgbGFiZWwgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgcGF0dCA9IGxhYmVsKCJMQUJFTCIpICsgT25lT3JNb3JlKFdvcmQobnVtcykpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQoKICAgICAgICAgICAgIyBVc2UgcG9wKCkgaW4gYSBwYXJzZSBhY3Rpb24gdG8gcmVtb3ZlIG5hbWVkIHJlc3VsdCAobm90ZSB0aGF0IGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgbm90CiAgICAgICAgICAgICMgcmVtb3ZlZCBmcm9tIGxpc3QgZm9ybSBvZiByZXN1bHRzKQogICAgICAgICAgICBkZWYgcmVtb3ZlX0xBQkVMKHRva2Vu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bGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgc3NuX2V4cHIgPSBSZWdleChyIlxkXGRcZC1cZFxkLVxkXGRcZFxkIikKICAgICAgICAgICAgaG91c2VfbnVtYmVyX2V4cHIgPSBTdXBwcmVzcygnIycpICsgV29yZChudW1zLCBhbHBoYW51bXMpCiAgICAgICAgICAgIHVzZXJfZGF0YSA9IChHcm91cChob3VzZV9udW1iZXJfZXhwcikoImhvdXNlX251bWJlciIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoc3NuX2V4cHIpKCJzc24iKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKGludGVnZXIpKCJhZ2UiKSkKICAgICAgICAgICAgdXNlcl9pbmZvID0gT25lT3JNb3JlKHVzZXJfZGF0YSkKCiAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfaW5mby5wYXJzZVN0cmluZygiMjIgMTExLTIyLTMzMzMgIzIyMUIiKQogICAgICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICBwcmludChpdGVtLmdldE5hbWUoKSwgJzonLCBpdGVtWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5yrQAAAHIBAAAAKQJyAQAAAHKYAAAAKQlyLwEAAHIwAQAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy3gAAAHI4AQAA2gRuZXh0clgBAAByagEAAHJnAQAAKQJy0wAAANoDcGFychIAAAByEgAAAHITAAAA2gdnZXROYW1lAQQAAHMYAAAABhkGAQYBCAEEAQoBBAIMAQ4BHgESAQQCehRQYXJzZVJlc3VsdHMuZ2V0TmFtZXIBAAAAYwUAAAAAAAAAAAAAAAwAAAAPAAAAQwAAAHNwAQAAZwB9BWQBfQZ8A3ISfAWgAHwBdAF8AKACoQCDARcAoQEBAG4FfAWgAGQCoQEBAHwCcrN8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IGBwcHJpbnQucHByaW50IDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnBwcmludD5gXyAuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbJ2ZuYScsCiAgICAgICAgICAgICBbJ2EnLAogICAgICAgICAgICAgICdiJywKICAgICAgICAgICAgICBbJygnLCAnZm5iJywgWydjJywgJ2QnLCAnMjAwJ10sICcpJ10sCiAgICAgICAgICAgICAgJzEwMCddXQogICAgICAgIE4pAtoGcHByaW50ciwBAACpA3LTAAAActIAAABybgEAAHISAAAAchIAAAByEwAAAHK+AQAAagQAAHMCAAAAIBl6E1BhcnNlUmVzdWx0cy5wcHJpbnRjAQAAAAAAAAAAAAAAAQAAAAUAAABDAAAAcy4AAAB8AGoAfABqAaACoQB8AGoDZAB1AXIPfACgA6EAcBBkAHwAagR8AGoFZgRmAlMAcqoAAAApBnI1AQAAcjgBAAByfgEAAHIwAQAAcjEBAAByLwEAAHLjAAAAchIAAAByEgAAAHITAAAA2gxfX2dldHN0YXRlX1+GBAAAcw4AAAAEAQgBFAEEAQQBAv0E/3oZUGFyc2VSZXN1bHRzLl9fZ2V0c3RhdGVfX2MCAAAAAAAAAAAAAAAEAAAABQAAAEMAAABzUAAA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BgAAAEMAAABzRgAAAHwBfQJkAXwABAADAGsAcg50AHwCgwFrAHIabgIBAG4KfAJ8AGQCGAAZAGQDawJyGmQCUwB8AHwCoAFkA2QBfAChAxgAUwApBGHxAQAAUmV0dXJucyBjdXJyZW50IGNvbHVtbiB3aXRoaW4gYSBzdHJpbmcsIGNvdW50aW5nIG5ld2xpbmVzIGFzIGxpbmUgc2VwYXJhdG9ycy4KICAgVGhlIGZpcnN0IGNvbHVtbiBpcyBudW1iZXIgMS4KCiAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZQogICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdgIGZvciBtb3JlCiAgIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIGBgPFRBQj5gYCBzLCBhbmQgc3VnZ2VzdGVkCiAgIG1ldGhvZHMgdG8gbWFpbnRhaW4gYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZQogICBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICByAQAAAHKtAAAAcvoAAAApAnLeAAAA2gVyZmluZCkDcs8AAADaBHN0cmdysAAAAHISAAAAchIAAAByEwAAAHJbAAAAuwQAAHMEAAAABAtCAXJbAAAAYwIAAAAAAAAAAAAAAAIAAAAFAAAAQwAAAHMSAAAAfAGgAGQBZAJ8AKEDZAMXAFMAKQRh+QEAAFJldHVybnMgY3VycmVudCBsaW5lIG51bWJlciB3aXRoaW4gYSBzdHJpbmcsIGNvdW50aW5nIG5ld2xpbmVzIGFzIGxpbmUgc2VwYXJhdG9ycy4KICAgIFRoZSBmaXJzdCBsaW5lIGlzIG51bWJlciAxLgoKICAgIE5vdGUgLSB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJz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IEV4Y2VwdGlvbjogRXhwZWN0ZWQgVzooMDEyMy4uLikgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgICAgICBXb3JkKG51bXMpLnNldE5hbWUoImludGVnZXIiKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBpbnRlZ2VyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICD6CUV4cGVjdGVkICkFcisBAAByEQIAAHIcAAAA2iFlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnPaCHNldERlYnVncnwBAAByEgAAAHISAAAAchMAAADaB3NldE5hbWWsBQAAcwoAAAAGCQwBBgEIAQQBehVQYXJzZXJFbGVtZW50LnNldE5hbWVjAwAAAAAAAAAAAAAAAwAAAAQAAABDAAAAcwwAAAB8AKAAfAF8AqECUwApAWFPAwAACiAgICAgICAgRGVmaW5lIG5hbWUgZm9yIHJlZmVyZW5jaW5nIG1hdGNoaW5nIHRva2VucyBhcyBhIG5lc3RlZCBhdHRyaWJ1dGUKICAgICAgICBvZiB0aGUgcmV0dXJuZWQgcGFyc2UgcmVzdWx0cy4KICAgICAgICBOT1RFOiB0aGlzIHJldHVybnMgYSAqY29weSogb2YgdGhlIG9yaWdpbmFsIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgb2JqZWN0OwogICAgICAgIHRoaXMgaXMgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBkZWZpbmUgYSBiYXNpYyBlbGVtZW50LCBzdWNoIGFzIGFuCiAgICAgICAgaW50ZWdlciwgYW5kIHJlZmVyZW5jZSBpdCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aCBkaWZmZXJlbnQgbmFtZXMuCgogICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgcmVzdWx0cyBuYW1lcyB1c2luZyB0aGUgYWJicmV2aWF0ZWQgc3ludGF4LAogICAgICAgIGBgZXhwcigibmFtZSIpYGAgaW4gcGxhY2Ugb2YgYGBleHByLnNldFJlc3VsdHNOYW1lKCJuYW1lIilgYAogICAgICAgIC0gc2VlIDpjbGFzczpgX19jYWxsX19gLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoIm1vbnRoIikgKyAnLycKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKCiAgICAgICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICkB2g9fc2V0UmVzdWx0c05hbWWpA3LTAAAAcisBAADaDmxpc3RBbGxNYXRjaGVzchIAAAByEgAAAHITAAAA2g5zZXRSZXN1bHRzTmFtZbsFAABzAgAAAAwVehxQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYwMAAAAAAAAAAAAAAAQAAAADAAAAQwAAAHM0AAAAfACgAKEAfQN8AaABZAGhAXIRfAFkAGQChQIZAH0BZAN9AnwBfANfAnwCDAB8A18DfANTACkETtoBKnKYAAAAVCkEcn4BAADaCGVuZHN3aXRocgYCAAByEgIAACkEctMAAAByKwEAAHIeAgAA2gduZXdzZWxmchIAAAByEgAAAHITAAAAchwCAADSBQAAcw4AAAAIAQoBDAEEAQYBCAEEAXodUGFyc2VyRWxlbWVudC5fc2V0UmVzdWx0c05hbWVUYwIAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHNCAAAAfAFyFHwAagCJAGQGhwBmAWQCZAOECX0CiAB8Al8BfAJ8AF8AfABTAHQCfABqAGQEgwJyH3wAagBqAXwAXwB8AFMAKQd6p01ldGhvZCB0byBpbnZva2UgdGhlIFB5dGhvbiBwZGIgZGVidWdnZXIgd2hlbiB0aGlzIGVsZW1lbnQgaXMKICAgICAgICAgICBhYm91dCB0byBiZSBwYXJzZWQuIFNldCBgYGJyZWFrRmxhZ2BgIHRvIFRydWUgdG8gZW5hYmxlLCBGYWxzZSB0bwogICAgICAgICAgIGRpc2FibGUuCiAgICAgICAgVGMEAAAAAAAAAAAAAAAFAAAABQAAABMAAABzHgAAAGQBZABsAH0EfASgAaEAAQCIAHwAfAF8AnwDgwRTAHIkAQAAKQLaA3BkYtoJc2V0X3RyYWNlKQVy1AEAAHLPAAAA2glkb0FjdGlvbnPaDGNhbGxQcmVQYXJzZXIjAgAAqQHaDF9wYXJzZU1ldGhvZHISAAAAchMAAADaB2JyZWFrZXLiBQAAcwYAAAAIAQgCDgF6J1BhcnNlckVsZW1lbnQuc2V0QnJlYWsuPGxvY2Fscz4uYnJlYWtlctoUX29yaWdpbmFsUGFyc2VNZXRob2ROqQJUVCkD2gZfcGFyc2VyKgIAAHJdAQAAKQNy0wAAANoJYnJlYWtGbGFncikCAAByEgAAAHInAgAAchMAAADaCHNldEJyZWFr2wUAAHMSAAAABAUGAQ4BBgUGAQQEDP4KAQQBehZQYXJzZXJFbGVtZW50LnNldEJyZWFrYwEAAAAAAAAAAAAAAAMAAAAFAAAATwAAAHNYAAAAdAB8AYMBZAFnAWsCcgxnAHwAXwF8AFMAdAJkAmQDhAB8AUQAgwGDAXMZdANkBIMBggF0AHQEdAV0AHwBgwGDAoMBfABfAXwCoAZkBWQGoQJ8AF8HfABTACkHYZIHAAAKICAgICAgICBEZWZpbmUgb25lIG9yIG1vcmUgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gc3VjY2Vzc2Z1bGx5IG1hdGNoaW5nIHBhcnNlIGVsZW1lbnQgZGVmaW5pdGlvbi4KICAgICAgICBQYXJzZSBhY3Rpb24gZm4gaXMgYSBjYWxsYWJsZSBtZXRob2Qgd2l0aCAwLTMgYXJndW1lbnRzLCBjYWxsZWQgYXMgYGBmbihzLCBsb2MsIHRva3MpYGAgLAogICAgICAgIGBgZm4obG9jLCB0b2tzKWBgICwgYGBmbih0b2tzKWBgICwgb3IganVzdCBgYGZuKClgYCAsIHdoZXJlOgoKICAgICAgICAtIHMgICA9IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVpbmcgcGFyc2VkIChzZWUgbm90ZSBiZWxvdykKICAgICAgICAtIGxvYyA9IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nCiAgICAgICAgLSB0b2tzID0gYSBsaXN0IG9mIHRoZSBtYXRjaGVkIHRva2VucywgcGFja2FnZWQgYXMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0CgogICAgICAgIElmIHRoZSBmdW5jdGlvbnMgaW4gZm5zIG1vZGlmeSB0aGUgdG9rZW5zLCB0aGV5IGNhbiByZXR1cm4gdGhlbSBhcyB0aGUgcmV0dXJuCiAgICAgICAgdmFsdWUgZnJvbSBmbiwgYW5kIHRoZSBtb2RpZmllZCBsaXN0IG9mIHRva2VucyB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsLgogICAgICAgIE90aGVyd2lzZSwgZm4gZG9lcyBub3QgbmVlZCB0byByZXR1cm4gYW55IHZhbHVlLgoKICAgICAgICBJZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgcGFyc2UgYWN0aW9uLCBhbGwgcHJldmlvdXNseSBhZGRlZCBwYXJzZSBhY3Rpb25zIGZvciB0aGlzCiAgICAgICAgZXhwcmVzc2lvbiBhcmUgY2xlYXJlZC4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgLSBjYWxsRHVyaW5nVHJ5ID0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaW5kaWNhdGUgaWYgcGFyc2UgYWN0aW9uIHNob3VsZCBiZSBydW4gZHVyaW5nIGxvb2thaGVhZHMgYW5kIGFsdGVybmF0ZSB0ZXN0aW5nCgogICAgICAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICAgICAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIDpjbGFzczpgcGFyc2VTdHJpbmcgZm9yIG1vcmUKICAgICAgICBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBgYDxUQUI+YGAgcywgYW5kIHN1Z2dlc3RlZAogICAgICAgIG1ldGhvZHMgdG8gbWFpbnRhaW4gYSBjb25zaXN0ZW50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eCBncmFtbWFycykgY2FuIGltbWVkaWF0ZWx5IHJldHVybiBhIGNhY2hlZCB2YWx1ZSwKICAgICAgICAgICBpbnN0ZWFkIG9mIHJlLWV4ZWN1dGluZyBwYXJzaW5nL3ZhbGlkYXRpbmcgY29kZS4gIE1lbW9pemluZyBpcyBkb25lIG9mCiAgICAgICAgICAgYm90aCB2YWxpZCByZXN1bHRzIGFuZCBwYXJzaW5nIGV4Y2VwdGlvbnMuCgogICAgICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PSBgYDEyOGBgKSAtIGlmIGFuIGludGVnZXIgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YC4KICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIGBgZW5hYmxlUGFja3JhdCgpYGAgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICBpbXBvcnRpbmcgcHlwYXJzaW5nLgoKICAgICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICAgIGZyb20gcGlwLl92ZW5kb3IgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHckUAAADaD19wYWNrcmF0RW5hYmxlZHJoAgAAcnoCAABydAIAAHJ/AgAAciwCAAApAdoQY2FjaGVfc2l6ZV9saW1pdHISAAAAchIAAAByEwAAANoNZW5hYmxlUGFja3JhdEoHAABzDgAAAAYbBgEIAQwBDAIMAQT6ehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRjAwAAAAAAAAAAAAAACAAAAAoAAABDAAAAc8AAAAB0AKABoQABAHwAagJzC3wAoAOhAAEAfABqBEQAXQZ9A3wDoAOhAAEAcQ58AGoFcxx8AaAGoQB9AXoifACgB3wBZAGhAlwCfQR9BXwCcjx8AKAIfAF8BKECfQR0CYMAdAqDABcAfQZ8BqAHfAF8BKECAQBXAHwFUwBXAHwFUwAEAHQLeV8BAH0HAQB6FXQAagxySoIAdA18B2QCZAODA2QDdQFyWXwAoA58B2oPoQF8B18PfAeCAWQDfQd+B3cBdwApBGH7BQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIFJldHVybnMgdGhlIHBhcnNlZCBkYXRhIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdCwgd2hpY2ggbWF5IGJlCiAgICAgICAgYWNjZXNzZWQgYXMgYSBsaXN0LCBvciBhcyBhIGRpY3Qgb3Igb2JqZWN0IHdpdGggYXR0cmlidXRlcyBpZiB0aGUgZ2l2ZW4gcGFyc2VyCiAgICAgICAgaW5jbHVkZXMgcmVzdWx0cyBuYW1lcy4KCiAgICAgICAgSWYgeW91IHdhbnQgdGhlIGdyYW1tYXIgdG8gcmVxdWlyZSB0aGF0IHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGJlCiAgICAgICAgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgdGhlbiBzZXQgYGBwYXJzZUFsbGBgIHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBgYFN0cmluZ0VuZCgpYGApLgoKICAgICAgICBOb3RlOiBgYHBhcnNlU3RyaW5nYGAgaW1wbGljaXRseSBjYWxscyBgYGV4cGFuZHRhYnMoKWBgIG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIGBgbG9jYGAgYXJndW1lbnQgdG8gaW5kZXggaW50byB0aGUKICAgICAgICBzdHJpbmcgYmVpbmcgcGFyc2VkLCB5b3UgY2FuIGVuc3VyZSB5b3UgaGF2ZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgaW5wdXQKICAgICAgICBzdHJpbmcgYnk6CgogICAgICAgIC0gY2FsbGluZyBgYHBhcnNlV2l0aFRhYnNgYCBvbiB5b3VyIGdyYW1tYXIgYmVmb3JlIGNhbGxpbmcgYGBwYXJzZVN0cmluZ2BgCiAgICAgICAgICAoc2VlIDpjbGFzczpgcGFyc2VXaXRoVGFic2ApCiAgICAgICAgLSBkZWZpbmUgeW91ciBwYXJzZSBhY3Rpb24gdXNpbmcgdGhlIGZ1bGwgYGAocywgbG9jLCB0b2tzKWBgIHNpZ25hdHVyZSwgYW5kCiAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgYGBzYGAgYXJndW1lbnQKICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgIGBgcGFyc2VTdHJpbmdgYAoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJykgICMgLT4gWydhYWFhYSddCiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJywgcGFyc2VBbGw9VHJ1ZSkgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBlbmQgb2YgdGV4dAogICAgICAgIHIBAAAAcgABAABOKRByRQAAAHKAAgAAcg8CAADaCnN0cmVhbWxpbmVyDQIAAHIMAgAA2gpleHBhbmR0YWJzciwCAAByQQIAAHItAAAAckoAAAByPgAAANoSdmVyYm9zZV9zdGFja3RyYWNlcvQBAAByAQIAAHIAAQAAKQhy0wAAAHLUAQAA2ghwYXJzZUFsbHI7AgAAcs8AAAByTgIAANoCc2VyCAEAAHISAAAAchIAAAByEwAAANoLcGFyc2VTdHJpbmdtBwAAczAAAAAIIQYBCAEKAgoBBgEIAQIBEAEEAQwBDAEOAQQKAvMEDQ73BgECARADDgEEAQiAAvl6GVBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdjBAAAAAAAAAAAAAAADwAAAAoAAABjAAAAc2IBAACBAHwAagBzCHwAoAGhAAEAfABqAkQAXQZ9BHwEoAGhAAEAcQt8AGoDcxt0BHwBgwGgBaEAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CaAKoQABAGQBfQl6YnwGfAVrAXKHfAl8AmsAcop6EHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4NBAB0C3lTAQABAAEAfApkBBcAfQZZAG4pdwB8C3wGawRyeHwJZAQ3AH0JfAx8CnwLZgNWAAEAfANydXwHfAF8BoMCfQ18DXwGawRycHwLfQZuDHwGZAQ3AH0Gbgd8C30GbgR8CmQEFwB9BnwGfAVrAXKNfAl8AmsAczZXAGQGUwBXAGQGUwBXAGQGUwBXAGQGUwAEAHQMebABAH0OAQB6FXQJag1ym4IAdA58DmQFZAaDA2QGdQFyqnwAoA98DmoQoQF8Dl8QfA6CAWQGfQ5+DncBdwApB2FxBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBgYG1heE1hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzY2FubmluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuICBJZgogICAgICAgIGBgb3ZlcmxhcGBgIGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFyc2luZwogICAgICAgIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB0YWJzLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2Vucywgc3RhcnQsIGVuZCBpbiBXb3JkKGFscGhhcykuc2NhblN0cmluZyhzb3VyY2UpOgogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgJ14nKihlbmQtc3RhcnQpKQogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgdG9rZW5zWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGqQFyJgIAAHKtAAAAcgABAABOKRFyDwIAAHKFAgAAcg0CAAByDAIAAHKpAAAAcoYCAABy3gAAAHJBAgAAciwCAAByRQAAAHKAAgAAckAAAAByPgAAAHKHAgAAcvQBAAByAQIAAHIAAQAAKQ9y0wAAAHLUAQAA2gptYXhNYXRjaGVz2gdvdmVybGFwcjsCAAByQAIAAHLPAAAA2gpwcmVwYXJzZUZu2gdwYXJzZUZu2gdtYXRjaGVzckwCAADaB25leHRMb2NyTgIAANoHbmV4dGxvY3IIAQAAchIAAAByEgAAAHITAAAA2gpzY2FuU3RyaW5npwcAAHNQAAAAAoAGHwgBCgEKAQYCDAEIAQQBBgEGAQgBBAECARABAgEKARYBDAEMAQL/CAMIAQwBBAEKAQgBBgEKAgYCCAIo7Q4UBgECARADDgEEAQiAAvl6GFBhcnNlckVsZW1lbnQuc2NhblN0cmluZ2MCAAAAAAAAAAAAAAAIAAAACgAAAEMAAABz7gAAAGcAfQJkAX0DZAJ8AF8Aek58AKABfAGhAUQAXS1cA30EfQV9BnwCoAJ8AXwDfAWFAhkAoQEBAHwEcjh0A3wEdASDAnIpfAJ8BKAFoQA3AH0Cbg90A3wEdAaDAnIzfAJ8BDcAfQJuBXwCoAJ8BKEBAQB8Bn0DcQ18AqACfAF8A2QDhQIZAKEBAQBkBGQFhAB8AkQAgwF9AmQGoAd0CHQJdAp8AoMBgwKhAVcAUwAEAHQLeXYBAH0HAQB6FXQMag1yYYIAdA58B2QHZAODA2QDdQFycHwAoA98B2oQoQF8B18QfAeCAWQDfQd+B3cBdwApCGFbAwAACiAgICAgICAgRXh0ZW5zaW9uIHRvIDpjbGFzczpgc2NhblN0cmluZ2AsIHRvIG1vZGlmeSBtYXRjaGluZyB0ZXh0IHdpdGggbW9kaWZpZWQgdG9rZW5zIHRoYXQgbWF5CiAgICAgICAgYmUgcmV0dXJuZWQgZnJvbSBhIHBhcnNlIGFjdGlvbi4gIFRvIHVzZSBgYHRyYW5zZm9ybVN0cmluZ2BgLCBkZWZpbmUgYSBncmFtbWFyIGFuZAogICAgICAgIGF0dGFjaCBhIHBhcnNlIGFjdGlvbiB0byBpdCB0aGF0IG1vZGlmaWVzIHRoZSByZXR1cm5lZCB0b2tlbiBsaXN0LgogICAgICAgIEludm9raW5nIGBgdHJhbnNmb3JtU3RyaW5nKClgYCBvbiBhIHRhcmdldCBzdHJpbmcgd2lsbCB0aGVuIHNjYW4gZm9yIG1hdGNoZXMsCiAgICAgICAgYW5kIHJlcGxhY2UgdGhlIG1hdGNoZWQgdGV4dCBwYXR0ZXJucyBhY2NvcmRpbmcgdG8gdGhlIGxvZ2ljIGluIHRoZSBwYXJzZQogICAgICAgIGFjdGlvbi4gIGBgdHJhbnNmb3JtU3RyaW5nKClgYCByZXR1cm5zIHRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgc3RyaW5nLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHdkID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHdkLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdLnRpdGxlKCkpCgogICAgICAgICAgICBwcmludCh3ZC50cmFuc2Zvcm1TdHJpbmcoIm5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsuIikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBOb3cgSXMgVGhlIFdpbnRlciBPZiBPdXIgRGlzY29udGVudCBNYWRlIEdsb3Jpb3VzIFN1bW1lciBCeSBUaGlzIFN1biBPZiBZb3JrLgogICAgICAgIHIBAAAAVE5jAQAAAAAAAAAAAAAAAgAAAAMA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c2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBjdXN0b20gZGVidWcgYWN0aW9ucyBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgOmNsYXNzOmBzZXREZWJ1Z0FjdGlvbnNgLiBQcmlvciB0byBhdHRlbXB0aW5nCiAgICAgICAgdG8gbWF0Y2ggdGhlIGBgd2RgYCBleHByZXNzaW9uLCB0aGUgZGVidWdnaW5nIG1lc3NhZ2UgYGAiTWF0Y2ggPGV4cHJuYW1lPiBhdCBsb2MgPG4+KDxsaW5lPiw8Y29sPikiYGAKICAgICAgICBpcyBzaG93bi4gVGhlbiBpZiB0aGUgcGFyc2Ugc3VjY2VlZHMsIGEgYGAiTWF0Y2hlZCJgYCBtZXNzYWdlIGlzIHNob3duLCBvciBhbiBgYCJFeGNlcHRpb24gcmFpc2VkImBgCiAgICAgICAgbWVzc2FnZSBpcyBzaG93bi4gQWxzbyBub3RlIHRoZSB1c2Ugb2YgOmNsYXNzOmBzZXROYW1lYCB0byBhc3NpZ24gYSBodW1hbi1yZWFkYWJsZSBuYW1lIHRvIHRoZSBleHByZXNzaW9uLAogICAgICAgIHdoaWNo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kAFyXHwQoBFkB6EBAQB8CWQEoBJ8EKEBgwEBAHwKoBF8D3wRZgKhAQEAcTp8DHwKZgJTACkRYXMNAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIGEgc2VyaWVzIG9mIHRlc3Qgc3RyaW5ncywgc2hvd2luZyBlYWNoCiAgICAgICAgdGVzdCwgdGhlIHBhcnNlZCByZXN1bHRzIG9yIHdoZXJlIHRoZSBwYXJzZSBmYWlsZWQuIFF1aWNrIGFuZCBlYXN5IHdheSB0bwogICAgICAgIHJ1biBhIHBhcnNlIGV4cHJlc3Npb24gYWdhaW5zdCBhIGxpc3Qgb2Ygc2FtcGxlIHN0cmluZ3MuCgogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdHMgLSBhIGxpc3Qgb2Ygc2VwYXJhdGUgdGVzdCBzdHJpbmdzLCBvciBhIG11bHRpbGluZSBzdHJpbmcgb2YgdGVzdCBzdHJpbmdzCiAgICAgICAgIC0gcGFyc2VBbGwgLSAoZGVmYXVsdD0gYGBUcnVlYGApIC0gZmxhZyB0byBwYXNzIHRvIDpjbGFzczpgcGFyc2VTdHJpbmdgIHdoZW4gcnVubmluZyB0ZXN0cwogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD0gYGAnIydgYCkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0CiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PSBgYFRydWVgYCkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCiAgICAgICAgIC0gcG9zdFBhcnNlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgICAgICBgZm4odGVzdF9zdHJpbmcsIHBhcnNlX3Jlc3VsdHMpYCBhbmQgcmV0dXJucyBhIHN0cmluZyB0byBiZSBhZGRlZCB0byB0aGUgdGVzdCBvdXRwdXQKICAgICAgICAgLSBmaWxlIC0gKGRlZmF1bHQ9YGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgICAgIGlmIE5vbmUsIHdpbGwgZGVmYXVsdCB0byBgYHN5cy5zdGRvdXRgYAoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBgYGZhaWx1cmVUZXN0c2BgIGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaAogICAgICAgIHRlc3QncyBvdXRwdXQKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAg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b3JpZ2luYWwgbWF0Y2hfc3RyaW5nIHVzZWQgdG8gY29tcGFyZQogICAgICAgYWdhaW5zdCB0aGUgaW5wdXQgc3RyaW5nCgogICAgSWYgYGBtaXNtYXRjaGVzYGAgaXMgYW4gZW1wdHkgbGlzdCwgdGhlbiB0aGUgbWF0Y2ggd2FzIGFuIGV4YWN0CiAgICBtYXRjaC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICdBVENBVENHQUFUR0dBJyAod2l0aCB1cCB0byAxIG1pc21hdGNoZXMpIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgIyBleGFjdCBtYXRjaAogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVRHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVRHR0EnXSwgeydtaXNtYXRjaGVzJzogW1tdXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQoKICAgICAgICAjIGNsb3NlIG1hdGNoIGFsbG93aW5nIHVwIHRvIDIgbWlzbWF0Y2hlcwogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIiwgbWF4TWlzbWF0Y2hlcz0yKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FYQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s0LCA5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgIHKtAAAAYwMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAHNCAAAAdAB0AXwAgwKgAqEAAQB8AXwAXwN8AXwAXwR8AnwAXwVkAXwAagR8AGoFZgIWAHwAXwZkAnwAXwdkAnwAXwhkAFMAKQNOeiZFeHBlY3RlZCAlciAod2l0aCB1cCB0byAlZCBtaXNtYXRjaGVzKUYpCXL/AgAAco4AAABy1QAAAHIrAQAA2gxtYXRjaF9zdHJpbmfaDW1heE1pc21hdGNoZXNyEQIAAHIQAgAAcgsCAAApA3LTAAAAciQDAAByJQMAAHIBAwAAchIAAAByEwAAAHLVAAAA6wsAAHMOAAAADgEGAQYBBgESAQYBCgF6E0Nsb3NlTWF0Y2guX19pbml0X19UYwQAAAAAAAAAAAAAAA8AAAAFAAAAQwAAAHPCAAAAfAJ9BHQAfAGDAX0FfAR0AHwAagGDARcAfQZ8BnwFawFyWXwAagF9B2QBfQhnAH0JfABqAn0KdAN0BHwBfAJ8BoUCGQB8B4MCgwFEAF0ZXAJ9CH0LfAtcAn0MfQ18DHwNawNyP3wJoAV8CKEBAQB0AHwJgwF8CmsEcj8BAG4acSZ8CGQCFwB9AnQGfAF8BHwChQIZAGcBgwF9DnwHfA5kAzwAfAl8DmQEPAB8AnwOZgJTAHQHfAF8AnwAagh8AIMEggEpBU5yAQAAAHKtAAAA2ghvcmlnaW5hbNoKbWlzbWF0Y2hlcykJct4AAAByJAMAAHIlAwAAcgIBAAByswAAAHL9AAAAckMAAAByQAAAAHIRAgAAKQ9y0wAAAHLUAQAAcs8AAAByJQIAANoFc3RhcnRyQAIAANoGbWF4bG9jciQDAADaD21hdGNoX3N0cmluZ2xvY3InAwAAciUDAADaA3NfbdoDc3Jj2gNtYXTaB3Jlc3VsdHNyEgAAAHISAAAAchMAAABy9wAAAPQLAABzKgAAAAQBCAEOAQgCBgEEAQQBBgEeAggBCAEKAQwBBAECgAgCEgEIAQgBCAEQAnoUQ2xvc2VNYXRjaC5wYXJzZUltcGwpAXKtAAAAcvwCAAByDgMAAHISAAAAchIAAAByAQMAAHITAAAAco4AAADKCwAAcwgAAAAIAAQBDiASCXKOAAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZA2HAGYBZAZkB4QJWgRkDmQJZAqEAVoFhwBmAWQLZAyECFoGhwAEAFoHUwApD3JQAAAAYVgJAABUb2tlbiBmb3IgbWF0Y2hpbmcgd29yZHMgY29tcG9zZWQgb2YgYWxsb3dlZCBjaGFyYWN0ZXIgc2V0cy4KICAgIERlZmluZWQgd2l0aCBzdHJpbmcgY29udGFpbmluZyBhbGwgYWxsb3dlZCBpbml0aWFsIGNoYXJhY3RlcnMsIGFuCiAgICBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBhbGxvd2VkIGJvZHkgY2hhcmFjdGVycyAoaWYgb21pdHRlZCwKICAgIGRlZmF1bHRzIHRvIHRoZSBpbml0aWFsIGNoYXJhY3RlciBzZXQpLCBhbmQgYW4gb3B0aW9uYWwgbWluaW11bSwKICAgIG1heGltdW0sIGFuZC9vciBleGFjdCBsZW5ndGguICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYGBtaW5gYCBpcwogICAgMSAoYSBtaW5pbXVtIHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yCiAgICBgYG1heGBgIGFuZCBgYGV4YWN0YGAgYXJlIDAsIG1lYW5pbmcgbm8gbWF4aW11bSBvciBleGFjdAogICAgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbCBgYGV4Y2x1ZGVDaGFyc2BgIHBhcmFtZXRlciBjYW4KICAgIGxpc3QgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGZvdW5kIGluIHRoZSBpbnB1dCBgYGJvZHlDaGFyc2BgCiAgICBzdHJpbmc7IHVzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbCBwcmludGFibGVzIGV4Y2VwdCBmb3Igb25lIG9yCiAgICB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgoKICAgIDpjbGFzczpgc3JhbmdlYCBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MKICAgIGZvciBkZWZpbmluZyBgYFdvcmRgYCBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbQogICAgcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgoKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIDpjbGFzczpgV29yZGAgdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsCiAgICBzdHJpbmcsIGFzIGluIGBgV29yZCgiQWRkcmVzcyIpYGAuIFJlbWVtYmVyIHRoYXQgOmNsYXNzOmBXb3JkYAogICAgdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZSAqc2V0cyogb2YgbWF0Y2hhYmxlIGNoYXJhY3RlcnMuCiAgICBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLCAiZEFyZWQiLCBvciBhbnkgb3RoZXIgd29yZAogICAgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuIFRvIG1hdGNoIGFuCiAgICBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIDpjbGFzczpgTGl0ZXJhbGAgb3IgOmNsYXNzOmBLZXl3b3JkYC4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgoKICAgICAtIDpjbGFzczpgYWxwaGFzYAogICAgIC0gOmNsYXNzOmBudW1zYAogICAgIC0gOmNsYXNzOmBhbHBoYW51bXNgCiAgICAgLSA6Y2xhc3M6YGhleG51bXNgCiAgICAgLSA6Y2xhc3M6YGFscGhhczhiaXRgIChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NQogICAgICAgLSBhY2NlbnRlZCwgdGlsZGVkLCB1bWxhdXRlZCwgZXRjLikKICAgICAtIDpjbGFzczpgcHVuYzhiaXRgIChub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlCiAgICAgICAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gOmNsYXNzOmBwcmludGFibGVzYCAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBhIHdv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dD0gYGBGYWxzZWBgKQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0CiAgICAgICAgICBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgICAgICBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9IGBgTm9uZWBgICA9PiBzYW1lIGFzCiAgICAgICAgICBxdW90ZUNoYXIpCiAgICAgICAgLSBjb252ZXJ0V2hpdGVzcGFjZUVzY2FwZXMgLSBjb252ZXJ0IGVzY2FwZWQgd2hpdGVzcGFjZQogICAgICAgICAgKGBgJ1x0J2BgLCBgYCdcbidgYCwgZXRjLikgdG8gYWN0dWFsIHdoaXRlc3BhY2UKICAgICAgICAgIChkZWZhdWx0PSBgYFRydWVgYCkKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcXMgPSBRdW90ZWRTdHJpbmcoJyInKQogICAgICAgIHByaW50KHFzLnNlYXJjaFN0cmluZygnbHNqZGYgIlRoaXMgaXMgdGhlIHF1b3RlIiBzbGRqZicpKQogICAgICAgIGNvbXBsZXhfcXMgPSBRdW90ZWRTdHJpbmcoJ3t7JywgZW5kUXVvdGVDaGFyPSd9fScpCiAgICAgICAgcHJpbnQoY29tcGxleF9xcy5zZWFyY2hTdHJpbmcoJ2xzamRmIHt7VGhpcyBpcyB0aGUgInF1b3RlIn19IHNsZGpmJykpCiAgICAgICAgc3FsX3FzID0gUXVvdGVkU3RyaW5nKCciJywgZXNjUXVvdGU9JyIiJykKICAgICAgICBwcmludChzcWxfcXMuc2VhcmNoU3RyaW5nKCdsc2pkZiAiVGhpcyBpcyB0aGUgcXVvdGUgd2l0aCAiImVtYmVkZGVkIiIgcXVvdGVzIiBzbGRqZicpKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ1RoaXMgaXMgdGhlIHF1b3RlJ11dCiAgICAg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cGVyYXRvciAnJicpIHRvIGFjY2VwdCBhdHRyaWJ1dGVzIGluIGFueSBvcmRlcgogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCgogICAgcHJpbnRzOjoKCiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1MCcsICcsJywg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YnV0IGlmIGEgcmVzdWx0cyBuYW1lIGlzIGRlZmluZWQgb24gdGhlCiAgICBnaXZlbiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZC4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICAtIGV4cHIgLSBleHByZXNzaW9uIHRoYXQgbXVzdCBtYXRjaCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZQogICAgICAgbG9jYXRpb24KICAgICAtIHJldHJlYXQgLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gKGludCkgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgdG8gbG9va2JlaGluZCBwcmlvciB0byB0aGUgY3VycmVudCBwYXJzZSBsb2NhdGlvbgoKICAgIElmIHRoZSBsb29rYmVoaW5kIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcsIExpdGVyYWwsIEtleXdvcmQsIG9yCiAgICBhIFdvcmQgb3IgQ2hhcnNOb3RJbiB3aXRoIGEgc3BlY2lmaWVkIGV4YWN0IG9yIG1heGltdW0gbGVuZ3RoLCB0aGVuCiAgICB0aGUgcmV0cmVhdCBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkLiBPdGhlcndpc2UsIHJldHJlYXQgbXVzdCBiZQogICAgc3BlY2lmaWVkIHRvIGdpdmUgYSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGxvb2sgYmFjayBmcm9tCiAgICB0aGUgY3VycmVudCBwYXJzZSBwb3NpdGlvbiBmb3IgYSBsb29rYmVoaW5kIG1hdGNoLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIFZCLXN0eWxlIHZhcmlhYmxlIG5hbWVzIHdpdGggdHlwZSBwcmVmaXhlcwogICAgICAgIGludF92YXIgPSBQcmVjZWRlZEJ5KCIjIikgKyBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKICAgICAgICBzdHJfdmFyID0gUHJlY2VkZWRCeSgiJCIpICsgcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgTmMDAAAAAAAAAAAAAAADAAAABAAAAAMAAABzzgAAAHQAdAF8AIMCoAJ8AaEBAQB8AKADoQCgBKEAfABfA2QBfABfBWQCfABfBmQCfABfB3QIfAF0CYMCciV0CnwBgwF9AmQBfABfB24rdAh8AXQLdAxmAoMCcjN8AWoNfQJkAXwAXwduHXQIfAF0DnQPZgKDAnJGfAFqEHQRawNyRnwBahB9AmQBfABfB24KdAh8AXQSgwJyUGQDfQJkAXwAXwd8AnwAXxNkBHQJfAGDARcAfABfFGQCfABfFXwAahagF2QFZAaEAKEBAQBkAFMAKQdOVEZyAQAAAHoQbm90IHByZWNlZGVkIGJ5IGMDAAAAAAAAAAAAAAADAAAABQAAAFMAAABzEAAAAHwCoAB0AWQAZACDAqEBUwByqgAAACkCclEBAAByQQEAAHLEAAAAchIAAAByEgAAAHITAAAAcp0AAAD5EQAA8wIAAAAQAHolUHJlY2VkZWRCeS5fX2luaXRfXy48bG9jYWxzPi48bGFtYmRhPikYcv8CAAByNgAAAHLVAAAActUBAAByxQIAAHILAgAAchACAAByQgMAAHKeAAAAcqAAAABy3gAAAHI1AAAAcjIAAAByEQMAAHJQAAAAcikAAAByOAMAAHL9AgAAcn0DAADaB3JldHJlYXRyEQIAAHIIAgAAcgMCAABy/QAAACkDctMAAABy1QEAAHLmAwAAcgEDAAByEgAAAHITAAAActUAAADkEQAAcyoAAAAQAQ4BBgEGAQYBCgEIAQgBDgEGAQgBGAEGAQgBCgEEAQYBBgEOAQYBFAF6E1ByZWNlZGVkQnkuX19pbml0X19yAQAAAFRjBAAAAAAAAAAAAAAADAAAAAsAAABDAAAAc+YAAAB8AGoAciF8AnwAagFrAHIPdAJ8AXwCfABqA4MDggF8AnwAagEYAH0EfABqBKAFfAF8BKECXAJ9BX0GfAJ8BmYCUwB8AGoEdAaDABcAfQd8AXQHZAF8AnwAagEYAIMCfAKFAhkAfQh0AnwBfAJ8AGoDgwN9CXQIZAJ0CXwCfABqAWQCFwCDAmQCFwCDAkQAXSl9CnoOfAegBXwIdAp8CIMBfAoYAKECXAJ9BX0GVwBuFAQAdAt5awEAfQsBAHoIfAt9CVcAWQBkAH0LfgtxR2QAfQt+C3cBdwABAHwCfAZmAlMAfAmCAXJGAQAAKQxyQgMAAHLmAwAAckAAAAByEQIAAHLVAQAAciwCAABySgAAAHJBAwAAckcBAAByQAMAAHLeAAAAcj4AAAApDHLTAAAActQBAAByzwAAAHIlAgAAcigDAABy5AMAAHKoAAAA2gl0ZXN0X2V4cHLaDmluc3RyaW5nX3NsaWNl2glsYXN0X2V4cHJyggEAANoDcGJlchIAAAByEgAAAHITAAAAcvcAAAD7EQAAcyYAAAAGAQoBDgEKARIBCBAM8xgBDgEeAQIBHAIOARABCIAC/wIDCAME/3oUUHJlY2VkZWRCeS5wYXJzZUltcGxyqgAAACkCcgEAAABUcg4DAAByEgAAAHISAAAAcgEDAAByEwAAAHI2AAAAyBEAAHMIAAAACAAEAQ4bEhdyNgAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABzMgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQJZAVkBoQBWgVkB2QIhABaBocABABaB1MAKQpyOQAAAGG5AwAATG9va2FoZWFkIHRvIGRpc2FsbG93IG1hdGNoaW5nIHdpdGggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uCiAgICBgYE5vdEFueWBgIGRvZXMgKm5vdCogYWR2YW5jZSB0aGUgcGFyc2luZyBwb3NpdGlvbiB3aXRoaW4gdGhlCiAgICBpbnB1dCBzdHJpbmcsIGl0IG9ubHkgdmVyaWZpZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHBhcnNlIGV4cHJlc3Npb24KICAgIGRvZXMgKm5vdCogbWF0Y2ggYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uICBBbHNvLCBgYE5vdEFueWBgIGRvZXMKICAgICpub3QqIHNraXAgb3ZlciBsZWFkaW5nIHdoaXRlc3BhY2UuIGBgTm90QW55YGAgYWx3YXlzIHJldHVybnMKICAgIGEgbnVsbCB0b2tlbiBsaXN0LiAgTWF5IGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSAnficgb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CgogICAgICAgIEFORCwgT1IsIE5PVCA9IG1hcChDYXNlbGVzc0tleXdvcmQsICJBTkQgT1IgTk9UIi5zcGxpdCgpKQoKICAgICAgICAjIHRha2UgY2FyZSBub3QgdG8gbWlzdGFrZSBrZXl3b3JkcyBmb3IgaWRlbnRpZmllcnMKICAgICAgICBpZGVudCA9IH4oQU5EIHwgT1IgfCBOT1QpICsgV29yZChhbHBoYXMpCiAgICAgICAgYm9vbGVhbl90ZXJtID0gT3B0aW9uYWwoTk9UKSArIGlkZW50CgogICAgICAgICMgdmVyeSBjcnVkZSBib29sZWFuIGV4cHJlc3Npb24gLSB0byBzdXBwb3J0IHBhcmVudGhlc2lzIGdyb3VwcyBhbmQKICAgICAgICAjIG9wZXJhdGlvbiBoaWVyYXJjaHksIHVzZSBpbmZpeE5vdGF0aW9uCiAgICAgICAgYm9vbGVhbl9leHByID0gYm9vbGVhbl90ZXJtICsgWmVyb09yTW9yZSgoQU5EIHwgT1IpICsgYm9vbGVhbl90ZXJtKQoKICAgICAgICAjIGludGVnZXJzIHRoYXQgYXJlIGZvbGxvd2VkIGJ5ICIuIiBhcmUgYWN0dWFsbHkgZmxvYXRzCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykgKyB+Q2hhcigiLiIpCiAgICBjAgAAAAAAAAAAAAAAAgAAAAMAAAADAAAAczAAAAB0AHQBfACDAqACfAGhAQEAZAF8AF8DZAJ8AF8EZAN0BXwAagaDARcAfABfB2QAUwApBE5GVHoWRm91bmQgdW53YW50ZWQgdG9rZW4sICkIcv8CAAByOQAAAHLVAAAAcggCAAByCwIAAHKpAAAActUBAAByEQIAAHLiAwAAcgEDAAByEgAAAHITAAAActUAAAAqEgAAcwgAAAAQAQYCBgEUAXoPTm90QW55Ll9faW5pdF9fVGMEAAAAAAAAAAAAAAAEAAAABQAAAEMAAABzJgAAAHwAagCgAXwBfAKhAnIPdAJ8AXwCfABqA3wAgwSCAXwCZwBmAlMAcqoAAAApBHLVAQAAclUCAAByQAAAAHIRAgAAckICAAByEgAAAHISAAAAchMAAABy9wAAADESAABzBgAAAA4BEAEIAXoQTm90QW55LnBhcnNlSW1wbGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAADzNAAAAHQAfABkAYMCcgh8AGoBUwB8AGoCZAB1AHIXZAJ0A3wAagSDARcAZAMXAHwAXwJ8AGoCUwApBE5yKwEAAHoCfntyqQMAAKkFcl0BAAByKwEAAHIFAgAAcqkAAABy1QEAAHLjAAAAchIAAAByEgAAAHITAAAAcuAAAAA2EgAA8woAAAAKAQYBCgIUAQYCeg5Ob3RBbnkuX19zdHJfX3L8AgAAckgDAAByEgAAAHISAAAAcgEDAAByEwAAAHI5AAAAExIAAHMKAAAACAAEAQwWCgcQBXI5AAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHM+AAAAZQBaAWQAWgJkDIcAZgFkAmQDhAlaA2QEZAWEAFoEZA1kB2QIhAFaBWQOhwBmAWQKZAuECVoGhwAEAFoHUwApD9oOX011bHRpcGxlTWF0Y2hOYwMAAAAAAAAAAAAAAAQAAAADAAAAAwAAAHM8AAAAdAB0AXwAgwKgAnwBoQEBAGQBfABfA3wCfQN0BHwDdAWDAnIXfACgBnwDoQF9A3wAoAd8A6EBAQBkAFMAchsAAAApCHL/AgAAcu4DAABy1QAAAHIHAgAAcp4AAAByOQEAAHL9AQAA2gZzdG9wT24pBHLTAAAActUBAABy7wMAANoFZW5kZXJyAQMAAHISAAAAchMAAABy1QAAAEASAABzDAAAABABBgEEAQoBCgEOAXoXX011bHRpcGxlTWF0Y2guX19pbml0X19jAgAAAAAAAAAAAAAAAgAAAAMAAABDAAAAczIAAAB0AHwBdAGDAnIKfACgAnwBoQF9AXwBZAB1AXIUfAEPAHwAXwN8AFMAZAB8AF8DfABTAHKqAAAAKQRyngAAAHI5AQAAcv0BAADaCW5vdF9lbmRlcikCctMAAABy8AMAAHISAAAAchIAAAByEwAAAHLvAwAASBIAAHMMAAAACgEKARABBAEG/wQBehVfTXVsdGlwbGVNYXRjaC5zdG9wT25UYwQAAAAAAAAAAAAAAAwAAAAJAAAAQwAAAHO4AAAAfABqAGoBfQR8AGoCfQV8AGoDZAB1AX0GfAZyEnwAagNqBH0HfAZyGXwHfAF8AoMCAQB8BHwBfAJ8A2QBZAKNBFwCfQJ9CHoqfABqBQwADAB9CQkAfAZyMXwHfAF8AoMCAQB8CXI5fAV8AXwCgwJ9Cm4CfAJ9CnwEfAF8CnwDgwNcAn0CfQt8C3NJfAugBqEAck18CHwLNwB9CHEqBAB0B3QIZgJ5WwEAAQABAFkAfAJ8CGYCUwB3AKkDTkZyiwIAACkJctUBAAByLAIAAHI9AgAAcvEDAAByVAIAAHINAgAAcmwBAAByQAAAAHI8AQAAKQxy0wAAAHLUAQAAcs8AAAByJQIAANoPc2VsZl9leHByX3BhcnNl2hRzZWxmX3NraXBfaWdub3JhYmxlc9oLY2hlY2tfZW5kZXLaDXRyeV9ub3RfZW5kZXJyTgIAANoOaGFzSWdub3JlRXhwcnNyTAIAANoJdG1wdG9rZW5zchIAAAByEgAAAHITAAAAcvcAAABOEgAAczAAAAAIAQYBCgEEAQgBBAQKARQBAgEKAQIBBAEKAQQBDAEEAhABDAEIAQL3EAoCAQgCAv16GF9NdWx0aXBsZU1hdGNoLnBhcnNlSW1wbEZjAwAAAAAAAAAAAAAABAAAAAgAAAADAAAAc2YAAAB0AGoBcip8AGoCZwF0A3wAagJkAWcAgwMXAEQAXRt9A3QEfAN0BYMCcil8A2oGcil0B2oIZAKgCWQDfAF0CnwAgwFqC3wDagahBGQEZAWNAgEAcQ50DHQNfACDAqAOfAF8AqECUwApBk5ykAMAAHKWAwAAch4AAABylQAAAHKfAgAAKQ9yHAAAAHIeAAAActUBAABy9AEAAHKeAAAAckUAAAByBgIAAHKjAgAAcqQCAABy/gAAAHLuAAAAcg8AAABy/wIAAHLuAwAAchwCAABylwMAAHIBAwAAchIAAAByEwAAAHIcAgAAaxIAAHMaAAAABgEaARABBgEEAQIBCAEEAQL9AgQG+wKAEgd6Hl9NdWx0aXBsZU1hdGNoLl9zZXRSZXN1bHRzTmFtZXKqAAAAcvwCAABy+wIAACkIcg8AAAByEAAAAHIRAAAActUAAABy7wMAAHL3AAAAchwCAAByBwMAAHISAAAAchIAAAByAQMAAHITAAAAcu4DAAA/EgAAcwoAAAAIAA4BCAgKBhYdcu4DAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBXI6AAAAYWoEAABSZXBldGl0aW9uIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggb25lIG9yIG1vcmUgdGltZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PSBgYE5vbmVgYCkgLSBleHByZXNzaW9uIGZvciBhIHRlcm1pbmF0aW5nIHNlbnRpbmVsCiAgICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbgogICAgICAgICAgZXhwcmVzc2lvbikKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBCTEFDSyIKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAgIyBGYWlsISByZWFkICdjb2xvcicgYXMgZGF0YSBpbnN0ZWFkIG9mIG5leHQgbGFiZWwgLT4gW1snc2hhcGUnLCAnU1FVQVJFIGNvbG9yJ11dCgogICAgICAgICMgdXNlIHN0b3BPbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxhYmVsIHN0cmluZyBhcyBwYXJ0IG9mIHRoZSBkYXRhCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgIyBCZXR0ZXIgLT4gW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnQkxBQ0snXV0KCiAgICAgICAgIyBjb3VsZCBhbHNv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CiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVVMgcG9zdGFsIGNvZGUgY2FuIGJlIGEgNS1kaWdpdCB6aXAsIHBsdXMgb3B0aW9uYWwgNC1kaWdpdCBxdWFsaWZpZXIKICAgICAgICB6aXAgPSBDb21iaW5lKFdvcmQobnVtcywgZXhhY3Q9NSkgKyBPcHRpb25hbCgnLScgKyBXb3JkKG51bXMsIGV4YWN0PTQpKSkKICAgICAgICB6aXAucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdHJhZGl0aW9uYWwgWklQIGNvZGUKICAgICAgICAgICAgMTIzNDUKCiAgICAgICAgICAgICMgWklQKzQgZm9ybQogICAgICAgICAgICAxMjEwMS0wMDAxCgogICAgICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgICAgIDk4NzY1LQogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZyCgMAAFQpB3L/AgAAcjwAAABy1QAAAHLVAQAAcgcCAABycwEAAHILAgAAKQNy0wAAAHLVAQAAcm0BAAByAQMAAHISAAAAchMAAABy1QAAAOkSAABzCAAAABQBCgEGAQoBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc5IAAAB6EXwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAfAJ8BGYCUwAEAHQCdANmAnlIAQABAAEAfABqBHwAagV1AXI3fABqAGoGcjJ0B3wAagRnAYMBfQR8AGoEfAR8AGoAagY8AG4RfABqBGcBfQRuB2cAfQRZAHwCfARmAlMAWQB8AnwEZgJTAFkAfAJ8BGYCUwB3AHLyAwAAKQhy1QEAAHIsAgAAckAAAAByPAEAAHJzAQAA2h1fT3B0aW9uYWxfX29wdGlvbmFsTm90TWF0Y2hlZHIGAgAAckMAAAApBXLTAAAActQBAAByzwAAAHIlAgAAck4CAAByEgAAAHISAAAAchMAAABy9wAAAO8SAABzIAAAAAIBGgEIChD3DAEIAQwBEAEKAgYCCAEC/QgDAvsIBQL3ehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcusDAAApBE5yKwEAAHKNAQAAcpABAABy7AMAAHLjAAAAchIAAAByEgAAAHITAAAAcuAAAAD9EgAAcu0DAAB6EE9wdGlvbmFsLl9fc3RyX19y/AIAACkKcg8AAAByEAAAAHIRAAAAcvEAAABy+wMAAHL8AwAActUAAABy9wAAAHLgAAAAcgcDAAByEgAAAHISAAAAcgEDAAByEwAAAHI8AAAAwhIAAHMMAAAACAAEAQYkEAIKBhAOcjwAAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkBGQFhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLckkAAABh+AkAAFRva2VuIGZvciBza2lwcGluZyBvdmVyIGFsbCB1bmRlZmluZWQgdGV4dCB1bnRpbCB0aGUgbWF0Y2hlZAogICAgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaWYgVHJ1ZSwgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGFsc28gcGFyc2VkCiAgICAgICAgICAodGhlIHNraXBwZWQgdGV4dCBhbmQgdGFyZ2V0IGV4cHJlc3Npb24gYXJlIHJldHVybmVkIGFzIGEgMi1lbGVtZW50IGxpc3QpLgogICAgIC0gaWdub3JlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZAogICAgICAgICAgY29tbWVudHMpIHRoYXQgbWlnaHQgY29udGFpbiBmYWxzZSBtYXRjaGVzIHRvIHRoZSB0YXJnZXQgZXhwcmVzc2lvbgogICAgIC0gZmFpbE9uIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsCiAgICAgICAgICB0aGUgU2tpcFRvIGlzIG5vdCBhIG1hdGNoCgogICAgRXhhbXBsZTo6CgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgic2V2IikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoImRlc2MiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKCiAgICAgICAgZm9yIHRrdCBpbiB0aWNrZXRfZXhwci5zZWFyY2hTdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQoKICAgIHByaW50czo6CgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0g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AAAAckUCAAAuFAAActACAAB6D0dyb3VwLnBvc3RQYXJzZakHcg8AAAByEAAAAHIRAAAAcvEAAABy1QAAAHJFAgAAcgcDAAByEgAAAHISAAAAcgEDAAByEwAAAHIxAAAAGxQAAHMIAAAACAAEAQwOEARyMQAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAByDgQAACkGcisAAABhPwYAAENvbnZlcnRlciB0byByZXR1cm4gYSByZXBldGl0aXZlIGV4cHJlc3Npb24gYXMgYSBsaXN0LCBidXQgYWxzbwogICAgYXMgYSBkaWN0aW9uYXJ5LiBFYWNoIGVsZW1lbnQgY2FuIGFsc28gYmUgcmVmZXJlbmNlZCB1c2luZyB0aGUgZmlyc3QKICAgIHRva2VuIGluIHRoZSBleHByZXNzaW9uIGFzIGl0cyBrZXkuIFVzZWZ1bCBmb3IgdGFidWxhciByZXBvcnQKICAgIHNjcmFwaW5nIHdoZW4gdGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgdXNlZCBhcyBhIGl0ZW0ga2V5LgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxhcCddCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBjb2xvcjogbGlnaHQgYmx1ZQogICAgICAgIC0gcG9zbjogdXBwZXIgbGVmdAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQogICAgICAgIC0gdGV4dHVyZTogYnVybGFwCiAgICAgICAgU1FVQVJFCiAgICAgICAgeydjb2xvcic6ICdsaWdodCBibHVlJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCcsICdzaGFwZSc6ICdTUVVBUkUnfQoKICAgIFNlZSBtb3JlIGV4YW1wbGVzIGF0IDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvZiBhY2Nlc3NpbmcgZmllbGRzIGJ5IHJlc3VsdHMgbmFtZS4KICAgIGMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABy4QMAAHIbAAAAKQRy/wIA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CiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9CiAgICApA3IrAAAAcjoAAAByMQAAACkCcnIBAAByTwEAAHISAAAAchIAAAByEwAAAHJjAAAArRUAAHMCAAAAFCVyYwAAAGMCAAAAAAAAAAAAAAAGAAAABAAAAEMAAABzXgAAAHQAgwCgAWQBZAKEAKEBfQJ8AqACoQB9A2QDfANfA3wCZASDAXwAFwB8A2QFgwEXAH0EfAFyIGQGZAKEAH0FbgRkB2QIhAB9BXwEoAF8BaEBAQB8AGoEfARfBHwEUwApCWGXBAAASGVscGVyIHRvIHJldHVybiB0aGUgb3JpZ2luYWwsIHVudG9rZW5pemVkIHRleHQgZm9yIGEgZ2l2ZW4KICAgIGV4cHJlc3Npb24uICBVc2VmdWwgdG8gcmVzdG9yZSB0aGUgcGFyc2VkIGZpZWxkcyBvZiBhbiBIVE1MIHN0YXJ0CiAgICB0YWcgaW50byB0aGUgcmF3IHRhZyB0ZXh0IGl0c2VsZiwgb3IgdG8gcmV2ZXJ0IHNlcGFyYXRlIHRva2VucyB3aXRoCiAgICBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG1hdGNoaW5nIGlucHV0IHRleHQuIEJ5CiAgICBkZWZhdWx0LCByZXR1cm5zIGFzdHJpbmcgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcGFyc2VkIHRleHQuCgogICAgSWYgdGhlIG9wdGlvbmFsIGBgYXNTdHJpbmdgYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMKICAgIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCiAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBjb250YWluaW5nIGFueSByZXN1bHRzIG5hbWVzIHRoYXQKICAgIHdlcmUgb3JpZ2luYWxseSBtYXRjaGVkLCBhbmQgYSBzaW5nbGUgdG9rZW4gY29udGFpbmluZyB0aGUgb3JpZ2luYWwKICAgIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuICBTbyBpZiB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgdG8KICAgIDpjbGFzczpgb3JpZ2luYWxUZXh0Rm9yYCBjb250YWlucyBleHByZXNz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fAJTACkFYUwFAABIZWxwZXIgdG8gZGVmaW5lIGEgcGFyc2UgYWN0aW9uIGJ5IG1hcHBpbmcgYSBmdW5jdGlvbiB0byBhbGwKICAgIGVsZW1lbnRzIG9mIGEgUGFyc2VSZXN1bHRzIGxpc3QuIElmIGFueSBhZGRpdGlvbmFsIGFyZ3MgYXJlIHBhc3NlZCwKICAgIHRoZXkgYXJlIGZvcndhcmRlZCB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXMgYWRkaXRpb25hbCBhcmd1bWVudHMKICAgIGFmdGVyIHRoZSB0b2tlbiwgYXMgaW4KICAgIGBgaGV4X2ludGVnZXIgPSBXb3JkKGhleG51bXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKWBgLAogICAgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBwYXJzZWQgZGF0YSB0byBhbiBpbnRlZ2VyIHVzaW5nIGJhc2UgMTYuCgogICAgRXhhbXBsZSAoY29tcGFyZSB0aGUgbGFzdCB0byBleGFtcGxlIGluIDpjbGFzczpgUGFyc2VyRWxlbWVudC50cmFuc2Zvcm1TdHJpbmdgOjoKCiAgICAgICAgaGV4X2ludHMgPSBPbmVPck1vcmUoV29yZChoZXhudW1zKSkuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoaW50LCAxNikpCiAgICAgICAgaGV4X2ludHMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDAwIDExIDIyIGFhIEZGIDBhIDBkIDFhCiAgICAgICAgICAgICcnJykKCiAgICAgICAgdXBwZXJ3b3JkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci51cHBlcikpCiAgICAgICAgT25lT3JNb3JlKHVwcGVyd29yZCkucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG15IGtpbmdkb20gZm9yIGEgaG9yc2UKICAgICAgICAgICAgJycnKQoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudGl0bGUpKQogICAgICAgIE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4p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AaAAoQCJAGQCZAOEAIgARACDAYkAhwBmAWQEZAWECH0CfAJTACkGYTcIAABIZWxwZXIgdG8gY3JlYXRlIGEgdmFsaWRhdGluZyBwYXJzZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0CiAgICB0YWdzIGNyZWF0ZWQgd2l0aCA6Y2xhc3M6YG1ha2VYTUxUYWdzYCBvcgogICAgOmNsYXNzOmBtYWtlSFRNTFRhZ3NgLiBVc2UgYGB3aXRoQXR0cmlidXRlYGAgdG8gcXVhbGlmeQogICAgYSBzdGFydGluZyB0YWcgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UKICAgIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcyBgYDxURD5gYCBvciBgYDxESVY+YGAuCgogICAgQ2FsbCBgYHdpdGhBdHRyaWJ1dGVgYCB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQKICAgIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdCBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBgYChhbGlnbj0icmlnaHQiKWBgLCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIGBgKipgYCBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUKICAgICAgIG5hbWUgaXMgYWxzbyBhIFB5dGhvbiByZXNlcnZlZCB3b3JkLCBhcyBpbiBgYCoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifWBgCiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluIGBgKCgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwgInJpZ2h0IikpYGAKCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZAogICAgZm9ybS4gIEF0dHJpYnV0ZSBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgoKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgYGBjbGFzc2BgICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UKICAgIDpjbGFzczpgd2l0aENsYXNzYC4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLAogICAgcGFzcyBgYHdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFYGAgYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPSJncmlkIikpCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQoKICAgICAgICAjIGNvbnN0cnVjdCBhIG1hdGNoIHdpdGggYW55IGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1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AQB8EHwRoAV8DaEBfAZCAEsAfRB8EH0GcRd8BXwGSwB9BXwFUwApDmFsCgAASGVscGVyIG1ldGhvZCBmb3IgY29uc3RydWN0aW5nIGdyYW1tYXJzIG9mIGV4cHJlc3Npb25zIG1hZGUgdXAgb2YKICAgIG9wZXJhdG9ycyB3b3JraW5nIGluIGEgcHJlY2VkZW5jZSBoaWVyYXJjaHkuICBPcGVyYXRvcnMgbWF5IGJlIHVuYXJ5CiAgICBvciBiaW5hcnksIGxlZnQtIG9yIHJpZ2h0LWFzc29jaWF0aXZlLiAgUGFyc2UgYWN0aW9ucyBjYW4gYWxzbyBiZQogICAgYXR0YWNoZWQgdG8gb3BlcmF0b3IgZXhwcmVzc2lvbnMuIFRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgYWxzbwogICAgcmVjb2duaXplIHRoZSB1c2Ugb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMKICAgIChzZWUgZXhhbXBsZSBiZWxvdykuCgogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UKICAgIGlzc3VlcyB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZQogICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRgIGZvciBhIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseQogICAgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUKICAgICAgIG5lc3RlZAogICAgIC0gb3BMaXN0IC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsCiAgICAgICBpbiB0aGUgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtIGBgKG9wRXhwciwKICAgICAgIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pYGAsIHdoZXJlOgoKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOyBtYXkgYWxzbwogICAgICAgICBiZSBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBMaXRlcmFsOyBpZiBudW1UZXJtcwogICAgICAgICBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUgdHdvCiAgICAgICAgIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QgYmUgMSwKICAgICAgICAgMiwgb3IgMykKICAgICAgIC0gcmlnaHRMZWZ0QXNzb2MgaXMgdGhlIGluZGljYXRvciB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcyByaWdodAogICAgICAgICBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQgY29uc3RhbnRzCiAgICAgICAgIGBgb3BBc3NvYy5SSUdIVGBgIGFuZCBgYG9wQXNzb2MuTEVGVGBgLgogICAgICAgLSBwYXJzZUFjdGlvbiBpcyB0aGUgcGFyc2UgYWN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICAgdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbiBpcyBwYXNzZWQKICAgICAgICAgYSB0dXBsZSBvciBsaXN0IG9mIGZ1bmN0aW9ucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKICAgICAgICAgYGBzZXRQYXJzZUFjdGlvbigqZm4pYGAKICAgICAgICAgKDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmApCiAgICAgLSBscGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlcwogICAgICAgKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJygnKWBgKQogICAgIC0gcnBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKScpYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQKICAgICAgICAjIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQoKICAgICAgICBhcml0aF9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICA1KzMqNgogICAgICAgICAgICAoNSszKSo2CiAgICAgICAgICAgIC0yLS0xMQogICAgICAgICAgICAnJycsIGZ1bGxEdW1wPUZhbHNlKQoKICAgIHByaW50czo6CgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyct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ICAgIC0gY2xvc2VyIC0gY2xvc2luZyBjaGFyYWN0ZXIgZm9yIGEgbmVzdGVkIGxpc3QKICAgICAgIChkZWZhdWx0PSBgYCIpImBgKTsgY2FuIGFsc28gYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzCiAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZwogICAgICAgZGVsaW1pdGVycyAoZGVmYXVsdD0gOmNsYXNzOmBxdW90ZWRTdHJpbmdgKQoKICAgIElmIGFuIGV4cHJlc3Npb24gaXMgbm90IHByb3ZpZGVkIGZvciB0aGUgY29udGVudCBhcmd1bWVudCwgdGhlCiAgICBuZXN0ZWQgZXhwcmVzc2lvbiB3aWxsIGNhcHR1cmUgYWxsIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGNvbnRlbnQKICAgIGJldHdlZW4gZGVsaW1pdGVycyBhcyBhIGxpc3Qgb2Ygc2VwYXJhdGUgdmFsdWVzLgoKICAgIFVzZSB0aGUgYGBpZ25vcmVFeHByYGAgYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5CiAgICBjb250YWluIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzCiAgICBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IKICAgIGEgY29tbWVudCBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbgogICAgOmNsYXNzOmBPcmAgb3IgOmNsYXNzOmBNYXRjaEZpcnN0YC4gVGhlIGRlZmF1bHQgaXMKICAgIDpjbGFzczpgcXVvdGVkU3RyaW5nYCwgYnV0IGlmIG5vIGV4cHJlc3Npb25zIGFyZSB0byBiZSBpZ25vcmVkLCB0aGVuCiAgICBwYXNzIGBgTm9uZWBgIGZvciB0aGlzIGFyZ3VtZW50LgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsIFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZEV4cHIoJ3snLCAnfScsIGlnbm9yZUV4cHI9KHF1b3RlZFN0cmluZyB8IGNTdHlsZUNvbW1lbnQpKQoKICAgICAgICBjX2Z1bmN0aW9uID0gKGRlY2xfZGF0YV90eXBlKCJ0eXBlIikKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIKICAgICAgICAgICAgICAgICAgICAgICsgY29kZV9ib2R5KCJib2R5IikpCiAgICAgICAgY19mdW5jdGlvbi5pZ25vcmUoY1N0eWxlQ29tbWVudCkKCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgewogICAgICAgICAgICAgICAgcmV0dXJuICh4JTIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7CiAgICAgICAgICAgICAgICBpZiAoaGNoYXIgPj0gJzAnICYmIGhjaGFyIDw9ICc5JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoMTArb3JkKGhjaGFyKS1vcmQoJ0EnKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAnJycKICAgICAgICBmb3IgZnVuYyBpbiBjX2Z1bmN0aW9uLnNlYXJjaFN0cmluZyhzb3VyY2VfY29kZSk6CiAgICAgICAgICAgIHByaW50KCIlKG5hbWUpcyAoJSh0eXBlKXMpIGFyZ3M6ICUoYXJncylzIiAlIGZ1bmMpCgoKICAgIHByaW50czo6CgogICAgICAgIGlzX29kZCAoaW50KSBhcmdzOiBbWydpbnQnLCAneCddXQogICAgICAgIGRlY190b19oZXggKGludCkgYXJnczogW1snY2hhcicsICdoY2hhciddXQogICAgei5vcGVuaW5nIGFuZCBjbG9zaW5nIHN0cmluZ3MgY2Fubm90IGJlIHRoZSBzYW1lTnKtAAAAck4EAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAA8wwAAAB8AGQBGQCgAKEAUwByJAEAAKkBcugAAABymwAAAHISAAAAchIAAAByEwAAAHKdAAAAOxgAAHIUAAAAehxuZXN0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+YwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHKcBAAAciQBAABynQQAAHKbAAAAchIAAAByEgAAAHITAAAAcp0AAABAGAAAchQAAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcpwEAAByJAEAAHKdBAAAcpsAAAByEgAAAHISAAAAchMAAABynQAAAEcYAAByFAAAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABynAQAAHIkAQAAcp0EAABymwAAAHISAAAAchIAAAByEwAAAHKdAAAATBgAAHIUAAAAek9vcGVuaW5nIGFuZCBjbG9zaW5nIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MgaWYgbm8gY29udGVudCBleHByZXNzaW9uIGlzIGdpdmVuehZuZXN0ZWQgJXMlcyBleHByZXNzaW9uKRJysgIAAHKeAAAAcjkBAABy3gAAAHIqAAAAcjoAAAByKQAAAHJFAAAAcvkBAABypQAAAHJlAAAAcn4BAAByNQAAAHIvAAAAcjEAAAByTAAAAHJTAAAAchsCAAApBdoGb3BlbmVy2gZjbG9zZXLaB2NvbnRlbnRy/QMAAHKoAAAAchIAAAByEgAAAHITAAAAcnIAAADvFwAAc2AAAAAIQQgBCAEUARgBCAEIAQQBAgEC/wQCAv4CAgT+Bv8KBQT7CgcCAQL/BAIE/goDBv0IBQgBCAEC/wgCAv4MAwb9CgQE/AwGCAEC/wwCBv4KAwT9CAUGAQgBKgEkAhIBBAFycgAAAGMDAAAAAAAAAAAAAAALAAAABgAAAAMAAABzJgEAAIgBZAFkAYUCGQCJAIcAhwFmAmQCZAOECIkChwFmAWQEZAWECH0DhwFmAWQGZAeECH0EhwFmAWQIZAmECH0FdAB0AYMAoAJkCqEBoAOhAHQEgwBkC40CfQZ0BYMAdAWDAKAGfAShARcAoAdkDKEBfQd0BYMAoAZ8A6EBoAdkDaEBfQh0BYMAoAZ8BaEBoAdkDqEBfQl8AnJmdAh0CXwGgwF8BxcAdAB8CHQIfACDARcAdAl8BoMBFwB0BIMAZAuNAhcAfAkXAIMBfQpuF3QIdAl8BoMBdAB8CHQIfACDARcAdAl8BoMBFwB0BIMAZAuNAhcAfAkXAIMBfQp8CqAKhwJmAWQPZBCECKEBAQB8AKALdAx0AYMAFwChAQEAfAqgB2QRoQFTACkSYeYIAABIZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBzcGFjZS1kZWxpbWl0ZWQgaW5kZW50YXRpb24gYmxvY2tzLAogICAgc3VjaCBhcyB0aG9zZSB1c2VkIHRvIGRlZmluZSBibG9jayBzdGF0ZW1lbnRzIGluIFB5dGhvbiBzb3VyY2UgY29kZS4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICAtIGJsb2NrU3RhdGVtZW50RXhwciAtIGV4cHJlc3Npb24gZGVmaW5pbmcgc3ludGF4IG9mIHN0YXRlbWVudCB0aGF0CiAgICAgICBpcyByZXBlYXRlZCB3aXRoaW4gdGhlIGluZGVudGVkIGJsb2NrCiAgICAgLSBpbmRlbnRTdGFjayAtIGxpc3QgY3JlYXRlZCBieSBjYWxsZXIgdG8gbWFuYWdlIGluZGVudGF0aW9uIHN0YWNrCiAgICAgICAobXVsdGlwbGUgc3RhdGVtZW50V2l0aEluZGVudGVkQmxvY2sgZXhwcmVzc2lvbnMgd2l0aGluIGEgc2luZ2xlCiAgICAgICBncmFtbWFyIHNob3VsZCBzaGFyZSBhIGNvbW1vbiBpbmRlbnRTdGFjaykKICAgICAtIGluZGVudCAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQgYmV5b25kCiAgICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIEZhbHNlIGZvciBibG9jayBvZiBsZWZ0LW1vc3QKICAgICAgIHN0YXRlbWVudHMgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgYGJsb2NrU3RhdGVtZW50YGAuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoaWRlbnRpZmllcikpICsgIikiKSArICI6IikKICAgICAgICBmdW5jX2JvZHkgPSBpbmRlbnRlZEJsb2NrKHN0bXQsIGluZGVudFN0YWNrKQogICAgICAgIGZ1bmNEZWYgPSBHcm91cChmdW5jRGVjbCArIGZ1bmNfYm9keSkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyKQoKICAgICAgICBtb2R1bGVfYm9keSA9IE9uZU9yTW9yZShzdG10KQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAg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CWU2ZDNkNI0CFwBlFGU3ZDWDAYMBFwCDAYMBoBqhAKALZDahAVo4ZTllFGU6oDuhAGU4QgBkN2Q4jQKDAaALZDmhAVo8CQBlKWUEZDpkCoQAgwGDAVo9CQBlKWUEZDtkCoQAgwGDAVo+ZDxTACk/cpAAAABhHwsAAEhlcmUgYXJlIHNvbWUgY29tbW9uIGxvdy1sZXZlbCBleHByZXNzaW9ucyB0aGF0IG1heSBiZSB1c2VmdWwgaW4KICAgIGp1bXAtc3RhcnRpbmcgcGFyc2VyIGRldmVsb3BtZW50OgoKICAgICAtIG51bWVyaWMgZm9ybXMgKDpjbGFzczpgaW50ZWdlcnM8aW50ZWdlcj5gLCA6Y2xhc3M6YHJlYWxzPHJlYWw+YCwKICAgICAgIDpjbGFzczpgc2NpZW50aWZpYyBub3RhdGlvbjxzY2lfcmVhbD5gKQogICAgIC0gY29tbW9uIDpjbGFzczpgcHJvZ3JhbW1pbmcgaWRlbnRpZmllcnM8aWRlbnRpZmllcj5gCiAgICAgLSBuZXR3b3JrIGFkZHJlc3NlcyAoOmNsYXNzOmBNQUM8bWFjX2FkZHJlc3M+YCwKICAgICAgIDpjbGFzczpgSVB2NDxpcHY0X2FkZHJlc3M+YCwgOmNsYXNzOmBJUHY2PGlwdjZfYWRkcmVzcz5gKQogICAgIC0gSVNPODYwMSA6Y2xhc3M6YGRhdGVzPGlzbzg2MDFfZGF0ZT5gIGFuZAogICAgICAgOmNsYXNzOmBkYXRldGltZTxpc284NjAxX2RhdGV0aW1lPmAKICAgICAtIDpjbGFzczpgVVVJRDx1dWlkPmAKICAgICAtIDpjbGFzczpgY29tbWEtc2VwYXJhdGVkIGxpc3Q8Y29tbWFfc2VwYXJhdGVkX2xpc3Q+YAoKICAgIFBhcnNlIGFjdGlvbnM6CgogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9JbnRlZ2VyYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9GbG9hdGAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZWAKICAgICAtIDpjbGFzczpgY29udmVydFRvRGF0ZXRpbWVgCiAgICAgLSA6Y2xhc3M6YHN0cmlwSFRNTFRhZ3NgCiAgICAgLSA6Y2xhc3M6YHVwY2FzZVRva2Vuc2AKICAgICAtIDpjbGFzczpgZG93bmNhc2VUb2tlbnNgCgogICAgRXhhbXBsZTo6CgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKCiAgICBwcmludHM6OgoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgIDEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwLjBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAxMDAKICAgICAgICBbMjU2XQoKICAgICAgICBGRgogICAgICAgIFsyNTVdCgogICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAg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hABkA4MCWgRHAGQEZAWEAGQFgwJaBWQGUwApB9oOcHlwYXJzaW5nX3Rlc3R6QgogICAgbmFtZXNwYWNlIGNsYXNzIGZvciBjbGFzc2VzIHVzZWZ1bCBpbiB3cml0aW5nIHVuaXQgdGVzdHMKICAgIGMAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAABzOAAAAGUAWgFkAFoCZAFaA2QCZAOEAFoEZARkBYQAWgVkBmQHhABaBmQIZAmEAFoHZApkC4QAWghkDFMAKQ16JnB5cGFyc2luZ190ZXN0LnJlc2V0X3B5cGFyc2luZ19jb250ZXh0YXgDAAAKICAgICAgICBDb250ZXh0IG1hbmFnZXIgdG8gYmUgdXNlZCB3aGVuIHdyaXRpbmcgdW5pdCB0ZXN0cyB0aGF0IG1vZGlmeSBweXBhcnNpbmcgY29uZmlnIHZhbHVlczoKICAgICAgICAgLSBwYWNrcmF0IHBhcnNpbmcKICAgICAgICAgLSBkZWZhdWx0IHdoaXRlc3BhY2UgY2hhcmFjdGVycy4KICAgICAgICAgLSBkZWZhdWx0IGtleXdvcmQgY2hhcmFjdGVycwogICAgICAgICAtIGxpdGVyYWwgc3RyaW5nIGF1dG8tY29udmVyc2lvbiBjbGFzcwogICAgICAgICAtIF9fZGlhZ19fIHNldHRpbmdzCgogICAgICAgIEV4YW1wbGU6CiAgICAgICAgICAgIHdpdGggcmVzZXRfcHlwYXJzaW5nX2NvbnRleHQoKToKICAgICAgICAgICAgICAgICMgdGVzdCB0aGF0IGxpdGVyYWxzIHVzZWQgdG8gY29uc3RydWN0IGEgZ3JhbW1hciBhcmUgYXV0b21hdGljYWxseSBzdXBwcmVzc2VkCiAgICAgICAgICAgICAgICBQYXJzZXJFbGVtZW50LmlubGluZUxpdGVyYWxzVXNpbmcoU3VwcHJlc3MpCgogICAgICAgICAgICAgICAgdGVybSA9IFdvcmQoYWxwaGFzKSB8IFdvcmQobnVtcykKICAgICAgICAgICAgICAgIGdyb3VwID0gR3JvdXAoJygnICsgdGVybVsuLi5dICsgJyknKQoKICAgICAgICAgICAgICAgICMgYXNzZXJ0IHRoYXQgdGhlICcoKScgY2hhcmFjdGVycyBhcmUg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gQAAAHJvAAAAcn4AAAByfAAAAHKPAAAAcoYAAAByZAAAAHJ6BAAAcm0AAABybgAAAHKHAAAAcn4EAAByjQAAAHJ2AAAAcooEAAByiwQAAHKLAAAAcncAAAByYAAAAHKAAAAAcnsAAAByhQAAAHJyAAAAcogAAAByVwAAAHJ5AAAAclkAAAByWAAAAHI3AQAAcrMAAABysAQAAHJnAQAAcl0AAAByfQAAAHJaAAAAcmcAAAByxQIAAHJ/AAAAcmEAAAByXwAAAHJoAAAAcnoAAAByhQIAAHLcBAAAclwAAABykAAAAHLeBAAAcpIAAABykQAAAHIDBQAAcgAFAABy5AQAAHIBBQAAcgIFAAByFQUAAHIHBQAAcv8EAABy/AQAAHL7BAAAcggFAAByBAUAAHIGBQAAcgkFAAByCwUAAHIPAAAAWgtzZWxlY3RUb2tlbloJZnJvbVRva2Vu2gVpZGVudFoKY29sdW1uTmFtZVoOY29sdW1uTmFtZUxpc3RaCmNvbHVtblNwZWNaCXRhYmxlTmFtZVoNdGFibGVOYW1lTGlzdFoJc2ltcGxlU1FMcvoCAABy0gQAAHK2BAAAcrgEAABy2wQAAHLIBAAAchIAAAByEgAAAHISAAAAchMAAADaCDxtb2R1bGU+AQAAAHN0AgAAAhoC/wRIBAEEAQgCDAEIAQgBCAEIAQgBCAEIAQgBCAEMAQwBCAEMAQwBAgIQAgwBEAEC/wIDEAEMARABAv8CAwwCFAEMAQwCFAEC/QIFEAEMAQIBEAEMAQgBAv8EgAL9AgYQAQwBEgEC/wYEBgEGCwYCBgEGDwYBBgEGAQYBFAEIAgYFCAMSFgwBBgEGAQQBBAEEAQQBHAMGAwQBCAIEFwgBDAICARYBDgEGAQL/FgMIAgwKBAEIAQgBCAEWAQwDEAwQPxBdEAUQFRAKEAoAfwB/AH8AfwB/CkgIAggOCAwICggDCAMIAwIaDAEQRAB/AH8AfwB/AH8AfwB/AH8AfwB/AH8QKxAhEAgQChAOECcEBgYBEAIQThAXEA0QRQB/ECAQChAOAH8QDQB/EBgQSxBGEAcQGhAfEBQQDxAREBUQFxB5EG0QexBWAH8QBhBPECMQSxAsEDoQIxAfEAcQRBB2EGoQCBAtEBYQRBAdCA8MMAwVCCQICQgeCB0MCAhXDCcIKggGDB4MAQwBDAEMARgCEgESARgBFAEwAQgCCCAICQgPCA8MMAIBDAMCAQYEBgEK/gglCBgICAhFDAIGJggBCAEWAgB/BAICARYDFgEMAQoBBP8GAQL/GgIWAhBoCn4KASACFgEoAQwBHAUCARICAgEWAhIBAgEgAgIBBAICARICAgEQAgoBCAEC/wYBBP8G/wwCAv4iAwIBFAcAfwB/Fi4WEhYvCEoIAQL/CAII/gYFEAEQARABEAEQARABFAEUARQBEAEQARABFAMAfw42DAIMARICHAIYAQ4BHAIYASwCEAMSGBIKEgkMBRgBFgEEvQ==
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
distro.cpython-310.pyc
37.38 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-310.pyc
232.25 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-310.pyc
26.98 KB
lrw-r--r--
2026-01-09 15:17:42
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.pyc
2.89 KB
lrw-r--r--
2026-01-09 15:17:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).