merge
diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst
index 98a4a85..48c3ea9 100644
--- a/Doc/library/aifc.rst
+++ b/Doc/library/aifc.rst
@@ -30,8 +30,8 @@
sampled. The number of channels indicate if the audio is mono, stereo, or
quadro. Each frame consists of one sample per channel. The sample size is the
size in bytes of each sample. Thus a frame consists of
-*nchannels*\*\ *samplesize* bytes, and a second's worth of audio consists of
-*nchannels*\*\ *samplesize*\*\ *framerate* bytes.
+``nchannels * samplesize`` bytes, and a second's worth of audio consists of
+``nchannels * samplesize * framerate`` bytes.
For example, CD quality audio has a sample size of two bytes (16 bits), uses two
channels (stereo) and has a frame rate of 44,100 frames/second. This gives a
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index 566d32a..80c6c76 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -374,10 +374,6 @@
.. seealso::
- * `Counter class <http://code.activestate.com/recipes/576611/>`_
- adapted for Python 2.5 and an early `Bag recipe
- <http://code.activestate.com/recipes/259174/>`_ for Python 2.4.
-
* `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_
in Smalltalk.
@@ -920,11 +916,6 @@
>>> class Status:
open, pending, closed = range(3)
-.. seealso::
-
- * `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_
- adapted for Python 2.4.
-
* `Recipe for named tuple abstract base class with a metaclass mix-in
<http://code.activestate.com/recipes/577629-namedtupleabc-abstract-base-class-mix-in-for-named/>`_
by Jan Kaliszewski. Besides providing an :term:`abstract base class` for
@@ -987,10 +978,6 @@
keyword arguments, but their order is lost because Python's function call
semantics pass-in keyword arguments using a regular unordered dictionary.
-.. seealso::
-
- `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_
- that runs on Python 2.4 or later.
:class:`OrderedDict` Examples and Recipes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index a6c918d..a9dce61 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1909,8 +1909,8 @@
.. function:: sizeof(obj_or_type)
- Returns the size in bytes of a ctypes type or instance memory buffer. Does the
- same as the C ``sizeof()`` function.
+ Returns the size in bytes of a ctypes type or instance memory buffer.
+ Does the same as the C ``sizeof`` operator.
.. function:: string_at(address, size=-1)
diff --git a/Doc/library/faulthandler.rst b/Doc/library/faulthandler.rst
index 3c33621..61bc503 100644
--- a/Doc/library/faulthandler.rst
+++ b/Doc/library/faulthandler.rst
@@ -27,6 +27,7 @@
* Only the filename, the function name and the line number are
displayed. (no source code)
* It is limited to 100 frames and 100 threads.
+* The order is reversed: the most recent call is shown first.
By default, the Python traceback is written to :data:`sys.stderr`. To see
tracebacks, applications must be run in the terminal. A log file can
@@ -129,7 +130,7 @@
>>> ctypes.string_at(0)
Fatal Python error: Segmentation fault
- Current thread 0x00007fb899f39700:
+ Current thread 0x00007fb899f39700 (most recent call first):
File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
File "<stdin>", line 1 in <module>
Segmentation fault
diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst
index f3eca8c..fe12840 100644
--- a/Doc/library/statistics.rst
+++ b/Doc/library/statistics.rst
@@ -35,21 +35,34 @@
:func:`mode` Mode (most common value) of discrete data.
======================= =============================================
-:func:`mean`
-~~~~~~~~~~~~
+Measures of spread
+------------------
-The :func:`mean` function calculates the arithmetic mean, commonly known
-as the average, of its iterable argument:
+These functions calculate a measure of how much the population or sample
+tends to deviate from the typical or average values.
+
+======================= =============================================
+:func:`pstdev` Population standard deviation of data.
+:func:`pvariance` Population variance of data.
+:func:`stdev` Sample standard deviation of data.
+:func:`variance` Sample variance of data.
+======================= =============================================
+
+
+Function details
+----------------
.. function:: mean(data)
- Return the sample arithmetic mean of *data*, a sequence or iterator
- of real-valued numbers.
+ Return the sample arithmetic mean of *data*, a sequence or iterator of
+ real-valued numbers.
- The arithmetic mean is the sum of the data divided by the number of
- data points. It is commonly called "the average", although it is only
- one of many different mathematical averages. It is a measure of the
- central location of the data.
+ The arithmetic mean is the sum of the data divided by the number of data
+ points. It is commonly called "the average", although it is only one of many
+ different mathematical averages. It is a measure of the central location of
+ the data.
+
+ If *data* is empty, :exc:`StatisticsError` will be raised.
Some examples of use:
@@ -70,75 +83,56 @@
.. note::
- The mean is strongly effected by outliers and is not a robust
- estimator for central location: the mean is not necessarily a
- typical example of the data points. For more robust, although less
- efficient, measures of central location, see :func:`median` and
- :func:`mode`. (In this case, "efficient" refers to statistical
- efficiency rather than computational efficiency.)
+ The mean is strongly affected by outliers and is not a robust estimator
+ for central location: the mean is not necessarily a typical example of the
+ data points. For more robust, although less efficient, measures of
+ central location, see :func:`median` and :func:`mode`. (In this case,
+ "efficient" refers to statistical efficiency rather than computational
+ efficiency.)
- The sample mean gives an unbiased estimate of the true population
- mean, which means that, taken on average over all the possible
- samples, ``mean(sample)`` converges on the true mean of the entire
- population. If *data* represents the entire population rather than
- a sample, then ``mean(data)`` is equivalent to calculating the true
- population mean μ.
+ The sample mean gives an unbiased estimate of the true population mean,
+ which means that, taken on average over all the possible samples,
+ ``mean(sample)`` converges on the true mean of the entire population. If
+ *data* represents the entire population rather than a sample, then
+ ``mean(data)`` is equivalent to calculating the true population mean μ.
- If ``data`` is empty, :exc:`StatisticsError` will be raised.
-
-:func:`median`
-~~~~~~~~~~~~~~
-
-The :func:`median` function calculates the median, or middle, data point,
-using the common "mean of middle two" method.
-
- .. seealso::
-
- :func:`median_low`
-
- :func:`median_high`
-
- :func:`median_grouped`
.. function:: median(data)
- Return the median (middle value) of numeric data.
+ Return the median (middle value) of numeric data, using the common "mean of
+ middle two" method. If *data* is empty, :exc:`StatisticsError` is raised.
- The median is a robust measure of central location, and is less affected
- by the presence of outliers in your data. When the number of data points
- is odd, the middle data point is returned:
+ The median is a robust measure of central location, and is less affected by
+ the presence of outliers in your data. When the number of data points is
+ odd, the middle data point is returned:
.. doctest::
>>> median([1, 3, 5])
3
- When the number of data points is even, the median is interpolated by
- taking the average of the two middle values:
+ When the number of data points is even, the median is interpolated by taking
+ the average of the two middle values:
.. doctest::
>>> median([1, 3, 5, 7])
4.0
- This is suited for when your data is discrete, and you don't mind that
- the median may not be an actual data point.
+ This is suited for when your data is discrete, and you don't mind that the
+ median may not be an actual data point.
- If data is empty, :exc:`StatisticsError` is raised.
+ .. seealso:: :func:`median_low`, :func:`median_high`, :func:`median_grouped`
-:func:`median_low`
-~~~~~~~~~~~~~~~~~~
-
-The :func:`median_low` function calculates the low median without
-interpolation.
.. function:: median_low(data)
- Return the low median of numeric data.
+ Return the low median of numeric data. If *data* is empty,
+ :exc:`StatisticsError` is raised.
- The low median is always a member of the data set. When the number
- of data points is odd, the middle value is returned. When it is
- even, the smaller of the two middle values is returned.
+ The low median is always a member of the data set. When the number of data
+ points is odd, the middle value is returned. When it is even, the smaller of
+ the two middle values is returned.
.. doctest::
@@ -147,24 +141,18 @@
>>> median_low([1, 3, 5, 7])
3
- Use the low median when your data are discrete and you prefer the median
- to be an actual data point rather than interpolated.
+ Use the low median when your data are discrete and you prefer the median to
+ be an actual data point rather than interpolated.
- If data is empty, :exc:`StatisticsError` is raised.
-
-:func:`median_high`
-~~~~~~~~~~~~~~~~~~~
-
-The :func:`median_high` function calculates the high median without
-interpolation.
.. function:: median_high(data)
- Return the high median of data.
+ Return the high median of data. If *data* is empty, :exc:`StatisticsError`
+ is raised.
- The high median is always a member of the data set. When the number of
- data points is odd, the middle value is returned. When it is even, the
- larger of the two middle values is returned.
+ The high median is always a member of the data set. When the number of data
+ points is odd, the middle value is returned. When it is even, the larger of
+ the two middle values is returned.
.. doctest::
@@ -173,41 +161,34 @@
>>> median_high([1, 3, 5, 7])
5
- Use the high median when your data are discrete and you prefer the median
- to be an actual data point rather than interpolated.
+ Use the high median when your data are discrete and you prefer the median to
+ be an actual data point rather than interpolated.
- If data is empty, :exc:`StatisticsError` is raised.
-:func:`median_grouped`
-~~~~~~~~~~~~~~~~~~~~~~
+.. function:: median_grouped(data, interval=1)
-The :func:`median_grouped` function calculates the median of grouped data
-as the 50th percentile, using interpolation.
-
-.. function:: median_grouped(data [, interval])
-
- Return the median of grouped continuous data, calculated as the
- 50th percentile.
+ Return the median of grouped continuous data, calculated as the 50th
+ percentile, using interpolation. If *data* is empty, :exc:`StatisticsError`
+ is raised.
.. doctest::
>>> median_grouped([52, 52, 53, 54])
52.5
- In the following example, the data are rounded, so that each value
- represents the midpoint of data classes, e.g. 1 is the midpoint of the
- class 0.5-1.5, 2 is the midpoint of 1.5-2.5, 3 is the midpoint of
- 2.5-3.5, etc. With the data given, the middle value falls somewhere in
- the class 3.5-4.5, and interpolation is used to estimate it:
+ In the following example, the data are rounded, so that each value represents
+ the midpoint of data classes, e.g. 1 is the midpoint of the class 0.5-1.5, 2
+ is the midpoint of 1.5-2.5, 3 is the midpoint of 2.5-3.5, etc. With the data
+ given, the middle value falls somewhere in the class 3.5-4.5, and
+ interpolation is used to estimate it:
.. doctest::
>>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])
3.7
- Optional argument ``interval`` represents the class interval, and
- defaults to 1. Changing the class interval naturally will change the
- interpolation:
+ Optional argument *interval* represents the class interval, and defaults
+ to 1. Changing the class interval naturally will change the interpolation:
.. doctest::
@@ -217,36 +198,34 @@
3.5
This function does not check whether the data points are at least
- ``interval`` apart.
+ *interval* apart.
.. impl-detail::
- Under some circumstances, :func:`median_grouped` may coerce data
- points to floats. This behaviour is likely to change in the future.
+ Under some circumstances, :func:`median_grouped` may coerce data points to
+ floats. This behaviour is likely to change in the future.
.. seealso::
- * "Statistics for the Behavioral Sciences", Frederick J Gravetter
- and Larry B Wallnau (8th Edition).
+ * "Statistics for the Behavioral Sciences", Frederick J Gravetter and
+ Larry B Wallnau (8th Edition).
* Calculating the `median <http://www.ualberta.ca/~opscan/median.html>`_.
- * The `SSMEDIAN <https://projects.gnome.org/gnumeric/doc/gnumeric-function-SSMEDIAN.shtml>`_
- function in the Gnome Gnumeric spreadsheet, including
- `this discussion <https://mail.gnome.org/archives/gnumeric-list/2011-April/msg00018.html>`_.
+ * The `SSMEDIAN
+ <https://projects.gnome.org/gnumeric/doc/gnumeric-function-SSMEDIAN.shtml>`_
+ function in the Gnome Gnumeric spreadsheet, including `this discussion
+ <https://mail.gnome.org/archives/gnumeric-list/2011-April/msg00018.html>`_.
- If data is empty, :exc:`StatisticsError` is raised.
-
-:func:`mode`
-~~~~~~~~~~~~
-
-The :func:`mode` function calculates the mode, or most common element, of
-discrete or nominal data. The mode (when it exists) is the most typical
-value, and is a robust measure of central location.
.. function:: mode(data)
- Return the most common data point from discrete or nominal data.
+ Return the most common data point from discrete or nominal *data*. The mode
+ (when it exists) is the most typical value, and is a robust measure of
+ central location.
+
+ If *data* is empty, or if there is not exactly one most common value,
+ :exc:`StatisticsError` is raised.
``mode`` assumes discrete data, and returns a single value. This is the
standard treatment of the mode as commonly taught in schools:
@@ -264,60 +243,35 @@
>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
- If data is empty, or if there is not exactly one most common value,
- :exc:`StatisticsError` is raised.
-Measures of spread
-------------------
+.. function:: pstdev(data, mu=None)
-These functions calculate a measure of how much the population or sample
-tends to deviate from the typical or average values.
-
-======================= =============================================
-:func:`pstdev` Population standard deviation of data.
-:func:`pvariance` Population variance of data.
-:func:`stdev` Sample standard deviation of data.
-:func:`variance` Sample variance of data.
-======================= =============================================
-
-:func:`pstdev`
-~~~~~~~~~~~~~~
-
-The :func:`pstdev` function calculates the standard deviation of a
-population. The standard deviation is equivalent to the square root of
-the variance.
-
-.. function:: pstdev(data [, mu])
-
- Return the square root of the population variance. See :func:`pvariance`
- for arguments and other details.
+ Return the population standard deviation (the square root of the population
+ variance). See :func:`pvariance` for arguments and other details.
.. doctest::
>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
0.986893273527251
-:func:`pvariance`
-~~~~~~~~~~~~~~~~~
-The :func:`pvariance` function calculates the variance of a population.
-Variance, or second moment about the mean, is a measure of the variability
-(spread or dispersion) of data. A large variance indicates that the data is
-spread out; a small variance indicates it is clustered closely around the
-mean.
+.. function:: pvariance(data, mu=None)
-.. function:: pvariance(data [, mu])
+ Return the population variance of *data*, a non-empty iterable of real-valued
+ numbers. Variance, or second moment about the mean, is a measure of the
+ variability (spread or dispersion) of data. A large variance indicates that
+ the data is spread out; a small variance indicates it is clustered closely
+ around the mean.
- Return the population variance of *data*, a non-empty iterable of
- real-valued numbers.
-
- If the optional second argument *mu* is given, it should be the mean
- of *data*. If it is missing or None (the default), the mean is
+ If the optional second argument *mu* is given, it should be the mean of
+ *data*. If it is missing or ``None`` (the default), the mean is
automatically calculated.
- Use this function to calculate the variance from the entire population.
- To estimate the variance from a sample, the :func:`variance` function is
- usually a better choice.
+ Use this function to calculate the variance from the entire population. To
+ estimate the variance from a sample, the :func:`variance` function is usually
+ a better choice.
+
+ Raises :exc:`StatisticsError` if *data* is empty.
Examples:
@@ -327,8 +281,8 @@
>>> pvariance(data)
1.25
- If you have already calculated the mean of your data, you can pass
- it as the optional second argument *mu* to avoid recalculation:
+ If you have already calculated the mean of your data, you can pass it as the
+ optional second argument *mu* to avoid recalculation:
.. doctest::
@@ -336,9 +290,9 @@
>>> pvariance(data, mu)
1.25
- This function does not attempt to verify that you have passed the actual
- mean as *mu*. Using arbitrary values for *mu* may lead to invalid or
- impossible results.
+ This function does not attempt to verify that you have passed the actual mean
+ as *mu*. Using arbitrary values for *mu* may lead to invalid or impossible
+ results.
Decimals and Fractions are supported:
@@ -354,53 +308,44 @@
.. note::
- When called with the entire population, this gives the population
- variance σ². When called on a sample instead, this is the biased
- sample variance s², also known as variance with N degrees of freedom.
+ When called with the entire population, this gives the population variance
+ σ². When called on a sample instead, this is the biased sample variance
+ s², also known as variance with N degrees of freedom.
- If you somehow know the true population mean μ, you may use this
- function to calculate the variance of a sample, giving the known
- population mean as the second argument. Provided the data points are
- representative (e.g. independent and identically distributed), the
- result will be an unbiased estimate of the population variance.
+ If you somehow know the true population mean μ, you may use this function
+ to calculate the variance of a sample, giving the known population mean as
+ the second argument. Provided the data points are representative
+ (e.g. independent and identically distributed), the result will be an
+ unbiased estimate of the population variance.
- Raises :exc:`StatisticsError` if *data* is empty.
-:func:`stdev`
-~~~~~~~~~~~~~~
+.. function:: stdev(data, xbar=None)
-The :func:`stdev` function calculates the standard deviation of a sample.
-The standard deviation is equivalent to the square root of the variance.
-
-.. function:: stdev(data [, xbar])
-
- Return the square root of the sample variance. See :func:`variance` for
- arguments and other details.
+ Return the sample standard deviation (the square root of the sample
+ variance). See :func:`variance` for arguments and other details.
.. doctest::
>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
1.0810874155219827
-:func:`variance`
-~~~~~~~~~~~~~~~~~
-The :func:`variance` function calculates the variance of a sample. Variance,
-or second moment about the mean, is a measure of the variability (spread or
-dispersion) of data. A large variance indicates that the data is spread out;
-a small variance indicates it is clustered closely around the mean.
+.. function:: variance(data, xbar=None)
-.. function:: variance(data [, xbar])
+ Return the sample variance of *data*, an iterable of at least two real-valued
+ numbers. Variance, or second moment about the mean, is a measure of the
+ variability (spread or dispersion) of data. A large variance indicates that
+ the data is spread out; a small variance indicates it is clustered closely
+ around the mean.
- Return the sample variance of *data*, an iterable of at least two
- real-valued numbers.
-
- If the optional second argument *xbar* is given, it should be the mean
- of *data*. If it is missing or None (the default), the mean is
+ If the optional second argument *xbar* is given, it should be the mean of
+ *data*. If it is missing or ``None`` (the default), the mean is
automatically calculated.
- Use this function when your data is a sample from a population. To
- calculate the variance from the entire population, see :func:`pvariance`.
+ Use this function when your data is a sample from a population. To calculate
+ the variance from the entire population, see :func:`pvariance`.
+
+ Raises :exc:`StatisticsError` if *data* has fewer than two values.
Examples:
@@ -410,8 +355,8 @@
>>> variance(data)
1.3720238095238095
- If you have already calculated the mean of your data, you can pass
- it as the optional second argument *xbar* to avoid recalculation:
+ If you have already calculated the mean of your data, you can pass it as the
+ optional second argument *xbar* to avoid recalculation:
.. doctest::
@@ -419,8 +364,8 @@
>>> variance(data, m)
1.3720238095238095
- This function does not attempt to verify that you have passed the actual
- mean as *xbar*. Using arbitrary values for *xbar* can lead to invalid or
+ This function does not attempt to verify that you have passed the actual mean
+ as *xbar*. Using arbitrary values for *xbar* can lead to invalid or
impossible results.
Decimal and Fraction values are supported:
@@ -437,26 +382,23 @@
.. note::
- This is the sample variance s² with Bessel's correction, also known
- as variance with N-1 degrees of freedom. Provided that the data
- points are representative (e.g. independent and identically
- distributed), the result should be an unbiased estimate of the true
- population variance.
+ This is the sample variance s² with Bessel's correction, also known as
+ variance with N-1 degrees of freedom. Provided that the data points are
+ representative (e.g. independent and identically distributed), the result
+ should be an unbiased estimate of the true population variance.
- If you somehow know the actual population mean μ you should pass it
- to the :func:`pvariance` function as the *mu* parameter to get
- the variance of a sample.
-
- Raises :exc:`StatisticsError` if *data* has fewer than two values.
+ If you somehow know the actual population mean μ you should pass it to the
+ :func:`pvariance` function as the *mu* parameter to get the variance of a
+ sample.
Exceptions
----------
A single exception is defined:
-:exc:`StatisticsError`
+.. exception:: StatisticsError
-Subclass of :exc:`ValueError` for statistics-related exceptions.
+ Subclass of :exc:`ValueError` for statistics-related exceptions.
..
# This modelines must appear within the last ten lines of the file.
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index c92a005..e304c5d 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -293,18 +293,18 @@
.. productionlist:: sf
format_spec: [[`fill`]`align`][`sign`][#][0][`width`][,][.`precision`][`type`]
- fill: <a character other than '{' or '}'>
+ fill: <any character>
align: "<" | ">" | "=" | "^"
sign: "+" | "-" | " "
width: `integer`
precision: `integer`
type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
-The *fill* character can be any character other than '{' or '}'. The presence
-of a fill character is signaled by the character following it, which must be
-one of the alignment options. If the second character of *format_spec* is not
-a valid alignment option, then it is assumed that both the fill character and
-the alignment option are absent.
+If a valid *align* value is specified, it can be preceeded by a *fill*
+character that can be any character and defaults to a space if omitted.
+Note that it is not possible to use ``{`` and ``}`` as *fill* char while
+using the :meth:`str.format` method; this limitation however doesn't
+affect the :func:`format` function.
The meaning of the various alignment options is as follows:
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 1c81262..f7303ea 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -382,7 +382,7 @@
Instances have one method in addition to those of :class:`ZipFile` objects:
- .. method:: PyZipFile.writepy(pathname, basename='')
+ .. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
Search for files :file:`\*.py` and add the corresponding file to the
archive.
@@ -404,7 +404,10 @@
package directory, then all :file:`\*.py[co]` are added under the package
name as a file path, and if any subdirectories are package directories,
all of these are added recursively. *basename* is intended for internal
- use only. The :meth:`writepy` method makes archives with file names like
+ use only. When *filterfunc(pathname)* is given, it will be called for every
+ invocation. When it returns a False value, that path and its subpaths will
+ be ignored.
+ The :meth:`writepy` method makes archives with file names like
this::
string.pyc # Top level name
@@ -413,6 +416,9 @@
test/bogus/__init__.pyc # Subpackage directory
test/bogus/myfile.pyc # Submodule test.bogus.myfile
+ .. versionadded:: 3.4
+ The *filterfunc* parameter.
+
.. _zipinfo-objects:
diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst
index 2b68d86..c02b9cc 100644
--- a/Doc/whatsnew/3.4.rst
+++ b/Doc/whatsnew/3.4.rst
@@ -564,6 +564,16 @@
(Contributed by Antoine Pitrou in :issue:`17741`.)
+
+zipfile.PyZipfile
+-----------------
+
+Add a filter function to ignore some packages (tests for instance),
+:meth:`~zipfile.PyZipFile.writepy`.
+
+(Contributed by Christian Tismer in :issue:`19274`.)
+
+
Other improvements
==================
diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py
index d650c44..c278dd1 100644
--- a/Lib/asyncio/test_utils.py
+++ b/Lib/asyncio/test_utils.py
@@ -126,6 +126,7 @@
yield httpd
finally:
httpd.shutdown()
+ httpd.server_close()
server_thread.join()
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index a234f4f..b4e2699 100644
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -167,23 +167,25 @@
def _sig_chld(self):
try:
- try:
- pid, status = os.waitpid(0, os.WNOHANG)
- except ChildProcessError:
- return
- if pid == 0:
- self.call_soon(self._sig_chld)
- return
- elif os.WIFSIGNALED(status):
- returncode = -os.WTERMSIG(status)
- elif os.WIFEXITED(status):
- returncode = os.WEXITSTATUS(status)
- else:
- self.call_soon(self._sig_chld)
- return
- transp = self._subprocesses.get(pid)
- if transp is not None:
- transp._process_exited(returncode)
+ # because of signal coalescing, we must keep calling waitpid() as
+ # long as we're able to reap a child
+ while True:
+ try:
+ pid, status = os.waitpid(-1, os.WNOHANG)
+ except ChildProcessError:
+ break
+ if pid == 0:
+ break
+ elif os.WIFSIGNALED(status):
+ returncode = -os.WTERMSIG(status)
+ elif os.WIFEXITED(status):
+ returncode = os.WEXITSTATUS(status)
+ else:
+ # shouldn't happen
+ continue
+ transp = self._subprocesses.get(pid)
+ if transp is not None:
+ transp._process_exited(returncode)
except Exception:
logger.exception('Unknown exception in SIGCHLD handler')
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index fcd4b14..9538fec 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -50,6 +50,8 @@
# The standard FTP server control port
FTP_PORT = 21
+# The sizehint parameter passed to readline() calls
+MAXLINE = 8192
# Exception raised when an error or invalid response is received
@@ -97,6 +99,7 @@
debugging = 0
host = ''
port = FTP_PORT
+ maxline = MAXLINE
sock = None
file = None
welcome = None
@@ -197,7 +200,9 @@
# Internal: return one line from the server, stripping CRLF.
# Raise EOFError if the connection is closed
def getline(self):
- line = self.file.readline()
+ line = self.file.readline(self.maxline + 1)
+ if len(line) > self.maxline:
+ raise Error("got more than %d bytes" % self.maxline)
if self.debugging > 1:
print('*get*', self.sanitize(line))
if not line:
@@ -463,7 +468,9 @@
with self.transfercmd(cmd) as conn, \
conn.makefile('r', encoding=self.encoding) as fp:
while 1:
- line = fp.readline()
+ line = fp.readline(self.maxline + 1)
+ if len(line) > self.maxline:
+ raise Error("got more than %d bytes" % self.maxline)
if self.debugging > 2:
print('*retr*', repr(line))
if not line:
@@ -522,7 +529,9 @@
self.voidcmd('TYPE A')
with self.transfercmd(cmd) as conn:
while 1:
- buf = fp.readline()
+ buf = fp.readline(self.maxline + 1)
+ if len(buf) > self.maxline:
+ raise Error("got more than %d bytes" % self.maxline)
if not buf:
break
if buf[-2:] != B_CRLF:
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index e8eeea1..ec10532 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -370,12 +370,13 @@
# Python 3.4a1 3270 (various tweaks to the __class__ closure)
# Python 3.4a1 3280 (remove implicit class argument)
# Python 3.4a4 3290 (changes to __qualname__ computation)
+# Python 3.4a4 3300 (more changes to __qualname__ computation)
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
# longer be understood by older implementations of the eval loop (usually
# due to the addition of new opcodes).
-MAGIC_NUMBER = (3290).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3300).to_bytes(2, 'little') + b'\r\n'
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
_PYCACHE = '__pycache__'
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 2e3a670..edbf927 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -269,9 +269,9 @@
results = []
processed = set()
names = dir(object)
- # add any virtual attributes to the list of names if object is a class
+ # :dd any DynamicClassAttributes to the list of names if object is a class;
# this may result in duplicate entries if, for example, a virtual
- # attribute with the same name as a member property exists
+ # attribute with the same name as a DynamicClassAttribute exists
try:
for base in object.__bases__:
for k, v in base.__dict__.items():
@@ -329,79 +329,88 @@
If one of the items in dir(cls) is stored in the metaclass it will now
be discovered and not have None be listed as the class in which it was
- defined.
+ defined. Any items whose home class cannot be discovered are skipped.
"""
mro = getmro(cls)
metamro = getmro(type(cls)) # for attributes stored in the metaclass
metamro = tuple([cls for cls in metamro if cls not in (type, object)])
- possible_bases = (cls,) + mro + metamro
+ class_bases = (cls,) + mro
+ all_bases = class_bases + metamro
names = dir(cls)
- # add any virtual attributes to the list of names
+ # :dd any DynamicClassAttributes to the list of names;
# this may result in duplicate entries if, for example, a virtual
- # attribute with the same name as a member property exists
+ # attribute with the same name as a DynamicClassAttribute exists.
for base in mro:
for k, v in base.__dict__.items():
if isinstance(v, types.DynamicClassAttribute):
names.append(k)
result = []
processed = set()
- sentinel = object()
+
for name in names:
# Get the object associated with the name, and where it was defined.
# Normal objects will be looked up with both getattr and directly in
# its class' dict (in case getattr fails [bug #1785], and also to look
# for a docstring).
- # For VirtualAttributes on the second pass we only look in the
+ # For DynamicClassAttributes on the second pass we only look in the
# class's dict.
#
# Getting an obj from the __dict__ sometimes reveals more than
# using getattr. Static and class methods are dramatic examples.
homecls = None
- get_obj = sentinel
- dict_obj = sentinel
+ get_obj = None
+ dict_obj = None
if name not in processed:
try:
if name == '__dict__':
- raise Exception("__dict__ is special, we don't want the proxy")
+ raise Exception("__dict__ is special, don't want the proxy")
get_obj = getattr(cls, name)
except Exception as exc:
pass
else:
homecls = getattr(get_obj, "__objclass__", homecls)
- if homecls not in possible_bases:
+ if homecls not in class_bases:
# if the resulting object does not live somewhere in the
# mro, drop it and search the mro manually
homecls = None
last_cls = None
- last_obj = None
- for srch_cls in ((cls,) + mro):
+ # first look in the classes
+ for srch_cls in class_bases:
srch_obj = getattr(srch_cls, name, None)
- if srch_obj is get_obj:
+ if srch_obj == get_obj:
last_cls = srch_cls
- last_obj = srch_obj
+ # then check the metaclasses
+ for srch_cls in metamro:
+ try:
+ srch_obj = srch_cls.__getattr__(cls, name)
+ except AttributeError:
+ continue
+ if srch_obj == get_obj:
+ last_cls = srch_cls
if last_cls is not None:
homecls = last_cls
- for base in possible_bases:
+ for base in all_bases:
if name in base.__dict__:
dict_obj = base.__dict__[name]
- homecls = homecls or base
+ if homecls not in metamro:
+ homecls = base
break
if homecls is None:
# unable to locate the attribute anywhere, most likely due to
# buggy custom __dir__; discard and move on
continue
+ obj = get_obj or dict_obj
# Classify the object or its descriptor.
- if get_obj is not sentinel:
- obj = get_obj
- else:
- obj = dict_obj
if isinstance(dict_obj, staticmethod):
kind = "static method"
+ obj = dict_obj
elif isinstance(dict_obj, classmethod):
kind = "class method"
- elif isinstance(obj, property):
+ obj = dict_obj
+ elif isinstance(dict_obj, property):
kind = "property"
+ obj = dict_obj
elif isfunction(obj) or ismethoddescriptor(obj):
kind = "method"
else:
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 3f95cc3..a459f77 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -310,6 +310,11 @@
The ``encoding`` argument is ignored and deprecated.
"""
+ if not isinstance(s, str):
+ raise TypeError('the JSON object must be str, not {!r}'.format(
+ s.__class__.__name__))
+ if s.startswith(u'\ufeff'):
+ raise ValueError("Unexpected UTF-8 BOM (decode using utf-8-sig)")
if (cls is None and object_hook is None and
parse_int is None and parse_float is None and
parse_constant is None and object_pairs_hook is None and not kw):
diff --git a/Lib/platform.py b/Lib/platform.py
index cbbe6d8..c3c4b32 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -1183,6 +1183,14 @@
'(?: \(([\d\.]+)\))?'
' on (.NET [\d\.]+)', re.ASCII)
+# IronPython covering 2.6 and 2.7
+_ironpython26_sys_version_parser = re.compile(
+ r'([\d.]+)\s*'
+ '\(IronPython\s*'
+ '[\d.]+\s*'
+ '\(([\d.]+)\) on ([\w.]+ [\d.]+(?: \(\d+-bit\))?)\)'
+)
+
_pypy_sys_version_parser = re.compile(
r'([\w.+]+)\s*'
'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
@@ -1220,19 +1228,24 @@
return result
# Parse it
- if sys_version[:10] == 'IronPython':
+ if 'IronPython' in sys_version:
# IronPython
name = 'IronPython'
- match = _ironpython_sys_version_parser.match(sys_version)
+ if sys_version.startswith('IronPython'):
+ match = _ironpython_sys_version_parser.match(sys_version)
+ else:
+ match = _ironpython26_sys_version_parser.match(sys_version)
+
if match is None:
raise ValueError(
'failed to parse IronPython sys.version: %s' %
repr(sys_version))
+
version, alt_version, compiler = match.groups()
buildno = ''
builddate = ''
- elif sys.platform[:4] == 'java':
+ elif sys.platform.startswith('java'):
# Jython
name = 'Jython'
match = _sys_version_parser.match(sys_version)
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 174311c..d0240ff 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1235,8 +1235,9 @@
doc = getdoc(value)
else:
doc = None
- push(self.docother(getattr(object, name),
- name, mod, maxlen=70, doc=doc) + '\n')
+ push(self.docother(
+ getattr(object, name, None) or homecls.__dict__[name],
+ name, mod, maxlen=70, doc=doc) + '\n')
return attrs
attrs = [(name, kind, cls, value)
@@ -1258,7 +1259,6 @@
else:
tag = "inherited from %s" % classname(thisclass,
object.__module__)
-
# Sort attrs by name.
attrs.sort()
@@ -1273,6 +1273,7 @@
lambda t: t[1] == 'data descriptor')
attrs = spilldata("Data and other attributes %s:\n" % tag, attrs,
lambda t: t[1] == 'data')
+
assert attrs == []
attrs = inherited
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index db15244..9f36896 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -5,6 +5,7 @@
import time
import unittest
import unittest.mock
+from test.support import find_unused_port, IPV6_ENABLED
from asyncio import base_events
from asyncio import events
@@ -533,6 +534,7 @@
self.assertRaises(
OSError, self.loop.run_until_complete, coro)
+ @unittest.skipUnless(IPV6_ENABLED, 'IPv6 not supported or enabled')
def test_create_datagram_endpoint_no_matching_family(self):
coro = self.loop.create_datagram_endpoint(
protocols.DatagramProtocol,
@@ -588,3 +590,7 @@
self.loop._accept_connection(MyProto, sock)
self.assertTrue(sock.close.called)
self.assertTrue(m_log.exception.called)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index f0f4810..10ddabb 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -1233,6 +1233,26 @@
self.loop.run_until_complete(proto.completed)
self.assertEqual(-signal.SIGTERM, proto.returncode)
+ @unittest.skipIf(sys.platform == 'win32',
+ "Don't support subprocess for Windows yet")
+ def test_subprocess_wait_no_same_group(self):
+ proto = None
+ transp = None
+
+ @tasks.coroutine
+ def connect():
+ nonlocal proto
+ # start the new process in a new session
+ transp, proto = yield from self.loop.subprocess_shell(
+ functools.partial(MySubprocessProtocol, self.loop),
+ 'exit 7', stdin=None, stdout=None, stderr=None,
+ start_new_session=True)
+ self.assertIsInstance(proto, MySubprocessProtocol)
+
+ self.loop.run_until_complete(connect())
+ self.loop.run_until_complete(proto.completed)
+ self.assertEqual(7, proto.returncode)
+
if sys.platform == 'win32':
from asyncio import windows_events
diff --git a/Lib/test/test_asyncio/test_proactor_events.py b/Lib/test/test_asyncio/test_proactor_events.py
index 05d1606..5a2a51c 100644
--- a/Lib/test/test_asyncio/test_proactor_events.py
+++ b/Lib/test/test_asyncio/test_proactor_events.py
@@ -478,3 +478,7 @@
self.loop._stop_serving(sock)
self.assertTrue(sock.close.called)
self.proactor._stop_serving.assert_called_with(sock)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py
index 53728b8..fbd5d72 100644
--- a/Lib/test/test_asyncio/test_selector_events.py
+++ b/Lib/test/test_asyncio/test_selector_events.py
@@ -1483,3 +1483,7 @@
transport._fatal_error(err)
self.protocol.connection_refused.assert_called_with(err)
m_exc.assert_called_with('Fatal error for %s', transport)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_selectors.py b/Lib/test/test_asyncio/test_selectors.py
index 2f7dc69..db5b3ec 100644
--- a/Lib/test/test_asyncio/test_selectors.py
+++ b/Lib/test/test_asyncio/test_selectors.py
@@ -143,3 +143,7 @@
if hasattr(selectors.DefaultSelector, 'fileno'):
def test_fileno(self):
self.assertIsInstance(selectors.DefaultSelector().fileno(), int)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_transports.py b/Lib/test/test_asyncio/test_transports.py
index 53071af..f96445c 100644
--- a/Lib/test/test_asyncio/test_transports.py
+++ b/Lib/test/test_asyncio/test_transports.py
@@ -53,3 +53,7 @@
self.assertRaises(NotImplementedError, transport.send_signal, 1)
self.assertRaises(NotImplementedError, transport.terminate)
self.assertRaises(NotImplementedError, transport.kill)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
index ccabeea..834df81 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -768,3 +768,7 @@
tr.write_eof()
self.assertTrue(tr._closing)
self.assertFalse(self.protocol.connection_lost.called)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
index 4b04073..969360c 100644
--- a/Lib/test/test_asyncio/test_windows_events.py
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -93,3 +93,7 @@
protocols.Protocol, ADDRESS)
return 'done'
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_asyncio/test_windows_utils.py b/Lib/test/test_asyncio/test_windows_utils.py
index 3b6b036..f721d31 100644
--- a/Lib/test/test_asyncio/test_windows_utils.py
+++ b/Lib/test/test_asyncio/test_windows_utils.py
@@ -138,3 +138,7 @@
# allow for partial reads...
self.assertTrue(msg.upper().rstrip().startswith(out))
self.assertTrue(b"stderr".startswith(err))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py
index f222811..cf0ef7b 100644
--- a/Lib/test/test_audioop.py
+++ b/Lib/test/test_audioop.py
@@ -1,7 +1,6 @@
import audioop
import sys
import unittest
-from test.support import run_unittest
def pack(width, data):
return b''.join(v.to_bytes(width, sys.byteorder, signed=True) for v in data)
@@ -415,8 +414,5 @@
self.assertRaises(audioop.error, audioop.alaw2lin, data, size)
self.assertRaises(audioop.error, audioop.adpcm2lin, data, size, state)
-def test_main():
- run_unittest(TestAudioop)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 90efb27..595d540 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4519,8 +4519,10 @@
global Y
class Y:
- pass
+ class Inside:
+ pass
self.assertEqual(Y.__qualname__, 'Y')
+ self.assertEqual(Y.Inside.__qualname__, 'Y.Inside')
def test_qualname_dict(self):
ns = {'__qualname__': 'some.name'}
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index 2d374b9..ebd99ed 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -72,9 +72,9 @@
Raise an error if the output doesn't match the expected format.
"""
if all_threads:
- header = 'Current thread XXX'
+ header = 'Current thread XXX (most recent call first)'
else:
- header = 'Traceback (most recent call first)'
+ header = 'Stack (most recent call first)'
regex = """
^Fatal Python error: {name}
@@ -306,7 +306,7 @@
else:
lineno = 8
expected = [
- 'Traceback (most recent call first):',
+ 'Stack (most recent call first):',
' File "<string>", line %s in funcB' % lineno,
' File "<string>", line 11 in funcA',
' File "<string>", line 13 in <module>'
@@ -338,7 +338,7 @@
func_name=func_name,
)
expected = [
- 'Traceback (most recent call first):',
+ 'Stack (most recent call first):',
' File "<string>", line 4 in %s' % truncated,
' File "<string>", line 6 in <module>'
]
@@ -392,13 +392,13 @@
else:
lineno = 10
regex = """
-^Thread 0x[0-9a-f]+:
+^Thread 0x[0-9a-f]+ \(most recent call first\):
(?: File ".*threading.py", line [0-9]+ in [_a-z]+
){{1,3}} File "<string>", line 23 in run
File ".*threading.py", line [0-9]+ in _bootstrap_inner
File ".*threading.py", line [0-9]+ in _bootstrap
-Current thread XXX:
+Current thread XXX \(most recent call first\):
File "<string>", line {lineno} in dump
File "<string>", line 28 in <module>$
""".strip()
@@ -461,7 +461,7 @@
count = loops
if repeat:
count *= 2
- header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+:\n' % timeout_str
+ header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+ \(most recent call first\):\n' % timeout_str
regex = expected_traceback(9, 20, header, min_count=count)
self.assertRegex(trace, regex)
else:
@@ -563,9 +563,9 @@
trace = '\n'.join(trace)
if not unregister:
if all_threads:
- regex = 'Current thread XXX:\n'
+ regex = 'Current thread XXX \(most recent call first\):\n'
else:
- regex = 'Traceback \(most recent call first\):\n'
+ regex = 'Stack \(most recent call first\):\n'
regex = expected_traceback(7, 28, regex)
self.assertRegex(trace, regex)
else:
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index 47563c8..c0b537a 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -92,6 +92,7 @@
self.next_response = ''
self.next_data = None
self.rest = None
+ self.next_retr_data = RETR_DATA
self.push('220 welcome')
def collect_incoming_data(self, data):
@@ -221,7 +222,7 @@
offset = int(self.rest)
else:
offset = 0
- self.dtp.push(RETR_DATA[offset:])
+ self.dtp.push(self.next_retr_data[offset:])
self.dtp.close_when_done()
self.rest = None
@@ -243,6 +244,11 @@
self.dtp.push(MLSD_DATA)
self.dtp.close_when_done()
+ def cmd_setlongretr(self, arg):
+ # For testing. Next RETR will return long line.
+ self.next_retr_data = 'x' * int(arg)
+ self.push('125 setlongretr ok')
+
class DummyFTPServer(asyncore.dispatcher, threading.Thread):
@@ -759,6 +765,20 @@
self.assertEqual(ftplib.parse257('257 "/foo/b""ar"'), '/foo/b"ar')
self.assertEqual(ftplib.parse257('257 "/foo/b""ar" created'), '/foo/b"ar')
+ def test_line_too_long(self):
+ self.assertRaises(ftplib.Error, self.client.sendcmd,
+ 'x' * self.client.maxline * 2)
+
+ def test_retrlines_too_long(self):
+ self.client.sendcmd('SETLONGRETR %d' % (self.client.maxline * 2))
+ received = []
+ self.assertRaises(ftplib.Error,
+ self.client.retrlines, 'retr', received.append)
+
+ def test_storlines_too_long(self):
+ f = io.BytesIO(b'x' * self.client.maxline * 2)
+ self.assertRaises(ftplib.Error, self.client.storlines, 'stor', f)
+
class TestIPv6Environment(TestCase):
diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py
index 1d8fa13..5094f7b 100644
--- a/Lib/test/test_funcattrs.py
+++ b/Lib/test/test_funcattrs.py
@@ -9,7 +9,9 @@
pass
global inner_global_function
def inner_global_function():
- pass
+ def inner_function2():
+ pass
+ return inner_function2
return LocalClass
return lambda: inner_function
@@ -120,6 +122,7 @@
self.assertEqual(global_function()()().__qualname__,
'global_function.<locals>.inner_function.<locals>.LocalClass')
self.assertEqual(inner_global_function.__qualname__, 'inner_global_function')
+ self.assertEqual(inner_global_function().__qualname__, 'inner_global_function.<locals>.inner_function2')
self.b.__qualname__ = 'c'
self.assertEqual(self.b.__qualname__, 'c')
self.b.__qualname__ = 'd'
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index fb6aa6a..9d34904 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -667,9 +667,19 @@
return 'eggs'
should_find_dca = inspect.Attribute('ham', 'data', VA, VA.__dict__['ham'])
self.assertIn(should_find_dca, inspect.classify_class_attrs(VA))
- should_find_ga = inspect.Attribute('ham', 'data', VA, 'spam')
+ should_find_ga = inspect.Attribute('ham', 'data', Meta, 'spam')
self.assertIn(should_find_ga, inspect.classify_class_attrs(VA))
+ def test_classify_metaclass_class_attribute(self):
+ class Meta(type):
+ fish = 'slap'
+ def __dir__(self):
+ return ['__class__', '__modules__', '__name__', 'fish']
+ class Class(metaclass=Meta):
+ pass
+ should_find = inspect.Attribute('fish', 'data', Meta, 'slap')
+ self.assertIn(should_find, inspect.classify_class_attrs(Class))
+
def test_classify_VirtualAttribute(self):
class Meta(type):
def __dir__(cls):
@@ -680,7 +690,7 @@
return super().__getattr(name)
class Class(metaclass=Meta):
pass
- should_find = inspect.Attribute('BOOM', 'data', Class, 42)
+ should_find = inspect.Attribute('BOOM', 'data', Meta, 42)
self.assertIn(should_find, inspect.classify_class_attrs(Class))
def test_classify_VirtualAttribute_multi_classes(self):
@@ -711,9 +721,9 @@
class Class2(Class1, metaclass=Meta3):
pass
- should_find1 = inspect.Attribute('one', 'data', Class1, 1)
- should_find2 = inspect.Attribute('two', 'data', Class2, 2)
- should_find3 = inspect.Attribute('three', 'data', Class2, 3)
+ should_find1 = inspect.Attribute('one', 'data', Meta1, 1)
+ should_find2 = inspect.Attribute('two', 'data', Meta2, 2)
+ should_find3 = inspect.Attribute('three', 'data', Meta3, 3)
cca = inspect.classify_class_attrs(Class2)
for sf in (should_find1, should_find2, should_find3):
self.assertIn(sf, cca)
diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py
index d23e285..35c02de 100644
--- a/Lib/test/test_json/test_decode.py
+++ b/Lib/test/test_json/test_decode.py
@@ -1,5 +1,5 @@
import decimal
-from io import StringIO
+from io import StringIO, BytesIO
from collections import OrderedDict
from test.test_json import PyTest, CTest
@@ -70,5 +70,26 @@
msg = 'escape'
self.assertRaisesRegex(ValueError, msg, self.loads, s)
+ def test_invalid_input_type(self):
+ msg = 'the JSON object must be str'
+ for value in [1, 3.14, b'bytes', b'\xff\x00', [], {}, None]:
+ self.assertRaisesRegex(TypeError, msg, self.loads, value)
+ with self.assertRaisesRegex(TypeError, msg):
+ self.json.load(BytesIO(b'[1,2,3]'))
+
+ def test_string_with_utf8_bom(self):
+ # see #18958
+ bom_json = "[1,2,3]".encode('utf-8-sig').decode('utf-8')
+ with self.assertRaises(ValueError) as cm:
+ self.loads(bom_json)
+ self.assertIn('BOM', str(cm.exception))
+ with self.assertRaises(ValueError) as cm:
+ self.json.load(StringIO(bom_json))
+ self.assertIn('BOM', str(cm.exception))
+ # make sure that the BOM is not detected in the middle of a string
+ bom_in_str = '"{}"'.format(''.encode('utf-8-sig').decode('utf-8'))
+ self.assertEqual(self.loads(bom_in_str), '\ufeff')
+ self.assertEqual(self.json.load(StringIO(bom_in_str)), '\ufeff')
+
class TestPyDecode(TestDecode, PyTest): pass
class TestCDecode(TestDecode, CTest): pass
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 6abf443..0dcfe05 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -91,15 +91,28 @@
("CPython", "2.6.1", "tags/r261", "67515",
('r261:67515', 'Dec 6 2008 15:26:00'),
'GCC 4.0.1 (Apple Computer, Inc. build 5370)'),
+
("IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053", None, "cli")
:
("IronPython", "2.0.0", "", "", ("", ""),
".NET 2.0.50727.3053"),
+
+ ("2.6.1 (IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.1433)", None, "cli")
+ :
+ ("IronPython", "2.6.1", "", "", ("", ""),
+ ".NET 2.0.50727.1433"),
+
+ ("2.7.4 (IronPython 2.7.4 (2.7.0.40) on Mono 4.0.30319.1 (32-bit))", None, "cli")
+ :
+ ("IronPython", "2.7.4", "", "", ("", ""),
+ "Mono 4.0.30319.1 (32-bit)"),
+
("2.5 (trunk:6107, Mar 26 2009, 13:02:18) \n[Java HotSpot(TM) Client VM (\"Apple Computer, Inc.\")]",
('Jython', 'trunk', '6107'), "java1.5.0_16")
:
("Jython", "2.5.0", "trunk", "6107",
('trunk:6107', 'Mar 26 2009'), "java1.5.0_16"),
+
("2.5.2 (63378, Mar 26 2009, 18:03:29)\n[PyPy 1.0.0]",
('PyPy', 'trunk', '63378'), self.save_platform)
:
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 399f818..3508763 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -11,6 +11,7 @@
import string
import test.support
import time
+import types
import unittest
import xml.etree
import textwrap
@@ -208,6 +209,77 @@
# output pattern for module with bad imports
badimport_pattern = "problem in %s - ImportError: No module named %r"
+expected_dynamicattribute_pattern = """
+Help on class DA in module %s:
+
+class DA(builtins.object)
+ | Data descriptors defined here:
+ |
+ | __dict__
+ | dictionary for instance variables (if defined)
+ |
+ | __weakref__
+ | list of weak references to the object (if defined)
+ |
+ | ham
+ |
+ | ----------------------------------------------------------------------
+ | Data and other attributes inherited from Meta:
+ |
+ | ham = 'spam'
+""".strip()
+
+expected_virtualattribute_pattern1 = """
+Help on class Class in module %s:
+
+class Class(builtins.object)
+ | Data and other attributes inherited from Meta:
+ |
+ | LIFE = 42
+""".strip()
+
+expected_virtualattribute_pattern2 = """
+Help on class Class1 in module %s:
+
+class Class1(builtins.object)
+ | Data and other attributes inherited from Meta1:
+ |
+ | one = 1
+""".strip()
+
+expected_virtualattribute_pattern3 = """
+Help on class Class2 in module %s:
+
+class Class2(Class1)
+ | Method resolution order:
+ | Class2
+ | Class1
+ | builtins.object
+ |
+ | Data and other attributes inherited from Meta1:
+ |
+ | one = 1
+ |
+ | ----------------------------------------------------------------------
+ | Data and other attributes inherited from Meta3:
+ |
+ | three = 3
+ |
+ | ----------------------------------------------------------------------
+ | Data and other attributes inherited from Meta2:
+ |
+ | two = 2
+""".strip()
+
+expected_missingattribute_pattern = """
+Help on class C in module %s:
+
+class C(builtins.object)
+ | Data and other attributes defined here:
+ |
+ | here = 'present!'
+""".strip()
+
def run_pydoc(module_name, *args, **env):
"""
Runs pydoc on the specified module. Returns the stripped
@@ -636,6 +708,108 @@
self.assertEqual(sorted(pydoc.Helper.keywords),
sorted(keyword.kwlist))
+class PydocWithMetaClasses(unittest.TestCase):
+ def test_DynamicClassAttribute(self):
+ class Meta(type):
+ def __getattr__(self, name):
+ if name == 'ham':
+ return 'spam'
+ return super().__getattr__(name)
+ class DA(metaclass=Meta):
+ @types.DynamicClassAttribute
+ def ham(self):
+ return 'eggs'
+ output = StringIO()
+ helper = pydoc.Helper(output=output)
+ helper(DA)
+ expected_text = expected_dynamicattribute_pattern % __name__
+ result = output.getvalue().strip()
+ if result != expected_text:
+ print_diffs(expected_text, result)
+ self.fail("outputs are not equal, see diff above")
+
+ def test_virtualClassAttributeWithOneMeta(self):
+ class Meta(type):
+ def __dir__(cls):
+ return ['__class__', '__module__', '__name__', 'LIFE']
+ def __getattr__(self, name):
+ if name =='LIFE':
+ return 42
+ return super().__getattr(name)
+ class Class(metaclass=Meta):
+ pass
+ output = StringIO()
+ helper = pydoc.Helper(output=output)
+ helper(Class)
+ expected_text = expected_virtualattribute_pattern1 % __name__
+ result = output.getvalue().strip()
+ if result != expected_text:
+ print_diffs(expected_text, result)
+ self.fail("outputs are not equal, see diff above")
+
+ def test_virtualClassAttributeWithTwoMeta(self):
+ class Meta1(type):
+ def __dir__(cls):
+ return ['__class__', '__module__', '__name__', 'one']
+ def __getattr__(self, name):
+ if name =='one':
+ return 1
+ return super().__getattr__(name)
+ class Meta2(type):
+ def __dir__(cls):
+ return ['__class__', '__module__', '__name__', 'two']
+ def __getattr__(self, name):
+ if name =='two':
+ return 2
+ return super().__getattr__(name)
+ class Meta3(Meta1, Meta2):
+ def __dir__(cls):
+ return list(sorted(set(
+ ['__class__', '__module__', '__name__', 'three'] +
+ Meta1.__dir__(cls) + Meta2.__dir__(cls))))
+ def __getattr__(self, name):
+ if name =='three':
+ return 3
+ return super().__getattr__(name)
+ class Class1(metaclass=Meta1):
+ pass
+ class Class2(Class1, metaclass=Meta3):
+ pass
+ fail1 = fail2 = False
+ output = StringIO()
+ helper = pydoc.Helper(output=output)
+ helper(Class1)
+ expected_text1 = expected_virtualattribute_pattern2 % __name__
+ result1 = output.getvalue().strip()
+ if result1 != expected_text1:
+ print_diffs(expected_text1, result1)
+ fail1 = True
+ output = StringIO()
+ helper = pydoc.Helper(output=output)
+ helper(Class2)
+ expected_text2 = expected_virtualattribute_pattern3 % __name__
+ result2 = output.getvalue().strip()
+ if result2 != expected_text2:
+ print_diffs(expected_text2, result2)
+ fail2 = True
+ if fail1 or fail2:
+ self.fail("outputs are not equal, see diff above")
+
+ def test_buggy_dir(self):
+ class M(type):
+ def __dir__(cls):
+ return ['__class__', '__name__', 'missing', 'here']
+ class C(metaclass=M):
+ here = 'present!'
+ output = StringIO()
+ helper = pydoc.Helper(output=output)
+ helper(C)
+ expected_text = expected_missingattribute_pattern % __name__
+ result = output.getvalue().strip()
+ if result != expected_text:
+ print_diffs(expected_text, result)
+ self.fail("outputs are not equal, see diff above")
+
@reap_threads
def test_main():
try:
@@ -645,6 +819,7 @@
PydocServerTest,
PydocUrlHandlerTest,
TestHelper,
+ PydocWithMetaClasses,
)
finally:
reap_children()
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 899a3fb..f57da5f 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -591,6 +591,25 @@
self.assertCompiledIn('email/__init__.py', names)
self.assertCompiledIn('email/mime/text.py', names)
+ def test_write_filtered_python_package(self):
+ import test
+ packagedir = os.path.dirname(test.__file__)
+
+ with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
+
+ # first make sure that the test folder gives error messages
+ # (on the badsyntax_... files)
+ with captured_stdout() as reportSIO:
+ zipfp.writepy(packagedir)
+ reportStr = reportSIO.getvalue()
+ self.assertTrue('SyntaxError' in reportStr)
+
+ # then check that the filter works
+ with captured_stdout() as reportSIO:
+ zipfp.writepy(packagedir, filterfunc=lambda whatever: False)
+ reportStr = reportSIO.getvalue()
+ self.assertTrue('SyntaxError' not in reportStr)
+
def test_write_with_optimization(self):
import email
packagedir = os.path.dirname(email.__file__)
@@ -600,7 +619,7 @@
ext = '.pyo' if optlevel == 1 else '.pyc'
with TemporaryFile() as t, \
- zipfile.PyZipFile(t, "w", optimize=optlevel) as zipfp:
+ zipfile.PyZipFile(t, "w", optimize=optlevel) as zipfp:
zipfp.writepy(packagedir)
names = zipfp.namelist()
@@ -733,25 +752,25 @@
def test_extract_hackers_arcnames_windows_only(self):
"""Test combination of path fixing and windows name sanitization."""
windows_hacknames = [
- (r'..\foo\bar', 'foo/bar'),
- (r'..\/foo\/bar', 'foo/bar'),
- (r'foo/\..\/bar', 'foo/bar'),
- (r'foo\/../\bar', 'foo/bar'),
- (r'C:foo/bar', 'foo/bar'),
- (r'C:/foo/bar', 'foo/bar'),
- (r'C://foo/bar', 'foo/bar'),
- (r'C:\foo\bar', 'foo/bar'),
- (r'//conky/mountpoint/foo/bar', 'foo/bar'),
- (r'\\conky\mountpoint\foo\bar', 'foo/bar'),
- (r'///conky/mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
- (r'\\\conky\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
- (r'//conky//mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
- (r'\\conky\\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
- (r'//?/C:/foo/bar', 'foo/bar'),
- (r'\\?\C:\foo\bar', 'foo/bar'),
- (r'C:/../C:/foo/bar', 'C_/foo/bar'),
- (r'a:b\c<d>e|f"g?h*i', 'b/c_d_e_f_g_h_i'),
- ('../../foo../../ba..r', 'foo/ba..r'),
+ (r'..\foo\bar', 'foo/bar'),
+ (r'..\/foo\/bar', 'foo/bar'),
+ (r'foo/\..\/bar', 'foo/bar'),
+ (r'foo\/../\bar', 'foo/bar'),
+ (r'C:foo/bar', 'foo/bar'),
+ (r'C:/foo/bar', 'foo/bar'),
+ (r'C://foo/bar', 'foo/bar'),
+ (r'C:\foo\bar', 'foo/bar'),
+ (r'//conky/mountpoint/foo/bar', 'foo/bar'),
+ (r'\\conky\mountpoint\foo\bar', 'foo/bar'),
+ (r'///conky/mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
+ (r'\\\conky\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
+ (r'//conky//mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
+ (r'\\conky\\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
+ (r'//?/C:/foo/bar', 'foo/bar'),
+ (r'\\?\C:\foo\bar', 'foo/bar'),
+ (r'C:/../C:/foo/bar', 'C_/foo/bar'),
+ (r'a:b\c<d>e|f"g?h*i', 'b/c_d_e_f_g_h_i'),
+ ('../../foo../../ba..r', 'foo/ba..r'),
]
self._test_extract_hackers_arcnames(windows_hacknames)
@@ -877,10 +896,10 @@
def test_unsupported_version(self):
# File has an extract_version of 120
data = (b'PK\x03\x04x\x00\x00\x00\x00\x00!p\xa1@\x00\x00\x00\x00\x00\x00'
- b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00xPK\x01\x02x\x03x\x00\x00\x00\x00'
- b'\x00!p\xa1@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00'
- b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00xPK\x05\x06'
- b'\x00\x00\x00\x00\x01\x00\x01\x00/\x00\x00\x00\x1f\x00\x00\x00\x00\x00')
+ b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00xPK\x01\x02x\x03x\x00\x00\x00\x00'
+ b'\x00!p\xa1@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00'
+ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00xPK\x05\x06'
+ b'\x00\x00\x00\x00\x01\x00\x01\x00/\x00\x00\x00\x1f\x00\x00\x00\x00\x00')
self.assertRaises(NotImplementedError, zipfile.ZipFile,
io.BytesIO(data), 'r')
@@ -1066,11 +1085,11 @@
def test_unsupported_compression(self):
# data is declared as shrunk, but actually deflated
data = (b'PK\x03\x04.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00'
- b'\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00x\x03\x00PK\x01'
- b'\x02.\x03.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00\x00\x02\x00\x00'
- b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
- b'\x80\x01\x00\x00\x00\x00xPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00'
- b'/\x00\x00\x00!\x00\x00\x00\x00\x00')
+ b'\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00x\x03\x00PK\x01'
+ b'\x02.\x03.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00\x00\x02\x00\x00'
+ b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ b'\x80\x01\x00\x00\x00\x00xPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00'
+ b'/\x00\x00\x00!\x00\x00\x00\x00\x00')
with zipfile.ZipFile(io.BytesIO(data), 'r') as zipf:
self.assertRaises(NotImplementedError, zipf.open, 'x')
@@ -1232,57 +1251,57 @@
class StoredBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
compression = zipfile.ZIP_STORED
zip_with_bad_crc = (
- b'PK\003\004\024\0\0\0\0\0 \213\212;:r'
- b'\253\377\f\0\0\0\f\0\0\0\005\0\0\000af'
- b'ilehello,AworldP'
- b'K\001\002\024\003\024\0\0\0\0\0 \213\212;:'
- b'r\253\377\f\0\0\0\f\0\0\0\005\0\0\0\0'
- b'\0\0\0\0\0\0\0\200\001\0\0\0\000afi'
- b'lePK\005\006\0\0\0\0\001\0\001\0003\000'
- b'\0\0/\0\0\0\0\0')
+ b'PK\003\004\024\0\0\0\0\0 \213\212;:r'
+ b'\253\377\f\0\0\0\f\0\0\0\005\0\0\000af'
+ b'ilehello,AworldP'
+ b'K\001\002\024\003\024\0\0\0\0\0 \213\212;:'
+ b'r\253\377\f\0\0\0\f\0\0\0\005\0\0\0\0'
+ b'\0\0\0\0\0\0\0\200\001\0\0\0\000afi'
+ b'lePK\005\006\0\0\0\0\001\0\001\0003\000'
+ b'\0\0/\0\0\0\0\0')
@requires_zlib
class DeflateBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
compression = zipfile.ZIP_DEFLATED
zip_with_bad_crc = (
- b'PK\x03\x04\x14\x00\x00\x00\x08\x00n}\x0c=FA'
- b'KE\x10\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
- b'ile\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\xc9\xa0'
- b'=\x13\x00PK\x01\x02\x14\x03\x14\x00\x00\x00\x08\x00n'
- b'}\x0c=FAKE\x10\x00\x00\x00n\x00\x00\x00\x05'
- b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00'
- b'\x00afilePK\x05\x06\x00\x00\x00\x00\x01\x00'
- b'\x01\x003\x00\x00\x003\x00\x00\x00\x00\x00')
+ b'PK\x03\x04\x14\x00\x00\x00\x08\x00n}\x0c=FA'
+ b'KE\x10\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+ b'ile\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\xc9\xa0'
+ b'=\x13\x00PK\x01\x02\x14\x03\x14\x00\x00\x00\x08\x00n'
+ b'}\x0c=FAKE\x10\x00\x00\x00n\x00\x00\x00\x05'
+ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00'
+ b'\x00afilePK\x05\x06\x00\x00\x00\x00\x01\x00'
+ b'\x01\x003\x00\x00\x003\x00\x00\x00\x00\x00')
@requires_bz2
class Bzip2BadCrcTests(AbstractBadCrcTests, unittest.TestCase):
compression = zipfile.ZIP_BZIP2
zip_with_bad_crc = (
- b'PK\x03\x04\x14\x03\x00\x00\x0c\x00nu\x0c=FA'
- b'KE8\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
- b'ileBZh91AY&SY\xd4\xa8\xca'
- b'\x7f\x00\x00\x0f\x11\x80@\x00\x06D\x90\x80 \x00 \xa5'
- b'P\xd9!\x03\x03\x13\x13\x13\x89\xa9\xa9\xc2u5:\x9f'
- b'\x8b\xb9"\x9c(HjTe?\x80PK\x01\x02\x14'
- b'\x03\x14\x03\x00\x00\x0c\x00nu\x0c=FAKE8'
- b'\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00'
- b'\x00 \x80\x80\x81\x00\x00\x00\x00afilePK'
- b'\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00\x00[\x00'
- b'\x00\x00\x00\x00')
+ b'PK\x03\x04\x14\x03\x00\x00\x0c\x00nu\x0c=FA'
+ b'KE8\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+ b'ileBZh91AY&SY\xd4\xa8\xca'
+ b'\x7f\x00\x00\x0f\x11\x80@\x00\x06D\x90\x80 \x00 \xa5'
+ b'P\xd9!\x03\x03\x13\x13\x13\x89\xa9\xa9\xc2u5:\x9f'
+ b'\x8b\xb9"\x9c(HjTe?\x80PK\x01\x02\x14'
+ b'\x03\x14\x03\x00\x00\x0c\x00nu\x0c=FAKE8'
+ b'\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00'
+ b'\x00 \x80\x80\x81\x00\x00\x00\x00afilePK'
+ b'\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00\x00[\x00'
+ b'\x00\x00\x00\x00')
@requires_lzma
class LzmaBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
compression = zipfile.ZIP_LZMA
zip_with_bad_crc = (
- b'PK\x03\x04\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
- b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
- b'ile\t\x04\x05\x00]\x00\x00\x00\x04\x004\x19I'
- b'\xee\x8d\xe9\x17\x89:3`\tq!.8\x00PK'
- b'\x01\x02\x14\x03\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
- b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00'
- b'\x00\x00\x00\x00 \x80\x80\x81\x00\x00\x00\x00afil'
- b'ePK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00'
- b'\x00>\x00\x00\x00\x00\x00')
+ b'PK\x03\x04\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
+ b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+ b'ile\t\x04\x05\x00]\x00\x00\x00\x04\x004\x19I'
+ b'\xee\x8d\xe9\x17\x89:3`\tq!.8\x00PK'
+ b'\x01\x02\x14\x03\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
+ b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00'
+ b'\x00\x00\x00\x00 \x80\x80\x81\x00\x00\x00\x00afil'
+ b'ePK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00'
+ b'\x00>\x00\x00\x00\x00\x00')
class DecryptionTests(unittest.TestCase):
@@ -1291,22 +1310,22 @@
ZIP file."""
data = (
- b'PK\x03\x04\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00\x1a\x00'
- b'\x00\x00\x08\x00\x00\x00test.txt\xfa\x10\xa0gly|\xfa-\xc5\xc0=\xf9y'
- b'\x18\xe0\xa8r\xb3Z}Lg\xbc\xae\xf9|\x9b\x19\xe4\x8b\xba\xbb)\x8c\xb0\xdbl'
- b'PK\x01\x02\x14\x00\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00'
- b'\x1a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\xb6\x81'
- b'\x00\x00\x00\x00test.txtPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x006\x00'
- b'\x00\x00L\x00\x00\x00\x00\x00' )
+ b'PK\x03\x04\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00\x1a\x00'
+ b'\x00\x00\x08\x00\x00\x00test.txt\xfa\x10\xa0gly|\xfa-\xc5\xc0=\xf9y'
+ b'\x18\xe0\xa8r\xb3Z}Lg\xbc\xae\xf9|\x9b\x19\xe4\x8b\xba\xbb)\x8c\xb0\xdbl'
+ b'PK\x01\x02\x14\x00\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00'
+ b'\x1a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\xb6\x81'
+ b'\x00\x00\x00\x00test.txtPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x006\x00'
+ b'\x00\x00L\x00\x00\x00\x00\x00' )
data2 = (
- b'PK\x03\x04\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02'
- b'\x00\x00\x04\x00\x15\x00zeroUT\t\x00\x03\xd6\x8b\x92G\xda\x8b\x92GUx\x04'
- b'\x00\xe8\x03\xe8\x03\xc7<M\xb5a\xceX\xa3Y&\x8b{oE\xd7\x9d\x8c\x98\x02\xc0'
- b'PK\x07\x08xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00PK\x01\x02\x17\x03'
- b'\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00'
- b'\x04\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00ze'
- b'roUT\x05\x00\x03\xd6\x8b\x92GUx\x00\x00PK\x05\x06\x00\x00\x00\x00\x01'
- b'\x00\x01\x00?\x00\x00\x00[\x00\x00\x00\x00\x00' )
+ b'PK\x03\x04\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02'
+ b'\x00\x00\x04\x00\x15\x00zeroUT\t\x00\x03\xd6\x8b\x92G\xda\x8b\x92GUx\x04'
+ b'\x00\xe8\x03\xe8\x03\xc7<M\xb5a\xceX\xa3Y&\x8b{oE\xd7\x9d\x8c\x98\x02\xc0'
+ b'PK\x07\x08xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00PK\x01\x02\x17\x03'
+ b'\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00'
+ b'\x04\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00ze'
+ b'roUT\x05\x00\x03\xd6\x8b\x92GUx\x00\x00PK\x05\x06\x00\x00\x00\x00\x01'
+ b'\x00\x01\x00?\x00\x00\x00[\x00\x00\x00\x00\x00' )
plain = b'zipfile.py encryption test'
plain2 = b'\x00'*512
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index ff58347..b3554fb 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -211,8 +211,8 @@
if len(data) != sizeEndCentDir64:
return endrec
sig, sz, create_version, read_version, disk_num, disk_dir, \
- dircount, dircount2, dirsize, diroffset = \
- struct.unpack(structEndArchive64, data)
+ dircount, dircount2, dirsize, diroffset = \
+ struct.unpack(structEndArchive64, data)
if sig != stringEndArchive64:
return endrec
@@ -292,26 +292,26 @@
"""Class with attributes describing each file in the ZIP archive."""
__slots__ = (
- 'orig_filename',
- 'filename',
- 'date_time',
- 'compress_type',
- 'comment',
- 'extra',
- 'create_system',
- 'create_version',
- 'extract_version',
- 'reserved',
- 'flag_bits',
- 'volume',
- 'internal_attr',
- 'external_attr',
- 'header_offset',
- 'CRC',
- 'compress_size',
- 'file_size',
- '_raw_time',
- )
+ 'orig_filename',
+ 'filename',
+ 'date_time',
+ 'compress_type',
+ 'comment',
+ 'extra',
+ 'create_system',
+ 'create_version',
+ 'extract_version',
+ 'reserved',
+ 'flag_bits',
+ 'volume',
+ 'internal_attr',
+ 'external_attr',
+ 'header_offset',
+ 'CRC',
+ 'compress_size',
+ 'file_size',
+ '_raw_time',
+ )
def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
self.orig_filename = filename # Original file name in archive
@@ -376,7 +376,7 @@
if zip64:
fmt = '<HHQQ'
extra = extra + struct.pack(fmt,
- 1, struct.calcsize(fmt)-4, file_size, compress_size)
+ 1, struct.calcsize(fmt)-4, file_size, compress_size)
if file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT:
if not zip64:
raise LargeZipFile("Filesize would require ZIP64 extensions")
@@ -395,10 +395,10 @@
self.create_version = max(min_version, self.create_version)
filename, flag_bits = self._encodeFilenameFlags()
header = struct.pack(structFileHeader, stringFileHeader,
- self.extract_version, self.reserved, flag_bits,
- self.compress_type, dostime, dosdate, CRC,
- compress_size, file_size,
- len(filename), len(extra))
+ self.extract_version, self.reserved, flag_bits,
+ self.compress_type, dostime, dosdate, CRC,
+ compress_size, file_size,
+ len(filename), len(extra))
return header + filename + extra
def _encodeFilenameFlags(self):
@@ -511,7 +511,7 @@
def _init(self):
props = lzma._encode_filter_properties({'id': lzma.FILTER_LZMA1})
self._comp = lzma.LZMACompressor(lzma.FORMAT_RAW, filters=[
- lzma._decode_filter_properties(lzma.FILTER_LZMA1, props)
+ lzma._decode_filter_properties(lzma.FILTER_LZMA1, props)
])
return struct.pack('<BBH', 9, 4, len(props)) + props
@@ -543,8 +543,8 @@
return b''
self._decomp = lzma.LZMADecompressor(lzma.FORMAT_RAW, filters=[
- lzma._decode_filter_properties(lzma.FILTER_LZMA1,
- self._unconsumed[4:4 + psize])
+ lzma._decode_filter_properties(lzma.FILTER_LZMA1,
+ self._unconsumed[4:4 + psize])
])
data = self._unconsumed[4 + psize:]
del self._unconsumed
@@ -580,15 +580,15 @@
elif compression == ZIP_DEFLATED:
if not zlib:
raise RuntimeError(
- "Compression requires the (missing) zlib module")
+ "Compression requires the (missing) zlib module")
elif compression == ZIP_BZIP2:
if not bz2:
raise RuntimeError(
- "Compression requires the (missing) bz2 module")
+ "Compression requires the (missing) bz2 module")
elif compression == ZIP_LZMA:
if not lzma:
raise RuntimeError(
- "Compression requires the (missing) lzma module")
+ "Compression requires the (missing) lzma module")
else:
raise RuntimeError("That compression method is not supported")
@@ -596,7 +596,7 @@
def _get_compressor(compress_type):
if compress_type == ZIP_DEFLATED:
return zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
- zlib.DEFLATED, -15)
+ zlib.DEFLATED, -15)
elif compress_type == ZIP_BZIP2:
return bz2.BZ2Compressor()
elif compress_type == ZIP_LZMA:
@@ -836,8 +836,8 @@
n = max(n, self.MIN_READ_SIZE)
data = self._decompressor.decompress(data, n)
self._eof = (self._decompressor.eof or
- self._compress_left <= 0 and
- not self._decompressor.unconsumed_tail)
+ self._compress_left <= 0 and
+ not self._decompressor.unconsumed_tail)
if self._eof:
data += self._decompressor.flush()
else:
@@ -1016,8 +1016,8 @@
x.comment = fp.read(centdir[_CD_COMMENT_LENGTH])
x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET]
(x.create_version, x.create_system, x.extract_version, x.reserved,
- x.flag_bits, x.compress_type, t, d,
- x.CRC, x.compress_size, x.file_size) = centdir[1:12]
+ x.flag_bits, x.compress_type, t, d,
+ x.CRC, x.compress_size, x.file_size) = centdir[1:12]
if x.extract_version > MAX_EXTRACT_VERSION:
raise NotImplementedError("zip file version %.1f" %
(x.extract_version / 10))
@@ -1025,7 +1025,7 @@
# Convert date/time code to (year, month, day, hour, min, sec)
x._raw_time = t
x.date_time = ( (d>>9)+1980, (d>>5)&0xF, d&0x1F,
- t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
+ t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
x._decodeExtra()
x.header_offset = x.header_offset + concat
@@ -1103,7 +1103,7 @@
if len(comment) >= ZIP_MAX_COMMENT:
if self.debug:
print('Archive comment is too long; truncating to %d bytes'
- % ZIP_MAX_COMMENT)
+ % ZIP_MAX_COMMENT)
comment = comment[:ZIP_MAX_COMMENT]
self._comment = comment
self._didModify = True
@@ -1121,7 +1121,7 @@
raise TypeError("pwd: expected bytes, got %s" % type(pwd))
if not self.fp:
raise RuntimeError(
- "Attempt to read ZIP archive that was already closed")
+ "Attempt to read ZIP archive that was already closed")
# Only open a new file for instances where we were not
# given a file object in the constructor
@@ -1294,7 +1294,7 @@
raise RuntimeError('write() requires mode "w" or "a"')
if not self.fp:
raise RuntimeError(
- "Attempt to write ZIP archive that was already closed")
+ "Attempt to write ZIP archive that was already closed")
_check_compression(zinfo.compress_type)
if zinfo.file_size > ZIP64_LIMIT:
if not self._allowZip64:
@@ -1302,14 +1302,14 @@
if zinfo.header_offset > ZIP64_LIMIT:
if not self._allowZip64:
raise LargeZipFile(
- "Zipfile size would require ZIP64 extensions")
+ "Zipfile size would require ZIP64 extensions")
def write(self, filename, arcname=None, compress_type=None):
"""Put the bytes from filename into the archive under the name
arcname."""
if not self.fp:
raise RuntimeError(
- "Attempt to write to ZIP archive that was already closed")
+ "Attempt to write to ZIP archive that was already closed")
st = os.stat(filename)
isdir = stat.S_ISDIR(st.st_mode)
@@ -1356,7 +1356,7 @@
zinfo.compress_size = compress_size = 0
# Compressed size can be larger than uncompressed size
zip64 = self._allowZip64 and \
- zinfo.file_size * 1.05 > ZIP64_LIMIT
+ zinfo.file_size * 1.05 > ZIP64_LIMIT
self.fp.write(zinfo.FileHeader(zip64))
file_size = 0
while 1:
@@ -1410,7 +1410,7 @@
if not self.fp:
raise RuntimeError(
- "Attempt to write to ZIP archive that was already closed")
+ "Attempt to write to ZIP archive that was already closed")
zinfo.file_size = len(data) # Uncompressed size
zinfo.header_offset = self.fp.tell() # Start of header data
@@ -1430,7 +1430,7 @@
else:
zinfo.compress_size = zinfo.file_size
zip64 = zinfo.file_size > ZIP64_LIMIT or \
- zinfo.compress_size > ZIP64_LIMIT
+ zinfo.compress_size > ZIP64_LIMIT
if zip64 and not self._allowZip64:
raise LargeZipFile("Filesize would require ZIP64 extensions")
self.fp.write(zinfo.FileHeader(zip64))
@@ -1439,7 +1439,7 @@
# Write CRC and file sizes after the file data
fmt = '<LQQ' if zip64 else '<LLL'
self.fp.write(struct.pack(fmt, zinfo.CRC, zinfo.compress_size,
- zinfo.file_size))
+ zinfo.file_size))
self.fp.flush()
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
@@ -1465,7 +1465,7 @@
dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
extra = []
if zinfo.file_size > ZIP64_LIMIT \
- or zinfo.compress_size > ZIP64_LIMIT:
+ or zinfo.compress_size > ZIP64_LIMIT:
extra.append(zinfo.file_size)
extra.append(zinfo.compress_size)
file_size = 0xffffffff
@@ -1485,8 +1485,8 @@
if extra:
# Append a ZIP64 field to the extra's
extra_data = struct.pack(
- '<HH' + 'Q'*len(extra),
- 1, 8*len(extra), *extra) + extra_data
+ '<HH' + 'Q'*len(extra),
+ 1, 8*len(extra), *extra) + extra_data
min_version = ZIP64_VERSION
@@ -1500,21 +1500,21 @@
try:
filename, flag_bits = zinfo._encodeFilenameFlags()
centdir = struct.pack(structCentralDir,
- stringCentralDir, create_version,
- zinfo.create_system, extract_version, zinfo.reserved,
- flag_bits, zinfo.compress_type, dostime, dosdate,
- zinfo.CRC, compress_size, file_size,
- len(filename), len(extra_data), len(zinfo.comment),
- 0, zinfo.internal_attr, zinfo.external_attr,
- header_offset)
+ stringCentralDir, create_version,
+ zinfo.create_system, extract_version, zinfo.reserved,
+ flag_bits, zinfo.compress_type, dostime, dosdate,
+ zinfo.CRC, compress_size, file_size,
+ len(filename), len(extra_data), len(zinfo.comment),
+ 0, zinfo.internal_attr, zinfo.external_attr,
+ header_offset)
except DeprecationWarning:
print((structCentralDir, stringCentralDir, create_version,
- zinfo.create_system, extract_version, zinfo.reserved,
- zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
- zinfo.CRC, compress_size, file_size,
- len(zinfo.filename), len(extra_data), len(zinfo.comment),
- 0, zinfo.internal_attr, zinfo.external_attr,
- header_offset), file=sys.stderr)
+ zinfo.create_system, extract_version, zinfo.reserved,
+ zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
+ zinfo.CRC, compress_size, file_size,
+ len(zinfo.filename), len(extra_data), len(zinfo.comment),
+ 0, zinfo.internal_attr, zinfo.external_attr,
+ header_offset), file=sys.stderr)
raise
self.fp.write(centdir)
self.fp.write(filename)
@@ -1531,22 +1531,22 @@
centDirSize > ZIP64_LIMIT):
# Need to write the ZIP64 end-of-archive records
zip64endrec = struct.pack(
- structEndArchive64, stringEndArchive64,
- 44, 45, 45, 0, 0, centDirCount, centDirCount,
- centDirSize, centDirOffset)
+ structEndArchive64, stringEndArchive64,
+ 44, 45, 45, 0, 0, centDirCount, centDirCount,
+ centDirSize, centDirOffset)
self.fp.write(zip64endrec)
zip64locrec = struct.pack(
- structEndArchive64Locator,
- stringEndArchive64Locator, 0, pos2, 1)
+ structEndArchive64Locator,
+ stringEndArchive64Locator, 0, pos2, 1)
self.fp.write(zip64locrec)
centDirCount = min(centDirCount, 0xFFFF)
centDirSize = min(centDirSize, 0xFFFFFFFF)
centDirOffset = min(centDirOffset, 0xFFFFFFFF)
endrec = struct.pack(structEndArchive, stringEndArchive,
- 0, 0, centDirCount, centDirCount,
- centDirSize, centDirOffset, len(self._comment))
+ 0, 0, centDirCount, centDirCount,
+ centDirSize, centDirOffset, len(self._comment))
self.fp.write(endrec)
self.fp.write(self._comment)
self.fp.flush()
@@ -1566,7 +1566,7 @@
allowZip64=allowZip64)
self._optimize = optimize
- def writepy(self, pathname, basename=""):
+ def writepy(self, pathname, basename="", filterfunc=None):
"""Add all files from "pathname" to the ZIP archive.
If pathname is a package directory, search the directory and
@@ -1577,7 +1577,13 @@
archive. Added modules are always module.pyo or module.pyc.
This method will compile the module.py into module.pyc if
necessary.
+ If filterfunc(pathname) is given, it is called with every argument.
+ When it is False, the file or directory is skipped.
"""
+ if filterfunc and not filterfunc(pathname):
+ if self.debug:
+ print('pathname "%s" skipped by filterfunc' % pathname)
+ return
dir, name = os.path.split(pathname)
if os.path.isdir(pathname):
initname = os.path.join(pathname, "__init__.py")
@@ -1602,10 +1608,11 @@
if os.path.isdir(path):
if os.path.isfile(os.path.join(path, "__init__.py")):
# This is a package directory, add it
- self.writepy(path, basename) # Recursive call
+ self.writepy(path, basename,
+ filterfunc=filterfunc) # Recursive call
elif ext == ".py":
fname, arcname = self._get_codename(path[0:-3],
- basename)
+ basename)
if self.debug:
print("Adding", arcname)
self.write(fname, arcname)
@@ -1618,14 +1625,14 @@
root, ext = os.path.splitext(filename)
if ext == ".py":
fname, arcname = self._get_codename(path[0:-3],
- basename)
+ basename)
if self.debug:
print("Adding", arcname)
self.write(fname, arcname)
else:
if pathname[-3:] != ".py":
raise RuntimeError(
- 'Files added with writepy() must end with ".py"')
+ 'Files added with writepy() must end with ".py"')
fname, arcname = self._get_codename(pathname[0:-3], basename)
if self.debug:
print("Adding file", arcname)
@@ -1764,7 +1771,7 @@
elif os.path.isdir(path):
for nm in os.listdir(path):
addToZip(zf,
- os.path.join(path, nm), os.path.join(zippath, nm))
+ os.path.join(path, nm), os.path.join(zippath, nm))
# else: ignore
with ZipFile(args[1], 'w', allowZip64=True) as zf:
diff --git a/Misc/ACKS b/Misc/ACKS
index 880e4f0..849fe99 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -818,6 +818,7 @@
Simon Mathieu
Laura Matson
Graham Matthews
+Martin Matusiak
Dieter Maurer
Daniel May
Madison May
diff --git a/Misc/NEWS b/Misc/NEWS
index ca2acf5..c345bd0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -2,10 +2,27 @@
Python News
+++++++++++
-What's New in Python 3.4.0 Alpha 4?
-================================
+What's New in Python 3.4.0 Beta 1?
+==================================
-Projected release date: 2013-10-20
+Projected release date: 2013-11-24
+
+Core and Builtins
+-----------------
+
+- Issue #19306: Add extra hints to the faulthandler module's stack
+ dumps that these are "upside down".
+
+Library
+-------
+
+- Issue #19274: Add a filterfunc parameter to PyZipFile.writepy.
+
+
+What's New in Python 3.4.0 Alpha 4?
+===================================
+
+Release date: 2013-10-20
Core and Builtins
-----------------
@@ -13,7 +30,7 @@
- Issue #19301: Give classes and functions that are explicitly marked global a
global qualname.
-- Issue #19279: UTF-7 decoder no more produces illegal strings.
+- Issue #19279: UTF-7 decoder no longer produces illegal strings.
- Issue #16612: Add "Argument Clinic", a compile-time preprocessor for
C files to generate argument parsing code. (See PEP 436.)
@@ -62,6 +79,19 @@
Library
-------
+- Issue #8964: fix platform._sys_version to handle IronPython 2.6+.
+ Patch by Martin Matusiak.
+
+- Issue #18958: Improve error message for json.load(s) while passing a string
+ that starts with a UTF-8 BOM.
+
+- Issue #19307: Improve error message for json.load(s) while passing objects
+ of the wrong type.
+
+- Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by
+ limiting the call to readline(). Original patch by Michał
+ Jastrzębski and Giampaolo Rodola.
+
- Issue #17087: Improved the repr for regular expression match objects.
- Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX.
diff --git a/Python/compile.c b/Python/compile.c
index eeccd11..32465f7 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -94,6 +94,7 @@
COMPILER_SCOPE_MODULE,
COMPILER_SCOPE_CLASS,
COMPILER_SCOPE_FUNCTION,
+ COMPILER_SCOPE_LAMBDA,
COMPILER_SCOPE_COMPREHENSION,
};
@@ -104,6 +105,7 @@
PySTEntryObject *u_ste;
PyObject *u_name;
+ PyObject *u_qualname; /* dot-separated qualified name (lazy) */
int u_scope_type;
/* The following fields are dicts that map objects to
@@ -199,6 +201,7 @@
expr_ty starargs,
expr_ty kwargs);
static int compiler_try_except(struct compiler *, stmt_ty);
+static int compiler_set_qualname(struct compiler *);
static PyCodeObject *assemble(struct compiler *, int addNone);
static PyObject *__doc__;
@@ -506,6 +509,7 @@
}
Py_CLEAR(u->u_ste);
Py_CLEAR(u->u_name);
+ Py_CLEAR(u->u_qualname);
Py_CLEAR(u->u_consts);
Py_CLEAR(u->u_names);
Py_CLEAR(u->u_varnames);
@@ -620,6 +624,11 @@
if (compiler_use_new_block(c) == NULL)
return 0;
+ if (u->u_scope_type != COMPILER_SCOPE_MODULE) {
+ if (!compiler_set_qualname(c))
+ return 0;
+ }
+
return 1;
}
@@ -647,72 +656,77 @@
}
-static PyObject *
-compiler_scope_qualname(struct compiler *c, identifier scope_name)
+static int
+compiler_set_qualname(struct compiler *c)
{
- Py_ssize_t stack_size;
- int global_scope;
_Py_static_string(dot, ".");
- _Py_static_string(locals, "<locals>");
- struct compiler_unit *u;
- PyObject *capsule, *name, *seq, *dot_str, *locals_str;
+ _Py_static_string(dot_locals, ".<locals>");
+ Py_ssize_t stack_size;
+ struct compiler_unit *u = c->u;
+ PyObject *name, *base, *dot_str, *dot_locals_str;
- u = c->u;
- seq = PyList_New(0);
- if (seq == NULL)
- return NULL;
-
+ base = NULL;
stack_size = PyList_GET_SIZE(c->c_stack);
assert(stack_size >= 1);
- global_scope = stack_size == 1;
- if (scope_name != NULL && !global_scope) {
- int scope;
- PyObject *mangled;
+ if (stack_size > 1) {
+ int scope, force_global = 0;
+ struct compiler_unit *parent;
+ PyObject *mangled, *capsule;
+
capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1);
- u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT);
- assert(u);
- mangled = _Py_Mangle(u->u_private, scope_name);
- if (!mangled)
- return NULL;
- scope = PyST_GetScope(u->u_ste, mangled);
- Py_DECREF(mangled);
- assert(scope != GLOBAL_IMPLICIT);
- if (scope == GLOBAL_EXPLICIT)
- global_scope = 1;
- }
- if (!global_scope) {
- Py_ssize_t i;
- for (i = 1; i < stack_size; i++) {
- capsule = PyList_GET_ITEM(c->c_stack, i);
- u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT);
- assert(u);
- assert(u->u_scope_type != COMPILER_SCOPE_MODULE);
- if (PyList_Append(seq, u->u_name))
- goto _error;
- if (u->u_scope_type == COMPILER_SCOPE_FUNCTION) {
- locals_str = _PyUnicode_FromId(&locals);
- if (locals_str == NULL)
- goto _error;
- if (PyList_Append(seq, locals_str))
- goto _error;
+ parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT);
+ assert(parent);
+
+ if (u->u_scope_type == COMPILER_SCOPE_FUNCTION || u->u_scope_type == COMPILER_SCOPE_CLASS) {
+ assert(u->u_name);
+ mangled = _Py_Mangle(parent->u_private, u->u_name);
+ if (!mangled)
+ return 0;
+ scope = PyST_GetScope(parent->u_ste, mangled);
+ Py_DECREF(mangled);
+ assert(scope != GLOBAL_IMPLICIT);
+ if (scope == GLOBAL_EXPLICIT)
+ force_global = 1;
+ }
+
+ if (!force_global) {
+ if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION
+ || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) {
+ dot_locals_str = _PyUnicode_FromId(&dot_locals);
+ if (dot_locals_str == NULL)
+ return 0;
+ base = PyUnicode_Concat(parent->u_qualname, dot_locals_str);
+ if (base == NULL)
+ return 0;
+ }
+ else {
+ Py_INCREF(parent->u_qualname);
+ base = parent->u_qualname;
}
}
}
- u = c->u;
- if (PyList_Append(seq, u->u_name))
- goto _error;
- dot_str = _PyUnicode_FromId(&dot);
- if (dot_str == NULL)
- goto _error;
- name = PyUnicode_Join(dot_str, seq);
- Py_DECREF(seq);
- Py_XINCREF(name);
- return name;
+ if (base != NULL) {
+ dot_str = _PyUnicode_FromId(&dot);
+ if (dot_str == NULL) {
+ Py_DECREF(base);
+ return 0;
+ }
+ name = PyUnicode_Concat(base, dot_str);
+ Py_DECREF(base);
+ if (name == NULL)
+ return 0;
+ PyUnicode_Append(&name, u->u_name);
+ if (name == NULL)
+ return 0;
+ }
+ else {
+ Py_INCREF(u->u_name);
+ name = u->u_name;
+ }
+ u->u_qualname = name;
-_error:
- Py_XDECREF(seq);
- return NULL;
+ return 1;
}
/* Allocate a new block and return a pointer to it.
@@ -1662,9 +1676,10 @@
VISIT_IN_SCOPE(c, stmt, st);
}
co = assemble(c, 1);
- qualname = compiler_scope_qualname(c, s->v.FunctionDef.name);
+ qualname = c->u->u_qualname;
+ Py_INCREF(qualname);
compiler_exit_scope(c);
- if (qualname == NULL || co == NULL) {
+ if (co == NULL) {
Py_XDECREF(qualname);
Py_XDECREF(co);
return 0;
@@ -1734,14 +1749,8 @@
return 0;
}
Py_DECREF(str);
- /* store the __qualname__ */
- str = compiler_scope_qualname(c, s->v.ClassDef.name);
- if (!str) {
- compiler_exit_scope(c);
- return 0;
- }
- ADDOP_O(c, LOAD_CONST, str, consts);
- Py_DECREF(str);
+ assert(c->u->u_qualname);
+ ADDOP_O(c, LOAD_CONST, c->u->u_qualname, consts);
str = PyUnicode_InternFromString("__qualname__");
if (!str || !compiler_nameop(c, str, Store)) {
Py_XDECREF(str);
@@ -1856,7 +1865,7 @@
if (res < 0) return 0;
kw_default_count = res;
}
- if (!compiler_enter_scope(c, name, COMPILER_SCOPE_FUNCTION,
+ if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA,
(void *)e, e->lineno))
return 0;
@@ -1875,9 +1884,10 @@
ADDOP_IN_SCOPE(c, RETURN_VALUE);
}
co = assemble(c, 1);
- qualname = compiler_scope_qualname(c, NULL);
+ qualname = c->u->u_qualname;
+ Py_INCREF(qualname);
compiler_exit_scope(c);
- if (qualname == NULL || co == NULL)
+ if (co == NULL)
return 0;
arglength = asdl_seq_LEN(args->defaults);
@@ -3152,9 +3162,10 @@
}
co = assemble(c, 1);
- qualname = compiler_scope_qualname(c, NULL);
+ qualname = c->u->u_qualname;
+ Py_INCREF(qualname);
compiler_exit_scope(c);
- if (qualname == NULL || co == NULL)
+ if (co == NULL)
goto error;
if (!compiler_make_closure(c, co, 0, qualname))
diff --git a/Python/importlib.h b/Python/importlib.h
index a8efd25..40e204c 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -576,7 +576,7 @@
114,5,0,0,0,218,25,95,99,97,108,108,95,119,105,116,
104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,
10,1,0,0,115,2,0,0,0,0,8,114,100,0,0,0,
- 105,218,12,0,0,233,2,0,0,0,114,13,0,0,0,115,
+ 105,228,12,0,0,233,2,0,0,0,114,13,0,0,0,115,
2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104,
101,95,95,122,3,46,112,121,122,4,46,112,121,99,122,4,
46,112,121,111,78,99,2,0,0,0,0,0,0,0,11,0,
@@ -645,7 +645,7 @@
90,3,116,97,103,218,8,102,105,108,101,110,97,109,101,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,
99,97,99,104,101,95,102,114,111,109,95,115,111,117,114,99,
- 101,132,1,0,0,115,22,0,0,0,0,13,31,1,6,1,
+ 101,133,1,0,0,115,22,0,0,0,0,13,31,1,6,1,
9,2,6,1,18,1,24,1,12,1,12,1,15,1,31,1,
114,118,0,0,0,99,1,0,0,0,0,0,0,0,5,0,
0,0,5,0,0,0,67,0,0,0,115,193,0,0,0,116,
@@ -702,7 +702,7 @@
101,95,102,105,108,101,110,97,109,101,90,7,112,121,99,97,
99,104,101,114,115,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,17,115,111,117,114,99,101,95,
- 102,114,111,109,95,99,97,99,104,101,159,1,0,0,115,24,
+ 102,114,111,109,95,99,97,99,104,101,160,1,0,0,115,24,
0,0,0,0,9,18,1,15,1,18,1,18,1,12,1,3,
1,24,1,21,1,3,1,21,1,19,1,114,121,0,0,0,
99,1,0,0,0,0,0,0,0,5,0,0,0,13,0,0,
@@ -739,7 +739,7 @@
115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116,
104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108,
- 101,182,1,0,0,115,20,0,0,0,0,7,18,1,4,1,
+ 101,183,1,0,0,115,20,0,0,0,0,7,18,1,4,1,
24,1,35,1,4,1,3,1,16,1,19,1,21,1,114,128,
0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,
11,0,0,0,67,0,0,0,115,63,0,0,0,121,22,0,
@@ -754,7 +754,7 @@
3,0,0,0,114,39,0,0,0,114,41,0,0,0,114,40,
0,0,0,41,2,114,35,0,0,0,114,42,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,
- 95,99,97,108,99,95,109,111,100,101,201,1,0,0,115,12,
+ 95,99,97,108,99,95,109,111,100,101,202,1,0,0,115,12,
0,0,0,0,2,3,1,22,1,13,1,11,3,10,1,114,
130,0,0,0,218,9,118,101,114,98,111,115,105,116,121,114,
29,0,0,0,99,1,0,0,0,1,0,0,0,3,0,0,
@@ -776,7 +776,7 @@
41,3,218,7,109,101,115,115,97,103,101,114,131,0,0,0,
114,99,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,
- 101,115,115,97,103,101,213,1,0,0,115,8,0,0,0,0,
+ 101,115,115,97,103,101,214,1,0,0,115,8,0,0,0,0,
2,18,1,15,1,13,1,114,138,0,0,0,99,0,0,0,
0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,
0,115,52,0,0,0,101,0,0,90,1,0,100,0,0,90,
@@ -788,7 +788,7 @@
115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0,
0,83,41,1,78,41,1,218,5,95,110,97,109,101,41,2,
114,76,0,0,0,114,72,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,77,0,0,0,223,1,
+ 4,0,0,0,114,5,0,0,0,114,77,0,0,0,224,1,
0,0,115,2,0,0,0,0,1,122,22,95,77,97,110,97,
103,101,82,101,108,111,97,100,46,95,95,105,110,105,116,95,
95,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,
@@ -798,7 +798,7 @@
0,0,0,218,7,109,111,100,117,108,101,115,218,10,95,105,
115,95,114,101,108,111,97,100,41,1,114,76,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,9,
- 95,95,101,110,116,101,114,95,95,226,1,0,0,115,2,0,
+ 95,95,101,110,116,101,114,95,95,227,1,0,0,115,2,0,
0,0,0,1,122,23,95,77,97,110,97,103,101,82,101,108,
111,97,100,46,95,95,101,110,116,101,114,95,95,99,1,0,
0,0,0,0,0,0,2,0,0,0,12,0,0,0,71,0,
@@ -813,7 +813,7 @@
100,0,0,107,9,0,86,1,113,3,0,100,0,0,83,41,
1,78,114,4,0,0,0,41,2,114,22,0,0,0,90,3,
97,114,103,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,250,9,60,103,101,110,101,120,112,114,62,230,1,0,
+ 0,0,250,9,60,103,101,110,101,120,112,114,62,231,1,0,
0,115,2,0,0,0,6,0,122,41,95,77,97,110,97,103,
101,82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,
46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,
@@ -821,13 +821,13 @@
7,0,0,0,114,141,0,0,0,114,140,0,0,0,114,92,
0,0,0,41,2,114,76,0,0,0,114,99,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,
- 95,95,101,120,105,116,95,95,229,1,0,0,115,10,0,0,
+ 95,95,101,120,105,116,95,95,230,1,0,0,115,10,0,0,
0,0,1,35,1,3,1,17,1,13,1,122,22,95,77,97,
110,97,103,101,82,101,108,111,97,100,46,95,95,101,120,105,
116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,0,
114,58,0,0,0,114,77,0,0,0,114,143,0,0,0,114,
146,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,139,0,0,0,221,1,0,
+ 0,0,0,114,5,0,0,0,114,139,0,0,0,222,1,0,
0,115,6,0,0,0,12,2,12,3,12,3,114,139,0,0,
0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,
0,0,0,0,0,0,115,82,0,0,0,101,0,0,90,1,
@@ -865,7 +865,7 @@
116,95,110,97,109,101,41,3,114,76,0,0,0,114,72,0,
0,0,114,148,0,0,0,41,1,218,9,95,95,99,108,97,
115,115,95,95,114,4,0,0,0,114,5,0,0,0,114,77,
- 0,0,0,246,1,0,0,115,4,0,0,0,0,6,16,1,
+ 0,0,0,247,1,0,0,115,4,0,0,0,0,6,16,1,
122,23,95,77,111,100,117,108,101,77,97,110,97,103,101,114,
46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,
0,0,1,0,0,0,11,0,0,0,3,0,0,0,115,163,
@@ -887,7 +887,7 @@
105,110,103,95,95,114,150,0,0,0,114,57,0,0,0,218,
14,65,116,116,114,105,98,117,116,101,69,114,114,111,114,41,
1,114,76,0,0,0,41,1,114,151,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,143,0,0,0,255,1,0,0,
+ 0,0,114,5,0,0,0,114,143,0,0,0,0,2,0,0,
115,24,0,0,0,0,1,13,1,24,1,9,4,24,3,12,
1,22,1,9,1,3,1,19,1,13,1,8,1,122,24,95,
77,111,100,117,108,101,77,97,110,97,103,101,114,46,95,95,
@@ -899,13 +899,13 @@
0,0,114,154,0,0,0,114,149,0,0,0,114,146,0,0,
0,41,2,114,76,0,0,0,114,99,0,0,0,41,1,114,
151,0,0,0,114,4,0,0,0,114,5,0,0,0,114,146,
- 0,0,0,18,2,0,0,115,6,0,0,0,0,1,12,1,
+ 0,0,0,19,2,0,0,115,6,0,0,0,0,1,12,1,
6,1,122,23,95,77,111,100,117,108,101,77,97,110,97,103,
101,114,46,95,95,101,120,105,116,95,95,41,7,114,57,0,
0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,
0,114,77,0,0,0,114,143,0,0,0,114,146,0,0,0,
114,4,0,0,0,114,4,0,0,0,41,1,114,151,0,0,
- 0,114,5,0,0,0,114,147,0,0,0,238,1,0,0,115,
+ 0,114,5,0,0,0,114,147,0,0,0,239,1,0,0,115,
8,0,0,0,12,6,6,2,24,9,18,19,114,147,0,0,
0,114,148,0,0,0,84,99,1,0,0,0,1,0,0,0,
2,0,0,0,4,0,0,0,67,0,0,0,115,16,0,0,
@@ -922,7 +922,7 @@
148,0,0,0,41,1,114,147,0,0,0,41,2,114,72,0,
0,0,114,148,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,14,109,111,100,117,108,101,95,116,
- 111,95,108,111,97,100,24,2,0,0,115,2,0,0,0,0,
+ 111,95,108,111,97,100,25,2,0,0,115,2,0,0,0,0,
6,114,156,0,0,0,99,2,0,0,0,0,0,0,0,4,
0,0,0,11,0,0,0,67,0,0,0,115,102,0,0,0,
124,1,0,106,0,0,125,2,0,121,19,0,124,0,0,106,
@@ -944,7 +944,7 @@
6,109,111,100,117,108,101,114,72,0,0,0,114,157,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
218,19,95,105,110,105,116,95,112,97,99,107,97,103,101,95,
- 97,116,116,114,115,33,2,0,0,115,18,0,0,0,0,2,
+ 97,116,116,114,115,34,2,0,0,115,18,0,0,0,0,2,
9,1,3,1,19,1,13,1,5,2,6,1,9,1,12,2,
114,163,0,0,0,99,2,0,0,0,0,0,0,0,2,0,
0,0,11,0,0,0,67,0,0,0,115,100,0,0,0,121,
@@ -964,7 +964,7 @@
160,0,0,0,218,6,97,112,112,101,110,100,114,38,0,0,
0,41,2,114,161,0,0,0,114,162,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,16,95,105,
- 110,105,116,95,102,105,108,101,95,97,116,116,114,115,48,2,
+ 110,105,116,95,102,105,108,101,95,97,116,116,114,115,49,2,
0,0,115,12,0,0,0,0,2,3,1,25,1,13,1,5,
2,18,1,114,167,0,0,0,99,1,0,0,0,0,0,0,
0,2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,
@@ -987,14 +987,14 @@
0,41,3,114,99,0,0,0,218,6,107,119,97,114,103,115,
114,162,0,0,0,41,1,218,3,102,120,110,114,4,0,0,
0,114,5,0,0,0,218,19,115,101,116,95,112,97,99,107,
- 97,103,101,95,119,114,97,112,112,101,114,61,2,0,0,115,
+ 97,103,101,95,119,114,97,112,112,101,114,62,2,0,0,115,
12,0,0,0,0,1,15,1,24,1,12,1,15,1,31,1,
122,40,115,101,116,95,112,97,99,107,97,103,101,46,60,108,
111,99,97,108,115,62,46,115,101,116,95,112,97,99,107,97,
103,101,95,119,114,97,112,112,101,114,41,1,114,65,0,0,
0,41,2,114,169,0,0,0,114,170,0,0,0,114,4,0,
0,0,41,1,114,169,0,0,0,114,5,0,0,0,218,11,
- 115,101,116,95,112,97,99,107,97,103,101,59,2,0,0,115,
+ 115,101,116,95,112,97,99,107,97,103,101,60,2,0,0,115,
6,0,0,0,0,2,18,7,13,1,114,171,0,0,0,99,
1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,
@@ -1013,13 +1013,13 @@
0,114,168,0,0,0,114,162,0,0,0,41,1,114,169,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,18,115,101,
116,95,108,111,97,100,101,114,95,119,114,97,112,112,101,114,
- 74,2,0,0,115,8,0,0,0,0,1,18,1,24,1,12,
+ 75,2,0,0,115,8,0,0,0,0,1,18,1,24,1,12,
1,122,38,115,101,116,95,108,111,97,100,101,114,46,60,108,
111,99,97,108,115,62,46,115,101,116,95,108,111,97,100,101,
114,95,119,114,97,112,112,101,114,41,1,114,65,0,0,0,
41,2,114,169,0,0,0,114,173,0,0,0,114,4,0,0,
0,41,1,114,169,0,0,0,114,5,0,0,0,218,10,115,
- 101,116,95,108,111,97,100,101,114,72,2,0,0,115,6,0,
+ 101,116,95,108,111,97,100,101,114,73,2,0,0,115,6,0,
0,0,0,2,18,5,13,1,114,174,0,0,0,99,1,0,
0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,
0,0,115,38,0,0,0,100,1,0,135,0,0,102,1,0,
@@ -1054,14 +1054,14 @@
72,0,0,0,114,99,0,0,0,114,168,0,0,0,41,1,
218,6,109,101,116,104,111,100,114,4,0,0,0,114,5,0,
0,0,218,19,95,99,104,101,99,107,95,110,97,109,101,95,
- 119,114,97,112,112,101,114,91,2,0,0,115,10,0,0,0,
+ 119,114,97,112,112,101,114,92,2,0,0,115,10,0,0,0,
0,1,12,1,12,1,15,1,25,1,122,40,95,99,104,101,
99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,
46,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,
112,112,101,114,41,1,114,65,0,0,0,41,2,114,175,0,
0,0,114,176,0,0,0,114,4,0,0,0,41,1,114,175,
0,0,0,114,5,0,0,0,218,11,95,99,104,101,99,107,
- 95,110,97,109,101,83,2,0,0,115,6,0,0,0,0,8,
+ 95,110,97,109,101,84,2,0,0,115,6,0,0,0,0,8,
21,6,13,1,114,177,0,0,0,99,1,0,0,0,0,0,
0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35,
0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134,
@@ -1083,7 +1083,7 @@
0,0,218,8,102,117,108,108,110,97,109,101,41,1,114,169,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,25,95,
114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,
- 95,119,114,97,112,112,101,114,103,2,0,0,115,8,0,0,
+ 95,119,114,97,112,112,101,114,104,2,0,0,115,8,0,0,
0,0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,
105,114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,
99,97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,
@@ -1091,7 +1091,7 @@
1,114,65,0,0,0,41,2,114,169,0,0,0,114,180,0,
0,0,114,4,0,0,0,41,1,114,169,0,0,0,114,5,
0,0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,
- 117,105,108,116,105,110,101,2,0,0,115,6,0,0,0,0,
+ 117,105,108,116,105,110,102,2,0,0,115,6,0,0,0,0,
2,18,5,13,1,114,181,0,0,0,99,1,0,0,0,0,
0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,
35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,
@@ -1112,14 +1112,14 @@
76,0,0,0,114,179,0,0,0,41,1,114,169,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,24,95,114,101,113,
117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,97,
- 112,112,101,114,114,2,0,0,115,8,0,0,0,0,1,15,
+ 112,112,101,114,115,2,0,0,115,8,0,0,0,0,1,15,
1,18,1,12,1,122,50,95,114,101,113,117,105,114,101,115,
95,102,114,111,122,101,110,46,60,108,111,99,97,108,115,62,
46,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,
110,95,119,114,97,112,112,101,114,41,1,114,65,0,0,0,
41,2,114,169,0,0,0,114,183,0,0,0,114,4,0,0,
0,41,1,114,169,0,0,0,114,5,0,0,0,218,16,95,
- 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,112,
+ 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,113,
2,0,0,115,6,0,0,0,0,2,18,5,13,1,114,184,
0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0,
5,0,0,0,67,0,0,0,115,87,0,0,0,124,0,0,
@@ -1144,7 +1144,7 @@
0,0,114,179,0,0,0,114,161,0,0,0,218,8,112,111,
114,116,105,111,110,115,218,3,109,115,103,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,17,95,102,105,110,
- 100,95,109,111,100,117,108,101,95,115,104,105,109,123,2,0,
+ 100,95,109,111,100,117,108,101,95,115,104,105,109,124,2,0,
0,115,10,0,0,0,0,6,21,1,24,1,6,1,32,1,
114,191,0,0,0,99,4,0,0,0,0,0,0,0,11,0,
0,0,19,0,0,0,67,0,0,0,115,243,1,0,0,105,
@@ -1229,7 +1229,7 @@
99,101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,
95,115,105,122,101,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,25,95,118,97,108,105,100,97,116,101,95,
- 98,121,116,101,99,111,100,101,95,104,101,97,100,101,114,136,
+ 98,121,116,101,99,111,100,101,95,104,101,97,100,101,114,137,
2,0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,
6,1,12,1,13,1,16,1,16,1,16,1,12,1,18,1,
10,1,18,1,18,1,15,1,10,1,15,1,18,1,15,1,
@@ -1260,7 +1260,7 @@
0,41,5,114,53,0,0,0,114,72,0,0,0,114,126,0,
0,0,114,127,0,0,0,218,4,99,111,100,101,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,
- 111,109,112,105,108,101,95,98,121,116,101,99,111,100,101,191,
+ 111,109,112,105,108,101,95,98,121,116,101,99,111,100,101,192,
2,0,0,115,16,0,0,0,0,2,15,1,15,1,13,1,
12,1,19,1,4,2,18,1,114,206,0,0,0,114,68,0,
0,0,99,3,0,0,0,0,0,0,0,4,0,0,0,3,
@@ -1280,7 +1280,7 @@
90,5,100,117,109,112,115,41,4,114,205,0,0,0,114,194,
0,0,0,114,200,0,0,0,114,53,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,
- 111,100,101,95,116,111,95,98,121,116,101,99,111,100,101,203,
+ 111,100,101,95,116,111,95,98,121,116,101,99,111,100,101,204,
2,0,0,115,10,0,0,0,0,3,12,1,19,1,19,1,
22,1,114,209,0,0,0,99,1,0,0,0,0,0,0,0,
5,0,0,0,4,0,0,0,67,0,0,0,115,89,0,0,
@@ -1309,7 +1309,7 @@
110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101,
119,108,105,110,101,95,100,101,99,111,100,101,114,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,13,100,101,
- 99,111,100,101,95,115,111,117,114,99,101,213,2,0,0,115,
+ 99,111,100,101,95,115,111,117,114,99,101,214,2,0,0,115,
10,0,0,0,0,5,12,1,18,1,15,1,18,1,114,214,
0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
6,0,0,0,64,0,0,0,115,169,0,0,0,101,0,0,
@@ -1341,7 +1341,7 @@
41,62,41,2,114,47,0,0,0,114,57,0,0,0,41,2,
218,3,99,108,115,114,162,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,11,109,111,100,117,108,
- 101,95,114,101,112,114,236,2,0,0,115,2,0,0,0,0,
+ 101,95,114,101,112,114,237,2,0,0,115,2,0,0,0,0,
2,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116,
101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,
3,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,
@@ -1359,7 +1359,7 @@
115,95,98,117,105,108,116,105,110,41,3,114,216,0,0,0,
114,179,0,0,0,114,35,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,
- 109,111,100,117,108,101,240,2,0,0,115,6,0,0,0,0,
+ 109,111,100,117,108,101,241,2,0,0,115,6,0,0,0,0,
7,12,1,4,1,122,27,66,117,105,108,116,105,110,73,109,
112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,
108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,10,
@@ -1372,7 +1372,7 @@
90,12,105,110,105,116,95,98,117,105,108,116,105,110,41,2,
114,216,0,0,0,114,179,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,11,108,111,97,100,95,
- 109,111,100,117,108,101,251,2,0,0,115,4,0,0,0,0,
+ 109,111,100,117,108,101,252,2,0,0,115,4,0,0,0,0,
6,13,1,122,27,66,117,105,108,116,105,110,73,109,112,111,
114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,
99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
@@ -1383,7 +1383,7 @@
100,101,32,111,98,106,101,99,116,115,46,78,114,4,0,0,
0,41,2,114,216,0,0,0,114,179,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,8,103,101,
- 116,95,99,111,100,101,4,3,0,0,115,2,0,0,0,0,
+ 116,95,99,111,100,101,5,3,0,0,115,2,0,0,0,0,
4,122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,
101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,
0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
@@ -1394,7 +1394,7 @@
99,111,100,101,46,78,114,4,0,0,0,41,2,114,216,0,
0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,
- 99,101,10,3,0,0,115,2,0,0,0,0,4,122,26,66,
+ 99,101,11,3,0,0,115,2,0,0,0,0,4,122,26,66,
117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,
101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,
0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
@@ -1404,7 +1404,7 @@
110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,
114,4,0,0,0,41,2,114,216,0,0,0,114,179,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,157,0,0,0,16,3,0,0,115,2,0,0,0,0,4,
+ 114,157,0,0,0,17,3,0,0,115,2,0,0,0,0,4,
122,26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,
114,46,105,115,95,112,97,99,107,97,103,101,41,14,114,57,
0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,
@@ -1413,7 +1413,7 @@
0,0,0,114,181,0,0,0,114,219,0,0,0,114,220,0,
0,0,114,221,0,0,0,114,157,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,215,0,0,0,227,2,0,0,115,28,0,0,0,12,7,
+ 114,215,0,0,0,228,2,0,0,115,28,0,0,0,12,7,
6,2,18,4,3,1,18,10,3,1,3,1,3,1,27,6,
3,1,21,5,3,1,21,5,3,1,114,215,0,0,0,99,
0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
@@ -1445,7 +1445,7 @@
40,102,114,111,122,101,110,41,62,41,2,114,47,0,0,0,
114,57,0,0,0,41,2,114,216,0,0,0,218,1,109,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,217,
- 0,0,0,32,3,0,0,115,2,0,0,0,0,2,122,26,
+ 0,0,0,33,3,0,0,115,2,0,0,0,0,2,122,26,
70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,
111,100,117,108,101,95,114,101,112,114,78,99,3,0,0,0,
0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,
@@ -1455,7 +1455,7 @@
100,117,108,101,46,78,41,2,114,95,0,0,0,114,182,0,
0,0,41,3,114,216,0,0,0,114,179,0,0,0,114,35,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,218,0,0,0,36,3,0,0,115,2,0,0,0,
+ 0,0,114,218,0,0,0,37,3,0,0,115,2,0,0,0,
0,3,122,26,70,114,111,122,101,110,73,109,112,111,114,116,
101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,2,
0,0,0,0,0,0,0,3,0,0,0,10,0,0,0,67,
@@ -1468,7 +1468,7 @@
0,114,95,0,0,0,90,11,105,110,105,116,95,102,114,111,
122,101,110,114,165,0,0,0,41,3,114,216,0,0,0,114,
179,0,0,0,114,224,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,219,0,0,0,41,3,0,
+ 0,0,0,114,5,0,0,0,114,219,0,0,0,42,3,0,
0,115,8,0,0,0,0,6,13,1,18,2,6,1,122,26,
70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108,
111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,
@@ -1480,7 +1480,7 @@
101,46,41,2,114,95,0,0,0,90,17,103,101,116,95,102,
114,111,122,101,110,95,111,98,106,101,99,116,41,2,114,216,
0,0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,220,0,0,0,53,3,0,0,
+ 0,0,114,5,0,0,0,114,220,0,0,0,54,3,0,0,
115,2,0,0,0,0,4,122,23,70,114,111,122,101,110,73,
109,112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,
99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
@@ -1490,7 +1490,7 @@
100,111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,
99,101,32,99,111,100,101,46,78,114,4,0,0,0,41,2,
114,216,0,0,0,114,179,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,221,0,0,0,59,3,
+ 4,0,0,0,114,5,0,0,0,114,221,0,0,0,60,3,
0,0,115,2,0,0,0,0,4,122,25,70,114,111,122,101,
110,73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,
117,114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,
@@ -1502,7 +1502,7 @@
95,0,0,0,90,17,105,115,95,102,114,111,122,101,110,95,
112,97,99,107,97,103,101,41,2,114,216,0,0,0,114,179,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,157,0,0,0,65,3,0,0,115,2,0,0,0,
+ 0,0,114,157,0,0,0,66,3,0,0,115,2,0,0,0,
0,4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,
101,114,46,105,115,95,112,97,99,107,97,103,101,41,14,114,
57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,
@@ -1510,7 +1510,7 @@
0,0,114,171,0,0,0,114,174,0,0,0,114,184,0,0,
0,114,219,0,0,0,114,220,0,0,0,114,221,0,0,0,
114,157,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,223,0,0,0,23,3,
+ 4,0,0,0,114,5,0,0,0,114,223,0,0,0,24,3,
0,0,115,28,0,0,0,12,7,6,2,18,4,3,1,18,
4,3,1,3,1,3,1,27,9,3,1,21,5,3,1,21,
5,3,1,114,223,0,0,0,99,0,0,0,0,0,0,0,
@@ -1547,7 +1547,7 @@
72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,
78,69,41,2,114,216,0,0,0,218,3,107,101,121,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95,
- 111,112,101,110,95,114,101,103,105,115,116,114,121,85,3,0,
+ 111,112,101,110,95,114,101,103,105,115,116,114,121,86,3,0,
0,115,8,0,0,0,0,2,3,1,23,1,13,1,122,36,
87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,
105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,
@@ -1574,7 +1574,7 @@
95,107,101,121,114,227,0,0,0,90,4,104,107,101,121,218,
8,102,105,108,101,112,97,116,104,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,218,16,95,115,101,97,114,99,
- 104,95,114,101,103,105,115,116,114,121,92,3,0,0,115,22,
+ 104,95,114,101,103,105,115,116,114,121,93,3,0,0,115,22,
0,0,0,0,2,9,1,12,2,9,1,15,1,22,1,3,
1,18,1,28,1,13,1,9,1,122,38,87,105,110,100,111,
119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,
@@ -1599,7 +1599,7 @@
41,6,114,216,0,0,0,114,179,0,0,0,114,35,0,0,
0,114,233,0,0,0,114,161,0,0,0,114,113,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 218,0,0,0,107,3,0,0,115,20,0,0,0,0,3,15,
+ 218,0,0,0,108,3,0,0,115,20,0,0,0,0,3,15,
1,12,1,4,1,3,1,17,1,13,1,9,1,22,1,21,
1,122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,
114,121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,
@@ -1608,7 +1608,7 @@
230,0,0,0,114,229,0,0,0,114,222,0,0,0,114,228,
0,0,0,114,234,0,0,0,114,218,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,225,0,0,0,72,3,0,0,115,16,0,0,0,12,
+ 0,114,225,0,0,0,73,3,0,0,115,16,0,0,0,12,
3,6,3,6,3,6,2,6,2,18,7,18,15,3,1,114,
225,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
0,2,0,0,0,64,0,0,0,115,58,0,0,0,101,0,
@@ -1644,7 +1644,7 @@
41,5,114,76,0,0,0,114,179,0,0,0,114,117,0,0,
0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101,
90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,157,0,0,0,127,
+ 114,4,0,0,0,114,5,0,0,0,114,157,0,0,0,128,
3,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1,
122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46,
105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,
@@ -1678,7 +1678,7 @@
100,95,95,114,110,0,0,0,41,2,114,76,0,0,0,114,
162,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,218,17,105,110,105,116,95,109,111,100,117,108,101,
- 95,97,116,116,114,115,135,3,0,0,115,16,0,0,0,0,
+ 95,97,116,116,114,115,136,3,0,0,115,16,0,0,0,0,
7,9,1,13,1,13,1,15,1,3,1,22,1,13,1,122,
31,95,76,111,97,100,101,114,66,97,115,105,99,115,46,105,
110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,
@@ -1703,14 +1703,14 @@
101,120,101,99,114,63,0,0,0,41,4,114,76,0,0,0,
114,179,0,0,0,114,162,0,0,0,114,205,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,
- 0,0,0,151,3,0,0,115,16,0,0,0,0,2,15,1,
+ 0,0,0,152,3,0,0,115,16,0,0,0,0,2,15,1,
13,1,15,1,12,1,3,1,21,1,19,1,122,25,95,76,
111,97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,
95,109,111,100,117,108,101,78,41,7,114,57,0,0,0,114,
56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,157,
0,0,0,114,240,0,0,0,114,219,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,238,0,0,0,122,3,0,0,115,8,0,0,0,12,
+ 0,114,238,0,0,0,123,3,0,0,115,8,0,0,0,12,
3,6,2,12,8,12,16,114,238,0,0,0,99,0,0,0,
0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,
0,115,106,0,0,0,101,0,0,90,1,0,100,0,0,90,
@@ -1737,7 +1737,7 @@
46,10,32,32,32,32,32,32,32,32,78,41,1,218,7,73,
79,69,114,114,111,114,41,2,114,76,0,0,0,114,35,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,10,112,97,116,104,95,109,116,105,109,101,165,3,0,
+ 0,218,10,112,97,116,104,95,109,116,105,109,101,166,3,0,
0,115,2,0,0,0,0,6,122,23,83,111,117,114,99,101,
76,111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,
101,99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,
@@ -1773,7 +1773,7 @@
114,194,0,0,0,41,1,114,244,0,0,0,41,2,114,76,
0,0,0,114,35,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,10,112,97,116,104,95,115,116,
- 97,116,115,173,3,0,0,115,2,0,0,0,0,11,122,23,
+ 97,116,115,174,3,0,0,115,2,0,0,0,0,11,122,23,
83,111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,
104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,
4,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0,
@@ -1797,7 +1797,7 @@
0,90,10,99,97,99,104,101,95,112,97,116,104,114,53,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,218,15,95,99,97,99,104,101,95,98,121,116,101,99,111,
- 100,101,186,3,0,0,115,2,0,0,0,0,8,122,28,83,
+ 100,101,187,3,0,0,115,2,0,0,0,0,8,122,28,83,
111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99,
104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0,
0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0,
@@ -1813,7 +1813,7 @@
111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,
32,32,32,78,114,4,0,0,0,41,3,114,76,0,0,0,
114,35,0,0,0,114,53,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,246,0,0,0,196,3,
+ 4,0,0,0,114,5,0,0,0,114,246,0,0,0,197,3,
0,0,115,0,0,0,0,122,21,83,111,117,114,99,101,76,
111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2,
0,0,0,0,0,0,0,5,0,0,0,16,0,0,0,67,
@@ -1835,7 +1835,7 @@
0,0,0,114,214,0,0,0,41,5,114,76,0,0,0,114,
179,0,0,0,114,35,0,0,0,114,212,0,0,0,218,3,
101,120,99,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,221,0,0,0,203,3,0,0,115,14,0,0,0,
+ 0,0,114,221,0,0,0,204,3,0,0,115,14,0,0,0,
0,2,15,1,3,1,19,1,18,1,9,1,31,1,122,23,
83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,
95,115,111,117,114,99,101,218,9,95,111,112,116,105,109,105,
@@ -1857,7 +1857,7 @@
4,114,76,0,0,0,114,53,0,0,0,114,35,0,0,0,
114,250,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,14,115,111,117,114,99,101,95,116,111,95,
- 99,111,100,101,213,3,0,0,115,4,0,0,0,0,5,18,
+ 99,111,100,101,214,3,0,0,115,4,0,0,0,0,5,18,
1,122,27,83,111,117,114,99,101,76,111,97,100,101,114,46,
115,111,117,114,99,101,95,116,111,95,99,111,100,101,99,2,
0,0,0,0,0,0,0,10,0,0,0,45,0,0,0,67,
@@ -1918,7 +1918,7 @@
10,98,121,116,101,115,95,100,97,116,97,114,212,0,0,0,
90,11,99,111,100,101,95,111,98,106,101,99,116,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,220,0,0,
- 0,221,3,0,0,115,78,0,0,0,0,7,15,1,6,1,
+ 0,222,3,0,0,115,78,0,0,0,0,7,15,1,6,1,
3,1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,
16,1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,
13,1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,
@@ -1930,7 +1930,7 @@
114,247,0,0,0,114,246,0,0,0,114,221,0,0,0,114,
253,0,0,0,114,220,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,242,0,
- 0,0,163,3,0,0,115,14,0,0,0,12,2,12,8,12,
+ 0,0,164,3,0,0,115,14,0,0,0,12,2,12,8,12,
13,12,10,12,7,12,10,18,8,114,242,0,0,0,99,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,115,88,0,0,0,101,0,0,90,1,0,100,0,
@@ -1957,7 +1957,7 @@
105,110,100,101,114,46,78,41,2,114,72,0,0,0,114,35,
0,0,0,41,3,114,76,0,0,0,114,179,0,0,0,114,
35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,77,0,0,0,22,4,0,0,115,4,0,0,
+ 0,0,0,114,77,0,0,0,23,4,0,0,115,4,0,0,
0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101,
114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,
0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,
@@ -1967,7 +1967,7 @@
32,97,32,102,105,108,101,46,41,3,114,149,0,0,0,114,
1,1,0,0,114,219,0,0,0,41,2,114,76,0,0,0,
114,179,0,0,0,41,1,114,151,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,219,0,0,0,28,4,0,0,115,
+ 0,114,5,0,0,0,114,219,0,0,0,29,4,0,0,115,
2,0,0,0,0,5,122,22,70,105,108,101,76,111,97,100,
101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,
0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
@@ -1978,7 +1978,7 @@
121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,114,
35,0,0,0,41,2,114,76,0,0,0,114,179,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 164,0,0,0,35,4,0,0,115,2,0,0,0,0,3,122,
+ 164,0,0,0,36,4,0,0,115,2,0,0,0,0,3,122,
23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,
102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0,
0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,0,
@@ -1991,13 +1991,13 @@
0,114,50,0,0,0,90,4,114,101,97,100,41,3,114,76,
0,0,0,114,35,0,0,0,114,54,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,248,0,0,
- 0,40,4,0,0,115,4,0,0,0,0,2,21,1,122,19,
+ 0,41,4,0,0,115,4,0,0,0,0,2,21,1,122,19,
70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100,
97,116,97,41,9,114,57,0,0,0,114,56,0,0,0,114,
58,0,0,0,114,59,0,0,0,114,77,0,0,0,114,177,
0,0,0,114,219,0,0,0,114,164,0,0,0,114,248,0,
0,0,114,4,0,0,0,114,4,0,0,0,41,1,114,151,
- 0,0,0,114,5,0,0,0,114,1,1,0,0,17,4,0,
+ 0,0,0,114,5,0,0,0,114,1,1,0,0,18,4,0,
0,115,10,0,0,0,12,3,6,2,12,6,24,7,18,5,
114,1,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
0,0,4,0,0,0,64,0,0,0,115,64,0,0,0,101,
@@ -2021,7 +2021,7 @@
8,115,116,95,109,116,105,109,101,90,7,115,116,95,115,105,
122,101,41,3,114,76,0,0,0,114,35,0,0,0,114,255,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,245,0,0,0,50,4,0,0,115,4,0,0,0,
+ 0,0,114,245,0,0,0,51,4,0,0,115,4,0,0,0,
0,2,15,1,122,27,83,111,117,114,99,101,70,105,108,101,
76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,
115,99,4,0,0,0,0,0,0,0,5,0,0,0,5,0,
@@ -2032,7 +2032,7 @@
0,0,0,41,5,114,76,0,0,0,114,127,0,0,0,114,
126,0,0,0,114,53,0,0,0,114,42,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,
- 0,0,55,4,0,0,115,4,0,0,0,0,2,12,1,122,
+ 0,0,56,4,0,0,115,4,0,0,0,0,2,12,1,122,
32,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,
114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100,
101,114,5,1,0,0,105,182,1,0,0,99,3,0,0,0,
@@ -2070,7 +2070,7 @@
0,0,218,6,112,97,114,101,110,116,114,117,0,0,0,114,
27,0,0,0,114,23,0,0,0,114,249,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,246,0,
- 0,0,60,4,0,0,115,38,0,0,0,0,2,18,1,6,
+ 0,0,61,4,0,0,115,38,0,0,0,0,2,18,1,6,
2,22,1,18,1,17,2,19,1,15,1,3,1,17,1,13,
2,7,1,18,3,16,1,27,1,3,1,16,1,17,1,18,
2,122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,
@@ -2078,7 +2078,7 @@
57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,
0,0,0,114,245,0,0,0,114,247,0,0,0,114,246,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,3,1,0,0,46,4,0,0,115,
+ 0,114,5,0,0,0,114,3,1,0,0,47,4,0,0,115,
8,0,0,0,12,2,6,2,12,5,12,5,114,3,1,0,
0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,
0,0,0,0,0,0,115,64,0,0,0,101,0,0,90,1,
@@ -2097,7 +2097,7 @@
4,114,149,0,0,0,114,240,0,0,0,114,165,0,0,0,
114,239,0,0,0,41,2,114,76,0,0,0,114,162,0,0,
0,41,1,114,151,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,240,0,0,0,93,4,0,0,115,4,0,0,0,
+ 0,0,114,240,0,0,0,94,4,0,0,115,4,0,0,0,
0,1,16,1,122,38,83,111,117,114,99,101,108,101,115,115,
70,105,108,101,76,111,97,100,101,114,46,105,110,105,116,95,
109,111,100,117,108,101,95,97,116,116,114,115,99,2,0,0,
@@ -2112,7 +2112,7 @@
114,201,0,0,0,114,206,0,0,0,41,5,114,76,0,0,
0,114,179,0,0,0,114,35,0,0,0,114,53,0,0,0,
114,0,1,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,220,0,0,0,97,4,0,0,115,8,0,
+ 5,0,0,0,114,220,0,0,0,98,4,0,0,115,8,0,
0,0,0,1,15,1,15,1,24,1,122,29,83,111,117,114,
99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,
46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,
@@ -2122,14 +2122,14 @@
105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100,
101,46,78,114,4,0,0,0,41,2,114,76,0,0,0,114,
179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,221,0,0,0,103,4,0,0,115,2,0,0,
+ 0,0,0,114,221,0,0,0,104,4,0,0,115,2,0,0,
0,0,2,122,31,83,111,117,114,99,101,108,101,115,115,70,
105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,
117,114,99,101,41,7,114,57,0,0,0,114,56,0,0,0,
114,58,0,0,0,114,59,0,0,0,114,240,0,0,0,114,
220,0,0,0,114,221,0,0,0,114,4,0,0,0,114,4,
0,0,0,41,1,114,151,0,0,0,114,5,0,0,0,114,
- 8,1,0,0,89,4,0,0,115,8,0,0,0,12,2,6,
+ 8,1,0,0,90,4,0,0,115,8,0,0,0,12,2,6,
2,18,4,12,6,114,8,1,0,0,99,0,0,0,0,0,
0,0,0,0,0,0,0,5,0,0,0,64,0,0,0,115,
118,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,
@@ -2153,7 +2153,7 @@
41,1,78,41,2,114,72,0,0,0,114,35,0,0,0,41,
3,114,76,0,0,0,114,72,0,0,0,114,35,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 77,0,0,0,120,4,0,0,115,4,0,0,0,0,1,9,
+ 77,0,0,0,121,4,0,0,115,4,0,0,0,0,1,9,
1,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,
76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,
2,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,
@@ -2176,7 +2176,7 @@
114,60,0,0,0,114,38,0,0,0,114,160,0,0,0,41,
3,114,76,0,0,0,114,179,0,0,0,114,162,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 219,0,0,0,124,4,0,0,115,14,0,0,0,0,5,13,
+ 219,0,0,0,125,4,0,0,115,14,0,0,0,0,5,13,
1,9,1,15,1,16,1,31,1,28,1,122,31,69,120,116,
101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,
46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,
@@ -2195,7 +2195,7 @@
78,114,4,0,0,0,41,2,114,22,0,0,0,218,6,115,
117,102,102,105,120,41,1,218,9,102,105,108,101,95,110,97,
109,101,114,4,0,0,0,114,5,0,0,0,114,144,0,0,
- 0,140,4,0,0,115,2,0,0,0,6,1,122,49,69,120,
+ 0,141,4,0,0,115,2,0,0,0,6,1,122,49,69,120,
116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
114,46,105,115,95,112,97,99,107,97,103,101,46,60,108,111,
99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41,
@@ -2203,7 +2203,7 @@
218,18,69,88,84,69,78,83,73,79,78,95,83,85,70,70,
73,88,69,83,41,2,114,76,0,0,0,114,179,0,0,0,
114,4,0,0,0,41,1,114,11,1,0,0,114,5,0,0,
- 0,114,157,0,0,0,137,4,0,0,115,6,0,0,0,0,
+ 0,114,157,0,0,0,138,4,0,0,115,6,0,0,0,0,
2,19,1,18,1,122,30,69,120,116,101,110,115,105,111,110,
70,105,108,101,76,111,97,100,101,114,46,105,115,95,112,97,
99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,
@@ -2214,7 +2214,7 @@
32,99,114,101,97,116,101,32,97,32,99,111,100,101,32,111,
98,106,101,99,116,46,78,114,4,0,0,0,41,2,114,76,
0,0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,220,0,0,0,143,4,0,0,
+ 0,0,114,5,0,0,0,114,220,0,0,0,144,4,0,0,
115,2,0,0,0,0,2,122,28,69,120,116,101,110,115,105,
111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,
@@ -2225,7 +2225,7 @@
115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,
0,0,41,2,114,76,0,0,0,114,179,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,221,0,
- 0,0,147,4,0,0,115,2,0,0,0,0,2,122,30,69,
+ 0,0,148,4,0,0,115,2,0,0,0,0,2,122,30,69,
120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,
0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
@@ -2236,7 +2236,7 @@
32,116,104,101,32,102,105,110,100,101,114,46,41,1,114,35,
0,0,0,41,2,114,76,0,0,0,114,179,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,164,
- 0,0,0,151,4,0,0,115,2,0,0,0,0,3,122,32,
+ 0,0,0,152,4,0,0,115,2,0,0,0,0,3,122,32,
69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,
78,41,13,114,57,0,0,0,114,56,0,0,0,114,58,0,
@@ -2244,7 +2244,7 @@
0,114,171,0,0,0,114,174,0,0,0,114,219,0,0,0,
114,157,0,0,0,114,220,0,0,0,114,221,0,0,0,114,
164,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,9,1,0,0,112,4,0,
+ 0,0,0,114,5,0,0,0,114,9,1,0,0,113,4,0,
0,115,18,0,0,0,12,6,6,2,12,4,3,1,3,1,
24,11,12,6,12,4,12,4,114,9,1,0,0,99,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
@@ -2288,7 +2288,7 @@
12,95,112,97,116,104,95,102,105,110,100,101,114,41,4,114,
76,0,0,0,114,72,0,0,0,114,35,0,0,0,218,11,
112,97,116,104,95,102,105,110,100,101,114,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,164,
+ 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,165,
4,0,0,115,8,0,0,0,0,1,9,1,9,1,21,1,
122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,
@@ -2307,7 +2307,7 @@
0,0,0,114,7,1,0,0,218,3,100,111,116,114,81,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,
- 112,97,116,104,95,110,97,109,101,115,170,4,0,0,115,8,
+ 112,97,116,104,95,110,97,109,101,115,171,4,0,0,115,8,
0,0,0,0,2,27,1,12,2,4,3,122,38,95,78,97,
109,101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,
100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,
@@ -2320,7 +2320,7 @@
0,0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,
108,101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,
116,114,95,110,97,109,101,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,15,1,0,0,180,4,0,0,115,
+ 0,114,5,0,0,0,114,15,1,0,0,181,4,0,0,115,
4,0,0,0,0,1,18,1,122,31,95,78,97,109,101,115,
112,97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,
114,101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,
@@ -2337,7 +2337,7 @@
76,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116,
104,114,161,0,0,0,90,8,110,101,119,95,112,97,116,104,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 12,95,114,101,99,97,108,99,117,108,97,116,101,184,4,0,
+ 12,95,114,101,99,97,108,99,117,108,97,116,101,185,4,0,
0,115,14,0,0,0,0,2,18,1,15,1,27,3,12,1,
12,1,12,1,122,27,95,78,97,109,101,115,112,97,99,101,
80,97,116,104,46,95,114,101,99,97,108,99,117,108,97,116,
@@ -2346,7 +2346,7 @@
0,106,1,0,131,0,0,131,1,0,83,41,1,78,41,2,
218,4,105,116,101,114,114,21,1,0,0,41,1,114,76,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,8,95,95,105,116,101,114,95,95,196,4,0,0,115,
+ 0,218,8,95,95,105,116,101,114,95,95,197,4,0,0,115,
2,0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,
99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,
1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
@@ -2354,7 +2354,7 @@
1,0,131,0,0,131,1,0,83,41,1,78,41,2,114,31,
0,0,0,114,21,1,0,0,41,1,114,76,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7,
- 95,95,108,101,110,95,95,199,4,0,0,115,2,0,0,0,
+ 95,95,108,101,110,95,95,200,4,0,0,115,2,0,0,0,
0,1,122,22,95,78,97,109,101,115,112,97,99,101,80,97,
116,104,46,95,95,108,101,110,95,95,99,1,0,0,0,0,
0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,
@@ -2363,7 +2363,7 @@
97,99,101,80,97,116,104,40,123,33,114,125,41,41,2,114,
47,0,0,0,114,14,1,0,0,41,1,114,76,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 88,0,0,0,202,4,0,0,115,2,0,0,0,0,1,122,
+ 88,0,0,0,203,4,0,0,115,2,0,0,0,0,1,122,
23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,
0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,
@@ -2371,7 +2371,7 @@
0,83,41,1,78,41,1,114,21,1,0,0,41,2,114,76,
0,0,0,218,4,105,116,101,109,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,218,12,95,95,99,111,110,116,
- 97,105,110,115,95,95,205,4,0,0,115,2,0,0,0,0,
+ 97,105,110,115,95,95,206,4,0,0,115,2,0,0,0,0,
1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,
104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,
0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
@@ -2379,7 +2379,7 @@
0,124,1,0,131,1,0,1,100,0,0,83,41,1,78,41,
2,114,14,1,0,0,114,166,0,0,0,41,2,114,76,0,
0,0,114,25,1,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,166,0,0,0,208,4,0,0,115,
+ 0,114,5,0,0,0,114,166,0,0,0,209,4,0,0,115,
2,0,0,0,0,1,122,21,95,78,97,109,101,115,112,97,
99,101,80,97,116,104,46,97,112,112,101,110,100,78,41,13,
114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,
@@ -2387,7 +2387,7 @@
1,0,0,114,21,1,0,0,114,23,1,0,0,114,24,1,
0,0,114,88,0,0,0,114,26,1,0,0,114,166,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,13,1,0,0,157,4,0,0,115,20,
+ 114,5,0,0,0,114,13,1,0,0,158,4,0,0,115,20,
0,0,0,12,5,6,2,12,6,12,10,12,4,12,12,12,
3,12,3,12,3,12,3,114,13,1,0,0,99,0,0,0,
0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,
@@ -2405,7 +2405,7 @@
1,0,100,0,0,83,41,1,78,41,2,114,13,1,0,0,
114,14,1,0,0,41,4,114,76,0,0,0,114,72,0,0,
0,114,35,0,0,0,114,18,1,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,213,
+ 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,214,
4,0,0,115,2,0,0,0,0,1,122,24,78,97,109,101,
115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,
105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,
@@ -2415,21 +2415,21 @@
40,110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,
0,0,0,114,57,0,0,0,41,2,114,216,0,0,0,114,
162,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,217,0,0,0,216,4,0,0,115,2,0,0,
+ 0,0,0,114,217,0,0,0,217,4,0,0,115,2,0,0,
0,0,2,122,27,78,97,109,101,115,112,97,99,101,76,111,
97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,
99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,
78,84,114,4,0,0,0,41,2,114,76,0,0,0,114,179,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,157,0,0,0,220,4,0,0,115,2,0,0,0,
+ 0,0,114,157,0,0,0,221,4,0,0,115,2,0,0,0,
0,1,122,26,78,97,109,101,115,112,97,99,101,76,111,97,
100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,
0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
0,0,0,115,4,0,0,0,100,1,0,83,41,2,78,114,
30,0,0,0,114,4,0,0,0,41,2,114,76,0,0,0,
114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,221,0,0,0,223,4,0,0,115,2,0,
+ 5,0,0,0,114,221,0,0,0,224,4,0,0,115,2,0,
0,0,0,1,122,26,78,97,109,101,115,112,97,99,101,76,
111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,
99,2,0,0,0,0,0,0,0,2,0,0,0,6,0,0,
@@ -2439,7 +2439,7 @@
103,62,114,241,0,0,0,114,251,0,0,0,84,41,1,114,
252,0,0,0,41,2,114,76,0,0,0,114,179,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 220,0,0,0,226,4,0,0,115,2,0,0,0,0,1,122,
+ 220,0,0,0,227,4,0,0,115,2,0,0,0,0,1,122,
24,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,
0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,25,
@@ -2448,7 +2448,7 @@
3,114,172,0,0,0,114,57,0,0,0,114,159,0,0,0,
41,2,114,76,0,0,0,114,162,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,240,0,0,0,
- 229,4,0,0,115,4,0,0,0,0,1,9,1,122,33,78,
+ 230,4,0,0,115,4,0,0,0,0,1,9,1,122,33,78,
97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,
110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,
99,2,0,0,0,0,0,0,0,3,0,0,0,9,0,0,
@@ -2465,7 +2465,7 @@
0,114,156,0,0,0,114,240,0,0,0,114,160,0,0,0,
41,3,114,76,0,0,0,114,179,0,0,0,114,162,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,219,0,0,0,233,4,0,0,115,10,0,0,0,0,2,
+ 114,219,0,0,0,234,4,0,0,115,10,0,0,0,0,2,
16,1,15,1,13,1,12,1,122,27,78,97,109,101,115,112,
97,99,101,76,111,97,100,101,114,46,108,111,97,100,95,109,
111,100,117,108,101,78,41,11,114,57,0,0,0,114,56,0,
@@ -2473,7 +2473,7 @@
0,114,217,0,0,0,114,157,0,0,0,114,221,0,0,0,
114,220,0,0,0,114,240,0,0,0,114,219,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,27,1,0,0,212,4,0,0,115,14,0,0,
+ 0,0,0,114,27,1,0,0,213,4,0,0,115,14,0,0,
0,12,1,12,3,18,4,12,3,12,3,12,3,12,4,114,
27,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
0,4,0,0,0,64,0,0,0,115,115,0,0,0,101,0,
@@ -2508,7 +2508,7 @@
97,99,104,101,218,6,118,97,108,117,101,115,114,60,0,0,
0,114,29,1,0,0,41,2,114,216,0,0,0,218,6,102,
105,110,100,101,114,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,29,1,0,0,248,4,0,0,115,6,0,
+ 5,0,0,0,114,29,1,0,0,249,4,0,0,115,6,0,
0,0,0,4,22,1,15,1,122,28,80,97,116,104,70,105,
110,100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,
99,97,99,104,101,115,99,2,0,0,0,0,0,0,0,3,
@@ -2533,7 +2533,7 @@
158,0,0,0,41,3,114,216,0,0,0,114,35,0,0,0,
90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,111,
- 107,115,0,5,0,0,115,16,0,0,0,0,7,9,1,19,
+ 107,115,1,5,0,0,115,16,0,0,0,0,7,9,1,19,
1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,116,
104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111,
111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,0,
@@ -2562,7 +2562,7 @@
92,0,0,0,114,34,1,0,0,41,3,114,216,0,0,0,
114,35,0,0,0,114,32,1,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,20,95,112,97,116,104,
- 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,17,
+ 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,18,
5,0,0,115,16,0,0,0,0,8,12,1,15,1,3,1,
17,1,13,1,15,1,18,1,122,31,80,97,116,104,70,105,
110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114,
@@ -2592,7 +2592,7 @@
101,95,112,97,116,104,90,5,101,110,116,114,121,114,32,1,
0,0,114,161,0,0,0,114,189,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,11,95,103,101,
- 116,95,108,111,97,100,101,114,34,5,0,0,115,28,0,0,
+ 116,95,108,111,97,100,101,114,35,5,0,0,115,28,0,0,
0,0,5,6,1,13,1,21,1,6,1,15,1,12,1,15,
1,24,2,15,1,6,1,12,2,10,5,20,2,122,22,80,
97,116,104,70,105,110,100,101,114,46,95,103,101,116,95,108,
@@ -2614,7 +2614,7 @@
35,0,0,0,114,39,1,0,0,114,27,1,0,0,41,5,
114,216,0,0,0,114,179,0,0,0,114,35,0,0,0,114,
161,0,0,0,114,38,1,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,218,0,0,0,61,5,0,
+ 0,0,0,114,5,0,0,0,114,218,0,0,0,62,5,0,
0,115,16,0,0,0,0,4,12,1,12,1,24,1,12,1,
4,2,6,3,19,2,122,22,80,97,116,104,70,105,110,100,
101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,10,
@@ -2622,7 +2622,7 @@
59,0,0,0,114,222,0,0,0,114,29,1,0,0,114,34,
1,0,0,114,35,1,0,0,114,39,1,0,0,114,218,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,28,1,0,0,244,4,0,0,115,
+ 0,114,5,0,0,0,114,28,1,0,0,245,4,0,0,115,
14,0,0,0,12,2,6,2,18,8,18,17,18,17,18,27,
3,1,114,28,1,0,0,99,0,0,0,0,0,0,0,0,
0,0,0,0,3,0,0,0,64,0,0,0,115,106,0,0,
@@ -2669,7 +2669,7 @@
1,113,3,0,100,0,0,83,41,1,78,114,4,0,0,0,
41,2,114,22,0,0,0,114,10,1,0,0,41,1,114,161,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,144,0,
- 0,0,94,5,0,0,115,2,0,0,0,6,0,122,38,70,
+ 0,0,95,5,0,0,115,2,0,0,0,6,0,122,38,70,
105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,
95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,
101,120,112,114,62,114,29,0,0,0,78,114,124,0,0,0,
@@ -2681,7 +2681,7 @@
0,114,35,0,0,0,218,14,108,111,97,100,101,114,95,100,
101,116,97,105,108,115,90,7,108,111,97,100,101,114,115,114,
113,0,0,0,114,4,0,0,0,41,1,114,161,0,0,0,
- 114,5,0,0,0,114,77,0,0,0,88,5,0,0,115,16,
+ 114,5,0,0,0,114,77,0,0,0,89,5,0,0,115,16,
0,0,0,0,4,6,1,19,1,36,1,9,2,9,1,9,
1,12,1,122,19,70,105,108,101,70,105,110,100,101,114,46,
95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,
@@ -2691,7 +2691,7 @@
101,32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,
101,46,114,29,0,0,0,78,114,124,0,0,0,41,1,114,
42,1,0,0,41,1,114,76,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,29,1,0,0,102,
+ 114,4,0,0,0,114,5,0,0,0,114,29,1,0,0,103,
5,0,0,115,2,0,0,0,0,2,122,28,70,105,108,101,
70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,
101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,
@@ -2753,7 +2753,7 @@
0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,
109,101,90,9,102,117,108,108,95,112,97,116,104,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,185,0,0,
- 0,108,5,0,0,115,64,0,0,0,0,3,6,1,19,1,
+ 0,109,5,0,0,115,64,0,0,0,0,3,6,1,19,1,
3,1,37,1,13,1,11,1,15,1,10,1,12,2,9,1,
9,1,15,2,9,1,6,2,12,1,18,1,22,1,10,1,
15,1,12,1,26,4,15,2,22,1,22,1,25,1,16,1,
@@ -2789,7 +2789,7 @@
0,0,146,2,0,113,6,0,83,114,4,0,0,0,41,1,
114,125,0,0,0,41,2,114,22,0,0,0,90,2,102,110,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,250,
- 9,60,115,101,116,99,111,109,112,62,180,5,0,0,115,2,
+ 9,60,115,101,116,99,111,109,112,62,181,5,0,0,115,2,
0,0,0,9,0,122,41,70,105,108,101,70,105,110,100,101,
114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108,
111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,
@@ -2807,7 +2807,7 @@
111,110,116,101,110,116,115,114,25,1,0,0,114,72,0,0,
0,114,19,1,0,0,114,10,1,0,0,90,8,110,101,119,
95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,47,1,0,0,151,5,0,0,115,34,0,
+ 5,0,0,0,114,47,1,0,0,152,5,0,0,115,34,0,
0,0,0,2,9,1,3,1,31,1,22,3,11,3,18,1,
18,7,9,1,13,1,24,1,6,1,27,2,6,1,17,1,
9,1,18,1,122,22,70,105,108,101,70,105,110,100,101,114,
@@ -2846,7 +2846,7 @@
158,0,0,0,41,1,114,35,0,0,0,41,2,114,216,0,
0,0,114,46,1,0,0,114,4,0,0,0,114,5,0,0,
0,218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,
- 95,70,105,108,101,70,105,110,100,101,114,192,5,0,0,115,
+ 95,70,105,108,101,70,105,110,100,101,114,193,5,0,0,115,
6,0,0,0,0,2,12,1,21,1,122,54,70,105,108,101,
70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,
46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,
@@ -2854,7 +2854,7 @@
101,114,114,4,0,0,0,41,3,114,216,0,0,0,114,46,
1,0,0,114,53,1,0,0,114,4,0,0,0,41,2,114,
216,0,0,0,114,46,1,0,0,114,5,0,0,0,218,9,
- 112,97,116,104,95,104,111,111,107,182,5,0,0,115,4,0,
+ 112,97,116,104,95,104,111,111,107,183,5,0,0,115,4,0,
0,0,0,10,21,6,122,20,70,105,108,101,70,105,110,100,
101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,
0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,
@@ -2863,14 +2863,14 @@
105,110,100,101,114,40,123,33,114,125,41,41,2,114,47,0,
0,0,114,35,0,0,0,41,1,114,76,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,88,0,
- 0,0,200,5,0,0,115,2,0,0,0,0,1,122,19,70,
+ 0,0,201,5,0,0,115,2,0,0,0,0,1,122,19,70,
105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,
95,95,78,41,13,114,57,0,0,0,114,56,0,0,0,114,
58,0,0,0,114,59,0,0,0,114,77,0,0,0,114,29,
1,0,0,114,191,0,0,0,114,218,0,0,0,114,185,0,
0,0,114,47,1,0,0,114,222,0,0,0,114,54,1,0,
0,114,88,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,40,1,0,0,79,
+ 114,4,0,0,0,114,5,0,0,0,114,40,1,0,0,80,
5,0,0,115,16,0,0,0,12,7,6,2,12,14,12,4,
6,2,12,43,12,31,18,18,114,40,1,0,0,99,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
@@ -2888,7 +2888,7 @@
108,111,99,107,46,78,41,2,114,95,0,0,0,218,12,97,
99,113,117,105,114,101,95,108,111,99,107,41,1,114,76,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,143,0,0,0,210,5,0,0,115,2,0,0,0,0,
+ 0,114,143,0,0,0,211,5,0,0,115,2,0,0,0,0,
2,122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,
110,116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,
4,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,
@@ -2902,13 +2902,13 @@
95,116,121,112,101,90,9,101,120,99,95,118,97,108,117,101,
90,13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,146,
- 0,0,0,214,5,0,0,115,2,0,0,0,0,2,122,27,
+ 0,0,0,215,5,0,0,115,2,0,0,0,0,2,122,27,
95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,
120,116,46,95,95,101,120,105,116,95,95,78,41,6,114,57,
0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,
0,0,114,143,0,0,0,114,146,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,55,1,0,0,206,5,0,0,115,6,0,0,0,12,2,
+ 114,55,1,0,0,207,5,0,0,115,6,0,0,0,12,2,
6,2,12,4,114,55,1,0,0,99,3,0,0,0,0,0,
0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,91,
0,0,0,124,1,0,106,0,0,100,1,0,124,2,0,100,
@@ -2930,7 +2930,7 @@
107,97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,
115,90,4,98,97,115,101,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,13,95,114,101,115,111,108,118,101,
- 95,110,97,109,101,219,5,0,0,115,10,0,0,0,0,2,
+ 95,110,97,109,101,220,5,0,0,115,10,0,0,0,0,2,
22,1,18,1,15,1,10,1,114,59,1,0,0,99,2,0,
0,0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,
0,0,115,138,0,0,0,116,0,0,106,1,0,115,28,0,
@@ -2951,7 +2951,7 @@
114,141,0,0,0,114,172,0,0,0,41,4,114,72,0,0,
0,114,35,0,0,0,114,32,1,0,0,114,161,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 12,95,102,105,110,100,95,109,111,100,117,108,101,228,5,0,
+ 12,95,102,105,110,100,95,109,111,100,117,108,101,229,5,0,
0,115,20,0,0,0,0,2,9,1,19,1,16,1,10,1,
24,1,12,2,15,1,4,2,21,2,114,61,1,0,0,99,
3,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,
@@ -2987,7 +2987,7 @@
109,69,114,114,111,114,41,4,114,72,0,0,0,114,57,1,
0,0,114,58,1,0,0,114,190,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,13,95,115,97,
- 110,105,116,121,95,99,104,101,99,107,245,5,0,0,115,24,
+ 110,105,116,121,95,99,104,101,99,107,246,5,0,0,115,24,
0,0,0,0,2,15,1,30,1,12,1,15,1,6,1,15,
1,15,1,15,1,6,2,27,1,19,1,114,64,1,0,0,
122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101,
@@ -3042,7 +3042,7 @@
117,108,101,114,190,0,0,0,114,161,0,0,0,114,162,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,
- 100,95,117,110,108,111,99,107,101,100,9,6,0,0,115,72,
+ 100,95,117,110,108,111,99,107,101,100,10,6,0,0,115,72,
0,0,0,0,1,6,1,19,1,6,1,15,1,16,2,15,
1,11,2,13,1,3,1,13,1,13,1,22,1,26,1,15,
1,12,1,30,1,15,2,13,1,19,2,13,1,6,2,13,
@@ -3063,7 +3063,7 @@
41,3,114,72,0,0,0,114,66,1,0,0,114,70,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
218,14,95,102,105,110,100,95,97,110,100,95,108,111,97,100,
- 55,6,0,0,115,14,0,0,0,0,2,3,1,16,2,11,
+ 56,6,0,0,115,14,0,0,0,0,2,3,1,16,2,11,
1,10,1,3,1,17,2,114,68,1,0,0,99,3,0,0,
0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
0,115,172,0,0,0,116,0,0,124,0,0,124,1,0,124,
@@ -3107,7 +3107,7 @@
0,114,97,0,0,0,41,5,114,72,0,0,0,114,57,1,
0,0,114,58,1,0,0,114,162,0,0,0,114,137,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,69,1,0,0,68,6,0,0,115,26,0,0,0,0,9,
+ 114,69,1,0,0,69,6,0,0,115,26,0,0,0,0,9,
16,1,12,1,21,1,10,1,15,1,13,1,13,1,12,1,
10,2,15,1,21,1,10,1,114,69,1,0,0,99,3,0,
0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0,
@@ -3154,7 +3154,7 @@
0,90,9,102,114,111,109,95,110,97,109,101,114,249,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
218,16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,
- 115,116,92,6,0,0,115,34,0,0,0,0,10,15,1,12,
+ 115,116,93,6,0,0,115,34,0,0,0,0,10,15,1,12,
1,12,1,13,1,15,1,22,1,13,1,15,1,21,1,3,
1,17,1,18,4,21,1,15,1,9,1,32,1,114,76,1,
0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,2,
@@ -3179,7 +3179,7 @@
2,114,80,0,0,0,114,32,0,0,0,41,2,218,7,103,
108,111,98,97,108,115,114,57,1,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,17,95,99,97,108,
- 99,95,95,95,112,97,99,107,97,103,101,95,95,124,6,0,
+ 99,95,95,95,112,97,99,107,97,103,101,95,95,125,6,0,
0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,
25,1,114,78,1,0,0,99,0,0,0,0,0,0,0,0,
3,0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,
@@ -3200,7 +3200,7 @@
10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,117,
114,99,101,90,8,98,121,116,101,99,111,100,101,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,235,0,0,
- 0,139,6,0,0,115,8,0,0,0,0,5,18,1,12,1,
+ 0,140,6,0,0,115,8,0,0,0,0,5,18,1,12,1,
12,1,114,235,0,0,0,99,5,0,0,0,0,0,0,0,
9,0,0,0,5,0,0,0,67,0,0,0,115,227,0,0,
0,124,4,0,100,1,0,107,2,0,114,27,0,116,0,0,
@@ -3255,7 +3255,7 @@
58,1,0,0,114,162,0,0,0,90,8,103,108,111,98,97,
108,115,95,114,57,1,0,0,90,7,99,117,116,95,111,102,
102,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 218,10,95,95,105,109,112,111,114,116,95,95,150,6,0,0,
+ 218,10,95,95,105,109,112,111,114,116,95,95,151,6,0,0,
115,26,0,0,0,0,11,12,1,15,2,24,1,12,1,18,
1,6,3,12,1,23,1,6,1,4,4,35,3,40,2,114,
82,1,0,0,99,2,0,0,0,0,0,0,0,16,0,0,
@@ -3332,7 +3332,7 @@
100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31,
0,0,0,41,2,114,22,0,0,0,114,116,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,144,
- 0,0,0,223,6,0,0,115,2,0,0,0,6,0,122,25,
+ 0,0,0,224,6,0,0,115,2,0,0,0,6,0,122,25,
95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,
60,103,101,110,101,120,112,114,62,114,68,0,0,0,122,30,
105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114,
@@ -3366,7 +3366,7 @@
14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,90,
13,119,105,110,114,101,103,95,109,111,100,117,108,101,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,6,95,
- 115,101,116,117,112,186,6,0,0,115,102,0,0,0,0,9,
+ 115,101,116,117,112,187,6,0,0,115,102,0,0,0,0,9,
6,1,6,2,12,1,9,2,6,2,12,1,28,1,15,1,
24,1,15,1,12,1,15,1,22,2,13,1,13,1,15,1,
18,2,13,1,20,2,33,1,19,2,31,1,10,1,15,1,
@@ -3395,7 +3395,7 @@
28,1,0,0,41,3,114,89,1,0,0,114,90,1,0,0,
90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100,
101,114,115,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,218,8,95,105,110,115,116,97,108,108,6,7,0,0,
+ 0,0,218,8,95,105,110,115,116,97,108,108,7,7,0,0,
115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16,
1,15,1,19,1,114,92,1,0,0,41,3,122,3,119,105,
110,114,1,0,0,0,114,2,0,0,0,41,82,114,59,0,
@@ -3430,7 +3430,7 @@
60,109,111,100,117,108,101,62,8,0,0,0,115,150,0,0,
0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12,
10,12,6,12,7,15,22,12,8,15,6,6,2,6,3,22,
- 4,19,68,19,23,12,19,12,20,12,112,22,1,18,2,6,
+ 4,19,68,19,23,12,19,12,20,12,113,22,1,18,2,6,
2,9,2,9,1,9,2,15,27,12,23,12,19,12,12,18,
8,19,17,22,42,18,9,12,15,12,11,12,13,12,11,12,
18,12,11,12,11,12,13,21,55,21,12,18,10,12,14,19,
diff --git a/Python/traceback.c b/Python/traceback.c
index 4f2e732..01e9473 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -471,13 +471,13 @@
write(fd, buffer, len);
}
-/* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits,
+/* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits,
and write it into the file fd.
This function is signal safe. */
static void
-dump_hexadecimal(int width, unsigned long value, int fd)
+dump_hexadecimal(int fd, unsigned long value, int width)
{
int len;
char buffer[sizeof(unsigned long) * 2 + 1];
@@ -544,15 +544,15 @@
}
else if (ch < 0xff) {
PUTS(fd, "\\x");
- dump_hexadecimal(2, ch, fd);
+ dump_hexadecimal(fd, ch, 2);
}
else if (ch < 0xffff) {
PUTS(fd, "\\u");
- dump_hexadecimal(4, ch, fd);
+ dump_hexadecimal(fd, ch, 4);
}
else {
PUTS(fd, "\\U");
- dump_hexadecimal(8, ch, fd);
+ dump_hexadecimal(fd, ch, 8);
}
}
if (truncated)
@@ -603,7 +603,7 @@
unsigned int depth;
if (write_header)
- PUTS(fd, "Traceback (most recent call first):\n");
+ PUTS(fd, "Stack (most recent call first):\n");
frame = _PyThreadState_GetFrame(tstate);
if (frame == NULL)
@@ -641,8 +641,8 @@
PUTS(fd, "Current thread 0x");
else
PUTS(fd, "Thread 0x");
- dump_hexadecimal(sizeof(long)*2, (unsigned long)tstate->thread_id, fd);
- PUTS(fd, ":\n");
+ dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2);
+ PUTS(fd, " (most recent call first):\n");
}
const char*