1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
U
¸ý°d aã@sUdZddlmZddlZddlmZddlmZddlmZddlmZddlmZdd    lm    Z    dd
lm
Z
d d l m Z d d l m ZejrÈd dlmZd dlmZd dlmZd dlmZd dlmZejrØded<ndZGdd„dƒZGdd„deeƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d eƒZ Gd!d"„d"eƒZ!Gd#d$„d$eƒZ"Gd%d&„d&eƒZ#Gd'd(„d(eƒZ$Gd)d*„d*eƒZ%Gd+d,„d,e%ƒZ&Gd-d.„d.eƒZ'Gd/d0„d0eƒZ(Gd1d2„d2e(ƒZ)Gd3d4„d4eƒZ*Gd5d6„d6eƒZ+Gd7d8„d8e+ƒZ,Gd9d:„d:e+ƒZ-Gd;d<„d<e+ƒZ.Gd=d>„d>e+ƒZ/Gd?d@„d@e+e0ƒZ1GdAdB„dBe+ƒZ2GdCdD„dDe+ƒZ3GdEdF„dFe+ƒZ4GdGdH„dHe+ƒZ5GdIdJ„dJe+ƒZ6GdKdL„dLe4ƒZ7GdMdN„dNe4ƒZ8GdOdP„dPe+ƒZ9GdQdR„dRe+ƒZ:GdSdT„dTe+ƒZ;GdUdV„dVƒZ<GdWdX„dXeƒZ=GdYdZ„dZe=ƒZ>Gd[d\„d\e>ƒZ?Gd]d^„d^e>ƒZ@Gd_d`„d`e@ƒZAGdadb„dbe@ƒZBGdcdd„dde@ƒZCGdedf„dfe@ƒZDGdgdh„dhe@ƒZEGdidj„dje@ƒZFGdkdl„dleGƒZHGdmdn„dneeIƒZJGdodp„dpeJƒZKGdqdr„dreKƒZLGdsdt„dteKƒZMGdudv„dveNƒZOGdwdx„dxeePƒZQdS)yz¿Exceptions used with SQLAlchemy.
 
The base exception class is :exc:`.SQLAlchemyError`.  Exceptions which are
raised as a result of DBAPI exceptions are all subclasses of
:exc:`.DBAPIError`.
 
é)Ú annotationsN)ÚAny)ÚList)ÚOptional)Úoverload)ÚTuple)ÚType)ÚUnioné)Úcompat)Ú    preloaded)Ú_AnyExecuteParams)ÚDialect)ÚCompiled)Ú TypeCompiler)Ú ClauseElementÚstrÚ_version_tokencsZeZdZUdZdZded<dddœ‡fdd„ Zd    Zd
d œd d „Zd
d œ‡fdd„ Z    ‡Z
S)ÚHasDescriptionCodezDhelper which adds 'code' as an attribute and '_code_str' as a methodNú Optional[str]Úcoder)ÚargÚkwcs,| dd¡}|dk    r||_tƒj||ŽdS)Nr)ÚpoprÚsuperÚ__init__)Úselfrrr©Ú    __class__©úEd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/exc.pyr0s zHasDescriptionCode.__init__Úerrorr©ÚreturncCs*|js
dSd|j›dt›d|j›dSdS)NÚz(Background on this z at: https://sqlalche.me/e/ú/ú))rÚ _what_are_wer©rrrr Ú    _code_str8sÿzHasDescriptionCode._code_strcs$tƒ ¡}|jr d|| ¡f}|S©Nz%s %s)rÚ__str__rr)©rÚmessagerrr r+As
zHasDescriptionCode.__str__) Ú__name__Ú
__module__Ú __qualname__Ú__doc__rÚ__annotations__rr'r)r+Ú __classcell__rrrr r+s
     rc@s:eZdZdZddœdd„Zddœdd„Zddœdd    „Zd
S) ÚSQLAlchemyErrorzGeneric error class.rr"cCsJt|jƒdkr<|jd}t|tƒr0t |d¡}nt|ƒ}|St|jƒSdS)Nr
rzutf-8)ÚlenÚargsÚ
isinstanceÚbytesr Zdecode_backslashreplacer)rZarg_textÚtextrrr Ú_messageKs 
 
