403Webshell
Server IP : 178.105.222.151  /  Your IP : 216.73.216.38
Web Server : nginx/1.28.3
System : Linux MNK 7.0.0-15-generic #15-Ubuntu SMP PREEMPT_DYNAMIC Wed Apr 22 16:06:43 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.5.4
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/jinja2/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/jinja2/__pycache__/compiler.cpython-314.pyc
+
��i�!���Rt^RIt^RIHt^RIHt^RIHt^RI	H
t
^RIHt
^RIHt^RIHt^R	IHt^R
IHt^RIHt^RIHt^R
IHt^RIHt^RIHt^RIHt^RIHt^RIHt^RIH t ^RI!H"t"]PF'd^RI$t%^RI&H't']PP!R]PRR]PT3,R7t+RRRRRRRR R!R"R#R$R%R%R&R'/t,R(R)lt-R*R+lt.R,R-lt/RBR.R/llt0R0R1lt1R2R3lt2!R4R54t3!R6R74t4!R8R9]54t6!R:R;]"4t7!R<R=]"4t8!R>R?]94t:!R@RA]"4t;R#)Cz0Compiles nodes from the parser into Python code.N)�contextmanager��update_wrapper)�StringIO)�chain)�	iskeyword)�escape)�Markup)�nodes)�TemplateAssertionError)�Symbols)�VAR_LOAD_ALIAS)�VAR_LOAD_PARAMETER)�VAR_LOAD_RESOLVE)�VAR_LOAD_UNDEFINED)�EvalContext)�	Optimizer)�_PassArg)�concat)�NodeVisitor)�Environment�F.)�bound�eqz==�nez!=�gt�>�gteqz>=�lt�<�lteqz<=�in�notinznot inc�0�V^8�dQhR\R\/#)��f�return)r)�formats"�1/usr/lib/python3/dist-packages/jinja2/compiler.py�__annotate__r)-s��
'�
'�Q�
'�1�
'�c�.a�RV3Rllp\VS4#)c
��V^8�dQhRRR\PRRR\PR\P/#)r$�self�
CodeGenerator�node�frame�Frame�kwargsr&)r
�Expr�t�Any)r's"r(r)�#optimizeconst.<locals>.__annotate__.s@��
.�
.��
.�%*�Z�Z�
.�8?�
.�KL�5�5�
.�	
���
.r*c��<�VPeYVPP'g=VPPWP4pWA8wdVPWB4#S!WV3/VB#�N)�	optimizer�eval_ctx�volatile�visit)r-r/r0r2�new_noder%s&&&, �r(�new_func�optimizeconst.<locals>.new_func.s]����>�>�%�e�n�n�.E�.E�.E��~�~�+�+�D�.�.�A�H����z�z�(�2�2���U�-�f�-�-r*r)r%r>sf r(�
optimizeconstr@-s���
.�
.��(�A�&�&r*c�x�V^8�dQhR\R\PR\PR.R3,/#�r$�opr&r.r1N)�strr4�Callabler
�BinExpr)r's"r(r)r)=s4����C��A�J�J������'P�RV�'V�W�r*c�,a�\RV3Rll4pV#)c�L�V^8�dQhRRR\PR\RR/#�r$r-r.r/r0r&N)r
rFr1)r's"r(r)�!_make_binop.<locals>.__annotate__?s,����o��U�]�]��5��T�r*c�<�VPP'd|SVPP9daVPRS:R24VP	VP
V4VPR4VP	VPV4M^VPR4VP	VP
V4VPRSR24VP	VPV4VPR4R#)z environment.call_binop(context, �, �(� �)N)�environment�	sandboxed�intercepted_binops�writer<�left�right�r-r/r0rCs&&&�r(�visitor�_make_binop.<locals>.visitor>s����
���&�&�&�2��1A�1A�1T�1T�+T��J�J�9�"��r�B�C��J�J�t�y�y�%�(��J�J�t���J�J�t�z�z�5�)��J�J�s�O��J�J�t�y�y�%�(��J�J��2�$�a�y�!��J�J�t�z�z�5�)��
�
�3�r*�r@�rCrWsf r(�_make_binopr[=s������� �Nr*c�x�V^8�dQhR\R\PR\PR.R3,/#rB)rDr4rEr
�	UnaryExpr)r's"r(r)r)Rs5�������Z�Z��%�/�/�7�;�T�A�B�r*c�,a�\RV3Rll4pV#)c�L�V^8�dQhRRR\PR\RR/#rI)r
r]r1)r's"r(r)� _make_unop.<locals>.__annotate__Vs,��
�
�o�
�U�_�_�
�U�
�t�
r*c�f<�VPP'dOSVPP9d4VPRS:R24VP	VP
V4M4VPRS,4VP	VP
V4VPR4R#)zenvironment.call_unop(context, rLrMrON)rPrQ�intercepted_unopsrSr<r/rVs&&&�r(rW�_make_unop.<locals>.visitorUs���
���&�&�&�2��1A�1A�1S�1S�+S��J�J�8���b�A�B��J�J�t�y�y�%�(��J�J�s�R�x� ��J�J�t�y�y�%�(��
�
�3�r*rYrZsf r(�
_make_unoprdRs����
��
��Nr*c�@�V^8�dQhR\PRRR\P\,R\P\,R\P\P
,R\R\R	\P\,/#)
r$r/rPr�name�filename�stream�
defer_init�	optimizedr&)r
�Templater4�OptionalrD�TextIO�bool)r's"r(r)r)es�����
�.�.�����*�*�S�/���j�j��o�	�

�J�J�q�x�x� ���
����Z�Z��_�r*c���\V\P4'g\R4hVP	WW4WV4pVPV4VfVPP4#R#)z+Generate the python source for a node tree.z Can't compile non template nodesN)�
isinstancer
rk�	TypeError�code_generator_classr<rh�getvalue)r/rPrfrgrhrirj�	generators&&&&&&& r(�generateruesc���d�E�N�N�+�+��:�;�;��0�0��8�Z��I��O�O�D��
�~����(�(�*�*�r*c�D�V^8�dQhR\PR\/#�r$�valuer&)r4r5rn)r's"r(r)r)}s��������4�r*c��VeV\JgV\JdR#\V4\\\
\\\\09dR#\V4\\\\09d5\;QJdRV4F'dKR#	R#!RV44#\V4\JdQ\;QJd*RVP!44F'dKR#	R#!RVP!444#R#)z)Does the node have a safe representation?Tc3�8"�TFp\V4x�K	R#5ir8��
has_safe_repr)�.0�vs& r(�	<genexpr>� has_safe_repr.<locals>.<genexpr>�s���3�U��=��#�#�U���Fc3�b"�TF%wr\V4;'d\V4x�K'	R#5ir8r{�r}�kr~s&  r(rr��s'���S�]�T�Q�=��#�8�8�
�a�(8�8�]�s�/�/)�NotImplemented�Ellipsis�typern�int�float�complex�rangerDr	�tuple�list�set�	frozenset�all�dict�items�rxs&r(r|r|}s����}���/�5�H�3D���E�{�t�S�%��%��f�E�E���E�{�u�d�C��3�3��s�3�U�3�s�s�3�s�3�s�3�U�3�3�3��E�{�d���s�S�U�[�[�]�S�s�s�S�s�S�s�S�U�[�[�]�S�S�S�r*c���V^8�dQhR\P\P,R\P\,R\P
\,/#)r$r
�namesr&)r4�Iterabler
�NoderD�Set)r's"r(r)r)�sA�����:�:�e�j�j�!��*+�*�*�S�/���U�U�3�Z�r*c��\V4pVFpVPV4K	VP# \dTP#i;i)z�Check if the names passed are accessed undeclared.  The return value
is a set of all the undeclared names from the sequence of names found.
)�UndeclaredNameVisitorr<�VisitorExit�
undeclared)r
r�rWr/s&&  r(�find_undeclaredr��sW��$�E�*�G�
��D��M�M�$���������
������
�s�3�A�Ac�2a�]tRt^�toV3RlRltRtVtR#)�MacroRefc�v<�V^8�dQhRS[PS[PS[P3,RR/#�r$r/r&N)r4�Unionr
�Macro�	CallBlock)r'�
__classdict__s"�r(r)�MacroRef.__annotate__�s1���&�&�Q�W�W�U�[�[�%�/�/�%A�B�&�t�&r*c�<�WnRVnRVnRVnR#�FN)r/�accesses_caller�accesses_kwargs�accesses_varargs�r-r/s&&r(�__init__�MacroRef.__init__�s���	�$���$��� %��r*)r�r�r�r/N)�__name__�
__module__�__qualname__�__firstlineno__r��__static_attributes__�__classdictcell__�r�s@r(r�r��s����&�&r*r�c�xa�]tRt^�toRtRV3RlRlltV3RlRltR
V3RlRlltV3R	lR
lt]t	Rt
VtR#)r1z&Holds compile time information for us.Nc�v<�V^8�dQhRS[RS[PR,RS[PS[,RR/#)r$r:�parentr1�levelr&N)rr4rlr�)r'r�s"�r(r)�Frame.__annotate__�sD���1 �1 ��1 ��
�
�7�#�1 ��z�z�#��	1 �

�1 r*c�X�WnW nVf(\VR7VnRVnRVnRVnMO\VPVR7VnVPVnVP
VnVPVnRVnRVnRVn	RVn
RVnR#)N�r�F)r:r�r�symbols�require_output_check�buffer�block�toplevel�	rootlevel�
loop_frame�block_frame�
soft_frame)r-r:r�r�s&&&&r(r��Frame.__init__�s���!�
����>�"��/�D�L�).�D�%�,0�D�K�+/�D�J�#�6�>�>��?�D�L�(.�(C�(C�D�%� �-�-�D�K����D�J���
�
��� ��� ���
 ��r*c�<�V^8�dQhRR/#�r$r&zte.Self�)r'r�s"�r(r)r��s�����i�r*c���\PVP4pVPP	VP4VP
P
4VnV#)z!Create a copy of the current one.)�object�__new__�	__class__�__dict__�updater��copy�r-�rvs& r(r��
Frame.copy�sC��
�^�^�D�N�N�
+��
�����4�=�=�)��\�\�&�&�(��
��	r*c�$<�V^8�dQhRS[RR/#)r$�isolatedr&r1�rn)r'r�s"�r(r)r��s���*�*�d�*�w�*r*c��V'd3\VPVPP^,R7#\VPV4#)zReturn an inner frame.r�)r1r:r�r�)r-r�s&&r(�inner�Frame.inner�s6�������d�l�l�.@�.@�1�.D�E�E��T�]�]�D�)�)r*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)r��s�����i�r*c�B�VP4pRVnRVnV#)z�Return a soft frame.  A soft frame may not be modified as
standalone thing as it shares the resources with the frame it
was created of, but it's not a rootlevel frame any longer.

This is only used to implement if-statements and conditional
expressions.
FT)r�r�r�r�s& r(�soft�
Frame.soft�s"���Y�Y�[�������
��	r*)r�r�r�r:r�r�r�r�r�r�r�)NN�F)r�r�r�r��__doc__r�r�r�r��__copy__r�r�r�s@r(r1r1�s8����0�1 �1 �f��*�*����Hr*r1c��]tRt^�tRtRtR#)r�z?Exception used by the `UndeclaredNameVisitor` to signal a stop.r�N�r�r�r�r�r�r�r�r*r(r�r��s��Ir*r�c�la�]tRt^�toRtV3RlRltV3RlRltV3RlRltV3RlR	ltR
t	Vt
R#)�DependencyFinderVisitorz.A visitor that collects filter and test calls.c�<�V^8�dQhRR/#�r$r&Nr�)r'r�s"�r(r)�$DependencyFinderVisitor.__annotate__�s���'�'�$�'r*c�B�\4Vn\4VnR#r8)r��filters�tests�r-s&r(r�� DependencyFinderVisitor.__init__�s��#&�5���!$���
r*c�8<�V^8�dQhRS[PRR/#r�)r
�Filter)r'r�s"�r(r)r�s���$�$����$�$�$r*c�r�VPV4VPPVP4R#r8)�
generic_visitr��addrfr�s&&r(�visit_Filter�$DependencyFinderVisitor.visit_Filters&�����4� ���������#r*c�8<�V^8�dQhRS[PRR/#r�)r
�Test)r'r�s"�r(r)r�s���"�"�u�z�z�"�d�"r*c�r�VPV4VPPVP4R#r8)r�r�r�rfr�s&&r(�
visit_Test�"DependencyFinderVisitor.visit_Tests$�����4� ��
�
���t�y�y�!r*c�8<�V^8�dQhRS[PRR/#r��r
�Block)r'r�s"�r(r)r�s���'�'����'��'r*c��R#)zStop visiting at blocks.Nr�r�s&&r(�visit_Block�#DependencyFinderVisitor.visit_Block��r*)r�r�N)r�r�r�r�r�r�r�r�r�r�r�r�s@r(r�r��s0����8�'�'�$�$�"�"�'�'r*r�c�Za�]tRtRtoRtV3RlRltV3RlRltV3RlRltR	tVt	R
#)r�iz�A visitor that checks if a name is accessed without being
declared.  This is different from the frame visitor as it will
not stop at closure frames.
c�H<�V^8�dQhRS[PS[,RR/#)r$r�r&N)r4r�rD)r'r�s"�r(r)�"UndeclaredNameVisitor.__annotate__s#���,�,�a�j�j��o�,�$�,r*c�D�\V4Vn\4VnR#r8)r�r�r�)r-r�s&&r(r��UndeclaredNameVisitor.__init__s����Z��
�&)�e��r*c�8<�V^8�dQhRS[PRR/#r�)r
�Name)r'r�s"�r(r)rs���*�*�u�z�z�*�d�*r*c�@�VPR8XdhVPVP9dMVPP	VP4VPVP8Xd\4hR#VPP
VP4R#)�loadN)�ctxrfr�r�r�r��discardr�s&&r(�
visit_Name� UndeclaredNameVisitor.visit_Namesh���8�8�v��$�)�)�t�z�z�"9��O�O����	�	�*����$�*�*�,�!�m�#�-�
�J�J���t�y�y�)r*c�8<�V^8�dQhRS[PRR/#r�r�)r'r�s"�r(r)r!s���&�&����&��&r*c��R#)zStop visiting a blocks.Nr�r�s&&r(r��!UndeclaredNameVisitor.visit_Block!r�r*)r�r�N)
r�r�r�r�r�r�rr�r�r�r�s@r(r�r�s(�����
,�,�*�*�&�&r*r�c��]tRtRtRtRtR#)�CompilerExiti%z�Raised if the compiler encountered a situation where it just
doesn't make sense to further process the code.  Any block that
raises such an exception is not further processed.
r�Nr�r�r*r(rr%s��r*rc�Ba�]tRtRtoR�V3RlRllt]V3RlRl4tV3RlRltV3R	lR
ltV3RlRlt	R�V3R
lRllt
V3RlRltR�V3RlRlltR�V3RlRllt
V3RlRltR�V3RlRlltV3RlRltV3RlRltR�V3RlRlltR�V3RlR lltR�V3R!lR"lltV3R#lR$ltV3R%lR&ltR�V3R'lR(lltR�V3R)lR*lltV3R+lR,ltV3R-lR.ltV3R/lR0ltV3R1lR2ltV3R3lR4ltV3R5lR6ltV3R7lR8ltV3R9lR:lt V3R;lR<lt!V3R=lR>lt"V3R?lR@lt#V3RAlRBlt$V3RClRDlt%V3RElRFlt&V3RGlRHlt'V3RIlRJlt(V3RKlRLlt)R�V3RMlRNllt*V3ROlRPlt+V3RQlRRlt,V3RSlRTlt-V3RUlRVlt.V3RWlRXlt/V3RYlRZlt0V3R[lR\lt1V3R]lR^lt2V3R_lR`lt3V3RalRblt4V3RclRdlt5V3RelRflt6V3RglRhlt7!RiRj]8Pr4t:];V3RklRll4t<Rt=V3RmlRnlt>V3RolRplt?V3RqlRrlt@V3RslRtltAV3RulRvltBV3RwlRxltCV3RylRzltDV3R{lR|ltEV3R}lR~ltFV3RlR�ltGV3R�lR�ltHV3R�lR�ltIV3R�lR�ltJV3R�lR�ltKV3R�lR�ltL]M!R�4tN]M!R�4tO]M!R�4tP]M!R�4tQ]M!R�4tR]M!R�4tS]M!R�4tT]M!R�4tU]M!R�4tV]W!R�4tX]W!R�4tY]W!R�4tZ][V3R�lR�l4t\][V3R�lR�l4t]V3R�lR�lt^][V3R�lR�l4t_][V3R�lR�l4t`V3R�lR�lta]bV3R�lR�l4tc][V3R�lR�l4td][V3R�lR�l4te][V3R�lR�l4tf][R�V3R�lR�ll4tgV3R�lR�lthV3R�lR�ltiV3R�lR�ltjV3R�lR�ltkV3R�lR�ltlV3R�lR�ltmV3R�lR�ltnV3R�lR�ltoV3R�lR�ltpV3R�lR�ltqV3R�lR�ltrV3R�lR�ltsV3R�lR�lttV3R�lR�ltuV3R�lR�ltvV3R�ltwR�txVtyR#)�r.i,Nc�<�V^8�dQhRRRS[PS[,RS[PS[,RS[PS[P,RS[RS[RR	/#)
r$rPrrfrgrhrirjr&N)r4rlrDrmrn)r'r�s"�r(r)�CodeGenerator.__annotate__-sw���G4�G4�"�G4��j�j��o�G4��*�*�S�/�	G4�
�
�
�1�8�8�$�G4��
G4��G4�
�G4r*c��Vf\4pWnW nW0nW@nRVnWPnRVnV'd\V4Vn/Vn	/Vn
^VnRVn^Vn
/Vn/Vn.VnRVn^Vn^VnRVn^Vn^Vn.Vn.VnR.VnR#)NFT�context)rrPrfrgrh�created_block_contextrir9r�import_aliases�blocks�extends_so_far�has_known_extends�code_linenor�r��
debug_info�_write_debug_info�
_new_lines�
_last_line�_first_write�_last_identifier�_indentation�
_assign_stack�_param_def_block�_context_reference_stack)r-rPrfrgrhrirjs&&&&&&&r(r��CodeGenerator.__init__-s����>��Z�F�&���	� �
���%*��"�$��04����&�{�3�D�N�13���13��� ���
"'������(*��
�)+���68���26���������!���!"������24���57���*3���%r*c� <�V^8�dQhRS[/#�r$r&r�)r'r�s"�r(r)rws���*�*�4�*r*c��VPRJ#r8)r9r�s&r(rj�CodeGenerator.optimizedvs���~�~�T�)�)r*c�*<�V^8�dQhRS[RS[RR/#)r$�msg�linenor&zte.NoReturn)rDr�)r'r�s"�r(r)r|s'���L�L��L�S�L�]�Lr*c�D�\WVPVP4h)z*Fail with a :exc:`TemplateAssertionError`.)rrfrg)r-r-r.s&&&r(�fail�CodeGenerator.fail|s��$�S�$�)�)�T�]�]�K�Kr*c� <�V^8�dQhRS[/#r)�rD)r'r�s"�r(r)r�s���,�,�c�,r*c�R�V;P^,
unRVP2#)zGet a new unique identifier.�t_)r"r�s&r(�temporary_identifier�"CodeGenerator.temporary_identifier�s'������"���D�)�)�*�+�+r*c�$<�V^8�dQhRS[RR/#�r$r0r&N�r1)r'r�s"�r(r)r�s���/�/�E�/�d�/r*c�l�VP4VnVPVPR24R#)z7Enable buffering for the frame from that point onwards.z = []N)r6r��	writeline�r-r0s&&r(r��CodeGenerator.buffer�s)���0�0�2������%�,�,��u�-�.r*c�*<�V^8�dQhRS[RS[RR/#)r$r0�force_unescapedr&N�r1rn)r'r�s"�r(r)r�s%���9�9��9�-1�9�	
�9r*c�J�V'g�VPP'd�VPR4VP4VPRVPR24VP4VPR4VP4VPRVPR24VP4R#VPP'd"VPRVPR24R#VPRVPR24R#)z(Return the buffer contents of the frame.zif context.eval_ctx.autoescape:zreturn Markup(concat(�))�else:zreturn concat(rON)r:r;r<�indentr��outdent�
autoescape)r-r0r@s&&&r(�return_buffer_contents�$CodeGenerator.return_buffer_contents�s�����~�~�&�&�&����@�A����
����!6�u�|�|�n�B�G�H��������w�'����
��������~�Q�?�@���������*�*�*����!6�u�|�|�n�B�G�H���������~�Q�7�8r*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)r�s������r*c�8�V;P^,
unR#)zIndent by one.N�r#r�s&r(rE�CodeGenerator.indent�s�����Q��r*c�$<�V^8�dQhRS[RR/#)r$�stepr&N)r�)r'r�s"�r(r)r�s���"�"�C�"��"r*c�8�V;PV,unR#)zOutdent by step.NrL)r-rOs&&r(rF�CodeGenerator.outdent�s�����T�!�r*c�b<�V^8�dQhRS[RS[PS[P,RR/#)r$r0r/r&N)r1r4rlr
r�)r'r�s"�r(r)r�s0���<�<��<�a�j�j����.D�<�PT�<r*c��VPfVPRV4R#VPVPR2V4R#)z%Yield or write into the frame buffer.N�yield �.append()r�r<)r-r0r/s&&&r(�start_write�CodeGenerator.start_write�s3���<�<���N�N�8�T�*��N�N�e�l�l�^�8�4�d�;r*c�$<�V^8�dQhRS[RR/#r9r:)r'r�s"�r(r)r�s�����u���r*c�H�VPeVPR4R#R#)z1End the writing process started by `start_write`.NrO)r�rSr=s&&r(�	end_write�CodeGenerator.end_write�s���<�<�#��J�J�s�O�$r*c�h<�V^8�dQhRS[RS[RS[PS[P
,RR/#)r$�sr0r/r&N)rDr1r4rlr
r�)r'r�s"�r(r)r�s:�������"��*+�*�*�U�Z�Z�*@��	
�r*c�l�VPW#4VPV4VPV4R#)z4Simple shortcut for start_write + write + end_write.N)rVrSrZ)r-r]r0r/s&&&&r(�simple_write�CodeGenerator.simple_write�s)��	
����%��
�
�1�
����u�r*c�b<�V^8�dQhRS[PS[P,RS[RR/#)r$r
r0r&N)r4r�r
r�r1)r'r�s"�r(r)r�s/���	�	��
�
�5�:�:� 6�	�u�	��	r*c��VPR4VFpVPW24K	R# \dR#i;i)z�Visit a list of nodes as block in a frame.  If the current frame
is no buffer a dummy ``if 0: yield None`` is written automatically.
�passN)r<r<r)r-r
r0r/s&&& r(�
blockvisit�CodeGenerator.blockvisit�s;��	��N�N�6�"����
�
�4�'����	��	�s�+/�>�>c�$<�V^8�dQhRS[RR/#)r$�xr&Nr3)r'r�s"�r(r)r�s�����s��t�r*c�"�VP'd�VP'g�VPPRVP,4V;PVP,
unVP
e9VPPVP
VP34RVnRVnVPPRVP,4^VnVPPV4R#)z&Write a string into the output stream.�
NFz    )	rr!rhrSrrr�appendr#)r-rgs&&r(rS�CodeGenerator.write�s����?�?�?��$�$�$����!�!�$����"8�9�� � �D�O�O�3� ��)�)�5��O�O�*�*�D�,B�,B�D�DT�DT�+U�V�-1�D�*� %�D���K�K���f�t�'8�'8�8�9��D�O������!�r*c�h<�V^8�dQhRS[RS[PS[P,RS[RR/#)r$rgr/�extrar&N)rDr4rlr
r�r�)r'r�s"�r(r)r�s:��������J�J�u�z�z�2��BE��	
�r*c�J�VPW#4VPV4R#)z!Combination of newline and write.N)�newlinerS)r-rgr/rms&&&&r(r<�CodeGenerator.writeline�s��	
���T�!��
�
�1�
r*c�b<�V^8�dQhRS[PS[P,RS[RR/#)r$r/rmr&N)r4rlr
r�r�)r'r�s"�r(r)r�s/���*�*�A�J�J�u�z�z�2�*�#�*�d�*r*c���\VP^V,4VnVeBVPVP8wd%VPVnVPVnR#R#R#)z/Add one or more newlines before the next write.N)�maxrr.r r)r-r/rms&&&r(ro�CodeGenerator.newline�sL���d�o�o�q�5�y�9��������t��� >�%)�[�[�D�"�"�k�k�D�O�!?�r*c	�<�V^8�dQhRS[PS[PS[PS[P
3,RS[RS[PS[PS[	S[P3,,RR/#)r$r/r0�extra_kwargsr&N)r4r�r
�Callr�r�r1rl�MappingrDr5)r'r�s"�r(r)r�si���7/�7/��g�g�e�j�j�%�,�,��
�
�:�;�7/��7/��j�j����3����:�!6�7�	7/�

�7/r*c��\;QJdAR\RVP4T;'gR44F'gKRM6	RM2!R\RVP4T;'gR444pVPF%pVP	R4VPWR4K'	V'gjVPF%pVP	R4VPWb4K'	Ve1VP
4FwrxVP	RVRV24K	VP'd.VP	R4VPVPV4V'Ed'VPeVP	R	4MVP	R
4VPFOpVP	VP:R24VPVPV4VP	R4KQ	Ve2VP
4FwrxVP	V:RVR24K	VPeAVP	R4VPVPV4VP	R
4R#VP	R4R#VPe0VP	R4VPVPV4R#R#)aWrites a function call to the stream for the current node.
A leading comma is added automatically.  The extra keyword
arguments may not include python keywords otherwise a syntax
error could occur.  The extra keyword arguments should be given
as python dict.
c3�j"�TF)p\\P!\V44x�K+	R#5ir8)�is_python_keywordr4�castrD)r}r�s& r(r�*CodeGenerator.signature.<locals>.<genexpr>�s)���
�L��
�a�f�f�S�!�n�-�-�L�s�13c3�8"�TFqPx�K	R#5ir8)�key�r}rgs& r(rr}�s���7�;�a�E�E�;�r�TFrLN�=z, *z
, **dict({z, **{�: z}, **rO�}z, **r�)�anyrr2�argsrSr<r��dyn_args�
dyn_kwargsrrx)	r-r/r0rv�kwarg_workaround�arg�kwargrrxs	&&&&     r(�	signature�CodeGenerator.signature�s���3�
��7�4�;�;�7��9K�9K��L�
�3�3�3�
��7�4�;�;�7��9K�9K��L�
�
��
�9�9�C��J�J�t���J�J�s�"�� ������
�
�4� ��
�
�5�(�%��'�".�"4�"4�"6�J�C��J�J��C�5��%��1�2�#7��=�=�=��J�J�u���J�J�t�}�}�e�,������*��
�
�<�(��
�
�7�#������
�
�e�i�i�]�"�-�.��
�
�5�;�;��.��
�
�4� �%��'�".�"4�"4�"6�J�C��J�J�#���5�'��4�5�#7����*��
�
�7�#��
�
�4�?�?�E�2��
�
�3���
�
�3��
�_�_�
(��J�J�v���J�J�t����.�)r*c�\<�V^8�dQhRS[PS[P,RR/#)r$r
r&N)r4r�r
r�)r'r�s"�r(r)rs(���,�,�q�z�z�%�*�*�'=�,�$�,r*c
��\4pVFpVPV4K	VPVPR3VPVPR33EFwrEp\	V4EFpWt9dVP4WG&VP
R4VP4VP
WG,RVRV:R24VP4VP
R4VP4VP
R4VP
R	WG,R
24VP4VP
RVRRR
V:R24VP4VP4EK
	EK!	R#)a�Find all filter and test names used in the template and
assign them to variables in the compiled namespace. Checking
that the names are registered with the environment is done when
compiling the Filter and Test nodes. If the node is in an If or
CondExpr node, the check is done at runtime instead.

.. versionchanged:: 3.0
    Filters and tests in If and CondExpr nodes are checked at
    runtime instead of compile time.
r�r��try:z = environment.�[�]zexcept KeyError:z
@internalcode�def z
(*unused):zraise TemplateRuntimeError("No N� named z	 found.")���)	r�r<r�r��sortedr6r<rErF)r-r
rWr/�id_mapr��
dependencyrfs&&      r(�pull_dependencies�CodeGenerator.pull_dependenciessC��*�+���D��M�M�$����\�\�7�?�?�I�6��
�
��
�
��
�*
�%�F�:��u�
���%�#'�#<�#<�#>�F�L����v�&����
����&�,���z�l�!�D�8�ST�U�V��������1�2����
�����/�����f�l�^�:�>�?����
����5�j��"�o�5F��d�X�Y�0����������)&�*
r*c�$<�V^8�dQhRS[RR/#r9r:)r'r�s"�r(r)rHs���>�>��>�4�>r*c	���.pVPPP4F�wpwrEV\8XdKV\8Xd,VPVRVP
4RV:R24KKV\8XdVPVRV24KnV\8XdVPV4K�\R4h	V'd&VPRPV4R24R#R#)� = rMrOzunknown load instruction�
 = missingN)r��loadsr�rrr<�get_resolve_funcr
rrj�NotImplementedError�join)r-r0�undefs�target�action�params&&    r(�enter_frame�CodeGenerator.enter_frameHs�����',�}�}�':�':�'@�'@�'B�#�F�O�V��+�+���+�+����&���T�-B�-B�-D�,E�Q�u�i�q�Q�R��>�)����&���U�G�4�5��-�-��
�
�f�%�)�*D�E�E�(C���N�N�e�j�j��0�1��<�=�r*c�*<�V^8�dQhRS[RS[RR/#)r$r0�with_python_scoper&NrA)r'r�s"�r(r)rXs'���B�B��B�4�B�D�Br*c���V'g`.pVPPFpVPV4K	V'd&VPRP	V4R24R#R#R#)r�r�N)r�r�rjr<r�)r-r0r�r�r�s&&&  r(�leave_frame�CodeGenerator.leave_frameXsT�� ��F��-�-�-�-���
�
�f�%�.�����%�*�*�V�"4�!5�Z�@�A��	!r*c�,<�V^8�dQhRS[RS[RS[/#)r$�async_value�
sync_valuer&r3)r'r�s"�r(r)r`s(���H�H��H�C�H�QT�Hr*c�B�VPP'dV#T#r8)rP�is_async)r-r�r�s&&&r(�choose_async�CodeGenerator.choose_async`s��"�.�.�7�7�7�{�G�Z�Gr*c�&<�V^8�dQhRS[RS[/#)r$rfr&r3)r'r�s"�r(r)rcs���2�2��2��2r*c�,�VP4RV2#)r�)r�)r-rfs&&r(�func�CodeGenerator.funccs���#�#�%�&�d�4�&�1�1r*c�<�V^8�dQhRS[PS[PS[P3,RS[RS[PS[S[3,/#)r$r/r0r&)r4r�r
r�r�r1�Tupler�)r'r�s"�r(r)rfsM���Q �Q ��G�G�E�K�K����8�9�Q �BG�Q �	
������	!�Q r*c
�@�VP4pVPPV4\V4pRp\	4p.p\VP4FxwrxVPR8XdTpVPR9dVPVP4VPVPPVP44Kz	\VPR4p	RV	9deVe0VPV\VP4,
,M*VPVPP%R44RVnRV	9d9RV9d2VPVPP%R44RVnRV	9d9RV9d2VPVPP%R44RVnRVnVPPV4VP/VP1R4R	R
P3V4R2V4VP54VP7V4VP9V4VP;V4\VP4F�wrxVPPVP4p
VP/RV
R
24VP54VPV\VP4,
,pVP/V
R24VP=W�4VP?V
4VPA4K�	VPC4VPEVPV4VPGVRR7VPIVRR7VPA4W#3# \d!TP!RTP"4EL�i;i \d4TP/T
RTP:RTP:R24L�i;i)z/Dump the function def of a macro or call block.N�callerr2�varargszhWhen defining macros or call blocks the special "caller" argument must be omitted or be given a default.TF�macrorMrL�):�if � is missing:r�z = undefined("parameter z was not provided", name=rO)r@�r�)r2r�)r�r2r�)%r�r��analyze_noder�r��	enumerater�rfr�rj�refr��body�defaults�len�
IndexErrorr0r.�declare_parameterr�r�r�r�r<r�r�rEr�r��push_parameter_definitionsr<�mark_parameter_storedrF�pop_parameter_definitionsrdrHr�)r-r/r0�	macro_ref�explicit_caller�skip_special_paramsr��idxr�r�r��defaults&&&         r(�
macro_body�CodeGenerator.macro_bodyfsP�����
��
�
�
�"�"�4�(��T�N�	���!�e����!�$�)�)�,�H�C��x�x�8�#�"%���x�x�0�0�#�'�'����1��K�K��
�
�)�)�#�(�(�3�4�-�%�T�Y�Y�0O�P�
��z�!��*���M�M�/�C��	�	�N�"B�C����E�M�M�;�;�H�E�F�(,�I�%��z�!�h�6I�&I��K�K��
�
�7�7��A�B�(,�I�%��
�"�y�8K�'K��K�K��
�
�7�7�	�B�C�)-�I�&�&+��"�
�
�
�"�"�4�(����$�)�)�G�,�-�Q�t�y�y���.?�r�B�D�I����
����E��������'�'��.�!�$�)�)�,�H�C��-�-�#�#�C�H�H�-�C��N�N�S���\�2�3��K�K�M�	
+��-�-��c�$�)�)�n�(<�=�����#��c�{�+��
�
�7�*��&�&�s�+��L�L�N�-� 	
�&�&�(�����	�	�5�)��#�#�E�4�#�@�����$��7���������e"���I�I�1����	���B�
�����e�3�C�H�H�<�@� �X�X�L��+��
�s$�8-N1�-O�1'O�O�;P�Pc�*<�V^8�dQhRS[RS[RR/#)r$r�r0r&N)r�r1)r'r�s"�r(r)r�s"���

�

�8�

�E�

�d�

r*c
�l�RPRVPP44p\VPRR4p\	VPP4^8Xd
VR,
pVPRV:RVRVP:RVP:RVP:R	24R#)
z<Dump the macro definition for the def created by macro_body.rLc3�L"�TFp\VP4x�K	R#5ir8)�reprrfr�s& r(r�*CodeGenerator.macro_def.<locals>.<genexpr>�s���H�4G�q�d�1�6�6�l�l�4G�s�"$rfN�,zMacro(environment, macro, z, (z), z, context.eval_ctx.autoescape))	r�r/r��getattrr�rSr�r�r�)r-r�r0�	arg_tuplerfs&&&  r(�	macro_def�CodeGenerator.macro_def�s����I�I�H�I�N�N�4G�4G�H�H�	��y�~�~�v�t�4���y�~�~�"�"�#�q�(����I��
�
�(����I�;�?��)�)�,�B�y�/I�/I�.L�M��)�)�,�,J�
L�	
r*c�:<�V^8�dQhRS[PRS[/#)r$r/r&)r
r�rD)r'r�s"�r(r)r�s�����U�Z�Z��C�r*c�d�RVP2pVPeVRVP:2pV#)z.Return a human readable position for the node.zline � in )r.rf)r-r/r�s&& r(�position�CodeGenerator.position�s5���T�[�[�M�
"���9�9� ��4�t�D�I�I�=�)�B��	r*c�&<�V^8�dQhRS[RS[/#�r$r0r&�r1rD)r'r�s"�r(r)r�s���!�!��!�#�!r*c��RPRVPP4P444pRVR2#)rLc3�6"�TFwrV:RV2x�K	R#5i�r�Nr�)r}rfr�s&  r(r�3CodeGenerator.dump_local_context.<locals>.<genexpr>�s$���
� C����h�b���!� C�s��{r�)r�r��dump_storesr�)r-r0�items_kvs&& r(�dump_local_context� CodeGenerator.dump_local_context�sD���9�9�
� %�
�
� 9� 9� ;� A� A� C�
�
���H�:�R� � r*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)r�s���+�+�t�+r*c��VPR4VPR4VPR4VPR4VPR4R#)z�Writes a common preamble that is used by root and block functions.
Primarily this sets up common local helpers and enforces a generator
through a dead branch.
z$resolve = context.resolve_or_missingz!undefined = environment.undefinedzconcat = environment.concatzcond_expr_undefined = Undefinedzif 0: yield NoneN�r<r�s&r(�
write_commons�CodeGenerator.write_commons�sG��
	
���=�>����:�;����4�5�	
���8�9����)�*r*c�$<�V^8�dQhRS[RR/#r9r:)r'r�s"�r(r)r�s���I�I��I�$�Ir*c�l�VPPVPP44R#)a)Pushes all parameter targets from the given frame into a local
stack that permits tracking of yet to be assigned parameters.  In
particular this enables the optimization from `visit_Name` to skip
undefined expressions for parameters in macros as macros can reference
otherwise unbound parameters.
N)r%rjr��dump_param_targetsr=s&&r(r��(CodeGenerator.push_parameter_definitions�s%��	
���$�$�U�]�]�%E�%E�%G�Hr*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)r�s���$�$�4�$r*c�:�VPP4R#)z+Pops the current parameter definitions set.N)r%�popr�s&r(r��'CodeGenerator.pop_parameter_definitions�s�����!�!�#r*c�$<�V^8�dQhRS[RR/#�r$r�r&Nr3)r'r�s"�r(r)r�s���6�6�C�6�D�6r*c�r�VP'd%VPR,PV4R#R#)zpMarks a parameter in the current parameter definitions as stored.
This will skip the enforced undefined checks.
Nr�)r%r
�r-r�s&&r(r��#CodeGenerator.mark_parameter_stored�s.��� � � ��!�!�"�%�-�-�f�5�!r*c�$<�V^8�dQhRS[RR/#r�r3)r'r�s"�r(r)r�s���5�5�S�5�T�5r*c�<�VPPV4R#r8)r&rjr�s&&r(�push_context_reference�$CodeGenerator.push_context_reference�s���%�%�,�,�V�4r*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)r�s���,�,�t�,r*c�:�VPP4R#r8)r&r�r�s&r(�pop_context_reference�#CodeGenerator.pop_context_reference�s���%�%�)�)�+r*c� <�V^8�dQhRS[/#r)r3)r'r�s"�r(r)r�s���1�1��1r*c�(�VPR,#)�r��r&r�s&r(�get_context_ref�CodeGenerator.get_context_ref�s���,�,�R�0�0r*c� <�V^8�dQhRS[/#r)r3)r'r�s"�r(r)r�s���#�#�#�#r*c�D�VPR,pVR8XdR#VR2#)rr�resolvez.resolver�rr�s& r(r��CodeGenerator.get_resolve_func�s*���.�.�r�2���Y������"�"r*c�&<�V^8�dQhRS[RS[/#r�r�)r'r�s"�r(r)rs���U�U�E�U�c�Ur*c�L�VP4RVPV4R2#)z	.derived(rO)r
r�r=s&&r(�derive_context�CodeGenerator.derive_contexts,���&�&�(�)��4�3J�3J�5�3Q�2R�RS�T�Tr*c�&<�V^8�dQhRS[RS[/#)r$r�r&)rDrn)r'r�s"�r(r)rs���3�3�c�3�d�3r*c�T�VP'gR#WPR,9#)z4Checks if a given target is an undeclared parameter.Fr�)r%r�s&&r(�parameter_is_undeclared�%CodeGenerator.parameter_is_undeclareds%���$�$�$���.�.�r�2�2�2r*c�<�V^8�dQhRR/#r�r�)r'r�s"�r(r)rs���)�)�d�)r*c�L�VPP\44R#)z+Pushes a new layer for assignment tracking.N)r$rjr�r�s&r(�push_assign_tracking�"CodeGenerator.push_assign_trackings�����!�!�#�%�(r*c�$<�V^8�dQhRS[RR/#r9r:)r'r�s"�r(r)rs���)O�)O��)O�4�)Or*c�D�VPP4pVP'g%VP'gVP'd	V'gR#VUu.uFq3R,R8wgKVNK	pp\V4^8Xd�\
\V44pVPPV4pVP'dVPRV:RV24R#VP'dVPRV:RV24R#VPRV:RV24M�VP'dVPR4M5VP'dVPR	4MVPR
4\\V44FPwruV'dVPR4VPPV4pVPV:RV24KR	VPR
4VP'g�VP'gyV'do\V4^8Xd VPRV^,:R24R#RP\\ \V444pVPRVR24R#R#R#R#uupi)z_Pops the topmost level for assignment tracking and updates the
context variables if necessary.
N:NrN�_z_loop_vars[�] = z_block_vars[�
context.vars[z_loop_vars.update({z_block_vars.update({�context.vars.update({rLr��})�context.exported_vars.add(rOzcontext.exported_vars.update((rC)r$r�r�r�r�r��next�iterr�r�r<r�r�rSr��mapr�)	r-r0�varsrg�public_namesrfr�r��	names_strs	&&       r(�pop_assign_tracking�!CodeGenerator.pop_assign_trackings���!�!�%�%�'���!�!�!��$�$�$��N�N�N���#'�8�4�a�R�5�C�<���4��8��t�9��>���T�
�#�D��-�-�#�#�D�)�C���������T�H�D���>�?��� � � �����d�X�T�#��?�@���N�N�]�4�(�$�s�e�<�=��������4�5��"�"�"����5�6����6�7�&�v�d�|�4�	����J�J�t�$��m�m�'�'��-���
�
�d�X�R��u�-�.�	5�

�J�J�t��� � � ��)9�)9�)9�l��<� �A�%����!;�L��O�;N�a�P�Q� �I�I�c�$��|�0D�&E�F�	����!?�	�{�"�M�N�?K�)9� ��19s�J�3Jc�b<�V^8�dQhRS[PRS[PS[,RR/#�r$r/r0r&N)r
rkr4rlr1)r'r�s"�r(r)r=s7���x9�x9��N�N�x9�+,�:�:�e�+<�x9�	
�x9r*c	��
�VeQR4h\VPVP4p^RIHp^RIHpVPP'd\WT,4pM\V4pVPRRPV4,4VP'dRMRpVP\P4RJpVP\P4Fap	V	PVP 9d,VP#RV	P:R	2V	P$4W�P V	P&Kc	VP\P&4F�p
V
P(VP*9gK V
P(pVP-4;VP*V&pR
V9d1VP/R
^4wr�VPRV
RVR
V24K�VPRVR
V24K�	VPRVP:24VPVP1R4RVR2^R7VP34VP54\7V4pR\9VP:R,49d0VP<P?R4pVPVR24VP<PAV4R;Vn!Vn"T;'dVPF'*Vn$V'dVPR4VPKV4VPMVP:4VPOVP:V4VPQVRR7VPS4V'Ed.VPF'g"VP34VPR4VP34VPP'gVPR4M�VPR4VPR4VP34VPR4VP34VPR4VPS4VPS4VPR4VPS^VPF'*,4VP PU4EF�wpp	VPVP1R V,4RVR2V	^4VP34VP54\7V4pRVn+\9V	P:R-4pRV9d0VP<P?R4pVPVR24R!V9d7VP<P?R!4pVPVR"V:R#VR$24VP<PAV	4VVn,VPR%4VPKV4VPMV	P:4VPOV	P:V4VPQVRR7VPS4EK�	RPR&VP 44pVPR'VR(2^R7R)PR*VPZ44pVPR+V:24R#).Nzno root frame allowed)�async_exported)�exportedzfrom jinja2.runtime import rL�z, environment=environmentzblock z defined twice�.zfrom z import z as zimport zname = �rootz(context, missing=missingr�)rmr-z = TemplateReference(context)Tzparent_template = Noner��if parent_template is not None:z4yield from parent_template.root_render_func(context)z0agen = parent_template.root_render_func(context)r�zasync for event in agen:zyield eventzfinally: await agen.aclose()�block_�superz = context.super(z, block_rOz_block_vars = {}c3�0"�TFq:RV2x�K	R#5i)z: block_Nr�r�s& r(r�/CodeGenerator.visit_Template.<locals>.<genexpr>�s���!K�{�!�E��!��"5�{�s�z
blocks = {r��&c3�4"�TFwrVRV2x�K	R#5i�r�Nr�r�s&  r(rr;�s���G��t�q�1�#�Q�q�c�
��s�z
debug_info = r�)r-r9).rrPrf�runtimer2r3r�r�r<r�ri�findr
�Extends�find_allr�rr0r.�ImportedName�
importnamerr6�rsplitr�rEr�r1r�r�r�r�r�r�r�rr�r�r�rdr�rFr�r�r�r)r-r/r0r:r2r3�exported_names�envenv�have_extendsr��import_�imp�alias�module�objr�rfr�r��
blocks_kv_str�debug_kv_strs&&&                  r(�visit_Template�CodeGenerator.visit_Template=sz���}�5�5�5�}��t�/�/����;��+�%����$�$�$�#�H�$=�>�N�#�H�-�N����4�t�y�y��7P�P�Q������,G���y�y����/�t�;���]�]�5�;�;�/�E��z�z�T�[�[�(��	�	�F�5�:�:�.��?����N�&+�K�K��
�
�#�0��}�}�U�%7�%7�8�G��!�!��)<�)<�<��(�(��37�3L�3L�3N�N��#�#�C�(�5��#�:�"%�*�*�S�!�"4�K�F��N�N�U�6�(�(�3�%�t�E�7�#K�L��N�N�W�S�E��e�W�#=�>�9�	
�������
�.�/�	
����y�y�� �!�!:�6�(�"�E�Q�	�	
�	
���
������h����_�T�Y�Y�	�:�:��-�-�1�1�&�9�C��N�N�c�U�"?�@�A�
�
�
�"�"�4�(�+/�/�����%1�%P�%P�$�:P�:P�6P��"���N�N�3�4���������t�y�y�)�����	�	�5�)�����$��7������<��)�)�)����
����@�A��K�K�M��#�#�,�,�,����U�V����Q�R����v�&����
����9�:����
����}�-������������=�>��L�L��$�"8�"8�8�9�:� �;�;�,�,�.�K�D�%��N�N��9�9�X��_�-�.�.G��x�r�R���
�

�K�K�M���� � ��/�K�&*�K�#�(����5F�G�J���#�!�)�)�;�;�F�C�����#��&C�D�E��*�$�!�)�)�;�;�G�D�����#��&7��x�x��v�Q�O�P����,�,�U�3� $�K���N�N�-�.����[�)��"�"�5�:�:�.��O�O�E�J�J��4����[�D��A��L�L�N�7/�:�	�	�!K�t�{�{�!K�K�
�����]�O�2�6�a��@��x�x�G�t���G�G������|�&6�7�8r*c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r�s&���/�/����/�E�/�d�/r*c�v�^pVP'dPVP'dR#VP^8�d+VPR4VP	4V^,
pVP
'dVP
V4pMVP4pVP'dcVPRVP:R2V4VP	4VPRVP:R2V4VP4VPP'g4VPf&VPRVP:RVR	2V4M�VPR
VP:RVR	24VPR4VP	4VPVP4R2V4VP	4VPR
V4VP4VP4VPRVPRR424VPV4R#)z.Call a block and register it for the template.N�if parent_template is None:zif len(context.blocks[z]) <= 1:z+raise TemplateRuntimeError("Required block z not found")zyield from context.blocks[z][0](rOzgen = context.blocks[r��for event in gen:�event�	finally: �await gen.aclose()�gen.close())r�rrr<rE�scopedrr
�requiredrfrFrPr�r�r�r_)r-r/r0r�rs&&&  r(r��CodeGenerator.visit_Block�s������>�>�>��%�%�%���"�"�Q�&����<�=����
���
���;�;�;��)�)�%�0�G��*�*�,�G��=�=�=��N�N�3�D�I�I�=��I�4�P��K�K�M��N�N�=�d�i�i�]�,�W��
�
�L�L�N����(�(�(�U�\�\�-A��N�N�,�T�Y�Y�M��w�i�q�I�4�
�
�N�N�2�4�9�9�-�u�W�I�Q�O�P��N�N�6�"��K�K�M��N�N��$�$�&�'�'8�9��
�
�K�K�M����g�u�-��L�L�N��L�L�N��N�N��D�-�-�.B�M�R�S�T�
�	
���U�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rAr1)r'r�s"�r(r)r�s&���(!�(!�%�-�-�(!��(!�$�(!r*c���VP'gVPRVP4VP^8�dqVP'g"VPR4VP
4VPR4VP'd\4hVP4VPRV4VPVPV4VPRVP:R24VPR4VP
4VPR4VP4VP'dR	VnV;P^,
unR
#)zCalls the extender.z,cannot use extend from a non top-level scoper7z5raise TemplateRuntimeError("extended multiple times")z+parent_template = environment.get_template(rLrOz9for name, parent_block in parent_template.blocks.items():z8context.blocks.setdefault(name, []).append(parent_block)TN)r�r0r.rrr<rErrFr<�templaterSrfr��r-r/r0s&&&r(�
visit_Extends�CodeGenerator.visit_Extends�s
���~�~�~��I�I�D�d�k�k�R�
����"�
�)�)�)����@�A����
��N�N�R�S��%�%�%�"�n�$��������D�d�K��
�
�4�=�=�%�(��
�
�R��	�	�}�A�&�'����R�S����
����Q�R�����
�?�?�?�%)�D�"�	
���q� �r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Includer1)r'r�s"�r(r)rs&���8�8�%�-�-�8��8�$�8r*c�aa�VP'd"SPR4SP4Rp\VP\
P4'da\VPP\4'dRpMo\VPP\\34'dRpM<\VP\
P\
P34'dRpSPRVR2V4SPVPS4SPRSP:R24VP'dtSP!4SPR	4SP4SPR
4SP!4SPR4SP4RVV3R
llpVP"'d�SPRSP%S4R24SPR4SP4SPSP'4R24V!4SP!4SPRSP'RR424MFSP(P*'dSPR4V!4MSPR4VP'dSP!4R#R#)zHandles includes.r��get_or_select_template�get_template�select_templateztemplate = environment.rMrLrOzexcept TemplateNotFound:rcrDc��V^8�dQhRR/#r�r�)r's"r(r)�1CodeGenerator.visit_Include.<locals>.__annotate__-s��	�	�4�	r*c�l<�SP4SPRS4SP4R#)rVN)rEr_rF)r0r-s��r(�	loop_body�.CodeGenerator.visit_Include.<locals>.loop_body-s%����K�K�M����g�u�-��L�L�Nr*zNgen = template.root_render_func(template.new_context(context.get_all(), True, rCrUrWrXrYzGfor event in (await template._get_default_module_async())._body_stream:z6yield from template._get_default_module()._body_streamN)�ignore_missingr<rErpr_r
�ConstrxrDr�r�r��Listr<rSrfrF�with_contextr�r�rPr�)r-r/r0�	func_namerlsf&f  r(�
visit_Include�CodeGenerator.visit_Includes2��������N�N�6�"��K�K�M�,�	��d�m�m�U�[�[�1�1��$�-�-�-�-�s�3�3�*�	��D�M�M�/�/�%���?�?�-�	��
��
�
����U�Z�Z�'@�
A�
A�)�I����0���1�=�t�D��
�
�4�=�=�%�(��
�
�R��	�	�}�A�&�'������L�L�N��N�N�5�6��K�K�M��N�N�6�"��L�L�N��N�N�7�#��K�K�M�	�	�
�����N�N���+�+�E�2�3�2�7�
�

�N�N�6�"��K�K�M��N�N�d�/�/�1�2�2C�D�E��K��L�L�N��N�N��D�-�-�.B�M�R�S�T�
��
�
�
&�
&�
&��N�N�!�
�
�K��N�N�S�T������L�L�N�r*c�|<�V^8�dQhRS[PS[PS[P3,RS[RR/#r0)r4r�r
�Import�
FromImportr1)r'r�s"�r(r)rLsB���
U�
U��G�G�E�L�L�%�*:�*:�:�;�
U�DI�
U�	
�
Ur*c��VPVPR4R24VPVPV4VPRVP:R24VP
'd=RVPR42pVPVRVP
V4R24R
#VPRVPR4R	24R
#)�await zenvironment.get_template(rLz).�make_module�_asyncz(context.get_all(), True, rO�_get_default_modulez	(context)N)rSr�r<r_rfrqr�)r-r/r0�f_names&&& r(�_import_common�CodeGenerator._import_commonLs���	
�
�
�d�'�'��1�2�2K�L�M��
�
�4�=�=�%�(��
�
�R��	�	�}�B�'�(�����"�4�#4�#4�X�#>�"?�@�F��J�J��(�4�T�5L�5L�U�5S�4T�TU�V�
�
�J�J�,�T�->�->�x�-H�,I��S�Tr*c�><�V^8�dQhRS[PRS[RR/#r0)r
rvr1)r'r�s"�r(r)r[s+���	N�	N����	N�e�	N��	Nr*c��VPVPPVP4R2V4VP'd!VPRVP:R24VP
W4VP'dFVPPR4'g#VPRVP:R24R#R#R#)zVisit regular imports.r�r#r"r!�context.exported_vars.discard(rON)r<r�r�r�r�rSr~�
startswithr`s&&&r(�visit_Import�CodeGenerator.visit_Import[s������%�-�-�+�+�D�K�K�8�9��=�t�D��>�>�>��J�J��t�{�{�o�T�:�;����D�(��>�>�>�$�+�+�"8�"8��"=�"=��N�N�;�D�K�K�?�!�L�M�#>�>r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rwr1)r'r�s"�r(r)rfs(���5�5�U�%5�%5�5�e�5��5r*c	�:a�VPV4VPR4VPVS4.p.pVPEF`p\	V\
4'dVwrVMTpVP
SPPV4RV:R24VP
RSPPV4R24VP4VPV4PRR4PRR	4pR
VRV:2pVP
SPPV4RV:R
V:R24VP4SP'gEK$VPV4VPR4'dEKOVPV4EKc	V'd|\!V4^8Xd<V^,pVP
RV:RSPPV424M0RP#V3RlV44p	VP
RV	R24V'df\!V4^8Xd VP
RV^,:R24R#RP#\%\&V44p
VP
RV
R24R#R#)zVisit named imports.zincluded_template = z = getattr(included_template, z
, missing)r�r�r�z{{r�z}}z9the template {included_template.__name__!r} (imported on z%) does not export the requested name z = undefined(fz, name=rOr!r#r"rLc3�d<"�TF%q:RSPPV42x�K'	R#5ir�)r�r�)r}rfr0s& �r(r�1CodeGenerator.visit_FromImport.<locals>.<genexpr>�s-����%�GP�t�h�b����!2�!2�4�!8� 9�:�y�s�-0r$r%r�z)context.exported_vars.difference_update((rCN)rorSr~r�rpr�r<r�r�rEr��replacerFr�rjr�r�r�r)r�)r-r/r0�	var_names�discarded_namesrfrKr��message�names_kvr,s&&f        r(�visit_FromImport�CodeGenerator.visit_FromImportfsW������T���
�
�)�*����D�%�(��	����J�J�D��$��&�&�"���e����N�N��=�=�$�$�U�+�,�-/�/3�h�j�B�
�
�N�N�S����!2�!2�5�!9� :�,�G�H��K�K�M�
�}�}�T�*�2�2�3��=�E�E�c�4�P�H�!�!)�
�+7�7;�h�@�
�

�N�N��=�=�$�$�U�+�,�N�7�+�W�T�H�TU�V�
�
�L�L�N��~�~�~�� � ��'��'�'��,�,�#�*�*�5�1�9�<��9�~��"� ��|������t�h�d�5�=�=�;L�;L�T�;R�:S�T�U��9�9�%�GP�%������!7��z��E�F���?�#�q�(����!?��PQ�@R�?U�UV�W�X� �I�I�c�$��&@�A�	����?�	�{�"�M��r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Forr1)r'r�s"�r(r)r�s0���IP�IP�e�i�i�IP��IP�$�IPr*c���VP4pRVnVP4pVP4pVP;'g�R\VP	R'R7R(49;'go\
;QJd9RVP
\P44F'gKRM.	RM*!RVP
\P444pRpV'dVPPR4pVPPVRR7VP'dVPPVRR7VP'Ed�VP4pVPPVR	R7VPVP!V4R
2VP4VP#4VP%V4VPVP'RR44VP)VP*V4VP-R
4VP-VP'RR44VP-R4VP#4VPRVP4VP)VPV4VP-R4VP#4VPR4VP)VP*V4VP/^4VP1VRR7VP'dWVPVP!R4R2V4VP#4VP3V4VP2VnV'dVPVR24VP
\P44FEp	V	P6R8XgKV	P8R8XgK)VP;RV	P<4KG	VP'd%VP4p
VPV
R24VPVP'RR4V4VP)VP*V4V'd)VP-RVR
VP'R4R24MVP-R
4VP'dVP-XR24VP'dVP-R4M�VP>P@'dV'gVP-R4VP)VPBV4VP>P@'dV'gVP-R4VP'dVP-R4VP'dVP-R 4MTP-V'dR!MR4VP#4VP%V4VPR"4VPEVPFV4VP'dVPX
R#24VP/4TP1Y1P;'dVP'*R7VP'dtVPRX
R24VP#4VP%V4VPEVPV4VP1V4VP/4VP'd�VPIV4VP/4VPKW!4VP-VP'R$4R%24VP>P@'dVP-R4VP)VPBV4VP>P@'dVP-R4VP-R&4VPMV4VPN'd9VPNR),PQVPPR4R#R#)*T�loopr�)�onlyc3�8"�TFqPx�K	R#5ir8)rZ)r}r�s& r(r�*CodeGenerator.visit_For.<locals>.<genexpr>�s���H�-G�E�<�<�-G�r�FN)�
for_branch�else�testz(fiter):z
async for zfor r�zauto_aiter(fiter)�fiter�:r�rTr�z%(reciter, loop_render_func, depth=0):r��storez8Can't assign to special loop variable in for-loop targetz = 1rL�AsynczLoopContext(rM�reciterzauto_aiter(rOz&, undefined, loop_render_func, depth):z
, undefined):z_loop_vars = {}z = 0ryzloop(z, loop))r�)r�r�)*r�r��	recursiver��iter_child_nodesr�rBr
r�r�r�r��else_r�r6r<r�rEr�r�r<r�rSrFr�r�rr	rfr0r.rPr�r(rdr�rHrVrZr$�difference_update�stores)r-r/r0r��
test_frame�
else_frame�
extended_loop�loop_ref�loop_filter_funcrf�iteration_indicators&&&        r(�	visit_For�CodeGenerator.visit_For�s ���[�[�]�
� $�
���[�[�]�
��[�[�]�
�
�N�N�
I�
I���t�4�4�)�4�D�i�P�Q�
I�
I��s�H�T�]�]�5�;�;�-G�H�s�s�s�H�T�]�]�5�;�;�-G�H�H�		����!�)�)�;�;�F�C�H����'�'���'�@��:�:�:����+�+�D�V�+�D��9�9�9�#�8�8�:�����+�+�D�V�+�D��N�N�d�i�i�(8�9�:�(�C�T�Y�Y�O��K�K�M����Z�(��N�N�4�,�,�\�6�B�C��J�J�t�{�{�J�/��J�J�v���J�J�t�(�(�)<�g�F�G��J�J�s�O��K�K�M��N�N�5�$�)�)�,��J�J�t�y�y�*�-��J�J�s�O��K�K�M��N�N�8�$��J�J�t�{�{�J�/��L�L��O����Z�4��@�
�>�>�>��N�N��9�9�V�$�%�%J�K�T�
�
�K�K�M��K�K�
�#�!+� 1� 1�J����N�N�h�Z�z�2�3��M�M�%�*�*�-�D��x�x�7�"�t�y�y�F�':��	�	�N��K�K��.��:�:�:�"&�";�";�"=���N�N�1�2�$�7�8����t�(�(��v�>��E��
�
�4�;�;�
�+���J�J��H�:�T�$�*;�*;�G�*D�)E�\�R�S��J�J�v���9�9�9��J�J�*�+�1�-�.��>�>�>��J�J�y�!����(�(�(���
�
�=�)��J�J�t�y�y�%�(����(�(�(���
�
�3���9�9�9��J�J�s�O��>�>�>��J�J�?�@��J�J�-��S�A����
�����$����(�)�����	�	�:�.��:�:�:��N�N�1�2�$�7�8���������.�.�*K�*K����^�	�	
��:�:�:��N�N�S�!4� 5�Q�7�8��K�K�M����Z�(��O�O�D�J�J�
�3����Z�(��L�L�N��>�>�>��'�'�
�3��L�L�N����U�)��J�J�$�+�+�H�5�6�e�<�=����(�(�(��
�
�=�)��J�J�t�y�y�%�(����(�(�(��
�
�3���J�J�y�!��N�N�5�!��������r�"�4�4�Z�5G�5G�5N�5N�O�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Ifr1)r'r�s"�r(r)r(s&�����U�X�X��e���r*c��VP4pVPRV4VPVPV4VP	R4VP4VP
VPV4VP4VPF~pVPRV4VPVPV4VP	R4VP4VP
VPV4VP4K�	VP'dPVPR4VP4VP
VPV4VP4R#R#)r�r�zelif rDN)r�r<r<r�rSrErdr�rF�elif_r�)r-r/r0�if_framer�s&&&  r(�visit_If�CodeGenerator.visit_If(s����:�:�<�����u�d�#��
�
�4�9�9�h�'��
�
�3�����
�����	�	�8�,������Z�Z�E��N�N�7�E�*��J�J�u�z�z�8�,��J�J�s�O��K�K�M��O�O�E�J�J��1��L�L�N�
 ��:�:�:��N�N�7�#��K�K�M��O�O�D�J�J��1��L�L�N�	r*c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r=s&���/�/����/�E�/�d�/r*c���VPW4wr4VP4VP'dbVPP	R4'g!VPRVP:R24VP
RVP:R24VPVPPVP4R24VPWC4R#)r!r&rOr#r"r�N)
r�ror�rfr�rSr<r�r�r�)r-r/r0�macro_framer�s&&&  r(�visit_Macro�CodeGenerator.visit_Macro=s���!%����!=��������>�>�>��9�9�'�'��,�,��
�
�7��	�	�}�A�F�G��N�N�]�4�9�9�-�t�<�=��
�
�e�m�m�'�'��	�	�2�3�3�7�8����y�.r*c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)rGs&�����E�O�O��E��d�r*c���VPW4wr4VPR4VPWC4VPW!4VP	VP
VRR7VP
V4R#)z	caller = T)�forward_callerN)r�r<r�rV�
visit_Call�callrZ)r-r/r0�
call_framer�s&&&  r(�visit_CallBlock�CodeGenerator.visit_CallBlockGs[�� $���� <��
����{�#����y�-�����%�����	�	�5���>����u�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�FilterBlockr1)r'r�s"�r(r)rOs(���	'�	'�e�&7�&7�	'��	'�$�	'r*c�v�VP4pVPPV4VPV4VP	V4VPVPV4VPW!4VPVPV4VPV4VPV4R#r8)r�r�r�r�r�rdr�rVr��filterrZr�)r-r/r0�filter_frames&&& r(�visit_FilterBlock�CodeGenerator.visit_FilterBlockOs����{�{�}�����)�)�$�/�����&����L�!�����	�	�<�0�����%����$�+�+�|�4����u������&r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Withr1)r'r�s"�r(r)rZs&���
%�
%�u�z�z�
%�%�
%�D�
%r*c��VP4pVPPV4VPV4\	VP
VP4FHwrEVP4VPWC4VPR4VPWR4KJ	VPVPV4VPV4R#)r�N)
r�r�r�r��zip�targets�valuesror<rSrdr�r�)r-r/r0�
with_framer��exprs&&&   r(�
visit_With�CodeGenerator.visit_WithZs����[�[�]�
����'�'��-�����$�����d�k�k�:�L�F��L�L�N��J�J�v�*��J�J�u���J�J�t�#�	;�
	
����	�	�:�.�����$r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�ExprStmtr1)r'r�s"�r(r)rfs&���%�%�5�>�>�%�%�%�D�%r*c�`�VPV4VPVPV4R#r8)ror<r/r`s&&&r(�visit_ExprStmt�CodeGenerator.visit_ExprStmtfs �����T���
�
�4�9�9�e�$r*c�,a�]tRtRtoV3RltRtVtR#)�CodeGenerator._FinalizeInfoijc�<�V^8�dQh/S[PS[PRS[3,,;R&S[PS[,;R&#)r$.�const�src)r4rlrErD)r'r�s"�r(r)�(CodeGenerator._FinalizeInfo.__annotate__js9�����z�z�!�*�*�S�#�X�.�/�/��
�Z�Z��_��r*r�N)r�r�r�r��__annotate_func__r�r�r�s@r(�
_FinalizeInfor�js����r*r�c�N<�V^8�dQhRS[PRS[P/#rw�r4r5)r'r�s"�r(r)ros#���������1�5�5�r*c��\V4#)z�The default finalize function if the environment isn't
configured with one. Or, if the environment has one, this is
called on that function's output for constants.
r3r�s&r(�_default_finalize�CodeGenerator._default_finalizens���5�z�r*c� <�V^8�dQhRS[/#r))r�)r'r�s"�r(r)rxs���.�.�
�.r*c�aaa�SPe
SP#SP;poRpSPP'd�RpSPPo\P
R\PR\PR/P\P!S44pRpVfRVV3RllpMVVR2pVR8XdR	VVV3R
llpSPW4SnSP#)aIBuild the finalize function to be used on constants and at
runtime. Cached so it's only created once for all output nodes.

Returns a ``namedtuple`` with the following attributes:

``const``
    A function to finalize constant data at compile time.

``src``
    Source code to output around nodes to be evaluated at
    runtime.
Nzenvironment.finalize(r�context.eval_ctxrPc�X�V^8�dQhR\PR\P/#rwr�)r's"r(r)�2CodeGenerator._make_finalize.<locals>.__annotate__�s"��8�8�A�E�E�8�a�e�e�8r*c� <�S!S!V44#r8r�)rxr��env_finalizes&��r(�finalize�.CodeGenerator._make_finalize.<locals>.finalize�s���"�<��#6�7�7r*rLc�X�V^8�dQhR\PR\P/#rwr�)r's"r(r)r��s&��N�N����N�!�%�%�Nr*c�6<�S!S!SPV44#r8)rP)rxr�r�r-s&���r(r�r��s���&�|�D�4D�4D�e�'L�M�Mr*)
�	_finalizer�rPr�rr�eval_context�get�from_objr�)r-r�r��pass_argr�r�sf   @@r(�_make_finalize�CodeGenerator._make_finalizexs�����>�>�%��>�>�!�"�3�3�3��7������$�$�$�)�C��+�+�4�4�L�� � �)��%�%�'9��$�$�m���c��!�!�,�/��	
��H���8�8���h�Z�r�*���}�,�N�N��+�+�H�:����~�~�r*c�^<�V^8�dQhRS[PS[P,RS[/#)r$�groupr&)r4r�r5rD)r'r�s"�r(r)r�s(���#�#��
�
�1�5�5�(9�#�c�#r*c�*�\\V44#)z�Given a group of constant values converted from ``Output``
child nodes, produce a string to write to the template module
source.
)r�r)r-r�s&&r(�_output_const_repr� CodeGenerator._output_const_repr�s��
�F�5�M�"�"r*c�F<�V^8�dQhRS[PRS[RS[RS[/#)r$r/r0r�r&)r
r3r1r�rD)r'r�s"�r(r)r�s1���%�%��J�J�%�',�%�8E�%�	�%r*c��VPVP4pVPP'd\V4p\	V\
P4'd\V4#VPV4#)aTry to optimize a child of an ``Output`` node by trying to
convert it to constant, finalized data at compile time.

If :exc:`Impossible` is raised, the node is not constant and
will be evaluated at runtime. Any other exception will also be
evaluated at runtime for easier debugging.
)	�as_constr:rGrrpr
�TemplateDatarDr�)r-r/r0r�r�s&&&& r(�_output_child_to_const�$CodeGenerator._output_child_to_const�s]���
�
�e�n�n�-���>�>�$�$�$��5�M�E��d�E�.�.�/�/��u�:���~�~�e�$�$r*c�D<�V^8�dQhRS[PRS[RS[RR/#�r$r/r0r�r&N�r
r3r1r�)r'r�s"�r(r)r�s1���%�%��J�J�%�',�%�8E�%�	
�%r*c�6�VPP'dVPR4M?VPP'dVPR4MVPR4VPeVPVP4R#R#)zHOutput extra source code before visiting a child of an
``Output`` node.
z1(escape if context.eval_ctx.autoescape else str)(zescape(zstr(N)r:r;rSrGr��r-r/r0r�s&&&&r(�_output_child_pre�CodeGenerator._output_child_pre�sh���>�>�"�"�"��J�J�J�K�
�^�^�
&�
&�
&��J�J�y�!��J�J�v���<�<�#��J�J�x�|�|�$�$r*c�D<�V^8�dQhRS[PRS[RS[RR/#rr)r'r�s"�r(r)r�s1���	�	��J�J�	�',�	�8E�	�	
�	r*c�j�VPR4VPeVPR4R#R#)zGOutput extra source code after visiting a child of an
``Output`` node.
rON)rSr�rs&&&&r(�_output_child_post� CodeGenerator._output_child_post�s)��	
�
�
�3���<�<�#��J�J�s�O�$r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Outputr1)r'r�s"�r(r)r�s+���M�M����M�e�M��Mr*c�0�VP'd6VP'dR#VPR4VP4VP	4p.pVP
F�pVP'g6\V\
P4'g\
P!4hVPWRV4pT'd8\TR,\4'dTR,PT4K�TPT.4K�	VPe^\V4^8Xd VPVPR24MVPVPR24VP4VF�p\V\4'dTVP!V4pVPfVPRV,4KRVPVR,4KlVPfVPRV4MVP#V4VP%WrV4VP'Wr4VP)WrV4VPfK�VP+R4K�	VPe4VP-4TP\V4^8XdRMR4VP'dVP-4R#R# \
P\3dTPT4EK�i;i)	NrTrUz	.extend((rTr�rOrCr�)r�rr<rEr�r
r�rpr��
Impossibler��	Exceptionrjr�r�r�r�rorr<r
rSrF)	r-r/r0r�r��childr��item�vals	&&&      r(�visit_Output�CodeGenerator.visit_Output�sJ���%�%�%��%�%�%���N�N�8�9��K�K�M��&�&�(��;=��
�Z�Z�E�
��N�N�N�"�%��);�);�<�<��*�*�,�,��3�3�E�(�K���
�4��8�T�2�2��R�����&����U�G�$�/ �2�<�<�#��4�y�A�~����%�,�,��x�8�9����%�,�,��y�9�:��K�K�M��D��$��%�%��-�-�d�3���<�<�'��N�N�8�c�>�2��N�N�3��9�-��<�<�'��N�N�8�T�2��L�L��&��&�&�t�H�=��
�
�4�'��'�'��X�>��<�<�+��J�J�s�O�+�.�<�<�#��L�L�N��N�N�#�d�)�q�.�3�d�;��%�%�%��L�L�N�&��_�$�$�i�0�
����E�"��
�s�*AK$�$,L�Lc�><�V^8�dQhRS[PRS[RR/#r0)r
�Assignr1)r'r�s"�r(r)r.s&���(�(����(�e�(��(r*c��VP4\4pVP\P4F�pVP
V9dKVP
VP
4VPPVP
4pVPRVR24VP4VPR4VP4K�	VPV4VPVPV4VPR4VPVP V4VP#V4R#)zif not isinstance(z
, Namespace):zMraise TemplateRuntimeError("cannot assign attribute on non-namespace object")r�N)rr�rBr
�NSRefrfr�r�r�r<rErFror<r�rSr/r-)r-r/r0�	seen_refs�nsrefr�s&&&   r(�visit_Assign�CodeGenerator.visit_Assign.s����!�!�#�!$��	��]�]�5�;�;�/�E��z�z�Y�&���M�M�%�*�*�%��-�-�#�#�E�J�J�/�C��N�N�/��u�M�B�C��K�K�M��N�N�F�
�
�L�L�N�0� 	
���T���
�
�4�;�;��&��
�
�5���
�
�4�9�9�e�$�� � ��'r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�AssignBlockr1)r'r�s"�r(r)rMs(���&�&�e�&7�&7�&��&�$�&r*c�|�VP4VP4pRVnVPP	V4VPV4VP
V4VPVPV4VPV4VPVPV4VPR4VPeVPVPV4MVPRVPR24VPR4VPV4VP!V4R#)Fz9 = (Markup if context.eval_ctx.autoescape else identity)(N�concat(rO)rr�r�r�r�r�r�rdr�ror<r�rSr�r�r-r�)r-r/r0r�s&&& r(�visit_AssignBlock�CodeGenerator.visit_AssignBlockMs����!�!�#��k�k�m��,1��(����(�(��.�����%����K� �����	�	�;�/����T���
�
�4�;�;��&��
�
�N�O��;�;�"����d�k�k�;�7��J�J���!3�!3� 4�A�6�7��
�
�3��� � ��'�����%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rr1)r'r�s"�r(r)res&�����u�z�z��%��D�r*c	�~�VPR8XduVP'g%VP'gVP'd?VP'd-VPR,PVP4VPPVP4pVPR8XdqVPPV4pVe*V^,\8XdVPV4'd)VPRVP:RVRVR24R#VPV4R#)r�rNz(undefined(name=z) if z is missing else rOr�)
r	r�r�r�r$r�rfr�r��	find_loadrrrS)r-r/r0r�rs&&&  r(r�CodeGenerator.visit_Namees����8�8�w���N�N�N�e�.�.�.�%�2C�2C�2C��!�!�!��"�"�2�&�*�*�4�9�9�5��m�m����	�	�*��
�8�8�v���=�=�*�*�3�/�D�� ���G�1�1��4�4�S�9�9��
�
�&�t�y�y�m�5���=N�s�e�ST�U����
�
�3�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rr1)r'r�s"�r(r)r~s&���0�0����0�E�0�d�0r*c��VPPVP4pVPVRVP:R24R#)r�r�N)r�r�rfr<�attr)r-r/r0r�s&&& r(�visit_NSRef�CodeGenerator.visit_NSRef~s9��
�m�m����	�	�*�����#��a��	�	�}�A�.�/r*c�><�V^8�dQhRS[PRS[RR/#r0)r
ror1)r'r�s"�r(r)r�s&���"�"����"�E�"�d�"r*c���VPVP4p\V\4'dVP	\V44R#VP	\
V44R#r8)r�r:rpr�rSrDr�)r-r/r0rs&&& r(�visit_Const�CodeGenerator.visit_Const�sA���m�m�E�N�N�+���c�5�!�!��J�J�s�3�x� ��J�J�t�C�y�!r*c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r�s(�����u�'9�'9��%��D�r*c���VP\VPVP444R# \P
d%TPRTP:R24R#i;i�z6(Markup if context.eval_ctx.autoescape else identity)(rON)rSr�r�r:r
r�datar`s&&&r(�visit_TemplateData� CodeGenerator.visit_TemplateData�sW��	��J�J�t�D�M�M�%�.�.�9�:�;�����	��J�J�H����
�UV�W�
�	�s�37�5A0�/A0c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r�s&���.�.����.�E�.�d�.r*c��VPR4Rp\VP4F/wr4V'dVPR4VPWB4K1	TPV^8Xd	R4R#R4R#)rMrLz,)rONr��rSr�r�r<�r-r/r0r�rs&&&  r(�visit_Tuple�CodeGenerator.visit_Tuple�s[���
�
�3����"�4�:�:�.�I�C���
�
�4� ��J�J�t�#�/�	
�
�
�3�!�8�4�-��-r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rpr1)r'r�s"�r(r)r�s&�����u�z�z��%��D�r*c���VPR4\VP4F/wr4V'dVPR4VPWB4K1	VPR4R#)r�rLr�Nr9r:s&&&  r(�
visit_List�CodeGenerator.visit_List�sJ���
�
�3��"�4�:�:�.�I�C���
�
�4� ��J�J�t�#�/�	
�
�
�3�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Dictr1)r'r�s"�r(r)r�s&�����u�z�z��%��D�r*c�J�VPR4\VP4Fgwr4V'dVPR4VPVPV4VPR4VPVP
V4Ki	VPR4R#)r�rLr�r�N)rSr�r�r<rrxr:s&&&  r(�
visit_Dict�CodeGenerator.visit_Dict�sn���
�
�3��"�4�:�:�.�I�C���
�
�4� ��J�J�t�x�x��'��J�J�t���J�J�t�z�z�5�)�/�	
�
�
�3�r*�+�-�*�/z//z**�%�and�orznot c�><�V^8�dQhRS[PRS[RR/#r0)r
�Concatr1)r'r�s"�r(r)r�s&���������e���r*c�:�VPP'dRpM!VPP'dRpMRpVPVR24VPF%pVPWB4VPR4K'	VPR4R#)z8(markup_join if context.eval_ctx.volatile else str_join)�markup_join�str_joinz((rLrCN)r:r;rGrSr
r<)r-r/r0rrr�s&&&  r(�visit_Concat�CodeGenerator.visit_Concat�sx���>�>�"�"�"�R�I�
�^�^�
&�
&�
&�%�I�"�I��
�
�i�[��#�$��:�:�C��J�J�s�"��J�J�t���	
�
�
�4�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Comparer1)r'r�s"�r(r)r�s&�����%�-�-����$�r*c���VPR4VPVPV4VPFpVPW24K	VPR4R#)rMrON)rSr<r��opsrVs&&& r(�
visit_Compare�CodeGenerator.visit_Compare�sD���
�
�3���
�
�4�9�9�e�$��(�(�B��J�J�r�!���
�
�3�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Operandr1)r'r�s"�r(r)r�s&���%�%�%�-�-�%��%�$�%r*c��VPR\VP,R24VPVPV4R#)rNN)rS�	operatorsrCr<r�r`s&&&r(�
visit_Operand�CodeGenerator.visit_Operand�s3���
�
�Q�y����)�*�!�,�-��
�
�4�9�9�e�$r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Getattrr1)r'r�s"�r(r)r�s&���	�	�%�-�-�	��	�$�	r*c�X�VPP'dVPR4VPR4VPVPV4VPRVP
:R24VPP'dVPR4R#R#)�(await auto_await(zenvironment.getattr(rLrOrCN)rPr�rSr<r/r*r`s&&&r(�
visit_Getattr�CodeGenerator.visit_Getattr�s|�����$�$�$��J�J�+�,��
�
�)�*��
�
�4�9�9�e�$��
�
�R��	�	�}�A�&�'����$�$�$��J�J�t��%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Getitemr1)r'r�s"�r(r)r�s&���!�!�%�-�-�!��!�$�!r*c��\VP\P4'd]VP	VP
V4VP
R4VP	VPV4VP
R4R#VPP'dVP
R4VP
R4VP	VP
V4VP
R4VP	VPV4VP
R4VPP'dVP
R4R#R#)r�r�rczenvironment.getitem(rLrOrCN)	rpr�r
�Slicer<r/rSrPr�r`s&&&r(�
visit_Getitem�CodeGenerator.visit_Getitem�s����d�h�h����,�,��J�J�t�y�y�%�(��J�J�s�O��J�J�t�x�x��'��J�J�s�O����(�(�(��
�
�/�0��J�J�-�.��J�J�t�y�y�%�(��J�J�t���J�J�t�x�x��'��J�J�s�O����(�(�(��
�
�4� �)r*c�><�V^8�dQhRS[PRS[RR/#r0)r
rir1)r'r�s"�r(r)r�s&���)�)����)�E�)�d�)r*c�J�VPeVPVPV4VPR4VPeVPVPV4VPe0VPR4VPVPV4R#R#)Nr�)�startr<rS�stoprOr`s&&&r(�visit_Slice�CodeGenerator.visit_Slice�sq���:�:�!��J�J�t�z�z�5�)��
�
�3���9�9� ��J�J�t�y�y�%�(��9�9� ��J�J�s�O��J�J�t�y�y�%�(�!r*c	�<�V^8�dQhRS[PS[PS[P3,RS[RS[RS[PR,/#)r$r/r0�	is_filterr&N)r4r�r
r�r�r1rn�Iterator)r'r�s"�r(r)rsL���'�'��G�G�E�L�L�%�*�*�4�5�'�>C�'�PT�'�	
���D�	�'r*c#�"�VPP'dVPR4V'd`VPVPVP,R24VPPPVP4pM^VPVPVP,R24VPPPVP4pVfMVP'g;V'dRMRpVPRVRVP:R2VP4\PR\PR	\PR
/P\P!V44pVeVPVR24Rx�VPW4VPR4VPP'dVPR
4R#R#5i)rcrMNr�r�zNo r�r5rr�rPrLrOrC)rPr�rSr�rfr�r�r�r0r.rrr�r�r�)r-r/r0rsr��	type_namer�s&&&&   r(�_filter_test_common�!CodeGenerator._filter_test_commons�������$�$�$��J�J�+�,���J�J�$�,�,�t�y�y�1�2�!�4�5��#�#�+�+�/�/��	�	�:�D��J�J�$�*�*�T�Y�Y�/�0��2�3��#�#�)�)�-�-�d�i�i�8�D�
�<�� 0� 0� 0�$-��6�I��I�I��I�;�g�d�i�i�]�!�<�d�k�k�J�
���i��!�!�#5�� � �-�
��#����d�#�
�		����J�J�(��2��'�	����t�#��
�
�3�����$�$�$��J�J�t��%�s�5H	�CH	�H	�C6H	c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r-s&���6�6����6�e�6��6r*c	��VPWR4;_uu_4VPeVPVPV4M�VPP'd.VPRVPRVPR24M[VPP'd!VPRVPR24MVPRVPR24RRR4R# +'giR#;i)TNz(Markup(concat(z.)) if context.eval_ctx.autoescape else concat(rCzMarkup(concat(r!rO)rwr/r<r:r;rSr�rGr`s&&&r(r��CodeGenerator.visit_Filter,s���
�
%�
%�d�4�
8�
8��y�y�$��
�
�4�9�9�e�,����(�(�(��
�
�%�e�l�l�^�4C�CH�<�<�.�PR�T�����*�*�*��
�
�^�E�L�L�>��<�=��
�
�W�U�\�\�N�!�4�5�9�
8�
8�
8�s�AC5�#AC5�,?C5�5D	c�><�V^8�dQhRS[PRS[RR/#r0)r
r�r1)r'r�s"�r(r)r>s&���)�)�u�z�z�)�%�)�D�)r*c��VPWR4;_uu_4VPVPV4RRR4R# +'giR#;ir�)rwr<r/r`s&&&r(r��CodeGenerator.visit_Test=s6��
�
%�
%�d�5�
9�
9��J�J�t�y�y�%�(�:�
9�
9�
9�s�A�A	c�><�V^8�dQhRS[PRS[RR/#r0)r
�CondExprr1)r'r�s"�r(r)rCs&�����5�>�>��%��D�r*c�Haaa�SP4oRVVV3RllpSPR4SPSPS4SPR4SPSPS4SPR4V!4SPR4R#)c��V^8�dQhRR/#r�r�)r's"r(r)�2CodeGenerator.visit_CondExpr.<locals>.__annotate__Fs��		�		�T�		r*c�<�SPeSPSPS4R#SPRSPS4R24R#)Nz1cond_expr_undefined("the inline if-expression on z6 evaluated to false and no else section was defined."))�expr2r<rSr�)r0r/r-s���r(�write_expr2�1CodeGenerator.visit_CondExpr.<locals>.write_expr2FsL����z�z�%��
�
�4�:�:�u�-���J�J���M�M�$�'�(�)*�+�
r*rMz if z else rON)r�rSr<�expr1r�)r-r/r0r�sfff r(�visit_CondExpr�CodeGenerator.visit_CondExprBsq����
�
���		�		�	
�
�
�3���
�
�4�:�:�u�%��
�
�6���
�
�4�9�9�e�$��
�
�8���
��
�
�3�r*c�D<�V^8�dQhRS[PRS[RS[RR/#)r$r/r0r�r&N)r
rwr1rn)r'r�s"�r(r)rZs1������J�J��',��>B��	
�r*c��VPP'dVPR4VPP'dVPR4MVPR4VP	VP
V4V'dRR/MRpVP'dRR/M/pVP'dRR/M/pV'dVP!V3/VBMV'g	V'd
\V3/VBpVPWV4VPR4VPP'dVPR4R#R#)	rczenvironment.call(context, z
context.call(r�N�
_loop_vars�_block_varsrOrC)rPr�rSrQr<r/r�r�r�r�r�)r-r/r0r�rv�loop_kwargs�block_kwargss&&&&   r(r��CodeGenerator.visit_CallYs�����$�$�$��J�J�+�,����%�%�%��J�J�3�4��J�J��'��
�
�4�9�9�e�$�/=��(�+�4��6;�6F�6F�6F�|�\�2�B��9>�9J�9J�9J�
�}�5�PR�������<�|�<�
�L���<�|�<�L����t�L�1��
�
�3�����$�$�$��J�J�t��%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Keywordr1)r'r�s"�r(r)rps&���&�&�%�-�-�&��&�$�&r*c��VPVPR,4VPVPV4R#r>)rSrr<rxr`s&&&r(�
visit_Keyword�CodeGenerator.visit_Keywordps(���
�
�4�8�8�c�>�"��
�
�4�:�:�u�%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�MarkSafer1)r'r�s"�r(r)rvs&�����5�>�>��%��D�r*c��VPR4VPVPV4VPR4R#)zMarkup(rON�rSr<r�r`s&&&r(�visit_MarkSafe�CodeGenerator.visit_MarkSafevs+���
�
�9���
�
�4�9�9�e�$��
�
�3�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�MarkSafeIfAutoescaper1)r'r�s"�r(r)r{s+������.�.��7<��	
�r*c��VPR4VPVPV4VPR4R#r3r�r`s&&&r(�visit_MarkSafeIfAutoescape�(CodeGenerator.visit_MarkSafeIfAutoescape{s.��	
�
�
�K�L��
�
�4�9�9�e�$��
�
�3�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�EnvironmentAttributer1)r'r�s"�r(r)r�s+���/�/��.�.�/�7<�/�	
�/r*c�J�VPRVP,4R#)zenvironment.N�rSrfr`s&&&r(�visit_EnvironmentAttribute�(CodeGenerator.visit_EnvironmentAttribute�s��	
�
�
�>�D�I�I�-�.r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�ExtensionAttributer1)r'r�s"�r(r)r�s0���O�O��,�,�O�5:�O�	
�Or*c�^�VPRVP:RVP24R#)zenvironment.extensions[z].N)rS�
identifierrfr`s&&&r(�visit_ExtensionAttribute�&CodeGenerator.visit_ExtensionAttribute�s'��	
�
�
�,�T�_�_�,?�r�$�)�)��M�Nr*c�><�V^8�dQhRS[PRS[RR/#r0)r
rCr1)r'r�s"�r(r)r�s(���9�9�u�'9�'9�9�%�9�D�9r*c�^�VPVPVP,4R#r8)rSrrDr`s&&&r(�visit_ImportedName� CodeGenerator.visit_ImportedName�s���
�
�4�&�&�t���7�8r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�InternalNamer1)r'r�s"�r(r)r�s(�����u�'9�'9��%��D�r*c�<�VPVP4R#r8r�r`s&&&r(�visit_InternalName� CodeGenerator.visit_InternalName�s���
�
�4�9�9�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�ContextReferencer1)r'r�s"�r(r)r�s+������*�*��38��	
�r*c�(�VPR4R#)rN)rSr`s&&&r(�visit_ContextReference�$CodeGenerator.visit_ContextReference�s��	
�
�
�9�r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�DerivedContextReferencer1)r'r�s"�r(r)r�s+���/�/��1�1�/�:?�/�	
�/r*c�F�VPVPV44R#r8)rSrr`s&&&r(�visit_DerivedContextReference�+CodeGenerator.visit_DerivedContextReference�s��	
�
�
�4�&�&�u�-�.r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Continuer1)r'r�s"�r(r)r�s&���)�)�5�>�>�)�%�)�D�)r*c�*�VPRV4R#)�continueNr�r`s&&&r(�visit_Continue�CodeGenerator.visit_Continue�s�����z�4�(r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Breakr1)r'r�s"�r(r)r�s&���&�&����&�E�&�d�&r*c�*�VPRV4R#)�breakNr�r`s&&&r(�visit_Break�CodeGenerator.visit_Break�s�����w��%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�Scoper1)r'r�s"�r(r)r�s&���&�&����&�E�&�d�&r*c���VP4pVPPV4VPV4VP	VP
V4VP
V4R#r8)r�r�r�r�rdr�r�)r-r/r0�scope_frames&&& r(�visit_Scope�CodeGenerator.visit_Scope�sO���k�k�m�����(�(��.�����%�����	�	�;�/�����%r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�OverlayScoper1)r'r�s"�r(r)r�s(���%�%�u�'9�'9�%�%�%�D�%r*c���VP4pVPVRVPV424VPVR24VPVPV4VPV4VP
RR7pVPPV4VPV4VPVPV4VPV4VP4R#)r�z.vars = T)r�N)r6r<rr<rrr�r�r�r�rdr�r�r)r-r/r0r	r�s&&&  r(�visit_OverlayScope� CodeGenerator.visit_OverlayScope�s����'�'�)�����#��c�$�"5�"5�e�"<�!=�>�?����#��h�'�(��
�
�4�<�<��'��#�#�C�(��k�k�4�k�0�����(�(��.�����%�����	�	�;�/�����%��"�"�$r*c�><�V^8�dQhRS[PRS[RR/#r0)r
�EvalContextModifierr1)r'r�s"�r(r)r�s+���:�:��-�-�:�6;�:�	
�:r*c��VPF�pVPRVPR24VPVPV4VPPVP4p\VPVPV4K�	R# \PdRTPn
K�i;i)zcontext.eval_ctx.r�TN)�optionsr<rr<rxr�r:�setattrr
rr;)r-r/r0�keywordrs&&&  r(�visit_EvalContextModifier�'CodeGenerator.visit_EvalContextModifier�s����|�|�G��N�N�.�w�{�{�m�3�?�@��J�J�w�}�}�e�,�
:��m�m�,�,�U�^�^�<���������S�9�$��
�#�#�
/�*.����'�
/�s�%B�&C�Cc�><�V^8�dQhRS[PRS[RR/#r0)r
�ScopedEvalContextModifierr1)r'r�s"�r(r)r�s0���
C�
C��3�3�
C�<A�
C�	
�
Cr*c�L�VP4pVPP4pVPVR24VP	W4VP
FpVP
WR4K	VPPV4VPRVR24R#)z = context.eval_ctx.save()zcontext.eval_ctx.revert(rON)r6r:�saver<r�r�r<�revert)r-r/r0�old_ctx_name�	saved_ctxrs&&&   r(�visit_ScopedEvalContextModifier�-CodeGenerator.visit_ScopedEvalContextModifier�s����0�0�2���N�N�'�'�)�	����,��'A�B�C��&�&�t�3��Y�Y�E��J�J�u�$��
�����i�(����1�,��q�A�Br*c�J<�V^8�dQh/S[PS[,;R&#)r$r�)r4rlr�)r'r�s"�r(r)r,s����T"�z�z�-�(�/�U"r*)r$r&r�r!r#r"r rr%rrrrrrirPrrgr�rrrfr9rhr��NFTr�)rr8)N�)zasync r4)zr�r�r�r�r��propertyrjr0r6r�rHrErFrVrZr_rdrSr<ror�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
r�rrrr-rPr�rarsr~r�r�r�r�r�r�r�r�r�r4�
NamedTupler��staticmethodr�r�r�r�r�rr
rrr"rr+r/r5r;r?rDr[�	visit_Add�	visit_Sub�	visit_Mul�	visit_Div�visit_FloorDiv�	visit_Pow�	visit_Mod�	visit_And�visit_Orrd�	visit_Pos�	visit_Neg�	visit_Notr@rRrXr^rdrjrprrwr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�s@r(r.r.,s�����G4�G4�R�*��*�
L�L�,�,�
/�/�
9�9�(��"�"�<�<���
��	�	�����*�*�7/�7/�r,�,�\>�>� B�B�H�H�2�2�Q �Q �f

�

���!�!�+�+�I�I�$�$�6�6�5�5�,�,�1�1�#�#�U�U�3�3�)�)�)O�)O�Zx9�x9�t/�/�b(!�(!�T8�8�t
U�
U�	N�	N�5�5�nIP�IP�V��*/�/���	'�	'�
%�
%�%�%����������,0�I�.�.�`#�#�%�%�*%�%� 	�	�M�M�^(�(�>&�&�0��20�0�"�"���.�.������C� �I��C� �I��C� �I��C� �I� ��&�N��D�!�I��C� �I��E�"�I��4� �H��3��I��3��I��6�"�I���������%�%��	��	��!��!�()�)��'��'�R�6��6� �)��)�����,�����,&�&���
��/�/�
O�O�
9�9�����
/�/�
)�)�&�&�&�&�%�%�:�:�
C�
C�q4�r*r.r�)<r��typingr4�
contextlibr�	functoolsr�ior�	itertoolsrr�rr{�
markupsaferr	r4r
�
exceptionsr�
idtrackingrr
rrrrr9r�utilsrrrWr�
TYPE_CHECKING�typing_extensions�terPr�TypeVarrEr5rr]r@r[rdrur|r�r�r1�RuntimeErrorr�r�r�rrr.r�r*r(�<module>r	s��6��%�$���2����.��&�*�(�*�� ��� ��?�?�?�"�(��I�I�c����C����J�/�0��	�$��$��#�
�D��#�
�D��$��X�	
�	�
'� �*�&�0�"�&�&�P�P�fJ�,�J�'�k�'�&&�K�&�,�9��bC�K�bCr*

Youez - 2016 - github.com/yon3zu
LinuXploit