not1mm 24.7.19__tar.gz → 24.7.25__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 (158) hide show
  1. {not1mm-24.7.19 → not1mm-24.7.25}/PKG-INFO +3 -1
  2. {not1mm-24.7.19 → not1mm-24.7.25}/README.md +2 -0
  3. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/k6gte-not1mm.desktop +1 -1
  4. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/cat_interface.py +32 -1
  5. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/version.py +1 -1
  6. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/PKG-INFO +3 -1
  7. {not1mm-24.7.19 → not1mm-24.7.25}/pyproject.toml +1 -1
  8. {not1mm-24.7.19 → not1mm-24.7.25}/LICENSE +0 -0
  9. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/__init__.py +0 -0
  10. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/__main__.py +0 -0
  11. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/bandmap.py +0 -0
  12. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/checkwindow.py +0 -0
  13. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  14. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/MASTER.SCP +0 -0
  15. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/about.ui +0 -0
  16. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  17. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/bandmap.ui +0 -0
  18. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/check.png +0 -0
  19. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/checkwindow.ui +0 -0
  20. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/configuration.ui +0 -0
  21. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/contests.sql +0 -0
  22. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/cty.json +0 -0
  23. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/cwmacros.txt +0 -0
  24. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/donors.html +0 -0
  25. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/editcontact.ui +0 -0
  26. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/editmacro.ui +0 -0
  27. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/greendot.png +0 -0
  28. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-128.png +0 -0
  29. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-32.png +0 -0
  30. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-64.png +0 -0
  31. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/logwindow.ui +0 -0
  32. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/logwindowx.ui +0 -0
  33. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/main.ui +0 -0
  34. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/new_contest.ui +0 -0
  35. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/not1mm.html +0 -0
  36. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/opon.ui +0 -0
  37. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/0.wav +0 -0
  38. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/1.wav +0 -0
  39. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/2.wav +0 -0
  40. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/3.wav +0 -0
  41. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/4.wav +0 -0
  42. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/5.wav +0 -0
  43. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/6.wav +0 -0
  44. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/7.wav +0 -0
  45. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/73.wav +0 -0
  46. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/8.wav +0 -0
  47. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/9.wav +0 -0
  48. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/a.wav +0 -0
  49. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/again.wav +0 -0
  50. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/b.wav +0 -0
  51. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/c.wav +0 -0
  52. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/contest.wav +0 -0
  53. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/cq.wav +0 -0
  54. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/d.wav +0 -0
  55. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/e.wav +0 -0
  56. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/f.wav +0 -0
  57. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/g.wav +0 -0
  58. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/h.wav +0 -0
  59. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/i.wav +0 -0
  60. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/j.wav +0 -0
  61. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/k.wav +0 -0
  62. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/k6gte.wav +0 -0
  63. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/l.wav +0 -0
  64. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/m.wav +0 -0
  65. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/mynumber.wav +0 -0
  66. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/n.wav +0 -0
  67. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/nil.wav +0 -0
  68. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/o.wav +0 -0
  69. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/p.wav +0 -0
  70. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/q.wav +0 -0
  71. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/r.wav +0 -0
  72. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/roger.wav +0 -0
  73. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/s.wav +0 -0
  74. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/space.wav +0 -0
  75. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/t.wav +0 -0
  76. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/thankyou.wav +0 -0
  77. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  78. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/u.wav +0 -0
  79. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/v.wav +0 -0
  80. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/w.wav +0 -0
  81. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/x.wav +0 -0
  82. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/y.wav +0 -0
  83. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/yourcall.wav +0 -0
  84. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/phonetics/z.wav +0 -0
  85. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/pickcontest.ui +0 -0
  86. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/radio_green.png +0 -0
  87. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/radio_grey.png +0 -0
  88. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/radio_red.png +0 -0
  89. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/reddot.png +0 -0
  90. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/settings.ui +0 -0
  91. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/ssbmacros.txt +0 -0
  92. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/data/vfo.ui +0 -0
  93. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/fsutils.py +0 -0
  94. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/__init__.py +0 -0
  95. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/about.py +0 -0
  96. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/cwinterface.py +0 -0
  97. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/database.py +0 -0
  98. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/edit_contact.py +0 -0
  99. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/edit_macro.py +0 -0
  100. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/edit_opon.py +0 -0
  101. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/edit_station.py +0 -0
  102. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/ft8_watcher.py +0 -0
  103. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/ham_utility.py +0 -0
  104. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/lookup.py +0 -0
  105. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/multicast.py +0 -0
  106. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/n1mm.py +0 -0
  107. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/new_contest.py +0 -0
  108. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/playsound.py +0 -0
  109. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/plugin_common.py +0 -0
  110. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/select_contest.py +0 -0
  111. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/settings.py +0 -0
  112. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/super_check_partial.py +0 -0
  113. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/lib/versiontest.py +0 -0
  114. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/logwindow.py +0 -0
  115. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/playsoundtest.py +0 -0
  116. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/10_10_fall_cw.py +0 -0
  117. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/10_10_spring_cw.py +0 -0
  118. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/10_10_summer_phone.py +0 -0
  119. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/10_10_winter_phone.py +0 -0
  120. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/__init__.py +0 -0
  121. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_10m.py +0 -0
  122. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_dx_cw.py +0 -0
  123. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  124. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_field_day.py +0 -0
  125. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  126. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_ss_cw.py +0 -0
  127. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_ss_phone.py +0 -0
  128. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  129. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  130. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  131. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/canada_day.py +0 -0
  132. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_160_cw.py +0 -0
  133. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_160_ssb.py +0 -0
  134. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_wpx_cw.py +0 -0
  135. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  136. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_ww_cw.py +0 -0
  137. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cq_ww_ssb.py +0 -0
  138. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/cwt.py +0 -0
  139. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/general_logging.py +0 -0
  140. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/iaru_hf.py +0 -0
  141. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/icwc_mst.py +0 -0
  142. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/jidx_cw.py +0 -0
  143. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/jidx_ph.py +0 -0
  144. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/k1usn_sst.py +0 -0
  145. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/naqp_cw.py +0 -0
  146. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/naqp_ssb.py +0 -0
  147. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/phone_weekly_test.py +0 -0
  148. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/stew_perry_topband.py +0 -0
  149. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/plugins/winter_field_day.py +0 -0
  150. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/radio.py +0 -0
  151. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/vfo.py +0 -0
  152. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm/voice_keying.py +0 -0
  153. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/SOURCES.txt +0 -0
  154. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/dependency_links.txt +0 -0
  155. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/entry_points.txt +0 -0
  156. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/requires.txt +0 -0
  157. {not1mm-24.7.19 → not1mm-24.7.25}/not1mm.egg-info/top_level.txt +0 -0
  158. {not1mm-24.7.19 → not1mm-24.7.25}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.7.19