zSQLAlchemyError._messagecCs"| ¡}|jrd|| ¡f}|Sr*)r:rr)r,rrr Ú _sql_messagejszSQLAlchemyError._sql_messagecCs| ¡S©N)r;r(rrr r+rszSQLAlchemyError.__str__N)r.r/r0r1r:r;r+rrrr r4Hsr4c@seZdZdZdS)Ú ArgumentErrorz“Raised when an invalid or conflicting function argument is supplied.
 
    This error generally corresponds to construction time state errors.
 
    N©r.r/r0r1rrrr r=vsr=c@seZdZdZdS)ÚDuplicateColumnErrorz¥a Column is being added to a Table that would replace another
    Column, without appropriate parameters to allow this in place.
 
    .. versionadded:: 2.0.0b4
 
    Nr>rrrr r?~sr?cs4eZdZdZddœ‡fdd„ Zddœdd    „Z‡ZS)
ÚObjectNotExecutableErrorzVRaised when an object is passed to .execute() that can't be
    executed as SQL.
 
    r)Útargetcstƒ d|¡||_dS)NzNot an executable object: %r)rrrA)rrArrr rsz!ObjectNotExecutableError.__init__úUnion[str, Tuple[Any, ...]]r"cCs|j|jffSr<)rrAr(rrr Ú
__reduce__‘sz#ObjectNotExecutableError.__reduce__)r.r/r0r1rrCr3rrrr r@‡sr@c@seZdZdZdS)ÚNoSuchModuleErrorzpRaised when a dynamically-loaded module (usually a database dialect)
    of a particular name cannot be located.Nr>rrrr rD•srDc@seZdZdZdS)ÚNoForeignKeysErrorzURaised when no foreign keys can be located between two selectables
    during a join.Nr>rrrr rEšsrEc@seZdZdZdS)ÚAmbiguousForeignKeysErrorzhRaised when more than one foreign key matching can be located
    between two selectables during a join.Nr>rrrr rFŸsrFc@seZdZdZdS)ÚConstraintColumnNotFoundErrorzraised when a constraint refers to a string column name that
    is not present in the table being constrained.
 
    .. versionadded:: 2.0
 
    Nr>rrrr rG¤srGc@s6eZdZdZd ddddddœdd„Zd    d
œd d „ZdS)ÚCircularDependencyErrora    Raised by topological sorts when a circular dependency is detected.
 
    There are two scenarios where this error occurs:
 
    * In a Session flush operation, if two objects are mutually dependent
      on each other, they can not be inserted or deleted via INSERT or
      DELETE statements alone; an UPDATE will be needed to post-associate
      or pre-deassociate one of the foreign key constrained values.
      The ``post_update`` flag described at :ref:`post_update` can resolve
      this cycle.
    * In a :attr:`_schema.MetaData.sorted_tables` operation, two
      :class:`_schema.ForeignKey`
      or :class:`_schema.ForeignKeyConstraint` objects mutually refer to each
      other.  Apply the ``use_alter=True`` flag to one or both,
      see :ref:`use_alter`.
 
    Nrrr)r-ÚcyclesÚedgesÚmsgrcCsJ|dkr&|dd dd„|Dƒ¡7}n|}tj|||d||_||_dS)Nz (%s)z, css|]}t|ƒVqdSr<)Úrepr)Ú.0Úsrrr Ú    <genexpr>Ész3CircularDependencyError.__init__.<locals>.<genexpr>©r)Újoinr4rrIrJ)rr-rIrJrKrrrr rÀs z CircularDependencyError.__init__rBr"cCs2|jd|j|j|jdf|jdk    r,d|jinifS)Nrr)rrIrJr6rr(rrr rCÐsýz"CircularDependencyError.__reduce__)NN©r.r/r0r1rrCrrrr rH­s
