bumble 0.0.218__py3-none-any.whl → 0.0.219__py3-none-any.whl

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.
bumble/drivers/rtk.py CHANGED
@@ -115,12 +115,14 @@ RTK_USB_PRODUCTS = {
115
115
  # Realtek 8761BUV
116
116
  (0x0B05, 0x190E),
117
117
  (0x0BDA, 0x8771),
118
+ (0x0BDA, 0x877B),
119
+ (0x0BDA, 0xA728),
120
+ (0x0BDA, 0xA729),
118
121
  (0x2230, 0x0016),
119
122
  (0x2357, 0x0604),
120
123
  (0x2550, 0x8761),
121
124
  (0x2B89, 0x8761),
122
125
  (0x7392, 0xC611),
123
- (0x0BDA, 0x877B),
124
126
  # Realtek 8821AE
125
127
  (0x0B05, 0x17DC),
126
128
  (0x13D3, 0x3414),
bumble/hci.py CHANGED
@@ -3441,6 +3441,17 @@ class HCI_Write_Synchronous_Flow_Control_Enable_Command(HCI_Command):
3441
3441
  synchronous_flow_control_enable: int = field(metadata=metadata(1))
3442
3442
 
3443
3443
 
3444
+ # -----------------------------------------------------------------------------
3445
+ @HCI_Command.command
3446
+ @dataclasses.dataclass
3447
+ class HCI_Set_Controller_To_Host_Flow_Control_Command(HCI_Command):
3448
+ '''
3449
+ See Bluetooth spec @ 7.3.38 Set Controller To Host Flow Control command
3450
+ '''
3451
+
3452
+ flow_control_enable: int = field(metadata=metadata(1))
3453
+
3454
+
3444
3455
  # -----------------------------------------------------------------------------
3445
3456
  @HCI_Command.command
3446
3457
  @dataclasses.dataclass
@@ -4338,6 +4349,15 @@ class HCI_LE_Write_Suggested_Default_Data_Length_Command(HCI_Command):
4338
4349
  suggested_max_tx_time: int = field(metadata=metadata(2))
4339
4350
 
4340
4351
 
4352
+ # -----------------------------------------------------------------------------
4353
+ @HCI_Command.command
4354
+ @dataclasses.dataclass
4355
+ class HCI_LE_Read_Local_P_256_Public_Key_Command(HCI_Command):
4356
+ '''
4357
+ See Bluetooth spec @ 7.8.36 LE LE Read Local P-256 Public Key command
4358
+ '''
4359
+
4360
+
4341
4361
  # -----------------------------------------------------------------------------
4342
4362
  @HCI_Command.command
4343
4363
  @dataclasses.dataclass
@@ -4365,6 +4385,15 @@ class HCI_LE_Clear_Resolving_List_Command(HCI_Command):
4365
4385
  '''
4366
4386
 
4367
4387
 
4388
+ # -----------------------------------------------------------------------------
4389
+ @HCI_Command.command
4390
+ @dataclasses.dataclass
4391
+ class HCI_LE_Read_Resolving_List_Size_Command(HCI_Command):
4392
+ '''
4393
+ See Bluetooth spec @ 7.8.41 LE Read Resolving List Size command
4394
+ '''
4395
+
4396
+
4368
4397
  # -----------------------------------------------------------------------------
4369
4398
  @HCI_Command.command
4370
4399
  @dataclasses.dataclass
@@ -5028,6 +5057,15 @@ class HCI_LE_Periodic_Advertising_Terminate_Sync_Command(HCI_Command):
5028
5057
  sync_handle: int = field(metadata=metadata(2))
5029
5058
 
5030
5059
 
5060
+ # -----------------------------------------------------------------------------
5061
+ @HCI_Command.command
5062
+ @dataclasses.dataclass
5063
+ class HCI_LE_Read_Transmit_Power_Command(HCI_Command):
5064
+ '''
5065
+ See Bluetooth spec @ 7.8.74 LE Read Transmit Power command
5066
+ '''
5067
+
5068
+
5031
5069
  # -----------------------------------------------------------------------------
5032
5070
  @HCI_Command.command
5033
5071
  @dataclasses.dataclass
bumble/hid.py CHANGED
@@ -246,7 +246,7 @@ class HID(ABC, utils.EventEmitter):
246
246
  # Create a new L2CAP connection - interrupt channel
247
247
  try:
248
248
  channel = await self.connection.create_l2cap_channel(
249
- l2cap.ClassicChannelSpec(HID_CONTROL_PSM)
249
+ l2cap.ClassicChannelSpec(HID_INTERRUPT_PSM)
250
250
  )
251
251
  channel.sink = self.on_intr_pdu
252
252
  self.l2cap_intr_channel = channel
bumble/rfcomm.py CHANGED
@@ -674,10 +674,14 @@ class DLC(utils.EventEmitter):
674
674
  while (self.tx_buffer and self.tx_credits > 0) or rx_credits_needed > 0:
675
675
  # Get the next chunk, up to MTU size
676
676
  if rx_credits_needed > 0:
677
- chunk = bytes([rx_credits_needed]) + self.tx_buffer[: self.mtu - 1]
678
- self.tx_buffer = self.tx_buffer[len(chunk) - 1 :]
677
+ chunk = bytes([rx_credits_needed])
679
678
  self.rx_credits += rx_credits_needed
680
- tx_credit_spent = len(chunk) > 1
679
+ if self.tx_buffer and self.tx_credits > 0:
680
+ chunk += self.tx_buffer[: self.mtu - 1]
681
+ self.tx_buffer = self.tx_buffer[len(chunk) - 1 :]
682
+ tx_credit_spent = True
683
+ else:
684
+ tx_credit_spent = False
681
685
  else:
682
686
  chunk = self.tx_buffer[: self.mtu]
683
687
  self.tx_buffer = self.tx_buffer[len(chunk) :]
@@ -22,6 +22,7 @@ import contextlib
22
22
  import io
23
23
  import logging
24
24
  import struct
25
+ from collections.abc import Awaitable, Callable
25
26
  from typing import Any, ContextManager, Optional, Protocol
26
27
 
27
28
  from bumble import core, hci
@@ -389,15 +390,17 @@ class PumpedPacketSource(ParserSource):
389
390
 
390
391
  # -----------------------------------------------------------------------------
391
392
  class PumpedPacketSink:
392
- def __init__(self, send):
393
+ pump_task: Optional[asyncio.Task[None]]
394
+
395
+ def __init__(self, send: Callable[[bytes], Awaitable[Any]]):
393
396
  self.send_function = send
394
- self.packet_queue = asyncio.Queue()
397
+ self.packet_queue = asyncio.Queue[bytes]()
395
398
  self.pump_task = None
396
399
 
397
400
  def on_packet(self, packet: bytes) -> None:
398
401
  self.packet_queue.put_nowait(packet)
399
402
 
400
- def start(self):
403
+ def start(self) -> None:
401
404
  async def pump_packets():
402
405
  while True:
403
406
  try:
@@ -17,7 +17,7 @@
17
17
  # -----------------------------------------------------------------------------
18
18
  import logging
19
19
 
20
- import websockets.client
20
+ import websockets.asyncio.client
21
21
 
22
22
  from bumble.transport.common import (
23
23
  PumpedPacketSink,
@@ -42,7 +42,7 @@ async def open_ws_client_transport(spec: str) -> Transport:
42
42
  Example: ws://localhost:7681/v1/websocket/bt
43
43
  '''
44
44
 
45
- websocket = await websockets.client.connect(spec)
45
+ websocket = await websockets.asyncio.client.connect(spec)
46
46
 
47
47
  class WsTransport(PumpedTransport):
48
48
  async def close(self):
@@ -16,8 +16,9 @@
16
16
  # Imports
17
17
  # -----------------------------------------------------------------------------
18
18
  import logging
19
+ from typing import Optional
19
20
 
20
- import websockets
21
+ import websockets.asyncio.server
21
22
 
22
23
  from bumble.transport.common import ParserSource, PumpedPacketSink, Transport
23
24
 
@@ -40,7 +41,12 @@ async def open_ws_server_transport(spec: str) -> Transport:
40
41
  '''
41
42
 
42
43
  class WsServerTransport(Transport):
43
- def __init__(self):
44
+ sink: PumpedPacketSink
45
+ source: ParserSource
46
+ connection: Optional[websockets.asyncio.server.ServerConnection]
47
+ server: Optional[websockets.asyncio.server.Server]
48
+
49
+ def __init__(self) -> None:
44
50
  source = ParserSource()
45
51
  sink = PumpedPacketSink(self.send_packet)
46
52
  self.connection = None
@@ -48,17 +54,19 @@ async def open_ws_server_transport(spec: str) -> Transport:
48
54
 
49
55
  super().__init__(source, sink)
50
56
 
51
- async def serve(self, local_host, local_port):
57
+ async def serve(self, local_host: str, local_port: str) -> None:
52
58
  self.sink.start()
53
59
  # pylint: disable-next=no-member
54
- self.server = await websockets.serve(
55
- ws_handler=self.on_connection,
60
+ self.server = await websockets.asyncio.server.serve(
61
+ handler=self.on_connection,
56
62
  host=local_host if local_host != '_' else None,
57
63
  port=int(local_port),
58
64
  )
59
65
  logger.debug(f'websocket server ready on port {local_port}')
60
66
 
61
- async def on_connection(self, connection):
67
+ async def on_connection(
68
+ self, connection: websockets.asyncio.server.ServerConnection
69
+ ) -> None:
62
70
  logger.debug(
63
71
  f'new connection on {connection.local_address} '
64
72
  f'from {connection.remote_address}'
@@ -77,11 +85,11 @@ async def open_ws_server_transport(spec: str) -> Transport:
77
85
  # We're now disconnected
78
86
  self.connection = None
79
87
 
80
- async def send_packet(self, packet):
88
+ async def send_packet(self, packet: bytes) -> None:
81
89
  if self.connection is None:
82
90
  logger.debug('no connection, dropping packet')
83
91
  return
84
- return await self.connection.send(packet)
92
+ await self.connection.send(packet)
85
93
 
86
94
  local_host, local_port = spec.rsplit(':', maxsplit=1)
87
95
  transport = WsServerTransport()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bumble
3
- Version: 0.0.218
3
+ Version: 0.0.219
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Author-email: Google <bumble-dev@google.com>
6
6
  License-Expression: Apache-2.0
@@ -25,7 +25,7 @@ Requires-Dist: pyee>=13.0.0
25
25
  Requires-Dist: pyserial-asyncio>=0.5; platform_system != "Emscripten"
26
26
  Requires-Dist: pyserial>=3.5; platform_system != "Emscripten"
27
27
  Requires-Dist: pyusb>=1.2; platform_system != "Emscripten"
28
- Requires-Dist: websockets==13.1; platform_system != "Emscripten"
28
+ Requires-Dist: websockets>=15.0.1; platform_system != "Emscripten"
29
29
  Provides-Extra: build
30
30
  Requires-Dist: build>=0.7; extra == "build"
31
31
  Provides-Extra: test
@@ -1,17 +1,17 @@
1
1
  bumble/__init__.py,sha256=Q8jkz6rgl95IMAeInQVt_2GLoJl3DcEP2cxtrQ-ho5c,110
2
- bumble/_version.py,sha256=KD7H3kk26v8iwTiruZ8RXdlJzmt24QL0S_7OS-mLIks,708
3
- bumble/a2dp.py,sha256=sVo3w6qSsGm7Ttsqu4zeTO_Gfo63a7STTlJnaq8iJ-M,32031
2
+ bumble/_version.py,sha256=mj-phtz8CALrMdiyP-95WlA6nHLl_BYNWRSKnR4obAQ,708
3
+ bumble/a2dp.py,sha256=wvmQwVkSCFsoJv1Q1VGA17ncMnif-o5Bc-NQjgpsDbI,33454
4
4
  bumble/at.py,sha256=u93DzB5Ghrxks_ufuUqoYV2RUSowLNLMDhq_j9GrCBc,3108
5
5
  bumble/att.py,sha256=vS1dUwiuUgNU6PztARg_qPB_olLOWsAxFz6DZGX8zII,33423
6
6
  bumble/avc.py,sha256=uu33BpDU58f4fvqZyBHKfc8OSnzYovQrBk8Yst-KVrk,16383
7
- bumble/avctp.py,sha256=HtIxBtQMmaeg0Jv8oCf0Fc1vXP7gjHrQa-liR0aq5HM,9911
8
- bumble/avdtp.py,sha256=Ad-9sjZ336aDMu-LTZ17Tz7MEqcm8Cq98QVxduEDR5A,79521
9
- bumble/avrcp.py,sha256=9RnTsx_CEI0Omv2bIyhdVXH6fLg-xYtqNpp9ExHL84E,86866
7
+ bumble/avctp.py,sha256=E6JorAlrsW0hAS2y7q-DhMYY2aEAjVXMF-8FivbMN6w,9709
8
+ bumble/avdtp.py,sha256=XvCCAChz5FK5geF_KJrEjkct7QHC9GC8WAmh8GjCZPE,78498
9
+ bumble/avrcp.py,sha256=PFQ8t7Tiv3j_OV7qfVaFe0Mcn9gzhoo969AcMoVGg88,87357
10
10
  bumble/bridge.py,sha256=yXwZNUe7pRpuTt41PEmgtfjBLpQKdDwvcxfbYxObqIU,3015
11
11
  bumble/codecs.py,sha256=ZHUFvq2dhUUHp2EWYawht8zcPQGqOf5Opnh-7Ud_fb4,20917
12
12
  bumble/colors.py,sha256=gm_PqgGfUF8Nkntn652apR4HrqN3vLv249YCIfw8mtk,3112
13
13
  bumble/company_ids.py,sha256=B68e2QPsDeRYP9jjbGs4GGDwEkGxcXGTsON_CHA0uuI,118528
14
- bumble/controller.py,sha256=oIo6_3Y2_lhMPn0MUfEEN8997ry1blzT2rTUQabQwv8,68282
14
+ bumble/controller.py,sha256=JU97OmqBBxLr4r3ks7rz6zT2vddDaO-ekPgR2UVdPAE,76050
15
15
  bumble/core.py,sha256=QojIUs4nP9qo_r-FWPVxHrCdVSg6CaIzHf6GVPTuu9s,94583
16
16
  bumble/data_types.py,sha256=jLELcRiUcvRc4JcEo6vMO9kZmumZ9WuibFN-AK7ZYbc,32831
17
17
  bumble/decoder.py,sha256=0-VNWZT-u7lvK3qBpAuYT0M6Rz_bMgMi4CjfUXX_6RM,9728
@@ -21,10 +21,10 @@ bumble/gatt.py,sha256=dBd-opQVUumlLPGw7EYZM5DF-ssnym3LsxhskAJMhig,34552
21
21
  bumble/gatt_adapters.py,sha256=9uN2uXGIdlvNeSvv3nfwxCEa15uPfm5DVLR5bog_knI,13190
22
22
  bumble/gatt_client.py,sha256=jLIa7OoJgw8X7pLBGqsdSY3Sde4HSWBxGWTVWH0FPpA,44268
23
23
  bumble/gatt_server.py,sha256=Xx5UaXoNeEIcXfe1YjGrf4Mt7ZKEUak7e3dhFtdK-4Y,37907
24
- bumble/hci.py,sha256=2yEJnR6JBtxK6ghituuXCbSalifevnTqvPvnCjyrtAo,327200
24
+ bumble/hci.py,sha256=9ZN9koktUhmSJAWfPCRqaXAbECmDwEpa73lWrWizL_o,328355
25
25
  bumble/helpers.py,sha256=WFyikseIRdXUqqeOplNlmd0giOegahlXv5e324ax9ck,12611
26
26
  bumble/hfp.py,sha256=rUfd1OvNnr9FbURRjeNvLA4CcMzv3NcowVxbG4s2FXM,76746
27
- bumble/hid.py,sha256=UCPGHw-jm4i4Akk9pXVEL8_i6EdOwaOuqv2Xd_8EhXo,21054
27
+ bumble/hid.py,sha256=KMSd2_minM8F4GJUSaeYubGVvDns2BEFDhYH9f8jVdk,21056
28
28
  bumble/host.py,sha256=46fwcskNlfHyW8Ejo5wp8rHtMBZSMkR4URSdekKLPzg,68019
29
29
  bumble/keys.py,sha256=VCOrtuw-xF_4Oa5Qt-ECRKaTqabL_GbwdQUKoZX20II,13416
30
30
  bumble/l2cap.py,sha256=PZQnZQFB_GJZCCFuPpAsTuYz4E3WTgimDUAk83DUUtE,80758
@@ -32,7 +32,7 @@ bumble/link.py,sha256=O-T9fCJokvpLpTvIMAboEQbT3Sjg8L2ivSWSBH43fP0,14470
32
32
  bumble/logging.py,sha256=WvB9v6HxsnmN6DaG-oIcE7DbFcE-jT8YN3T0PGbWbD8,2351
33
33
  bumble/pairing.py,sha256=KPkJs4NgFmubdE3OhqP0uaGMm8aAg8RkHDCfAYrhTwo,10142
34
34
  bumble/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- bumble/rfcomm.py,sha256=Fkhv5CEBCMsrQtrMxRJ-21H9k85R-kLiTeXkN_Gv7wE,40917
35
+ bumble/rfcomm.py,sha256=kE3KbtLdcZhUUBcp2Xxu_G1XhU6eOciiJDfYWAOznlU,41067
36
36
  bumble/rtp.py,sha256=wyAQJ3dRU31USfZT5DgpvC_TSVYU1QPDSg_uK9-i8V4,3464
37
37
  bumble/sdp.py,sha256=PfKjPm_mDO9ZvR74zAFTcazf3MJBo0Ew0LVJMscPohA,49546
38
38
  bumble/smp.py,sha256=YhTgEngwb7JmhXugmc3VTmm_lY5RRIg_cFgk5QuywmU,78597
@@ -76,7 +76,7 @@ bumble/crypto/cryptography.py,sha256=yHznoBZ-hd8XqWheipkgn3Vdt5JydLxlTM3nTp5ayvc
76
76
  bumble/drivers/__init__.py,sha256=03lZKWOvRi2qd_iogohvtTc76vpn89c5jvhbaNzxlSM,3505
77
77
  bumble/drivers/common.py,sha256=pS783hudolLZAzF8IUWp7g6TXyQsUCEzqCsd1VGeYfQ,1507
78
78
  bumble/drivers/intel.py,sha256=2LmZL4ka1qz90WZGnrEzALd2mj7AcG_06rV03cnKKgY,24624
79
- bumble/drivers/rtk.py,sha256=tCY2nW-tn_UnYJ_0o9XkJHaiyvSEnt-zA7GI2IIDoNg,22646
79
+ bumble/drivers/rtk.py,sha256=tkLXqjhlEdp934alr5SlV00zc2B1UfKpzZpL22Hj8Lg,22690
80
80
  bumble/pandora/__init__.py,sha256=xlEwye5eIwHMDHS-qPT2weF0TT86fEUIHYCUvW6LGpc,3535
81
81
  bumble/pandora/config.py,sha256=wfmko9UDEZWeRC4fccUdJnHn9D2Bus15R-Tqn2bLoAY,2384
82
82
  bumble/pandora/device.py,sha256=U5dmH-eg61egL5sm9dlmQ5f6ZM7xxCNyQXCcMo3eScE,5333
@@ -119,7 +119,7 @@ bumble/tools/rtk_util.py,sha256=4kdaHON_pg2HElzBRaStolqvEJVWPd0eZPUyAQWAqxc,5726
119
119
  bumble/transport/__init__.py,sha256=1z6WcJ0kkqSK1iugl3hYamJe54FdB8fmNI4M8M-zNx8,7376
120
120
  bumble/transport/android_emulator.py,sha256=axEdFBj17c0dOD5lMqJjiULInG_SQVx5W7ptjyLtRJs,4281
121
121
  bumble/transport/android_netsim.py,sha256=8C2kUITCl7L1ggl5FPwWcFq4It8e9O3esEpMjRaYkkw,17563
122
- bumble/transport/common.py,sha256=C0wurvCvcEX4r6F0cWbD2x1GhamJwJoyYmYJ21pU04Q,16770
122
+ bumble/transport/common.py,sha256=yCJKUiLFEJ1qtepV1gU6hLkStHY0guKrZUNDoCS8sck,16913
123
123
  bumble/transport/file.py,sha256=aqJD5US5TVl01dOb42rV_0OzuvFsBDDlqzipyrYA4q4,2026
124
124
  bumble/transport/hci_socket.py,sha256=2PKQ43oDjayKDklx9sF98hSeyNmvTSUOWx_ooPWTjd0,6345
125
125
  bumble/transport/pty.py,sha256=yzItc5ZO7WkHZKnAeEK-1XEyY4BWot4ZAMFzQvRiSQ4,2747
@@ -132,8 +132,8 @@ bumble/transport/udp.py,sha256=_3mePVr9ALzZbOfnlMwcaaMnnLkd5kxhw5-BxkeCSMU,2281
132
132
  bumble/transport/unix.py,sha256=XbVakfqQiZVdAQnt05XWb4PymzkXIL7h0dn7Iq6xwlk,4240
133
133
  bumble/transport/usb.py,sha256=9np33CTM1Sj4mQsym8TqIZ-DN28suCC8gJfy1O-hHPA,22113
134
134
  bumble/transport/vhci.py,sha256=-S9M6iqSpdmNobliDBaUamWJtYTiQEMt_mSdfxKZypY,2281
135
- bumble/transport/ws_client.py,sha256=zq7kdg9KNYMC86vtD0oamHpDINXKoDzGrnehp8-6X0Y,1795
136
- bumble/transport/ws_server.py,sha256=huCChKKXsw2wq5n1F68O_5_8xmRKC7Xpuj1TGsL1f48,3358
135
+ bumble/transport/ws_client.py,sha256=qgPUpfnp1i5DxeilhJbKXwceVeNowXCVL05TyaBtiL0,1811
136
+ bumble/transport/ws_server.py,sha256=ttVIGfcd7Rqlo4JM8tIeJAeLGKV96vciv58fVjQCYC8,3714
137
137
  bumble/transport/grpc_protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py,sha256=NFz7pja_rxMEyU3fI-SgHLghTw4KeN1gXUjT4uglrEQ,7959
139
139
  bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi,sha256=O0qhb2L_oAekmSnqCElidwIg4PZ3XjAyQ4oEy4ycD-A,8385
@@ -175,9 +175,9 @@ bumble/vendor/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
175
175
  bumble/vendor/android/hci.py,sha256=LcV4_OBpzoLtpSiP2su7F4r3bDrHWxcQPR4OGnMVXDk,10485
176
176
  bumble/vendor/zephyr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
177
  bumble/vendor/zephyr/hci.py,sha256=ysct40uIVohaKKLrWjcWo-7YqozU17xGia2dWeHoMoI,3435
178
- bumble-0.0.218.dist-info/licenses/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
179
- bumble-0.0.218.dist-info/METADATA,sha256=EdHBIsGq3Uaq02oNiTArIIVLe5BkYbWmCX34jclv5Qo,6154
180
- bumble-0.0.218.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
181
- bumble-0.0.218.dist-info/entry_points.txt,sha256=mX5dzixNMRo4CTAEQqiYTr-JIaWF62TYrRvJOstjjL8,1081
182
- bumble-0.0.218.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
183
- bumble-0.0.218.dist-info/RECORD,,
178
+ bumble-0.0.219.dist-info/licenses/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
179
+ bumble-0.0.219.dist-info/METADATA,sha256=NZSYDWv75ArP5gfp5mQ8W7ldDUdSrxi7fxnmJhyn1hM,6156
180
+ bumble-0.0.219.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
181
+ bumble-0.0.219.dist-info/entry_points.txt,sha256=mX5dzixNMRo4CTAEQqiYTr-JIaWF62TYrRvJOstjjL8,1081
182
+ bumble-0.0.219.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
183
+ bumble-0.0.219.dist-info/RECORD,,