REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 67.31 KB
Close
/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/engine/__pycache__/base.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdnkgBAOMAAAAAAAAAAAAAAAAFAAAAQAAAAHMQAQAAZABkAWwAbQFaAQEAZABkAmwCWgJkAGQCbANaA2QDZARsBG0FWgUBAGQDZAVsBG0GWgYBAGQDZAZsB20IWggBAGQHZAhsCW0KWgoBAGQHZAlsCW0EWgQBAGQHZApsCW0LWgsBAGQHZAtsCW0HWgcBAGQHZAxsDG0NWg0BAGQHZAtsDG0HWg4BAEcAZA1kDoQAZA5lBYMDWg9HAGQPZBCEAGQQZQaDA1oQRwBkEWQShABkEmURgwNaEkcAZBNkFIQAZBRlEoMDWhNHAGQVZBaEAGQWZRKDA1oURwBkF2QYhABkGGUSgwNaFUcAZBlkGoQAZBplBWULahaDBFoXRwBkG2QchABkHGUXgwNaGGQCUwApHekAAAAAKQHaDndpdGhfc3RhdGVtZW50TukBAAAAKQHaC0Nvbm5lY3RhYmxlKQHaEEV4Y2VwdGlvbkNvbnRleHQpAdoPX2Rpc3RpbGxfcGFyYW1z6QIAAAApAdoDZXhjKQHaCmludGVyZmFjZXMpAdoDbG9nKQHaBHV0aWwpAdoGc2NoZW1hYwAAAAAAAAAAAAAAAAYAAABAAAAAcxYCAABlAFoBZABaAmQBWgNlBKAFZAKhAVoGZHRkBGQFhAFaB2QGZAeEAFoIZQlkCGQJhACDAVoKZApkC4QAWgtkDGQNhABaDGQOZA+EAFoNZBBkEYQAWg5kEmQThABaD2UJZBRkFYQAgwFaEGUJZBZkF4QAgwFaEWUJZBhkGYQAgwFaEmQaZBuEAFoTZQlkHGQdhACDAVoUZB5kH4QAWhVlCWQgZCGEAIMBWhZlCWQiZCOEAIMBWhdlCWQkZCWEAIMBWhhkJmQnhABaGWQoZCmEAFoaZHVkKmQrhAFaG2QsZC2EAFocZC5kL4QAWh1kMGQxhABaHmR2ZDJkM4QBWh9kNGQ1hABaIGR3ZDZkN4QBWiFkeGQ4ZDmEAVoiZDpkO4QAWiNkPGQ9hABaJGQ+ZD+EAFolZHlkQGRBhAFaJmR6ZEJkQ4QBWidkRGRFhABaKGRGZEeEAFopZEhkSYQAWipkSmRLhABaK2RMZE2EAFosZE5kT4QAWi1kUGRRhABaLmRSZFOEAFovZFRkVYQAWjBkVmRXhABaMWRYZFmEAFoyZFpkW4QAWjNkXGRdhABaNGReZF+EAFo1ZGBkYYQAWjZkYmRjhABaN2RkZGWEAFo4ZHtkZmRnhAFaOWRoZGmEAFo6ZANaO2QDWjxkamRrhABaPWU+ZGxkbYQAgwFaP2RuZG+EAFpAZHBkcYQAWkFkcmRzhABaQmQCUwApfNoKQ29ubmVjdGlvbmE6BAAAUHJvdmlkZXMgaGlnaC1sZXZlbCBmdW5jdGlvbmFsaXR5IGZvciBhIHdyYXBwZWQgREItQVBJIGNvbm5lY3Rpb24uCgogICAgUHJvdmlkZXMgZXhlY3V0aW9uIHN1cHBvcnQgZm9yIHN0cmluZy1iYXNlZCBTUUwgc3RhdGVtZW50cyBhcyB3ZWxsIGFzCiAgICA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCwgOmNsYXNzOmAuQ29tcGlsZWRgIGFuZCA6Y2xhc3M6YC5EZWZhdWx0R2VuZXJhdG9yYAogICAgb2JqZWN0cy4gUHJvdmlkZXMgYSA6bWV0aDpgYmVnaW5gIG1ldGhvZCB0byByZXR1cm4gOmNsYXNzOmAuVHJhbnNhY3Rpb25gCiAgICBvYmplY3RzLgoKICAgIFRoZSBDb25uZWN0aW9uIG9iamVjdCBpcyAqKm5vdCoqIHRocmVhZC1zYWZlLiAgV2hpbGUgYSBDb25uZWN0aW9uIGNhbiBiZQogICAgc2hhcmVkIGFtb25nIHRocmVhZHMgdXNpbmcgcHJvcGVybHkgc3luY2hyb25pemVkIGFjY2VzcywgaXQgaXMgc3RpbGwKICAgIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgREJBUEkgY29ubmVjdGlvbiBtYXkgbm90IHN1cHBvcnQgc2hhcmVkCiAgICBhY2Nlc3MgYmV0d2VlbiB0aHJlYWRzLiAgQ2hlY2sgdGhlIERCQVBJIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCgogICAgVGhlIENvbm5lY3Rpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBzaW5nbGUgZGJhcGkgY29ubmVjdGlvbiBjaGVja2VkIG91dAogICAgZnJvbSB0aGUgY29ubmVjdGlvbiBwb29sLiBJbiB0aGlzIHN0YXRlLCB0aGUgY29ubmVjdGlvbiBwb29sIGhhcyBubyBhZmZlY3QKICAgIHVwb24gdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyBpdHMgZXhwaXJhdGlvbiBvciB0aW1lb3V0IHN0YXRlLiBGb3IgdGhlCiAgICBjb25uZWN0aW9uIHBvb2wgdG8gcHJvcGVybHkgbWFuYWdlIGNvbm5lY3Rpb25zLCBjb25uZWN0aW9ucyBzaG91bGQgYmUKICAgIHJldHVybmVkIHRvIHRoZSBjb25uZWN0aW9uIHBvb2wgKGkuZS4gYGBjb25uZWN0aW9uLmNsb3NlKClgYCkgd2hlbmV2ZXIgdGhlCiAgICBjb25uZWN0aW9uIGlzIG5vdCBpbiB1c2UuCgogICAgLi4gaW5kZXg6OgogICAgICBzaW5nbGU6IHRocmVhZCBzYWZldHk7IENvbm5lY3Rpb24KCiAgICBORmMIAAAAAAAAAAgAAAAEAAAAQwAAAHPyAAAAfAF8AF8AfAFqAXwAXwF8BHwAXwJ8BGQBawl8AF8DfARyVHwCfABfBHwFfABfBXwEagZ8AF8GZAJ8AF8HfAZ8AF8IfARqCXwAXwl8BGoKfABfCm58fAJkAWsJcmB8Am4GfAGgC6EAfABfBGQBfABfDGQDfABfDXwDfABfB2QCfABfDmQEfABfD3wAagCgEKEAfABfBnwHZAFrCHKsfABqCKARfAFqCKEBfABfCHwHcLx8B2QBawhvvHwBagl8AF8JfAVyyHQSggF8AWoFfABfBXwAaglz3nwAagBqCXLufABqCKATfAB8AGoDoQIBAGQBUwApBXrdQ29uc3RydWN0IGEgbmV3IENvbm5lY3Rpb24uCgogICAgICAgIFRoZSBjb25zdHJ1Y3RvciBoZXJlIGlzIG5vdCBwdWJsaWMgYW5kIGlzIG9ubHkgY2FsbGVkIG9ubHkgYnkgYW4KICAgICAgICA6Y2xhc3M6YC5FbmdpbmVgLiBTZWUgOm1ldGg6YC5FbmdpbmUuY29ubmVjdGAgYW5kCiAgICAgICAgOm1ldGg6YC5FbmdpbmUuY29udGV4dHVhbF9jb25uZWN0YCBtZXRob2RzLgoKICAgICAgICBORnIBAAAAVCkU2gZlbmdpbmXaB2RpYWxlY3TaGF9Db25uZWN0aW9uX19icmFuY2hfZnJvbVoTX0Nvbm5lY3Rpb25fX2JyYW5jaNoXX0Nvbm5lY3Rpb25fX2Nvbm5lY3Rpb27aEl9leGVjdXRpb25fb3B0aW9uc9oFX2VjaG/aGHNob3VsZF9jbG9zZV93aXRoX3Jlc3VsdNoIZGlzcGF0Y2jaC19oYXNfZXZlbnRz2hFzY2hlbWFfZm9yX29iamVjdNoOcmF3X2Nvbm5lY3Rpb27aGF9Db25uZWN0aW9uX190cmFuc2FjdGlvbtoaX0Nvbm5lY3Rpb25fX3NhdmVwb2ludF9zZXHaFF9Db25uZWN0aW9uX19pbnZhbGlk2hpfQ29ubmVjdGlvbl9fY2FuX3JlY29ubmVjdFoQX3Nob3VsZF9sb2dfaW5mb9oFX2pvaW7aDkFzc2VydGlvbkVycm9yWg5lbmdpbmVfY29ubmVjdCkI2gRzZWxmcg4AAADaCmNvbm5lY3Rpb27aEWNsb3NlX3dpdGhfcmVzdWx02gxfYnJhbmNoX2Zyb21yEgAAANoJX2Rpc3BhdGNochYAAACpAHIkAAAA+kkvb3B0L2FsdC9weXRob24zNy9saWI2NC9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9zcWxhbGNoZW15L2VuZ2luZS9iYXNlLnB52ghfX2luaXRfX0UAAABzOAAAAAARBgEIAQYBCgIEAQYBBgEIAQYBBgEIAQoEDAEKAgYBBgEGAQYBBgEMAggEEAEEARADCAEIAg4BehNDb25uZWN0aW9uLl9faW5pdF9fYwEAAAAAAAAAAQAAAAgAAABDAAAAczYAAAB8AGoAchB8AGoAoAGhAFMAfABqAmoDfABqAnwAagR8AHwAagV8AGoGfABqB2QBjQZTAGQCUwApA2HVAgAAUmV0dXJuIGEgbmV3IENvbm5lY3Rpb24gd2hpY2ggcmVmZXJlbmNlcyB0aGlzIENvbm5lY3Rpb24ncwogICAgICAgIGVuZ2luZSBhbmQgY29ubmVjdGlvbjsgYnV0IGRvZXMgbm90IGhhdmUgY2xvc2Vfd2l0aF9yZXN1bHQgZW5hYmxlZCwKICAgICAgICBhbmQgYWxzbyB3aG9zZSBjbG9zZSgpIG1ldGhvZCBkb2VzIG5vdGhpbmcuCgogICAgICAgIFRoZSBDb3JlIHVzZXMgdGhpcyB2ZXJ5IHNwYXJpbmdseSwgb25seSBpbiB0aGUgY2FzZSBvZgogICAgICAgIGN1c3RvbSBTUUwgZGVmYXVsdCBm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YC5Db25uZWN0aW9uYCByZWZlcmVuY2VzIHRoZSBzYW1lCiAgICAgICAgdW5kZXJseWluZyByZXNvdXJjZSwgaXQncyB1c3VhbGx5IGEgZ29vZCBpZGVhIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3BpZXMKICAgICAgICB3aWxsIGJlIGRpc2NhcmRlZCBpbW1lZGlhdGVseSwgd2hpY2ggaXMgaW1wbGljaXQgaWYgdXNlZCBhcyBpbjo6CgogICAgICAgICAgICByZXN1bHQgPSBjb25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zKHN0cmVhbV9yZXN1bHRzPVRydWUpLlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlKHN0bXQpCgogICAgICAgIE5vdGUgdGhhdCBhbnkga2V5L3ZhbHVlIGNhbiBiZSBwYXNzZWQgdG8KICAgICAgICA6bWV0aDpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnNgLCBhbmQgaXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlCiAgICAgICAgYGBfZXhlY3V0aW9uX29wdGlvbnNgYCBkaWN0aW9uYXJ5IG9mIHRoZSA6Y2xhc3M6YC5Db25uZWN0aW9uYC4gICBJdAogICAgICAgIGlzIHN1aXRhYmxlIGZvciB1c2FnZSBieSBlbmQtdXNlciBzY2hlbWVzIHRvIGNvbW11bmljYXRlIHdpdGgKICAgICAgICBldmVudCBsaXN0ZW5lcnMsIGZvciBleGFtcGxlLgoKICAgICAgICBUaGUga2V5d29yZHMgdGhhdCBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYnkgU1FMQWxjaGVteSBpdHNlbGYKICAgICAgICBpbmNsdWRlIGFsbCB0aG9zZSBsaXN0ZWQgdW5kZXIgOm1ldGg6YC5FeGVjdXRhYmxlLmV4ZWN1dGlvbl9vcHRpb25zYCwKICAgICAgICBhcyB3ZWxsIGFzIG90aGVycyB0aGF0IGFyZSBzcGVjaWZpYyB0byA6Y2xhc3M6YC5Db25uZWN0aW9uYC4KCiAgICAgICAgOnBhcmFtIGF1dG9jb21taXQ6IEF2YWlsYWJsZSBvbjogQ29ubmVjdGlvbiwgc3RhdGVtZW50LgogICAgICAgICAgV2hlbiBUcnVlLCBhIENPTU1JVCB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgZXhlY3V0aW9uCiAgICAgICAgICB3aGVuIGV4ZWN1dGVkIGluICdhdXRvY29tbWl0JyBtb2RlLCBpLmUuIHdoZW4gYW4gZXhwbGljaXQKICAgICAgICAgIHRyYW5zYWN0aW9uIGlzIG5vdCBiZWd1biBvbiB0aGUgY29ubmVjdGlvbi4gTm90ZSB0aGF0IERCQVBJCiAgICAgICAgICBjb25uZWN0aW9ucyBieSBkZWZhdWx0IGFyZSBhbHdheXMgaW4gYSB0cmFuc2FjdGlvbiAtIFNRTEFsY2hlbXkgdXNlcwogICAgICAgICAgcnVsZXMgYXBwbGllZCB0byBkaWZmZXJlbnQga2luZHMgb2Ygc3RhdGVtZW50cyB0byBkZXRlcm1pbmUgaWYKICAgICAgICAgIENPTU1JVCB3aWxsIGJlIGludm9rZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSBpdHMgImF1dG9jb21taXQiIGZlYXR1cmUuCiAgICAgICAgICBUeXBpY2FsbHksIGFsbCBJTlNFUlQvVVBEQVRFL0RFTEVURSBzdGF0ZW1lbnRzIGFzIHdlbGwgYXMKICAgICAgICAgIENSRUFURS9EUk9QIHN0YXRlbWVudHMgaGF2ZSBhdXRvY29tbWl0IGJlaGF2aW9yIGVuYWJsZWQ7IFNFTEVDVAogICAgICAgICAgY29uc3RydWN0cyBkbyBub3QuIFVzZSB0aGlzIG9wdGlvbiB3aGVuIGludm9raW5nIGEgU0VMRUNUIG9yIG90aGVyCiAgICAgICAgICBzcGVjaWZpYyBTUUwgY29uc3RydWN0IHdoZXJlIENPTU1JVCBpcyBkZXNpcmVkICh0eXBpY2FsbHkgd2hlbgogICAgICAgICAgY2FsbGluZyBzdG9yZWQgcHJvY2VkdXJlcyBhbmQgc3VjaCksIGFuZCBhbiBleHBsaWNpdAogICAgICAgICAgdHJhbnNhY3Rpb24gaXMgbm90IGluIHByb2dyZXNzLgoKICAgICAgICA6cGFyYW0gY29tcGlsZWRfY2FjaGU6IEF2YWlsYWJsZSBvbjogQ29ubmVjdGlvbi4KICAgICAgICAgIEEgZGljdGlvbmFyeSB3aGVyZSA6Y2xhc3M6YC5Db21waWxlZGAgb2JqZWN0cwogICAgICAgICAgd2lsbCBiZSBjYWNoZWQgd2hlbiB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAgY29tcGlsZXMgYSBjbGF1c2UKICAgICAgICAgIGV4cHJlc3Npb24gaW50byBhIDpjbGFzczpgLkNvbXBpbGVkYCBvYmplY3QuCiAgICAgICAgICBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvCiAgICAgICAgICBtYW5hZ2UgdGhlIHNpemUgb2YgdGhpcyBkaWN0aW9uYXJ5LCB3aGljaCB3aWxsIGhhdmUga2V5cwogICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZGlhbGVjdCwgY2xhdXNlIGVsZW1lbnQsIHRoZSBjb2x1bW4KICAgICAgICAgIG5hbWVzIHdpdGhpbiB0aGUgVkFMVUVTIG9yIFNFVCBjbGF1c2Ugb2YgYW4gSU5TRVJUIG9yIFVQREFURSwKICAgICAgICAgIGFzIHdlbGwgYXMgdGhlICJiYXRjaCIgbW9kZSBmb3IgYW4gSU5TRVJUIG9yIFVQREFURSBzdGF0ZW1lbnQuCiAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoaXMgZGljdGlvbmFyeSBpcyBub3QgZ3VhcmFudGVlZCB0byBzdGF5IHRoZQogICAgICAgICAgc2FtZSBpbiBmdXR1cmUgcmVsZWFzZXMuCgogICAgICAgICAgTm90ZSB0aGF0IHRoZSBPUk0gbWFrZXMgdXNlIG9mIGl0cyBvd24gImNvbXBpbGVkIiBjYWNoZXMgZm9yCiAgICAgICAgICBzb21lIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBmbHVzaCBvcGVyYXRpb25zLiAgVGhlIGNhY2hpbmcKICAgICAgICAgIHVzZWQgYnkgdGhlIE9STSBpbnRlcm5hbGx5IHN1cGVyc2VkZXMgYSBjYWNoZSBkaWN0aW9uYXJ5CiAgICAgICAgICBzcGVjaWZpZWQgaGVyZS4KCiAgICAgICAgOnBhcmFtIGlzb2xhdGlvbl9sZXZlbDogQXZhaWxhYmxlIG9uOiA6Y2xhc3M6YC5Db25uZWN0aW9uYC4KICAgICAgICAgIFNldCB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGZvcgogICAgICAgICAgdGhlIGxpZmVzcGFuIG9mIHRoaXMgOmNsYXNzOmAuQ29ubmVjdGlvbmAgb2JqZWN0ICgqbm90KiB0aGUKICAgICAgICAgIHVuZGVybHlpbmcgREJBUEkgY29ubmVjdGlvbiwgZm9yIHdoaWNoIHRoZSBsZXZlbCBpcyByZXNldAogICAgICAgICAgdG8gaXRzIG9yaWdpbmFsIHNldHRpbmcgdXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzCiAgICAgICAgICA6Y2xhc3M6YC5Db25uZWN0aW9uYCBvYmplY3QpLgoKICAgICAgICAgIFZhbGlkIHZhbHVlcyBpbmNsdWRlCiAgICAgICAgICB0aG9zZSBzdHJpbmcgdmFsdWVzIGFjY2VwdGVkIGJ5IHRoZQogICAgICAgICAgOnBhcmFtcmVmOmAuY3JlYXRlX2VuZ2luZS5pc29sYXRpb25fbGV2ZWxgCiAgICAgICAgICBwYXJhbWV0ZXIgcGFzc2VkIHRvIDpmdW5jOmAuY3JlYXRlX2VuZ2luZWAuICBUaGVzZSBsZXZlbHMgYXJlCiAgICAgICAgICBzZW1pLWRhdGFiYXNlIHNwZWNpZmljOyBzZWUgaW5kaXZpZHVhbCBkaWFsZWN0IGRvY3VtZW50YXRpb24gZm9yCiAgICAgICAgICB2YWxpZCBsZXZlbHMuCgogICAgICAgICAgTm90ZSB0aGF0IHRoaXMgb3B0aW9uIG5lY2Vzc2FyaWx5IGFmZmVjdHMgdGhlIHVuZGVybHlpbmcKICAgICAgICAgIERCQVBJIGNvbm5lY3Rpb24gZm9yIHRoZSBsaWZlc3BhbiBvZiB0aGUgb3JpZ2luYXRpbmcKICAgICAgICAgIDpjbGFzczpgLkNvbm5lY3Rpb25gLCBhbmQgaXMgbm90IHBlci1leGVjdXRpb24uIFRoaXMKICAgICAgICAgIHNldHRpbmcgaXMgbm90IHJlbW92ZWQgdW50aWwgdGhlIHVuZGVybHlpbmcgREJBUEkgY29ubmVjdGlvbgogICAgICAgICAgaXMgcmV0dXJuZWQgdG8gdGhlIGNvbm5lY3Rpb24gcG9vbCwgaS5lLgogICAgICAgICAgdGhlIDptZXRoOmAuQ29ubmVjdGlvbi5jbG9zZWAgbWV0aG9kIGlzIGNhbGxlZC4KCiAgICAgICAgICAuLiB3YXJuaW5nOjogIFRoZSBgYGlzb2xhdGlvbl9sZXZlbGBgIGV4ZWN1dGlvbiBvcHRpb24gc2hvdWxkCiAgICAgICAgICAgICAqKm5vdCoqIGJlIHVzZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgZXN0YWJsaXNoZWQsIHRoYXQKICAgICAgICAgICAgIGlzLCB0aGUgOm1ldGg6YC5Db25uZWN0aW9uLmJlZ2luYCBtZXRob2Qgb3Igc2ltaWxhciBoYXMgYmVlbgogICAgICAgICAgICAgY2FsbGVkLiAgQSBkYXRhYmFzZSBjYW5ub3QgY2hhbmdlIHRoZSBpc29sYXRpb24gbGV2ZWwgb24gYQogICAgICAgICAgICAgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MsIGFuZCBkaWZmZXJlbnQgREJBUElzIGFuZC9vcgogICAgICAgICAgICAgU1FMQWxjaGVteSBkaWFsZWN0cyBtYXkgaW1wbGljaXRseSByb2xsIGJhY2sgb3IgY29tbWl0CiAgICAgICAgICAgICB0aGUgdHJhbnNhY3Rpb24sIG9yIG5vdCBhZmZlY3QgdGhlIGNvbm5lY3Rpb24gYXQgYWxsLgoKICAgICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMC45LjkgQSB3YXJuaW5nIGlzIGVtaXR0ZWQgd2hlbiB0aGUKICAgICAgICAgICAgICAgIGBgaXNvbGF0aW9uX2xldmVsYGAgZXhlY3V0aW9uIG9wdGlvbiBpcyB1c2VkIGFmdGVyIGEKICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgd2l0aCA6bWV0aDpgLkNvbm5lY3Rpb24uYmVnaW5gCiAgICAgICAgICAgICAgICBvciBzaW1pbGFyLgoKICAgICAgICAgIC4uIG5vdGU6OiBUaGUgYGBpc29sYXRpb25fbGV2ZWxgYCBleGVjdXRpb24gb3B0aW9uIGlzIGltcGxpY2l0bHkKICAgICAgICAgICAgIHJlc2V0IGlmIHRoZSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBpcyBpbnZhbGlkYXRlZCwgZS5nLiB2aWEKICAgICAgICAgICAgIHRoZSA6bWV0aDpgLkNvbm5lY3Rpb24uaW52YWxpZGF0ZWAgbWV0aG9kLCBvciBpZiBhCiAgICAgICAgICAgICBkaXNjb25uZWN0aW9uIGVycm9yIG9jY3Vycy4gIFRoZSBuZXcgY29ubmVjdGlvbiBwcm9kdWNlZCBhZnRlcgogICAgICAgICAgICAgdGhlIGludmFsaWRhdGlvbiB3aWxsIG5vdCBoYXZlIHRoZSBpc29sYXRpb24gbGV2ZWwgcmUtYXBwbGllZAogICAgICAgICAgICAgdG8gaXQgYXV0b21hdGljYWxseS4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgICAgICA6cGFyYW1yZWY6YC5jcmVhdGVfZW5naW5lLmlzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgICAgIC0gc2V0IHBlciA6Y2xhc3M6YC5FbmdpbmVgIGlzb2xhdGlvbiBsZXZlbAoKICAgICAgICAgICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5nZXRfaXNvbGF0aW9uX2xldmVsYCAtIHZpZXcgY3VycmVudCBsZXZlbAoKICAgICAgICAgICAgICAgIDpyZWY6YFNRTGl0ZSBUcmFuc2FjdGlvbiBJc29sYXRpb24gPHNxbGl0ZV9pc29sYXRpb25fbGV2ZWw+YAoKICAgICAgICAgICAgICAgIDpyZWY6YFBvc3RncmVTUUwgVHJhbnNhY3Rpb24gSXNvbGF0aW9uIDxwb3N0Z3Jlc3FsX2lzb2xhdGlvbl9sZXZlbD5gCgogICAgICAgICAgICAgICAgOnJlZjpgTXlTUUwgVHJhbnNhY3Rpb24gSXNvbGF0aW9uIDxteXNxbF9pc29sYXRpb25fbGV2ZWw+YAoKICAgICAgICAgICAgICAgIDpyZWY6YFNRTCBTZXJ2ZXIgVHJhbnNhY3Rpb24gSXNvbGF0aW9uIDxtc3NxbF9pc29sYXRpb25fbGV2ZWw+YAoKICAgICAgICAgICAgICAgIDpyZWY6YHNlc3Npb25fdHJhbnNhY3Rpb25faXNvbGF0aW9uYCAtIGZvciB0aGUgT1JNCgogICAgICAgIDpwYXJhbSBub19wYXJhbWV0ZXJzOiBXaGVuIGBgVHJ1ZWBgLCBpZiB0aGUgZmluYWwgcGFyYW1ldGVyCiAgICAgICAgICBsaXN0IG9yIGRpY3Rpb25hcnkgaXMgdG90YWxseSBlbXB0eSwgd2lsbCBpbnZva2UgdGhlCiAgICAgICAgICBzdGF0ZW1lbnQgb24gdGhlIGN1cnNvciBhcyBgYGN1cnNvci5leGVjdXRlKHN0YXRlbWVudClgYCwKICAgICAgICAgIG5vdCBwYXNzaW5nIHRoZSBwYXJhbWV0ZXIgY29sbGVjdGlvbiBhdCBhbGwuCiAgICAgICAgICBTb21lIERCQVBJcyBzdWNoIGFzIHBzeWNvcGcyIGFuZCBteXNxbC1weXRob24gY29uc2lkZXIKICAgICAgICAgIHBlcmNlbnQgc2lnbnMgYXMgc2lnbmlmaWNhbnQgb25seSB3aGVuIHBhcmFtZXRlcnMgYXJlCiAgICAgICAgICBwcmVzZW50OyB0aGlzIG9wdGlvbiBhbGxvd3MgY29kZSB0byBnZW5lcmF0ZSBTUUwKICAgICAgICAgIGNvbnRhaW5pbmcgcGVyY2VudCBzaWducyAoYW5kIHBvc3NpYmx5IG90aGVyIGNoYXJhY3RlcnMpCiAgICAgICAgICB0aGF0IGlzIG5ldXRyYWwgcmVnYXJkaW5nIHdoZXRoZXIgaXQncyBleGVjdXRlZCBieSB0aGUgREJBUEkKICAgICAgICAgIG9yIHBpcGVkIGludG8gYSBzY3JpcHQgdGhhdCdzIGxhdGVyIGludm9rZWQgYnkKICAgICAgICAgIGNvbW1hbmQgbGluZSB0b29scy4KCiAgICAgICAgOnBhcmFtIHN0cmVhbV9yZXN1bHRzOiBBdmFpbGFibGUgb246IENvbm5lY3Rpb24sIHN0YXRlbWVudC4KICAgICAgICAgIEluZGljYXRlIHRvIHRoZSBkaWFsZWN0IHRoYXQgcmVzdWx0cyBzaG91bGQgYmUKICAgICAgICAgICJzdHJlYW1lZCIgYW5kIG5vdCBwcmUtYnVmZmVyZWQsIGlmIHBvc3NpYmxlLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KICAgICAgICAgIG9mIG1hbnkgREJBUElzLiAgVGhlIGZsYWcgaXMgY3VycmVudGx5IHVuZGVyc3Rvb2Qgb25seSBieSB0aGUKICAgICAgICAgIHBzeWNvcGcyLCBteXNxbGRiIGFuZCBweW15c3FsIGRpYWxlY3RzLgoKICAgICAgICA6cGFyYW0gc2NoZW1hX3RyYW5zbGF0ZV9tYXA6IEF2YWlsYWJsZSBvbjogQ29ubmVjdGlvbiwgRW5naW5lLgogICAgICAgICAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgc2NoZW1hIG5hbWVzIHRvIHNjaGVtYSBuYW1lcywgdGhhdCB3aWxsIGJlCiAgICAgICAgICBhcHBsaWVkIHRvIHRoZSA6cGFyYW1yZWY6YC5UYWJsZS5zY2hlbWFgIGVsZW1lbnQgb2YgZWFjaAogICAgICAgICAgOmNsYXNzOmAuVGFibGVgIGVuY291bnRlcmVkIHdoZW4gU1FMIG9yIERETCBleHByZXNzaW9uIGVsZW1lbnRzCiAgICAgICAgICBhcmUgY29tcGlsZWQgaW50byBzdHJpbmdzOyB0aGUgcmVzdWx0aW5nIHNjaGVtYSBuYW1lIHdpbGwgYmUKICAgICAgICAgIGNvbnZlcnRlZCBiYXNlZCBvbiBwcmVzZW5jZSBpbiB0aGUgbWFwIG9mIHRoZSBvcmlnaW5hbCBuYW1lLgoKICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMQoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgc2NoZW1hX3RyYW5zbGF0aW5nYAoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuRW5naW5lLmV4ZWN1dGlvbl9vcHRpb25zYAoKICAgICAgICAgICAgOm1ldGg6YC5FeGVjdXRhYmxlLmV4ZWN1dGlvbl9vcHRpb25zYAoKICAgICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmdldF9leGVjdXRpb25fb3B0aW9uc2AKCgogICAgICAgICkIci8AAAByEgAAANoFdW5pb25yFgAAAHIOAAAAchUAAABaIHNldF9jb25uZWN0aW9uX2V4ZWN1dGlvbl9vcHRpb25zcg8AAAApA3IfAAAA2gNvcHRyLgAAAHIkAAAAciQAAAByJQAAANoRZXhlY3V0aW9uX29wdGlvbnO3AAAAcw4AAAAAfwAbCAEOAQ4BDgEOAXocQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF6siBHZXQgdGhlIG5vbi1TUUwgb3B0aW9ucyB3aGljaCB3aWxsIHRha2UgZWZmZWN0IGR1cmluZyBleGVjdXRpb24uCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMwoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2AKICAgICAgICApAXISAAAAKQFyHwAAAHIkAAAAciQAAAByJQAAANoVZ2V0X2V4ZWN1dGlvbl9vcHRpb25zWAEAAHMCAAAAAAl6IENvbm5lY3Rpb24uZ2V0X2V4ZWN1dGlvbl9vcHRpb25zYwEAAAAAAAAAAQAAAAIAAABDAAAAcxIAAABkAXwAagBrB28QfABqAQwAUwApAnopUmV0dXJuIFRydWUgaWYgdGhpcyBjb25uZWN0aW9uIGlzIGNsb3NlZC5yEQAAACkCciwAAAByHAAAACkBch8AAAByJAAAAHIkAAAAciUAAADaBmNsb3NlZGMBAABzBAAAAAAFCgF6EUNvbm5lY3Rpb24uY2xvc2VkYwEAAAAAAAAAAQAAAAEAAABDAAAAcwgAAAB8AGoAagFTACkBei9SZXR1cm4gVHJ1ZSBpZiB0aGlzIGNvbm5lY3Rpb24gd2FzIGludmFsaWRhdGVkLikCcikAAAByGwAAACkBch8AAAByJAAAAHIkAAAAciUAAADaC2ludmFsaWRhdGVkbAEAAHMCAAAAAAR6FkNvbm5lY3Rpb24uaW52YWxpZGF0ZWRjAQAAAAAAAAACAAAACgAAAEMAAABzXgAAAHkGfABqAFMABAB0AWsKchoBAAEAAQBZAG4CWAB5CHwAoAKhAFMABAB0A2sKclgBAH0BAQB6FnwAoAR8AWQBZAFkAWQBoQUBAFcAZAFkAX0BfgFYAFkAbgJYAGQBUwApAnqDVGhlIHVuZGVybHlpbmcgREItQVBJIGNvbm5lY3Rpb24gbWFuYWdlZCBieSB0aGlzIENvbm5lY3Rpb24uCgogICAgICAgIC4uIHNlZWFsc286OgoKCiAgICAgICAgICAgIDpyZWY6YGRiYXBpX2Nvbm5lY3Rpb25zYAoKICAgICAgICBOKQVyEQAAANoOQXR0cmlidXRlRXJyb3LaFl9yZXZhbGlkYXRlX2Nvbm5lY3Rpb27aDUJhc2VFeGNlcHRpb27aF19oYW5kbGVfZGJhcGlfZXhjZXB0aW9uKQJyHwAAANoBZXIkAAAAciQAAAByJQAAAHIgAAAAcgEAAHMQAAAAAAsCAQYBDgMGAQIBCAEQAXoVQ29ubmVjdGlvbi5jb25uZWN0aW9uYwEAAAAAAAAAAgAAAAoAAABDAAAAc0gAAAB5DnwAagCgAXwAagKhAVMABAB0A2sKckIBAH0BAQB6FnwAoAR8AWQBZAFkAWQBoQUBAFcAZAFkAX0BfgFYAFkAbgJYAGQBUwApAmGQBAAAUmV0dXJuIHRoZSBjdXJyZW50IGlzb2xhdGlvbiBsZXZlbCBhc3NpZ25lZCB0byB0aGlzCiAgICAgICAgOmNsYXNzOmAuQ29ubmVjdGlvbmAuCgogICAgICAgIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgdGhlIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIGFzIGRldGVybWluZWQKICAgICAgICBieSB0aGUgZGlhbGVjdCwgdW5sZXNzIGlmIHRoZQogICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYAogICAgICAgIGZlYXR1cmUgaGFzIGJlZW4gdXNlZCB0byBhbHRlciB0aGUgaXNvbGF0aW9uIGxldmVsIG9uIGEKICAgICAgICBwZXItOmNsYXNzOmAuQ29ubmVjdGlvbmAgYmFzaXMuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIHdpbGwgdHlwaWNhbGx5IHBlcmZvcm0gYSBsaXZlIFNRTCBvcGVyYXRpb24gaW4gb3JkZXIKICAgICAgICB0byBwcm9jdXJlIHRoZSBjdXJyZW50IGlzb2xhdGlvbiBsZXZlbCwgc28gdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZQogICAgICAgIGFjdHVhbCBsZXZlbCBvbiB0aGUgdW5kZXJseWluZyBEQkFQSSBjb25uZWN0aW9uIHJlZ2FyZGxlc3Mgb2YgaG93CiAgICAgICAgdGhpcyBzdGF0ZSB3YXMgc2V0LiAgQ29tcGFyZSB0byB0aGUKICAgICAgICA6YXR0cjpgLkNvbm5lY3Rpb24uZGVmYXVsdF9pc29sYXRpb25fbGV2ZWxgIGFjY2Vzc29yCiAgICAgICAgd2hpY2ggcmV0dXJucyB0aGUgZGlhbGVjdC1sZXZlbCBzZXR0aW5nIHdpdGhvdXQgcGVyZm9ybWluZyBhIFNRTAogICAgICAgIHF1ZXJ5LgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuOQoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDphdHRyOmAuQ29ubmVjdGlvbi5kZWZhdWx0X2lzb2xhdGlvbl9sZXZlbGAgLSB2aWV3IGRlZmF1bHQgbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLmNyZWF0ZV9lbmdpbmUuaXNvbGF0aW9uX2xldmVsYAogICAgICAgICAgICAtIHNldCBwZXIgOmNsYXNzOmAuRW5naW5lYCBpc29sYXRpb24gbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYAogICAgICAgICAgICAtIHNldCBwZXIgOmNsYXNzOmAuQ29ubmVjdGlvbmAgaXNvbGF0aW9uIGxldmVsCgogICAgICAgIE4pBXIPAAAA2hNnZXRfaXNvbGF0aW9uX2xldmVsciAAAAByPgAAAHI/AAAAKQJyHwAAAHJAAAAAciQAAAByJAAAAHIlAAAAckEAAACIAQAAcwgAAAAAHwIBDgEQAXoeQ29ubmVjdGlvbi5nZXRfaXNvbGF0aW9uX2xldmVsYwEAAAAAAAAAAQAAAAEAAABDAAAAcwgAAAB8AGoAagFTACkBYeQDAABUaGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgYXNzaWduZWQgdG8gdGhpcyA6Y2xhc3M6YC5Db25uZWN0aW9uYC4KCiAgICAgICAgVGhpcyBpcyB0aGUgaXNvbGF0aW9uIGxldmVsIHNldHRpbmcgdGhhdCB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAKICAgICAgICBoYXMgd2hlbiBmaXJzdCBwcm9jdXJlZCB2aWEgdGhlIDptZXRoOmAuRW5naW5lLmNvbm5lY3RgIG1ldGhvZC4KICAgICAgICBUaGlzIGxldmVsIHN0YXlzIGluIHBsYWNlIHVudGlsIHRoZQogICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYCBpcyB1c2VkCiAgICAgICAgdG8gY2hhbmdlIHRoZSBzZXR0aW5nIG9uIGEgcGVyLTpjbGFzczpgLkNvbm5lY3Rpb25gIGJhc2lzLgoKICAgICAgICBVbmxpa2UgOm1ldGg6YC5Db25uZWN0aW9uLmdldF9pc29sYXRpb25fbGV2ZWxgLCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQKICAgICAgICBhaGVhZCBvZiB0aW1lIGZyb20gdGhlIGZpcnN0IGNvbm5lY3Rpb24gcHJvY3VyZWQgYnkgdGhlIGRpYWxlY3QsCiAgICAgICAgc28gU1FMIHF1ZXJ5IGlzIG5vdCBpbnZva2VkIHdoZW4gdGhpcyBhY2Nlc3NvciBpcyBjYWxsZWQuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS45CgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmdldF9pc29sYXRpb25fbGV2ZWxgIC0gdmlldyBjdXJyZW50IGxldmVsCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5jcmVhdGVfZW5naW5lLmlzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgLSBzZXQgcGVyIDpjbGFzczpgLkVuZ2luZWAgaXNvbGF0aW9uIGxldmVsCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zLmlzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgLSBzZXQgcGVyIDpjbGFzczpgLkNvbm5lY3Rpb25gIGlzb2xhdGlvbiBsZXZlbAoKICAgICAgICApAnIPAAAA2hdkZWZhdWx0X2lzb2xhdGlvbl9sZXZlbCkBch8AAAByJAAAAHIkAAAAciUAAAByQgAAAKwBAABzAgAAAAAbeiJDb25uZWN0aW9uLmRlZmF1bHRfaXNvbGF0aW9uX2xldmVsYwEAAAAAAAAAAQAAAAMAAABDAAAAc1oAAAB8AGoAchB8AGoAoAGhAFMAfABqAnJMfABqA3JMfABqBGQAawlyMHQFoAZkAaEBggF8AGoHagh8AGQCjQF8AF8JZAN8AF8DfABqCVMAdAWgCmQEoQGCAWQAUwApBU56OENhbid0IHJlY29ubmVjdCB1bnRpbCBpbnZhbGlkIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrKQHaC19jb25uZWN0aW9uRnoZVGhpcyBDb25uZWN0aW9uIGlzIGNsb3NlZCkLchAAAAByPQAAAHIcAAAAchsAAAByGQAAAHIIAAAA2hNJbnZhbGlkUmVxdWVzdEVycm9ycg4AAAByGAAAAHIRAAAA2hNSZXNvdXJjZUNsb3NlZEVycm9yKQFyHwAAAHIkAAAAciQAAAByJQAAAHI9AAAAyQEAAHMUAAAAAAEGAQoBDAEKAQQBBgMQAQYBBgF6IUNvbm5lY3Rpb24uX3JldmFsaWRhdGVfY29ubmVjdGlvbmMBAAAAAAAAAAEAAAAEAAAAQwAAAHMOAAAAdAB8AGoBZAFkAoMDUwApA07aCGlzX3ZhbGlkRikC2gdnZXRhdHRychEAAAApAXIfAAAAciQAAAByJAAAAHIlAAAA2hRfY29ubmVjdGlvbl9pc192YWxpZNcBAABzAgAAAAAGeh9Db25uZWN0aW9uLl9jb25uZWN0aW9uX2lzX3ZhbGlkYwEAAAAAAAAAAQAAAAQAAABDAAAAcx4AAAB8AGoADABvHHwAagEMAG8cdAJ8AGoDZAFkAoMDUwApA05yRgAAAEYpBHI6AAAAcjsAAAByRwAAAHIRAAAAKQFyHwAAAHIkAAAAciQAAAByJQAAANojX3N0aWxsX29wZW5fYW5kX2Nvbm5lY3Rpb25faXNfdmFsaWTfAQAAcwYAAAAAAwgBCAF6LkNvbm5lY3Rpb24uX3N0aWxsX29wZW5fYW5kX2Nvbm5lY3Rpb25faXNfdmFsaWRjAQAAAAAAAAABAAAAAQAAAEMAAABzCAAAAHwAagBqAVMAKQFhjQEAAEluZm8gZGljdGlvbmFyeSBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgREJBUEkgY29ubmVjdGlvbgogICAgICAgIHJlZmVycmVkIHRvIGJ5IHRoaXMgOmNsYXNzOmAuQ29ubmVjdGlvbmAsIGFsbG93aW5nIHVzZXItZGVmaW5lZAogICAgICAgIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uLgoKICAgICAgICBUaGUgZGF0YSBoZXJlIHdpbGwgZm9sbG93IGFsb25nIHdpdGggdGhlIERCQVBJIGNvbm5lY3Rpb24gaW5jbHVkaW5nCiAgICAgICAgYWZ0ZXIgaXQgaXMgcmV0dXJuZWQgdG8gdGhlIGNvbm5lY3Rpb24gcG9vbCBhbmQgdXNlZCBhZ2FpbgogICAgICAgIGluIHN1YnNlcXVlbnQgaW5zdGFuY2VzIG9mIDpjbGFzczpgLkNvbm5lY3Rpb25gLgoKICAgICAgICApAnIgAAAA2gRpbmZvKQFyHwAAAHIkAAAAciQAAAByJQAAAHJKAAAA5wEAAHMCAAAAAAx6D0Nvbm5lY3Rpb24uaW5mb2MBAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAfACgAKEAUwApAWFpAQAAUmV0dXJucyBhIGJyYW5jaGVkIHZlcnNpb24gb2YgdGhpcyA6Y2xhc3M6YC5Db25uZWN0aW9uYC4KCiAgICAgICAgVGhlIDptZXRoOmAuQ29ubmVjdGlvbi5jbG9zZWAgbWV0aG9kIG9uIHRoZSByZXR1cm5lZAogICAgICAgIDpjbGFzczpgLkNvbm5lY3Rpb25gIGNhbiBiZSBjYWxsZWQgYW5kIHRoaXMKICAgICAgICA6Y2xhc3M6YC5Db25uZWN0aW9uYCB3aWxsIHJlbWFpbiBvcGVuLgoKICAgICAgICBUaGlzIG1ldGhvZCBwcm92aWRlcyB1c2FnZSBzeW1tZXRyeSB3aXRoCiAgICAgICAgOm1ldGg6YC5FbmdpbmUuY29ubmVjdGAsIGluY2x1ZGluZyBmb3IgdXNhZ2UKICAgICAgICB3aXRoIGNvbnRleHQgbWFuYWdlcnMuCgogICAgICAgICkBcicAAAApAXIfAAAAciQAAAByJAAAAHIlAAAA2gdjb25uZWN09QEAAHMCAAAAAA16EkNvbm5lY3Rpb24uY29ubmVjdGMBAAAAAAAAAAIAAAACAAAASwAAAHMIAAAAfACgAKEAUwApAU4pAXInAAAAKQJyHwAAANoGa3dhcmdzciQAAAByJAAAAHIlAAAA2hNfY29udGV4dHVhbF9jb25uZWN0BAIAAHMCAAAAAAF6HkNvbm5lY3Rpb24uX2NvbnRleHR1YWxfY29ubmVjdGMCAAAAAAAAAAIAAAADAAAAQwAAAHNCAAAAfABqAHIKZAFTAHwAagFyGnQCoANkAqEBggF8AGoEagVyMHwAagRqBqAHfAGhAQEAfABqBGAGZAN8AGoEXwhkAVMAKQRhrgYAAEludmFsaWRhdGUgdGhlIHVuZGVybHlpbmcgREJBUEkgY29ubmVjdGlvbiBhc3NvY2lhdGVkIHdpdGgKICAgICAgICB0aGlzIDpjbGFzczpgLkNvbm5lY3Rpb25gLgoKICAgICAgICBUaGUgdW5kZXJseWluZyBEQkFQSSBjb25uZWN0aW9uIGlzIGxpdGVyYWxseSBjbG9zZWQgKGlmCiAgICAgICAgcG9zc2libGUpLCBhbmQgaXMgZGlzY2FyZGVkLiAgSXRzIHNvdXJjZSBjb25uZWN0aW9uIHBvb2wgd2lsbAogICAgICAgIHR5cGljYWxseSBsYXppbHkgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gdG8gcmVwbGFjZSBpdC4KCiAgICAgICAgVXBvbiB0aGUgbmV4dCB1c2UgKHdoZXJlICJ1c2UiIHR5cGljYWxseSBtZWFucyB1c2luZyB0aGUKICAgICAgICA6bWV0aDpgLkNvbm5lY3Rpb24uZXhlY3V0ZWAgbWV0aG9kIG9yIHNpbWlsYXIpLAogICAgICAgIHRoaXMgOmNsYXNzOmAuQ29ubmVjdGlvbmAgd2lsbCBhdHRlbXB0IHRvCiAgICAgICAgcHJvY3VyZSBhIG5ldyBEQkFQSSBjb25uZWN0aW9uIHVzaW5nIHRoZSBzZXJ2aWNlcyBvZiB0aGUKICAgICAgICA6Y2xhc3M6YC5Qb29sYCBhcyBhIHNvdXJjZSBvZiBjb25uZWN0aXZpdHkgKGUuZy4gYSAicmVjb25uZWN0aW9uIikuCgogICAgICAgIElmIGEgdHJhbnNhY3Rpb24gd2FzIGluIHByb2dyZXNzIChlLmcuIHRoZQogICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5iZWdpbmAgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCkgd2hlbgogICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5pbnZhbGlkYXRlYCBtZXRob2QgaXMgY2FsbGVkLCBhdCB0aGUgREJBUEkKICAgICAgICBsZXZlbCBhbGwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNhY3Rpb24gaXMgbG9zdCwgYXMKICAgICAgICB0aGUgREJBUEkgY29ubmVjdGlvbiBpcyBjbG9zZWQuICBUaGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAKICAgICAgICB3aWxsIG5vdCBhbGxvdyBhIHJlY29ubmVjdGlvbiB0byBwcm9jZWVkIHVudGlsIHRoZQogICAgICAgIDpjbGFzczpgLlRyYW5zYWN0aW9uYCBvYmplY3QgaXMgZW5kZWQsIGJ5IGNhbGxpbmcgdGhlCiAgICAgICAgOm1ldGg6YC5UcmFuc2FjdGlvbi5yb2xsYmFja2AgbWV0aG9kOyB1bnRpbCB0aGF0IHBvaW50LCBhbnkgYXR0ZW1wdCBhdAogICAgICAgIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSA6Y2xhc3M6YC5Db25uZWN0aW9uYCB3aWxsIHJhaXNlIGFuCiAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5leGMuSW52YWxpZFJlcXVlc3RFcnJvcmAuCiAgICAgICAgVGhpcyBpcyB0byBwcmV2ZW50IGFwcGxpY2F0aW9ucyBmcm9tIGFjY2lkZW50YWxseQogICAgICAgIGNvbnRpbnVpbmcgYW4gb25nb2luZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbnMgZGVzcGl0ZSB0aGUKICAgICAgICBmYWN0IHRoYXQgdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIGxvc3QgZHVlIHRvIGFuCiAgICAgICAgaW52YWxpZGF0aW9uLgoKICAgICAgICBUaGUgOm1ldGg6YC5Db25uZWN0aW9uLmludmFsaWRhdGVgIG1ldGhvZCwganVzdCBsaWtlIGF1dG8t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bmAgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAogICAgICAgIGFuIGVtdWxhdGVkIHRyYW5zYWN0aW9uIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGVuY2xvc2luZwogICAgICAgIHRyYW5zYWN0aW9uLCB0aGF0IGlzOjoKCiAgICAgICAgICAgIHRyYW5zID0gY29ubi5iZWdpbigpICAgIyBvdXRlcm1vc3QgdHJhbnNhY3Rpb24KICAgICAgICAgICAgdHJhbnMyID0gY29ubi5iZWdpbigpICAjICJuZXN0ZWQiCiAgICAgICAgICAgIHRyYW5zMi5jb21taXQoKSAgICAgICAgIyBkb2VzIG5vdGhpbmcKICAgICAgICAgICAgdHJhbnMuY29tbWl0KCkgICAgICAgICAjIGFjdHVhbGx5IGNvbW1pdHMKCiAgICAgICAgQ2FsbHMgdG8gOm1ldGg6YC5UcmFuc2FjdGlvbi5jb21taXRgIG9ubHkgaGF2ZSBhbiBlZmZlY3QKICAgICAgICB3aGVuIGludm9rZWQgdmlhIHRoZSBvdXRlcm1vc3QgOmNsYXNzOmAuVHJhbnNhY3Rpb25gIG9iamVjdCwgdGhvdWdoIHRoZQogICAgICAgIDptZXRoOmAuVHJhbnNhY3Rpb24ucm9sbGJhY2tgIG1ldGhvZCBvZiBhbnkgb2YgdGhlCiAgICAgICAgOmNsYXNzOmAuVHJhbnNhY3Rpb25gIG9iamVjdHMgd2lsbCByb2xsIGJhY2sgdGhlCiAgICAgICAgdHJhbnNhY3Rpb24uCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmJlZ2luX25lc3RlZGAgLSB1c2UgYSBTQVZFUE9JTlQKCiAgICAgICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5iZWdpbl90d29waGFzZWAgLQogICAgICAgICAgICB1c2UgYSB0d28gcGhhc2UgL1hJRCB0cmFuc2FjdGlvbgoKICAgICAgICAgICAgOm1ldGg6YC5FbmdpbmUuYmVnaW5gIC0gY29udGV4dCBtYW5hZ2VyIGF2YWlsYWJsZSBmcm9tCiAgICAgICAgICAgIDpjbGFzczpgLkVuZ2luZWAKCiAgICAg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AHQCawpyJAEAAQABAFkAbgJYAFcAZAFkAnwAXwNkAVMAeQp8AGoBfQFXAG4UBAB0AmsKclIBAAEAAQBZAG4mWAB8AaAEoQABAHwBagV8AGoGawhybmQBfAFfBXwAagdzeHwAYAFkAnwAXwNkAXwAXwZkAVMAKQNhOAMAAENsb3NlIHRoaXMgOmNsYXNzOmAuQ29ubmVjdGlvbmAuCgogICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhIHJlbGVhc2Ugb2YgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UKICAgICAgICByZXNvdXJjZXMsIHRoYXQgaXMsIHRoZSBEQkFQSSBjb25uZWN0aW9uIHJlZmVyZW5jZWQKICAgICAgICBpbnRlcm5hbGx5LiBUaGUgREJBUEkgY29ubmVjdGlvbiBpcyB0eXBpY2FsbHkgcmVzdG9yZWQKICAgICAgICBiYWNrIHRvIHRoZSBjb25uZWN0aW9uLWhvbGRpbmcgOmNsYXNzOmAuUG9vbGAgcmVmZXJlbmNlZAogICAgICAgIGJ5IHRoZSA6Y2xhc3M6YC5FbmdpbmVgIHRoYXQgcHJvZHVjZWQgdGhpcwogICAgICAgIDpjbGFzczpgLkNvbm5lY3Rpb25gLiBBbnkgdHJhbnNhY3Rpb25hbCBzdGF0ZSBwcmVzZW50IG9uCiAgICAgICAgdGhlIERCQVBJIGNvbm5lY3Rpb24gaXMgYWxzbyB1bmNvbmRpdGlvbmFsbHkgcmVsZWFzZWQgdmlhCiAgICAgICAgdGhlIERCQVBJIGNvbm5lY3Rpb24ncyBgYHJvbGxiYWNrKClgYCBtZXRob2QsIHJlZ2FyZGxlc3MKICAgICAgICBvZiBhbnkgOmNsYXNzOmAuVHJhbnNhY3Rpb25gIG9iamVjdCB0aGF0IG1heSBiZQogICAgICAgIG91dHN0YW5kaW5nIHdpdGggcmVnYXJkcyB0byB0aGlzIDpjbGFzczpgLkNvbm5lY3Rpb25gLgoKICAgICAgICBBZnRlciA6bWV0aDpgfi5Db25uZWN0aW9uLmNsb3NlYCBpcyBjYWxsZWQsIHRoZQogICAgICAgIDpjbGFzczpgLkNvbm5lY3Rpb25gIGlzIHBlcm1hbmVudGx5IGluIGEgY2xvc2VkIHN0YXRlLAogICAgICAgIGFuZCB3aWxsIGFsbG93IG5vIGZ1cnRoZXIgb3BlcmF0aW9ucy4KCiAgICAgICAgTkYpCHIQAAAAchEAAAByPAAAAHIcAAAAcjEAAAByYQAAAHIZAAAAchsAAAApAnIfAAAA2gRjb25uciQAAAByJAAAAHIlAAAAcjEAAABlAwAAcyQAAAAAEwYBBAEIAQ4BCgIGAQQBAgEKAQ4BBgMIAQwBBgUGAQQBBgF6EENvbm5lY3Rpb24uY2xvc2VjAgAAAAAAAAAEAAAAAwAAAE8AAABzFgAAAHwAagB8AWYBfAKeAnwDjgGgAaEAUwApAXqBRXhlY3V0ZXMgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93LgoKICAgICAgICBUaGUgdW5kZXJseWluZyByZXN1bHQvY3Vyc29yIGlzIGNsb3NlZCBhZnRlciBleGVjdXRpb24uCiAgICAgICAgKQLaB2V4ZWN1dGXaBnNjYWxhcikEch8AAADaB29iamVjdF/aC211bHRpcGFyYW1z2gZwYXJhbXNyJAAAAHIkAAAAciUAAABydwAAAJIDAABzAgAAAAAGehFDb25uZWN0aW9uLnNjYWxhcmMCAAAAAAAAAAUAAAAIAAAATwAAAHNYAAAAdAB8AXQBagJkARkAgwJyHnwAoAN8AXwCfAOhA1MAeQp8AWoEfQRXAG4eBAB0BWsKckYBAAEAAQB0BqAHfAGhAYIBWQBuDlgAfAR8AHwCfAODA1MAZAJTACkDYY0IAABFeGVjdXRlcyBhIFNRTCBzdGF0ZW1lbnQgY29uc3RydWN0IGFuZCByZXR1cm5zIGEKICAgICAgICA6Y2xhc3M6YC5SZXN1bHRQcm94eWAuCgogICAgICAgIDpwYXJhbSBvYmplY3Q6IFRoZSBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQuICBNYXkgYmUKICAgICAgICAgb25lIG9mOgoKICAgICAgICAgKiBhIHBsYWluIHN0cmluZwogICAgICAgICAqIGFueSA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCBjb25zdHJ1Y3QgdGhhdCBpcyBhbHNvCiAgICAgICAgICAgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YC5FeGVjdXRhYmxlYCwgc3VjaCBhcyBhCiAgICAgICAgICAgOmZ1bmM6YH4uZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdAogICAgICAgICAqIGEgOmNsYXNzOmAuRnVuY3Rpb25FbGVtZW50YCwgc3VjaCBhcyB0aGF0IGdlbmVyYXRlZAogICAgICAgICAgIGJ5IDpkYXRhOmAuZnVuY2AsIHdpbGwgYmUgYXV0b21hdGljYWxseSB3cmFwcGVkIGluCiAgICAgICAgICAgYSBTRUxFQ1Qgc3RhdGVtZW50LCB3aGljaCBpcyB0aGVuIGV4ZWN1dGVkLgogICAgICAgICAqIGEgOmNsYXNzOmAuRERMRWxlbWVudGAgb2JqZWN0CiAgICAgICAgICogYSA6Y2xhc3M6YC5EZWZhdWx0R2VuZXJhdG9yYCBvYmplY3QKICAgICAgICAgKiBhIDpjbGFzczpgLkNvbXBpbGVkYCBvYmplY3QKCiAgICAgICAgOnBhcmFtIFwqbXVsdGlwYXJhbXMvXCoqcGFyYW1zOiByZXByZXNlbnQgYm91bmQgcGFyYW1ldGVyCiAgICAgICAgIHZhbHVlcyB0byBiZSB1c2VkIGluIHRoZSBleGVjdXRpb24uICAgVHlwaWNhbGx5LAogICAgICAgICB0aGUgZm9ybWF0IGlzIGVpdGhlciBhIGNvbGxlY3Rpb24gb2Ygb25lIG9yIG1vcmUKICAgICAgICAgZGljdGlvbmFyaWVzIHBhc3NlZCB0byBcKm11bHRpcGFyYW1zOjoKCiAgICAgICAgICAgICBjb25uLmV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCksCiAgICAgICAgICAgICAgICAgeyJpZCI6MSwgInZhbHVlIjoidjEifSwKICAgICAgICAgICAgICAgICB7ImlkIjoyLCAidmFsdWUiOiJ2MiJ9CiAgICAgICAgICAgICApCgogICAgICAgICAuLi5vciBpbmRpdmlkdWFsIGtleS92YWx1ZXMgaW50ZXJwcmV0ZWQgYnkgXCoqcGFyYW1zOjoKCiAgICAgICAgICAgICBjb25uLmV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0KCksIGlkPTEsIHZhbHVlPSJ2MSIKICAgICAgICAgICAgICkKCiAgICAgICAgIEluIHRoZSBjYXNlIHRoYXQgYSBwbGFpbiBTUUwgc3RyaW5nIGlzIHBhc3NlZCwgYW5kIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgIERCQVBJIGFjY2VwdHMgcG9zaXRpb25hbCBiaW5kIHBhcmFtZXRlcnMsIGEgY29sbGVjdGlvbiBvZiB0dXBsZXMKICAgICAgICAgb3IgaW5kaXZpZHVhbCB2YWx1ZXMgaW4gXCptdWx0aXBhcmFtcyBtYXkgYmUgcGFzc2VkOjoKCiAgICAgICAgICAgICBjb25uLmV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIHRhYmxlIChpZCwgdmFsdWUpIFZBTFVFUyAoPywgPykiLAogICAgICAgICAgICAgICAgICgxLCAidjEiKSwgKDIsICJ2MiIpCiAgICAgICAgICAgICApCgogICAgICAgICAgICAgY29ubi5leGVjdXRlKAogICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyB0YWJsZSAoaWQsIHZhbHVlKSBWQUxVRVMgKD8sID8pIiwKICAgICAgICAgICAgICAgICAxLCAidjEiCiAgICAgICAgICAgICApCgogICAgICAgICBOb3RlIGFib3ZlLCB0aGUgdXNhZ2Ugb2YgYSBxdWVzdGlvbiBtYXJrICI/IiBvciBvdGhlcgogICAgICAgICBzeW1ib2wgaXMgY29udGluZ2VudCB1cG9uIHRoZSAicGFyYW1zdHlsZSIgYWNjZXB0ZWQgYnkgdGhlIERCQVBJCiAgICAgICAgIGluIHVzZSwgd2hpY2ggbWF5IGJlIGFueSBvZiAicW1hcmsiLCAibmFtZWQiLCAicHlmb3JtYXQiLCAiZm9ybWF0IiwKICAgICAgICAgIm51bWVyaWMiLiAgIFNlZSBgcGVwLTI0OSA8aHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMjQ5Lz5gXwogICAgICAgICBmb3IgZGV0YWlscyBvbiBwYXJhbXN0eWxlLgoKICAgICAgICAgVG8gZXhlY3V0ZSBhIHRleHR1YWwgU1FMIHN0YXRlbWVudCB3aGljaCB1c2VzIGJvdW5kIHBhcmFtZXRlcnMgaW4g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ZCB0byB0aGUgb3JpZ2luYWwKICAgICAgICA6Y2xhc3M6YC5FbmdpbmVgIGluIHRoYXQgaXQgc2hhcmVzIHRoZSBzYW1lIGNvbm5lY3Rpb24gcG9vbCBhbmQKICAgICAgICBvdGhlciBzdGF0ZToKCiAgICAgICAgKiBUaGUgOmNsYXNzOmAuUG9vbGAgdXNlZCBieSB0aGUgbmV3IDpjbGFzczpgLkVuZ2luZWAgaXMgdGhlCiAgICAgICAgICBzYW1lIGluc3RhbmNlLiAgVGhlIDptZXRoOmAuRW5naW5lLmRpc3Bvc2VgIG1ldGhvZCB3aWxsIHJlcGxhY2UKICAgICAgICAgIHRoZSBjb25uZWN0aW9uIHBvb2wgaW5zdGFuY2UgZm9yIHRoZSBwYXJlbnQgZW5naW5lIGFzIHdlbGwKICAgICAgICAgIGFzIHRoaXMgb25lLgogICAgICAgICogRXZlbnQgbGlzdGVuZXJzIGFyZSAiY2FzY2FkZWQiIC0gbWVhbmluZywgdGhlIG5ldyA6Y2xhc3M6YC5FbmdpbmVgCiAgICAgICAgICBpbmhlcml0cyB0aGUgZXZlbnRzIG9mIHRoZSBwYXJlbnQsIGFuZCBuZXcgZXZlbnRzIGNhbiBiZSBhc3NvY2lhdGVkCiAgICAgICAgICB3aXRoIHRoZSBuZXcgOmNsYXNzOmAuRW5naW5lYCBpbmRpdmlkdWFsbHkuCiAgICAgICAgKiBUaGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGFuZCBsb2dnaW5nX25hbWUgaXMgY29waWVkIGZyb20gdGhlIHBhcmVudAogICAgICAgICAgOmNsYXNzOmAuRW5naW5lYC4KCiAgICAgICAgVGhlIGludGVudCBvZiB0aGUgOm1ldGg6YC5FbmdpbmUuZXhlY3V0aW9uX29wdGlvbnNgIG1ldGhvZCBpcwogICAgICAgIHRvIGltcGxlbWVudCAic2hhcmRpbmciIHNjaGVtZXMgd2hlcmUgbXVsdGlwbGUgOmNsYXNzOmAuRW5naW5lYAogICAgICAgIG9iamVjdHMgcmVmZXIgdG8gdGhlIHNhbWUgY29ubmVjdGlvbiBwb29sLCBidXQgYXJlIGRpZmZlcmVudGlhdGVkCiAgICAgICAgYnkgb3B0aW9ucyB0aGF0IHdvdWxkIGJlIGNvbnN1bWVkIGJ5IGEgY3VzdG9tIGV2ZW50OjoKCiAgICAgICAgICAgIHByaW1hcnlfZW5naW5lID0gY3JlYXRlX2VuZ2luZSgibXlzcWw6Ly8iKQogICAgICAgICAgICBzaGFyZDEgPSBwcmltYXJ5X2VuZ2luZS5leGVjdXRpb25fb3B0aW9ucyhzaGFyZF9pZD0ic2hhcmQxIikKICAgICAgICAgICAgc2hhcmQyID0gcHJpbWFyeV9lbmdpbmUuZXhlY3V0aW9uX29wdGlvbnMoc2hhcmRfaWQ9InNoYXJkMiIpCgogICAgICAgIEFib3ZlLCB0aGUgYGBzaGFyZDFgYCBlbmdpbmUgc2VydmVzIGFzIGEgZmFjdG9yeSBmb3IKICAgICAgICA6Y2xhc3M6YC5Db25uZWN0aW9uYCBvYmplY3RzIHRoYXQgd2lsbCBjb250YWluIHRoZSBleGVjdXRpb24gb3B0aW9uCiAgICAgICAgYGBzaGFyZF9pZD1zaGFyZDFgYCwgYW5kIGBgc2hhcmQyYGAgd2lsbCBwcm9kdWNlIDpjbGFzczpgLkNvbm5lY3Rpb25gCiAgICAgICAgb2JqZWN0cyB0aGF0IGNvbnRhaW4gdGhlIGV4ZWN1dGlvbiBvcHRpb24gYGBzaGFyZF9pZD1zaGFyZDJgYC4KCiAgICAgICAgQW4gZXZlbnQgaGFuZGxlciBjYW4gY29uc3VtZSB0aGUgYWJvdmUgZXhlY3V0aW9uIG9wdGlvbiB0byBwZXJmb3JtCiAgICAgICAgYSBzY2hlbWEgc3dpdGNoIG9yIG90aGVyIG9wZXJhdGlvbiwgZ2l2ZW4gYSBjb25uZWN0aW9uLiAgQmVsb3cKICAgICAgICB3ZSBlbWl0IGEgTXlTUUwgYGB1c2VgYCBzdGF0ZW1lbnQgdG8gc3dpdGNoIGRhdGFiYXNlcywgYXQgdGhlIHNhbWUKICAgICAgICB0aW1lIGtlZXBpbmcgdHJhY2sgb2Ygd2hpY2ggZGF0YWJhc2Ugd2UndmUgZXN0YWJsaXNoZWQgdXNpbmcgdGhlCiAgICAgICAgOmF0dHI6YC5Db25uZWN0aW9uLmluZm9gIGRpY3Rpb25hcnksIHdoaWNoIGdpdmVzIHVzIGEgcGVyc2lzdGVudAogICAgICAgIHN0b3JhZ2Ugc3BhY2UgdGhhdCBmb2xsb3dzIHRoZSBEQkFQSSBjb25uZWN0aW9uOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgZXZlbnQKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LmVuZ2luZSBpbXBvcnQgRW5naW5lCgogICAgICAgICAgICBzaGFyZHMgPSB7ImRlZmF1bHQiOiAiYmFzZSIsIHNoYXJkXzE6ICJkYjEiLCAic2hhcmRfMiI6ICJkYjIifQoKICAgICAgICAgICAgQGV2ZW50Lmxpc3RlbnNfZm9yKEVuZ2luZSwgImJlZm9yZV9jdXJzb3JfZXhlY3V0ZSIpCiAgICAgICAgICAgIGRlZiBfc3dpdGNoX3NoYXJkKGNvbm4sIGN1cnNvciwgc3RtdCwKICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIGNvbnRleHQsIGV4ZWN1dGVtYW55KToKICAgICAgICAgICAgICAgIHNoYXJkX2lkID0gY29ubi5fZXhlY3V0aW9uX29wdGlvbnMuZ2V0KCdzaGFyZF9pZCcsICJkZWZhdWx0IikKICAgICAgICAgICAgICAgIGN1cnJlbnRfc2hhcmQgPSBjb25uLmluZm8uZ2V0KCJjdXJyZW50X3NoYXJkIiwgTm9uZSkKCiAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3NoYXJkICE9IHNoYXJkX2lkOgogICAgICAgICAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJ1c2UgJXMiICUgc2hhcmRzW3NoYXJkX2lkXSkKICAgICAgICAgICAgICAgICAgICBjb25uLmluZm9bImN1cnJlbnRfc2hhcmQiXSA9IHNoYXJkX2lkCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zYCAtIHVwZGF0ZSBleGVjdXRpb24gb3B0aW9ucwogICAgICAgICAgICBvbiBhIDpjbGFzczpgLkNvbm5lY3Rpb25gIG9iamVjdC4KCiAgICAgICAgICAgIDptZXRoOmAuRW5naW5lLnVwZGF0ZV9leGVjdXRpb25fb3B0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cyBjb25uOgogICAgICAgICAgICAgICAgY29ubi5leGVjdXRlKCJpbnNlcnQgaW50byB0YWJsZSAoeCwgeSwgeikgdmFsdWVzICgxLCAyLCAzKSIpCiAgICAgICAgICAgICAgICBjb25uLmV4ZWN1dGUoIm15X3NwZWNpYWxfcHJvY2VkdXJlKDUpIikKCiAgICAgICAgVXBvbiBzdWNjZXNzZnVsIG9wZXJhdGlvbiwgdGhlIDpjbGFzczpgLlRyYW5zYWN0aW9uYAogICAgICAgIGlzIGNvbW1pdHRlZC4gIElmIGFuIGVycm9yIGlzIHJhaXNlZCwgdGhlIDpjbGFzczpgLlRyYW5zYWN0aW9uYAogICAgICAgIGlzIHJvbGxlZCBiYWNrLgoKICAgICAgICBUaGUgYGBjbG9zZV93aXRoX3Jlc3VsdGBgIGZsYWcgaXMgbm9ybWFsbHkgYGBGYWxzZWBgLCBhbmQgaW5kaWNhdGVzCiAgICAgICAgdGhhdCB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgb3BlcmF0aW9uCiAgICAgICAgaXMgY29tcGxldGUuICAgV2hlbiBzZXQgdG8gYGBUcnVlYGAsIGl0IGluZGljYXRlcyB0aGUKICAgICAgICA6Y2xhc3M6YC5Db25uZWN0aW9uYCBpcyBpbiAic2luZ2xlIHVzZSIgbW9kZSwgd2hlcmUgdGhlCiAgICAgICAgOmNsYXNzOmAuUmVzdWx0UHJveHlgIHJldHVybmVkIGJ5IHRoZSBmaXJzdCBjYWxsIHRvCiAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmV4ZWN1dGVgIHdpbGwgY2xvc2UgdGhlIDpjbGFzczpgLkNvbm5lY3Rpb25gIHdoZW4KICAgICAgICB0aGF0IDpjbGFzczpgLlJlc3VsdFByb3h5YCBoYXMgZXhoYXVzdGVkIGFsbCByZXN1bHQgcm93cy4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLkVuZ2luZS5jb25uZWN0YCAtIHByb2N1cmUgYSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBmcm9tCiAgICAgICAgICAgIGFuIDpjbGFzczpgLkVu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ZgF8AY4BUwApAWFPAgAAUmV0dXJuIGEgbmV3IDpjbGFzczpgLkNvbm5lY3Rpb25gIG9iamVjdC4KCiAgICAgICAgVGhlIDpjbGFzczpgLkNvbm5lY3Rpb25gIG9iamVjdCBpcyBhIGZhY2FkZSB0aGF0IHVzZXMgYSBEQkFQSQogICAgICAgIGNvbm5lY3Rpb24gaW50ZXJuYWxseSBpbiBvcmRlciB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkYXRhYmFzZS4gIFRoaXMKICAgICAgICBjb25uZWN0aW9uIGlzIHByb2N1cmVkIGZyb20gdGhlIGNvbm5lY3Rpb24taG9sZGluZyA6Y2xhc3M6YC5Qb29sYAogICAgICAgIHJlZmVyZW5jZWQgYnkgdGhpcyA6Y2xhc3M6YC5FbmdpbmVgLiBXaGVuIHRoZQogICAgICAgIDptZXRoOmB+LkNvbm5lY3Rpb24uY2xvc2VgIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZyBEQkFQSSBjb25uZWN0aW9uIGlzIHRoZW4gcmV0dXJuZWQgdG8gdGhlCiAgICAgICAgY29ubmVjdGlvbiBwb29sLCB3aGVyZSBpdCBtYXkgYmUgdXNlZCBhZ2FpbiBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0bwogICAgICAgIDptZXRoOmB+LkVuZ2luZS5jb25uZWN0YC4KCiAgICAgICAgKQFyKAAAACkCch8AAAByTAAAAHIkAAAAciQAAAByJQAAAHJLAAAAhggAAHMCAAAAAA56DkVuZ2luZS5jb25uZWN0egMxLjN6+FRoZSA6bWV0aDpgLkVuZ2luZS5jb250ZXh0dWFsX2Nvbm5lY3RgIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVGhpcyBtZXRob2QgaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIHRocmVhZGxvY2FsIGVuZ2luZSBzdHJhdGVneSB3aGljaCBpcyBhbHNvIHRvIGJlIGRlcHJlY2F0ZWQuICAgRm9yIGV4cGxpY2l0IGNvbm5lY3Rpb25zIGZyb20gYW4gOmNsYXNzOmAuRW5naW5lYCwgdXNlIHRoZSA6bWV0aDpgLkVuZ2luZS5jb25uZWN0YCBtZXRob2QuYwIAAAAAAAAAAwAAAAQAAABLAAAAcxQAAAB8AGoAZgBkAXwBaQF8ApcCjgFTACkCYaECAABSZXR1cm4gYSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBvYmplY3Qgd2hpY2ggbWF5IGJlIHBhcnQgb2Ygc29tZQogICAgICAgIG9uZ29pbmcgY29udGV4dC4KCiAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBtZXRob2QgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyA6bWV0aDpgLkVuZ2luZS5jb25uZWN0YC4KICAgICAgICBTdWJjbGFzc2VzIG9mIDpjbGFzczpgLkVuZ2luZWAgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kCiAgICAgICAgdG8gcHJvdmlkZSBjb250ZXh0dWFsIGJlaGF2aW9yLgoKICAgICAgICA6cGFyYW0gY2xvc2Vfd2l0aF9yZXN1bHQ6IFdoZW4gVHJ1ZSwgdGhlIGZpcnN0IDpjbGFzczpgLlJlc3VsdFByb3h5YAogICAgICAgICAgY3JlYXRlZCBieSB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAgd2lsbCBjYWxsIHRoZQogICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmNsb3NlYCBtZXRob2Qgb2YgdGhhdCBjb25uZWN0aW9uIGFzIHNvb24gYXMgYW55CiAgICAgICAgICBwZW5kaW5nIHJlc3VsdCByb3dzIGFyZSBleGhhdXN0ZWQuIFRoaXMgaXMgdXNlZCB0byBzdXBwbHkgdGhlCiAgICAgICAgICAiY29ubmVjdGlvbmxlc3MgZXhlY3V0aW9uIiBiZWhhdmlvciBwcm92aWRlZCBieSB0aGUKICAgICAgICAgIDptZXRoOmAuRW5naW5lLmV4ZWN1dGVgIG1ldGhvZC4KCiAgICAgICAgciEAAAApAXJNAAAAKQNyHwAAAHIhAAAAckwAAAByJAAAAHIkAAAAciUAAADaEmNvbnRleHR1YWxfY29ubmVjdJYIAABzBAAAAAAYCAF6GUVuZ2luZS5jb250ZXh0dWFsX2Nvbm5lY3RjAgAAAAAAAAADAAAABgAAAEsAAABzJAAAAHwAagB8AHwAoAF8AGoCagNk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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-37.pyc
67.31 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default.cpython-37.pyc
35.73 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
interfaces.cpython-37.pyc
40.83 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
reflection.cpython-37.pyc
25.44 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
result.cpython-37.pyc
42.96 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
strategies.cpython-37.pyc
8.48 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
threadlocal.cpython-37.pyc
4.90 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
url.cpython-37.pyc
8.43 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-37.pyc
1.69 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
21.08 KB
lrw-r--r--
2023-11-14 14:32:36
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).