úrHc@seZdZdZdS)Ú CompileErrorz2Raised when an error occurs during SQL compilationNr>rrrr rSØsrScs>eZdZdZdZdddddœ‡fdd    „ Zd
d œd d „Z‡ZS)ÚUnsupportedCompilationErrorzœRaised when an operation is not supported by the given compiler.
 
    .. seealso::
 
        :ref:`faq_sql_expression_string`
 
        :ref:`error_l7de`
    Zl7deNzUnion[Compiled, TypeCompiler]zType[ClauseElement]r)ÚcompilerÚ element_typer-cs8tƒ d|||rd|ndf¡||_||_||_dS)Nz-Compiler %r can't render element of type %s%sz: %sr$)rrrUrVr-)rrUrVr-rrr rèsÿÿz$UnsupportedCompilationError.__init__rBr"cCs|j|j|j|jffSr<)rrUrVr-r(rrr rCösz&UnsupportedCompilationError.__reduce__)N)r.r/r0r1rrrCr3rrrr rTÜs
    ürTc@seZdZdZdS)ÚIdentifierErrorz;Raised when a schema name is beyond the max character limitNr>rrrr rWúsrWc@seZdZUdZdZded<dS)ÚDisconnectionErrora¤A disconnect is detected on a raw DB-API connection.
 
    This error is raised and consumed internally by a connection pool.  It can
    be raised by the :meth:`_events.PoolEvents.checkout`
    event so that the host pool
    forces a retry; the exception will be caught three times in a row before
    the pool gives up and raises :class:`~sqlalchemy.exc.InvalidRequestError`
    regarding the connection attempt.
 
    FÚboolÚinvalidate_poolN©r.r/r0r1rZr2rrrr rXþs
 rXc@seZdZUdZdZded<dS)ÚInvalidatePoolErroraéRaised when the connection pool should invalidate all stale connections.
 
    A subclass of :class:`_exc.DisconnectionError` that indicates that the
    disconnect situation encountered on the connection probably means the
    entire pool should be invalidated, as the database has been restarted.
 
    This exception will be handled otherwise the same way as
    :class:`_exc.DisconnectionError`, allowing three attempts to reconnect
    before giving up.
 
    .. versionadded:: 1.2
 
    TrYrZNr[rrrr r\ s
r\c@seZdZdZdS)Ú TimeoutErrorz@Raised when a connection pool times out on getting a connection.Nr>rrrr r]sr]c@seZdZdZdS)ÚInvalidRequestErrorzvSQLAlchemy was asked to do something it can't do.
 
    This error generally corresponds to runtime state errors.
 
    Nr>rrrr r^#sr^c@seZdZdZdS)ÚIllegalStateChangeErrorzrAn object that tracks state encountered an illegal state change
    of some kind.
 
    .. versionadded:: 2.0
 
    Nr>rrrr r_+sr_c@seZdZdZdS)ÚNoInspectionAvailablezaA subject passed to :func:`sqlalchemy.inspection.inspect` produced
    no context for inspection.Nr>rrrr r`4sr`c@seZdZdZdS)ÚPendingRollbackErrorzlA transaction has failed and needs to be rolled back before
    continuing.
 
    .. versionadded:: 1.4
 
    Nr>rrrr ra9srac@seZdZdZdS)ÚResourceClosedErrorzcAn operation was requested from a connection, cursor, or other
    object that's in a closed state.Nr>rrrr rbBsrbc@seZdZdZdS)ÚNoSuchColumnErrorz1A nonexistent column is requested from a ``Row``.Nr>rrrr rcGsrcc@seZdZdZdS)Ú NoResultFoundzûA database result was required but none was found.
 
 
    .. versionchanged:: 1.4  This exception is now part of the
       ``sqlalchemy.exc`` module in Core, moved from the ORM.  The symbol
       remains importable from ``sqlalchemy.orm.exc``.
 
 
    Nr>rrrr rdKsrdc@seZdZdZdS)ÚMultipleResultsFounda A single database result was required but more than one were found.
 
    .. versionchanged:: 1.4  This exception is now part of the
       ``sqlalchemy.exc`` module in Core, moved from the ORM.  The symbol
       remains importable from ``sqlalchemy.orm.exc``.
 
 
    Nr>rrrr reWsrec@seZdZUdZded<dS)ÚNoReferenceErrorzDRaised by ``ForeignKey`` to indicate a reference cannot be resolved.rÚ
