REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 237.48 KB
Close
/proc/self/root/opt/alt/python36/lib/python3.6/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-36.pyc
Text
Base64
Mw0NChaUUmXyKwQA4wAAAAAAAAAAAAAAAKIAAABAAAAAcwYPAABkAFoAZAFaAWQCWgJkA1oDZARkBWwEWgRkBGQGbAVtBloHAQBkBGQFbAhaCGQEZAVsCVoJZARkBWwKWgpkBGQFbAtaC2QEZAVsDFoMZARkBWwNWg1kBGQFbA5aDmQEZAVsD1oPZARkBWwQWhBkBGQHbBFtEVoRAQBkBGQIbBJtE1oTAQBkBGQFbBRaFGQEZAlsFW0WWhYBAGQEZApsF20YWhgBAHkQZARkC2wUbRlaGQEAVwBuIAQAZRprCnLUAQABAAEAZARkDGwUbRtaGQEAWQBuAlgAeRBkBGQNbBxtHVodAQBXAG4iBABlGmsKkAFyCAEAAQABAGQEZA1sHm0dWh0BAFkAbgJYAHkgZARkDmwfbSBaIAEAZARkD2wfbSFaIW0iWiIBAFcAbjIEAGUaawqQAXJcAQABAAEAZARkDmwNbSBaIAEAZARkD2wNbSFaIW0iWiIBAFkAbgJYAHkQZARkEGwNbSNaJAEAVwBuQgQAZRprCpABcrABAAEAAQB5EGQEZBBsJW0jWiQBAFcAbhoEAGUaawqQAXKqAQABAAEAZAVaJFkAbgJYAFkAbgJYAHkQZARkEWwQbSZaJgEAVwBuJAQAZRprCpABcuYBAAEAAQBHAGQSZBOEAGQTgwJaJlkAbgJYAGUmgwBaJ2QUZSdfAGQVZSdfKGUmgwBaKWQWZSlfAGQXZSlfKmQXZSlfK2QXZSlfLGQXZSlfLWQXZSlfLmQYZBmEAGUvZSmDAUQAgwFlKV8wZBpkG4QAWjFlMWUpXzJkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWQ+ZD9kQGRBZEJkQ2REZEVkRmRHZEhkSWRKZEtkTGRNZE5kT2RQZFFkUmRTZFRkVWRWZFdkWGRZZFpkW2RcZF1kXmRfZGBkYWRiZGNkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmSDZIRkhWSGZIdkiGSJZIpki2SMZI1kjmSPZ3RaM2U0ZQlqNYMBZAVkkIUCGQBaNmU2ZAQZAGSQawJaN2U3kANyiGUJajhaOWU6WjtlPFo9ZTpaPmU6Wj9lQGVBZUJlQ2VEZTRlRWVGZUdlSGVJZwtaSm5iZQlqS1o5ZUxaTWSRZJKEAFo/ZwBaSmQEZAVsTlpOeEJkk2pPgwBEAF02WlB5FGVKalFlUmVOZVCDAoMBAQBXAG4aBABlU2sKkANy4gEAAQABAJADd7BZAG4CWACQA3GwVwBlVGSUZJWEAGVNZJaDAUQAgwGDAVpVZJdkmIQAWlZlBGpXZQRqWBcAWllkmVpaZVpkmhcAWltlWWVaFwBaXGU8ZJuDAVpdZJxqXmSdZJWEAGUEal9EAIMBgwFaYJABZGFknmSOhAFaYUcAZJ9kOYQAZDllYoMDWmNHAGSgZDuEAGQ7ZWODA1pkRwBkoWQ9hABkPWVjgwNaZUcAZKJkP4QAZD9lZYMDWmZHAGSjZEKEAGRCZWKDA1pnRwBkpGSlhABkpWVogwNaaUcAZKZkPoQAZD5laIMDWmplIWprZWqDAQEAZKdkVoQAWmxkqGRnhABabWSpZGSEAFpuZKpkq4QAWm9krGSthABacGSuZK+EAFpxZLBkboQAWnKQAWRiZLJks4QBWnNHAGS0ZECEAGRAZWiDA1p0RwBktWS2hABktmV0gwNadUcAZLdkSIQAZEhldIMDWnZHAGS4ZCiEAGQoZXaDA1p3RwBkuWQzhABkM2V2gwNaeEcAZLpkMIQAZDBldoMDWnlHAGS7ZLyEAGS8ZXmDA1p6ZXlae2V5ZXRffEcAZL1kLYQAZC1ldoMDWn1HAGS+ZCOEAGQjZXmDA1p+RwBkv2QihABkImV9gwNaf0cAZMBkiYQAZIlldoMDWoBHAGTBZEuEAGRLZXaDA1qBRwBkwmTDhABkw2WBgwNagkcAZMRkT4QAZE9lgoMDWoNHAGTFZEOEAGRDZXaDA1qERwBkxmRBhABkQWV2gwNahUcAZMdkJIQAZCRldoMDWoZHAGTIZEqEAGRKZXaDA1qHRwBkyWTKhABkymV2gwNaiEcAZMtkK4QAZCtliIMDWolHAGTMZC+EAGQvZYiDA1qKRwBkzWQuhABkLmWIgwNai0cAZM5kRoQAZEZliIMDWoxHAGTPZEWEAGRFZYiDA1qNRwBk0GRNhABkTWWIgwNajkcAZNFkTIQAZExliIMDWo9HAGTSZDyEAGQ8ZXSDA1qQRwBk02QhhABkIWWQgwNakUcAZNRkOIQAZDhlkIMDWpJHAGTVZDKEAGQyZZCDA1qTRwBk1mQnhABkJ2WQgwNalEcAZNdkOoQAZDpldIMDWpVHAGTYZCmEAGQpZZWDA1qWRwBk2WQxhABkMWWVgwNal0cAZNpkNIQAZDRllYMDWphHAGTbZNyEAGTcZZWDA1qZRwBk3WQ1hABkNWWZgwNamkcAZN5kToQAZE5lmYMDWptHAGTfZOCEAGTgZWiDA1qcRwBk4WQ3hABkN2WVgwNanUcAZOJkRIQAZERllYMDWp5HAGTjZCqEAGQqZZWDA1qfRwBk5GRJhABkSWWVgwNaoEcAZOVkJYQAZCVloIMDWqFHAGTmZCyEAGQsZaCDA1qiRwBk52QmhABkJmWggwNao0cAZOhkR4QAZEdloIMDWqRHAGTpZDaEAGQ2ZWiDA1qlZOpkf4QAWqaQAWRjZOxkXYQBWqeQAWRkZO1kWYQBWqhk7mTvhABaqWTwZGyEAFqqZPFka4QAWqtk8mTzhABarJABZGVk9GRwhAFarWT1ZF6EAFqukAFkZmT2ZISEAVqvZPdkhYQAWrBk+GSHhABasWV3gwBqsmRggwFas2WKgwBqsmRmgwFatGWLgwBqsmRlgwFatWWMgwBqsmR+gwFatmWNgwBqsmR9gwFat2WBZV1k+WSxZPqNA2q4ZPtk/IQAgwFauWWEZP2DAWq4ZP5k/IQAgwFaumWEZP+DAWq4kAFkAGT8hACDAVq7ZbllukIAZbtCAGWGkAFkAWSWZPqNAkIAWrxlomW8ZaSQAWQCgwEXAGW8FwCDAVq9ZXmQAWQDgwFlnZABZASDAWq+kAFkBYMBFwBlomWaZb1lvEIAgwGDAWq+kAFkBoMBFwCQAWQHFwBav5ABZAhkfIQAWsCQAWQJZGqEAFrBkAFkCmR5hABawpABZAtkd4QAWsOQAWQMZIqEAFrEZcSQAWQNZPyEAIMBWsVlxJABZA5k/IQAgwFaxmWkkAFkD4MBZaSQAWQQgwFmApABZBGQAWQShAFax5ABZBNkaIQAWsiQAWQUZGmEAFrJkAFkFWSChABaymVogwBlyl/LkAFkZ5ABZBZkiIQBWsxlJoMAWs1laIMAZc1fzmVogwBlzV/PZaSQAWQXgwFlpJABZBiDAWYCkAFkGWSGhAFa0GXQWtFloWWEkAFkGoMBkAFkGxcAgwFqspABZByDAVrSZaFlhJABZB2DAZABZB4XAIMBarKQAWQfgwFa02WhZYSQAWQagwGQAWQbFwBlhJABZB2DAZABZB4XAEIAgwFqspABZCCDAVrUZaFle5ABZCGDAWXUagiDABcAgwFqspABZCKDAVrVkAFkF5ABZBhkBWXUagiDAGYEkAFkI2RthAFa1pABZGiQAWQkZIOEAVrXZcCQAWQlgwFa2GXAkAFkJoMBWtllyGWBZVllXJABZCcXAIMCarKQAWQogwGDAVwCWtpa22XcZd2QAWQpak+DAJABZCqDAoMBWt5lhJABZCuQAWQsal5l3mrfgwCDARcAkAFkLRcAgwFqspABZC6DAVrgkAFkL2R4hABa4WWhZYSQAWQwgwGQAWQxFwCDAWqykAFkMoMBWuJlhJABZDODAWqykAFkNIMBWuNlhJABZDWDAWrkgwBqspABZDaDAVrlZYSQAWQ3gwFqspABZDiDAVrmZaFlhJABZDCDAZABZDEXAGXmQgCDAWqykAFkOYMBWudl51roZYSQAWQ6gwFqspABZDuDAVrpZaFlmmWBZWBk65ABZDyNAmWdZYGQAWQ9gwFleWTrgwEPABcAZYuDAA8AFwCDARcAgwGDAWrqgwBqspABZD6DAVrrZadlnWXUagiDAGXrQgBknJABZD+NAoMBarJkV4MBWuxHAJABZEBki4QAZIuDAlrtRwCQAWRBkAFkQoQAkAFkQmVogwNa7kcAkAFkQ2SNhABkjWVogwNa70cAkAFkRGSMhABkjGXvgwNa8GXwavFq8mrzZfBq8Wr0avMXAGXwavFq9WrzFwBl8GrxX/NlN5ANcphl9mXwkAFkRWXwaveDAwEAZfZl8JABZEZl8Gr4gwMBAGX2ZfCQAWRHZfBq+YMDAQBl9mXwkAFkSGXwavqDAwEAZfZl8JABZEll8Gr7gwMBAGX2ZfCQAWRKZfBq8YMDAQBl9mXwavGQAWRLZfBq8WrygwMBAGX2ZfBq8ZABZExl8GrxavWDAwEAZfZl8GrxkAFkTWXwavFq9IMDAQBl9mXwkAFkTmXwavyDAwEAZfZl8JABZE9l8Gr9gwMBAGX2ZfCQAWRQZfBq/oMDAQBHAJABZFGQAWRShACQAWRSgwJa/5ABZQCQAWRTawKQD3ICZX6QAWRUgwGQAVoBZX6QAWRVgwGQAVoCZYFlWWVckAFkVhcAgwKQAVoDZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaBGWiZaeQAWUEgwGDAWqykAFkWYMBkAFaBZABZFqQAWUFQgCQAVoGZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaB2WiZaeQAWUHgwGDAWqykAFkW4MBkAFaCJABZQGQAWRcgwGQAWUGkAFkWYMBFwCQAWUCFwCQAWUIkAFkW4MBFwCQAVoJkAFlCZABagqQAWRdgwEBAGXtkAFqC5ABagqQAWRegwEBAGXtkAFqDJABagqQAWRegwEBAGXtkAFqDZABagqQAWRfgwEBAGQEZAWQAWwOkAFaDmXtkAFqDmq4ZcSQAWUOkAFqD4MBgwEBAGXtkAFqDpABagqQAWRggwEBAGQFUwAoaQEAAGHXCgAACnB5cGFyc2luZyBtb2R1bGUgLSBDbGFzc2VzIGFuZCBtZXRob2RzIHRvIGRlZmluZSBhbmQgZXhlY3V0ZSBwYXJzaW5nIGdyYW1tYXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBjcmVhdGluZyBhbmQKZXhlY3V0aW5nIHNpbXBsZSBncmFtbWFycywgdnMuIHRoZSB0cmFkaXRpb25hbCBsZXgveWFjYyBhcHByb2FjaCwgb3IgdGhlCnVzZSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2l0aCBweXBhcnNpbmcsIHlvdSBkb24ndCBuZWVkIHRvIGxlYXJuCmEgbmV3IHN5bnRheCBmb3IgZGVmaW5pbmcgZ3JhbW1hcnMgb3IgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgLSB0aGUgcGFyc2luZwptb2R1bGUgcHJvdmlkZXMgYSBsaWJyYXJ5IG9mIGNsYXNzZXMgdGhhdCB5b3UgdXNlIHRvIGNvbnN0cnVjdCB0aGUKZ3JhbW1hciBkaXJlY3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybQpgYCI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJgYCksIGJ1aWx0IHVwIHVzaW5nIDpjbGFzczpgV29yZGAsCjpjbGFzczpgTGl0ZXJhbGAsIGFuZCA6Y2xhc3M6YEFuZGAgZWxlbWVudHMKKHRoZSA6Y2xhc3M6YCcrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+YCBvcGVyYXRvcnMgY3JlYXRlIDpjbGFzczpgQW5kYCBleHByZXNzaW9ucywKYW5kIHRoZSBzdHJpbmdzIGFyZSBhdXRvLWNvbnZlcnRlZCB0byA6Y2xhc3M6YExpdGVyYWxgIGV4cHJlc3Npb25zKTo6CgogICAgZnJvbSBwaXAuX3ZlbmRvci5weXBhcnNpbmcgaW1wb3J0IFdvcmQsIGFscGhhcwoKICAgICMgZGVmaW5lIGdyYW1tYXIgb2YgYSBncmVldGluZwogICAgZ3JlZXQgPSBXb3JkKGFscGhhcykgKyAiLCIgKyBXb3JkKGFscGhhcykgKyAiISIKCiAgICBoZWxsbyA9ICJIZWxsbywgV29ybGQhIgogICAgcHJpbnQgKGhlbGxvLCAiLT4iLCBncmVldC5wYXJzZVN0cmluZyhoZWxsbykpCgpUaGUgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmb2xsb3dpbmc6OgoKICAgIEhlbGxvLCBXb3JsZCEgLT4gWydIZWxsbycsICcsJywgJ1dvcmxkJywgJyEnXQoKVGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JhbW1hciBpcyBxdWl0ZSByZWFkYWJsZSwgb3dpbmcgdG8gdGhlCnNlbGYtZXhwbGFuYXRvcnkgY2xhc3MgbmFtZXMsIGFuZCB0aGUgdXNlIG9mICcrJywgJ3wnIGFuZCAnXicgb3BlcmF0b3JzLgoKVGhlIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QgcmV0dXJuZWQgZnJvbQo6Y2xhc3M6YFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdgIGNhbiBiZQphY2Nlc3NlZCBhcyBhIG5lc3RlZCBsaXN0LCBhIGRpY3Rpb25hcnksIG9yIGFuIG9iamVjdCB3aXRoIG5hbWVkCmF0dHJpYnV0ZXMuCgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBoYW5kbGVzIHNvbWUgb2YgdGhlIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseQp2ZXhpbmcgd2hlbiB3cml0aW5nIHRleHQgcGFyc2VyczoKCiAgLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUKICAgICJIZWxsbyxXb3JsZCEiLCAiSGVsbG8gICwgIFdvcmxkICAhIiwgZXRjLikKICAtIHF1b3RlZCBzdHJpbmdzCiAgLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgYW5kIDpjbGFzczpgUGFyc2VSZXN1bHRzYCB0bwpzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKCiAtIGNvbnN0cnVjdCBsaXRlcmFsIG1hdGNoIGV4cHJlc3Npb25zIGZyb20gOmNsYXNzOmBMaXRlcmFsYCBhbmQKICAgOmNsYXNzOmBDYXNlbGVzc0xpdGVyYWxgIGNsYXNzZXMKIC0gY29uc3RydWN0IGNoYXJhY3RlciB3b3JkLWdyb3VwIGV4cHJlc3Npb25zIHVzaW5nIHRoZSA6Y2xhc3M6YFdvcmRgCiAgIGNsYXNzCiAtIHNlZSBob3cgdG8gY3JlYXRlIHJlcGV0aXRpdmUgZXhwcmVzc2lvbnMgdXNpbmcgOmNsYXNzOmBaZXJvT3JNb3JlYAogICBhbmQgOmNsYXNzOmBPbmVPck1vcmVgIGNsYXNzZXMKIC0gdXNlIDpjbGFzczpgJysnPEFuZD5gLCA6Y2xhc3M6YCd8JzxNYXRjaEZpcnN0PmAsIDpjbGFzczpgJ14nPE9yPmAsCiAgIGFuZCA6Y2xhc3M6YCcmJzxFYWNoPmAgb3BlcmF0b3JzIHRvIGNvbWJpbmUgc2ltcGxlIGV4cHJlc3Npb25zIGludG8KICAgbW9yZSBjb21wbGV4IG9uZXMKIC0gYXNzb2NpYXRlIG5hbWVzIHdpdGggeW91ciBwYXJzZWQgcmVzdWx0cyB1c2luZwogICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWVgCiAtIGFjY2VzcyB0aGUgcGFyc2VkIGRhdGEsIHdoaWNoIGlzIHJldHVybmVkIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgCiAgIG9iamVjdAogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSA6Y2xhc3M6YGRlbGltaXRlZExpc3RgCiAgIGFuZCA6Y2xhc3M6YG9uZU9mYAogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgOmNsYXNzOmBweXBhcnNpbmdfY29tbW9uYAogICBuYW1lc3BhY2UgY2xhc3MKegUyLjQuN3oVMzAgTWFyIDIwMjAgMDA6NDMgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaCml0ZW1nZXR0ZXIpAdoFd3JhcHMpAdoOY29udGV4dG1hbmFnZXIpAdoLZmlsdGVyZmFsc2UpAdoMaWZpbHRlcmZhbHNlKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQLaDk11dGFibGVNYXBwaW5n2gdNYXBwaW5nKQHaC09yZGVyZWREaWN0KQHaD1NpbXBsZU5hbWVzcGFjZWMAAAAAAAAAAAAAAAABAAAAQAAAAHMMAAAAZQBaAWQAWgJkAVMAKQJyDgAAAE4pA9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX6kAchIAAAByEgAAAPqEL2J1aWxkZGlyL2J1aWxkL0JVSUxEUk9PVC9hbHQtcHl0aG9uMzYtcGlwLTIwLjIuNC01LmVsOC54ODZfNjQvb3B0L2FsdC9weXRob24zNi9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvcGlwL192ZW5kb3IvcHlwYXJzaW5nLnB5cg4AAACWAAAAcwIAAAAIAHIOAAAAYUECAAAKICAgIEEgY3Jvc3MtdmVyc2lvbiBjb21wYXRpYmlsaXR5IGNvbmZpZ3VyYXRpb24gZm9yIHB5cGFyc2luZyBmZWF0dXJlcyB0aGF0IHdpbGwgYmUKICAgIHJlbGVhc2VkIGluIGEgZnV0dXJlIHZlcnNpb24uIEJ5IHNldHRpbmcgdmFsdWVzIGluIHRoaXMgY29uZmlndXJhdGlvbiB0byBUcnVlLAogICAgdGhvc2UgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgaW4gcHJpb3IgdmVyc2lvbnMgZm9yIGNvbXBhdGliaWxpdHkgZGV2ZWxvcG1lbnQKICAgIGFuZCB0ZXN0aW5nLgoKICAgICAtIGNvbGxlY3RfYWxsX0FuZF90b2tlbnMgLSBmbGFnIHRvIGVuYWJsZSBmaXggZm9yIElzc3VlICM2MyB0aGF0IGZpeGVzIGVycm9uZW91cyBncm91cGluZwogICAgICAgb2YgcmVzdWx0cyBuYW1lcyB3aGVuIGFuIEFuZCBleHByZXNzaW9uIGlzIG5lc3RlZCB3aXRoaW4gYW4gT3Igb3IgTWF0Y2hGaXJzdDsgc2V0IHRvCiAgICAgICBUcnVlIHRvIGVuYWJsZSBidWdmaXggcmVsZWFzZWQgaW4gcHlwYXJzaW5nIDIuMy4wLCBvciBGYWxzZSB0byBwcmVzZXJ2ZQogICAgICAgcHJlLTIuMy4wIGhhbmRsaW5nIG9mIG5hbWVkIHJlc3VsdHMKVGGTAwAACkRpYWdub3N0aWMgY29uZmlndXJhdGlvbiAoYWxsIGRlZmF1bHQgdG8gRmFsc2UpCiAgICAgLSB3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgICBuYW1lIGlzIGRlZmluZWQgb24gYSBNYXRjaEZpcnN0IG9yIE9yIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSBBbmQgc3ViZXhwcmVzc2lvbnMKICAgICAgIChvbmx5IHdhcm5zIGlmIF9fY29tcGF0X18uY29sbGVjdF9hbGxfQW5kX3Rva2VucyBpcyBGYWxzZSkKICAgICAtIHdhcm5fdW5ncm91cGVkX25hbWVkX3Rva2Vuc19pbl9jb2xsZWN0aW9uIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIGNvbnRhaW5pbmcgZXhwcmVzc2lvbiB3aXRoIHVuZ3JvdXBlZCBzdWJleHByZXNzaW9ucyB0aGF0IGFsc28KICAgICAgIGhhdmUgcmVzdWx0cyBuYW1lcwogICAgIC0gd2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJkIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBhIEZvcndhcmQgaXMgZGVmaW5lZAogICAgICAgd2l0aCBhIHJlc3VsdHMgbmFtZSwgYnV0IGhhcyBubyBjb250ZW50cyBkZWZpbmVkCiAgICAgLSB3YXJuX29uX211bHRpcGxlX3N0cmluZ19hcmdzX3RvX29uZW9mIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBvbmVPZiBpcwogICAgICAgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggbXVsdGlwbGUgc3RyIGFyZ3VtZW50cwogICAgIC0gZW5hYmxlX2RlYnVnX29uX25hbWVkX2V4cHJlc3Npb25zIC0gZmxhZyB0byBhdXRvLWVuYWJsZSBkZWJ1ZyBvbiBhbGwgc3Vic2VxdWVudAogICAgICAgY2FsbHMgdG8gUGFyc2VyRWxlbWVudC5zZXROYW1lKCkKRmMBAAAAAAAAAAIAAAAEAAAAQwAAAHMkAAAAZwB8AF0cfQF8AWoAZACDAXMcfAFqAGQBgwFyBHwBkQJxBFMAKQJaB2VuYWJsZV9aBXdhcm5fKQHaCnN0YXJ0c3dpdGgpAtoCLjDaAm5tchIAAAByEgAAAHITAAAA+go8bGlzdGNvbXA+vAAAAHMCAAAABgByFwAAAGMAAAAAAAAAAAAAAAACAAAAQwAAAHMcAAAAZAF0AF8BZAF0AF8CZAF0AF8DZAF0AF8EZABTACkCTlQpBdoIX19kaWFnX1/aKXdhcm5fbXVsdGlwbGVfdG9rZW5zX2luX25hbWVkX2FsdGVybmF0aW9u2il3YXJuX3VuZ3JvdXBlZF9uYW1lZF90b2tlbnNfaW5fY29sbGVjdGlvbtoed2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJk2iV3YXJuX29uX211bHRpcGxlX3N0cmluZ19hcmdzX3RvX29uZW9mchIAAAByEgAAAHISAAAAchMAAADaFF9lbmFibGVfYWxsX3dhcm5pbmdzvgAAAHMIAAAAAAEGAQYBBgFyHQAAANoLX192ZXJzaW9uX1/aD19fdmVyc2lvblRpbWVfX9oKX19hdXRob3JfX9oKX19jb21wYXRfX3IYAAAA2gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKUHJlY2VkZWRCedoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2gRDaGFy2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbtoRcHlwYXJzaW5nX3VuaWNvZGXaC3VuaWNvZGVfc2V02hZjb25kaXRpb25Bc1BhcnNlQWN0aW9u2gJyZekDAAAAYwEAAAAAAAAAAwAAAAsAAABDAAAAc2AAAAB0AHwAdAGDAnIOfABTAHkIdAJ8AIMBUwAEAHQDawpyWgEAAQABAHQBfACDAWoEdAVqBoMAZAGDAn0BdAdkAoMBfQJ8AmoIZANkBIQAgwEBAHwCagl8AYMBUwBYAGQFUwApBmEfAQAARHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3RyKG9iaikgdGhhdCB0cmllcyB0byBiZSBVbmljb2RlCiAgICAgICAgZnJpZW5kbHkuIEl0IGZpcnN0IHRyaWVz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ICAgICAtIGV4YyAtIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIHBhcnNpbmcgKG5lZWQgbm90IGJlIGEgUGFyc2VFeGNlcHRpb24sIGluIHN1cHBvcnQKICAgICAgICAgICBvZiBQeXRob24gZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHJhaXNlZCBpbiBhIHBhcnNlIGFjdGlvbikKICAgICAgICAgLSBkZXB0aCAoZGVmYXVsdD0xNikgLSBudW1iZXIgb2YgbGV2ZWxzIGJhY2sgaW4gdGhlIHN0YWNrIHRyYWNlIHRvIGxpc3QgZXhwcmVzc2lvbgogICAgICAgICAgIGFuZCBmdW5jdGlvbiBuYW1lczsgaWYgTm9uZSwgdGhlIGZ1bGwgc3RhY2sgdHJhY2UgbmFtZXMgd2lsbCBiZSBsaXN0ZWQ7IGlmIDAsIG9ubHkKICAgICAgICAgICB0aGUgZmFpbGluZyBpbnB1dCBsaW5lLCBtYXJrZXIsIGFuZCBleGNlcHRpb24gc3RyaW5nIHdpbGwgYmUgc2hvd24KCiAgICAgICAgUmV0dXJucyBhIG11bHRpLWxpbmUgc3RyaW5nIGxpc3RpbmcgdGhlIFBhcnNlckVsZW1lbnRzIGFuZC9vciBmdW5jdGlvbiBuYW1lcyBpbiB0aGUKICAgICAgICBleGNlcHRpb24ncyBzdGFjayB0cmFjZS4KCiAgICAgICAgTm90ZTogdGhlIGRpYWdub3N0aWMgb3V0cHV0IHdpbGwgaW5jbHVkZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBleHByZXNzaW9ucwogICAgICAgIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBUaGVzZSByZXByZXNlbnRhdGlvbnMgd2lsbCBiZSBtb3JlIGhlbHBmdWwgaWYgeW91IHVzZSBgc2V0TmFtZWAgdG8KICAgICAgICBnaXZlIGlkZW50aWZpYWJsZSBuYW1lcyB0byB5b3VyIGV4cHJlc3Npb25zLiBPdGhlcndpc2UgdGhleSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBzdHJpbmcKICAgICAgICBmb3Jtcywgd2hpY2ggbWF5IGJlIGNyeXB0aWMgdG8gcmVhZC4KCiAgICAgICAgZXhwbGFpbigpIGlz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IGl0ZW0gYXQgc3BlY2lmaWVkIGluZGV4IChkZWZhdWx0PSBgYGxhc3RgYCkuCiAgICAgICAgU3VwcG9ydHMgYm90aCBgYGxpc3RgYCBhbmQgYGBkaWN0YGAgc2VtYW50aWNzIGZvciBgYHBvcCgpYGAuIElmCiAgICAgICAgcGFzc2VkIG5vIGFyZ3VtZW50IG9yIGFuIGludGVnZXIgYXJndW1lbnQsIGl0IHdpbGwgdXNlIGBgbGlzdGBgCiAgICAgICAgc2VtYW50aWNzIGFuZCBwb3AgdG9rZW5zIGZyb20gdGhlIGxpc3Qgb2YgcGFyc2VkIHRva2Vucy4gSWYgcGFzc2VkCiAgICAgICAgYSBub24taW50ZWdlciBhcmd1bWVudCAobW9zdCBsaWtlbHkgYSBzdHJpbmcpLCBpdCB3aWxsIHVzZSBgYGRpY3RgYAogICAgICAgIHNlbWFudGljcyBhbmQgcG9wIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGZyb20gYW55IGRlZmluZWQgcmVzdWx0cwogICAgICAgIG5hbWVzLiBBIHNlY29uZCBkZWZhdWx0IHJldHVybiB2YWx1ZSBhcmd1bWVudCBpcyBzdXBwb3J0ZWQsIGp1c3QgYXMgaW4KICAgICAgICBgYGRpY3QucG9wKClgYC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBkZWYgcmVtb3ZlX2ZpcnN0KHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKDApCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX2ZpcnN0KS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycxMjMnLCAnMzIxJ10KCiAgICAgICAgICAgIGxhYmVsID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHBhdHQgPSBsYWJlbCgiTEFCRUwiKSArIE9uZU9yTW9yZShXb3JkKG51bXMpKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKCiAgICAgICAgICAgICMgVXNlIHBvcCgpIGluIGEgcGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBuYW1lZCByZXN1bHQgKG5vdGUgdGhhdCBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAjIHJlbW92ZWQgZnJvbSBsaXN0IGZvcm0gb2YgcmVzdWx0cykKICAgICAgICAgICAgZGVmIHJlbW92ZV9MQUJFTCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgiTEFCRUwiKQogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucwogICAgICAgICAgICBwYXR0LmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9MQUJFTCkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICAgICAgLSBMQUJFTDogQUFCCgogICAgICAgICAgICBbJ0FBQicsICcxMjMnLCAnMzIxJ10KICAgICAgICBylAAAANoHZGVmYXVsdHIBAAAAei1wb3AoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclcydOcpUAAAApBXIsAQAAciEBAABymgAAAHKXAAAActIAAAApCHLHAAAAcsYAAADaBmt3YXJnc3ImAQAAciMBAADaBWluZGV4cqQAAADaDGRlZmF1bHR2YWx1ZXISAAAAchIAAAByEwAAANoDcG9wvQIAAHMeAAAAACUEAQYBEgEIAQ4CEAEOAQwBDAEIAQgBBgEEAggBehBQYXJzZVJlc3VsdHMucG9wYwMAAAAAAAAAAwAAAAIAAABDAAAAcxgAAAB8AXwAawZyEHwAfAEZAFMAfAJTAGQBUwApAmFbAgAACiAgICAgICAgUmV0dXJucyBuYW1lZCByZXN1bHQgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleSwgb3IgaWYgdGhlcmUgaXMgbm8KICAgICAgICBzdWNoIG5hbWUsIHRoZW4gcmV0dXJucyB0aGUgZ2l2ZW4gYGBkZWZhdWx0VmFsdWVgYCBvciBgYE5vbmVgYCBpZiBubwogICAgICAgIGBgZGVmYXVsdFZhbHVlYGAgaXMgc3BlY2lmaWVkLgoKICAgICAgICBTaW1pbGFyIHRvIGBgZGljdC5nZXQoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQoInllYXIiKSkgIyAtPiAnMTk5OScKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmdldCgiaG91ciIsICJub3Qgc3BlY2lmaWVkIikpICMgLT4gJ25vdCBzcGVjaWZpZWQnCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQoImhvdXIiKSkgIyAtPiBOb25lCiAgICAgICAgTnISAAAAKQNyxwAAANoDa2V52gxkZWZhdWx0VmFsdWVyEgAAAHISAAAAchMAAABy9AAAAPQCAABzBgAAAAASCAEIAnoQUGFyc2VSZXN1bHRzLmdldGMDAAAAAAAAAAgAAAAHAAAAQwAAAHNaAAAAfABqAGoBfAF8AoMCAQB4RnwAagJqA4MARABdOFwCfQN9BHgudAR8BIMBRABdIlwCfQVcAn0GfQd0BXwGfAd8B3wBawQXAIMCfAR8BTwAcSxXAHEaVwBkAVMAKQJhGQIAAAogICAgICAgIEluc2VydHMgbmV3IGVsZW1lbnQgYXQgbG9jYXRpb24gaW5kZXggaW4gdGhlIGxpc3Qgb2YgcGFyc2VkIHRva2Vucy4KCiAgICAgICAgU2ltaWxhciB0byBgYGxpc3QuaW5zZXJ0KClgYC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBwcmludChP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BGoIgwCDAYMBUwBkAVMAZAFTACkGYR0DAAAKICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRzIG5hbWUgZm9yIHRoaXMgdG9rZW4gZXhwcmVzc2lvbi4gVXNlZnVsIHdoZW4gc2V2ZXJhbAogICAgICAgIGRpZmZlcmVudCBleHByZXNzaW9ucyBtaWdodCBtYXRjaCBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24uCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgc3NuX2V4cHIgPSBSZWdleChyIlxkXGRcZC1cZFxkLVxkXGRcZFxkIikKICAgICAgICAgICAgaG91c2VfbnVtYmVyX2V4cHIgPSBTdXBwcmVzcygnIycpICsgV29yZChudW1zLCBhbHBoYW51bXMpCiAgICAgICAgICAgIHVzZXJfZGF0YSA9IChHcm91cChob3VzZV9udW1iZXJfZXhwcikoImhvdXNlX251bWJlciIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoc3NuX2V4cHIpKCJzc24iKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKGludGVnZXIpKCJhZ2UiKSkKICAgICAgICAgICAgdXNlcl9pbmZvID0gT25lT3JNb3JlKHVzZXJfZGF0YSkKCiAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfaW5mby5wYXJzZVN0cmluZygiMjIgMTExLTIyLTMzMzMgIzIyMUIiKQogICAgICAgICAgICBmb3IgaXRlbSBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICBwcmludChpdGVtLmdldE5hbWUoKSwgJzonLCBpdGVtWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5ylAAAAHIBAAAAcpUAAAApAnIBAAAAcpUAAAApCXIVAQAAchYBAADaFV9QYXJzZVJlc3VsdHNfX2xvb2t1cHLSAAAAch4BAADaBG5leHRyNwEAAHJBAQAAcj8BAAApAnLHAAAA2gNwYXJyEgAAAHISAAAAchMAAADaB2dldE5hbWUBBAAAcxgAAAAAGQYBBgEGAQgBBAEKAgYBDAEOAR4BEgJ6FFBhcnNlUmVzdWx0cy5nZXROYW1lcgEAAABjBQAAAAAAAAAMAAAADgAAAEMAAABzfgEAAGcAfQVkAX0GfANyJHwFagB8AXQBfABqAoMAgwEXAIMBAQBuCnwFagBkAoMBAQB8ApABcnR8AGoDgwBy1nQEZANkBIQAfABqBYMARACDAYMBfQd4gHwHRABdeFwCfQh9CXwFcm58BWoAfAaDAQEAfAVqAGQFfAFkBnwEFAB8CGYDFgCDAQEAdAZ8CXQHgwJywnwJcrJ8BWoAfAlqCHwBfAJ8A3wEZAcXAGQIjQSDAQEAcdB8BWoAdAF8CYMBgwEBAHFYfAVqAHQJfAmDAYMBAQBxWFcAbp50CmQJZASEAHwARACDAYMBkAFydHwAfQl4hHQLfAmDAUQAXXhcAn0KfQt0BnwLdAeDApABckZ8BWoAZAp8AWQGfAQUAHwKfAFkBnwEZAcXABQAfAtqCHwBfAJ8A3wEZAcXAGQIjQRmBhYAgwEBAHH4fAVqAGQKfAFkBnwEFAB8CnwBZAZ8BGQHFwAUAHQBfAuDAWYGFgCDAQEAcfhXAGQCagx8BYMBUwApC2FGAgAACiAgICAgICAgRGlhZ25vc3RpYyBtZXRob2QgZm9yIGxpc3Rpbmcgb3V0IHRoZSBjb250ZW50cyBvZgogICAgICAgIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgLiBBY2NlcHRzIGFuIG9wdGlvbmFsIGBgaW5kZW50YGAgYXJndW1lbnQgc28KICAgICAgICB0aGF0IHRoaXMgc3RyaW5nIGNhbiBiZSBlbWJlZGRlZCBpbiBhIG5lc3RlZCBkaXNwbGF5IG9mIG90aGVyIGRhdGEuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCcxMi8zMS8xOTk5JykKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFsnMTInLCAnLycsICczMScsICcvJywgJzE5OTknXQogICAgICAgICAgICAtIGRheTogMTk5OQogICAgICAgICAgICAtIG1vbnRoOiAzMQogICAgICAgICAgICAtIHllYXI6IDEyCiAgICAgICAgcuoAAABytgAAAGMBAAAAAAAAAAMAAAADAAAAcwAAAHMeAAAAfABdFlwCfQF9AnQAfAGDAXwCZgJWAAEAcQJkAFMAKQFOKQFynAAAACkDchUAAAByJgEAAHIjAQAAchIAAAByEgAAAHITAAAAcqcAAABHBAAAcwIAAAAEAHokUGFyc2VSZXN1bHRzLmR1bXAuPGxvY2Fscz4uPGdlbmV4cHI+egolcyVzLSAlczogegIgIHKUAAAAKQRybQEAANoEZnVsbNoMaW5jbHVkZV9saXN02gZfZGVwdGhjAQAAAAAAAAACAAAABAAAAHMAAABzGAAAAHwAXRB9AXQAfAF0AYMCVgABAHECZABTACkBTikCcpoAAAByPwAAACkCchUAAADaAnZ2chIAAAByEgAAAHITAAAAcqcAAABTBAAAcwIAAAAEAHoRCiVzJXNbJWRdOgolcyVzJXMpDXLtAAAAcqUAAAByEgEAAHJDAQAA2gZzb3J0ZWRyLAEAAHKaAAAAcj8AAADaBGR1bXByCwEAANoDYW55cvIAAABy1wAAACkMcscAAABybQEAAHJ6AQAAcnsBAAByfAEAAHJhAQAA2gJOTHIsAQAAciYBAAByIwEAAHL8AAAAcn0BAAByEgAAAHISAAAAchMAAAByfwEAACkEAABzSgAAAAAVBAEEAQQBGAIKAgYBCAEWAQ4BBAEKARgBCgEEAR4CEAIUARQBBAESAQwBCAEGAQIBAgEKAQYBAgECARQCCAEGAQIBAgEKARICehFQYXJzZVJlc3VsdHMuZHVtcGMBAAAAAAAAAAMAAAADAAAATwAAAHMaAAAAdABqAHwAagGDAGYBfAGeAnwCjgEBAGQBUwApAmEjAwAACiAgICAgICAgUHJldHR5LXByaW50ZXIgZm9yIHBhcnNlZCByZXN1bHRzIGFzIGEgbGlzdCwgdXNpbmcgdGhlCiAgICAgICAgYHBwcmludCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sPmBfIG1vZHVsZS4KICAgICAgICBBY2NlcHRzIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3MgYXMgZGVmaW5lZCBmb3IKICAgICAgICBgcHByaW50LnBwcmludCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnQ+YF8gLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICAgICAgbnVtID0gV29yZChudW1zKQogICAgICAgICAgICBmdW5jID0gRm9yd2FyZCgpCiAgICAgICAgICAgIHRlcm0gPSBpZGVudCB8IG51bSB8IEdyb3VwKCcoJyArIGZ1bmMgKyAnKScpCiAgICAgICAgICAgIGZ1bmMgPDw9IGlkZW50ICsgR3JvdXAoT3B0aW9uYWwoZGVsaW1pdGVkTGlzdCh0ZXJtKSkpCiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMucGFyc2VTdHJpbmcoImZuYSBhLGIsKGZuYiBjLGQsMjAwKSwxMDAiKQogICAgICAgICAgICByZXN1bHQucHByaW50KHdpZHRoPTQwKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHISAQAAKQNyxwAAAHLGAAAAckUBAAByEgAAAHISAAAAchMAAAByggEAAGoEAABzAgAAAAAZehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAQAAAAUAAABDAAAAcy4AAAB8AGoAfABqAWoCgwB8AGoDZABr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AAByEgAAAHITAAAA2hlzZXREZWZhdWx0V2hpdGVzcGFjZUNoYXJzTAUAAHMCAAAAAA56J1BhcnNlckVsZW1lbnQuc2V0RGVmYXVsdFdoaXRlc3BhY2VDaGFyc2MBAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAfAB0AF8BZAFTACkCYWgCAAAKICAgICAgICBTZXQgY2xhc3MgdG8gYmUgdXNlZCBmb3IgaW5jbHVzaW9uIG9mIHN0cmluZyBsaXRlcmFscyBpbnRvIGEgcGFyc2VyLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICMgZGVmYXVsdCBsaXRlcmFsIGNsYXNzIHVzZWQgaXMgTGl0ZXJhbAogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQoKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KCgogICAgICAgICAgICAjIGNoYW5nZSB0byBTdXBwcmVzcwogICAgICAgICAgICBQYXJzZXJFbGVtZW50LmlubGluZUxpdGVyYWxzVXNpbmcoU3VwcHJlc3MpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsnMTk5OScsICcxMicsICczMSddCiAgICAgICAgTikCckEAAADaE19saXRlcmFsU3RyaW5nQ2xhc3MpAXLKAAAAchIAAAByEgAAAHITAAAA2hNpbmxpbmVMaXRlcmFsc1VzaW5nXAUAAHMCAAAAABR6IVBhcnNlckVsZW1lbnQuaW5saW5lTGl0ZXJhbHNVc2luZ2MCAAAAAAAAAAIAAAABAAAAQwAAAHMWAAAAeBB8AWoAchB8AWoAfQFxAlcAfAFTACkBTikB2gd0Yl9uZXh0KQJyygAAAHKmAQAAchIAAAByEgAAAHITAAAA2g9fdHJpbV90cmFjZWJhY2tyBQAAcwYAAAAAAggBCgF6HVBhcnNlckVsZW1lbnQuX3RyaW1fdHJhY2ViYWNrYwIAAAAAAAAAAgAAAAMAAABDAAAAc4YAAAB0AIMAfABfAWQAfABfAmQAfABfA2QAfABfBHwBfABfBWQBfABfBnQHdAhqCYMBfABfCmQBfABfC2QCfABfDGQCfABfDXQAgwB8AF8OZAJ8AF8PZAJ8AF8QZAF8AF8RZAN8AF8SZAF8AF8TZAR8AF8UZAB8AF8VZAF8AF8WZAJ8AF8XZABTACkFTlRGcrYAAAApA05OTikYchoBAADaC3BhcnNlQWN0aW9u2gpmYWlsQWN0aW9u2gdzdHJSZXBy2gtyZXN1bHRzTmFtZdoKc2F2ZUFzTGlzdNoOc2tpcFdoaXRlc3BhY2Vy8QAAAHJBAAAAcrQBAADaCndoaXRlQ2hhcnPaFWNvcHlEZWZhdWx0V2hpdGVDaGFyc9oObWF5UmV0dXJuRW1wdHnaCGtlZXBUYWJz2gtpZ25vcmVFeHByc9oFZGVidWfaC3N0cmVhbWxpbmVk2g1tYXlJbmRleEVycm9y2gZlcnJtc2faDG1vZGFsUmVzdWx0c9oMZGVidWdBY3Rpb25zcpAAAADaDGNhbGxQcmVwYXJzZdoNY2FsbER1cmluZ1RyeSkCcscAAADaCHNhdmVsaXN0chIAAAByEgAAAHITAAAAcskAAAB4BQAAcygAAAAAAQgBBgIGAQYBBgEGAQwBBgEGAQYBCAEGAQYBBgEGAQYBBgEGAQYBehZQYXJzZXJFbGVtZW50Ll9faW5pdF9fYwEAAAAAAAAAAgAAAAMAAABDAAAAczwAAAB0AGoAfACDAX0BfABqAWQBZAGFAhkAfAFfAXwAagJkAWQBhQIZAHwBXwJ8AGoDcjh0BGoFfAFfBnwBUwApAmEvAwAACiAgICAgICAgTWFrZSBhIGNvcHkgb2YgdGhpcyA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgLiAgVXNlZnVsIGZvciBkZWZpbmluZwogICAgICAgIGRpZmZlcmVudCBwYXJzZSBhY3Rpb25zIGZvciB0aGUgc2FtZSBwYXJzaW5nIHBhdHRlcm4sIHVzaW5nIGNvcGllcyBvZgogICAgICAgIHRoZSBvcmlnaW5hbCBwYXJzZSBlbGVtZW50LgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIGludGVnZXJLID0gaW50ZWdlci5jb3B5KCkuYWRkUGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IHRva3NbMF0gKiAxMDI0KSArIFN1cHByZXNzKCJLIikKICAgICAgICAgICAgaW50ZWdlck0gPSBpbnRlZ2VyLmNvcHkoKS5hZGRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSAqIDEwMjQgKiAxMDI0KSArIFN1cHByZXNzKCJNIikKCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShpbnRlZ2VySyB8IGludGVnZXJNIHwgaW50ZWdlcikucGFyc2VTdHJpbmcoIjVLIDEwMCA2NDBLIDI1Nk0iKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFs1MTIwLCAxMDAsIDY1NTM2MCwgMjY4NDM1NDU2XQoKICAgICAgICBFcXVpdmFsZW50IGZvcm0gb2YgYGBleHByLmNvcHkoKWBgIGlzIGp1c3QgYGBleHByKClgYDo6CgogICAgICAgICAgICBpbnRlZ2VyTSA9IGludGVnZXIoKS5hZGRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSAqIDEwMjQgKiAxMDI0KSArIFN1cHByZXNzKCJNIikKICAgICAgICBOKQdyUgEAAHK7AQAAcsUBAABywgEAAHJBAAAAcrQBAABywQEAACkCcscAAADaA2NweXISAAAAchIAAAByEwAAAHJSAQAAjwUAAHMMAAAAABYKARABEAEGAQgBehJQYXJzZXJFbGVtZW50LmNvcHljAgAAAAAAAAACAAAAAgAAAEMAAABzJAAAAHwBfABfAGQBfABqABcAfABfAXQCagNyIHwAagSDAAEAfABTACkCYV8BAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgdGhpcyBleHByZXNzaW9uLCBtYWtlcyBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbiBtZXNzYWdlcyBjbGVhcmVyLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIFdvcmQobnVtcykucGFyc2VTdHJpbmcoIkFCQyIpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgVzooMDEyMy4uLikgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgICAgICBXb3JkKG51bXMpLnNldE5hbWUoImludGVnZXIiKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBpbnRlZ2VyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICB6CUV4cGVjdGVkICkFchEBAAByyQEAAHIYAAAA2iFlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnPaCHNldERlYnVnKQJyxwAAAHIRAQAAchIAAAByEgAAAHITAAAA2gdzZXROYW1lrAUAAHMKAAAAAAkGAQwBBgEIAXoVUGFyc2VyRWxlbWVudC5zZXROYW1lYwMAAAAAAAAAAwAAAAMAAABDAAAAcwwAAAB8AGoAfAF8AoMCUwApAWFPAwAACiAgICAgICAgRGVmaW5lIG5hbWUgZm9yIHJlZmVyZW5jaW5nIG1hdGNoaW5nIHRva2VucyBhcyBhIG5lc3RlZCBhdHRyaWJ1dGUKICAgICAgICBvZiB0aGUgcmV0dXJuZWQgcGFyc2UgcmVzdWx0cy4KICAgICAgICBOT1RFOiB0aGlzIHJldHVybnMgYSAqY29weSogb2YgdGhlIG9yaWdpbmFsIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgb2JqZWN0OwogICAgICAgIHRoaXMgaXMgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBkZWZpbmUgYSBiYXNpYyBlbGVtZW50LCBzdWNoIGFzIGFuCiAgICAgICAgaW50ZWdlciwgYW5kIHJlZmVyZW5jZSBpdCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aCBkaWZmZXJlbnQgbmFtZXMuCgogICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgcmVzdWx0cyBuYW1l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KWBgICwgd2hlcmU6CgogICAgICAgIC0gcyAgID0gdGhlIG9yaWdpbmFsIHN0cmluZyBiZWluZyBwYXJzZWQgKHNlZSBub3RlIGJlbG93KQogICAgICAgIC0gbG9jID0gdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcKICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QKCiAgICAgICAgSWYgdGhlIGZ1bmN0aW9ucyBpbiBmbnMgbW9kaWZ5IHRoZSB0b2tlbnMsIHRoZXkgY2FuIHJldHVybiB0aGVtIGFzIHRoZSByZXR1cm4KICAgICAgICB2YWx1ZSBmcm9tIGZuLCBhbmQgdGhlIG1vZGlmaWVkIGxpc3Qgb2YgdG9rZW5zIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwuCiAgICAgICAgT3RoZXJ3aXNlLCBmbiBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnkgdmFsdWUuCgogICAgICAgIElmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBwYXJzZSBhY3Rpb24sIGFsbCBwcmV2aW91c2x5IGFkZGVkIHBhcnNlIGFjdGlvbnMgZm9yIHRoaXMKICAgICAgICBleHByZXNzaW9uIGFyZSBjbGVhcmVkLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAtIGNhbGxEdXJpbmdUcnkgPSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZyBmb3IgbW9yZQog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dG8gcmV0dXJuIGJvb2xlYW4gc3VjY2Vzcy9mYWlsIG9mIHRoZSBjb25kaXRpb24uCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgIC0gbWVzc2FnZSA9IGRlZmluZSBhIGN1c3RvbSBtZXNzYWdlIHRvIGJlIHVzZWQgaW4gdGhlIHJhaXNlZCBleGNlcHRpb24KICAgICAgICAtIGZhdGFsICAgPSBpZiBUcnVlLCB3aWxsIHJhaXNlIFBhcnNlRmF0YWxFeGNlcHRpb24gdG8gc3RvcCBwYXJzaW5nIGltbWVkaWF0ZWx5OyBvdGhlcndpc2Ugd2lsbCByYWlzZSBQYXJzZUV4Y2VwdGlvbgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIHllYXJfaW50ID0gaW50ZWdlci5jb3B5KCkKICAgICAgICAgICAgeWVhcl9pbnQuYWRkQ29uZGl0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdID49IDIwMDAsIG1lc3NhZ2U9Ik9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciIpCiAgICAgICAgICAgIGRhdGVfc3RyID0geWVhcl9pbnQgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBFeGNlcHRpb246IE9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAgcsEAAABywgAAAEYpAnLBAAAAcsIAAAByzQEAACkFcrsBAABy7QAAAHKPAAAAcvQAAAByzQEAACkEcscAAABy5gEAAHJFAQAAcr0AAAByEgAAAHISAAAAchMAAADaDGFkZENvbmRpdGlvbikGAABzCgAAAAASCgESARYCFAF6GlBhcnNlckVsZW1lbnQuYWRkQ29uZGl0aW9uYwIAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AXwAXwB8AFMAKQFhDgIAAERlZmluZSBhY3Rpb24gdG8gcGVyZm9ybSBpZiBwYXJzaW5nIGZhaWxzIGF0IHRoaXMgZXhwcmVzc2lvbi4KICAgICAgICAgICBGYWlsIGFjdG9uIGZuIGlzIGEgY2FsbGFibGUgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYXJndW1lbnRzCiAgICAgICAgICAgYGBmbihzLCBsb2MsIGV4cHIsIGVycilgYCB3aGVyZToKICAgICAgICAgICAtIHMgPSBzdHJpbmcgYmVpbmcgcGFyc2VkCiAgICAgICAgICAgLSBsb2MgPSBsb2NhdGlvbiB3aGVyZSBleHByZXNzaW9uIG1hdGNoIHdhcyBhdHRlbXB0ZWQgYW5kIGZhaWxlZAogICAgICAgICAgIC0gZXhwciA9IHRoZSBwYXJzZSBleHByZXNzaW9uIHRoYXQgZmFpbGVkCiAgICAgICAgICAgLSBlcnIgPSB0aGUgZXhjZXB0aW9uIHRocm93bgogICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIG5vIHZhbHVlLiAgSXQgbWF5IHRocm93IDpjbGFzczpgUGFyc2VGYXRhbEV4Y2VwdGlvbmAKICAgICAgICAgICBpZiBpdCBpcyBkZXNpcmVkIHRvIHN0b3AgcGFyc2luZyBpbW1lZGlhdGVseS4pAXK8AQAAKQJyxwAAAHK9AAAAchIAAAByEgAAAHITAAAA2g1zZXRGYWlsQWN0aW9uQgYAAHMEAAAAAAoGAXobUGFyc2VyRWxlbWVudC5zZXRGYWlsQWN0aW9uYwMAAAAAAAAABgAAAAwAAABDAAAAc1oAAABkAX0DeFB8A3JUZAJ9A3hCfABqAEQAXTh9BHkeeBh8BGoBfAF8AoMCXAJ9An0FZAF9A3EeVwBXAHEWBAB0AmsKckwBAAEAAQBZAHEWWABxFlcAcQZXAHwCUwApA05URikDcsUBAABy4AEAAHI8AAAAKQZyxwAAAHKUAQAAcsMAAADaCmV4cHJzRm91bmTaAWXaBWR1bW15chIAAAByEgAAAHITAAAA2g9fc2tpcElnbm9yYWJsZXNPBgAAcxYAAAAAAQQBBgEEAQwBAgECARABDAEOAQ4Beh1QYXJzZXJFbGVtZW50Ll9za2lwSWdub3JhYmxlc2MDAAAAAAAAAAUAAAADAAAAQwAAAHNMAAAAfABqAHISfABqAXwBfAKDAn0CfABqAnJIfABqA30DdAR8AYMBfQR4IHwCfARrAHJGfAF8AhkAfANrBnJGfAJkATcAfQJxKFcAfAJTACkCTnKUAAAAKQVyxQEAAHLtAQAAcsABAABywQEAAHLSAAAAKQVyxwAAAHKUAQAAcsMAAADaAnd02ghpbnN0cmxlbnISAAAAchIAAAByEwAAANoIcHJlUGFyc2VcBgAAcxAAAAAAAQYBDAIGAQYBCAEWAQwCehZQYXJzZXJFbGVtZW50LnByZVBhcnNlYwQAAAAAAAAABAAAAAIAAABDAAAAcwgAAAB8AmcAZgJTACkBTnISAAAAKQRyxwAAAHKUAQAAcsMAAABy2wEAAHISAAAAchIAAAByEwAAAHLmAAAAaAYAAHMCAAAAAAF6F1BhcnNlckVsZW1lbnQucGFyc2VJbXBsYwQAAAAAAAAABAAAAAEAAABDAAAAcwQAAAB8A1MAKQFOchIAAAApBHLHAAAAcpQBAABywwAAANoJdG9rZW5saXN0chIAAAByEgAAAHITAAAA2glwb3N0UGFyc2VrBgAAcwIAAAAAAXoXUGFyc2VyRWxlbWVudC5wb3N0UGFyc2VjBQAAAAAAAAARAAAAKgAAAEMAAABzmAMAAGQGXAN9BX0GfQd8AGoAfQh8CHMcfABqAZABciJ8AGoCfAUZAHI4fABqAnwFGQB8AXwCfACDAwEAeYp8BHJSfABqA3JSfABqBHwBfAKDAn0JbgR8An0JfAl9CnwAagVzbHwJdAZ8AYMBawVyrnkWfABqB3wBfAl8A4MDXAJ9An0LVwBxwAQAdAhrCnKqAQABAAEAdAl8AXQGfAGDAXwAagp8AIMEggFZAHHAWABuEnwAagd8AXwJfAODA1wCfQJ9C1cAblwEAHQLawqQAXIeAQB9DAEAej58AGoCfAcZAHL0fABqAnwHGQB8AXwKfAB8DIMEAQB8AGoBkAFyDHwAagF8AXwKfAB8DIMEAQCCAFcAWQBkAGQAfQx+DFgAbgJYAG6QfASQAXI+fABqA5ABcj58AGoEfAF8AoMCfQluBHwCfQl8CX0KfABqBZABc1x8CXQGfAGDAWsFkAFyoHkWfABqB3wBfAl8A4MDXAJ9An0LVwBuKgQAdAhrCpABcpwBAAEAAQB0CXwBdAZ8AYMBfABqCnwAgwSCAVkAbgJYAG4SfABqB3wBfAl8A4MDXAJ9An0LfABqDHwBfAJ8C4MDfQt0DXwLfABqDnwAag98AGoQZASNBH0NfABqEZADcmh8A5ABc+x8AGoSkANyaHwIkAJy1HmYeJJ8AGoRRABdiH0OeRB8DnwBfAp8DYMDfQtXAG42BAB0CGsKkAJyRgEAfQ8BAHoYdAlkBYMBfRB8D3wQXxN8EIIBVwBZAGQAZAB9D34PWABuAlgAfAtkAGsJkAFy/HwLfA1rCZABcvx0DXwLfABqDnwAag+QAm94dBR8C3QNdBVmAoMCfABqEGQEjQR9DZABcfxXAFcAbkYEAHQLawqQAnLQAQB9DAEAeih8AGoCfAcZAJACcr58AGoCfAcZAHwBfAp8AHwMgwQBAIIAVwBZAGQAZAB9DH4MWABuAlgAbpR4knwAahFEAF2IfQ55EHwOfAF8CnwNgwN9C1cAbjYEAHQIawqQA3ImAQB9DwEAehh0CWQFgwF9EHwPfBBfE3wQggFXAFkAZABkAH0Pfg9YAG4CWAB8C2QAawmQAnLcfAt8DWsJkAJy3HQNfAt8AGoOfABqD5ADb1h0FHwLdA10FWYCgwJ8AGoQZASNBH0NkAJx3FcAfAiQA3KQfABqAnwGGQCQA3KQfABqAnwGGQB8AXwKfAJ8AHwNgwUBAHwCfA1mAlMAKQdOcgEAAABylAAAAHKTAAAAKQJyEgEAAHITAQAAeiBleGNlcHRpb24gcmFpc2VkIGluIHBhcnNlIGFjdGlvbikDcgEAAABylAAAAHKTAAAAKRZyxgEAAHK8AQAAcssBAAByzAEAAHLwAQAAcsgBAABy0gAAAHLmAAAAciIBAAByPAAAAHLJAQAAcogBAABy8gEAAHI/AAAAcr4BAAByvwEAAHLKAQAAcrsBAAByzQEAANoJX19jYXVzZV9fcpoAAAByGgEAACkRcscAAABylAEAAHLDAAAActsBAABy3AEAANoDVFJZ2gVNQVRDSNoERkFJTNoJZGVidWdnaW5n2gZwcmVsb2PaC3Rva2Vuc1N0YXJ02gZ0b2tlbnPaA2VyctoJcmV0VG9rZW5zcr0AAADaEHBhcnNlX2FjdGlvbl9leGNy+AAAAHISAAAAchIAAAByEwAAAHLnAAAAbwYAAHOKAAAAAAEKAQYCDAIKARIBAgEKAQ4CBAEEARIBAgEWAQ4BHAIWARICCgEUAQgBEAEWAg4BDgIEAQQBFgECARYBEAEcAhICDgIWARYBBgECAQwBAgEQARIBCAEGARYCFAEEAQQBFAEUARICDAEUARYCDAECARABEgEIAQYBFgIUAQQBBAEUARABBgIMARYCehtQYXJzZXJFbGVtZW50Ll9wYXJzZU5vQ2FjaGVjAwAAAAAAAAADAAAACwAAAEMAAABzPgAAAHkUfABqAHwBfAJkAWQCjQNkAxkAUwAEAHQBawpyOAEAAQABAHQCfAF8AnwAagN8AIMEggFZAG4CWABkAFMAKQRORikBctsBAAByAQAAACkEcuABAAByPgAAAHI8AAAAcskBAAApA3LHAAAAcpQBAABywwAAAHISAAAAchIAAAByEwAAANoIdHJ5UGFyc2XGBgAAcwgAAAAAAQIBFAEOAXoWUGFyc2VyRWxlbWVudC50cnlQYXJzZWMDAAAAAAAAAAMAAAAMAAAAQwAAAHMyAAAAeRB8AGoAfAF8AoMCAQBXAG4YBAB0AXQCZgJrCnIoAQABAAEAZAFTAFgAZAJTAGQAUwApA05GVCkDcv4BAAByPAAAAHIiAQAAKQNyxwAAAHKUAQAAcsMAAAByEgAAAHISAAAAchMAAADaDGNhblBhcnNlTmV4dMwGAABzCgAAAAABAgEQARIBBgJ6GlBhcnNlckVsZW1lbnQuY2FuUGFyc2VOZXh0YwAAAAAAAAAAAAAAAAIAAABAAAAAcxQAAABlAFoBZABaAmQBZAKEAFoDZANTACkEeh1QYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZWMBAAAAAAAAAAUAAAADAAAAAwAAAHN+AAAAaQCJAHQAgwAEAHwAXwGJAYcAhwFmAmQBZAKECH0BhwBmAWQDZASECH0ChwBmAWQFZAaECH0DhwBmAWQHZAiECH0EdAJqA3wBfACDAnwAXwR0AmoDfAJ8AIMCfABfBXQCagN8A3wAgwJ8AF8GdAJqA3wEfACDAnwAXwdkAFMAKQlOYwIAAAAAAAAAAgAAAAMAAAATAAAAcwwAAACIAGoAfAGIAYMCUwApAU4pAXL0AAAAKQJyxwAAAHJJAQAAKQLaBWNhY2hl2gxub3RfaW5fY2FjaGVyEgAAAHITAAAAcvQAAADZBgAAcwIAAAAAAXozUGFyc2VyRWxlbWVudC5fVW5ib3VuZGVkQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uZ2V0YwMAAAAAAAAAAwAAAAMAAAATAAAAcwwAAAB8AogAfAE8AGQAUwApAU5yEgAAACkDcscAAABySQEAAHIxAQAAKQFyAAIAAHISAAAAchMAAABy8QAAANwGAABzAgAAAAABejNQYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZS5fX2luaXRfXy48bG9jYWxzPi5zZXRjAQAAAAAAAAABAAAAAQAAABMAAABzDAAAAIgAagCDAAEAZABTACkBTikBclEBAAApAXLHAAAAKQFyAAIAAHISAAAAchMAAAByUQEAAN8GAABzAgAAAAABejVQYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZS5fX2luaXRfXy48bG9jYWxzPi5jbGVhcmMBAAAAAAAAAAEAAAACAAAAEwAAAHMIAAAAdACIAIMBUwApAU4pAXLSAAAAKQFyxwAAACkBcgACAAByEgAAAHITAAAA2gljYWNoZV9sZW7iBgAAcwIAAAAAAXo5UGFyc2VyRWxlbWVudC5fVW5ib3VuZGVkQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uY2FjaGVfbGVuKQhyDQEAAHIBAgAA2gV0eXBlc9oKTWV0aG9kVHlwZXL0AAAAcvEAAAByUQEAAHI1AQAAKQVyxwAAAHL0AAAAcvEAAAByUQEAAHICAgAAchIAAAApAnIAAgAAcgECAAByEwAAAHLJAAAA1QYAAHMUAAAAAAEEAQwCDgMMAwwDDAMOAQ4BDgF6JlBhcnNlckVsZW1lbnQuX1VuYm91bmRlZENhY2hlLl9faW5pdF9fTikEcg8AAAByEAAAAHIRAAAAcskAAAByEgAAAHISAAAAchIAAAByEwAAANoPX1VuYm91bmRlZENhY2hl1AYAAHMCAAAACAFyBQIAAE5jAAAAAAAAAAAAAAAAAgAAAEAAAABzFAAAAGUAWgFkAFoCZAFkAoQAWgNkA1MAKQR6GFBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZWMCAAAAAAAAAAYAAAADAAAAAwAAAHOCAAAAdACDAAQAfABfAYkBdAKDAIkAhwCHAWYCZAFkAoQIfQKHAIcCZgJkA2QEhAh9A4cAZgFkBWQGhAh9BIcAZgFkB2QIhAh9BXQDagR8AnwAgwJ8AF8FdANqBHwDfACDAnwAXwZ0A2oEfAR8AIMCfABfB3QDagR8BXwAgwJ8AF8IZABTACkJTmMCAAAAAAAAAAIAAAADAAAAEwAAAHMMAAAAiABqAHwBiAGDAlMAKQFOKQFy9AAAACkCcscAAABySQEAACkCcgACAAByAQIAAHISAAAAchMAAABy9AAAAPEGAABzAgAAAAABei5QYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uZ2V0YwMAAAAAAAAAAwAAAAsAAAATAAAAc0IAAAB8AogAfAE8AHg0dACIAIMBiAFrBHI8eQ6IAGoBZAGDAQEAVwBxCgQAdAJrCnI4AQABAAEAWQBxClgAcQpXAGQAUwApAk5GKQNy0gAAANoHcG9waXRlbXIgAQAAKQNyxwAAAHJJAQAAcjEBAAApAnIAAgAA2gRzaXplchIAAAByEwAAAHLxAAAA9AYAAHMMAAAAAAEIAQ4BAgEOAQ4Bei5QYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uc2V0YwEAAAAAAAAAAQAAAAEAAAATAAAAcwwAAACIAGoAgwABAGQAUwApAU4pAXJRAQAAKQFyxwAAACkBcgACAAByEgAAAHITAAAAclEBAAD8BgAAcwIAAAAAAXowUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmNsZWFyYwEAAAAAAAAAAQAAAAIAAAATAAAAcwgAAAB0AIgAgwFTACkBTikBctIAAAApAXLHAAAAKQFyAAIAAHISAAAAchMAAAByAgIAAP8GAABzAgAAAAABejRQYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uY2FjaGVfbGVuKQlyDQEAAHIBAgAA2gxfT3JkZXJlZERpY3RyAwIAAHIEAgAAcvQAAABy8QAAAHJRAQAAcjUBAAApBnLHAAAAcgcCAABy9AAAAHLxAAAAclEBAAByAgIAAHISAAAAKQNyAAIAAHIBAgAAcgcCAAByEwAAAHLJAAAA7AYAAHMUAAAAAAEMAgYCDgMOCAwDDAMOAQ4BDgF6IVBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfX04pBHIPAAAAchAAAAByEQAAAHLJAAAAchIAAAByEgAAAHISAAAAchMAAADaCl9GaWZvQ2FjaGXrBgAAcwIAAAAIAXIJAgAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxQAAABlAFoBZABaAmQBZAKEAFoDZANTACkEehhQYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGVjAgAAAAAAAAAGAAAAAwAAAAMAAABzkAAAAHQAgwAEAHwAXwGJAmkAiQB0AmoDZwCIA4MCiQGHAIcCZgJkAWQChAh9AocAhwGHA2YDZANkBIQIfQOHAIcBZgJkBWQGhAh9BIcAZgFkB2QIhAh9BXQEagV8AnwAgwJ8AF8GdARqBXwDfACDAnwAXwd0BGoFfAR8AIMCfABfCHQEagV8BXwAgwJ8AF8JZABTACkJTmMCAAAAAAAAAAIAAAADAAAAEwAAAHMMAAAAiABqAHwBiAGDAlMAKQFOKQFy9AAAACkCcscAAABySQEAACkCcgACAAByAQIAAHISAAAAchMAAABy9AAAAA8HAABzAgAAAAABei5QYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uZ2V0YwMAAAAAAAAAAwAAAAMAAAATAAAAczgAAAB8AogAfAE8AHggdACIAYMBiAJrBHIoiABqAYgBagKDAGQAgwIBAHEKVwCIAWoDfAGDAQEAZABTACkBTikEctIAAABySAEAANoHcG9wbGVmdHLtAAAAKQNyxwAAAHJJAQAAcjEBAAApA3IAAgAA2ghrZXlfZmlmb3IHAgAAchIAAAByEwAAAHLxAAAAEgcAAHMIAAAAAAEIAQ4BFAF6LlBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfXy48bG9jYWxzPi5zZXRjAQAAAAAAAAABAAAAAQAAABMAAABzFAAAAIgAagCDAAEAiAFqAIMAAQBkAFMAKQFOKQFyUQEAACkBcscAAAApAnIAAgAAcgsCAAByEgAAAHITAAAAclEBAAAYBwAAcwQAAAAAAQgBejBQYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uY2xlYXJjAQAAAAAAAAABAAAAAgAAABMAAABzCAAAAHQAiACDAVMAKQFOKQFy0gAAACkBcscAAAApAXIAAgAAchIAAAByEwAAAHICAgAAHAcAAHMCAAAAAAF6NFBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfXy48bG9jYWxzPi5jYWNoZV9sZW4pCnINAQAAcgECAADaC2NvbGxlY3Rpb25z2gVkZXF1ZXIDAgAAcgQCAABy9AAAAHLxAAAAclEBAAByNQEAACkGcscAAAByBwIAAHL0AAAAcvEAAAByUQEAAHICAgAAchIAAAApBHIAAgAAcgsCAAByAQIAAHIHAgAAchMAAAByyQAAAAkHAABzFgAAAAABDAIEAQwCDgMQBg4EDAMOAQ4BDgF6IVBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfX04pBHIPAAAAchAAAAByEQAAAHLJAAAAchIAAAByEgAAAHISAAAAchMAAAByCQIAAAgHAABzAgAAAAgBcgEAAABjBQAAAAAAAAALAAAAFwAAAEMAAABz/AAAAGQDXAJ9BX0GfAB8AXwCfAR8A2YFfQd0AGoBj9YBAHQAagJ9CHwIagN8B4MBfQl8CXwIagRrCHK6dABqBXwGBQAZAGQCNwADADwAeRR8AGoGfAF8AnwDfASDBH0JVwBuOAQAdAdrCnKWAQB9CgEAehx8CGoIfAd8CmoJfApqCo4AgwIBAIIAVwBZAGQAZAB9Cn4KWABx7lgAfAhqCHwHfAlkARkAfAlkAhkAaguDAGYCgwIBAHwJUwBuNHQAagV8BQUAGQBkAjcAAwA8AHQMfAl0DYMCctp8CYIBfAlkARkAfAlkAhkAaguDAGYCUwBXAGQAUQBSAFgAZABTACkETnIBAAAAcpQAAAApAnIBAAAAcpQAAAApDnJBAAAA2hJwYWNrcmF0X2NhY2hlX2xvY2vaDXBhY2tyYXRfY2FjaGVy9AAAAHIBAgAA2hNwYWNrcmF0X2NhY2hlX3N0YXRzcucAAAByOgAAAHLxAAAAcq4BAAByxgAAAHJSAQAAcpoAAAByiAEAACkLcscAAABylAEAAHLDAAAActsBAABy3AEAANoDSElU2gRNSVNT2gZsb29rdXByAAIAAHIxAQAAcssAAAByEgAAAHISAAAAchMAAADaC19wYXJzZUNhY2hlKwcAAHMkAAAAAAEIAQ4BCAEGAQoBCgESAQIBFAEQAhQBFAIcAQYCEgEKAQQBehlQYXJzZXJFbGVtZW50Ll9wYXJzZUNhY2hlYwAAAAAAAAAAAAAAAAQAAABDAAAAcygAAAB0AGoBagKDAAEAZAFnAXQDdABqBIMBFAB0AGoEZABkAIUCPABkAFMAKQJOcgEAAAApBXJBAAAAcg8CAAByUQEAAHLSAAAAchACAAByEgAAAHISAAAAchIAAAByEwAAANoKcmVzZXRDYWNoZUQHAABzBAAAAAACCgF6GFBhcnNlckVsZW1lbnQucmVzZXRDYWNoZemAAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAczgAAAB0AGoBczRkAXQAXwF8AGQCawhyIHQAagKDAHQAXwNuDHQAagR8AIMBdABfA3QAagV0AF8GZAJTACkDYdIEAABFbmFibGVzICJwYWNrcmF0IiBwYXJzaW5nLCB3aGljaCBhZGRzIG1lbW9pemluZyB0byB0aGUgcGFyc2luZyBsb2dpYy4KICAgICAgICAgICBSZXBlYXRlZCBwYXJzZSBhdHRlbXB0cyBhdCB0aGUgc2FtZSBzdHJpbmcgbG9jYXRpb24gKHdoaWNoIGhhcHBlbnMKICAgICAgICAgICBvZnRlbiBpbiBtYW55IGNvbXBsZXggZ3JhbW1hcnMpIGNhbiBpbW1lZGlhdGVseSByZXR1cm4gYSBjYWNoZWQgdmFsdWUsCiAgICAgICAgICAgaW5zdGVhZCBvZiByZS1leGVjdXRpbmcgcGFyc2luZy92YWxpZGF0aW5nIGNvZGUuICBNZW1vaXppbmcgaXMgZG9uZSBvZgogICAgICAgICAgIGJvdGggdmFsaWQgcmVzdWx0cyBhbmQgcGFyc2luZyBleGNlcHRpb25zLgoKICAgICAgICAgICBQYXJhbWV0ZXJzOgoKICAgICAgICAgICAtIGNhY2hlX3NpemVfbGltaXQgLSAoZGVmYXVsdD0gYGAxMjhgYCkgLSBpZiBhbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgICB3aWxsIGxpbWl0IHRoZSBzaXplIG9mIHRoZSBwYWNrcmF0IGNhY2hlOyBpZiBOb25lIGlzIHBhc3NlZCwgdGhlbgogICAgICAgICAgICAgdGhlIGNhY2hlIHNpemUgd2lsbCBiZSB1bmJvdW5kZWQ7IGlmIDAgaXMgcGFzc2VkLCB0aGUgY2FjaGUgd2lsbAogICAgICAgICAgICAgYmUgZWZmZWN0aXZlbHkgZGlzYWJsZWQuCgogICAgICAgICAgIFRoaXMgc3BlZWR1cCBtYXkgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgcGFyc2UgYWN0aW9ucyB0aGF0CiAgICAgICAgICAgaGF2ZSBzaWRlLWVmZmVjdHMuICBGb3IgdGhpcyByZWFzb24sIHBhY2tyYXQgcGFyc2luZyBpcyBkaXNhYmxlZCB3aGVuCiAgICAgICAgICAgeW91IGZpcnN0IGltcG9ydCBweXBhcnNpbmcuICBUbyBhY3RpdmF0ZSB0aGUgcGFja3JhdCBmZWF0dXJlLCB5b3VyCiAgICAgICAgICAgcHJvZ3JhbSBtdXN0IGNhbGwgdGhlIGNsYXNzIG1ldGhvZCA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdGAuCiAgICAgICAgICAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBgYGVuYWJsZVBhY2tyYXQoKWBgIGltbWVkaWF0ZWx5IGFmdGVyCiAgICAgICAgICAgaW1wb3J0aW5nIHB5cGFyc2luZy4KCiAgICAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICAgICBmcm9tIHBpcC5fdmVuZG9yIGltcG9ydCBweXBhcnNpbmcKICAgICAgICAgICAgICAgcHlwYXJzaW5nLlBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpCiAgICAgICAgVE4pB3JBAAAA2g9fcGFja3JhdEVuYWJsZWRyBQIAAHIPAgAAcgkCAAByFAIAAHLgAQAAKQHaEGNhY2hlX3NpemVfbGltaXRyEgAAAHISAAAAchMAAADaDWVuYWJsZVBhY2tyYXRKBwAAcwwAAAAAGwYBBgEIAQwCDAF6G1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdGMDAAAAAAAAAAgAAAAQAAAAQwAAAHPQAAAAdABqAYMAAQB8AGoCcxZ8AGoDgwABAHgWfABqBEQAXQx9A3wDagODAAEAcR5XAHwAagVzPHwBagaDAH0BeTx8AGoHfAFkAYMCXAJ9BH0FfAJydnwAagh8AXwEgwJ9BHQJgwB0CoMAFwB9BnwGagd8AXwEgwIBAFcAbk4EAHQLawpyxgEAfQcBAHoydABqDHKUggBuInQNfAdkAmQDgwNkA2sJcrJ8AGoOfAdqD4MBfAdfD3wHggFXAFkAZANkA30HfgdYAG4GWAB8BVMAZANTACkEYfsFAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy4KICAgICAgICBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSB0byB0aGUgY2xpZW50IGNvZGUsIG9uY2UgdGhlIGNvbXBsZXRlCiAgICAgICAgZXhwcmVzc2lvbiBoYXMgYmVlbiBidWlsdC4KCiAgICAgICAgUmV0dXJucyB0aGUgcGFyc2VkIGRhdGEgYXMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0LCB3aGljaCBtYXkgYmUKICAgICAgICBhY2Nlc3NlZCBhcyBhIGxpc3QsIG9yIGFzIGEgZGljdCBvciBvYmplY3Qgd2l0aCBhdHRyaWJ1dGVzIGlmIHRoZSBnaXZlbiBwYXJzZXIKICAgICAgICBpbmNsdWRlcyByZXN1bHRzIG5hbWVzLgoKICAgICAgICBJZiB5b3Ugd2FudCB0aGUgZ3JhbW1hciB0byByZXF1aXJlIHRoYXQgdGhlIGVudGlyZSBpbnB1dCBzdHJpbmcgYmUKICAgICAgICBzdWNjZXNzZnVsbHkgcGFyc2VkLCB0aGVuIHNldCBgYHBhcnNlQWxsYGAgdG8gVHJ1ZSAoZXF1aXZhbGVudCB0byBlbmRpbmcKICAgICAgICB0aGUgZ3JhbW1hciB3aXRoIGBgU3RyaW5nRW5kKClgYCkuCgogICAgICAgIE5vdGU6IGBgcGFyc2VTdHJpbmdgYCBpbXBsaWNpdGx5IGNhbGxzIGBgZXhwYW5kdGFicygpYGAgb24gdGhlIGlucHV0IHN0cmluZywKICAgICAgICBpbiBvcmRlciB0byByZXBvcnQgcHJvcGVyIGNvbHVtbiBudW1iZXJzIGluIHBhcnNlIGFjdGlvbnMuCiAgICAgICAgSWYgdGhlIGlucHV0IHN0cmluZyBjb250YWlucyB0YWJzIGFuZAogICAgICAgIHRoZSBncmFtbWFyIHVzZXMgcGFyc2UgYWN0aW9ucyB0aGF0IHVzZSB0aGUgYGBsb2NgYCBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKCiAgICAgICAgLSBjYWxsaW5nIGBgcGFyc2VXaXRoVGFic2BgIG9uIHlvdXIgZ3JhbW1hciBiZWZvcmUgY2FsbGluZyBgYHBhcnNlU3RyaW5nYGAKICAgICAgICAgIChzZWUgOmNsYXNzOmBwYXJzZVdpdGhUYWJzYCkKICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBgYChzLCBsb2MsIHRva3MpYGAgc2lnbmF0dXJlLCBhbmQKICAgICAgICAgIHJlZmVyZW5jZSB0aGUgaW5wdXQgc3RyaW5nIHVzaW5nIHRoZSBwYXJzZSBhY3Rpb24ncyBgYHNgYCBhcmd1bWVudAogICAgICAgIC0gZXhwbGljdGx5IGV4cGFuZCB0aGUgdGFicyBpbiB5b3VyIGlucHV0IHN0cmluZyBiZWZvcmUgY2FsbGluZwogICAgICAgICAgYGBwYXJzZVN0cmluZ2BgCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnKSAgIyAtPiBbJ2FhYWFhJ10KICAgICAgICAgICAgV29yZCgnYScpLnBhcnNlU3RyaW5nKCdhYWFhYWJhYWEnLCBwYXJzZUFsbD1UcnVlKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGVuZCBvZiB0ZXh0CiAgICAgICAgcgEAAABy8AAAAE4pEHJBAAAAchUCAAByxwEAANoKc3RyZWFtbGluZXLFAQAAcsQBAADaCmV4cGFuZHRhYnNy4AEAAHLwAQAAcikAAAByRgAAAHI6AAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2VysAEAAHK6AQAAcvAAAAApCHLHAAAAcpQBAADaCHBhcnNlQWxscusBAABywwAAAHL6AQAA2gJzZXL4AAAAchIAAAByEgAAAHITAAAA2gtwYXJzZVN0cmluZ20HAABzKAAAAAAhCAEGAQgCDAEMAQYBCAECARABBAEMAQwBEAEQAQYBBAMQAQ4BFgJ6GVBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdjBAAAAAAAAAAPAAAAEQAAAGMAAABzYAEAAHwAagBzDnwAagGDAAEAeBZ8AGoCRABdDH0EfARqAYMAAQBxFlcAfABqA3M4dAR8AYMBagWDAH0BdAZ8AYMBfQVkAX0GfABqB30HfABqCH0IdAlqCoMAAQBkAX0Jeap4pHwGfAVrAW9ufAl8AmsAkAFyAnkgfAd8AXwGgwJ9CnwIfAF8CmQCZAONA1wCfQt9DFcAbhwEAHQLawpyrgEAAQABAHwKZAQXAH0GWQBxYFgAfAt8BmsEcvh8CWQENwB9CXwMfAp8C2YDVgABAHwDcvJ8B3wBfAaDAn0NfA18BmsEcuh8C30GcfZ8BmQENwB9Bm4EfAt9BnFgfApkBBcAfQZxYFcAVwBuVAQAdAxrCpABcloBAH0OAQB6NnQJag2QAXImggBuJHQOfA5kBWQGgwNkBmsJkAFyRnwAag98DmoQgwF8Dl8QfA6CAVcAWQBkBmQGfQ5+DlgAbgJYAGQGUwApB2FxBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBgYG1heE1hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzY2FubmluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuICBJZgogICAgICAgIGBgb3ZlcmxhcGBgIGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFyc2luZwogICAgICAgIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB0YWJzLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2Vucywgc3RhcnQsIGVuZCBpbiBXb3JkKGFscGhhcykuc2NhblN0cmluZyhzb3VyY2UpOgogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgJ14nKihlbmQtc3RhcnQpKQogICAgICAgICAgICAgICAgcHJpbnQoJyAnKnN0YXJ0ICsgdG9rZW5zWzBdKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGKQFy3AEAAHKUAAAAcvAAAABOKRFyxwEAAHIaAgAAcsUBAAByxAEAAHKlAAAAchsCAABy0gAAAHLwAQAAcuABAAByQQAAAHIVAgAAcjwAAAByOgAAAHIcAgAAcrABAAByugEAAHLwAAAAKQ9yxwAA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AAAAEAAAAEMAAABzbgAAAHkadABkAWQChAB8AGoBfAF8AoMCRACDAYMBUwAEAHQCawpyaAEAfQMBAHoydANqBHI2ggBuInQFfANkA2QEgwNkBGsJclR8AGoGfANqB4MBfANfB3wDggFXAFkAZARkBH0DfgNYAG4CWABkBFMAKQVhoAMAAAogICAgICAgIEFub3RoZXIgZXh0ZW5zaW9uIHRvIDpjbGFzczpgc2NhblN0cmluZ2AsIHNpbXBsaWZ5aW5nIHRoZSBhY2Nlc3MgdG8gdGhlIHRva2VucyBmb3VuZAogICAgICAgIHRvIG1hdGNoIHRoZSBnaXZlbiBwYXJzZSBleHByZXNzaW9uLiAgTWF5IGJlIGNhbGxlZCB3aXRoIG9wdGlvbmFsCiAgICAgICAgYGBtYXhNYXRjaGVzYGAgYXJndW1lbnQsIHRvIGNsaXAgc2VhcmNoaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICAjIGEgY2FwaXRhbGl6ZWQgd29yZCBzdGFydHMgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMKICAgICAgICAgICAgY2FwX3dvcmQgPSBXb3JkKGFscGhhcy51cHBlcigpLCBhbHBoYXMubG93ZXIoKSkKCiAgICAgICAgICAgIHByaW50KGNhcF93b3JkLnNlYXJjaFN0cmluZygiTW9yZSB0aGFuIElyb24sIG1vcmUgdGhhbiBMZWFkLCBtb3JlIHRoYW4gR29sZCBJIG5lZWQgRWxlY3RyaWNpdHkiKSkKCiAgICAgICAgICAgICMgdGhlIHN1bSgpIGJ1aWx0aW4gY2FuIGJlIHVzZWQgdG8gbWVyZ2UgcmVzdWx0cyBpbnRvIGEgc2luZ2xlIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICAgICAgcHJpbnQoc3VtKGNhcF93b3JkLnNlYXJjaFN0cmluZygiTW9yZSB0aGFuIElyb24sIG1vcmUgdGhhbiBMZWFkLCBtb3JlIHRoYW4gR29sZCBJIG5lZWQgRWxlY3RyaWNpdHkiKSkpCgogICAgICAg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LnNldE5hbWUoIm51bXdvcmQiKQogICAgICAgICAgICB0ZXJtID0gd2QgfCBpbnRlZ2VyCgogICAgICAgICAgICAjIHR1cm4gb24gZGVidWdnaW5nIGZvciB3ZAogICAgICAgICAgICB3ZC5zZXREZWJ1ZygpCgogICAgICAgICAgICBPbmVPck1vcmUodGVybSkucGFyc2VTdHJpbmcoImFiYyAxMjMgeHl6IDg5MCIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDAoMSwxKQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ2FiYyddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMygxLDQpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyA3KDEsOCkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWyd4eXonXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDExKDEsMTIpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDEyKSwgKGxpbmU6MSwgY29sOjEzKQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDE1KDEsMTYpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDE1KSwgKGxpbmU6MSwgY29sOjE2KQoKICAgICAgICBUaGUgb3V0cHV0IHNob3duIGlzIHRoYXQgcHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgZGVidWcgYWN0aW9ucyAtIGN1c3RvbSBkZWJ1ZyBhY3Rpb25zIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCB1c2luZyA6Y2xhc3M6YHNldERlYnVnQWN0aW9uc2AuIFByaW9yIHRvIGF0dGVtcHRpbmcK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fBMXAIMBAQBuGHwQahFkCnwSahkUAGQMFwB8ExcAgwEBAHwQahFkDXQEfBKDARcAgwEBAHwMkAFviHwGfQx8En0RVwBZAGQBZAF9En4SWACQAW4UBAB0G2sKkAFy4gEAfRQBAHomfBBqEWQOdAR8FIMBFwCDAQEAfAyQAW/MfAZ9DHwUfRFXAFkAZAFkAX0UfhRYAG7SWAB8DJABb+58BgwAfQx8B2QBawmQAnKieVJ8B3wPfBGDAn0VfBVkAWsJkAJyPHQAfBV0HIMCkAJyLHwQahF8FWodgwCDAQEAbg58EGoRdAR8FYMBgwEBAG4OfBBqEXwRah2DAIMBAQBXAG5SBAB0G2sKkAJyngEAfRYBAHo0fBBqEXwRah18BGQPjQGDAQEAfBBqEWQQah58B2ofdCB8FoMBah98FoMDgwEBAFcAWQBkAWQBfRZ+FlgAbgJYAG4SfBBqEXwRah18BGQPjQGDAQEAfAWQAnLYfASQAnLKfBBqEWQHgwEBAHwJZARqEnwQgwGDAQEAfApqEXwPfBFmAoMBAQBxeFcAfAx8CmYCUwApEWFzDQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiBvbiBhIHNlcmllcyBvZiB0ZXN0IHN0cmluZ3MsIHNob3dpbmcgZWFjaAogICAgICAgIHRlc3QsIHRoZSBwYXJzZWQgcmVzdWx0cyBvciB3aGVyZSB0aGUgcGFyc2UgZmFpbGVkLiBRdWljayBhbmQgZWFzeSB3YXkgdG8KICAgICAgICBydW4gYSBwYXJzZSBleHByZXNzaW9uIGFnYWluc3QgYSBsaXN0IG9mIHNhbXBsZSBzdHJpbmdzLgoKICAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgICAtIHRlc3RzIC0gYSBsaXN0IG9mIHNlcGFyYXRlIHRlc3Qgc3RyaW5ncywgb3IgYSBtdWx0aWxpbmUgc3RyaW5nIG9mIHRlc3Qgc3RyaW5ncwogICAgICAgICAtIHBhcnNlQWxsIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGZsYWcgdG8gcGFzcyB0byA6Y2xhc3M6YHBhcnNlU3RyaW5nYCB3aGVuIHJ1bm5pbmcgdGVzdHMKICAgICAgICAgLSBjb21tZW50IC0gKGRlZmF1bHQ9IGBgJyMnYGApIC0gZXhwcmVzc2lvbiBmb3IgaW5kaWNhdGluZyBlbWJlZGRlZCBjb21tZW50cyBpbiB0aGUgdGVzdAogICAgICAgICAgICAgIHN0cmluZzsgcGFzcyBOb25lIHRvIGRpc2FibGUgY29tbWVudCBmaWx0ZXJpbmcKICAgICAgICAgLSBmdWxsRHVtcCAtIChkZWZhdWx0PSBgYFRydWVgYCkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgICAgIGlmIEZhbHNlLCBvbmx5IGR1bXAgbmVzdGVkIGxpc3QKICAgICAgICAgLSBwcmludFJlc3VsdHMgLSAoZGVmYXVsdD0gYGBUcnVlYGApIHByaW50cyB0ZXN0IG91dHB1dCB0byBzdGRvdXQKICAgICAgICAgLSBmYWlsdXJlVGVzdHMgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpbmRpY2F0ZXMgaWYgdGhlc2UgdGVzdHMgYXJlIGV4cGVjdGVkIHRvIGZhaWwgcGFyc2luZwogICAgICAgICAtIHBvc3RQYXJzZSAtIChkZWZhdWx0PSBgYE5vbmVgYCkgb3B0aW9uYWwgY2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgcGFyc2UgcmVzdWx0czsgY2FsbGVkIGFzCiAgICAgICAgICAgICAgYGZuKHRlc3Rfc3RyaW5nLCBwYXJzZV9yZXN1bHRzKWAgYW5kIHJldHVybnMgYSBzdHJpbmcgdG8gYmUgYWRkZWQgdG8gdGhlIHRlc3Qgb3V0cHV0CiAgICAgICAgIC0gZmlsZSAtIChkZWZhdWx0PWBgTm9uZWBgKSBvcHRpb25hbCBmaWxlLWxpa2Ugb2JqZWN0IHRvIHdoaWNoIHRlc3Qgb3V0cHV0IHdpbGwgYmUgd3JpdHRlbjsKICAgICAgICAgICAgICBpZiBOb25lLCB3aWxsIGRlZmF1bHQgdG8gYGBzeXMuc3Rkb3V0YGAKCiAgICAgICAgUmV0dXJuczogYSAoc3VjY2VzcywgcmVzdWx0cykgdHVwbGUsIHdoZXJlIHN1Y2Nlc3MgaW5kaWNhdGVzIHRoYXQgYWxsIHRlc3RzIHN1Y2NlZWRlZAogICAgICAgIChvciBmYWlsZWQgaWYgYGBmYWlsdXJlVGVzdHNgYCBpcyBUcnVlKSwgYW5kIHRoZSByZXN1bHRzIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIG9mIGVhY2gKICAgICAgICB0ZXN0J3Mgb3V0cHV0CgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgbnVtYmVyX2V4cHIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlci5jb3B5KCkKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAxMDAKICAgICAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAgICAgLTEwMAogICAgICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICAgICAnJycpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgICAgICAtLjEwMAogICAgICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICAnJycsIGZhaWx1cmVUZXN0cz1UcnVlKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBbMTAwXQoKICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgWy0xMDBdCgogICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgWzFlLTEyXQoKICAgICAgICAgICAgU3VjY2VzcwoKICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDMpLCAobGluZToxLCBjb2w6NCkKCiAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCB7cmVhbCBudW1iZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uIHwgcmVhbCBudW1iZXIgfCBzaWduZWQgaW50ZWdlcn0gKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQoKICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQoKICAgICAgICAgICAgU3VjY2VzcwoKICAgICAgICBFYWNoIHRlc3Qgc3RyaW5nIG11c3QgYmUgb24gYSBzaW5n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BYcABABaBlMAKQpyigAAAGGcBQAAQSB2YXJpYXRpb24gb24gOmNsYXNzOmBMaXRlcmFsYCB3aGljaCBtYXRjaGVzICJjbG9zZSIgbWF0Y2hlcywKICAgIHRoYXQgaXMsIHN0cmluZ3Mgd2l0aCBhdCBtb3N0ICduJyBtaXNtYXRjaGluZyBjaGFyYWN0ZXJzLgogICAgOmNsYXNzOmBDbG9zZU1hdGNoYCB0YWtlcyBwYXJhbWV0ZXJzOgoKICAgICAtIGBgbWF0Y2hfc3RyaW5nYGAgLSBzdHJpbmcgdG8gYmUgbWF0Y2hlZAogICAgIC0gYGBtYXhNaXNtYXRjaGVzYGAgLSAoYGBkZWZhdWx0PTFgYCkgbWF4aW11bSBudW1iZXIgb2YKICAgICAgIG1pc21hdGNoZXMgYWxsb3dlZCB0byBjb3VudCBhcyBhIG1hdGNoCgogICAgVGhlIHJlc3VsdHMgZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2Ugd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHRleHQKICAgIGZyb20gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGZvbGxvd2luZyBuYW1lZCByZXN1bHRzOgoKICAgICAtIGBgbWlzbWF0Y2hlc2BgIC0gYSBsaXN0IG9mIHRoZSBwb3NpdGlvbnMgd2l0aGluIHRoZQogICAgICAgbWF0Y2hfc3RyaW5nIHdoZXJlIG1pc21hdGNoZXMgd2VyZSBmb3VuZAogICAgIC0gYGBvcmlnaW5hbGBgIC0gdGhlIG9yaWdpbmFsIG1hdGNoX3N0cmluZyB1c2VkIHRvIGNvbXBhcmUKICAgICAgIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwoKICAgIElmIGBgbWlzbWF0Y2hlc2BgIGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdAogICAgbWF0Y2guCgogICAgRXhhbXBsZTo6CgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtb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bWF4aW11bSwgYW5kL29yIGV4YWN0IGxlbmd0aC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBgYG1pbmBgIGlzCiAgICAxIChhIG1pbmltdW0gdmFsdWUgPCAxIGlzIG5vdCB2YWxpZCk7IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IKICAgIGBgbWF4YGAgYW5kIGBgZXhhY3RgYCBhcmUgMCwgbWVhbmluZyBubyBtYXhpbXVtIG9yIGV4YWN0CiAgICBsZW5ndGggcmVzdHJpY3Rpb24uIEFuIG9wdGlvbmFsIGBgZXhjbHVkZUNoYXJzYGAgcGFyYW1ldGVyIGNhbgogICAgbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gdGhlIGlucHV0IGBgYm9keUNoYXJzYGAKICAgIHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMgZXhjZXB0IGZvciBvbmUgb3IKICAgIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCgogICAgOmNsYXNzOmBzcmFuZ2VgIGlzIHVzZWZ1bCBmb3IgZGVmaW5pbmcgY3VzdG9tIGNoYXJhY3RlciBzZXQgc3RyaW5ncwogICAgZm9yIGRlZmluaW5nIGBgV29yZGBgIGV4cHJlc3Npb25zLCB1c2luZyByYW5nZSBub3RhdGlvbiBmcm9tCiAgICByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCgogICAgQSBjb21tb24gbWlzdGFrZSBpcyB0byB1c2UgOmNsYXNzOmBXb3JkYCB0byBtYXRjaCBhIHNwZWNpZmljIGxpdGVyYWwKICAgIHN0cmluZywgYXMgaW4gYGBXb3JkKCJBZGRyZXNzIilgYC4gUmVtZW1iZXIgdGhhdCA6Y2xhc3M6YFdvcmRgCiAgICB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lICpzZXRzKiBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4KICAgIFRoaXMgZXhwcmVzc2lvbiB3b3VsZCBtYXRjaCAiQWRkIiwgIkFBQSIsICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkCiAgICBtYWRlIHVwIG9mIHRoZSBjaGFyYWN0ZXJzICdBJywgJ2QnLCAncicsICdlJywgYW5kICdzJy4gVG8gbWF0Y2ggYW4KICAgIGV4YWN0IGxpdGVyYWwgc3RyaW5nLCB1c2UgOmNsYXNzOmBMaXRlcmFsYCBvciA6Y2xhc3M6YEtleXdvcmRgLgoKICAgIHB5cGFyc2luZyBpbmNsdWRlcyBoZWxwZXIgc3RyaW5ncyBmb3IgYnVpbGRpbmcgV29yZHM6CgogICAgIC0gOmNsYXNzOmBhbHBoYXNgCiAgICAgLSA6Y2xhc3M6YG51bXNgCiAgICAgLSA6Y2xhc3M6YGFscGhhbnVtc2AKICAgICAtIDpjbGFzczpgaGV4bnVtc2AKICAgICAtIDpjbGFzczpgYWxwaGFzOGJpdGAgKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1CiAgICAgICAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gOmNsYXNzOmBwdW5jOGJpdGAgKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UKICAgICAgIDEyOC0yNTUgLSBjdXJyZW5jeSwgc3ltYm9scywgc3VwZXJzY3JpcHRzLCBkaWFjcml0aWNhbHMsIGV0Yy4pCiAgICAgLSA6Y2xhc3M6YHByaW50YWJsZXNgIChhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKSAjIGVxdWl2YWxlbnQgdG8gV29yZCgiMDEyMzQ1Njc4OSIpIG9yIFdvcmQoc3JhbmdlKCIwLTkiKSkKCiAgICAgICAgIyBhIHdvcmQgd2l0aCBhIGxlYWRpbmcgY2FwaXRhbCwgYW5kIHplcm8gb3IgbW9yZSBsb3dlcmNhc2UKICAgICAgICBjYXBpdGFsX3dvcmQgPSBXb3JkKGFscGhhcy51cHBlcigpLCBhbHBoYXMubG93ZXIoKSkKCiAgICAgICAgIyBob3N0bmFtZXMgYXJlIGFscGhhbnVtZXJp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AAAAAAAABgAAAAAAAABzOAAAAGUAWgFkAFoCZAFaA2QLhwBmAWQFZAaECVoEZAxkB2QIhAFaBYcAZgFkCWQKhAhaBocABABaB1MAKQ1yQgAAAGEmBgAACiAgICBUb2tlbiBmb3IgbWF0Y2hpbmcgc3RyaW5ncyB0aGF0IGFyZSBkZWxpbWl0ZWQgYnkgcXVvdGluZyBjaGFyYWN0ZXJzLgoKICAgIERlZmluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgogICAgICAgIC0gcXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgICAgICBxdW90ZSBkZWxpbWl0aW5nIHN0cmluZwogICAgICAgIC0gZXNjQ2hhciAtIGNoYXJhY3RlciB0byBlc2NhcGUgcXVvdGVzLCB0eXBpY2FsbHkgYmFja3NsYXNoCiAgICAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgICAgLSBlc2NRdW90ZSAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlCiAgICAgICAgICBzdHJpbmcgKHN1Y2ggYXMgU1FMJ3MgYGAiImBgIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCBgYCJgYCkKICAgICAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgICAgICAtIG11bHRpbGluZSAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHF1b3RlcyBjYW4gc3BhbgogICAgICAgICAgbXVsdGlwbGUgbGluZXMgKGRlZmF1bHQ9IGBgRmFsc2VgYCkKICAgICAgICAtIHVucXVvdGVSZXN1bHRzIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hdGNoZWQgdGV4dAogICAgICAgICAgc2hvdWxkIGJlIHVucXVvdGVkIChkZWZhdWx0PSBgYFRydWVgYCkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZQogICAgICAgICAgZW5kIG9mIHRoZSBx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CVoFZCNkIGQhhAFaBocABABaB1MAKSRySwAAAGGZAQAAU3BlY2lhbCBtYXRjaGluZyBjbGFzcyBmb3IgbWF0Y2hpbmcgd2hpdGVzcGFjZS4gIE5vcm1hbGx5LAogICAgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGJ5IHB5cGFyc2luZyBncmFtbWFycy4gIFRoaXMgY2xhc3MgaXMgaW5jbHVkZWQKICAgIHdoZW4gc29tZSB3aGl0ZXNwYWNlIHN0cnVjdHVyZXMgYXJlIHNpZ25pZmljYW50LiAgRGVmaW5lIHdpdGgKICAgIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZSBtYXRjaGVkOyBkZWZhdWx0CiAgICBpcyBgYCIgXHRcclxuImBgLiAgQWxzbyB0YWtlcyBvcHRpb25hbCBgYG1pbmBgLAogICAgYGBtYXhgYCwgYW5kIGBgZXhhY3RgYCBhcmd1bWVudHMsIGFzIGRlZmluZWQgZm9yIHRoZQogICAgOmNsYXNzOmBXb3JkYCBjbGFzcy4KICAgIHoEPFNQPnoFPFRBQj56BDxMRj56BDxDUj56BDxGRj56BjxOQlNQPnoSPE9HSEFNX1NQQUNFX01BUks+ehs8TU9OR09MSUFOX1ZPV0VMX1NFUEFSQVRPUj56CTxFTl9RVUFEPnoJPEVNX1FVQUQ+ego8RU5fU1BBQ0U+ego8RU1fU1BBQ0U+ehQ8VEhSRUUtUEVSLUVNX1NQQUNFPnoTPEZPVVItUEVSLUVNX1NQQUNFPnoSPFNJWC1QRVItRU1fU1BBQ0U+eg48RklHVVJFX1NQQUNFPnoTPFBVTkNUVUFUSU9OX1NQQUNFPnoMPFRISU5fU1BBQ0U+egw8SEFJUl9TUEFDRT56EjxaRVJPX1dJRFRIX1NQQUNFPnoHPE5OQlNQPnoGPE1NU1A+ehM8SURFT0dSQVBISUNfU1BBQ0U+KRdy4wAAAHLOAgAAcuoAAABy0AIAAHLPAgAA9QIAAADCoHUDAAAA4ZqAdQMAAADhoI51AwAAAOKAgHUDAAAA4oCBdQMAAADigIJ1AwAAAOKAg3UDAAAA4oCEdQMAAADigIV1AwAAAOKAhnUDAAAA4oCHdQMAAADigIh1AwAAAOKAiXUDAAAA4oCK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cmRlci4gRXhwcmVzc2lvbnMgbWF5IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgoKICAgIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgYGAnJidgYCBvcGVyYXRvci4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgY29sb3IgPSBvbmVPZigiUkVEIE9SQU5HRSBZRUxMT1cgR1JFRU4gQkxVRSBQVVJQTEUgQkxBQ0sgV0hJVEUgQlJPV04iKQogICAgICAgIHNoYXBlX3R5cGUgPSBvbmVPZigiU1FVQVJFIENJUkNMRSBUUklBTkdMRSBTVEFSIEhFWEFHT04gT0NUQUdPTiIpCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBzaGFwZV9hdHRyID0gInNoYXBlOiIgKyBzaGFwZV90eXBlKCJzaGFwZSIpCiAgICAgICAgcG9zbl9hdHRyID0gInBvc246IiArIEdyb3VwKGludGVnZXIoIngiKSArICcsJyArIGludGVnZXIoInkiKSkoInBvc24iKQogICAgICAgIGNvbG9yX2F0dHIgPSAiY29sb3I6IiArIGNvbG9yKCJjb2xvciIpCiAgICAgICAgc2l6ZV9hdHRyID0gInNpemU6IiArIGludGVnZXIoInNpemUiKQoKICAgICAgICAjIHVzZSBFYWNoICh1c2luZyBvcGVyYXRvciAnJicpIHRvIGFjY2VwdCBhdHRyaWJ1dGVzIGluIGFueSBvcmRlcgogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCgogICAgcHJpbnRzOjoKCiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1MCcsICcsJywgJzgwJ10KICAgICAgICAgIC0geDogNTAKICAgICAgICAgIC0geTogODAKICAgICAgICAtIHNoYXBlOiBDSVJDTEUKICAgICAgICAtIHNpemU6IDUwCgoKICAgICAgICBjb2xvcjogR1JFRU4gc2l6ZTogMjAgc2hhcGU6IFRSSUFOR0xFIHBvc246IDIwLDQwCiAgICAgICAgWydjb2xvcjonLCAnR1JFRU4nLCAnc2l6ZTonLCAnMjAnLCAnc2hhcGU6JywgJ1RSSUFOR0xFJywgJ3Bvc246JywgWycyMCcsICcsJywgJzQwJ11dCiAgICAgICAgLSBjb2xvcjogR1JFRU4KICAgICAgICAtIHBvc246IFsnMjAnLCAnLCcsICc0MCddCiAgICAgICAgICAtIHg6IDIwCiAgICAgICAgICAtIHk6IDQwCiAgICAgICAgLSBzaGFwZTog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ZSBleHByZXNzaW9uCiAgICBtYXRjaGVzIHByaW9yIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLiAgYGBQcmVjZWRlZEJ5YGAgYWx3YXlzCiAgICByZXR1cm5zIGEgbnVsbCB0b2tlbiBsaXN0LCBidXQgaWYgYSByZXN1bHRzIG5hbWUgaXMgZGVmaW5lZCBvbiB0aGUKICAgIGdpdmVuIGV4cHJlc3Npb24sIGl0IGlzIHJldHVybmVkLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlCiAgICAgICBsb2NhdGlvbgogICAgIC0gcmV0cmVhdCAtIChkZWZhdWx0PSBgYE5vbmVgYCkgLSAoaW50KSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICB0byBsb29rYmVoaW5kIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlIGxvY2F0aW9uCgogICAgSWYgdGhlIGxvb2tiZWhpbmQgZXhwcmVzc2lvbiBpcyBhIHN0cmluZywgTGl0ZXJhbCwgS2V5d29yZCwgb3IKICAgIGEgV29yZCBvciBDaGFyc05vdEluIHdpdGggYSBzcGVjaWZpZWQgZXhhY3Qgb3IgbWF4aW11bSBsZW5ndGgsIHRoZW4KICAgIHRoZSByZXRyZWF0IHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQuIE90aGVyd2lzZSwgcmV0cmVhdCBtdXN0IGJlCiAgICBzcGVjaWZpZWQgdG8gZ2l2ZSBhIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gbG9vayBiYWNrIGZyb20KICAgIHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uIGZvciBhIGxvb2tiZWhpbmQgbWF0Y2guCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVkItc3R5bGUgdmFyaWFibGUgbmFtZXMgd2l0aCB0eXBlIHByZWZpeGVzCiAgICAgICAgaW50X3ZhciA9IFByZWNlZGVkQnkoIiMiKSArIHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllcgogICAgICAgIHN0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AAAAchEDAAA/EgAAcwgAAAAIAQ4ICAYKHXIRAwAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBXI2AAAAYWoEAABSZXBldGl0aW9uIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggb25lIG9yIG1vcmUgdGltZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PSBgYE5vbmVgYCkgLSBleHByZXNzaW9uIGZvciBhIHRlcm1pbmF0aW5nIHNlbnRpbmVsCiAgICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbgogICAgICAgICAgZXhwcmVzc2lvbikKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBCTEFDSyIKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAgIyBGYWlsISByZWFkICdjb2xvcicgYXMgZGF0YSBpbnN0ZWFkIG9mIG5leHQgbGFiZWwgLT4gW1snc2hhcGUnLCAnU1FVQVJFIGNvbG9yJ11dCgogICAgICAgICMgdXNlIHN0b3BPbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxhYmVsIHN0cmluZyBhcyBwYXJ0IG9mIHRoZSBkYXRhCiAgICAgICAgYXR0cl9leHBy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cmUgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGZvdW5kLAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkU3RyaW5nKQogICAgICAgIHN0cmluZ19kYXRhLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci5zdHJpcCkpCiAgICAgICAgdGlja2V0X2V4cHIgPSAoaW50ZWdlcigiaXNzdWVfbnVtIikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJkZXNjIikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlcigiZGF5c19vcGVuIikpCgogICAgICAgIGZvciB0a3QgaW4gdGlja2V0X2V4cHIuc2VhcmNoU3RyaW5nKHJlcG9ydCk6CiAgICAgICAgICAgIHByaW50IHRrdC5kdW1wKCkKCiAgICBwcmludHM6OgoKICAgICAgICBbJzEwMScsICdDcml0aWNhbCcsICdJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoJywgJzYnXQogICAgICAgIC0gZGF5c19vcGVuOiA2CiAgICAgICAgLSBkZXNjOiBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoCiAgICAgICAgLSBpc3N1ZV9udW06IDEwMQogICAgICAgIC0gc2V2OiBDcml0aWNhbAogICAgICAgIFsnOTQnLCAnQ29zbWV0aWMnLCAiU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpIiwgJzE0J10KICAgICAgICAtIGRheXNfb3BlbjogMTQKICAgICAgICAtIGRlc2M6IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKQogICAgICAgIC0gaXNzdWVfbnVtOiA5NAogICAgICAgIC0gc2V2OiBDb3NtZXRpYwogICAgICAgIFsnNzknLCAnTWlub3InLCAnU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMnLCAnNDcnXQogICAgICAgIC0gZGF5c19vcGVuOiA0NwogICAg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YW4gYWxzbyBiZSByZWZlcmVuY2VkIHVzaW5nIHRoZSBmaXJzdAogICAgdG9rZW4gaW4gdGhlIGV4cHJlc3Npb24gYXMgaXRzIGtleS4gVXNlZnVsIGZvciB0YWJ1bGFyIHJlcG9ydAogICAgc2NyYXBpbmcgd2hlbiB0aGUgZmlyc3QgY29sdW1uIGNhbiBiZSB1c2VkIGFzIGEgaXRlbSBrZXkuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQoKICAgICAgICAjIGluc3RlYWQgb2YgT25lT3JNb3JlKGV4cHIpLCBwYXJzZSB1c2luZyBEaWN0KE9uZU9yTW9yZShHcm91cChleHByKSkpIC0gRGljdCB3aWxsIGF1dG8tYXNzaWduIG5hbWVzCiAgICAgICAgcmVzdWx0ID0gRGljdChPbmVPck1vcmUoR3JvdXAoYXR0cl9leHByKSkpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKCiAgICAgICAgIyBhY2Nlc3MgbmFtZWQgZmllbGRzIGFzIGRpY3QgZW50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ZAsYAGsAkAFyMnwGfAcZAH0IeGx0DnwGfAdkCxcAZAyFAhkAgwFEAF1MXAJ9CX0KfAR8CnwIgwKQAHL+fAZ8B3wJFwBkCxcAPQBQAHHYfAV8CHwKgwJy2HwGfAd8CRcAZAsXAD0AfAZqD3wHfAqDAgEAUABx2FcAfAdkCzcAfQdxqFcAfAGQAXA8fAMMAJABcth8ApABcth5aHQNfAaDAXQNZA1qEHwGgwGDAWsCkAFyinQRZA5kDWoQZA9kEIQAfAZEAIMBgwEWAIMBahJkEWoQfAaDAYMBUwB0EWQSahBkE2QQhAB8BkQAgwGDAYMBahJkEWoQfAaDAYMBUwBXAG4mBAB0E2sKkAFy1gEAAQABAHQCagNkFHQLZAJkA40DAQBZAG4CWAB0FIcAZgFkFWQQhAh8BkQAgwGDAWoSZBFqEHwGgwGDAVMAKRZhgwQAAEhlbHBlciB0byBxdWlja2x5IGRlZmluZSBhIHNldCBvZiBhbHRlcm5hdGl2ZSBMaXRlcmFscywgYW5kIG1ha2VzCiAgICBzdXJlIHRvIGRvIGxvbmdlc3QtZmlyc3QgdGVzdGluZyB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QsCiAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnB1dCBvcmRlciwgYnV0IHJldHVybnMKICAgIGEgOmNsYXNzOmBNYXRjaEZpcnN0YCBmb3IgYmVzdCBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICAtIHN0cnMgLSBhIHN0cmluZyBvZiBzcGFjZS1kZWxpbWl0ZWQgbGl0ZXJhbHMsIG9yIGEgY29sbGVjdGlvbiBvZgogICAgICAgc3RyaW5nIGxpdGVyYWxzCiAgICAgLSBjYXNlbGVzcyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIC0gdHJlYXQgYWxsIGxpdGVyYWxzIGFzCiAgICAgICBjYXNlbGVzcwogICAgIC0gdXNlUmVnZXggLSAoZGVmYXVsdD0gYGBUcnVlYGApIC0gYXMgYW4gb3B0aW1pemF0aW9uLCB3aWxsCiAgICAgICBnZW5lcmF0ZSBhIFJlZ2V4IG9iamVjdDsgb3RoZXJ3aXNlLCB3aWxsIGdlbmVyYXRlCiAgICAgICBhIDpjbGFzczpgTWF0Y2hGaXJz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AQgBCAEOAggBCAEMAgQBCgEKAQoBCgIGAQoBBAEGAgYDBAEUAQgBHgEMAQ4BBAEKAQ4BDAEGAgwCFAICARgBKAIoARABBgEQA2MCAAAAAAAAAAIAAAAFAAAAQwAAAHMUAAAAdAB0AXQCfAB8ARcAgwGDAYMBUwApAWHpBQAASGVscGVyIHRvIGVhc2lseSBhbmQgY2xlYXJseSBkZWZpbmUgYSBkaWN0aW9uYXJ5IGJ5IHNwZWNpZnlpbmcKICAgIHRoZSByZXNwZWN0aXZlIHBhdHRlcm5zIGZvciB0aGUga2V5IGFuZCB2YWx1ZS4gIFRha2VzIGNhcmUgb2YKICAgIGRlZmluaW5nIHRoZSA6Y2xhc3M6YERpY3RgLCA6Y2xhc3M6YFplcm9Pck1vcmVgLCBhbmQKICAgIDpjbGFzczpgR3JvdXBgIHRva2VucyBpbiB0aGUgcHJvcGVyIG9yZGVyLiAgVGhlIGtleSBwYXR0ZXJuCiAgICBjYW4gaW5jbHVkZSBkZWxpbWl0aW5nIG1hcmtlcnMgb3IgcHVuY3R1YXRpb24sIGFzIGxvbmcgYXMgdGhleSBhcmUKICAgIHN1cHByZXNzZWQsIHRoZXJlYnkgbGVhdmluZyB0aGUgc2lnbmlmaWNhbnQga2V5IHRleHQuICBUaGUgdmFsdWUKICAgIHBhdHRlcm4gY2FuIGluY2x1ZGUgbmFtZWQgcmVzdWx0cywgc28gdGhhdCB0aGUgOmNsYXNzOmBEaWN0YCByZXN1bHRzCiAgICBjYW4gaW5jbHVkZSBuYW1lZCB0b2tlbiBmaWVsZHMuCgogICAgRXhhbXBsZTo6CgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQoKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3RPZihhdHRyX2xhYmVsLCBhdHRyX3ZhbHVlKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5zaGFwZSkgICMgb2JqZWN0IGF0dHJpYnV0ZSBhY2Nlc3Mgd29ya3MgdG9vCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6IGxpZ2h0IGJsdWUKICAgICAgICAtIHBvc246IHVwcGVyIGxlZnQKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKICAgICAgICAtIHRleHR1cmU6IGJ1cmxhcAogICAgICAgIFNRVUFSRQogICAgICAgIFNRVUFSRQogICAgICAgIHsnY29sb3InOiAnbGlnaHQgYmx1ZScsICdzaGFwZSc6ICdTUVVBUkUnLCAncG9zbic6ICd1cHBlciBsZWZ0JywgJ3RleHR1cmUnOiAnYnVybGFwJ30KICAgICkDcicAAAByNgAAAHItAAAAKQJySQEAAHIxAQAAchIAAAByEgAAAHITAAAAcl8AAACtFQAAcwIAAAAAJWMCAAAAAAAAAAYAAAADAAAAQwAAAHNeAAAAdACDAGoBZAFkAoQAgwF9AnwCagKDAH0DZAN8A18DfAJkBIMBfAAXAHwDZAWDARcAfQR8AXJAZAZkAoQAfQVuCGQHZAiEAH0FfARqAXwFgwEBAHwAagR8BF8EfARTACkJYZcEAABIZWxwZXIgdG8gcmV0dXJuIHRoZSBvcmlnaW5hbCwgdW50b2tlbml6ZWQgdGV4dCBmb3IgYSBnaXZlbgogICAgZXhwcmVzc2lvbi4gIFVzZWZ1bCB0byByZXN0b3JlIHRoZSBwYXJzZWQgZmllbGRzIG9mIGFuIEhUTUwgc3RhcnQKICAgIHRhZyBpbnRvIHRoZSByYXcgdGFnIHRleHQgaXRzZWxmLCBvciB0byByZXZlcnQgc2VwYXJhdGUgdG9rZW5zIHdpdGgKICAgIGludGVydmVuaW5nIHdoaXRlc3BhY2UgYmFjayB0byB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcgaW5wdXQgdGV4dC4gQnkKICAgIGRlZmF1bHQsIHJldHVybnMgYXN0cmluZyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwYXJzZWQgdGV4dC4KCiAgICBJZiB0aGUgb3B0aW9uYWwgYGBhc1N0cmluZ2BgIGFyZ3VtZW50IGlzIHBhc3NlZCBhcwogICAgYGBGYWxzZWBgLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMKICAgIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIGNvbnRhaW5pbmcgYW55IHJlc3VsdHMgbmFtZXMgdGhhdAogICAgd2VyZSBvcmlnaW5hbGx5IG1hdGNoZWQsIGFuZCBhIHNpbmdsZSB0b2tlbiBjb250YWluaW5nIHRoZSBvcmlnaW5hbAogICAgbWF0Y2hlZCB0ZXh0IGZyb20gdGhlIGlucHV0IHN0cmluZy4gIFNvIGlmIHRoZSBleHByZXNzaW9uIHBhc3NlZCB0bwogICAgOmNsYXNzOmBvcmlnaW5hbFRleHRGb3JgIGNvbnRhaW5zIGV4cHJlc3Npb25zIHdpdGggZGVmaW5lZAogICAgcmVzdWx0cyBuYW1lcywgeW91IG11c3Qgc2V0IGBgYXNTdHJpbmdgYCB0byBgYEZhbHNlYGAgaWYgeW91CiAgICB3YW50IHRvIHByZXNlcnZlIHRob3NlIHJlc3VsdHMgbmFtZSB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CgogICAgICAgIHNyYyA9ICJ0aGlzIGlzIHRlc3QgPGI+IGJvbGQgPGk+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Zm9yd2FyZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgYWZ0ZXIgdGhlIHRva2VuLCBhcyBpbgogICAgYGBoZXhfaW50ZWdlciA9IFdvcmQoaGV4bnVtcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoaW50LCAxNikpYGAsCiAgICB3aGljaCB3aWxsIGNvbnZlcnQgdGhlIHBhcnNlZCBkYXRhIHRvIGFuIGludGVnZXIgdXNpbmcgYmFzZSAxNi4KCiAgICBFeGFtcGxlIChjb21wYXJlIHRoZSBsYXN0IHRvIGV4YW1wbGUgaW4gOmNsYXNzOmBQYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZ2A6OgoKICAgICAgICBoZXhfaW50cyA9IE9uZU9yTW9yZShXb3JkKGhleG51bXMpKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSkKICAgICAgICBoZXhfaW50cy5ydW5UZXN0cygnJycKICAgICAgICAgICAgMDAgMTEgMjIgYWEgRkYgMGEgMGQgMWEKICAgICAgICAgICAgJycnKQoKICAgICAgICB1cHBlcndvcmQgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnVwcGVyKSkKICAgICAgICBPbmVPck1vcmUodXBwZXJ3b3JkKS5ydW5UZXN0cygnJycKICAgICAgICAgICAgbXkga2luZ2RvbSBmb3IgYSBob3JzZQogICAgICAgICAgICAnJycpCgogICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci50aXRsZSkpCiAgICAgICAgT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsKICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAgIDAwIDExIDIyIGFhIEZG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cgogICAgOmNsYXNzOmBtYWtlSFRNTFRhZ3NgLiBVc2UgYGB3aXRoQXR0cmlidXRlYGAgdG8gcXVhbGlmeQogICAgYSBzdGFydGluZyB0YWcgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UKICAgIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcyBgYDxURD5gYCBvciBgYDxESVY+YGAuCgogICAgQ2FsbCBgYHdpdGhBdHRyaWJ1dGVgYCB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQKICAgIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdCBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBgYChhbGlnbj0icmlnaHQiKWBgLCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIGBgKipgYCBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUKICAgICAgIG5hbWUgaXMgYWxzbyBhIFB5dGhvbiByZXNlcnZlZCB3b3JkLCBhcyBpbiBgYCoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifWBgCiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluIGBgKCgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwgInJpZ2h0IikpYGAKCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZAogICAgZm9ybS4gIEF0dHJpYnV0ZSBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgoKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgYGBjbGFzc2BgICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UKICAgIDpjbGFzczpgd2l0aENsYXNzYC4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLAogICAgcGFzcyBgYHdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFYGAgYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPSJncmlkIikpCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQoKICAgICAgICAjIGNvbnN0cnVjdCBhIG1hdGNoIHdpdGggYW55IGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlCiAgICAgICAgZGl2X2FueV90eXBlID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPXdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFKSkKICAgICAgICBkaXZfZXhwciA9IGRpdl9hbnlfdHlwZSArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGRpdl9oZWFkZXIgaW4gZGl2X2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChkaXZfaGVhZGVyLmJvZHkpCgogICAgcHJpbnRzOjoKCiAgICAgICAgMSA0IDAgMSAwCgogICAgICAgIDEgNCAwIDEgMAogICAgICAgIDEsMyAyLDMgMSwxCiAgICBOYwEAAAAAAAAAAwAAAAQAAABTAAAAcxgAAABnAHwAXRBcAn0BfQJ8AXwCZgKRAnEEUwByEgAAAHISAAAAKQNyFQAAAHImAQAAciMBAAByEgAAAHISAAAAchMAAAByFwAAAC8XAABzAgAAAAYAeiF3aXRoQXR0cmlidXRlLjxsb2NhbHM+LjxsaXN0Y29tcD5jAwAAAAAAAAAFAAAACAAAABMAAABzXgAAAHhYiABEAF1QXAJ9A30EfAN8AmsHciZ0AHwAfAFkAXwDFwCDA4IBfAR0AWoCawNyBnwCfAMZAHwEawNyBnQAfAB8AWQCfAN8AnwDGQB8BGYDFgCDA4IBcQZXAGQAUwApA056Fm5vIG1hdGNoaW5nIGF0dHJpYnV0ZSB6K2F0dHJpYnV0ZSAnJXMnIGhhcyB2YWx1ZSAnJXMnLCBtdXN0IGJlICclcycpA3I8AAAAcoMAAADaCUFOWV9WQUxVRSkFcqoAAAByuwAAAHL6AQAA2ghhdHRyTmFtZdoJYXR0clZhbHVlKQHaBWF0dHJzchIAAAByEwAAAHK/AAAAMBcAAHMMAAAAAAEOAQgBEAEWAQgBehl3aXRoQXR0cmlidXRlLjxsb2NhbHM+LnBhKQFyLAEAACkDcsYAAADaCGF0dHJEaWN0cr8AAAByEgAAACkBcoEDAAByEwAAAHKDAAAA8xYAAHMMAAAAADgEAQ4CCAEOAQwHYwIAAAAAAAAAAwAAAAQAAABDAAAAcx4AAAB8AXIMZAF8ARYAbgJkAn0CdABmAHwCfABpAY4BUwApA2HJAwAAU2ltcGxpZmllZCB2ZXJzaW9uIG9mIDpjbGFzczpgd2l0aEF0dHJpYnV0ZWAgd2hlbgogICAgbWF0Y2hpbmcgb24gYSBkaXYgY2xhc3MgLSBtYWRlIGRpZmZpY3VsdCBiZWNhdXNlIGBgY2xhc3NgYCBpcwogICAgYSByZXNlcnZlZCB3b3JkIGluIFB5dGhvbi4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgaHRtbCA9ICcnJwogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICBTb21lIHRleHQKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCI+MSA0IDAgMSAwPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgJmx0O2RpdiZndDsgaGFzIG5vIGNsYXNzPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhDbGFzcygiZ3JpZCIpKQoKICAgICAgICBncmlkX2V4cHIgPSBkaXZfZ3JpZCArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGdyaWRfaGVhZGVyIGluIGdyaWRfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGdyaWRfaGVhZGVyLmJvZHkpCgogICAgICAgIGRpdl9hbnlfdHlwZSA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhDbGFzcyh3aXRoQXR0cmlidXRlLkFOWV9WQUxVRSkpCiAgICAgICAgZGl2X2V4cHIgPSBkaXZfYW55X3R5cGUgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBkaXZfaGVhZGVyIGluIGRpdl9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZGl2X2hlYWRlci5ib2R5KQoKICAgIHByaW50czo6CgogICAgICAgIDEgNCAwIDEgMAoKICAgICAgICAxIDQgMCAxIDAKICAgICAgICAxLDMgMiwzIDEsMQogICAgegglczpjbGFzc9oFY2xhc3MpAXKDAAAAKQPaCWNsYXNzbmFtZdoJbmFtZXNwYWNl2gljbGFzc2F0dHJyEgAAAHISAAAAchMAAAByiQAAADoXAABzBAAAAAAjEAH6AShywQIAAGMEAAAAAAAAABIAAAAHAAAAQwAAAHO2AgAARwBkAWQChABkAnQAgwN9BHQBgwB9BXwAfAJ8BRcAfAMXAEIAfQaQAniAdAJ8AYMBRACQAl1yXAJ9B30IfAhkDRcAZANkBIUCGQBcBH0JfQp9C30MfApkBWsAcmRkBnwJFgBuBmQHfAkWAH0NfApkBWsCcph8CWQDawhziHQDfAmDAWQIawNykHQEZAmDAYIBfAlcAn0OfQ90AYMAagV8DYMBfRB8C3QGagdrApABcnh8CmQKawJy1nwEfAZ8CRcAgwF0CHwGdAl8CYMBFwCDARcAfRFuoHwKZAhrApABci58CWQDawmQAXIQfAR8BnwJFwB8BhcAgwF0CHwGdAl8CXwGFwCDARcAgwEXAH0Rbhx8BHwGfAYXAIMBdAh8BnQJfAaDARcAgwEXAH0Rbkh8CmQFawKQAXJufAR8BnwOFwB8BhcAfA8XAHwGFwCDAXQIfAZ0CXwOfAYXAHwPFwB8BhcAgwEXAIMBFwB9EW4IdARkC4MBggFu7HwLdAZqCmsCkAJyXHwKZAprApABcr50C3wJdAyDApABc6J0DHwJgwF9CXwEfAlqDXwQFwCDAXQIfAl8EBcAgwEXAH0Rbpx8CmQIawKQAnIWfAlkA2sJkAFy+HwEfAZ8CRcAfBAXAIMBdAh8BnQJfAl8EBcAgwEXAIMBFwB9EW4cfAR8BnwQFwCDAXQIfAZ0CXwQgwEXAIMBFwB9EW5EfApkBWsCkAJyUnwEfAZ8DhcAfBAXAHwPFwB8EBcAgwF0CHwGfA4XAHwQFwB8DxcAfBAXAIMBFwB9EW4IdARkC4MBggFuCHQEZAyDAYIBfAyQAnKQdAt8DHQOdA9mAoMCkAJyhnwRahB8DI4AAQBuCnwRahB8DIMBAQB8EHwRagV8DYMBfAZCAEsAfRB8EH0GcTJXAHwFfAZLAH0FfAVTACkOYWwKAABIZWxwZXIgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZ3JhbW1hcnMgb2YgZXhwcmVzc2lvbnMgbWFkZSB1cCBvZgogICAgb3BlcmF0b3JzIHdvcmtpbmcgaW4gYSBwcmVjZWRlbmNlIGhpZXJhcmNoeS4gIE9wZXJhdG9ycyBtYXkgYmUgdW5hcnkKICAgIG9yIGJpbmFyeSwgbGVmdC0gb3IgcmlnaHQtYXNzb2NpYXRpdmUuICBQYXJzZSBhY3Rpb25zIGNhbiBhbHNvIGJlCiAgICBhdHRhY2hlZCB0byBvcGVyYXRvciBleHByZXNzaW9ucy4gVGhlIGdlbmVyYXRlZCBwYXJzZXIgd2lsbCBhbHNvCiAgICByZWNvZ25pemUgdGhlIHVzZSBvZiBwYXJlbnRoZXNlcyB0byBvdmVycmlkZSBvcGVyYXRvciBwcmVjZWRlbmNlcwogICAgKHNlZSBleGFtcGxlIGJlbG93KS4KCiAgICBOb3RlOiBpZiB5b3UgZGVmaW5lIGEgZGVlcCBvcGVyYXRvciBsaXN0LCB5b3UgbWF5IHNlZSBwZXJmb3JtYW5jZQogICAgaXNzdWVzIHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlCiAgICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdGAgZm9yIGEgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5CiAgICBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZQogICAgICAgbmVzdGVkCiAgICAgLSBvcExpc3QgLSBsaXN0IG9mIHR1cGxlcywgb25lIGZvciBlYWNoIG9wZXJhdG9yIHByZWNlZGVuY2UgbGV2ZWwKICAgICAgIGluIHRoZSBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0gYGAob3BFeHByLAogICAgICAgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbilgYCwgd2hlcmU6CgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7IG1heSBhbHNvCiAgICAgICAgIGJlIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIExpdGVyYWw7IGlmIG51bVRlcm1zCiAgICAgICAgIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZSB0d28KICAgICAgICAgb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdCBiZSAxLAogICAgICAgICAyLCBvciAzKQogICAgICAgLSByaWdodExlZnRBc3NvYyBpcyB0aGUgaW5kaWNhdG9yIHdoZXRoZXIgdGhlIG9wZXJhdG9yIGlzIHJpZ2h0CiAgICAgICAgIG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZCBjb25zdGFudHMKICAgICAgICAgYGBvcEFzc29jLlJJR0hUYGAgYW5kIGBgb3BBc3NvYy5MRUZUYGAuCiAgICAgICAtIHBhcnNlQWN0aW9uIGlzIHRoZSBwYXJzZSBhY3Rpb24gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlIHBhcnNlIGFjdGlvbgogICAgICAgICB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uIGlzIHBhc3NlZAogICAgICAgICBhIHR1cGxlIG9yIGxpc3Qgb2YgZnVuY3Rpb25zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogICAgICAgICBgYHNldFBhcnNlQWN0aW9uKCpmbilgYAogICAgICAgICAoOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFBhcnNlQWN0aW9uYCkKICAgICAtIGxwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyBsZWZ0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKCcpYGApCiAgICAgLSBycGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgcmlnaHQtcGFyZW50aGVzZXMKICAgICAgIChkZWZhdWx0PSBgYFN1cHByZXNzKCcpJylgYCkKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZAogICAgICAgICMgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCgogICAgICAgIGFyaXRoX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDUrMyo2CiAgICAgICAgICAgICg1KzMpKjYKICAgICAgICAgICAgLTItLTExCiAgICAgICAgICAgICcnJywgZnVsbER1bXA9RmFsc2UpCgogICAgcHJpbnRzOjoKCiAgICAgICAgNSszKjYKICAgICAgICBbWzUsICcrJywgWzMsICcqJywgNl1dXQoKICAgICAgICAoNSszKSo2CiAgICAgICAgW1tbNSwgJysnLCAzXSwgJyonLCA2XV0KCiAgICAgICAgLTItLTExCiAgICAgICAgW1tbJy0nLCAyXSwgJy0nLCBbJy0nLCAxMV1dXQogICAgYwAAAAAAAAAAAAAAAAMAAABAAAAAcxYAAABlAFoBZABaAmQFZAJkA4QBWgNkBFMAKQZ6GmluZml4Tm90YXRpb24uPGxvY2Fscz4uX0ZCVGMEAAAAAAAAAAQAAAADAAAAUwAAAHMWAAAAfABqAGoBfAF8AoMCAQB8AmcAZgJTACkBTikCcpUBAABy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ICAtIGNvbnRlbnQgLSBleHByZXNzaW9uIGZvciBpdGVtcyB3aXRoaW4gdGhlIG5lc3RlZCBsaXN0cwogICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgIC0gaWdub3JlRXhwciAtIGV4cHJlc3Npb24gZm9yIGlnbm9yaW5nIG9wZW5pbmcgYW5kIGNsb3NpbmcKICAgICAgIGRlbGltaXRlcnMgKGRlZmF1bHQ9IDpjbGFzczpgcXVvdGVkU3RyaW5nYCkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZQogICAgbmVzdGVkIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50CiAgICBiZXR3ZWVuIGRlbGltaXRlcnMgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIGBgaWdub3JlRXhwcmBgIGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heQogICAgY29udGFpbiBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcwogICAgb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yCiAgICBhIGNvbW1lbnQgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4KICAgIDpjbGFzczpgT3JgIG9yIDpjbGFzczpgTWF0Y2hGaXJzdGAuIFRoZSBkZWZhdWx0IGlzCiAgICA6Y2xhc3M6YHF1b3RlZFN0cmluZ2AsIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwgdGhlbgogICAgcGFzcyBgYE5vbmVgYCBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLCBSUEFSID0gbWFwKFN1cHByZXNzLCAiKCkiKQoKICAgICAgICBjb2RlX2JvZHkgPSBuZXN0ZWRFeHByKCd7JywgJ30nLCBpZ25vcmVFeHByPShxdW90ZWRTdHJpbmcgfCBjU3R5bGVDb21tZW50KSkKCiAgICAgICAgY19mdW5jdGlvbiA9IChkZWNsX2RhdGFfdHlwZSgidHlwZSIpCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCgogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgewogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9yZChoY2hhciktb3JkKCcwJykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhcikt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ICAgZ3JhbW1hciBzaG91bGQgc2hhcmUgYSBjb21tb24gaW5kZW50U3RhY2spCiAgICAgLSBpbmRlbnQgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZAogICAgICAgdGhlIGN1cnJlbnQgbGV2ZWw7IHNldCB0byBGYWxzZSBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0CiAgICAgICBzdGF0ZW1lbnRzIChkZWZhdWx0PSBgYFRydWVgYCkKCiAgICBBIHZhbGlkIGJsb2NrIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYGBibG9ja1N0YXRlbWVudGBgLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCgiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGlkZW50aWZpZXIpKSArICIpIikgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoZnVuY0RlY2wgKyBmdW5jX2JvZHkpCgogICAgICAgIHJ2YWx1ZSA9IEZvcndhcmQoKQogICAgICAgIGZ1bmNDYWxsID0gR3JvdXAoaWRlbnRpZmllciArICIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QocnZhbHVlKSkgKyAiKSIpCiAgICAgICAgcnZhbHVlIDw8IChmdW5jQ2FsbCB8IGlkZW50aWZpZXIgfCBXb3JkKG51bXMpKQogICAgICAgIGFzc2lnbm1lbnQgPSBHcm91cChpZGVudGlmaWVyICsgIj0iICsgcnZhbHVlKQogICAgICAgIHN0bXQgPDwgKGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllcikKCiAgICAgICAgbW9kdWxlX2JvZHkgPSBPbmVPck1vcmUoc3RtdCkKCiAgICAgICAgcGFyc2VUcmVlID0gbW9kdWxlX2JvZHkucGFyc2VTdHJpbmcoZGF0YSkKICAgICAgICBwYXJzZVRyZWUucHByaW50KCkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydkZWYnLAogICAgICAgICAgJ0EnLAogICAgICAgICAgWycoJywgJ3onLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQTEnXSwgW1snQicsICc9JywgJzEwMCddXSwgW1snRycsICc9JywgJ0EyJ11dLCBbJ0EyJ10sIFsnQTMnXV1dLAogICAgICAgICAnQicsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdCQicsCiAgICAgICAgICBbJygnLCAnYScsICdiJywgJ2MnLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQkIxJ10sIFtbJ2RlZicsICdCQkEnLCBbJygnLCAnKSddLCAnOicsIFtbJ2JiYTEnXSwgWydiYmEyJ10sIFsnYmJhMyddXV1dXV0sCiAgICAgICAgICdDJywKICAgICAgICAgJ0QnLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnc3BhbScsCiAgICAgICAgICBbJygnLCAneCcsICd5JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtb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cHJlc3Npb25zIHRoYXQgbWF5IGJlIHVzZWZ1bCBpbgogICAganVtcC1zdGFydGluZyBwYXJzZXIgZGV2ZWxvcG1lbnQ6CgogICAgIC0gbnVtZXJpYyBmb3JtcyAoOmNsYXNzOmBpbnRlZ2VyczxpbnRlZ2VyPmAsIDpjbGFzczpgcmVhbHM8cmVhbD5gLAogICAgICAgOmNsYXNzOmBzY2llbnRpZmljIG5vdGF0aW9uPHNjaV9yZWFsPmApCiAgICAgLSBjb21tb24gOmNsYXNzOmBwcm9ncmFtbWluZyBpZGVudGlmaWVyczxpZGVudGlmaWVyPmAKICAgICAtIG5ldHdvcmsgYWRkcmVzc2VzICg6Y2xhc3M6YE1BQzxtYWNfYWRkcmVzcz5gLAogICAgICAgOmNsYXNzOmBJUHY0PGlwdjRfYWRkcmVzcz5gLCA6Y2xhc3M6YElQdjY8aXB2Nl9hZGRyZXNzPmApCiAgICAgLSBJU084NjAxIDpjbGFzczpgZGF0ZXM8aXNvODYwMV9kYXRlPmAgYW5kCiAgICAgICA6Y2xhc3M6YGRhdGV0aW1lPGlzbzg2MDFfZGF0ZXRpbWU+YAogICAgIC0gOmNsYXNzOmBVVUlEPHV1aWQ+YAogICAgIC0gOmNsYXNzOmBjb21tYS1zZXBhcmF0ZWQgbGlzdDxjb21tYV9zZXBhcmF0ZWRfbGlzdD5gCgogICAgUGFyc2UgYWN0aW9uczoKCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0ludGVnZXJgCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0Zsb2F0YAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRlYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRldGltZWAKICAgICAtIDpjbGFzczpgc3RyaXBIVE1MVGFnc2AKICAgICAtIDpjbGFzczpgdXBjYXNlVG9rZW5zYAogICAgIC0gOmNsYXNzOmBkb3duY2FzZVRva2Vuc2AKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZudW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmhleF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBGRgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZnJhY3Rpb24ucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5taXhlZF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgICAgICAxCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgIDEtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAodXVpZC5VVUlEKSkKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdXVpZAogICAgICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAg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AloERwBkBGQFhABkBYMCWgVkBlMAKQfaDnB5cGFyc2luZ190ZXN0ekIKICAgIG5hbWVzcGFjZSBjbGFzcyBmb3IgY2xhc3NlcyB1c2VmdWwgaW4gd3JpdGluZyB1bml0IHRlc3RzCiAgICBjAAAAAAAAAAAAAAAAAgAAAEAAAABzOAAAAGUAWgFkAFoCZAFaA2QCZAOEAFoEZARkBYQAWgVkBmQHhABaBmQIZAmEAFoHZApkC4QAWghkDFMAKQ16JnB5cGFyc2luZ190ZXN0LnJlc2V0X3B5cGFyc2luZ19jb250ZXh0YXgDAAAKICAgICAgICBDb250ZXh0IG1hbmFnZXIgdG8gYmUgdXNlZCB3aGVuIHdyaXRpbmcgdW5pdCB0ZXN0cyB0aGF0IG1vZGlmeSBweXBhcnNpbmcgY29uZmlnIHZhbHVlczoKICAgICAgICAgLSBwYWNrcmF0IHBhcnNpbmcKICAgICAgICAgLSBkZWZhdWx0IHdoaXRlc3BhY2UgY2hhcmFjdGVycy4KICAgICAgICAgLSBkZWZhdWx0IGtleXdvcmQgY2hhcmFjdGVycwogICAgICAgICAtIGxpdGVyYWwgc3RyaW5nIGF1dG8tY29udmVyc2lvbiBjbGFzcwogICAgICAgICAtIF9fZGlhZ19fIHNldHRpbmdzCgogICAgICAgIEV4YW1wbGU6CiAgICAgICAgICAgIHdpdGggcmVzZXRfcHlwYXJzaW5nX2NvbnRleHQoKToKICAgICAgICAgICAgICAgICMgdGVzdCB0aGF0IGxpdGVyYWxzIHVzZWQgdG8gY29uc3RydWN0IGEgZ3JhbW1hciBhcmUgYXV0b21hdGljYWxseSBzdXBwcmVzc2VkCiAgICAgICAgICAgICAgICBQYXJzZXJFbGVtZW50LmlubGluZUxpdGVyYWxzVXNpbmcoU3VwcHJlc3MpCgogICAgICAgICAgICAgICAgdGVybSA9IFdvcmQoYWxwaGFzKSB8IFdvcmQobnVtcykKICAgICAgICAgICAgICAgIGdyb3VwID0gR3JvdXAoJygnICsgdGVybVsuLi5dICsgJyknKQoKICAgICAgICAgICAgICAgICMgYXNzZXJ0IHRoYXQgdGhlICcoKScgY2hhcmFjdGVycyBhcmUgbm90IGluY2x1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ggAAAHJgAAAAcn0DAAByaQAAAHJqAAAAcoMAAAByfgMAAHKJAAAAcnIAAAByiQMAAHKKAwAAcocAAABycwAAAHJcAAAAcnwAAABydwAAAHKBAAAAcm4AAAByhAAAAHJTAAAAcnUAAAByVQAAAHJUAAAAch0BAAByrAAAAHKrAwAAcj8BAAByWQAAAHJ5AAAAclYAAAByYwAAAHJLAgAAcnsAAAByXQAAAHJbAAAAcmQAAABydgAAAHIaAgAActIDAAByWAAAAHKMAAAActQDAAByjgAAAHKNAAAAch8EAAByGAQAAHLaAwAAchsEAAByHgQAAHJNBAAAcjkEAAByEwQAAHIOBAAAcgsEAAByPAQAAHIsBAAAcjIEAAByQQQAAHJDBAAAcg8AAABaC3NlbGVjdFRva2VuWglmcm9tVG9rZW7aBWlkZW50Wgpjb2x1bW5OYW1lWg5jb2x1bW5OYW1lTGlzdFoKY29sdW1uU3BlY1oJdGFibGVOYW1lWg10YWJsZU5hbWVMaXN0WglzaW1wbGVTUUxyeQIAAHLIAwAAcrADAABysgMAAHLRAwAAcr4DAAByEgAAAHISAAAAchIAAAByEwAAANoIPG1vZHVsZT5gAAAAc1wCAAAEAgQBBAEEAggBDAEIAQgBCAEIAQgBCAEIAQgBCAEMAQwBCAEMAQwCAgIQAQ4BEgICARABEAESAgICDAEUARACDAEWAgIBEAEQAQIBEAEQARACAgEQARABFAMGCwYBBgIGDwYBBgEGAQYBBgEGARQCCAUGAwoBEAEQARABCgEKAQ4BDAEOAQoBDAEMAQoBDgEKAQoBCgEMAQoBCAMSAQwBBgEGAQQBBAEEAQQDHAMGAQQCCBcEAQgCDgECARQBEAEQAhYCCAoMAQQBCAEIAQgBFgMMDBA/EF0QBRAVEAoQChB/AH8AfwB/AH8ASAoCCA4IDAgKCAMIAwgDCBsMRBB/AH8AfwB/AH8AfwB/AH8AfwB/AH8AKxAhEAgQChAOECcQBgQBBgIQThAXEA0QRRB/ACAQChAOEH8ADRB/ABgQSxBGEAcQGhAfEBQQDxAREBUQFxB5EG0QexBWEH8ABhBPECMQSxAsEDoQIxAfEAcQRBB2EGoQCBAtEBYQRBAdEA8IMAwVDCQICQgeCB0ICAxXCCcMKggGCB4MAQwBDAEMAQwCGAESARQBGgEWAToCCiAKCQoPCg8KMA4EDgUIARYjChgKCApFCAIOJgYBCAEIAhx/AAIEBBwBHAEQARwBHgIcaA5+CgEKAiABFgEoAQoFHAMSAxYBEgMgAwQDEgMQAQIBMAEgCBB/AH8ALhYSEi8STCIDBgEQARABEAEQARABEAEUARQBFAEQARABEAMUfwA2DgIMAQwCEgIcARgBDgIcARgCLAMIFggCCgcIAwoHCAIKAwgCDAEYAQoC
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-36.pyc
21.10 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-36.pyc
15.03 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-36.pyc
35.84 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-36.pyc
65.02 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-36.pyc
237.48 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-36.pyc
7.93 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.pyc
26.42 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.pyc
2.93 KB
lrw-r--r--
2023-11-13 21:24:39
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).