pbesa 4.0.42__tar.gz → 4.0.43__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 (127) hide show
  1. {pbesa-4.0.42 → pbesa-4.0.43}/PKG-INFO +1 -1
  2. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/cognitive.py +18 -14
  3. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/sel_dispatcher_team.py +4 -1
  4. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa.egg-info/PKG-INFO +1 -1
  5. {pbesa-4.0.42 → pbesa-4.0.43}/setup.py +1 -1
  6. {pbesa-4.0.42 → pbesa-4.0.43}/.gitignore +0 -0
  7. {pbesa-4.0.42 → pbesa-4.0.43}/LICENSE +0 -0
  8. {pbesa-4.0.42 → pbesa-4.0.43}/LICENSE.txt +0 -0
  9. {pbesa-4.0.42 → pbesa-4.0.43}/MANIFEST +0 -0
  10. {pbesa-4.0.42 → pbesa-4.0.43}/README.md +0 -0
  11. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/db.sqlite3 +0 -0
  12. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__init__.py +0 -0
  13. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__pycache__/__init__.cpython-36.pyc +0 -0
  14. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__pycache__/pbesa.cpython-36.pyc +0 -0
  15. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__pycache__/settings.cpython-36.pyc +0 -0
  16. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__pycache__/urls.cpython-36.pyc +0 -0
  17. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/__pycache__/wsgi.cpython-36.pyc +0 -0
  18. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/asgi.py +0 -0
  19. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/pbesa.py +0 -0
  20. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/settings.py +0 -0
  21. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/urls.py +0 -0
  22. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/helloworld/wsgi.py +0 -0
  23. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/manage.py +0 -0
  24. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__init__.py +0 -0
  25. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/__init__.cpython-36.pyc +0 -0
  26. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/admin.cpython-36.pyc +0 -0
  27. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/apps.cpython-36.pyc +0 -0
  28. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/models.cpython-36.pyc +0 -0
  29. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/urls.cpython-36.pyc +0 -0
  30. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/__pycache__/views.cpython-36.pyc +0 -0
  31. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/admin.py +0 -0
  32. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/apps.py +0 -0
  33. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/__pycache__/translatecontroller.cpython-36.pyc +0 -0
  34. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/__pycache__/translatedelegate.cpython-36.pyc +0 -0
  35. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/__pycache__/translateresponse.cpython-36.pyc +0 -0
  36. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/translatecontroller.py +0 -0
  37. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/translatedelegate.py +0 -0
  38. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/controller/translateresponse.py +0 -0
  39. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/worker/__pycache__/translatetask.cpython-36.pyc +0 -0
  40. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/worker/__pycache__/workeragent.cpython-36.pyc +0 -0
  41. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/worker/translatetask.py +0 -0
  42. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/mas/worker/workeragent.py +0 -0
  43. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/migrations/__init__.py +0 -0
  44. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/migrations/__pycache__/__init__.cpython-36.pyc +0 -0
  45. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/models.py +0 -0
  46. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/tests.py +0 -0
  47. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/urls.py +0 -0
  48. {pbesa-4.0.42 → pbesa-4.0.43}/examples/django/helloworld/translate/views.py +0 -0
  49. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/countercontroller.cpython-36.pyc +0 -0
  50. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/counterdelegate.cpython-36.pyc +0 -0
  51. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/counterresponse.cpython-36.pyc +0 -0
  52. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/translatecontroller.cpython-36.pyc +0 -0
  53. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/translatedelegate.cpython-36.pyc +0 -0
  54. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/__pycache__/translateresponse.cpython-36.pyc +0 -0
  55. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/countercontroller.py +0 -0
  56. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/counterdelegate.py +0 -0
  57. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/controller/counterresponse.py +0 -0
  58. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/__pycache__/counteragent.cpython-36.pyc +0 -0
  59. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/__pycache__/countertask.cpython-36.pyc +0 -0
  60. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/__pycache__/translatetask.cpython-36.pyc +0 -0
  61. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/__pycache__/workeragent.cpython-36.pyc +0 -0
  62. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/counteragent.py +0 -0
  63. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/mas/worker/countertask.py +0 -0
  64. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/remote_a.py +0 -0
  65. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/remote_b.py +0 -0
  66. {pbesa-4.0.42 → pbesa-4.0.43}/examples/remote/remote_c.py +0 -0
  67. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/__init__.py +0 -0
  68. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/__init__.py +0 -0
  69. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_casos.py +0 -0
  70. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_consultas.py +0 -0
  71. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_conversador.py +0 -0
  72. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_cuestionador.py +0 -0
  73. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_datos_identificables.py +0 -0
  74. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_demanda.py +0 -0
  75. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_evaluador.py +0 -0
  76. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_expertos.py +0 -0
  77. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_extraccion.py +0 -0
  78. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_generar_caso.py +0 -0
  79. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_generar_documento.py +0 -0
  80. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_instruccion.py +0 -0
  81. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_parafraseo.py +0 -0
  82. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_pertinencia.py +0 -0
  83. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_preguntas.py +0 -0
  84. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_respuesta.py +0 -0
  85. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_saludos.py +0 -0
  86. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/celula_verificar_calculos.py +0 -0
  87. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/data_extraction_cel.py +0 -0
  88. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/celulas/web.py +0 -0
  89. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/__init__.py +0 -0
  90. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/adapter.py +0 -0
  91. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/agent.py +0 -0
  92. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/io/__init__.py +0 -0
  93. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/io/system_file.py +0 -0
  94. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/io/tcp_server.py +0 -0
  95. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/__init__.py +0 -0
  96. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/__pycache__/__init__.cpython-36.pyc +0 -0
  97. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/__pycache__/__init__.cpython-37.pyc +0 -0
  98. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/__pycache__/__init__.cpython-38.pyc +0 -0
  99. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/__pycache__/__init__.cpython-39.pyc +0 -0
  100. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/res/conf.json +0 -0
  101. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/util.py +0 -0
  102. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/kernel/world.py +0 -0
  103. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/mas.py +0 -0
  104. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/models.py +0 -0
  105. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/__init__.py +0 -0
  106. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/adm_listener.py +0 -0
  107. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/adm_listener_handler.py +0 -0
  108. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/exceptions.py +0 -0
  109. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/remote_adm.py +0 -0
  110. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/remote/remote_adm_handler.py +0 -0
  111. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/simulator/__init__.py +0 -0
  112. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/simulator/dialog_simulator.py +0 -0
  113. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/__init__.py +0 -0
  114. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/collaborative_team.py +0 -0
  115. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/delegator.py +0 -0
  116. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/delegator_team.py +0 -0
  117. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/dialog.py +0 -0
  118. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/dispatcher_team.py +0 -0
  119. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/prompts.py +0 -0
  120. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/selected_dispatcher_team.py +0 -0
  121. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/templates.py +0 -0
  122. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa/social/worker.py +0 -0
  123. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa.egg-info/SOURCES.txt +0 -0
  124. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa.egg-info/dependency_links.txt +0 -0
  125. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa.egg-info/requires.txt +0 -0
  126. {pbesa-4.0.42 → pbesa-4.0.43}/pbesa.egg-info/top_level.txt +0 -0
  127. {pbesa-4.0.42 → pbesa-4.0.43}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pbesa