table_nameN)r.r/r0r1r2rrrr rfbs
rfc@seZdZdZdZdS)Ú AwaitRequiredzjError raised by the async greenlet spawn if no async operation
    was awaited when it required one.
 
    Zxd1rN©r.r/r0r1rrrrr rhhsrhc@seZdZdZdZdS)ÚMissingGreenletzkError raised by the async greenlet await\_ if called while not inside
    the greenlet spawn context.
 
    Zxd2sNrirrrr rjqsrjc@s.eZdZdZdddœdd„Zddœdd    „Zd
S) ÚNoReferencedTableErrorzQRaised by ``ForeignKey`` when the referred ``Table`` cannot be
    located.
 
    r)r-ÚtnamecCst ||¡||_dSr<)rfrrg)rr-rlrrr r€s zNoReferencedTableError.__init__rBr"cCs|j|jd|jffS©Nr)rr6rgr(rrr rC„sz!NoReferencedTableError.__reduce__NrRrrrr rkzsrkc@s0eZdZdZddddœdd„Zddœdd    „Zd
S) ÚNoReferencedColumnErrorzRRaised by ``ForeignKey`` when the referred ``Column`` cannot be
    located.
 
    r)r-rlÚcnamecCst ||¡||_||_dSr<)rfrrgÚ column_name)rr-rlrorrr rŽs z NoReferencedColumnError.__init__rBr"cCs|j|jd|j|jffSrm)rr6rgrpr(rrr rC“sþz"NoReferencedColumnError.__reduce__NrRrrrr rnˆsrnc@seZdZdZdS)ÚNoSuchTableErrorz7Table does not exist or is not visible to a connection.Nr>rrrr rqšsrqc@seZdZdZdS)ÚUnreflectableTableErrorzUTable exists but can't be reflected for some reason.
 
    .. versionadded:: 1.2
 
    Nr>rrrr rržsrrc@seZdZdZdS)ÚUnboundExecutionErrorzASQL was attempted without a database connection to execute it on.Nr>rrrr rs¦srsc@seZdZdZdS)Ú DontWrapMixina8A mixin class which, when applied to a user-defined Exception class,
    will not be wrapped inside of :exc:`.StatementError` if the error is
    emitted within the process of executing a statement.
 
    E.g.::
 
        from sqlalchemy.exc import DontWrapMixin
 
        class MyCustomException(Exception, DontWrapMixin):
            pass
 
        class MySpecialType(TypeDecorator):
            impl = String
 
            def process_bind_param(self, value, dialect):
                if value == 'invalid':
                    raise MyCustomException("invalid!")
 
    Nr>rrrr rtªsrtc    @s eZdZUdZdZded<dZded<dZded<dZd    ed
