langtable 0.0.64__tar.gz → 0.0.66__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {langtable-0.0.64 → langtable-0.0.66}/ChangeLog +25 -0
  2. {langtable-0.0.64 → langtable-0.0.66}/MANIFEST.in +3 -0
  3. {langtable-0.0.64 → langtable-0.0.66}/Makefile +24 -14
  4. {langtable-0.0.64 → langtable-0.0.66}/PKG-INFO +36 -35
  5. {langtable-0.0.64 → langtable-0.0.66}/README +30 -22
  6. langtable-0.0.66/README.html +226 -0
  7. langtable-0.0.66/README.md +72 -0
  8. langtable-0.0.66/langtable/data/languages.xml.gz +0 -0
  9. langtable-0.0.66/langtable/data/territories.xml.gz +0 -0
  10. langtable-0.0.66/langtable/data/timezoneidparts.xml.gz +0 -0
  11. {langtable-0.0.64 → langtable-0.0.66}/langtable/langtable.py +8 -2
  12. {langtable-0.0.64 → langtable-0.0.66}/langtable.egg-info/PKG-INFO +36 -35
  13. {langtable-0.0.64 → langtable-0.0.66}/langtable.egg-info/SOURCES.txt +2 -0
  14. {langtable-0.0.64 → langtable-0.0.66}/main.py +14 -9
  15. {langtable-0.0.64 → langtable-0.0.66}/setup.py +3 -2
  16. {langtable-0.0.64 → langtable-0.0.66}/test_cases.py +13 -12
  17. langtable-0.0.64/langtable/data/languages.xml.gz +0 -0
  18. langtable-0.0.64/langtable/data/territories.xml.gz +0 -0
  19. langtable-0.0.64/langtable/data/timezoneidparts.xml.gz +0 -0
  20. {langtable-0.0.64 → langtable-0.0.66}/COPYING +0 -0
  21. {langtable-0.0.64 → langtable-0.0.66}/langtable/__init__.py +0 -0
  22. {langtable-0.0.64 → langtable-0.0.66}/langtable/data/keyboards.xml.gz +0 -0
  23. {langtable-0.0.64 → langtable-0.0.66}/langtable/data/timezones.xml.gz +0 -0
  24. {langtable-0.0.64 → langtable-0.0.66}/langtable/schemas/keyboards.rng +0 -0
  25. {langtable-0.0.64 → langtable-0.0.66}/langtable/schemas/languages.rng +0 -0
  26. {langtable-0.0.64 → langtable-0.0.66}/langtable/schemas/territories.rng +0 -0
  27. {langtable-0.0.64 → langtable-0.0.66}/langtable/schemas/timezoneidparts.rng +0 -0
  28. {langtable-0.0.64 → langtable-0.0.66}/langtable/schemas/timezones.rng +0 -0
  29. {langtable-0.0.64 → langtable-0.0.66}/langtable.egg-info/dependency_links.txt +0 -0
  30. {langtable-0.0.64 → langtable-0.0.66}/langtable.egg-info/not-zip-safe +0 -0
  31. {langtable-0.0.64 → langtable-0.0.66}/langtable.egg-info/top_level.txt +0 -0
  32. {langtable-0.0.64 → langtable-0.0.66}/setup.cfg +0 -0
  33. {langtable-0.0.64 → langtable-0.0.66}/tools/compare_with_glib_source.py +0 -0
  34. {langtable-0.0.64 → langtable-0.0.66}/tools/list-missing-regions-and-languages.sh +0 -0
  35. {langtable-0.0.64 → langtable-0.0.66}/unicode-license.txt +0 -0
