flowquery 1.0.64__tar.gz → 1.0.65__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. {flowquery-1.0.64 → flowquery-1.0.65}/PKG-INFO +1 -1
  2. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/PKG-INFO +1 -1
  3. {flowquery-1.0.64 → flowquery-1.0.65}/pyproject.toml +1 -1
  4. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/expression.py +28 -2
  5. {flowquery-1.0.64 → flowquery-1.0.65}/README.md +0 -0
  6. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/SOURCES.txt +0 -0
  7. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/dependency_links.txt +0 -0
  8. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/entry_points.txt +0 -0
  9. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/requires.txt +0 -0
  10. {flowquery-1.0.64 → flowquery-1.0.65}/flowquery.egg-info/top_level.txt +0 -0
  11. {flowquery-1.0.64 → flowquery-1.0.65}/setup.cfg +0 -0
  12. {flowquery-1.0.64 → flowquery-1.0.65}/src/__init__.py +0 -0
  13. {flowquery-1.0.64 → flowquery-1.0.65}/src/__main__.py +0 -0
  14. {flowquery-1.0.64 → flowquery-1.0.65}/src/compute/__init__.py +0 -0
  15. {flowquery-1.0.64 → flowquery-1.0.65}/src/compute/flowquery.py +0 -0
  16. {flowquery-1.0.64 → flowquery-1.0.65}/src/compute/provenance.py +0 -0
  17. {flowquery-1.0.64 → flowquery-1.0.65}/src/compute/runner.py +0 -0
  18. {flowquery-1.0.64 → flowquery-1.0.65}/src/extensibility.py +0 -0
  19. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/__init__.py +0 -0
  20. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/bindings.py +0 -0
  21. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/data.py +0 -0
  22. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/data_cache.py +0 -0
  23. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/data_resolver.py +0 -0
  24. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/database.py +0 -0
  25. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/hops.py +0 -0
  26. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/node.py +0 -0
  27. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/node_data.py +0 -0
  28. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/node_reference.py +0 -0
  29. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/pattern.py +0 -0
  30. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/pattern_expression.py +0 -0
  31. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/patterns.py +0 -0
  32. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/physical_node.py +0 -0
  33. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/physical_relationship.py +0 -0
  34. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/relationship.py +0 -0
  35. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/relationship_data.py +0 -0
  36. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/relationship_match_collector.py +0 -0
  37. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/relationship_reference.py +0 -0
  38. {flowquery-1.0.64 → flowquery-1.0.65}/src/graph/virtual_sources.py +0 -0
  39. {flowquery-1.0.64 → flowquery-1.0.65}/src/io/__init__.py +0 -0
  40. {flowquery-1.0.64 → flowquery-1.0.65}/src/io/command_line.py +0 -0
  41. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/__init__.py +0 -0
  42. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/alias.py +0 -0
  43. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/alias_option.py +0 -0
  44. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/ast_node.py +0 -0
  45. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/base_parser.py +0 -0
  46. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/__init__.py +0 -0
  47. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/csv.py +0 -0
  48. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/from_.py +0 -0
  49. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/headers.py +0 -0
  50. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/json.py +0 -0
  51. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/null.py +0 -0
  52. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/post.py +0 -0
  53. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/components/text.py +0 -0
  54. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/context.py +0 -0
  55. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/__init__.py +0 -0
  56. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/associative_array.py +0 -0
  57. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/json_array.py +0 -0
  58. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/key_value_pair.py +0 -0
  59. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/list_comprehension.py +0 -0
  60. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/lookup.py +0 -0
  61. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/data_structures/range_lookup.py +0 -0
  62. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/__init__.py +0 -0
  63. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/binding_reference.py +0 -0
  64. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/boolean.py +0 -0
  65. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/collect_subquery.py +0 -0
  66. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/count_subquery.py +0 -0
  67. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/exists_subquery.py +0 -0
  68. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/expression_map.py +0 -0
  69. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/f_string.py +0 -0
  70. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/identifier.py +0 -0
  71. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/number.py +0 -0
  72. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/operator.py +0 -0
  73. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/parameter_reference.py +0 -0
  74. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/reference.py +0 -0
  75. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/string.py +0 -0
  76. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/expressions/subquery_expression.py +0 -0
  77. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/__init__.py +0 -0
  78. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/aggregate_function.py +0 -0
  79. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/async_function.py +0 -0
  80. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/avg.py +0 -0
  81. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/coalesce.py +0 -0
  82. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/collect.py +0 -0
  83. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/count.py +0 -0
  84. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/date_.py +0 -0
  85. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/datetime_.py +0 -0
  86. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/duration.py +0 -0
  87. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/element_id.py +0 -0
  88. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/function.py +0 -0
  89. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/function_factory.py +0 -0
  90. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/function_metadata.py +0 -0
  91. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/functions.py +0 -0
  92. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/head.py +0 -0
  93. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/id_.py +0 -0
  94. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/join.py +0 -0
  95. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/keys.py +0 -0
  96. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/labels.py +0 -0
  97. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/last.py +0 -0
  98. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/length.py +0 -0
  99. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/localdatetime.py +0 -0
  100. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/localtime.py +0 -0
  101. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/log.py +0 -0
  102. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/log10.py +0 -0
  103. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/max_.py +0 -0
  104. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/min_.py +0 -0
  105. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/nodes.py +0 -0
  106. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/pow.py +0 -0
  107. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_all.py +0 -0
  108. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_any.py +0 -0
  109. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_function.py +0 -0
  110. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_none.py +0 -0
  111. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_single.py +0 -0
  112. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/predicate_sum.py +0 -0
  113. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/properties.py +0 -0
  114. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/rand.py +0 -0
  115. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/range_.py +0 -0
  116. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/reducer_element.py +0 -0
  117. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/relationships.py +0 -0
  118. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/replace.py +0 -0
  119. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/round_.py +0 -0
  120. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/schema.py +0 -0
  121. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/size.py +0 -0
  122. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/split.py +0 -0
  123. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/string_distance.py +0 -0
  124. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/stringify.py +0 -0
  125. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/substring.py +0 -0
  126. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/sum.py +0 -0
  127. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/tail.py +0 -0
  128. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/temporal_utils.py +0 -0
  129. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/time_.py +0 -0
  130. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/timestamp.py +0 -0
  131. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/to_float.py +0 -0
  132. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/to_integer.py +0 -0
  133. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/to_json.py +0 -0
  134. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/to_lower.py +0 -0
  135. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/to_string.py +0 -0
  136. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/trim.py +0 -0
  137. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/type_.py +0 -0
  138. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/functions/value_holder.py +0 -0
  139. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/__init__.py +0 -0
  140. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/case.py +0 -0
  141. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/else_.py +0 -0
  142. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/end.py +0 -0
  143. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/then.py +0 -0
  144. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/logic/when.py +0 -0
  145. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/__init__.py +0 -0
  146. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/aggregated_return.py +0 -0
  147. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/aggregated_with.py +0 -0
  148. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/call.py +0 -0
  149. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/create_node.py +0 -0
  150. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/create_relationship.py +0 -0
  151. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/delete_node.py +0 -0
  152. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/delete_relationship.py +0 -0
  153. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/drop_binding.py +0 -0
  154. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/group_by.py +0 -0
  155. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/let.py +0 -0
  156. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/limit.py +0 -0
  157. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/load.py +0 -0
  158. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/match.py +0 -0
  159. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/merge.py +0 -0
  160. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/operation.py +0 -0
  161. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/order_by.py +0 -0
  162. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/projection.py +0 -0
  163. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/refresh_binding.py +0 -0
  164. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/refresh_node.py +0 -0
  165. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/refresh_relationship.py +0 -0
  166. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/return_op.py +0 -0
  167. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/union.py +0 -0
  168. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/union_all.py +0 -0
  169. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/unwind.py +0 -0
  170. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/update.py +0 -0
  171. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/update_delete.py +0 -0
  172. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/where.py +0 -0
  173. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/operations/with_op.py +0 -0
  174. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/parser.py +0 -0
  175. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/parser_state.py +0 -0
  176. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/statement_info_crawler.py +0 -0
  177. {flowquery-1.0.64 → flowquery-1.0.65}/src/parsing/token_to_node.py +0 -0
  178. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/__init__.py +0 -0
  179. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/keyword.py +0 -0
  180. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/operator.py +0 -0
  181. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/string_walker.py +0 -0
  182. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/symbol.py +0 -0
  183. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/token.py +0 -0
  184. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/token_mapper.py +0 -0
  185. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/token_type.py +0 -0
  186. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/tokenizer.py +0 -0
  187. {flowquery-1.0.64 → flowquery-1.0.65}/src/tokenization/trie.py +0 -0
  188. {flowquery-1.0.64 → flowquery-1.0.65}/src/utils/__init__.py +0 -0
  189. {flowquery-1.0.64 → flowquery-1.0.65}/src/utils/object_utils.py +0 -0
  190. {flowquery-1.0.64 → flowquery-1.0.65}/src/utils/string_utils.py +0 -0
  191. {flowquery-1.0.64 → flowquery-1.0.65}/tests/test_extensibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowquery
