REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 37.50 KB
Close
/opt/alt/python39/lib/python3.9/site-packages/pip/_vendor/__pycache__/distro.cpython-39.pyc
Text
Base64
YQ0NCgAAAACAmVJlHr0AAOMAAAAAAAAAAAAAAAAAAAAACAAAAEAAAABzxgEAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWglkA1oKZQRqGaAaZARkBaECWhtlBGoZoBpkBmQHoQJaHGQIWh1kCWQKaQFaHmQKZApkC2QLZAtkDJwFWh9kDWQLaQFaIGUFoCFkDqEBWiJlBaAhZA+hAVojZBBkEWQSZR1kE2QUZBVmB1okZEZkF2QYhAFaJWQZZBqEAFomZEdkHGQdhAFaJ2RIZB5kH4QBWihkSWQgZCGEAVopZEpkImQjhAFaKmRLZCRkJYQBWitkTGQmZCeEAVosZChkKYQAWi1kKmQrhABaLmRNZCxkLYQBWi9kLmQvhABaMGQwZDGEAFoxZDJkM4QAWjJkNGQ1hABaM2Q2ZDeEAFo0ZDhkOYQAWjVkOmQ7hABaNmQ8ZD2EAFo3ehBkAWQ+bDhtOVo5AQBXAG4kBABlOpABeZIBAAEAAQBHAGQ/ZECEAGRAZTuDA1o5WQBuAjAARwBkQWRChABkQmU7gwNaPGU8gwBaPWRDZESEAFo+ZT9kRWsCkAFywmU+gwABAGQCUwApTmH7AgAAClRoZSBgYGRpc3Ryb2BgIHBhY2thZ2UgKGBgZGlzdHJvYGAgc3RhbmRzIGZvciBMaW51eCBEaXN0cmlidXRpb24pIHByb3ZpZGVzCmluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eCBkaXN0cmlidXRpb24gaXQgcnVucyBvbiwgc3VjaCBhcyBhIHJlbGlhYmxlCm1hY2hpbmUtcmVhZGFibGUgZGlzdHJvIElELCBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKSXQgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvciBQeXRob24ncyBvcmlnaW5hbAo6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgYnV0IGl0IHByb3ZpZGVzIG11Y2ggbW9yZQpmdW5jdGlvbmFsaXR5LiBBbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgUHl0aG9uCjMuNSBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24sIGFuZCBQeXRob24gMy44IHJlbW92ZWQgaXQgYWx0b2dldGhlci4gSXRzCnByZWRlY2Vzc29yIGZ1bmN0aW9uIDpweTpmdW5jOmBwbGF0Zm9ybS5kaXN0YCB3YXMgYWxyZWFkeSBkZXByZWNhdGVkIHNpbmNlClB5dGhvbiAyLjYgYW5kIHJlbW92ZWQgaW4gUHl0aG9uIDMuOC4gU3RpbGwsIHRoZXJlIGFyZSBtYW55IGNhc2VzIGluIHdoaWNoCmFjY2VzcyB0byBPUyBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24gaXMgbmVlZGVkLiBTZWUgYFB5dGhvbiBpc3N1ZSAxMzIyCjxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMjI+YF8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCukAAAAATnoFMS42LjBaC1VOSVhDT05GRElSegQvZXRjWg1VTklYVVNSTElCRElSeggvdXNyL2xpYnoKb3MtcmVsZWFzZdoCb2zaBm9yYWNsZdoEcmhlbCkF2hZlbnRlcnByaXNlZW50ZXJwcmlzZWFz2hplbnRlcnByaXNlZW50ZXJwcmlzZXNlcnZlctobcmVkaGF0ZW50ZXJwcmlzZXdvcmtzdGF0aW9u2hZyZWRoYXRlbnRlcnByaXNlc2VydmVy2htyZWRoYXRlbnRlcnByaXNlY29tcHV0ZW5vZGXaBnJlZGhhdHpBKD86W14pXSpcKSguKilcKCk/ICooPzpTVEwgKT8oW1xkLitcLWEtel0qXGQpICooPzplc2FlbGVyICopPyguKyl6GyhcdyspWy1fXShyZWxlYXNlfHZlcnNpb24pJNoOZGViaWFuX3ZlcnNpb256C2xzYi1yZWxlYXNlegtvZW0tcmVsZWFzZXoOc3lzdGVtLXJlbGVhc2V6DXBsZXNrLXJlbGVhc2V6EGlyZWRtYWlsLXJlbGVhc2VUYwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMaAAAAdABqAWQBdAJkAmQDjQMBAHQDoAR8AKEBUwApBGFHBQAACiAgICAuLiBkZXByZWNhdGVkOjogMS42LjAKCiAgICAgICAgOmZ1bmM6YGRpc3Ryby5saW51eF9kaXN0cmlidXRpb24oKWAgaXMgZGVwcmVjYXRlZC4gSXQgc2hvdWxkIG9ubHkgYmUKICAgICAgICB1c2VkIGFzIGEgY29tcGF0aWJpbGl0eSBzaGltIHdpdGggUHl0aG9uJ3MKICAgICAgICA6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKClgLiBQbGVhc2UgdXNlIDpmdW5jOmBkaXN0cm8uaWRgLAogICAgICAgIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAgYW5kIDpmdW5jOmBkaXN0cm8ubmFtZWAgaW5zdGVhZC4KCiAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKGlkX25hbWUsIHZlcnNpb24sIGNvZGVuYW1lKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgaWRfbmFtZWBgOiAgSWYgKmZ1bGxfZGlzdHJpYnV0aW9uX25hbWUqIGlzIGZhbHNlLCB0aGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uaWRgLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBUaGUgaW50ZXJmYWNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbAogICAgOnB5OmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAgZnVuY3Rpb24sIHN1cHBvcnRpbmcgYSBzdWJzZXQgb2YKICAgIGl0cyBwYXJhbWV0ZXJzLgoKICAgIFRoZSBkYXRhIGl0IHJldHVybnMgbWF5IG5vdCBleGFjdGx5IGJlIHRoZSBzYW1lLCBiZWNhdXNlIGl0IHVzZXMgbW9yZSBkYXRhCiAgICBzb3VyY2VzIHRoYW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYXkgbGVhZCB0byBkaWZmZXJlbnQgZGF0YSBpZgogICAgdGhlIE9TIGRpc3RyaWJ1dGlvbiBpcyBub3QgY29uc2lzdGVudCBhY3Jvc3MgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIGl0CiAgICBwcm92aWRlcyAodGhlcmUgYXJlIGluZGVlZCBzdWNoIGRpc3RyaWJ1dGlvbnMgLi4uKS4KCiAgICBBbm90aGVyIHJlYXNvbiBmb3IgZGlmZmVyZW5jZXMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgOmZ1bmM6YGRpc3Ryby5pZGAKICAgIG1ldGhvZCBub3JtYWxpemVzIHRoZSBkaXN0cm8gSUQgc3RyaW5nIHRvIGEgcmVsaWFibGUgbWFjaGluZS1yZWFkYWJsZSB2YWx1ZQogICAgZm9yIGEgbnVtYmVyIG9mIHBvcHVsYXIgT1MgZGlzdHJpYnV0aW9ucy4KICAgIHrKZGlzdHJvLmxpbnV4X2Rpc3RyaWJ1dGlvbigpIGlzIGRlcHJlY2F0ZWQuIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgYSBjb21wYXRpYmlsaXR5IHNoaW0gd2l0aCBQeXRob24ncyBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKS4gUGxlYXNlIHVzZSBkaXN0cm8uaWQoKSwgZGlzdHJvLnZlcnNpb24oKSBhbmQgZGlzdHJvLm5hbWUoKSBpbnN0ZWFkLukCAAAAKQHaCnN0YWNrbGV2ZWwpBdoId2FybmluZ3PaBHdhcm7aEkRlcHJlY2F0aW9uV2FybmluZ9oHX2Rpc3Ryb9oSbGludXhfZGlzdHJpYnV0aW9uKQHaFmZ1bGxfZGlzdHJpYnV0aW9uX25hbWWpAHIUAAAA+oEvYnVpbGRkaXIvYnVpbGQvQlVJTERST09UL2FsdC1weXRob24zOS1waXAtMjEuMy4xLTIuZWw4Lng4Nl82NC9vcHQvYWx0L3B5dGhvbjM5L2xpYi9weXRob24zLjkvc2l0ZS1wYWNrYWdlcy9waXAvX3ZlbmRvci9kaXN0cm8ucHlyEgAAAIgAAABzDAAAAAAhBAECAwIBAvsGB3ISAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAWFECwAACiAgICBSZXR1cm4gdGhlIGRpc3RybyBJRCBvZiB0aGUgY3VycmVudCBkaXN0cmlidXRpb24sIGFzIGEKICAgIG1hY2hpbmUtcmVhZGFibGUgc3RyaW5nLgoKICAgIEZvciBhIG51bWJlciBvZiBPUyBkaXN0cmlidXRpb25zLCB0aGUgcmV0dXJuZWQgZGlzdHJvIElEIHZhbHVlIGlzCiAgICAqcmVsaWFibGUqLCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcyBkb2N1bWVudGVkIGFuZCB0aGF0IGl0IGRvZXMgbm90IGNoYW5nZQogICAgYWNyb3NzIHJlbGVhc2VzIG9mIHRoZSBkaXN0cmlidXRpb24uCgogICAgVGhpcyBwYWNrYWdlIG1haW50YWlucyB0aGUgZm9sbG93aW5nIHJlbGlhYmxlIGRpc3RybyBJRCB2YWx1ZXM6CgogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICBEaXN0cm8gSUQgICAgICAgRGlzdHJpYnV0aW9uCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICJ1YnVudHUiICAgICAgICBVYnVudHUKICAgICJkZWJpYW4iICAgICAgICBEZWJpYW4KICAgICJyaGVsIiAgICAgICAgICBSZWRIYXQgRW50ZXJwcmlzZSBMaW51eAogICAgImNlbnRvcyIgICAgICAgIENlbnRPUwogICAgImZlZG9yYSIgICAgICAgIEZlZG9yYQogICAgInNsZXMiICAgICAgICAgIFNVU0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIKICAgICJvcGVuc3VzZSIgICAgICBvcGVuU1VTRQogICAgImFtYXpvbiIgICAgICAgIEFtYXpvbiBMaW51eAogICAgImFyY2giICAgICAgICAgIEFyY2ggTGludXgKICAgICJjbG91ZGxpbnV4IiAgICBDbG91ZExpbnV4IE9TCiAgICAiZXhoZXJibyIgICAgICAgRXhoZXJibyBMaW51eAogICAgImdlbnRvbyIgICAgICAgIEdlblRvbyBMaW51eAogICAgImlibV9wb3dlcmt2bSIgIElCTSBQb3dlcktWTQogICAgImt2bWlibSIgICAgICAgIEtWTSBmb3IgSUJNIHogU3lzdGVtcwogICAgImxpbnV4bWludCIgICAgIExpbnV4IE1pbnQKICAgICJtYWdlaWEiICAgICAgICBNYWdlaWEKICAgICJtYW5kcml2YSIgICAgICBNYW5kcml2YSBMaW51eAogICAgInBhcmFsbGVscyIgICAgIFBhcmFsbGVscwogICAgInBpZG9yYSIgICAgICAgIFBpZG9yYQogICAgInJhc3BiaWFuIiAgICAgIFJhc3BiaWFuCiAgICAib3JhY2xlIiAgICAgICAgT3JhY2xlIExpbnV4IChhbmQgT3JhY2xlIEVudGVycHJpc2UgTGludXgpCiAgICAic2NpZW50aWZpYyIgICAgU2NpZW50aWZpYyBMaW51eAogICAgInNsYWNrd2FyZSIgICAgIFNsYWNrd2FyZQogICAgInhlbnNlcnZlciIgICAgIFhlblNlcnZlcgogICAgIm9wZW5ic2QiICAgICAgIE9wZW5CU0QKICAgICJuZXRic2QiICAgICAgICBOZXRCU0QKICAgICJmcmVlYnNkIiAgICAgICBGcmVlQlNECiAgICAibWlkbmlnaHRic2QiICAgTWlkbmlnaHRCU0QKICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIElmIHlvdSBoYXZlIGEgbmVlZCB0byBnZXQgZGlzdHJvcyBmb3IgcmVsaWFibGUgSURzIGFkZGVkIGludG8gdGhpcyBzZXQsCiAgICBvciBpZiB5b3UgZmluZCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYCBmdW5jdGlvbiByZXR1cm5zIGEgZGlmZmVyZW50CiAgICBkaXN0cm8gSUQgZm9yIG9uZSBvZiB0aGUgbGlzdGVkIGRpc3Ryb3MsIHBsZWFzZSBjcmVhdGUgYW4gaXNzdWUgaW4gdGhlCiAgICBgZGlzdHJvIGlzc3VlIHRyYWNrZXJgXy4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHkgYW5kIHRyYW5zZm9ybWF0aW9uczoqKgoKICAgIEZpcnN0LCB0aGUgSUQgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMsIGluIHRoZSBzcGVjaWZpZWQKICAgIG9yZGVyLiBUaGUgZmlyc3QgYXZhaWxhYmxlIGFuZCBub24tZW1wdHkgdmFsdWUgaXMgdXNlZDoKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIklEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCgogICAgKiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAoKICAgIFRoZSBzbyBkZXRlcm1pbmVkIElEIHZhbHVlIHRoZW4gcGFzc2VzIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zLAogICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kOgoKICAgICogaXQgaXMgdHJhbnNsYXRlZCB0byBsb3dlciBjYXNlLAoKICAgICogYmxhbmtzICh3aGljaCBzaG91bGQgbm90IGJlIHRoZXJlIGFueXdheSkgYXJlIHRyYW5zbGF0ZWQgdG8gdW5kZXJzY29yZXMsCgogICAgKiBhIG5vcm1hbGl6YXRpb24gb2YgdGhlIElEIGlzIHBlcmZvcm1lZCwgYmFzZWQgdXBvbgogICAgICBgbm9ybWFsaXphdGlvbiB0YWJsZXNgXy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBub3JtYWxpemF0aW9uIGlzIHRvIGVuc3VyZQogICAgICB0aGF0IHRoZSBJRCBpcyBhcyByZWxpYWJsZSBhcyBwb3NzaWJsZSwgZXZlbiBhY3Jvc3MgaW5jb21wYXRpYmxlIGNoYW5nZXMKICAgICAgaW4gdGhlIE9TIGRpc3RyaWJ1dGlvbnMuIEEgY29tbW9uIHJlYXNvbiBmb3IgYW4gaW5jb21w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dGhlCiAgICBjb2RlbmFtZSBpcyBub24tZW1wdHkgKGUuZy4gIjcuMCAoTWFpcG8pIikuCgogICAgU29tZSBkaXN0cmlidXRpb25zIHByb3ZpZGUgdmVyc2lvbiBudW1iZXJzIHdpdGggZGlmZmVyZW50IHByZWNpc2lvbnMgaW4KICAgIHRoZSBkaWZmZXJlbnQgc291cmNlcyBvZiBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24uIEV4YW1pbmluZyB0aGUgZGlmZmVyZW50CiAgICBzb3VyY2VzIGluIGEgZml4ZWQgcHJpb3JpdHkgb3JkZXIgZG9lcyBub3QgYWx3YXlzIHlpZWxkIHRoZSBtb3N0IHByZWNpc2UKICAgIHZlcnNpb24gKGUuZy4gZm9yIERlYmlhbiA4LjIsIG9yIENlbnRPUyA3LjEpLgoKICAgIFRoZSAqYmVzdCogcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGFwcHJvYWNoIGZvciB0aGUgcmV0dXJuZWQKICAgIHZlcnNpb246CgogICAgSWYgKmJlc3QqIGlzIGZhbHNlLCB0aGUgZmlyc3Qgbm9uLWVtcHR5IHZlcnNpb24gbnVtYmVyIGluIHByaW9yaXR5IG9yZGVyIG9mCiAgICB0aGUgZXhhbWluZWQgc291cmNlcyBpcyByZXR1cm5lZC4KCiAgICBJZiAqYmVzdCogaXMgdHJ1ZSwgdGhlIG1vc3QgcHJlY2lzZSB2ZXJzaW9uIG51bWJlciBvdXQgb2YgYWxsIGV4YW1pbmVkCiAgICBzb3VyY2VzIGlzIHJldHVybmVkLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIEluIGFsbCBjYXNlcywgdGhlIHZlcnNpb24gbnVtYmVyIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLgogICAgSWYgKmJlc3QqIGlzIGZhbHNlLCB0aGlzIG9yZGVyIHJlcHJlc2VudHMgdGhlIHByaW9yaXR5IG9yZGVyOgoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiVkVSU0lPTl9JRCIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIlJlbGVhc2UiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiPHZlcnNpb25faWQ+IiBmaWVsZCBvZiB0aGUgZmlyc3QgbGluZQogICAgICBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSwKICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiUFJFVFRZX05BTUUiIGF0dHJpYnV0ZSBvZiB0aGUKICAgICAgb3MtcmVsZWFzZSBmaWxlLCBpZiBpdCBmb2xsb3dzIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGVzLgogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICJEZXNjcmlwdGlvbiIgYXR0cmlidXRlIHJldHVybmVkIGJ5CiAgICAgIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kLCBpZiBpdCBmb2xsb3dzIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3RybyByZWxlYXNlCiAgICAgIGZpbGVzLgogICAgKQJyEQAAANoHdmVyc2lvbqkCchkAAADaBGJlc3RyFAAAAHIUAAAAchUAAAByGgAAACsBAABzAgAAAAAqchoAAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhoAEAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiBhcyBhIHR1cGxlCiAgICBgYChtYWpvciwgbWlub3IsIGJ1aWxkX251bWJlcilgYCB3aXRoIGl0ZW1zIGFzIGZvbGxvd3M6CgogICAgKiBgYG1ham9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWFqb3JfdmVyc2lvbmAuCgogICAgKiBgYG1pbm9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCgogICAgKiBgYGJ1aWxkX251bWJlcmBgOiAg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bmZvcm1hdGlvbiBpdGVtIGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIG9zLXJlbGVhc2UgZmlsZS4KICAgIEZvciBkZXRhaWxzLCBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAiSURfTElLRSIgYXR0cmlidXRlIGluIHRoZQogICAgYG9zLXJlbGVhc2UgbWFuIHBhZ2UKICAgIDxodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zeXN0ZW1kL21hbi9vcy1yZWxlYXNlLmh0bWw+YF8uCiAgICApAnIRAAAA2gRsaWtlchQAAAByFAAAAHIUAAAAchUAAAByIgAAAJQBAABzAgAAAAAPciIAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAcwgAAAB0AKABoQBTACkBYaYCAAAKICAgIFJldHVybiB0aGUgY29kZW5hbWUgZm9yIHRoZSByZWxlYXNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwKICAgIGFzIGEgc3RyaW5nLgoKICAgIElmIHRoZSBkaXN0cmlidXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvZGVuYW1lLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCgogICAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBjb2RlbmFtZSBpcyBub3QgYWx3YXlzIHJlYWxseSBhIGNvZGVuYW1lLiBGb3IKICAgIGV4YW1wbGUsIG9wZW5TVVNFIHJldHVybnMgIng4Nl82NCIuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHN1Y2gKICAgIGNhc2VzIGluIGFueSBzcGVjaWFsIHdheSBhbmQganVzdCByZXR1cm5zIHRoZSBzdHJpbmcgaXQgZmluZHMsIGlmIGFueS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICAqIHRoZSBjb2RlbmFtZSB3aXRoaW4gdGhlICJWRVJTSU9OIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwgaWYKICAgICAgcHJvdmlkZWQsCgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJDb2RlbmFtZSIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiPGNvZGVuYW1lPiIgZmllbGQgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUuCiAgICApAnIRAAAA2ghjb2RlbmFtZXIUAAAAchQAAAByFAAAAHIVAAAAciMAAACmAQAAcwIAAAAAFnIjAAAAYwIAAAAAAAAAAAAAAAIAAAAEAAAAQwAAAHMMAAAAdACgAXwAfAGhAlMAKQFh1AQAAAogICAgUmV0dXJuIGNlcnRhaW4gbWFjaGluZS1yZWFkYWJsZSBpbmZvcm1hdGlvbiBpdGVtcyBhYm91dCB0aGUgY3VycmVudCBPUwogICAgZGlzdHJpYnV0aW9uIGluIGEgZGljdGlvbmFyeSwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKICAgIC4uIHNvdXJjZWNvZGU6OiBweXRob24KCiAgICAgICAgewogICAgICAgICAgICAnaWQnOiAncmhlbCcsCiAgICAgICAgICAgICd2ZXJzaW9uJzogJzcuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uX3BhcnRzJzogewogICAgICAgICAgICAgICAgJ21ham9yJzogJzcnLAogICAgICAgICAgICAgICAgJ21pbm9yJzogJzAnLAogICAgICAgICAgICAgICAgJ2J1aWxkX251bWJlcic6ICcnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdsaWtlJzogJ2ZlZG9yYScsCiAgICAgICAgICAgICdjb2RlbmFtZSc6ICdNYWlwbycKICAgICAgICB9CgogICAgVGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlIGFuZCBrZXlzIGFyZSBhbHdheXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKICAgIGluZm9ybWF0aW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgZGF0YSBzb3VyY2VzLiBUaGUgdmFsdWVzCiAgICBmb3IgdGhlIHZhcmlvdXMga2V5cyBhcmUgYXMgZm9sbG93czoKCiAgICAqIGBgaWRgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5pZGAuCgogICAgKiBgYHZlcnNpb25gYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBtYWpvcmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLm1ham9yX3ZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1pbm9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gYnVpbGRfbnVtYmVyYGA6ICBUaGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uYnVpbGRfbnVtYmVyYC4KCiAgICAqIGBgbGlrZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmxpa2VgLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgKnByZXR0eSogYW5kICpiZXN0KiBwYXJhbWV0ZXJzLCBzZWUgdGhlCiAgICA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gIG1ldGhvZC4KICAgICkCchEAAADaBGluZm9yGwAAAHIUAAAAchQAAAByFQAAAHIkAAAAvwEAAHMCAAAAACpyJAAAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEMAAABzCAAAAHQAoAGhAFMAKQF64gogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBvcy1yZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMuCiAgICApAnIRAAAA2g9vc19yZWxlYXNlX2luZm9yFAAA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bGUtZ2xvYmFsIGluc3RhbmNlCiAgICByZXR1cm5zIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIChpLmUuIHRoZSBkaXN0cm8gdGhpcwogICAgcGFja2FnZSBydW5zIG9uKS4KCiAgICBOb3JtYWxseSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgYWRkaXRpb25hbCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KICAgIEhvd2V2ZXIsIGluIHNpdHVhdGlvbnMgd2hlcmUgY29udHJvbCBpcyBuZWVkZWQgb3ZlciB0aGUgZXhhY3QgZGF0YSBzb3VyY2VzCiAgICB0aGF0IGFyZSB1c2VkLCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGEgc3BlY2lmaWMKICAgIGRpc3RybyByZWxlYXNlIGZpbGUsIG9yIGEgc3BlY2lmaWMgb3MtcmVsZWFzZSBmaWxlLCBvciB3aXRob3V0IGludm9raW5nIHRoZQogICAgbHNiX3JlbGVhc2UgY29tbWFuZC4KICAgIFTaAE5jBgAAAAAAAAAAAAAACAAAAAQAAABDAAAAc6IAAAB8BXwAXwB8BXIYdAFqAqADfAVkAaECbgJ0BHwAXwV8BXIwdAFqAqADfAVkAqECbgJ0BnwAXwd8AnJCfAJ8AF8IbkZ0AWoCoAN8AGoFdAmhAn0GdAFqAqADfABqB3QJoQJ9B3QBagKgCnwGoQFzenQBagKgCnwHoQFzgnwGfABfCG4GfAd8AF8IfANwjmQDfABfC3wBfABfDHwEfABfDWQEUwApBWH1CwAACiAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIG1ldGhvZCBvZiB0aGlzIGNsYXNzIGdhdGhlcnMgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgICAgICBhdmFpbGFibGUgZGF0YSBzb3VyY2VzLCBhbmQgc3RvcmVzIHRoYXQgaW4gcHJpdmF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGVzLgogICAgICAgIFN1YnNlcXVlbnQgYWNjZXNzIHRvIHRoZSBpbmZvcm1hdGlvbiBpdGVtcyB1c2VzIHRoZXNlIHByaXZhdGUgaW5zdGFuY2UKICAgICAgICBhdHRyaWJ1dGVzLCBzbyB0aGF0IHRoZSBkYXRhIHNvdXJjZXMgYXJlIHJlYWQgb25seSBvbmNlLgoKICAgICAgICBQYXJhbWV0ZXJzOgoKICAgICAgICAqIGBgaW5jbHVkZV9sc2JgYCAoYm9vbCk6IENvbnRyb2xzIHdoZXRoZXIgdGhlCiAgICAgICAgICBgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXRgXyBpcyBpbmNsdWRlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIElmIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uCiAgICAgICAgICBwYXRoLCB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBvc19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBvcy1yZWxlYXNlIGZpbGVgXyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSB3aWxsIGNhdXNlIHRoZSBkZWZhdWx0IHBhdGggbmFtZSB0bwogICAgICAgICAgYmUgdXNlZCAoc2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscykuCgogICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBvciBkZWZhdWx0ZWQgb3MtcmVsZWFzZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUKICAgICAgICAgIGRhdGEgc291cmNlIGZvciB0aGUgb3MtcmVsZWFzZSBmaWxlIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBkaXN0cm9fcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgdG8gYmUgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQpIHdpbGwgY2F1c2UgYSBkZWZhdWx0IHNlYXJjaCBhbGdvcml0aG0KICAgICAgICAgIHRvIGJlIHVzZWQgKHNlZSBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzKS4KCiAgICAgICAgICBJZiB0aGUgc3BlY2lmaWVkIGRpc3RybyByZWxlYXNlIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIGlmIG5vIGRlZmF1bHQKICAgICAgICAgIGRpc3RybyByZWxlYXNlIGZpbGUgY2FuIGJlIGZvdW5kLCB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBkaXN0cm8KICAgICAgICAgIHJlbGVhc2UgZmlsZSB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgaW5jbHVkZV91bmFtZWBgIChib29sKTogQ29udHJvbHMgd2hldGhlciB1bmFtZSBjb21tYW5kIG91dHB1dCBpcwogICAgICAgICAgaW5jbHVkZWQgYXMgYSBkYXRhIHNvdXJjZS4gSWYgdGhlIHVuYW1lIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbgogICAgICAgICAgdGhlIHByb2dyYW0gZXhlY3V0aW9uIHBhdGggdGhlIGRhdGEgc291cmNlIGZvciB0aGUgdW5hbWUgY29tbWFuZCB3aWxsCiAgICAgICAgICBiZSBlbXB0eS4KCiAgICAgICAgKiBgYHJvb3RfZGlyYGAgKHN0cmluZyk6IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byB1c2UKICAgICAgICAgIHRvIGZpbmQgZGlzdHJvLXJlbGF0ZWQgaW5mb3JtYXRpb24gZmlsZXMuCgogICAgICAgIFB1YmxpYyBpbnN0YW5jZSBhdHRyaWJ1dGVzOgoKICAgICAgICAqIGBgb3NfcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgb3MtcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyBhY3R1YWxseSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuIFRoZQogICAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vIGRpc3RybyByZWxlYXNlIGZpbGUgaXMgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAqIGBgZGlzdHJvX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYGRpc3RybyByZWxlYXNlIGZpbGVgXyB0aGF0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4gVGhlCiAgICAgICAgICBlbXB0eSBzdHJpbmcgaWYgbm8gZGlzdHJvIHJlbGVhc2UgZmlsZSBpcyB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICogYGBpbmNsdWRlX2xzYmBgIChib29sKTogVGhlIHJlc3VsdCBvZiB0aGUgYGBpbmNsdWRlX2xzYmBgIHBhcmFtZXRlci4KICAgICAgICAgIFRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgbHNiIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9hZGVkLgoKICAgICAgICAqIGBgaW5jbHVkZV91bmFtZWBgIChib29sKTogVGhlIHJlc3VsdCBvZiB0aGUgYGBpbmNsdWRlX3VuYW1lYGAKICAgICAgICAgIHBhcmFtZXRlci4gVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSB1bmFtZSBpbmZvcm1hdGlvbiB3aWxsCiAgICAgICAgICBiZSBsb2FkZWQuCgogICAgICAgIFJhaXNlczoKCiAgICAgICAgKiA6cHk6ZXhjOmBJT0Vycm9yYDogU29tZSBJL08gaXNzdWUgd2l0aCBhbiBvcy1yZWxlYXNlIGZpbGUgb3IgZGlzdHJvCiAgICAgICAgICByZWxlYXNlIGZpbGUuCgogICAgICAgICogOnB5OmV4Yzpgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3JgOiBUaGUgbHNiX3JlbGVhc2UgY29tbWFuZCBoYWQKICAgICAgICAgIHNvbWUgaXNzdWUgKG90aGVyIHRoYW4gbm90IGJlaW5nIGF2YWlsYWJsZSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24KICAgICAgICAgIHBhdGgpLgoKICAgICAgICAqIDpweTpleGM6YFVuaWNvZGVFcnJvcmA6IEEgZGF0YSBzb3VyY2UgaGFzIHVuZXhwZWN0ZWQgY2hhcmFjdGVycyBvcgogICAgICAgICAgdXNlcyBhbiB1bmV4cGVjdGVkIGVuY29kaW5nLgogICAgICAgINoDZXRjegd1c3IvbGlickAAAABOKQ7aCHJvb3RfZGly2gJvc9oEcGF0aNoEam9pbtoMX1VOSVhDT05GRElS2gdldGNfZGly2g5fVU5JWFVTUkxJQkRJUtoLdXNyX2xpYl9kaXLaD29zX3JlbGVhc2VfZmlsZdoUX09TX1JFTEVBU0VfQkFTRU5BTUXaBmlzZmlsZdoTZGlzdHJvX3JlbGVhc2VfZmlsZdoLaW5jbHVkZV9sc2LaDWluY2x1ZGVfdW5hbWUpCHIzAAAAck4AAABySgAAAHJNAAAAck8AAAByQgAAANoXZXRjX2Rpcl9vc19yZWxlYXNlX2ZpbGXaF3Vzcl9saWJfb3NfcmVsZWFzZV9maWxlchQAAAByFAAAAHIVAAAAcjUAAACOAgAAcyQAAAAATwYBGAIU/wQEBAEIAhABBgEG/wQGEgEC/wQDCAIGAgoBBgF6GkxpbnV4RGlzdHJpYnV0aW9uLl9faW5pdF9fYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMMAAAAZAFqAHwAZAKNAVMAKQN6F1JldHVybiByZXByIG9mIGFsbCBpbmZvYWUBAABMaW51eERpc3RyaWJ1dGlvbihvc19yZWxlYXNlX2ZpbGU9e3NlbGYub3NfcmVsZWFzZV9maWxlIXJ9LCBkaXN0cm9fcmVsZWFzZV9maWxlPXtzZWxmLmRpc3Ryb19yZWxlYXNlX2ZpbGUhcn0sIGluY2x1ZGVfbHNiPXtzZWxmLmluY2x1ZGVfbHNiIXJ9LCBpbmNsdWRlX3VuYW1lPXtzZWxmLmluY2x1ZGVfdW5hbWUhcn0sIF9vc19yZWxlYXNlX2luZm89e3NlbGYuX29zX3JlbGVhc2VfaW5mbyFyfSwgX2xzYl9yZWxlYXNlX2luZm89e3NlbGYuX2xzYl9yZWxlYXNlX2luZm8hcn0sIF9kaXN0cm9fcmVsZWFzZV9pbmZvPXtzZWxmLl9kaXN0cm9fcmVsZWFzZV9pbmZvIXJ9LCBfdW5hbWVfaW5m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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
distro.cpython-39.pyc
37.50 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-39.pyc
234.84 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-39.pyc
26.90 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-39.pyc
2.87 KB
lrw-r--r--
2023-11-13 21:47:44
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).