3
- Version: 4.0.42
3
+ Version: 4.0.43
4
4
  License-File: LICENSE
5
5
  License-File: LICENSE.txt
6
6
  Requires-Dist: pymongo>=4.6.3
@@ -717,13 +717,13 @@ class Dialog(ABC):
717
717
  logging.error(f"Error al enviar notificación: {text}")
718
718
  logging.error(f"Error: {e}")
719
719
 
720
- def update_conversation(self, session_manager, id_conversacion, res):
721
- conversation = session_manager.get_conversation(id_conversacion)
720
+ def update_conversation(self, session_manager, conversation_id, res):
721
+ conversation = session_manager.get_conversation(conversation_id)
722
722
  if conversation:
723
723
  conversation['team-response'] = res
724
- session_manager.update_conversation(id_conversacion, conversation)
724
+ session_manager.update_conversation(conversation_id, conversation)
725
725
  else:
726
- logging.error(f"Error al actualizar la conversación: {id_conversacion}")
726
+ logging.error(f"Error al actualizar la conversación: {conversation_id}")
727
727
 
728
728
  def team_inquiry(self, session, team, data, operation, session_flag) -> str:
729
729
  try:
@@ -750,11 +750,11 @@ class Dialog(ABC):
750
750
  response = canal.post(team.lower(), dto, timeout=300)
751
751
  if response and not response['status']:
752
752
  logging.error(f'No se pudo establecer la comunicación con el agente remoto')
753
- self.update_conversation(session_manager, session['id_conversacion'], None)
753
+ self.update_conversation(session_manager, session['conversation_id'], None)
754
754
  return None
755
755
  logging.info(f'>>>> Response: {response}')
756
756
  res = response['message']['response']
757
- self.update_conversation(session_manager, session['id_conversacion'], res)
757
+ self.update_conversation(session_manager, session['conversation_id'], res)
758
758
  return res
759
759
  else:
760
760
  if operation and not operation == "Ninguno":
@@ -762,7 +762,7 @@ class Dialog(ABC):
762
762
  "data": {
763
763
  'text': data,
764
764
  'operation': operation,
765
- 'id_conversacion': session['id_conversacion'],
765
+ 'conversation_id': session['conversation_id'],
766
766
  'session_id': session['session_id'],
767
767
  },
768
768
  }
@@ -776,10 +776,10 @@ class Dialog(ABC):
776
776
  if response['status']:
777
777
  logging.info(f'>>>> Response: {response}')
778
778
  res = response['message']['response']
779
- self.update_conversation(session_manager, session['id_conversacion'], res)
779
+ self.update_conversation(session_manager, session['conversation_id'], res)
780
780
  return res
781
781
  else:
782
- self.update_conversation(session_manager, session['id_conversacion'], None)
782
+ self.update_conversation(session_manager, session['conversation_id'], None)
783
783
  logging.error(f'No se pudo establecer la comunicación con el agente remoto')
784
784
  return None
785
785
  logging.info("END: team_inquiry")
@@ -932,6 +932,9 @@ class Dialog(ABC):
932
932
 
933
933
  msg = "No puedo ayudarle con su consulta. Dado que no está relacionada con los servicios que presta Justifacil."
934
934
 
935
+ if es_consulta:
936
+ query = f"En el contexto jurídico. {query}"
937
+
935
938
  # Verifica los casos
936
939
  if eva > 0 and eva < 3:
937
940
  logging.info("[Stage-1]: Discriminador encontrado")
@@ -1023,6 +1026,7 @@ class Dialog(ABC):
1023
1026
  if 'consulta' in query:
1024
1027
  message = messages[-3]
1025
1028
  query = message['text']
1029
+ query = f"En el contexto jurídico. {query}"
1026
1030
  per_res = celula_pertinencia.derive(self.__ai_service, query, max_tkns=10)
1027
1031
  obj_check = celula_verificar_calculos.derive(self.__ai_service, query, max_tkns=10)
1028
1032
  if per_res and "ABSURDO" in per_res and not "PERTINENTE" in obj_check:
@@ -1101,11 +1105,11 @@ class Dialog(ABC):
1101
1105
  if owner == "Web" and dialog_state == DialogState.START:
1102
1106
  logging.info(f"TOPTQ: {owner} - {dialog_state} - {team_source} - {query}")
1103
1107
  session_manager = self.state['session_manager']
1104
- conversation = session_manager.get_conversation(session['id_conversacion'])
1108
+ conversation = session_manager.get_conversation(session['conversation_id'])
1105
1109
  attemps = conversation.get('attemps', 1)
1106
1110
  dicriminador, res = self.stage_one_classification(session['session_id'], conversation['messages'], attemps, query)
1107
1111
  conversation['attemps'] = attemps + 1
1108
- session_manager.update_conversation(session['id_conversacion'], conversation)
1112
+ session_manager.update_conversation(session['conversation_id'], conversation)
1109
1113
  logging.info(f"Discriminador: {dicriminador}")
1110
1114
  # Limpia la memoria de trabajo
1111
1115
  # Para que el agente la utilice en
@@ -1358,7 +1362,7 @@ class Dialog(ABC):
1358
1362
  if "especialistas" in node.text.lower():
1359
1363
  self.notify(session['session_id'], "consultando especialistas...")
1360
1364
  session_manager = self.state['session_manager']
1361
- conversation = session_manager.get_conversation(session['id_conversacion'])
1365
+ conversation = session_manager.get_conversation(session['conversation_id'])
1362
1366
  if 'team-response' in conversation:
1363
1367
  res = conversation['team-response']
1364
1368
  else:
@@ -1401,9 +1405,9 @@ class Dialog(ABC):
1401
1405
  if "expertos" in node.text.lower():
1402
1406
  self.notify(session['session_id'], "consultando expertos...")
1403
1407
  session_manager = self.state['session_manager']
1404
- conversation = session_manager.get_conversation(session['id_conversacion'])
1408
+ conversation = session_manager.get_conversation(session['conversation_id'])
1405
1409
  conversation['case'] = query
1406
- session_manager.update_conversation(session['id_conversacion'], conversation)
1410
+ session_manager.update_conversation(session['conversation_id'], conversation)
1407
1411
  logging.info("[Node]:[Action]:[Call]:[Continua]:[Consulta]: Caso almacenado")
1408
1412
  else:
1409
1413
  logging.info("[Node]:[Action]:[Call]:[Continua]:[Inferencia]:")
@@ -188,7 +188,10 @@ class SelectedDispatcher(Action):
188
188
  try:
189
189
  logging.info('Assign to agent...')
190
190
  session_id = data['dto']['session']['session_id'] if 'session' in data['dto'] else None
191
- assistant = data['dto']['session']['assistant'] if 'session' in data['dto'] and 'assistant' in data['dto']['session'] else None
191
+ #assistant = data['dto']['session']['assistant'] if 'session' in data['dto'] and 'assistant' in data['dto']['session'] else None
192
+ assistant = None
193
+ if data and 'conversation' in data and data['dto']['conversation']:
194
+ assistant = data['dto']['conversation']['assistant'] if data['dto']['conversation'] else None
192
195
  if assistant:
193
196
  logging.info('The session is already assigned')
194
197
  logging.info(f'The agent type: {assistant} will be assigned')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pbesa
3
- Version: 4.0.42
3
+ Version: 4.0.43
4
4
  License-File: LICENSE
5
5
  License-File: LICENSE.txt
6
6
  Requires-Dist: pymongo>=4.6.3
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
4
4
 
5
5
  setup(
6
6
  name='pbesa',
7
- version='4.0.42',
7
+ version='4.0.43',
8
8
  packages=find_packages(),
9
9
  install_requires=[
10
10
  'pymongo>=4.6.3',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes