REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 65.34 KB
Close
/opt/alt/python310/lib64/python3.10/logging/__pycache__/__init__.cpython-310.pyc
Text
Base64
bw0NCgAAAADP0+doaDkBAOMAAAAAAAAAAAAAAAAAAAAADAAAAEAAAABz5gMAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWgpkAWQDbAttDFoMAQBkAWQEbAttDVoOAQBnAGQFogFaD2QBZAJsEFoQZAZaEWQHWhJkCFoTZAlaFGUDoAOhAFoVZApaFmQKWhdkCloYZApaGWQLWhplGlobZAxaHGQNWh1lHVoeZA5aH2QPWiBkAVohZRpkEGUcZBFlHWQSZR9kE2UgZBRlIWQVaQZaImUaZRtlHGUdZR1lH2UgZSFkFpwIWiNkF2QYhABaJGQZZBqEAFolZSZlAWQbgwJyiWQcZB2EAFonbgRkHmQfhABaJ2UCaiigKWUlaipqK6EBWixkIGQhhABaLWUQoC6hAFovZCJkI4QAWjBkJGQlhABaMWUmZQJkJoMCc69kJ2QohABaMm4UZQigM6EAWjRkKWQohABaMmQqZCuEAFo1ZQJqNmUwZTVlMWQsjQMBAEcAZC1kLoQAZC5lN4MDWjhlOGE5ZC9kMIQAWjpkMWQyhABaO2QzZDSEAFo8ZQ6DAFo9Ww5HAGQ1ZDaEAGQ2ZTeDA1o+RwBkN2Q4hABkOGU+gwNaP0cAZDlkOoQAZDplPoMDWkBkO1pBZT5lQWYCZT9kPGYCZUBkPWYCZD6cA1pCRwBkP2RAhABkQGU3gwNaDWUNgwBaQ0cAZEFkQoQAZEJlN4MDWkRHAGRDZESEAGREZTeDA1pFRwBkRWRGhABkRmU3gwNaRmUIoEehAFpIZwBaSWRHZEiEAFpKZElkSoQAWktHAGRLZEyEAGRMZUaDA1pMRwBkTWROhABkTmVMgwNaTUcAZE9kUIQAZFBlTYMDWk5HAGRRZFKEAGRSZU2DA1pPZU9lHYMBWlBlUFpRRwBkU2RUhABkVGU3gwNaUmRVZFaEAFpTZFdkWIQAWlRHAGRZZFqEAGRaZTeDA1pVRwBkW2RchABkXGVGgwNaVkcAZF1kXoQAZF5lVoMDWldlVmFYRwBkX2RghABkYGU3gwNaWWVXZR2DAVpaZVplVl9aZVVlVmpagwFlVl9bZGFkYoQAWlxkgmRjZGSEAVpdZGVkZoQAWl5kZ2RohABaX2RpZGqEAFpgZApka5wBZGxkbYQCWmFkbmRvhABaYmRwZHGEAFpjZHJkc4QAWmRkdGR1hABaZWR2ZHeEAFpmZRpmAWR4ZHmEAVpnZUlmAWR6ZHuEAVpoZAFkAmxpWmllaaBqZWihAQEARwBkfGR9hABkfWVMgwNaa2QCYWxkg2R+ZH+EAVptZIBkgYQAWm5kAlMAKYR6wgpMb2dnaW5nIHBhY2thZ2UgZm9yIFB5dGhvbi4gQmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbgpjb21wLmxhbmcucHl0aG9uLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgpUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEK6QAAAABOKQHaCFRlbXBsYXRlKQHaCUZvcm1hdHRlcikq2gxCQVNJQ19GT1JNQVTaEkJ1ZmZlcmluZ0Zvcm1hdHRlctoIQ1JJVElDQUzaBURFQlVH2gVFUlJPUtoFRkFUQUzaC0ZpbGVIYW5kbGVy2gZGaWx0ZXJyAwAAANoHSGFuZGxlctoESU5GT9oJTG9nUmVjb3Jk2gZMb2dnZXLaDUxvZ2dlckFkYXB0ZXLaBk5PVFNFVNoLTnVsbEhhbmRsZXLaDVN0cmVhbUhhbmRsZXLaBFdBUk7aB1dBUk5JTkfaDGFkZExldmVsTmFtZdoLYmFzaWNDb25maWfaD2NhcHR1cmVXYXJuaW5nc9oIY3JpdGljYWzaBWRlYnVn2gdkaXNhYmxl2gVlcnJvctoJZXhjZXB0aW9u2gVmYXRhbNoMZ2V0TGV2ZWxOYW1l2glnZXRMb2dnZXLaDmdldExvZ2dlckNsYXNz2gRpbmZv2gNsb2faDW1ha2VMb2dSZWNvcmTaDnNldExvZ2dlckNsYXNz2ghzaHV0ZG93btoEd2FybtoHd2FybmluZ9oTZ2V0TG9nUmVjb3JkRmFjdG9yedoTc2V0TG9nUmVjb3JkRmFjdG9yedoKbGFzdFJlc29ydNoPcmFpc2VFeGNlcHRpb25zeiZWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPloKcHJvZHVjdGlvbnoHMC41LjEu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ZSBMb2dSZWNvcmQgYXR0cmlidXRlcyAtIGUuZy4gdGhlIGRlZmF1bHQgdmFsdWUgbWVudGlvbmVkCiAgICBhYm92ZSBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgdXNlcidzIG1lc3NhZ2UgYW5kIGFyZ3VtZW50cyBhcmUgcHJlLQogICAgZm9ybWF0dGVkIGludG8gYSBMb2dSZWNvcmQncyBtZXNzYWdlIGF0dHJpYnV0ZS4gQ3VycmVudGx5LCB0aGUgdXNlZnVsCiAgICBhdHRyaWJ1dGVzIGluIGEgTG9nUmVjb3JkIGFyZSBkZXNjcmliZWQgYnk6CgogICAgJShuYW1lKXMgICAgICAgICAgICBOYW1lIG9mIHRoZSBsb2dnZXIgKGxvZ2dpbmcgY2hhbm5lbCkKICAgICUobGV2ZWxubylzICAgICAgICAgTnVtZXJpYyBsb2dnaW5nIGxldmVsIGZvciB0aGUgbWVzc2FnZSAoREVCVUcsIElORk8sCiAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkcsIEVSUk9SLCBDUklUSUNBTCkKICAgICUobGV2ZWxuYW1lKXMgICAgICAgVGV4dCBsb2dnaW5nIGxldmVsIGZvciB0aGUgbWVzc2FnZSAoIkRFQlVHIiwgIklORk8iLAogICAgICAgICAgICAgICAgICAgICAgICAiV0FSTklORyIsICJFUlJPUiIsICJDUklUSUNBTCIpCiAgICAlKHBhdGhuYW1lKXMgICAgICAgIEZ1bGwgcGF0aG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoZSBsb2dnaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwgd2FzIGlzc3VlZCAoaWYgYXZhaWxhYmxlKQogICAgJShmaWxlbmFtZSlzICAgICAgICBGaWxlbmFtZSBwb3J0aW9uIG9mIHBhdGhuYW1lCiAgICAlKG1vZHVsZSlzICAgICAgICAgIE1vZHVsZSAobmFtZSBwb3J0aW9uIG9mIGZpbGVuYW1lKQogICAgJShsaW5lbm8pZCAgICAgICAgICBTb3VyY2UgbGluZSBudW1iZXIgd2hlcmUgdGhlIGxvZ2dpbmcgY2FsbCB3YXMgaXNzdWVkCiAg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ICVIOiVNOiVTegclcywlMDNkYwMAAAAAAAAAAAAAAAUAAAAEAAAAQwAAAHNIAAAAfACgAHwBagGhAX0DfAJyEHQCoAN8AnwDoQJ9BHwEUwB0AqADfABqBHwDoQJ9BHwAagVyInwAagV8BHwBagZmAhYAfQR8BFMAKQFhJQQAAAogICAgICAgIFJldHVybiB0aGUgY3JlYXRpb24gdGltZSBvZiB0aGUgc3BlY2lmaWVkIExvZ1JlY29yZCBhcyBmb3JtYXR0ZWQgdGV4dC4KCiAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGZvcm1hdCgpIGJ5IGEgZm9ybWF0dGVyIHdoaWNoCiAgICAgICAgd2FudHMgdG8gbWFrZSB1c2Ugb2YgYSBmb3JtYXR0ZWQgdGltZS4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4KICAgICAgICBpbiBmb3JtYXR0ZXJzIHRvIHByb3ZpZGUgZm9yIGFueSBzcGVjaWZpYyByZXF1aXJlbWVudCwgYnV0IHRoZQogICAgICAgIGJhc2ljIGJlaGF2aW91ciBpcyBhcyBmb2xsb3dzOiBpZiBkYXRlZm10IChhIHN0cmluZykgaXMgc3BlY2lmaWVkLAogICAgICAgIGl0IGlzIHVzZWQgd2l0aCB0aW1lLnN0cmZ0aW1lKCkgdG8gZm9ybWF0IHRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZQogICAgICAgIHJlY29yZC4gT3RoZXJ3aXNlLCBhbiBJU084NjAxLWxpa2UgKG9yIFJGQyAzMzM5LWxpa2UpIGZvcm1hdCBpcyB1c2VkLgogICAgICAgIFRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYSB1c2VyLWNvbmZpZ3VyYWJsZQogICAgICAgIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhlIGNyZWF0aW9uIHRpbWUgdG8gYSB0dXBsZS4gQnkgZGVmYXVsdCwKICAgICAgICB0aW1lLmxvY2FsdGltZSgpIGlzIHVzZWQ7IHRvIGNoYW5nZSB0aGlzIGZvciBhIHBhcnRpY3VsYXIgZm9ybWF0dGVyCiAgICAgICAgaW5zdGFuY2Us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YXVsdCBiZWhhdmlvdXIgaXMgdG8gY3JlYXRlIGEgU3RyZWFtSGFuZGxlciB3aGljaCB3cml0ZXMgdG8KICAgIHN5cy5zdGRlcnIsIHNldCBhIGZvcm1hdHRlciB1c2luZyB0aGUgQkFTSUNfRk9STUFUIGZvcm1hdCBzdHJpbmcsIGFuZAogICAgYWRkIHRoZSBoYW5kbGVyIHRvIHRoZSByb290IGxvZ2dlci4KCiAgICBBIG51bWJlciBvZiBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBtYXkgYmUgc3BlY2lmaWVkLCB3aGljaCBjYW4gYWx0ZXIKICAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KCiAgICBmaWxlbmFtZSAgU3BlY2lmaWVzIHRoYXQgYSBGaWxlSGFuZGxlciBiZSBjcmVhdGVkLCB1c2luZyB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgZmlsZW5hbWUsIHJhdGhlciB0aGFuIGEgU3RyZWFtSGFuZGxlci4KICAgIGZpbGVtb2RlICBTcGVjaWZpZXMgdGhlIG1vZGUgdG8gb3BlbiB0aGUgZmlsZSwgaWYgZmlsZW5hbWUgaXMgc3BlY2lmaWVkCiAgICAgICAgICAgICAgKGlmIGZpbGVtb2RlIGlzIHVuc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAnYScpLgogICAgZm9ybWF0ICAgIFVzZSB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBoYW5kbGVyLgogICAgZGF0ZWZtdCAgIFVzZSB0aGUgc3BlY2lmaWVkIGRhdGUvdGltZSBmb3JtYXQuCiAgICBzdHlsZSAgICAgSWYgYSBmb3JtYXQgc3RyaW5nIGlzIHNwZWNpZmllZCwgdXNlIHRoaXMgdG8gc3BlY2lmeSB0aGUKICAgICAgICAgICAgICB0eXBlIG9mIGZvcm1hdCBzdHJpbmcgKHBvc3NpYmxlIHZhbHVlcyAnJScsICd7JywgJyQnLCBmb3IKICAgICAgICAgICAgICAlLWZvcm1hdHRpbmcsIDptZXRoOmBzdHIuZm9ybWF0YCBhbmQgOmNsYXNzOmBzdHJpbmcuVGVtcGxhdGVgCiAgICAgICAgICAgICAgLSBkZWZhdWx0cyB0byAnJScpLgogICAgbGV2ZWwgICAgIFNldCB0aGUgcm9vdCBsb2dnZXIgbGV2ZWwgdG8gdGhlIHNwZWNpZmllZCBsZXZlbC4KICAgIHN0cmVhbSAgICBVc2UgdGhlIHNwZWNpZmllZCBzdHJlYW0gdG8gaW5pdGlhbGl6ZSB0aGUgU3RyZWFtSGFuZGxlci4gTm90ZQogICAgICAgICAgICAgIHRoYXQgdGhpcyBhcmd1bWVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAnZmlsZW5hbWUnIC0gaWYgYm90aAogICAgICAgICAgICAgIGFyZSBwcmVzZW50LCAnc3RyZWFtJyBpcyBpZ25vcmVkLgogICAgaGFuZGxlcnMgIElmIHNwZWNpZmllZCwgdGhpcyBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgYWxyZWFkeSBjcmVhdGVkCiAgICAgICAgICAgICAgaGFuZGxlcnMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJvb3QgaGFuZGxlci4gQW55IGhhbmRsZXIKICAgICAgICAgICAgICBpbiB0aGUgbGlzdCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgZm9ybWF0dGVyIGFzc2lnbmVkIHdpbGwgYmUKICAgICAgICAgICAgICBhc3NpZ25lZCB0aGUgZm9ybWF0dGVyIGNyZWF0ZWQgaW4gdGhpcyBmdW5jdGlvbi4KICAgIGZvcmNlICAgICBJZiB0aGlzIGtleXdvcmQgIGlzIHNwZWNpZmllZCBhcyB0cnVlLCBhbnkgZXhpc3RpbmcgaGFuZGxlcnMKICAgICAgICAgICAgICBhdHRhY2hlZCB0byB0aGUgcm9vdCBsb2dnZXIgYXJlIHJlbW92ZWQgYW5kIGNsb3NlZCwgYmVmb3JlCiAgICAgICAgICAgICAgY2Fycnlpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUgb3RoZXIKICAgICAgICAgICAgICBhcmd1bWVudHMuCiAgICBlbmNvZGluZyAgSWYgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYSBmaWxlbmFtZSwgdGhpcyBlbmNvZGluZyBpcyBwYXNzZWQgdG8KICAgICAgICAgICAgICB0aGUgY3JlYXRlZCBGaWxlSGFuZGxlciwgY2F1c2luZyBpdCB0byBiZSB1c2VkIHdoZW4gdGhlIGZpbGUgaXMKICAgICAgICAgICAgICBvcGVuZWQuCiAgICBlcnJvcnMgICAgSWYgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYSBmaWxlbmFtZSwgdGhpcyB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlCiAgICAgICAgICAgICAgY3JlYXRlZCBGaWxlSGFuZGxlciwgY2F1c2luZyBpdCB0byBiZSB1c2VkIHdoZW4gdGhlIGZpbGUgaXMKICAgICAgICAgICAgICBvcGVuZWQgaW4gdGV4dCBtb2RlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcwogICAgICAgICAgICAgIGBiYWNrc2xhc2hyZXBsYWNlYC4KCiAgICBOb3RlIHRoYXQgeW91IGNvdWxkIHNwZWNpZnkgYSBzdHJlYW0gY3JlYXRlZCB1c2luZyBvcGVuKGZpbGVuYW1lLCBtb2RlKQogICAgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUgZmlsZW5hbWUgYW5kIG1vZGUgaW4uIEhvd2V2ZXIsIGl0IHNob3VsZCBiZQogICAgcmVtZW1iZXJlZCB0aGF0IFN0cmVhbUhhbmRsZXIgZG9lcyBub3QgY2xvc2UgaXRzIHN0cmVhbSAoc2luY2UgaXQgbWF5IGJlCiAgICB1c2luZyBzeXMuc3Rkb3V0IG9yIHN5cy5zdGRlcnIpLCB3aGVyZWFzIEZpbGVIYW5kbGVyIGNsb3NlcyBpdHMgc3RyZWFtCiAgICB3aGVuIHRoZSBoYW5kbGVyIGlzIGNsb3NlZC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWRkZWQgdGhlIGBgc3R5bGVgYCBwYXJhbWV0ZXIuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHRoZSBgYGhhbmRsZXJzYGAgcGFyYW1ldGVyLiBBIGBgVmFsdWVFcnJvcmBgIGlzIG5vdyB0aHJvd24gZm9yCiAgICAgICBpbmNvbXBhdGlibGUgYXJndW1lbnRzIChlLmcuIGBgaGFu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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
config.cpython-310.opt-1.pyc
22.63 KB
lrw-r--r--
2026-01-09 14:06:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-310.opt-2.pyc
18.75 KB
lrw-r--r--
2026-01-09 14:06:37
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-310.pyc
22.66 KB
lrw-r--r--
2026-01-09 14:06:34
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-310.opt-1.pyc
43.65 KB
lrw-r--r--
2026-01-09 14:06:34
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-310.opt-2.pyc
25.54 KB
lrw-r--r--
2026-01-09 14:06:37
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-310.pyc
43.65 KB
lrw-r--r--
2026-01-09 14:06:34
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.opt-1.pyc
65.32 KB
lrw-r--r--
2026-01-09 14:06:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.opt-2.pyc
37.01 KB
lrw-r--r--
2026-01-09 14:06:37
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-310.pyc
65.34 KB
lrw-r--r--
2026-01-09 14:06:34
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).