rustplus 6.0.4__tar.gz → 6.0.7__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.
- {rustplus-6.0.4/rustplus.egg-info → rustplus-6.0.7}/PKG-INFO +4 -3
- {rustplus-6.0.4 → rustplus-6.0.7}/requirements.txt +1 -1
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/__init__.py +3 -2
- rustplus-6.0.7/rustplus/icons/radtown.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/camera/camera_manager.py +1 -1
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/rustplus_proto/rustplus.py +6 -1
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/__init__.py +1 -1
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/utils.py +5 -4
- {rustplus-6.0.4 → rustplus-6.0.7/rustplus.egg-info}/PKG-INFO +4 -3
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus.egg-info/SOURCES.txt +1 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus.egg-info/requires.txt +1 -1
- {rustplus-6.0.4 → rustplus-6.0.7}/setup.py +9 -9
- {rustplus-6.0.4 → rustplus-6.0.7}/LICENSE +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/MANIFEST.in +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/README.md +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/chat_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/command.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/entity_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/protobuf_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/annotations/team_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/commands/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/commands/chat_command.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/commands/chat_command_data.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/commands/command_options.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/events/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/events/chat_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/events/entity_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/events/protobuf_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/events/team_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/exceptions/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/exceptions/exceptions.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/airfield.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/arctic_base.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/bandit.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/barn.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/cargo.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/chinook.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/chinook_blades.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/crate.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/desert_base.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/dome.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/excavator.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/explosion.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/ferryterminal.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/fishing.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/harbour.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/icon.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/junkyard.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/large_oil_rig.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/launchsite.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/lighthouse.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/military_tunnels.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/mining_outpost.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/mining_quarry_hqm.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/mining_quarry_stone.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/mining_quarry_sulfur.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/missile_silo.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/outpost.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/oxums.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/patrol.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/power_plant.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/satellite.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/sewer.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/small_oil_rig.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/stables.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/supermarket.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/swamp.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/train.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/train_yard.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/underwater_lab.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/vending_machine.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/icons/water_treatment.png +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/identification/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/identification/handler_list.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/identification/registered_listener.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/identification/server_details.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/camera/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/camera/camera_constants.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/camera/camera_parser.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/camera/structures.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/fcm/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/fcm/fcm_listener.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/proxy/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/proxy/proxy_value_grabber.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/ratelimiter/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/rustplus_proto/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/websocket/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/remote/websocket/ws.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/rust_api.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_chat_message.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_contents.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_entity_info.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_error.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_info.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_item.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_map.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_marker.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_team_info.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/rust_time.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/serialization.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/structs/util.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/deprecated.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/emojis.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/fonts/PermanentMarker.ttf +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/fonts/__init__.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/grab_items.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus/utils/yielding_event.py +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus.egg-info/dependency_links.txt +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/rustplus.egg-info/top_level.txt +0 -0
- {rustplus-6.0.4 → rustplus-6.0.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: rustplus
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.7
|
|
4
4
|
Summary: A python wrapper for the Rust Plus API
|
|
5
5
|
Home-page: https://github.com/olijeffers0n/rustplus
|
|
6
6
|
Author: olijeffers0n
|
|
@@ -17,12 +17,13 @@ Requires-Dist: http-ece
|
|
|
17
17
|
Requires-Dist: requests
|
|
18
18
|
Requires-Dist: numpy
|
|
19
19
|
Requires-Dist: scipy
|
|
20
|
-
Requires-Dist: betterproto==2.0.
|
|
20
|
+
Requires-Dist: betterproto==2.0.0b7
|
|
21
21
|
Dynamic: author
|
|
22
22
|
Dynamic: description
|
|
23
23
|
Dynamic: description-content-type
|
|
24
24
|
Dynamic: home-page
|
|
25
25
|
Dynamic: license
|
|
26
|
+
Dynamic: license-file
|
|
26
27
|
Dynamic: project-url
|
|
27
28
|
Dynamic: requires-dist
|
|
28
29
|
Dynamic: requires-python
|
|
@@ -6,12 +6,13 @@ from .rust_api import RustSocket
|
|
|
6
6
|
from .identification import ServerDetails
|
|
7
7
|
from .annotations import Command, ChatEvent, ProtobufEvent, TeamEvent, EntityEvent
|
|
8
8
|
from .remote.fcm import FCMListener
|
|
9
|
+
from .remote.camera import MovementControls, CameraMovementOptions
|
|
9
10
|
from .commands import CommandOptions, ChatCommand
|
|
10
11
|
from .events import ChatEventPayload, TeamEventPayload, EntityEventPayload
|
|
11
12
|
from .utils import convert_event_type_to_name, Emoji, convert_coordinates
|
|
12
|
-
from .structs import RustError, RustMarker
|
|
13
|
+
from .structs import RustError, RustMarker, Vector
|
|
13
14
|
|
|
14
15
|
__name__ = "rustplus"
|
|
15
16
|
__author__ = "olijeffers0n"
|
|
16
|
-
__version__ = "6.0.
|
|
17
|
+
__version__ = "6.0.7"
|
|
17
18
|
__support__ = "Discord: https://discord.gg/nQqJe8qvP8"
|
|
Binary file
|
|
@@ -155,7 +155,7 @@ class CameraManager:
|
|
|
155
155
|
subscribe.camera_id = self._cam_id
|
|
156
156
|
packet.camera_subscribe = subscribe
|
|
157
157
|
|
|
158
|
-
self.rust_socket.ws.send_message(packet, True)
|
|
158
|
+
await self.rust_socket.ws.send_message(packet, True)
|
|
159
159
|
|
|
160
160
|
self.time_since_last_subscribe = time.time()
|
|
161
161
|
self._open = True
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
2
|
# sources: rustplus.proto
|
|
3
3
|
# plugin: python-betterproto
|
|
4
|
+
# This file has been @generated
|
|
5
|
+
|
|
4
6
|
from dataclasses import dataclass
|
|
5
7
|
from typing import List
|
|
6
8
|
|
|
@@ -8,6 +10,7 @@ import betterproto
|
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
class AppEntityType(betterproto.Enum):
|
|
13
|
+
UnknownType = 0
|
|
11
14
|
Switch = 1
|
|
12
15
|
Alarm = 2
|
|
13
16
|
StorageMonitor = 3
|
|
@@ -27,6 +30,7 @@ class AppMarkerType(betterproto.Enum):
|
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
class AppCameraRaysEntityType(betterproto.Enum):
|
|
33
|
+
UnknownType = 0
|
|
30
34
|
Tree = 1
|
|
31
35
|
Player = 2
|
|
32
36
|
|
|
@@ -278,6 +282,7 @@ class AppInfo(betterproto.Message):
|
|
|
278
282
|
nexus: str = betterproto.string_field(13)
|
|
279
283
|
nexus_id: int = betterproto.int32_field(14)
|
|
280
284
|
nexus_zone: str = betterproto.string_field(15)
|
|
285
|
+
cameras_enabled: bool = betterproto.bool_field(16)
|
|
281
286
|
|
|
282
287
|
|
|
283
288
|
@dataclass
|
|
@@ -427,7 +432,7 @@ class AppClanChat(betterproto.Message):
|
|
|
427
432
|
|
|
428
433
|
@dataclass
|
|
429
434
|
class AppNexusAuth(betterproto.Message):
|
|
430
|
-
|
|
435
|
+
server_id: str = betterproto.string_field(1)
|
|
431
436
|
player_token: int = betterproto.int32_field(2)
|
|
432
437
|
|
|
433
438
|
|
|
@@ -83,11 +83,11 @@ def generate_grid(
|
|
|
83
83
|
|
|
84
84
|
def convert_coordinates(coords: Tuple[int, int], map_size: int) -> Tuple[str, int]:
|
|
85
85
|
grids = list(string.ascii_uppercase)
|
|
86
|
-
grids.extend(
|
|
87
|
-
a + b for a in string.ascii_uppercase for b in string.ascii_uppercase
|
|
88
|
-
)
|
|
86
|
+
grids.extend(a + b for a in string.ascii_uppercase for b in string.ascii_uppercase)
|
|
89
87
|
|
|
90
|
-
return grids[int(coords[0] // GRID_DIAMETER)], int(
|
|
88
|
+
return grids[int(coords[0] // GRID_DIAMETER)], int(
|
|
89
|
+
(map_size - coords[1]) // GRID_DIAMETER
|
|
90
|
+
)
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
def format_coord(x: int, y: int, map_size: int) -> Tuple[int, int]:
|
|
@@ -217,6 +217,7 @@ def convert_monument(name: str, override_images: Dict[str, Image.Image]) -> Imag
|
|
|
217
217
|
"mining_quarry_hqm_display_name": "mining_quarry_hqm.png",
|
|
218
218
|
"train_tunnel_link_display_name": "train.png",
|
|
219
219
|
"train_tunnel_display_name": "train.png",
|
|
220
|
+
"radtown": "radtown.png",
|
|
220
221
|
}
|
|
221
222
|
|
|
222
223
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: rustplus
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.7
|
|
4
4
|
Summary: A python wrapper for the Rust Plus API
|
|
5
5
|
Home-page: https://github.com/olijeffers0n/rustplus
|
|
6
6
|
Author: olijeffers0n
|
|
@@ -17,12 +17,13 @@ Requires-Dist: http-ece
|
|
|
17
17
|
Requires-Dist: requests
|
|
18
18
|
Requires-Dist: numpy
|
|
19
19
|
Requires-Dist: scipy
|
|
20
|
-
Requires-Dist: betterproto==2.0.
|
|
20
|
+
Requires-Dist: betterproto==2.0.0b7
|
|
21
21
|
Dynamic: author
|
|
22
22
|
Dynamic: description
|
|
23
23
|
Dynamic: description-content-type
|
|
24
24
|
Dynamic: home-page
|
|
25
25
|
Dynamic: license
|
|
26
|
+
Dynamic: license-file
|
|
26
27
|
Dynamic: project-url
|
|
27
28
|
Dynamic: requires-dist
|
|
28
29
|
Dynamic: requires-python
|
|
@@ -12,23 +12,23 @@ with open("requirements.txt") as input_file:
|
|
|
12
12
|
for line in input_file.readlines():
|
|
13
13
|
requirements.append(line.strip())
|
|
14
14
|
|
|
15
|
-
with open("README.md", errors=
|
|
15
|
+
with open("README.md", errors="ignore") as input_file:
|
|
16
16
|
readme = input_file.read()
|
|
17
17
|
|
|
18
18
|
setup(
|
|
19
|
-
name=
|
|
20
|
-
author=
|
|
21
|
-
url=
|
|
19
|
+
name="rustplus",
|
|
20
|
+
author="olijeffers0n",
|
|
21
|
+
url="https://github.com/olijeffers0n/rustplus",
|
|
22
22
|
project_urls={
|
|
23
23
|
"Issue tracker": "https://github.com/olijeffers0n/rustplus/issues",
|
|
24
24
|
},
|
|
25
25
|
version=version,
|
|
26
|
-
packages=find_packages(include=[
|
|
27
|
-
license=
|
|
28
|
-
description=
|
|
26
|
+
packages=find_packages(include=["rustplus", "rustplus.*"]),
|
|
27
|
+
license="MIT",
|
|
28
|
+
description="A python wrapper for the Rust Plus API",
|
|
29
29
|
long_description=readme,
|
|
30
30
|
include_package_data=True,
|
|
31
|
-
long_description_content_type=
|
|
31
|
+
long_description_content_type="text/markdown",
|
|
32
32
|
install_requires=requirements,
|
|
33
|
-
python_requires=
|
|
33
|
+
python_requires=">=3.8.0",
|
|
34
34
|
)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|