REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 49.32 KB
Close
//opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/engine/__pycache__/interfaces.cpython-311.pyc
Text
Base64
pw0NCgAAAAC7fG9pa70AAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPO6AAAAlwBkAFoAZAFkAmwBbQJaAgEAZAFkA2wDbQRaBAEAZAFkBGwDbQVaBQEAAgBHAGQFhABkBmUGpgMAAKsDAAAAAAAAAABaBwIARwBkB4QAZAhlBqYDAACrAwAAAAAAAAAAWggCAEcAZAmEAGQKZQamAwAAqwMAAAAAAAAAAFoJAgBHAGQLhABkDGUGpgMAAKsDAAAAAAAAAABaCgIARwBkDYQAZA5lBqYDAACrAwAAAAAAAAAAWgtkD1MAKRB6MURlZmluZSBjb3JlIGludGVyZmFjZXMgdXNlZCBieSB0aGUgZW5naW5lIHN5c3RlbS7pAgAAACkB2gR1dGlsKQHaCENvbXBpbGVkKQHaDFR5cGVDb21waWxlcmMAAAAAAAAAAAAAAAAEAAAAAAAAAPPaAQAAlwBlAFoBZABaAmQBWgNkAloEZAOEAFoFZQZkBIQApgAAAKsAAAAAAAAAAABaB2QFhABaCGQGhABaCWQ4ZAiEAVoKAgBlC2oMAAAAAAAAAABkCWQKpgIAAKsCAAAAAAAAAABkOGQLhAGmAAAAqwAAAAAAAAAAAFoNZDhkDIQBWg5kOGQNhAFaD2Q4ZA6EAVoQZDhkD4QBWhFkOGQQhAFaEmQ4ZBGEAVoTZDhkEoQBWhRkOGQThAFaFQkAZDhkFIQBWhZkOGQVhAFaF2Q4ZBaEAVoYZBeEAFoZZBiEAFoaZDhkGYQBWhtkOGQahAFaHGQbhABaHWQchABaHmQdhABaH2QehABaIGQfhABaIWQghABaImQhhABaI2QihABaJGQjhABaJWQkhABaJmQlhABaJ2QmhABaKAkAZDlkKIQBWikJAGQ5ZCmEAVoqZCqEAForZDhkK4QBWixkOGQshAFaLQkAZDhkLYQBWi5kLoQAWi9kL4QAWjBkMIQAWjFkMYQAWjJkMoQAWjNkM4QAWjRkNIQAWjVlBmQ1hACmAAAAqwAAAAAAAAAAAFo2ZQZkNoQApgAAAKsAAAAAAAAAAABaN2UGZDeEAKYAAACrAAAAAAAAAAAAWjhkB1MAKTraB0RpYWxlY3RhxxMAAERlZmluZSB0aGUgYmVoYXZpb3Igb2YgYSBzcGVjaWZpYyBkYXRhYmFzZSBhbmQgREItQVBJIGNvbWJpbmF0aW9uLgoKICAgIEFueSBhc3BlY3Qgb2YgbWV0YWRhdGEgZGVmaW5pdGlvbiwgU1FMIHF1ZXJ5IGdlbmVyYXRpb24sCiAgICBleGVjdXRpb24sIHJlc3VsdC1zZXQgaGFuZGxpbmcsIG9yIGFueXRoaW5nIGVsc2Ugd2hpY2ggdmFyaWVzCiAgICBiZXR3ZWVuIGRhdGFiYXNlcyBpcyBkZWZpbmVkIHVuZGVyIHRoZSBnZW5lcmFsIGNhdGVnb3J5IG9mIHRoZQogICAgRGlhbGVjdC4gIFRoZSBEaWFsZWN0IGFjdHMgYXMgYSBmYWN0b3J5IGZvciBvdGhlcgogICAgZGF0YWJhc2Utc3BlY2lmaWMgb2JqZWN0IGltcGxlbWVudGF0aW9ucyBpbmNsdWRpbmcKICAgIEV4ZWN1dGlvbkNvbnRleHQsIENvbXBpbGVkLCBEZWZhdWx0R2VuZXJhdG9yLCBhbmQgVHlwZUVuZ2luZS4KCiAgICAuLiBub3RlOjogVGhpcmQgcGFydHkgZGlhbGVjdHMgc2hvdWxkIG5vdCBzdWJjbGFzcyA6Y2xhc3M6YC5EaWFsZWN0YAogICAgICAgZGlyZWN0bHkuICBJbnN0ZWFkLCBzdWJjbGFzcyA6Y2xhc3M6YC5kZWZhdWx0LkRlZmF1bHREaWFsZWN0YCBvcgogICAgICAgZGVzY2VuZGFudCBjbGFzcy4KCiAgICBBbGwgZGlhbGVjdHMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuICAgVGhlcmUgYXJlIG1hbnkgb3RoZXIKICAgIGF0dHJpYnV0ZXMgdGhhdCBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGw6CgogICAgYGBuYW1lYGAKICAgICAgaWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhlIGRpYWxlY3QgZnJvbSBhIERCQVBJLW5ldXRyYWwgcG9pbnQgb2YgdmlldwogICAgICAoaS5lLiAnc3FsaXRlJykKCiAgICBgYGRyaXZlcmBgCiAgICAgIGlkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBkaWFsZWN0J3MgREJBUEkKCiAgICBgYHBvc2l0aW9uYWxgYAogICAgICBUcnVlIGlmIHRoZSBwYXJhbXN0eWxlIGZvciB0aGlzIERpYWxlY3QgaXMgcG9zaXRpb25hbC4KCiAgICBgYHBhcmFtc3R5bGVgYAogICAgICB0aGUgcGFyYW1zdHlsZSB0byBiZSB1c2VkIChzb21lIERCLUFQSXMgc3VwcG9ydCBtdWx0aXBsZQogICAgICBwYXJhbXN0eWxlcykuCgogICAgYGBlbmNvZGluZ2BgCiAgICAgIHR5cGUgb2YgZW5jb2RpbmcgdG8gdXNlIGZvciB1bmljb2RlLCB1c3VhbGx5IGRlZmF1bHRzIHRvCiAgICAgICd1dGYtOCcuCgogICAgYGBzdGF0ZW1lbnRfY29tcGlsZXJgYAogICAgICBhIDpjbGFzczpgLkNvbXBpbGVkYCBjbGFzcyB1c2VkIHRvIGNvbXBpbGUgU1FMIHN0YXRlbWVudHMKCiAgICBgYGRkbF9jb21waWxlcmBgCiAgICAgIGEgOmNsYXNzOmAuQ29tcGlsZWRgIGNsYXNzIHVzZWQgdG8gY29tcGlsZSBEREwgc3RhdGVtZW50cwoKICAgIGBgc2VydmVyX3ZlcnNpb25faW5mb2BgCiAgICAgIGEgdHVwbGUgY29udGFpbmluZyBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgREIgYmFja2VuZCBpbiB1c2UuCiAgICAgIFRoaXMgdmFsdWUgaXMgb25seSBhdmFpbGFibGUgZm9yIHN1cHBvcnRpbmcgZGlhbGVjdHMsIGFuZCBpcwogICAgICB0eXBpY2FsbHkgcG9wdWxhdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHRvIHRoZSBkYXRhYmFzZS4KCiAgICBgYGRlZmF1bHRfc2NoZW1hX25hbWVgYAogICAgIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHNjaGVtYS4gIFRoaXMgdmFsdWUgaXMgb25seSBhdmFpbGFibGUgZm9yCiAgICAgc3VwcG9ydGluZyBkaWFsZWN0cywgYW5kIGlzIHR5cGljYWxseSBwb3B1bGF0ZWQgZHVyaW5nIHRoZQogICAgIGluaXRpYWwgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuCgogICAgYGBleGVjdXRpb25fY3R4X2Nsc2BgCiAgICAgIGEgOmNsYXNzOmAuRXhlY3V0aW9uQ29udGV4dGAgY2xhc3MgdXNlZCB0byBoYW5kbGUgc3RhdGVtZW50IGV4ZWN1dGlvbgoKICAgIGBgZXhlY3V0ZV9zZXF1ZW5jZV9mb3JtYXRgYAogICAgICBlaXRoZXIgdGhlICd0dXBsZScgb3IgJ2xpc3QnIHR5cGUsIGRlcGVuZGluZyBvbiB3aGF0IGN1cnNvci5leGVjdXRlKCkKICAgICAgYWNjZXB0cyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAodGhleSB2YXJ5KS4KCiAgICBgYHByZXBhcmVyYGAKICAgICAgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5jb21waWxlci5JZGVudGlmaWVyUHJlcGFyZXJgIGNsYXNzIHVzZWQgdG8KICAgICAgcXVvdGUgaWRlbnRpZmllcnMuCgogICAgYGBzdXBwb3J0c19hbHRlcmBgCiAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBkYXRhYmFzZSBzdXBwb3J0cyBgYEFMVEVSIFRBQkxFYGAgLSB1c2VkIG9ubHkgZm9yCiAgICAgIGdlbmVyYXRpbmcgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzCgogICAgYGBtYXhfaWRlbnRpZmllcl9sZW5ndGhgYAogICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgaWRlbnRpZmllciBuYW1lcy4KCiAgICBgYHN1cHBvcnRzX3NhbmVfcm93Y291bnRgYAogICAgICBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkaWFsZWN0IHByb3Blcmx5IGltcGxlbWVudHMgcm93Y291bnQgZm9yCiAgICAgIGBgVVBEQVRFYGAgYW5kIGBgREVMRVRFYGAgc3RhdGVtZW50cy4KCiAgICBgYHN1cHBvcnRzX3NhbmVfbXVsdGlfcm93Y291bnRgYAogICAgICBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkaWFsZWN0IHByb3Blcmx5IGltcGxlbWVudHMgcm93Y291bnQgZm9yCiAgICAgIGBgVVBEQVRFYGAgYW5kIGBgREVMRVRFYGAgc3RhdGVtZW50cyB3aGVuIGV4ZWN1dGVkIHZpYQogICAgICBleGVjdXRlbWFueS4KCiAgICBgYHByZWV4ZWN1dGVfYXV0b2luY3JlbWVudF9zZXF1ZW5jZXNgYAogICAgICBUcnVlIGlmICdpbXBsaWNpdCcgcHJpbWFyeSBrZXkgZnVuY3Rpb25zIG11c3QgYmUgZXhlY3V0ZWQgc2VwYXJhdGVseQogICAgICBpbiBvcmRlciB0byBnZXQgdGhlaXIgdmFsdWUuICAgVGhpcyBpcyBjdXJyZW50bHkgb3JpZW50ZWQgdG93YXJkcwogICAgICBQb3N0Z3JlU1FMLgoKICAgIGBgaW1wbGljaXRfcmV0dXJuaW5nYGAKICAgICAgdXNlIFJFVFVSTklORyBvciBlcXVpdmFsZW50IGR1cmluZyBJTlNFUlQgZXhlY3V0aW9uIGluIG9yZGVyIHRvIGxvYWQKICAgICAgbmV3bHkgZ2VuZXJhdGVkIHByaW1hcnkga2V5cyBhbmQgb3RoZXIgY29sdW1uIGRlZmF1bHRzIGluIG9uZSBleGVjdXRpb24sCiAgICAgIHdoaWNoIGFyZSB0aGVuIGF2YWlsYWJsZSB2aWEgaW5zZXJ0ZWRfcHJpbWFyeV9rZXkuCiAgICAgIElmIGFuIGluc2VydCBzdGF0ZW1lbnQgaGFzIHJldHVybmluZygpIHNwZWNpZmllZCBleHBsaWNpdGx5LAogICAgICB0aGUgImltcGxpY2l0IiBmdW5jdGlvbmFsaXR5IGlzIG5vdCB1c2VkIGFuZCBpbnNlcnRlZF9wcmltYXJ5X2tleQogICAgICB3aWxsIG5vdCBiZSBhdmFpbGFibGUuCgogICAgYGBjb2xzcGVjc2BgCiAgICAgIEEgZGljdGlvbmFyeSBvZiBUeXBlRW5naW5lIGNsYXNzZXMgZnJvbSBzcWxhbGNoZW15LnR5cGVzIG1hcHBlZAogICAgICB0byBzdWJjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBkaWFsZWN0IGNsYXNzLiAgVGhpcwogICAgICBkaWN0aW9uYXJ5IGlzIGNsYXNzLWxldmVsIG9ubHkgYW5kIGlzIG5vdCBhY2Nlc3NlZCBmcm9tIHRoZQogICAgICBkaWFsZWN0IGluc3RhbmNlIGl0c2VsZi4KCiAgICBgYHN1cHBvcnRzX2RlZmF1bHRfdmFsdWVzYGAKICAgICAgSW5kaWNhdGVzIGlmIHRoZSBjb25zdHJ1Y3QgYGBJTlNFUlQgSU5UTyB0YWJsZW5hbWUgREVGQVVMVAogICAgICBWQUxVRVNgYCBpcyBzdXBwb3J0ZWQKCiAgICBgYHN1cHBvcnRzX3NlcXVlbmNlc2BgCiAgICAgIEluZGljYXRlcyBpZiB0aGUgZGlhbGVjdCBzdXBwb3J0cyBDUkVBVEUgU0VRVUVOQ0Ugb3Igc2ltaWxhci4KCiAgICBgYHNlcXVlbmNlc19vcHRpb25hbGBgCiAgICAgIElmIFRydWUsIGluZGljYXRlcyBpZiB0aGUgIm9wdGlvbmFsIiBmbGFnIG9uIHRoZSBTZXF1ZW5jZSgpIGNvbnN0cnVjdAogICAgICBzaG91bGQgc2lnbmFsIHRvIG5vdCBnZW5lcmF0ZSBhIENSRUFURSBTRVFVRU5DRS4gQXBwbGllcyBvbmx5IHRvCiAgICAgIGRpYWxlY3RzIHRoYXQgc3VwcG9ydCBzZXF1ZW5jZXMuIEN1cnJlbnRseSB1c2VkIG9ubHkgdG8gYWxsb3cgUG9zdGdyZVNRTAogICAgICBTRVJJQUwgdG8gYmUgdXNlZCBvbiBhIGNvbHVtbiB0aGF0IHNwZWNpZmllcyBTZXF1ZW5jZSgpIGZvciB1c2FnZSBvbgogICAgICBvdGhlciBiYWNrZW5kcy4KCiAgICBgYHN1cHBvcnRzX25hdGl2ZV9lbnVtYGAKICAgICAgSW5kaWNhdGVzIGlmIHRoZSBkaWFsZWN0IHN1cHBvcnRzIGEgbmF0aXZlIEVOVU0gY29uc3RydWN0LgogICAgICBUaGlzIHdpbGwgcHJldmVudCB0eXBlcy5FbnVtIGZyb20gZ2VuZXJhdGluZyBhIENIRUNLCiAgICAgIGNvbnN0cmFpbnQgd2hlbiB0aGF0IHR5cGUgaXMgdXNlZC4KCiAgICBgYHN1cHBvcnRzX25hdGl2ZV9ib29sZWFuYGAKICAgICAgSW5kaWNhdGVzIGlmIHRoZSBkaWFsZWN0IHN1cHBvcnRzIGEgbmF0aXZlIGJvb2xlYW4gY29uc3RydWN0LgogICAgICBUaGlzIHdpbGwgcHJldmVudCB0eXBlcy5Cb29sZWFuIGZyb20gZ2VuZXJhdGluZyBhIENIRUNLCiAgICAgIGNvbnN0cmFpbnQgd2hlbiB0aGF0IHR5cGUgaXMgdXNlZC4KCiAgICBgYGRiYXBpX2V4Y2VwdGlvbl90cmFuc2xhdGlvbl9tYXBgYAogICAgICAgQSBkaWN0aW9uYXJ5IG9mIG5hbWVzIHRoYXQgd2lsbCBjb250YWluIGFzIHZhbHVlcyB0aGUgbmFtZXMgb2YKICAgICAgIHBlcC0yNDkgZXhjZXB0aW9ucyAoIkludGVncml0eUVycm9yIiwgIk9wZXJhdGlvbmFsRXJyb3IiLCBldGMpCiAgICAgICBrZXllZCB0byBhbHRlcm5hdGUgY2xhc3MgbmFtZXMsIHRvIHN1cHBvcnQgdGhlIGNhc2Ugd2hlcmUgYQogICAgICAgREJBUEkgaGFzIGV4Y2VwdGlvbiBjbGFzc2VzIHRoYXQgYXJlbid0IG5hbWVkIGFzIHRoZXkgYXJlCiAgICAgICByZWZlcnJlZCB0byAoZS5nLiBJbnRlZ3JpdHlFcnJvciA9IE15RXhjZXB0aW9uKS4gICBJbiB0aGUgdmFzdAogICAgICAgbWFqb3JpdHkgb2YgY2FzZXMgdGhpcyBkaWN0aW9uYXJ5IGlzIGVtcHR5LgoKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC41CgogICAgRmMCAAAAAAAAAAAAAAACAAAAAwAAAPMeAAAAlwB0AQAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAIIBKQFhwgMAAEJ1aWxkIERCLUFQSSBjb21wYXRpYmxlIGNvbm5lY3Rpb24gYXJndW1lbnRzLgoKICAgICAgICBHaXZlbiBhIDpjbGFzczpgLlVSTGAgb2JqZWN0LCByZXR1cm5zIGEgdHVwbGUKICAgICAgICBjb25zaXN0aW5nIG9mIGEgYGAoKmFyZ3MsICoqa3dhcmdzKWBgIHN1aXRhYmxlIHRvIHNlbmQgZGlyZWN0bHkKICAgICAgICB0byB0aGUgZGJhcGkncyBjb25uZWN0IGZ1bmN0aW9uLiAgIFRoZSBhcmd1bWVudHMgYXJlIHNlbnQgdG8gdGhlCiAgICAgICAgOm1ldGg6YC5EaWFsZWN0LmNvbm5lY3RgIG1ldGhvZCB3aGljaCB0aGVuIHJ1bnMgdGhlIERCQVBJLWxldmVsCiAgICAgICAgYGBjb25uZWN0KClgYCBmdW5jdGlvbi4KCiAgICAgICAgVGhlIG1ldGhvZCB0eXBpY2FsbHkgbWFrZXMgdXNlIG9mIHRoZQogICAgICAgIDptZXRoOmAuVVJMLnRyYW5zbGF0ZV9jb25uZWN0X2FyZ3NgCiAgICAgICAgbWV0aG9kIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgZGljdGlvbmFyeSBvZiBvcHRpb25zLgoKICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpczo6CgogICAgICAgICAgICBkZWYgY3JlYXRlX2Nvbm5lY3RfYXJncyhzZWxmLCB1cmwpOgogICAgICAgICAgICAgICAgb3B0cyA9IHVybC50cmFuc2xhdGVfY29ubmVjdF9hcmdzKCkKICAgICAgICAgICAgICAgIG9wdHMudXBkYXRlKHVybC5xdWVyeSkKICAgICAgICAgICAgICAgIHJldHVybiBbW10sIG9wdHNdCgogICAgICAgIDpwYXJhbSB1cmw6IGEgOmNsYXNzOmAuVVJMYCBvYmplY3QKCiAgICAgICAgOnJldHVybjogYSB0dXBsZSBvZiBgYCgqYXJncywgKiprd2FyZ3MpYGAgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgIDptZXRoOmAuRGlhbGVjdC5jb25uZWN0YCBtZXRob2QuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5VUkwudHJhbnNsYXRlX2Nvbm5lY3RfYXJnc2AKCiAgICAgICAgqQHaE05vdEltcGxlbWVudGVkRXJyb3IpAtoEc2VsZtoDdXJscwIAAAAgIPpTL29wdC9jbG91ZGxpbnV4L3ZlbnYvbGliNjQvcHl0aG9uMy4xMS9zaXRlLXBhY2thZ2VzL3NxbGFsY2hlbXkvZW5naW5lL2ludGVyZmFjZXMucHnaE2NyZWF0ZV9jb25uZWN0X2FyZ3N6G0RpYWxlY3QuY3JlYXRlX2Nvbm5lY3RfYXJnc5YAAADzEAAAAIAA9T4ADyLRDiPUDiPQCCPzAAAAAGMCAAAAAAAAAAAAAAACAAAAAwAAAPMeAAAAlwB0AQAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAIIBKQFhNAEAAFRyYW5zZm9ybSBhIGdlbmVyaWMgdHlwZSB0byBhIGRpYWxlY3Qtc3BlY2lmaWMgdHlwZS4KCiAgICAgICAgRGlhbGVjdCBjbGFzc2VzIHdpbGwgdXN1YWxseSB1c2UgdGhlCiAgICAgICAgOmZ1bmM6YF90eXBlcy5hZGFwdF90eXBlYCBmdW5jdGlvbiBpbiB0aGUgdHlwZXMgbW9kdWxlIHRvCiAgICAgICAgYWNjb21wbGlzaCB0aGlzLgoKICAgICAgICBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIGNhY2hlZCAqcGVyIGRpYWxlY3QgY2xhc3MqIHNvIGNhbgogICAgICAgIGNvbnRhaW4gbm8gZGlhbGVjdC1pbnN0YW5jZSBzdGF0ZS4KCiAgICAgICAgcgkAAAApAtoDY2xz2gd0eXBlb2JqcwIAAAAgIHINAAAA2g90eXBlX2Rlc2NyaXB0b3J6F0RpYWxlY3QudHlwZV9kZXNjcmlwdG9ytwAAAPMQAAAAgAD1GgAPItEOI9QOI9AII3IQAAAAYwIAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmGAAQAAQ2FsbGVkIGR1cmluZyBzdHJhdGVnaXplZCBjcmVhdGlvbiBvZiB0aGUgZGlhbGVjdCB3aXRoIGEKICAgICAgICBjb25uZWN0aW9uLgoKICAgICAgICBBbGxvd3MgZGlhbGVjdHMgdG8gY29uZmlndXJlIG9wdGlvbnMgYmFzZWQgb24gc2VydmVyIHZlcnNpb24gaW5mbyBvcgogICAgICAgIG90aGVyIHByb3BlcnRpZXMuCgogICAgICAgIFRoZSBjb25uZWN0aW9uIHBhc3NlZCBoZXJlIGlzIGEgU1FMQWxjaGVteSBDb25uZWN0aW9uIG9iamVjdCwKICAgICAgICB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzLgoKICAgICAgICBUaGUgaW5pdGlhbGl6ZSgpIG1ldGhvZCBvZiB0aGUgYmFzZSBkaWFsZWN0IHNob3VsZCBiZSBjYWxsZWQgdmlhCiAgICAgICAgc3VwZXIoKS4KCiAgICAgICAgTqkAqQJyCwAAANoKY29ubmVjdGlvbnMCAAAAICByDQAAANoKaW5pdGlhbGl6ZXoSRGlhbGVjdC5pbml0aWFsaXplxgAAAHMJAAAAgADwHgAJDYgEchAAAABjBgAAAAAAAAAAAAAAAgAAAAMAAADzHgAAAJcAdAEAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCASkBYYQCAABMb2FkIHRhYmxlIGRlc2NyaXB0aW9uIGZyb20gdGhlIGRhdGFiYXNlLgoKICAgICAgICBHaXZlbiBhIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBhbmQgYQogICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QsIHJlZmxlY3QgaXRzIGNvbHVtbnMgYW5kCiAgICAgICAgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhYmFzZS4KCiAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGJ5CiAgICAgICAgOm1ldGg6YC5EZWZhdWx0RGlhbGVjdC5yZWZsZWN0dGFibGVgLCB3aGljaCBtYWtlcyB1c2Ugb2YKICAgICAgICA6Y2xhc3M6YF9yZWZsZWN0aW9uLkluc3BlY3RvcmAgdG8gcmV0cmlldmUgY29sdW1uIGluZm9ybWF0aW9uLgoKICAgICAgICBEaWFsZWN0cyBzaG91bGQgKipub3QqKiBzZWVrIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZCwgYW5kIHNob3VsZAogICAgICAgIGluc3RlYWQgaW1wbGVtZW50IGluZGl2aWR1YWwgc2NoZW1hIGluc3BlY3Rpb24gb3BlcmF0aW9ucyBzdWNoIGFzCiAgICAgICAgOm1ldGg6YC5EaWFsZWN0LmdldF9jb2x1bW5zYCwgOm1ldGg6YC5EaWFsZWN0LmdldF9wa19jb25zdHJhaW50YCwKICAgICAgICBldGMuCgogICAgICAgIHIJAAAAKQZyCwAAAHIZAAAA2gV0YWJsZdoPaW5jbHVkZV9jb2x1bW5z2g9leGNsdWRlX2NvbHVtbnPaC3Jlc29sdmVfZmtzcwYAAAAgICAgICByDQAAANoMcmVmbGVjdHRhYmxlehREaWFsZWN0LnJlZmxlY3R0YWJsZdcAAADzEAAAAIAA9SgADyLRDiPUDiPQCCNyEAAAAE5jBAAAAAAAAAAAAAAAAgAAAAsAAADzHgAAAJcAdAEAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCASkBYTcDAABSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgY29sdW1ucyBpbiBgdGFibGVfbmFtZWAuCgogICAgICAgIEdpdmVuIGEgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gLCBhIHN0cmluZwogICAgICAgIGB0YWJsZV9uYW1lYCwgYW5kIGFuIG9wdGlvbmFsIHN0cmluZyBgc2NoZW1hYCwgcmV0dXJuIGNvbHVtbgogICAgICAgIGluZm9ybWF0aW9uIGFzIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgd2l0aCB0aGVzZSBrZXlzOgoKICAgICAgICAqIGBgbmFtZWBgIC0KICAgICAgICAgIHRoZSBjb2x1bW4ncyBuYW1lCgogICAgICAgICogYGB0eXBlYGAgLQogICAgICAgICAgW3NxbGFsY2hlbXkudHlwZXMjVHlwZUVuZ2luZV0KCiAgICAgICAgKiBgYG51bGxhYmxlYGAgLQogICAgICAgICAgYm9vbGVhbgoKICAgICAgICAqIGBgZGVmYXVsdGBgIC0KICAgICAgICAgIHRoZSBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlCgogICAgICAgICogYGBhdXRvaW5jcmVtZW50YGAgLQogICAgICAgICAgYm9vbGVhbgoKICAgICAgICAqIGBgc2VxdWVuY2VgYCAtCiAgICAgICAgICBhIGRpY3Rpb25hcnkgb2YgdGhlIGZvcm0KICAgICAgICAgIHsnbmFtZScgOiBzdHIsICdzdGFydCcgOmludCwgJ2luY3JlbWVudCc6IGludCwgJ21pbnZhbHVlJzogaW50LAogICAgICAgICAgJ21heHZhbHVlJzogaW50LCAnbm9taW52YWx1ZSc6IGJvb2wsICdub21heHZhbHVlJzogYm9vbCwKICAgICAgICAgICdjeWNsZSc6IGJvb2wsICdjYWNoZSc6IGludCwgJ29yZGVyJzogYm9vbH0KCiAgICAgICAgQWRkaXRpb25hbCBjb2x1bW4gYXR0cmlidXRlcyBtYXkgYmUgcHJlc2VudC4KCiAgICAgICAgcgkAAACpBXILAAAAchkAAADaCnRhYmxlX25hbWXa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bWFfbmFtZXogRGlhbGVjdC5fZ2V0X2RlZmF1bHRfc2NoZW1hX25hbWX3AQAAclAAAAByEAAAAGMCAAAAAAAAAAAAAAACAAAAAwAAAPMeAAAAlwB0AQAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAIIBKQFhPQMAAFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgYGBjb25uZWN0aW9uLmJlZ2luKClgYCwgZ2l2ZW4gYQogICAgICAgIERCLUFQSSBjb25uZWN0aW9uLgoKICAgICAgICBUaGUgREJBUEkgaGFzIG5vIGRlZGljYXRlZCAiYmVnaW4iIG1ldGhvZCBhbmQgaXQgaXMgZXhwZWN0ZWQKICAgICAgICB0aGF0IHRyYW5zYWN0aW9ucyBhcmUgaW1wbGljaXQuICBUaGlzIGhvb2sgaXMgcHJvdmlkZWQgZm9yIHRob3NlCiAgICAgICAgREJBUElzIHRoYXQgbWlnaHQgbmVlZCBhZGRpdGlvbmFsIGhlbHAgaW4gdGhpcyBhcmVhLgoKICAgICAgICBOb3RlIHRoYXQgOm1ldGg6YC5EaWFsZWN0LmRvX2JlZ2luYCBpcyBub3QgY2FsbGVkIHVubGVzcyBhCiAgICAgICAgOmNsYXNzOmAuVHJhbnNhY3Rpb25gIG9iamVjdCBpcyBpbiB1c2UuICBUaGUKICAgICAgICA6bWV0aDpgLkRpYWxlY3QuZG9fYXV0b2NvbW1pdGAKICAgICAgICBob29rIGlzIHByb3ZpZGVkIGZvciBEQkFQSXMgdGhhdCBuZWVkIHNvbWUgZXh0cmEgY29tbWFuZHMgZW1pdHRlZAogICAgICAgIGFmdGVyIGEgY29tbWl0IGluIG9yZGVyIHRvIGVudGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uLCB3aGVuIHRoZQogICAgICAgIFNRTEFsY2hlbXkgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gCiAgICAgICAgaXMgdXNlZCBpbiBpdHMgZGVmYXVsdCAiYXV0b2NvbW1pdCIKICAgICAgICBtb2RlLgoKICAgICAgICA6cGFyYW0gZGJhcGlfY29ubmVjdGlvbjogYSBEQkFQSSBjb25uZWN0aW9uLCB0eXBpY2FsbHkKICAgICAgICAgcHJveGll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aXNoIGEgY29ubmVjdGlvbiB1c2luZyB0aGlzIGRpYWxlY3QncyBEQkFQSS4KCiAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgaXM6OgoKICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZiwgKmNhcmdzLCAqKmNwYXJhbXMpOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGJhcGkuY29ubmVjdCgqY2FyZ3MsICoqY3BhcmFtcykKCiAgICAgICAgVGhlIGBgKmNhcmdzLCAqKmNwYXJhbXNgYCBwYXJhbWV0ZXJzIGFyZSBnZW5lcmF0ZWQgZGlyZWN0bHkKICAgICAgICBmcm9tIHRoaXMgZGlhbGVjdCdzIDptZXRoOmAuRGlhbGVjdC5jcmVhdGVfY29ubmVjdF9hcmdzYCBtZXRob2QuCgogICAgICAgIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIGZvciBkaWFsZWN0cyB0aGF0IG5lZWQgdG8gcGVyZm9ybSBwcm9ncmFtbWF0aWMKICAgICAgICBwZXItY29ubmVjdGlvbiBzdGVwcyB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgcHJvY3VyZWQgZnJvbSB0aGUKICAgICAgICBEQkFQSS4KCgogICAgICAgIDpwYXJhbSBcKmNhcmdzOiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgcmV0dXJuZWQgZnJvbSB0aGUKICAgICAgICAgOm1ldGg6YC5EaWFsZWN0LmNyZWF0ZV9jb25uZWN0X2FyZ3NgIG1ldGhvZAoKICAgICAgICA6cGFyYW0gXCpcKmNwYXJhbXM6IGtleXdvcmQgcGFyYW1ldGVycyByZXR1cm5lZCBmcm9tIHRoZQogICAgICAgICA6bWV0aDpgLkRpYWxlY3QuY3JlYXRlX2Nvbm5lY3RfYXJnc2AgbWV0aG9kLgoKICAgICAgICA6cmV0dXJuOiBhIERCQVBJIGNvbm5lY3Rpb24sIHR5cGljYWxseSBmcm9tIHRoZSA6cGVwOmAyNDlgIG1vZHVsZQogICAgICAgICBsZXZlbCBgYC5jb25uZWN0KClgYCBmdW5jdGlvbi4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLkRpYWxlY3QuY3JlYXRlX2Nvbm5lY3RfYXJnc2AKCiAgICAgICAgICAgIDptZXRoOmAuRGlhbGVjdC5vbl9jb25uZWN0YAoKICAgICAgICBOchcAAAApA3ILAAAA2gVjYXJnc9oHY3BhcmFtc3MDAAAAICAgcg0AAADaB2Nvbm5lY3R6D0RpYWxlY3QuY29ubmVjdMUCAADzBgAAAIAAgACAAHIQAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmFrBgAAUmV0dXJuIGEgY2FsbGFibGUgd2hpY2ggc2V0cyB1cCBhIG5ld2x5IGNyZWF0ZWQgREJBUEkgY29ubmVjdGlvbi4KCiAgICAgICAgVGhlIGNhbGxhYmxlIHNob3VsZCBhY2NlcHQgYSBzaW5nbGUgYXJndW1lbnQgImNvbm4iIHdoaWNoIGlzIHRoZQogICAgICAgIERCQVBJIGNvbm5lY3Rpb24gaXRzZWxmLiAgVGhlIGlubmVyIGNhbGxhYmxlIGhhcyBubwogICAgICAgIHJldHVybiB2YWx1ZS4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBjbGFzcyBNeURpYWxlY3QoZGVmYXVsdC5EZWZhdWx0RGlhbGVjdCk6CiAgICAgICAgICAgICAgICAjIC4uLgoKICAgICAgICAgICAgICAgIGRlZiBvbl9jb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgICAgICAgIGRlZiBkb19vbl9jb25uZWN0KGNvbm5lY3Rpb24pOgogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmV4ZWN1dGUoIlNFVCBTUEVDSUFMIEZMQUdTIGV0YyIpCgogICAgICAgICAgICAgICAgICAgIHJldHVybiBkb19vbl9jb25uZWN0CgogICAgICAgIFRoaXMgaXMgdXNlZCB0byBzZXQgZGlhbGVjdC13aWRlIHBlci1jb25uZWN0aW9uIG9wdGlvbnMgc3VjaCBhcwogICAgICAgIGlzb2xhdGlvbiBtb2RlcywgVW5pY29kZSBtb2RlcywgZXRjLgoKICAgICAgICBUaGUgImRvX29uX2Nvbm5lY3QiIGNhbGxhYmxlIGlzIGludm9rZWQgYnkgdXNpbmcgdGhlCiAgICAgICAgOm1ldGg6YF9ldmVudHMuUG9vbEV2ZW50cy5maXJzdF9jb25uZWN0YCBhbmQKICAgICAgICA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLmNvbm5lY3RgIGV2ZW50CiAgICAgICAgaG9va3MsIHRoZW4gdW53cmFwcGluZyB0aGUgREJBUEkgY29ubmVjdGlvbiBhbmQgcGFzc2luZyBpdCBpbnRvIHRoZQogICAgICAgIGNhbGxhYmxlLiAgVGhlIHJlYXNvbiBpdCBpcyBpbnZva2VkIGZvciBib3RoIGV2ZW50cyBpcyBzbyB0aGF0IGFueQogICAgICAgIGRpYWxlY3QtbGV2ZWwgaW5pdGlhbGl6YXRpb24gdGhhdCBvY2N1cnMgdXBvbiBmaXJzdCBjb25uZWN0aW9uLCB3aGljaAogICAgICAgIGFsc28gbWFrZXMgdXNlIG9mIHRoZSA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLmZpcnN0X2Nvbm5lY3RgIG1ldGhvZCwKICAgICAgICB3aWxsCiAgICAgICAgcHJvY2VlZCBhZnRlciB0aGlzIGhvb2sgaGFzIGJlZW4gY2FsbGVkLiBUaGlzIGN1cnJlbnRseSBtZWFucyB0aGUKICAgICAgICBob29rIGlzIGluIGZhY3QgY2FsbGVkIHR3aWNlIGZvciB0aGUgdmVyeSBmaXJzdCAgY29ubmVjdGlvbiBpbiB3aGljaCBhCiAgICAgICAgZGlhbGVjdCBjcmVhdGVzOyBhbmQgb25jZSBwZXIgY29ubmVjdGlvbiBhZnRlcndhcmRzLgoKICAgICAgICBJZiBOb25lIGlzIHJldHVybmVkLCBubyBldmVudCBsaXN0ZW5lciBpcyBnZW5lcmF0ZWQuCgogICAgICAgIDpyZXR1cm46IGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIERCQVBJIGNvbm5lY3Rpb24gYXMgYW4KICAgICAgICAgYXJndW1lbnQsIG9yIE5vbmUuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5EaWFsZWN0LmNvbm5lY3RgIC0gYWxsb3dzIHRoZSBEQkFQSSBgYGNvbm5lY3QoKWBgIHNlcXVlbmNlCiAgICAgICAgICAgIGl0c2VsZiB0byBiZSBjb250cm9sbGVkLgoKICAgICAgICBOchcAAAByZAAAAHMBAAAAIHINAAAA2gpvbl9jb25uZWN0ehJEaWFsZWN0Lm9uX2Nvbm5lY3TmAgAAcwoAAACAAPBYAQAQFIh0chAAAABjAgAAAAAAAAAAAAAAAgAAAAMAAADzHgAAAJcAdAEAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCASkBYTIDAABHaXZlbiBhIERCQVBJIGNvbm5lY3Rpb24sIHJldmVydCBpdHMgaXNvbGF0aW9uIHRvIHRoZSBkZWZhdWx0LgoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBhIGRpYWxlY3QtbGV2ZWwgbWV0aG9kIHdoaWNoIGlzIHVzZWQgYXMgcGFydAogICAgICAgIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGFuZAogICAgICAgIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgCiAgICAgICAgaXNvbGF0aW9uIGxldmVsIGZhY2lsaXRpZXM7IHRoZXNlIEFQSXMgc2hvdWxkIGJlIHByZWZlcnJlZCBmb3IKICAgICAgICBtb3N0IHR5cGljYWwgdXNlIGNhc2VzLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmBfZW5naW5lLkNvbm5lY3Rpb24uZ2V0X2lzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgLSB2aWV3IGN1cnJlbnQgbGV2ZWwKCiAgICAgICAgICAgIDphdHRyOmBfZW5naW5lLkNvbm5lY3Rpb24uZGVmYXVsdF9pc29sYXRpb25fbGV2ZWxgCiAgICAgICAgICAgIC0gdmlldyBkZWZhdWx0IGxldmVsCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zLmlzb2xhdGlvbl9sZXZlbGAgLQogICAgICAgICAgICBzZXQgcGVyIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBpc29sYXRpb24gbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgX3NhLmNyZWF0ZV9lbmdpbmUuaXNvbGF0aW9uX2xldmVsYCAtCiAgICAgICAgICAgIHNldCBwZXIgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgaXNvbGF0aW9uIGxldmVsCgogICAgICAgIHIJAAAAqQJyCwAAANoKZGJhcGlfY29ubnMCAAAAICByDQAAANoVcmVzZXRfaXNvbGF0aW9uX2xldmVseh1EaWFsZWN0LnJlc2V0X2lzb2xhdGlvbl9sZXZlbBQDAADzEAAAAIAA9TIADyLRDiPUDiPQCCNyEAAAAGMDAAAAAAAAAAAAAAACAAAAAwAAAPMeAAAAlwB0AQAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAIIBKQFhJgMAAEdpdmVuIGEgREJBUEkgY29ubmVjdGlvbiwgc2V0IGl0cyBpc29sYXRpb24gbGV2ZWwuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGEgZGlhbGVjdC1sZXZlbCBtZXRob2Qgd2hpY2ggaXMgdXNlZCBhcyBwYXJ0CiAgICAgICAgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgYW5kCiAgICAgICAgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAKICAgICAgICBpc29sYXRpb24gbGV2ZWwgZmFjaWxpdGllczsgdGhlc2UgQVBJcyBzaG91bGQgYmUgcHJlZmVycmVkIGZvcgogICAgICAgIG1vc3QgdHlwaWNhbCB1c2UgY2FzZXMuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5nZXRfaXNvbGF0aW9uX2xldmVsYAogICAgICAgICAgICAtIHZpZXcgY3VycmVudCBsZXZlbAoKICAgICAgICAgICAgOmF0dHI6YF9lbmdpbmUuQ29ubmVjdGlvbi5kZWZhdWx0X2lzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgLSB2aWV3IGRlZmF1bHQgbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYCAtCiAgICAgICAgICAgIHNldCBwZXIgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGlzb2xhdGlvbiBsZXZlbAoKICAgICAgICAgICAgOnBhcmFtcmVmOmBfc2EuY3JlYXRlX2VuZ2luZS5pc29sYXRpb25fbGV2ZWxgIC0KICAgICAgICAgICAgc2V0IHBlciA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYCBpc29sYXRpb24gbGV2ZWwKCiAgICAgICAgcgkAAAApA3ILAAAAcpMAAADaBWxldmVscwMAAAAgICByDQAAANoTc2V0X2lzb2xhdGlvbl9sZXZlbHobRGlhbGVjdC5zZXRfaXNvbGF0aW9uX2xldmVsLwMAAHKVAAAAchAAAABjAgAAAAAAAAAAAAAAAgAAAAMAAADzHgAAAJcAdAEAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCASkBYekDAABHaXZlbiBhIERCQVBJIGNvbm5lY3Rpb24sIHJldHVybiBpdHMgaXNvbGF0aW9uIGxldmVsLgoKICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QsCiAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICBEQkFQSSBjb25uZWN0aW9uIG1heSBiZSBwcm9jdXJlZCB1c2luZyB0aGUKICAgICAgICA6YXR0cjpgX2VuZ2luZS5Db25uZWN0aW9uLmNvbm5lY3Rpb25gIGFjY2Vzc29yLgoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBhIGRpYWxlY3QtbGV2ZWwgbWV0aG9kIHdoaWNoIGlzIHVzZWQgYXMgcGFydAogICAgICAgIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGFuZAogICAgICAgIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgIGlzb2xhdGlvbiBsZXZlbCBmYWNpbGl0aWVzOwogICAgICAgIHRoZXNlIEFQSXMgc2hvdWxkIGJlIHByZWZlcnJlZCBmb3IgbW9zdCB0eXBpY2FsIHVzZSBjYXNlcy4KCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5nZXRfaXNvbGF0aW9uX2xldmVsYAogICAgICAgICAgICAtIHZpZXcgY3VycmVudCBsZXZlbAoKICAgICAgICAgICAgOmF0dHI6YF9lbmdpbmUuQ29ubmVjdGlvbi5kZWZhdWx0X2lzb2xhdGlvbl9sZXZlbGAKICAgICAgICAgICAgLSB2aWV3IGRlZmF1bHQgbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYCAtCiAgICAgICAgICAgIHNldCBwZXIgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGlzb2xhdGlvbiBsZXZlbAoKICAgICAgICAgICAgOnBhcmFtcmVmOmBfc2EuY3JlYXRlX2VuZ2luZS5pc29sYXRpb25fbGV2ZWxgIC0KICAgICAgICAgICAgc2V0IHBlciA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYCBpc29sYXRpb24gbGV2ZWwKCgogICAgICAgIHIJAAAAcpIAAABzAgAAACAgcg0AAADaE2dldF9pc29sYXRpb25fbGV2ZWx6G0RpYWxlY3QuZ2V0X2lzb2xhdGlvbl9sZXZlbEoDAAByDwAAAHIQAAAAYwIAAAAAAAAAAAAAAAIAAAADAAAA8x4AAACXAHQBAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAggEpAWGYAgAAR2l2ZW4gYSBEQkFQSSBjb25uZWN0aW9uLCByZXR1cm4gaXRzIGlzb2xhdGlvbiBsZXZlbCwgb3IKICAgICAgICBhIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIGlmIG9uZSBjYW5ub3QgYmUgcmV0cmlldmVkLgoKICAgICAgICBUaGlzIG1ldGhvZCBtYXkgb25seSByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIGFuZAogICAgICAgICoqbXVzdCBub3QgcmFpc2UgYW55IG90aGVyIGV4Y2VwdGlvbioqLCBhcyBpdCBpcyB1c2VkIGltcGxpY2l0bHkgdXBvbgogICAgICAgIGZpcnN0IGNvbm5lY3QuCgogICAgICAgIFRoZSBtZXRob2QgKiptdXN0IHJldHVybiBhIHZhbHVlKiogZm9yIGEgZGlhbGVjdCB0aGF0IHN1cHBvcnRzCiAgICAgICAgaXNvbGF0aW9uIGxldmVsIHNldHRpbmdzLCBhcyB0aGlzIGxldmVsIGlzIHdoYXQgd2lsbCBiZSByZXZlcnRlZAogICAgICAgIHRvd2FyZHMgd2hlbiBhIHBlci1jb25uZWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBjaGFuZ2UgaXMgbWFkZS4KCiAgICAgICAgVGhlIG1ldGhvZCBkZWZhdWx0cyB0byB1c2luZyB0aGUgOm1ldGg6YC5EaWFsZWN0LmdldF9pc29sYXRpb25fbGV2ZWxgCiAgICAgICAgbWV0aG9kIHVubGVzcyBvdmVycmlkZGVuIGJ5IGEgZGlhbGVjdC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4zLjIyCgogICAgICAgIHIJAAAAcpIAAABzAgAAACAgcg0AAADaG2dldF9kZWZhdWx0X2lzb2xhdGlvbl9sZXZlbHojRGlhbGVjdC5nZXRfZGVmYXVsdF9pc29sYXRpb25fbGV2ZWxrAwAAckAAAAByEAAAAGMCAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwB8AFMAKQFhngEAAEdpdmVuIGEgVVJMLCByZXR1cm4gdGhlIDpjbGFzczpgLkRpYWxlY3RgIHRoYXQgd2lsbCBiZSB1c2VkLgoKICAgICAgICBUaGlzIGlzIGEgaG9vayB0aGF0IGFsbG93cyBhbiBleHRlcm5hbCBwbHVnaW4gdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5CiAgICAgICAgYXJvdW5kIGFuIGV4aXN0aW5nIGRpYWxlY3QsIGJ5IGFsbG93aW5nIHRoZSBwbHVnaW4gdG8gYmUgbG9hZGVkCiAgICAgICAgZnJvbSB0aGUgdXJsIGJhc2VkIG9uIGFuIGVudHJ5cG9pbnQsIGFuZCB0aGVuIHRoZSBwbHVnaW4gcmV0dXJucwogICAgICAgIHRoZSBhY3R1YWwgZGlhbGVjdCB0byBiZSB1c2VkLgoKICAgICAgICBCeSBkZWZhdWx0IHRoaXMganVzdCByZXR1cm5zIHRoZSBjbHMuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC4zCgogICAgICAgIHIXAAAAKQJyEgAAAHIMAAAAcwIAAAAgIHINAAAA2g9nZXRfZGlhbGVjdF9jbHN6F0RpYWxlY3QuZ2V0X2RpYWxlY3RfY2xzfwMAAHMJAAAAgADwHAAQE4gKchAAAABjAQAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYUoDAABTZXQgdXAgdGhlIHByb3Zpc2lvbi5weSBtb2R1bGUgZm9yIHRoaXMgZGlhbGVjdC4KCiAgICAgICAgRm9yIGRpYWxlY3RzIHRoYXQgaW5jbHVkZSBhIHByb3Zpc2lvbi5weSBtb2R1bGUgdGhhdCBzZXRzIHVwCiAgICAgICAgcHJvdmlzaW9uaW5nIGZvbGxvd2VycywgdGhpcyBtZXRob2Qgc2hvdWxkIGluaXRpYXRlIHRoYXQgcHJvY2Vzcy4KCiAgICAgICAgQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlOjoKCiAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICBkZWYgbG9hZF9wcm92aXNpb25pbmcoY2xzKToKICAgICAgICAgICAgICAgIF9faW1wb3J0X18oIm15ZGlhbGVjdC5wcm92aXNpb24iKQoKICAgICAgICBUaGUgZGVmYXVsdCBtZXRob2QgYXNzdW1lcyBhIG1vZHVsZSBuYW1lZCBgYHByb3Zpc2lvbi5weWBgIGluc2lkZQogICAgICAgIHRoZSBvd25pbmcgcGFja2FnZSBvZiB0aGUgY3VycmVudCBkaWFsZWN0LCBiYXNlZCBvbiB0aGUgYGBfX21vZHVsZV9fYGAKICAgICAgICBhdHRyaWJ1dGU6OgoKICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgIGRlZiBsb2FkX3Byb3Zpc2lvbmluZyhjbHMpOgogICAgICAgICAgICAgICAgcGFja2FnZSA9ICIuIi5qb2luKGNscy5fX21vZHVsZV9fLnNwbGl0KCIuIilbMDotMV0pCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhwYWNrYWdlICsgIi5wcm92aXNpb24iKQogICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4zLjE0CgogICAgICAgIE5yFwAAACkBchIAAABzAQAAACByDQAAANoRbG9hZF9wcm92aXNpb25pbmd6GURpYWxlY3QubG9hZF9wcm92aXNpb25pbmePAwAAco4AAAByEAAAAGMCAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhgAIAAEEgY29udmVuaWVuY2UgaG9vayBjYWxsZWQgYmVmb3JlIHJldHVybmluZyB0aGUgZmluYWwKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYC4KCiAgICAgICAgSWYgdGhlIGRpYWxlY3QgcmV0dXJuZWQgYSBkaWZmZXJlbnQgY2xhc3MgZnJvbSB0aGUKICAgICAgICA6bWV0aDpgLmdldF9kaWFsZWN0X2Nsc2AKICAgICAgICBtZXRob2QsIHRoZW4gdGhlIGhvb2sgaXMgY2FsbGVkIG9uIGJvdGggY2xhc3NlcywgZmlyc3Qgb24KICAgICAgICB0aGUgZGlhbGVjdCBjbGFzcyByZXR1cm5lZCBieSB0aGUgOm1ldGg6YC5nZXRfZGlhbGVjdF9jbHNgIG1ldGhvZCBhbmQKICAgICAgICB0aGVuIG9uIHRoZSBjbGFzcyBvbiB3aGljaCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQuCgogICAgICAgIFRoZSBob29rIHNob3VsZCBiZSB1c2VkIGJ5IGRpYWxlY3RzIGFuZC9vciB3cmFwcGVycyB0byBhcHBseSBzcGVjaWFsCiAgICAgICAgZXZlbnRzIHRvIHRoZSBlbmdpbmUgb3IgaXRzIGNvbXBvbmVudHMuICAgSW4gcGFydGljdWxhciwgaXQgYWxsb3dzCiAgICAgICAgYSBkaWFsZWN0LXdyYXBwaW5nIGNsYXNzIHRvIGFwcGx5IGRpYWxlY3QtbGV2ZWwgZXZlbnRzLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMwoKICAgICAgICBOchcAAAApAnISAAAA2gZlbmdpbmVzAgAAACAgcg0AAADaDmVuZ2luZV9jcmVhdGVkehZEaWFsZWN0LmVuZ2luZV9jcmVhdGVkrAMAAHMJAAAAgADwJAAJDYgEchAAAACpAU4pAlRGKTnaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1/aB19fZG9jX1/aC19oYXNfZXZlbnRzcg4AAADaC2NsYXNzbWV0aG9kchQAAAByGgAAAHIgAAAAcicAAAByAwAAANoKZGVwcmVjYXRlZHIpAAAAciwAAAByLgAAAHIxAAAAcjMAAAByNgAAAHI5AAAAcjwAAAByPwAAAHJCAAAAckUAAAByRwAAAHJLAAAAck0AAAByTwAAAHJTAAAAclUAAAByVwAAAHJbAAAAcl0AAAByXwAAAHJhAAAAcmUAAAByaAAAAHJqAAAAcmwAAABycAAAAHJyAAAAcncAAAByeQAAAHJ7AAAAcoIAAAByhAAAAHKGAAAAcokAAAByjQAAAHKQAAAAcpQAAABymAAAAHKaAAAAcpwAAAByngAAAHKgAAAAcqMAAAByFwAAAHIQAAAAcg0AAAByBwAAAHIHAAAADwAAAHPZAwAAgACAAIAAgACAAPACQgIFCPAAQgIFCPBIBAATGIBL8AQfBSTwAB8FJPAAHwUk8EIBAAYR8AIMBSTwAAwFJPEDAAYRhFvwAgwFJPAcDwUN8AAPBQ3wAA8FDfAiFAUk8AAUBSTwABQFJPAsIAUk8AAgBSTwACAFJPAAIAUk8EQBAAYVgFSEX9gIDfACAgk28QUFBgb0AAUGBvAMAwUk8AADBSTwAAMFJPENBQYG9AAFBgbwDAMFJPAKDwUk8AAPBSTwAA8FJPAADwUk8CIYBSTwABgFJPAAGAUk8AAYBSTwNAMFJPAAAwUk8AADBSTwAAMFJPAKBgUk8AAGBSTwAAYFJPAABgUk8BAHBSTwAAcFJPAABwUk8AAHBSTwEgYFJPAABgUk8AAGBSTwAAYFJPAQCAUk8AAIBSTwAAgFJPAACAUk8BQSBSTwABIFJPAAEgUk8AASBSTwKgAuMvADFgUk8AAWBSTwABYFJPAAFgUk8DAUBSTwABQFJPAAFAUk8AAUBSTwLBAFJPAAEAUk8AAQBSTwABAFJPAkCAUk8AAIBSTwAAgFJPAUCAUk8AAIBSTwAAgFJPAUCgUk8AAKBSTwAAoFJPAACgUk8BgJBSTwAAkFJPAACQUk8AAJBSTwFgkFJPAACQUk8AAJBSTwFgoFJPAACgUk8AAKBSTwGBYFJPAAFgUk8AAWBSTwMAkFJPAACQUk8AAJBSTwFgkFJPAACQUk8AAJBSTwFgsFJPAACwUk8AALBSTwGggFJPAACAUk8AAIBSTwFAgFJPAACAUk8AAIBSTwFAgFJPAACAUk8AAIBSTwFAcFJPAABwUk8AAHBSTwEggFJPAACAUk8AAIBSTwFAgFJPAACAUk8AAIBSTwFgA6P/ADDQUk8AANBSTwAA0FJPAADQUk8CAAOj/wAw4FJPAADgUk8AAOBSTwAA4FJPAgCAUk8AAIBSTwAAgFJPAUBgUk8AAGBSTwAAYFJPAABgUk8BAGBSTwAAYFJPAABgUk8AAGBSTwEgA2OvADCQUk8AAJBSTwAAkFJPAACQUk8BYGBSTwAAYFJPAABgUk8BAfBQzwAB8FDPAAHwUM8EIBLAUU8AAsBRTwACwFFPBcARkFJPAAGQUk8AAZBSTwNhkFJPAAGQUk8AAZBSTwNh8FJPAAHwUk8AAfBSTwQgESBSTwABIFJPAAEgUk8CgABhHwAg0FE/AADQUT8QMABhGEW/ACDQUT8B4ABhHwAhoFDPAAGgUM8QMABhGEW/ACGgUM8DgABhHwAhEFDfAAEQUN8QMABhGEW/ACEQUN8AARBQ3wABEFDXIQAAAAcgcAAABjAAAAAAAAAAAAAAAAAQAAAAAAAADzKgAAAJcAZQBaAWQAWgJkAVoDZAKEAFoEZAOEAFoFZASEAFoGZAWEAFoHZAZTACkH2hJDcmVhdGVFbmdpbmVQbHVnaW5hjg0AAEEgc2V0IG9mIGhvb2tzIGludGVuZGVkIHRvIGF1Z21lbnQgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbgogICAgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgb2JqZWN0IGJhc2VkIG9uIGVudHJ5cG9pbnQgbmFtZXMgaW4gYSBVUkwuCgogICAgVGhlIHB1cnBvc2Ugb2YgOmNsYXNzOmAuQ3JlYXRlRW5naW5lUGx1Z2luYCBpcyB0byBhbGxvdyB0aGlyZC1wYXJ0eQogICAgc3lzdGVtcyB0byBhcHBseSBlbmdpbmUsIHBvb2wgYW5kIGRpYWxlY3QgbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIHdpdGhvdXQKICAgIHRoZSBuZWVkIGZvciB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHRvIGJlIG1vZGlmaWVkOyBpbnN0ZWFkLCB0aGUgcGx1Z2luCiAgICBuYW1lcyBjYW4gYmUgYWRkZWQgdG8gdGhlIGRhdGFiYXNlIFVSTC4gIFRhcmdldCBhcHBsaWNhdGlvbnMgZm9yCiAgICA6Y2xhc3M6YC5DcmVhdGVFbmdpbmVQbHVnaW5gIGluY2x1ZGU6CgogICAgKiBjb25uZWN0aW9uIGFuZCBTUUwgcGVyZm9ybWFuY2UgdG9vbHMsIGUuZy4gd2hpY2ggdXNlIGV2ZW50cyB0byB0cmFjawogICAgICBudW1iZXIgb2YgY2hlY2tvdXRzIGFuZC9vciB0aW1lIHNwZW50IHdpdGggc3RhdGVtZW50cwoKICAgICogY29ubmVjdGl2aXR5IHBsdWdpbnMgc3VjaCBhcyBwcm94aWVzCgogICAgUGx1Z2lucyBhcmUgcmVnaXN0ZXJlZCB1c2luZyBlbnRyeSBwb2ludHMgaW4gYSBzaW1pbGFyIHdheSBhcyB0aGF0CiAgICBvZiBkaWFsZWN0czo6CgogICAgICAgIGVudHJ5X3BvaW50cz17CiAgICAgICAgICAgICdzcWxhbGNoZW15LnBsdWdpbnMnOiBbCiAgICAgICAgICAgICAgICAnbXlwbHVnaW4gPSBteWFwcC5wbHVnaW5zOk15UGx1Z2luJwogICAgICAgICAgICBdCgogICAgQSBwbHVnaW4gdGhhdCB1c2VzIHRoZSBhYm92ZSBuYW1lcyB3b3VsZCBiZSBpbnZva2VkIGZyb20gYSBkYXRhYmFzZQogICAgVVJMIGFzIGluOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBjcmVhdGVfZW5naW5lCgogICAgICAgIGVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoCiAgICAgICAgICAibXlzcWwrcHlteXNxbDovL3Njb3R0OnRpZ2VyQGxvY2FsaG9zdC90ZXN0P3BsdWdpbj1teXBsdWdpbiIpCgogICAgQWx0ZXJuYXRpdmVseSwgdGhlIDpwYXJhbXJlZjpgLmNyZWF0ZV9lbmdpbmUucGx1Z2lucyIgYXJndW1lbnQgbWF5IGJlCiAgICBwYXNzZWQgYXMgYSBsaXN0IHRvIDpmdW5jOmBfc2EuY3JlYXRlX2VuZ2luZWA6OgoKICAgICAgICBlbmdpbmUgPSBjcmVhdGVfZW5naW5lKAogICAgICAgICAgIm15c3FsK3B5bXlzcWw6Ly9zY290dDp0aWdlckBsb2NhbGhvc3QvdGVzdCIsCiAgICAgICAgICBwbHVnaW5zPVsibXlwbHVnaW4iXSkKCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIuMyAgcGx1Z2luIG5hbWVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZAogICAgICAgdG8gOmZ1bmM6YF9zYS5jcmVhdGVfZW5naW5lYCBhcyBhIGxpc3QKCiAgICBUaGUgYGBwbHVnaW5gYCBhcmd1bWVudCBzdXBwb3J0cyBtdWx0aXBsZSBpbnN0YW5jZXMsIHNvIHRoYXQgYSBVUkwKICAgIG1heSBzcGVjaWZ5IG11bHRpcGxlIHBsdWdpbnM7IHRoZXkgYXJlIGxvYWRlZCBpbiB0aGUgb3JkZXIgc3RhdGVkCiAgICBpbiB0aGUgVVJMOjoKCiAgICAgICAgZW5naW5lID0gY3JlYXRlX2VuZ2luZSgKICAgICAgICAgICJteXNxbCtweW15c3FsOi8vc2NvdHQ6dGlnZXJAbG9jYWxob3N0LyIKICAgICAgICAgICJ0ZXN0P3BsdWdpbj1wbHVnaW5fb25lJnBsdWdpbj1wbHVnaW5fdHdwJnBsdWdpbj1wbHVnaW5fdGhyZWUiKQoKICAgIEEgcGx1Z2luIGNhbiByZWNlaXZlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGZyb20gdGhlIFVSTCBzdHJpbmcgYXMKICAgIHdlbGwgYXMgZnJvbSB0aGUga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIDpmdW5jOmBfc2EuY3JlYXRlX2VuZ2luZWAuCiAgICBUaGUgOmNsYXNzOmAuVVJMYCBvYmplY3QgYW5kIHRoZSBrZXl3b3JkIGRpY3Rpb25hcnkgYXJlIHBhc3NlZCB0byB0aGUKICAgIGNvbnN0cnVjdG9yIHNvIHRoYXQgdGhlc2UgYXJndW1lbnRzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgdXJsJ3MKICAgIDphdHRyOmAuVVJMLnF1ZXJ5YCBjb2xsZWN0aW9uIGFzIHdlbGwgYXMgZnJvbSB0aGUgZGljdGlvbmFyeTo6CgogICAgICAgIGNsYXNzIE15UGx1Z2luKENyZWF0ZUVuZ2luZVBsdWdpbik6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGt3YXJncyk6CiAgICAgICAgICAgICAgICBzZWxmLm15X2FyZ3VtZW50X29uZSA9IHVybC5xdWVyeS5wb3AoJ215X2FyZ3VtZW50X29uZScpCiAgICAgICAgICAgICAgICBzZWxmLm15X2FyZ3VtZW50X3R3byA9IHVybC5xdWVyeS5wb3AoJ215X2FyZ3VtZW50X3R3bycpCiAgICAgICAgICAgICAgICBzZWxmLm15X2FyZ3VtZW50X3RocmVlID0ga3dhcmdzLnBvcCgnbXlfYXJndW1lbnRfdGhyZWUnLCBOb25lKQoKICAgIEFyZ3VtZW50cyBsaWtlIHRob3NlIGlsbHVzdHJhdGVkIGFib3ZlIHdvdWxkIGJlIGNvbnN1bWVkIGZyb20gdGhlCiAgICBmb2xsb3dpbmc6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNyZWF0ZV9lbmdpbmUKCiAgICAgICAgZW5naW5lID0gY3JlYXRlX2VuZ2luZSgKICAgICAgICAgICJteXNxbCtweW15c3FsOi8vc2NvdHQ6dGlnZXJAbG9jYWxob3N0LyIKICAgICAgICAgICJ0ZXN0P3BsdWdpbj1teXBsdWdpbiZteV9hcmd1bWVudF9vbmU9Zm9vJm15X2FyZ3VtZW50X3R3bz1iYXIiLAogICAgICAgICAgbXlfYXJndW1lbnRfdGhyZWU9J2JhdCcpCgogICAgVGhlIFVSTCBhbmQgZGljdGlvbmFyeSBhcmUgdXNlZCBmb3Igc3Vic2VxdWVudCBzZXR1cCBvZiB0aGUgZW5naW5lCiAgICBhcyB0aGV5IGFyZSwgc28gdGhlIHBsdWdpbiBjYW4gbW9kaWZ5IHRoZWlyIGFyZ3VtZW50cyBpbi1wbGFjZS4KICAgIEFyZ3VtZW50cyB0aGF0IGFyZSBvbmx5IHVuZGVyc3Rvb2QgYnkgdGhlIHBsdWdpbiBzaG91bGQgYmUgcG9wcGVkCiAgICBvciBvdGhlcndpc2UgcmVtb3ZlZCBzbyB0aGF0IHRoZXkgYXJlbid0IGludGVycHJldGVkIGFzIGVycm9uZW91cwogICAgYXJndW1lbnRzIGFmdGVyd2FyZHMuCgogICAgV2hlbiB0aGUgZW5naW5lIGNyZWF0aW9uIHByb2Nlc3MgY29tcGxldGVzIGFuZCBwcm9kdWNlcyB0aGUKICAgIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgIG9iamVjdCwgaXQgaXMgYWdhaW4gcGFzc2VkIHRvIHRoZSBwbHVnaW4gdmlhIHRoZQogICAgOm1ldGg6YC5DcmVhdGVFbmdpbmVQbHVnaW4uZW5naW5lX2NyZWF0ZWRgIGhvb2suICBJbiB0aGlzIGhvb2ssIGFkZGl0aW9uYWwKICAgIGNoYW5nZXMgY2FuIGJlIG1hZGUgdG8gdGhlIGVuZ2luZSwgbW9zdCB0eXBpY2FsbHkgaW52b2x2aW5nIHNldHVwIG9mCiAgICBldmVudHMgKGUuZy4gdGhvc2UgZGVmaW5lZCBpbiA6cmVmOmBjb3JlX2V2ZW50X3RvcGxldmVsYCkuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgYwMAAAAAAAAAAAAAAAIAAAADAAAA8xQAAACXAHwBfABfAAAAAAAAAAAAZAFTACkCYWcDAABDb25zdHJ1Y3QgYSBuZXcgOmNsYXNzOmAuQ3JlYXRlRW5naW5lUGx1Z2luYC4KCiAgICAgICAgVGhlIHBsdWdpbiBvYmplY3QgaXMgaW5zdGFudGlhdGVkIGluZGl2aWR1YWxseSBmb3IgZWFjaCBjYWxsCiAgICAgICAgdG8gOmZ1bmM6YF9zYS5jcmVhdGVfZW5naW5lYC4gIEEgc2luZ2xlIDpjbGFzczpgX2VuZ2luZS4KICAgICAgICBFbmdpbmVgIHdpbGwgYmUKICAgICAgICBwYXNzZWQgdG8gdGhlIDptZXRoOmAuQ3JlYXRlRW5naW5lUGx1Z2luLmVuZ2luZV9jcmVhdGVkYCBtZXRob2QKICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgVVJMLgoKICAgICAgICA6cGFyYW0gdXJsOiB0aGUgOmNsYXNzOmAuVVJMYCBvYmplY3QuICBUaGUgcGx1Z2luIHNob3VsZCBpbnNwZWN0CiAgICAgICAgIHdoYXQgaXQgbmVlZHMgaGVyZSBhcyB3ZWxsIGFzIHJlbW92ZSBpdHMgY3VzdG9tIGFyZ3VtZW50cyBmcm9tIHRoZQogICAgICAgICA6YXR0cjpgLlVSTC5xdWVyeWAgY29sbGVjdGlvbi4gIFRoZSBVUkwgY2FuIGJlIG1vZGlmaWVkIGluLXBsYWNlCiAgICAgICAgIGluIGFueSBvdGhlciB3YXkgYXMgd2VsbC4KICAgICAgICA6cGFyYW0ga3dhcmdzOiBUaGUga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIDpmdW5jOmAuY3JlYXRlX2VuZ2luZWAuCiAgICAgICAgIFRoZSBwbHVnaW4gY2FuIHJlYWQgYW5kIG1vZGlmeSB0aGlzIGRpY3Rpb25hcnkgaW4tcGxhY2UsIHRvIGFmZmVjdAogICAgICAgICB0aGUgdWx0aW1hdGUgYXJndW1lbnRzIHVzZWQgdG8gY3JlYXRlIHRoZSBlbmdpbmUuICBJdCBzaG91bGQKICAgICAgICAgcmVtb3ZlIGl0cyBjdXN0b20gYXJndW1lbnRzIGZyb20gdGhlIGRpY3Rpb25hcnkgYXMgd2VsbC4KCiAgICAgICAgTikBcgwAAAApA3ILAAAAcgwAAADaBmt3YXJnc3MDAAAAICAgcg0AAADaCF9faW5pdF9fehtDcmVhdGVFbmdpbmVQbHVnaW4uX19pbml0X18YBAAAcw8AAACAAPAmABQXiASMCIgIiAhyEAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ6H3BhcnNlIGFuZCBtb2RpZnkgZGlhbGVjdCBrd2FyZ3NOchcAAAApA3ILAAAA2gtkaWFsZWN0X2Nsc9oMZGlhbGVjdF9hcmdzcwMAAAAgICByDQAAANoVaGFuZGxlX2RpYWxlY3Rfa3dhcmdzeihDcmVhdGVFbmdpbmVQbHVnaW4uaGFuZGxlX2RpYWxlY3Rfa3dhcmdzLQQAAHKOAAAAchAAAABjAwAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCehxwYXJzZSBhbmQgbW9kaWZ5IHBvb2wga3dhcmdzTnIXAAAAKQNyCwAAANoIcG9vbF9jbHPaCXBvb2xfYXJnc3MDAAAAICAgcg0AAADaEmhhbmRsZV9wb29sX2t3YXJnc3olQ3JlYXRlRW5naW5lUGx1Z2luLmhhbmRsZV9wb29sX2t3YXJnczAEAAByjgAAAHIQAAAAYwIAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAnrXUmVjZWl2ZSB0aGUgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAKICAgICAgICBvYmplY3Qgd2hlbiBpdCBpcyBmdWxseSBjb25zdHJ1Y3RlZC4KCiAgICAgICAgVGhlIHBsdWdpbiBtYXkgbWFrZSBhZGRpdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGVuZ2luZSwgc3VjaCBhcwogICAgICAgIHJlZ2lzdGVyaW5nIGVuZ2luZSBvciBjb25uZWN0aW9uIHBvb2wgZXZlbnRzLgoKICAgICAgICBOchcAAAApAnILAAAAcqIAAABzAgAAACAgcg0AAAByowAAAHohQ3JlYXRlRW5naW5lUGx1Z2luLmVuZ2luZV9jcmVhdGVkMwQAAHKOAAAAchAAAABOKQhypQAAAHKmAAAAcqcAAAByqAAAAHKwAAAAcrQAAAByuAAAAHKjAAAAchcAAAByEAAAAHINAAAAcq0AAAByrQAAAMEDAABzXQAAAIAAgACAAIAAgADwAlQBBQjwAFQBBQjwbAITBRfwABMFF/AAEwUX8CoBBS7wAAEFLvAAAQUu8AYBBSvwAAEFK/AAAQUr8AYHBQzwAAcFDPAABwUM8AAHBQzwAAcFDHIQAAAAcq0AAABjAAAAAAAAAAAAAAAAAQAAAAAAAADzTgAAAJcAZQBaAWQAWgJkAVoDZAJaBAkAZAJaBQkAZAOEAFoGZASEAFoHZAWEAFoIZAaEAFoJZAeEAFoKZAiEAFoLZAmEAFoMZAqEAFoNZAJTACkL2hBFeGVjdXRpb25Db250ZXh0YUEHAABBIG1lc3NlbmdlciBvYmplY3QgZm9yIGEgRGlhbGVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlCiAgICBleGVjdXRpb24uCgogICAgRXhlY3V0aW9uQ29udGV4dCBzaG91bGQgaGF2ZSB0aGVzZSBkYXRhIG1lbWJlcnM6CgogICAgY29ubmVjdGlvbgogICAgICBDb25uZWN0aW9uIG9iamVjdCB3aGljaCBjYW4gYmUgZnJlZWx5IHVzZWQgYnkgZGVmYXVsdCB2YWx1ZQogICAgICBnZW5lcmF0b3JzIHRvIGV4ZWN1dGUgU1FMLiAgVGhpcyBDb25uZWN0aW9uIHNob3VsZCByZWZlcmVuY2UgdGhlCiAgICAgIHNhbWUgdW5kZXJseWluZyBjb25uZWN0aW9uL3RyYW5zYWN0aW9uYWwgcmVzb3VyY2VzIG9mCiAgICAgIHJvb3RfY29ubmVjdGlvbi4KCiAgICByb290X2Nvbm5lY3Rpb24KICAgICAgQ29ubmVjdGlvbiBvYmplY3Qgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiB0aGlzIEV4ZWN1dGlvbkNvbnRleHQuICBUaGlzCiAgICAgIENvbm5lY3Rpb24gbWF5IGhhdmUgY2xvc2Vfd2l0aF9yZXN1bHQ9VHJ1ZSBzZXQsIGluIHdoaWNoIGNhc2UgaXQgY2FuCiAgICAgIG9ubHkgYmUgdXNlZCBvbmNlLgoKICAgIGRpYWxlY3QKICAgICAgZGlhbGVjdCB3aGljaCBjcmVhdGVkIHRoaXMgRXhlY3V0aW9uQ29udGV4dC4KCiAgICBjdXJzb3IKICAgICAgREItQVBJIGN1cnNvciBwcm9jdXJlZCBmcm9tIHRoZSBjb25uZWN0aW9uLAoKICAgIGNvbXBpbGVkCiAgICAgIGlmIHBhc3NlZCB0byBjb25zdHJ1Y3Rvciwgc3FsYWxjaGVteS5lbmdpbmUuYmFzZS5Db21waWxlZCBvYmplY3QKICAgICAgYmVpbmcgZXhlY3V0ZWQsCgogICAgc3RhdGVtZW50CiAgICAgIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQuICBJcyBlaXRoZXIKICAgICAgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvciwgb3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gdGhlCiAgICAgIHNxbC5Db21waWxlZCBvYmplY3QgYnkgdGhlIHRpbWUgcHJlX2V4ZWMoKSBoYXMgY29tcGxldGVkLgoKICAgIHBhcmFtZXRlcnMKICAgICAgYmluZCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZXhlY3V0ZSgpIG1ldGhvZC4gIEZvciBjb21waWxlZAogICAgICBzdGF0ZW1lbnRzLCB0aGlzIGlzIGEgZGljdGlvbmFyeSBvciBsaXN0IG9mIGRpY3Rpb25hcmllcy4gIEZvcgogICAgICB0ZXh0dWFsIHN0YXRlbWVudHMsIGl0IHNob3VsZCBiZSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgdGhlCiAgICAgIGRpYWxlY3QncyBwYXJhbXN0eWxlIChpLmUuIGRpY3Qgb3IgbGlzdCBvZiBkaWN0cyBmb3Igbm9uCiAgICAgIHBvc2l0aW9uYWwsIGxpc3Qgb3IgbGlzdCBvZiBsaXN0cy90dXBsZXMgZm9yIHBvc2l0aW9uYWwpLgoKICAgIGlzaW5zZXJ0CiAgICAgIFRydWUgaWYgdGhlIHN0YXRlbWVudCBpcyBhbiBJTlNFUlQuCgogICAgaXN1cGRhdGUKICAgICAgVHJ1ZSBpZiB0aGUgc3RhdGVtZW50IGlzIGFuIFVQREFURS4KCiAgICBzaG91bGRfYXV0b2NvbW1pdAogICAgICBUcnVlIGlmIHRoZSBzdGF0ZW1lbnQgaXMgYSAiY29tbWl0dGFibGUiIHN0YXRlbWVudC4KCiAgICBwcmVmZXRjaF9jb2xzCiAgICAgIGEgbGlzdCBvZiBDb2x1bW4gb2JqZWN0cyBmb3Igd2hpY2ggYSBjbGllbnQtc2lkZSBkZWZhdWx0CiAgICAgIHdhcyBmaXJlZCBvZmYuICBBcHBsaWVzIHRvIGluc2VydHMgYW5kIHVwZGF0ZXMuCgogICAgcG9zdGZldGNoX2NvbHMKICAgICAgYSBsaXN0IG9mIENvbHVtbiBvYmplY3RzIGZvciB3aGljaCBhIHNlcnZlci1zaWRlIGRlZmF1bHQgb3IKICAgICAgaW5saW5lIFNRTCBleHByZXNzaW9uIHZhbHVlIHdhcyBmaXJlZCBvZmYuICBBcHBsaWVzIHRvIGluc2VydHMKICAgICAgYW5kIHVwZGF0ZXMuCiAgICBOYwEAAAAAAAAAAAAAAAIAAAADAAAA8x4AAACXAHQBAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAggEpAXr1UmV0dXJuIGEgbmV3IGN1cnNvciBnZW5lcmF0ZWQgZnJvbSB0aGlzIEV4ZWN1dGlvbkNvbnRleHQncwogICAgICAgIGNvbm5lY3Rpb24uCgogICAgICAgIFNvbWUgZGlhbGVjdHMgbWF5IHdpc2ggdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgogICAgICAgIGNvbm5lY3Rpb24uY3Vyc29yKCksIHN1Y2ggYXMgcG9zdGdyZXNxbCB3aGljaCBtYXkgcmV0dXJuIGEgUEcKICAgICAgICAic2VydmVyIHNpZGUiIGN1cnNvci4KICAgICAgICByCQAAAHJkAAAAcwEAAAAgcg0AAADaDWNyZWF0ZV9jdXJzb3J6HkV4ZWN1dGlvbkNvbnRleHQuY3JlYXRlX2N1cnNvcpkEAAByKgAAAHIQAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAA8x4AAACXAHQBAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAggEpAXr1Q2FsbGVkIGJlZm9yZSBhbiBleGVjdXRpb24gb2YgYSBjb21waWxlZCBzdGF0ZW1lbnQuCgogICAgICAgIElmIGEgY29tcGlsZWQgc3RhdGVtZW50IHdhcyBwYXNzZWQgdG8gdGhpcyBFeGVjdXRpb25Db250ZXh0LAogICAgICAgIHRoZSBgc3RhdGVtZW50YCBhbmQgYHBhcmFtZXRlcnNgIGRhdGFtZW1iZXJzIG11c3QgYmUKICAgICAgICBpbml0aWFsaXplZCBhZnRlciB0aGlzIHN0YXRlbWVudCBpcyBjb21wbGV0ZS4KICAgICAgICByCQAAAHJkAAAAcwEAAAAgcg0AAADaCHByZV9leGVjehlFeGVjdXRpb25Db250ZXh0LnByZV9leGVjpAQAAHI9AAAAchAAAABjAQAAAAAAAAAAAAAAAgAAAAMAAADzHgAAAJcAdAEAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCASkBYQMBAABDYWxsZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBhIGNvbXBpbGVkIHN0YXRlbWVudC4KCiAgICAgICAgSWYgYSBjb21waWxlZCBzdGF0ZW1lbnQgd2FzIHBhc3NlZCB0byB0aGlzIEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgICAgdGhlIGBs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CiAgICAgICAgb2YgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAuCgogICAgICAgIE5yFwAAACkCcgsAAAByrwAAAHMCAAAAICByDQAAAHKNAAAAehNDb25uZWN0YWJsZS5jb25uZWN07wQAAHKOAAAAchAAAABOegMxLjNhQAEAAFRoZSA6bWV0aDpgX2VuZ2luZS5FbmdpbmUuY29udGV4dHVhbF9jb25uZWN0YCBhbmQgOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5jb250ZXh0dWFsX2Nvbm5lY3RgIG1ldGhvZHMgYXJlIGRlcHJlY2F0ZWQuIFRoaXMgbWV0aG9kIGlzIGFuIGFydGlmYWN0IG9mIHRoZSB0aHJlYWRsb2NhbCBlbmdpbmUgc3RyYXRlZ3kgd2hpY2ggaXMgYWxzbyB0byBiZSBkZXByZWNhdGVkLiAgIEZvciBleHBsaWNpdCBjb25uZWN0aW9ucyBmcm9tIGFuIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgLCB1c2UgdGhlIDptZXRoOmBfZW5naW5lLkVuZ2luZS5jb25uZWN0YCBtZXRob2QuYwEAAAAAAAAAAAAAAAUAAAAPAAAA8xwAAACXAAIAfABqAAAAAAAAAAAAfAFpAHwCpAGOAVMAKQFhagEAAFJldHVybiBhIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYAogICAgICAgIG9iamVjdCB3aGljaCBtYXkgYmUgcGFydCBvZiBhbiBvbmdvaW5nCiAgICAgICAgY29udGV4dC4KCiAgICAgICAgRGVwZW5kaW5nIG9uIGNvbnRleHQsIHRoaXMgbWF5IGJlIGBgc2VsZmBgIGlmIHRoaXMgb2JqZWN0CiAgICAgICAgaXMgYWxyZWFkeSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAsIG9yIGEgbmV3bHkKICAgICAgICBwcm9jdXJlZCA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgaWYgdGhpcyBvYmplY3QgaXMgYW4gaW5zdGFuY2UKICAgICAgICBvZiA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYC4KCiAgICAgICAgKQHaE19jb250ZXh0dWFsX2Nvbm5lY3QpA3ILAAAA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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-311.pyc
99.31 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default.cpython-311.pyc
66.23 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
interfaces.cpython-311.pyc
49.32 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
reflection.cpython-311.pyc
38.35 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
result.cpython-311.pyc
66.15 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
strategies.cpython-311.pyc
13.58 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
threadlocal.cpython-311.pyc
8.53 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
url.cpython-311.pyc
13.18 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-311.pyc
2.65 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
25.64 KB
lrw-r--r--
2026-02-06 08:01:45
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).