<d Z    d ed <dddddd dd    dœdd„Z
dddœdd„Z ddœdd„Z e  d¡ddœdd„ƒZdS)ÚStatementErroravAn error occurred during execution of a SQL statement.
 
    :class:`StatementError` wraps the exception raised
    during execution, and features :attr:`.statement`
    and :attr:`.params` attributes which supply context regarding
    the specifics of the statement which had an issue.
 
    The wrapped exception object is available in
    the :attr:`.orig` attribute.
 
    NrÚ    statementúOptional[_AnyExecuteParams]ÚparamszOptional[BaseException]ÚorigúOptional[bool]ÚismultiFrYÚconnection_invalidatedr)r-rvrxryÚhide_parametersrr{cCs8tj|||d||_||_||_||_||_g|_dS)NrP)r4rrvrxryr{r}Údetail)rr-rvrxryr}rr{rrr rÝs
zStatementError.__init__ÚNone)rKr#cCs|j |¡dSr<)r~Úappend)rrKrrr Ú
add_detailïszStatementError.add_detailrBr"c    Cs8|j|jd|j|j|j|j|j d¡|jfd|j    ifS)Nrrr~)
rr6rvrxryr}Ú__dict__Úgetr{r~r(rrr rCòs
ù    õzStatementError.__reduce__zsqlalchemy.sql.utilcCs”tj}| ¡g}|jrdd|j}| |¡|jrd|jrB| d¡n"|j|jd|jd}| d|¡|     ¡}|rz| |¡d 
dd„|j Dƒ|¡S)    Nz    [SQL: %s]z3[SQL parameters hidden due to hide_parameters=True]é
)r{z[parameters: %r]Ú
cSsg|] }d|‘qS)z(%s)r)rMZdetrrr Ú
<listcomp>sz/StatementError._sql_message.<locals>.<listcomp>) Ú
_preloadedZsql_utilr:rvr€rxr}Z _repr_paramsr{r)rQr~)rÚutilÚdetailsZ stmt_detailZ params_reprZcode_strrrr r;s(
 
 
ÿÿ
zStatementError._sql_message)FNN)r.r/r0r1rvr2rxryr{r|rrrCr‡Zpreload_moduler;rrrr ruÀs
     øruc @sÚeZdZdZdZeedddddd    d    d
d d d œ    dd„ƒƒZeedddddd    d    d
d dd œ    dd„ƒƒZeedddddd    d    d
d dd œ    dd„ƒƒZed ddddd    d    d
d dd œ    dd„ƒZddœdd„Zd!dddd    d    dd dœdd„Z    dS)"Ú
DBAPIErrora    Raised when the execution of a database operation fails.
 
    Wraps exceptions raised by the DB-API underlying the
    database operation.  Driver-specific implementations of the standard
    DB-API exception types are wrapped by matching sub-types of SQLAlchemy's
    :class:`DBAPIError` when possible.  DB-API's ``Error`` type maps to
    :class:`DBAPIError` in SQLAlchemy, otherwise the names are identical.  Note
    that there is no guarantee that different DB-API implementations will
    raise the same exception type for any given error condition.
 
    :class:`DBAPIError` features :attr:`~.StatementError.statement`
    and :attr:`~.StatementError.params` attributes which supply context
    regarding the specifics of the statement which had an issue, for the
    typical case when the error was raised within the context of
    emitting a SQL statement.
 
    The wrapped exception object is available in the
    :attr:`~.StatementError.orig` attribute. Its type and properties are
    DB-API implementation specific.
 
    ZdbapiFNrrwÚ    ExceptionzType[Exception]rYzOptional[Dialect]rzru)    rvrxryÚdbapi_base_errr}r|Údialectr{r#c        CsdSr<r©    ÚclsrvrxryrŒr}r|rr{rrr Úinstance2s zDBAPIError.instancertc        CsdSr<rrŽrrr rAs Ú BaseExceptionc        CsdSr<rrŽrrr rPs z#Union[BaseException, DontWrapMixin]c         Cst|tƒrt|tƒrt|tƒr"|S|dk    rêt|tƒrh|rhtd|jj|jj|j    df|||||j
|dSt||ƒsœ|rœtd|jj|jj|f|||||dSt ƒ}    |jj D]>}
|
j} |rÆ|j  | | ¡} | |    krªt|    | tƒrª|    | }qêqª|||||||j
|dS)Nú
(%s.%s) %sr)r}rr{)r}r{)r|r}rr{)r7r‘r‹rtr4rurr/r.r6rÚglobalsÚ__mro__Zdbapi_exception_translation_maprƒÚ
issubclassrŠ) rrvrxryrŒr}r|rr{ÚglobZsuper_Únamerrr r_srÿÿþýÿôýÿõ ÿùrBr"c    Cs4|j|j|j|j|j|j|j d¡|jfd|j    ifS)Nrr~)
rrvrxryr}r|r‚rƒr{r~r(rrr rC¨s
ù    õzDBAPIError.__reduce__)rvrxryr}r|rr{c
 
Csrz t|ƒ}Wn.tk
r:}    zdt|    ƒ}W5d}    ~    XYnXtj|d|jj|jj|f||||||d||_dS)Nz.Error in str() of DB-API-generated exception: r’)rr{)rr‹rurrr/r.r|)
rrvrxryr}r|rr{r9Úerrr r·s"
 ÿ÷ zDBAPIError.__init__)FFNN)FFNN)FFNN)FFNN)FFNN)