3
+ Version: 24.7.25
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -223,6 +223,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
 
224
224
  ## Recent Changes
225
225
 
226
+ - [24-7-25] Updated application categories for the desktop file.
227
+ - [24-7-25] Maybe let flrig send CW... Probably not.
226
228
  - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
227
229
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
228
230
 
@@ -191,6 +191,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
191
191
 
192
192
  ## Recent Changes
193
193
 
194
+ - [24-7-25] Updated application categories for the desktop file.
195
+ - [24-7-25] Maybe let flrig send CW... Probably not.
194
196
  - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
195
197
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
196
198
 
@@ -7,4 +7,4 @@ Exec=not1mm
7
7
  Icon=k6gte-not1mm
8
8
  Terminal=false
9
9
  Type=Application
10
- Categories=HamRadio;
10
+ Categories=Qt;Utility;HamRadio;ContactManagement;Database;
@@ -2,6 +2,20 @@
2
2
  K6GTE, CAT interface abstraction
3
3
  Email: michael.bridak@gmail.com
4
4
  GPL V3
5
+
6
+ rig.cwio_set_wpm n:i set cwio WPM
7
+ rig.cwio_text i:s send text via cwio interface
8
+ rig.cwio_send n:i cwio transmit 1/0 (on/off)
9
+ command lines to test the CW API via XMLRPC
10
+
11
+ Setting WPM
12
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
13
+
14
+ Setting the text to send
15
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
16
+
17
+ Enable send
18
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_send</methodName><params><param><value><i4>1</i4></value></param></params></methodCall>" http://localhost:12345
5
19
  """
6
20
 
7
21
  import logging
@@ -94,7 +108,7 @@ class CAT:
94
108
  """..."""
95
109
  logger.debug(f"{texttosend=} {self.interface=}")
96
110
  if self.interface == "flrig":
97
- ...
111
+ self.sendcwxmlrpc(texttosend)
98
112
  return
99
113
  if self.interface == "rigctld":
100
114
  self.sendcwrigctl(texttosend)
@@ -117,6 +131,23 @@ class CAT:
117
131
 
118
132
  def sendcwxmlrpc(self, texttosend):
119
133
  """..."""
134
+ print(f"{texttosend=}")
135
+ try:
136
+ self.online = True
137
+ self.server.rig.cwio_send(1)
138
+ self.server.rig.cwio_text(texttosend)
139
+ return
140
+ except (
141
+ ConnectionRefusedError,
142
+ xmlrpc.client.Fault,
143
+ http.client.BadStatusLine,
144
+ http.client.CannotSendRequest,
145
+ http.client.ResponseNotReady,
146
+ ) as exception:
147
+ self.online = False
148
+ print("sendcwxmlrpc: %s", f"{exception}")
149
+ # logger.debug("sendcwxmlrpc: %s", f"{exception}")
150
+ return False
120
151
 
121
152
  def get_vfo(self) -> str:
122
153
  """Poll the radio for current vfo using the interface"""
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.7.19"
3
+ __version__ = "24.7.25"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.7.19
3
+ Version: 24.7.25
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -223,6 +223,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
 
224
224
  ## Recent Changes
225
225
 
226
+ - [24-7-25] Updated application categories for the desktop file.
227
+ - [24-7-25] Maybe let flrig send CW... Probably not.
226
228
  - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
227
229
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
228
230
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.7.19"
7
+ version = "24.7.25"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
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