Hunzla commited on
Commit
9754907
·
1 Parent(s): 4f00c1c

Upload 8589 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +7 -0
  2. myworld/Lib/site-packages/Django-4.2.2.dist-info/AUTHORS +1065 -0
  3. myworld/Lib/site-packages/Django-4.2.2.dist-info/INSTALLER +1 -0
  4. myworld/Lib/site-packages/Django-4.2.2.dist-info/LICENSE +27 -0
  5. myworld/Lib/site-packages/Django-4.2.2.dist-info/LICENSE.python +290 -0
  6. myworld/Lib/site-packages/Django-4.2.2.dist-info/METADATA +98 -0
  7. myworld/Lib/site-packages/Django-4.2.2.dist-info/RECORD +0 -0
  8. myworld/Lib/site-packages/Django-4.2.2.dist-info/REQUESTED +0 -0
  9. myworld/Lib/site-packages/Django-4.2.2.dist-info/WHEEL +5 -0
  10. myworld/Lib/site-packages/Django-4.2.2.dist-info/entry_points.txt +2 -0
  11. myworld/Lib/site-packages/Django-4.2.2.dist-info/top_level.txt +1 -0
  12. myworld/Lib/site-packages/PyInstaller/__init__.py +67 -0
  13. myworld/Lib/site-packages/PyInstaller/__main__.py +198 -0
  14. myworld/Lib/site-packages/PyInstaller/__pycache__/__init__.cpython-311.pyc +0 -0
  15. myworld/Lib/site-packages/PyInstaller/__pycache__/__main__.cpython-311.pyc +0 -0
  16. myworld/Lib/site-packages/PyInstaller/__pycache__/_recursion_too_deep_message.cpython-311.pyc +0 -0
  17. myworld/Lib/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-311.pyc +0 -0
  18. myworld/Lib/site-packages/PyInstaller/__pycache__/compat.cpython-311.pyc +0 -0
  19. myworld/Lib/site-packages/PyInstaller/__pycache__/config.cpython-311.pyc +0 -0
  20. myworld/Lib/site-packages/PyInstaller/__pycache__/configure.cpython-311.pyc +0 -0
  21. myworld/Lib/site-packages/PyInstaller/__pycache__/exceptions.cpython-311.pyc +0 -0
  22. myworld/Lib/site-packages/PyInstaller/__pycache__/log.cpython-311.pyc +0 -0
  23. myworld/Lib/site-packages/PyInstaller/_recursion_too_deep_message.py +45 -0
  24. myworld/Lib/site-packages/PyInstaller/_shared_with_waf.py +86 -0
  25. myworld/Lib/site-packages/PyInstaller/archive/__init__.py +1 -0
  26. myworld/Lib/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-311.pyc +0 -0
  27. myworld/Lib/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-311.pyc +0 -0
  28. myworld/Lib/site-packages/PyInstaller/archive/__pycache__/readers.cpython-311.pyc +0 -0
  29. myworld/Lib/site-packages/PyInstaller/archive/__pycache__/writers.cpython-311.pyc +0 -0
  30. myworld/Lib/site-packages/PyInstaller/archive/pyz_crypto.py +48 -0
  31. myworld/Lib/site-packages/PyInstaller/archive/readers.py +221 -0
  32. myworld/Lib/site-packages/PyInstaller/archive/writers.py +402 -0
  33. myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/run.exe +0 -0
  34. myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/run_d.exe +0 -0
  35. myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/runw.exe +0 -0
  36. myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/runw_d.exe +0 -0
  37. myworld/Lib/site-packages/PyInstaller/bootloader/images/icon-console.ico +0 -0
  38. myworld/Lib/site-packages/PyInstaller/bootloader/images/icon-windowed.ico +0 -0
  39. myworld/Lib/site-packages/PyInstaller/building/__init__.py +1 -0
  40. myworld/Lib/site-packages/PyInstaller/building/__pycache__/__init__.cpython-311.pyc +0 -0
  41. myworld/Lib/site-packages/PyInstaller/building/__pycache__/api.cpython-311.pyc +0 -0
  42. myworld/Lib/site-packages/PyInstaller/building/__pycache__/build_main.cpython-311.pyc +0 -0
  43. myworld/Lib/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-311.pyc +0 -0
  44. myworld/Lib/site-packages/PyInstaller/building/__pycache__/icon.cpython-311.pyc +0 -0
  45. myworld/Lib/site-packages/PyInstaller/building/__pycache__/makespec.cpython-311.pyc +0 -0
  46. myworld/Lib/site-packages/PyInstaller/building/__pycache__/osx.cpython-311.pyc +0 -0
  47. myworld/Lib/site-packages/PyInstaller/building/__pycache__/splash.cpython-311.pyc +0 -0
  48. myworld/Lib/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-311.pyc +0 -0
  49. myworld/Lib/site-packages/PyInstaller/building/__pycache__/templates.cpython-311.pyc +0 -0
  50. myworld/Lib/site-packages/PyInstaller/building/__pycache__/toc_conversion.cpython-311.pyc +0 -0
