REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 35.68 KB
Close
/proc/self/root/proc/self/root/usr/lib/python3.8/site-packages/pip/_vendor/__pycache__/distro.cpython-38.pyc
Text
Base64
VQ0NCgAAAADA0i5l86gAAOMAAAAAAAAAAAAAAAAAAAAABQAAAEAAAABzfgEAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZQFqCaAKZANkBKECWgtkBVoMZAZkB2kBWg1kB2QIZAhkCZwDWg5kCmQIaQFaD2UCoBBkC6EBWhFlAqAQZAyhAVoSZA1kDmQPZQxkEGYFWhNkQGQSZBOEAVoUZBRkFYQAWhVkQWQXZBiEAVoWZEJkGWQahAFaF2RDZBtkHIQBWhhkRGQdZB6EAVoZZEVkH2QghAFaGmRGZCFkIoQBWhtkI2QkhABaHGQlZCaEAFodZEdkJ2QohAFaHmQpZCqEAFofZCtkLIQAWiBkLWQuhABaIWQvZDCEAFoiZDFkMoQAWiNkM2Q0hABaJGQ1ZDaEAFolZDdkOIQAWiZHAGQ5ZDqEAGQ6ZSeDA1ooRwBkO2Q8hABkPGUngwNaKWUpgwBaKmQ9ZD6EAForZSxkP2sCkAFyemUrgwABAGQCUwApSGEMAwAAClRoZSBgYGRpc3Ryb2BgIHBhY2thZ2UgKGBgZGlzdHJvYGAgc3RhbmRzIGZvciBMaW51eCBEaXN0cmlidXRpb24pIHByb3ZpZGVzCmluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eCBkaXN0cmlidXRpb24gaXQgcnVucyBvbiwgc3VjaCBhcyBhIHJlbGlhYmxlCm1hY2hpbmUtcmVhZGFibGUgZGlzdHJvIElELCBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKSXQgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvciBQeXRob24ncyBvcmlnaW5hbAo6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgYnV0IGl0IHByb3ZpZGVzIG11Y2ggbW9yZQpmdW5jdGlvbmFsaXR5LiBBbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgUHl0aG9uCjMuNSBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24sIGFuZCBQeXRob24gMy44IHdpbGwgcmVtb3ZlIGl0IGFsdG9nZXRoZXIuCkl0cyBwcmVkZWNlc3NvciBmdW5jdGlvbiA6cHk6ZnVuYzpgcGxhdGZvcm0uZGlzdGAgd2FzIGFscmVhZHkKZGVwcmVjYXRlZCBzaW5jZSBQeXRob24gMi42IGFuZCB3aWxsIGFsc28gYmUgcmVtb3ZlZCBpbiBQeXRob24gMy44LgpTdGlsbCwgdGhlcmUgYXJlIG1hbnkgY2FzZXMgaW4gd2hpY2ggYWNjZXNzIHRvIE9TIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbgppcyBuZWVkZWQuIFNlZSBgUHl0aG9uIGlzc3VlIDEzMjIgPGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMyMj5gXyBmb3IKbW9yZSBpbmZvcm1hdGlvbi4K6QAAAABOWgtVTklYQ09ORkRJUnoEL2V0Y3oKb3MtcmVsZWFzZVoCb2xaBm9yYWNsZVoEcmhlbCkDWhRlbnRlcnByaXNlZW50ZXJwcmlzZVobcmVkaGF0ZW50ZXJwcmlzZXdvcmtzdGF0aW9uWhZyZWRoYXRlbnRlcnByaXNlc2VydmVyWgZyZWRoYXR6QSg/OlteKV0qXCkoLiopXCgpPyAqKD86U1RMICk/KFtcZC4rXC1hLXpdKlxkKSAqKD86ZXNhZWxlciAqKT8oLispehsoXHcrKVstX10ocmVsZWFzZXx2ZXJzaW9uKSRaDmRlYmlhbl92ZXJzaW9uegtsc2ItcmVsZWFzZXoLb2VtLXJlbGVhc2V6DnN5c3RlbS1yZWxlYXNlVGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAoAF8AKEBUwApAWEbBAAACiAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKGlkX25hbWUsIHZlcnNpb24sIGNvZGVuYW1lKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgaWRfbmFtZWBgOiAgSWYgKmZ1bGxfZGlzdHJpYnV0aW9uX25hbWUqIGlzIGZhbHNlLCB0aGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uaWRgLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBUaGUgaW50ZXJmYWNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbAogICAgOnB5OmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAgZnVuY3Rpb24sIHN1cHBvcnRpbmcgYSBzdWJzZXQgb2YKICAgIGl0cyBwYXJhbWV0ZXJzLgoKICAgIFRoZSBkYXRhIGl0IHJldHVybnMgbWF5IG5vdCBleGFjdGx5IGJlIHRoZSBzYW1lLCBiZWNhdXNlIGl0IHVzZXMgbW9yZSBkYXRhCiAgICBzb3VyY2VzIHRoYW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYXkgbGVhZCB0byBkaWZmZXJlbnQgZGF0YSBpZgogICAgdGhlIE9TIGRpc3RyaWJ1dGlvbiBpcyBub3QgY29uc2lzdGVudCBhY3Jvc3MgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIGl0CiAgICBwcm92aWRlcyAodGhlcmUgYXJlIGluZGVlZCBzdWNoIGRpc3RyaWJ1dGlvbnMgLi4uKS4KCiAgICBBbm90aGVyIHJlYXNvbiBmb3IgZGlmZmVyZW5jZXMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgOmZ1bmM6YGRpc3Ryby5pZGAKICAgIG1ldGhvZCBub3JtYWxpemVzIHRoZSBkaXN0cm8gSUQgc3RyaW5nIHRvIGEgcmVsaWFibGUgbWFjaGluZS1yZWFkYWJsZSB2YWx1ZQogICAgZm9yIGEgbnVtYmVyIG9mIHBvcHVsYXIgT1MgZGlzdHJpYnV0aW9ucy4KICAgICkC2gdfZGlzdHJv2hJsaW51eF9kaXN0cmlidXRpb24pAdoWZnVsbF9kaXN0cmlidXRpb25fbmFtZakAcgUAAAD6Ni91c3IvbGliL3B5dGhvbjMuOC9zaXRlLXBhY2thZ2VzL3BpcC9fdmVuZG9yL2Rpc3Ryby5weXIDAAAAYQAAAHMCAAAAABlyAwAAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEMAAABzCAAAAHQAoAGhAFMAKQFhJAsAAAogICAgUmV0dXJuIHRoZSBkaXN0cm8gSUQgb2YgdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLCBhcyBhCiAgICBtYWNoaW5lLXJlYWRhYmxlIHN0cmluZy4KCiAgICBGb3IgYSBudW1iZXIgb2YgT1MgZGlzdHJpYnV0aW9ucywgdGhlIHJldHVybmVkIGRpc3RybyBJRCB2YWx1ZSBpcwogICAgKnJlbGlhYmxlKiwgaW4gdGhlIHNlbnNlIHRoYXQgaXQgaXMgZG9jdW1lbnRlZCBhbmQgdGhhdCBpdCBkb2VzIG5vdCBjaGFuZ2UKICAgIGFjcm9zcyByZWxlYXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uLgoKICAgIFRoaXMgcGFja2FnZSBtYWludGFpbnMgdGhlIGZvbGxvd2luZyByZWxpYWJsZSBkaXN0cm8gSUQgdmFsdWVzOgoKICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgRGlzdHJvIElEICAgICAgIERpc3RyaWJ1dGlvbgogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAidWJ1bnR1IiAgICAgICAgVWJ1bnR1CiAgICAiZGViaWFuIiAgICAgICAgRGViaWFuCiAgICAicmhlbCIgICAgICAgICAgUmVkSGF0IEVudGVycHJpc2UgTGludXgKICAgICJjZW50b3MiICAgICAgICBDZW50T1MKICAgICJmZWRvcmEiICAgICAgICBGZWRvcmEKICAgICJzbGVzIiAgICAgICAgICBTVVNFIExpbnV4IEVudGVycHJpc2UgU2VydmVyCiAgICAib3BlbnN1c2UiICAgICAgb3BlblNVU0UKICAgICJhbWF6b24iICAgICAgICBBbWF6b24gTGludXgKICAgICJhcmNoIiAgICAgICAgICBBcmNoIExpbnV4CiAgICAiY2xvdWRsaW51eCIgICAgQ2xvdWRMaW51eCBPUwogICAgImV4aGVyYm8iICAgICAgIEV4aGVyYm8gTGludXgKICAgICJnZW50b28iICAgICAgICBHZW5Ub28gTGludXgKICAgICJpYm1fcG93ZXJrdm0iICBJQk0gUG93ZXJLVk0KICAgICJrdm1pYm0iICAgICAgICBLVk0gZm9yIElCTSB6IFN5c3RlbXMKICAgICJsaW51eG1pbnQiICAgICBMaW51eCBNaW50CiAgICAibWFnZWlhIiAgICAgICAgTWFnZWlhCiAgICAibWFuZHJpdmEiICAgICAgTWFuZHJpdmEgTGludXgKICAgICJwYXJhbGxlbHMiICAgICBQYXJhbGxlbHMKICAgICJwaWRvcmEiICAgICAgICBQaWRvcmEKICAgICJyYXNwYmlhbiIgICAgICBSYXNwYmlhbgogICAgIm9yYWNsZSIgICAgICAgIE9yYWNsZSBMaW51eCAoYW5kIE9yYWNsZSBFbnRlcnByaXNlIExpbnV4KQogICAgInNjaWVudGlmaWMiICAgIFNjaWVudGlmaWMgTGludXgKICAgICJzbGFja3dhcmUiICAgICBTbGFja3dhcmUKICAgICJ4ZW5zZXJ2ZXIiICAgICBYZW5TZXJ2ZXIKICAgICJvcGVuYnNkIiAgICAgICBPcGVuQlNECiAgICAibmV0YnNkIiAgICAgICAgTmV0QlNECiAgICAiZnJlZWJzZCIgICAgICAgRnJlZUJTRAogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgSWYgeW91IGhhdmUgYSBuZWVkIHRvIGdldCBkaXN0cm9zIGZvciByZWxpYWJsZSBJRHMgYWRkZWQgaW50byB0aGlzIHNldCwKICAgIG9yIGlmIHlvdSBmaW5kIHRoYXQgdGhlIDpmdW5jOmBkaXN0cm8uaWRgIGZ1bmN0aW9uIHJldHVybnMgYSBkaWZmZXJlbnQKICAgIGRpc3RybyBJRCBmb3Igb25lIG9mIHRoZSBsaXN0ZWQgZGlzdHJvcywgcGxlYXNlIGNyZWF0ZSBhbiBpc3N1ZSBpbiB0aGUKICAgIGBkaXN0cm8gaXNzdWUgdHJhY2tlcmBfLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeSBhbmQgdHJhbnNmb3JtYXRpb25zOioqCgogICAgRmlyc3QsIHRoZSBJRCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcywgaW4gdGhlIHNwZWNpZmllZAogICAgb3JkZXIuIFRoZSBmaXJzdCBhdmFpbGFibGUgYW5kIG5vbi1lbXB0eSB2YWx1ZSBpcyB1c2VkOgoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiSUQiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiRGlzdHJpYnV0b3IgSUQiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsCgogICAgVGhlIHNvIGRldGVybWluZWQgSUQgdmFsdWUgdGhlbiBwYXNzZXMgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnMsCiAgICBiZWZvcmUgaXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2Q6CgogICAgKiBpdCBpcyB0cmFuc2xhdGVkIHRvIGxvd2VyIGNhc2UsCgogICAgKiBibGFua3MgKHdoaWNoIHNob3VsZCBub3QgYmUgdGhlcmUgYW55d2F5KSBhcmUgdHJhbnNsYXRlZCB0byB1bmRlcnNjb3JlcywKCiAgICAqIGEgbm9ybWFsaXphdGlvbiBvZiB0aGUgSUQgaXMgcGVyZm9ybWVkLCBiYXNlZCB1cG9uCiAgICAgIGBub3JtYWxpemF0aW9uIHRhYmxlc2BfLiBUaGUgcHVycG9zZSBvZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgdG8gZW5zdXJlCiAgICAgIHRoYXQgdGhlIElEIGlzIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlLCBldmVuIGFjcm9zcyBpbmNvbXBhdGlibGUgY2hhbmdlcwogICAgICBpbiB0aGUgT1MgZGlzdHJpYnV0aW9ucy4gQSBjb21tb24gcmVhc29uIGZvciBhbiBpbmNvbXBhdGlibGUgY2hhbmdlIGlzCiAgICAgIHRoZSBhZGRpdGlvbiBvZiBhbiBvcy1yZWxlYXNlIGZpbGUsIG9yIHRoZSBhZGRpdGlvbiBvZiB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwgd2l0aCBJRCB2YWx1ZXMgdGhhdCBkaWZmZXIgZnJvbSB3aGF0IHdhcyBwcmV2aW91c2x5IGRldGVybWluZWQKICAgICAgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBuYW1lLgogICAgKQJyAgAAANoCaWRyBQAAAHIFAAAAcgUAAAByBgAAAHIHAAAAfQAAAHMCAAAAAEtyBwAAAEZjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhawQAAAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgbmFtZSBpcyByZXR1cm5lZCB3aXRob3V0IHZlcnNpb24gb3IgY29kZW5hbWUuCiAgICAoZS5nLiAiQ2VudE9TIExpbnV4IikKCiAgICBJZiAqcHJldHR5KiBpcyB0cnVlLCB0aGUgdmVyc2lvbiBhbmQgY29kZW5hbWUgYXJlIGFwcGVuZGVkLgogICAgKGUuZy4gIkNlbnRPUyBMaW51eCA3LjEuMTUwMyAoQ29yZSkiKQoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIFRoZSBuYW1lIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLCBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLgogICAgVGhlIGZpcnN0IGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5IHZhbHVlIGlzIHVzZWQ6CgogICAgKiBJZiAqcHJldHR5KiBpcyBmYWxzZToKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiTkFNRSIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgICAgY29tbWFuZCwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiPG5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAqIElmICpwcmV0dHkqIGlzIHRydWU6CgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgICBjb21tYW5kLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICI8bmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLCBhcHBlbmRlZAogICAgICAgIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwcmV0dHkgdmVyc2lvbiAoIjx2ZXJzaW9uX2lkPiIgYW5kICI8Y29kZW5hbWU+IgogICAgICAgIGZpZWxkcykgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsIGlmIGF2YWlsYWJsZS4KICAgICkCcgIAAADaBG5hbWWpAdoGcHJldHR5cgUAAAByBQAAAHIGAAAAcggAAADLAAAAcwIAAAAAJHIIAAAAYwIAAAAAAAAAAAAAAAIAAAAEAAAAQwAAAHMMAAAAdACgAXwAfAGhAlMAKQFhdgYAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgdmVyc2lvbiBpcyByZXR1cm5lZCB3aXRob3V0IGNvZGVuYW1lIChlLmcuCiAgICAiNy4wIikuCgogICAgSWYgKnByZXR0eSogaXMgdHJ1ZSwgdGhlIGNvZGVuYW1lIGluIHBhcmVudGhlc2lzIGlzIGFwcGVuZGVkLCBpZiB0aGUKICAgIGNvZGVuYW1lIGlzIG5vbi1lbXB0eSAoZS5nLiAiNy4wIChNYWlwbykiKS4KCiAgICBTb21lIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSB2ZXJzaW9uIG51bWJlcnMgd2l0aCBkaWZmZXJlbnQgcHJlY2lzaW9ucyBpbgogICAgdGhlIGRpZmZlcmVudCBzb3VyY2VzIG9mIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gRXhhbWluaW5nIHRoZSBkaWZmZXJlbnQKICAgIHNvdXJjZXMgaW4gYSBmaXhlZCBwcmlvcml0eSBvcmRlciBkb2VzIG5vdCBhbHdheXMgeWllbGQgdGhlIG1vc3QgcHJlY2lzZQogICAgdmVyc2lvbiAoZS5nLiBmb3IgRGViaWFuIDguMiwgb3IgQ2VudE9TIDcuMSkuCgogICAgVGhlICpiZXN0KiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgYXBwcm9hY2ggZm9yIHRoZSByZXR1cm5lZAogICAgdmVyc2lvbjoKCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoZSBmaXJzdCBub24tZW1wdHkgdmVyc2lvbiBudW1iZXIgaW4gcHJpb3JpdHkgb3JkZXIgb2YKICAgIHRoZSBleGFtaW5lZCBzb3VyY2VzIGlzIHJldHVybmVkLgoKICAgIElmICpiZXN0KiBpcyB0cnVlLCB0aGUgbW9zdCBwcmVjaXNlIHZlcnNpb24gbnVtYmVyIG91dCBvZiBhbGwgZXhhbWluZWQKICAgIHNvdXJjZXMgaXMgcmV0dXJuZWQuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgSW4gYWxsIGNhc2VzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMuCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoaXMgb3JkZXIgcmVwcmVzZW50cyB0aGUgcHJpb3JpdHkgb3JkZXI6CgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJWRVJTSU9OX0lEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiUmVsZWFzZSIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICI8dmVyc2lvbl9pZD4iIGZpZWxkIG9mIHRoZSBmaXJzdCBsaW5lCiAgICAgIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICJQUkVUVFlfTkFNRSIgYXR0cmlidXRlIG9mIHRoZQogICAgICBvcy1yZWxlYXNlIGZpbGUsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZXMuCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIkRlc2NyaXB0aW9uIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkKICAgICAgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UKICAgICAgZmlsZXMuCiAgICApAnICAAAA2gd2ZXJzaW9uqQJyCgAAANoEYmVzdHIFAAAAcgUAAAByBgAAAHILAAAA8gAAAHMCAAAAAClyCwAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAoAF8AKEBUwApAWGgAQAACiAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKG1ham9yLCBtaW5vciwgYnVpbGRfbnVtYmVyKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgbWFqb3JgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5tYWpvcl92ZXJzaW9uYC4KCiAgICAqIGBgbWlub3JgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5taW5vcl92ZXJzaW9u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b2t1cCBoaWVyYXJjaHk6KioKCiAgICBUaGlzIGluZm9ybWF0aW9uIGl0ZW0gaXMgb25seSBwcm92aWRlZCBieSB0aGUgb3MtcmVsZWFzZSBmaWxlLgogICAgRm9yIGRldGFpbHMsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJJRF9MSUtFIiBhdHRyaWJ1dGUgaW4gdGhlCiAgICBgb3MtcmVsZWFzZSBtYW4gcGFnZQogICAgPGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL29zLXJlbGVhc2UuaHRtbD5gXy4KICAgICkCcgIAAADaBGxpa2VyBQAAAHIFAAAAcgUAAAByBgAAAHITAAAAVgEAAHMCAAAAAA5yEwAAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEMAAABzCAAAAHQAoAGhAFMAKQFhpgIAAAogICAgUmV0dXJuIHRoZSBjb2RlbmFtZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLAogICAgYXMgYSBzdHJpbmcuCgogICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBoYXZlIGEgY29kZW5hbWUsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KCiAgICBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGNvZGVuYW1lIGlzIG5vdCBhbHdheXMgcmVhbGx5IGEgY29kZW5hbWUuIEZvcgogICAgZXhhbXBsZSwgb3BlblNVU0UgcmV0dXJucyAieDg2XzY0Ii4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgc3VjaAogICAgY2FzZXMgaW4gYW55IHNwZWNpYWwgd2F5IGFuZCBqdXN0IHJldHVybnMgdGhlIHN0cmluZyBpdCBmaW5kcywgaWYgYW55LgoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgICogdGhlIGNvZGVuYW1lIHdpdGhpbiB0aGUgIlZFUlNJT04iIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLCBpZgogICAgICBwcm92aWRlZCwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIkNvZGVuYW1lIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICI8Y29kZW5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KICAgICkCcgIAAADaCGNvZGVuYW1lcgUAAAByBQAAAHIFAAAAcgYAAAByFAAAAGcBAABzAgAAAAAVchQAAABjAgAAAAAAAAAAAAAAAgAAAAQAAABDAAAAcwwAAAB0AKABfAB8AaECUwApAWHUBAAACiAgICBSZXR1cm4gY2VydGFpbiBtYWNoaW5lLXJlYWRhYmxlIGluZm9ybWF0aW9uIGl0ZW1zIGFib3V0IHRoZSBjdXJyZW50IE9TCiAgICBkaXN0cmlidXRpb24gaW4gYSBkaWN0aW9uYXJ5LCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgogICAgLi4gc291cmNlY29kZTo6IHB5dGhvbgoKICAgICAgICB7CiAgICAgICAgICAgICdpZCc6ICdyaGVsJywKICAgICAgICAgICAgJ3ZlcnNpb24nOiAnNy4wJywKICAgICAgICAgICAgJ3ZlcnNpb25fcGFydHMnOiB7CiAgICAgICAgICAgICAgICAnbWFqb3InOiAnNycsCiAgICAgICAgICAgICAgICAnbWlub3InOiAnMCcsCiAgICAgICAgICAgICAgICAnYnVpbGRfbnVtYmVyJzogJycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2xpa2UnOiAnZmVkb3JhJywKICAgICAgICAgICAgJ2NvZGVuYW1lJzogJ01haXBvJwogICAgICAgIH0KCiAgICBUaGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGtleXMgYXJlIGFsd2F5cyB0aGUgc2FtZSwgcmVnYXJkbGVzcyBvZiB3aGljaAogICAgaW5mb3JtYXRpb24gaXRlbXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBkYXRhIHNvdXJjZXMuIFRoZSB2YWx1ZXMKICAgIGZvciB0aGUgdmFyaW91cyBrZXlzIGFyZSBhcyBmb2xsb3dzOgoKICAgICogYGBpZGBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmlkYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1ham9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWFqb3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gbWlub3JgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5taW5vcl92ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBidWlsZF9udW1iZXJgYDogIFRoZSByZXN1bHQgb2YKICAgICAgOmZ1bmM6YGRpc3Ryby5idWlsZF9udW1iZXJgLgoKICAgICogYGBsaWtlYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubGlrZWAuCgogICAgKiBgYGNvZGVuYW1lYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSAqcHJldHR5KiBhbmQgKmJlc3QqIHBhcmFtZXRlcnMsIHNlZSB0aGUKICAgIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAgbWV0aG9kLgogICAgKQJyAgAAANoEaW5mb3IMAAAAcgUAAAByBQAAAHIGAAAAchUAAAB/AQAAcwIAAAAAKXIVAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAXriCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAg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bnRzLCB0aGF0IG1vZHVsZS1nbG9iYWwgaW5zdGFuY2UKICAgIHJldHVybnMgZGF0YSBhYm91dCB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24gKGkuZS4gdGhlIGRpc3RybyB0aGlzCiAgICBwYWNrYWdlIHJ1bnMgb24pLgoKICAgIE5vcm1hbGx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgogICAgSG93ZXZlciwgaW4gc2l0dWF0aW9ucyB3aGVyZSBjb250cm9sIGlzIG5lZWRlZCBvdmVyIHRoZSBleGFjdCBkYXRhIHNvdXJjZXMKICAgIHRoYXQgYXJlIHVzZWQsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBiZSBjcmVhdGVkIHdpdGggYSBzcGVjaWZpYwogICAgZGlzdHJvIHJlbGVhc2UgZmlsZSwgb3IgYSBzcGVjaWZpYyBvcy1yZWxlYXNlIGZpbGUsIG9yIHdpdGhvdXQgaW52b2tpbmcgdGhlCiAgICBsc2JfcmVsZWFzZSBjb21tYW5kLgogICAgVNoAYwUAAAAAAAAAAAAAAAUAAAAEAAAAQwAAAHMuAAAAfAJwEHQAagGgAnQDdAShAnwAXwV8A3AaZAF8AF8GfAF8AF8HfAR8AF8IZAJTACkDYW8LAAAKICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gbWV0aG9kIG9mIHRoaXMgY2xhc3MgZ2F0aGVycyBpbmZvcm1hdGlvbiBmcm9tIHRoZQogICAgICAgIGF2YWlsYWJsZSBkYXRhIHNvdXJjZXMsIGFuZCBzdG9yZXMgdGhhdCBpbiBwcml2YXRlIGluc3RhbmNlIGF0dHJpYnV0ZXMuCiAgICAgICAgU3Vic2VxdWVudCBhY2Nlc3MgdG8gdGhlIGluZm9ybWF0aW9uIGl0ZW1zIHVzZXMgdGhlc2UgcHJpdmF0ZSBpbnN0YW5jZQogICAgICAgIGF0dHJpYnV0ZXMsIHNvIHRoYXQgdGhlIGRhdGEgc291cmNlcyBhcmUgcmVhZCBvbmx5IG9uY2UuCgogICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgICogYGBpbmNsdWRlX2xzYmBgIChib29sKTogQ29udHJvbHMgd2hldGhlciB0aGUKICAgICAgICAgIGBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dGBfIGlzIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgSWYgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24KICAgICAgICAgIHBhdGgsIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYG9zX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYG9zLXJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgdG8gYmUgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQpIHdpbGwgY2F1c2UgdGhlIGRlZmF1bHQgcGF0aCBuYW1lIHRvCiAgICAgICAgICBiZSB1c2VkIChzZWUgYG9zLXJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzKS4KCiAgICAgICAgICBJZiB0aGUgc3BlY2lmaWVkIG9yIGRlZmF1bHRlZCBvcy1yZWxlYXNlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZQogICAgICAgICAgZGF0YSBzb3VyY2UgZm9yIHRoZSBvcy1yZWxlYXNlIGZpbGUgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYGRpc3Ryb19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyB0byBiZSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgQW4gZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCkgd2lsbCBjYXVzZSBhIGRlZmF1bHQgc2VhcmNoIGFsZ29yaXRobQogICAgICAgICAgdG8gYmUgdXNlZCAoc2VlIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMpLgoKICAgICAgICAgIElmIHRoZSBzcGVjaWZpZWQgZGlzdHJvIHJlbGVhc2UgZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgaWYgbm8gZGVmYXVsdAogICAgICAgICAgZGlzdHJvIHJlbGVhc2UgZmlsZSBjYW4gYmUgZm91bmQsIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGRpc3RybwogICAgICAgICAgcmVsZWFzZSBmaWxlIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBpbmNsdWRlX25hbWVgYCAoYm9vbCk6IENvbnRyb2xzIHdoZXRoZXIgdW5hbWUgY29tbWFuZCBvdXRwdXQgaXMKICAgICAgICAgIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuIElmIHRoZSB1bmFtZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4KICAgICAgICAgIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbiBwYXRoIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHVuYW1lIGNvbW1hbmQgd2lsbAogICAgICAgICAgYmUgZW1wdHkuCgogICAgICAgIFB1YmxpYyBpbnN0YW5jZSBhdHRyaWJ1dGVzOgoKICAgICAgICAqIGBgb3NfcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgb3MtcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyBhY3R1YWxseSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuIFRoZQogICAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vIGRpc3RybyByZWxlYXNlIGZpbGUgaXMgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAqIGBgZGlzdHJvX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYGRpc3RybyByZWxlYXNlIGZpbGVgXyB0aGF0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4gVGhlCiAgICAgICAgICBlbXB0eSBzdHJpbmcgaWYgbm8gZGlzdHJvIHJlbGVhc2UgZmlsZSBpcyB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICogYGBpbmNsdWRlX2xzYmBgIChib29sKTogVGhlIHJlc3VsdCBvZiB0aGUgYGBpbmNsdWRlX2xzYmBgIHBhcmFtZXRlci4KICAgICAgICAgIFRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgbHNiIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9hZGVkLgoKICAgICAgICAqIGBgaW5jbHVkZV91bmFtZWBgIChib29sKTogVGhlIHJlc3VsdCBvZiB0aGUgYGBpbmNsdWRlX3VuYW1lYGAKICAgICAgICAgIHBhcmFtZXRlci4gVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSB1bmFtZSBpbmZvcm1hdGlvbiB3aWxsCiAgICAgICAgICBiZSBsb2FkZWQuCgogICAgICAgIFJhaXNlczoKCiAgICAgICAgKiA6cHk6ZXhjOmBJT0Vycm9yYDogU29tZSBJL08gaXNzdWUgd2l0aCBhbiBvcy1yZWxlYXNlIGZpbGUgb3IgZGlzdHJvCiAgICAgICAgICByZWxlYXNlIGZpbGUuCgogICAgICAgICogOnB5OmV4Yzpgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3JgOiBUaGUgbHNiX3JlbGVhc2UgY29tbWFuZCBoYWQKICAgICAgICAgIHNvbWUgaXNzdWUgKG90aGVyIHRoYW4gbm90IGJlaW5nIGF2YWlsYWJsZSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24KICAgICAgICAgIHBhdGgpLgoKICAgICAgICAqIDpweTpleGM6YFVuaWNvZGVFcnJvcmA6IEEgZGF0YSBzb3VyY2UgaGFzIHVuZXhwZWN0ZWQgY2hhcmFjdGVycyBvcgogICAgICAgICAgdXNlcyBhbiB1bmV4cGVjdGVkIGVuY29kaW5nLgogICAgICAgIHIyAAAATikJ2gJvc9oEcGF0aNoEam9pbtoMX1VOSVhDT05GRElS2hRfT1NfUkVMRUFTRV9CQVNFTkFNRdoPb3NfcmVsZWFzZV9maWxl2hNkaXN0cm9fcmVsZWFzZV9maWxl2gtpbmNsdWRlX2xzYtoNaW5jbHVkZV91bmFtZSkFciQAAAByOgAAAHI4AAAAcjkAAAByOwAAAHIFAAAAcgUAAAByBgAAAHImAAAAPgIAAHMMAAAAAEgEAQz/BAIKAQYBehpMaW51eERpc3RyaWJ1dGlvbi5fX2luaXRfX2MBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzDAAAAGQBagB8AGQCjQFTACkDeiBSZXR1cm4gcmVwciBvZiBhbGwgaW5mbwogICAgICAgIGFlAQAATGludXhEaXN0cmlidXRpb24ob3NfcmVsZWFzZV9maWxlPXtzZWxmLm9zX3JlbGVhc2VfZmlsZSFyfSwgZGlzdHJvX3JlbGVhc2VfZmlsZT17c2VsZi5kaXN0cm9fcmVsZWFzZV9maWxlIXJ9LCBpbmNsdWRlX2xzYj17c2VsZi5pbmNsdWRlX2xzYiFyfSwgaW5jbHVkZV91bmFtZT17c2VsZi5pbmNsdWRlX3VuYW1lIXJ9LCBfb3NfcmVsZWFzZV9pbmZvPXtzZWxmLl9vc19yZWxlYXNlX2luZm8hcn0sIF9sc2JfcmVsZWFzZV9pbmZvPXtzZWxmLl9sc2JfcmVsZWFzZV9pbmZvIXJ9LCBfZGlzdHJvX3JlbGVhc2VfaW5mbz17c2VsZi5fZGlzdHJvX3JlbGVhc2VfaW5mbyFyfSwgX3VuYW1lX2luZm89e3NlbGYuX3VuYW1lX2luZm8hcn0pqQFyJAAAACkBcigAAAByPAAAAHIFAAAAcgUAAAByBgAAANoIX19yZXByX1+MAgAAcwgAAAAABAQJAvcE/3oaTGludXhEaXN0cmlidXRpb24uX19yZXByX19jAgAAAAAAAAAAAAAAAgAAAAQAAABDAAAAcyIAAAB8AXIMfACgAKEAbgZ8AKABoQB8AKACoQB8AKADoQBmA1MAKQF6+AogICAgICAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgT1MgZGlzdHJpYnV0aW9uIHRoYXQgaXMgY29tcGF0aWJsZQogICAgICAgIHdpdGggUHl0aG9uJ3MgOmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAsIHN1cHBvcnRpbmcgYSBzdWJzZXQKICAgICAgICBvZiBpdHMgcGFyYW1ldGVycy4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmxpbnV4X2Rpc3RyaWJ1dGlvbmAuCiAgICAgICAgKQRyCAAAAHIHAAAAcgsAAAByFAAAACkCciQAAAByBAAAAHIFAAAAcgUAAAByBgAAAHIDAAAAmwIAAHMIAAAAAAkSAQYBBv16JExpbnV4RGlzdHJpYnV0aW9uLmxpbnV4X2Rpc3RyaWJ1dGlvbmMBAAAAAAAAAAAAAAADAAAAAwAAAEMAAABzbAAAAGQBZAKEAH0BfACgAGQDoQF9AnwCciB8AXwCdAGDAlMAfACgAmQEoQF9AnwCcjh8AXwCdAODAlMAfACgBGQDoQF9AnwCclB8AXwCdAWDAlMAfACgBmQDoQF9AnwCcmh8AXwCdAWDAlMAZAVTACkGem9SZXR1cm4gdGhlIGRpc3RybyBJRCBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZy4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmlkYC4KICAgICAgICBjAgAAAAAAAAAAAAAAAgAAAAQAAABTAAAAcxwAAAB8AKAAoQCgAWQBZAKhAn0AfAGgAnwAfAChAlMAKQNO+gEg2gFfKQPaBWxvd2Vy2gdyZXBsYWNl2gNnZXQpAtoJZGlzdHJvX2lk2gV0YWJsZXIFAAAAcgUAAAByBgAAANoJbm9ybWFsaXplrgIAAHMEAAAAAAEQAXonTGludXhEaXN0cmlidXRpb24uaWQuPGxvY2Fscz4ubm9ybWFsaXplcgcAAADaDmRpc3RyaWJ1dG9yX2lkcjIAAAApB3IaAAAA2hBOT1JNQUxJWkVEX09TX0lEch0AAADaEU5PUk1BTElaRURfTFNCX0lEch4AAADaFE5PUk1BTElaRURfRElTVFJPX0lEch8AAAApA3IkAAAAckUAAAByQwAAAHIFAAAAcgUAAAByBgAAAHIHAAAAqQIAAHMcAAAAAAUIBAoBBAEKAgoBBAEKAgoBBAEKAgoBBAEKAnoUTGludXhEaXN0cmlidXRpb24uaWRGYwIAAAAAAAAAAAAAAAQAAAADAAAAQwAAAHN8AAAAfACgAGQBoQFwJnwAoAFkAqEBcCZ8AKACZAGhAXAmfACgA2QBoQF9AnwBcnR8AKAAZAOhAXA+fACgAWQEoQF9AnwCc3R8AKACZAGhAXBWfACgA2QBoQF9AnwAagRkBWQGjQF9A3wDcnR8AmQHFwB8AxcAfQJ8AnB6ZAhTACkJenUKICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBzdHJpbmcuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KICAgICAgICByCAAAAHJGAAAA2gtwcmV0dHlfbmFtZdoLZGVzY3JpcHRpb25UcgkAAAByPgAAAHIyAAAAKQVyGgAAAHIdAAAAch4AAAByHwAAAHILAAAAKQRyJAAAAHIKAAAAcggAAAByCwAAAHIFAAAAcgUAAAByBgAAAHIIAAAAxAIAAHMmAAAAAAYKAQj/AgII/gIDCP0CBAQBCgEI/wICBAEKAQj/AgIMAQQBDAF6FkxpbnV4RGlzdHJpYnV0aW9uLm5hbWVjAwAAAAAAAAAAAAAABgAAAAkAAABDAAAAc8IAAAB8AKAAZAGhAXwAoAFkAqEBfACgAmQBoQF8AKADfACgAGQDoQGhAaAEZAFkBKECfACgA3wAoAFkBaEBoQGgBGQBZAShAnwAoAVkAqEBZwZ9A2QEfQR8AnKEfANEAF0kfQV8BaAGZAahAXwEoAZkBqEBawRzfHwEZARrAnJcfAV9BHFcbhp8A0QAXRR9BXwFZARrA3KIfAV9BAEAcZ5xiHwBcr58BHK+fACgB6EAcr5kB6AIfAR8AKAHoQChAn0EfARTACkIensKICAgICAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBzdHJpbmcuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYC4KICAgICAgICDaCnZlcnNpb25faWTaB3JlbGVhc2VySgAAAHIyAAAAcksAAADaAS56CXswfSAoezF9KSkJchoAAAByHQAAAHIeAAAA2h1fcGFyc2VfZGlzdHJvX3JlbGVhc2VfY29udGVudHJCAAAAch8AAADaBWNvdW50chQAAAByKAAAACkGciQAAAByCgAAAHINAAAAWgh2ZXJzaW9uc3ILAAAA2gF2cgUAAAByBQAAAHIGAAAAcgsAAADZAgAAczoAAAAABwgBCAEIAQQBCP8EAQIAAv8CAgQBCP8EAQIAAv8CAgj4BAoEAQQFCAEcAQgCCAEIAQQBBgEQARABehlMaW51eERpc3RyaWJ1dGlvbi52ZXJzaW9uYwIAAAAAAAAAAAAAAAgAAAADAAAAQwAAAHNMAAAAfABqAHwBZAGNAX0CfAJySHQBoAJkAqEBfQN8A6ADfAKhAX0EfARySHwEoAShAFwDfQV9Bn0HfAV8BnA+ZAN8B3BEZANmA1MAZARTACkFepsKICAgICAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSB0dXBsZSBvZiB2ZXJzaW9uCiAgICAgICAgbnVtYmVycy4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLnZlcnNpb25fcGFydHNgLgogICAgICAgIHIPAAAAehcoXGQrKVwuPyhcZCspP1wuPyhcZCspP3IyAAAAKQNyMgAAAHIyAAAAcjIAAAApBXILAAAA2gJyZdoHY29tcGlsZdoFbWF0Y2jaBmdyb3VwcykIciQAAAByDQAAAFoLdmVyc2lvbl9zdHJaDXZlcnNpb25fcmVnZXjaB21hdGNoZXPaBW1ham9y2gVtaW5vcnISAAAAcgUAAAByBQAAAHIGAAAAcg4AAAD7AgAAcxAAAAAABwwBBAEKAQoBBAEOARIBeh9MaW51eERpc3RyaWJ1dGlvbi52ZXJzaW9uX3BhcnRzYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfACgAHwBoQFkARkAUwApAnqGCiAgICAgICAgUmV0dXJuIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5tYWpvcl92ZXJzaW9uYC4KICAgICAgICByAQAAAKkBcg4AAACpAnIkAAAAcg0AAAByBQAAAHIFAAAAcgYAAAByEAAAAAsDAABzAgAAAAAGeh9MaW51eERpc3RyaWJ1dGlvbi5tYWpvcl92ZXJzaW9uYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfACgAHwBoQFkARkAUwApAnqGCiAgICAgICAgUmV0dXJuIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5taW5vcl92ZXJzaW9uYC4KICAgICAgICDpAQAAAHJZAAAAcloAAAByBQAAAHIFAAAAcgYAAAByEQAAABMDAABzAgAAAAAGeh9MaW51eERpc3RyaWJ1dGlvbi5taW5vcl92ZXJzaW9uYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfACgAHwBoQFkARkAUwApAnp9CiAgICAgICAgUmV0dXJuIHRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uYnVpbGRfbnVtYmVyYC4KICAgICAgICDpAgAAAHJZAAAAcloAAAByBQAAAHIFAAAAcgYAAAByEgAAABsDAABzAgAAAAAGeh5MaW51eERpc3RyaWJ1dGlvbi5idWlsZF9udW1iZXJjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcw4AAAB8AKAAZAGhAXAMZAJTACkDeoMKICAgICAgICBSZXR1cm4gdGhlIElEcyBvZiBkaXN0cmlidXRpb25zIHRoYXQgYXJlIGxpa2UgdGhlIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmxpa2VgLgogICAgICAgIFoHaWRfbGlrZXIyAAAAKQFyGgAAAHI8AAAAcgUAAAByBQAAAHIGAAAAchMAAAAjAwAAcwIAAAAABnoWTGludXhEaXN0cmlidXRpb24ubGlrZWMBAAAAAAAAAAAAAAABAAAACAAAAEMAAABzPgAAAHoMfABqAGQBGQBXAFMABAB0AWsKcjgBAAEAAQB8AKACZAGhAXAyfACgA2QBoQFwMmQCBgBZAFMAWABkA1MAKQR6cAogICAgICAgIFJldHVybiB0aGUgY29kZW5hbWUgb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KICAgICAgICByFAAAAHIyAAAATikE2hBfb3NfcmVsZWFzZV9pbmZv2ghLZXlFcnJvcnIdAAAAch4AAAByPAAAAHIFAAAAcgUAAAByBgAAAHIUAAAAKwMAAHMQAAAAAAYCAwwBDgEKAQj/AgIC/noaTGludXhEaXN0cmlidXRpb24uY29kZW5hbWVjAwAAAAAAAAAAAAAAAwAAAAkAAABDAAAAc0IAAAB0AHwAoAGhAHwAoAJ8AXwCoQJ0AHwAoAN8AqEBfACgBHwCoQF8AKAFfAKhAWQBjQN8AKAGoQB8AKAHoQBkAo0FUwApA3qPCiAgICAgICAgUmV0dXJuIGNlcnRhaW4gbWFjaGluZS1yZWFkYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgT1MKICAgICAgICBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5pbmZvYC4KICAgICAgICApA3JXAAAAclgAAAByEgAAACkFcgcAAAByCwAAAHIOAAAAchMAAAByFAAAACkI2gRkaWN0cgcAAAByCwAAAHIQAAAAchEAAAByEgAAAHITAAAAchQAAAApA3IkAAAAcgoAAAByDQAAAHIFAAAAcgUAAAByBgAAAHIVAAAAOgMAAHMWAAAAAAcCAQYBCgECAQgBCAEI/QQFBgEG93oWTGludXhEaXN0cmlidXRpb24uaW5mb2MBAAAAAAAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBetkKICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24KICAgICAgICBpdGVtcyBmcm9tIHRoZSBvcy1yZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLm9zX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQFyXQAAAHI8AAAAcgUAAAByBQAAAHIGAAAAchYAAABNAwAAcwIAAAAAB3ohTGludXhEaXN0cmlidXRpb24ub3NfcmVsZWFzZV9pbmZvYwEAAAAAAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF65gogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgZGF0YSBzb3VyY2Ugb2YgdGhlIE9TCiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ubHNiX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQHaEV9sc2JfcmVsZWFzZV9pbmZvcjwAAAByBQAAAHIFAAAAcgYAAAByFwAAAFYDAABzAgAAAAAIeiJMaW51eERpc3RyaWJ1dGlvbi5sc2JfcmVsZWFzZV9pbmZvYwEAAAAAAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF66QogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIE9TCiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uZGlzdHJvX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQHaFF9kaXN0cm9fcmVsZWFzZV9pbmZvcjwAAAByBQAAAHIFAAAAcgYAAAByGAAAAGADAABzAgAAAAAIeiVMaW51eERpc3RyaWJ1dGlvbi5kaXN0cm9fcmVsZWFzZV9pbmZvYwEAAAAAAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF60gogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZy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ZWFzZXoOY2VudG9zLXJlbGVhc2V6DmZlZG9yYS1yZWxlYXNleg5nZW50b28tcmVsZWFzZXoObWFnZWlhLXJlbGVhc2V6EG1hbmRyYWtlLXJlbGVhc2V6EG1hbmRyaXZhLXJlbGVhc2V6FW1hbmRyaXZhbGludXgtcmVsZWFzZXoPbWFuamFyby1yZWxlYXNleg5vcmFjbGUtcmVsZWFzZXoOcmVkaGF0LXJlbGVhc2V6CnNsLXJlbGVhc2V6EXNsYWNrd2FyZS12ZXJzaW9uTikPcjkAAADaGl9wYXJzZV9kaXN0cm9fcmVsZWFzZV9maWxlcjMAAAByNAAAANoIYmFzZW5hbWXaIF9ESVNUUk9fUkVMRUFTRV9CQVNFTkFNRV9QQVRURVJOclQAAAByQAAAAHJ0AAAA2gdsaXN0ZGlycjYAAADaBHNvcnRygQAAANogX0RJU1RST19SRUxFQVNFX0lHTk9SRV9CQVNFTkFNRVNyNQAAACkGciQAAADaC2Rpc3Ryb19pbmZvcpAAAAByVAAAAFoJYmFzZW5hbWVz2ghmaWxlcGF0aHIFAAAAcgUAAAByBgAAAHJhAAAALgQAAHNeAAAAAAgGAwQBBP8EAg4FCgEIAQ7/AgIKAQQBDgEEAgIBCgQMAQ4FAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQLyCg8IAQgBAgEKAQQBDgEKAQgCBgEOARIBCAEKAXomTGludXhEaXN0cmlidXRpb24uX2Rpc3Ryb19yZWxlYXNlX2luZm9jAgAAAAAAAAAAAAAAAwAAAAoAAABDAAAAc1IAAAB6MHQAfAGDAY8efQJ8AKABfAKgAqEAoQFXAAIANQBRAFIAowBXAFMAUQBSAFgAVwBuHAQAdAN0BGYCawpyTAEAAQABAGkABgBZAFMAWABkAVMAKQJ6ywogICAgICAgIFBhcnNlIGEgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAgICAgUGFyYW1ldGVyczoKCiAgICAgICAgKiBmaWxlcGF0aDogUGF0aCBuYW1lIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgaW5mb3JtYXRpb24gaXRlbXMu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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 16
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-38.opt-1.pyc
19.96 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
appdirs.cpython-38.pyc
19.96 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-38.opt-1.pyc
15.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-38.pyc
15.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-38.opt-1.pyc
35.62 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-38.pyc
35.68 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-38.opt-1.pyc
63.13 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-38.pyc
63.26 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.opt-1.pyc
226.81 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-38.pyc
226.81 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-38.opt-1.pyc
7.82 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-38.pyc
7.82 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.opt-1.pyc
25.78 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-38.pyc
25.78 KB
lrw-r--r--
2023-10-17 18:30:26
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.opt-1.pyc
2.76 KB
lrw-r--r--
2023-10-17 18:30:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-38.pyc
2.76 KB
lrw-r--r--
2023-10-17 18:30:25
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).