@@ -1,3 +1,28 @@
1
+ 2024-05-07 Mike FABIAN <mfabian@redhat.com>
2
+
3
+ * Fix syntax error in a keyboard layout name for th
4
+ (Resolves: https://github.com/mike-fabian/langtable/issues/21xs)
5
+ * Add mdf
6
+ * Use “in(eng)” keyboard layout instead of “us” for BD to get AltGr enabled
7
+ * Get translation changes from CLDR
8
+ * Add option to include changed translations as well to the script getting translations from CLDR
9
+ * Add reference to the the PyPI package to the README.md.
10
+ And add a README.html and README generated from the README.md.
11
+ * Make test outputs somewhat more verbose, even when all tests pass
12
+ (Resolves: https://github.com/mike-fabian/langtable/pull/20).
13
+ Thanks to Sebastian <seb128@ubuntu.com> for the pull request.
14
+ * Fix Makefile twine-upload target for new authentification
15
+
16
+ 2024-02-08 Mike FABIAN <mfabian@redhat.com>
17
+
18
+ * Add wuu, tok, glk, gbm, ssy
19
+ * Remove aa_ER.UTF-8@saaho
20
+ * Add kv_RU.UTF-8, chr_RU.UTF-8
21
+ * Add EU, EZ
22
+ * Improve README and Makefile (Resolves: https://github.com/mike-fabian/langtable/issues/19)
23
+ * Add more translations from CLDR
24
+ * Get translation changes from CLDR
25
+
1
26
  2023-09-19 Mike FABIAN <mfabian@redhat.com>
2
27
 
3
28
  * Add new public functions list_all_{languages,locales,keyboards,territories,timezones,scripts,input_methods,console_fonts}
@@ -1,3 +1,6 @@
1
+ include README.html
2
+ include README.md
3
+ include README
1
4
  include unicode-license.txt
2
5
  include COPYING
3
6
  include ChangeLog
@@ -5,22 +5,19 @@ PWD := $(shell pwd)
5
5
  SRCDIR=$(PWD)
6
6
 
7
7
  .PHONY: gzip
8
- gzip:
9
- gzip --keep --force --best langtable/data/*.xml
8
+ gzip: langtable/data/keyboards.xml.gz langtable/data/languages.xml.gz langtable/data/territories.xml.gz langtable/data/timezones.xml.gz langtable/data/timezoneidparts.xml.gz
10
9
 
11
10
  .PHONY: test
12
11
  test: gzip
13
- #(cd langtable; python2 langtable.py)
14
- (cd langtable; python3 langtable.py)
15
- #python2 test_cases.py
12
+ python3 langtable/langtable.py
16
13
  python3 test_cases.py
17
- (cd langtable; xmllint --noout --relaxng schemas/keyboards.rng data/keyboards.xml.gz)
18
- (cd langtable; xmllint --noout --relaxng schemas/languages.rng data/languages.xml.gz)
19
- (cd langtable; xmllint --noout --relaxng schemas/territories.rng data/territories.xml.gz)
20
- (cd langtable; xmllint --noout --relaxng schemas/timezones.rng data/timezones.xml.gz)
21
- (cd langtable; xmllint --noout --relaxng schemas/timezoneidparts.rng data/timezoneidparts.xml.gz)
14
+ xmllint --noout --relaxng langtable/schemas/keyboards.rng langtable/data/keyboards.xml.gz
15
+ xmllint --noout --relaxng langtable/schemas/languages.rng langtable/data/languages.xml.gz
16
+ xmllint --noout --relaxng langtable/schemas/territories.rng langtable/data/territories.xml.gz
17
+ xmllint --noout --relaxng langtable/schemas/timezones.rng langtable/data/timezones.xml.gz
18
+ xmllint --noout --relaxng langtable/schemas/timezoneidparts.rng langtable/data/timezoneidparts.xml.gz
22
19
 
23
- .PHONE: check
20
+ .PHONY: check
24
21
  check: test
25
22
 
26
23
  .PHONY: dist
@@ -33,6 +30,10 @@ install: dist
33
30
  DISTUTILS_DEBUG=$(DEBUG) python3 ./setup.py install --prefix=$(DESTDIR)
34
31
  # DISTUTILS_DEBUG=$(DEBUG) python3 ./setup.py install_data --install-dir=$(DATADIR)
35
32
 
33
+ .PHONY: twine-check
34
+ twine-check: dist
35
+ twine check dist/*
36
+
36
37
  # check it here: https://test.pypi.org/manage/project/langtable/releases/
37
38
  .PHONY: twine-upload-test
38
39
  twine-upload-test: dist
@@ -41,15 +42,15 @@ twine-upload-test: dist
41
42
  # check it here: https://pypi.org/manage/project/langtable/releases/
42
43
  .PHONY: twine-upload
43
44
  twine-upload: dist
44
- python3 -m twine upload --verbose dist/*
45
+ python3 -m twine upload --verbose --repository pypi dist/*
45
46
 
46
47
  .PHONY: pip-install-test
47
48
  pip-install-test:
48
- (cd /tmp; python3 -m pip install --user --ignore-installed --index-url https://test.pypi.org/simple/ --no-deps langtable)
49
+ (cd /tmp; python3 -m pip install --user --ignore-installed --no-cache-dir --index-url https://test.pypi.org/simple/ --no-deps langtable)
49
50
 
50
51
  .PHONY: pip-install
51
52
  pip-install:
52
- (cd /tmp; python3 -m pip install --user --ignore-installed --no-deps langtable)
53
+ (cd /tmp; python3 -m pip install --user --ignore-installed --no-cache-dir --no-deps langtable)
53
54
 
54
55
  .PHONY: clean
55
56
  clean:
@@ -69,6 +70,9 @@ review: mockbuild
69
70
  cp *.spec ./mockbuild-results/
70
71
  (cd ./mockbuild-results/; fedora-review -n langtable -m $(MOCK_CONFIG) )
71
72
 
73
+ %.xml.gz: %.xml
74
+ gzip --keep --force --best $< $@
75
+
72
76
  # .rnc files for editing with Emacs
73
77
  # https://fedoraproject.org/wiki/How_to_use_Emacs_for_XML_editing
74
78
  %.rnc: %.rng
@@ -76,3 +80,9 @@ review: mockbuild
76
80
 
77
81
  rnc: schemas/keyboards.rnc schemas/languages.rnc schemas/territories.rnc schemas/timezones.rnc schemas/timezoneidparts.rnc
78
82
  cp schemas/*.rnc data/
83
+
84
+ README: README.html
85
+ w3m -cols 78 -o display_borders=1 -o display_link_number=1 $< > $@
86
+
87
+ README.html: README.md
88
+ pandoc -f gfm -t html --standalone --self-contained --metadata pagetitle="langtable README" $< > $@
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langtable
3
- Version: 0.0.64
3
+ Version: 0.0.66
4
4
  Summary: guess reasonable defaults for locale, keyboard, territory, ...
5
5
  Home-page: https://github.com/mike-fabian/langtable
6
6
  Author: Mike FABIAN
@@ -13,64 +13,57 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Classifier: Programming Language :: Python
15
15
  Classifier: Topic :: System :: Installation/Setup
16
+ Description-Content-Type: text/markdown
16
17
  License-File: COPYING
17
18
 
18
- ======================================================================
19
- langtable
20
- ======================================================================
19
+ # langtable
21
20
 
22
- Purpose of this package
23
- =======================
21
+ [![PyPI version](https://badge.fury.io/py/langtable.svg)](https://badge.fury.io/py/langtable)
24
22
 
25
- langtable is used to guess reasonable defaults for locale, keyboard,
26
- territory, …, if part of that information is already known. For
27
- example, guess the territory and the keyboard layout if the language
28
- is known or guess the language and keyboard layout if the territory is
29
- already known.
23
+ Guessing reasonable defaults for locale, keyboard layout, territory, and language.
30
24
 
31
- License
32
- =======
25
+ ## Purpose of this package
26
+ _langtable_ is used to guess reasonable defaults for locale, keyboard, territory, …, if part of that information is already known. For example, guess the territory and the keyboard layout if the language is known or guess the language and keyboard layout if the territory is already known.
27
+
28
+ ## License
33
29
 
34
30
  GPLv3+, see the included file “COPYING”.
35
31
 
36
- Translations for languages and territory names are from CLDR which is
37
- governed by the Unicode Terms of Use, see the included file
38
- “unicode-license.txt”. The short name for this Unicode license is
39
- “MIT”. See:
32
+ Translations for languages and territory names are from CLDR which is governed by the Unicode Terms of Use, see the included file “unicode-license.txt”. The short name for this Unicode license is “MIT”. See:
40
33
 
41
34
  https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29
42
35
 
43
- Installation
44
- ============
36
+ ## Installation
45
37
 
46
38
  To install langtable, run
47
39
 
40
+ ```
48
41
  make install DESTDIR=/usr
42
+ ```
49
43
 
50
44
  To create a distribution tarball run
51
-
45
+ ```
52
46
  make dist
53
-
47
+ ```
54
48
  To run the test cases in the source directory:
49
+ ```
50
+ make check
51
+ ```
55
52
 
56
- make test-local
57
-
58
- To run the test cases using the installed files:
59
-
60
- make install DESTDIR=/usr
61
- make test DESTDIR=/usr
62
-
63
- How to use it
64
- =============
53
+ ## How to use it
65
54
 
55
+ ```
66
56
  import langtable
57
+ ```
67
58
 
68
59
  Functions in the public API:
69
60
 
61
+ ```
70
62
  parse_locale()
71
63
  list_locales()
72
64
  list_keyboards()
73
65
  list_common_languages()
66
+ list_common_locales()
74
67
  list_common_keyboards()
75
68
  list_consolefonts()
76
69
  list_inputmethods()
@@ -82,8 +75,16 @@ Functions in the public API:
82
75
  languageId()
83
76
  territoryId()
84
77
  supports_ascii()
85
-
86
- Some examples to show the usage are found in the documentation
87
- of the public functions in langtable.py.
88
-
89
- (Some more examples are in the test cases in the file test_cases.py):
78
+ list_all_languages()
79
+ list_all_locales()
80
+ list_all_keyboards()
81
+ list_all_territories()
82
+ list_all_timezones()
83
+ list_all_scripts()
84
+ list_all_input_methods()
85
+ list_all_console_fonts()
86
+ ```
87
+
88
+ Some examples to show the usage are found in the documentation of the public functions in `langtable.py`.
89
+
90
+ Some more examples are in the test cases in the file `test_cases.py`.
@@ -1,30 +1,29 @@
1
- ======================================================================
2
1
  langtable
3
- ======================================================================
2
+
3
+ [1]PyPI version
4
+
5
+ Guessing reasonable defaults for locale, keyboard layout, territory, and
6
+ language.
4
7
 
5
8
  Purpose of this package
6
- =======================
7
9
 
8
10
  langtable is used to guess reasonable defaults for locale, keyboard,
9
- territory, …, if part of that information is already known. For
10
- example, guess the territory and the keyboard layout if the language
11
- is known or guess the language and keyboard layout if the territory is
12
- already known.
11
+ territory, …, if part of that information is already known. For example,
12
+ guess the territory and the keyboard layout if the language is known or guess
13
+ the language and keyboard layout if the territory is already known.
13
14
 
14
15
  License
15
- =======
16
16
 
17
17
  GPLv3+, see the included file “COPYING”.
18
18
 
19
19
  Translations for languages and territory names are from CLDR which is
20
20
  governed by the Unicode Terms of Use, see the included file
21
- “unicode-license.txt”. The short name for this Unicode license is
22
- “MIT”. See:
21
+ “unicode-license.txt”. The short name for this Unicode license is “MIT”. See:
23
22
 
24
- https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29
23
+ [2]https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#
24
+ Modern_Style_without_sublicense_.28Unicode.29
25
25
 
26
26
  Installation
27
- ============
28
27
 
29
28
  To install langtable, run
30
29
 
@@ -36,15 +35,9 @@ To create a distribution tarball run
36
35
 
37
36
  To run the test cases in the source directory:
38
37
 
39
- make test-local
40
-
41
- To run the test cases using the installed files:
42
-
43
- make install DESTDIR=/usr
44
- make test DESTDIR=/usr
38
+ make check
45
39
 
46
40
  How to use it
47
- =============
48
41
 
49
42
  import langtable
50
43
 
@@ -54,6 +47,7 @@ Functions in the public API:
54
47
  list_locales()
55
48
  list_keyboards()
56
49
  list_common_languages()
50
+ list_common_locales()
57
51
  list_common_keyboards()
58
52
  list_consolefonts()
59
53
  list_inputmethods()
@@ -65,8 +59,22 @@ Functions in the public API:
65
59
  languageId()
66
60
  territoryId()
67
61
  supports_ascii()
62
+ list_all_languages()
63
+ list_all_locales()
64
+ list_all_keyboards()
65
+ list_all_territories()
66
+ list_all_timezones()
67
+ list_all_scripts()
68
+ list_all_input_methods()
69
+ list_all_console_fonts()
70
+
71
+ Some examples to show the usage are found in the documentation of the public
72
+ functions in langtable.py.
73
+
74
+ Some more examples are in the test cases in the file test_cases.py.
75
+
68
76
 
69
- Some examples to show the usage are found in the documentation
70
- of the public functions in langtable.py.
77
+ References:
71
78
 
72
- (Some more examples are in the test cases in the file test_cases.py):
79
+ [1] https://badge.fury.io/py/langtable
80
+ [2] https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29
@@ -0,0 +1,226 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="generator" content="pandoc" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
7
+ <title>langtable README</title>
8
+ <style>
9
+ html {
10
+ color: #1a1a1a;
11
+ background-color: #fdfdfd;
12
+ }
13
+ body {
14
+ margin: 0 auto;
15
+ max-width: 36em;
16
+ padding-left: 50px;
17
+ padding-right: 50px;
18
+ padding-top: 50px;
19
+ padding-bottom: 50px;
20
+ hyphens: auto;
21
+ overflow-wrap: break-word;
22
+ text-rendering: optimizeLegibility;
23
+ font-kerning: normal;
24
+ }
25
+ @media (max-width: 600px) {
26
+ body {
27
+ font-size: 0.9em;
28
+ padding: 12px;
29
+ }
30
+ h1 {
31
+ font-size: 1.8em;
32
+ }
33
+ }
34
+ @media print {
35
+ html {
36
+ background-color: white;
37
+ }
38
+ body {
39
+ background-color: transparent;
40
+ color: black;
41
+ font-size: 12pt;
42
+ }
43
+ p, h2, h3 {
44
+ orphans: 3;
45
+ widows: 3;
46
+ }
47
+ h2, h3, h4 {
48
+ page-break-after: avoid;
49
+ }
50
+ }
51
+ p {
52
+ margin: 1em 0;
53
+ }
54
+ a {
55
+ color: #1a1a1a;
56
+ }
57
+ a:visited {
58
+ color: #1a1a1a;
59
+ }
60
+ img {
61
+ max-width: 100%;
62
+ }
63
+ h1, h2, h3, h4, h5, h6 {
64
+ margin-top: 1.4em;
65
+ }
66
+ h5, h6 {
67
+ font-size: 1em;
68
+ font-style: italic;
69
+ }
70
+ h6 {
71
+ font-weight: normal;
72
+ }
73
+ ol, ul {
74
+ padding-left: 1.7em;
75
+ margin-top: 1em;
76
+ }
77
+ li > ol, li > ul {
78
+ margin-top: 0;
79
+ }
80
+ blockquote {
81
+ margin: 1em 0 1em 1.7em;
82
+ padding-left: 1em;
83
+ border-left: 2px solid #e6e6e6;
84
+ color: #606060;
85
+ }
86
+ code {
87
+ font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
88
+ font-size: 85%;
89
+ margin: 0;
90
+ hyphens: manual;
91
+ }
92
+ pre {
93
+ margin: 1em 0;
94
+ overflow: auto;
95
+ }
96
+ pre code {
97
+ padding: 0;
98
+ overflow: visible;
99
+ overflow-wrap: normal;
100
+ }
101
+ .sourceCode {
102
+ background-color: transparent;
103
+ overflow: visible;
104
+ }
105
+ hr {
106
+ background-color: #1a1a1a;
107
+ border: none;
108
+ height: 1px;
109
+ margin: 1em 0;
110
+ }
111
+ table {
112
+ margin: 1em 0;
113
+ border-collapse: collapse;
114
+ width: 100%;
115
+ overflow-x: auto;
116
+ display: block;
117
+ font-variant-numeric: lining-nums tabular-nums;
118
+ }
119
+ table caption {
120
+ margin-bottom: 0.75em;
121
+ }
122
+ tbody {
123
+ margin-top: 0.5em;
124
+ border-top: 1px solid #1a1a1a;
125
+ border-bottom: 1px solid #1a1a1a;
126
+ }
127
+ th {
128
+ border-top: 1px solid #1a1a1a;
129
+ padding: 0.25em 0.5em 0.25em 0.5em;
130
+ }
131
+ td {
132
+ padding: 0.125em 0.5em 0.25em 0.5em;
133
+ }
134
+ header {
135
+ margin-bottom: 4em;
136
+ text-align: center;
137
+ }
138
+ #TOC li {
139
+ list-style: none;
140
+ }
141
+ #TOC ul {
142
+ padding-left: 1.3em;
143
+ }
144
+ #TOC > ul {
145
+ padding-left: 0;
146
+ }
147
+ #TOC a:not(:hover) {
148
+ text-decoration: none;
149
+ }
150
+ code{white-space: pre-wrap;}
151
+ span.smallcaps{font-variant: small-caps;}
152
+ div.columns{display: flex; gap: min(4vw, 1.5em);}
153
+ div.column{flex: auto; overflow-x: auto;}
154
+ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
155
+
156
+ ul.task-list[class]{list-style: none;}
157
+ ul.task-list li input[type="checkbox"] {
158
+ font-size: inherit;
159
+ width: 0.8em;
160
+ margin: 0 0.8em 0.2em -1.6em;
161
+ vertical-align: middle;
162
+ }
163
+ .display.math{display: block; text-align: center; margin: 0.5rem auto;}
164
+ </style>
165
+ <!--[if lt IE 9]>
166
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
167
+ <![endif]-->
168
+ </head>
169
+ <body>
170
+ <h1 id="langtable">langtable</h1>
171
+ <p><a href="https://badge.fury.io/py/langtable"><img src="data:image/svg+xml;base64,PHN2ZwogIHdpZHRoPSIxMzIiCiAgaGVpZ2h0PSIyMCIKICB2aWV3Qm94PSIwIDAgMTMyIDIwIgogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnM+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgaWQ9ImEiCiAgICAgIHgxPSIwIgogICAgICB5MT0iMCIKICAgICAgeDI9IjAiCiAgICAgIHkyPSIxIj4KICAgICAgPHN0b3AKICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgc3RvcC1jb2xvcj0iI2JiYmJiYiIKICAgICAgICBzdG9wLW9wYWNpdHk9IjAuMSIvPgogICAgICA8c3RvcAogICAgICAgIG9mZnNldD0iMSIKICAgICAgICBzdG9wLWNvbG9yPSIjMDAwMDAwIgogICAgICAgIHN0b3Atb3BhY2l0eT0iMC4xIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8cGF0aAogICAgZmlsbD0iIzU1NTU1NSIKICAgIHN0cm9rZT0ibm9uZSIKICAgIGQ9Ik0gMyAwIEwgMTI5IDAgQyAxMzAuNjU2ODYgMCAxMzIgMS4zNDMxNDU3IDEzMiAzIEwgMTMyIDE3IEMgMTMyIDE4LjY1Njg1NSAxMzAuNjU2ODYgMjAgMTI5IDIwIEwgMyAyMCBDIDEuMzQzMTQ1NyAyMCAwIDE4LjY1Njg1NSAwIDE3IEwgMCAzIEMgLTAgMS4zNDMxNDU3IDEuMzQzMTQ1NyAwIDMgMCBaIi8+CiAgPHBhdGgKICAgIGZpbGw9IiM0NGNjMTEiCiAgICBzdHJva2U9Im5vbmUiCiAgICBkPSJNIDg5IDAgTCAxMjkgMCBDIDEzMC42NTY4NiAwIDEzMiAxLjM0MzE0NTcgMTMyIDMgTCAxMzIgMTcgQyAxMzIgMTguNjU2ODU1IDEzMC42NTY4NiAyMCAxMjkgMjAgTCA4OSAyMCBDIDg3LjM0MzE1IDIwIDg2IDE4LjY1Njg1NSA4NiAxNyBMIDg2IDMgQyA4NiAxLjM0MzE0NTcgODcuMzQzMTUgMCA4OSAwIFoiLz4KICA8cGF0aAogICAgZmlsbD0iIzQ0Y2MxMSIKICAgIHN0cm9rZT0ibm9uZSIKICAgIGQ9Ik0gODYgMCBMIDk5IDAgTCA5OSAyMCBMIDg2IDIwIFoiLz4KICA8cGF0aAogICAgZmlsbD0idXJsKCNhKSIKICAgIHN0cm9rZT0ibm9uZSIKICAgIGQ9Ik0gMyAwIEwgMTI5IDAgQyAxMzAuNjU2ODYgMCAxMzIgMS4zNDMxNDU3IDEzMiAzIEwgMTMyIDE3IEMgMTMyIDE4LjY1Njg1NSAxMzAuNjU2ODYgMjAgMTI5IDIwIEwgMyAyMCBDIDEuMzQzMTQ1NyAyMCAwIDE4LjY1Njg1NSAwIDE3IEwgMCAzIEMgLTAgMS4zNDMxNDU3IDEuMzQzMTQ1NyAwIDMgMCBaIi8+CiAgPGc+CiAgICA8ZwogICAgICBpZD0idEJhY2siPgogICAgICA8cGF0aAogICAgICAgIGZpbGw9IiMwMTAxMDEiCiAgICAgICAgZmlsbC1vcGFjaXR5PSIwLjMiCiAgICAgICAgc3Ryb2tlPSIjMDEwMTAxIgogICAgICAgIHN0cm9rZS1vcGFjaXR5PSIwLjA5ODAzOTIyIgogICAgICAgIHN0cm9rZS13aWR0aD0iMC4zIgogICAgICAgIGQ9Ik0gNy45OTI2NzYgMTQuMDk3NjU2IEwgNy45OTI2NzYgMTcuMjg4MDg2IEwgNi45OTkwMjM0IDE3LjI4ODA4NiBMIDYuOTk5MDIzNCA4Ljk4NDM3NSBMIDcuOTkyNjc2IDguOTg0Mzc1IEwgNy45OTI2NzYgOS44OTc0NjEgUSA4LjMwNDE5OSA5LjM2MDM1MiA4Ljc3OTU0MSA5LjA5OTg1MzUgUSA5LjI1NDg4MyA4LjgzOTM1NSA5LjkxNTUyNyA4LjgzOTM1NSBRIDExLjAxMTIzIDguODM5MzU1IDExLjY5NjA0NSA5LjcwOTQ3MyBRIDEyLjM4MDg1OCAxMC41Nzk1OSAxMi4zODA4NTggMTEuOTk3NTU5IFEgMTIuMzgwODU4IDEzLjQxNTUyNyAxMS42OTYwNDUgMTQuMjg1NjQ1IFEgMTEuMDExMjMgMTUuMTU1NzYyIDkuOTE1NTI3IDE1LjE1NTc2MiBRIDkuMjU0ODgzIDE1LjE1NTc2MiA4Ljc3OTU0MSAxNC44OTUyNjQgUSA4LjMwNDE5OSAxNC42MzQ3NjYgNy45OTI2NzYgMTQuMDk3NjU2IFogTSAxMS4zNTQ5Nzk1IDExLjk5NzU1OSBRIDExLjM1NDk3OTUgMTAuOTA3MjI3IDEwLjkwNjQ5NSAxMC4yODY4NjUgUSAxMC40NTgwMDggOS42NjY1MDQgOS42NzM4MjggOS42NjY1MDQgUSA4Ljg4OTY0OCA5LjY2NjUwNCA4LjQ0MTE2MiAxMC4yODY4NjUgUSA3Ljk5MjY3NiAxMC45MDcyMjcgNy45OTI2NzYgMTEuOTk3NTU5IFEgNy45OTI2NzYgMTMuMDg3ODkyIDguNDQxMTYyIDEzLjcwODI1MiBRIDguODg5NjQ4IDE0LjMyODYxMyA5LjY3MzgyOCAxNC4zMjg2MTMgUSAxMC40NTgwMDggMTQuMzI4NjEzIDEwLjkwNjQ5NSAxMy43MDgyNTIgUSAxMS4zNTQ5Nzk1IDEzLjA4Nzg5MiAxMS4zNTQ5Nzk1IDExLjk5NzU1OSBaIE0gMTYuNTIxOTczIDE1LjU1ODU5NCBRIDE2LjEwMzAyNyAxNi42MzI4MTMgMTUuNzA1NTY2IDE2Ljk2MDQ1IFEgMTUuMzA4MTA0NSAxNy4yODgwODYgMTQuNjQyMDkgMTcuMjg4MDg2IEwgMTMuODUyNTM5IDE3LjI4ODA4NiBMIDEzLjg1MjUzOSAxNi40NjA5MzggTCAxNC40MzI2MTcgMTYuNDYwOTM4IFEgMTQuODQwODIgMTYuNDYwOTM4IDE1LjA2NjQwNiAxNi4yNjc1NzggUSAxNS4yOTE5OTIgMTYuMDc0MjE5IDE1LjU2NTkxNyAxNS4zNTQ0OTIgTCAxNS43NDMxNjQgMTQuOTAzMzIgTCAxMy4zMTAwNTkgOC45ODQzNzUgTCAxNC4zNTc0MjIgOC45ODQzNzUgTCAxNi4yMzczMDUgMTMuNjg5NDUzIEwgMTguMTE3MTg4IDguOTg0Mzc1IEwgMTkuMTY0NTUgOC45ODQzNzUgTCAxNi41MjE5NzMgMTUuNTU4NTk0IFogTSAyMS40ODQ4NjMgMTQuMDk3NjU2IEwgMjEuNDg0ODYzIDE3LjI4ODA4NiBMIDIwLjQ5MTIxIDE3LjI4ODA4NiBMIDIwLjQ5MTIxIDguOTg0Mzc1IEwgMjEuNDg0ODYzIDguOTg0Mzc1IEwgMjEuNDg0ODYzIDkuODk3NDYxIFEgMjEuNzk2Mzg5IDkuMzYwMzUyIDIyLjI3MTcyOSA5LjA5OTg1MzUgUSAyMi43NDcwNyA4LjgzOTM1NSAyMy40MDc3MTcgOC44MzkzNTUgUSAyNC41MDM0MTggOC44MzkzNTUgMjUuMTg4MjMyIDkuNzA5NDczIFEgMjUuODczMDQ3IDEwLjU3OTU5IDI1Ljg3MzA0NyAxMS45OTc1NTkgUSAyNS44NzMwNDcgMTMuNDE1NTI3IDI1LjE4ODIzMiAxNC4yODU2NDUgUSAyNC41MDM0MTggMTUuMTU1NzYyIDIzLjQwNzcxNyAxNS4xNTU3NjIgUSAyMi43NDcwNyAxNS4xNTU3NjIgMjIuMjcxNzI5IDE0Ljg5NTI2NCBRIDIxLjc5NjM4OSAxNC42MzQ3NjYgMjEuNDg0ODYzIDE0LjA5NzY1NiBaIE0gMjQuODQ3MTY4IDExLjk5NzU1OSBRIDI0Ljg0NzE2OCAxMC45MDcyMjcgMjQuMzk4NjgyIDEwLjI4Njg2NSBRIDIzLjk1MDE5NSA5LjY2NjUwNCAyMy4xNjYwMTYgOS42NjY1MDQgUSAyMi4zODE4MzYgOS42NjY1MDQgMjEuOTMzMzUgMTAuMjg2ODY1IFEgMjEuNDg0ODYzIDEwLjkwNzIyNyAyMS40ODQ4NjMgMTEuOTk3NTU5IFEgMjEuNDg0ODYzIDEzLjA4Nzg5MiAyMS45MzMzNSAxMy43MDgyNTIgUSAyMi4zODE4MzYgMTQuMzI4NjEzIDIzLjE2NjAxNiAxNC4zMjg2MTMgUSAyMy45NTAxOTUgMTQuMzI4NjEzIDI0LjM5ODY4MiAxMy43MDgyNTIgUSAyNC44NDcxNjggMTMuMDg3ODkyIDI0Ljg0NzE2OCAxMS45OTc1NTkgWiBNIDI3LjUxMTIyOSA4Ljk4NDM3NSBMIDI4LjQ5OTUxMiA4Ljk4NDM3NSBMIDI4LjQ5OTUxMiAxNSBMIDI3LjUxMTIyOSAxNSBMIDI3LjUxMTIyOSA4Ljk4NDM3NSBaIE0gMjcuNTExMjI5IDYuNjQyNTc4IEwgMjguNDk5NTEyIDYuNjQyNTc4IEwgMjguNDk5NTEyIDcuODk0MDQzIEwgMjcuNTExMjI5IDcuODk0MDQzIEwgMjcuNTExMjI5IDYuNjQyNTc4IFogTSAzNS4wMjAwMiAxNC4wOTc2NTYgTCAzNS4wMjAwMiAxNy4yODgwODYgTCAzNC4wMjYzNjcgMTcuMjg4MDg2IEwgMzQuMDI2MzY3IDguOTg0Mzc1IEwgMzUuMDIwMDIgOC45ODQzNzUgTCAzNS4wMjAwMiA5Ljg5NzQ2MSBRIDM1LjMzMTU0MyA5LjM2MDM1MiAzNS44MDY4ODUgOS4wOTk4NTM1IFEgMzYuMjgyMjI3IDguODM5MzU1IDM2Ljk0Mjg3IDguODM5MzU1IFEgMzguMDM4NTc0IDguODM5MzU1IDM4LjcyMzM5IDkuNzA5NDczIFEgMzkuNDA4MjAzIDEwLjU3OTU5IDM5LjQwODIwMyAxMS45OTc1NTkgUSAzOS40MDgyMDMgMTMuNDE1NTI3IDM4LjcyMzM5IDE0LjI4NTY0NSBRIDM4LjAzODU3NCAxNS4xNTU3NjIgMzYuOTQyODcgMTUuMTU1NzYyIFEgMzYuMjgyMjI3IDE1LjE1NTc2MiAzNS44MDY4ODUgMTQuODk1MjY0IFEgMzUuMzMxNTQzIDE0LjYzNDc2NiAzNS4wMjAwMiAxNC4wOTc2NTYgWiBNIDM4LjM4MjMyNCAxMS45OTc1NTkgUSAzOC4zODIzMjQgMTAuOTA3MjI3IDM3LjkzMzgzOCAxMC4yODY4NjUgUSAzNy40ODUzNSA5LjY2NjUwNCAzNi43MDExNyA5LjY2NjUwNCBRIDM1LjkxNjk5MiA5LjY2NjUwNCAzNS40Njg1MDYgMTAuMjg2ODY1IFEgMzUuMDIwMDIgMTAuOTA3MjI3IDM1LjAyMDAyIDExLjk5NzU1OSBRIDM1LjAyMDAyIDEzLjA4Nzg5MiAzNS40Njg1MDYgMTMuNzA4MjUyIFEgMzUuOTE2OTkyIDE0LjMyODYxMyAzNi43MDExNyAxNC4zMjg2MTMgUSAzNy40ODUzNSAxNC4zMjg2MTMgMzcuOTMzODM4IDEzLjcwODI1MiBRIDM4LjM4MjMyNCAxMy4wODc4OTIgMzguMzgyMzI0IDExLjk5NzU1OSBaIE0gNDMuNzgwMjczIDExLjk3NjA3NCBRIDQyLjU4MjUyIDExLjk3NjA3NCA0Mi4xMjA2MDUgMTIuMjQ5OTk5IFEgNDEuNjU4NjkgMTIuNTIzOTI2IDQxLjY1ODY5IDEzLjE4NDU3MSBRIDQxLjY1ODY5IDEzLjcxMDkzNzUgNDIuMDA1MTI3IDE0LjAxOTc3NiBRIDQyLjM1MTU2MyAxNC4zMjg2MTMgNDIuOTQ3NzU0IDE0LjMyODYxMyBRIDQzLjc2OTUzNSAxNC4zMjg2MTMgNDQuMjY2MzU3IDEzLjc0NTg1IFEgNDQuNzYzMTg0IDEzLjE2MzA4NiA0NC43NjMxODQgMTIuMTk2Mjg5IEwgNDQuNzYzMTg0IDExLjk3NjA3NCBMIDQzLjc4MDI3MyAxMS45NzYwNzQgWiBNIDQ1Ljc1MTQ2NSAxMS41Njc4NzEgTCA0NS43NTE0NjUgMTUgTCA0NC43NjMxODQgMTUgTCA0NC43NjMxODQgMTQuMDg2OTE1IFEgNDQuNDI0ODA1IDE0LjYzNDc2NiA0My45MTk5MiAxNC44OTUyNjQgUSA0My40MTUwNCAxNS4xNTU3NjIgNDIuNjg0NTcgMTUuMTU1NzYyIFEgNDEuNzYwNzQyIDE1LjE1NTc2MiA0MS4yMTU1NzYgMTQuNjM3NDUxIFEgNDAuNjcwNDEgMTQuMTE5MTQyIDQwLjY3MDQxIDEzLjI0OTAyNCBRIDQwLjY3MDQxIDEyLjIzMzg4NyA0MS4zNDk4NTQgMTEuNzE4MjYyIFEgNDIuMDI5Mjk3IDExLjIwMjYzNyA0My4zNzc0NDUgMTEuMjAyNjM3IEwgNDQuNzYzMTg0IDExLjIwMjYzNyBMIDQ0Ljc2MzE4NCAxMS4xMDU5NTcgUSA0NC43NjMxODQgMTAuNDIzODI4IDQ0LjMxNDY5NyAxMC4wNTA1MzcgUSA0My44NjYyMSA5LjY3NzI0NiA0My4wNTUxNzYgOS42NzcyNDYgUSA0Mi41Mzk1NSA5LjY3NzI0NiA0Mi4wNTA3OCA5LjgwMDc4MSBRIDQxLjU2MjAxIDkuOTI0MzE2IDQxLjExMDg0IDEwLjE3MTM4NyBMIDQxLjExMDg0IDkuMjU4MzAxIFEgNDEuNjUzMzIgOS4wNDg4MjggNDIuMTYzNTc0IDguOTQ0MDkyIFEgNDIuNjczODMgOC44MzkzNTUgNDMuMTU3MjI3IDguODM5MzU1IFEgNDQuNDYyNDAyIDguODM5MzU1IDQ1LjEwNjkzNCA5LjUxNjExMyBRIDQ1Ljc1MTQ2NSAxMC4xOTI4NzEgNDUuNzUxNDY1IDExLjU2Nzg3MSBaIE0gNTIuMTE2MjA3IDkuMjE1MzMyIEwgNTIuMTE2MjA3IDEwLjEzOTE2IFEgNTEuNjk3MjY2IDkuOTA4MjAzIDUxLjI3NTYzIDkuNzkyNzI1IFEgNTAuODU0MDA0IDkuNjc3MjQ2IDUwLjQyNDMxNiA5LjY3NzI0NiBRIDQ5LjQ2Mjg5IDkuNjc3MjQ2IDQ4LjkzMTE1MiAxMC4yODY4NjUgUSA0OC4zOTk0MTggMTAuODk2NDgzIDQ4LjM5OTQxOCAxMS45OTc1NTkgUSA0OC4zOTk0MTggMTMuMDk4NjMzIDQ4LjkzMTE1MiAxMy43MDgyNTIgUSA0OS40NjI4OSAxNC4zMTc4NzEgNTAuNDI0MzE2IDE0LjMxNzg3MSBRIDUwLjg1NDAwNCAxNC4zMTc4NzEgNTEuMjc1NjMgMTQuMjAyMzkzIFEgNTEuNjk3MjY2IDE0LjA4NjkxNSA1Mi4xMTYyMDcgMTMuODU1OTU2IEwgNTIuMTE2MjA3IDE0Ljc2OTA0MyBRIDUxLjcwMjYzNyAxNC45NjI0MDIgNTEuMjU5NTIgMTUuMDU5MDgyIFEgNTAuODE2NDA2IDE1LjE1NTc2MiA1MC4zMTY4OSAxNS4xNTU3NjIgUSA0OC45NTgwMDggMTUuMTU1NzYyIDQ4LjE1NzcxNSAxNC4zMDE3NTggUSA0Ny4zNTc0MTggMTMuNDQ3NzU0IDQ3LjM1NzQxOCAxMS45OTc1NTkgUSA0Ny4zNTc0MTggMTAuNTI1ODc5IDQ4LjE2NTc3IDkuNjgyNjE3IFEgNDguOTc0MTIgOC44MzkzNTUgNTAuMzgxMzQ4IDguODM5MzU1IFEgNTAuODM3ODk0IDguODM5MzU1IDUxLjI3Mjk1IDguOTMzMzUgUSA1MS43MDgwMDggOS4wMjczNDQgNTIuMTE2MjA3IDkuMjE1MzMyIFogTSA1My43OTczNjcgNi42NDI1NzggTCA1NC43OTEwMTYgNi42NDI1NzggTCA1NC43OTEwMTYgMTEuNTc4NjE0IEwgNTcuNzM5NzQ2IDguOTg0Mzc1IEwgNTkuMDAxOTUzIDguOTg0Mzc1IEwgNTUuODExNTIzIDExLjc5ODgyNyBMIDU5LjEzNjIzIDE1IEwgNTcuODQ3MTY4IDE1IEwgNTQuNzkxMDE2IDEyLjA2MjAxMiBMIDU0Ljc5MTAxNiAxNSBMIDUzLjc5NzM2NyAxNSBMIDUzLjc5NzM2NyA2LjY0MjU3OCBaIE0gNjIuNzQ1NjA1IDExLjk3NjA3NCBRIDYxLjU0Nzg1IDExLjk3NjA3NCA2MS4wODU5MzggMTIuMjQ5OTk5IFEgNjAuNjI0MDI3IDEyLjUyMzkyNiA2MC42MjQwMjcgMTMuMTg0NTcxIFEgNjAuNjI0MDI3IDEzLjcxMDkzNzUgNjAuOTcwNDYgMTQuMDE5Nzc2IFEgNjEuMzE2ODk1IDE0LjMyODYxMyA2MS45MTMwOSAxNC4zMjg2MTMgUSA2Mi43MzQ4NjMgMTQuMzI4NjEzIDYzLjIzMTY5IDEzLjc0NTg1IFEgNjMuNzI4NTE2IDEzLjE2MzA4NiA2My43Mjg1MTYgMTIuMTk2Mjg5IEwgNjMuNzI4NTE2IDExLjk3NjA3NCBMIDYyLjc0NTYwNSAxMS45NzYwNzQgWiBNIDY0LjcxNjggMTEuNTY3ODcxIEwgNjQuNzE2OCAxNSBMIDYzLjcyODUxNiAxNSBMIDYzLjcyODUxNiAxNC4wODY5MTUgUSA2My4zOTAxMzcgMTQuNjM0NzY2IDYyLjg4NTI1NCAxNC44OTUyNjQgUSA2Mi4zODAzNyAxNS4xNTU3NjIgNjEuNjQ5OTA2IDE1LjE1NTc2MiBRIDYwLjcyNjA3NCAxNS4xNTU3NjIgNjAuMTgwOTEgMTQuNjM3NDUxIFEgNTkuNjM1NzQyIDE0LjExOTE0MiA1OS42MzU3NDIgMTMuMjQ5MDI0IFEgNTkuNjM1NzQyIDEyLjIzMzg4NyA2MC4zMTUxODYgMTEuNzE4MjYyIFEgNjAuOTk0NjI1IDExLjIwMjYzNyA2Mi4zNDI3NzMgMTEuMjAyNjM3IEwgNjMuNzI4NTE2IDExLjIwMjYzNyBMIDYzLjcyODUxNiAxMS4xMDU5NTcgUSA2My43Mjg1MTYgMTAuNDIzODI4IDYzLjI4MDAzIDEwLjA1MDUzNyBRIDYyLjgzMTU0MyA5LjY3NzI0NiA2Mi4wMjA1MDQgOS42NzcyNDYgUSA2MS41MDQ4OCA5LjY3NzI0NiA2MS4wMTYxMTcgOS44MDA3ODEgUSA2MC41MjczNDQgOS45MjQzMTYgNjAuMDc2MTcgMTAuMTcxMzg3IEwgNjAuMDc2MTcgOS4yNTgzMDEgUSA2MC42MTg2NTYgOS4wNDg4MjggNjEuMTI4OTEgOC45NDQwOTIgUSA2MS42MzkxNTYgOC44MzkzNTUgNjIuMTIyNTYgOC44MzkzNTUgUSA2My40Mjc3MzQgOC44MzkzNTUgNjQuMDcyMjY2IDkuNTE2MTEzIFEgNjQuNzE2OCAxMC4xOTI4NzEgNjQuNzE2OCAxMS41Njc4NzEgWiBNIDcwLjcxMDk0IDExLjkyMjM2MyBRIDcwLjcxMDk0IDEwLjg0ODE0NSA3MC4yNjc4MiAxMC4yNTczMjQgUSA2OS44MjQ3MSA5LjY2NjUwNCA2OS4wMjQ0MTQgOS42NjY1MDQgUSA2OC4yMjk0OSA5LjY2NjUwNCA2Ny43ODYzOCAxMC4yNTczMjQgUSA2Ny4zNDMyNiAxMC44NDgxNDUgNjcuMzQzMjYgMTEuOTIyMzYzIFEgNjcuMzQzMjYgMTIuOTkxMjEyIDY3Ljc4NjM4IDEzLjU4MjAzMSBRIDY4LjIyOTQ5IDE0LjE3Mjg1MiA2OS4wMjQ0MTQgMTQuMTcyODUyIFEgNjkuODI0NzEgMTQuMTcyODUyIDcwLjI2NzgyIDEzLjU4MjAzMSBRIDcwLjcxMDk0IDEyLjk5MTIxMiA3MC43MTA5NCAxMS45MjIzNjMgWiBNIDcxLjY5OTIyIDE0LjI1MzQxOCBRIDcxLjY5OTIyIDE1Ljc4OTU1MiA3MS4wMTcwOSAxNi41Mzg4MTggUSA3MC4zMzQ5NiAxNy4yODgwODYgNjguOTI3NzM0IDE3LjI4ODA4NiBRIDY4LjQwNjc0IDE3LjI4ODA4NiA2Ny45NDQ4MjQgMTcuMjEwMjA1IFEgNjcuNDgyOTEgMTcuMTMyMzI0IDY3LjA0Nzg1IDE2Ljk3MTE5MSBMIDY3LjA0Nzg1IDE2LjAwOTc2NiBRIDY3LjQ4MjkxIDE2LjI0NjA5NCA2Ny45MDcyMyAxNi4zNTg4ODcgUSA2OC4zMzE1NCAxNi40NzE2OCA2OC43NzE5NyAxNi40NzE2OCBRIDY5Ljc0NDE0IDE2LjQ3MTY4IDcwLjIyNzU0IDE1Ljk2NDExMSBRIDcwLjcxMDk0IDE1LjQ1NjU0MyA3MC43MTA5NCAxNC40MzA2NjQgTCA3MC43MTA5NCAxMy45NDE4OTUgUSA3MC40MDQ3ODUgMTQuNDczNjMzIDY5LjkyNjc2IDE0LjczNjgxNiBRIDY5LjQ0ODczIDE1IDY4Ljc4MjcxNSAxNSBRIDY3LjY3NjI3IDE1IDY2Ljk5OTUxIDE0LjE1NjczOCBRIDY2LjMyMjc1NCAxMy4zMTM0Nzc1IDY2LjMyMjc1NCAxMS45MjIzNjMgUSA2Ni4zMjI3NTQgMTAuNTI1ODc5IDY2Ljk5OTUxIDkuNjgyNjE3IFEgNjcuNjc2MjcgOC44MzkzNTUgNjguNzgyNzE1IDguODM5MzU1IFEgNjkuNDQ4NzMgOC44MzkzNTUgNjkuOTI2NzYgOS4xMDI1MzkgUSA3MC40MDQ3ODUgOS4zNjU3MjMgNzAuNzEwOTQgOS44OTc0NjEgTCA3MC43MTA5NCA4Ljk4NDM3NSBMIDcxLjY5OTIyIDguOTg0Mzc1IEwgNzEuNjk5MjIgMTQuMjUzNDE4IFogTSA3OC44ODAzNyAxMS43NDUxMTcgTCA3OC44ODAzNyAxMi4yMjg1MTYgTCA3NC4zMzY0MjYgMTIuMjI4NTE2IFEgNzQuNDAwODggMTMuMjQ5MDI0IDc0Ljk1MTQxNiAxMy43ODM0NDcgUSA3NS41MDE5NSAxNC4zMTc4NzEgNzYuNDg0ODYgMTQuMzE3ODcxIFEgNzcuMDU0MiAxNC4zMTc4NzEgNzcuNTg4NjIgMTQuMTc4MjIyIFEgNzguMTIzMDUgMTQuMDM4NTc0IDc4LjY0OTQxNCAxMy43NTkyNzYgTCA3OC42NDk0MTQgMTQuNjkzODQ3IFEgNzguMTE3Njc2IDE0LjkxOTQzMyA3Ny41NTkwOCAxNS4wMzc1OTggUSA3Ny4wMDA0OSAxNS4xNTU3NjIgNzYuNDI1NzggMTUuMTU1NzYyIFEgNzQuOTg2MzMgMTUuMTU1NzYyIDc0LjE0NTc1IDE0LjMxNzg3MSBRIDczLjMwNTE3NiAxMy40Nzk5OCA3My4zMDUxNzYgMTIuMDUxMjcgUSA3My4zMDUxNzYgMTAuNTc0MjE5IDc0LjEwMjc4IDkuNzA2Nzg3IFEgNzQuOTAwMzkgOC44MzkzNTUgNzYuMjUzOTEgOC44MzkzNTUgUSA3Ny40Njc3NyA4LjgzOTM1NSA3OC4xNzQwNyA5LjYyMDg1IFEgNzguODgwMzcgMTAuNDAyMzQ0IDc4Ljg4MDM3IDExLjc0NTExNyBaIE0gNzcuODkyMDkgMTEuNDU1MDc4IFEgNzcuODgxMzUgMTAuNjQ0MDQzIDc3LjQzODIzIDEwLjE2MDY0NSBRIDc2Ljk5NTEyIDkuNjc3MjQ2IDc2LjI2NDY1IDkuNjc3MjQ2IFEgNzUuNDM3NSA5LjY3NzI0NiA3NC45NDA2NzQgMTAuMTQ0NTMxIFEgNzQuNDQzODUgMTAuNjExODE2IDc0LjM2ODY1IDExLjQ2MDQ0OSBMIDc3Ljg5MjA5IDExLjQ1NTA3OCBaIi8+CiAgICA8L2c+CiAgICA8ZwogICAgICBpZD0idFRleHQiPgogICAgICA8cGF0aAogICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgc3Ryb2tlPSIjZmZmZmZmIgogICAgICAgIHN0cm9rZS13aWR0aD0iMC4zIgogICAgICAgIGQ9Ik0gNy45OTI2NzYgMTMuMDk3NjU2IEwgNy45OTI2NzYgMTYuMjg4MDg2IEwgNi45OTkwMjM0IDE2LjI4ODA4NiBMIDYuOTk5MDIzNCA3Ljk4NDM3NSBMIDcuOTkyNjc2IDcuOTg0Mzc1IEwgNy45OTI2NzYgOC44OTc0NjEgUSA4LjMwNDE5OSA4LjM2MDM1MiA4Ljc3OTU0MSA4LjA5OTg1MzUgUSA5LjI1NDg4MyA3LjgzOTM1NTUgOS45MTU1MjcgNy44MzkzNTU1IFEgMTEuMDExMjMgNy44MzkzNTU1IDExLjY5NjA0NSA4LjcwOTQ3MyBRIDEyLjM4MDg1OCA5LjU3OTU5IDEyLjM4MDg1OCAxMC45OTc1NTkgUSAxMi4zODA4NTggMTIuNDE1NTI3IDExLjY5NjA0NSAxMy4yODU2NDUgUSAxMS4wMTEyMyAxNC4xNTU3NjIgOS45MTU1MjcgMTQuMTU1NzYyIFEgOS4yNTQ4ODMgMTQuMTU1NzYyIDguNzc5NTQxIDEzLjg5NTI2NCBRIDguMzA0MTk5IDEzLjYzNDc2NiA3Ljk5MjY3NiAxMy4wOTc2NTYgWiBNIDExLjM1NDk3OTUgMTAuOTk3NTU5IFEgMTEuMzU0OTc5NSA5LjkwNzIyNyAxMC45MDY0OTUgOS4yODY4NjUgUSAxMC40NTgwMDggOC42NjY1MDQgOS42NzM4MjggOC42NjY1MDQgUSA4Ljg4OTY0OCA4LjY2NjUwNCA4LjQ0MTE2MiA5LjI4Njg2NSBRIDcuOTkyNjc2IDkuOTA3MjI3IDcuOTkyNjc2IDEwLjk5NzU1OSBRIDcuOTkyNjc2IDEyLjA4Nzg5MiA4LjQ0MTE2MiAxMi43MDgyNTIgUSA4Ljg4OTY0OCAxMy4zMjg2MTMgOS42NzM4MjggMTMuMzI4NjEzIFEgMTAuNDU4MDA4IDEzLjMyODYxMyAxMC45MDY0OTUgMTIuNzA4MjUyIFEgMTEuMzU0OTc5NSAxMi4wODc4OTIgMTEuMzU0OTc5NSAxMC45OTc1NTkgWiBNIDE2LjUyMTk3MyAxNC41NTg1OTQgUSAxNi4xMDMwMjcgMTUuNjMyODEyNSAxNS43MDU1NjYgMTUuOTYwNDQ5IFEgMTUuMzA4MTA0NSAxNi4yODgwODYgMTQuNjQyMDkgMTYuMjg4MDg2IEwgMTMuODUyNTM5IDE2LjI4ODA4NiBMIDEzLjg1MjUzOSAxNS40NjA5MzcgTCAxNC40MzI2MTcgMTUuNDYwOTM3IFEgMTQuODQwODIgMTUuNDYwOTM3IDE1LjA2NjQwNiAxNS4yNjc1NzcgUSAxNS4yOTE5OTIgMTUuMDc0MjE4IDE1LjU2NTkxNyAxNC4zNTQ0OTIgTCAxNS43NDMxNjQgMTMuOTAzMzIgTCAxMy4zMTAwNTkgNy45ODQzNzUgTCAxNC4zNTc0MjIgNy45ODQzNzUgTCAxNi4yMzczMDUgMTIuNjg5NDUzIEwgMTguMTE3MTg4IDcuOTg0Mzc1IEwgMTkuMTY0NTUgNy45ODQzNzUgTCAxNi41MjE5NzMgMTQuNTU4NTk0IFogTSAyMS40ODQ4NjMgMTMuMDk3NjU2IEwgMjEuNDg0ODYzIDE2LjI4ODA4NiBMIDIwLjQ5MTIxIDE2LjI4ODA4NiBMIDIwLjQ5MTIxIDcuOTg0Mzc1IEwgMjEuNDg0ODYzIDcuOTg0Mzc1IEwgMjEuNDg0ODYzIDguODk3NDYxIFEgMjEuNzk2Mzg5IDguMzYwMzUyIDIyLjI3MTcyOSA4LjA5OTg1MzUgUSAyMi43NDcwNyA3LjgzOTM1NTUgMjMuNDA3NzE3IDcuODM5MzU1NSBRIDI0LjUwMzQxOCA3LjgzOTM1NTUgMjUuMTg4MjMyIDguNzA5NDczIFEgMjUuODczMDQ3IDkuNTc5NTkgMjUuODczMDQ3IDEwLjk5NzU1OSBRIDI1Ljg3MzA0NyAxMi40MTU1MjcgMjUuMTg4MjMyIDEzLjI4NTY0NSBRIDI0LjUwMzQxOCAxNC4xNTU3NjIgMjMuNDA3NzE3IDE0LjE1NTc2MiBRIDIyLjc0NzA3IDE0LjE1NTc2MiAyMi4yNzE3MjkgMTMuODk1MjY0IFEgMjEuNzk2Mzg5IDEzLjYzNDc2NiAyMS40ODQ4NjMgMTMuMDk3NjU2IFogTSAyNC44NDcxNjggMTAuOTk3NTU5IFEgMjQuODQ3MTY4IDkuOTA3MjI3IDI0LjM5ODY4MiA5LjI4Njg2NSBRIDIzLjk1MDE5NSA4LjY2NjUwNCAyMy4xNjYwMTYgOC42NjY1MDQgUSAyMi4zODE4MzYgOC42NjY1MDQgMjEuOTMzMzUgOS4yODY4NjUgUSAyMS40ODQ4NjMgOS45MDcyMjcgMjEuNDg0ODYzIDEwLjk5NzU1OSBRIDIxLjQ4NDg2MyAxMi4wODc4OTIgMjEuOTMzMzUgMTIuNzA4MjUyIFEgMjIuMzgxODM2IDEzLjMyODYxMyAyMy4xNjYwMTYgMTMuMzI4NjEzIFEgMjMuOTUwMTk1IDEzLjMyODYxMyAyNC4zOTg2ODIgMTIuNzA4MjUyIFEgMjQuODQ3MTY4IDEyLjA4Nzg5MiAyNC44NDcxNjggMTAuOTk3NTU5IFogTSAyNy41MTEyMjkgNy45ODQzNzUgTCAyOC40OTk1MTIgNy45ODQzNzUgTCAyOC40OTk1MTIgMTQgTCAyNy41MTEyMjkgMTQgTCAyNy41MTEyMjkgNy45ODQzNzUgWiBNIDI3LjUxMTIyOSA1LjY0MjU3OCBMIDI4LjQ5OTUxMiA1LjY0MjU3OCBMIDI4LjQ5OTUxMiA2Ljg5NDA0MyBMIDI3LjUxMTIyOSA2Ljg5NDA0MyBMIDI3LjUxMTIyOSA1LjY0MjU3OCBaIE0gMzUuMDIwMDIgMTMuMDk3NjU2IEwgMzUuMDIwMDIgMTYuMjg4MDg2IEwgMzQuMDI2MzY3IDE2LjI4ODA4NiBMIDM0LjAyNjM2NyA3Ljk4NDM3NSBMIDM1LjAyMDAyIDcuOTg0Mzc1IEwgMzUuMDIwMDIgOC44OTc0NjEgUSAzNS4zMzE1NDMgOC4zNjAzNTIgMzUuODA2ODg1IDguMDk5ODUzNSBRIDM2LjI4MjIyNyA3LjgzOTM1NTUgMzYuOTQyODcgNy44MzkzNTU1IFEgMzguMDM4NTc0IDcuODM5MzU1NSAzOC43MjMzOSA4LjcwOTQ3MyBRIDM5LjQwODIwMyA5LjU3OTU5IDM5LjQwODIwMyAxMC45OTc1NTkgUSAzOS40MDgyMDMgMTIuNDE1NTI3IDM4LjcyMzM5IDEzLjI4NTY0NSBRIDM4LjAzODU3NCAxNC4xNTU3NjIgMzYuOTQyODcgMTQuMTU1NzYyIFEgMzYuMjgyMjI3IDE0LjE1NTc2MiAzNS44MDY4ODUgMTMuODk1MjY0IFEgMzUuMzMxNTQzIDEzLjYzNDc2NiAzNS4wMjAwMiAxMy4wOTc2NTYgWiBNIDM4LjM4MjMyNCAxMC45OTc1NTkgUSAzOC4zODIzMjQgOS45MDcyMjcgMzcuOTMzODM4IDkuMjg2ODY1IFEgMzcuNDg1MzUgOC42NjY1MDQgMzYuNzAxMTcgOC42NjY1MDQgUSAzNS45MTY5OTIgOC42NjY1MDQgMzUuNDY4NTA2IDkuMjg2ODY1IFEgMzUuMDIwMDIgOS45MDcyMjcgMzUuMDIwMDIgMTAuOTk3NTU5IFEgMzUuMDIwMDIgMTIuMDg3ODkyIDM1LjQ2ODUwNiAxMi43MDgyNTIgUSAzNS45MTY5OTIgMTMuMzI4NjEzIDM2LjcwMTE3IDEzLjMyODYxMyBRIDM3LjQ4NTM1IDEzLjMyODYxMyAzNy45MzM4MzggMTIuNzA4MjUyIFEgMzguMzgyMzI0IDEyLjA4Nzg5MiAzOC4zODIzMjQgMTAuOTk3NTU5IFogTSA0My43ODAyNzMgMTAuOTc2MDc0IFEgNDIuNTgyNTIgMTAuOTc2MDc0IDQyLjEyMDYwNSAxMS4yNDk5OTkgUSA0MS42NTg2OSAxMS41MjM5MjYgNDEuNjU4NjkgMTIuMTg0NTcxIFEgNDEuNjU4NjkgMTIuNzEwOTM3NSA0Mi4wMDUxMjcgMTMuMDE5Nzc2IFEgNDIuMzUxNTYzIDEzLjMyODYxMyA0Mi45NDc3NTQgMTMuMzI4NjEzIFEgNDMuNzY5NTM1IDEzLjMyODYxMyA0NC4yNjYzNTcgMTIuNzQ1ODUgUSA0NC43NjMxODQgMTIuMTYzMDg2IDQ0Ljc2MzE4NCAxMS4xOTYyODkgTCA0NC43NjMxODQgMTAuOTc2MDc0IEwgNDMuNzgwMjczIDEwLjk3NjA3NCBaIE0gNDUuNzUxNDY1IDEwLjU2Nzg3MSBMIDQ1Ljc1MTQ2NSAxNCBMIDQ0Ljc2MzE4NCAxNCBMIDQ0Ljc2MzE4NCAxMy4wODY5MTUgUSA0NC40MjQ4MDUgMTMuNjM0NzY2IDQzLjkxOTkyIDEzLjg5NTI2NCBRIDQzLjQxNTA0IDE0LjE1NTc2MiA0Mi42ODQ1NyAxNC4xNTU3NjIgUSA0MS43NjA3NDIgMTQuMTU1NzYyIDQxLjIxNTU3NiAxMy42Mzc0NTEgUSA0MC42NzA0MSAxMy4xMTkxNDIgNDAuNjcwNDEgMTIuMjQ5MDI0IFEgNDAuNjcwNDEgMTEuMjMzODg3IDQxLjM0OTg1NCAxMC43MTgyNjIgUSA0Mi4wMjkyOTcgMTAuMjAyNjM3IDQzLjM3NzQ0NSAxMC4yMDI2MzcgTCA0NC43NjMxODQgMTAuMjAyNjM3IEwgNDQuNzYzMTg0IDEwLjEwNTk1NyBRIDQ0Ljc2MzE4NCA5LjQyMzgyOCA0NC4zMTQ2OTcgOS4wNTA1MzcgUSA0My44NjYyMSA4LjY3NzI0NiA0My4wNTUxNzYgOC42NzcyNDYgUSA0Mi41Mzk1NSA4LjY3NzI0NiA0Mi4wNTA3OCA4LjgwMDc4MSBRIDQxLjU2MjAxIDguOTI0MzE2IDQxLjExMDg0IDkuMTcxMzg3IEwgNDEuMTEwODQgOC4yNTgzMDEgUSA0MS42NTMzMiA4LjA0ODgyOCA0Mi4xNjM1NzQgNy45NDQwOTEzIFEgNDIuNjczODMgNy44MzkzNTU1IDQzLjE1NzIyNyA3LjgzOTM1NTUgUSA0NC40NjI0MDIgNy44MzkzNTU1IDQ1LjEwNjkzNCA4LjUxNjExMyBRIDQ1Ljc1MTQ2NSA5LjE5Mjg3MSA0NS43NTE0NjUgMTAuNTY3ODcxIFogTSA1Mi4xMTYyMDcgOC4yMTUzMzIgTCA1Mi4xMTYyMDcgOS4xMzkxNiBRIDUxLjY5NzI2NiA4LjkwODIwMyA1MS4yNzU2MyA4Ljc5MjcyNSBRIDUwLjg1NDAwNCA4LjY3NzI0NiA1MC40MjQzMTYgOC42NzcyNDYgUSA0OS40NjI4OSA4LjY3NzI0NiA0OC45MzExNTIgOS4yODY4NjUgUSA0OC4zOTk0MTggOS44OTY0ODQgNDguMzk5NDE4IDEwLjk5NzU1OSBRIDQ4LjM5OTQxOCAxMi4wOTg2MzMgNDguOTMxMTUyIDEyLjcwODI1MiBRIDQ5LjQ2Mjg5IDEzLjMxNzg3MSA1MC40MjQzMTYgMTMuMzE3ODcxIFEgNTAuODU0MDA0IDEzLjMxNzg3MSA1MS4yNzU2MyAxMy4yMDIzOTMgUSA1MS42OTcyNjYgMTMuMDg2OTE1IDUyLjExNjIwNyAxMi44NTU5NTYgTCA1Mi4xMTYyMDcgMTMuNzY5MDQzIFEgNTEuNzAyNjM3IDEzLjk2MjQwMiA1MS4yNTk1MiAxNC4wNTkwODIgUSA1MC44MTY0MDYgMTQuMTU1NzYyIDUwLjMxNjg5IDE0LjE1NTc2MiBRIDQ4Ljk1ODAwOCAxNC4xNTU3NjIgNDguMTU3NzE1IDEzLjMwMTc1OCBRIDQ3LjM1NzQxOCAxMi40NDc3NTQgNDcuMzU3NDE4IDEwLjk5NzU1OSBRIDQ3LjM1NzQxOCA5LjUyNTg3OSA0OC4xNjU3NyA4LjY4MjYxNyBRIDQ4Ljk3NDEyIDcuODM5MzU1NSA1MC4zODEzNDggNy44MzkzNTU1IFEgNTAuODM3ODk0IDcuODM5MzU1NSA1MS4yNzI5NSA3LjkzMzM0OTYgUSA1MS43MDgwMDggOC4wMjczNDQgNTIuMTE2MjA3IDguMjE1MzMyIFogTSA1My43OTczNjcgNS42NDI1NzggTCA1NC43OTEwMTYgNS42NDI1NzggTCA1NC43OTEwMTYgMTAuNTc4NjEzIEwgNTcuNzM5NzQ2IDcuOTg0Mzc1IEwgNTkuMDAxOTUzIDcuOTg0Mzc1IEwgNTUuODExNTIzIDEwLjc5ODgyNyBMIDU5LjEzNjIzIDE0IEwgNTcuODQ3MTY4IDE0IEwgNTQuNzkxMDE2IDExLjA2MjAxMiBMIDU0Ljc5MTAxNiAxNCBMIDUzLjc5NzM2NyAxNCBMIDUzLjc5NzM2NyA1LjY0MjU3OCBaIE0gNjIuNzQ1NjA1IDEwLjk3NjA3NCBRIDYxLjU0Nzg1IDEwLjk3NjA3NCA2MS4wODU5MzggMTEuMjQ5OTk5IFEgNjAuNjI0MDI3IDExLjUyMzkyNiA2MC42MjQwMjcgMTIuMTg0NTcxIFEgNjAuNjI0MDI3IDEyLjcxMDkzNzUgNjAuOTcwNDYgMTMuMDE5Nzc2IFEgNjEuMzE2ODk1IDEzLjMyODYxMyA2MS45MTMwOSAxMy4zMjg2MTMgUSA2Mi43MzQ4NjMgMTMuMzI4NjEzIDYzLjIzMTY5IDEyLjc0NTg1IFEgNjMuNzI4NTE2IDEyLjE2MzA4NiA2My43Mjg1MTYgMTEuMTk2Mjg5IEwgNjMuNzI4NTE2IDEwLjk3NjA3NCBMIDYyLjc0NTYwNSAxMC45NzYwNzQgWiBNIDY0LjcxNjggMTAuNTY3ODcxIEwgNjQuNzE2OCAxNCBMIDYzLjcyODUxNiAxNCBMIDYzLjcyODUxNiAxMy4wODY5MTUgUSA2My4zOTAxMzcgMTMuNjM0NzY2IDYyLjg4NTI1NCAxMy44OTUyNjQgUSA2Mi4zODAzNyAxNC4xNTU3NjIgNjEuNjQ5OTA2IDE0LjE1NTc2MiBRIDYwLjcyNjA3NCAxNC4xNTU3NjIgNjAuMTgwOTEgMTMuNjM3NDUxIFEgNTkuNjM1NzQyIDEzLjExOTE0MiA1OS42MzU3NDIgMTIuMjQ5MDI0IFEgNTkuNjM1NzQyIDExLjIzMzg4NyA2MC4zMTUxODYgMTAuNzE4MjYyIFEgNjAuOTk0NjI1IDEwLjIwMjYzNyA2Mi4zNDI3NzMgMTAuMjAyNjM3IEwgNjMuNzI4NTE2IDEwLjIwMjYzNyBMIDYzLjcyODUxNiAxMC4xMDU5NTcgUSA2My43Mjg1MTYgOS40MjM4MjggNjMuMjgwMDMgOS4wNTA1MzcgUSA2Mi44MzE1NDMgOC42NzcyNDYgNjIuMDIwNTA0IDguNjc3MjQ2IFEgNjEuNTA0ODggOC42NzcyNDYgNjEuMDE2MTE3IDguODAwNzgxIFEgNjAuNTI3MzQ0IDguOTI0MzE2IDYwLjA3NjE3IDkuMTcxMzg3IEwgNjAuMDc2MTcgOC4yNTgzMDEgUSA2MC42MTg2NTYgOC4wNDg4MjggNjEuMTI4OTEgNy45NDQwOTEzIFEgNjEuNjM5MTU2IDcuODM5MzU1NSA2Mi4xMjI1NiA3LjgzOTM1NTUgUSA2My40Mjc3MzQgNy44MzkzNTU1IDY0LjA3MjI2NiA4LjUxNjExMyBRIDY0LjcxNjggOS4xOTI4NzEgNjQuNzE2OCAxMC41Njc4NzEgWiBNIDcwLjcxMDk0IDEwLjkyMjM2MyBRIDcwLjcxMDk0IDkuODQ4MTQ1IDcwLjI2NzgyIDkuMjU3MzI0IFEgNjkuODI0NzEgOC42NjY1MDQgNjkuMDI0NDE0IDguNjY2NTA0IFEgNjguMjI5NDkgOC42NjY1MDQgNjcuNzg2MzggOS4yNTczMjQgUSA2Ny4zNDMyNiA5Ljg0ODE0NSA2Ny4zNDMyNiAxMC45MjIzNjMgUSA2Ny4zNDMyNiAxMS45OTEyMTIgNjcuNzg2MzggMTIuNTgyMDMxIFEgNjguMjI5NDkgMTMuMTcyODUyIDY5LjAyNDQxNCAxMy4xNzI4NTIgUSA2OS44MjQ3MSAxMy4xNzI4NTIgNzAuMjY3ODIgMTIuNTgyMDMxIFEgNzAuNzEwOTQgMTEuOTkxMjEyIDcwLjcxMDk0IDEwLjkyMjM2MyBaIE0gNzEuNjk5MjIgMTMuMjUzNDE4IFEgNzEuNjk5MjIgMTQuNzg5NTUyIDcxLjAxNzA5IDE1LjUzODgxOCBRIDcwLjMzNDk2IDE2LjI4ODA4NiA2OC45Mjc3MzQgMTYuMjg4MDg2IFEgNjguNDA2NzQgMTYuMjg4MDg2IDY3Ljk0NDgyNCAxNi4yMTAyMDUgUSA2Ny40ODI5MSAxNi4xMzIzMjQgNjcuMDQ3ODUgMTUuOTcxMTkxIEwgNjcuMDQ3ODUgMTUuMDA5NzY1IFEgNjcuNDgyOTEgMTUuMjQ2MDk0IDY3LjkwNzIzIDE1LjM1ODg4NyBRIDY4LjMzMTU0IDE1LjQ3MTY4IDY4Ljc3MTk3IDE1LjQ3MTY4IFEgNjkuNzQ0MTQgMTUuNDcxNjggNzAuMjI3NTQgMTQuOTY0MTExIFEgNzAuNzEwOTQgMTQuNDU2NTQzIDcwLjcxMDk0IDEzLjQzMDY2NCBMIDcwLjcxMDk0IDEyLjk0MTg5NSBRIDcwLjQwNDc4NSAxMy40NzM2MzMgNjkuOTI2NzYgMTMuNzM2ODE2IFEgNjkuNDQ4NzMgMTQgNjguNzgyNzE1IDE0IFEgNjcuNjc2MjcgMTQgNjYuOTk5NTEgMTMuMTU2NzM4IFEgNjYuMzIyNzU0IDEyLjMxMzQ3NzUgNjYuMzIyNzU0IDEwLjkyMjM2MyBRIDY2LjMyMjc1NCA5LjUyNTg3OSA2Ni45OTk1MSA4LjY4MjYxNyBRIDY3LjY3NjI3IDcuODM5MzU1NSA2OC43ODI3MTUgNy44MzkzNTU1IFEgNjkuNDQ4NzMgNy44MzkzNTU1IDY5LjkyNjc2IDguMTAyNTM5IFEgNzAuNDA0Nzg1IDguMzY1NzIzIDcwLjcxMDk0IDguODk3NDYxIEwgNzAuNzEwOTQgNy45ODQzNzUgTCA3MS42OTkyMiA3Ljk4NDM3NSBMIDcxLjY5OTIyIDEzLjI1MzQxOCBaIE0gNzguODgwMzcgMTAuNzQ1MTE3IEwgNzguODgwMzcgMTEuMjI4NTE2IEwgNzQuMzM2NDI2IDExLjIyODUxNiBRIDc0LjQwMDg4IDEyLjI0OTAyNCA3NC45NTE0MTYgMTIuNzgzNDQ3IFEgNzUuNTAxOTUgMTMuMzE3ODcxIDc2LjQ4NDg2IDEzLjMxNzg3MSBRIDc3LjA1NDIgMTMuMzE3ODcxIDc3LjU4ODYyIDEzLjE3ODIyMiBRIDc4LjEyMzA1IDEzLjAzODU3NCA3OC42NDk0MTQgMTIuNzU5Mjc2IEwgNzguNjQ5NDE0IDEzLjY5Mzg0NyBRIDc4LjExNzY3NiAxMy45MTk0MzMgNzcuNTU5MDggMTQuMDM3NTk4IFEgNzcuMDAwNDkgMTQuMTU1NzYyIDc2LjQyNTc4IDE0LjE1NTc2MiBRIDc0Ljk4NjMzIDE0LjE1NTc2MiA3NC4xNDU3NSAxMy4zMTc4NzEgUSA3My4zMDUxNzYgMTIuNDc5OTggNzMuMzA1MTc2IDExLjA1MTI3IFEgNzMuMzA1MTc2IDkuNTc0MjE5IDc0LjEwMjc4IDguNzA2Nzg3IFEgNzQuOTAwMzkgNy44MzkzNTU1IDc2LjI1MzkxIDcuODM5MzU1NSBRIDc3LjQ2Nzc3IDcuODM5MzU1NSA3OC4xNzQwNyA4LjYyMDg1IFEgNzguODgwMzcgOS40MDIzNDQgNzguODgwMzcgMTAuNzQ1MTE3IFogTSA3Ny44OTIwOSAxMC40NTUwNzggUSA3Ny44ODEzNSA5LjY0NDA0MyA3Ny40MzgyMyA5LjE2MDY0NSBRIDc2Ljk5NTEyIDguNjc3MjQ2IDc2LjI2NDY1IDguNjc3MjQ2IFEgNzUuNDM3NSA4LjY3NzI0NiA3NC45NDA2NzQgOS4xNDQ1MzEgUSA3NC40NDM4NSA5LjYxMTgxNiA3NC4zNjg2NSAxMC40NjA0NDkgTCA3Ny44OTIwOSAxMC40NTUwNzggWiIvPgogICAgPC9nPgogIDwvZz4KICA8Zz4KICAgIDxnCiAgICAgIGlkPSJ2QmFjayI+CiAgICAgIDxwYXRoCiAgICAgICAgZmlsbD0iIzAxMDEwMSIKICAgICAgICBmaWxsLW9wYWNpdHk9IjAuMyIKICAgICAgICBzdHJva2U9IiMwMTAxMDEiCiAgICAgICAgc3Ryb2tlLW9wYWNpdHk9IjAuMDk4MDM5MjIiCiAgICAgICAgc3Ryb2tlLXdpZHRoPSIwLjMiCiAgICAgICAgZD0iTSA5NC40OTY1OCA3LjY5NTMxMjUgUSA5My42NTg3IDcuNjk1MzEyNSA5My4yMzcwNiA4LjUxOTc3NSBRIDkyLjgxNTQzIDkuMzQ0MjM4IDkyLjgxNTQzIDEwLjk5ODUzNiBRIDkyLjgxNTQzIDEyLjY0NzQ2MSA5My4yMzcwNiAxMy40NzE5MjMgUSA5My42NTg3IDE0LjI5NjM4NyA5NC40OTY1OCAxNC4yOTYzODcgUSA5NS4zMzk4NSAxNC4yOTYzODcgOTUuNzYxNDggMTMuNDcxOTIzIFEgOTYuMTgzMSAxMi42NDc0NjEgOTYuMTgzMSAxMC45OTg1MzYgUSA5Ni4xODMxIDkuMzQ0MjM4IDk1Ljc2MTQ4IDguNTE5Nzc1IFEgOTUuMzM5ODUgNy42OTUzMTI1IDk0LjQ5NjU4IDcuNjk1MzEyNSBaIE0gOTQuNDk2NTggNi44MzU5Mzc1IFEgOTUuODQ0NzM0IDYuODM1OTM3NSA5Ni41NTY0MDQgNy45MDIwOTk2IFEgOTcuMjY4MDc0IDguOTY4MjYyIDk3LjI2ODA3NCAxMC45OTg1MzYgUSA5Ny4yNjgwNzQgMTMuMDIzNDM4IDk2LjU1NjQwNCAxNC4wODk2IFEgOTUuODQ0NzM0IDE1LjE1NTc2MiA5NC40OTY1OCAxNS4xNTU3NjIgUSA5My4xNDg0NCAxNS4xNTU3NjIgOTIuNDM2NzcgMTQuMDg5NiBRIDkxLjcyNTEgMTMuMDIzNDM4IDkxLjcyNTEgMTAuOTk4NTM2IFEgOTEuNzI1MSA4Ljk2ODI2MiA5Mi40MzY3NyA3LjkwMjA5OTYgUSA5My4xNDg0NCA2LjgzNTkzNzUgOTQuNDk2NTggNi44MzU5Mzc1IFogTSA5OS4xNzQ4MSAxMy42MzU3NDMgTCAxMDAuMzA4MSAxMy42MzU3NDMgTCAxMDAuMzA4MSAxNSBMIDk5LjE3NDgxIDE1IEwgOTkuMTc0ODEgMTMuNjM1NzQzIFogTSAxMDQuOTkxNzEgNy42OTUzMTI1IFEgMTA0LjE1MzgxIDcuNjk1MzEyNSAxMDMuNzMyMTcgOC41MTk3NzUgUSAxMDMuMzEwNTU1IDkuMzQ0MjM4IDEwMy4zMTA1NTUgMTAuOTk4NTM2IFEgMTAzLjMxMDU1NSAxMi42NDc0NjEgMTAzLjczMjE3IDEzLjQ3MTkyMyBRIDEwNC4xNTM4MSAxNC4yOTYzODcgMTA0Ljk5MTcxIDE0LjI5NjM4NyBRIDEwNS44MzQ5NSAxNC4yOTYzODcgMTA2LjI1NjU5IDEzLjQ3MTkyMyBRIDEwNi42NzgyMiAxMi42NDc0NjEgMTA2LjY3ODIyIDEwLjk5ODUzNiBRIDEwNi42NzgyMiA5LjM0NDIzOCAxMDYuMjU2NTkgOC41MTk3NzUgUSAxMDUuODM0OTUgNy42OTUzMTI1IDEwNC45OTE3MSA3LjY5NTMxMjUgWiBNIDEwNC45OTE3MSA2LjgzNTkzNzUgUSAxMDYuMzM5ODQgNi44MzU5Mzc1IDEwNy4wNTE1MDYgNy45MDIwOTk2IFEgMTA3Ljc2MzE3NiA4Ljk2ODI2MiAxMDcuNzYzMTc2IDEwLjk5ODUzNiBRIDEwNy43NjMxNzYgMTMuMDIzNDM4IDEwNy4wNTE1MDYgMTQuMDg5NiBRIDEwNi4zMzk4NCAxNS4xNTU3NjIgMTA0Ljk5MTcxIDE1LjE1NTc2MiBRIDEwMy42NDM1NTUgMTUuMTU1NzYyIDEwMi45MzE4ODUgMTQuMDg5NiBRIDEwMi4yMjAyMTUgMTMuMDIzNDM4IDEwMi4yMjAyMTUgMTAuOTk4NTM2IFEgMTAyLjIyMDIxNSA4Ljk2ODI2MiAxMDIuOTMxODg1IDcuOTAyMDk5NiBRIDEwMy42NDM1NTUgNi44MzU5Mzc1IDEwNC45OTE3MSA2LjgzNTkzNzUgWiBNIDEwOS42Njk5MiAxMy42MzU3NDMgTCAxMTAuODAzMjIgMTMuNjM1NzQzIEwgMTEwLjgwMzIyIDE1IEwgMTA5LjY2OTkyIDE1IEwgMTA5LjY2OTkyIDEzLjYzNTc0MyBaIE0gMTE1LjYyMTA4NiAxMC41NTgxMDUgUSAxMTQuODkwNjMgMTAuNTU4MTA1IDExNC40NjM2MiAxMS4wNTc2MTYgUSAxMTQuMDM2NjIgMTEuNTU3MTI5IDExNC4wMzY2MiAxMi40MjcyNDYgUSAxMTQuMDM2NjIgMTMuMjkxOTkyIDExNC40NjM2MiAxMy43OTQxOSBRIDExNC44OTA2MyAxNC4yOTYzODcgMTE1LjYyMTA4NiAxNC4yOTYzODcgUSAxMTYuMzUxNTYgMTQuMjk2Mzg3IDExNi43Nzg1NjQgMTMuNzk0MTkgUSAxMTcuMjA1NTcgMTMuMjkxOTkyIDExNy4yMDU1NyAxMi40MjcyNDYgUSAxMTcuMjA1NTcgMTEuNTU3MTI5IDExNi43Nzg1NjQgMTEuMDU3NjE2IFEgMTE2LjM1MTU2IDEwLjU1ODEwNSAxMTUuNjIxMDg2IDEwLjU1ODEwNSBaIE0gMTE3Ljc3NDkgNy4xNTgyMDI2IEwgMTE3Ljc3NDkgOC4xNDY0ODQgUSAxMTcuMzY2NyA3Ljk1MzEyNSAxMTYuOTUwNDQgNy44NTEwNzM3IFEgMTE2LjUzNDE4IDcuNzQ5MDIzNCAxMTYuMTI1OTcgNy43NDkwMjM0IFEgMTE1LjA1MTc2IDcuNzQ5MDIzNCAxMTQuNDg1MTEgOC40NzQxMjEgUSAxMTMuOTE4NDYgOS4xOTkyMTkgMTEzLjgzNzkgMTAuNjY1NTI3IFEgMTE0LjE1NDc4NSAxMC4xOTgyNDIgMTE0LjYzMjgyIDkuOTQ4NDg2IFEgMTE1LjExMDg0IDkuNjk4NzMgMTE1LjY4NTU1IDkuNjk4NzMgUSAxMTYuODk0MDQgOS42OTg3MyAxMTcuNTk0OTcgMTAuNDMxODg1IFEgMTE4LjI5NTkgMTEuMTY1MDM5IDExOC4yOTU5IDEyLjQyNzI0NiBRIDExOC4yOTU5IDEzLjY2MjU5NyAxMTcuNTY1NDMgMTQuNDA5MTggUSAxMTYuODM0OTYgMTUuMTU1NzYyIDExNS42MjEwODYgMTUuMTU1NzYyIFEgMTE0LjIyOTk5IDE1LjE1NTc2MiAxMTMuNDk0MTQgMTQuMDg5NiBRIDExMi43NTgzIDEzLjAyMzQzOCAxMTIuNzU4MyAxMC45OTg1MzYgUSAxMTIuNzU4MyA5LjA5NzE2OCAxMTMuNjYwNjQ1IDcuOTY2NTUyNyBRIDExNC41NjI5OSA2LjgzNTkzNzUgMTE2LjA4MzAxIDYuODM1OTM3NSBRIDExNi40OTEyMSA2LjgzNTkzNzUgMTE2LjkwNzQ3IDYuOTE2NTA0IFEgMTE3LjMyMzc0IDYuOTk3MDcwMyAxMTcuNzc0OSA3LjE1ODIwMjYgWiBNIDEyMC4xNzU3OCA2Ljk4MDk1NyBMIDEyNC40MzUwNiA2Ljk4MDk1NyBMIDEyNC40MzUwNiA3Ljg5NDA0MyBMIDEyMS4xNjk0MjYgNy44OTQwNDMgTCAxMjEuMTY5NDI2IDkuODU5ODYzIFEgMTIxLjQwNTc1NCA5Ljc3OTI5NyAxMjEuNjQyMDkgOS43MzkwMTQgUSAxMjEuODc4NDIgOS42OTg3MyAxMjIuMTE0NzQ2IDkuNjk4NzMgUSAxMjMuNDU3NTEgOS42OTg3MyAxMjQuMjQxNjkgMTAuNDM0NTcgUSAxMjUuMDI1ODcgMTEuMTcwNDEgMTI1LjAyNTg3IDEyLjQyNzI0NiBRIDEyNS4wMjU4NyAxMy43MjE2OCAxMjQuMjIwMjE1IDE0LjQzODcyMiBRIDEyMy40MTQ1NSAxNS4xNTU3NjIgMTIxLjk0ODI0IDE1LjE1NTc2MiBRIDEyMS40NDMzNiAxNS4xNTU3NjIgMTIwLjkxOTY4IDE1LjA2OTgyNCBRIDEyMC4zOTU5OSAxNC45ODM4ODYgMTE5LjgzNzQgMTQuODEyMDEyIEwgMTE5LjgzNzQgMTMuNzIxNjggUSAxMjAuMzIwOCAxMy45ODQ4NjIgMTIwLjgzNjQyNiAxNC4xMTM3NjkgUSAxMjEuMzUyMDUgMTQuMjQyNjc1IDEyMS45MjY3NiAxNC4yNDI2NzUgUSAxMjIuODU1OTYgMTQuMjQyNjc1IDEyMy4zOTg0NCAxMy43NTM5MDYgUSAxMjMuOTQwOTIgMTMuMjY1MTM3IDEyMy45NDA5MiAxMi40MjcyNDYgUSAxMjMuOTQwOTIgMTEuNTg5MzU1IDEyMy4zOTg0NCAxMS4xMDA1ODYgUSAxMjIuODU1OTYgMTAuNjExODE2IDEyMS45MjY3NiAxMC42MTE4MTYgUSAxMjEuNDkxNyAxMC42MTE4MTYgMTIxLjA1OTMyNiAxMC43MDg0OTYgUSAxMjAuNjI2OTUgMTAuODA1MTc3IDEyMC4xNzU3OCAxMS4wMDkyNzcgTCAxMjAuMTc1NzggNi45ODA5NTcgWiIvPgogICAgPC9nPgogICAgPGcKICAgICAgaWQ9InZUZXh0Ij4KICAgICAgPHBhdGgKICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgIHN0cm9rZT0iI2ZmZmZmZiIKICAgICAgICBzdHJva2Utd2lkdGg9IjAuMyIKICAgICAgICBkPSJNIDk0LjQ5NjU4IDYuNjk1MzEyNSBRIDkzLjY1ODcgNi42OTUzMTI1IDkzLjIzNzA2IDcuNTE5Nzc1NCBRIDkyLjgxNTQzIDguMzQ0MjM4IDkyLjgxNTQzIDkuOTk4NTM1IFEgOTIuODE1NDMgMTEuNjQ3NDYxIDkzLjIzNzA2IDEyLjQ3MTkyMyBRIDkzLjY1ODcgMTMuMjk2Mzg3IDk0LjQ5NjU4IDEzLjI5NjM4NyBRIDk1LjMzOTg1IDEzLjI5NjM4NyA5NS43NjE0OCAxMi40NzE5MjMgUSA5Ni4xODMxIDExLjY0NzQ2MSA5Ni4xODMxIDkuOTk4NTM1IFEgOTYuMTgzMSA4LjM0NDIzOCA5NS43NjE0OCA3LjUxOTc3NTQgUSA5NS4zMzk4NSA2LjY5NTMxMjUgOTQuNDk2NTggNi42OTUzMTI1IFogTSA5NC40OTY1OCA1LjgzNTkzNzUgUSA5NS44NDQ3MzQgNS44MzU5Mzc1IDk2LjU1NjQwNCA2LjkwMjA5OTYgUSA5Ny4yNjgwNzQgNy45NjgyNjE3IDk3LjI2ODA3NCA5Ljk5ODUzNSBRIDk3LjI2ODA3NCAxMi4wMjM0MzggOTYuNTU2NDA0IDEzLjA4OTYgUSA5NS44NDQ3MzQgMTQuMTU1NzYyIDk0LjQ5NjU4IDE0LjE1NTc2MiBRIDkzLjE0ODQ0IDE0LjE1NTc2MiA5Mi40MzY3NyAxMy4wODk2IFEgOTEuNzI1MSAxMi4wMjM0MzggOTEuNzI1MSA5Ljk5ODUzNSBRIDkxLjcyNTEgNy45NjgyNjE3IDkyLjQzNjc3IDYuOTAyMDk5NiBRIDkzLjE0ODQ0IDUuODM1OTM3NSA5NC40OTY1OCA1LjgzNTkzNzUgWiBNIDk5LjE3NDgxIDEyLjYzNTc0MyBMIDEwMC4zMDgxIDEyLjYzNTc0MyBMIDEwMC4zMDgxIDE0IEwgOTkuMTc0ODEgMTQgTCA5OS4xNzQ4MSAxMi42MzU3NDMgWiBNIDEwNC45OTE3MSA2LjY5NTMxMjUgUSAxMDQuMTUzODEgNi42OTUzMTI1IDEwMy43MzIxNyA3LjUxOTc3NTQgUSAxMDMuMzEwNTU1IDguMzQ0MjM4IDEwMy4zMTA1NTUgOS45OTg1MzUgUSAxMDMuMzEwNTU1IDExLjY0NzQ2MSAxMDMuNzMyMTcgMTIuNDcxOTIzIFEgMTA0LjE1MzgxIDEzLjI5NjM4NyAxMDQuOTkxNzEgMTMuMjk2Mzg3IFEgMTA1LjgzNDk1IDEzLjI5NjM4NyAxMDYuMjU2NTkgMTIuNDcxOTIzIFEgMTA2LjY3ODIyIDExLjY0NzQ2MSAxMDYuNjc4MjIgOS45OTg1MzUgUSAxMDYuNjc4MjIgOC4zNDQyMzggMTA2LjI1NjU5IDcuNTE5Nzc1NCBRIDEwNS44MzQ5NSA2LjY5NTMxMjUgMTA0Ljk5MTcxIDYuNjk1MzEyNSBaIE0gMTA0Ljk5MTcxIDUuODM1OTM3NSBRIDEwNi4zMzk4NCA1LjgzNTkzNzUgMTA3LjA1MTUwNiA2LjkwMjA5OTYgUSAxMDcuNzYzMTc2IDcuOTY4MjYxNyAxMDcuNzYzMTc2IDkuOTk4NTM1IFEgMTA3Ljc2MzE3NiAxMi4wMjM0MzggMTA3LjA1MTUwNiAxMy4wODk2IFEgMTA2LjMzOTg0IDE0LjE1NTc2MiAxMDQuOTkxNzEgMTQuMTU1NzYyIFEgMTAzLjY0MzU1NSAxNC4xNTU3NjIgMTAyLjkzMTg4NSAxMy4wODk2IFEgMTAyLjIyMDIxNSAxMi4wMjM0MzggMTAyLjIyMDIxNSA5Ljk5ODUzNSBRIDEwMi4yMjAyMTUgNy45NjgyNjE3IDEwMi45MzE4ODUgNi45MDIwOTk2IFEgMTAzLjY0MzU1NSA1LjgzNTkzNzUgMTA0Ljk5MTcxIDUuODM1OTM3NSBaIE0gMTA5LjY2OTkyIDEyLjYzNTc0MyBMIDExMC44MDMyMiAxMi42MzU3NDMgTCAxMTAuODAzMjIgMTQgTCAxMDkuNjY5OTIgMTQgTCAxMDkuNjY5OTIgMTIuNjM1NzQzIFogTSAxMTUuNjIxMDg2IDkuNTU4MTA1IFEgMTE0Ljg5MDYzIDkuNTU4MTA1IDExNC40NjM2MiAxMC4wNTc2MTcgUSAxMTQuMDM2NjIgMTAuNTU3MTI5IDExNC4wMzY2MiAxMS40MjcyNDYgUSAxMTQuMDM2NjIgMTIuMjkxOTkyIDExNC40NjM2MiAxMi43OTQxOSBRIDExNC44OTA2MyAxMy4yOTYzODcgMTE1LjYyMTA4NiAxMy4yOTYzODcgUSAxMTYuMzUxNTYgMTMuMjk2Mzg3IDExNi43Nzg1NjQgMTIuNzk0MTkgUSAxMTcuMjA1NTcgMTIuMjkxOTkyIDExNy4yMDU1NyAxMS40MjcyNDYgUSAxMTcuMjA1NTcgMTAuNTU3MTI5IDExNi43Nzg1NjQgMTAuMDU3NjE3IFEgMTE2LjM1MTU2IDkuNTU4MTA1IDExNS42MjEwODYgOS41NTgxMDUgWiBNIDExNy43NzQ5IDYuMTU4MjAyNiBMIDExNy43NzQ5IDcuMTQ2NDg0NCBRIDExNy4zNjY3IDYuOTUzMTI1IDExNi45NTA0NCA2Ljg1MTA3MzcgUSAxMTYuNTM0MTggNi43NDkwMjM0IDExNi4xMjU5NyA2Ljc0OTAyMzQgUSAxMTUuMDUxNzYgNi43NDkwMjM0IDExNC40ODUxMSA3LjQ3NDEyMSBRIDExMy45MTg0NiA4LjE5OTIxOSAxMTMuODM3OSA5LjY2NTUyNyBRIDExNC4xNTQ3ODUgOS4xOTgyNDIgMTE0LjYzMjgyIDguOTQ4NDg2IFEgMTE1LjExMDg0IDguNjk4NzMgMTE1LjY4NTU1IDguNjk4NzMgUSAxMTYuODk0MDQgOC42OTg3MyAxMTcuNTk0OTcgOS40MzE4ODUgUSAxMTguMjk1OSAxMC4xNjUwMzkgMTE4LjI5NTkgMTEuNDI3MjQ2IFEgMTE4LjI5NTkgMTIuNjYyNTk3IDExNy41NjU0MyAxMy40MDkxOCBRIDExNi44MzQ5NiAxNC4xNTU3NjIgMTE1LjYyMTA4NiAxNC4xNTU3NjIgUSAxMTQuMjI5OTkgMTQuMTU1NzYyIDExMy40OTQxNCAxMy4wODk2IFEgMTEyLjc1ODMgMTIuMDIzNDM4IDExMi43NTgzIDkuOTk4NTM1IFEgMTEyLjc1ODMgOC4wOTcxNjggMTEzLjY2MDY0NSA2Ljk2NjU1MjcgUSAxMTQuNTYyOTkgNS44MzU5Mzc1IDExNi4wODMwMSA1LjgzNTkzNzUgUSAxMTYuNDkxMjEgNS44MzU5Mzc1IDExNi45MDc0NyA1LjkxNjUwNCBRIDExNy4zMjM3NCA1Ljk5NzA3MDMgMTE3Ljc3NDkgNi4xNTgyMDI2IFogTSAxMjAuMTc1NzggNS45ODA5NTcgTCAxMjQuNDM1MDYgNS45ODA5NTcgTCAxMjQuNDM1MDYgNi44OTQwNDMgTCAxMjEuMTY5NDI2IDYuODk0MDQzIEwgMTIxLjE2OTQyNiA4Ljg1OTg2MyBRIDEyMS40MDU3NTQgOC43NzkyOTcgMTIxLjY0MjA5IDguNzM5MDE0IFEgMTIxLjg3ODQyIDguNjk4NzMgMTIyLjExNDc0NiA4LjY5ODczIFEgMTIzLjQ1NzUxIDguNjk4NzMgMTI0LjI0MTY5IDkuNDM0NTcgUSAxMjUuMDI1ODcgMTAuMTcwNDEgMTI1LjAyNTg3IDExLjQyNzI0NiBRIDEyNS4wMjU4NyAxMi43MjE2OCAxMjQuMjIwMjE1IDEzLjQzODcyMiBRIDEyMy40MTQ1NSAxNC4xNTU3NjIgMTIxLjk0ODI0IDE0LjE1NTc2MiBRIDEyMS40NDMzNiAxNC4xNTU3NjIgMTIwLjkxOTY4IDE0LjA2OTgyNCBRIDEyMC4zOTU5OSAxMy45ODM4ODYgMTE5LjgzNzQgMTMuODEyMDEyIEwgMTE5LjgzNzQgMTIuNzIxNjggUSAxMjAuMzIwOCAxMi45ODQ4NjIgMTIwLjgzNjQyNiAxMy4xMTM3NjkgUSAxMjEuMzUyMDUgMTMuMjQyNjc1IDEyMS45MjY3NiAxMy4yNDI2NzUgUSAxMjIuODU1OTYgMTMuMjQyNjc1IDEyMy4zOTg0NCAxMi43NTM5MDYgUSAxMjMuOTQwOTIgMTIuMjY1MTM3IDEyMy45NDA5MiAxMS40MjcyNDYgUSAxMjMuOTQwOTIgMTAuNTg5MzU1IDEyMy4zOTg0NCAxMC4xMDA1ODYgUSAxMjIuODU1OTYgOS42MTE4MTYgMTIxLjkyNjc2IDkuNjExODE2IFEgMTIxLjQ5MTcgOS42MTE4MTYgMTIxLjA1OTMyNiA5LjcwODQ5NiBRIDEyMC42MjY5NSA5LjgwNTE3NiAxMjAuMTc1NzggMTAuMDA5Mjc3IEwgMTIwLjE3NTc4IDUuOTgwOTU3IFoiLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=" alt="PyPI version" /></a></p>
172
+ <p>Guessing reasonable defaults for locale, keyboard layout, territory,
173
+ and language.</p>
174
+ <h2 id="purpose-of-this-package">Purpose of this package</h2>
175
+ <p><em>langtable</em> is used to guess reasonable defaults for locale,
176
+ keyboard, territory, …, if part of that information is already known.
177
+ For example, guess the territory and the keyboard layout if the language
178
+ is known or guess the language and keyboard layout if the territory is
179
+ already known.</p>
180
+ <h2 id="license">License</h2>
181
+ <p>GPLv3+, see the included file “COPYING”.</p>
182
+ <p>Translations for languages and territory names are from CLDR which is
183
+ governed by the Unicode Terms of Use, see the included file
184
+ “unicode-license.txt”. The short name for this Unicode license is “MIT”.
185
+ See:</p>
186
+ <p><a href="https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29">https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29</a></p>
187
+ <h2 id="installation">Installation</h2>
188
+ <p>To install langtable, run</p>
189
+ <pre><code> make install DESTDIR=/usr</code></pre>
190
+ <p>To create a distribution tarball run</p>
191
+ <pre><code> make dist</code></pre>
192
+ <p>To run the test cases in the source directory:</p>
193
+ <pre><code> make check</code></pre>
194
+ <h2 id="how-to-use-it">How to use it</h2>
195
+ <pre><code>import langtable</code></pre>
196
+ <p>Functions in the public API:</p>
197
+ <pre><code> parse_locale()
198
+ list_locales()
199
+ list_keyboards()
200
+ list_common_languages()
201
+ list_common_locales()
202
+ list_common_keyboards()
203
+ list_consolefonts()
204
+ list_inputmethods()
205
+ list_timezones()
206
+ list_scripts()
207
+ language_name()
208
+ territory_name()
209
+ timezone_name()
210
+ languageId()
211
+ territoryId()
212
+ supports_ascii()
213
+ list_all_languages()
214
+ list_all_locales()
215
+ list_all_keyboards()
216
+ list_all_territories()
217
+ list_all_timezones()
218
+ list_all_scripts()
219
+ list_all_input_methods()
220
+ list_all_console_fonts()</code></pre>
221
+ <p>Some examples to show the usage are found in the documentation of the
222
+ public functions in <code>langtable.py</code>.</p>
223
+ <p>Some more examples are in the test cases in the file
224
+ <code>test_cases.py</code>.</p>
225
+ </body>
226
+ </html>
@@ -0,0 +1,72 @@
1
+ # langtable
2
+
3
+ [![PyPI version](https://badge.fury.io/py/langtable.svg)](https://badge.fury.io/py/langtable)
4
+
5
+ Guessing reasonable defaults for locale, keyboard layout, territory, and language.
6
+
7
+ ## Purpose of this package
8
+ _langtable_ is used to guess reasonable defaults for locale, keyboard, territory, …, if part of that information is already known. For example, guess the territory and the keyboard layout if the language is known or guess the language and keyboard layout if the territory is already known.
9
+
10
+ ## License
11
+
12
+ GPLv3+, see the included file “COPYING”.
13
+
14
+ Translations for languages and territory names are from CLDR which is governed by the Unicode Terms of Use, see the included file “unicode-license.txt”. The short name for this Unicode license is “MIT”. See:
15
+
16
+ https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29
17
+
18
+ ## Installation
19
+
20
+ To install langtable, run
21
+
22
+ ```
23
+ make install DESTDIR=/usr
24
+ ```
25
+
26
+ To create a distribution tarball run
27
+ ```
28
+ make dist
29
+ ```
30
+ To run the test cases in the source directory:
31
+ ```
32
+ make check
33
+ ```
34
+
35
+ ## How to use it
36
+
37
+ ```
38
+ import langtable
39
+ ```
40
+
41
+ Functions in the public API:
42
+
43
+ ```
44
+ parse_locale()
45
+ list_locales()
46
+ list_keyboards()
47
+ list_common_languages()
48
+ list_common_locales()
49
+ list_common_keyboards()
50
+ list_consolefonts()
51
+ list_inputmethods()
52
+ list_timezones()
53
+ list_scripts()
54
+ language_name()
55
+ territory_name()
56
+ timezone_name()
57
+ languageId()
58
+ territoryId()
59
+ supports_ascii()
60
+ list_all_languages()
61
+ list_all_locales()
62
+ list_all_keyboards()
63
+ list_all_territories()
64
+ list_all_timezones()
65
+ list_all_scripts()
66
+ list_all_input_methods()
67
+ list_all_console_fonts()
68
+ ```
69
+
70
+ Some examples to show the usage are found in the documentation of the public functions in `langtable.py`.
71
+
72
+ Some more examples are in the test cases in the file `test_cases.py`.
@@ -2565,7 +2565,7 @@ def list_all_territories() -> List[str]:
2565
2565
  '''
2566
2566
  List all territory ids langtable knows something about
2567
2567
  '''
2568
- return list(_territories_db.keys())
2568
+ return sorted(_territories_db.keys())
2569
2569
 
2570
2570
  def list_all_timezones() -> List[str]:
2571
2571
  '''
@@ -2719,5 +2719,11 @@ __module_init = __ModuleInitializer()
2719
2719
 
2720
2720
  if __name__ == "__main__":
2721
2721
  import doctest
2722
+ import sys
2722
2723
  _init()
2723
- doctest.testmod()
2724
+ (FAILED, ATTEMPTED) = doctest.testmod()
2725
+ print(f'{ATTEMPTED} tests run. {ATTEMPTED - FAILED} passed and {FAILED} failed.')
2726
+ if FAILED:
2727
+ sys.exit(FAILED)
2728
+ print(f'All tests passed.')
2729
+ sys.exit(0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langtable
3
- Version: 0.0.64
3
+ Version: 0.0.66
4
4
  Summary: guess reasonable defaults for locale, keyboard, territory, ...
5
5
  Home-page: https://github.com/mike-fabian/langtable
6
6
  Author: Mike FABIAN
@@ -13,64 +13,57 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Classifier: Programming Language :: Python
15
15
  Classifier: Topic :: System :: Installation/Setup
16
+ Description-Content-Type: text/markdown
16
17
  License-File: COPYING
17
18
 
18
- ======================================================================
19
- langtable
20
- ======================================================================
19
+ # langtable
21
20
 
22
- Purpose of this package
23
- =======================
21
+ [![PyPI version](https://badge.fury.io/py/langtable.svg)](https://badge.fury.io/py/langtable)
24
22
 
25
- langtable is used to guess reasonable defaults for locale, keyboard,
26
- territory, …, if part of that information is already known. For
27
- example, guess the territory and the keyboard layout if the language
28
- is known or guess the language and keyboard layout if the territory is
29
- already known.
23
+ Guessing reasonable defaults for locale, keyboard layout, territory, and language.
30
24
 
31
- License
32
- =======
25
+ ## Purpose of this package
26
+ _langtable_ is used to guess reasonable defaults for locale, keyboard, territory, …, if part of that information is already known. For example, guess the territory and the keyboard layout if the language is known or guess the language and keyboard layout if the territory is already known.
27
+
28
+ ## License
33
29
 
34
30
  GPLv3+, see the included file “COPYING”.
35
31
 
36
- Translations for languages and territory names are from CLDR which is
37
- governed by the Unicode Terms of Use, see the included file
38
- “unicode-license.txt”. The short name for this Unicode license is
39
- “MIT”. See:
32
+ Translations for languages and territory names are from CLDR which is governed by the Unicode Terms of Use, see the included file “unicode-license.txt”. The short name for this Unicode license is “MIT”. See:
40
33
 
41
34
  https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT#Modern_Style_without_sublicense_.28Unicode.29
42
35
 
43
- Installation
44
- ============
36
+ ## Installation
45
37
 
46
38
  To install langtable, run
47
39
 
40
+ ```
48
41
  make install DESTDIR=/usr
42
+ ```
49
43
 
50
44
  To create a distribution tarball run
51
-
45
+ ```
52
46
  make dist
53
-
47
+ ```
54
48
  To run the test cases in the source directory:
49
+ ```
50
+ make check
51
+ ```
55
52
 
56
- make test-local
57
-
58
- To run the test cases using the installed files:
59
-
60
- make install DESTDIR=/usr
61
- make test DESTDIR=/usr
62
-
63
- How to use it
64
- =============
53
+ ## How to use it
65
54
 
55
+ ```
66
56
  import langtable
57
+ ```
67
58
 
68
59
  Functions in the public API:
69
60
 
61
+ ```
70
62
  parse_locale()
71
63
  list_locales()
72
64
  list_keyboards()
73
65
  list_common_languages()
66
+ list_common_locales()
74
67
  list_common_keyboards()
75
68
  list_consolefonts()
76
69
  list_inputmethods()
@@ -82,8 +75,16 @@ Functions in the public API:
82
75
  languageId()
83
76
  territoryId()
84
77
  supports_ascii()
85
-
86
- Some examples to show the usage are found in the documentation
87
- of the public functions in langtable.py.
88
-
89
- (Some more examples are in the test cases in the file test_cases.py):
78
+ list_all_languages()
79
+ list_all_locales()
80
+ list_all_keyboards()
81
+ list_all_territories()
82
+ list_all_timezones()
83
+ list_all_scripts()
84
+ list_all_input_methods()
85
+ list_all_console_fonts()
86
+ ```
87
+
88
+ Some examples to show the usage are found in the documentation of the public functions in `langtable.py`.
89
+
90
+ Some more examples are in the test cases in the file `test_cases.py`.
@@ -3,6 +3,8 @@ ChangeLog
3
3
  MANIFEST.in
4
4
  Makefile
5
5
  README
6
+ README.html
7
+ README.md
6
8
  main.py
7
9
  setup.py
8
10
  test_cases.py
@@ -61,6 +61,10 @@ def parse_args():
61
61
  type=str,
62
62
  default='./langtable.log',
63
63
  help='log file, default is %(default)s')
64
+ parser.add_argument('-c', '--include_changes',
65
+ action='store_true',
66
+ default=False,
67
+ help='Also write changed translations, not only new translations, default is %(default)s.')
64
68
  parser.add_argument('-d', '--debug',
65
69
  action='store_true',
66
70
  help='print debugging output')
@@ -133,7 +137,7 @@ def read_translations_from_cldr_file(file = None):
133
137
  translations_timezone_cities[timezone_city_aliases[alias]] = translations_timezone_cities[alias]
134
138
  return
135
139
 
136
- def get_translations_from_cldr(main_cldr_dir = None):
140
+ def get_translations_from_cldr(main_cldr_dir = None, include_changes=False):
137
141
  for target_language in sorted(langtable._languages_db):
138
142
  cldr_file = main_cldr_dir+'/'+target_language+'.xml'
139
143
  if not os.path.exists(cldr_file):
@@ -165,8 +169,8 @@ def get_translations_from_cldr(main_cldr_dir = None):
165
169
  'language_to_translate': language_to_translate,
166
170
  'target_language': target_language,
167
171
  'tr': translations_languages[language_to_translate]})
168
- # Uncomment this to really make the change:
169
- #langtable._languages_db[language_to_translate].names[target_language] = translations_languages[language_to_translate]
172
+ if include_changes:
173
+ langtable._languages_db[language_to_translate].names[target_language] = translations_languages[language_to_translate]
170
174
  else:
171
175
  if opts['debug']:
172
176
  print("Not in langtable: %(language_to_translate)s" %{
@@ -194,8 +198,8 @@ def get_translations_from_cldr(main_cldr_dir = None):
194
198
  print("+ %(territory_to_translate)s → %(target_language)s = %(tr)s" %{'territory_to_translate': territory_to_translate,
195
199
  'target_language': target_language,
196
200
  'tr': translations_territories[territory_to_translate]})
197
- # Uncomment this to really make the change:
198
- #langtable._territories_db[territory_to_translate].names[target_language] = translations_territories[territory_to_translate]
201
+ if include_changes:
202
+ langtable._territories_db[territory_to_translate].names[target_language] = translations_territories[territory_to_translate]
199
203
  else:
200
204
  if opts['debug']:
201
205
  print("Not in langtable: %(territory_to_translate)s" %{
@@ -228,8 +232,8 @@ def get_translations_from_cldr(main_cldr_dir = None):
228
232
  'timezone_city_to_translate': timezone_city_to_translate,
229
233
  'target_language': target_language,
230
234
  'tr': translations_timezone_cities[timezone_city_to_translate]})
231
- # Uncomment this to really make the change:
232
- #langtable._timezoneIdParts_db[timezone_city_to_translate].names[target_language] = translations_timezone_cities[timezone_city_to_translate]
235
+ if include_changes:
236
+ langtable._timezoneIdParts_db[timezone_city_to_translate].names[target_language] = translations_timezone_cities[timezone_city_to_translate]
233
237
  return
234
238
 
235
239
  def _test_timezone_names():
@@ -251,7 +255,9 @@ def main():
251
255
  langtable._init(debug = True,
252
256
  logfilename = args.logfilename)
253
257
 
254
- get_translations_from_cldr(main_cldr_dir='/local/mfabian/src/cldr/common/main')
258
+ get_translations_from_cldr(
259
+ main_cldr_dir='/local/mfabian/src/cldr/common/main',
260
+ include_changes=args.include_changes)
255
261
 
256
262
  #_test_timezone_names()
257
263
 
@@ -261,6 +267,5 @@ def main():
261
267
  timezonesfilename = args.timezonesoutputfile,
262
268
  timezoneidpartsfilename = args.timezoneidpartsoutputfile)
263
269
 
264
-
265
270
  if __name__ == '__main__':
266
271
  main()
@@ -8,10 +8,11 @@ setuptools.setup(
8
8
  # within the egg directory easily:
9
9
  zip_safe=False,
10
10
  name='langtable',
11
- version='0.0.64',
11
+ version='0.0.66',
12
12
  packages=setuptools.find_packages(),
13
13
  description='guess reasonable defaults for locale, keyboard, territory, ...',
14
- long_description=codecs.open('README', encoding='UTF-8').read(),
14
+ long_description=codecs.open('README.md', encoding='UTF-8').read(),
15
+ long_description_content_type='text/markdown',
15
16
  license="GPL-3.0-or-later",
16
17
  author='Mike FABIAN',
17
18
  author_email='mfabian@redhat.com',
@@ -734,7 +734,7 @@ def dummy():
734
734
 
735
735
  >>> _test_language_territory(show_weights=False, languageId="ar", territoryId="IN") # doctest: +NORMALIZE_WHITESPACE
736
736
  ar: ['ar_EG.UTF-8', 'ar_SD.UTF-8', 'ar_DZ.UTF-8', 'ar_MA.UTF-8', 'ar_IQ.UTF-8', 'ar_SA.UTF-8', 'ar_YE.UTF-8', 'ar_SY.UTF-8', 'ar_TN.UTF-8', 'ar_LY.UTF-8', 'ar_JO.UTF-8', 'ar_AE.UTF-8', 'ar_LB.UTF-8', 'ar_KW.UTF-8', 'ar_OM.UTF-8', 'ar_QA.UTF-8', 'ar_BH.UTF-8', 'ar_IN.UTF-8', 'ar_SS.UTF-8']
737
- IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8']
737
+ IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8', 'gbm_IN.UTF-8']
738
738
  +: ['ar_IN.UTF-8']
739
739
  ar: ['ara', 'ara(azerty)', 'iq', 'ma', 'sy']
740
740
  IN: ['in(eng)', 'ara']
@@ -750,7 +750,7 @@ def dummy():
750
750
 
751
751
  >>> _test_language_territory(show_weights=False, languageId="as", territoryId="IN") # doctest: +NORMALIZE_WHITESPACE
752
752
  as: ['as_IN.UTF-8']
753
- IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8']
753
+ IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8', 'gbm_IN.UTF-8']
754
754
  +: ['as_IN.UTF-8']
755
755
  as: ['in(eng)']
756
756
  IN: ['in(eng)', 'ara']
@@ -761,12 +761,12 @@ def dummy():
761
761
  BD: ['bn_BD.UTF-8']
762
762
  +: ['bn_BD.UTF-8']
763
763
  bn: ['in(eng)']
764
- BD: ['us']
765
- +: ['us', 'in(eng)']
764
+ BD: ['in(eng)']
765
+ +: ['in(eng)']
766
766
 
767
767
  >>> _test_language_territory(show_weights=False, languageId="bn", territoryId="IN") # doctest: +NORMALIZE_WHITESPACE
768
768
  bn: ['bn_BD.UTF-8', 'bn_IN.UTF-8']
769
- IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8']
769
+ IN: ['hi_IN.UTF-8', 'en_IN.UTF-8', 'bn_IN.UTF-8', 'te_IN.UTF-8', 'mr_IN.UTF-8', 'ta_IN.UTF-8', 'ur_IN.UTF-8', 'gu_IN.UTF-8', 'kn_IN.UTF-8', 'ml_IN.UTF-8', 'or_IN.UTF-8', 'pa_IN.UTF-8', 'as_IN.UTF-8', 'mai_IN.UTF-8', 'sat_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'kok_IN.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'doi_IN.UTF-8', 'mni_IN.UTF-8', 'brx_IN.UTF-8', 'raj_IN.UTF-8', 'mjw_IN.UTF-8', 'anp_IN.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bo_IN.UTF-8', 'hne_IN.UTF-8', 'mag_IN.UTF-8', 'tcy_IN.UTF-8', 'ar_IN.UTF-8', 'gbm_IN.UTF-8']
770
770
  +: ['bn_IN.UTF-8']
771
771
  bn: ['in(eng)']
772
772
  IN: ['in(eng)', 'ara']
@@ -910,7 +910,7 @@ def dummy():
910
910
 
911
911
  >>> _test_language_territory(show_weights=False, languageId="tt", territoryId="RU") # doctest: +NORMALIZE_WHITESPACE
912
912
  tt: ['tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif']
913
- RU: ['ru_RU.UTF-8', 'ce_RU.UTF-8', 'cv_RU.UTF-8', 'mhr_RU.UTF-8', 'os_RU.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'sah_RU.UTF-8']
913
+ RU: ['ru_RU.UTF-8', 'ce_RU.UTF-8', 'cv_RU.UTF-8', 'mhr_RU.UTF-8', 'os_RU.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'sah_RU.UTF-8', 'kv_RU.UTF-8', 'crh_RU.UTF-8']
914
914
  +: ['tt_RU.UTF-8']
915
915
  tt: ['ru(tt)', 'us(altgr-intl)']
916
916
  RU: ['ru', 'ru(tt)', 'us(altgr-intl)']
@@ -918,7 +918,7 @@ def dummy():
918
918
 
919
919
  >>> _test_language_territory(show_weights=False, languageId="tt", scriptId="Latn", territoryId="RU") # doctest: +NORMALIZE_WHITESPACE
920
920
  tt: ['tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif']
921
- RU: ['ru_RU.UTF-8', 'ce_RU.UTF-8', 'cv_RU.UTF-8', 'mhr_RU.UTF-8', 'os_RU.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'sah_RU.UTF-8']
921
+ RU: ['ru_RU.UTF-8', 'ce_RU.UTF-8', 'cv_RU.UTF-8', 'mhr_RU.UTF-8', 'os_RU.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'sah_RU.UTF-8', 'kv_RU.UTF-8', 'crh_RU.UTF-8']
922
922
  +: ['tt_RU.UTF-8@iqtelif']
923
923
  tt: ['ru(tt)', 'us(altgr-intl)']
924
924
  RU: ['ru', 'ru(tt)', 'us(altgr-intl)']
@@ -2155,15 +2155,15 @@ def dummy():
2155
2155
  ['ar', 'en', 'fr', 'de', 'ja', 'zh', 'ru', 'es']
2156
2156
 
2157
2157
  >>> print(list_all_languages()) # doctest: +NORMALIZE_WHITESPACE
2158
- ['aa', 'ab', 'af', 'agq', 'agr', 'ak', 'am', 'an', 'anp', 'ar', 'as', 'asa', 'ast', 'av', 'ay', 'ayc', 'ayr', 'az', 'ba', 'bas', 'be', 'bem', 'ber', 'bez', 'bg', 'bhb', 'bho', 'bi', 'bih', 'bin', 'bm', 'bn', 'bo', 'br', 'brx', 'bs', 'bua', 'byn', 'ca', 'ca_ES_VALENCIA', 'ccp', 'ce', 'cgg', 'ch', 'chm', 'chr', 'ckb', 'cmn', 'co', 'cop', 'crh', 'cs', 'csb', 'cu', 'cv', 'cy', 'da', 'dav', 'de', 'dje', 'doi', 'dsb', 'dua', 'dv', 'dyo', 'dz', 'ebu', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'ewo', 'fa', 'fat', 'ff', 'fi', 'fil', 'fj', 'fo', 'fr', 'fur', 'fy', 'ga', 'gd', 'gez', 'gl', 'gn', 'grc', 'gsw', 'gu', 'guz', 'gv', 'ha', 'hak', 'haw', 'he', 'hi', 'hif', 'hil', 'hne', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ilo', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'jgo', 'jmc', 'jv', 'ka', 'kaa', 'kab', 'kam', 'kde', 'kea', 'kg', 'khb', 'khq', 'ki', 'kj', 'kk', 'kkj', 'kl', 'kln', 'km', 'kn', 'ko', 'kok', 'kr', 'ks', 'ks_Arab', 'ks_Deva', 'ksb', 'ksf', 'ksh', 'ku', 'kum', 'kv', 'kw', 'kwm', 'ky', 'la', 'lag', 'lah', 'lb', 'lez', 'lg', 'li', 'lij', 'lkt', 'ln', 'lo', 'lrc', 'lt', 'lu', 'luo', 'luy', 'lv', 'lzh', 'mag', 'mai', 'mas', 'mer', 'mfe', 'mg', 'mgh', 'mgo', 'mh', 'mhr', 'mi', 'miq', 'mjw', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'mos', 'mr', 'ms', 'mt', 'mua', 'my', 'mzn', 'na', 'nan', 'naq', 'nb', 'nd', 'nds', 'ne', 'new', 'ng', 'nhn', 'niu', 'nl', 'nmg', 'nn', 'nnh', 'no', 'nqo', 'nr', 'nso', 'nus', 'nv', 'ny', 'nyn', 'oc', 'om', 'or', 'os', 'osa', 'ota', 'pa', 'pap', 'pl', 'prg', 'ps', 'pt', 'qu', 'quh', 'quz', 'raj', 'rif', 'rm', 'rn', 'ro', 'rof', 'ru', 'rw', 'rwk', 'sa', 'sah', 'saq', 'sat', 'sbp', 'sc', 'sco', 'sd', 'sd_Arab', 'sd_Deva', 'se', 'seh', 'sel', 'ses', 'sg', 'sgs', 'sh', 'shi', 'shn', 'shs', 'si', 'sid', 'sk', 'sl', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr_Cyrl', 'sr_Latn', 'ss', 'st', 'su', 'sv', 'sw', 'syc', 'syr', 'szl', 'ta', 'tcy', 'te', 'teo', 'tet', 'tg', 'th', 'the', 'ti', 'tig', 'tk', 'tl', 'tn', 'to', 'tpi', 'tr', 'ts', 'tt', 'tt_Cyrl', 'tt_Latn', 'tw', 'twq', 'txg', 'ty', 'tyv', 'tzm', 'udm', 'ug', 'uk', 'unm', 'ur', 'uz', 'vai', 've', 'vi', 'vo', 'vot', 'vun', 'wa', 'wae', 'wal', 'wen', 'wo', 'xal', 'xh', 'xog', 'xzh', 'yap', 'yav', 'yi', 'yo', 'yue', 'yuw', 'za', 'zgh', 'zh', 'zh_Hans', 'zh_Hans_CN', 'zh_Hans_SG', 'zh_Hant', 'zh_Hant_HK', 'zh_Hant_MO', 'zh_Hant_TW', 'zu']
2158
+ ['aa', 'ab', 'af', 'agq', 'agr', 'ak', 'am', 'an', 'anp', 'ar', 'as', 'asa', 'ast', 'av', 'ay', 'ayc', 'ayr', 'az', 'ba', 'bas', 'be', 'bem', 'ber', 'bez', 'bg', 'bhb', 'bho', 'bi', 'bih', 'bin', 'bm', 'bn', 'bo', 'br', 'brx', 'bs', 'bua', 'byn', 'ca', 'ca_ES_VALENCIA', 'ccp', 'ce', 'cgg', 'ch', 'chm', 'chr', 'ckb', 'cmn', 'co', 'cop', 'crh', 'cs', 'csb', 'cu', 'cv', 'cy', 'da', 'dav', 'de', 'dje', 'doi', 'dsb', 'dua', 'dv', 'dyo', 'dz', 'ebu', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'ewo', 'fa', 'fat', 'ff', 'fi', 'fil', 'fj', 'fo', 'fr', 'fur', 'fy', 'ga', 'gbm', 'gd', 'gez', 'gl', 'glk', 'gn', 'grc', 'gsw', 'gu', 'guz', 'gv', 'ha', 'hak', 'haw', 'he', 'hi', 'hif', 'hil', 'hne', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ilo', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'jgo', 'jmc', 'jv', 'ka', 'kaa', 'kab', 'kam', 'kde', 'kea', 'kg', 'khb', 'khq', 'ki', 'kj', 'kk', 'kkj', 'kl', 'kln', 'km', 'kn', 'ko', 'kok', 'kr', 'ks', 'ks_Arab', 'ks_Deva', 'ksb', 'ksf', 'ksh', 'ku', 'kum', 'kv', 'kw', 'kwm', 'ky', 'la', 'lag', 'lah', 'lb', 'lez', 'lg', 'li', 'lij', 'lkt', 'ln', 'lo', 'lrc', 'lt', 'lu', 'luo', 'luy', 'lv', 'lzh', 'mag', 'mai', 'mas', 'mdf', 'mer', 'mfe', 'mg', 'mgh', 'mgo', 'mh', 'mhr', 'mi', 'miq', 'mjw', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'mos', 'mr', 'ms', 'mt', 'mua', 'my', 'mzn', 'na', 'nan', 'naq', 'nb', 'nd', 'nds', 'ne', 'new', 'ng', 'nhn', 'niu', 'nl', 'nmg', 'nn', 'nnh', 'no', 'nqo', 'nr', 'nso', 'nus', 'nv', 'ny', 'nyn', 'oc', 'om', 'or', 'os', 'osa', 'ota', 'pa', 'pap', 'pl', 'prg', 'ps', 'pt', 'qu', 'quh', 'quz', 'raj', 'rif', 'rm', 'rn', 'ro', 'rof', 'ru', 'rw', 'rwk', 'sa', 'sah', 'saq', 'sat', 'sbp', 'sc', 'sco', 'sd', 'sd_Arab', 'sd_Deva', 'se', 'seh', 'sel', 'ses', 'sg', 'sgs', 'sh', 'shi', 'shn', 'shs', 'si', 'sid', 'sk', 'sl', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr_Cyrl', 'sr_Latn', 'ss', 'ssy', 'st', 'su', 'sv', 'sw', 'syc', 'syr', 'szl', 'ta', 'tcy', 'te', 'teo', 'tet', 'tg', 'th', 'the', 'ti', 'tig', 'tk', 'tl', 'tn', 'to', 'tok', 'tpi', 'tr', 'ts', 'tt', 'tt_Cyrl', 'tt_Latn', 'tw', 'twq', 'txg', 'ty', 'tyv', 'tzm', 'udm', 'ug', 'uk', 'unm', 'ur', 'uz', 'vai', 've', 'vi', 'vo', 'vot', 'vun', 'wa', 'wae', 'wal', 'wen', 'wo', 'wuu', 'xal', 'xh', 'xog', 'xzh', 'yap', 'yav', 'yi', 'yo', 'yue', 'yuw', 'za', 'zgh', 'zh', 'zh_Hans', 'zh_Hans_CN', 'zh_Hans_SG', 'zh_Hant', 'zh_Hant_HK', 'zh_Hant_MO', 'zh_Hant_TW', 'zu']
2159
2159
  >>> print(list_all_locales()) # doctest: +NORMALIZE_WHITESPACE
2160
- ['aa_DJ.UTF-8', 'aa_ER.UTF-8', 'aa_ER.UTF-8@saaho', 'aa_ET.UTF-8', 'ab_GE.UTF-8', 'af_ZA.UTF-8', 'agr_PE.UTF-8', 'ak_GH.UTF-8', 'am_ET.UTF-8', 'an_ES.UTF-8', 'anp_IN.UTF-8', 'ar_AE.UTF-8', 'ar_BH.UTF-8', 'ar_DZ.UTF-8', 'ar_EG.UTF-8', 'ar_IN.UTF-8', 'ar_IQ.UTF-8', 'ar_JO.UTF-8', 'ar_KW.UTF-8', 'ar_LB.UTF-8', 'ar_LY.UTF-8', 'ar_MA.UTF-8', 'ar_OM.UTF-8', 'ar_QA.UTF-8', 'ar_SA.UTF-8', 'ar_SD.UTF-8', 'ar_SS.UTF-8', 'ar_SY.UTF-8', 'ar_TN.UTF-8', 'ar_YE.UTF-8', 'as_IN.UTF-8', 'ast_ES.UTF-8', 'ayc_PE.UTF-8', 'az_AZ.UTF-8', 'az_IR.UTF-8', 'be_BY.UTF-8', 'be_BY.UTF-8@latin', 'bem_ZM.UTF-8', 'ber_DZ.UTF-8', 'ber_MA.UTF-8', 'bg_BG.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bho_NP.UTF-8', 'bi_VU.UTF-8', 'bn_BD.UTF-8', 'bn_IN.UTF-8', 'bo_CN.UTF-8', 'bo_IN.UTF-8', 'br_FR.UTF-8', 'brx_IN.UTF-8', 'bs_BA.UTF-8', 'byn_ER.UTF-8', 'ca_AD.UTF-8', 'ca_ES.UTF-8', 'ca_ES.UTF-8@valencia', 'ca_FR.UTF-8', 'ca_IT.UTF-8', 'ce_RU.UTF-8', 'chr_US.UTF-8', 'ckb_IQ.UTF-8', 'cmn_TW.UTF-8', 'crh_UA.UTF-8', 'cs_CZ.UTF-8', 'csb_PL.UTF-8', 'cv_RU.UTF-8', 'cy_GB.UTF-8', 'da_DK.UTF-8', 'de_AT.UTF-8', 'de_BE.UTF-8', 'de_CH.UTF-8', 'de_DE.UTF-8', 'de_IT.UTF-8', 'de_LI.UTF-8', 'de_LU.UTF-8', 'doi_IN.UTF-8', 'dsb_DE.UTF-8', 'dv_MV.UTF-8', 'dz_BT.UTF-8', 'el_CY.UTF-8', 'el_GR.UTF-8', 'en_AG.UTF-8', 'en_AU.UTF-8', 'en_BW.UTF-8', 'en_CA.UTF-8', 'en_DK.UTF-8', 'en_GB.UTF-8', 'en_HK.UTF-8', 'en_IE.UTF-8', 'en_IL.UTF-8', 'en_IN.UTF-8', 'en_NG.UTF-8', 'en_NZ.UTF-8', 'en_PH.UTF-8', 'en_SC.UTF-8', 'en_SG.UTF-8', 'en_US.UTF-8', 'en_ZA.UTF-8', 'en_ZM.UTF-8', 'en_ZW.UTF-8', 'eo.UTF-8', 'es_AR.UTF-8', 'es_BO.UTF-8', 'es_CL.UTF-8', 'es_CO.UTF-8', 'es_CR.UTF-8', 'es_CU.UTF-8', 'es_DO.UTF-8', 'es_EC.UTF-8', 'es_ES.UTF-8', 'es_GT.UTF-8', 'es_HN.UTF-8', 'es_MX.UTF-8', 'es_NI.UTF-8', 'es_PA.UTF-8', 'es_PE.UTF-8', 'es_PR.UTF-8', 'es_PY.UTF-8', 'es_SV.UTF-8', 'es_US.UTF-8', 'es_UY.UTF-8', 'es_VE.UTF-8', 'et_EE.UTF-8', 'eu_ES.UTF-8', 'fa_IR.UTF-8', 'ff_SN.UTF-8', 'fi_FI.UTF-8', 'fil_PH.UTF-8', 'fo_FO.UTF-8', 'fr_BE.UTF-8', 'fr_CA.UTF-8', 'fr_CH.UTF-8', 'fr_FR.UTF-8', 'fr_HT.UTF-8', 'fr_LU.UTF-8', 'fur_IT.UTF-8', 'fy_DE.UTF-8', 'fy_NL.UTF-8', 'ga_IE.UTF-8', 'gd_GB.UTF-8', 'gez_ER.UTF-8', 'gez_ER.UTF-8@abegede', 'gez_ET.UTF-8', 'gez_ET.UTF-8@abegede', 'gl_ES.UTF-8', 'gu_IN.UTF-8', 'gv_GB.UTF-8', 'ha_NG.UTF-8', 'hak_TW.UTF-8', 'he_IL.UTF-8', 'hi_IN.UTF-8', 'hif_FJ.UTF-8', 'hne_IN.UTF-8', 'hr_HR.UTF-8', 'hsb_DE.UTF-8', 'ht_HT.UTF-8', 'hu_HU.UTF-8', 'hy_AM.UTF-8', 'ia_FR.UTF-8', 'id_ID.UTF-8', 'ig_NG.UTF-8', 'ik_CA.UTF-8', 'ilo_PH.UTF-8', 'is_IS.UTF-8', 'it_CH.UTF-8', 'it_IT.UTF-8', 'iu_CA.UTF-8', 'iw_IL.UTF-8', 'ja_JP.UTF-8', 'ka_GE.UTF-8', 'kab_DZ.UTF-8', 'kk_KZ.UTF-8', 'kl_GL.UTF-8', 'km_KH.UTF-8', 'kn_IN.UTF-8', 'ko_KR.UTF-8', 'kok_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'ku_TR.UTF-8', 'kw_GB.UTF-8', 'ky_KG.UTF-8', 'lb_LU.UTF-8', 'lg_UG.UTF-8', 'li_BE.UTF-8', 'li_NL.UTF-8', 'lij_IT.UTF-8', 'ln_CD.UTF-8', 'lo_LA.UTF-8', 'lt_LT.UTF-8', 'lv_LV.UTF-8', 'lzh_TW.UTF-8', 'mag_IN.UTF-8', 'mai_IN.UTF-8', 'mai_NP.UTF-8', 'mfe_MU.UTF-8', 'mg_MG.UTF-8', 'mhr_RU.UTF-8', 'mi_NZ.UTF-8', 'miq_NI.UTF-8', 'mjw_IN.UTF-8', 'mk_MK.UTF-8', 'ml_IN.UTF-8', 'mn_MN.UTF-8', 'mni_IN.UTF-8', 'mnw_MM.UTF-8', 'mr_IN.UTF-8', 'ms_MY.UTF-8', 'mt_MT.UTF-8', 'my_MM.UTF-8', 'nan_TW.UTF-8', 'nan_TW.UTF-8@latin', 'nb_NO.UTF-8', 'nds_DE.UTF-8', 'nds_NL.UTF-8', 'ne_NP.UTF-8', 'nhn_MX.UTF-8', 'niu_NU.UTF-8', 'niu_NZ.UTF-8', 'nl_AW.UTF-8', 'nl_BE.UTF-8', 'nl_NL.UTF-8', 'nn_NO.UTF-8', 'no_NO.UTF-8', 'nr_ZA.UTF-8', 'nso_ZA.UTF-8', 'oc_FR.UTF-8', 'om_ET.UTF-8', 'om_KE.UTF-8', 'or_IN.UTF-8', 'os_RU.UTF-8', 'pa_IN.UTF-8', 'pa_PK.UTF-8', 'pap_AN.UTF-8', 'pap_AW.UTF-8', 'pap_CW.UTF-8', 'pl_PL.UTF-8', 'ps_AF.UTF-8', 'pt_BR.UTF-8', 'pt_PT.UTF-8', 'quz_PE.UTF-8', 'raj_IN.UTF-8', 'rif_MA.UTF-8', 'ro_RO.UTF-8', 'ru_RU.UTF-8', 'ru_UA.UTF-8', 'rw_RW.UTF-8', 'sa_IN.UTF-8', 'sah_RU.UTF-8', 'sat_IN.UTF-8', 'sc_IT.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'se_NO.UTF-8', 'sgs_LT.UTF-8', 'shn_MM.UTF-8', 'shs_CA.UTF-8', 'si_LK.UTF-8', 'sid_ET.UTF-8', 'sk_SK.UTF-8', 'sl_SI.UTF-8', 'sm_WS.UTF-8', 'so_DJ.UTF-8', 'so_ET.UTF-8', 'so_KE.UTF-8', 'so_SO.UTF-8', 'sq_AL.UTF-8', 'sq_MK.UTF-8', 'sr_ME.UTF-8', 'sr_ME.UTF-8@latin', 'sr_RS.UTF-8', 'sr_RS.UTF-8@latin', 'ss_ZA.UTF-8', 'st_ZA.UTF-8', 'sv_FI.UTF-8', 'sv_SE.UTF-8', 'sw_KE.UTF-8', 'sw_TZ.UTF-8', 'syr.UTF-8', 'szl_PL.UTF-8', 'ta_IN.UTF-8', 'ta_LK.UTF-8', 'ta_SG.UTF-8', 'tcy_IN.UTF-8', 'te_IN.UTF-8', 'tg_TJ.UTF-8', 'th_TH.UTF-8', 'the_NP.UTF-8', 'ti_ER.UTF-8', 'ti_ET.UTF-8', 'tig_ER.UTF-8', 'tk_TM.UTF-8', 'tl_PH.UTF-8', 'tn_BW.UTF-8', 'tn_ZA.UTF-8', 'to_TO.UTF-8', 'tpi_PG.UTF-8', 'tr_CY.UTF-8', 'tr_TR.UTF-8', 'ts_ZA.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'ug_CN.UTF-8', 'uk_UA.UTF-8', 'unm_US.UTF-8', 'ur_IN.UTF-8', 'ur_PK.UTF-8', 'uz_UZ.UTF-8', 'uz_UZ.UTF-8@cyrillic', 've_ZA.UTF-8', 'vi_VN.UTF-8', 'wa_BE.UTF-8', 'wae_CH.UTF-8', 'wal_ET.UTF-8', 'wo_SN.UTF-8', 'xh_ZA.UTF-8', 'yi_US.UTF-8', 'yo_NG.UTF-8', 'yue_HK.UTF-8', 'yuw_PG.UTF-8', 'zh_CN.UTF-8', 'zh_HK.UTF-8', 'zh_MO.UTF-8', 'zh_SG.UTF-8', 'zh_TW.UTF-8', 'zu_ZA.UTF-8']
2160
+ ['aa_DJ.UTF-8', 'aa_ER.UTF-8', 'aa_ET.UTF-8', 'ab_GE.UTF-8', 'af_ZA.UTF-8', 'agr_PE.UTF-8', 'ak_GH.UTF-8', 'am_ET.UTF-8', 'an_ES.UTF-8', 'anp_IN.UTF-8', 'ar_AE.UTF-8', 'ar_BH.UTF-8', 'ar_DZ.UTF-8', 'ar_EG.UTF-8', 'ar_IN.UTF-8', 'ar_IQ.UTF-8', 'ar_JO.UTF-8', 'ar_KW.UTF-8', 'ar_LB.UTF-8', 'ar_LY.UTF-8', 'ar_MA.UTF-8', 'ar_OM.UTF-8', 'ar_QA.UTF-8', 'ar_SA.UTF-8', 'ar_SD.UTF-8', 'ar_SS.UTF-8', 'ar_SY.UTF-8', 'ar_TN.UTF-8', 'ar_YE.UTF-8', 'as_IN.UTF-8', 'ast_ES.UTF-8', 'ayc_PE.UTF-8', 'az_AZ.UTF-8', 'az_IR.UTF-8', 'be_BY.UTF-8', 'be_BY.UTF-8@latin', 'bem_ZM.UTF-8', 'ber_DZ.UTF-8', 'ber_MA.UTF-8', 'bg_BG.UTF-8', 'bhb_IN.UTF-8', 'bho_IN.UTF-8', 'bho_NP.UTF-8', 'bi_VU.UTF-8', 'bn_BD.UTF-8', 'bn_IN.UTF-8', 'bo_CN.UTF-8', 'bo_IN.UTF-8', 'br_FR.UTF-8', 'brx_IN.UTF-8', 'bs_BA.UTF-8', 'byn_ER.UTF-8', 'ca_AD.UTF-8', 'ca_ES.UTF-8', 'ca_ES.UTF-8@valencia', 'ca_FR.UTF-8', 'ca_IT.UTF-8', 'ce_RU.UTF-8', 'chr_US.UTF-8', 'ckb_IQ.UTF-8', 'cmn_TW.UTF-8', 'crh_RU.UTF-8', 'crh_UA.UTF-8', 'cs_CZ.UTF-8', 'csb_PL.UTF-8', 'cv_RU.UTF-8', 'cy_GB.UTF-8', 'da_DK.UTF-8', 'de_AT.UTF-8', 'de_BE.UTF-8', 'de_CH.UTF-8', 'de_DE.UTF-8', 'de_IT.UTF-8', 'de_LI.UTF-8', 'de_LU.UTF-8', 'doi_IN.UTF-8', 'dsb_DE.UTF-8', 'dv_MV.UTF-8', 'dz_BT.UTF-8', 'el_CY.UTF-8', 'el_GR.UTF-8', 'en_AG.UTF-8', 'en_AU.UTF-8', 'en_BW.UTF-8', 'en_CA.UTF-8', 'en_DK.UTF-8', 'en_GB.UTF-8', 'en_HK.UTF-8', 'en_IE.UTF-8', 'en_IL.UTF-8', 'en_IN.UTF-8', 'en_NG.UTF-8', 'en_NZ.UTF-8', 'en_PH.UTF-8', 'en_SC.UTF-8', 'en_SG.UTF-8', 'en_US.UTF-8', 'en_ZA.UTF-8', 'en_ZM.UTF-8', 'en_ZW.UTF-8', 'eo.UTF-8', 'es_AR.UTF-8', 'es_BO.UTF-8', 'es_CL.UTF-8', 'es_CO.UTF-8', 'es_CR.UTF-8', 'es_CU.UTF-8', 'es_DO.UTF-8', 'es_EC.UTF-8', 'es_ES.UTF-8', 'es_GT.UTF-8', 'es_HN.UTF-8', 'es_MX.UTF-8', 'es_NI.UTF-8', 'es_PA.UTF-8', 'es_PE.UTF-8', 'es_PR.UTF-8', 'es_PY.UTF-8', 'es_SV.UTF-8', 'es_US.UTF-8', 'es_UY.UTF-8', 'es_VE.UTF-8', 'et_EE.UTF-8', 'eu_ES.UTF-8', 'fa_IR.UTF-8', 'ff_SN.UTF-8', 'fi_FI.UTF-8', 'fil_PH.UTF-8', 'fo_FO.UTF-8', 'fr_BE.UTF-8', 'fr_CA.UTF-8', 'fr_CH.UTF-8', 'fr_FR.UTF-8', 'fr_HT.UTF-8', 'fr_LU.UTF-8', 'fur_IT.UTF-8', 'fy_DE.UTF-8', 'fy_NL.UTF-8', 'ga_IE.UTF-8', 'gbm_IN.UTF-8', 'gd_GB.UTF-8', 'gez_ER.UTF-8', 'gez_ER.UTF-8@abegede', 'gez_ET.UTF-8', 'gez_ET.UTF-8@abegede', 'gl_ES.UTF-8', 'glk_IR.UTF-8', 'gu_IN.UTF-8', 'gv_GB.UTF-8', 'ha_NG.UTF-8', 'hak_TW.UTF-8', 'he_IL.UTF-8', 'hi_IN.UTF-8', 'hif_FJ.UTF-8', 'hne_IN.UTF-8', 'hr_HR.UTF-8', 'hsb_DE.UTF-8', 'ht_HT.UTF-8', 'hu_HU.UTF-8', 'hy_AM.UTF-8', 'ia_FR.UTF-8', 'id_ID.UTF-8', 'ig_NG.UTF-8', 'ik_CA.UTF-8', 'ilo_PH.UTF-8', 'is_IS.UTF-8', 'it_CH.UTF-8', 'it_IT.UTF-8', 'iu_CA.UTF-8', 'iw_IL.UTF-8', 'ja_JP.UTF-8', 'ka_GE.UTF-8', 'kab_DZ.UTF-8', 'kk_KZ.UTF-8', 'kl_GL.UTF-8', 'km_KH.UTF-8', 'kn_IN.UTF-8', 'ko_KR.UTF-8', 'kok_IN.UTF-8', 'ks_IN.UTF-8', 'ks_IN.UTF-8@devanagari', 'ku_TR.UTF-8', 'kv_RU.UTF-8', 'kw_GB.UTF-8', 'ky_KG.UTF-8', 'lb_LU.UTF-8', 'lg_UG.UTF-8', 'li_BE.UTF-8', 'li_NL.UTF-8', 'lij_IT.UTF-8', 'ln_CD.UTF-8', 'lo_LA.UTF-8', 'lt_LT.UTF-8', 'lv_LV.UTF-8', 'lzh_TW.UTF-8', 'mag_IN.UTF-8', 'mai_IN.UTF-8', 'mai_NP.UTF-8', 'mdf_RU.UTF-8', 'mfe_MU.UTF-8', 'mg_MG.UTF-8', 'mhr_RU.UTF-8', 'mi_NZ.UTF-8', 'miq_NI.UTF-8', 'mjw_IN.UTF-8', 'mk_MK.UTF-8', 'ml_IN.UTF-8', 'mn_MN.UTF-8', 'mni_IN.UTF-8', 'mnw_MM.UTF-8', 'mr_IN.UTF-8', 'ms_MY.UTF-8', 'mt_MT.UTF-8', 'my_MM.UTF-8', 'nan_TW.UTF-8', 'nan_TW.UTF-8@latin', 'nb_NO.UTF-8', 'nds_DE.UTF-8', 'nds_NL.UTF-8', 'ne_NP.UTF-8', 'nhn_MX.UTF-8', 'niu_NU.UTF-8', 'niu_NZ.UTF-8', 'nl_AW.UTF-8', 'nl_BE.UTF-8', 'nl_NL.UTF-8', 'nn_NO.UTF-8', 'no_NO.UTF-8', 'nr_ZA.UTF-8', 'nso_ZA.UTF-8', 'oc_FR.UTF-8', 'om_ET.UTF-8', 'om_KE.UTF-8', 'or_IN.UTF-8', 'os_RU.UTF-8', 'pa_IN.UTF-8', 'pa_PK.UTF-8', 'pap_AN.UTF-8', 'pap_AW.UTF-8', 'pap_CW.UTF-8', 'pl_PL.UTF-8', 'ps_AF.UTF-8', 'pt_BR.UTF-8', 'pt_PT.UTF-8', 'quz_PE.UTF-8', 'raj_IN.UTF-8', 'rif_MA.UTF-8', 'ro_RO.UTF-8', 'ru_RU.UTF-8', 'ru_UA.UTF-8', 'rw_RW.UTF-8', 'sa_IN.UTF-8', 'sah_RU.UTF-8', 'sat_IN.UTF-8', 'sc_IT.UTF-8', 'sd_IN.UTF-8', 'sd_IN.UTF-8@devanagari', 'se_NO.UTF-8', 'sgs_LT.UTF-8', 'shn_MM.UTF-8', 'shs_CA.UTF-8', 'si_LK.UTF-8', 'sid_ET.UTF-8', 'sk_SK.UTF-8', 'sl_SI.UTF-8', 'sm_WS.UTF-8', 'so_DJ.UTF-8', 'so_ET.UTF-8', 'so_KE.UTF-8', 'so_SO.UTF-8', 'sq_AL.UTF-8', 'sq_MK.UTF-8', 'sr_ME.UTF-8', 'sr_ME.UTF-8@latin', 'sr_RS.UTF-8', 'sr_RS.UTF-8@latin', 'ss_ZA.UTF-8', 'ssy_ER.UTF-8', 'st_ZA.UTF-8', 'sv_FI.UTF-8', 'sv_SE.UTF-8', 'sw_KE.UTF-8', 'sw_TZ.UTF-8', 'syr.UTF-8', 'szl_PL.UTF-8', 'ta_IN.UTF-8', 'ta_LK.UTF-8', 'ta_SG.UTF-8', 'tcy_IN.UTF-8', 'te_IN.UTF-8', 'tg_TJ.UTF-8', 'th_TH.UTF-8', 'the_NP.UTF-8', 'ti_ER.UTF-8', 'ti_ET.UTF-8', 'tig_ER.UTF-8', 'tk_TM.UTF-8', 'tl_PH.UTF-8', 'tn_BW.UTF-8', 'tn_ZA.UTF-8', 'to_TO.UTF-8', 'tok.UTF-8', 'tpi_PG.UTF-8', 'tr_CY.UTF-8', 'tr_TR.UTF-8', 'ts_ZA.UTF-8', 'tt_RU.UTF-8', 'tt_RU.UTF-8@iqtelif', 'ug_CN.UTF-8', 'uk_UA.UTF-8', 'unm_US.UTF-8', 'ur_IN.UTF-8', 'ur_PK.UTF-8', 'uz_UZ.UTF-8', 'uz_UZ.UTF-8@cyrillic', 've_ZA.UTF-8', 'vi_VN.UTF-8', 'wa_BE.UTF-8', 'wae_CH.UTF-8', 'wal_ET.UTF-8', 'wo_SN.UTF-8', 'xh_ZA.UTF-8', 'yi_US.UTF-8', 'yo_NG.UTF-8', 'yue_HK.UTF-8', 'yuw_PG.UTF-8', 'zh_CN.UTF-8', 'zh_HK.UTF-8', 'zh_MO.UTF-8', 'zh_SG.UTF-8', 'zh_TW.UTF-8', 'zu_ZA.UTF-8']
2161
2161
  >>> print(list_all_keyboards()) # doctest: +NORMALIZE_WHITESPACE
2162
2162
  ['ad', 'af', 'af(fa-olpc)', 'af(ps)', 'af(ps-olpc)', 'af(uz)', 'af(uz-olpc)', 'al', 'am', 'am(eastern)', 'am(eastern-alt)', 'am(phonetic)', 'am(phonetic-alt)', 'am(western)', 'ara', 'ara(azerty)', 'ara(azerty_digits)', 'ara(buckwalter)', 'ara(digits)', 'ara(qwerty)', 'ara(qwerty_digits)', 'at(nodeadkeys)', 'az', 'az(cyrillic)', 'ba', 'bd', 'bd(probhat)', 'be', 'be(oss)', 'bg', 'bg(bas_phonetic)', 'bg(phonetic)', 'br', 'brai', 'brai(left_hand)', 'brai(right_hand)', 'bt', 'by', 'by(legacy)', 'ca', 'ca(eng)', 'ca(ike)', 'ca(multi)', 'ca(multi-2gr)', 'ca(shs)', 'ch', 'ch(fr)', 'cn', 'cn(tib)', 'cn(tib_asciinum)', 'cn(ug)', 'cz', 'cz(ucw)', 'de', 'de(deadacute)', 'de(nodeadkeys)', 'de(ru)', 'dk', 'ee', 'es', 'es(ast)', 'es(cat)', 'et', 'fi', 'fi(classic)', 'fi(nodeadkeys)', 'fo', 'fr', 'fr(geo)', 'fr(latin9)', 'fr(oss)', 'gb', 'ge', 'ge(os)', 'gr', 'gr(extended)', 'gr(nodeadkeys)', 'gr(polytonic)', 'gr(simple)', 'hr', 'hu', 'ie', 'ie(CloGaelach)', 'ie(ogam)', 'il', 'il(biblical)', 'il(lyx)', 'il(phonetic)', 'in', 'in(ben)', 'in(ben_baishakhi)', 'in(ben_bornona)', 'in(ben_gitanjali)', 'in(ben_inscript)', 'in(ben_probhat)', 'in(bolnagri)', 'in(deva)', 'in(eng)', 'in(guj)', 'in(guru)', 'in(hin-kagapa)', 'in(hin-wx)', 'in(jhelum)', 'in(kan)', 'in(kan-kagapa)', 'in(mal)', 'in(mal_enhanced)', 'in(mal_lalitha)', 'in(mar-kagapa)', 'in(ori)', 'in(san-kagapa)', 'in(tam)', 'in(tam_tamilnet)', 'in(tam_tamilnet_TAB)', 'in(tam_tamilnet_TSCII)', 'in(tam_tamilnet_with_tam_nums)', 'in(tel)', 'in(tel-kagapa)', 'in(urd-phonetic)', 'in(urd-phonetic3)', 'in(urd-winkeys)', 'iq', 'ir', 'ir(pes_keypad)', 'it', 'jp', 'jp(kana)', 'jp(mac)', 'ke', 'kg', 'kg(phonetic)', 'kh', 'kr', 'kz', 'kz(kazrus)', 'kz(ruskaz)', 'la', 'la(stea)', 'latam', 'lk', 'lk(tam_TAB)', 'lk(tam_unicode)', 'lt', 'lv', 'ma', 'ma(french)', 'ma(tifinagh)', 'ma(tifinagh-alt)', 'ma(tifinagh-alt-phonetic)', 'ma(tifinagh-extended)', 'ma(tifinagh-extended-phonetic)', 'ma(tifinagh-phonetic)', 'me', 'me(cyrillic)', 'me(cyrillicalternatequotes)', 'me(cyrillicyz)', 'mk', 'mk(nodeadkeys)', 'mm', 'mn', 'mt', 'mt(us)', 'mv', 'ng', 'ng(hausa)', 'ng(igbo)', 'ng(yoruba)', 'nl', 'no', 'np', 'ph', 'ph(capewell-dvorak-bay)', 'ph(capewell-qwerf2k6-bay)', 'ph(colemak-bay)', 'ph(dvorak-bay)', 'ph(qwerty-bay)', 'pk', 'pk(ara)', 'pk(snd)', 'pk(urd-crulp)', 'pk(urd-nla)', 'pl', 'pl(ru_phonetic_dvorak)', 'pt', 'ro', 'rs', 'rs(alternatequotes)', 'rs(latin)', 'rs(rue)', 'rs(yz)', 'ru', 'ru(bak)', 'ru(chm)', 'ru(cv)', 'ru(dos)', 'ru(kom)', 'ru(legacy)', 'ru(mac)', 'ru(os_legacy)', 'ru(os_winkeys)', 'ru(phonetic)', 'ru(phonetic_winkeys)', 'ru(sah)', 'ru(srp)', 'ru(tt)', 'ru(typewriter)', 'ru(typewriter-legacy)', 'ru(udm)', 'ru(xal)', 'se', 'se(nodeadkeys)', 'se(rus)', 'se(rus_nodeadkeys)', 'se(swl)', 'si', 'sk', 'sn', 'sy', 'sy(syc)', 'sy(syc_phonetic)', 'th', 'th(pat)', 'th(tis)', 'tj', 'tj(legacy)', 'tm', 'tr', 'tr(crh)', 'tr(ku)', 'tz', 'ua', 'ua(homophonic)', 'ua(legacy)', 'ua(phonetic)', 'ua(rstu)', 'ua(rstu_ru)', 'ua(typewriter)', 'ua(winkeys)', 'us', 'us(altgr-intl)', 'us(chr)', 'us(euro)', 'us(intl)', 'us(rus)', 'uz', 'uz(latin)', 'vn', 'za']
2163
2163
  >>> print(list_all_territories()) # doctest: +NORMALIZE_WHITESPACE
2164
- ['001', '002', '019', '142', '150', '419', 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DG', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EA', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GT', 'GU', 'GW', 'GY', 'HK', 'HN', 'HR', 'HT', 'HU', 'IC', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'XK', 'YE', 'YT', 'YU', 'ZA', 'ZM', 'ZW']
2164
+ ['001', '002', '019', '142', '150', '419', 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DG', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EA', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'EU', 'EZ', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GT', 'GU', 'GW', 'GY', 'HK', 'HN', 'HR', 'HT', 'HU', 'IC', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'XK', 'YE', 'YT', 'YU', 'ZA', 'ZM', 'ZW']
2165
2165
  >>> print(list_all_timezones()) # doctest: +NORMALIZE_WHITESPACE
2166
- ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Fortaleza', 'America/Galapagos', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Ashgabat', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Choibalsan', 'Asia/Colombo', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kathmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macau', 'Asia/Magadan', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ulaanbaatar', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faroe', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/Perth', 'Australia/Sydney', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Kiritimati', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Tahiti', 'Pacific/Tongatapu', 'Pacific/Wake', 'Pacific/Wallis', 'US/Pacific']
2166
+ ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Fortaleza', 'America/Galapagos', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Ashgabat', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Choibalsan', 'Asia/Colombo', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kathmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macau', 'Asia/Magadan', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ulaanbaatar', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faroe', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/Perth', 'Australia/Sydney', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Kiritimati', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Tahiti', 'Pacific/Tongatapu', 'Pacific/Wake', 'Pacific/Wallis', 'US/Pacific']
2167
2167
  >>> print(list_all_scripts()) # doctest: +NORMALIZE_WHITESPACE
2168
2168
  ['Adlm', 'Arab', 'Armn', 'Beng', 'Bhks', 'Cakm', 'Cans', 'Cher', 'Copt', 'Cprt', 'Cyrl', 'Cyrs', 'Deva', 'Elba', 'Ethi', 'Geor', 'Glag', 'Gran', 'Grek', 'Gujr', 'Guru', 'Hang', 'Hani', 'Hans', 'Hant', 'Hebr', 'Hira', 'Hung', 'Java', 'Jpan', 'Kana', 'Khmr', 'Knda', 'Kore', 'Lana', 'Laoo', 'Latin', 'Latn', 'Linb', 'Mahj', 'Marc', 'Mlym', 'Modi', 'Mong', 'Mtei', 'Mymr', 'Newa', 'Nkoo', 'Olck', 'Orya', 'Osge', 'Osma', 'Perm', 'Phag', 'Shrd', 'Sidd', 'Sinh', 'Sund', 'Syrc', 'Takr', 'Talu', 'Taml', 'Tang', 'Telu', 'Tfng', 'Tglg', 'Thaa', 'Thai', 'Tibt', 'Tirh', 'Vaii', 'Yiii']
2169
2169
  >>> print(list_all_input_methods()) # doctest: +NORMALIZE_WHITESPACE
@@ -2176,7 +2176,8 @@ def dummy():
2176
2176
  if __name__ == "__main__":
2177
2177
  import doctest
2178
2178
  (FAILED, ATTEMPTED) = doctest.testmod()
2179
+ print(f'{ATTEMPTED} tests run. {ATTEMPTED - FAILED} passed and {FAILED} failed.')
2179
2180
  if FAILED:
2180
- # Return number of failed tests:
2181
2181
  sys.exit(FAILED)
2182
+ print(f'All tests passed.')
2182
2183
  sys.exit(0)
File without changes
File without changes