r.r/r0r1rrÚ classmethodrrCrrrrr rŠsF÷$ ÷$ ÷$ ÷"HørŠc@seZdZdZdZdS)ÚInterfaceErrorzWraps a DB-API InterfaceError.Zrvf5Nrirrrr ršÓsršc@seZdZdZdZdS)Ú DatabaseErrorzWraps a DB-API DatabaseError.Z4xp6Nrirrrr r›Ùsr›c@seZdZdZdZdS)Ú    DataErrorzWraps a DB-API DataError.Z9h9hNrirrrr rœßsrœc@seZdZdZdZdS)ÚOperationalErrorz Wraps a DB-API OperationalError.Ze3q8Nrirrrr råsrc@seZdZdZdZdS)ÚIntegrityErrorzWraps a DB-API IntegrityError.ZgkpjNrirrrr ržësržc@seZdZdZdZdS)Ú InternalErrorzWraps a DB-API InternalError.Z2j85Nrirrrr rŸñsrŸc@seZdZdZdZdS)ÚProgrammingErrorz Wraps a DB-API ProgrammingError.Zf405Nrirrrr r ÷sr c@seZdZdZdZdS)ÚNotSupportedErrorz!Wraps a DB-API NotSupportedError.Ztw8gNrirrrr r¡ýsr¡c@seZdZdZdS)ÚSATestSuiteWarningzÀwarning for a condition detected during tests that is non-fatal
 
    Currently outside of SAWarning so that we can work around tools like
    Alembic doing the wrong thing with warnings.
 
    Nr>rrrr r¢sr¢c@seZdZUdZdZded<dS)ÚSADeprecationWarningz$Issued for usage of deprecated APIs.NrÚdeprecated_since©r.r/r0r1r¤r2rrrr r£s
 r£cs4eZdZUdZdZded<ddœ‡fdd„ Z‡ZS)    ÚBase20DeprecationWarningz©Issued for usage of APIs specifically deprecated or legacy in
    SQLAlchemy 2.0.
 
    .. seealso::
 
        :ref:`error_b8d9`.
 
        :ref:`deprecation_20_mode`
 
    z1.4rr¤rr"cstƒ ¡dS)Nz> (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9))rr+r(rrr r+%sÿÿz Base20DeprecationWarning.__str__)r.r/r0r1r¤r2r+r3rrrr r¦s
 r¦c@seZdZdZdS)ÚLegacyAPIWarningzEindicates an API that is in 'legacy' status, a long term deprecation.Nr>rrrr r§,sr§c@seZdZdZdS)ÚMovedIn20WarningzASubtype of RemovedIn20Warning to indicate an API that moved only.Nr>rrrr r¨0sr¨c@seZdZUdZdZded<dS)ÚSAPendingDeprecationWarningz}A similar warning as :class:`_exc.SADeprecationWarning`, this warning
    is not used in modern versions of SQLAlchemy.
 
    Nrr¤r¥rrrr r©4s
 r©c@seZdZdZdZdS)Ú    SAWarningzIssued at runtime.ÚwarningN)r.r/r0r1r'rrrr rª>srª)Rr1Ú
__future__rÚtypingrrrrrrr    rˆr r r‡Ú TYPE_CHECKINGZengine.interfacesr rZ sql.compilerrrZ sql.elementsrr2rrr‹r4r=r?r@rDrErFrGrHrSrTrWrXr\r]r^r_r`rarbÚKeyErrorrcrdrerfrhrjrkrnrqrrrsrtrurŠršr›rœrržrŸr r¡ÚWarningr¢ÚDeprecationWarningr£r¦r§r¨ÚPendingDeprecationWarningr©ÚRuntimeWarningrªrrrr Ú<module>sŽ               
.        +                  Y;