.gitattributes CHANGED
@@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ myworld/Lib/site-packages/lxml/etree.cp311-win_amd64.pyd filter=lfs diff=lfs merge=lfs -text
37
+ myworld/Lib/site-packages/lxml/objectify.cp311-win_amd64.pyd filter=lfs diff=lfs merge=lfs -text
38
+ myworld/Lib/site-packages/pyarmor/platforms/darwin/x86_64/_pytransform.dylib filter=lfs diff=lfs merge=lfs -text
39
+ myworld/Lib/site-packages/pyarmor/platforms/linux/x86_64/_pytransform.so filter=lfs diff=lfs merge=lfs -text
40
+ myworld/Lib/site-packages/pyarmor/platforms/linux/x86/_pytransform.so filter=lfs diff=lfs merge=lfs -text
41
+ myworld/Lib/site-packages/pyarmor/platforms/windows/x86_64/_pytransform.dll filter=lfs diff=lfs merge=lfs -text
42
+ myworld/Lib/site-packages/pyarmor/platforms/windows/x86/_pytransform.dll filter=lfs diff=lfs merge=lfs -text
myworld/Lib/site-packages/Django-4.2.2.dist-info/AUTHORS ADDED
@@ -0,0 +1,1065 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Django was originally created in late 2003 at World Online, the web division
2
+ of the Lawrence Journal-World newspaper in Lawrence, Kansas.
3
+
4
+ Here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
5
+ people who have submitted patches, reported bugs, added translations, helped
6
+ answer newbie questions, and generally made Django that much better:
7
+
8
+ Aaron Cannon <cannona@fireantproductions.com>
9
+ Aaron Swartz <http://www.aaronsw.com/>
10
+ Aaron T. Myers <atmyers@gmail.com>
11
+ Abeer Upadhyay <ab.esquarer@gmail.com>
12
+ Abhijeet Viswa <abhijeetviswa@gmail.com>
13
+ Abhinav Patil <https://github.com/ubadub/>
14
+ Abhinav Yadav <abhinav.sny.2002+django@gmail.com>
15
+ Abhishek Gautam <abhishekg1128@yahoo.com>
16
+ Abhyudai <https://github.com/abhiabhi94>
17
+ Adam Allred <adam.w.allred@gmail.com>
18
+ Adam Bogdał <adam@bogdal.pl>
19
+ Adam Donaghy
20
+ Adam Johnson <https://github.com/adamchainz>
21
+ Adam Malinowski <https://adammalinowski.co.uk/>
22
+ Adam Vandenberg
23
+ Ade Lee <alee@redhat.com>
24
+ Adiyat Mubarak <adiyatmubarak@gmail.com>
25
+ Adnan Umer <u.adnan@outlook.com>
26
+ Arslan Noor <arslannoorpansota@gmail.com>
27
+ Adrian Holovaty <adrian@holovaty.com>
28
+ Adrian Torres <atorresj@redhat.com>
29
+ Adrien Lemaire <lemaire.adrien@gmail.com>
30
+ Afonso Fernández Nogueira <fonzzo.django@gmail.com>
31
+ AgarFu <heaven@croasanaso.sytes.net>
32
+ Ahmad Alhashemi <trans@ahmadh.com>
33
+ Ahmad Al-Ibrahim
34
+ Ahmed Eltawela <https://github.com/ahmedabt>
35
+ ajs <adi@sieker.info>
36
+ Akash Agrawal <akashrocksha@gmail.com>
37
+ Akis Kesoglou <akiskesoglou@gmail.com>
38
+ Aksel Ethem <aksel.ethem@gmail.com>
39
+ Akshesh Doshi <aksheshdoshi+django@gmail.com>
40
+ alang@bright-green.com
41
+ Alasdair Nicol <https://al.sdair.co.uk/>
42
+ Albert Wang <https://github.com/albertyw/>
43
+ Alcides Fonseca
44
+ Aldian Fazrihady <mobile@aldian.net>
45
+ Aleksandra Sendecka <asendecka@hauru.eu>
46
+ Aleksi Häkli <aleksi.hakli@iki.fi>
47
+ Alex Dutton <django@alexdutton.co.uk>
48
+ Alexander Myodov <alex@myodov.com>
49
+ Alexandr Tatarinov <tatarinov.dev@gmail.com>
50
+ Alex Aktsipetrov <alex.akts@gmail.com>
51
+ Alex Becker <https://alexcbecker.net/>
52
+ Alex Couper <http://alexcouper.com/>
53
+ Alex Dedul
54
+ Alex Gaynor <alex.gaynor@gmail.com>
55
+ Alex Hill <alex@hill.net.au>
56
+ Alex Ogier <alex.ogier@gmail.com>
57
+ Alex Robbins <alexander.j.robbins@gmail.com>
58
+ Alexey Boriskin <alex@boriskin.me>
59
+ Alexey Tsivunin <most-208@yandex.ru>
60
+ Ali Vakilzade <ali@vakilzade.com>
61
+ Aljaž Košir <aljazkosir5@gmail.com>
62
+ Aljosa Mohorovic <aljosa.mohorovic@gmail.com>
63
+ Alokik Vijay <alokik.roe@gmail.com>
64
+ Amit Chakradeo <https://amit.chakradeo.net/>
65
+ Amit Ramon <amit.ramon@gmail.com>
66
+ Amit Upadhyay <http://www.amitu.com/blog/>
67
+ A. Murat Eren <meren@pardus.org.tr>
68
+ Ana Belen Sarabia <belensarabia@gmail.com>
69
+ Ana Krivokapic <https://github.com/infraredgirl>
70
+ Andi Albrecht <albrecht.andi@gmail.com>
71
+ André Ericson <de.ericson@gmail.com>
72
+ Andrei Kulakov <andrei.avk@gmail.com>
73
+ Andreas
74
+ Andreas Mock <andreas.mock@web.de>
75
+ Andreas Pelme <andreas@pelme.se>
76
+ Andrés Torres Marroquín <andres.torres.marroquin@gmail.com>
77
+ Andrew Brehaut <https://brehaut.net/blog>
78
+ Andrew Clark <amclark7@gmail.com>
79
+ Andrew Durdin <adurdin@gmail.com>
80
+ Andrew Godwin <andrew@aeracode.org>
81
+ Andrew Pinkham <http://AndrewsForge.com>
82
+ Andrews Medina <andrewsmedina@gmail.com>
83
+ Andrew Northall <andrew@northall.me.uk>
84
+ Andriy Sokolovskiy <me@asokolovskiy.com>
85
+ Andy Chosak <andy@chosak.org>
86
+ Andy Dustman <farcepest@gmail.com>
87
+ Andy Gayton <andy-django@thecablelounge.com>
88
+ andy@jadedplanet.net
89
+ Anssi Kääriäinen <akaariai@gmail.com>
90
+ ant9000@netwise.it
91
+ Anthony Briggs <anthony.briggs@gmail.com>
92
+ Anthony Wright <ryow.college@gmail.com>
93
+ Anton Samarchyan <desecho@gmail.com>
94
+ Antoni Aloy
95
+ Antonio Cavedoni <http://cavedoni.com/>
96
+ Antonis Christofides <anthony@itia.ntua.gr>
97
+ Antti Haapala <antti@industrialwebandmagic.com>
98
+ Antti Kaihola <http://djangopeople.net/akaihola/>
99
+ Anubhav Joshi <anubhav9042@gmail.com>
100
+ Anvesh Mishra <anveshgreat11@gmail.com>
101
+ Aram Dulyan
102
+ arien <regexbot@gmail.com>
103
+ Armin Ronacher
104
+ Aron Podrigal <aronp@guaranteedplus.com>
105
+ Arsalan Ghassemi <arsalan.ghassemi@gmail.com>
106
+ Artem Gnilov <boobsd@gmail.com>
107
+ Arthur <avandorp@gmail.com>
108
+ Arthur Jovart <arthur@jovart.com>
109
+ Arthur Koziel <http://arthurkoziel.com>
110
+ Arthur Rio <arthur.rio44@gmail.com>
111
+ Arvis Bickovskis <viestards.lists@gmail.com>
112
+ Arya Khaligh <bartararya@gmail.com>
113
+ Aryeh Leib Taurog <http://www.aryehleib.com/>
114
+ A S Alam <aalam@users.sf.net>
115
+ Asif Saif Uddin <auvipy@gmail.com>
116
+ atlithorn <atlithorn@gmail.com>
117
+ Audrey Roy <http://audreymroy.com/>
118
+ av0000@mail.ru
119
+ Axel Haustant <noirbizarre@gmail.com>
120
+ Aymeric Augustin <aymeric.augustin@m4x.org>
121
+ Bahadır Kandemir <bahadir@pardus.org.tr>
122
+ Baishampayan Ghose
123
+ Baptiste Mispelon <bmispelon@gmail.com>
124
+ Barry Pederson <bp@barryp.org>
125
+ Bartolome Sanchez Salado <i42sasab@uco.es>
126
+ Barton Ip <notbartonip@gmail.com>
127
+ Bartosz Grabski <bartosz.grabski@gmail.com>
128
+ Bashar Al-Abdulhadi
129
+ Bastian Kleineidam <calvin@debian.org>
130
+ Batiste Bieler <batiste.bieler@gmail.com>
131
+ Batman
132
+ Batuhan Taskaya <batuhanosmantaskaya@gmail.com>
133
+ Baurzhan Ismagulov <ibr@radix50.net>
134
+ Ben Dean Kawamura <ben.dean.kawamura@gmail.com>
135
+ Ben Firshman <ben@firshman.co.uk>
136
+ Ben Godfrey <http://aftnn.org>
137
+ Benjamin Wohlwend <piquadrat@gmail.com>
138
+ Ben Khoo <khoobks@westnet.com.au>
139
+ Ben Slavin <benjamin.slavin@gmail.com>
140
+ Ben Sturmfels <ben@sturm.com.au>
141
+ Berker Peksag <berker.peksag@gmail.com>
142
+ Bernd Schlapsi
143
+ Bernhard Essl <me@bernhardessl.com>
144
+ berto
145
+ Bhuvnesh Sharma <bhuvnesh875@gmail.com>
146
+ Bill Fenner <fenner@gmail.com>
147
+ Bjørn Stabell <bjorn@exoweb.net>
148
+ Bo Marchman <bo.marchman@gmail.com>
149
+ Bogdan Mateescu
150
+ Bojan Mihelac <bmihelac@mihelac.org>
151
+ Bouke Haarsma <bouke@haarsma.eu>
152
+ Božidar Benko <bbenko@gmail.com>
153
+ Brad Melin <melinbrad@gmail.com>
154
+ Brandon Chinn <https://brandonchinn178.github.io/>
155
+ Brant Harris
156
+ Brendan Hayward <brendanhayward85@gmail.com>
157
+ Brendan Quinn <brendan@cluefulmedia.com>
158
+ Brenton Simpson <http://theillustratedlife.com>
159
+ Brett Cannon <brett@python.org>
160
+ Brett Hoerner <bretthoerner@bretthoerner.com>
161
+ Brian Beck <http://blog.brianbeck.com/>
162
+ Brian Fabian Crain <http://www.bfc.do/>
163
+ Brian Harring <ferringb@gmail.com>
164
+ Brian Helba <brian.helba@kitware.com>
165
+ Brian Ray <http://brianray.chipy.org/>
166
+ Brian Rosner <brosner@gmail.com>
167
+ Bruce Kroeze <https://coderseye.com/>
168
+ Bruno Alla <alla.brunoo@gmail.com>
169
+ Bruno Renié <buburno@gmail.com>
170
+ brut.alll@gmail.com
171
+ Bryan Chow <bryan at verdjn dot com>
172
+ Bryan Veloso <bryan@revyver.com>
173
+ bthomas
174
+ btoll@bestweb.net
175
+ C8E
176
+ Caio Ariede <caio.ariede@gmail.com>
177
+ Calvin Spealman <ironfroggy@gmail.com>
178
+ Cameron Curry
179
+ Cameron Knight (ckknight)
180
+ Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
181
+ Can Sarıgöl <ertugrulsarigol@gmail.com>
182
+ Carl Meyer <carl@oddbird.net>
183
+ Carles Pina i Estany <carles@pina.cat>
184
+ Carlos Eduardo de Paula <carlosedp@gmail.com>
185
+ Carlos Matías de la Torre <cmdelatorre@gmail.com>
186
+ Carlton Gibson <carlton.gibson@noumenal.es>
187
+ cedric@terramater.net
188
+ Chad Whitman <chad.whitman@icloud.com>
189
+ ChaosKCW
190
+ Charlie Leifer <coleifer@gmail.com>
191
+ charly.wilhelm@gmail.com
192
+ Chason Chaffin <chason@gmail.com>
193
+ Cheng Zhang
194
+ Chris Adams
195
+ Chris Beaven <smileychris@gmail.com>
196
+ Chris Bennett <chrisrbennett@yahoo.com>
197
+ Chris Cahoon <chris.cahoon@gmail.com>
198
+ Chris Chamberlin <dja@cdc.msbx.net>
199
+ Chris Jerdonek
200
+ Chris Jones <chris@brack3t.com>
201
+ Chris Lamb <chris@chris-lamb.co.uk>
202
+ Chris Streeter <chris@chrisstreeter.com>
203
+ Christian Barcenas <christian@cbarcenas.com>
204
+ Christian Metts
205
+ Christian Oudard <christian.oudard@gmail.com>
206
+ Christian Tanzer <tanzer@swing.co.at>
207
+ Christoffer Sjöbergsson
208
+ Christophe Pettus <xof@thebuild.com>
209
+ Christopher Adams <http://christopheradams.info>
210
+ Christopher Babiak <chrisbabiak@gmail.com>
211
+ Christopher Lenz <https://www.cmlenz.net/>
212
+ Christoph Mędrela <chris.medrela@gmail.com>
213
+ Chris Wagner <cw264701@ohio.edu>
214
+ Chris Wesseling <Chris.Wesseling@cwi.nl>
215
+ Chris Wilson <chris+github@qwirx.com>
216
+ Ciaran McCormick <ciaran@ciaranmccormick.com>
217
+ Claude Paroz <claude@2xlibre.net>
218
+ Clint Ecker
219
+ colin@owlfish.com
220
+ Colin Wood <cwood06@gmail.com>
221
+ Collin Anderson <cmawebsite@gmail.com>
222
+ Collin Grady <collin@collingrady.com>
223
+ Colton Hicks <coltonbhicks@gmail.com>
224
+ Craig Blaszczyk <masterjakul@gmail.com>
225
+ crankycoder@gmail.com
226
+ Curtis Maloney (FunkyBob) <curtis@tinbrain.net>
227
+ dackze+django@gmail.com
228
+ Dagur Páll Ammendrup <dagurp@gmail.com>
229
+ Dane Springmeyer
230
+ Dan Fairs <dan@fezconsulting.com>
231
+ Daniel Alves Barbosa de Oliveira Vaz <danielvaz@gmail.com>
232
+ Daniel Duan <DaNmarner@gmail.com>
233
+ Daniele Procida <daniele@vurt.org>
234
+ Daniel Fairhead <danthedeckie@gmail.com>
235
+ Daniel Greenfeld
236
+ dAniel hAhler
237
+ Daniel Jilg <daniel@breakthesystem.org>
238
+ Daniel Lindsley <daniel@toastdriven.com>
239
+ Daniel Poelzleithner <https://poelzi.org/>
240
+ Daniel Pyrathon <pirosb3@gmail.com>
241
+ Daniel Roseman <http://roseman.org.uk/>
242
+ Daniel Tao <https://philosopherdeveloper.com/>
243
+ Daniel Wiesmann <daniel.wiesmann@gmail.com>
244
+ Danilo Bargen
245
+ Dan Johnson <danj.py@gmail.com>
246
+ Dan Palmer <dan@danpalmer.me>
247
+ Dan Poirier <poirier@pobox.com>
248
+ Dan Stephenson <http://dan.io/>
249
+ Dan Watson <http://danwatson.net/>
250
+ dave@thebarproject.com
251
+ David Ascher <https://ascher.ca/>
252
+ David Avsajanishvili <avsd05@gmail.com>
253
+ David Blewett <david@dawninglight.net>
254
+ David Brenneman <http://davidbrenneman.com>
255
+ David Cramer <dcramer@gmail.com>
256
+ David Danier <david.danier@team23.de>
257
+ David Eklund
258
+ David Foster <david@dafoster.net>
259
+ David Gouldin <dgouldin@gmail.com>
260
+ david@kazserve.org
261
+ David Krauth
262
+ David Larlet <https://larlet.fr/david/>
263
+ David Reynolds <david@reynoldsfamily.org.uk>
264
+ David Sanders <dsanders11@ucsbalum.com>
265
+ David Schein
266
+ David Tulig <david.tulig@gmail.com>
267
+ David Winterbottom <david.winterbottom@gmail.com>
268
+ David Wobrock <david.wobrock@gmail.com>
269
+ Davide Ceretti <dav.ceretti@gmail.com>
270
+ Deep L. Sukhwani <deepsukhwani@gmail.com>
271
+ Deepak Thukral <deep.thukral@gmail.com>
272
+ Denis Kuzmichyov <kuzmichyov@gmail.com>
273
+ Dennis Schwertel <dennisschwertel@gmail.com>
274
+ Derek Willis <http://blog.thescoop.org/>
275
+ Deric Crago <deric.crago@gmail.com>
276
+ deric@monowerks.com
277
+ Deryck Hodge <http://www.devurandom.org/>
278
+ Dimitris Glezos <dimitris@glezos.com>
279
+ Dirk Datzert <dummy@habmalnefrage.de>
280
+ Dirk Eschler <dirk.eschler@gmx.net>
281
+ Dmitri Fedortchenko <zeraien@gmail.com>
282
+ Dmitry Jemerov <intelliyole@gmail.com>
283
+ dne@mayonnaise.net
284
+ Dolan Antenucci <antenucci.d@gmail.com>
285
+ Donald Harvey <donald@donaldharvey.co.uk>
286
+ Donald Stufft <donald@stufft.io>
287
+ Don Spaulding <donspauldingii@gmail.com>
288
+ Doug Beck <doug@douglasbeck.com>
289
+ Doug Napoleone <doug@dougma.com>
290
+ dready <wil@mojipage.com>
291
+ dusk@woofle.net
292
+ Dustyn Gibson <miigotu@gmail.com>
293
+ Ed Morley <https://github.com/edmorley>
294
+ Egidijus Macijauskas <e.macijauskas@outlook.com>
295
+ eibaan@gmail.com
296
+ elky <http://elky.me/>
297
+ Emmanuelle Delescolle <https://github.com/nanuxbe>
298
+ Emil Stenström <em@kth.se>
299
+ enlight
300
+ Enrico <rico.bl@gmail.com>
301
+ Eric Boersma <eric.boersma@gmail.com>
302
+ Eric Brandwein <brandweineric@gmail.com>
303
+ Eric Floehr <eric@intellovations.com>
304
+ Eric Florenzano <floguy@gmail.com>
305
+ Eric Holscher <http://ericholscher.com>
306
+ Eric Moritz <http://eric.themoritzfamily.com/>
307
+ Eric Palakovich Carr <carreric@gmail.com>
308
+ Erik Karulf <erik@karulf.com>
309
+ Erik Romijn <django@solidlinks.nl>
310
+ eriks@win.tue.nl
311
+ Erwin Junge <erwin@junge.nl>
312
+ Esdras Beleza <linux@esdrasbeleza.com>
313
+ Espen Grindhaug <http://grindhaug.org/>
314
+ Étienne Beaulé <beauleetienne0@gmail.com>
315
+ Eugene Lazutkin <http://lazutkin.com/blog/>
316
+ Evan Grim <https://github.com/egrim>
317
+ Fabian Büchler <fabian.buechler@inoqo.com>
318
+ Fabrice Aneche <akh@nobugware.com>
319
+ Farhaan Bukhsh <farhaan.bukhsh@gmail.com>
320
+ favo@exoweb.net
321
+ fdr <drfarina@gmail.com>
322
+ Federico Capoano <nemesis@ninux.org>
323
+ Felipe Lee <felipe.lee.garcia@gmail.com>
324
+ Filip Noetzel <http://filip.noetzel.co.uk/>
325
+ Filip Wasilewski <filip.wasilewski@gmail.com>
326
+ Finn Gruwier Larsen <finn@gruwier.dk>
327
+ Fiza Ashraf <fizaashraf37@gmail.com>
328
+ Flávio Juvenal da Silva Junior <flavio@vinta.com.br>
329
+ flavio.curella@gmail.com
330
+ Florian Apolloner <florian@apolloner.eu>
331
+ Florian Demmer <fdemmer@gmail.com>
332
+ Florian Moussous <florian.moussous@gmail.com>
333
+ fnaimi66 <https://github.com/fnaimi66>
334
+ Fran Hrženjak <fran.hrzenjak@gmail.com>
335
+ Francesco Panico <panico.francesco@gmail.com>
336
+ Francisco Albarran Cristobal <pahko.xd@gmail.com>
337
+ Francisco Couzo <franciscouzo@gmail.com>
338
+ François Freitag <mail@franek.fr>
339
+ Frank Tegtmeyer <fte@fte.to>
340
+ Frank Wierzbicki
341
+ Frank Wiles <frank@revsys.com>
342
+ František Malina <https://unilexicon.com/fm/>
343
+ Fraser Nevett <mail@nevett.org>
344
+ Gabriel Grant <g@briel.ca>
345
+ Gabriel Hurley <gabriel@strikeawe.com>
346
+ gandalf@owca.info
347
+ Garry Lawrence
348
+ Garry Polley <garrympolley@gmail.com>
349
+ Garth Kidd <http://www.deadlybloodyserious.com/>
350
+ Gary Wilson <gary.wilson@gmail.com>
351
+ Gasper Koren
352
+ Gasper Zejn <zejn@kiberpipa.org>
353
+ Gav O'Connor <https://github.com/Scalamoosh>
354
+ Gavin Wahl <gavinwahl@gmail.com>
355
+ Ge Hanbin <xiaomiba0904@gmail.com>
356
+ geber@datacollect.com
357
+ Geert Vanderkelen
358
+ George Karpenkov <george@metaworld.ru>
359
+ George Song <george@damacy.net>
360
+ George Vilches <gav@thataddress.com>
361
+ Georg "Hugo" Bauer <gb@hugo.westfalen.de>
362
+ Georgi Stanojevski <glisha@gmail.com>
363
+ Gerardo Orozco <gerardo.orozco.mosqueda@gmail.com>
364
+ Gil Gonçalves <lursty@gmail.com>
365
+ Girish Kumar <girishkumarkh@gmail.com>
366
+ Girish Sontakke <girishsontakke7@gmail.com>
367
+ Gisle Aas <gisle@aas.no>
368
+ Glenn Maynard <glenn@zewt.org>
369
+ glin@seznam.cz
370
+ GomoX <gomo@datafull.com>
371
+ Gonzalo Saavedra <gonzalosaavedra@gmail.com>
372
+ Gopal Narayanan <gopastro@gmail.com>
373
+ Graham Carlyle <graham.carlyle@maplecroft.net>
374
+ Grant Jenks <contact@grantjenks.com>
375
+ Greg Chapple <gregchapple1@gmail.com>
376
+ Greg Twohig
377
+ Gregor Allensworth <greg.allensworth@gmail.com>
378
+ Gregor Müllegger <gregor@muellegger.de>
379
+ Grigory Fateyev <greg@dial.com.ru>
380
+ Grzegorz Ślusarek <grzegorz.slusarek@gmail.com>
381
+ Guilherme Mesquita Gondim <semente@taurinus.org>
382
+ Guillaume Pannatier <guillaume.pannatier@gmail.com>
383
+ Gustavo Picon
384
+ hambaloney
385
+ Hang Park <hangpark@kaist.ac.kr>
386
+ Hannes Ljungberg <hannes.ljungberg@gmail.com>
387
+ Hannes Struß <x@hannesstruss.de>
388
+ Harm Geerts <hgeerts@gmail.com>
389
+ Hasan Ramezani <hasan.r67@gmail.com>
390
+ Hawkeye
391
+ Helen Sherwood-Taylor <helen@rrdlabs.co.uk>
392
+ Henrique Romano <onaiort@gmail.com>
393
+ Henry Dang <henrydangprg@gmail.com>
394
+ Hidde Bultsma
395
+ Himanshu Chauhan <hchauhan1404@outlook.com>
396
+ hipertracker@gmail.com
397
+ Hiroki Kiyohara <hirokiky@gmail.com>
398
+ Honza Král <honza.kral@gmail.com>
399
+ Horst Gutmann <zerok@zerokspot.com>
400
+ Hugo Osvaldo Barrera <hugo@barrera.io>
401
+ HyukJin Jang <wkdgurwls00@naver.com>
402
+ Hyun Mi Ae
403
+ Iacopo Spalletti <i.spalletti@nephila.it>
404
+ Ian A Wilson <http://ianawilson.com>
405
+ Ian Clelland <clelland@gmail.com>
406
+ Ian G. Kelly <ian.g.kelly@gmail.com>
407
+ Ian Holsman <http://feh.holsman.net/>
408
+ Ian Lee <IanLee1521@gmail.com>
409
+ Ibon <ibonso@gmail.com>
410
+ Idan Gazit <idan@gazit.me>
411
+ Idan Melamed
412
+ Ifedapo Olarewaju <ifedapoolarewaju@gmail.com>
413
+ Igor Kolar <ike@email.si>
414
+ Illia Volochii <illia.volochii@gmail.com>
415
+ Ilya Bass
416
+ Ilya Semenov <semenov@inetss.com>
417
+ Ingo Klöcker <djangoproject@ingo-kloecker.de>
418
+ I.S. van Oostveen <v.oostveen@idca.nl>
419
+ Iuri de Silvio <https://github.com/iurisilvio>
420
+ ivan.chelubeev@gmail.com
421
+ Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/>
422
+ Jaap Roes <jaap.roes@gmail.com>
423
+ Jack Moffitt <https://metajack.im/>
424
+ Jacob Burch <jacobburch@gmail.com>
425
+ Jacob Green
426
+ Jacob Kaplan-Moss <jacob@jacobian.org>
427
+ Jacob Rief <jacob.rief@gmail.com>
428
+ Jacob Walls <http://www.jacobtylerwalls.com/>
429
+ Jakub Paczkowski <jakub@paczkowski.eu>
430
+ Jakub Wilk <jwilk@jwilk.net>
431
+ Jakub Wiśniowski <restless.being@gmail.com>
432
+ james_027@yahoo.com
433
+ James Aylett
434
+ James Bennett <james@b-list.org>
435
+ James Gillard <jamesgillard@live.co.uk>
436
+ James Murty
437
+ James Tauber <jtauber@jtauber.com>
438
+ James Timmins <jameshtimmins@gmail.com>
439
+ James Turk <dev@jamesturk.net>
440
+ James Wheare <django@sparemint.com>
441
+ Jamie Matthews <jamie@mtth.org>
442
+ Jannis Leidel <jannis@leidel.info>
443
+ Janos Guljas
444
+ Jan Pazdziora
445
+ Jan Rademaker
446
+ Jarek Głowacki <jarekwg@gmail.com>
447
+ Jarek Zgoda <jarek.zgoda@gmail.com>
448
+ Jarosław Wygoda <jaroslaw@wygoda.me>
449
+ Jason Davies (Esaj) <https://www.jasondavies.com/>
450
+ Jason Huggins <http://www.jrandolph.com/blog/>
451
+ Jason McBrayer <http://www.carcosa.net/jason/>
452
+ jason.sidabras@gmail.com
453
+ Jason Yan <tailofthesun@gmail.com>
454
+ Javier Mansilla <javimansilla@gmail.com>
455
+ Jay Parlar <parlar@gmail.com>
456
+ Jay Welborn <jesse.welborn@gmail.com>
457
+ Jay Wineinger <jay.wineinger@gmail.com>
458
+ J. Clifford Dyer <jcd@sdf.lonestar.org>
459
+ jcrasta@gmail.com
460
+ jdetaeye
461
+ Jeff Anderson <jefferya@programmerq.net>
462
+ Jeff Balogh <jbalogh@mozilla.com>
463
+ Jeff Hui <jeffkhui@gmail.com>
464
+ Jeffrey Gelens <jeffrey@gelens.org>
465
+ Jeff Triplett <jeff.triplett@gmail.com>
466
+ Jeffrey Yancey <jeffrey.yancey@gmail.com>
467
+ Jens Diemer <django@htfx.de>
468
+ Jens Page
469
+ Jensen Cochran <jensen.cochran@gmail.com>
470
+ Jeong-Min Lee <falsetru@gmail.com>
471
+ Jérémie Blaser <blaserje@gmail.com>
472
+ Jeremy Bowman <https://github.com/jmbowman>
473
+ Jeremy Carbaugh <jcarbaugh@gmail.com>
474
+ Jeremy Dunck <jdunck@gmail.com>
475
+ Jeremy Lainé <jeremy.laine@m4x.org>
476
+ Jerin Peter George <jerinpetergeorge@gmail.com>
477
+ Jesse Young <adunar@gmail.com>
478
+ Jezeniel Zapanta <jezeniel.zapanta@gmail.com>
479
+ jhenry <jhenry@theonion.com>
480
+ Jim Dalton <jim.dalton@gmail.com>
481
+ Jimmy Song <jaejoon@gmail.com>
482
+ Jiri Barton
483
+ Joachim Jablon <ewjoachim@gmail.com>
484
+ Joao Oliveira <joaoxsouls@gmail.com>
485
+ Joao Pedro Silva <j.pedro004@gmail.com>
486
+ Joe Heck <http://www.rhonabwy.com/wp/>
487
+ Joe Jackson <joe@joejackson.me>
488
+ Joel Bohman <mail@jbohman.com>
489
+ Joel Heenan <joelh-django@planetjoel.com>
490
+ Joel Watts <joel@joelwatts.com>
491
+ Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
492
+ Johan C. Stöver <johan@nilling.nl>
493
+ Johann Queuniet <johann.queuniet@adh.naellia.eu>
494
+ john@calixto.net
495
+ John D'Agostino <john.dagostino@gmail.com>
496
+ John D'Ambrosio <dambrosioj@gmail.com>
497
+ John Huddleston <huddlej@wwu.edu>
498
+ John Moses <moses.john.r@gmail.com>
499
+ John Paulett <john@paulett.org>
500
+ John Shaffer <jshaffer2112@gmail.com>
501
+ Jökull Sólberg Auðunsson <jokullsolberg@gmail.com>
502
+ Jon Dufresne <jon.dufresne@gmail.com>
503
+ Jon Janzen <jon@jonjanzen.com>
504
+ Jonas Haag <jonas@lophus.org>
505
+ Jonas Lundberg <jonas.lundberg@gmail.com>
506
+ Jonathan Davis <jonathandavis47780@gmail.com>
507
+ Jonatas C. D. <jonatas.cd@gmail.com>
508
+ Jonathan Buchanan <jonathan.buchanan@gmail.com>
509
+ Jonathan Daugherty (cygnus) <http://www.cprogrammer.org/>
510
+ Jonathan Feignberg <jdf@pobox.com>
511
+ Jonathan Slenders
512
+ Jonny Park <jonnythebard9@gmail.com>
513
+ Jordan Bae <qoentlr37@gmail.com>
514
+ Jordan Dimov <s3x3y1@gmail.com>
515
+ Jordi J. Tablada <jordi.joan@gmail.com>
516
+ Jorge Bastida <me@jorgebastida.com>
517
+ Jorge Gajon <gajon@gajon.org>
518
+ José Tomás Tocino García <josetomas.tocino@gmail.com>
519
+ Josef Rousek <josef.rousek@gmail.com>
520
+ Joseph Kocherhans <joseph@jkocherhans.com>
521
+ Josh Smeaton <josh.smeaton@gmail.com>
522
+ Joshua Cannon <joshdcannon@gmail.com>
523
+ Joshua Ginsberg <jag@flowtheory.net>
524
+ Jozko Skrablin <jozko.skrablin@gmail.com>
525
+ J. Pablo Fernandez <pupeno@pupeno.com>
526
+ jpellerin@gmail.com
527
+ Juan Catalano <catalanojuan@gmail.com>
528
+ Juan Manuel Caicedo <juan.manuel.caicedo@gmail.com>
529
+ Juan Pedro Fisanotti <fisadev@gmail.com>
530
+ Julia Elman
531
+ Julia Matsieva <julia.matsieva@gmail.com>
532
+ Julian Bez
533
+ Julie Rymer <rymerjulie.pro@gmail.com>
534
+ Julien Phalip <jphalip@gmail.com>
535
+ Junyoung Choi <cupjoo@gmail.com>
536
+ junzhang.jn@gmail.com
537
+ Jure Cuhalev <gandalf@owca.info>
538
+ Justin Bronn <jbronn@gmail.com>
539
+ Justine Tunney <jtunney@gmail.com>
540
+ Justin Lilly <justinlilly@gmail.com>
541
+ Justin Michalicek <jmichalicek@gmail.com>
542
+ Justin Myles Holmes <justin@slashrootcafe.com>
543
+ Jyrki Pulliainen <jyrki.pulliainen@gmail.com>
544
+ Kadesarin Sanjek
545
+ Kapil Bansal <kapilbansal.gbpecdelhi@gmail.com>
546
+ Karderio <karderio@gmail.com>
547
+ Karen Tracey <kmtracey@gmail.com>
548
+ Karol Sikora <elektrrrus@gmail.com>
549
+ Katherine “Kati” Michel <kthrnmichel@gmail.com>
550
+ Kathryn Killebrew <kathryn.killebrew@gmail.com>
551
+ Katie Miller <katie@sub50.com>
552
+ Keith Bussell <kbussell@gmail.com>
553
+ Kenneth Love <kennethlove@gmail.com>
554
+ Kent Hauser <kent@khauser.net>
555
+ Keryn Knight <keryn@kerynknight.com>
556
+ Kevin Grinberg <kevin@kevingrinberg.com>
557
+ Kevin Kubasik <kevin@kubasik.net>
558
+ Kevin McConnell <kevin.mcconnell@gmail.com>
559
+ Kieran Holland <http://www.kieranholland.com>
560
+ kilian <kilian.cavalotti@lip6.fr>
561
+ Kim Joon Hwan 김준환 <xncbf12@gmail.com>
562
+ Kim Soung Ryoul 김성렬 <kimsoungryoul@gmail.com>
563
+ Klaas van Schelven <klaas@vanschelven.com>
564
+ knox <christobzr@gmail.com>
565
+ konrad@gwu.edu
566
+ Kowito Charoenratchatabhan <kowito@felspar.com>
567
+ Krišjānis Vaiders <krisjanisvaiders@gmail.com>
568
+ krzysiek.pawlik@silvermedia.pl
569
+ Krzysztof Jagiello <me@kjagiello.com>
570
+ Krzysztof Jurewicz <krzysztof.jurewicz@gmail.com>
571
+ Krzysztof Kulewski <kulewski@gmail.com>
572
+ kurtiss@meetro.com
573
+ Lakin Wecker <lakin@structuredabstraction.com>
574
+ Lars Yencken <lars.yencken@gmail.com>
575
+ Lau Bech Lauritzen
576
+ Laurent Luce <https://www.laurentluce.com/>
577
+ Laurent Rahuel <laurent.rahuel@gmail.com>
578
+ lcordier@point45.com
579
+ Leah Culver <leah.culver@gmail.com>
580
+ Leandra Finger <leandra.finger@gmail.com>
581
+ Lee Reilly <lee@leereilly.net>
582
+ Lee Sanghyuck <shlee322@elab.kr>
583
+ Leo "hylje" Honkanen <sealage@gmail.com>
584
+ Leo Shklovskii
585
+ Leo Soto <leo.soto@gmail.com>
586
+ lerouxb@gmail.com
587
+ Lex Berezhny <lex@damoti.com>
588
+ Liang Feng <hutuworm@gmail.com>
589
+ limodou
590
+ Lincoln Smith <lincoln.smith@anu.edu.au>
591
+ Liu Yijie <007gzs@gmail.com>
592
+ Loek van Gent <loek@barakken.nl>
593
+ Loïc Bistuer <loic.bistuer@sixmedia.com>
594
+ Lowe Thiderman <lowe.thiderman@gmail.com>
595
+ Luan Pablo <luanpab@gmail.com>
596
+ Lucas Connors <https://www.revolutiontech.ca/>
597
+ Luciano Ramalho
598
+ Lucidiot <lucidiot@brainshit.fr>
599
+ Ludvig Ericson <ludvig.ericson@gmail.com>
600
+ Luis C. Berrocal <luis.berrocal.1942@gmail.com>
601
+ Łukasz Langa <lukasz@langa.pl>
602
+ Łukasz Rekucki <lrekucki@gmail.com>
603
+ Luke Granger-Brown <django@lukegb.com>
604
+ Luke Plant <L.Plant.98@cantab.net>
605
+ Maciej Fijalkowski
606
+ Maciej Wiśniowski <pigletto@gmail.com>
607
+ Mads Jensen <https://github.com/atombrella>
608
+ Makoto Tsuyuki <mtsuyuki@gmail.com>
609
+ Malcolm Tredinnick
610
+ Manav Agarwal <dpsman13016@gmail.com>
611
+ Manuel Saelices <msaelices@yaco.es>
612
+ Manuzhai
613
+ Marc Aymerich Gubern
614
+ Marc Egli <frog32@me.com>
615
+ Marcel Telka <marcel@telka.sk>
616
+ Marcelo Galigniana <marcelogaligniana@gmail.com>
617
+ Marc Fargas <telenieko@telenieko.com>
618
+ Marc Garcia <marc.garcia@accopensys.com>
619
+ Marcin Wróbel
620
+ Marc Remolt <m.remolt@webmasters.de>
621
+ Marc Seguí Coll <metarizard@gmail.com>
622
+ Marc Tamlyn <marc.tamlyn@gmail.com>
623
+ Marc-Aurèle Brothier <ma.brothier@gmail.com>
624
+ Marian Andre <django@andre.sk>
625
+ Marijn Vriens <marijn@metronomo.cl>
626
+ Mario Gonzalez <gonzalemario@gmail.com>
627
+ Mariusz Felisiak <felisiak.mariusz@gmail.com>
628
+ Mark Biggers <biggers@utsl.com>
629
+ Mark Evans <mark@meltdownlabs.com>
630
+ Mark Gensler <mark.gensler@protonmail.com>
631
+ mark@junklight.com
632
+ Mark Lavin <markdlavin@gmail.com>
633
+ Mark Sandstrom <mark@deliciouslynerdy.com>
634
+ Markus Amalthea Magnuson <markus.magnuson@gmail.com>
635
+ Markus Holtermann <https://markusholtermann.eu>
636
+ Marten Kenbeek <marten.knbk+django@gmail.com>
637
+ Marti Raudsepp <marti@juffo.org>
638
+ martin.glueck@gmail.com
639
+ Martin Green
640
+ Martin Kosír <martin@martinkosir.net>
641
+ Martin Mahner <https://www.mahner.org/>
642
+ Martin Maney <http://www.chipy.org/Martin_Maney>
643
+ Martin von Gagern <gagern@google.com>
644
+ Mart Sõmermaa <https://github.com/mrts>
645
+ Marty Alchin <gulopine@gamemusic.org>
646
+ Masashi Shibata <m.shibata1020@gmail.com>
647
+ masonsimon+django@gmail.com
648
+ Massimiliano Ravelli <massimiliano.ravelli@gmail.com>
649
+ Massimo Scamarcia <massimo.scamarcia@gmail.com>
650
+ Mathieu Agopian <mathieu.agopian@gmail.com>
651
+ Matías Bordese
652
+ Matt Boersma <matt@sprout.org>
653
+ Matt Brewer <matt.brewer693@gmail.com>
654
+ Matt Croydon <http://www.postneo.com/>
655
+ Matt Deacalion Stevens <matt@dirtymonkey.co.uk>
656
+ Matt Dennenbaum
657
+ Matthew Flanagan <https://wadofstuff.blogspot.com/>
658
+ Matthew Schinckel <matt@schinckel.net>
659
+ Matthew Somerville <matthew-django@dracos.co.uk>
660
+ Matthew Tretter <m@tthewwithanm.com>
661
+ Matthew Wilkes <matt@matthewwilkes.name>
662
+ Matthias Kestenholz <mk@406.ch>
663
+ Matthias Pronk <django@masida.nl>
664
+ Matt Hoskins <skaffenuk@googlemail.com>
665
+ Matt McClanahan <https://mmcc.cx/>
666
+ Matt Riggott
667
+ Matt Robenolt <m@robenolt.com>
668
+ Mattia Larentis <mattia@laretis.eu>
669
+ Mattia Procopio <promat85@gmail.com>
670
+ Mattias Loverot <mattias@stubin.se>
671
+ mattycakes@gmail.com
672
+ Max Burstein <http://maxburstein.com>
673
+ Max Derkachev <mderk@yandex.ru>
674
+ Max Smolens <msmolens@gmail.com>
675
+ Maxime Lorant <maxime.lorant@gmail.com>
676
+ Maxime Turcotte <maxocub@riseup.net>
677
+ Maximilian Merz <django@mxmerz.de>
678
+ Maximillian Dornseif <md@hudora.de>
679
+ mccutchen@gmail.com
680
+ Meghana Bhange <meghanabhange13@gmail.com>
681
+ Meir Kriheli <http://mksoft.co.il/>
682
+ Michael S. Brown <michael@msbrown.net>
683
+ Michael Hall <mhall1@ualberta.ca>
684
+ Michael Josephson <http://www.sdjournal.com/>
685
+ Michael Lissner <mike@free.law>
686
+ Michael Manfre <mmanfre@gmail.com>
687
+ michael.mcewan@gmail.com
688
+ Michael Placentra II <someone@michaelplacentra2.net>
689
+ Michael Radziej <mir@noris.de>
690
+ Michael Sanders <m.r.sanders@gmail.com>
691
+ Michael Schwarz <michi.schwarz@gmail.com>
692
+ Michael Sinov <sihaelov@gmail.com>
693
+ Michael Thornhill <michael.thornhill@gmail.com>
694
+ Michal Chruszcz <troll@pld-linux.org>
695
+ michal@plovarna.cz
696
+ Michał Modzelewski <michal.modzelewski@gmail.com>
697
+ Mihai Damian <yang_damian@yahoo.com>
698
+ Mihai Preda <mihai_preda@yahoo.com>
699
+ Mikaël Barbero <mikael.barbero nospam at nospam free.fr>
700
+ Mike Axiak <axiak@mit.edu>
701
+ Mike Grouchy <https://mikegrouchy.com/>
702
+ Mike Malone <mjmalone@gmail.com>
703
+ Mike Richardson
704
+ Mike Wiacek <mjwiacek@google.com>
705
+ Mikhail Korobov <kmike84@googlemail.com>
706
+ Mikko Hellsing <mikko@sorl.net>
707
+ Mikołaj Siedlarek <mikolaj.siedlarek@gmail.com>
708
+ milkomeda
709
+ Milton Waddams
710
+ mitakummaa@gmail.com
711
+ mmarshall
712
+ Moayad Mardini <moayad.m@gmail.com>
713
+ Morgan Aubert <morgan.aubert@zoho.com>
714
+ Moritz Sichert <moritz.sichert@googlemail.com>
715
+ Morten Bagai <m@bagai.com>
716
+ msaelices <msaelices@gmail.com>
717
+ msundstr
718
+ Mushtaq Ali <mushtaak@gmail.com>
719
+ Mykola Zamkovoi <nickzam@gmail.com>
720
+ Nadège Michel <michel.nadege@gmail.com>
721
+ Nagy Károly <charlie@rendszergazda.com>
722
+ Nasimul Haque <nasim.haque@gmail.com>
723
+ Nasir Hussain <nasirhjafri@gmail.com>
724
+ Natalia Bidart <nataliabidart@gmail.com>
725
+ Nate Bragg <jonathan.bragg@alum.rpi.edu>
726
+ Nathan Gaberel <nathan@gnab.fr>
727
+ Neal Norwitz <nnorwitz@google.com>
728
+ Nebojša Dorđević
729
+ Ned Batchelder <https://nedbatchelder.com/>
730
+ Nena Kojadin <nena@kiberpipa.org>
731
+ Niall Dalton <niall.dalton12@gmail.com>
732
+ Niall Kelly <duke.sam.vimes@gmail.com>
733
+ Nick Efford <nick@efford.org>
734
+ Nick Lane <nick.lane.au@gmail.com>
735
+ Nick Pope <nick@nickpope.me.uk>
736
+ Nick Presta <nick@nickpresta.ca>
737
+ Nick Sandford <nick.sandford@gmail.com>
738
+ Nick Sarbicki <nick.a.sarbicki@gmail.com>
739
+ Niclas Olofsson <n@niclasolofsson.se>
740
+ Nicola Larosa <nico@teknico.net>
741
+ Nicolas Lara <nicolaslara@gmail.com>
742
+ Nicolas Noé <nicolas@niconoe.eu>
743
+ Nikita Marchant <nikita.marchant@gmail.com>
744
+ Niran Babalola <niran@niran.org>
745
+ Nis Jørgensen <nis@superlativ.dk>
746
+ Nowell Strite <https://nowell.strite.org/>
747
+ Nuno Mariz <nmariz@gmail.com>
748
+ Octavio Peri <octaperi@gmail.com>
749
+ oggie rob <oz.robharvey@gmail.com>
750
+ oggy <ognjen.maric@gmail.com>
751
+ Oliver Beattie <oliver@obeattie.com>
752
+ Oliver Rutherfurd <http://rutherfurd.net/>
753
+ Olivier Sels <olivier.sels@gmail.com>
754
+ Olivier Tabone <olivier.tabone@ripplemotion.fr>
755
+ Orestis Markou <orestis@orestis.gr>
756
+ Orne Brocaar <http://brocaar.com/>
757
+ Oscar Ramirez <tuxskar@gmail.com>
758
+ Ossama M. Khayat <okhayat@yahoo.com>
759
+ Owen Griffiths
760
+ Ömer Faruk Abacı <https://github.com/omerfarukabaci/>
761
+ Pablo Martín <goinnn@gmail.com>
762
+ Panos Laganakos <panos.laganakos@gmail.com>
763
+ Paolo Melchiorre <paolo@melchiorre.org>
764
+ Pascal Hartig <phartig@rdrei.net>
765
+ Pascal Varet
766
+ Patrik Sletmo <patrik.sletmo@gmail.com>
767
+ Paul Bissex <http://e-scribe.com/>
768
+ Paul Collier <paul@paul-collier.com>
769
+ Paul Collins <paul.collins.iii@gmail.com>
770
+ Paul Donohue <django@PaulSD.com>
771
+ Paul Lanier <planier@google.com>
772
+ Paul McLanahan <paul@mclanahan.net>
773
+ Paul McMillan <Paul@McMillan.ws>
774
+ Paulo Poiati <paulogpoiati@gmail.com>
775
+ Paulo Scardine <paulo@scardine.com.br>
776
+ Paul Smith <blinkylights23@gmail.com>
777
+ Pavel Kulikov <kulikovpavel@gmail.com>
778
+ pavithran s <pavithran.s@gmail.com>
779
+ Pavlo Kapyshin <i@93z.org>
780
+ permonik@mesias.brnonet.cz
781
+ Petar Marić <http://www.petarmaric.com/>
782
+ Pete Crosier <pete.crosier@gmail.com>
783
+ peter@mymart.com
784
+ Peter Sheats <sheats@gmail.com>
785
+ Peter van Kampen
786
+ Peter Zsoldos <http://zsoldosp.eu>
787
+ Pete Shinners <pete@shinners.org>
788
+ Petr Marhoun <petr.marhoun@gmail.com>
789
+ Petter Strandmark
790
+ pgross@thoughtworks.com
791
+ phaedo <http://phaedo.cx/>
792
+ phil.h.smith@gmail.com
793
+ Philip Lindborg <philip.lindborg@gmail.com>
794
+ Philippe Raoult <philippe.raoult@n2nsoft.com>
795
+ phil@produxion.net
796
+ Piotr Jakimiak <piotr.jakimiak@gmail.com>
797
+ Piotr Lewandowski <piotr.lewandowski@gmail.com>
798
+ plisk
799
+ polpak@yahoo.com
800
+ pradeep.gowda@gmail.com
801
+ Preston Holmes <preston@ptone.com>
802
+ Preston Timmons <prestontimmons@gmail.com>
803
+ Priyansh Saxena <askpriyansh@gmail.com>
804
+ Przemysław Buczkowski <przemub@przemub.pl>
805
+ Przemysław Suliga <http://suligap.net>
806
+ Qi Zhao <zhaoqi99@outlook.com>
807
+ Rachel Tobin <rmtobin@me.com>
808
+ Rachel Willmer <http://www.willmer.com/kb/>
809
+ Radek Švarz <https://www.svarz.cz/translate/>
810
+ Rafael Giebisch <rafael@giebisch-mail.de>
811
+ Raffaele Salmaso <raffaele@salmaso.org>
812
+ Rahmat Faisal <mad.skidipap@gmail.com>
813
+ Rajesh Dhawan <rajesh.dhawan@gmail.com>
814
+ Ramez Ashraf <ramezashraf@gmail.com>
815
+ Ramil Yanbulatov <rayman1104@gmail.com>
816
+ Ramin Farajpour Cami <ramin.blackhat@gmail.com>
817
+ Ramiro Morales <ramiro@rmorales.net>
818
+ Ramon Saraiva <ramonsaraiva@gmail.com>
819
+ Ram Rachum <ram@rachum.com>
820
+ Randy Barlow <randy@electronsweatshop.com>
821
+ Raphaël Barrois <raphael.barrois@m4x.org>
822
+ Raphael Michel <mail@raphaelmichel.de>
823
+ Raúl Cumplido <raulcumplido@gmail.com>
824
+ Rebecca Smith <rebkwok@gmail.com>
825
+ Remco Wendt <remco.wendt@gmail.com>
826
+ Renaud Parent <renaud.parent@gmail.com>
827
+ Renbi Yu <averybigant@gmail.com>
828
+ Reza Mohammadi <reza@zeerak.ir>
829
+ rhettg@gmail.com
830
+ Ricardo Javier Cárdenes Medina <ricardo.cardenes@gmail.com>
831
+ ricardojbarrios@gmail.com
832
+ Riccardo Di Virgilio
833
+ Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
834
+ Richard Davies <richard.davies@elastichosts.com>
835
+ Richard House <Richard.House@i-logue.com>
836
+ Rick Wagner <rwagner@physics.ucsd.edu>
837
+ Rigel Di Scala <rigel.discala@propylon.com>
838
+ Robert Coup
839
+ Robert Myers <myer0052@gmail.com>
840
+ Roberto Aguilar <roberto@baremetal.io>
841
+ Robert Rock Howard <http://djangomojo.com/>
842
+ Robert Wittams
843
+ Rob Golding-Day <rob@golding-day.com>
844
+ Rob Hudson <https://rob.cogit8.org/>
845
+ Rob Nguyen <tienrobertnguyenn@gmail.com>
846
+ Robin Munn <http://www.geekforgod.com/>
847
+ Rodrigo Pinheiro Marques de Araújo <fenrrir@gmail.com>
848
+ Rohith P R <https://rohithpr.com>
849
+ Romain Garrigues <romain.garrigues.cs@gmail.com>
850
+ Ronnie van den Crommenacker
851
+ Ronny Haryanto <https://ronny.haryan.to/>
852
+ Ross Poulton <ross@rossp.org>
853
+ Roxane Bellot <https://github.com/roxanebellot/>
854
+ Rozza <ross.lawley@gmail.com>
855
+ Rudolph Froger <rfroger@estrate.nl>
856
+ Rudy Mutter
857
+ Rune Rønde Laursen <runerl@skjoldhoej.dk>
858
+ Russell Cloran <russell@rucus.net>
859
+ Russell Keith-Magee <russell@keith-magee.com>
860
+ Russ Webber
861
+ Ryan Hall <ryanhall989@gmail.com>
862
+ Ryan Heard <ryanwheard@gmail.com>
863
+ ryankanno
864
+ Ryan Kelly <ryan@rfk.id.au>
865
+ Ryan Niemeyer <https://profiles.google.com/ryan.niemeyer/about>
866
+ Ryan Petrello <ryan@ryanpetrello.com>
867
+ Ryan Rubin <ryanmrubin@gmail.com>
868
+ Ryno Mathee <rmathee@gmail.com>
869
+ Sachin Jat <sanch.jat@gmail.com>
870
+ Sage M. Abdullah <https://github.com/laymonage>
871
+ Sam Newman <http://www.magpiebrain.com/>
872
+ Sander Dijkhuis <sander.dijkhuis@gmail.com>
873
+ Sanket Saurav <sanketsaurav@gmail.com>
874
+ Sanyam Khurana <sanyam.khurana01@gmail.com>
875
+ Sarah Boyce <https://github.com/sarahboyce>
876
+ Sarthak Mehrish <sarthakmeh03@gmail.com>
877
+ schwank@gmail.com
878
+ Scot Hacker <shacker@birdhouse.org>
879
+ Scott Barr <scott@divisionbyzero.com.au>
880
+ Scott Cranfill <scott@scottcranfill.com>
881
+ Scott Fitsimones <scott@airgara.ge>
882
+ Scott Pashley <github@scottpashley.co.uk>
883
+ scott@staplefish.com
884
+ Sean Brant
885
+ Sebastian Hillig <sebastian.hillig@gmail.com>
886
+ Sebastian Spiegel <https://www.tivix.com/>
887
+ Segyo Myung <myungsekyo@gmail.com>
888
+ Selwin Ong <selwin@ui.co.id>
889
+ Sengtha Chay <sengtha@e-khmer.com>
890
+ Senko Rašić <senko.rasic@dobarkod.hr>
891
+ serbaut@gmail.com
892
+ Sergei Maertens <sergeimaertens@gmail.com>
893
+ Sergey Fedoseev <fedoseev.sergey@gmail.com>
894
+ Sergey Kolosov <m17.admin@gmail.com>
895
+ Seth Hill <sethrh@gmail.com>
896
+ Shai Berger <shai@platonix.com>
897
+ Shannon -jj Behrens <https://www.jjinux.com/>
898
+ Shawn Milochik <shawn@milochik.com>
899
+ Shreya Bamne <shreya.bamne@gmail.com>
900
+ Silvan Spross <silvan.spross@gmail.com>
901
+ Simeon Visser <http://simeonvisser.com>
902
+ Simon Blanchard
903
+ Simon Charette <charette.s@gmail.com>
904
+ Simon Greenhill <dev@simon.net.nz>
905
+ Simon Litchfield <simon@quo.com.au>
906
+ Simon Meers <simon@simonmeers.com>
907
+ Simon Williams
908
+ Simon Willison <simon@simonwillison.net>
909
+ Sjoerd Job Postmus
910
+ Slawek Mikula <slawek dot mikula at gmail dot com>
911
+ sloonz <simon.lipp@insa-lyon.fr>
912
+ smurf@smurf.noris.de
913
+ sopel
914
+ Sreehari K V <sreeharivijayan619@gmail.com>
915
+ Sridhar Marella <sridhar562345@gmail.com>
916
+ Srinivas Reddy Thatiparthy <thatiparthysreenivas@gmail.com>
917
+ Stanislas Guerra <stan@slashdev.me>
918
+ Stanislaus Madueke
919
+ Stanislav Karpov <work@stkrp.ru>
920
+ starrynight <cmorgh@gmail.com>
921
+ Stefan R. Filipek
922
+ Stefane Fermgier <sf@fermigier.com>
923
+ Stefano Rivera <stefano@rivera.za.net>
924
+ Stéphane Raimbault <stephane.raimbault@gmail.com>
925
+ Stephan Jaekel <steph@rdev.info>
926
+ Stephen Burrows <stephen.r.burrows@gmail.com>
927
+ Steven L. Smith (fvox13) <steven@stevenlsmith.com>
928
+ Steven Noorbergen (Xaroth) <xaroth+django@xaroth.nl>
929
+ Stuart Langridge <https://www.kryogenix.org/>
930
+ Subhav Gautam <subhavgautam@yahoo.co.uk>
931
+ Sujay S Kumar <sujay.skumar141295@gmail.com>
932
+ Sune Kirkeby <https://ibofobi.dk/>
933
+ Sung-Jin Hong <serialx.net@gmail.com>
934
+ SuperJared
935
+ Susan Tan <susan.tan.fleckerl@gmail.com>
936
+ Sutrisno Efendi <kangfend@gmail.com>
937
+ Swaroop C H <http://www.swaroopch.info>
938
+ Szilveszter Farkas <szilveszter.farkas@gmail.com>
939
+ Taavi Teska <taaviteska@gmail.com>
940
+ Tai Lee <real.human@mrmachine.net>
941
+ Takashi Matsuo <matsuo.takashi@gmail.com>
942
+ Tareque Hossain <http://www.codexn.com>
943
+ Taylor Mitchell <taylor.mitchell@gmail.com>
944
+ Terry Huang <terryh.tp@gmail.com>
945
+ thebjorn <bp@datakortet.no>
946
+ Thejaswi Puthraya <thejaswi.puthraya@gmail.com>
947
+ Thijs van Dien <thijs@vandien.net>
948
+ Thom Wiggers
949
+ Thomas Chaumeny <t.chaumeny@gmail.com>
950
+ Thomas Güttler <hv@tbz-pariv.de>
951
+ Thomas Kerpe <thomas@kerpe.net>
952
+ Thomas Sorrel
953
+ Thomas Steinacher <http://www.eggdrop.ch/>
954
+ Thomas Stromberg <tstromberg@google.com>
955
+ Thomas Tanner <tanner@gmx.net>
956
+ tibimicu@gmx.net
957
+ Ties Jan Hefting <hello@tiesjan.com>
958
+ Tim Allen <tim@pyphilly.org>
959
+ Tim Givois <tim.givois.mendez@gmail.com>
960
+ Tim Graham <timograham@gmail.com>
961
+ Tim Heap <tim@timheap.me>
962
+ Tim McCurrach <tim.mccurrach@gmail.com>
963
+ Tim Saylor <tim.saylor@gmail.com>
964
+ Tobias Kunze <rixx@cutebit.de>
965
+ Tobias McNulty <https://www.caktusgroup.com/blog/>
966
+ tobias@neuyork.de
967
+ Todd O'Bryan <toddobryan@mac.com>
968
+ Tom Carrick <https://www.carrick.eu>
969
+ Tom Christie <tom@tomchristie.com>
970
+ Tom Forbes <tom@tomforb.es>
971
+ Tom Insam
972
+ Tom Tobin
973
+ Tom Wojcik <me@tomwojcik.com>
974
+ Tomáš Ehrlich <tomas.ehrlich@gmail.com>
975
+ Tomáš Kopeček <permonik@m6.cz>
976
+ Tome Cvitan <tome@cvitan.com>
977
+ Tomek Paczkowski <tomek@hauru.eu>
978
+ Tomer Chachamu
979
+ Tommy Beadle <tbeadle@gmail.com>
980
+ Tore Lundqvist <tore.lundqvist@gmail.com>
981
+ torne-django@wolfpuppy.org.uk
982
+ Travis Cline <travis.cline@gmail.com>
983
+ Travis Pinney
984
+ Travis Swicegood <travis@domain51.com>
985
+ Travis Terry <tdterry7@gmail.com>
986
+ Trevor Caira <trevor@caira.com>
987
+ Trey Long <trey@ktrl.com>
988
+ tstromberg@google.com
989
+ tt@gurgle.no
990
+ Tyler Tarabula <tyler.tarabula@gmail.com>
991
+ Tyson Clugg <tyson@clugg.net>
992
+ Tyson Tate <tyson@fallingbullets.com>
993
+ Unai Zalakain <unai@gisa-elkartea.org>
994
+ Valentina Mukhamedzhanova <umirra@gmail.com>
995
+ valtron
996
+ Vasiliy Stavenko <stavenko@gmail.com>
997
+ Vasil Vangelovski
998
+ Vibhu Agarwal <vibhu-agarwal.github.io>
999
+ Victor Andrée
1000
+ viestards.lists@gmail.com
1001
+ Viktor Danyliuk <v.v.danyliuk@gmail.com>
1002
+ Viktor Grabov <viktor@grabov.ru>
1003
+ Ville Säävuori <https://www.unessa.net/>
1004
+ Vinay Karanam <https://github.com/vinayinvicible>
1005
+ Vinay Sajip <vinay_sajip@yahoo.co.uk>
1006
+ Vincent Foley <vfoleybourgon@yahoo.ca>
1007
+ Vinny Do <vdo.code@gmail.com>
1008
+ Vitaly Babiy <vbabiy86@gmail.com>
1009
+ Vitaliy Yelnik <velnik@gmail.com>
1010
+ Vladimir Kuzma <vladimirkuzma.ch@gmail.com>
1011
+ Vlado <vlado@labath.org>
1012
+ Vsevolod Solovyov
1013
+ Vytis Banaitis <vytis.banaitis@gmail.com>
1014
+ wam-djangobug@wamber.net
1015
+ Wang Chun <wangchun@exoweb.net>
1016
+ Warren Smith <warren@wandrsmith.net>
1017
+ Waylan Limberg <waylan@gmail.com>
1018
+ Wiktor Kołodziej <wiktor@pykonik.org>
1019
+ Wiley Kestner <wiley.kestner@gmail.com>
1020
+ Wiliam Alves de Souza <wiliamsouza83@gmail.com>
1021
+ Will Ayd <william.ayd@icloud.com>
1022
+ William Schwartz <wkschwartz@gmail.com>
1023
+ Will Hardy <django@willhardy.com.au>
1024
+ Wilson Miner <wminer@gmail.com>
1025
+ Wim Glenn <hey@wimglenn.com>
1026
+ wojtek
1027
+ Wu Haotian <whtsky@gmail.com>
1028
+ Xavier Francisco <xavier.n.francisco@gmail.com>
1029
+ Xia Kai <https://blog.xiaket.org/>
1030
+ Yann Fouillat <gagaro42@gmail.com>
1031
+ Yann Malet
1032
+ Yash Jhunjhunwala
1033
+ Yasushi Masuda <whosaysni@gmail.com>
1034
+ ye7cakf02@sneakemail.com
1035
+ ymasuda@ethercube.com
1036
+ Yoong Kang Lim <yoongkang.lim@gmail.com>
1037
+ Yusuke Miyazaki <miyazaki.dev@gmail.com>
1038
+ yyyyyyyan <contact@yyyyyyyan.tech>
1039
+ Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com>
1040
+ Zachary Voase <zacharyvoase@gmail.com>
1041
+ Zach Liu <zachliu@gmail.com>
1042
+ Zach Thompson <zthompson47@gmail.com>
1043
+ Zain Memon
1044
+ Zain Patel <zain.patel06@gmail.com>
1045
+ Zak Johnson <zakj@nox.cx>
1046
+ Žan Anderle <zan.anderle@gmail.com>
1047
+ Zbigniew Siciarz <zbigniew@siciarz.net>
1048
+ zegor
1049
+ Zeynel Özdemir <ozdemir.zynl@gmail.com>
1050
+ Zlatko Mašek <zlatko.masek@gmail.com>
1051
+ zriv <https://github.com/zriv>
1052
+ <Please alphabetize new entries>
1053
+
1054
+ A big THANK YOU goes to:
1055
+
1056
+ Rob Curley and Ralph Gage for letting us open-source Django.
1057
+
1058
+ Frank Wiles for making excellent arguments for open-sourcing, and for
1059
+ his sage sysadmin advice.
1060
+
1061
+ Ian Bicking for convincing Adrian to ditch code generation.
1062
+
1063
+ Mark Pilgrim for "Dive Into Python" (https://www.diveinto.org/python3/).
1064
+
1065
+ Guido van Rossum for creating Python.
myworld/Lib/site-packages/Django-4.2.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
myworld/Lib/site-packages/Django-4.2.2.dist-info/LICENSE ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) Django Software Foundation and individual contributors.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ 3. Neither the name of Django nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without
16
+ specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
myworld/Lib/site-packages/Django-4.2.2.dist-info/LICENSE.python ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Django is licensed under the three-clause BSD license; see the file
2
+ LICENSE for details.
3
+
4
+ Django includes code from the Python standard library, which is licensed under
5
+ the Python license, a permissive open source license. The copyright and license
6
+ is included below for compliance with Python's terms.
7
+
8
+ ----------------------------------------------------------------------
9
+
10
+ Copyright (c) 2001-present Python Software Foundation; All Rights Reserved
11
+
12
+ A. HISTORY OF THE SOFTWARE
13
+ ==========================
14
+
15
+ Python was created in the early 1990s by Guido van Rossum at Stichting
16
+ Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
17
+ as a successor of a language called ABC. Guido remains Python's
18
+ principal author, although it includes many contributions from others.
19
+
20
+ In 1995, Guido continued his work on Python at the Corporation for
21
+ National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
22
+ in Reston, Virginia where he released several versions of the
23
+ software.
24
+
25
+ In May 2000, Guido and the Python core development team moved to
26
+ BeOpen.com to form the BeOpen PythonLabs team. In October of the same
27
+ year, the PythonLabs team moved to Digital Creations, which became
28
+ Zope Corporation. In 2001, the Python Software Foundation (PSF, see
29
+ https://www.python.org/psf/) was formed, a non-profit organization
30
+ created specifically to own Python-related Intellectual Property.
31
+ Zope Corporation was a sponsoring member of the PSF.
32
+
33
+ All Python releases are Open Source (see http://www.opensource.org for
34
+ the Open Source Definition). Historically, most, but not all, Python
35
+ releases have also been GPL-compatible; the table below summarizes
36
+ the various releases.
37
+
38
+ Release Derived Year Owner GPL-
39
+ from compatible? (1)
40
+
41
+ 0.9.0 thru 1.2 1991-1995 CWI yes
42
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
43
+ 1.6 1.5.2 2000 CNRI no
44
+ 2.0 1.6 2000 BeOpen.com no
45
+ 1.6.1 1.6 2001 CNRI yes (2)
46
+ 2.1 2.0+1.6.1 2001 PSF no
47
+ 2.0.1 2.0+1.6.1 2001 PSF yes
48
+ 2.1.1 2.1+2.0.1 2001 PSF yes
49
+ 2.1.2 2.1.1 2002 PSF yes
50
+ 2.1.3 2.1.2 2002 PSF yes
51
+ 2.2 and above 2.1.1 2001-now PSF yes
52
+
53
+ Footnotes:
54
+
55
+ (1) GPL-compatible doesn't mean that we're distributing Python under
56
+ the GPL. All Python licenses, unlike the GPL, let you distribute
57
+ a modified version without making your changes open source. The
58
+ GPL-compatible licenses make it possible to combine Python with
59
+ other software that is released under the GPL; the others don't.
60
+
61
+ (2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
62
+ because its license has a choice of law clause. According to
63
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
64
+ is "not incompatible" with the GPL.
65
+
66
+ Thanks to the many outside volunteers who have worked under Guido's
67
+ direction to make these releases possible.
68
+
69
+
70
+ B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
71
+ ===============================================================
72
+
73
+ Python software and documentation are licensed under the
74
+ Python Software Foundation License Version 2.
75
+
76
+ Starting with Python 3.8.6, examples, recipes, and other code in
77
+ the documentation are dual licensed under the PSF License Version 2
78
+ and the Zero-Clause BSD license.
79
+
80
+ Some software incorporated into Python is under different licenses.
81
+ The licenses are listed with code falling under that license.
82
+
83
+
84
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
85
+ --------------------------------------------
86
+
87
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
88
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
89
+ otherwise using this software ("Python") in source or binary form and
90
+ its associated documentation.
91
+
92
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
93
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
94
+ analyze, test, perform and/or display publicly, prepare derivative works,
95
+ distribute, and otherwise use Python alone or in any derivative version,
96
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
97
+ i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
98
+ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation;
99
+ All Rights Reserved" are retained in Python alone or in any derivative version
100
+ prepared by Licensee.
101
+
102
+ 3. In the event Licensee prepares a derivative work that is based on
103
+ or incorporates Python or any part thereof, and wants to make
104
+ the derivative work available to others as provided herein, then
105
+ Licensee hereby agrees to include in any such work a brief summary of
106
+ the changes made to Python.
107
+
108
+ 4. PSF is making Python available to Licensee on an "AS IS"
109
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
110
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
111
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
112
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
113
+ INFRINGE ANY THIRD PARTY RIGHTS.
114
+
115
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
116
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
117
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
118
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
119
+
120
+ 6. This License Agreement will automatically terminate upon a material
121
+ breach of its terms and conditions.
122
+
123
+ 7. Nothing in this License Agreement shall be deemed to create any
124
+ relationship of agency, partnership, or joint venture between PSF and
125
+ Licensee. This License Agreement does not grant permission to use PSF
126
+ trademarks or trade name in a trademark sense to endorse or promote
127
+ products or services of Licensee, or any third party.
128
+
129
+ 8. By copying, installing or otherwise using Python, Licensee
130
+ agrees to be bound by the terms and conditions of this License
131
+ Agreement.
132
+
133
+
134
+ BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
135
+ -------------------------------------------
136
+
137
+ BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
138
+
139
+ 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
140
+ office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
141
+ Individual or Organization ("Licensee") accessing and otherwise using
142
+ this software in source or binary form and its associated
143
+ documentation ("the Software").
144
+
145
+ 2. Subject to the terms and conditions of this BeOpen Python License
146
+ Agreement, BeOpen hereby grants Licensee a non-exclusive,
147
+ royalty-free, world-wide license to reproduce, analyze, test, perform
148
+ and/or display publicly, prepare derivative works, distribute, and
149
+ otherwise use the Software alone or in any derivative version,
150
+ provided, however, that the BeOpen Python License is retained in the
151
+ Software, alone or in any derivative version prepared by Licensee.
152
+
153
+ 3. BeOpen is making the Software available to Licensee on an "AS IS"
154
+ basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
155
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
156
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
157
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
158
+ INFRINGE ANY THIRD PARTY RIGHTS.
159
+
160
+ 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
161
+ SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
162
+ AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
163
+ DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
164
+
165
+ 5. This License Agreement will automatically terminate upon a material
166
+ breach of its terms and conditions.
167
+
168
+ 6. This License Agreement shall be governed by and interpreted in all
169
+ respects by the law of the State of California, excluding conflict of
170
+ law provisions. Nothing in this License Agreement shall be deemed to
171
+ create any relationship of agency, partnership, or joint venture
172
+ between BeOpen and Licensee. This License Agreement does not grant
173
+ permission to use BeOpen trademarks or trade names in a trademark
174
+ sense to endorse or promote products or services of Licensee, or any
175
+ third party. As an exception, the "BeOpen Python" logos available at
176
+ http://www.pythonlabs.com/logos.html may be used according to the
177
+ permissions granted on that web page.
178
+
179
+ 7. By copying, installing or otherwise using the software, Licensee
180
+ agrees to be bound by the terms and conditions of this License
181
+ Agreement.
182
+
183
+
184
+ CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
185
+ ---------------------------------------
186
+
187
+ 1. This LICENSE AGREEMENT is between the Corporation for National
188
+ Research Initiatives, having an office at 1895 Preston White Drive,
189
+ Reston, VA 20191 ("CNRI"), and the Individual or Organization
190
+ ("Licensee") accessing and otherwise using Python 1.6.1 software in
191
+ source or binary form and its associated documentation.
192
+
193
+ 2. Subject to the terms and conditions of this License Agreement, CNRI
194
+ hereby grants Licensee a nonexclusive, royalty-free, world-wide
195
+ license to reproduce, analyze, test, perform and/or display publicly,
196
+ prepare derivative works, distribute, and otherwise use Python 1.6.1
197
+ alone or in any derivative version, provided, however, that CNRI's
198
+ License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
199
+ 1995-2001 Corporation for National Research Initiatives; All Rights
200
+ Reserved" are retained in Python 1.6.1 alone or in any derivative
201
+ version prepared by Licensee. Alternately, in lieu of CNRI's License
202
+ Agreement, Licensee may substitute the following text (omitting the
203
+ quotes): "Python 1.6.1 is made available subject to the terms and
204
+ conditions in CNRI's License Agreement. This Agreement together with
205
+ Python 1.6.1 may be located on the internet using the following
206
+ unique, persistent identifier (known as a handle): 1895.22/1013. This
207
+ Agreement may also be obtained from a proxy server on the internet
208
+ using the following URL: http://hdl.handle.net/1895.22/1013".
209
+
210
+ 3. In the event Licensee prepares a derivative work that is based on
211
+ or incorporates Python 1.6.1 or any part thereof, and wants to make
212
+ the derivative work available to others as provided herein, then
213
+ Licensee hereby agrees to include in any such work a brief summary of
214
+ the changes made to Python 1.6.1.
215
+
216
+ 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
217
+ basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
218
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
219
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
220
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
221
+ INFRINGE ANY THIRD PARTY RIGHTS.
222
+
223
+ 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
224
+ 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
225
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
226
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
227
+
228
+ 6. This License Agreement will automatically terminate upon a material
229
+ breach of its terms and conditions.
230
+
231
+ 7. This License Agreement shall be governed by the federal
232
+ intellectual property law of the United States, including without
233
+ limitation the federal copyright law, and, to the extent such
234
+ U.S. federal law does not apply, by the law of the Commonwealth of
235
+ Virginia, excluding Virginia's conflict of law provisions.
236
+ Notwithstanding the foregoing, with regard to derivative works based
237
+ on Python 1.6.1 that incorporate non-separable material that was
238
+ previously distributed under the GNU General Public License (GPL), the
239
+ law of the Commonwealth of Virginia shall govern this License
240
+ Agreement only as to issues arising under or with respect to
241
+ Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
242
+ License Agreement shall be deemed to create any relationship of
243
+ agency, partnership, or joint venture between CNRI and Licensee. This
244
+ License Agreement does not grant permission to use CNRI trademarks or
245
+ trade name in a trademark sense to endorse or promote products or
246
+ services of Licensee, or any third party.
247
+
248
+ 8. By clicking on the "ACCEPT" button where indicated, or by copying,
249
+ installing or otherwise using Python 1.6.1, Licensee agrees to be
250
+ bound by the terms and conditions of this License Agreement.
251
+
252
+ ACCEPT
253
+
254
+
255
+ CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
256
+ --------------------------------------------------
257
+
258
+ Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
259
+ The Netherlands. All rights reserved.
260
+
261
+ Permission to use, copy, modify, and distribute this software and its
262
+ documentation for any purpose and without fee is hereby granted,
263
+ provided that the above copyright notice appear in all copies and that
264
+ both that copyright notice and this permission notice appear in
265
+ supporting documentation, and that the name of Stichting Mathematisch
266
+ Centrum or CWI not be used in advertising or publicity pertaining to
267
+ distribution of the software without specific, written prior
268
+ permission.
269
+
270
+ STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
271
+ THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
272
+ FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
273
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
274
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
275
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
276
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
277
+
278
+ ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
279
+ ----------------------------------------------------------------------
280
+
281
+ Permission to use, copy, modify, and/or distribute this software for any
282
+ purpose with or without fee is hereby granted.
283
+
284
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
285
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
286
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
287
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
288
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
289
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
290
+ PERFORMANCE OF THIS SOFTWARE.
myworld/Lib/site-packages/Django-4.2.2.dist-info/METADATA ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Django
3
+ Version: 4.2.2
4
+ Summary: A high-level Python web framework that encourages rapid development and clean, pragmatic design.
5
+ Home-page: https://www.djangoproject.com/
6
+ Author: Django Software Foundation
7
+ Author-email: foundation@djangoproject.com
8
+ License: BSD-3-Clause
9
+ Project-URL: Documentation, https://docs.djangoproject.com/
10
+ Project-URL: Release notes, https://docs.djangoproject.com/en/stable/releases/
11
+ Project-URL: Funding, https://www.djangoproject.com/fundraising/
12
+ Project-URL: Source, https://github.com/django/django
13
+ Project-URL: Tracker, https://code.djangoproject.com/
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: Web Environment
16
+ Classifier: Framework :: Django
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: BSD License
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3 :: Only
23
+ Classifier: Programming Language :: Python :: 3.8
24
+ Classifier: Programming Language :: Python :: 3.9
25
+ Classifier: Programming Language :: Python :: 3.10
26
+ Classifier: Programming Language :: Python :: 3.11
27
+ Classifier: Topic :: Internet :: WWW/HTTP
28
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
29
+ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
30
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
31
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
32
+ Requires-Python: >=3.8
33
+ License-File: LICENSE
34
+ License-File: LICENSE.python
35
+ License-File: AUTHORS
36
+ Requires-Dist: asgiref (<4,>=3.6.0)
37
+ Requires-Dist: sqlparse (>=0.3.1)
38
+ Requires-Dist: backports.zoneinfo ; python_version < "3.9"
39
+ Requires-Dist: tzdata ; sys_platform == "win32"
40
+ Provides-Extra: argon2
41
+ Requires-Dist: argon2-cffi (>=19.1.0) ; extra == 'argon2'
42
+ Provides-Extra: bcrypt
43
+ Requires-Dist: bcrypt ; extra == 'bcrypt'
44
+
45
+ ======
46
+ Django
47
+ ======
48
+
49
+ Django is a high-level Python web framework that encourages rapid development
50
+ and clean, pragmatic design. Thanks for checking it out.
51
+
52
+ All documentation is in the "``docs``" directory and online at
53
+ https://docs.djangoproject.com/en/stable/. If you're just getting started,
54
+ here's how we recommend you read the docs:
55
+
56
+ * First, read ``docs/intro/install.txt`` for instructions on installing Django.
57
+
58
+ * Next, work through the tutorials in order (``docs/intro/tutorial01.txt``,
59
+ ``docs/intro/tutorial02.txt``, etc.).
60
+
61
+ * If you want to set up an actual deployment server, read
62
+ ``docs/howto/deployment/index.txt`` for instructions.
63
+
64
+ * You'll probably want to read through the topical guides (in ``docs/topics``)
65
+ next; from there you can jump to the HOWTOs (in ``docs/howto``) for specific
66
+ problems, and check out the reference (``docs/ref``) for gory details.
67
+
68
+ * See ``docs/README`` for instructions on building an HTML version of the docs.
69
+
70
+ Docs are updated rigorously. If you find any problems in the docs, or think
71
+ they should be clarified in any way, please take 30 seconds to fill out a
72
+ ticket here: https://code.djangoproject.com/newticket
73
+
74
+ To get more help:
75
+
76
+ * Join the ``#django`` channel on ``irc.libera.chat``. Lots of helpful people
77
+ hang out there. See https://web.libera.chat if you're new to IRC.
78
+
79
+ * Join the django-users mailing list, or read the archives, at
80
+ https://groups.google.com/group/django-users.
81
+
82
+ To contribute to Django:
83
+
84
+ * Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for
85
+ information about getting involved.
86
+
87
+ To run Django's test suite:
88
+
89
+ * Follow the instructions in the "Unit tests" section of
90
+ ``docs/internals/contributing/writing-code/unit-tests.txt``, published online at
91
+ https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests
92
+
93
+ Supporting the Development of Django
94
+ ====================================
95
+
96
+ Django's development depends on your contributions.
97
+
98
+ If you depend on Django, remember to support the Django Software Foundation: https://www.djangoproject.com/fundraising/
myworld/Lib/site-packages/Django-4.2.2.dist-info/RECORD ADDED
The diff for this file is too large to render. See raw diff
 
myworld/Lib/site-packages/Django-4.2.2.dist-info/REQUESTED ADDED
File without changes
myworld/Lib/site-packages/Django-4.2.2.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.40.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
myworld/Lib/site-packages/Django-4.2.2.dist-info/entry_points.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [console_scripts]
2
+ django-admin = django.core.management:execute_from_command_line
myworld/Lib/site-packages/Django-4.2.2.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ django
myworld/Lib/site-packages/PyInstaller/__init__.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2005-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+
12
+ __all__ = ('HOMEPATH', 'PLATFORM', '__version__', 'DEFAULT_DISTPATH', 'DEFAULT_SPECPATH', 'DEFAULT_WORKPATH')
13
+
14
+ import os
15
+ import sys
16
+
17
+ from PyInstaller import compat
18
+ from PyInstaller.utils.git import get_repo_revision
19
+
20
+ # Note: Keep this variable as plain string so it could be updated automatically when doing a release.
21
+ __version__ = '5.13.0'
22
+
23
+ # Absolute path of this package's directory. Save this early so all submodules can use the absolute path. This is
24
+ # required for example if the current directory changes prior to loading the hooks.
25
+ PACKAGEPATH = os.path.abspath(os.path.dirname(__file__))
26
+
27
+ HOMEPATH = os.path.dirname(PACKAGEPATH)
28
+
29
+ # Update __version__ as necessary.
30
+ if os.path.exists(os.path.join(HOMEPATH, 'setup.py')):
31
+ # PyInstaller is run directly from source without installation, or __version__ is called from 'setup.py'...
32
+ if compat.getenv('PYINSTALLER_DO_RELEASE') == '1':
33
+ # Suppress the git revision when doing a release.
34
+ pass
35
+ elif 'sdist' not in sys.argv:
36
+ # and 'setup.py' was not called with 'sdist' argument. For creating source tarball we do not want git revision
37
+ # in the filename.
38
+ try:
39
+ __version__ += get_repo_revision()
40
+ except Exception:
41
+ # Write to stderr because stdout is used for eval() statement in some subprocesses.
42
+ sys.stderr.write('WARN: failed to parse git revision')
43
+ else:
44
+ # PyInstaller was installed by `python setup.py install'.
45
+ if compat.is_py38:
46
+ from importlib.metadata import version
47
+ else:
48
+ from importlib_metadata import version
49
+ __version__ = version('PyInstaller')
50
+ # Default values of paths where to put files created by PyInstaller. If changing these, do not forget to update the
51
+ # help text for corresponding command-line options, defined in build_main.
52
+
53
+ # Where to put created .spec file.
54
+ DEFAULT_SPECPATH = os.getcwd()
55
+ # Where to put the final frozen application.
56
+ DEFAULT_DISTPATH = os.path.join(os.getcwd(), 'dist')
57
+ # Where to put all the temporary files; .log, .pyz, etc.
58
+ DEFAULT_WORKPATH = os.path.join(os.getcwd(), 'build')
59
+
60
+ PLATFORM = compat.system + '-' + compat.architecture
61
+ # Include machine name in path to bootloader for some machines (e.g., 'arm'). Explicitly avoid doing this on macOS,
62
+ # where we keep universal2 bootloaders in Darwin-64bit folder regardless of whether we are on x86_64 or arm64.
63
+ if compat.machine and not compat.is_darwin:
64
+ PLATFORM += '-' + compat.machine
65
+ # Similarly, disambiguate musl Linux from glibc Linux.
66
+ if compat.is_musl:
67
+ PLATFORM += '-musl'
myworld/Lib/site-packages/PyInstaller/__main__.py ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2013-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+ """
12
+ Main command-line interface to PyInstaller.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import argparse
17
+ import os
18
+ import platform
19
+ import sys
20
+ from collections import defaultdict
21
+
22
+ from PyInstaller import __version__
23
+ from PyInstaller import log as logging
24
+ # Note: do not import anything else until compat.check_requirements function is run!
25
+ from PyInstaller import compat
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+ # Taken from https://stackoverflow.com/a/22157136 to format args more flexibly: any help text which beings with ``R|``
30
+ # will have all newlines preserved; the help text will be line wrapped. See
31
+ # https://docs.python.org/3/library/argparse.html#formatter-class.
32
+
33
+
34
+ # This is used by the ``--debug`` option.
35
+ class _SmartFormatter(argparse.HelpFormatter):
36
+ def _split_lines(self, text, width):
37
+ if text.startswith('R|'):
38
+ # The underlying implementation of ``RawTextHelpFormatter._split_lines`` invokes this; mimic it.
39
+ return text[2:].splitlines()
40
+ else:
41
+ # Invoke the usual formatter.
42
+ return super()._split_lines(text, width)
43
+
44
+
45
+ def run_makespec(filenames, **opts):
46
+ # Split pathex by using the path separator
47
+ temppaths = opts['pathex'][:]
48
+ pathex = opts['pathex'] = []
49
+ for p in temppaths:
50
+ pathex.extend(p.split(os.pathsep))
51
+
52
+ import PyInstaller.building.makespec
53
+
54
+ spec_file = PyInstaller.building.makespec.main(filenames, **opts)
55
+ logger.info('wrote %s' % spec_file)
56
+ return spec_file
57
+
58
+
59
+ def run_build(pyi_config, spec_file, **kwargs):
60
+ import PyInstaller.building.build_main
61
+ PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
62
+
63
+
64
+ def __add_options(parser):
65
+ parser.add_argument(
66
+ '-v',
67
+ '--version',
68
+ action='version',
69
+ version=__version__,
70
+ help='Show program version info and exit.',
71
+ )
72
+
73
+
74
+ class _PyiArgumentParser(argparse.ArgumentParser):
75
+ def __init__(self, *args, **kwargs):
76
+ self._pyi_action_groups = defaultdict(list)
77
+ super().__init__(*args, **kwargs)
78
+
79
+ def _add_options(self, __add_options: callable, name: str = ""):
80
+ """
81
+ Mutate self with the given callable, storing any new actions added in a named group
82
+ """
83
+ n_actions_before = len(getattr(self, "_actions", []))
84
+ __add_options(self) # preserves old behavior
85
+ new_actions = getattr(self, "_actions", [])[n_actions_before:]
86
+ self._pyi_action_groups[name].extend(new_actions)
87
+
88
+ def _option_name(self, action):
89
+ """
90
+ Get the option name(s) associated with an action
91
+
92
+ For options that define both short and long names, this function will
93
+ return the long names joined by "/"
94
+ """
95
+ longnames = [name for name in action.option_strings if name.startswith("--")]
96
+ if longnames:
97
+ name = "/".join(longnames)
98
+ else:
99
+ name = action.option_strings[0]
100
+ return name
101
+
102
+ def _forbid_options(self, args: argparse.Namespace, group: str, errmsg: str = ""):
103
+ """Forbid options from a named action group"""
104
+ options = defaultdict(str)
105
+ for action in self._pyi_action_groups[group]:
106
+ dest = action.dest
107
+ name = self._option_name(action)
108
+ if getattr(args, dest) is not self.get_default(dest):
109
+ if dest in options:
110
+ options[dest] += "/"
111
+ options[dest] += name
112
+
113
+ # if any options from the forbidden group are not the default values,
114
+ # the user must have passed them in, so issue an error report
115
+ if options:
116
+ sep = "\n "
117
+ bad = sep.join(options.values())
118
+ if errmsg:
119
+ errmsg = "\n" + errmsg
120
+ raise SystemExit(f"option(s) not allowed:{sep}{bad}{errmsg}")
121
+
122
+
123
+ def generate_parser() -> _PyiArgumentParser:
124
+ """
125
+ Build an argparse parser for PyInstaller's main CLI.
126
+ """
127
+
128
+ import PyInstaller.building.build_main
129
+ import PyInstaller.building.makespec
130
+ import PyInstaller.log
131
+
132
+ parser = _PyiArgumentParser(formatter_class=_SmartFormatter)
133
+ parser.prog = "pyinstaller"
134
+
135
+ parser._add_options(__add_options)
136
+ parser._add_options(PyInstaller.building.makespec.__add_options, name="makespec")
137
+ parser._add_options(PyInstaller.building.build_main.__add_options, name="build_main")
138
+ parser._add_options(PyInstaller.log.__add_options, name="log")
139
+
140
+ parser.add_argument(
141
+ 'filenames',
142
+ metavar='scriptname',
143
+ nargs='+',
144
+ help="Name of scriptfiles to be processed or exactly one .spec file. If a .spec file is specified, most "
145
+ "options are unnecessary and are ignored.",
146
+ )
147
+
148
+ return parser
149
+
150
+
151
+ def run(pyi_args: list | None = None, pyi_config: dict | None = None):
152
+ """
153
+ pyi_args allows running PyInstaller programmatically without a subprocess
154
+ pyi_config allows checking configuration once when running multiple tests
155
+ """
156
+ compat.check_requirements()
157
+
158
+ import PyInstaller.log
159
+
160
+ try:
161
+ parser = generate_parser()
162
+ args = parser.parse_args(pyi_args)
163
+ PyInstaller.log.__process_options(parser, args)
164
+
165
+ # Print PyInstaller version, Python version, and platform as the first line to stdout. This helps us identify
166
+ # PyInstaller, Python, and platform version when users report issues.
167
+ logger.info('PyInstaller: %s' % __version__)
168
+ logger.info('Python: %s%s', platform.python_version(), " (conda)" if compat.is_conda else "")
169
+ logger.info('Platform: %s' % platform.platform())
170
+
171
+ # Skip creating .spec when .spec file is supplied.
172
+ if args.filenames[0].endswith('.spec'):
173
+ parser._forbid_options(
174
+ args, group="makespec", errmsg="makespec options not valid when a .spec file is given"
175
+ )
176
+ spec_file = args.filenames[0]
177
+ else:
178
+ spec_file = run_makespec(**vars(args))
179
+
180
+ run_build(pyi_config, spec_file, **vars(args))
181
+
182
+ except KeyboardInterrupt:
183
+ raise SystemExit("Aborted by user request.")
184
+ except RecursionError:
185
+ from PyInstaller import _recursion_too_deep_message
186
+ _recursion_too_deep_message.raise_with_msg()
187
+
188
+
189
+ def _console_script_run():
190
+ # Python prepends the main script's parent directory to sys.path. When PyInstaller is ran via the usual
191
+ # `pyinstaller` CLI entry point, this directory is $pythonprefix/bin which should not be in sys.path.
192
+ if os.path.basename(sys.path[0]) in ("bin", "Scripts"):
193
+ sys.path.pop(0)
194
+ run()
195
+
196
+
197
+ if __name__ == '__main__':
198
+ run()
myworld/Lib/site-packages/PyInstaller/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (2.1 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/__main__.cpython-311.pyc ADDED
Binary file (9.9 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/_recursion_too_deep_message.cpython-311.pyc ADDED
Binary file (1.63 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-311.pyc ADDED
Binary file (2.67 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/compat.cpython-311.pyc ADDED
Binary file (27.8 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/config.cpython-311.pyc ADDED
Binary file (1.4 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/configure.cpython-311.pyc ADDED
Binary file (4.62 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/exceptions.cpython-311.pyc ADDED
Binary file (1.5 kB). View file
 
myworld/Lib/site-packages/PyInstaller/__pycache__/log.cpython-311.pyc ADDED
Binary file (2.7 kB). View file
 
myworld/Lib/site-packages/PyInstaller/_recursion_too_deep_message.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2013-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+
12
+ msg = """
13
+ =============================================================
14
+ A RecursionError (maximum recursion depth exceeded) occurred.
15
+ For working around please follow these instructions
16
+ =============================================================
17
+
18
+ 1. In your program's .spec file add this line near the top::
19
+
20
+ import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
21
+
22
+ 2. Build your program by running PyInstaller with the .spec file as
23
+ argument::
24
+
25
+ pyinstaller myprog.spec
26
+
27
+ 3. If this fails, you most probably hit an endless recursion in
28
+ PyInstaller. Please try to track this down has far as possible,
29
+ create a minimal example so we can reproduce and open an issue at
30
+ https://github.com/pyinstaller/pyinstaller/issues following the
31
+ instructions in the issue template. Many thanks.
32
+
33
+ Explanation: Python's stack-limit is a safety-belt against endless recursion,
34
+ eating up memory. PyInstaller imports modules recursively. If the structure
35
+ how modules are imported within your program is awkward, this leads to the
36
+ nesting being too deep and hitting Python's stack-limit.
37
+
38
+ With the default recursion limit (1000), the recursion error occurs at about
39
+ 115 nested imported, with limit 2000 at about 240, with limit 5000 at about
40
+ 660.
41
+ """
42
+
43
+
44
+ def raise_with_msg():
45
+ raise SystemExit(msg)
myworld/Lib/site-packages/PyInstaller/_shared_with_waf.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2005-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+ """
12
+ Code to be shared by PyInstaller and the bootloader/wscript file.
13
+
14
+ This code must not assume that either PyInstaller or any of its dependencies installed. I.e., the only imports allowed
15
+ in here are standard library ones. Within reason, it is preferable that this file should still run under Python 2.7 as
16
+ many compiler docker images still have only Python 2 installed.
17
+ """
18
+
19
+ import platform
20
+ import re
21
+
22
+
23
+ def _pyi_machine(machine, system):
24
+ # type: (str, str) -> str
25
+ """
26
+ Choose an intentionally simplified architecture identifier to be used in the bootloader's directory name.
27
+
28
+ Args:
29
+ machine:
30
+ The output of ``platform.machine()`` or any known architecture alias or shorthand that may be used by a
31
+ C compiler.
32
+ system:
33
+ The output of ``platform.system()`` on the target machine.
34
+ Returns:
35
+ Either a string tag or, on platforms that don't need an architecture tag, ``None``.
36
+
37
+ Ideally, we would just use ``platform.machine()`` directly, but that makes cross-compiling the bootloader almost
38
+ impossible, because you need to know at compile time exactly what ``platform.machine()`` will be at run time, based
39
+ only on the machine name alias or shorthand reported by the C compiler at the build time. Rather, use a loose
40
+ differentiation, and trust that anyone mixing armv6l with armv6h knows what they are doing.
41
+ """
42
+ # See the corresponding tests in tests/unit/test_compat.py for examples.
43
+
44
+ if platform.machine() == "sw_64" or platform.machine() == "loongarch64":
45
+ # This explicitly inhibits cross compiling the bootloader for or on SunWay and LoongArch machine.
46
+ return platform.machine()
47
+
48
+ if system == "Windows":
49
+ if machine.lower().startswith("arm"):
50
+ return "arm"
51
+ else:
52
+ return "intel"
53
+
54
+ if system != "Linux":
55
+ # No architecture specifier for anything par Linux.
56
+ # - macOS is on two 64 bit architectures, but they are merged into one "universal2" bootloader.
57
+ # - BSD supports a wide range of architectures, but according to PyPI's download statistics, every one of our
58
+ # BSD users are on x86_64. This may change in the distant future.
59
+ return
60
+
61
+ if machine.startswith(("arm", "aarch")):
62
+ # ARM has a huge number of similar and aliased sub-versions, such as armv5, armv6l armv8h, aarch64.
63
+ return "arm"
64
+ if machine in ("thumb"):
65
+ # Reported by waf/gcc when Thumb instruction set is enabled on 32-bit ARM. The platform.machine() returns "arm"
66
+ # regardless of the instruction set.
67
+ return "arm"
68
+ if machine in ("x86_64", "x64", "x86"):
69
+ return "intel"
70
+ if re.fullmatch("i[1-6]86", machine):
71
+ return "intel"
72
+ if machine.startswith(("ppc", "powerpc")):
73
+ # PowerPC comes in 64 vs 32 bit and little vs big endian variants.
74
+ return "ppc"
75
+ if machine in ("mips64", "mips"):
76
+ return "mips"
77
+ if machine.startswith("riscv"):
78
+ return "riscv"
79
+ # Machines with no known aliases :)
80
+ if machine in ("s390x",):
81
+ return machine
82
+
83
+ # Unknown architectures are allowed by default, but will all be placed under one directory. In theory, trying to
84
+ # have multiple unknown architectures in one copy of PyInstaller will not work, but that should be sufficiently
85
+ # unlikely to ever happen.
86
+ return "unknown"
myworld/Lib/site-packages/PyInstaller/archive/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ __author__ = 'martin'
myworld/Lib/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (189 Bytes). View file
 
myworld/Lib/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-311.pyc ADDED
Binary file (2.39 kB). View file
 
myworld/Lib/site-packages/PyInstaller/archive/__pycache__/readers.cpython-311.pyc ADDED
Binary file (8.19 kB). View file
 
myworld/Lib/site-packages/PyInstaller/archive/__pycache__/writers.cpython-311.pyc ADDED
Binary file (16.8 kB). View file
 
myworld/Lib/site-packages/PyInstaller/archive/pyz_crypto.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2005-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+
12
+ import os
13
+
14
+ from PyInstaller import log as logging
15
+
16
+ BLOCK_SIZE = 16
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ class PyiBlockCipher:
21
+ """
22
+ This class is used only to encrypt Python modules.
23
+ """
24
+ def __init__(self, key=None):
25
+ logger.log(
26
+ logging.DEPRECATION,
27
+ "Bytecode encryption will be removed in PyInstaller v6. Please remove cipher and block_cipher parameters "
28
+ "from your spec file to avoid breakages on upgrade. For the rationale/alternatives see "
29
+ "https://github.com/pyinstaller/pyinstaller/pull/6999"
30
+ )
31
+ assert type(key) is str
32
+ if len(key) > BLOCK_SIZE:
33
+ self.key = key[0:BLOCK_SIZE]
34
+ else:
35
+ self.key = key.zfill(BLOCK_SIZE)
36
+ assert len(self.key) == BLOCK_SIZE
37
+
38
+ import tinyaes
39
+ self._aesmod = tinyaes
40
+
41
+ def encrypt(self, data):
42
+ iv = os.urandom(BLOCK_SIZE)
43
+ return iv + self.__create_cipher(iv).CTR_xcrypt_buffer(data)
44
+
45
+ def __create_cipher(self, iv):
46
+ # The 'AES' class is stateful, and this factory method is used to re-initialize the block cipher class with
47
+ # each call to xcrypt().
48
+ return self._aesmod.AES(self.key.encode(), iv)
myworld/Lib/site-packages/PyInstaller/archive/readers.py ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2013-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+ """
12
+ Python-based CArchive (PKG) reader implementation. Used only in the archive_viewer utility.
13
+ """
14
+
15
+ import os
16
+ import struct
17
+
18
+ from PyInstaller.loader.pyimod01_archive import ZlibArchiveReader, ArchiveReadError
19
+
20
+
21
+ class NotAnArchiveError(TypeError):
22
+ pass
23
+
24
+
25
+ # Type codes for CArchive TOC entries
26
+ PKG_ITEM_BINARY = 'b' # binary
27
+ PKG_ITEM_DEPENDENCY = 'd' # runtime option
28
+ PKG_ITEM_PYZ = 'z' # zlib (pyz) - frozen Python code
29
+ PKG_ITEM_ZIPFILE = 'Z' # zlib (pyz) - frozen Python code
30
+ PKG_ITEM_PYPACKAGE = 'M' # Python package (__init__.py)
31
+ PKG_ITEM_PYMODULE = 'm' # Python module
32
+ PKG_ITEM_PYSOURCE = 's' # Python script (v3)
33
+ PKG_ITEM_DATA = 'x' # data
34
+ PKG_ITEM_RUNTIME_OPTION = 'o' # runtime option
35
+ PKG_ITEM_SPLASH = 'l' # splash resources
36
+
37
+
38
+ class CArchiveReader:
39
+ """
40
+ Reader for PyInstaller's CArchive (PKG) archive.
41
+ """
42
+
43
+ # Cookie - holds some information for the bootloader. C struct format definition. '!' at the beginning means network
44
+ # byte order. C struct looks like:
45
+ #
46
+ # typedef struct _cookie {
47
+ # char magic[8]; /* 'MEI\014\013\012\013\016' */
48
+ # uint32_t len; /* len of entire package */
49
+ # uint32_t TOC; /* pos (rel to start) of TableOfContents */
50
+ # int TOClen; /* length of TableOfContents */
51
+ # int pyvers; /* new in v4 */
52
+ # char pylibname[64]; /* Filename of Python dynamic library. */
53
+ # } COOKIE;
54
+ #
55
+ _COOKIE_MAGIC_PATTERN = b'MEI\014\013\012\013\016'
56
+
57
+ _COOKIE_FORMAT = '!8sIIii64s'
58
+ _COOKIE_LENGTH = struct.calcsize(_COOKIE_FORMAT)
59
+
60
+ # TOC entry:
61
+ #
62
+ # typedef struct _toc {
63
+ # int structlen; /* len of this one - including full len of name */
64
+ # uint32_t pos; /* pos rel to start of concatenation */
65
+ # uint32_t len; /* len of the data (compressed) */
66
+ # uint32_t ulen; /* len of data (uncompressed) */
67
+ # char cflag; /* is it compressed (really a byte) */
68
+ # char typcd; /* type code -'b' binary, 'z' zlib, 'm' module,
69
+ # * 's' script (v3),'x' data, 'o' runtime option */
70
+ # char name[1]; /* the name to save it as */
71
+ # /* starting in v5, we stretch this out to a mult of 16 */
72
+ # } TOC;
73
+ #
74
+ _TOC_ENTRY_FORMAT = '!iIIIBB'
75
+ _TOC_ENTRY_LENGTH = struct.calcsize(_TOC_ENTRY_FORMAT)
76
+
77
+ def __init__(self, filename):
78
+ self._filename = filename
79
+ self._start_offset = 0
80
+ self._toc_offset = 0
81
+ self._toc_length = 0
82
+
83
+ self.toc = {}
84
+
85
+ # Load TOC
86
+ with open(self._filename, "rb") as fp:
87
+ # Find cookie MAGIC pattern
88
+ cookie_start_offset = self._find_magic_pattern(fp, self._COOKIE_MAGIC_PATTERN)
89
+ if cookie_start_offset == -1:
90
+ raise ArchiveReadError("Could not find COOKIE magic pattern!")
91
+
92
+ # Read the whole cookie
93
+ fp.seek(cookie_start_offset, os.SEEK_SET)
94
+ cookie_data = fp.read(self._COOKIE_LENGTH)
95
+
96
+ magic, archive_length, toc_offset, toc_length, pyvers, pylib_name = \
97
+ struct.unpack(self._COOKIE_FORMAT, cookie_data)
98
+
99
+ # Compute start of the the archive
100
+ self._start_offset = (cookie_start_offset + self._COOKIE_LENGTH) - archive_length
101
+
102
+ # Verify that Python shared library name is set
103
+ if not pylib_name:
104
+ raise ArchiveReadError("Python shared library name not set in the archive!")
105
+
106
+ # Read whole toc
107
+ fp.seek(self._start_offset + toc_offset)
108
+ toc_data = fp.read(toc_length)
109
+
110
+ self.toc = self._parse_toc(toc_data)
111
+
112
+ @staticmethod
113
+ def _find_magic_pattern(fp, magic_pattern):
114
+ # Start at the end of file, and scan back-to-start
115
+ fp.seek(0, os.SEEK_END)
116
+ end_pos = fp.tell()
117
+
118
+ # Scan from back
119
+ SEARCH_CHUNK_SIZE = 8192
120
+ magic_offset = -1
121
+ while end_pos >= len(magic_pattern):
122
+ start_pos = max(end_pos - SEARCH_CHUNK_SIZE, 0)
123
+ chunk_size = end_pos - start_pos
124
+ # Is the remaining chunk large enough to hold the pattern?
125
+ if chunk_size < len(magic_pattern):
126
+ break
127
+ # Read and scan the chunk
128
+ fp.seek(start_pos, os.SEEK_SET)
129
+ buf = fp.read(chunk_size)
130
+ pos = buf.rfind(magic_pattern)
131
+ if pos != -1:
132
+ magic_offset = start_pos + pos
133
+ break
134
+ # Adjust search location for next chunk; ensure proper overlap
135
+ end_pos = start_pos + len(magic_pattern) - 1
136
+
137
+ return magic_offset
138
+
139
+ @classmethod
140
+ def _parse_toc(cls, data):
141
+ toc = {}
142
+ cur_pos = 0
143
+ while cur_pos < len(data):
144
+ # Read and parse the fixed-size TOC entry header
145
+ entry_length, entry_offset, data_length, uncompressed_length, compression_flag, typecode = \
146
+ struct.unpack(cls._TOC_ENTRY_FORMAT, data[cur_pos:(cur_pos + cls._TOC_ENTRY_LENGTH)])
147
+ cur_pos += cls._TOC_ENTRY_LENGTH
148
+ # Read variable-length name
149
+ name_length = entry_length - cls._TOC_ENTRY_LENGTH
150
+ name, *_ = struct.unpack(f'{name_length}s', data[cur_pos:(cur_pos + name_length)])
151
+ cur_pos += name_length
152
+ # Name string may contain up to 15 bytes of padding
153
+ name = name.rstrip(b'\0').decode('utf-8')
154
+
155
+ typecode = chr(typecode)
156
+
157
+ # TODO: handle duplicates
158
+ toc[name] = (entry_offset, data_length, uncompressed_length, compression_flag, typecode)
159
+
160
+ return toc
161
+
162
+ def extract(self, name):
163
+ """
164
+ Extract data for the given entry name.
165
+ """
166
+
167
+ entry = self.toc.get(name)
168
+ if entry is None:
169
+ raise KeyError(f"No entry named {name} found in the archive!")
170
+
171
+ entry_offset, data_length, uncompressed_length, compression_flag, typecode = entry
172
+ with open(self._filename, "rb") as fp:
173
+ fp.seek(self._start_offset + entry_offset, os.SEEK_SET)
174
+ data = fp.read(data_length)
175
+
176
+ if compression_flag:
177
+ import zlib
178
+ data = zlib.decompress(data)
179
+
180
+ return data
181
+
182
+ def open_embedded_archive(self, name):
183
+ """
184
+ Open new archive reader for the embedded archive.
185
+ """
186
+
187
+ entry = self.toc.get(name)
188
+ if entry is None:
189
+ raise KeyError(f"No entry named {name} found in the archive!")
190
+
191
+ entry_offset, data_length, uncompressed_length, compression_flag, typecode = entry
192
+
193
+ if typecode == PKG_ITEM_PYZ:
194
+ # Open as embedded archive, without extraction.
195
+ return ZlibArchiveReader(self._filename, self._start_offset + entry_offset)
196
+ elif typecode == PKG_ITEM_ZIPFILE:
197
+ raise NotAnArchiveError("Zipfile archives not supported yet!")
198
+ else:
199
+ raise NotAnArchiveError(f"Entry {name} is not a supported embedded archive!")
200
+
201
+
202
+ def pkg_archive_contents(filename, recursive=True):
203
+ """
204
+ List the contents of the PKG / CArchive. If `recursive` flag is set (the default), the contents of the embedded PYZ
205
+ archive is included as well.
206
+
207
+ Used by the tests.
208
+ """
209
+
210
+ contents = []
211
+
212
+ pkg_archive = CArchiveReader(filename)
213
+ for name, toc_entry in pkg_archive.toc.items():
214
+ *_, typecode = toc_entry
215
+ contents.append(name)
216
+ if typecode == PKG_ITEM_PYZ and recursive:
217
+ pyz_archive = pkg_archive.open_embedded_archive(name)
218
+ for name in pyz_archive.toc.keys():
219
+ contents.append(name)
220
+
221
+ return contents
myworld/Lib/site-packages/PyInstaller/archive/writers.py ADDED
@@ -0,0 +1,402 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2005-2023, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+ """
12
+ Utilities to create data structures for embedding Python modules and additional files into the executable.
13
+ """
14
+
15
+ import marshal
16
+ import os
17
+ import shutil
18
+ import struct
19
+ import sys
20
+ import zlib
21
+
22
+ from PyInstaller.building.utils import get_code_object, strip_paths_in_code
23
+ from PyInstaller.compat import BYTECODE_MAGIC, is_win, strict_collect_mode
24
+ from PyInstaller.loader.pyimod01_archive import PYZ_ITEM_DATA, PYZ_ITEM_MODULE, PYZ_ITEM_NSPKG, PYZ_ITEM_PKG
25
+
26
+
27
+ class ZlibArchiveWriter:
28
+ """
29
+ Writer for PyInstaller's PYZ (ZlibArchive) archive. The archive is used to store collected byte-compiled Python
30
+ modules, as individually-compressed entries.
31
+ """
32
+ _PYZ_MAGIC_PATTERN = b'PYZ\0'
33
+ _HEADER_LENGTH = 12 + 5
34
+ _COMPRESSION_LEVEL = 6 # zlib compression level
35
+
36
+ def __init__(self, filename, entries, code_dict=None, cipher=None):
37
+ """
38
+ filename
39
+ Target filename of the archive.
40
+ entries
41
+ An iterable containing entries in the form of tuples: (name, src_path, typecode), where `name` is the name
42
+ under which the resource is stored (e.g., python module name, without suffix), `src_path` is name of the
43
+ file from which the resource is read, and `typecode` is the Analysis-level TOC typecode (`PYMODULE` or
44
+ `DATA`).
45
+ code_dict
46
+ Optional code dictionary containing code objects for analyzed/collected python modules.
47
+ cipher
48
+ Optional `Cipher` object for bytecode encryption.
49
+ """
50
+ code_dict = code_dict or {}
51
+
52
+ with open(filename, "wb") as fp:
53
+ # Reserve space for the header.
54
+ fp.write(b'\0' * self._HEADER_LENGTH)
55
+
56
+ # Write entries' data and collect TOC entries
57
+ toc = []
58
+ for entry in entries:
59
+ toc_entry = self._write_entry(fp, entry, code_dict, cipher)
60
+ toc.append(toc_entry)
61
+
62
+ # Write TOC
63
+ toc_offset = fp.tell()
64
+ toc_data = marshal.dumps(toc)
65
+ fp.write(toc_data)
66
+
67
+ # Write header:
68
+ # - PYZ magic pattern (4 bytes)
69
+ # - python bytecode magic pattern (4 bytes)
70
+ # - TOC offset (32-bit int, 4 bytes)
71
+ # - encryption flag (1 byte)
72
+ # - 4 unused bytes
73
+ fp.seek(0, os.SEEK_SET)
74
+
75
+ fp.write(self._PYZ_MAGIC_PATTERN)
76
+ fp.write(BYTECODE_MAGIC)
77
+ fp.write(struct.pack('!i', toc_offset))
78
+ fp.write(struct.pack('!B', cipher is not None))
79
+
80
+ @classmethod
81
+ def _write_entry(cls, fp, entry, code_dict, cipher):
82
+ name, src_path, typecode = entry
83
+
84
+ if typecode == 'PYMODULE':
85
+ typecode = PYZ_ITEM_MODULE
86
+ if src_path in ('-', None):
87
+ # This is a NamespacePackage, modulegraph marks them by using the filename '-'. (But wants to use None,
88
+ # so check for None, too, to be forward-compatible.)
89
+ typecode = PYZ_ITEM_NSPKG
90
+ else:
91
+ src_basename, _ = os.path.splitext(os.path.basename(src_path))
92
+ if src_basename == '__init__':
93
+ typecode = PYZ_ITEM_PKG
94
+ data = marshal.dumps(code_dict[name])
95
+ else:
96
+ # Any data files, that might be required by pkg_resources.
97
+ typecode = PYZ_ITEM_DATA
98
+ with open(src_path, 'rb') as fh:
99
+ data = fh.read()
100
+ # No need to use forward slash as path-separator here since pkg_resources on Windows uses back slash as
101
+ # path-separator.
102
+
103
+ # First compress, then encrypt.
104
+ obj = zlib.compress(data, cls._COMPRESSION_LEVEL)
105
+ if cipher:
106
+ obj = cipher.encrypt(obj)
107
+
108
+ # Create TOC entry
109
+ toc_entry = (name, (typecode, fp.tell(), len(obj)))
110
+
111
+ # Write data blob
112
+ fp.write(obj)
113
+
114
+ return toc_entry
115
+
116
+
117
+ class CArchiveWriter:
118
+ """
119
+ Writer for PyInstaller's CArchive (PKG) archive.
120
+
121
+ This archive contains all files that are bundled within an executable; a PYZ (ZlibArchive), DLLs, Python C
122
+ extensions, and other data files that are bundled in onefile mode.
123
+
124
+ The archive can be read from either C (bootloader code at application's run-time) or Python (for debug purposes).
125
+ """
126
+ _COOKIE_MAGIC_PATTERN = b'MEI\014\013\012\013\016'
127
+
128
+ # For cookie and TOC entry structure, see `PyInstaller.archive.readers.CArchiveReader`.
129
+ _COOKIE_FORMAT = '!8sIIii64s'
130
+ _COOKIE_LENGTH = struct.calcsize(_COOKIE_FORMAT)
131
+
132
+ _TOC_ENTRY_FORMAT = '!iIIIBB'
133
+ _TOC_ENTRY_LENGTH = struct.calcsize(_TOC_ENTRY_FORMAT)
134
+
135
+ _COMPRESSION_LEVEL = 9 # zlib compression level
136
+
137
+ def __init__(self, filename, entries, pylib_name):
138
+ """
139
+ filename
140
+ Target filename of the archive.
141
+ entries
142
+ An iterable containing entries in the form of tuples: (dest_name, src_name, compress, typecode), where
143
+ `dest_name` is the name under which the resource is stored in the archive (and name under which it is
144
+ extracted at runtime), `src_name` is name of the file from which the resouce is read, `compress` is a
145
+ boolean compression flag, and `typecode` is the Analysis-level TOC typecode.
146
+ pylib_name
147
+ Name of the python shared library.
148
+ """
149
+ self._collected_names = set() # Track collected names for strict package mode.
150
+
151
+ with open(filename, "wb") as fp:
152
+ # Write entries' data and collect TOC entries
153
+ toc = []
154
+ for entry in entries:
155
+ toc_entry = self._write_entry(fp, entry)
156
+ toc.append(toc_entry)
157
+
158
+ # Write TOC
159
+ toc_offset = fp.tell()
160
+ toc_data = self._serialize_toc(toc)
161
+ toc_length = len(toc_data)
162
+
163
+ fp.write(toc_data)
164
+
165
+ # Write cookie
166
+ archive_length = toc_offset + toc_length + self._COOKIE_LENGTH
167
+ pyvers = sys.version_info[0] * 100 + sys.version_info[1]
168
+ cookie_data = struct.pack(
169
+ self._COOKIE_FORMAT,
170
+ self._COOKIE_MAGIC_PATTERN,
171
+ archive_length,
172
+ toc_offset,
173
+ toc_length,
174
+ pyvers,
175
+ pylib_name.encode('ascii'),
176
+ )
177
+
178
+ fp.write(cookie_data)
179
+
180
+ def _write_entry(self, fp, entry):
181
+ dest_name, src_name, compress, typecode = entry
182
+
183
+ # Ensure forward slashes in paths are on Windows converted to back slashes '\\', as on Windows the bootloader
184
+ # works only with back slashes.
185
+ dest_name = os.path.normpath(dest_name)
186
+ if is_win and os.path.sep == '/':
187
+ # When building under MSYS, the above path normalization uses Unix-style separators, so replace them
188
+ # manually.
189
+ dest_name = dest_name.replace(os.path.sep, '\\')
190
+
191
+ # Strict pack/collect mode: keep track of the destination names, and raise an error if we try to add a duplicate
192
+ # (a file with same destination name, subject to OS case normalization rules).
193
+ if strict_collect_mode:
194
+ normalized_dest = None
195
+ if type in ('o', 's', 'm', 'M'):
196
+ # Exempt options, python source script, and modules from the check
197
+ pass
198
+ else:
199
+ # Everything else; normalize the case
200
+ normalized_dest = os.path.normcase(dest_name)
201
+ # Check for existing entry, if applicable
202
+ if normalized_dest:
203
+ if normalized_dest in self._collected_names:
204
+ raise ValueError(
205
+ f"Attempting to collect a duplicated file into CArchive: {normalized_dest} (type: {typecode})"
206
+ )
207
+ self._collected_names.add(normalized_dest)
208
+
209
+ if typecode == 'o':
210
+ return self._write_blob(fp, b"", dest_name, typecode)
211
+ elif typecode == 'd':
212
+ # Dependency; merge src_name (= reference path prefix) and dest_name (= name) into single-string format that
213
+ # is parsed by bootloader.
214
+ return self._write_blob(fp, b"", f"{src_name}:{dest_name}", typecode)
215
+ elif typecode == 's':
216
+ # If it is a source code file, compile it to a code object and marshal the object, so it can be unmarshalled
217
+ # by the bootloader.
218
+ code = get_code_object(dest_name, src_name)
219
+ code = strip_paths_in_code(code)
220
+ return self._write_blob(fp, marshal.dumps(code), dest_name, typecode, compress=compress)
221
+ elif typecode in ('m', 'M'):
222
+ # Read the PYC file
223
+ with open(src_name, "rb") as in_fp:
224
+ data = in_fp.read()
225
+ assert data[:4] == BYTECODE_MAGIC
226
+ # Skip the PYC header, load the code object.
227
+ code = marshal.loads(data[16:])
228
+ code = strip_paths_in_code(code)
229
+ # These module entries are loaded and executed within the bootloader, which requires only the code
230
+ # object, without the PYC header.
231
+ return self._write_blob(fp, marshal.dumps(code), dest_name, typecode, compress=compress)
232
+ else:
233
+ return self._write_file(fp, src_name, dest_name, typecode, compress=compress)
234
+
235
+ def _write_blob(self, out_fp, blob: bytes, dest_name, typecode, compress=False):
236
+ """
237
+ Write the binary contents (**blob**) of a small file to the archive and return the corresponding CArchive TOC
238
+ entry.
239
+ """
240
+ data_offset = out_fp.tell()
241
+ data_length = len(blob)
242
+ if compress:
243
+ blob = zlib.compress(blob, level=self._COMPRESSION_LEVEL)
244
+ out_fp.write(blob)
245
+
246
+ return (data_offset, len(blob), data_length, int(compress), typecode, dest_name)
247
+
248
+ def _write_file(self, out_fp, src_name, dest_name, typecode, compress=False):
249
+ """
250
+ Stream copy a large file into the archive and return the corresponding CArchive TOC entry.
251
+ """
252
+ data_offset = out_fp.tell()
253
+ data_length = os.stat(src_name).st_size
254
+ with open(src_name, 'rb') as in_fp:
255
+ if compress:
256
+ tmp_buffer = bytearray(16 * 1024)
257
+ compressor = zlib.compressobj(self._COMPRESSION_LEVEL)
258
+ while True:
259
+ num_read = in_fp.readinto(tmp_buffer)
260
+ if not num_read:
261
+ break
262
+ out_fp.write(compressor.compress(tmp_buffer[:num_read]))
263
+ out_fp.write(compressor.flush())
264
+ else:
265
+ shutil.copyfileobj(in_fp, out_fp)
266
+
267
+ return (data_offset, out_fp.tell() - data_offset, data_length, int(compress), typecode, dest_name)
268
+
269
+ @classmethod
270
+ def _serialize_toc(cls, toc):
271
+ serialized_toc = []
272
+ for toc_entry in toc:
273
+ data_offset, compressed_length, data_length, compress, typecode, name = toc_entry
274
+
275
+ # Encode names as UTF-8. This should be safe as standard python modules only contain ASCII-characters (and
276
+ # standard shared libraries should have the same), and thus the C-code still can handle this correctly.
277
+ name = name.encode('utf-8')
278
+ name_length = len(name) + 1 # Add 1 for string-terminating zero byte.
279
+
280
+ # Ensure TOC entries are aligned on 16-byte boundary, so they can be read by bootloader (C code) on
281
+ # platforms with strict data alignment requirements (for example linux on `armhf`/`armv7`, such as 32-bit
282
+ # Debian Buster on Raspberry Pi).
283
+ entry_length = cls._TOC_ENTRY_LENGTH + name_length
284
+ if entry_length % 16 != 0:
285
+ padding_length = 16 - (entry_length % 16)
286
+ name_length += padding_length
287
+
288
+ # Serialize
289
+ serialized_entry = struct.pack(
290
+ cls._TOC_ENTRY_FORMAT + f"{name_length}s", # "Ns" format automatically pads the string with zero bytes.
291
+ cls._TOC_ENTRY_LENGTH + name_length,
292
+ data_offset,
293
+ compressed_length,
294
+ data_length,
295
+ compress,
296
+ ord(typecode),
297
+ name,
298
+ )
299
+ serialized_toc.append(serialized_entry)
300
+
301
+ return b''.join(serialized_toc)
302
+
303
+
304
+ class SplashWriter:
305
+ """
306
+ Writer for the splash screen resources archive.
307
+
308
+ The resulting archive is added as an entry into the CArchive with the typecode PKG_ITEM_SPLASH.
309
+ """
310
+ # This struct describes the splash resources as it will be in an buffer inside the bootloader. All necessary parts
311
+ # are bundled, the *_len and *_offset fields describe the data beyond this header definition.
312
+ # Whereas script and image fields are binary data, the requirements fields describe an array of strings. Each string
313
+ # is null-terminated in order to easily iterate over this list from within C.
314
+ #
315
+ # typedef struct _splash_data_header {
316
+ # char tcl_libname[16]; /* Name of tcl library, e.g. tcl86t.dll */
317
+ # char tk_libname[16]; /* Name of tk library, e.g. tk86t.dll */
318
+ # char tk_lib[16]; /* Tk Library generic, e.g. "tk/" */
319
+ # char rundir[16]; /* temp folder inside extraction path in
320
+ # * which the dependencies are extracted */
321
+ #
322
+ # int script_len; /* Length of the script */
323
+ # int script_offset; /* Offset (rel to start) of the script */
324
+ #
325
+ # int image_len; /* Length of the image data */
326
+ # int image_offset; /* Offset (rel to start) of the image */
327
+ #
328
+ # int requirements_len;
329
+ # int requirements_offset;
330
+ #
331
+ # } SPLASH_DATA_HEADER;
332
+ #
333
+ _HEADER_FORMAT = '!16s 16s 16s 16s ii ii ii'
334
+ _HEADER_LENGTH = struct.calcsize(_HEADER_FORMAT)
335
+
336
+ # The created archive is compressed by the CArchive, so no need to compress the data here.
337
+
338
+ def __init__(self, filename, name_list, tcl_libname, tk_libname, tklib, rundir, image, script):
339
+ """
340
+ Writer for splash screen resources that are bundled into the CArchive as a single archive/entry.
341
+
342
+ :param filename: The filename of the archive to create
343
+ :param name_list: List of filenames for the requirements array
344
+ :param str tcl_libname: Name of the tcl shared library file
345
+ :param str tk_libname: Name of the tk shared library file
346
+ :param str tklib: Root of tk library (e.g. tk/)
347
+ :param str rundir: Unique path to extract requirements to
348
+ :param Union[str, bytes] image: Image like object
349
+ :param str script: The tcl/tk script to execute to create the screen.
350
+ """
351
+
352
+ with open(filename, "wb") as fp:
353
+ # Reserve space for the header.
354
+ fp.write(b'\0' * self._HEADER_LENGTH)
355
+
356
+ # Serialize the requirements list. This list (more an array) contains the names of all files the bootloader
357
+ # needs to extract before the splash screen can be started. The implementation terminates every name with a
358
+ # null-byte, that keeps the list short memory wise and makes it iterable from C.
359
+ requirements_len = 0
360
+ requirements_offset = fp.tell()
361
+ for name in name_list:
362
+ name = name.encode('utf-8') + b'\0'
363
+ fp.write(name)
364
+ requirements_len += len(name)
365
+
366
+ # Write splash script
367
+ script_offset = fp.tell()
368
+ script_len = len(script)
369
+ fp.write(script.encode("utf-8"))
370
+
371
+ # Write splash image. If image is a bytes buffer, it is written directly into the archive. Otherwise, it
372
+ # is assumed to be a path and the file is copied into the archive.
373
+ image_offset = fp.tell()
374
+ if isinstance(image, bytes):
375
+ # Image was converted by PIL/Pillow and is already in buffer
376
+ image_len = len(image)
377
+ fp.write(image)
378
+ else:
379
+ # Read image into buffer
380
+ with open(image, 'rb') as image_fp:
381
+ image_data = image_fp.read()
382
+ image_len = len(image_data)
383
+ fp.write(image_data)
384
+ del image_data
385
+
386
+ # Write header
387
+ header_data = struct.pack(
388
+ self._HEADER_FORMAT,
389
+ tcl_libname.encode("utf-8"),
390
+ tk_libname.encode("utf-8"),
391
+ tklib.encode("utf-8"),
392
+ rundir.encode("utf-8"),
393
+ script_len,
394
+ script_offset,
395
+ image_len,
396
+ image_offset,
397
+ requirements_len,
398
+ requirements_offset,
399
+ )
400
+
401
+ fp.seek(0, os.SEEK_SET)
402
+ fp.write(header_data)
myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/run.exe ADDED
Binary file (258 kB). View file
 
myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/run_d.exe ADDED
Binary file (263 kB). View file
 
myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/runw.exe ADDED
Binary file (259 kB). View file
 
myworld/Lib/site-packages/PyInstaller/bootloader/Windows-64bit-intel/runw_d.exe ADDED
Binary file (264 kB). View file
 
myworld/Lib/site-packages/PyInstaller/bootloader/images/icon-console.ico ADDED
myworld/Lib/site-packages/PyInstaller/bootloader/images/icon-windowed.ico ADDED
myworld/Lib/site-packages/PyInstaller/building/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ #
myworld/Lib/site-packages/PyInstaller/building/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (170 Bytes). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/api.cpython-311.pyc ADDED
Binary file (51.5 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/build_main.cpython-311.pyc ADDED
Binary file (45.5 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-311.pyc ADDED
Binary file (18 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/icon.cpython-311.pyc ADDED
Binary file (4.43 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/makespec.cpython-311.pyc ADDED
Binary file (31.2 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/osx.cpython-311.pyc ADDED
Binary file (13.8 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/splash.cpython-311.pyc ADDED
Binary file (23.8 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-311.pyc ADDED
Binary file (6.72 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/templates.cpython-311.pyc ADDED
Binary file (3.35 kB). View file
 
myworld/Lib/site-packages/PyInstaller/building/__pycache__/toc_conversion.cpython-311.pyc ADDED
Binary file (7.47 kB). View file