3
- Version: 1.0.64
3
+ Version: 1.0.65
4
4
  Summary: A declarative query language for data processing pipelines
5
5
  Author-email: Team Microsoft FlowQuery <flowquery@microsoft.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowquery
3
- Version: 1.0.64
3
+ Version: 1.0.65
4
4
  Summary: A declarative query language for data processing pipelines
5
5
  Author-email: Team Microsoft FlowQuery <flowquery@microsoft.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flowquery"
3
- version = "1.0.64"
3
+ version = "1.0.65"
4
4
  description = "A declarative query language for data processing pipelines"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -97,15 +97,41 @@ class Expression(ASTNode):
97
97
 
98
98
  @property
99
99
  def alias(self) -> Optional[str]:
100
+ if self._alias is not None:
101
+ return self._alias
100
102
  first = self.first_child()
101
- if isinstance(first, Reference) and self._alias is None:
103
+ if isinstance(first, Reference):
102
104
  return first.identifier
103
- return self._alias
105
+ return self._property_path(first)
104
106
 
105
107
  @alias.setter
106
108
  def alias(self, value: str) -> None:
107
109
  self._alias = value
108
110
 
111
+ @staticmethod
112
+ def _property_path(node: Optional[ASTNode]) -> Optional[str]:
113
+ """Name an un-aliased dot lookup after its source text
114
+ (``u.displayName``) so projected columns keep a readable key.
115
+ Returns ``None`` for anything else, leaving the caller to fall back
116
+ to ``expr<n>``.
117
+ """
118
+ from ..data_structures.lookup import Lookup
119
+ from .identifier import Identifier
120
+
121
+ if not isinstance(node, Lookup):
122
+ return None
123
+ index = node.index
124
+ # Bracket lookups carry an Expression index; only dot access has a bare
125
+ # Identifier, and Reference subclasses Identifier so it must be excluded.
126
+ if not isinstance(index, Identifier) or isinstance(index, Reference):
127
+ return None
128
+ variable = node.variable
129
+ if isinstance(variable, Reference):
130
+ prefix: Optional[str] = variable.identifier
131
+ else:
132
+ prefix = Expression._property_path(variable)
133
+ return None if prefix is None else f"{prefix}.{index.value()}"
134
+
109
135
  def __str__(self) -> str:
110
136
  if self._alias is not None:
111
137
  return f"Expression ({self._alias})"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes