From 91f3f0ba7949fd5a9ebaacfe3773f6d61fd8492f Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Tue, 3 Oct 2017 10:41:45 +0530 Subject: [PATCH 01/35] #217 fix modbus tcp read --- pymodbus/transaction.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pymodbus/transaction.py b/pymodbus/transaction.py index a70c268a4..1efd3c17f 100644 --- a/pymodbus/transaction.py +++ b/pymodbus/transaction.py @@ -111,12 +111,13 @@ def execute(self, request): _logger.debug("Running transaction %d" % request.transaction_id) self.client.framer.resetFrame() expected_response_length = None - if hasattr(request, "get_response_pdu_size"): - response_pdu_size = request.get_response_pdu_size() - if isinstance(self.client.framer, ModbusAsciiFramer): - response_pdu_size = response_pdu_size * 2 - if response_pdu_size: - expected_response_length = self._calculate_response_length(response_pdu_size) + if not isinstance(self.client.framer, ModbusSocketFramer): + if hasattr(request, "get_response_pdu_size"): + response_pdu_size = request.get_response_pdu_size() + if isinstance(self.client.framer, ModbusAsciiFramer): + response_pdu_size = response_pdu_size * 2 + if response_pdu_size: + expected_response_length = self._calculate_response_length(response_pdu_size) while retries > 0: try: From 22f1843c4a5eadab46b8a0d4d9c34379efc63a2e Mon Sep 17 00:00:00 2001 From: Jack Date: Tue, 17 Oct 2017 21:25:42 -0700 Subject: [PATCH 02/35] Move twisted requirement to extra (#227) Currently some of the asynchronous dependencies (pyasn1, pycrypto) are listed under a 'twisted' extra, but twisted is not. This commit moves twisted to the 'twisted' extra, so that `pip install pymodbus['twisted'] installs twisted and all async dependencies, and `pip install pymodbus` installs only pyserial. --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 258524c03..b8619fd79 100644 --- a/setup.py +++ b/setup.py @@ -63,13 +63,12 @@ include_package_data = True, zip_safe = True, install_requires = [ - 'twisted >= 12.2.0', 'pyserial >= 2.6' ], extras_require = { 'quality' : [ 'coverage >= 3.5.3', 'nose >= 1.2.1', 'mock >= 1.0.0', 'pep8 >= 1.3.3' ], 'documents' : [ 'sphinx >= 1.1.3' ], - 'twisted' : [ 'pyasn1 >= 0.1.4', 'pycrypto >= 2.6' ], + 'twisted' : [ 'twisted >= 12.2.0', 'pyasn1 >= 0.1.4', 'pycrypto >= 2.6' ], }, test_suite = 'nose.collector', cmdclass = command_classes, From 4c896d1c99f85e96921a1d62537bb952cbb99dc9 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Thu, 26 Oct 2017 09:51:15 +0530 Subject: [PATCH 03/35] #157 Pass remote unit id when using remote slave context --- pymodbus/datastore/remote.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/pymodbus/datastore/remote.py b/pymodbus/datastore/remote.py index 32d4ecf56..0183f8919 100644 --- a/pymodbus/datastore/remote.py +++ b/pymodbus/datastore/remote.py @@ -17,12 +17,14 @@ class RemoteSlaveContext(IModbusSlaveContext): a remote device (depending on the client used) ''' - def __init__(self, client): + def __init__(self, client, unit=None): ''' Initializes the datastores :param client: The client to retrieve values with + :param unit: Unit ID of the remote slave ''' self._client = client + self.unit = unit self.__build_mapping() def reset(self): @@ -77,17 +79,20 @@ def __build_mapping(self): A quick helper method to build the function code mapper. ''' + kwargs = {} + if self.unit: + kwargs["unit"] = self.unit self.__get_callbacks = { - 'd': lambda a, c: self._client.read_discrete_inputs(a, c), - 'c': lambda a, c: self._client.read_coils(a, c), - 'h': lambda a, c: self._client.read_holding_registers(a, c), - 'i': lambda a, c: self._client.read_input_registers(a, c), + 'd': lambda a, c: self._client.read_discrete_inputs(a, c, **kwargs), + 'c': lambda a, c: self._client.read_coils(a, c, **kwargs), + 'h': lambda a, c: self._client.read_holding_registers(a, c, **kwargs), + 'i': lambda a, c: self._client.read_input_registers(a, c, **kwargs), } self.__set_callbacks = { - 'd': lambda a, v: self._client.write_coils(a, v), - 'c': lambda a, v: self._client.write_coils(a, v), - 'h': lambda a, v: self._client.write_registers(a, v), - 'i': lambda a, v: self._client.write_registers(a, v), + 'd': lambda a, v: self._client.write_coils(a, v, **kwargs), + 'c': lambda a, v: self._client.write_coils(a, v, **kwargs), + 'h': lambda a, v: self._client.write_registers(a, v, **kwargs), + 'i': lambda a, v: self._client.write_registers(a, v, **kwargs), } def __extract_result(self, fx, result): From f226bcd1d3faac5a3c23695eb5b0d4eb0011e428 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Thu, 26 Oct 2017 09:51:50 +0530 Subject: [PATCH 04/35] #190 fix asynchronous processor example --- examples/common/asynchronous-processor.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/common/asynchronous-processor.py b/examples/common/asynchronous-processor.py index b5d3f8f48..e903610de 100755 --- a/examples/common/asynchronous-processor.py +++ b/examples/common/asynchronous-processor.py @@ -19,8 +19,8 @@ #---------------------------------------------------------------------------# #from pymodbus.transaction import ModbusBinaryFramer as ModbusFramer #from pymodbus.transaction import ModbusAsciiFramer as ModbusFramer -#from pymodbus.transaction import ModbusRtuFramer as ModbusFramer -from pymodbus.transaction import ModbusSocketFramer as ModbusFramer +from pymodbus.transaction import ModbusRtuFramer as ModbusFramer +# from pymodbus.transaction import ModbusSocketFramer as ModbusFramer #---------------------------------------------------------------------------# # configure the client logging @@ -33,7 +33,7 @@ #---------------------------------------------------------------------------# # state a few constants #---------------------------------------------------------------------------# -SERIAL_PORT = "/dev/ttyS0" +SERIAL_PORT = "/dev/ttyp0" STATUS_REGS = (1, 2) STATUS_COILS = (1, 3) CLIENT_DELAY = 1 @@ -62,7 +62,7 @@ def fetch_holding_registers(self): ''' Defer fetching holding registers ''' log.debug("Starting the next cycle") - d = self.read_holding_registers(*STATUS_REGS) + d = self.read_holding_registers(*STATUS_REGS, unit=1) d.addCallbacks(self.send_holding_registers, self.error_handler) def send_holding_registers(self, response): @@ -72,7 +72,7 @@ def send_holding_registers(self, response): ''' self.endpoint.write(response.getRegister(0)) self.endpoint.write(response.getRegister(1)) - d = self.read_coils(*STATUS_COILS) + d = self.read_coils(*STATUS_COILS, unit=1) d.addCallbacks(self.start_next_cycle, self.error_handler) def start_next_cycle(self, response): From 5f0d2ed5347f2d8034a25091430c820c1e81e2cd Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Thu, 26 Oct 2017 09:53:01 +0530 Subject: [PATCH 05/35] #60 Check for slave unit id before processing the request for serial servers --- pymodbus/server/async.py | 4 +++- pymodbus/server/sync.py | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pymodbus/server/async.py b/pymodbus/server/async.py index 0e1649e1a..b72eb3b53 100644 --- a/pymodbus/server/async.py +++ b/pymodbus/server/async.py @@ -58,7 +58,9 @@ def dataReceived(self, data): if _logger.isEnabledFor(logging.DEBUG): _logger.debug(' '.join([hex(byte2int(x)) for x in data])) if not self.factory.control.ListenOnly: - self.framer.processIncomingPacket(data, self._execute) + unit_address = byte2int(data[0]) + if unit_address in self.factory.store: + self.framer.processIncomingPacket(data, self._execute) def _execute(self, request): ''' Executes the request and returns the result diff --git a/pymodbus/server/sync.py b/pymodbus/server/sync.py index 4559513f2..f4beeea91 100644 --- a/pymodbus/server/sync.py +++ b/pymodbus/server/sync.py @@ -102,7 +102,9 @@ def handle(self): if data: if _logger.isEnabledFor(logging.DEBUG): _logger.debug(" ".join([hex(byte2int(x)) for x in data])) - self.framer.processIncomingPacket(data, self.execute) + unit_address = byte2int(data[0]) + if unit_address in self.server.context: + self.framer.processIncomingPacket(data, self.execute) except Exception as msg: # since we only have a single socket, we cannot exit # Clear frame buffer @@ -198,6 +200,7 @@ class ModbusDisconnectedRequestHandler(ModbusBaseRequestHandler): only difference is that we have to specify who to send the resulting packet data to. ''' + socket = None def handle(self): ''' Callback when we receive any data @@ -205,7 +208,7 @@ def handle(self): reset_frame = False while self.running: try: - data, self.request = self.request + data, self.socket = self.request if not data: self.running = False if _logger.isEnabledFor(logging.DEBUG): @@ -236,7 +239,7 @@ def send(self, message): pdu = self.framer.buildPacket(message) if _logger.isEnabledFor(logging.DEBUG): _logger.debug('send: %s' % b2a_hex(pdu)) - return self.request.sendto(pdu, self.client_address) + return self.socket.sendto(pdu, self.client_address) #---------------------------------------------------------------------------# From 6030c25abb5ab0b835d7c7013be3db6f7b4cbb5c Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Thu, 26 Oct 2017 10:09:40 +0530 Subject: [PATCH 06/35] #209 bump version to 1.4.0.rc1 --- pymodbus/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymodbus/version.py b/pymodbus/version.py index f95e10aa0..cb4cdf325 100644 --- a/pymodbus/version.py +++ b/pymodbus/version.py @@ -41,7 +41,7 @@ def __str__(self): return '[%s, version %s]' % (self.package, self.short()) -version = Version('pymodbus', 1, 3, 2) +version = Version('pymodbus', 1, 4, 0, "rc1") From 634abafd0080d8f31752a151c0bfe19f4c258d4b Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Fri, 27 Oct 2017 09:34:47 +0530 Subject: [PATCH 07/35] Update ISSUE_TEMPLATE.md Add issue field specific to Modbus server /client used --- .github/ISSUE_TEMPLATE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 593b1ed1f..3bab3a277 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -14,6 +14,9 @@ Before opening a new issue, make sure you do the following: * Pymodbus: * Modbus Hardware (if used): +### Pymodbus Specific +* Server: tcp/rtu/ascii - sync/async +* Client: tcp/rtu/ascii - sync/async ### Description From 01f58198f49efe0f4db78946b46b022f33a5da6d Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Fri, 27 Oct 2017 12:09:50 +0530 Subject: [PATCH 08/35] Fix failing tests --- test/test_server_sync.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/test_server_sync.py b/test/test_server_sync.py index 348f2ff4c..d9351bd07 100644 --- a/test/test_server_sync.py +++ b/test/test_server_sync.py @@ -17,6 +17,7 @@ from pymodbus.server.sync import StartTcpServer, StartUdpServer, StartSerialServer from pymodbus.exceptions import NotImplementedException from pymodbus.bit_read_message import ReadCoilsRequest, ReadCoilsResponse +from pymodbus.datastore import ModbusServerContext import sys from pymodbus.compat import socketserver @@ -97,6 +98,8 @@ def testModbusSingleRequestHandlerHandle(self): handler.framer = Mock() handler.framer.buildPacket.return_value = b"message" handler.request = Mock() + handler.socket = Mock() + handler.server = Mock() handler.request.recv.return_value = b"\x12\x34" # exit if we are not running @@ -109,6 +112,8 @@ def _callback1(a, b): handler.running = False # stop infinite loop handler.framer.processIncomingPacket.side_effect = _callback1 handler.running = True + # Ugly hack + handler.server.context = ModbusServerContext(slaves={18: None}, single=False) handler.handle() self.assertEqual(handler.framer.processIncomingPacket.call_count, 1) @@ -128,7 +133,7 @@ def _callback2(a, b): def testModbusConnectedRequestHandlerSend(self): handler = socketserver.BaseRequestHandler(None, None, None) handler.__class__ = ModbusConnectedRequestHandler - handler.framer = Mock() + handler.framer = Mock() handler.framer.buildPacket.return_value = b"message" handler.request = Mock() request = ReadCoilsResponse([1]) @@ -187,13 +192,14 @@ def testModbusDisconnectedRequestHandlerSend(self): handler.framer = Mock() handler.framer.buildPacket.return_value = b"message" handler.request = Mock() + handler.socket = Mock() request = ReadCoilsResponse([1]) handler.send(request) - self.assertEqual(handler.request.sendto.call_count, 1) + self.assertEqual(handler.socket.sendto.call_count, 1) request.should_respond = False handler.send(request) - self.assertEqual(handler.request.sendto.call_count, 1) + self.assertEqual(handler.socket.sendto.call_count, 1) def testModbusDisconnectedRequestHandlerHandle(self): handler = socketserver.BaseRequestHandler(None, None, None) From 2bbb5e533be31db89c2ea4cd94eaf3086ad2b3b2 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Mon, 6 Nov 2017 11:38:05 +0530 Subject: [PATCH 09/35] Fix example remote_server_context (#236) Fix #234 Note to #190 --- examples/contrib/remote_server_context.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/contrib/remote_server_context.py b/examples/contrib/remote_server_context.py index 594eeb506..5ade25b32 100644 --- a/examples/contrib/remote_server_context.py +++ b/examples/contrib/remote_server_context.py @@ -141,6 +141,7 @@ def __init__(self, client): 'h': lambda a, v, s: client.write_registers(a, v, s), 'i': lambda a, v, s: client.write_registers(a, v, s), } + self._client = client self.slaves = {} # simply a cache def __str__(self): @@ -157,7 +158,7 @@ def __iter__(self): :returns: An iterator over the slave contexts ''' # note, this may not include all slaves - return self.__slaves.iteritems() + return iter(self.slaves.items()) def __contains__(self, slave): ''' Check if the given slave is in this list From 27a834ef43dc4184a908c3376ed16c4bbafd12c1 Mon Sep 17 00:00:00 2001 From: Rahul Raghunath Date: Fri, 24 Nov 2017 17:17:30 +0530 Subject: [PATCH 10/35] In the start TCP, UDP and Seriel server, we are running a quick check (#242) to see weather the thread in which the helpers are executed are the Main thread or the spawned thread. This infomation is passed to reactor.run() to the flag installSignalHandlers. True is passed if the thread is a main thread, else false. This is done to prevent errors when running the helpers from a spawned thread. --- pymodbus/server/async.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pymodbus/server/async.py b/pymodbus/server/async.py index b72eb3b53..ca8e5a875 100644 --- a/pymodbus/server/async.py +++ b/pymodbus/server/async.py @@ -6,6 +6,7 @@ from binascii import b2a_hex from twisted.internet import protocol from twisted.internet.protocol import ServerFactory +from twisted.internet import reactor from pymodbus.constants import Defaults from pymodbus.factory import ServerDecoder @@ -18,7 +19,7 @@ from pymodbus.pdu import ModbusExceptions as merror from pymodbus.internal.ptwisted import InstallManagementConsole from pymodbus.compat import byte2int -from twisted.internet import reactor +from pymodbus.compat import IS_PYTHON3 #---------------------------------------------------------------------------# # Logging @@ -204,6 +205,21 @@ def _send(self, message, addr): #---------------------------------------------------------------------------# # Starting Factories #---------------------------------------------------------------------------# +def _is_main_thread(): + import threading + + if IS_PYTHON3: + if threading.current_thread() != threading.main_thread(): + _logger.debug("Starting in spawned thread") + return False + else: + if not isinstance(threading.current_thread(), threading._MainThread): + _logger.debug("Starting in spawned thread") + return False + _logger.debug("Starting in Main thread") + return True + + def StartTcpServer(context, identity=None, address=None, console=False, **kwargs): ''' Helper method to start the Modbus Async TCP server @@ -223,7 +239,7 @@ def StartTcpServer(context, identity=None, address=None, console=False, **kwargs _logger.info("Starting Modbus TCP Server on %s:%s" % address) reactor.listenTCP(address[1], factory, interface=address[0]) - reactor.run() + reactor.run(installSignalHandlers=_is_main_thread()) def StartUdpServer(context, identity=None, address=None, **kwargs): @@ -242,7 +258,7 @@ def StartUdpServer(context, identity=None, address=None, **kwargs): _logger.info("Starting Modbus UDP Server on %s:%s" % address) reactor.listenUDP(address[1], server, interface=address[0]) - reactor.run() + reactor.run(installSignalHandlers=_is_main_thread()) def StartSerialServer(context, identity=None, @@ -272,7 +288,7 @@ def StartSerialServer(context, identity=None, protocol = factory.buildProtocol(None) SerialPort.getHost = lambda self: port # hack for logging SerialPort(protocol, port, reactor, baudrate) - reactor.run() + reactor.run(installSignalHandlers=_is_main_thread()) #---------------------------------------------------------------------------# # Exported symbols From b1b9e4fbd833eba4a7a0775a9d4dd4089cb43be5 Mon Sep 17 00:00:00 2001 From: Rahul Raghunath Date: Sat, 25 Nov 2017 10:49:44 +0530 Subject: [PATCH 11/35] #84: Stop Asynchronous Server (#243) * New helper function to help stop Asynchronous server are being added. Calling this helper function will kill the main thread * #84: Removing redundant parameters to method _is_main_thread * #84: Fixed loggers * #84: Retaining one generic StopServer command that will cater to both TCP and Seriel Server * #84 Add docuementation to StopServer helper function --- pymodbus/server/async.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pymodbus/server/async.py b/pymodbus/server/async.py index ca8e5a875..05a05fff7 100644 --- a/pymodbus/server/async.py +++ b/pymodbus/server/async.py @@ -290,9 +290,24 @@ def StartSerialServer(context, identity=None, SerialPort(protocol, port, reactor, baudrate) reactor.run(installSignalHandlers=_is_main_thread()) + +def StopServer(): + """ + Helper method to stop Async Server + """ + from twisted.internet import reactor + if _is_main_thread(): + reactor.stop() + _logger.debug("Stopping main thread") + else: + reactor.callFromThread(reactor.stop) + _logger.debug("Stopping current thread") + + + #---------------------------------------------------------------------------# # Exported symbols #---------------------------------------------------------------------------# __all__ = [ - "StartTcpServer", "StartUdpServer", "StartSerialServer", + "StartTcpServer", "StartUdpServer", "StartSerialServer", "StopServer" ] From c0e489cd4c89dd168c4a37ac539eadd07aaa1f9c Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Tue, 28 Nov 2017 12:11:02 +0530 Subject: [PATCH 12/35] Test dev (#240) * PYM-2: - The issue listed was due to wrong messages being passed by the user. Upon passing the right messages codes, the parser works as expected on all counts. - There is also changes that make the parser compatible with python2 and python3 - Verifier that the tool works on both python3 and python2 for all MODBUS message codes on TCP, RTU, and BIN * PYM-2: Checking the incoming framer. If te Framer is a Binary Framer, we take the unit address as the second incoming bite as opposed to the first bite. This is was done while fixing the message parsers for binary messages * PYM-2: Changed the modbus binary header size from 2 to 1. According to the docs: Modbus Binary Frame Controller:: [ Start ][Address ][ Function ][ Data ][ CRC ][ End ] 1b 1b 1b Nb 2b 1b * PYM-3: Script is now compatible with both python2 and python3 * WIP * PYM-2: Added a new switch: -t --transaction This switch is meant to be used when we wish to parse messages directly from the logs of Modbus. The format of a message as shown in the logs is like bellow: 0x7b 0x1 0x5 0x0 0x0 0xff 0x0 0x8c 0x3a 0x7d We can pass this as the message to the parser along with the -t witch to convert it into a compatible message to be parsed. EG: (modbus3) [~/pymodbus/examples/contrib]$ ./message-parser.py -b -t -p binary -m "0x7b 0x1 0x5 0x0 0x0 0xff 0x0 0x8c 0x3a 0x7d" ================================================================================ Decoding Message b'7b01050000ff008c3a7d' ================================================================================ ServerDecoder -------------------------------------------------------------------------------- name = WriteSingleCoilRequest transaction_id = 0x0 protocol_id = 0x0 unit_id = . [1] skip_encode = 0x0 check = 0x0 address = 0x0 value = 0x1 documentation = This function code is used to write a single output to either ON or OFF in a remote device. The requested ON/OFF state is specified by a constant in the request data field. A value of FF 00 hex requests the output to be ON. A value of 00 00 requests it to be OFF. All other values are illegal and will not affect the output. The Request PDU specifies the address of the coil to be forced. Coils are addressed starting at zero. Therefore coil numbered 1 is addressed as 0. The requested ON/OFF state is specified by a constant in the Coil Value field. A value of 0XFF00 requests the coil to be ON. A value of 0X0000 requests the coil to be off. All other values are illegal and will not affect the coil. ClientDecoder -------------------------------------------------------------------------------- name = WriteSingleCoilResponse transaction_id = 0x0 protocol_id = 0x0 unit_id = . [1] skip_encode = 0x0 check = 0x0 address = 0x0 value = 0x1 documentation = The normal response is an echo of the request, returned after the coil state has been written. * PYM-2: Removing additional dependancy and making use of existing porting tools * PYM-3: Removing additional dependancy and making use of existing porting tools * Initial Bitbucket Pipelines configuration * bitbucket-pipelines.yml edited online with Bitbucket * bitbucket-pipelines.yml edited online with Bitbucket * PYM-2: Updated the transaction tests for BinaryFramerTransaction. The header for Binary trasaction is of size 1. This was recrtified earlier commits of this branch. The test ensure these changes * PYM-6: Minor Cleanup task Removing the argument handler in TCP Syncronous server. This argument is not used any where. * PYM-6: ModbusUdpServer and ModbusTcpServer will now accept any legal Modbus request handler. The request handler being passed will have to be of instance ModbusBaseRequestHandler. The default request handler is ModbusDisconnectedRequestHandler. I.e., is no handler is passed, or if the handler is not of type ModbusBaseRequestHandler, ModbusDisconnectedRequestHandler will be made use of. * PYM-6: Removing uneccessary check if handler is of type ModbusBaseRequestHandler * PYM-8: Example that read from a database as a datastore * PYM-8: Added two new datastores that can be used. - SQLite3 - Reddis * Small fixes * Small fixes * Small fixes * Cleanup * PYM-8: Updated the example to first write a random value at a random afddress to a database and then read from that address * PYM-8: Added neccessary checks and methods to allow hassle free writes to database. The process first checks if the address and value are already present in the database before performing a write. This ensures that database transaction errors will now occur in cases where repetetive data is being written. * Cleanup: Removing pdb placed during testing and other comments * bitbucket-pipelines.yml deleted online with Bitbucket * #240 Fix PR failures * #240 fix Travis build failures * #190 fix import error in dbstore-update-server example * Small changes and typo fixed in pymodbus utilities and redis datastore helpers * Added tests for redis datastore helpers * Minor fixes to SQL datastore * Unit tests for SQL datastore - 100% coverage * Tests now compatible with python3 and python2 --- examples/common/dbstore-update-server.py | 94 +++++++ examples/contrib/message-generator.py | 27 +- examples/contrib/message-parser.py | 40 ++- pymodbus/datastore/database/__init__.py | 7 + .../datastore/database/redis_datastore.py | 104 ++++---- .../datastore/database/sql_datastore.py | 53 ++-- pymodbus/server/sync.py | 11 +- pymodbus/transaction.py | 6 +- pymodbus/utilities.py | 9 +- requirements-tests.txt | 3 + test/test_datastore.py | 238 +++++++++++++++++- test/test_transaction.py | 14 +- 12 files changed, 494 insertions(+), 112 deletions(-) create mode 100644 examples/common/dbstore-update-server.py create mode 100644 pymodbus/datastore/database/__init__.py rename examples/contrib/redis-datastore.py => pymodbus/datastore/database/redis_datastore.py (71%) rename examples/contrib/database-datastore.py => pymodbus/datastore/database/sql_datastore.py (80%) diff --git a/examples/common/dbstore-update-server.py b/examples/common/dbstore-update-server.py new file mode 100644 index 000000000..b0ce87bf0 --- /dev/null +++ b/examples/common/dbstore-update-server.py @@ -0,0 +1,94 @@ +''' +Pymodbus Server With Updating Thread +-------------------------------------------------------------------------- +This is an example of having a background thread updating the +context in an SQLite4 database while the server is operating. + +This scrit generates a random address range (within 0 - 65000) and a random +value and stores it in a database. It then reads the same address to verify +that the process works as expected + +This can also be done with a python thread:: + from threading import Thread + thread = Thread(target=updating_writer, args=(context,)) + thread.start() +''' +#---------------------------------------------------------------------------# +# import the modbus libraries we need +#---------------------------------------------------------------------------# +from pymodbus.server.async import StartTcpServer +from pymodbus.device import ModbusDeviceIdentification +from pymodbus.datastore import ModbusSequentialDataBlock +from pymodbus.datastore import ModbusServerContext +from pymodbus.datastore.database import SqlSlaveContext +from pymodbus.transaction import ModbusRtuFramer, ModbusAsciiFramer +import random + +#---------------------------------------------------------------------------# +# import the twisted libraries we need +#---------------------------------------------------------------------------# +from twisted.internet.task import LoopingCall + +#---------------------------------------------------------------------------# +# configure the service logging +#---------------------------------------------------------------------------# +import logging +logging.basicConfig() +log = logging.getLogger() +log.setLevel(logging.DEBUG) + +#---------------------------------------------------------------------------# +# define your callback process +#---------------------------------------------------------------------------# +def updating_writer(a): + ''' A worker process that runs every so often and + updates live values of the context which resides in an SQLite3 database. + It should be noted that there is a race condition for the update. + :param arguments: The input arguments to the call + ''' + log.debug("Updating the database context") + context = a[0] + readfunction = 0x03 # read holding registers + writefunction = 0x10 + slave_id = 0x01 # slave address + count = 50 + + # import pdb; pdb.set_trace() + + rand_value = random.randint(0, 9999) + rand_addr = random.randint(0, 65000) + log.debug("Writing to datastore: {}, {}".format(rand_addr, rand_value)) + # import pdb; pdb.set_trace() + context[slave_id].setValues(writefunction, rand_addr, [rand_value]) + values = context[slave_id].getValues(readfunction, rand_addr, count) + log.debug("Values from datastore: " + str(values)) + + + +#---------------------------------------------------------------------------# +# initialize your data store +#---------------------------------------------------------------------------# +block = ModbusSequentialDataBlock(0x00, [0]*0xff) +store = SqlSlaveContext(block) + +context = ModbusServerContext(slaves={1: store}, single=False) + + +#---------------------------------------------------------------------------# +# initialize the server information +#---------------------------------------------------------------------------# +identity = ModbusDeviceIdentification() +identity.VendorName = 'pymodbus' +identity.ProductCode = 'PM' +identity.VendorUrl = 'http://github.com/bashwork/pymodbus/' +identity.ProductName = 'pymodbus Server' +identity.ModelName = 'pymodbus Server' +identity.MajorMinorRevision = '1.0' + +#---------------------------------------------------------------------------# +# run the server you want +#---------------------------------------------------------------------------# +time = 5 # 5 seconds delay +loop = LoopingCall(f=updating_writer, a=(context,)) +loop.start(time, now=False) # initially delay by time +StartTcpServer(context, identity=identity, address=("", 5020)) diff --git a/examples/contrib/message-generator.py b/examples/contrib/message-generator.py index b9a1e8f0a..51146434b 100755 --- a/examples/contrib/message-generator.py +++ b/examples/contrib/message-generator.py @@ -12,6 +12,7 @@ * binary - `./generate-messages.py -f binary -m tx -b` ''' from optparse import OptionParser +import codecs as c #--------------------------------------------------------------------------# # import all the available framers #--------------------------------------------------------------------------# @@ -30,6 +31,7 @@ from pymodbus.mei_message import * from pymodbus.register_read_message import * from pymodbus.register_write_message import * +from pymodbus.compat import IS_PYTHON3 #--------------------------------------------------------------------------# # initialize logging @@ -51,17 +53,17 @@ WriteSingleRegisterRequest, WriteSingleCoilRequest, ReadWriteMultipleRegistersRequest, - + ReadExceptionStatusRequest, GetCommEventCounterRequest, GetCommEventLogRequest, ReportSlaveIdRequest, - + ReadFileRecordRequest, WriteFileRecordRequest, MaskWriteRegisterRequest, ReadFifoQueueRequest, - + ReadDeviceInformationRequest, ReturnQueryDataRequest, @@ -97,7 +99,7 @@ WriteSingleRegisterResponse, WriteSingleCoilResponse, ReadWriteMultipleRegistersResponse, - + ReadExceptionStatusResponse, GetCommEventCounterResponse, GetCommEventLogResponse, @@ -149,13 +151,13 @@ 'write_registers' : [0x01] * 8, 'transaction' : 0x01, 'protocol' : 0x00, - 'unit' : 0x01, + 'unit' : 0xff, } -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# # generate all the requested messages -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# def generate_messages(framer, options): ''' A helper method to parse the command line options @@ -168,13 +170,16 @@ def generate_messages(framer, options): print ("%-44s = " % message.__class__.__name__) packet = framer.buildPacket(message) if not options.ascii: - packet = packet.encode('hex') + '\n' - print (packet) # because ascii ends with a \r\n + if not IS_PYTHON3: + packet = packet.encode('hex') + else: + packet = c.encode(packet, 'hex_codec').decode('utf-8') + print ("{}\n".format(packet)) # because ascii ends with a \r\n -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# # initialize our program settings -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# def get_options(): ''' A helper method to parse the command line options diff --git a/examples/contrib/message-parser.py b/examples/contrib/message-parser.py index b5c653bf3..be8fc8b42 100755 --- a/examples/contrib/message-parser.py +++ b/examples/contrib/message-parser.py @@ -11,7 +11,7 @@ * rtu * binary ''' -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# # import needed libraries #---------------------------------------------------------------------------# from __future__ import print_function @@ -19,12 +19,16 @@ import collections import textwrap from optparse import OptionParser +import codecs as c + from pymodbus.utilities import computeCRC, computeLRC from pymodbus.factory import ClientDecoder, ServerDecoder from pymodbus.transaction import ModbusSocketFramer from pymodbus.transaction import ModbusBinaryFramer from pymodbus.transaction import ModbusAsciiFramer from pymodbus.transaction import ModbusRtuFramer +from pymodbus.compat import byte2int, int2byte, IS_PYTHON3 + #--------------------------------------------------------------------------# # Logging @@ -33,9 +37,9 @@ modbus_log = logging.getLogger("pymodbus") -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# # build a quick wrapper around the framers -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# class Decoder(object): def __init__(self, framer, encode=False): @@ -52,7 +56,10 @@ def decode(self, message): :param message: The messge to decode ''' - value = message if self.encode else message.encode('hex') + if IS_PYTHON3: + value = message if self.encode else c.encode(message, 'hex_codec') + else: + value = message if self.encode else message.encode('hex') print("="*80) print("Decoding Message %s" % value) print("="*80) @@ -64,7 +71,7 @@ def decode(self, message): print("%s" % decoder.decoder.__class__.__name__) print("-"*80) try: - decoder.addToFrame(message.encode()) + decoder.addToFrame(message) if decoder.checkFrame(): decoder.advanceFrame() decoder.processIncomingPacket(message, self.report) @@ -86,7 +93,7 @@ def report(self, message): :param message: The message to print ''' print("%-15s = %s" % ('name', message.__class__.__name__)) - for k,v in message.__dict__.iteritems(): + for (k, v) in message.__dict__.items(): if isinstance(v, dict): print("%-15s =" % k) for kk,vv in v.items(): @@ -102,9 +109,9 @@ def report(self, message): print("%-15s = %s" % ('documentation', message.__doc__)) -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# # and decode our message -#---------------------------------------------------------------------------# +#---------------------------------------------------------------------------# def get_options(): ''' A helper method to parse the command line options @@ -136,6 +143,10 @@ def get_options(): help="The file containing messages to parse", dest="file", default=None) + parser.add_option("-t", "--transaction", + help="If the incoming message is in hexadecimal format", + action="store_true", dest="transaction", default=False) + (opt, arg) = parser.parse_args() if not opt.message and len(arg) > 0: @@ -150,8 +161,19 @@ def get_messages(option): :returns: The message iterator to parse ''' if option.message: + if option.transaction: + msg = "" + for segment in option.message.split(): + segment = segment.replace("0x", "") + segment = "0" + segment if len(segment) == 1 else segment + msg = msg + segment + option.message = msg + if not option.ascii: - option.message = option.message.decode('hex') + if not IS_PYTHON3: + option.message = option.message.decode('hex') + else: + option.message = c.decode(option.message.encode(), 'hex_codec') yield option.message elif option.file: with open(option.file, "r") as handle: diff --git a/pymodbus/datastore/database/__init__.py b/pymodbus/datastore/database/__init__.py new file mode 100644 index 000000000..dbb2609a4 --- /dev/null +++ b/pymodbus/datastore/database/__init__.py @@ -0,0 +1,7 @@ +from pymodbus.datastore.database.sql_datastore import SqlSlaveContext +from pymodbus.datastore.database.redis_datastore import RedisSlaveContext + +#---------------------------------------------------------------------------# +# Exported symbols +#---------------------------------------------------------------------------# +__all__ = ["SqlSlaveContext", "RedisSlaveContext"] diff --git a/examples/contrib/redis-datastore.py b/pymodbus/datastore/database/redis_datastore.py similarity index 71% rename from examples/contrib/redis-datastore.py rename to pymodbus/datastore/database/redis_datastore.py index ef44c6544..b7c74b013 100644 --- a/examples/contrib/redis-datastore.py +++ b/pymodbus/datastore/database/redis_datastore.py @@ -29,7 +29,7 @@ def __init__(self, **kwargs): port = kwargs.get('port', 6379) self.prefix = kwargs.get('prefix', 'pymodbus') self.client = kwargs.get('client', redis.Redis(host=host, port=port)) - self.__build_mapping() + self._build_mapping() def __str__(self): ''' Returns a string representation of the context @@ -52,7 +52,7 @@ def validate(self, fx, address, count=1): ''' address = address + 1 # section 4.4 of specification _logger.debug("validate[%d] %d:%d" % (fx, address, count)) - return self.__val_callbacks[self.decode(fx)](address, count) + return self._val_callbacks[self.decode(fx)](address, count) def getValues(self, fx, address, count=1): ''' Validates the request to make sure it is in range @@ -64,7 +64,7 @@ def getValues(self, fx, address, count=1): ''' address = address + 1 # section 4.4 of specification _logger.debug("getValues[%d] %d:%d" % (fx, address, count)) - return self.__get_callbacks[self.decode(fx)](address, count) + return self._get_callbacks[self.decode(fx)](address, count) def setValues(self, fx, address, values): ''' Sets the datastore with the supplied values @@ -75,12 +75,12 @@ def setValues(self, fx, address, values): ''' address = address + 1 # section 4.4 of specification _logger.debug("setValues[%d] %d:%d" % (fx, address, len(values))) - self.__set_callbacks[self.decode(fx)](address, values) + self._set_callbacks[self.decode(fx)](address, values) #--------------------------------------------------------------------------# # Redis Helper Methods #--------------------------------------------------------------------------# - def __get_prefix(self, key): + def _get_prefix(self, key): ''' This is a helper to abstract getting bit values :param key: The key prefix to use @@ -88,52 +88,52 @@ def __get_prefix(self, key): ''' return "%s:%s" % (self.prefix, key) - def __build_mapping(self): + def _build_mapping(self): ''' A quick helper method to build the function code mapper. ''' - self.__val_callbacks = { - 'd' : lambda o, c: self.__val_bit('d', o, c), - 'c' : lambda o, c: self.__val_bit('c', o, c), - 'h' : lambda o, c: self.__val_reg('h', o, c), - 'i' : lambda o, c: self.__val_reg('i', o, c), + self._val_callbacks = { + 'd' : lambda o, c: self._val_bit('d', o, c), + 'c' : lambda o, c: self._val_bit('c', o, c), + 'h' : lambda o, c: self._val_reg('h', o, c), + 'i' : lambda o, c: self._val_reg('i', o, c), } - self.__get_callbacks = { - 'd' : lambda o, c: self.__get_bit('d', o, c), - 'c' : lambda o, c: self.__get_bit('c', o, c), - 'h' : lambda o, c: self.__get_reg('h', o, c), - 'i' : lambda o, c: self.__get_reg('i', o, c), + self._get_callbacks = { + 'd' : lambda o, c: self._get_bit('d', o, c), + 'c' : lambda o, c: self._get_bit('c', o, c), + 'h' : lambda o, c: self._get_reg('h', o, c), + 'i' : lambda o, c: self._get_reg('i', o, c), } - self.__set_callbacks = { - 'd' : lambda o, v: self.__set_bit('d', o, v), - 'c' : lambda o, v: self.__set_bit('c', o, v), - 'h' : lambda o, v: self.__set_reg('h', o, v), - 'i' : lambda o, v: self.__set_reg('i', o, v), + self._set_callbacks = { + 'd' : lambda o, v: self._set_bit('d', o, v), + 'c' : lambda o, v: self._set_bit('c', o, v), + 'h' : lambda o, v: self._set_reg('h', o, v), + 'i' : lambda o, v: self._set_reg('i', o, v), } #--------------------------------------------------------------------------# # Redis discrete implementation #--------------------------------------------------------------------------# - __bit_size = 16 - __bit_default = '\x00' * (__bit_size % 8) + _bit_size = 16 + _bit_default = '\x00' * (_bit_size % 8) - def __get_bit_values(self, key, offset, count): + def _get_bit_values(self, key, offset, count): ''' This is a helper to abstract getting bit values :param key: The key prefix to use :param offset: The address offset to start at :param count: The number of bits to read ''' - key = self.__get_prefix(key) - s = divmod(offset, self.__bit_size)[0] - e = divmod(offset + count, self.__bit_size)[0] + key = self._get_prefix(key) + s = divmod(offset, self._bit_size)[0] + e = divmod(offset + count, self._bit_size)[0] request = ('%s:%s' % (key, v) for v in range(s, e + 1)) response = self.client.mget(request) return response - def __val_bit(self, key, offset, count): + def _val_bit(self, key, offset, count): ''' Validates that the given range is currently set in redis. If any of the keys return None, then it is invalid. @@ -141,23 +141,23 @@ def __val_bit(self, key, offset, count): :param offset: The address offset to start at :param count: The number of bits to read ''' - response = self.__get_bit_values(key, offset, count) - return None not in response + response = self._get_bit_values(key, offset, count) + return True if None not in response else False - def __get_bit(self, key, offset, count): + def _get_bit(self, key, offset, count): ''' :param key: The key prefix to use :param offset: The address offset to start at :param count: The number of bits to read ''' - response = self.__get_bit_values(key, offset, count) - response = (r or self.__bit_default for r in response) + response = self._get_bit_values(key, offset, count) + response = (r or self._bit_default for r in response) result = ''.join(response) result = unpack_bitstring(result) return result[offset:offset + count] - def __set_bit(self, key, offset, values): + def _set_bit(self, key, offset, values): ''' :param key: The key prefix to use @@ -165,17 +165,17 @@ def __set_bit(self, key, offset, values): :param values: The values to set ''' count = len(values) - s = divmod(offset, self.__bit_size)[0] - e = divmod(offset + count, self.__bit_size)[0] + s = divmod(offset, self._bit_size)[0] + e = divmod(offset + count, self._bit_size)[0] value = pack_bitstring(values) - current = self.__get_bit_values(key, offset, count) - current = (r or self.__bit_default for r in current) + current = self._get_bit_values(key, offset, count) + current = (r or self._bit_default for r in current) current = ''.join(current) - current = current[0:offset] + value + current[offset + count:] - final = (current[s:s + self.__bit_size] for s in range(0, count, self.__bit_size)) + current = current[0:offset] + value.decode('utf-8') + current[offset + count:] + final = (current[s:s + self._bit_size] for s in range(0, count, self._bit_size)) - key = self.__get_prefix(key) + key = self._get_prefix(key) request = ('%s:%s' % (key, v) for v in range(s, e + 1)) request = dict(zip(request, final)) self.client.mset(request) @@ -183,17 +183,17 @@ def __set_bit(self, key, offset, values): #--------------------------------------------------------------------------# # Redis register implementation #--------------------------------------------------------------------------# - __reg_size = 16 - __reg_default = '\x00' * (__reg_size % 8) + _reg_size = 16 + _reg_default = '\x00' * (_reg_size % 8) - def __get_reg_values(self, key, offset, count): + def _get_reg_values(self, key, offset, count): ''' This is a helper to abstract getting register values :param key: The key prefix to use :param offset: The address offset to start at :param count: The number of bits to read ''' - key = self.__get_prefix(key) + key = self._get_prefix(key) #s = divmod(offset, self.__reg_size)[0] #e = divmod(offset+count, self.__reg_size)[0] @@ -202,7 +202,7 @@ def __get_reg_values(self, key, offset, count): response = self.client.mget(request) return response - def __val_reg(self, key, offset, count): + def _val_reg(self, key, offset, count): ''' Validates that the given range is currently set in redis. If any of the keys return None, then it is invalid. @@ -210,21 +210,21 @@ def __val_reg(self, key, offset, count): :param offset: The address offset to start at :param count: The number of bits to read ''' - response = self.__get_reg_values(key, offset, count) + response = self._get_reg_values(key, offset, count) return None not in response - def __get_reg(self, key, offset, count): + def _get_reg(self, key, offset, count): ''' :param key: The key prefix to use :param offset: The address offset to start at :param count: The number of bits to read ''' - response = self.__get_reg_values(key, offset, count) - response = [r or self.__reg_default for r in response] + response = self._get_reg_values(key, offset, count) + response = [r or self._reg_default for r in response] return response[offset:offset + count] - def __set_reg(self, key, offset, values): + def _set_reg(self, key, offset, values): ''' :param key: The key prefix to use @@ -237,7 +237,7 @@ def __set_reg(self, key, offset, values): #current = self.__get_reg_values(key, offset, count) - key = self.__get_prefix(key) + key = self._get_prefix(key) request = ('%s:%s' % (key, v) for v in range(offset, count + 1)) request = dict(zip(request, values)) self.client.mset(request) diff --git a/examples/contrib/database-datastore.py b/pymodbus/datastore/database/sql_datastore.py similarity index 80% rename from examples/contrib/database-datastore.py rename to pymodbus/datastore/database/sql_datastore.py index c1c48b161..a02894251 100644 --- a/examples/contrib/database-datastore.py +++ b/pymodbus/datastore/database/sql_datastore.py @@ -17,7 +17,7 @@ #---------------------------------------------------------------------------# # Context #---------------------------------------------------------------------------# -class DatabaseSlaveContext(IModbusSlaveContext): +class SqlSlaveContext(IModbusSlaveContext): ''' This creates a modbus data model with each data access stored in its own personal block @@ -30,7 +30,7 @@ def __init__(self, *args, **kwargs): ''' self.table = kwargs.get('table', 'pymodbus') self.database = kwargs.get('database', 'sqlite:///pymodbus.db') - self.__db_create(self.table, self.database) + self._db_create(self.table, self.database) def __str__(self): ''' Returns a string representation of the context @@ -42,8 +42,7 @@ def __str__(self): def reset(self): ''' Resets all the datastores to their default values ''' self._metadata.drop_all() - self.__db_create(self.table, self.database) - raise NotImplementedException() # TODO drop table? + self._db_create(self.table, self.database) def validate(self, fx, address, count=1): ''' Validates the request to make sure it is in range @@ -55,7 +54,7 @@ def validate(self, fx, address, count=1): ''' address = address + 1 # section 4.4 of specification _logger.debug("validate[%d] %d:%d" % (fx, address, count)) - return self.__validate(self.decode(fx), address, count) + return self._validate(self.decode(fx), address, count) def getValues(self, fx, address, count=1): ''' Validates the request to make sure it is in range @@ -67,7 +66,7 @@ def getValues(self, fx, address, count=1): ''' address = address + 1 # section 4.4 of specification _logger.debug("get-values[%d] %d:%d" % (fx, address, count)) - return self.__get(self.decode(fx), address, count) + return self._get(self.decode(fx), address, count) def setValues(self, fx, address, values): ''' Sets the datastore with the supplied values @@ -78,12 +77,12 @@ def setValues(self, fx, address, values): ''' address = address + 1 # section 4.4 of specification _logger.debug("set-values[%d] %d:%d" % (fx, address, len(values))) - self.__set(self.decode(fx), address, values) + self._set(self.decode(fx), address, values) #--------------------------------------------------------------------------# # Sqlite Helper Methods #--------------------------------------------------------------------------# - def __db_create(self, table, database): + def _db_create(self, table, database): ''' A helper method to initialize the database and handles :param table: The table name to create @@ -99,9 +98,8 @@ def __db_create(self, table, database): self._table.create(checkfirst=True) self._connection = self._engine.connect() - def __get(self, type, offset, count): + def _get(self, type, offset, count): ''' - :param type: The key prefix to use :param offset: The address offset to start at :param count: The number of bits to read @@ -110,47 +108,56 @@ def __get(self, type, offset, count): query = self._table.select(and_( self._table.c.type == type, self._table.c.index >= offset, - self._table.c.index <= offset + count)) + self._table.c.index <= offset + count) + ) query = query.order_by(self._table.c.index.asc()) result = self._connection.execute(query).fetchall() return [row.value for row in result] - def __build_set(self, type, offset, values, p=''): + def _build_set(self, type, offset, values, prefix=''): ''' A helper method to generate the sql update context :param type: The key prefix to use :param offset: The address offset to start at :param values: The values to set + :param prefix: Prefix fields index and type, defaults to empty string ''' result = [] for index, value in enumerate(values): result.append({ - p + 'type' : type, - p + 'index' : offset + index, + prefix + 'type' : type, + prefix + 'index' : offset + index, 'value' : value }) return result - def __set(self, type, offset, values): + def _check(self, type, offset, values): + result = self._get(type, offset, count=1) + return False if len(result) > 0 else True + + def _set(self, type, offset, values): ''' :param key: The type prefix to use :param offset: The address offset to start at :param values: The values to set ''' - context = self.__build_set(type, offset, values) - query = self._table.insert() - result = self._connection.execute(query, context) - return result.rowcount == len(values) - - def __update(self, type, offset, values): + if self._check(type, offset, values): + context = self._build_set(type, offset, values) + query = self._table.insert() + result = self._connection.execute(query, context) + return result.rowcount == len(values) + else: + return False + + def _update(self, type, offset, values): ''' :param type: The type prefix to use :param offset: The address offset to start at :param values: The values to set ''' - context = self.__build_set(type, offset, values, p='x_') + context = self._build_set(type, offset, values, prefix='x_') query = self._table.update().values(name='value') query = query.where(and_( self._table.c.type == bindparam('x_type'), @@ -158,7 +165,7 @@ def __update(self, type, offset, values): result = self._connection.execute(query, context) return result.rowcount == len(values) - def __validate(self, key, offset, count): + def _validate(self, type, offset, count): ''' :param key: The key prefix to use :param offset: The address offset to start at diff --git a/pymodbus/server/sync.py b/pymodbus/server/sync.py index f4beeea91..78ec598bc 100644 --- a/pymodbus/server/sync.py +++ b/pymodbus/server/sync.py @@ -102,7 +102,10 @@ def handle(self): if data: if _logger.isEnabledFor(logging.DEBUG): _logger.debug(" ".join([hex(byte2int(x)) for x in data])) - unit_address = byte2int(data[0]) + if not isinstance(self.framer, ModbusBinaryFramer): + unit_address = byte2int(data[0]) + else: + unit_address = byte2int(data[1]) if unit_address in self.server.context: self.framer.processIncomingPacket(data, self.execute) except Exception as msg: @@ -273,13 +276,14 @@ def __init__(self, context, framer=None, identity=None, address=None, handler=No self.context = context or ModbusServerContext() self.control = ModbusControlBlock() self.address = address or ("", Defaults.Port) + self.handler = handler or ModbusConnectedRequestHandler self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) if isinstance(identity, ModbusDeviceIdentification): self.control.Identity.update(identity) socketserver.ThreadingTCPServer.__init__(self, - self.address, ModbusConnectedRequestHandler) + self.address, self.handler) def process_request(self, request, client): ''' Callback for connecting a new client thread @@ -336,13 +340,14 @@ def __init__(self, context, framer=None, identity=None, address=None, handler=No self.context = context or ModbusServerContext() self.control = ModbusControlBlock() self.address = address or ("", Defaults.Port) + self.handler = handler or ModbusDisconnectedRequestHandler self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) if isinstance(identity, ModbusDeviceIdentification): self.control.Identity.update(identity) socketserver.ThreadingUDPServer.__init__(self, - self.address, ModbusDisconnectedRequestHandler) + self.address, self.handler) def process_request(self, request, client): ''' Callback for connecting a new client thread diff --git a/pymodbus/transaction.py b/pymodbus/transaction.py index 1efd3c17f..cc44be438 100644 --- a/pymodbus/transaction.py +++ b/pymodbus/transaction.py @@ -461,7 +461,7 @@ def processIncomingPacket(self, data, callback): def _process(self, callback, error=False): """ - Process incoming packets irrespective error condition + Process incoming packets irrespective error condition """ data = self.getRawFrame() if error else self.getFrame() result = self.decoder.decode(data) @@ -487,7 +487,7 @@ def resetFrame(self): def getRawFrame(self): """ - Returns the complete buffer + Returns the complete buffer """ return self.__buffer @@ -922,7 +922,7 @@ def __init__(self, decoder): ''' self.__buffer = b'' self.__header = {'crc':0x0000, 'len':0, 'uid':0x00} - self.__hsize = 0x02 + self.__hsize = 0x01 self.__start = b'\x7b' # { self.__end = b'\x7d' # } self.__repeat = [b'}'[0], b'{'[0]] # python3 hack diff --git a/pymodbus/utilities.py b/pymodbus/utilities.py index e3ef421e2..a15515acf 100644 --- a/pymodbus/utilities.py +++ b/pymodbus/utilities.py @@ -86,7 +86,10 @@ def unpack_bitstring(string): byte_count = len(string) bits = [] for byte in range(byte_count): - value = byte2int(string[byte]) + if IS_PYTHON3: + value = byte2int(int(string[byte])) + else: + value = byte2int(string[byte]) for _ in range(8): bits.append((value & 1) == 1) value >>= 1 @@ -96,8 +99,8 @@ def unpack_bitstring(string): def make_byte_string(s): """ Returns byte string from a given string, python3 specific fix - :param s: - :return: + :param s: + :return: """ if IS_PYTHON3 and isinstance(s, string_types): s = s.encode() diff --git a/requirements-tests.txt b/requirements-tests.txt index 85623bb57..5c4639d1b 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -8,5 +8,8 @@ Twisted>=17.1.0 zope.interface>=4.4.0 pyasn1>=0.2.3 pycrypto>=2.6.1 +pyserial>=3.4 +redis>=2.10.5 +sqlalchemy>=1.1.15 #wsgiref>=0.1.2 cryptography>=1.8.1 \ No newline at end of file diff --git a/test/test_datastore.py b/test/test_datastore.py index b6b401517..c1d99c33c 100644 --- a/test/test_datastore.py +++ b/test/test_datastore.py @@ -1,7 +1,13 @@ #!/usr/bin/env python import unittest +import mock +from mock import MagicMock +import redis +import random from pymodbus.datastore import * from pymodbus.datastore.store import BaseModbusDataBlock +from pymodbus.datastore.database import SqlSlaveContext +from pymodbus.datastore.database import RedisSlaveContext from pymodbus.exceptions import NotImplementedException from pymodbus.exceptions import NoSuchSlaveException from pymodbus.exceptions import ParameterException @@ -113,7 +119,7 @@ def testModbusSlaveContext(self): } context = ModbusSlaveContext(**store) self.assertNotEqual(str(context), None) - + for fx in [1,2,3,4]: context.setValues(fx, 0, [True]*10) self.assertTrue(context.validate(fx, 0,10)) @@ -132,6 +138,236 @@ def _set(ctx): self.assertRaises(NoSuchSlaveException, lambda: _set(context)) self.assertRaises(NoSuchSlaveException, lambda: context[0xffff]) + +class RedisDataStoreTest(unittest.TestCase): + ''' + This is the unittest for the pymodbus.datastore.database.redis module + ''' + + def setUp(self): + self.slave = RedisSlaveContext() + + def tearDown(self): + ''' Cleans up the test environment ''' + pass + + def testStr(self): + # slave = RedisSlaveContext() + self.assertEqual(str(self.slave), "Redis Slave Context %s" % self.slave.client) + + def testReset(self): + assert isinstance(self.slave.client, redis.Redis) + self.slave.client = MagicMock() + self.slave.reset() + self.slave.client.flushall.assert_called_once_with() + + def testValCallbacksSuccess(self): + self.slave._build_mapping() + mock_count = 3 + mock_offset = 0 + self.slave.client.mset = MagicMock() + self.slave.client.mget = MagicMock(return_value=['11']) + + for key in ('d', 'c', 'h', 'i'): + self.assertTrue( + self.slave._val_callbacks[key](mock_offset, mock_count) + ) + + def testValCallbacksFailure(self): + self.slave._build_mapping() + mock_count = 3 + mock_offset = 0 + self.slave.client.mset = MagicMock() + self.slave.client.mget = MagicMock(return_value=['11', None]) + + for key in ('d', 'c', 'h', 'i'): + self.assertFalse( + self.slave._val_callbacks[key](mock_offset, mock_count) + ) + + def testGetCallbacks(self): + self.slave._build_mapping() + mock_count = 3 + mock_offset = 0 + self.slave.client.mget = MagicMock(return_value='11') + + for key in ('d', 'c'): + resp = self.slave._get_callbacks[key](mock_offset, mock_count) + self.assertEqual(resp, [True, False, False]) + + for key in ('h', 'i'): + resp = self.slave._get_callbacks[key](mock_offset, mock_count) + self.assertEqual(resp, ['1', '1']) + + def testSetCallbacks(self): + self.slave._build_mapping() + mock_values = [3] + mock_offset = 0 + self.slave.client.mset = MagicMock() + self.slave.client.mget = MagicMock() + + for key in ['c', 'd']: + self.slave._set_callbacks[key](mock_offset, [3]) + k = "pymodbus:{}:{}".format(key, mock_offset) + self.slave.client.mset.assert_called_with( + {k: '\x01'} + ) + + for key in ('h', 'i'): + self.slave._set_callbacks[key](mock_offset, [3]) + k = "pymodbus:{}:{}".format(key, mock_offset) + self.slave.client.mset.assert_called_with( + {k: mock_values[0]} + ) + + def testValidate(self): + self.slave.client.mget = MagicMock(return_value=[123]) + self.assertTrue(self.slave.validate(0x01, 3000)) + + def testSetValue(self): + self.slave.client.mset = MagicMock() + self.slave.client.mget = MagicMock() + self.assertEqual(self.slave.setValues(0x01, 1000, [12]), None) + + def testGetValue(self): + self.slave.client.mget = MagicMock(return_value=["123"]) + self.assertEqual(self.slave.getValues(0x01, 23), []) + + +class MockSqlResult(object): + def __init__(self, rowcount=0, value=0): + self.rowcount = rowcount + self.value = value + + +class SqlDataStoreTest(unittest.TestCase): + ''' + This is the unittest for the pymodbus.datastore.database.SqlSlaveContesxt + module + ''' + + def setUp(self): + self.slave = SqlSlaveContext() + self.slave._metadata.drop_all = MagicMock() + self.slave._db_create = MagicMock() + self.slave._table.select = MagicMock() + self.slave._connection = MagicMock() + + self.mock_addr = random.randint(0, 65000) + self.mock_values = random.sample(range(1, 100), 5) + self.mock_function = 0x01 + self.mock_type = 'h' + self.mock_offset = 0 + self.mock_count = 1 + + self.function_map = {2: 'd', 4: 'i'} + self.function_map.update([(i, 'h') for i in [3, 6, 16, 22, 23]]) + self.function_map.update([(i, 'c') for i in [1, 5, 15]]) + + def tearDown(self): + ''' Cleans up the test environment ''' + pass + + def testStr(self): + self.assertEqual(str(self.slave), "Modbus Slave Context") + + def testReset(self): + self.slave.reset() + + self.slave._metadata.drop_all.assert_called_once_with() + self.slave._db_create.assert_called_once_with( + self.slave.table, self.slave.database + ) + def testValidateSuccess(self): + mock_result = MockSqlResult( + rowcount=len(self.mock_values) + ) + self.slave._connection.execute = MagicMock(return_value=mock_result) + self.assertTrue(self.slave.validate( + self.mock_function, self.mock_addr, len(self.mock_values)) + ) + + def testValidateFailure(self): + wrong_count = 9 + mock_result = MockSqlResult(rowcount=len(self.mock_values)) + self.slave._connection.execute = MagicMock(return_value=mock_result) + self.assertFalse(self.slave.validate( + self.mock_function, self.mock_addr, wrong_count) + ) + + def testBuildSet(self): + mock_set = [ + { + 'index': 0, + 'type': 'h', + 'value': 11 + }, + { + 'index': 1, + 'type': 'h', + 'value': 12 + } + ] + self.assertListEqual(self.slave._build_set('h', 0, [11, 12]), mock_set) + + def testCheckSuccess(self): + mock_success_results = [1, 2, 3] + self.slave._get = MagicMock(return_value=mock_success_results) + self.assertFalse(self.slave._check('h', 0, 1)) + + def testCheckFailure(self): + mock_success_results = [] + self.slave._get = MagicMock(return_value=mock_success_results) + self.assertTrue(self.slave._check('h', 0, 1)) + + def testGetValues(self): + self.slave._get = MagicMock() + + for key, value in self.function_map.items(): + self.slave.getValues(key, self.mock_addr, self.mock_count) + self.slave._get.assert_called_with( + value, self.mock_addr + 1, self.mock_count + ) + + def testSetValues(self): + self.slave._set = MagicMock() + + for key, value in self.function_map.items(): + self.slave.setValues(key, self.mock_addr, self.mock_values) + self.slave._set.assert_called_with( + value, self.mock_addr + 1, self.mock_values + ) + + def testSet(self): + self.slave._check = MagicMock(return_value=True) + self.slave._connection.execute = MagicMock( + return_value=MockSqlResult(rowcount=len(self.mock_values)) + ) + self.assertTrue(self.slave._set( + self.mock_type, self.mock_offset, self.mock_values) + ) + + self.slave._check = MagicMock(return_value=False) + self.assertFalse( + self.slave._set(self.mock_type, self.mock_offset, self.mock_values) + ) + + def testUpdateSuccess(self): + self.slave._connection.execute = MagicMock( + return_value=MockSqlResult(rowcount=len(self.mock_values)) + ) + self.assertTrue( + self.slave._update(self.mock_type, self.mock_offset, self.mock_values) + ) + + def testUpdateFailure(self): + self.slave._connection.execute = MagicMock( + return_value=MockSqlResult(rowcount=100) + ) + self.assertFalse( + self.slave._update(self.mock_type, self.mock_offset, self.mock_values) + ) + #---------------------------------------------------------------------------# # Main #---------------------------------------------------------------------------# diff --git a/test/test_transaction.py b/test/test_transaction.py index 7a90ed165..8c5e18f47 100644 --- a/test/test_transaction.py +++ b/test/test_transaction.py @@ -32,9 +32,9 @@ def tearDown(self): del self._rtu del self._ascii - #---------------------------------------------------------------------------# + #---------------------------------------------------------------------------# # Dictionary based transaction manager - #---------------------------------------------------------------------------# + #---------------------------------------------------------------------------# def testDictTransactionManagerTID(self): ''' Test the dict transaction manager TID ''' for tid in range(1, self._manager.getNextTID() + 10): @@ -65,9 +65,9 @@ class Request: pass self._manager.delTransaction(handle.transaction_id) self.assertEqual(None, self._manager.getTransaction(handle.transaction_id)) - #---------------------------------------------------------------------------# + #---------------------------------------------------------------------------# # Queue based transaction manager - #---------------------------------------------------------------------------# + #---------------------------------------------------------------------------# def testFifoTransactionManagerTID(self): ''' Test the fifo transaction manager TID ''' for tid in range(1, self._queue_manager.getNextTID() + 10): @@ -98,7 +98,7 @@ class Request: pass self._queue_manager.delTransaction(handle.transaction_id) self.assertEqual(None, self._queue_manager.getTransaction(handle.transaction_id)) - #---------------------------------------------------------------------------# + #---------------------------------------------------------------------------# # TCP tests #---------------------------------------------------------------------------# def testTCPFramerTransactionReady(self): @@ -361,7 +361,7 @@ def testBinaryFramerTransactionReady(self): def testBinaryFramerTransactionFull(self): ''' Test a full binary frame transaction ''' msg = b'\x7b\x01\x03\x00\x00\x00\x05\x85\xC9\x7d' - pack = msg[3:-3] + pack = msg[2:-3] self._binary.addToFrame(msg) self.assertTrue(self._binary.checkFrame()) result = self._binary.getFrame() @@ -372,7 +372,7 @@ def testBinaryFramerTransactionHalf(self): ''' Test a half completed binary frame transaction ''' msg1 = b'\x7b\x01\x03\x00' msg2 = b'\x00\x00\x05\x85\xC9\x7d' - pack = msg1[3:] + msg2[:-3] + pack = msg1[2:] + msg2[:-3] self._binary.addToFrame(msg1) self.assertFalse(self._binary.checkFrame()) result = self._binary.getFrame() From e852aa205d3b4985bb10f3a3dfb39340061e8fa5 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Tue, 19 Dec 2017 10:42:56 +0530 Subject: [PATCH 13/35] #221 tcp read complete frame based on length field in the mbap header (#251) --- pymodbus/transaction.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pymodbus/transaction.py b/pymodbus/transaction.py index cc44be438..736d7c64e 100644 --- a/pymodbus/transaction.py +++ b/pymodbus/transaction.py @@ -169,7 +169,9 @@ def _recv(self, expected_response_length): expected_response_length = self._calculate_exception_length() continue if isinstance(self.client.framer, ModbusSocketFramer): - break + length = struct.unpack(">H", result[4:6])[0] -1 # Ommit UID, which is included in header size + expected_response_length = self.client.framer._ModbusSocketFramer__hsize + length + r = self.client._recv(expected_response_length - len(result)) if not r: # If no response being recived there is no point in conitnuing From b1363d776e35c7c7ea9a63c1da7d2024777e2c89 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Tue, 19 Dec 2017 11:01:57 +0530 Subject: [PATCH 14/35] Prepare for 1.4.0 (#209), updated changelogs --- .gitignore | 3 +++ CHANGELOG.rst | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/.gitignore b/.gitignore index 3e5d76b47..bd252e573 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ pymodbus/datastore/__pycache__/ pymodbus/internal/__pycache__/ pymodbus/server/__pycache__/ test/__pycache__/ +**/pymodbus.db +/.eggs/ +/.cache/ diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1297df4b8..c46c610a5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,20 @@ +Version 1.4.0 +------------------------------------------------------------ +* Bug fix Modbus TCP client reading incomplete data +* Check for slave unit id before processing the request for serial clients +* Bug fix serial servers with Modbus Binary Framer +* Bug fix header size for ModbusBinaryFramer +* Support Database slave contexts (SqlStore and RedisStore) +* Custom handlers could be passed to Modbus TCP servers +* Asynchronous Server could now be stopped when running on a seperate thread (StopServer) +* Signal handlers on Asyncronous servers are now handled based on current thread +* Registers in Database datastore could now be read from remote clients +* Fix examples in contrib (message_parser.py/message_generator.py/remote_server_context) +* Add new example for SqlStore and RedisStore (db store slave context) +* Fix minor comaptibility issues with utilities. +* Update test requirements +* Update/Add new unit tests +* Move twisted requirements to extra so that it is not installed by default on pymodbus installtion Version 1.3.2 ------------------------------------------------------------ From 621a90e36c0bb5b8a997221e2217e32cb3cbd803 Mon Sep 17 00:00:00 2001 From: dhoomakethu Date: Thu, 21 Dec 2017 13:59:23 +0530 Subject: [PATCH 15/35] Tar ball without docs (#252) * Trying to fix #210 1. Using if __name__ == "__main__" clause in example to avoid running them while generating docs 2. Trying to enforce PEP-8 compliant code + PYTHON2-3 compatibale code with examples as much as possible 3. Renaming examples with "-" to "_" for the ease of documentation generation 4. Minor changes with setup and setup commands 5. Support documentation creation from make file 6. Remove unnecessary html and pdf files from the doc folder * Fix makefile * Remove unwanted files and folders from doc folder * Add seperated requirements for Docs and add .readthedocs.yml * Update requirements for docs --- .gitignore | 7 + .readthedocs.yml | 9 + Makefile | 7 +- doc/Makefile | 20 + doc/changelog.rst | 1 + doc/conf.py | 179 + doc/{sphinx => }/index.rst | 13 +- doc/pymodbus.pdf | Bin 509208 -> 0 bytes doc/quality/current.coverage | 41 - doc/quality/current.lint | 19 - doc/quality/current.pep8 | 568 - doc/readme.rst | 1 + doc/source/example/asynchronous_client.rst | 4 + doc/source/example/asynchronous_processor.rst | 4 + .../example/asynchronous_server.rst} | 4 +- .../example/bcd_payload.rst} | 6 +- .../example/callback_server.rst} | 4 +- .../example/changing_framers.rst} | 6 +- .../example/concurrent_client.rst} | 6 +- .../example/custom_datablock.rst} | 4 +- .../example/custom_message.rst} | 4 +- doc/source/example/dbstore_update_server.rst | 4 + .../example/gui_common.rst} | 6 +- doc/source/example/libmodbus_client.rst | 4 + .../example/message_generator.rst} | 6 +- doc/source/example/message_parser.rst | 4 + .../example/modbus_logging.rst} | 4 +- doc/source/example/modbus_mapper.rst | 4 + doc/source/example/modbus_payload.rst | 4 + doc/source/example/modbus_payload_server.rst | 4 + doc/source/example/modbus_saver.rst | 4 + .../example/modbus_scraper.rst} | 4 +- .../example/modbus_simulator.rst} | 3 +- doc/source/example/modicon_payload.rst | 4 + doc/source/example/modules.rst | 39 + doc/source/example/performance.rst | 4 + .../example/remote_server_context.rst} | 6 +- doc/source/example/serial_forwarder.rst | 4 + doc/source/example/sunspec_client.rst | 4 + doc/source/example/synchronous_client.rst | 4 + doc/source/example/synchronous_client_ext.rst | 4 + .../example/synchronous_server.rst} | 4 +- .../example/thread_safe_datastore.rst} | 4 +- .../example/updating_server.rst} | 4 +- doc/source/library/modules.rst | 7 + doc/source/library/pymodbus.client.rst | 38 + .../library/pymodbus.datastore.database.rst | 30 + doc/source/library/pymodbus.datastore.rst | 45 + doc/source/library/pymodbus.internal.rst | 22 + doc/source/library/pymodbus.rst | 184 + doc/source/library/pymodbus.server.rst | 30 + doc/sphinx/Makefile | 88 - doc/sphinx/conf.py | 109 - doc/sphinx/doctrees/environment.pickle | Bin 1774735 -> 0 bytes .../examples/asynchronous-client.doctree | Bin 15603 -> 0 bytes .../examples/asynchronous-processor.doctree | Bin 18069 -> 0 bytes .../examples/asynchronous-server.doctree | Bin 12967 -> 0 bytes .../doctrees/examples/bcd-payload.doctree | Bin 16238 -> 0 bytes .../doctrees/examples/bottle-frontend.doctree | Bin 25797 -> 0 bytes .../doctrees/examples/callback-server.doctree | Bin 12719 -> 0 bytes .../examples/changing-framers.doctree | Bin 7861 -> 0 bytes .../examples/concurrent-client.doctree | Bin 22382 -> 0 bytes .../examples/custom-datablock.doctree | Bin 8763 -> 0 bytes .../doctrees/examples/custom-message.doctree | Bin 9525 -> 0 bytes .../examples/database-datastore.doctree | Bin 15916 -> 0 bytes .../doctrees/examples/gtk-frontend.doctree | Bin 47222 -> 0 bytes doc/sphinx/doctrees/examples/index.doctree | Bin 5145 -> 0 bytes .../examples/libmodbus-client.doctree | Bin 37552 -> 0 bytes .../examples/message-generator.doctree | Bin 44289 -> 0 bytes .../doctrees/examples/message-parser.doctree | Bin 18888 -> 0 bytes .../doctrees/examples/modbus-logging.doctree | Bin 6223 -> 0 bytes .../examples/modbus-payload-server.doctree | Bin 8899 -> 0 bytes .../doctrees/examples/modbus-payload.doctree | Bin 8627 -> 0 bytes .../doctrees/examples/modbus-scraper.doctree | Bin 23370 -> 0 bytes .../examples/modbus-simulator.doctree | Bin 11210 -> 0 bytes .../doctrees/examples/modicon-payload.doctree | Bin 20990 -> 0 bytes .../doctrees/examples/performance.doctree | Bin 10613 -> 0 bytes .../doctrees/examples/redis-datastore.doctree | Bin 21030 -> 0 bytes .../examples/remote-server-context.doctree | Bin 17518 -> 0 bytes .../examples/serial-forwarder.doctree | Bin 5894 -> 0 bytes .../examples/synchronous-client-ext.doctree | Bin 18229 -> 0 bytes .../examples/synchronous-client.doctree | Bin 15969 -> 0 bytes .../examples/synchronous-server.doctree | Bin 13165 -> 0 bytes .../examples/thread-safe-datastore.doctree | Bin 19126 -> 0 bytes .../doctrees/examples/tk-frontend.doctree | Bin 29046 -> 0 bytes .../doctrees/examples/updating-server.doctree | Bin 9631 -> 0 bytes .../doctrees/examples/wx-frontend.doctree | Bin 26776 -> 0 bytes doc/sphinx/doctrees/index.doctree | Bin 4903 -> 0 bytes .../doctrees/library/async-client.doctree | Bin 27467 -> 0 bytes .../doctrees/library/async-server.doctree | Bin 55492 -> 0 bytes .../doctrees/library/bit-read-message.doctree | Bin 67175 -> 0 bytes .../library/bit-write-message.doctree | Bin 62877 -> 0 bytes .../doctrees/library/client-common.doctree | Bin 44901 -> 0 bytes doc/sphinx/doctrees/library/constants.doctree | Bin 44657 -> 0 bytes .../library/datastore/context.doctree | Bin 42980 -> 0 bytes .../doctrees/library/datastore/index.doctree | Bin 3067 -> 0 bytes .../doctrees/library/datastore/remote.doctree | Bin 26371 -> 0 bytes .../doctrees/library/datastore/store.doctree | Bin 65527 -> 0 bytes doc/sphinx/doctrees/library/device.doctree | Bin 87838 -> 0 bytes .../doctrees/library/diag-message.doctree | Bin 168993 -> 0 bytes doc/sphinx/doctrees/library/events.doctree | Bin 42596 -> 0 bytes .../doctrees/library/exceptions.doctree | Bin 19414 -> 0 bytes doc/sphinx/doctrees/library/factory.doctree | Bin 29504 -> 0 bytes .../doctrees/library/file-message.doctree | Bin 84656 -> 0 bytes doc/sphinx/doctrees/library/index.doctree | Bin 3651 -> 0 bytes .../doctrees/library/interfaces.doctree | Bin 60843 -> 0 bytes .../doctrees/library/mei-message.doctree | Bin 34347 -> 0 bytes .../doctrees/library/other-message.doctree | Bin 76848 -> 0 bytes doc/sphinx/doctrees/library/payload.doctree | Bin 84770 -> 0 bytes doc/sphinx/doctrees/library/pdu.doctree | Bin 56390 -> 0 bytes doc/sphinx/doctrees/library/pymodbus.doctree | Bin 4553 -> 0 bytes .../library/register-read-message.doctree | Bin 92068 -> 0 bytes .../library/register-write-message.doctree | Bin 62981 -> 0 bytes .../doctrees/library/sync-client.doctree | Bin 86418 -> 0 bytes .../doctrees/library/sync-server.doctree | Bin 99274 -> 0 bytes .../doctrees/library/transaction.doctree | Bin 153386 -> 0 bytes doc/sphinx/doctrees/library/utilities.doctree | Bin 36183 -> 0 bytes doc/sphinx/examples/asynchronous-client.rst | 16 - .../examples/asynchronous-processor.rst | 15 - doc/sphinx/examples/bottle-frontend.rst | 22 - doc/sphinx/examples/concurrent-client.rst | 6 - doc/sphinx/examples/database-datastore.rst | 6 - doc/sphinx/examples/gtk-frontend.rst | 26 - doc/sphinx/examples/index.rst | 60 - doc/sphinx/examples/libmodbus-client.rst | 6 - doc/sphinx/examples/message-generator.rst | 26 - doc/sphinx/examples/message-parser.rst | 55 - doc/sphinx/examples/modbus-payload-server.rst | 6 - doc/sphinx/examples/modbus-payload.rst | 6 - doc/sphinx/examples/modicon-payload.rst | 6 - doc/sphinx/examples/performance.rst | 11 - doc/sphinx/examples/redis-datastore.rst | 6 - doc/sphinx/examples/serial-forwarder.rst | 6 - .../examples/synchronous-client-ext.rst | 6 - doc/sphinx/examples/synchronous-client.rst | 19 - doc/sphinx/examples/tk-frontend.rst | 17 - doc/sphinx/examples/updating-server.rst | 6 - doc/sphinx/examples/wx-frontend.rst | 17 - doc/sphinx/html/.buildinfo | 4 - doc/sphinx/html/_modules/index.html | 114 - .../_modules/pymodbus/bit_read_message.html | 331 - .../_modules/pymodbus/bit_write_message.html | 353 - .../html/_modules/pymodbus/client/async.html | 305 - .../html/_modules/pymodbus/client/common.html | 240 - .../html/_modules/pymodbus/client/sync.html | 506 - .../html/_modules/pymodbus/constants.html | 331 - .../_modules/pymodbus/datastore/context.html | 246 - .../_modules/pymodbus/datastore/remote.html | 190 - .../_modules/pymodbus/datastore/store.html | 343 - doc/sphinx/html/_modules/pymodbus/device.html | 712 -- .../html/_modules/pymodbus/diag_message.html | 845 -- doc/sphinx/html/_modules/pymodbus/events.html | 287 - .../html/_modules/pymodbus/exceptions.html | 177 - .../html/_modules/pymodbus/factory.html | 347 - .../html/_modules/pymodbus/file_message.html | 576 - .../html/_modules/pymodbus/interfaces.html | 327 - .../html/_modules/pymodbus/mei_message.html | 256 - .../html/_modules/pymodbus/other_message.html | 533 - .../html/_modules/pymodbus/payload.html | 432 - doc/sphinx/html/_modules/pymodbus/pdu.html | 330 - .../pymodbus/register_read_message.html | 449 - .../pymodbus/register_write_message.html | 337 - .../html/_modules/pymodbus/server/async.html | 370 - .../html/_modules/pymodbus/server/sync.html | 597 - .../html/_modules/pymodbus/transaction.html | 1064 -- .../html/_modules/pymodbus/utilities.html | 290 - .../examples/asynchronous-client.rst.txt | 16 - .../examples/asynchronous-processor.rst.txt | 15 - .../examples/asynchronous-server.rst.txt | 6 - .../_sources/examples/bcd-payload.rst.txt | 6 - .../_sources/examples/bottle-frontend.rst.txt | 22 - .../_sources/examples/callback-server.rst.txt | 6 - .../examples/changing-framers.rst.txt | 6 - .../examples/concurrent-client.rst.txt | 6 - .../examples/custom-datablock.rst.txt | 6 - .../examples/database-datastore.rst.txt | 6 - .../_sources/examples/gtk-frontend.rst.txt | 26 - .../html/_sources/examples/index.rst.txt | 60 - .../examples/libmodbus-client.rst.txt | 6 - .../examples/message-generator.rst.txt | 26 - .../_sources/examples/message-parser.rst.txt | 55 - .../examples/modbus-payload-server.rst.txt | 6 - .../_sources/examples/modbus-payload.rst.txt | 6 - .../examples/modbus-simulator.rst.txt | 5 - .../_sources/examples/modicon-payload.rst.txt | 6 - .../_sources/examples/performance.rst.txt | 11 - .../_sources/examples/redis-datastore.rst.txt | 6 - .../examples/remote-server-context.rst.txt | 6 - .../examples/serial-forwarder.rst.txt | 6 - .../examples/synchronous-client-ext.rst.txt | 6 - .../examples/synchronous-client.rst.txt | 19 - .../examples/synchronous-server.rst.txt | 6 - .../examples/thread-safe-datastore.rst.txt | 6 - .../_sources/examples/tk-frontend.rst.txt | 17 - .../_sources/examples/wx-frontend.rst.txt | 17 - doc/sphinx/html/_sources/index.rst.txt | 23 - .../_sources/library/async-client.rst.txt | 19 - .../_sources/library/async-server.rst.txt | 29 - .../_sources/library/bit-read-message.rst.txt | 32 - .../library/bit-write-message.rst.txt | 26 - .../_sources/library/client-common.rst.txt | 16 - .../html/_sources/library/constants.rst.txt | 31 - .../library/datastore/context.rst.txt | 20 - .../_sources/library/datastore/index.rst.txt | 13 - .../_sources/library/datastore/remote.rst.txt | 16 - .../_sources/library/datastore/store.rst.txt | 23 - .../html/_sources/library/device.rst.txt | 28 - .../_sources/library/diag-message.rst.txt | 128 - .../html/_sources/library/events.rst.txt | 28 - .../html/_sources/library/exceptions.rst.txt | 26 - .../html/_sources/library/factory.rst.txt | 19 - .../_sources/library/file-message.rst.txt | 34 - .../html/_sources/library/index.rst.txt | 35 - .../html/_sources/library/interfaces.rst.txt | 28 - .../html/_sources/library/mei-message.rst.txt | 19 - .../_sources/library/other-message.rst.txt | 31 - .../html/_sources/library/payload.rst.txt | 19 - doc/sphinx/html/_sources/library/pdu.rst.txt | 32 - .../html/_sources/library/pymodbus.rst.txt | 7 - .../library/register-read-message.rst.txt | 38 - .../library/register-write-message.rst.txt | 26 - .../html/_sources/library/sync-client.rst.txt | 26 - .../html/_sources/library/sync-server.rst.txt | 40 - .../html/_sources/library/transaction.rst.txt | 31 - .../html/_sources/library/utilities.rst.txt | 33 - doc/sphinx/html/_static/README | 1 - doc/sphinx/html/_static/ajax-loader.gif | Bin 673 -> 0 bytes doc/sphinx/html/_static/basic.css | 632 - doc/sphinx/html/_static/classic.css | 261 - doc/sphinx/html/_static/comment-bright.png | Bin 756 -> 0 bytes doc/sphinx/html/_static/comment-close.png | Bin 829 -> 0 bytes doc/sphinx/html/_static/comment.png | Bin 641 -> 0 bytes doc/sphinx/html/_static/default.css | 1 - doc/sphinx/html/_static/doctools.js | 287 - doc/sphinx/html/_static/down-pressed.png | Bin 222 -> 0 bytes doc/sphinx/html/_static/down.png | Bin 202 -> 0 bytes doc/sphinx/html/_static/file.png | Bin 286 -> 0 bytes doc/sphinx/html/_static/jquery-3.1.0.js | 10074 ---------------- doc/sphinx/html/_static/jquery.js | 4 - doc/sphinx/html/_static/minus.png | Bin 90 -> 0 bytes doc/sphinx/html/_static/plus.png | Bin 90 -> 0 bytes doc/sphinx/html/_static/pygments.css | 69 - doc/sphinx/html/_static/searchtools.js | 758 -- doc/sphinx/html/_static/sidebar.js | 159 - doc/sphinx/html/_static/underscore-1.3.1.js | 999 -- doc/sphinx/html/_static/underscore.js | 31 - doc/sphinx/html/_static/up-pressed.png | Bin 214 -> 0 bytes doc/sphinx/html/_static/up.png | Bin 203 -> 0 bytes doc/sphinx/html/_static/websupport.js | 808 -- .../html/examples/asynchronous-client.html | 255 - .../html/examples/asynchronous-processor.html | 312 - .../html/examples/asynchronous-server.html | 230 - doc/sphinx/html/examples/bcd-payload.html | 344 - doc/sphinx/html/examples/bottle-frontend.html | 442 - doc/sphinx/html/examples/callback-server.html | 253 - .../html/examples/changing-framers.html | 177 - .../html/examples/concurrent-client.html | 355 - .../html/examples/custom-datablock.html | 198 - doc/sphinx/html/examples/custom-message.html | 208 - .../html/examples/database-datastore.html | 294 - doc/sphinx/html/examples/gtk-frontend.html | 637 - doc/sphinx/html/examples/index.html | 205 - .../html/examples/libmodbus-client.html | 548 - .../html/examples/message-generator.html | 808 -- doc/sphinx/html/examples/message-parser.html | 361 - doc/sphinx/html/examples/modbus-logging.html | 162 - .../html/examples/modbus-payload-server.html | 191 - doc/sphinx/html/examples/modbus-payload.html | 203 - doc/sphinx/html/examples/modbus-scraper.html | 400 - .../html/examples/modbus-simulator.html | 249 - doc/sphinx/html/examples/modicon-payload.html | 407 - doc/sphinx/html/examples/performance.html | 208 - doc/sphinx/html/examples/redis-datastore.html | 364 - .../html/examples/remote-server-context.html | 317 - .../html/examples/serial-forwarder.html | 158 - .../html/examples/synchronous-client-ext.html | 298 - .../html/examples/synchronous-client.html | 262 - .../html/examples/synchronous-server.html | 238 - .../html/examples/thread-safe-datastore.html | 330 - doc/sphinx/html/examples/tk-frontend.html | 480 - doc/sphinx/html/examples/updating-server.html | 205 - doc/sphinx/html/examples/wx-frontend.html | 452 - doc/sphinx/html/genindex.html | 1830 --- doc/sphinx/html/index.html | 160 - doc/sphinx/html/library/async-client.html | 271 - doc/sphinx/html/library/async-server.html | 383 - doc/sphinx/html/library/bit-read-message.html | 469 - .../html/library/bit-write-message.html | 459 - doc/sphinx/html/library/client-common.html | 370 - doc/sphinx/html/library/constants.html | 400 - .../html/library/datastore/context.html | 349 - doc/sphinx/html/library/datastore/index.html | 137 - doc/sphinx/html/library/datastore/remote.html | 251 - doc/sphinx/html/library/datastore/store.html | 502 - doc/sphinx/html/library/device.html | 632 - doc/sphinx/html/library/diag-message.html | 876 -- doc/sphinx/html/library/events.html | 366 - doc/sphinx/html/library/exceptions.html | 196 - doc/sphinx/html/library/factory.html | 268 - doc/sphinx/html/library/file-message.html | 578 - doc/sphinx/html/library/index.html | 225 - doc/sphinx/html/library/interfaces.html | 453 - doc/sphinx/html/library/mei-message.html | 304 - doc/sphinx/html/library/other-message.html | 527 - doc/sphinx/html/library/payload.html | 574 - doc/sphinx/html/library/pdu.html | 425 - doc/sphinx/html/library/pymodbus.html | 136 - .../html/library/register-read-message.html | 586 - .../html/library/register-write-message.html | 448 - doc/sphinx/html/library/sync-client.html | 580 - doc/sphinx/html/library/sync-server.html | 564 - doc/sphinx/html/library/transaction.html | 1010 -- doc/sphinx/html/library/utilities.html | 330 - doc/sphinx/html/objects.inv | Bin 5985 -> 0 bytes doc/sphinx/html/py-modindex.html | 428 - doc/sphinx/html/search.html | 107 - doc/sphinx/html/searchindex.js | 1 - doc/sphinx/library/async-client.rst | 19 - doc/sphinx/library/async-server.rst | 29 - doc/sphinx/library/bit-read-message.rst | 32 - doc/sphinx/library/bit-write-message.rst | 26 - doc/sphinx/library/client-common.rst | 16 - doc/sphinx/library/constants.rst | 31 - doc/sphinx/library/datastore/context.rst | 20 - doc/sphinx/library/datastore/index.rst | 13 - doc/sphinx/library/datastore/remote.rst | 16 - doc/sphinx/library/datastore/store.rst | 23 - doc/sphinx/library/device.rst | 28 - doc/sphinx/library/diag-message.rst | 128 - doc/sphinx/library/events.rst | 28 - doc/sphinx/library/exceptions.rst | 26 - doc/sphinx/library/factory.rst | 19 - doc/sphinx/library/file-message.rst | 34 - doc/sphinx/library/index.rst | 35 - doc/sphinx/library/interfaces.rst | 28 - doc/sphinx/library/mei-message.rst | 19 - doc/sphinx/library/other-message.rst | 31 - doc/sphinx/library/payload.rst | 19 - doc/sphinx/library/pdu.rst | 32 - doc/sphinx/library/pymodbus.rst | 7 - doc/sphinx/library/register-read-message.rst | 38 - doc/sphinx/library/register-write-message.rst | 26 - doc/sphinx/library/sync-client.rst | 26 - doc/sphinx/library/sync-server.rst | 40 - doc/sphinx/library/transaction.rst | 31 - doc/sphinx/library/utilities.rst | 33 - doc/sphinx/static/README | 1 - examples/common/asynchronous-client.py | 127 - examples/common/asynchronous-server.py | 109 - examples/common/asynchronous_client.py | 138 + ...processor.py => asynchronous_processor.py} | 101 +- examples/common/asynchronous_server.py | 120 + examples/common/callback-server.py | 134 - examples/common/callback_server.py | 147 + examples/common/changing-framers.py | 56 - examples/common/changing_framers.py | 57 + examples/common/custom-datablock.py | 78 - examples/common/custom_datablock.py | 85 + .../{custom-message.py => custom_message.py} | 61 +- examples/common/dbstore-update-server.py | 94 - examples/common/dbstore_update_server.py | 102 + .../common/{device-mapping => device_mapping} | 0 examples/common/modbus-logging.py | 41 - examples/common/modbus-payload-server.py | 70 - examples/common/modbus-payload.py | 89 - examples/common/modbus_logging.py | 46 + examples/common/modbus_payload.py | 96 + examples/common/modbus_payload_server.py | 76 + examples/common/performance.py | 71 +- examples/common/synchronous-client-ext.py | 177 - examples/common/synchronous-client.py | 148 - examples/common/synchronous-server.py | 117 - examples/common/synchronous_client.py | 156 + examples/common/synchronous_client_ext.py | 232 + examples/common/synchronous_server.py | 127 + examples/common/updating-server.py | 84 - examples/common/updating_server.py | 93 + .../{bcd-payload.py => bcd_payload.py} | 90 +- ...current-client.py => concurrent_client.py} | 143 +- ...ibmodbus-client.py => libmodbus_client.py} | 246 +- ...sage-generator.py => message_generator.py} | 101 +- .../{message-parser.py => message_parser.py} | 84 +- examples/contrib/modbus_mapper.py | 114 +- examples/contrib/modbus_saver.py | 94 +- .../{modbus-scraper.py => modbus_scraper.py} | 120 +- ...odbus-simulator.py => modbus_simulator.py} | 88 +- ...{modicon-payload.py => modicon_payload.py} | 133 +- examples/contrib/remote_server_context.py | 102 +- examples/contrib/{rx-messages => rx_messages} | 0 examples/contrib/serial-forwarder.py | 37 - examples/contrib/serial_forwarder.py | 43 + examples/contrib/sunspec_client.py | 83 +- examples/contrib/thread_safe_datastore.py | 70 +- examples/contrib/{tx-messages => tx_messages} | 0 examples/functional/__init__.py | 0 ...client.py => asynchronous_ascii_client.py} | 8 +- ...u-client.py => asynchronous_rtu_client.py} | 8 +- ...p-client.py => asynchronous_tcp_client.py} | 8 +- ...p-client.py => asynchronous_udp_client.py} | 8 +- examples/functional/base_context.py | 16 +- examples/functional/base_runner.py | 16 +- ...e-context.py => database_slave_context.py} | 8 +- ...ave-context.py => memory_slave_context.py} | 8 +- ...lave-context.py => redis_slave_context.py} | 8 +- ...ave-context.py => remote_slave_context.py} | 8 +- ...-client.py => synchronous_ascii_client.py} | 8 +- ...tu-client.py => synchronous_rtu_client.py} | 8 +- ...cp-client.py => synchronous_tcp_client.py} | 8 +- ...dp-client.py => synchronous_udp_client.py} | 8 +- examples/gui/bottle/frontend.py | 52 +- ...esponsive.css => bootstrap_responsive.css} | 0 ...e.min.css => bootstrap_responsive.min.css} | 0 ...halflings.png => glyphicons_halflings.png} | Bin ...ite.png => glyphicons_halflings_white.png} | Bin examples/gui/gtk/simulator.py | 48 +- examples/gui/{gui-common.py => gui_common.py} | 67 +- examples/gui/tk/simulator.py | 66 +- examples/gui/wx/simulator.py | 64 +- ...{build-datastore.py => build_datastore.py} | 28 +- examples/tools/convert.py | 46 +- .../lib/{jamod-1.2.jar => jamod_1.2.jar} | Bin .../{virtual-serial.c => virtual_serial.c} | 0 .../reference/{LICENSE-FREE => LICENSE_FREE} | 0 .../{test-install.sh => test_install.sh} | 0 .../{modbus-tcp.tac => modbus_tcp.tac} | 10 +- .../{modbus-udp.tac => modbus_udp.tac} | 10 +- examples/twisted/plugins/pymodbus_plugin.py | 20 +- requirements-docs.txt | 10 + requirements.txt | 1 - setup.py | 87 +- setup_commands.py | 141 +- 431 files changed, 3564 insertions(+), 56573 deletions(-) create mode 100644 .readthedocs.yml create mode 100644 doc/Makefile create mode 100644 doc/changelog.rst create mode 100644 doc/conf.py rename doc/{sphinx => }/index.rst (69%) delete mode 100644 doc/pymodbus.pdf delete mode 100644 doc/quality/current.coverage delete mode 100644 doc/quality/current.lint delete mode 100644 doc/quality/current.pep8 create mode 100644 doc/readme.rst create mode 100644 doc/source/example/asynchronous_client.rst create mode 100644 doc/source/example/asynchronous_processor.rst rename doc/{sphinx/examples/asynchronous-server.rst => source/example/asynchronous_server.rst} (65%) rename doc/{sphinx/html/_sources/examples/custom-message.rst.txt => source/example/bcd_payload.rst} (53%) rename doc/{sphinx/examples/callback-server.rst => source/example/callback_server.rst} (65%) rename doc/{sphinx/examples/modbus-scraper.rst => source/example/changing_framers.rst} (53%) rename doc/{sphinx/examples/bcd-payload.rst => source/example/concurrent_client.rst} (52%) rename doc/{sphinx/examples/custom-datablock.rst => source/example/custom_datablock.rst} (65%) rename doc/{sphinx/examples/custom-message.rst => source/example/custom_message.rst} (65%) create mode 100644 doc/source/example/dbstore_update_server.rst rename doc/{sphinx/html/_sources/examples/modbus-logging.rst.txt => source/example/gui_common.rst} (53%) create mode 100644 doc/source/example/libmodbus_client.rst rename doc/{sphinx/examples/changing-framers.rst => source/example/message_generator.rst} (52%) create mode 100644 doc/source/example/message_parser.rst rename doc/{sphinx/examples/modbus-logging.rst => source/example/modbus_logging.rst} (65%) create mode 100644 doc/source/example/modbus_mapper.rst create mode 100644 doc/source/example/modbus_payload.rst create mode 100644 doc/source/example/modbus_payload_server.rst create mode 100644 doc/source/example/modbus_saver.rst rename doc/{sphinx/html/_sources/examples/modbus-scraper.rst.txt => source/example/modbus_scraper.rst} (65%) rename doc/{sphinx/examples/modbus-simulator.rst => source/example/modbus_simulator.rst} (65%) create mode 100644 doc/source/example/modicon_payload.rst create mode 100644 doc/source/example/modules.rst create mode 100644 doc/source/example/performance.rst rename doc/{sphinx/examples/remote-server-context.rst => source/example/remote_server_context.rst} (81%) create mode 100644 doc/source/example/serial_forwarder.rst create mode 100644 doc/source/example/sunspec_client.rst create mode 100644 doc/source/example/synchronous_client.rst create mode 100644 doc/source/example/synchronous_client_ext.rst rename doc/{sphinx/examples/synchronous-server.rst => source/example/synchronous_server.rst} (65%) rename doc/{sphinx/examples/thread-safe-datastore.rst => source/example/thread_safe_datastore.rst} (95%) rename doc/{sphinx/html/_sources/examples/updating-server.rst.txt => source/example/updating_server.rst} (65%) create mode 100644 doc/source/library/modules.rst create mode 100644 doc/source/library/pymodbus.client.rst create mode 100644 doc/source/library/pymodbus.datastore.database.rst create mode 100644 doc/source/library/pymodbus.datastore.rst create mode 100644 doc/source/library/pymodbus.internal.rst create mode 100644 doc/source/library/pymodbus.rst create mode 100644 doc/source/library/pymodbus.server.rst delete mode 100644 doc/sphinx/Makefile delete mode 100644 doc/sphinx/conf.py delete mode 100644 doc/sphinx/doctrees/environment.pickle delete mode 100644 doc/sphinx/doctrees/examples/asynchronous-client.doctree delete mode 100644 doc/sphinx/doctrees/examples/asynchronous-processor.doctree delete mode 100644 doc/sphinx/doctrees/examples/asynchronous-server.doctree delete mode 100644 doc/sphinx/doctrees/examples/bcd-payload.doctree delete mode 100644 doc/sphinx/doctrees/examples/bottle-frontend.doctree delete mode 100644 doc/sphinx/doctrees/examples/callback-server.doctree delete mode 100644 doc/sphinx/doctrees/examples/changing-framers.doctree delete mode 100644 doc/sphinx/doctrees/examples/concurrent-client.doctree delete mode 100644 doc/sphinx/doctrees/examples/custom-datablock.doctree delete mode 100644 doc/sphinx/doctrees/examples/custom-message.doctree delete mode 100644 doc/sphinx/doctrees/examples/database-datastore.doctree delete mode 100644 doc/sphinx/doctrees/examples/gtk-frontend.doctree delete mode 100644 doc/sphinx/doctrees/examples/index.doctree delete mode 100644 doc/sphinx/doctrees/examples/libmodbus-client.doctree delete mode 100644 doc/sphinx/doctrees/examples/message-generator.doctree delete mode 100644 doc/sphinx/doctrees/examples/message-parser.doctree delete mode 100644 doc/sphinx/doctrees/examples/modbus-logging.doctree delete mode 100644 doc/sphinx/doctrees/examples/modbus-payload-server.doctree delete mode 100644 doc/sphinx/doctrees/examples/modbus-payload.doctree delete mode 100644 doc/sphinx/doctrees/examples/modbus-scraper.doctree delete mode 100644 doc/sphinx/doctrees/examples/modbus-simulator.doctree delete mode 100644 doc/sphinx/doctrees/examples/modicon-payload.doctree delete mode 100644 doc/sphinx/doctrees/examples/performance.doctree delete mode 100644 doc/sphinx/doctrees/examples/redis-datastore.doctree delete mode 100644 doc/sphinx/doctrees/examples/remote-server-context.doctree delete mode 100644 doc/sphinx/doctrees/examples/serial-forwarder.doctree delete mode 100644 doc/sphinx/doctrees/examples/synchronous-client-ext.doctree delete mode 100644 doc/sphinx/doctrees/examples/synchronous-client.doctree delete mode 100644 doc/sphinx/doctrees/examples/synchronous-server.doctree delete mode 100644 doc/sphinx/doctrees/examples/thread-safe-datastore.doctree delete mode 100644 doc/sphinx/doctrees/examples/tk-frontend.doctree delete mode 100644 doc/sphinx/doctrees/examples/updating-server.doctree delete mode 100644 doc/sphinx/doctrees/examples/wx-frontend.doctree delete mode 100644 doc/sphinx/doctrees/index.doctree delete mode 100644 doc/sphinx/doctrees/library/async-client.doctree delete mode 100644 doc/sphinx/doctrees/library/async-server.doctree delete mode 100644 doc/sphinx/doctrees/library/bit-read-message.doctree delete mode 100644 doc/sphinx/doctrees/library/bit-write-message.doctree delete mode 100644 doc/sphinx/doctrees/library/client-common.doctree delete mode 100644 doc/sphinx/doctrees/library/constants.doctree delete mode 100644 doc/sphinx/doctrees/library/datastore/context.doctree delete mode 100644 doc/sphinx/doctrees/library/datastore/index.doctree delete mode 100644 doc/sphinx/doctrees/library/datastore/remote.doctree delete mode 100644 doc/sphinx/doctrees/library/datastore/store.doctree delete mode 100644 doc/sphinx/doctrees/library/device.doctree delete mode 100644 doc/sphinx/doctrees/library/diag-message.doctree delete mode 100644 doc/sphinx/doctrees/library/events.doctree delete mode 100644 doc/sphinx/doctrees/library/exceptions.doctree delete mode 100644 doc/sphinx/doctrees/library/factory.doctree delete mode 100644 doc/sphinx/doctrees/library/file-message.doctree delete mode 100644 doc/sphinx/doctrees/library/index.doctree delete mode 100644 doc/sphinx/doctrees/library/interfaces.doctree delete mode 100644 doc/sphinx/doctrees/library/mei-message.doctree delete mode 100644 doc/sphinx/doctrees/library/other-message.doctree delete mode 100644 doc/sphinx/doctrees/library/payload.doctree delete mode 100644 doc/sphinx/doctrees/library/pdu.doctree delete mode 100644 doc/sphinx/doctrees/library/pymodbus.doctree delete mode 100644 doc/sphinx/doctrees/library/register-read-message.doctree delete mode 100644 doc/sphinx/doctrees/library/register-write-message.doctree delete mode 100644 doc/sphinx/doctrees/library/sync-client.doctree delete mode 100644 doc/sphinx/doctrees/library/sync-server.doctree delete mode 100644 doc/sphinx/doctrees/library/transaction.doctree delete mode 100644 doc/sphinx/doctrees/library/utilities.doctree delete mode 100644 doc/sphinx/examples/asynchronous-client.rst delete mode 100644 doc/sphinx/examples/asynchronous-processor.rst delete mode 100644 doc/sphinx/examples/bottle-frontend.rst delete mode 100644 doc/sphinx/examples/concurrent-client.rst delete mode 100644 doc/sphinx/examples/database-datastore.rst delete mode 100644 doc/sphinx/examples/gtk-frontend.rst delete mode 100644 doc/sphinx/examples/index.rst delete mode 100644 doc/sphinx/examples/libmodbus-client.rst delete mode 100644 doc/sphinx/examples/message-generator.rst delete mode 100644 doc/sphinx/examples/message-parser.rst delete mode 100644 doc/sphinx/examples/modbus-payload-server.rst delete mode 100644 doc/sphinx/examples/modbus-payload.rst delete mode 100644 doc/sphinx/examples/modicon-payload.rst delete mode 100644 doc/sphinx/examples/performance.rst delete mode 100644 doc/sphinx/examples/redis-datastore.rst delete mode 100644 doc/sphinx/examples/serial-forwarder.rst delete mode 100644 doc/sphinx/examples/synchronous-client-ext.rst delete mode 100644 doc/sphinx/examples/synchronous-client.rst delete mode 100644 doc/sphinx/examples/tk-frontend.rst delete mode 100644 doc/sphinx/examples/updating-server.rst delete mode 100644 doc/sphinx/examples/wx-frontend.rst delete mode 100644 doc/sphinx/html/.buildinfo delete mode 100644 doc/sphinx/html/_modules/index.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/bit_read_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/bit_write_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/client/async.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/client/common.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/client/sync.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/constants.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/datastore/context.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/datastore/remote.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/datastore/store.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/device.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/diag_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/events.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/exceptions.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/factory.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/file_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/interfaces.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/mei_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/other_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/payload.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/pdu.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/register_read_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/register_write_message.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/server/async.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/server/sync.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/transaction.html delete mode 100644 doc/sphinx/html/_modules/pymodbus/utilities.html delete mode 100644 doc/sphinx/html/_sources/examples/asynchronous-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/asynchronous-processor.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/asynchronous-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/bcd-payload.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/bottle-frontend.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/callback-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/changing-framers.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/concurrent-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/custom-datablock.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/database-datastore.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/gtk-frontend.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/index.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/libmodbus-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/message-generator.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/message-parser.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/modbus-payload-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/modbus-payload.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/modbus-simulator.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/modicon-payload.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/performance.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/redis-datastore.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/remote-server-context.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/serial-forwarder.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/synchronous-client-ext.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/synchronous-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/synchronous-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/thread-safe-datastore.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/tk-frontend.rst.txt delete mode 100644 doc/sphinx/html/_sources/examples/wx-frontend.rst.txt delete mode 100644 doc/sphinx/html/_sources/index.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/async-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/async-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/bit-read-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/bit-write-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/client-common.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/constants.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/datastore/context.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/datastore/index.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/datastore/remote.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/datastore/store.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/device.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/diag-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/events.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/exceptions.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/factory.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/file-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/index.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/interfaces.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/mei-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/other-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/payload.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/pdu.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/pymodbus.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/register-read-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/register-write-message.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/sync-client.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/sync-server.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/transaction.rst.txt delete mode 100644 doc/sphinx/html/_sources/library/utilities.rst.txt delete mode 100644 doc/sphinx/html/_static/README delete mode 100644 doc/sphinx/html/_static/ajax-loader.gif delete mode 100644 doc/sphinx/html/_static/basic.css delete mode 100644 doc/sphinx/html/_static/classic.css delete mode 100644 doc/sphinx/html/_static/comment-bright.png delete mode 100644 doc/sphinx/html/_static/comment-close.png delete mode 100644 doc/sphinx/html/_static/comment.png delete mode 100644 doc/sphinx/html/_static/default.css delete mode 100644 doc/sphinx/html/_static/doctools.js delete mode 100644 doc/sphinx/html/_static/down-pressed.png delete mode 100644 doc/sphinx/html/_static/down.png delete mode 100644 doc/sphinx/html/_static/file.png delete mode 100644 doc/sphinx/html/_static/jquery-3.1.0.js delete mode 100644 doc/sphinx/html/_static/jquery.js delete mode 100644 doc/sphinx/html/_static/minus.png delete mode 100644 doc/sphinx/html/_static/plus.png delete mode 100644 doc/sphinx/html/_static/pygments.css delete mode 100644 doc/sphinx/html/_static/searchtools.js delete mode 100644 doc/sphinx/html/_static/sidebar.js delete mode 100644 doc/sphinx/html/_static/underscore-1.3.1.js delete mode 100644 doc/sphinx/html/_static/underscore.js delete mode 100644 doc/sphinx/html/_static/up-pressed.png delete mode 100644 doc/sphinx/html/_static/up.png delete mode 100644 doc/sphinx/html/_static/websupport.js delete mode 100644 doc/sphinx/html/examples/asynchronous-client.html delete mode 100644 doc/sphinx/html/examples/asynchronous-processor.html delete mode 100644 doc/sphinx/html/examples/asynchronous-server.html delete mode 100644 doc/sphinx/html/examples/bcd-payload.html delete mode 100644 doc/sphinx/html/examples/bottle-frontend.html delete mode 100644 doc/sphinx/html/examples/callback-server.html delete mode 100644 doc/sphinx/html/examples/changing-framers.html delete mode 100644 doc/sphinx/html/examples/concurrent-client.html delete mode 100644 doc/sphinx/html/examples/custom-datablock.html delete mode 100644 doc/sphinx/html/examples/custom-message.html delete mode 100644 doc/sphinx/html/examples/database-datastore.html delete mode 100644 doc/sphinx/html/examples/gtk-frontend.html delete mode 100644 doc/sphinx/html/examples/index.html delete mode 100644 doc/sphinx/html/examples/libmodbus-client.html delete mode 100644 doc/sphinx/html/examples/message-generator.html delete mode 100644 doc/sphinx/html/examples/message-parser.html delete mode 100644 doc/sphinx/html/examples/modbus-logging.html delete mode 100644 doc/sphinx/html/examples/modbus-payload-server.html delete mode 100644 doc/sphinx/html/examples/modbus-payload.html delete mode 100644 doc/sphinx/html/examples/modbus-scraper.html delete mode 100644 doc/sphinx/html/examples/modbus-simulator.html delete mode 100644 doc/sphinx/html/examples/modicon-payload.html delete mode 100644 doc/sphinx/html/examples/performance.html delete mode 100644 doc/sphinx/html/examples/redis-datastore.html delete mode 100644 doc/sphinx/html/examples/remote-server-context.html delete mode 100644 doc/sphinx/html/examples/serial-forwarder.html delete mode 100644 doc/sphinx/html/examples/synchronous-client-ext.html delete mode 100644 doc/sphinx/html/examples/synchronous-client.html delete mode 100644 doc/sphinx/html/examples/synchronous-server.html delete mode 100644 doc/sphinx/html/examples/thread-safe-datastore.html delete mode 100644 doc/sphinx/html/examples/tk-frontend.html delete mode 100644 doc/sphinx/html/examples/updating-server.html delete mode 100644 doc/sphinx/html/examples/wx-frontend.html delete mode 100644 doc/sphinx/html/genindex.html delete mode 100644 doc/sphinx/html/index.html delete mode 100644 doc/sphinx/html/library/async-client.html delete mode 100644 doc/sphinx/html/library/async-server.html delete mode 100644 doc/sphinx/html/library/bit-read-message.html delete mode 100644 doc/sphinx/html/library/bit-write-message.html delete mode 100644 doc/sphinx/html/library/client-common.html delete mode 100644 doc/sphinx/html/library/constants.html delete mode 100644 doc/sphinx/html/library/datastore/context.html delete mode 100644 doc/sphinx/html/library/datastore/index.html delete mode 100644 doc/sphinx/html/library/datastore/remote.html delete mode 100644 doc/sphinx/html/library/datastore/store.html delete mode 100644 doc/sphinx/html/library/device.html delete mode 100644 doc/sphinx/html/library/diag-message.html delete mode 100644 doc/sphinx/html/library/events.html delete mode 100644 doc/sphinx/html/library/exceptions.html delete mode 100644 doc/sphinx/html/library/factory.html delete mode 100644 doc/sphinx/html/library/file-message.html delete mode 100644 doc/sphinx/html/library/index.html delete mode 100644 doc/sphinx/html/library/interfaces.html delete mode 100644 doc/sphinx/html/library/mei-message.html delete mode 100644 doc/sphinx/html/library/other-message.html delete mode 100644 doc/sphinx/html/library/payload.html delete mode 100644 doc/sphinx/html/library/pdu.html delete mode 100644 doc/sphinx/html/library/pymodbus.html delete mode 100644 doc/sphinx/html/library/register-read-message.html delete mode 100644 doc/sphinx/html/library/register-write-message.html delete mode 100644 doc/sphinx/html/library/sync-client.html delete mode 100644 doc/sphinx/html/library/sync-server.html delete mode 100644 doc/sphinx/html/library/transaction.html delete mode 100644 doc/sphinx/html/library/utilities.html delete mode 100644 doc/sphinx/html/objects.inv delete mode 100644 doc/sphinx/html/py-modindex.html delete mode 100644 doc/sphinx/html/search.html delete mode 100644 doc/sphinx/html/searchindex.js delete mode 100644 doc/sphinx/library/async-client.rst delete mode 100644 doc/sphinx/library/async-server.rst delete mode 100644 doc/sphinx/library/bit-read-message.rst delete mode 100644 doc/sphinx/library/bit-write-message.rst delete mode 100644 doc/sphinx/library/client-common.rst delete mode 100644 doc/sphinx/library/constants.rst delete mode 100644 doc/sphinx/library/datastore/context.rst delete mode 100644 doc/sphinx/library/datastore/index.rst delete mode 100644 doc/sphinx/library/datastore/remote.rst delete mode 100644 doc/sphinx/library/datastore/store.rst delete mode 100644 doc/sphinx/library/device.rst delete mode 100644 doc/sphinx/library/diag-message.rst delete mode 100644 doc/sphinx/library/events.rst delete mode 100644 doc/sphinx/library/exceptions.rst delete mode 100644 doc/sphinx/library/factory.rst delete mode 100644 doc/sphinx/library/file-message.rst delete mode 100644 doc/sphinx/library/index.rst delete mode 100644 doc/sphinx/library/interfaces.rst delete mode 100644 doc/sphinx/library/mei-message.rst delete mode 100644 doc/sphinx/library/other-message.rst delete mode 100644 doc/sphinx/library/payload.rst delete mode 100644 doc/sphinx/library/pdu.rst delete mode 100644 doc/sphinx/library/pymodbus.rst delete mode 100644 doc/sphinx/library/register-read-message.rst delete mode 100644 doc/sphinx/library/register-write-message.rst delete mode 100644 doc/sphinx/library/sync-client.rst delete mode 100644 doc/sphinx/library/sync-server.rst delete mode 100644 doc/sphinx/library/transaction.rst delete mode 100644 doc/sphinx/library/utilities.rst delete mode 100644 doc/sphinx/static/README delete mode 100755 examples/common/asynchronous-client.py delete mode 100755 examples/common/asynchronous-server.py create mode 100755 examples/common/asynchronous_client.py rename examples/common/{asynchronous-processor.py => asynchronous_processor.py} (62%) create mode 100755 examples/common/asynchronous_server.py delete mode 100755 examples/common/callback-server.py create mode 100755 examples/common/callback_server.py delete mode 100755 examples/common/changing-framers.py create mode 100755 examples/common/changing_framers.py delete mode 100755 examples/common/custom-datablock.py create mode 100755 examples/common/custom_datablock.py rename examples/common/{custom-message.py => custom_message.py} (58%) delete mode 100644 examples/common/dbstore-update-server.py create mode 100644 examples/common/dbstore_update_server.py rename examples/common/{device-mapping => device_mapping} (100%) delete mode 100755 examples/common/modbus-logging.py delete mode 100755 examples/common/modbus-payload-server.py delete mode 100755 examples/common/modbus-payload.py create mode 100755 examples/common/modbus_logging.py create mode 100755 examples/common/modbus_payload.py create mode 100755 examples/common/modbus_payload_server.py delete mode 100755 examples/common/synchronous-client-ext.py delete mode 100755 examples/common/synchronous-client.py delete mode 100755 examples/common/synchronous-server.py create mode 100755 examples/common/synchronous_client.py create mode 100755 examples/common/synchronous_client_ext.py create mode 100755 examples/common/synchronous_server.py delete mode 100755 examples/common/updating-server.py create mode 100755 examples/common/updating_server.py rename examples/contrib/{bcd-payload.py => bcd_payload.py} (80%) rename examples/contrib/{concurrent-client.py => concurrent_client.py} (64%) rename examples/contrib/{libmodbus-client.py => libmodbus_client.py} (65%) rename examples/contrib/{message-generator.py => message_generator.py} (67%) rename examples/contrib/{message-parser.py => message_parser.py} (70%) rename examples/contrib/{modbus-scraper.py => modbus_scraper.py} (72%) rename examples/contrib/{modbus-simulator.py => modbus_simulator.py} (57%) rename examples/contrib/{modicon-payload.py => modicon_payload.py} (76%) rename examples/contrib/{rx-messages => rx_messages} (100%) delete mode 100755 examples/contrib/serial-forwarder.py create mode 100755 examples/contrib/serial_forwarder.py rename examples/contrib/{tx-messages => tx_messages} (100%) delete mode 100644 examples/functional/__init__.py rename examples/functional/{asynchronous-ascii-client.py => asynchronous_ascii_client.py} (85%) rename examples/functional/{asynchronous-rtu-client.py => asynchronous_rtu_client.py} (85%) rename examples/functional/{asynchronous-tcp-client.py => asynchronous_tcp_client.py} (90%) rename examples/functional/{asynchronous-udp-client.py => asynchronous_udp_client.py} (85%) rename examples/functional/{database-slave-context.py => database_slave_context.py} (88%) rename examples/functional/{memory-slave-context.py => memory_slave_context.py} (89%) rename examples/functional/{redis-slave-context.py => redis_slave_context.py} (87%) rename examples/functional/{remote-slave-context.py => remote_slave_context.py} (89%) rename examples/functional/{synchronous-ascii-client.py => synchronous_ascii_client.py} (88%) rename examples/functional/{synchronous-rtu-client.py => synchronous_rtu_client.py} (88%) rename examples/functional/{synchronous-tcp-client.py => synchronous_tcp_client.py} (86%) rename examples/functional/{synchronous-udp-client.py => synchronous_udp_client.py} (85%) rename examples/gui/bottle/media/css/{bootstrap-responsive.css => bootstrap_responsive.css} (100%) rename examples/gui/bottle/media/css/{bootstrap-responsive.min.css => bootstrap_responsive.min.css} (100%) rename examples/gui/bottle/media/img/{glyphicons-halflings.png => glyphicons_halflings.png} (100%) rename examples/gui/bottle/media/img/{glyphicons-halflings-white.png => glyphicons_halflings_white.png} (100%) rename examples/gui/{gui-common.py => gui_common.py} (60%) rename examples/tools/{build-datastore.py => build_datastore.py} (93%) rename examples/tools/jamod/lib/{jamod-1.2.jar => jamod_1.2.jar} (100%) rename examples/tools/nullmodem/generic/{virtual-serial.c => virtual_serial.c} (100%) rename examples/tools/reference/{LICENSE-FREE => LICENSE_FREE} (100%) rename examples/tools/{test-install.sh => test_install.sh} (100%) rename examples/twisted/{modbus-tcp.tac => modbus_tcp.tac} (94%) rename examples/twisted/{modbus-udp.tac => modbus_udp.tac} (94%) create mode 100644 requirements-docs.txt diff --git a/.gitignore b/.gitignore index bd252e573..1a62fbcd8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,10 @@ test/__pycache__/ **/pymodbus.db /.eggs/ /.cache/ +/doc/sphinx/doctrees/ +/doc_new/ +/doc/quality/ +/doc/pymodbus.pdf +/doc/sphinx/ +/doc/html/ +/doc/_build/ diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 000000000..6bc8ba793 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,9 @@ +# Build PDF & ePub +formats: + - epub + - pdf +requirements_file: requirements-docs.txt +python: + extra_requirements: + - twisted + - documents diff --git a/Makefile b/Makefile index e9f7d9ef5..4fb5fe634 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,8 @@ default: @echo ' make check check coding style (PEP-8, PEP-257)' @echo ' make test run the test suite, report coverage' @echo ' make tox run the tests on all Python versions' - @echo ' make clean cleanup all temporary files' + @echo ' make docs creates sphinx documentation in html' + @echo ' make clean cleanup all temporary files' @echo install: @@ -45,8 +46,8 @@ tox: install @pip install --quiet tox && tox docs: install - @pip install --quiet sphinx - @cd doc/sphinx && sphinx-build -nb html -d doctrees . html + @pip install --quiet --requirement=requirements-docs.txt + @cd doc && make html publish: install git push origin && git push --tags origin diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000..e805f2538 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = PyModbus +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/doc/changelog.rst b/doc/changelog.rst new file mode 100644 index 000000000..4d7817ae3 --- /dev/null +++ b/doc/changelog.rst @@ -0,0 +1 @@ +.. include:: ../CHANGELOG.rst \ No newline at end of file diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 000000000..fc92ce5fb --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,179 @@ +# -*- coding: utf-8 -*- +# +# PyModbus documentation build configuration file, created by +# sphinx-quickstart on Wed Dec 20 12:31:10 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +parent_dir = os.path.abspath(os.pardir) +# examples = os.path.join(parent_dir, "examples") +example_contrib = os.path.join(parent_dir, "examples/contrib") +example_common = os.path.join(parent_dir, "examples/common") +example_gui = os.path.join(parent_dir, "examples/gui") + +sys.path.insert(0, os.path.abspath(os.pardir)) +sys.path.append(example_common) +sys.path.append(example_contrib) +sys.path.append(example_gui) +# sys.path.extend([examples, example_common, example_contrib, example_gui]) +# sys.path.insert(0, os.path.abspath('../')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.autodoc'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'PyModbus' +copyright = u'2017, Sanjay' +author = u'Sanjay' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'1.4.0' +# The full version, including alpha/beta/rc tags. +release = u'1.4.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +html_sidebars = { + '**': [ + 'relations.html', # needs 'show_related': True theme option to display + 'searchbox.html', + ] +} + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'PyModbusdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'PyModbus.tex', u'PyModbus Documentation', + u'Sanjay', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'pymodbus', u'PyModbus Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'PyModbus', u'PyModbus Documentation', + author, 'PyModbus', 'One line description of project.', + 'Miscellaneous'), +] + + + diff --git a/doc/sphinx/index.rst b/doc/index.rst similarity index 69% rename from doc/sphinx/index.rst rename to doc/index.rst index 7017018f2..9b5491d09 100644 --- a/doc/sphinx/index.rst +++ b/doc/index.rst @@ -1,18 +1,20 @@ .. PyModbus documentation master file, created by - sphinx-quickstart on Tue Apr 14 19:11:16 2009. + sphinx-quickstart on Wed Dec 20 12:31:10 2017. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to PyModbus's documentation! ==================================== -Contents: - .. toctree:: :maxdepth: 2 + :caption: Contents: + + readme.rst + changelog.rst + source/example/modules.rst + source/library/modules.rst - examples/index.rst - library/index.rst Indices and tables ================== @@ -20,4 +22,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` * :ref:`search` - diff --git a/doc/pymodbus.pdf b/doc/pymodbus.pdf deleted file mode 100644 index d3dc1fff81c84175dbe7b84cd2c3d8acc61595b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509208 zcmcG%1y~hb_dZNYN*JhgmvG=54vlmQN+SqJmvo1KG>9OAbV{dmNQsnmcS}fzw3K`U zisGZsPko>N$8~ufXE?L>nzin|?iG6m3MoNhdN2rzO3~R{KZwdq%t&mi`4E+hi%WY9riLFzg)p9t`jZ~`q{N5?O|`6zbxf=@PHyy@=n(L~OmU_W z$d4L%v^BY(Z%K+zz?|d=GoiD%pZU)G| z+4uXbKi=9m6Mvo6*22I_=U3C-JNd=G&-*+3LqJUD4aM}${#r%`fbKwArpCsmCZ{(k zXKP?-rK3&EXK8PubvC2G>DRt#m+5!FfPkPs%=Zl#U*|g=`$VN@v&jOJ=>uRf1yKG~ zyZ@Z?-$3(Sx6J3~gnom~*EuzQn)Ls=Md-Z37LxeyNX=U&Y7(Xom=HEku{f7y^K|@=|#z5=KLi?t)(=#$U zX2AXZw8WWz4+t>h`KegGAwpL}3(%SUsexp4%mIs7G05mxngN#6Ar{op0-T`5cOA0) z9tz+e95>51EEoXhumENQ%yWWvS$kk<854_rJNs=#vHTtg;2&HE%QqzG*lFpQojAWQ za|nGul(z)dv4IJ(l>HZlexL34r~v=qFj&9A!qiG%$Ks#3kUTkgwr+od1nci10sg^V zuztgYu7S}{?ob#w_wRH40VsZO6Kvl=p<@F;?5hsH{P$n=$My$^_`y4{eM5wqw)H6# z_%#5i$y!-hYgt(X=>BFJwm$&E4=#c28xYLS!h{p3{gW%dPw)q}|G_1&f3v-Xj@}73 zoSOev{3!GF_g_i!pX|u~2RQh_H?V)h!TFhg$&uft{z{ZT&HZ~^Kz?u*V8(C2usn6O zpr7dD7o7FQD}U29nDO^Of&Ab)z>MFJ@^#vOp{;+AezZ18gW0)T{yn}RKlm2#_h{7G%D~9L%HXTF6tV*( zIa}$XI!0#aoig}egVVDh@*k6Y!;+YZHo!Aq_|i&4^L!W$2LA>ov>@m|>~%gmwbBPP z2Dn;lz(E1C=-7SN%J1UQlYxJ<$M=ZzpF{nNX_di{lY5jQCT0)@0#(&>nFJW})wsl5 zT&N5ZIwpEn`os{xsek!F1uifG)-`aUk%pDd7Xm~D5)n%)V3`}E+6`AezhhX-i0-xa z`6>rxu71#5z^AetevMq~(h$OY%9}cS>f$Z)RdLldS8jYQCmwUsMkyZKn#Bvp3TrW{?8X22_TV1#`+PUu+l-*`7gB z={_-FSXL+$#Lmb{Y+`L>q8|H(#7=NH|H zjZOss)bm>#eO=+Fg8oByKWL5hE4}=nH70;(Pk(-|wUtQKdx@f0UTd2-UrT_N7Z~=Z zErh4DENygEUW`?m&9(A%)6S8TzzeojO^{;wccLJyXFYkOC7P6pN0_nyiZ<7BT7AwE zX)Z3#D+V)Ff-RUVo!s1O0HXmNMU0@DQS)QYWMkFU+j^5?^x$JQC@x zADeK`Y2|BIl?rIeK&UWVcXVwHa(8xA4qEa}ElF8r z9Bce%66Sm=rK-K07L!33Gwz0C#cegW$by=$*7h;okD`cv03%}j{%)dKWcY$U6Fc9~ zapOa>L>Ir;7bC6;)HcJ?n32;?i!LF01l>~)T2W`=cX&t9;cPo55-jf{3|?VrSTVmRdR;yw?}Qq({2uO| zo`@P+$+V$v;T7DFE2f*$8P2&1FKsX{FvgO#j*^n!N9%UFLavKO;l@s?jh0*`3(u)p zbI7BYdz0vHSKY-ls}DukGKj>O!F(WrV(B-3qcyEi*Yihj`uP!?^L`kBG&HeR-nj8_v~R?PZ2ZX zn?)52p+LvUiw<8RtX4JUZZFBMa`1Sb%^Is*OihU?-ui}C0WnCbhg3d-iUR)f*tX9I zvvhm4cm*2@*$d0{SeYx0_qv&gf*@Gg6ZRIGIw|*WlhDY7aI>LSMA6?im!08q)#zco z3-_2cB#mMS>0XA{%trBaa<;C{D%^zd6Ph~So?hh8TZ=Yf!W-H~7ck0chI((~E1 z&a?NWe9Nk$Di@4!&!S?-(I*%UO|%_b3y0la!@1fy)bTarIy%dpf|>fjcHjc&6++KQTc43(&44JrP zzhZlv>?@=?`F-`5H{VAo;iB1+j6B9IJp8OzahuA`V8{NA;?uhNW}bc|lzB3XnnF`hh*c57K|tO$DmfdN zj4>SqzeHcM$2j=9WtKJ!tqw-1D_w_qSEts(gucC+uK07;ETNwCmj3pGgHDBtwvg;A zK0y`?C1oEkM?@8VB#^hZLXk(7RlXhR^|4hry{Oy(Nx|VUL|iOtEeRwL85-#>IFKqc zRHMV_sbKv&i`A0Vm1N@;`Q;Ix3f|ZB zqiE|rAw0!!`@uJGM>SU)Tkmd5?3W&{Vsch-7}&TIOo=YOc2wHkriy7H8oW{6q1K(w z=Qze78Of%S#Ba2W&heP*jsKfjItjNbcCHor&I)&_=#Og7ave**;3U@bbo^^hI(70t zauUl4`~Nv7G4Pp~m;$M-GC<0wR}zCyt79_2=NI}0L%%RL82W{@!O+u)1Ni+Z`vIR{ zLQ638lpulQ6K*@X{_A+mC-(syGk+cLw2pLg{B=C$uj4U)9gq3zc&A02lka^UkNN9( zr?nd3{AumwiRC&m$c}- zU?*7kZ+3*TvV+)wg#}?|0YO;Vh@tF^AXer-QP^2_`Lk3f$owCr`l>D{3oD2fs4X!u zF$2;NLs{8CENp)y)tR==x*F%T^|hezAK(RLW(KhV$t4q%3B(R~5GV@^i1n}F1p)o6 zuk%6f{{}B8AkT>vnINnnW?(f!nV}$7R_LFY@w>vllnKr&?B_J$Z`UJ~2@GNf79tZA zFbLr4pui^^nEmer`%)4;FWC7U>3`H1m>mRE)tDe)5HsLPp-hY*HkQ9s*q8F@dAZK# zIsdC%jDUY-18Nd1Af^++z-&PJ`j-m(QgJ;m*ne>NUza2kI~xcLtWW@CfWH6(juy%a z0{>aK^WDLI?OUCf?7zEyCLqKCpij&ML_ADDgmFTd5Xj%^>?hxU8kYXYg$cwsOh9-F zVF%y>lwz15Odtr$-{R~i=YQ7i{0}tF#K;JOov*u6k z|1@;}Z#p}17K}jG55fqzeIW9Iu(JbJW&KOZe)9jP$;5w@3?L*ZJ3vg#08;|V4up*r z(Ba?e>?Z;^YeoMDYeHCnARkEAn3zwv955;~2nzjMmHk8jXT9$KA{a9efUbZ~Fp!zE{;ke_B7oC6!vAQ^uQdW7$N)k`pc?`#P$mFw00{s= z_8(ExS#tTaSpOmPKNE`uh^}tmXOcky$$-KU zJ1gMynSojmkPATmW?g=7o}LrzY|F|i#!k8~r=_;<-4|wH8YW=F-cQZ0)8g701pcMj z1(d_Ur`uZo(d=Rn2C6Y&AYwWxhW%ORi}k!|&pKZ~bNf$wINv&7yoqR~=&psXZt-rV zfo|zfVgn;e`7J>Atg>ABQKbgOt9d&HyZPhsv#9S?*R{fl&QT*+B3iI}nk|&yh@w$k zREoS2LF19+>ci<;p{?A)XY8bJEc0c=;OC&)Ecpf&; zi5pPhaQWK$AX3EhlRn8nkUu)$KnbB9v(jm^n~l|C8n3p)4&WQ*F+`Ibr+sSX;><`M z=xQP78bN^_>^Q!}GUWFPWp(#PXk5+2&F|7S9`kYz)S^iXEWG9m%0+71+h*;@qsR5?V zY2{Oe{=>?rb>07^!+o~L>ihcrQX2kk_mu5?u6Vle|8e23I@|#Jey`sB5>r5j`)`}t zXM4HM0}KqLo_`Fm08X?TUM!D;gR8QXFXzT*E5z@|sZVZlIzhv!0N-igUpGpePWgY*z#n><^Xul! zzcZbo;P*ZH`s*zgBP<`YbJQEWpEF^je}oP4CNvTeixI;e2u*E!&E82)ZqAPl;=SKD zVY^OzN6hbXiOD5NbamT2(`Art&;XDoO-}Wh|_uqaV5DowcT;jgN9E`5I=I?=Y3~@@eQ7m4Ev5xi(WaKz(<=Icnd0>J2APC0FSd>9RA_Wr&DsjbXek+YeD1!f1D! ztj!`LSe(ChV^_Za?H%>p_wx0u-T1f5b#tB%?)62_`qXr0?P!=o1>Nv(d39^-oGP+sxs2t&~j|mmMwrcDL}d zh)cPbZfPyf0{=k6_vgZd>nVv~My*P8ii^wrWgsIq61MZ2yJ-9mYDiE&UClBOGFC@aW+YK0 zx%jZ!Gr7-#Ij;i#8Y8@ytTJUJvi=2*8I^Rxzb<3&ZqoqXCk+3*ZGt zyoI^2_-v$x%zCNJ;}uB3_qY>f(P$OzDnwzfmA5()WSr3G+3E3ea<7KCq@sww6t=el z>>{5M8(dmi`?(sWABQ_qQDPXkk|ru-`=c9psozt*xN|YdUA}Pp?%o?&SRU#ccrBxg zp?7p8rACBeV=%|j&ZXn><8Q+!HyOReUn!J{ zB)$ztB}#gQUvs&r2c}tl;;zDGHspKpzGPJPl0^ z$XNerdcifls%Pg<$a{^q?T&C@)G^rc7jT==5f=- zIO+N@@$Hnyg7+^vain-#hY7`xNQCZ16fa2PYkZP?_ZqHLV{a2fuTZ;pi z3%9Y8&S&2mm_Ty-{f}0RHLysH!>JNxpYp0c3z9h2y$i^Hv=zW3jg^4)=CJ?~wq_NZ zTTIUVkF`9gkDkBy6=|K14*rF-PJ@gec8&o#;2)9J>AvV6cK5NL-xY95TBl*uZ+DLU z#C89;>{pS`Z>C~~uz*;Adj3yo(%H7~Z}HjbM)dE*3I%FHF7!4GlQ|BzpuZ6g062s=rHPk(;TzblHWrXws@oOW}FpL-7r)CFCk2oyTVwKjIu zgfDJ4Rl;h#q=gnj?;X6jKM`BwLfph+yp#=Q~TSLz5Yv`&lgybj{QCp zl03zB-zS@UYsFo$q#PIK=yC zjO)`i#Q7VP*n<1+aSJ3i3dmmg1#1XB!geGZMY+&`Fc2+h<62J3$?c$Ny_%`nXnYsOyGnp82QqcY;+U^Bs`X)rFgk;RE9hF z=F;tj@>%595~b0p{q_~sNXC>Knp#iVpZ1ONH#K`QtI!GEL$a|&i|?4Vz3ZazU?V&1 zP=eb7FCt`$k|w`Gfwnl+iuR_t=&=mOP$21DJf`NsYNUXURh350rR+zJNw>H!jVoj( zIb(O~%Hp+zrSQcmSr${p25f!Q%r_?&9Z|Zv>Skf_Tt-bz4Td%VE=DK0jDLWI zE@y{dG2j9iHMODWjYLc~cfCD@mq{!`S8CazYTtMc9uu3d`g_?*)}u@6B|GAqq8*jwPKgDhJ(Ni5IaT}h0JYn=sFQ`mLehAGF7XSzqF6d35YF}u;+ zJ$foVEEO3zA}D3_sfQk_hVXTa>%qY?efp|x_8~USD(<> zW5jHFk-OS3acsY`yjHk3aYlIp|IuWLOkLv#INL0uAhg$*wewplok=cE#LF~`>I@`o zILLgAJ{a2WKA1`HJX}l!&v{KTB z;g6G#G52_VECS;fv;hS9-;>H;)5fWH`Y~l@Kdm19K4ty|ZJaM9ozTXq0N-8mzveop zQ~t&!|7~Fla`pht4~`eu)AGlT_r8+ph%lD(K#qDKQj2HNu)7`%Pj9;`0?PAu%`XhE zK#M|sWK=x83AP7pL(7xwsh^SOztUn87JMkw&bryQ+-~MQsCa$Qj*}zGKgBfM*sif4 z-MG~RT{psqEp{>-1i7W#I{WU!rygC3*@1>D0h?QP`~DJM~c!`YkZ+>jGIL%nOShh0XS zUN>E!#CV26$Z%Qgg^y5EFQVi#s*km=xSCxDCJy^JrY@>zHuAicq9QJ-j#?p&VyxYv z6Rb}1er@UUpdsUvVWSxe^YtAprUd~=ZnX*;Y{?K&1^(lfG#JKiK6<~N&A zSWSw3SM3rukP$PVdw%eKHQIHZMiryooFvj%_R*+~ah*>(*XOA)gILO*CC1o|Pdj#+ z?o0hqMl@5p*Oy@~Tys+YZmvWSDzsNKn|9mO!xLI#q2M+>3QRf^FtzO#FU5<9cFu?8QN=vnNVKQ{A_Jh1E;B?Cz@ z_v&XR?(xt|l&3lGZuu|tL#aSQgo2C;k!sq`L2Yi^o*OFW)1R#*Zm0WR-4)B-(BY=L zDM_Z_64V*sMe4=RO(EdbGTLzny^L~vO)1Z~(f8_2BDD8tpP9XjFw*Q1aifJuKP{Qr zK;M4U*sRLCyjOClQg`DxG$w6Js+)3J^f&?K!2F^9hYycx7ALo;W%Y@tqRaxRDnf)l zIAXvbQCxZ|be$pA>fPui(MJedEME7`eWFU!%#k2ys@o#4z1L}6-ldTcUdTRzqPL@A zes-ltKYmh?WQ@zZ0xLUcIqbHGYyYwtE!GJJ%yr}LBuEsM_%KxDk`{8ZS|#_vMzP$^ zb41uF+0tq&kAE9v5hH|vsx*4~)L`M78ob#ryMFqWhE~O$=kHSsW|D1`r}c)?}$fp+htC@>`H+dSdM* z>wCdy<>Ub+T%#f72~xA^FF1MHork-#OAV=~nbP=+0xa>0nOP@`-L~Sh3!>x&Itv83 z6JiPP6!bYn>fl-Q!j30Lbj?>PQVP^rV;V$T;j+nG01t6rjE=`s@6CIzHGr#b6nZR^+E8_;bXCL?L9H+Bmp*V}@UGb&uN{YHb(c4ZD;~HdQMn|K`gyJF zL2m+b6q0qNucLYat|EKB&Rs$Rg6+_Cu{CSjdJv0wu7u_oUkKTpG;(qP#{ggO&IJOK ztK6a?4tJwNl;(s517E**1b$e>H?p?0T(^xt`^E>)TE&+$rrd*L)<7>cU%gORKW3FT za3ri-!VZH~l zT4OX66^7~@c+gZaEPc0t95cT-JEYe1h;buF{GPYDRx{4r6(t=r{q(*44=qQ1^sHK_ z&#V=w(R1XBAAW99c_f(T{?bU0BaikXZlKjmj8_|6lLmwa3U`;Lq-&1$;#`pvO`&kh4cHzvU^w_FW(?`)w`-Vf<$u`JWg5BAWs> z;GU!WQwsiZHVFI424cw1SrL#aeUBCXr2q}Injwr|Hb657pKLKXeOMH@mA~#f0UIsO zO?Ot6WC1$7f0`BDS3b##oOg4uI=$I=TZ4kK#B(ted$znV24zeclr$JGtsuXkxEDq~ zoDi$Z@>jUYihs!+mB9d)YpyE=7IUcM;x4%Ku_i zu`1f9?0eYlKH!ntN;lx)UM#}Ad+x-x9Qdx)Q$?-;!c~^`>=n*cj<=h}d1(y7M@NsU z2OQ{$wA}_-j$WeGe(2FnbChE%r^JT}Bf~vjMjO&qD$@^|L58NG-XeN_1jm_vw1FI>(*&`gb0}k+r0JQqQhK{2WqHL98YobnObJpHE~Xp`=Ik*x{#5!mYmuS4PUwlwimH|>L4clGuN zkb>!*%iuMOmC`1)FFFt7y`9Z(#%vdjn)LJHC6lDeHX}sTbA&y1(-J)<+YzmA&Qx4^ z>$S9*QT1LTg@ER}M9lb!=&H}tF_((Pxm+Yku(T1b zT{_GxY@IQRxCRaUxb8N?9{XaA1KmpDaRS@~o&WS!XsKVLTIr{D0~eorntt`ym=)99 z^si*H$G(?mthex(R<39s$Y~<6=wF+A$so@yBG!pMR{%j#q{#l{DR>XFK_V+8$c*p< zVv~>D8VhYU-WGq2z9?11@m8N-0F5^z+lh{Iaxgj2UTB5I9Up$@Ilk0gD7q`Tuvtzvk}a}-4y%@uS zY||%-n-fN=kh<-28___?nDH1Mnd3myjGUOvWuEYY54lo9va^OFY>u}}Twp?L&_PY% z2ROZDnpYd7H{CTEBpA#;+P0x{san_*WQOwg`4L+b(l2pub$6^y*xIk?Gc6aXF-oiL z;?ogI!eA`N!0BB!&>|up;52H#Y`q1`^uPzL0&fu`hKF#7!a+>!R$UOp-mOc}GQIt6 zMrtnnr0;0pOF9gcEaK$yn(~AWKb*EQ!nJ}U!zDpQCjO`z9j%E@Tn-*3g=7vb!gLqkjP6xv;0o8)`(<#^u15PuI4C+C(%J z-fDhG^-R25{KH4&_n{gF44k9y*%J6-mkH?0QD4Rc9HwbJaxdC_?6u9XR6t}7ExDM? zihgi}Z@%SP$4+AhZGOzVo^DFD%T?JanO46?Zt08nfiR{#fh?f^@XY~&L*k1J5}|u! z3T>%ulJ)br6Igx8q)!%Q+Y*xcQytm~oe{>KaX<-u0WkH<4P>jVYbQ_LpxF(RNjxyFkQC4Ifd9l;o?jM*?t+)=s`nU+u5 zZW34{;}Z}xU0}M(ouISKLq0K2jdm=t0atM0s2z#SA2hgdNzX3cz-st)%gacD1RlD? zt2%L4m%Qw)do<8|M^O3-1rEfeCS1m+cPp(#*oP)NHI++}$3+b-2^7mO-72Pc;mWCP zn{Gqvq~zUwp+EjOTZPZrkhQ3Rg)yf8T2aXZ(voz+#w+dbb01AMiqsYuR?L*()-jux zT}dhZ;I)@JPg}c1gW!D=Z0YPhRD^PCR7UGF+R{}u&7b202(an;J0bo{obWX$_}(al zFrJh^fzaW1PgMVuJVStuk>BS7nEQ(We-bC0ue$#K&)jEkOZXwJW&sMOf6d&T-QH{h zHP6d3d0pcTA`=wz+P7o#xu_w=XwL=j1qXeaSQAaseqs}?s34Q5ipJKAV%^?gIV}>Y z7-gVXj$1*5+0KJoJWJBiZ*0ufhu$Jsw+?Nv3S77`Y?q*lSq0K!DZSOT&NxS?65VWV%7$i%A*X6Sx?W=}dL&ZAX;oh?T{=mfroQ2)i#h3F0e_5Z8>-C%JVT74D zW0o*08E4XeJ+hvkiwUb9$erFG*OL$K4&YkYGQ{(?*>31{RB3vIyI4N{^4ngY(7_iO{*ouG@!Fbwx)HUB_I2zqsM& ztCnBtD7vs4y&-XEL8NQBUZ`zP8|y~xp*>1eM^Z*UrvZ`0&)?vC8|25Wo!ShufW^+{ zTlXSPkIpOT;vw~Y)Gqp0+vL#3`6PxxXGr=>#=9RjkD@83XoBCr)ESk|PUz?<^y+{w zemVbA>nU163JOuD_iZRW%1hV#P`siv^_#Ura`vCQtng~L6O3+s5@+8>+nS123&#F@ zO*x_CHc~L9apGjqZJF0I4t5ny0g{!1R!G&sSPL5#Bc#YM`ErHj6F!q9B}VU)sT|+5 z8P*BcWqJ9!*(v)WO^hH!mi1xq_h}CCl=;VHgD4Rm@o{#f~P^xQ{N;R*#wIK045G>SL zLFo|BQQ{Tcu584w=J2Q=B;@RY)8oZhsh-8PiL}b@K7__7Kjjy3(2KxHs>%vst%{lB zx>a@Yg=OUElVq#B)>*ot%BMGV>>M3ORlNsBWo9fscvnR9(TU8WPmBmZM*BQ2)vsF2 zpoct-C@$apv<2EVSsPe15|lOkn4I9v&6I0=uCu&2WRV+VlgPKY*L>gi=(b2+dnx1e z9*2MfWR7V^29EVs8N)V1Rxi5xzA#~V>sd-C?V>N;l$`V@zdpPR?ZNHNiWMr87ktMQ z5Ut2LOSm!J(LyC^mH6!XuSY6JEqcao!`cfMBn)+1k*VjPy|*UA_v6J7^7QBCef-+- zxI^AupwT)gC z8!|U2U$MnejC)<9#|)f;np5z|CImr3)7kSjwcC9#ynM!bqS@|fbYaU{8ha4v)gDOI z=6d9GwB{^QJlqg1;#yU-Dsc|(Z{>oW@;=}9-Xvh|z zpUe5k#ryJhcxnF4iJh=pGj0c)1^8=kmD-=i1<>Bf8j$T4NYxEX>{3fSP9L&)s9^r8 zAx)|1*y&&~TC)ajzT`t5mgd4T7pkc&k811y=O*1Vj;*(v=Cn;s8b({r>u{&N3J$4lP$L<)u&oxiG&T zRKp-GE{<{2CNVO_8B18Bcr-PvQbj?+5!ZIlYpw5Szq;d4X|aLepx3-4g#Ke6`qiEURLEx#- zbCmmQia%w$A4&lb@adz*{|m*Ry)x*m6!1lWKcIM^|M_EVa4Pxt3z>mlCoAy6o`3c_ zzsUNV!utQitp4ovML)y_5MYz*AI1i4iiRgy{n4sgH8b@xI+(24;Q}%vRJ`Qs#ZczY zp@^<@T`WvWGGes;yGtUzNra)xT)FXvF1{&^mY5xt6&1mV3UA@6{J2|1Qi=2kku~Or z2*Vj%P2nd{US4j0%LQBVVrhj^5~rb>b(Njb*`Yr)rvK*A;lM z3ZJdb#tDaQb`4-(vY~Uik`3?Fg0!w{^+?ZEaO*J~PP8ZNCk6jumk)uHsj;iqTHA6eI9+;Yba*UZHiT&0=7xJ?D)ihR4HYkU*#TAAph zwR!KJpspUorn}}lc3j&Yc)s*%a}ihWyGVHE2(Zc}HcYQe?K<8Gk9-&#=#b=LIhmgk z6Q;r%x)>pdAD1@k%e5$tHwvrH)?Of3WS<>-g{n-5jY}eRMo?-ngUCEM{T=@Z^^I}Y z2cZTTA_cTN9NIHG^vo7+L}Gs4St4Ex)9m$L)R_ZW)d|@$_v|k^1?u7R803YrziP^O z$67NGxm_ksEQN4=DA<79ulC;S=SIHK52FyD9N$J7C{EfF=FEF9BzQ4(XL$lGqAmM_ zxWo0tL0Tb==u3f!BqO@!L~9wiOaV`yJ`8p(6cXlls2AyZyfV>+^?|H@#`4YmKqF?h zDIVQU9CCt}@t#ur<4>_4&fDu>fJPDqcbncx4g{}3$+TPxfN zGg-@EIQMy(3U~c$R0Ep(2S^;5vuNomS9VyH5TyeqhT2Fo>6vyi^?^%F?OvK6 zQXeYRsus<@6YkN$P%|!C#eX^a&ghb+|BzLmIJS3ZViPStbx?Rc#x*u$`1`{Ic+h4A zyAt9jiyTu~9ODn1R~2CKN)iqnKlZ-JBfiQx@x;w?PtCNXIM47}QCFsrXzN2J z*l=`J$&RBuhv}LKA~%IydTA9x+NiO#$DMk%{ehVI{K4uL?VpV3^v3$EQX9?VSIQpk z@bPUbdfGg~YeZe7?{cmsYqo_~y=T7SW=b5i8zK>zN}}I+GpCf%ISP8&3u&5@?h@aBC4x2R>kClq4IH5WLCSr6`S42 z!M)=598)HrrzFwb<8I;Ok(%peUqPK&A@J0<$a{ur0@_4IwKjhAKB`eK|7GBH&#b0m z%XPh&s4A>YqTnL~_+Mm`XRjtc^^E^QHD9;uoXaMGN4WpTY!ZCFzIu{Po(k}tG5)O; z3jv;K{0G&XX0+eS)xWAbpUU|gn)&PgE%4aScS+7l#1P;y`#&U;B1L0>Ot3x!WI{t7 z2?G{scA!^R7kzPo9+G7^DygJ?QX&qdxD(u+QsvxmjV6eW^FbK}5uNPJ*yiZ13bH$$ zxY$OjiV86%w z2pu&rPO=3ojq7lqB)Ya|I#9s8G(pE7a2LE8!U!@SxZL6p;I=mBt*i`nGFvTwwH@p4 z0>^wO@BHN(zi)bloc@IvvmhdwCD1gsW=>w0Wk?)_#>T@QO93%YG6QZP!J_z^{B zUaF{KWLF+NNPB^^+1J!dHe**Rk)L!QbW94u=2DGWoUF+9Epy}BzpINnbfugnQpQbS zAl&X?=aqxdel1b8N=^3+(zRhZ>yGW(1FpmmH{aofq@8*F7O@etTEC+hNA-prpN1D8R5%3 z2eEkSh#lHl%)FP4m!c>HUP;_(Fj`;3W^%e5zuVJ)m(zy4EaqtoIaBs4 z%g^D0{-7o5DgLZQs1t-tx(Su=So5gjc8$B-2H1Tptgb_O1JS=&#XNY{Ex;?Qi%Jh$ z8&d%F>3Bstc0*e1g}qN=^8PE1^ve3OUe>V}ajr@fGQ2QSd}ZUaCR%kwP^L|v9WsL9 zZwJy$4AlpbZrbr&+nohRJk<_!y#1grxmx21YF%Nm&01^X!s8v=!T@SRell8x$TXbN zEBk{9$7sF9jzL-2Bdd41d}qrN1A_Z*K+`NtBjZV)==#!-Jx&|jQmPzO=I=#sowAGI zF@0-b!hEE`(HDYw!N%t(Hno2A;XzzBKe6}YAq@FI@PiA)TA++lihHcN#D(Y;t@Or( znZ8EG#?bCFgN8#NwpA<{MvZ!p-7@=#9Rb7rmG6{1l<}#+z|f~ZoG|liWzx{c1{UR z=X*J7nigH`*y)HD9ygIH$%w=Ypuu}vil;j(g;;yLlJ~K#2JXL=sos^5@vco^=gqZv zrE8n%OY(|4l#vfz{AtFXa}MPuNwu{yUJ&}?Tj8<3clwl>vo4AnMHYHhV~-krdr`C^ zW)11=tm}#FX*FtXpCH7kMLSg*vHRW7*X4h7mvlZZQ+teuBkkEWd^1u={0H3S!TiiW9ARMPAI2F0He z%Xxh+RNpko90}9K>p7zIvYnm1H0-!zvYYL0y!O83XeS3#y#`j$?D9R=#BfdIaAN`8 zp%l?JQ?z?cs!cDWWh@SpM8@a91L-?P%XXInAy^qOtWqRC$1n|)N}azTm$R39{vYIW z>P&ykV*p3~C*%S-eG%yS?V-SP?&m!73AvmK@CW2_I_3X!o;Y8qJ>v;x;PHt+Yy>+Kxv`<m9I>pK^?R!SSK`6;x<@?RATH@ zYkI|)Rdv=&0U5NZx|*LBz=f{_L%$ItTIS#NfpZn1rMl5Fi?CRFCViq^cE@pO)42Sg zpkg!_k*s6+h_pq-yp zSX*vWnt$Obal3&+?moCSRO(h>r>_(_p-Jy+1>Ja}bybEorG3iog2KD?p=Ly^883v-yq9}fDUzyh z6WX~_O%pa%3G>Hdrg(ON$dfF~-jJfx8Id)tZL&IP?CrlF^L-5#3_!}Gi5Rhj)9~d* z()DnJZTb8#%R9DVI$0iWwIJeCB-L{xi}@Y)h&D^j`A3M3{&+SButfahuJ9cqBV%)A zjO@#VHDfoK?=1GasU@#k^RO{e%?usZhTUZpE=;VZxLG#mTzo*?Yro&Kosck4oAsKq zK2aieFX&E7%~oaba@j}NDTT5v(%gohS5-Eq0gFE=#iZ`Zlrcj0B9vIcP~@Qg_CyU(Cu_nd_M zmH``Ee#sVS#Uo_&WtvQ4AuK4a2aZP!7DfjW=@t|}V{DiRg`(Z3S>Sm%1BC#w7zTBE zsE`9c8~;ag#wxez*pd`?E9VLI6elTZnE)IjX4+_PTC+i#%kOsM zez!3bm_~xwx73#_kNW8TNP5})=AEp{zM5+ss~sP-YtY83r|zL8N4vvCoo zh(9yA!w$Z*Mq!)e$_+Ap>1#KpG+=I9g^v3)8)vm!#iRFH+^aK1$F=ReU{4p?n9{u6 zv}&;L!AK})Q9UN{a^+6Fz^>8m-I@41SqDCBh8^#dg$|=bvm{y^?^PTTVVU^XOT$ih zKU}%ICWr5?Z5nq&p5UON0-rMD-f=Fq%y_Z<#N`7*(|&iFt|dQ@OO?YJf$upb9sD8L zfzO?$q0-8ViTSUkN(6$!9E4JAp9H5tB{SCW>W)jiU`1L7u!o(*prq5q=-FtSD>qnW zAdzIYhD9>QVGG=qbV{wF^(>5T)DCOot@=xaoevUGsaFg79;#7?+9p3J%Z%G1d@sxC zl0Le@d~L)LcVm^!P{VRAoL)cATMB;1*~Kx(%Zc}z_MDXg?D8jSzlTre98xtExEF5) znu}R;7``ot7sP;?a=YNEENxK0 z2=KIuN_`sFMY;B&gI>K|S@-Q1dPtM=FPVs@eMT(pin9H$p5(Qq_G2w;c8ZZ&xK z&W}sHU?-C!>V$v(tYFgU*pej)h0AkgwVQ1KTyUfF5HoIwweMH#d%pkn>(uV-J4%i#?FB^sa=!r$h*6EZvjVnLI1 z5-(&)%1N=S{e0jN-Z!l*Z_a44>^*Y(RR7WoDl+$)((Gm8-ulce&O_L+$Nj{NT=x#7 zKhyS0jC@!Nw7IpX1(%#4dh_!_B_+3tlhMmzP;Ov6dm|huzl4C@0w21m&#o5&=n7qzB1rQ^L`0}$@oJ_e#lk(=P>)G~wj~8NQG1Uz_V`>O z`gXl!T$V59R5_!@jk}IAUS&@m4!vawU<0C*7tM=nt~9^}>p&$|JL;;lWXLG}CLh^9 zPo5&kQ6NVd&cAOivotKiiQuYdFZtl17O!HAE4i?E4R~BF(xmnPb*i4JEP}$+lfy1AbjHAED;^4xEGP$pl6$(K+ z$QxUPUKR#iq>y&l5+D?IUB01MA)TM#A)o2~JQ*#Sqo;hWu4A7SLxct6c78OaMDbI# zsG$RnVRX|gukdBDJndty%0gPrT#QTQeF>~fHd89mkyBNrBDOLr8y)Mh@NYTEP zhh^caF%)94HYlZ4dVqhxu54>Uw8nvy{}BAh;L$CIt6OZT;Nh|607h8?bTnI>i^y!E z{Hzp`p+&MUQSxzMW0-EF`tq&CGFk6ki*~G((i&UZs<09;kZbqhCuX~z1BU z5e#~f?RGeQ=2ABQagL8D|Ay9$eQ}|ux2Ipvf3(Kex|AxHfitsy8<(%gF4v|gEL?Kk zSL!2?5_m^k6rpq!iHzNNc64w{TVG#yE3k-DAb5&btkS=pw9QvE1w&RcIXJ0y;T>sP zrj5X``;gl`J!^x=+1(atDyT*=NBk3uko{h#%&NfEH*E6n%4>`JT4t$Z%j{O3PvbC- z-ty}=#bYy&^Rw#}tIfD& z!`Pli;wfpUd5o|__uk<^2g!}DDx}TV)U()#Y}(0ntb~S&Y|FKCf6MO>|Nmp{o!|3b zx3%xswr$&JY};tiut8(njcwbut;SB{G`96-b?xpo=h~gmn$LcpKj1p9@BPDloaY$l zxW>opO#caNE9Qv(i$s)QwY8JCrd|e=Aq&S3q4@zqhn({W-Qz5n3Ki|a8tlyq5^P7_ zlvI=;CSu6a72NVqIuwqJr1@n#PG;_nGNT7v=#c6Rk}bhwtp_zw*UL6gJ$$CP#Y?tY z5VMCD-;?N{c^?fQ2HdOjo~}gh2iy_A{s?>Hywutn%8UWW3Fsb%#;z3tC+~>D=u&9Z z*YL+5*u>Kt)tNp5I@3Nc>T%NvwSjF^|54(RFTmj$QH$eWTV~rMz|qDTAz+`;SzT8T zWSl3twF04%3}qRmLn_=`GodZHO7=eTwH7op^$N!xKdTC=Vk+f(hZ-c|;D@9%e4}cX zWYk+(#cv;EvMf$aUb14X-DKPQKBpLc(ZYBr!Xfu;>@aJkPYrI&B{}olu5B`+k)Z1M z*^oJ%zL`&JlOU!|OY0HeN7j{tuLei+ z!_L)fyVb4pxj_kL06Q(b8RuGF-{iqRar-}}8Ccc2f96FrOa9R46ZZ zhXe))(lqLjZf}B9N%X+8mw5iwaJ>nE#}g&yiiLtR%|w&!{MuCvK09Hw8T}2k%vbSu z`QJ}=z^`)j_sacGqQD=YRWkh~82qo4`xmzCr?CA)fPcXY{=-84e_r|PL;pg6|D?Hp zR^xw7>i$gu{-dM$uZsG8viNTg=Z<5&zntNC_KW z?$S3}p8rZ?PC;e%`r^*>W!a2s6m%L0Q6~EP_*ssng~if*VVKis*iodlem@0VT9>AE z*|%yzdO_V|&C&Xs!Q;C^UajwwxNfTPR{_YPwRbedw=C$wc{H8V_IjU0B_wX(!;c>_ zN59kY(a^tkba@XpR0SSoe}gMG^12wzY^V=>_)de}Y-_|@qT)6RP2_Aczt-SIm?JzIA6)elI7KLLc_S-rz_f1! zPuI*dV3Z%GH|&wuTo^18HfM+XQFmt7T&gRx>rAKYQk?`d7cQps^W<%HS}mG__c22q z+M;MRz6BtPe_~uDA|MtK!O=}9>hu_3yw!&no^G1;Oc5G2VhA0O1`nd@FxK|UhW*?{ zu7WUY|ujKZ@7He7&leCiJyn@kisTE3&X{Tp@5)i|_f$?sAh0rt;qE2H2&&3c+IbshY*QWHKo@{zd-oqZa z%j1nBW&vz!=R2+Fn~{OvU;u|e026nmq%etjMv?mr8$9*pX(-|`5Bl{Q>BL$ax$@l6 z2V==kfk(b$WYH1nGbw830q}U9F+iEscDkJZ-D_`aWoAk((>IOoWPQj{UG}*`3JpAH z{6P=LgGT@P0``$px4n%(iu2rM96pMq-tE~(aaU1pTIZCoDL8lW4!^Xj>b+Q?Vbl2= zihR#K=^p|bsG!@v72pSh6}lRH@xG^%Xtx9RqarY*!Ps~=DI?TJ20fQDE#*zOvF4I0 zpj=5ify}z;D?zW`#FrU2LSTV;FEl=<1=JwOa^$$?ls)@AQ|ScSG_hN%EZSe;5wm=kihEYQfCt{2DOmT>GzBJe?;xv-gM z_A4AvIjJ>1%Zw+ZWrSG{TTOz~Ox&G~f1+pQfgK=z3CbIIdhT3CuLmgXdI`~feSWSU z?^Z2MJ3cUHU7k!=v`k<3Q!l^G>P{I8VO_wy3PvpEGLG(ST(4K4wHA3D=_d09 zUz_@Cj*{yfIIlfqFSOXr7`6#^K{c|ts1N@lrvCVy&83vvq&FeSy}sOI4xla(d}<)8 zC`N!s@>fydi9Ya~Ro>lUoRwPK#5*(^)0??|nFPfu9@f|Mh~qHJPfr`bE3F6`FKz(b z-%!>^(&;kdxmArVIOoZT_6fKPEqGD5iLRw2W70FWug@fJ%V)1YrWm_E@_iiEbG@g4 zBrBG8>C~<_XbTjxATW-HWYKGC;BH;}A)yFV%dN{?EWV65d?z$Q1x!S%#iS^^a5+D4 zV?HKBb7bMAjZa{$2{pJPcEASv+?r|W?!HFJr2IM{uhYuhW? z$%y+-0LjHnpZ>FF=ErbTwa1%Nu0*VxV@PoVQ3KsmUvEd1spq$c79JZ>iI1z^j_rPm)))vbr3P7V`{ z>bZ;i6o~adAS@V~|A^;zO}VuCNW*KOdk~_C8H`7shGZ}x%)h+7If|x9DV{M)9f#+k z!IuDLrJ4H?xK2ow3k84ffIGzu^3YGn?uCa#fr#=ti_v9)%~bNT1w0I0o>hJunLvAI zobhycXbxwT^@|YaoVH|~d;%uuhRY7J6DgpRjR%tr#c{vaaxJezF6X;mp1vb>cL?3dN*!Pj~d z74|b>*ajS^I%=zJs>0CPOmz%Lj+KRm0)?F6nwIj^QnJRQf;Y0pnKop`D8cFKoIEtj zVaa)Lpe<&GyvlT%M6j0zBKNf~Dui$3 zRv%qI40Bleg`2felpkD?hb>DT`$L3^`_rp^h$ohjD8uJzi?bXn-YI^Tz~IH@^5-2KY2>O?)&MuekSVwO0)k0Q}w=X``>yc z|HLr;_d#Zk_uaMc3%UMBujD5x>(`BcVb%WZ&i0`fR;*Vz{*i+|*-FTJh6hvM@LY_YPCLkv)Vt4Antlji zi=ZG+41L`KqZ>zSxd~_S|7$cAXrUIdv(jfuc7qD^BI(5Q34C93Ur|-i2Jt_ zMS$K!_@=!$KGzH?Lo@d~XRu43z+H+bCepYS&M_=y_O^<~vGr7F#H{@2J$R3L-Q7Q? z^MZ-vgCb}{Wy586iI$C~rWU~$;TgiHPMI>>+`u9RL>omLM^LOaB9yXs?lfF5Z55B` zKb$IyV;feq0GkstSKnA#F`I!NQ>$t4!G}6QJC1+6t&6rCrb{w18?(m8mBaR6B1D=~ zyGPfq;Xt$#9%{RT@{0LmvIce zamQs4^g$*J0e|K}0@=*VG0Ipk*Ijk#;nsLuxxiDFMupSUl7@~{0+>UUrWFO+IDZOm zIM|_vVN~w5*{2_C9VX*7`4qCuP;xhFZsAm0!&y;HqRwET+&&=~+fOp2>f8H}h}3p~ zx(0$ORyLDVEzN7$hWEmBP_?Az0cfG7(E4e~vFK&^3p#X$vbQY#jm)BUtzo4Ej0vj> zZ~N8lY7>8=g(J4(iLf*rsbP#r7?FNSV=(SQE6|nBot23-E`|Pr4_x+bvpC`n}TB$8%7PKB| zNy1j^A=9K51_E99hxoOIIUXfbt3x+(`b^Eq`~5+_Bp!d^J0-L+rqg)cGA*XIuQ7r6 z5i}m7)(+8Z!fXe?IM9_7npGp~JPj1YPuDJi4w~b$5AD3O_upUzL`0mahsSMx{NQmV zUYK(WB3_8lzH4f#AlAS<5X!-Y)&CI#4&3@ta-t9+_PoO^E}TV^zHEjH}QsQEYY zbn38G9}%G+-wbMh_?D_OrK@J>me)qhiSgk+e9?Db#=MP!13C3ma9}x$P}C8pcoA_b zh@ovB8JQf%hw%s_)V~(b{GuCb)IGDy_GMdXGP+rGuf<~|N#imX-{TfQ8rbt(B2b3D z{cQQP0K{RrW{Gwd*lOukX3&G;{?zfo;xZ=|68O0FFMiP z!bSA2>8`ix;)(gZ!E+_az zE?2H;HdCp_1BS|arK%3_^o@xieJ8mCbJUDm2yWvn#=eKf54fg}%brin{C-bgGe^ZU zek^BLOAbpZ>2zHIi{lQOK(*G3A5px*KSa{&|3-FygZTNkrHB8RtNJ+&@P~-vUEcne z0|Gy3PQQfcAF}&jxTpUZQT)8}*TKI~&p$Of{{Ou~{)IpPQ_{fpPRIDWf{FFMn~CF? zx3edRcb1c;#7Lv&xhl~SzsUgndim6>5qv=b>EqY*VcFK>1$^V-kP{HI4#%Uwh7UAT zND{F`l+isCi`^5g>-|<|&$PR;!Gfo@`;I#x8OZlQ4}=cZK@;S6=8WS(P9E^BS2_IW zK${&C+Yibn#>!+ax6@q}##Fh2DR2T!Zx6Q~XX9397LfqB#|VB4Vt{aI&dX2NnA}3% zolXon**1733QB|fKpDmMGf#y46qM;&s{;i zQE)rURPj$=0rGo#sZi}n1iw?TQb84uNJ_A7T{U)m8q31F^hH=#-hS(cp*9{M?j$nx zq5{)I&<8NdLbC&);FJwjEHQ+q0sdP3bf^NZ0{UV!)rJ1C@0vssCIzjJVSAH~J=1C5 z7XhB7FC9=IJV+GJtKs~l4^&8*0~RG`6lo|)y@E$o&SW*qLZG6)fy3(4Xd%Q*euM5c zHDY`Xg_Q-7jF4yQa8sPnOl#zH^RfHzcAfwNp$N};x{sK=xIZZu$J+O>m*k!j-E#q1TMw+~8Xc{wt!%{z`4Mzo(N^!pJB;cQYYI#Qni zp#+xQ?oadARly*-p}!2&&nf7x=z}}AhdP0%(tXUhiRc1DS_R|rg)qn7e>LioU{p6} z52HCnK9-I9n(30TKzJ=$!uM&eeL)V^`HD7WV!DBmF9(R44-G17{410PUK0nFr5X_` z%taI~@}sIzN_3^@v-1xvrNM1g3qeAwAVD%gVUN;Nbg#5YXa~zJ)ySWJHyJ*Rh{$lPb)}r}*-1L!MlS=1lA{Y0MvrDKB&e+B7%OV;cU%~l( zSZ~pc>Lrp@T6bK0!q4TiX}$DrY3NF`X$gHm01am=w_jv1i!a$S)-d{$zg0D|fU(Yh z7pK4vniSMPh7u0bFOHh;32nUbF4!B$D7o!$g{5!pY)F)eGA)SCy;PyW6tJ(pg*jhrqsta=o7t{J56WFR`SxSIL^k@zkS3~UOc2l1@^Z0D!=|$u zxrjloDHi+`y|%cyDeTQ-`1>wIjNOKg^7Mce@g0n*^4(f2l(P6ALWiZbS9V<7^rN7h zTEy-)Cl+rd!85gPbG5I)N@5xIRy%6E7T;3 z$e0!zi4(pB2HPc}w+zk3SJ+QZQihG?E&K@BQU7Wgsacs?61Zyr&-9NO?Gs>+Gi08lFLQeoTp!=Cs;Bo zwBRK;0sV4>n}{iufN?07lI0&{)`DSPlXU^hp@kpwZ}U-+N3LVbC?W_P=o`NYt~7}7 zSD(eQ3*)~WEdNPv{68FgCu6+B=YBJN@Lnzdd2Hdo*pR=> z1mim*i{ZUI{~x9J&mZ~g#=kNX|H?-Gw8iA#W*Gi&S8uWzsu(QwR5?>AQC`LpC_SK6y-9Y9ON~*{_ zzWgM+UPw{W`^q1Cx|sb?$8ke66KUS}-QW0PpIs}(+Ua?L{0#gs@IX7*E~`w1uhz%K zEW>?X2fBu!+&^kGq+mB3^|G?@UB4b0&{8n&cyY1Lj^C(6lpYZ$st1bU>>%F}n8JhI zrLo?D!Dq_%LNU~&3(-^=D1aj_%+NG|a#NUlGZ5ArkSyKOpg6y#*p7q`%TB~IGUQ|d z*I3=#(k|tRG|y)QXyNl5El<}@-zO0)z{V+wG26t4RdXWR(j@RCmxyH)TO<`7CHjgr z9y)eUhluYRARSapg{z$P3F};iS~W=KXiy;mG7=MKhh2ZO`M>~$Lt6^dDL9JSj{^js zK6bUWWrz+BK8oKskehS7aq-2bqqDG3Di@bSFPP=C3$X#>Xbpo-u^7WA#M)y8Y=G?% zAK}(I0YEc?o)b;~Mx)d`!*vsl5~0mO;uPa_BGfj8=nh4~pf7d9`lmD*d-*R4XS{87 zFDV;+S5Y4Y#7OT~?0zWJIcvaGxH_^AW*NG%mF~Dt;7vdQ0?J=g5nB$lh^aSZS!Zd$ zQV0NE;MrG@@$4Iny&06dk833GZyj4USFlw>0;Gnzz~FH{_UtuB$Z+dAm1#+zlT* zM&Q#xQCOVaAZC`sx>(Su?g-gMH!hMY=4qtV9;qSXgU4_jP(iMrqA=dPpONnSsD9=p zxfExbC8+8*_e6q9qMUkm1-GUmn=uA>CbXOz!EF3c&nBT3wgK+vQG7^W?%$l~I@r5g zEKlh(P1x-OkaPoU8C`-MU$x}a`Z!`&%>lhyXL`v@a6_~!vF@VbfH0m}XD@WuJ5;E- z&t=T5iEH$LT5Gzk6hKT@OK8OJ z{5eBSDo1fNMM5pJTniH`W8ky#h-&ZuH`UY6h?VRjhK9tWj>Q$Ens7eq*(0_fQzrgj z@Ic0ny_5C4VE4n+7ozBuH0;nMCJ5{$N2C}{$l>yoeO!iZi@+$LGu&(D^V-k2RTE1& zaB4T_eoT5SD~~i39MFYYLfzT9ZCQHXS`8tyj<~U&vcT?_OY}i$zI1n2XsHCbXdF68 zJ2;HGR=JyaY$ai{H=7LXi{R`LshnMDB(b~EDP{Q0hpHPH=W9%l!iMJ2K7yo{nt7J~ z$aG=a^DrE7>>JyFy8%x)OYR(ekVctFHpwjAQ;068qWP*8%7Z2?l>xD4h$e}=D$#ut zobAdeQO{ozpoxjzBCkrdqohH-8yg>kg%>}|2UzFZkH7=!L;EoWHtYVwZrAaMd~azKfF&t*PK zmH1~=+y<#B={38x{Gr9X;Jegrg;sH65NC`am!eZ52HqK&J)%tn@FUe`1Y6aL8iN>1 zQ0fbL{e!D~Cn8gNcD@^N+XdqcH`@iF7mbmr4c_M~ z7MtmVawvYwK43|O{IFp(xPle%8g_-F=+r}JJA*v&4^_TayU#&3xbC#6+GNK*J#L(ngxK@mFw9XYqA26<5%2h~5HV^i2r zeu>^J*?7b6I1TH}r|FJBOr(ZR`i{>4gNt4uS_mbi?xP6NCthJJx4h+$x!A~Wn*BbD z)dN;}u@v#KcW-lDZ_UyR4TQ#W5hHrs6Fy;wF8^-13YI1m*c_>F6N+KA({tpw?>AQC zH`K^~?;`vYzx-#b@i)5&|0FX*{fo20^poNIOTYhNHGY1;e|~20KVD1!+d1ZUR2jp2 zi{gJ6hM%zL|HFm`@CS?X z?qvSO2l{)_!TbJ}f0?Xbeud>7S@eJHR}eH&B)pSI9n^gIEHxCfJ_S`=XsKa@ORtza zV2iL`bbgN(r;I7%sy2c*s{*Mu6MdeD-xox-poX?>n^q^2Cj>dZ8i+hTxsnVLQ+?)6_k70Edk@%K9=Us9@xQVnU0Ys)pdV8k! z1lgN3#J6s&=q56|s@#XEol&(iTK(7d!0659Wvd6}yyOPxv+Vb2OABArNMUNv2gz8! z$uq2?hA>ORPjJ;yQpf2-a0pIiSnUCuNE@<2`|Uai>hHsr2Yo6CE8!6WKLhL$?Sde2zB3L3U8t08*Sq0_$R6zBu^f&#F@gwW+`yU}jN(IBIG zsI56AN%Eixvh9-MDlq}vg~M-tsBW`yq|uG(Eq1AwU5{V-g$)b_!k`@ZBF*~tu0-=& z8cny!HRzgYGhb|%Elqj3Xeugod?@(u;(W# z)%a2b^SnUehDVjVw2Pvd_QjHiORR7-0tds3-0pm8K0ZYl zO&)StO%%a{P^2A(1z$?g3h}IA$DwIigi|;6b(?YEt%o93Q}dijTY}5-ZyNGmElhHY zk3dD6-CyL7y_vFpG5@4wlXlYN#hmpKzPT%TRb&F0?^8<~a@xpdD?@X3HjdtIwH}Ao zZJtF@x8me{8Am*QU|cC+>q1{j0HxAySIxXXkD-PVp;#CRpF%G-8rcSI4ZRAsvcOHe z*<>jKue=?>O);Dt5+gbdvd4pga(l3sB89F{F9sDm1>~qg&Im}sD=N+IlhuNQGv1)U zE`YL&B;f!d^$0kVlHPo=3Y3h2=F{f+0Mn$A))GZBo?b~CZq&ob`&Z5G70C0!#Avq{1q= zQ8c9^8;nHYl4i5$oUpwS&)2k-F>tuFpIZ=*LanjxzY7&CudO(2RB~%8Fl8!H)O`Eo^2T3T>~Z?7e@cC3?4Ha*ERZ2P?Ca5u zH5#evknsGH&Ycz|Ud(3ecW!bQRBQG9Is`{kkreU=^R=9tByPHLH@*Zjf~^+diW$rA zhf|14uv6``N*3bnjTQJBWYZ^N-}w&PF^z%5gcGqyZV0AmBjjtqNSv62#PjX8M5u6U1udl&6O8~-G8+Hu zKCsBARg7=W%#SW?DH$snh`!%yc|NkSTP^?=;A3?l1CZB6Xjp20pc+CqUrq^@J<3BdhIRslYM*_Ni4~W3B3!J)C1wUJ75L*i+m{A_Ozm@4L;~I z;(2dZd1Z{_Pl?jSnJig#u^e$~*OJA;*Cm@|gZqAqPI)m4pwPsV$tK3uyyt14BCS_lmX#bI ziuN=(PHU_9aC+2kC8KncfJ2n`=%bW6`jjK7J#NWXX$6lMKSC6$pdcf78S~LK%#63a z>uy9Id`wkf!Lptdkrsp9gE<&0&g>PSXxuWvgyPhS$V1U=SG6U*&xI#AJg| zhsZeXOR_^=*v<@_hVY~`+7$7K;l-Fybyg&K*iP~=5vDwvT+7#I)XGVU@gHx-d1==P zt2rzR5^W-bS?vLgwpJTKuKS5OD+ZS*Pc$8LSCKep%Bon}u0i)3V04rA6fMFC$Ti^Ks}pGcc=;fkK<%K$Tvy+;;Ga!fGs1C=K$s;N)8+(9m-#UjDW8?d zcwg{Hs@Z~m`zgD(0dW*+$3zXi34IsMh@Wd{SODS_%^#4sN1OSCc3pqIIP$3Ts0Ho2 zb9ppUjTbmYS%uq(lO@2-o^2Fd9P5+6ZcCOZ5VS&j41PYMws#Z_wx2Q zY$A6TYp1#IA8s3SASoYDHS3}4WLfK#g#~8|AWMsO=08|n@P?fr<5v2SQnR%hT?=S8 z$u{d1KRF@Eui8oss@-Q-oqb9y42~+hm!XiYgM3*ADr}di7j*G-UQcp{vsv4)b)qnn z$dKW@G}UeAr)F~5owb;g$V@Q`rohQ&d9m;r7LjmAJxxDH3H< zA!N>Ikb1RaTAduVLbN3hXqncPlzICa)*9}q>gZ#yt(?$Zhjpj7OL@toMN-05Sz#tP z@^rVqfde!nG zC_xtMnoohr<&+LCKoTj1eiVgnJUq}5+&ZSqjM?dUy8PZ%@}$b92#-~;5ftRA7yn!y z9aJFUG7xYcg4@ktq*8yP7UBc#PUc>yMw5A8w#e#NiL1%+ywU4-!X93SWmx?=zCueB zm$+>#*n0HFUnO3m=0SU$x^C9DR84p3c{8=cvh0(i5g;xbW;jD_UZeanW;GJK@0=@; zVo=o7A~hAQTziB9k2Gm0T7q)yytrjE?L48!c!%yl7#s?T|jKMs`x= zH4rXE5@53~;YUp)KLqwVQdiJkVSn!A@Wy$84-#sq1jMmIWlRkTD$pPNC5=8cnp1Q! zjgi`f=i3t75yC(i)qrIQJZ8@j)@Nu{DCp4x)c@)ExwXU+a|KM zGrH0BgtH!F)QToJcl)!FAGD8Y67#@?0Wy7H5|b!w`+WT1oU{?=A=M_K|CA=*lOd3_ zCt5SwGt`CW+cjM_!qi3(A;fN91b(C8W0p|p-P%iWD(q~hv2Ke`%XSbX+J_Fa3kmZ< z*2kf;smVczyzjX%Luo#%lUz#NNjrV^+f>N(o#-E)YO*}mKWI;7COB)H_Yt;k_I~S! zw0(h=#Hmnfh1f#NKd)rSOB-exz^IzB{bXwP!(YHVJ+1|OC3{naXpwR#bbhW`DGK$9 zGEFdihGwthdihpD-kGBgATt^|9UNu?h5JtA7{U19;~0@qSd#e+T$ZGm=wmxIZ zE;MydBLg6bU@{QTT?~sxOrE>EtJ>CV+P17=8%Cgpbyd!M??%X&c4m;i$L+mhT5cTH z66MFw)0JhXMZHYo!zEM?1b6Xisgm%Ufqlp3lqQuId-skpvy4|aLp!}6aB5eD)ST5& z*IFq`^xK+M$B|^hRuNJB+J+?*Icul1Y~%)layx^sN;a6|dQOvoE+twN6(y#6{pCBF zu3=y)c65~y`}_MvVoMgb=KDF5(9jXd)c0Uaq9YIH*ot+4tUceq@Acu-)S4q8Rc1A=d|}~a#{uuf;4}_g>at!>j|`9}Zr1_awOQG z7#b&E)MQD<(}R21b@KOZb71Q0k3p6!g<VmLu~O1`LNmLz1`vvs}LHk&?Aq6 zXQ7GGebsTQS8H3eAaHKdU_NtP1JUEcVYe;G@ScNo)G}^g85t`k-dFTr=ReFB@71%k9TG@04~ra8+NHM=a%570^BkY&HKHQhEP| zCtk)4s!C(mda@4Yz+8}+sPio1$$YjTpQQ2F&Bt=>jqgc&Qg@y zZHDLb(szvoZD0EQSrvdS-oUYtIPG1$pu2?FP?&J1gzT!u_c z??+jN9oI0(hpB7v7$NIoZ!A;#aGsGdCinVA%twwOt|Ux^_zsfn#lH{3+qO6+zj-vG zo;{not>i7K8L4P2jcTe{C<-UhLOWGDiob;3V8XJpxIN35>G{l$SnB$HNFDLbP{_F% zAtWT4(^Jlo36Pznn6fJmKrp+E$w@>q6}p*amaNs(CpGC!9jx8FN?e)!tY*H*sscE~ zaz}xxSFWB2s0pt?udY{-$xoeslLBSraWwKcP~sJD<8NfbI&^$(q@z}M3$Mg2Y32e< zeN0aHm4^LUuFLc@%8C(+?+NJ914E-3s|YI`(eyL?qgyP^?{xN$IFH}g;qN5De;?d? z*Ra1exc5Kn@b`fF-*onG&ddM2^8ZC6`|s)Odt>@v-}$dP{BQ4uJJI@u4|$K*ZM~E7 zPZhoS@*-mEKc&v!GQemM4zYcNp6W*}ZUSt0+rdh~&zd<>~l_7_%tL8TOs^rO%3Z_6*> zkw8kUBu0<5eDW~S+8?K@uIhm~b8F&W2be?FVCWi)u+ZM^FOxB@dQEj=jRgApZ0QXS ztW?1&<@M7oACf#13o1oTzr-<9L!t`y2aR=2GTeD-)Ww2&G92QAf+(g{QJGqjupE<5 zl;%up+{%>Z-vAQI8E0Q70K5UFMZ629_?0E&G8hCQl}dOqfwUTzq{E-F*^(>8JJV%0 zy_kraqvM7g(09nD0Fj9Mnu|mM+-kqw;Ib1=kw6Kt5PAvXw!|u*Fto?RuWuhgQL$rnHS)x1&#lSbHo4}X8}(C&M^Cu<{^)W z(>lmY+f(l_hcG{*rvXy9!t?ACGLK=Th<1W@%1Pe^W%=i=AL|!_zFXK%zM3I><-&zB z3Nf^|Pgp&h-D`;W#eX6kV(q)>Qa3%kiVzjs-k4>*}Nk-*Uc+P=OXZ_nl1uj79OQ}g2J?8JXLbmzpr z=8qgX9M+?)xjQ&~KHiqttqWbHmj{)06Low1jt@6U_ay7Z(1ewS(jTc!y~W_jT1xBq z{gn+%#{-Y+j87N#Dd5}PYzhibt5Cu z4|5WDvzTP=A6)8CBug&$KQ_mVxDSwveXf1>S<9?OKFYibwqy}YVi){WY}3ZqJcOSL zi8@!{v^Ag`xA6?wWuGu}#ls`Df;!PxXiSsRun4N|I-@b~Xx0ISU!c|H>!?pJ?w(jy zSD@XjbL*c)fXsJ%PLoQpFG8k@OegA~!AYWSj7%*ezNB2#Fc%q#n#P5)%ISn_UuQmI zB<{Ky?g6C%Ugb{~$8AP|^16LTpTa?uoS%>SSly_AB?Cd!6dhW98#2*zH-BE=u1*0bv=17WZixxqCeF=X4K zcq|9=9gBIIMh`I(&VlMq*HQ^tW6F7b)aUj|=S$>3gHa^|(53|BdiU2Mz7@mA)0X!5 z-L+1>%^W-MLtb3G)%V@A-sSjK0QPg-^9HP;Q&K=i*pX06^D)T-ILL)gpS;=l1x)J2 zHU-Z#QsqQt*^G#;izq$vtN1ib$DiN;DBHaOz`2gO{>~Ttv0wgsU+_~R|E>Q1N67oX zs=wL)IL`L7{{ETj|L3Vcwm;^|e^Gz`KkU!5|8W}fmoMOa-+lYH>+gU1g2~EvUm)=< ziOg7s`AgS4S$`<%`-T;_AEDmw^>;Z<2@xv!(@n0hWCO}vJ>A4~87vmJzq9jw`V%2& zeKT170(hqmUic(=!XD7VH0_C9!BUF}HXOrhh~t3;{@2$w9YrtKvfkV{+{iC0oUS76 zUnGdWx_rn*=5!Pg^u>(!A^?cw*X`isXyv)L^X}u47mBF>wESeTe!0;rR`g)_90Atd z=TN8eI;+S`Bjz5s{N(2ZE`JeRcTApaaXH$51Y42-Ov5r|X#@nWp+&i3XuCpFtoDgR z+@>&Wf6a;{%LEfSi&!kWX>?IlRR;iZS)B}t}J(uw~$ONhDUiC`VkPzWrI0HS2dJ_ich zLX{G8uAwG2H?1g1W-M$B@eHVV(T2EK7b;bfk|)*FHCo>jO(z&4`7n%|a5mnvl1}r$ zC#$=oL8s|z_Ym~*Zbf9!QrH-OZfHC4l?{cKw3xj9^|R?DWY7L#*h#kNVxwCxf^ry> z75`uwfxOuU%Lh8U=X~fWht05Y3epS$&SIt-U07Dk3p2GQX$ISp;PFp2uuKNRWK@LE zEfv(Nb>%UVpBoiWjeK)C&1#}n<1@s8&!|rJS$iz-b&9O%U^cC5`Qr@{c5 zAu&wfG%ixJzgIk)Q#65X2h#pHG*7XUB`zqzT`y=mn2q`*?`~Y~5usAdFK6wvAg1BE z*6-{?%unLicYD{(1j|?`kwG_HWB45dzM_g#x{6#BHk&^p6i-&|fE|1rJF?F`6-zn& zVpN;PEXL`4@^ZK)J~Ppaop#KDBz9H|sb;bU)J?4e85qNQsqH{7)}%eF{y4C_Y)FRM z7{yoB;pL;U!P|BrU znaCZoOmRg zDOZ#2F)@0z?QK-!&lU%AQl8lE+?#3(BnCt?P3TTUai17EtJpsfwUI#Gs0QOWE-h;v z$|>y%jIy*tXZMnY--aT~KKPQk$etUVrCebJk;E{x=NVuKTOx=&HmUjZw2aa1R=Ld- zToD+IfOn7+Ud%eREv=S-*^@bZP5UwwOsyd8lr5exVs930D<(v;WIW-y$mfG~&_F%? zMLGWXsv^iGoumgnV7Ug?CwQtLjEN@Q#OhvBtj3*%s8lktrm+i$`Li59g-bT^RUY_QJ3s3{$!zQlBM|wj9(*`0XG#fj5mmc4%`!77VMRHwf(=OuP=lR>t zIQ#7QN^I+LSer2ZiDJ3p6qD`x@d#*P(`hiiLlXO=j4na>ZCVIhyR(C>PMxacAzYK% zH$a|<_j#VAQbY6efJ_lS5r#z**}A;km@SuAf+ItBI*;vr1|0nX`!v)Y?xu%eg6o;) z6%Sm>4^M~R@BJ_Q*LCC3*_RqF=?E98OMNObQfHb9^2;OdqfUYRC0A5~-1Mfig1?q} z+iu;R`VlbCK-+ijMd6ZbyM!ILtZml>GKmd4Ce2m#V_JIFo@Z+fJjyqj9*F>bf3p4z zXsEXm?P1!uyz0h=MBW3Yjzfkx7>Yimj%tZ@G&B=dOt$)KY1?sUc<;)%X3od~53Kn+ zGC?WeC?Vp>0;w2WP;wib_Ohc85I7+I=HMIBLWO^+a}69|Yg>x43-2gO2Qa5>P-E6< zM>r|c#tF&cnPGfa(d3BM#{$4F7W;_1_li~QqGW|mwQ~&kp>j@2;FIC9ZiCqgPFC9jO})L zCe;BbRar;fCGMxek_z>q>EepT#Ly8IVHhb!7G$%8l11WOrKcA|tZ*brcFhU5CO`YvndfWKX zHt#zp`BSA76OK2jYT7W^-2yEWLvD>vHJ{rTpP*4Y* zX1UKT_040jC#(+0hFm;M>6%wWBnF^mi;^uzSzcRP11V%m^QjVIs7czf-D`T)6&q~g zg?Z+HX}j*-UB!pGD;ocv(WEdE(|X|_bg*de{pLUVS)UI#eBYW2f<%YoE{vsDpUdGn zdT0C5ZaI0J$LR-4j{Q`{(_l(7n23*SANZB6WF$*j*(*tn9kbwkq3~L-Zw!Vh6=JcG zwTVM6?u5&MTX$j|J$+Yun?=1acw->Fs)Yw3x|SxLP)Ra6Zctd|uxh!qGm%qzNb-c6 z0OnPrf-I4=Fc06Z+UgT9Gfdk+gRWPMR24@wC(YwIN$aZHYAZg<@K#8Y*O zjNwvWDKRBPI>Fx0f$nH(HuX5ZRQ}W^CJ>Iu8U3_SdOV4QIRXnQ0TuX(aG)YL{~vE} z8I;$SZVLws5Zv9}A-KD{TX1)G3+}GL-QAtw?(XjH4wv5D=XSb#@9KQ#R(*f?0kvw) zmns-C$1@(X?7k@g^<9GDg1e#~HdSq8h*w-G&`EbDh_0kzXXFRf+F{ZhLBwklq)r!$ z_=r3LdB!WDkd?y~J6*7bx~;_26N44aF~cqrqG>mi7IlMQW3Q%940ow;6Orx1P64|T4sP>&d=w{h0tCcox=+awixNji$MHNQp`_MzL1EtGY@@Gk^@AZ!rYf~F zH8W1qtGow(p&mhUvKxZ}7T2WZG}`P5W_t&Rx0iE`$*5EY*3rWAE6P6(h8Mo)(ibD))Y6~z$0{{SG(hLItrN7yeKk? zysmnvS?Xk1o-r|7iXb_BpO>}-XZj?Y&D)s^A)gN_6f&CRodyHss_M%Y#KKzR`<4vkHD4-yTB_dXje?Y-6ORgK zRNipc1$?jueVrp1U$_mgg(qzsr;)j@3eN=n5bmA}SH5%7+zD1kUjQyQ0&}kC@6OL# zs&SA#XT8}H0u#q%h=bP7Ia}NkBGk!11X07cWRLro7PmG6r3yF@7Tj0%vuaB9DzfIa z)P0g86m#)XY3xr2Ij~wG%BKM05rI3jcR+F$DVZn^;#ZarR{#UP01JdoCIK6I?3K72 zXM#zn-u=vJmHJZniJe2)74ut54qe6S{=jFM{H3gYfk~Y_NJseh+sRwuPKOfHIS1ic zLMIAF8M$&Zsm;e7y?#D&mC#k_w}m%9cCO93P{) zpW{e+R?I81kBoQqO6*Fn@C|?nS+P!x^2>k|dfZw%x0F{RbCy(i0qbY3RMIfpPCK~0 zuE)+aZ^p+?nfK41jA-1frUzc6T^D(->D`wk9*%r1fI6Q;Ei0TzdIj%mpR4C3O~_p# z^pFWbrovhd@<|)QsGJfP!mZ9v+=Mq+>|X}#bV0lL86P1u*Oi0IhfV8JYtlh-I=|hm zwsl=9nGi{UK~F3)Y_XAhf0bOd9S3*Wc{^o@MuDGRWuGgBR*l4>DNaYT*H@D?`0R_{ zRnHk-U?A;1%qRlT zJ%IHbF)uP|J}Ye9lfwdu9N&EloGcR=IO_-MspUF>GDF${LIxy1Jwp8)uRZOZq3CD9 zV$(KBP^&gKSFhI5_QkT@CC7mg%u?i)B}Z+5;YQ6v2|g32*1jPbY$C^b3g&U2)x7e_ zu=}&F(&I&`&NoKv{m4zTJ%w2OP-AuIMZcD9(G^TXnFm!Nmyv^d?Rw8t9ZNF9aBL$~ z>3%erFG{ifXnoT*Leu?d>#|t}jPk~>FR1==xt)BWvoy7D%AiZ@TtE{A*C(J{0#x?7HF?V`cv^On3T2PQ2x%N3p{fJt# z4D4myv)HAlV&w#+l4XE%b*B!y_5g}=MM1HrRu_3)dfGV;tiFhRLHa1>%gKej$Mr3; z6L!D%J4?7FKKhb|+WRHKTvUFs136Z47dFvN(Ui-ISiu$h>8_Su`>UHi7M*;_jZjPL zo+ryFgTSrZyQS-O$r&Qt#bA#vuq-gy_bJEwz8_;8k8{s9q-(A)FG-;p{UJZ*y`8Bv z@)oi!#BAq4hF>9qQR{>Mj5Gauf%6xf=^rl8ubk;0cS!$bYwcH-zn4V(GNZx#s}c1F zXZqU#euFc8v=aUE2Io&6{FptU{ut!=kBJH9UlSI8VJQ7epyRKJ*Dn(jzjy1z@@MYS zSC-#*m%dq8ZLz?IwM5|N>+-wm$?T84+*ZWtFBsjm~}o| z^6Ys~2ZL4=vDHmLtbePwfOdO}YlFaz`4V5Jam>?FHP$X80qw=mp>Q-hRPn{%1}yu> zHw*}TnF6iHH(y+sr4C#lDx%4An+mRKEb#G9jO6bM0|LS!Qyqn&)iCo$k-2Q}>@$2m zwvZv{5xicvsbD^s%UxkZ!9fKfoF&CwepABTxuf-!mGHL2EK>)D zMLUQ3uo9?+Am?J0qtnz7RPzWjSQw(8kgz|I@4_SCMd3mdry32kV+d`^2oJuZmIeZ# zN)s(!j8|0y?5SygUn-))5#2{dChxVNblkYRT{jE$!@)jKuPlDh-fVb(Z-=0PKqxEy z!FImiLuDF)!tp&Tt;nWfnl^(^Q#2lRO(1U=u)O1R*3}94XuD0f{O*WhVGEFVf#z z5DxF%WIK1qNW1ES!sb9*r@(rgDi(lL=Y(0U&V9G+O%0jw3HWDGS*RjC`eCa!T?i`` z1SRx}sUlo&3>s_6tC)T?|gl+P*LLJYvdj z26o0&D8XISz3}z`b!x~@J6GtDfJHwVZ3vZt|sp(otfmWiaZQIg%JQmm7$`<$8HR6&-r2-GUizym7 zT3z=$i9m}RqV-w5!^IXRY;H~h42KYK7d=xQ)rBuzjC9(Vb2odRyckBRG zk9SJr2KH6BS4HSDxkIXG_^4~&lE@0FD1FDa6YE{8NWYEda`af^OdjHN6)KSZ@ajTB z!|B@Hm?O+q@)K_GnHER64Lt;P4y|4@JC$4#uerJUT*PySB%)!^Ewl6pxxx<}t87~S zWa}Bf9Kp_`M&CKf1vDh1M;D(}?#4de5DP~b!~4pqGhVU{P@NELiOFuJQ0x)WW>!&V zl0&OwLJjol#TvmXPlXrLdB37{=hs_|grarYTa3M(u^FpYiPyflan{_AAGjKt{CI+j zrDdkn{#u#uxg9=h#o|EE3x|#EpH`=779s#4I(f3a=OxG8Gf>|G{dj1Io ze~wvy{OA4G%M6y^)cOC3SuFpq^Zz)&?_k!i8|nTEd;XvDgCE0%|NK?_kF=-%IPmXE z`wxUUVnX~tn4mKfa;WXZo~pbSQG>j;^V9F5vBeZ|@QH>{;6zysBF~rXQ4`2R&0Dz^ zjdkRV+9Oq$b|=>ltO-?&wUrJEX1AuJ{C!lxgas={Y3d_Ya5j0nOMr_ps+{X=Wf>zv zRbKVNHXg|*jD-|OpqJWgas@eT@wtpWyCU|nwOZW*Shny1A=nRMoG!+F~C zLe!3BorR81Sn6DHUe&a^aw^=&bwUZFARPQ9>d!d=*Aeh$Z_H?Fi=ktaoF(6IrIL2x zLBYFl>Q4B!%k9iOdINAL*uUKF>JeA=S_F{7H3bJ^xz(1y>+qd1($myy1msd!LP^It zv`=2yel!yyHiL8^5iI{uR;4)H8L(Z3|4zyANwtf`7E`AwiQsGka`Aq&QxNv4gQ{|= zk4wQEHY}IGjvs=3Ifb>%tQHEYW#YmV)D!qkCeN&|kp4XZ>YZgctSs(()m|3WSvb7* z_aA;%G-1$uG@_oXOT_NitFo?(SfH|I$@w-nQr!Z+df#B&+vYqRupkxAi9H%_56WA@ z^@CdOYy}u5Ol6KfNtr`cToPiJh_X?HBy~qo^j3RCGt0U1e}0SAydgO?w2glpod-M8hYeP`*2UtQmaQ$o=bCuc5oj!BKDVsF$ zGC6lzR>hJuvcU|-lo+x>q29ZhD{E|Vep{a=Ogjhr(h^1})Bbuwj26e@CKGn8?84eP zJkH3AbYXYCBng*b4>fJrrww6kQ*{GvWsN4#jiSHZdNjN^x)Ay@uQmqVMmq_^ zi3$FgpVYN*?P0w>pY5QK;cfIhWt&-zg_=6Vk3`b>4Ul~7aBuiHw#s&QwYmZ$_Z;sH zGq(5#O_v%n^C8BPn55n`pa#c+2!gq$zMQc!8254NhJj?TL)XpJ7Ewj3<0Bpdwff~~ zs97S4QE2}77KWVjXIXQClq$X>BHvfGEGyA3%NiC2BoC)0#uQF*heoi<2kP+3d{)TP z)1EP7Vo4jo@&XxL-RDh`R>6A54;7v$6KmWP>!fA+!e5HXFd@ZtucF^krnSgWT(Y`s zD5%B)z)6Bc3q&Zji0LKOhI8vA)JpUlkzLA)$IF7z3pdn=Jhal>rYrpfxc$@V+G{GQ zoJ7pffcbw&ve_o0UH|w}7c9kgnN4^j2jf$z`Ai=l$K&MesbV9Z%_TvDVKY~%sG6uNA z0{J;{XkIgzrgZ>jR-odNJSJ(~6eD zSz`y>MKSq?hNN$8tFMgXrLT-o$1?Bh7^dIXne_uFp$__|Rr*6G>82^OT{U{pMsPU3 z?Yqjr#3We(Z00J@z{N6zo$>hPIZO=Mx1HfR?6uFJ#O4QZgH{j(LHIlYQ?Ac_7~$P7 z>KH?tP>QwNi^i2VDcN5RhnmAb$p8|6O?f@z4F=K7Ie;ybj=-ih7M}G?>#8_ z;b%O}>6?Pgd|82Qiq?~aKhAmeY#WIU#p`ucgcfE1JLSG^RJ)S+N_KTpl%IATR}*s# z>T_{1y)(KotAAm@^Btx>sLw(6I}n8?G?!Rd=X z5mF`a17FSoVA8!w8hq1Scp+boDo=lq#b4S8b7` z2T}tR4v!hVqk;Z~1d!pOI8n#wyPb|bgT&|4p)=E^`|zCEA?LNO<0B{z9eQhGlpMJ| z3eGp{_Hy3~|iN9>Qmb@AZF#xVa0UsQ32c9PW%DgvCYrj9%Xe9wxwlYCuExaN_j~Jl$>*N z4qt*I8Wd7PoI7LJf}O{z33mm#_gwBC#ff$xet5hEUF86RT{N-BCQ}6B8)V2iB`NeeZyF9G@k?w#kEh>lMDV$6v+58$ z7yOT%-nib@aJNKxyAp>DUJd@P%5iXy3i(Xhfl<^|Dc+n&AsRn&D48I!q(g+VWa>-z zWeq&wxNX^KO&k7@Zx`!o%D}P$%ck5(PzoB@3L3E;_RqVeGONj$aT!F(S4R};<#KCP zXBwOAQ1}CrGrlBL@9M-~M|au`*(nyPVPEu@_QmP)<8q7;|y2;S`tA*M%Ka1o|k z09SO7_E!5$duSdAvl>-%UKhi{BbOB@=Pj{}i1+=j4fh=0qRXo^Q!=3Jy^4L1khg(5_l)IG(ZoKt>-;?f6Y zTwZ|=nIYVJ$N$+~@ID)JL1#6MqaRFGr7p-aNs z?zvV>-Som~cEg*|nJoOZGL3fdMq@-#Z1R4X17QPll+@rSJek5mI~%k(AR_Op*0pn@ z_*)A0oUH^p9tv~ay1+B!+T>@BlhX1{jQwCVS0Xuj>hW6NPZlL%$>kMA1H}~%aVs%T z5_7hEas^>}PbmQYmkor{pe0qEbf=?KDXV9DpC9hd_B4@8OK@RIV7v;bKMLtB3u@%e zc@i9WqVj`Z9};a8k+&hD!(AL%OJRyi7<-%?o#Ez+WHUHiY#9P2hGFovm+g=S`wNRZuq2pVdq29UY*t?CMltV>>`3jR{Jf|~6cQe_Rza|rG}h|wTp z;L38|#HV@VOgm2kLIG%J=bAdQh&@avHyL}mV`E>Y>`I&13jiZ;dPT{?l==9FEW1v+ zH)hqD{#pcA9LSRXh-cYD^&* zj#2=yyZe}~`xn1ppXxMA3SrsGDwT|;THR!aa4<(X1pyO?v|uds?0GG8Ut}-@=3y~W z$({`i3t@594~T(-3igT&w&~0nnf)}B2E(>BcsM(CvzxC)@U(=2p&ZEM3dZQZ5q+5# z+;u7f*F=21-H;Jz=rF{Jxfylk#_9DGpffj!uw$byJ#v~XhL3M;+yT+uWeYu@M8@+s z-?NOns^5FfGW1YlKWOdz`iwa-Q(HuD@olGnMy@mxiJ;NL-0(pFC~W zJAS{|n|)*VL5w~q?DIM{5E>Vp>9}qQn{PKd^bzQ>Cn_pQ?rGm%q}eymOG&*giK|qV zbsbet@(K<0=_K_zbtoBLhqjy8dzWkz75Ebd!TM{)?$2fLAISQz41)DHxA^|23}*dR zcK^+R{o???A%j_ewL$;nK}OoI)PGiX^KnD{PjUMv&oMC5Q8TmtNdw>?pYgxkuYU|6 ze5L&(4S@S^MSj27y#G>+^Dh;Dzh?k{9PXc=;D4A6n-()tsYX5h6%M>>*o*nsxgZF2|IX;@IUiSE}dK5&d%^8OUoEa z+frT_Qd-;T%t!gt%a)hSi_j8+gSJf~4)LeyYZv)iQaqi5VtQYjA_@c@J&V}SZuWa< z@R9c!U}7Hl?pCX#Cc_3{fH$wDYwlx@7kAFVy$36W7=%Ha{?V3mhA@Xb@vhlDaPjT5 z#F>0bV%h&*=9%SD&nG@xVEg@0EH-@EiLvOPZ8>c*SV=2Y|M?inp-DxlB;!OjtlJ5$fPlA9Xo#-_U^wu;#u~j%b;`iInUsxy&&!pm3O_ ztkkT06#FgT<;rVmM%>-YH9n!2Q^pbU|oK zkxm}~82mgl96h6&^)Zgkbx|)=iG-$smgPIKr1jKMIhTcc&!24If#(_DGpwzc+oe0d?p_aQ5L$$ z+K8Bmtp&!h&KZa(ur`xL*0(4$%4;xA%|H`;h6i|CsPm(yh91PnRPNFSJO~!5quq6} z7g$pu76xZtF-1cf3(KG5Gu0NSuS)A%LV*I)y8j?2l)-a;kcZ{@2^muQr4pw)z0|OC zY<_WPeS%7jbvNSAgm|K!es@W`MK!|9AEs+HwBCHUOWs|D@Uut{(!)Xg+XkHp7Qr08 zys5sh(xRpJD`&YBNL1wNd7?4nb_u&!i=Z$=JY_zzdFhcnynG-)bXDd=SDboBCE8@` z9ranU$Tpa9pEAFYxuX>f$&w9++FOCpV(P2Mi+UTHPpf$q%jw4y&VUVVA|6>NBc9x* zqd#W%^O(G1Z)-wIy&@yBF0^pG&cGDX@Fge4-yCsg6n&1aEUUW{NP`f$N^P&DXnG%c zasM`^m|Z2=6agKcKt-hHXMjsVnT%$~KV9AGSlM78v-i>7;_W$Pymq!jLMiyM{Sai- z>yB#!5}2Gs%>VN&}(a^&I2yD2lY@kKWK&1byUT$3$ypT z@&L8Mq8jL1bDm(4O|7V^(j%R&Yz+AIv=OZH0N)dhFoI z0|V@&abK2!{cCD2I|kn4~-yReE|qaE;o`c{EB>RlMOEC3_2g zvNQQjb#&_3YzgMlx_7?=$^xla-8$@4PS5YPA~{dhC8HvoYVmA}ORo3;Q((Fx(9cph z=23Dst8;Gsa~D?J=J+s=(4@>Dmp%%E`MYfzpk&R@RN6W)PV z8sW{e)3HYBKLXEan=|2-K6#s^IDB0bUhs&uHKcs)swZh>eRizwj@d3zY=b3hsL)~L zrwBTVGw_^Hg)ETu#rv8Ym!MNuvp9sDvmlcEe3m5PGDjj$?ZcHbwnY3mV*v5~W3h`n zi)wCs1o`;Jz8)<72bB+;#bvI`PQ{7Ned578UHA*p8(%jM(q#a4&KXs$_%Khz{Mw`c z%`nUDos&((L-cSJeI|%*LWyR=!uJz z(>y&6ZYyZZZO!=v)mj42duskdw`+}hMn6OvVA^#X+(2Okk}}~YiI~8r;8fJ-b&f@M zr2}6A)+L8%fNg_p_J-ZcV?f-EezuEd94U1#Xg7I%dIp+A{xgvO?>507AoFh^|G%~g zSpVH7VEs*-fc1B5g5PPT`z>Upr~Na}fa#+i?>CY4RPEGii3Rg*ObgB;dFd#m>N;KY z-e7gj4~%g9{FE>gML{^p1$W#ncJJ0$u@{ z(0VR#a4C^X003tjZs%ne`h%BMUUSUCEWmkSX#3jB*6T-XQ!X>F5?*cR^7@gCWV8I! zYO}&shqnVBJc6kQD~{Qals8H6Sx4`1$WdNo>u8P8lgdskvvAE$Yq(e`qj5Kfe{B0j zf?f8R4LJe`k}*MDGiUpJf$0Q=iC|HUpo$IzIPe58t^c01bpn@{N0Vxrl02L`L_Jaz zvnn6B!~L~MdQy&@0a=48>FXBhxw9?DMW^~M?MOW8zl2^3s`pB&SFLu1@Y z*aJgI_Tg}c;=k>7DXJw|LmtczC6(d@YO9E3x~mHcc9ib|^o%Ub!d)bx*|~UpErRTk zv4_^SBbDArP=8YYtZkh@eTzff$pK-5-dp^#0vRs2{}f|g4FuGNh}%rmvH+MnC3j#I zx8tXV!n>iWiFdfTxF|RuaPdOjYm#K!$NMuDvt>y(Z9}uxH9LPtoCrorsgOKMX-K`{upLjQp_@Zrx9W{iI-{)dF zue;XOxfoI5c#Js-GO#wLzBQn<4ACk#&Ju>117i-u>TI0#evOb*nq$bs4BWAiKsK=h zm?DY<^%B`?G~m+G5zD#Jz}B>4SsF&p2N_V<(@G_L9yicf22OC$%||r43Ct47fZu}f zK}1rfZtF@~y2#ZVfz-nc@EQXqA{SIab8;@`drJ>GrlzzA%$1!vdQnWRG&C7~nXMTLJ?5d#7Az_(+W z58jWK76Qm`OL~w%#-436;CVIvabtY3;Q4^y+DNrb^OC8(_jDn59%LYrXV8r+V0d$# zT1Xavt@ji_K=Rr0f;XML%+zIG2N<(y8Og)yt{_Pt;W-aCUb6I#s!Nfm&_iMmPEpTg zRR_-~#`r7TtDJ!;-b`YodAmtTAAUqWUAl4sBUd1)uY6wX@$pbD#UqUJjZ>k|nTv2L_vrj+a;s`I5&>D1#@AZ+wvsCx@&xh8| za${TnVY8bch-eLS8CmZfQm@?c`8fVVHL7`Rc#}?}VCB4{yi@1zI|m z&o=j@Ch-7+Aylt>&z8Cz?D_~f!c#Vp`xqB)eD}8z0i`FPKeJNjd2*YtU9 z?CN}}UJ2bNI0125VCC(GCp#9D0mC%~!ls`Qk9?@3P7x?+gdGm9#g}n&j&^V)7d>JTjK5 zn7}NMZ*aUXaq>Ko}FK$Ji~}DL_c~Z zE4Uy(Z*3jOt7Bw6+GLZ%k)Tq7lwvUQQbpyKN!LpJw)lT#r*Uo zoC|S{`(JNCM55rx1mi`-qA8Z>^J|G6QQX|WeTM+v`{X_Ei?ZE09c>AK(wt!EeF=Gx z4^VXqxNM!dd8B>fJC1^b)3uQC&GZ0Yk~%Q?^jm94fr$wInGL#d$6l>8A+9Fh6%A_k zFwM4;Z^`AxIRJ7O?9ZQbz*;~{1D~g@FCHNP+cP_Wz>dm+&T3ltv{fP+KX15R^nW4~ zq>Jh>hrWWz(4?`c!!*{xT3GOdu4l5X_qSfAY*Kb+Q86wEeqNQNgsp_cGF_0RR6<%V zEQWyV6W1kNtaLb7k{V2cqg5Y9qjDRy{!Y+ph&E-WGJ3M>Ss3GaXL8Q~mSiV4G^MDP2ZmYr6SHcZ!F|e{+zJw6 z=jNeE&-#75*l4BES7L2%OlylfBYDnYntQ^ICmZ`Qq`}Y`672nXRsxt1Tk+Tz`P3^1 zvKrZ2SARREle7KOXeOlTT?97_S*f<~Z~P(Wp$dz70-_rvry!>mOLdCol9mB|X}B*U zwlT7Gul%-9YE*)r>WcSZFx%_g*oasYFxcdLPu**I4HbR~*DW>s2+~uc0uQ5UD7mWw z7mP*>$?u1BXap3pg*Py*;NWa<_nNk@97vOOD<`mbgSYNy&tZh3iAYnLp`jY9_2^c1 zLN$TJq38GMwg-WN`cVOs(gTsREeK#*ag zRa;y)bLk;)j0|5Z?ihl^_Vfy6-ED;ncC;Bo+_o5pN=8;@{f`)-rhjhd(kMcQ7<&{= zC6c#fZfnvHyM*O^ITMeMC09IB1cPdGVHWJ}Ury?`B5KjN-#28ym4uu>i1u33kD8%H zzVowVGo!Hw@;iSuSSWwf>}?P0*7H~=#8PdwT-v6{KC3R?sRgByK48tc9sdE;vG+b` zwnYj>;&=Oe2dakPH84`9IWcx+)-HACbPf}0{2J4!1%D10@p|?eZJ^Xa$n|pO5xZ9) z#to-9-b$*3#ZDRV2t@);GvsfiQ44Mopq<932G^(SxGhf;v@h2aYqN-3r+xWNTj8S_ z3L$S&z(Tc#LGDy3ZrxK^DV&HhSCns?^l>-%ODmoDpp*LPSMRJWqd?V&s{5g$8_hN; zlQ-UaZUo1XG9@au5iUf_bXQ*5%X}?_-7V2c;{@U!<=pDa2tQ$q@OL4i=$1aYvk+~D zDs{yP5{Fd2WK1hjsdC*GiO1ThYvRQacEpR-zI*0JA5vA{!m{Q0xOI5VcDp6LO}Z-| zwUlaCY7X^)@o>i1y|u~fYrFV>Fb>K(7i0jH&nAXrC!v_t9za{=j%xCsEgNhH9n7kC zF7s2@qNyDjoTR`|`1yCrzN{`m8@;+`gH*{1J;tayB@~;<)U5g-fuq}Z&C^f#M5x=E z?|@_wS0~(ih2R7%RA*XX)J4oBS=a{g(K8;lN|>I&W2hMph6+Iu*TPe}4pv<2()!}i zGB_BwNX;4}u`_Ta!wS>0NvqzmU7glKEp5bT;kHZqK6kq^QnF zD)H+5AYCP6$h2tD%@l$ae0> zC05bA6_^doQZuyZTIw`;0dSwTZ~Ymf{^}S1sUc2J`wwCK&nz?j-%a5Ey4r@G_U|$1 ze`cBKX@Aw`AO18w?cWaYJBa$LA^sP+uz!sq|Alb=Jw&DZm1+DBqO#EcwhMi#{%)1R zg80tq1=3(*T5R?$<@}^Jwwdvm$>BI*&z|ixKj?dGCH%lo%HzYg2YPKeTn2~$!c~(p zg)lR2?vDGH7p`&CFY*9iP}26h#}36sks!4Tv&kVze2Bj!mjW$Dee`L%pR{+RJ>Na3 z_^pz1oCPPZao(31M{w%G_uorRH3K+Sp>5rO0DQF2KIBj1IJVovVu5}k&7%N;LIs7u827@)=EWr1IA>m(3+c+Sr=#YsoIuQkEpKF<0 zI@!r+AlSykFC51nUC+!E{oRLLoJW9-plWPEND1l_+z=Fk@^CURq@)%cbR}(3ZYnqs zpvW_TYQEP&k4dcD=yx*3c#t&mc&Iy7V9><*{@s8sOIucjxdBz9gvQUXEwNwF56B4c$yHI} z;mBqPU#9l4I%E#;z##oaHx3RC8VmRqu*OnpsSL(RdmPp9J)a=0gTPCYH)}6u!9_lD z#>cCzvG+-?qV4Nx_M#Raf{po2d7{xKUZPviic3)p}}57)^o+{fYTE*@|F2a+O$A)lQ2~=cx~JA-@F< zR9Q}Kb!pvX3#z3*@T!UEe~aqo3~k9RG;fu-WhG+#1|n}eJAc z=vPY%)I2z^k8W$i@k7;Y&G^u{zJsIa3JPI9HJ~oPmR>NmgR7;r88z*`BG9*_L&&Qg zyB)oa8{=jj>Ue3egI)jpboOy^ckr$}m(a?#5bSS^52 zcubJW6dcbZS_v`=_!dNG`Gu^HMvTY2ZbTujD`w~WHu3)EJC!GGI0Zv4>3)zVk0T+| zx;l1KFgDrUXwa%>zS%%Z)~bL#*?CnatA0eV4vExsK>d*m9S}NmK=JaYf?8-Kbz#r3 zki7%8WVXF`FtNHV5lztIpW)c92N*>SN!5K!2}lABli1*ZYpB8Vupk(nuw-S$3`VpK zm!Y^RmQSQbh07)3Oz;^i_tfzNaRNtt%|MiON39cFMHvpAr*B5ZuiY6bz3+_4UtW#K zL{P)YwsR`-F*b$VPVMcuW*WeVbtnc4Tz$%ez94@XHa@pMf%;v-?e3}Xiru}6PcYY) zDN>gihYWBAvfF zRt;n*JchBCybRcPgzGryEEaOn@$~RQlub4R@e~7u)m;~Jo{>l;=vJup*BO$nv5R|R z&0PRyXPZMttAWo$<0>8M1jkb#D0qt<5&Jkxe^Lugyy{PL6D4T7GdA8^P{b=XSq6aa z)>0d!?cKXkpC@J!Tu{Z)gxUK^WLmr_m65RWDFDAa@O^_V$a?n0 z8ap5EVXqHflL2QtQ-jhblRv`Q8C&pej9{>S3ZOSv)WW7La42?4bXMs6#CpH*S|?+> zE>s3^Iz`E&7XU$PD4SK&;$02N)NuVQGyZE~hpe|{++F*4*>|1&PCuo&70-pif@$j$ z=Yp}GtG3|oI~fVX3ln)n1-74Vy7PPGV;faq`U`+7@Qh1*>rlwG7<#~m`3l<_59D6?02W@BVw!{8$8KN#`9cd+W%N&wNT7Y5=`!0MT?MR2d8 zRaMZVej|9WUVkBRSYD|mUtyBh2glXeZ=9*~Y>)sprVqZFt)87(tg!}{iuNwF^Z+ft z@=TXt<Vu#%$MaEk0jY z$nXwi1%U$lzd7(9-}*1JRe!=q=zjIY|HeoDIKc1lkzY;! zzu+T(eP90nS>eHqV2gseyW?DWCZla`Rwua?`>>wgUA)a+@Q>b|Y4?+4 zKVTBVcVYgct}_`)^yV)Z&7%{zJX`Yh;~(>m=fl77W1 zeW-`Y1cK&(%U@;%i}Mu|;JO1ih00Ike9&a~%3>f43Pt>%qjY}aI9n%8p*AHX)Is(F z40nO5C}F4%FkpeyMpCYhQVlP980PccEXHptoLBLrLagh@j`u3`3g`)=nULE`lIaJ3 z6rwa?>g)6DWI(D}0B4dh6NoDYcFZFu_-6PhqU%a6qRc9AqL2FaV%sw7L+|s7;J4!A zN)1nxfb!vF@4-`s125?Mr;TtCn(_nyeaLqp*)=r^=trb8D`cxfgAV4{d?-h` z;74s#I50_cb0lJ!Wkcl*DH5oZb*wzNCXyVThyUE^NW)ghRC8QXkBjf*#!7&?L<>;i zLKsRS-kd%rH)awC7D^(+C~{x8b{K6LfRGSF9OJ8tSY5L;;!Y?rP!ASwqcNJ%vPm-) zcU>dAu5OFrOeoElI;0=B>&$u}AG4zjw<}ov1^!JuaaOZd^`)Vl*lOmBkn>P>n}?0r zRC|{s%+Xddbm1qK5K@A2VvRl$$w*lTyr1yd-^d!+Y*&xkT)pi@yPS{wz3;;xsMM64 z?oW}O5)#uw=s6e9d6}m5U6fkF;|=13gOu(VP##t zG>#w48X%O>tQQC;8=NlT1}>IG>!N3NJGDUI+7V>M&g-9R zpsN$j@C&M(JeBT3re?z`oBiwk? zblj88$OOp?jlvzsGrCkwb)cEvIdPc=ixh%m8IL^(i6#tKWjPciDA2f9c9HL;^x^I) z`4Q=4U>L&(h6T>z4e$Ls+@bL^ z%446P#f?dS>Riy6u!zl8G;b6I+_;3HX(}>0wr|esD&UV=&*==M@vts5T)$=3PXwJ$ zPt4u)hYZEmR=g2zQf+FtYTotsY6>y1+HNr?ur@MXMfozm(!uqgvI@kNSud#5WLgNb z8~KdhxE61Rh@+P|r4fF8Z9Qp6BAeK0evz3Q zQ8SSsIIr5NUk})K;iyq}+Z+5E72N)CL(Zt9;kYkW+|El7@~rJfjnsEgJO>(>nmQ46 z1M)~uh9-u&rrhH8v2B9ExE5&H@Y3PaCLu|bI{Y9wUfyL5(_>b}jvKx#j4;F3p~bGu zbc{n6Fgt6BG2@4AmUZzrev#-;D-tpBu)Z$_Hkx|Vq7Z=4Iy0#Rnr87_n4jSe1D!3V zkEw;}&HCjf2d#nmFN9EgayFLjdr<;lK zvjM&yKV4iw^8>~hIaVaGY(cyU_+|ABfZT4jRFyYB$vBxUfsDR_(s)eh{u#&k)k^pa zj`4>p@#~H~`VTk#f6Fm`b?5)!82`x7si>;qe)QV>)jHq5zw-aTTZE4lJO7!yWBM2d z|4oi@s&;Jkaf|SN*1@OFt?=12U`8G2DJzmtWfECqTL-AROGbYQIe(sTDB}GY3nzxE z*F{CFvQ`B!Y3D~P`OuwwzP;hG`NqyAN)tP zf!=at;+$bCl@y>?-+<^tw?;qg%f_O`wB{!;gld|=X{vdF_G89Wh+-<} z>b_@TLl<-jC(KZsA6ED&56PieJC6w*^{j2h30sJ?)jU$y0F>;A8)X_&m|?f`w%+i5 zaLDwO51+z%yO0eUtko254(dpZGT$swR8nBW+?NwEf{>{K(x`v}fLTsYZ&B(Nb9R>o zZkDoDtJvB?U4odiTsiv7>_d|uaOGDw%LBwvZdq$1KxOt$e?Fm>KMEb&Db@aQ{ zcAq59WbGBcSj!QH<7khpxq2MX5ypTu2GGl+v18>y4x3q3XJMR0GTkCs3CH*sp?zDh zfuMx4qaVBV`V5Bzjb&v_mz_pGEHQGwiWReHtI~~lk!=Z%o=T?MrBGIfG2Ulx+dnw@ zo@5A8=6?&>ngWUirT%#Tt{7IoAVwuGiEYvPr+)d330#gd8Otqs1(SXnuyFJCA;&xW zQnD+#AJ3jycN!B<0*80HSI%BE&{@s}0UGqKc#*q$_KLv0cfc<10yNT4W#MC`scm#C%9S=43cM!fHb44Qm)g4$K{ErQKJ% z$%5kBR;JARq|21-GD(`L>bLOKEO+p{ohdM?@EUQ`=SdDaqTQ{rky)|{Vj@2$eZ~b` zMEMS=@>48OB&@loqQx)#`*n>4zkzvz5iY`sRwh3zoD>ve8lZE#h-90c5U%Pyw~Q)#JCNR znsr>5;}a8?q+hCH zu#U*}h8k4Izg(3n+>D3VDO8dNJ^q}DrJHnN^nR#L{s|&8W{>4xmzu1Fn-W(I705#I zmf$x^{zW;Ec0<^3p;d|(MUnCu9{hmT`9us;n-)d|*9|XIdNz(woS@Rr5P7(|5fKiO zWiO%$9_2B=ILdu2Ndk^d$>d=p7~`E2X#r>%3zv3bS%ZLiWY6@7IApe!a+e9;n4Q)f zE%}-$V(RD#S$VR-(0Afz4q6mG!VCPOVK7@q;?D|m=Ao1QRW;~kJG43itnF?#!>VpGH{W3 zn^)VBeQ=U^rr2bRyw0uoVh$4g)JnF4r8UC&orjqoFCC0IMHnM-fjy(5iSym>Ele1p z)lO6J{nEv6vH$56&G___BfPmu2Xy|!JOGQRI?p_Mv@+32B$ zQ0P<)F9%m`TtLQd+Vzt3+IU7gN9NFD_qVq5sjFosj~8i9(260aU|_0{H0dfN!lFGVz7Ey~)U=qzxtyeny+T<&Do8DsKX|cmf&VK&y8R zGQCfiS)08<@b)>&y&nGSbI)}3{*e2f75$j*4*g$Y@dEr-dbWc%S@O#|)Ipjk?SdQZoCT*?E_5Sb z+Dth%K}MD08%~2heH7h6NdTt*8R-8SEB_17|A&k4%S8v>A4$Idjj{0cS0m#O(EsBu zlq`S;cq`mg_CW&Gn%0rOVepGdUO;etRUX8o{J)oNobe@btk! zetvKeWYdOe8fj7FH5`nm+L1_UsQHw)WDo3B zxibD&x2QM0{&L1Ofn^s77^G*k6aC`D&u{Mbe$MDB-=rVANK9_cKLW<^>x|c$)%iTp z^cq_}E~v2`4(b`>@^KrFsr6ZLPpvsfsFQW*un&j@dMzHq=bSvGw6E8$Si%6~lK+Rc zuZ*j5Tlb|Tq`MpG?vn2A?v(EC?(XjH?hugf?nX*dBn0Hn<=N|Om&<*Z=lt&dzz5=C z44Cg6{}@l?@A=0@c9Mq1L|+kzxNV~E9{xdE-t3@txWZhfXIMk*=2d|X8KosoP4>P4 z{_-Sn^m)SplK-+2N}6Yq0UNH|y*bbAH7q`#21uYWi9k$rGzsL1_`}dEVK5u8iG>K- z@vFWJ%lp=94I7V>ZE_=qcY-gl1G^s#`D5Sdd{}uKF8o+81!{8fq%3NDp**FM%0Rd% zB*c0-h(v``QwO%3-wgJmRw+lQp`VO5^6_mnlLn+KS3E{iemls^kc1VXPAQT)c!8Zv z(7l2|!=XEs_Q<=qm2e|<20B|EMSY@Hz?i&)Q5N z-ui+;Ub$ts-toR{t5`VN8ePZdq@lX1=$>vcHNhpUA9o2JTexRV~8vi+}RYRaFh3$}AG za)#@h!U07s!bNuVr0g}%soNyP3Qe_u5IVa~#(30$J^fW)1EBj;8zM;(vMQ#~9 ze>xnh{32+~S_gKGz_LqB#iV-$E#bOCRxbGv*PRwP{W{j&Mu~G&=9Uld^?L4@N;F^= z@f*%J@%se0uE8*YCR5H~^p5zh^Lq9{_;6&V=Eb=r9u1OSOT@DeyF8A#Q#KL?fV_6r z%O`YF2!HAxAQsoSf_OTqwa$bqp8oT-M5dvAU>g}%=qI(#dB5|Wh4KP~sw4AY6@(Rv z(Wl%743PqGK_fAWsy>MWEPcFa17iL2H9^J$`5Y-s5ib$kGSW7Sm3&TXSHosVooTcR zHj@ZcHx5l9n{l+6&}P>K?rWE)#%IZ!msF8&$vnC2@xq-&L!}^dL)oM@+w`!;-9rYpleJV1%M()g?fo?-&0{l_X~?ihLOvD~MyiiEdVG^ohRD4^ zDG7#EwIkmTSo|P7PqlWaqIPPMX_W@#t`h_OZtZRx2FN8suIBxM9qE=P`mH52#^mPR zmu5N?1w^z3NUT0k1PtHZVfv$DtT24x6{q)-eb(rVG4wK1?vo9%-lns-c?>N2W9#$w zFTf%pr*^+Uf5v~7{NKUnuh$BU|7*$5__O5yzJcGkR`|Z;KVb1+5cfabG5jXt{!;P- z?m&K9^8Y#G2Vphjk6F7eWxaUK%upJQnklVof~pveLTds>qjN>kcc-G^g;q1wq?!`R zXbuRH#f344x43u;fvZvhtI`*T@;0tkoaykML$-}GN)E6SP2749#jLNJWS`+rg^^?? zVVCLZKl|;tKQD>PQPYpeeto z+C7Iykf!j=h6Pe;Yfj}r8+yW?+dZxzRk!ZOSCGx4lP0z=><`jP%5U)%LLr zO}!+S%NZTi`l6wW?Ac-}de~Sc_&Yj^pGKb4Ibg4w;K5iu2In~>ih|ZAgM-c6r$ohOUihQJNZ}+A({`|G z*y7iHZvbiiI6->&e0qL!?Dr_EOUD@6KBo4i8{oc5ABOS^k_ufb_jklZHk-cz*_ZVZvX(2X<(^lS(G5hXVKRG!wuMZ+3rrAA` z1>(0L`rxdu@EoIdA`_{XmVxQ(6gC+#YHu%R$+_x1^0~Z$=7tN!2k9KofR3$6E$U~G znM+=86AC1G=$N%rg*m&yc@Jqr;TKl_>E6z8TdlXa7;}2y_;hnm>5UnGcbfgaVX&Zl zB+1iop=x;oD~mX~Iy;};(-2O=ntv_I<(Bbk)Ej3;OSAiW^4ct1KqkMJ>Lub-&EWPJ zze`R^2%|w&VELSmz3hwsXXW_Kh}K@rNn<0qn&2}Jw`k6ok8!1w2Mp0-R|Fwht~4Uy zuQX)AcsC)_#}kO)4i-G@5U=_RGt2552u#u>ml2^Nz{O%^3}gz}2Wg}}DJO=5eO0n= zoe#SrA4q_V(+?M+%3B$M{XY*BA(I8G zD#;N~GFRqGs~U_ZCEzx8E1}7fY{n=#lh0XM#~^f^Nq!tPG5$*SHBxO7>9>eB>1*Ty zsb#&O#SFYviA)79?>Hz!*-1M2bae7$rAa$ZVc^MTL%E3TyZ&OD8cy9kOi_~2p*@@8 zLU+LrQF1uXQ4Oy(A$7#jXXS{2H)Eax^vfdKhvxON_rExI@-*Eb>Ku)p0J8j5yfLybP;IJW!*Q>w`FFF!+EZ1oi1O=m)RLa2E z;lW^T@v)<{+oXS&28^Wm|M5d5ZPHx zQab`!b8&`VUl629PttCtig^pcx8zlRovQL7wJTj|>v-MMvp}kyHKq9GiUY0cU0Y;9 zu4mnf8;fcVLW6<8{>{Pso$!QCLLxlYbTy|YVhBnEluV8kPM1omM7kG0w(2?eTZ>Bd9s8`D(cJ!=W0&=_g(j4`y_6t zK}_n8<7O6-4P-Ky+9Y?TOz>`>TB)`qoh^DRwnX>FTzWROoeEy!C|y|ZUhk6h@A*c1 z+_76K2KCwGetV)oxyeFtqg_gzHTn{HI_0xs;tv_kwPG?G4~w5lpv{<9#~Oe<=+?Bm zoaV!_vY@=OVluaqa_&ZENwBsxWCGNMC$KTtEU$?}g?$ddYni=gXNWrx4JD$D?K%^z zL(qOZsSY0w(XmX_3C|AvqBwn=Wr};+^uo~1qW*8`En060R0>o>B+Ms#fIdmz{#~#${;vf))6asP@vrjvKf3ham;5Kl{!uaiRZIUnP4V|2o9V}zgg-L@SOEOu zw;_AWVU-=h`>^Kn4Sa0cwnQ_7v&nVrmeobNR@em|?UFtWT5ecfsb$Fi$8YxuG?dc*4c{WZ02$j}PJGqss5RfRh=m0w zA#Xwrt{AbJPX4;Ly1_=kQTfsUX0*UuX!cZ5S9lEW(LQT+W&sPypNH~XA{fTTsY;== z5$jYcVYM6&TUsMz-SB>`3ez3DAK+*PJ#T8g0w&Q`G=7BzVjy3el%LM%OV1)TU)7|% zVu{V97hd>Y!6>#l-9!w$A-!5yB|yq0m$3p^n^h`Gvq}`t5E)3_uz&m;{eTvHK=OGy zCs35(H-8LKN0}u*vtf?VK?=9d4=)5?+1~lV=J9Mg@;o~^SY~0i(!4FQneD&i(PHd66i*x}=36nsWKXv0QQzo!Hf~m<(DW|8 zh2Kpx)|tRw&IkmyVQh-)c>tml+%UTK+K1ck<%e&@XON&FC97+H!VZt+7UFja$Gr`$ z>|yJrt;Y-KYJ<0A#P!7B{p3bYPVRfgj`HBW!05Wu8uE@G^FGpwq%T4j3{9kSrbWBO z^zK5p`3^KTP@NparkD&)2$MA@fu`OGuHJ~TUk8=rYFDxhxZ^Vhsd`U8+w6tbZYM@;Sh*XOS_orAoE zJah$>FHbW`L>_ zSw0k$CC60o80U=?kdYPGpg*L9s z)7=5pU^A2mJKrXF)wHQoW}KVYu5X~rNEi95n5DD3>=S0>^!G=V|VDnxb&jf+c3)a;=yBf{cv-g6o#)> z6NYr!8#lC!iItToa8A<3-fC7tj2S%3?=Vgq)XF|ebm^e;2jr6>I*8Z%F59Qklr7(P z<|@_LoHVsfaN=3E@A+|_vLS~|Xofi9qPEydszlMq7f}>Q7_}oxU#~cCh-SxtJ|P%0 zBG6@gN!4>upD&df(dleiZHr&a?+}+ho;V?sP_a?rm4{oa^KJ`W-p6DUq^+3TgEPEL zS_V2_T#{}dN<9d-&lN6@%Yxc_#p<3z~Bnk-KF1?61Swx&$m0FpWO#<`#L>}qJ^rl^%>DRAeZLnt!P zIH@+M9D36gFy0c-H9?5TV0L!pi&mNOZk`3@(ydP)Hn__#Kp%6+EYlfqso3@5jde64 z)b4O^J+)Uiy=?e5@n&skxzKTDWlWAUrJU<7-cG%70Twa(8pJ-l!Q53@{EAA^8>J@( zV8`$tqA(|;3RB?BqTP@M77Q?r;4D*<(ih|uy+2?RLlyrPpq+^amQY}HZv87_vf{p9x zeVbu*HLk^CV^*J!-fhk1q&i~WzE`yuTg z(5mLIruO#@{DvO>zT`iE>wm)2zYLoHO>q5@bo>df?0`17zYDH_wEqIu?`i)X$MZ@{ z?5tbIjpCX$RnDu0+G|_wF>!#&*S1q-l3O{7OmHZ;|-Q+ z?**<4LkA~wTSL9A%i4Z|2iv~dm?(MwFtMEjoWI8hbzrZo$0uly7O=)e-q!g1U$f=o zyP9H^HVS*Zj@>WafZC$PM!$VvqVQ>L*GeeQ;1dluB7jX5^HHwnhhS?|a2E~^D|Ke{ z+H#i$OLSBQW@Ky&mHwckya0lb*Q8%>vLNScoLaPvAvq^962w3dd&~x;T*T}6#-nJ_ z{zH}ozVwNb_C#iQsaLLnIQYDuSy`JYz?Y2{hSH7>ej@Q37L@wN!Y z7bZA|+l;2_+sj@eKVX~3elumzV3RpQkRsEed%PU%J|T^}V9;($tm?Zcl^pk{&58!x zH7;thPA-J3_fPzy4ys`)dEdZT*Dm0KKQa176bzSba`MSWIAg z6+2a#gSx?4EsXK9h_K=W?h|@jE2jPx5BHl)YrwFHR&5lmK0BPjyK2+Nol2U(Bd}B- zcs#2uhYW=BvvvlVc>J#gW^jz&NP&z7QnTzw5zHu{M;gbE&>eV`xa7TJ4M6!QH&jBt zGMYHDRwacYFT1RPwVuysjN`Y+!rSWv{OzgRYUD}FxVK)YOD6p;S9^5YFcjq&v9h~! z)gM=dM(5}^c{n_@hpKXU=ny3347gHviZS~XC?FiPyPor)%oyJbAAQ6zA~7u@uXugY z4Y|{|`JRBvbO+D**ep}3Q}2^>7JaI_C)5WcIN8T|f=YGoPsd~7ETeJ-$W7p7{e`-ApEw9z8NWs`4!7^M=XG)mCaN9S1=*-}fMju5{>2CT4f;oDaLieVEciY8_4sA6k8_Cc*&}hW4P* zV2KqCuU0yvsmf};_NL_hSLfQ+5BDSQ5#4BD%17=a+ulU2KxI2Da`2A!A8jc{9CMEH zpRm;%<(PurnskT1R+2>T0Bya_QZot4(RfAd#C-T=OCh{FOfe7Bec-O72lS&#!v%4F z{}YDBZ~~&HlxqRDfwu$=q^ixK;|UaXhFxNCoAyUY@a#Z0>>k2r5ADPIcIb^$opg1RVm{SDu8uV%oDqC zP0TB~z2x8;nDsOuKGmdH3{K32PxbhwWMTqoe(t;%(ybCs1xZ*zl0}Ny?%EFIAe=dN z{S-(G-aw!EfHAGb89j*D@sLQm*B^{1g8|0udTUUDL55iLQ7u$hh7&(pA2s>f($9vD zw7Sddi-jA~=jU-_y8fxR=u0t1@>?b;Zp_NH3Bt;72OEsML-5F*5GNt{6!R-kpSc>m zd<@XT8b~}p_1^=7sbrrBJdpRFpn}n67d}#asPv*`VqpVmf^~LDhc&e1dP8yC?i)*A zE|qL`Zl-cxZe9)&Yv$aF)b7TVWD>9>JWp4gTzt?&rTUHqb@=Nd+dFKVyK*IBlEaTG z^LufXr{S#J8Ec3m(<0t}DV$o#*yrEA?MNGBbO&u;a@cVA)T77g287P1zW`I4p$Pwq z!u(iC_#Y_DcLo2KEIy`x6*K-*rNA#J%#T+2ANTT1->rs!zR>@^1YDg_8uLpXcK!`rF&@K>2BR2)x}U55o#FzTha`iw^A zjAd?5UC0&cg&v9}gY%&fMk1fCE;BFI#VFndq1>3==ySSz6r>Hmk1k7p*DjQvXK27N zJZn|Sg_TY_-GAS5=+v01TRO@vNlRL89K$Q3(_E~7QtXZLZD7dSjBg|G8Xk-aeXBS} zbZKs8ix?zlzMXM5*jus;%zFS7YZUidug?md;uKzTOsij1!9$5<^Abfor`M zx_!J#iC+aXaHJQx+dkR3itV>UU zfTBoXDJE27sTbfAV7xXI-*S1+4HVy|I4$$m^Fo#BK=NG6ybv~N)%8FazLJJ5C}f@!>f?0ILS?efoS2J5CpoD zTu>zV>t7>Kr8W6jjQuXAUcX@!p{L58cpWx_e2FgXFb&3jgpgq|0liKVNArHTS1p`| zD7J#QLwW1rl-hQV+`DIGo}NUKgS45YLhr5S&}~_YhF-UhXSN#nBHyb=^|v%f9nR0O zTYjAn3mcXoTVws~_&^eLAe2|UqXW_kPbScwXMuTa=t2uX#rRJ#N5+vcCd6wI! z1ftC{XWm0Oa;JjNl&1vH9&u|bTlxfd!tbe`p+8LDh^=V2-6BJUu66cP*WB90M~#F> zl$|Dh+mv@>(0&k?*n0%@BmlR|_3EQFOwI@qb227v4HGUlC;nU`FP70HDcMFEuMLcA zkLDqTtX|35XG$7U{5Ayjp)pHrj4M#;{!aUjdd5G^Dr#f@0F@mnswdb*N6Ji%Ml?9* z^qgU}xk#Q^My1gXZ%{HR(S zFBOlI4_1T=WFYh3eb&zCbm+uzCJta1t{vtodRz1|UF2~{sWyy2y$NpO8(XE2g z<4|E9B0Y?U&=&Y5jx%|Uk$ zce93pK|Xrr+VhI>_i zPpMKB@0-P$LD#p~bWIQ`WFTEXK^i`mh@JFGoz)QR!so?~ zn})A42R<9J!vZ6wtLWE3x;}S7Pv|~)9ao>%sN`L*nFSJVhAMY_bVg|#Ym&E;4)XEP z5#LE-f3Pcvf1EMjntSj`2{2`HzGTd3iblWS46Hq06K}w5&>%FKdM*%jg2>266Pe@~ ztI9HM0M#^D!;Ox@E?I&RV5?#+St`sWf#pELge-=|#D+_YEO|IH9d$jFnkVVZX250Nsip?mq?g22Q z_J_byt{CvgQuAXw2%Kw5joue#WxM%0llesG@JD#x-OHq3ATslhnQOmBy*F|I{P*2aNws zB>$1&{5O&Vx*7eh8S(E~-9Q|I#b#Osuh z6_NlF`(vi{XTy8*Vc6Od3Ty)@|}4J>ly z2y=B;l{0dQfZ6BXs?b00y2Pv43#?5FOc->ol?JLpCD+u>V5Y|mCLU_ea?2IKJxX89 zfg^8SG)<&X*L#o{oFZIh^^G7qVt) z!s?j4Rx>F$@y^h`RLj?7V?e7+YtL}7tzXg&_6kPc+Kugu%1^s7z_5MXF~`8ds#Qz7 z#cy-Fd-5ifh#J02o2*wal*5{Zua5?nF;3x?VH{=^<m{;n~FwI zE!^RSRI5t6{*)}m%7^yyZ-yC5%X*t8LC_%J_M^w8sQBR^20PCpr05YJ2B{;I7Dv)- z!q9QS9Q!E``)OV6x;(UOzGfp^4?20$6Z3^@*Sm*P(v5|eHu*E;sf)jo0S~3w`6hi$ z_qJe+oD0@yiCtYqW03jElTKZN#tyi+Dj3+iR6~kczAs<>X?;%=r(<4|L>7oL9f&UG2rQxP+z@p<6smFOnSj1D}dA6|0(^ zO+o9_hJjtwBzo#@?tRzclRn9zy`qG8DoTiwqi0rEeiW+qLfKl?G*78WpPHvFx|2SX z`CV|l=nLNJNWtw}eE3kR&B~rSmHJcCdJCeA1S746i5bKs)Rl^}6vg;L=JiBU7UrgKI93m> zXPV75PNth;y_q1wVkJZ>Z9_WY*aIC7nsuTH7seG;@Q3+|4PtXuey@u>r;+FD*N6;X zF1aIj2OK&^c2E2$T^nqh7(d01H!$-_T6}XWX*ue1ejGgUZn4ki%C)m{=V%nLAyCbL zkU3}HFuiKMK(#pY`VcRA%W|dPy z5?ShXZ=91dk5LBbM3LY|a5b>e8tkM@4gQV_@G6Y_+xK19!L7-Y>DZid6IC(kOLzfG zX(D0=gt=*CpbN|_1wL*mIe5ur8?xZV<%>A+FZ_33-cftA>ISk0H{$D!!0FnAvN1yq-vi@f|{C&xP0?~h8ivPvL{|lo2 z9*DC1NJ{<$Q6`q(ck}^;^Z$~=(;@79Xx5VlpQ%GC-0%XuR2{CB)&7+(2MF(cWp%lQov`f%G@j@KVTn9dHBQke+0| zGVcP+V5|poUM9^vea!Q&{BvZec`ZZOZUQ@koj4 zim1s11A%wHvBNzg#vi|)nVn*^U9I;X>38xlg9>xtwj^ zmIc0m9O+}9AbwZee_Pu1lGfx^~RE^8pysdJJJ+gdFab0qJn2+RCfbkZ)_9?5ingwG#08> zDTeV0*XphMN_A_UR7!FA%~@CNZg zzQu=}VPVZvT@C4aqgUYFN2g$5q!{m~VIPC8@!!@QEH=2h>j)}P^1jbjB4j?~I%fBP z&djho7TYx479Vm#hR?hD0QXH5wEpJR?s5yvIlI1WAS`8(n6g5e$N^nBp4K|ld{0+J zC1nUYO?{hGsA@&M^$54{iUB&MBFD{Kxs=iVnE(9hU8J#q`XmIQ*r54Cg{bzK+=oZ< zUAwGS!6R8Rll0009%;Q&)H~ea{vc;PlS$zCUiwgWS|(8r6EQgzr0Kd5*X$RA6=rCA zqh4ZAIBTF77*M(hPadd%2? zc4mW4deV&*r^Cf`8w$-U%q0vQNXOU&vqgNk95+=CM>f)8@F6?_#9rqDIgz&ZK+rE6 zeNS6S;nxnwOK;&zSyR9&Cmo3J%(Swg z%};WRV%ql`F;6l{7Z@mSt~v-iToQ4eE{J6sMU?s_yM2g+!{9vLx14@5z^fzIRd~#g zm$I-}L!;ma49G!cx{j;~*4R*~06#l%lnojlRyj${(`5W;L5T-Zq4jaW+k#%7`9gqF zg5q>?2&&1-UMu8Xty5s*1kd{`4zcm{7%L zKmByJTilYK=3?=5SZ(t&Bl*z0J=VC9{3o7hR#tsjS@bTK{?wR)SK1l8BK^8Br}shw zV00Gu%8O9vx6NXor;&}(KB^#0=0s}WrZ!$!`OxWalRETZ7qfR4he`xxWH5#k* zHNU#MrAeW~aEEsB!x`n63$qKyE29d2H7h8Bv70WKTd7<_X_c#;74utr4hiCC} zu%D8y5Bn9nYaYMlo2?+`&Wgh#+B7sQFKeH1vJUW18zO(c)-i|P{erMjH6I0iGqZei z#yNf6y!pASlR{g7U4htAxh*j7mGL)?#rysi@*Gq5u?JKtm(n?bSfXl@i!s#YFsr<2 zthMePr{lI4AT@NgzFz*?$p zMLpflpZJhKUiDS3n)4Cu41AlsaH1l3xi=tN+LB%yBm`*4G4B{t z?aYbYD*VY=3diM!RviT~g5!W6>7~#phT4eP^aMWm==StxZ~NI1(47_f zEu>zMg#ZMH9wKaZ579RCgQ#!rPTRI72PH`HS-2r&Hh2z%*jlLHlL=L>3?A>ioE7@& zG7wyIZp2x^aJ1aHn&u67a0C=VGBDJ2v_648zF)DLf8TP;r_w4sA&jLjVr|D5(+=x2 z_Jh6k$XE;7Chfhbv<=e7jMOSIF!1cd!PTaeJv0%n^6tP;YPFAuu{2@5;8TX!c{5q* zxu}Gpqlm@#h&U<8*zp?!sK_(D4TFyQ{TIUm%+mdO@*l!+a2UE}Jndk|t_(h55Fe>$ z*K-+G5FAo-_1_{|QccGDGnKt9^4yT~fcvD4eJh(h!J;8Wya;VEhE zOxB(OxeLocxp~c<1vX40N`7wjb=Zz=sn|+vI^-lVmp+Sq$g93RZS!AlorR^)K;3nPF=O+uu$81NB0xa+nZSOk>OJd;~S%;*SBNz3A`cpBpLzsFcuP)6}D*SA&g~@Bo>acl+{IjINQLz`IPM8l0oKpO0+nI({(;^ zm!s}zegk|))Tldx3<5QM+QyH5mf~fN(6x=5fnKo`Y}-n>-|-k_#b419><-rL9JmyH zxyRM#{iOyy>c!#9i%ascp4+@zv+t_P_KK9X+JuQ|$H()hOnIgdbSV@Q5#~@Trl|}r z%LJabL@Q{l^Dp(x8>Qi|l`jR-ZOXG&(8V=ULJ=6KhANUPtU2+H{K-~C$m;Nxj^H+; zG)R>pCRuZ3SHNvLp=+f;4VJo$#=LA!bqxqSCnsN$oxLnO3u>jrJ|*bNJ9hIhKnQezVNx?+zf#kD})f2ax5D4gAKL{(Z@R5F!8R8t#8S(~61p zS0aS|_osC(sQxKJwhNTTsV`7M^wlzr)WeI!anS|i(1Hvo!VuRaoXl!{wgltiX@tji z!8NDRBl1Ta9wuFQ6u`8J{i8(&czYtrxuNpKm) z75c*`cMPne=~O#Qa;Gs$~Ynv=pAD2 zM_YS$dMFC0&72U!;)3m|y%9$nED0n}TVxN@Ayy(VCnrkJJ1YT%n(F`VESS&?>#xk{?I8ALDVf1 z;wDm8T)A=`$8a{vsh(&}{|egLG5$?TvY+zKR+W0h8l2q!6Y${L9^C1!RhRT1+O)p*8-!A1EO@ackX z4;gfO`LxXpv;^;w*m16q0FAFvAAnJjW;F4_Vg!69GdI@HRz9`wh1uq7bFWWR zt+Bqya@U2=d%Zf`v@Q{U3s$t}G2Zk_Sa3-rnQAJw_0oRV{185N9act5`>AoL^Q{`K zh4cGui(w-Kx(bN!#WJG;be+-o+rp!gH+g6K$mZxQ7V)i-A! zCj?&K>OA)0!0+r+l={o**Xfu+@Ebj(IU1zV53eX`<~om#)vGWvo;VRLj$n$Lqlpd- z%;`W}uGX_Qc$QbAxmuWbKVP<fEf7bO?n6FGU1Mx_0jACC@Z^qkd5$rln=gS$ zAV<}Yy0z;mdv;8Y0 zl;7Ig#?gU5lK_w+^8Ey6V)>qXL7@F(7U=iy{dwyC7d(6qd`%}{V{c?^uldJb>9y&^ z=)~y+0iQ4sFlhf_R~b42CMVJZ1{VT2JTo&REj!?7X5?U^WoBY0U}j;WWo2Rl{G6hb zfuozPF`bl|wFMnNH#glME70*9I-1#7(<#y^D~SK`L2jjQX6b0d3FzSZ&c(*wg3t7i zFVGs=SWy5Br5{pOzyAUM>&?>BvH}b-W=3XO4nXThMh?KVMnK9dGZPCf+yDEmvi>Y> zzQ5@I41)|mdw4&`0h(C+d-{XF~u=~Y= zjI12A?7#dI|KWvTWT2;|2h1${`-(qm(_gH}z)nvKXejcxIJO^8g??97=)wyJ+YAi*&B58*?RKw%9Evgi4L1~R4d@6cW(mn;{&qd&W{A!Ct&?5T zF7v0=h4e9IPj#F2u5!ofv3B?1`WEw&Yn2^nV#hC6*M|*0y4hZwhPCjp7}eOw;>NWr zIbAPe0U-Ol5Q#$SSnC>9UI=6qPv`zFrY~FtlY=4NRcBYr&S>ID(1>CpP*Eg!+f}pL z4F*J&8Wu@8aEFs34h505sr{i@j&6pNMDI$=rL{{zbm1O8-l2l#4c>K`uX$FOjFDcw zTWJ~>i+^Q-7Z`zD8P70wU~+xj&f=7vPkHtmC3Rd+$Rcoy)0@xHl<9yQuY zUv;Sn`_OcGYg!>cYqL46J-OhmB$6OHSUY-q8Vba*J?NM%NEu>xhRn%1!b?KjNx@~B z1QrK$aL7*g^4#j(-_+)CF04;@vNJfGEow1|*N6H*1Hqlw*L?Xhz7Yjdq4C!KcEr}v z+fwNffyhu?;ae0ig$%e+Us&#lA>vAQ;P5fdS0id~I`Y+A+$iQfgcI`g<&|$iWu~t` ziWlb4P@^SK8|&;e0N*<_8>tDox^o)MCKiqhl0FQ^x>1YB1Pz0R_^}uSFl9*Q<6-Tp zf%sF5FblyO(E3Bdw3p~vN4M(Xis~6KO1s1`UNw9PrvhgJZMz>WN-Y`;Dd6B4srxjs zjbq0w8Iz&iojT4=#=tj`=2B~=u!OXH+9GoB!KRvnfZfTSEe(NQ^=q3A|Ff|6`D#n* z7&_}1n7G01z~jS{lQs>9S|N!Ow!Ant`qC~#i}8Zf^9ctuIBVeB{k-)t(6zlFM#~}a5KK3n@{z%2 zJ(p>f?BdE#fBH=TuaaU$SE@8cRD1RF%|tDU#xc5qMKaD7rOW4|bSV2uo;foERo(gG zIrB0ILz1WhjS-U!Jt=I@3WV~+~hpw5seQXwK`myW@EjE zhR$uYlz(TvFJzJ9^BzLgb`%6Py>pclbsRLY-YEwbrm+xGmul{-A<0L*ZYK;Zb<62h zH%pEP^i?lUiju@~>g22q*-b}j&;hTH9@q1OANM~lfy@Tjt=>xz)f2z*1{$t>#C3a5 zdQ?z2ZhdVegSN3}WUPFG^z{p1ir4Zg!|fAJ9|k{hbiaIcr{L9}nRFG4(irU1)$P)F4-Qszgof~PeU9^HaUhZd znV&{YN38H$uSeVI9H&G}8<9665aG7L89=Zfd^du39@!Af?dP3mYiXeZBY zK6mX4=O*#gmWbyd?0Sl-)Pt!EdyhR@D@9j{vT}oOW`l>u4pJ$v>}!I~3f-<%#?f!Y zt?gRsuZ4HZS;VJJ9U7D+lShw&SjPHAFmeUXD{A!-14{Jw6;lK+$}cWqWf4P^tK?aR z?z~#&4)hOIDmJcPS2iVKplqo0IW{0@ExDz-8f!Q|V) zkp_=K4`#@l)|N|@<@&5YVT1!j`$)s~1#i7d^s!m8AcUC_E2#`&}PLOfs`?R@+jGVsGFmBMQ+~@x|!y;{c8S=)pNp4K6BcAup%y zGd!4LK|fMNE2y7VWMp8XW&0HYXa8B%{1nK*#7@fy(7k_K@%y9m=L7d2h%|uB{+llUrM2E) zSv7!f|JTC_VAVg6@82WR>_5J||4pPhetUM{g1WlRIy(}eUSPVwJ=R1lyxo~C!fDqo z_I+elQx`-m4ETw4GmQ|9ljFeE(^s1M@C_wR=S(TI2(Mjb1Ju(ev8!#)?f0hzDXOAV zvIQi=>e<62tr`&Wm8oK%36wDv-B7fu{9Sg|I;0yk#!28qtXWgc(6X7w^b1bAkH(6< zgB{S@XN61b2rzP<-M`Gu#Hfnm$AHoA`9Uf`JyIrLGpkugZ$6I#451ekTeJgpTZ=MQ zKMBTn72DTG7owS9UZqVCa^HZ35*bm4_$k@<SnsExu{at2wmA?IN(#H zH%_Oz)Ip;5H-ptjcX7ndL@tV?wtX4kYpj`_RfKgNz2;_XZECH)4Dq|Xg31VC?U{VsC6FUtSrSB51uQoYkWxPKNdap{d9}m8+oqTv}u#K_c_1 z%BeQbFrxmYYT?5P+wRomoX`VWwBbFg)0PgJv%wetd4y_F~{RUYn}9&-Sdag^1CnAg^@*PJN=^ZW|h7(8kC&Fiw) ztK+3X&adEFn-^#%{W!wRqo}x&NzH5TvK`7QP%|b9$l>S+i(q6XCr7#|Q-t9&`LT1u zX56Z9+FpNvo*UeGSjn;T@9DjLx^Yatirrx>hbZ>x_6)_LfE6sve0eKNl{dXO?hG5 z2xs$LAsTlXrzM{w1=4!-6gzy^Imj89cu^?WnPLCU0hEK31aweA{qfkXh-Vk9_F~4q zih|5>u&`;p!N!HUlckG5!ei-nr@A5Pd&NQuS8|g6)f1+T4lGArIN^ zExiWJ^6qsNrHoH`ei8w-T^tr4r4rKBmVK?pzG8)Jzi%vg`$31)alO6Nmd_i+ai5Id zMN_4*JvWVpeXtRGE4fQPQ>t&vX$>QpvFZ3Y+s+S67zjjxO^U;*p9E`Zyb69e>K$oC zs@h(BCmf_s{xIKFIcBAkUi>c7VMmotvU4%^S=v1~5a*EniY4Dh*O1F>Le?YZS)F|K zo)lm5o)l@EA4C|WhFU9|+Z7gYq#U(ESfiP|!04+$h7ikiMVch3XqOjoTDbsjT1I05 z@|1Gvm3FH!osM?lBmr&66B!jiEIE`CQN#0k%vO2*@Ow>aA|w<;yZz_=(_q1U`0?bnBRNq}@Y#Xp zu`3GtN1#EA`h;gT)>+R&db9;mlr7zWJbZU+6tBF?Qap~Xc$3dE03D#4nwT?b!_|^M zb;X479{GSN#%y(`0d4yTed=2Bokxn5^%scAv`>MfLs;OsBU}``4_uRrM1qhqA%dQg zot*J***^g{N81QN{6D;Xby(GT(>`5FcXv0OLx*&OfPf&~jesB_DM&X6NJvYkgmj3A zfFRv1B8>=02*0oR`tEXIcYXGH-k<;Mb$NE2`Nlb)d*+_G$J~2XdAk%XXJ2@g`2Grm zA-$hD)x2@#4JYEX#Eek+7VCGRcR1m>sN0OsG$@9k5MXbJB_YPp`F3n@<{+aHbVT$8 zm7s6tIw2UYSM*UR!J>*nCC=fuNMlaJi!JS?=3?Z+8IWRVqgN;5JnefoV{7Sk%k85d zdjAU)agtFTIN2xZP-|y5^sr|A&yJE|*+2->eE#f#&Vx!z_}%@hn**U0==eUGL&2@Q&s>Q`U<`z?K!6|-ZSOiIyz+JZYG!BZ#xT}=IfNkDg(DkWM zdD{0<(nfE$$fgntBR?n>AajhRdH4z!(Lv?RFOBnyJZWVRZoTPzD-&z?VUdEYDrjUr z=!T9q@21*4QQ4dG%*>Pi4_akv@u|fOUfzMeiHmG$SU5w?O>enB+32g7nz{_dppKpb zk5PJ`ro2Lgy-TPsI`36r;a0WO7gZX$<|vxg2H7vJq%yI~1aep=+D@XeIjyp>${n%y zJ{oR6=cWwUQzh8;w_1GNMIezqpw=+3crGH`S*}JMrFjBHmyle5AYq@Ww`e$igoXaT zB{pbs*K#1+E+WXutTV*YkrV!3DLvH>Gwd`3_v4tYSVPawFm^07P@)9|BH zr<%bU9mU}n1h=$L!7dYd{UIpNEAL3Eus>i_$a<{iVH~(2o!iN5XiC0K>4+t&Y(gCa z-LfkOBfN~jk^Ii0s{`=6`Vk|2o*8^aL2l z6?g!dt6%g4n3IbQ#L4x45G-USaPipxnV{eXG-&^LJ$__65QaQJ?VtZDy1pX631J52 z1+#GjBe7Rd`9<0K*Im8FABc~SjR*M0t{Orn5D*?gJREGC*JU06(Ei&i1aSf#qkuy9 zRgZrzfL{|T7m%7)X|Ka5^Nd9#opvhM5V5KG}xCe{wF?m=qZ z2DKZwcqsJY0}EZd4Q*4q^XtBTB-WhE%)vQ>p-&&LM-7J>eNU4L!TvU?q*VPf;8TaQ zQ4{$oXNI)QO;=`ORtdQ}Z9lYE(ry{3%B(i>J<>BtO86bwv^&nI^?$xnQL6(rUxmm&sCZ4Gmx$kOMsqeEyq98d{@u5ew zhNwyBM5d|bny$O0?PMAX$iZ}(suyRmY=z-<(Kgqrlz&52B6(_LFfK=xT-CBqyK9)c zG&iKv{iZpkYL;7NHuTK%bA8NsxAw~8TRS`tWm^?P2)Ux;f)wDJ83cNZ*JBi{){99u za~0s`B#AzetyQBv*C6ov(5n%$_Y7TN3a;l3CAvF?V)iCm_&aHfgssiD+s9B&EKp>m z~;2Kj7(~}o~HuC4~(jj(p8e@2Zz^QGv_8G4ul8IUx-Vt^}btM<& z+xAG7qUPQ9FlH8XuUBxmYQYk*PID;DMXOE(_Fn^0L#x_PFt424wDBS&4M zCE46P=e}IvhsKHgJ+Y`*oNn<{yvZV~DzU?WCyloROm8$|F`V*8vcE@lj|AacSlF#p z8l@MRX%YpBIc`nP#Uf>wm3}LcoVlqt+-fQGbo4V3BE+!m z#a~M4CT$L`#L;oKTD6gdQUR5=Jb|mTu7?S?R=!~;FZRkS{AHN!Q%NuqbZGwuF4_ah z)mn4Ug^#$-UG0pi^w)8%LGni^-XR520SVp-i<9)QmT)26^{2HL(wSvY)`y zhbOWskghjmVmj%@l3{5K^|VNcws zORl0$5HLgg$Dw;I>iqe$e;IZ1|7T4xe^h%x91!T>X8`|#CjdTO zV+T=}hIGiu0|L;~b+GHtk^T+}`YqsdX-~^yncm5;Pb4^viFx10CY+X&v0K$FC3rG>eD@av|)y5VC=y;cKS=ia;VHUjis7W~43T9F?qD)@9 zZ`4X*I`eop#Kx(22N79@BP~$8?l!>VuR~%j+OKCS$tw^GK#Hf4J3kYYH`#9L)Lq;W zC?ifg3VZ=9f&1)Wpd`NAYei_cynKh|aguZZcK|0U)iVls{ri)*l<$pOB9r9VIcq0( z?FD0!h^XAqJKnd@P+d0LB=_DIz@QyPPi0(3ET84Ks7HDaP5Q~o%Uv%ys>PsqsIfeq zU;^3U)Es}Fl8RHUn0qrqUq|;lPK_5flWh{Rns^;Y#}nB{BvC|k#OcFmWZpSU1ox-5 zTnh;&z0~^}XSD3}_X7uRF1+JYYZZ>!%lt}(m-s3ItdZG5XS7BxGYr==TeHRcqKB0? z(W=(XtdJjb;gir%Qw~c{$L@7<^FQNlUONFT2x@w=Fz$En3e{z-Kd1^v7x11m$c7^o|+G%dge>~gNaLmRaUX` zH7wACv8M4-W-gl!p{Lm*D+92f2Koc(VcowOSz+%6nP+gHAFwoPxf3O*w{e7Ka*^sI z*D6#d_+_?}+>U*b(5F>m6qZM$#u4n8uYJIcLo?Yo3|acZyvvkj$0eFK(C5!9NQ6IImy$ zmaM18)vL6xPU#?Hw#M6*n~(PClJ-}MIM$c0cNKAB#kclcVkYGls?rpWYvw}N1Wp^b zSP#BOK1Vp-%wck;cH zA)fV$J;ejqG1O-vzQe7~)HWpNrtZLIS~~JCUkdG9IWeJwP{bndJfO#=#gfY+3kYqd zW{p$?8D^2q23265_*BMxbLGi8CnNpdi4@N3}r^Sf1XQ3QVWYGg;N$|7pW zSQUIV(xTXugm&DeGKUpX$LKF*OSvaimpx<4UdbK@ZH-IA4#eXk#4_|!t3)1|{@*EFvvI8B&|688>fuFdzc>e1Z zub&t2uY>(rp5p;zXuur&|688p;Q_d0e$f9xu#nL0;<5iTJcX3Z2SM6h(?1Nlv~BJO zhJrBS0fB%D>eWgTPzZy-!jOiXJZv05m+@89_Gb`vjYkkK9~&Q_(s#uWa)%#esN6t5 zFUK`yHW1_vKS)C^9!@q8P~p1j5i(JLxJFI@((+w{XfM8Tzh1Y$z=@Z72L4nA14I@6 z+-GnJL0)b;_(PT9_dw&N%?Q6rXB+^q{_WD)J?9i@9PhERahV;-6kt82oS@Ron;}KP zrEw2uE_uiEEtg@o3304ul2zXlC#<7e_4sNoNklBy zHEP(W$wbQ|O{IiPrz`k)j*D*n^VD{F3)VWCzXOvm{{FlfQR2va^CA>;!K7G*s-H!y zTih!bUMVb1%2$U4Ux`#p3Y(cfIWBBDomg3gNdwx09ESzF<~89%6FdrC;zo?LMCuW+ z?^8LoYJkD^msTH6YL=kUIdF^j=W|o|E6Husr}Dw2bv=VwoIYfEs>Ys733qvAB<}dX zd4@px3N<@Oh;8#^`u$?oOZSC##$FFT#xAum4WSSk`*>Y)TE`3*!Ihi-ud8{P5h^)DYm)wSvNfTt|!ky1*(>#9Q4aupJ%D?G#q;E@0(6wk-`R^GlvQ;KRXsJ)M9<=mS|9HG`Z$_uv;CbRzW)onMD3+BX``t$K0&z0-3)iiPUAX_H>ondJ>>cp*gEjiH|#$iFnr@ zNjN|<*$y5$zjRkuRO20!6xw!j!{}Y@5P?oUJd)xu#3UaBL|ch=S~_Wa&a+vIL9fQn z`Mj6+e6}}0-U>)IMFlRe*6|Tn60+`bpO1;sh<1uDTlfinCBZ4 zREUQTWirrZ2u*M@hI)13fRh|yYaif8GDWJW9hVz)Vat$ahgb`K^W)-a+_F1dos0S) zTaiY@SXK3GlO-43g7L0A(%!JFFj#GlTyB^BmfC~-xXGG+!+GY;mQ9cCxrgcoQ7;18 zbV**MWSwXMa<5rxC)f!`DlgSp_*$#z3n#@j;D)UCFsnkXID%+C?JPR97u~3>QidOX zW?Z@x+{(ofO?e9uH5K<}*aFk62^mFywYx7JgWiWeP>7w*;v#1n5C0|sE|Bun3pL0%} zAYL|JzW@H&e-Zz`j`b%{;RHxe4qyoB7mvsZ%*XJ7{`-SYpo^6}zk>a7l3zUae+DX` zi%mg)W5~nD&&GcZeFeG#aUeYM0FUXK7Dmvey#?1q3g+SiYE##Mm5ap)e-kMPn9Sk7 zrrQ#9X)n+<9=U&%(XK)c$juCpx0I8g1DLzJTAKR#)%g|ZUqFsa@Zl25xCBNnL5@Em zlix!b7dp(p0{Mk90G#~$D5F0vg$Jkkq--89Rhv0B8iV9ufM!OSD^9t7J)I|+5#D_h z89~P1{-9+W8;hr$&&Hu)OPQWNV8GKuwE0jNdc0w`{IF+v|IwEr0@4N6?HpcZ`_>G z$AlK-%rY{}5np6p47aJ$;YMI-BJq@lk*o*+tM)H zg(oBM>j)&C-0yA?*Yf1LXH~~MHdD1Agf~Inu-CGC7BEbddxXLxaa<}JlYpWv6M8$6 zFXCPWdc=S(ZJ@H6$$U_btbGpAL{vFcMRZN4a zBQo$*6?~1xd=#PRYR9Gd%f|8n0qz;U<7TAK$RalK~BA;*8$Lu2~pQ|4rPjViIm$C!Mx z@tR%W7kD>sw6@f$mE^^r_$2$jD`wS#3K%}*&x+oR#e24r2}%{dl+!3tX?V|n4qDM_@3DMVa zixLwB7Kt9URjJ`9w|Fft{>FFV4%m(lQ?3Hf5vH}OtBkAb@J&)43n)RCa0yl&;-i`@ zPlhDSXVvRz=WO%^2dfeYhIPle=It5u7%MWO$55PfZ?q2di|UY6erTFGz$BwmNxTb3@6-EO zCr&8$e&wkMVx9n@IrfR>TsZF63*Wrzz1Jc$Kbt!UMnJvHSU@6qCNFaS_|{SYtOymm zbSxJdYpx>hZpniybrgGfP!>q&P38yMk8!z)Pex8QZ4BhB~=R0JirNfODitts+c8dN) zj@!ljQr?6q>v z{>>kjiZMw#h%NM+lUy-l6TLET|2l-8yko^knYm0HnO3deDD!Ltw28;chKT+G+Ty#qF|;r?ydS5 zksRS%l|&GF$Jo#7O%U`EF=@P6;WfbOl6?L3!0M+G{-1>ffkEdV1)P8E&;s^qUHpH4 z;>v)T?#q&j!?st|aQ0w2rT{Bj zY6w|Qf-nSzMF1pn4QUC2WC9@#0n!q5&D_V2#-qP|^xVKuIvD8fx*F;~yfeU(2R86E zQqZ7F>Sfp5Rc;OdzF#v254xmBd5s|#FE1O%H4RZ9Nc}R%HUate}QNi@RRVW*3UL8BIH@KiF<)DuBmyFP%+kZ~LKJ4C{wb z6T!{fI0dF^LSx$`=@Q1Y-V&)jD6_-JF9!k-{<>GceZ_@$Tu)05;HM^ z^eahpecsI8d^6`s01Wrdd@g%RwuC9fy=}cS26c~+S4HxcWH`g&2$OOn44o?id#w)U zlSgl?vhmO`O)^!(vTpUb3B-N+lv>R{fPvZW8=Uvtlrae@aSI z*D5G(g>O+qlRxf%JfJq7VEZtqlU6z@8V?`bD^A`HwqC^>OgY4w_51KU9QczJ&nELUVwaFzq`g)?e$HO3mFPDIS$fG3meu(p39i=dx8!`4=Cy3Vy%$k#= zlvv5qS#s*Ql9?oi_my~07iOqRsPCP^kppYbn&}kiK^Kk_S;)=(4s`#dPg7Yp{A2o2}F9{ycKTx{6w+*jIAD4S_6qx%qCb@EbdXY zf0LJ!>jy4ER3bOW8+Gr4Dfh!*^B&`wxl>h2ZBeYy04v|*?yORNk~|cN7H)=J zm3r!hk-!qEguM*?)t1``HkO>yRkiHd>*HGm`?9;Z9ORe`wNY$ou4}wferisN(4R)d z>)#tGNA;XyEHKy~;Hy3b)bTdALeyRllbJbN8Av_uW>09DLsh}|)mq}WPH`qA6dN614q1;P9!yIesM*gen5pqVpy@eu{^=LnD z97wgIh^H0s(Qn3#T0@}Rr8g#vAg@!le(om8aNdELPJIM(khNizUg@tFH>-}6}ZHQfi`^1+l(x3}Y zKp(41(`l@Myi<{Ec}B*o9T{Z?X=**LQW?tYsP0V}P2WzbcWQG$v>)ea7lle`lfjJy5Zk&-=U(M$fbW z{9?0s!#^3s|9Y^nYN*1C;bpDn=T*YOh?s5YYJCg%k~QOzc?sThy@13@j^vW@sQX#d zo%I!rE!{b#$K`!Up-DcERwhC5_G_U)0%=In+8jl=zBpfqC8Z%S+3}RC2zw&HYj)fe z>?{(1iWUCV4wjbM(gOFjx;FbJ&wZ_&ggYM3na^uNzuHI4MkR1AF=X{lu%6WlWIM0y z`UWCv(5oot>*Y>m*SO|c@z~!GM?De2JK^bZDf;FvTd0(0-3|AFrFd-5eTaWi7NFai zHVAVJ)z<|d_q}R=+E_`D9i?HeQjfcuz8BRYOKuwJWm#wGjMD3~F$0@XhgDR#(cl)0 zWGwd5b9+90zWJ$h=9lcV-6(-tTtZ);b2He;jQAG^m42s9JM8y zH{pAP!w9i_OPaK#xczp=mU1-VeagI1A(NB5XX%MZ4sW1uSu4}wf%MvL5#sGdQB#`6 z;%m}^OOkfirv(?M?`3BAr;yHXrv>c)t1IaPEzGX(+w!q30|f#lRK z4Rrjp`GrINWgYha8)JNNVgEYV|Idu^f2QR1qx+2mC|&e zIvgDT{Rtirq-@1i~RFpxed|bO>FE z^x|~+73p8(oxhb`UfMHpsXyZPD2Yqz9>4O=|6m7W-ybtW41JPFP|cn_RdKyJE+*B& zH2keJrq1FqDA1FtFGQPfz|6y{*@h_z5|ZA63G;f?aCb|5yy2kyaBuO*eD`ZLxjUmg zHIaKt$)_M_D#x`>F@OKzL!MWMM(&Q|BS#~li)PH4HbnG2i7umCZnViPYil9tp8X2% z;l|kE7Dit5O?4LaE%x~Pa%^C-=e6?Q;*4yvt^Kxx?8)ETvd{5l=yk(-zN3x&Gc!N~BXvgmjVT8+8kFu}H%WBFkg^ammlh5+A)i0Od+WGR7SH&P6eifvO z7?2Yg4TXbL9o?stIUe9|7@Is?Hb=mlM)>VB+PJ<6o5Bdr*4#^+Z2pGhJj6!y5;|>G|Zk zeoV}l?N_!aY|YQlG#VNznRKSjDymew-#}a3Y$%u-gfoU+BS|f9VvE;$xtTzF0wcn8 zQpOihpE>dl$IM3&hv$sNlqciCjJHgGrQVEAO4nNieUwN&+`a#EQw7A&q12m)vjXge1r*vF*at8X!Wsv%(YLt!!>sy%p zVMR|g{9PtKD~S*b%H~Co#FM)b~zD?61^?;#poZyA_Yy6@RB$P}q* zL!PxLH3c%1n6Q97>|v~1vbG&Xg)0WJRD&iIrX<>7zusIju4Q*O&>``HA%C)bSQzcR zurtI+;$4YDt6nAm2S)DMlST@>5lL4E^{Nd%eBdKZhixzGIAbpQi7y-fVp7Rp6j1y@zb6sEa00c*rOkKp&7(tY=@O zXFyi#KUBxTK5xeBRSC9NR3zpxkEJS3G7QBcneKw~^oDEFw{|13c__r4Ad#t0-mQAW z8-~l$nxA)iD&5p;cp!pU-!SFY&0BBYy4mn zykN4Og4&k-`326Qn{dI2%HB^Vpu>65b@8D413g^QU~9IVumAYNhFJ&tY|bohr+qOe)l;yj*7HK4 zGL#}y1GOahXdYTp3!{WYvN&H7yajAwY4h+tOXly(;l1gpQS-UQhiPq97~wKV(gih) zTbSW@R0lOSIJ#;EV;x7mZkp^P8=}USxn_0qrE&CJPhLocM{SqSj2OTRAFnxU)#y}cg2Ml>3K@)`0 zU$Hd+XYjYqE;?0ZfHmjT91WLwe)@RB}15L1~v12!6mj2*V$3wOl~Q&Q*_)U>nj9 z1dP027wJE|G9Z9+0bQd8@PniH+s6;EA8b58qxIED|KYvi;^P9K?^QcU*#gL0!vzL} z7OuNBkop5x3;~4(p6mEX;Fb8>OZ*`O%yZqnfz%&>^vDSYSibA-4S@Ln-s6u(rE9c@ zK|oX6-x~4*8Pj!?+r^L6KcM@+ZaDfYis`oiJ^0eV=>GtEK$MyPcZsA{i{^_PaRn&uC8=P=ACF)q1<|I{dDchs(knnnK*;QkF5-of@WlxenjUYLY)wC`t=tWQZ7o%#}|Wa+Nf2Mw;-# zlHYky8q>GwL;IZW3JTthl0cAeE`gq8RPom5n6$A{XZIf{JK%nxG(yOg{I0OtBSs`# z%CRv6gC<0>45eK^|E9?~HI{!I2MTmZrr~fVV=q4@qmkTNq}QTQ`sV><-bq8|;cWwp zilf(1(jMN5eLYDrd~ij}h6R|%L=@X7@l6|(dKw1oPhrYi5(Cvo?v+1olmwrR#!{qO zCBx14QpC|z_&;MOD%#hooS4zt|0HUA$i*&;AWvR}Oz&NW|MD5#f`r*)MlX}ubn8dh zpRmGdl3o?p_F``+^pcS9!l+B~q6H^sn3MCSw5^bZ^b=VrVrelp4w>hns&lL`CvScY zK8Yx_bAx}8Co+7)U*@c0ZDY$z9|w=B2v^cs@acht;hss9sqFy5V`Qu2uVOqAq#tu< zxMC#Oi$|op@F#FtvF?^p(($}q5HokX&;5zqPz*e;nN82M zUl$RYfHCjBpwfP~DP(MIY-+rdL^bOICMi5&dFqoDZ;|bWg8KwDmdgOWE;`R>+U%XV zmJ58kHs#FY!i6=@YS-dgLBaZ&!h=H9&6yG@r^6`tp)bq=BagBurNs0Xq>4&yjgp1C z*y%=@7{0;ltg}FQ*NWn-HTnqIXJpVkriRm~7xOGb&921ee%gglTb?zqER22c$tw;j z*VHywIt9VI3*uXMHEgo%7@VH8dzG}*i^1^6#s|L`yw93mZ1$>iA+JVG^_yt+JbO%q z=4j-EwQ&YPj}K4btJi~hQ)Q{F{0)9i@@B8BgHf|3(gG8SY~lUwYGRsN;oCAHmKQ2T-;0>@ z8Q6t+AGlx+jN7#I{X1K66dg;^IaXieDY$nBw}k^Yx2ii$FJ> z1$~b(Subyy4(SusgIedHp6-rjirw^!8ElS~5ITwaKI&!|d)G~KNy(!{B!#KRmM^B@Sx7M~BIEb)@TE&j zUK}mR3@pL&8W_dn5 zT1s$gL0;5b6@@A8%%f`>7)!8e8%GBgKP+_ql9e51s8L+jU-OMlO&ZU|wA6_}sv5^Q z)eB_3adx{~W-s`~LuRS>_tcXV2^isiL_ zS*Uw-O4eG;)j}H^o^{g3;t!U$NKxh5+R{|ZnRE7>*5NE~AM77xEOgL}quYHF=%38o z7Ao7xl$-A9$n@#Aski0rSFirC%Hz<=`|Je`4BnI54LkU>FmE!=6g!tb$Od5a8N?z= z-+ANSy6BY#YJ~|l3K?-Mm@9r@DPvNRTYAKQXOgA=^|vpmunc61ncpOCM-CEuBgpq= zq(5g#FHTpdhQ0|x)o0b>c=vT!|9m^5dV>MR^L?LJ3L^1rYer)B6s_&(hK#OPeLYM=BGHPvsMIWRB_~)#{E8 zHn0(-BeNKQ#P_@(qv=l=gzj4lqfED-$@3#{OC`3cK zD`T&;%ydhvrw8zxrU&nFlLz>`)vA7p{#K^p3$Dt<{g88*l9zf)*CcrtLKMG{(6ve4 zPr!0H$@@85`P)g}pSU;vAAlX;+yMM|g=4$;>~bvsxo8>(Kft#D(`ElN>+nNFji3Af zVA$c}0{(TdKM5BQfKLG?;1}Tn=HLSIs{cMY1ZcBCz~rCuBmc;_00I5IArC+Jf_H<= zcEDG}Mj$-$0MZ{E*NKfl=5vsC03!kLdsqEIW)Ki|VDJxBjBD&569@>qi^TJqHbF4J zHC)a-APs@EjQg6!E?^GG%oD;8SZ)Ihyj(2+a;0V6C9RGl!;{-7RT7})wZQwr)h zg;Mm=W{e5TIa6hGlr9zd43%-NVxe1|_1|`OrkkUJa1PjnH@@=-YWL~`rCr7xINVv| zj}_6>R0;I%0d>Z+RJ*e$4(GGW-7kENeeNMRGf|&|4D5LYiWaTYEZEl`Za*koQX4~u zTbS=y?AsXY+~^5!H65o;&&f!n4#};Z?w$2%)rZ-hb0gryb+6U5UUI~21Mk1L@aes8 z!mvf$dxAim21ng%YPZf6(KD!s>ZGa?srEVqidJ)N(&HtoDwdX`_Qyc!eFtH+omts- z+(pG|36<8axy^ZX0?*i$p8nCHQAwoywTN_VwrCjjl>iFdCxWyX`53$hlT#Y{!@Q1O zj{a!x(m&n7U-vaUe{;H;!<%a#Z(n0J(#QsbbtF(q)KgfrVvaj7 z&_4v?mA4<8F#CQCV^TPj^9cM=q!UK<{nR{Zmz`2MB;s>_pn#=la(RiWSWUC3*YAqFDuz*_Un2CzVCr=d*U|T z&FgsYrT=c_?S3Wp%p>&_D!#ptHn&1YuTNN_4GcTU?FO-b68=I z)m0*(@57@x77XFei@esW-%wv>-?P&s#f+wGOATso86Gi!rp!TmZC~7nlZzD++>kuU z_)_^0_Zj|2VU%@SK9h&Ya^aGFnD@-F?pu_USt)8xlCH|GaVTA!O~$-AqY zOw{X0oSlC_liCk$O6aXJ+85kIFN5WXMnaY*LG!fnyZ8Ebbv=Vj0%|G@Z8Qm@3V!?( zb&3E?@y$Nm`^jr+&`h1aH!3$*;@EVht*izkuy86&B6%&!IYJ#cCb^`Dw=x$f+g16D z`0gCj2p{yh>OZ(M^ok#zOG@=^ew>~JI;j+zJin=I;VM+T3m3u}bX>E&Clvk7o77@Q zBE_mNZbrThHVQ|bZ$US~;uNxkp8afn&-5cjc;FdK#cI-{y0zlaN6y>g``K;1bUiOg zmb(3QgDtbnJ(W5lzaeHU-c*e54@7w~VJmiLweYUZ9=$K$SNf9%eqVovG3tBr=BAp; zBb4gF8-=dB^RZzDoh>Z%yR3baOHXlWq@qeP?qo7Jl{eu_&sUHbBgH2UrA?9MO|qJG z>wlS=;*_+fd-tiwocC}7J`5He-GSiFaNYOfx((0UgzkJQk}7>>i^R4Y0s)-Zj5!*L zn3G=1;2LVu;$s-cs^fjG2Sc{BZ;rJ>sN~58b;zOOcIFXI1lf+^crxF?zguT+I(_s4 z*EYlojFz!7SD9P3($ClM2&C*ymN6hR{*5Ngd&F!s^+c#Ul)QX^y(UQGp1N7>`r5mK zI&%vzbGll=fl2KFwdvBH&!d5ck>Ve@+I+nAwVscp5r5*U+7f)>`dDuB_E`t}2Sq5D ze9L?p(6D+^cGKWY^Fvkl@sMn6hYhODPZI-jysc5z{&eq2&mH^_dPPp3VmL{5wmrw% z@?M9+O{Efl)}AYyWyr>`-;WxU(xKJ!am86CC4Oa3CY5%-Z(Zmy9YX$2(aaOcfluFb zQA^J7UyO(~T*YeOOOjF7W3`JP+)G&Phw1}>w0;|_{ZWtyBwYXW>kU+8e+KZ+;}hUZ z5(3v4{@4$3oh}3TLZaXosJh1RhXn35DqP@8l2X^$0ip@lZg~I$#ppi{sA~)Xkyrq4 zTrE6R$kW z-)y1(D`@b0XyDR(@c*Cz{$GVp3KVu}V4I?u6R>!~*64wmq?w6>sTt6Yh2s3c$;`+O z#cgu)u7bl9A4c?NuXIYJ3NtqV}pY6iAq3IiL4b2Zrv>BevFw)#sSjwvwdx_Mes{Ip^abVo?X@DB=ul0feA90*6Qexr+8YY>Z|ZbWZxZ$URj&HH)<9w zl41U7sKopaN4O$-x%W&b@7*f5o633e!No*8^9>*ClHE7nK25=x0@kBC+=7ueA;H-+ zuLZ?#D@?pgn&|y_$9(j}FXJ{G{6fh_cdO}5>+0RseLGi7G(wAet_ynhq&B#<4QR+u zp6%s4Fqa@+7XCi%Z%Qr7-S+MFD>jnjelnqQfB!`~I8-rb5|dB8g9z)V^QK;tk|+ZR z#$U;D3IIrFry44TVU6hWh=UF1qtxSiK5gy~=8hcZpl1x^hD$D+3ENPsm4ecDHcTJ( zji$`J6md8-=};cEgeFu=OOmq0<2-YP0yY|KW6ZV@y2!qtR~9*iMIV=9yn_ioiAA8k z$+#K2(wUp)y~Y1w>P=YZqa>BSG3gS9l&HMMI#EZoc9JjTX797(Uzdk$G&*^XNgPLe zB&nyr8u7NYx$UYR(1W(9JoxQFQ=RrV>Dth$x|H^9whaQ#x78cVexKXFwV_B+bYy|Q z7mE0o2u;V|O!AI1r=K#+GdbmLdvuREU61h7W>5b2N2*Gq=q$k|O3RXSwA&~*l=zhA-EVla174w(HrELI$3pU1+h@-;Xk+gGzcV4SC^@o|S>+}5jca`qeIADsDr)J@%Vq;s zscn?eJ`67*wtmsdc#nBVw@itsNC=tsb-92{b#h@{3>`A#=* za#zg^ZpB3GZEM1pl*Q>}23)aoaMRJ=Op)Kz${AfVw928+^J`A03l)Q3KQq^#PCo?> z{yf|V2GZYuc{*L_E&THLW>0a|H;dJztuG^ChZMf`^Ehk`g(+IMhx?W;;*4`@QE`u7FN*+Uzd z*}v$&_fG3q?zdb-rooDJ+e?r!d2*krG2Zbt-2RHfcGLO6P`$1`0?n5x0VKJ1-|;_Y z=@n(gC~4x+=WXkLlplT9Xov$(zEWn<(r4k*$H5RLw2=$9%oQ(PPnNR^ggP`dJ!#YloQK7%hrO!kG5Dqh6#xFxBHiE*g$B>HJw^f263AHyJiA+Sp1 zi1_<3X@7MuRM%Noo@=-Q2Dcj`O*Sh;g6IKXh__M6I%2A^VJ3f%A z5ukHI;kbgW%=^l?!%C%cO|v(`K*E%JM+)W3Mn`~q1H&1;4z;M~%Xwgy&U$ER zS;`uyxyBxBZQ`kL1Ku4Q%4UMn(xv?BE5X$TFbZ?HneEp4YPRe!!5BAyI*3&G# z@R~`~`A@}lL^yF0A1F;jpomBU$j#h?M0&R+$bFd?5Owp3wZTn(I!U;o@)%Vl`(s=l z*Nk-IUN}rY^t)Ow*L&=5CX z;O%F&XTcbaCayoaBP0kzLj0=G(2)iAwq7clm3Cv|QL@coxA^oq~jVX=0#U1DuM+qr^ZS9B#kO?HhZ><7?!Gt#UH_$y++47 z2qqTi%aZxpQbGAB{yT+;x5V2Pbb%v(wU2Yplw-@vcT;SUh$Civ?qiQ9&I)Bz7*sci z-z84?)dsPi>~siYa&bGWd2$!YuHK}NMz-< z{<>$%@x-=SCf%(c@@1lK{Ti@I&il4xuj%BlZQz2uK4NOIrczFpEwpEb&O*5+_CtZbc2n7@B0jcyus~0)x)3+Doc(s@2S>xD^&EE%Fg|xH?6K*s2h}6c?Q1=MEIX`Il5sZApy|b>XBPuD z$^#>1_1oBu%y_rstFsK``zBzXcWIQ5ZIM%0Ip2>;(o9dIQi9JSFt{aS5znRSPEuecIr32y z4}4(!IVhL6Tu#Ck9MNXYDpKo$(2;|LpNcZUl^;7KfI(i@fR#&Q#n*$Cp9ABUz{=0T zp?^%J!NA#e0c!qt(bd+-1f)x1Cf{TJ_XF&D-EU)Q4oUsCh=0oZ;jN&GYI0jV2t#qgSj zLNI`CE|(G@yzzj6iJ9=U;n5b&kBf}8;!*&)jTd~H2i|2TmaMgyKwaGFWt&{RmHw%O;8GXn=f6~6uCEPs=@AZU&`^A z!;oPR@feQ|{~vR20hLv^^?d`<-5?;{ofj?LAs}6Xh;)avq;yJm3ew#zNGSqJcL~yn z5=wjrrV}Nt4wb$O)wSQ}_`TtMBawMp*3T*yT{*N>UPKUZ} z2iqIPSVWl!6fp60K8suRWj(N%}bz(A_r&hwb81~>Y<*ZJWlb!e&O(%?X+vvm6! zOOpMJp=_XO!g59Ws%ZU2almUPxGoFWXZLB>I#PUcX0z^dyn;2qAOT>MPy{7b@Sco0_gJCGo^$kLiQH7h00<=&k%czQXc}gQ5 z@Mr7Fcpe(O=Fg*pz0@qS!a^7oAfqKUjRo~wKc>YIn_-y_x|p>V<%)lme5IVKznKR+ zYHsyJUS;E`GHO`*TZ=Y|_NsQ_Gjh6Bd~$&h-zXBLtlF8T1+uk;A&VN4c69g{_eX=Lm{U zHLiT+c%t^*q7@^<(twOYCAPseG+g&i==aU*Jr}m=h%r(Eq4(?9QRaE@0Pn`cYPkxVT~ga6~> z!V1$MR*PvTHdEre;rtE#i{+zqUSwXHio>Iq&5XLN7J*LaRHyi4ShXIaAGqPHn%Vi*re#`pz^Ls7*Gzh~e!{ zT}Dz-{HHbWa4TMu>if?7e5W51X!}zLc_MTAI`4@t3buPu_$)8;z7Rr#MI&A~dB|3O z0YOsdByzN{{gLN%{40%F^Q+Za&gYM~_NBS{2(ls*2i$F^lL_BT8&yDTPw$Gv+U*9Q zlZf1%>*y!m7nP1)8@YHJu&2D^cYKVrc;Wb!68M8Bs%Ch^uMagnrZe#=WzF~_e9>!= z`BZkHN124;x1X-Yx|9KvDL(NYczAxOeAdDrlj?aVjC=j$VjornJ~-qMJ`{ZFz3rdV z7^EBg*b#AEOrzoS5PQ$KYK_dHJ&GKYmE*zJj9sEAfgavWE&PZwLD)PY7dJsZEfZ)% z%g2ZC;-b0{YbF+UIU9#B5V4-{-zTGRI1*Ye()GrEvRb6iYw!tPO1)Qp$O;SI~2KvqiW22xqvKq~7OG6Tmv%v{|63&?!+Wc>d`=1W^t9za#{3z^w~gD}v4 z-@cs-+!>1N>f`k{j{Lx#p>71;hRgseUdKDI(SD1}S5|Momh_VB!2^GT%-4(&Zi)LX zGG8+(xFztn$P94hUtZ#Gk@=dS|CSMdhs@W6%eTY6s({nXE|o>Es-K%w zDk%q#Q^*Zid?&%9v9V6>cv&Q*_n7C*=gMT+gkr?`OLw_8ZE}3B*Y9pB;)zKgFXmOA z40HV`w+Z>u6Aj-=kmnx8D*2bX4MoM$I!`mf)bwoF^`q0>v= zB=$j_^P!}PYcg$-;oba>@9lN^_K?C|Vlk7Aji0({a1z`YO;gDp{D7mZ)~jl~*Owa@ zlnY0r5?~l7nHHJlYe-oD4#_2h&uf4?Zz7CwrIlQx<5Jmtyl5C8Jw~ z6Ph{Sqe@8A-bjYVl@o_VzL@)p=+QL~bH6=)@2EZskDfvMPB<$=fl}K8|qhImH+FMo`y$iw2r;WYjR`;!+`ak%7fAe!YmbiALY00@fp7B#> z>XX*S$C%Mg^t#CA`HO8?(M61U)97vLLeM`ataoH6pFBjbB`0NY+k(!)Jn@R$C0>EC zo!orcnS?P%gkmQEfGGrV7a^`Vh$~B94M*o~x8Tu{t8526JH+#IsL3=T%HrIEJCE=;_M0`f}g{!23wKA>hKr^Y{(lVpi{7Yi+w4tv%Ctm`x@`vrCjC1)n?AC}? zjHM%6-z^6-ndgf%r~R8{mU(0uQ@x7SNX;7`db^u>ypVf_6SPPP4duwF=2a8Gcd=?; zl8p~zd$Nl&)cwtbgKf()braR~w5Rr7XoY^$3yc*Zt$8JZN}CDcUGG-Ifcn7X7m1`I zD{O6|>GdDs@}oXHbN-QirqD`6AH4LL+kTdCOZ6d_@@J+ClUmsD_SS_w#GSzkzL9x- ztliZ|lk!-R9vK?7i)} zr)!2wmyNIg`QrQ!5sw{kOyLDy-MSTo0ILopJ}{i4*73S_78Su58Mtjw%HQPhpxAGkRU zcp&I@TU;)1ZyNA8E>2*;TkP_=z|CoH1OkFt;0d}pQ*d({@IVe;pwss)5?x@o@z-m^ z4!EMS0guFuwYgF`|6;XU7WLBq>b7n|K(q3{9+3?&Ct|xrhRg*n&Ii9nHo#98Sil=I zy=M0G8>+lk3UKZ8|Mw}{Kh+Zay+rIa75)EEB~aS`_Y<);(;#fGqq3o#ux`e(M(pYG z8l4avhA1k@qbQs^M#B+GTK05wW*27>;<6Yx5)K5#gfH&n$C!TIMo&UsnBis*if zEqR6=h3Bmg^>fq0Sijb()hw3#QJu4@`A_>M$_bWlKRM?oeX1LsNnIH*Dd@>vUeG@M z#t}6@IV^{HQpiZ7YCxo)a~G#ycB2q(0=~)@7N1v)sMwsf@D+Sk9!aBxobzgi>Dp?1YVR|+<;Xp_0J{~jeHz=Yl#%wkuL0ifr4mq@er}i?93Ifg*j4ck8fa^iDiBe>sT#6aSg% zZQgUgLUS)@u$~$?QegacI-DnKzLuvhYwjRB;E~@t(x<_9vV>ze+O>oC8Y)5lxN!&5 zkUv3EPn$FSnaWC6a|S47pt#xsDJt9MqkXJM5Cm$NX?yZpgnErPBuB6x9wn7V*mk)H zqaYbXh$FWe2~UC8XhU9MeZ!cBkV31?5>Cu5Gl@~%IiC^3?@P-w#l!9(%N`!u&az^A zIQirqGfO}HY+?m>4(OW#MO|8rE>|<>Val6g2B`fHk0G}(YvOF1$byQim^C&x8izh4 zFu-=|_sMIKv@ljOzPIxCv^W%w<&0lICon)L=+Zd|gX<6|?}=k9vmyKbd}7-;ISb|6 z9YsaGAM@OI_7=OA0|@r|+QPQ0-joU2Xg~0Ce*YS${Qe%g>*ICT1O}gqi{(icEWpIq z#}kjsn*i~fW*6*tRn_z&g{+iv`9_;0fuDN$amhK+lB``uq(7`Hw-{cPQj;V|sXZ#m zcRk7=VjFxlMj$^l`f$pzD;~rxfm&d&kdvk~Aw>G(-EjJh#rG{xpdT|TpA~&cYg?kx zgfgoQyOyG}5cWPb>-%Cc_m8RxrqYDHj1Kf7o$%P4XMDDyPJJ*uZOk8-wt>^{AyFgp znPgMX*>To9qj`qOh91+$5vPM5p1ZnXXx_O}AUje=syCKp0_;zqhU4Ycn&gG;gL`6| z(vYNl4eFwZ9_dt~o7YZoEr-r&!rX=ysdlT~>6c`xL023d=zy-83kJz8Rsc zqW)3BaIFFEC!r_-oLzp0^2spj#n1Z?U0>J99wntk9ICl`_o`VpSai&_h175Erm7UE zPU52U`w^cUFKOCle#zMlr`fIM4e0EO7xaB|jxE*o+?5GUt%y^JTVg;>_)Ay#QQ4Qc z_(mp<`$^FhiuaV3SiHqcJZ|C9YnCau^XS#r`gIU=(4fia&XQAo^}Ke1nfrG0mQliGvGEg;3ER6K%hGE zW*m4mCfIl!Ks^N8Eq*#&KwHPZTpD(6prgcX)CC9+{yGqFV&T25R2AIb2K)-yFXgp> zD)i>kfLA|&T_YPXRrcGIo8bO7;3KjDpAk*~TW^eb&4}qYWcepbyk@<~B6*E0uQBJJ zDgpi;Szfcf`9+r8Kvl=zB}=Wom}wAt%O-u zI?>ND`zxCth3{a?FcDKli{Mc>mpd&iBPLXOQ&E1a)kK_U6tfx8dAse z^RFjcUsku48NIs;@LbsZTzP}dwn{)%b-S+z* zwq=IBAO_>hO05gef=ZiZ7>20ZTU)f|vsd(1di90h*Dp#ZvCydBM zjU&>mYJaezc~2-lC6K9rr==keZ-GIQAz1J)Vz+qrqdgTl@h*ix&`hO{(N-y$YjnxQ zMDMGkn2zx))fD)H-<5Uuia8aS^vH#bKn!A?z6Vf^2b_w zPXaM-FY zl~Fl!Pi7P{Pw8wW^^(Bg-WSFvL;KOhXxyk}bwXf-Gz}W-s70!LI_AZi#3D+37Xsqx z))aG{p^e#V6md6s`Jt=~+Ediku;Qf7mIuh0a>^tq2=2{_4&h{baF|>IyKC`PZCh;8PQpNHK!UEpg^B=t+6gb`m2im}?RJMe(Y%}3|(-U_K2N8Re zG&58S)9{r)(}KB>zmEx;MORocV zP1s9p#neX_HLqw3^q*C>dO|IwNyk3b^-z4psbX4JqEKSXYGyAo7(`9R!xizioeM`6 z-dbdBV@#dI#C|qHo-EI-#AuU^n+WUV#}LH;QQr?%Ggvwg=ARXVA9=)wR9=@<=fo@F z+{Lkt*zZ(+gbvjVgTvoImWcD+e+@lI4=2cJv1UUyv_20hz9HQ_E^gU&iiV(wmv@=- zJJS;!i}d^^>?wKdamA6ryBTx}Qb-Zw5)w(=?yzDuTYU#Lp}Qqh&ch%|d87-_10t_2+72>IPiZ3Vzg(XpzNqjzs!X{%iFrV^~`cLIplN7ywRV3{3(6V`E zqi4Ul$5dJ~G4iyUYOB_r@&zK(|C2R)w>dC*Dw@_n(Bsb09Vz>WWHL?J-qi= zNfLFU#G`_r97;wFuI^D$nQn)9R$FmaEf?++X94sQFJYCmRgTZFqGcFE#gaoK1ZHG( z5=Iq!Lr)|XGZ$o#;Khm{XEnEb35x5IVIfuM)ohR#ymwX0?T!w`9AF)7E6UVKWtO3a z;tE&2;>T=>p2H>*6&~zXue%l>`F?b1PLoe7Pfs;SEjhPhJCG<$vU_s!ls*xwZ`qXV zjj60AdYWINLlqo9g?pFn&PB99YyQeGzx$8x+P1VVyQlkZ7n^+Y9d{9++>s!q`Kx6N zY^a)2@)zSPGa@A)cBbF+5D3{mI)Sn{IwwXjWuczmd$dJ=8o<2Im4sLxi2jh`^bXms zR_`qcf6Ywpc7(rre_luUEAP6$kMMuetb$v~aa~Q|Z_p&TmE4U$z+svfu(i0sA=g|> zE^~2UBLW_KKoaj}iz?u(84S|E0=alNnK^FL+FWyVxMf5@R0UKr+=5J3Rug|t8-k6< z31VlyiLan*j&-+;$H@U4Dc@qE4FdNa0bd%9OMkvwvW*~c-;o=EfbT#1Enb-*aNiN| zKz5)x>n-LQAb`HF12fplumde~L4b7!_}vEq`-{H}Wa9x0|8M3+LE!!&;1gv7?jb9% z=L8?{vh~yC@}Cp=g}t0W&Gp~L-dTrf5c2b* zM_G0KP03Vr$|Pv+(l4LNvFJ2$x|_SFkbgwAsa)SMGCLYaqZHS%$9^=@#5>N+0)oLH zg*=7uMgJa8{M{?LxjD6&2Zfx4%B+iG*M6~kCiIQJzuAJ`V9U|@Gz)`ZTeAH|-FL^g z%Uwdlu1ztpK7y)xud{9jv+w*ESi z^GJBvil_!=Pl4ZRamu?wNVEt!#iTu<6q2O6a14vnb)x+x&MgY#w_=+w?uN<`INJ7w z7MG&n$t$|OBj)Oug1kj{x3tY(7fThF+mFlm>206y`lHK9W3vY3dgm6y*-?Ai#`%>!%>7u4>a!PdG+LA<%$U8{?%JDHB2_>jx*! zrAcL1AJY1zVD9Dn6S7k;kF+>BSJgGyw7AV$-sk}B*Joc&H&4Ax_)NZ>39>*3tFXm? zc)fS9S=?{`4O!sa_4Hu4n}evVJ}S(i5np6K6BP3; za3&TB zY>o5hO7!kD>-S(SDzuecFnJ#VYs!x;q@s7Ph5tT3;gfgC0%<`HXqGw@y9AT$K1AbV z5myANH$J-;yy%BG%Nf!W(X~s*7P3pqCJM9o+&rJ-GXwrv!pVMxO-O!YKh<30d(Y{a z>LXPg+v-3@*DyJ9IfPh_JDcgrx+b+~J4h~J`aa^jCI`HfEQIVYb_!)UocnN_lb_{E zF1MMRKY1nyFV;oufA{Xdf;%B%{I}05c^&(^yL)$iEl1<&;SwQiNzWjBCDt2JoWr&8 zw3b1|$!tT6^es^D{Fzk@GYy{rZr5)4607C&~TyNvtfAby3JneC*mdP4|kaNn-1TVxoyEW z&JMWJbD`>+pFXz;AC~8JdqngjQRG#Qyaz)AQZDy{hE3823vL;!rV$6GCS{G6N^Lvl zC?Rq0#yJ^KRg{SE*oz{ZEQ)n^>8KWj@qC3O{d{Sn*o6c3UmU1R?;;9jaHUB(i*e@3GB%Jfe*Sr}o)B=45_Zqo zJcpFpe!hJVgVC|bG9v)X3N!qSWW8xVQbO9rarZ+{PDZVmBK~IbG&%dcmRYBKlX3Vx zAD(^Qb!@x)Ul)Js>Z!f;&fLSxC2A2QJfUta>T2_U%M^W+<3QKkr*7rAKVAseIPUU| zc_oBWFn(fYC~D(Es&knN0|BhS&3oBdM#<3L*xC^&p8Z2G^-qoiUGq8tnB$KL{A-Q_ zU9+6JB@l2f25d5Ja@^&l{`o$;E$}y%Wgu|36Y!}5?|NqTTe_iuz}-&31A#+Vpqu8+ zJR}I*?&L<`ZvYVJS@YM|_!|HOH#-3zj}yoWvI4LN4l5vVvlH+@4&b<%{T8SOft#Ix z2eJdkbDXz8HRwuc_b0@?5y%d7rU8)s##FDAd4Cbe1}N%yfKS2Az<=@FuyFu&9Y7`c z%|NizfAFaSDPh2S<|fAf@u~VX)!!iCb?W=Ap6OZ|^xsCnYfcKk5D@6a^|ui)`4MoY zj@~|hM)!>tjjQK5W?x_n=Kw5rZ+V`VMW|@>gt#{oFXkxq&u{$Eu}pMdHz34_9NjQw z?nU-2M?T9XC7OZdIriLlZaF^T#)U(Co%punhg>^(M39ot0;XNJuM@5Z{DsF%{N($X zrSjJa4D?TqEs{VwdWl^t#`|w;^ftp4&9~{H7gzJYH+8SN*|m|f;-gBF(yp&c8(`#4 zcLzS;>CHUT^Tv3{e*84A7BZ4bfV<;o_ame&lx|Ny*ZBo?nhto5MN0*48NE6&ztpWh z?UeNpr#?twmcCw$0W>wFDJL9N+pgJFC%+Y-^CWS3Ac zC0Im;5gn^|^9)03LPo;#H9Q>|UlJo*AB&4Q6r$bKNAcq4{5|dLh3R`CKC_~d9Ux}GTg>>f~N1YDd*Z4B?pPd&=*e^;V1|wh`JqE`7BromSlNVq5|Q_z66-Itm}>sE>;%yZ}6MN zvcKpheUS#eGt4Rb>B~C34>@)I5LIO)^Cy8uCB96H06xd8rDL+fNM=qQ$3<5=&qc&W zr_kLTq_*=Zi)L3M+Lv&dIt)LA#ahHr-@bbv<6pzzzA-~dP2PC=Gueo0^9IB-x~$-QH(mmjXZUQBd))O2X1#e4+$sdWd{-n@79 zynw4?#sev}Y7Q;wJGI~7ewY-wI5z(qD^^@-dM>!Miw>*ZGwPGV2dC=v*#5Mx@p8l_ z(tC8IdFyu&xX>tLQH8a$P^AkJOD)i(3$#e{stutBWzLacI4QMY{XR`?vad?NC$4us z6|`kSrFZ6O4^1hQuf$%c+|K^FwfJ2gy&1dFz^11pRyiPv9tZx1V z`GBrOyefa{ItT){nE~X#mk{+YRm+zZX4e4*EbuqJHbCEze-Q_WbAjT-n=deMml^Px z0!O<*`?y=M0NiEfMj%k4cj@V3)`Vw5H&`?Ol6K+;m$Ypj_s;CD#VJ zCM3QkkORO;)?1{@plc2Tw*><7quT)Hnt#nLala)WaJ4)5+OPv%0D+X^EsOduo}1s2 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
`;aR6u%&Ky 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⪼;grX<>l5#YpsM^O=G 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 H^%MRND!GX0 diff --git a/doc/quality/current.coverage b/doc/quality/current.coverage deleted file mode 100644 index 376726edb..000000000 --- a/doc/quality/current.coverage +++ /dev/null @@ -1,41 +0,0 @@ -Name Stmts Miss Cover Missing ---------------------------------------------------------------- -pymodbus 15 6 60% 24-27, 36-37 -pymodbus.bit_read_message 68 0 100% -pymodbus.bit_write_message 95 0 100% -pymodbus.client 0 0 100% -pymodbus.client.async 70 0 100% -pymodbus.client.common 36 0 100% -pymodbus.client.sync 147 0 100% -pymodbus.constants 36 0 100% -pymodbus.datastore 5 0 100% -pymodbus.datastore.context 50 0 100% -pymodbus.datastore.remote 31 0 100% -pymodbus.datastore.store 67 0 100% -pymodbus.device 159 0 100% -pymodbus.diag_message 202 0 100% -pymodbus.events 60 0 100% -pymodbus.exceptions 22 0 100% -pymodbus.factory 77 0 100% -pymodbus.file_message 181 0 100% -pymodbus.interfaces 46 0 100% -pymodbus.internal 0 0 100% -pymodbus.internal.ptwisted 16 2 88% 29-30 -pymodbus.mei_message 70 0 100% -pymodbus.other_message 145 0 100% -pymodbus.payload 140 2 99% 205, 224 -pymodbus.pdu 72 0 100% -pymodbus.register_read_message 124 0 100% -pymodbus.register_write_message 91 2 98% 39, 148 -pymodbus.server 0 0 100% -pymodbus.server.async 113 39 65% 55-58, 65-74, 81-86, 151-156, 163-172, 180-184 -pymodbus.server.sync 186 0 100% -pymodbus.transaction 275 53 81% 63-81, 116-117, 259, 263, 403, 433-442, 577-586, 656, 733-742, 768-769 -pymodbus.utilities 67 0 100% -pymodbus.version 13 0 100% ---------------------------------------------------------------- -TOTAL 2679 104 96% ----------------------------------------------------------------------- -Ran 255 tests in 0.981s - -OK diff --git a/doc/quality/current.lint b/doc/quality/current.lint deleted file mode 100644 index 848d63e86..000000000 --- a/doc/quality/current.lint +++ /dev/null @@ -1,19 +0,0 @@ -running lint -pymodbus/__init__.py:25: redefinition of unused 'NullHandler' from line 23 -pymodbus/factory.py:12: 'from pymodbus.bit_read_message import *' used; unable to detect undefined names -pymodbus/factory.py:13: 'from pymodbus.bit_write_message import *' used; unable to detect undefined names -pymodbus/factory.py:14: 'from pymodbus.diag_message import *' used; unable to detect undefined names -pymodbus/factory.py:15: 'from pymodbus.file_message import *' used; unable to detect undefined names -pymodbus/factory.py:16: 'from pymodbus.other_message import *' used; unable to detect undefined names -pymodbus/factory.py:17: 'from pymodbus.register_read_message import *' used; unable to detect undefined names -pymodbus/factory.py:18: 'from pymodbus.register_write_message import *' used; unable to detect undefined names -pymodbus/server/async.py:230: local variable 'handle' is assigned to but never used -pymodbus/server/sync.py:16: 'from pymodbus.transaction import *' used; unable to detect undefined names -pymodbus/client/common.py:3: 'from pymodbus.bit_read_message import *' used; unable to detect undefined names -pymodbus/client/common.py:4: 'from pymodbus.bit_write_message import *' used; unable to detect undefined names -pymodbus/client/common.py:5: 'from pymodbus.register_read_message import *' used; unable to detect undefined names -pymodbus/client/common.py:6: 'from pymodbus.register_write_message import *' used; unable to detect undefined names -pymodbus/client/common.py:7: 'from pymodbus.diag_message import *' used; unable to detect undefined names -pymodbus/client/common.py:8: 'from pymodbus.file_message import *' used; unable to detect undefined names -pymodbus/client/common.py:9: 'from pymodbus.other_message import *' used; unable to detect undefined names -pymodbus/client/sync.py:8: 'from pymodbus.transaction import *' used; unable to detect undefined names diff --git a/doc/quality/current.pep8 b/doc/quality/current.pep8 deleted file mode 100644 index ba5cbbaf1..000000000 --- a/doc/quality/current.pep8 +++ /dev/null @@ -1,568 +0,0 @@ -running pep8 -pymodbus/__init__.py:16:11: E221 multiple spaces before operator -pymodbus/bit_read_message.py:26:19: E221 multiple spaces before operator -pymodbus/bit_read_message.py:143:80: E501 line too long (80 characters) -pymodbus/bit_read_message.py:202:80: E501 line too long (80 characters) -pymodbus/bit_write_message.py:19:14: E221 multiple spaces before operator -pymodbus/bit_write_message.py:58:15: E221 multiple spaces before operator -pymodbus/bit_write_message.py:59:22: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:60:13: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:117:15: E221 multiple spaces before operator -pymodbus/bit_write_message.py:118:22: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:119:13: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:160:22: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:161:45: E701 multiple statements on one line (colon) -pymodbus/bit_write_message.py:162:20: E221 multiple spaces before operator -pymodbus/bit_write_message.py:170:14: E221 multiple spaces before operator -pymodbus/bit_write_message.py:172:15: E221 multiple spaces before operator -pymodbus/constants.py:74:9: E221 multiple spaces before operator -pymodbus/constants.py:75:12: E221 multiple spaces before operator -pymodbus/constants.py:76:12: E221 multiple spaces before operator -pymodbus/constants.py:77:15: E221 multiple spaces before operator -pymodbus/constants.py:79:15: E221 multiple spaces before operator -pymodbus/constants.py:80:11: E221 multiple spaces before operator -pymodbus/constants.py:81:13: E221 multiple spaces before operator -pymodbus/constants.py:82:11: E221 multiple spaces before operator -pymodbus/constants.py:83:13: E221 multiple spaces before operator -pymodbus/constants.py:84:13: E221 multiple spaces before operator -pymodbus/constants.py:118:12: E221 multiple spaces before operator -pymodbus/constants.py:119:10: E221 multiple spaces before operator -pymodbus/constants.py:120:7: E221 multiple spaces before operator -pymodbus/constants.py:121:8: E221 multiple spaces before operator -pymodbus/constants.py:122:12: E221 multiple spaces before operator -pymodbus/constants.py:145:9: E221 multiple spaces before operator -pymodbus/constants.py:146:8: E221 multiple spaces before operator -pymodbus/constants.py:163:18: E221 multiple spaces before operator -pymodbus/constants.py:193:10: E221 multiple spaces before operator -pymodbus/constants.py:194:12: E221 multiple spaces before operator -pymodbus/constants.py:210:12: E221 multiple spaces before operator -pymodbus/device.py:30:13: E126 continuation line over-indented for hanging indent -pymodbus/device.py:88:41: E203 whitespace before ':' -pymodbus/device.py:89:41: E203 whitespace before ':' -pymodbus/device.py:90:41: E203 whitespace before ':' -pymodbus/device.py:91:41: E203 whitespace before ':' -pymodbus/device.py:92:41: E203 whitespace before ':' -pymodbus/device.py:93:41: E203 whitespace before ':' -pymodbus/device.py:94:41: E203 whitespace before ':' -pymodbus/device.py:96:41: E203 whitespace before ':' -pymodbus/device.py:97:41: E203 whitespace before ':' -pymodbus/device.py:98:41: E203 whitespace before ':' -pymodbus/device.py:99:41: E203 whitespace before ':' -pymodbus/device.py:100:41: E203 whitespace before ':' -pymodbus/device.py:101:41: E203 whitespace before ':' -pymodbus/device.py:102:41: E203 whitespace before ':' -pymodbus/device.py:103:41: E203 whitespace before ':' -pymodbus/device.py:105:41: E203 whitespace before ':' -pymodbus/device.py:106:41: E203 whitespace before ':' -pymodbus/device.py:107:41: E203 whitespace before ':' -pymodbus/device.py:108:41: E203 whitespace before ':' -pymodbus/device.py:109:41: E203 whitespace before ':' -pymodbus/device.py:110:41: E203 whitespace before ':' -pymodbus/device.py:111:41: E203 whitespace before ':' -pymodbus/device.py:112:41: E203 whitespace before ':' -pymodbus/device.py:113:41: E203 whitespace before ':' -pymodbus/device.py:114:41: E203 whitespace before ':' -pymodbus/device.py:115:41: E203 whitespace before ':' -pymodbus/device.py:116:41: E203 whitespace before ':' -pymodbus/device.py:117:41: E203 whitespace before ':' -pymodbus/device.py:118:41: E203 whitespace before ':' -pymodbus/device.py:120:41: E203 whitespace before ':' -pymodbus/device.py:121:41: E203 whitespace before ':' -pymodbus/device.py:122:41: E203 whitespace before ':' -pymodbus/device.py:123:41: E203 whitespace before ':' -pymodbus/device.py:124:41: E203 whitespace before ':' -pymodbus/device.py:125:41: E203 whitespace before ':' -pymodbus/device.py:126:41: E203 whitespace before ':' -pymodbus/device.py:127:41: E203 whitespace before ':' -pymodbus/device.py:128:41: E203 whitespace before ':' -pymodbus/device.py:129:41: E203 whitespace before ':' -pymodbus/device.py:131:41: E203 whitespace before ':' -pymodbus/device.py:132:41: E203 whitespace before ':' -pymodbus/device.py:133:41: E203 whitespace before ':' -pymodbus/device.py:134:41: E203 whitespace before ':' -pymodbus/device.py:135:41: E203 whitespace before ':' -pymodbus/device.py:136:41: E203 whitespace before ':' -pymodbus/device.py:137:41: E203 whitespace before ':' -pymodbus/device.py:138:41: E203 whitespace before ':' -pymodbus/device.py:88:55: E261 at least two spaces before inline comment -pymodbus/device.py:89:55: E261 at least two spaces before inline comment -pymodbus/device.py:90:55: E261 at least two spaces before inline comment -pymodbus/device.py:91:55: E261 at least two spaces before inline comment -pymodbus/device.py:92:55: E261 at least two spaces before inline comment -pymodbus/device.py:93:55: E261 at least two spaces before inline comment -pymodbus/device.py:94:55: E261 at least two spaces before inline comment -pymodbus/device.py:131:55: E261 at least two spaces before inline comment -pymodbus/device.py:132:55: E261 at least two spaces before inline comment -pymodbus/device.py:133:55: E261 at least two spaces before inline comment -pymodbus/device.py:134:55: E261 at least two spaces before inline comment -pymodbus/device.py:135:55: E261 at least two spaces before inline comment -pymodbus/device.py:136:55: E261 at least two spaces before inline comment -pymodbus/device.py:137:55: E261 at least two spaces before inline comment -pymodbus/device.py:138:55: E261 at least two spaces before inline comment -pymodbus/device.py:175:53: E225 missing whitespace around operator -pymodbus/device.py:273:15: E221 multiple spaces before operator -pymodbus/device.py:274:16: E221 multiple spaces before operator -pymodbus/device.py:275:23: E221 multiple spaces before operator -pymodbus/device.py:276:14: E221 multiple spaces before operator -pymodbus/device.py:277:16: E221 multiple spaces before operator -pymodbus/device.py:278:14: E221 multiple spaces before operator -pymodbus/device.py:289:80: E501 line too long (81 characters) -pymodbus/device.py:290:80: E501 line too long (81 characters) -pymodbus/device.py:289:45: E231 missing whitespace after ',' -pymodbus/device.py:289:47: E231 missing whitespace after ',' -pymodbus/device.py:290:45: E231 missing whitespace after ',' -pymodbus/device.py:290:47: E231 missing whitespace after ',' -pymodbus/device.py:291:45: E231 missing whitespace after ',' -pymodbus/device.py:291:47: E231 missing whitespace after ',' -pymodbus/device.py:292:45: E231 missing whitespace after ',' -pymodbus/device.py:292:47: E231 missing whitespace after ',' -pymodbus/device.py:289:33: E272 multiple spaces before keyword -pymodbus/device.py:290:35: E272 multiple spaces before keyword -pymodbus/device.py:315:17: E201 whitespace after '{' -pymodbus/device.py:315:47: E202 whitespace before '}' -pymodbus/device.py:315:27: E231 missing whitespace after ':' -pymodbus/device.py:401:12: E221 multiple spaces before operator -pymodbus/device.py:442:25: E701 multiple statements on one line (colon) -pymodbus/device.py:449:15: E221 multiple spaces before operator -pymodbus/device.py:451:22: E221 multiple spaces before operator -pymodbus/device.py:452:17: E221 multiple spaces before operator -pymodbus/device.py:453:20: E221 multiple spaces before operator -pymodbus/device.py:454:13: E221 multiple spaces before operator -pymodbus/device.py:455:14: E221 multiple spaces before operator -pymodbus/device.py:456:24: E221 multiple spaces before operator -pymodbus/device.py:457:10: E221 multiple spaces before operator -pymodbus/device.py:478:11: E221 multiple spaces before operator -pymodbus/device.py:479:13: E221 multiple spaces before operator -pymodbus/device.py:527:12: E221 multiple spaces before operator -pymodbus/device.py:528:11: E221 multiple spaces before operator -pymodbus/device.py:529:9: E221 multiple spaces before operator -pymodbus/device.py:612:9: E126 continuation line over-indented for hanging indent -pymodbus/diag_message.py:135:80: E501 line too long (81 characters) -pymodbus/diag_message.py:174:13: E701 multiple statements on one line (colon) -pymodbus/diag_message.py:200:13: E701 multiple statements on one line (colon) -pymodbus/diag_message.py:224:25: E221 multiple spaces before operator -pymodbus/diag_message.py:225:13: E701 multiple statements on one line (colon) -pymodbus/diag_message.py:254:25: E221 multiple spaces before operator -pymodbus/diag_message.py:255:13: E701 multiple statements on one line (colon) -pymodbus/diag_message.py:349:19: E221 multiple spaces before operator -pymodbus/diag_message.py:593:80: E501 line too long (80 characters) -pymodbus/diag_message.py:596:80: E501 line too long (80 characters) -pymodbus/diag_message.py:612:80: E501 line too long (82 characters) -pymodbus/diag_message.py:615:80: E501 line too long (80 characters) -pymodbus/diag_message.py:702:23: E261 at least two spaces before inline comment -pymodbus/diag_message.py:705:13: E701 multiple statements on one line (colon) -pymodbus/diag_message.py:725:80: E501 line too long (80 characters) -pymodbus/diag_message.py:731:80: E501 line too long (90 characters) -pymodbus/diag_message.py:732:80: E501 line too long (82 characters) -pymodbus/diag_message.py:737:80: E501 line too long (96 characters) -pymodbus/events.py:54:21: E221 multiple spaces before operator -pymodbus/events.py:55:20: E221 multiple spaces before operator -pymodbus/events.py:63:13: E221 multiple spaces before operator -pymodbus/events.py:74:21: E221 multiple spaces before operator -pymodbus/events.py:75:20: E221 multiple spaces before operator -pymodbus/events.py:105:18: E221 multiple spaces before operator -pymodbus/events.py:106:25: E221 multiple spaces before operator -pymodbus/events.py:107:24: E221 multiple spaces before operator -pymodbus/events.py:108:23: E221 multiple spaces before operator -pymodbus/events.py:110:20: E221 multiple spaces before operator -pymodbus/events.py:118:13: E128 continuation line under-indented for visual indent -pymodbus/events.py:119:13: E221 multiple spaces before operator -pymodbus/events.py:130:18: E221 multiple spaces before operator -pymodbus/events.py:131:25: E221 multiple spaces before operator -pymodbus/events.py:132:24: E221 multiple spaces before operator -pymodbus/events.py:133:23: E221 multiple spaces before operator -pymodbus/events.py:135:20: E221 multiple spaces before operator -pymodbus/factory.py:44:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:45:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:46:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:47:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:48:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:49:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:50:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:51:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:52:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:54:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:56:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:57:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:58:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:59:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:61:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:62:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:63:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:64:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:66:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:69:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:70:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:71:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:72:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:73:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:74:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:75:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:76:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:77:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:78:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:79:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:80:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:81:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:82:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:83:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:84:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:85:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:87:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:94:80: E501 line too long (83 characters) -pymodbus/factory.py:138:23: E701 multiple statements on one line (colon) -pymodbus/factory.py:152:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:153:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:154:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:155:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:156:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:157:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:158:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:159:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:160:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:162:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:164:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:165:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:166:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:167:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:169:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:170:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:171:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:172:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:174:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:177:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:178:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:179:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:180:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:181:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:182:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:183:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:184:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:185:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:186:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:187:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:188:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:189:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:190:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:191:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:192:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:193:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:195:13: E126 continuation line over-indented for hanging indent -pymodbus/factory.py:202:80: E501 line too long (83 characters) -pymodbus/factory.py:249:23: E701 multiple statements on one line (colon) -pymodbus/file_message.py:30:28: E221 multiple spaces before operator -pymodbus/file_message.py:31:25: E221 multiple spaces before operator -pymodbus/file_message.py:32:27: E221 multiple spaces before operator -pymodbus/file_message.py:33:25: E221 multiple spaces before operator -pymodbus/file_message.py:34:80: E501 line too long (87 characters) -pymodbus/file_message.py:34:27: E221 multiple spaces before operator -pymodbus/file_message.py:35:80: E501 line too long (87 characters) -pymodbus/file_message.py:41:12: E127 continuation line over-indented for visual indent -pymodbus/file_message.py:42:12: E127 continuation line over-indented for visual indent -pymodbus/file_message.py:43:12: E127 continuation line over-indented for visual indent -pymodbus/file_message.py:44:12: E127 continuation line over-indented for visual indent -pymodbus/file_message.py:41:32: E221 multiple spaces before operator -pymodbus/file_message.py:42:34: E221 multiple spaces before operator -pymodbus/file_message.py:43:34: E221 multiple spaces before operator -pymodbus/file_message.py:44:32: E221 multiple spaces before operator -pymodbus/file_message.py:92:21: E221 multiple spaces before operator -pymodbus/file_message.py:102:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:113:62: E225 missing whitespace around operator -pymodbus/file_message.py:115:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:114:19: E221 multiple spaces before operator -pymodbus/file_message.py:116:34: E701 multiple statements on one line (colon) -pymodbus/file_message.py:154:14: E221 multiple spaces before operator -pymodbus/file_message.py:169:80: E501 line too long (87 characters) -pymodbus/file_message.py:169:84: E225 missing whitespace around operator -pymodbus/file_message.py:170:41: E261 at least two spaces before inline comment -pymodbus/file_message.py:172:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:173:38: E701 multiple statements on one line (colon) -pymodbus/file_message.py:192:21: E221 multiple spaces before operator -pymodbus/file_message.py:199:80: E501 line too long (85 characters) -pymodbus/file_message.py:203:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:215:62: E225 missing whitespace around operator -pymodbus/file_message.py:217:18: E221 multiple spaces before operator -pymodbus/file_message.py:219:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:220:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:218:19: E221 multiple spaces before operator -pymodbus/file_message.py:221:34: E701 multiple statements on one line (colon) -pymodbus/file_message.py:248:21: E221 multiple spaces before operator -pymodbus/file_message.py:255:80: E501 line too long (85 characters) -pymodbus/file_message.py:259:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:271:62: E225 missing whitespace around operator -pymodbus/file_message.py:273:18: E221 multiple spaces before operator -pymodbus/file_message.py:275:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:276:17: E128 continuation line under-indented for visual indent -pymodbus/file_message.py:274:19: E221 multiple spaces before operator -pymodbus/file_message.py:277:34: E701 multiple statements on one line (colon) -pymodbus/file_message.py:298:21: E221 multiple spaces before operator -pymodbus/file_message.py:300:21: E221 multiple spaces before operator -pymodbus/file_message.py:331:80: E501 line too long (83 characters) -pymodbus/file_message.py:350:21: E221 multiple spaces before operator -pymodbus/file_message.py:352:21: E221 multiple spaces before operator -pymodbus/mei_message.py:43:13: E128 continuation line under-indented for visual indent -pymodbus/mei_message.py:66:13: E128 continuation line under-indented for visual indent -pymodbus/mei_message.py:91:17: E261 at least two spaces before inline comment -pymodbus/mei_message.py:94:69: E225 missing whitespace around operator -pymodbus/mei_message.py:108:31: E261 at least two spaces before inline comment -pymodbus/mei_message.py:111:35: E261 at least two spaces before inline comment -pymodbus/mei_message.py:120:13: E128 continuation line under-indented for visual indent -pymodbus/mei_message.py:121:13: E128 continuation line under-indented for visual indent -pymodbus/mei_message.py:138:40: E261 at least two spaces before inline comment -pymodbus/mei_message.py:141:80: E501 line too long (80 characters) -pymodbus/mei_message.py:141:77: E225 missing whitespace around operator -pymodbus/mei_message.py:143:53: E225 missing whitespace around operator -pymodbus/other_message.py:187:23: E701 multiple statements on one line (colon) -pymodbus/other_message.py:188:13: E701 multiple statements on one line (colon) -pymodbus/other_message.py:257:28: E203 whitespace before ':' -pymodbus/other_message.py:258:28: E203 whitespace before ':' -pymodbus/other_message.py:259:28: E203 whitespace before ':' -pymodbus/other_message.py:260:28: E203 whitespace before ':' -pymodbus/other_message.py:301:23: E701 multiple statements on one line (colon) -pymodbus/other_message.py:302:13: E701 multiple statements on one line (colon) -pymodbus/other_message.py:303:15: E221 multiple spaces before operator -pymodbus/other_message.py:329:80: E501 line too long (91 characters) -pymodbus/other_message.py:400:23: E701 multiple statements on one line (colon) -pymodbus/other_message.py:401:13: E701 multiple statements on one line (colon) -pymodbus/payload.py:36:21: E221 multiple spaces before operator -pymodbus/payload.py:61:27: E225 missing whitespace around operator -pymodbus/payload.py:186:21: E221 multiple spaces before operator -pymodbus/pdu.py:79:13: E701 multiple statements on one line (colon) -pymodbus/pdu.py:97:17: E128 continuation line under-indented for visual indent -pymodbus/pdu.py:129:20: E221 multiple spaces before operator -pymodbus/pdu.py:130:19: E221 multiple spaces before operator -pymodbus/pdu.py:131:17: E221 multiple spaces before operator -pymodbus/pdu.py:132:17: E221 multiple spaces before operator -pymodbus/pdu.py:133:16: E221 multiple spaces before operator -pymodbus/pdu.py:134:14: E221 multiple spaces before operator -pymodbus/pdu.py:135:22: E221 multiple spaces before operator -pymodbus/pdu.py:136:27: E221 multiple spaces before operator -pymodbus/pdu.py:137:22: E221 multiple spaces before operator -pymodbus/register_read_message.py:128:80: E501 line too long (80 characters) -pymodbus/register_read_message.py:178:80: E501 line too long (80 characters) -pymodbus/register_read_message.py:226:26: E221 multiple spaces before operator -pymodbus/register_read_message.py:227:24: E221 multiple spaces before operator -pymodbus/register_read_message.py:228:27: E221 multiple spaces before operator -pymodbus/register_read_message.py:241:17: E128 continuation line under-indented for visual indent -pymodbus/register_read_message.py:242:17: E128 continuation line under-indented for visual indent -pymodbus/register_read_message.py:241:54: E502 the backslash is redundant between brackets -pymodbus/register_read_message.py:253:9: E122 continuation line missing indentation or outdented -pymodbus/register_read_message.py:254:9: E122 continuation line missing indentation or outdented -pymodbus/register_read_message.py:255:29: E221 multiple spaces before operator -pymodbus/register_write_message.py:133:22: E701 multiple statements on one line (colon) -pymodbus/register_write_message.py:134:45: E701 multiple statements on one line (colon) -pymodbus/register_write_message.py:155:9: E122 continuation line missing indentation or outdented -pymodbus/transaction.py:9:24: E272 multiple spaces before keyword -pymodbus/transaction.py:11:24: E272 multiple spaces before keyword -pymodbus/transaction.py:12:24: E272 multiple spaces before keyword -pymodbus/transaction.py:66:80: E501 line too long (85 characters) -pymodbus/transaction.py:67:22: E702 multiple statements on one line (semicolon) -pymodbus/transaction.py:146:31: E231 missing whitespace after ':' -pymodbus/transaction.py:146:40: E231 missing whitespace after ':' -pymodbus/transaction.py:146:49: E231 missing whitespace after ':' -pymodbus/transaction.py:146:58: E231 missing whitespace after ':' -pymodbus/transaction.py:147:21: E221 multiple spaces before operator -pymodbus/transaction.py:148:21: E221 multiple spaces before operator -pymodbus/transaction.py:159:13: E122 continuation line missing indentation or outdented -pymodbus/transaction.py:160:21: E126 continuation line over-indented for hanging indent -pymodbus/transaction.py:179:31: E231 missing whitespace after ':' -pymodbus/transaction.py:179:40: E231 missing whitespace after ':' -pymodbus/transaction.py:179:49: E231 missing whitespace after ':' -pymodbus/transaction.py:179:58: E231 missing whitespace after ':' -pymodbus/transaction.py:244:17: E701 multiple statements on one line (colon) -pymodbus/transaction.py:253:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:254:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:255:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:305:21: E221 multiple spaces before operator -pymodbus/transaction.py:306:19: E221 multiple spaces before operator -pymodbus/transaction.py:308:21: E221 multiple spaces before operator -pymodbus/transaction.py:380:14: E221 multiple spaces before operator -pymodbus/transaction.py:381:12: E221 multiple spaces before operator -pymodbus/transaction.py:383:19: E701 multiple statements on one line (colon) -pymodbus/transaction.py:423:17: E701 multiple statements on one line (colon) -pymodbus/transaction.py:432:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:433:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:463:31: E231 missing whitespace after ':' -pymodbus/transaction.py:463:45: E231 missing whitespace after ':' -pymodbus/transaction.py:463:54: E231 missing whitespace after ':' -pymodbus/transaction.py:464:21: E221 multiple spaces before operator -pymodbus/transaction.py:465:21: E221 multiple spaces before operator -pymodbus/transaction.py:466:19: E221 multiple spaces before operator -pymodbus/transaction.py:467:21: E221 multiple spaces before operator -pymodbus/transaction.py:478:23: E701 multiple statements on one line (colon) -pymodbus/transaction.py:479:21: E203 whitespace before ':' -pymodbus/transaction.py:499:31: E231 missing whitespace after ':' -pymodbus/transaction.py:499:45: E231 missing whitespace after ':' -pymodbus/transaction.py:499:54: E231 missing whitespace after ':' -pymodbus/transaction.py:524:14: E221 multiple spaces before operator -pymodbus/transaction.py:525:12: E221 multiple spaces before operator -pymodbus/transaction.py:527:19: E701 multiple statements on one line (colon) -pymodbus/transaction.py:567:17: E701 multiple statements on one line (colon) -pymodbus/transaction.py:576:16: E221 multiple spaces before operator -pymodbus/transaction.py:577:15: E221 multiple spaces before operator -pymodbus/transaction.py:620:31: E231 missing whitespace after ':' -pymodbus/transaction.py:620:45: E231 missing whitespace after ':' -pymodbus/transaction.py:620:54: E231 missing whitespace after ':' -pymodbus/transaction.py:621:21: E221 multiple spaces before operator -pymodbus/transaction.py:622:21: E221 multiple spaces before operator -pymodbus/transaction.py:623:19: E221 multiple spaces before operator -pymodbus/transaction.py:624:21: E221 multiple spaces before operator -pymodbus/transaction.py:635:23: E701 multiple statements on one line (colon) -pymodbus/transaction.py:636:21: E203 whitespace before ':' -pymodbus/transaction.py:643:80: E501 line too long (85 characters) -pymodbus/transaction.py:655:31: E231 missing whitespace after ':' -pymodbus/transaction.py:655:45: E231 missing whitespace after ':' -pymodbus/transaction.py:655:54: E231 missing whitespace after ':' -pymodbus/transaction.py:680:14: E221 multiple spaces before operator -pymodbus/transaction.py:681:12: E221 multiple spaces before operator -pymodbus/transaction.py:683:19: E701 multiple statements on one line (colon) -pymodbus/transaction.py:723:17: E701 multiple statements on one line (colon) -pymodbus/transaction.py:733:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:734:13: E128 continuation line under-indented for visual indent -pymodbus/transaction.py:749:31: E701 multiple statements on one line (colon) -pymodbus/transaction.py:750:17: E701 multiple statements on one line (colon) -pymodbus/utilities.py:64:15: E701 multiple statements on one line (colon) -pymodbus/utilities.py:69:13: E701 multiple statements on one line (colon) -pymodbus/utilities.py:110:17: E701 multiple statements on one line (colon) -pymodbus/utilities.py:131:51: E702 multiple statements on one line (semicolon) -pymodbus/client/async.py:115:17: E701 multiple statements on one line (colon) -pymodbus/client/async.py:130:32: E261 at least two spaces before inline comment -pymodbus/client/async.py:187:17: E701 multiple statements on one line (colon) -pymodbus/client/async.py:198:32: E261 at least two spaces before inline comment -pymodbus/client/sync.py:47:80: E501 line too long (80 characters) -pymodbus/client/sync.py:60:80: E501 line too long (80 characters) -pymodbus/client/sync.py:68:80: E501 line too long (80 characters) -pymodbus/client/sync.py:79:80: E501 line too long (81 characters) -pymodbus/client/sync.py:93:80: E501 line too long (81 characters) -pymodbus/client/sync.py:137:23: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:139:80: E501 line too long (92 characters) -pymodbus/client/sync.py:143:17: E128 continuation line under-indented for visual indent -pymodbus/client/sync.py:142:65: E502 the backslash is redundant between brackets -pymodbus/client/sync.py:145:28: E711 comparison to None should be 'if cond is not None:' -pymodbus/client/sync.py:212:29: E261 at least two spaces before inline comment -pymodbus/client/sync.py:221:23: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:228:28: E711 comparison to None should be 'if cond is not None:' -pymodbus/client/sync.py:289:20: E221 multiple spaces before operator -pymodbus/client/sync.py:290:20: E221 multiple spaces before operator -pymodbus/client/sync.py:293:18: E221 multiple spaces before operator -pymodbus/client/sync.py:296:20: E221 multiple spaces before operator -pymodbus/client/sync.py:298:21: E221 multiple spaces before operator -pymodbus/client/sync.py:308:31: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:308:32: E272 multiple spaces before keyword -pymodbus/client/sync.py:309:29: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:309:30: E272 multiple spaces before keyword -pymodbus/client/sync.py:310:32: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:318:23: E701 multiple statements on one line (colon) -pymodbus/client/sync.py:321:17: E128 continuation line under-indented for visual indent -pymodbus/client/sync.py:322:17: E128 continuation line under-indented for visual indent -pymodbus/client/sync.py:326:28: E711 comparison to None should be 'if cond is not None:' -pymodbus/server/async.py:218:5: E128 continuation line under-indented for visual indent -pymodbus/server/async.py:218:5: E125 continuation line does not distinguish itself from next logical line -pymodbus/server/async.py:236:43: E261 at least two spaces before inline comment -pymodbus/server/sync.py:78:80: E501 line too long (81 characters) -pymodbus/server/sync.py:80:80: E501 line too long (81 characters) -pymodbus/server/sync.py:84:80: E501 line too long (80 characters) -pymodbus/server/sync.py:91:80: E501 line too long (80 characters) -pymodbus/server/sync.py:110:34: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:113:19: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:140:28: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:144:34: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:148:19: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:177:28: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:181:34: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:185:19: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:224:30: E272 multiple spaces before keyword -pymodbus/server/sync.py:224:20: E221 multiple spaces before operator -pymodbus/server/sync.py:232:13: E128 continuation line under-indented for visual indent -pymodbus/server/sync.py:248:35: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:273:30: E272 multiple spaces before keyword -pymodbus/server/sync.py:273:20: E221 multiple spaces before operator -pymodbus/server/sync.py:281:13: E128 continuation line under-indented for visual indent -pymodbus/server/sync.py:289:33: E261 at least two spaces before inline comment -pymodbus/server/sync.py:298:35: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:329:30: E272 multiple spaces before keyword -pymodbus/server/sync.py:329:20: E221 multiple spaces before operator -pymodbus/server/sync.py:336:20: E221 multiple spaces before operator -pymodbus/server/sync.py:339:20: E221 multiple spaces before operator -pymodbus/server/sync.py:341:21: E221 multiple spaces before operator -pymodbus/server/sync.py:342:20: E221 multiple spaces before operator -pymodbus/server/sync.py:350:23: E701 multiple statements on one line (colon) -pymodbus/server/sync.py:353:17: E128 continuation line under-indented for visual indent -pymodbus/server/sync.py:354:17: E128 continuation line under-indented for visual indent -pymodbus/server/sync.py:358:28: E711 comparison to None should be 'if cond is not None:' -pymodbus/server/sync.py:370:13: E128 continuation line under-indented for visual indent -pymodbus/server/sync.py:381:19: E701 multiple statements on one line (colon) -pymodbus/internal/ptwisted.py:53:15: E701 multiple statements on one line (colon) -pymodbus/datastore/context.py:9:15: E702 multiple statements on one line (semicolon) -pymodbus/datastore/context.py:101:20: E221 multiple spaces before operator -pymodbus/datastore/context.py:128:23: E701 multiple statements on one line (colon) -pymodbus/datastore/context.py:131:13: E701 multiple statements on one line (colon) -pymodbus/datastore/context.py:139:23: E701 multiple statements on one line (colon) -pymodbus/datastore/context.py:142:80: E501 line too long (82 characters) -pymodbus/datastore/context.py:142:13: E701 multiple statements on one line (colon) -pymodbus/datastore/database.py:13:15: E702 multiple statements on one line (semicolon) -pymodbus/datastore/database.py:83:80: E501 line too long (80 characters) -pymodbus/datastore/database.py:85:80: E501 line too long (80 characters) -pymodbus/datastore/database.py:95:13: E128 continuation line under-indented for visual indent -pymodbus/datastore/database.py:110:14: E221 multiple spaces before operator -pymodbus/datastore/database.py:128:28: E203 whitespace before ':' -pymodbus/datastore/database.py:129:28: E203 whitespace before ':' -pymodbus/datastore/database.py:130:28: E203 whitespace before ':' -pymodbus/datastore/database.py:142:14: E221 multiple spaces before operator -pymodbus/datastore/database.py:143:15: E221 multiple spaces before operator -pymodbus/datastore/database.py:154:14: E221 multiple spaces before operator -pymodbus/datastore/database.py:155:14: E221 multiple spaces before operator -pymodbus/datastore/database.py:156:31: E221 multiple spaces before operator -pymodbus/datastore/database.py:158:15: E221 multiple spaces before operator -pymodbus/datastore/database.py:168:14: E221 multiple spaces before operator -pymodbus/datastore/modredis.py:8:15: E702 multiple statements on one line (semicolon) -pymodbus/datastore/modredis.py:80:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:82:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:97:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:98:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:99:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:100:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:103:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:104:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:105:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:106:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:109:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:110:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:111:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:112:16: E203 whitespace before ':' -pymodbus/datastore/modredis.py:115:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:117:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:118:15: E221 multiple spaces before operator -pymodbus/datastore/modredis.py:132:16: E221 multiple spaces before operator -pymodbus/datastore/modredis.py:176:80: E501 line too long (92 characters) -pymodbus/datastore/modredis.py:176:14: E221 multiple spaces before operator -pymodbus/datastore/modredis.py:183:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:185:80: E501 line too long (80 characters) -pymodbus/datastore/modredis.py:186:15: E221 multiple spaces before operator -pymodbus/datastore/modredis.py:201:16: E221 multiple spaces before operator -pymodbus/datastore/remote.py:98:32: E701 multiple statements on one line (colon) -pymodbus/datastore/remote.py:99:32: E701 multiple statements on one line (colon) -pymodbus/datastore/remote.py:100:13: E701 multiple statements on one line (colon) -pymodbus/datastore/store.py:144:13: E701 multiple statements on one line (colon) -pymodbus/datastore/store.py:163:15: E221 multiple spaces before operator -pymodbus/datastore/store.py:204:13: E701 multiple statements on one line (colon) -pymodbus/datastore/store.py:216:44: E225 missing whitespace around operator -pymodbus/datastore/store.py:225:22: E701 multiple statements on one line (colon) -4 E122 continuation line missing indentation or outdented -1 E125 continuation line does not distinguish itself from next logical line -77 E126 continuation line over-indented for hanging indent -4 E127 continuation line over-indented for visual indent -34 E128 continuation line under-indented for visual indent -1 E201 whitespace after '{' -1 E202 whitespace before '}' -68 E203 whitespace before ':' -154 E221 multiple spaces before operator -10 E225 missing whitespace around operator -29 E231 missing whitespace after ',' -26 E261 at least two spaces before inline comment -10 E272 multiple spaces before keyword -47 E501 line too long (80 characters) -2 E502 the backslash is redundant between brackets -72 E701 multiple statements on one line (colon) -5 E702 multiple statements on one line (semicolon) -4 E711 comparison to None should be 'if cond is not None:' diff --git a/doc/readme.rst b/doc/readme.rst new file mode 100644 index 000000000..6b2b3ec68 --- /dev/null +++ b/doc/readme.rst @@ -0,0 +1 @@ +.. include:: ../README.rst \ No newline at end of file diff --git a/doc/source/example/asynchronous_client.rst b/doc/source/example/asynchronous_client.rst new file mode 100644 index 000000000..c9a0b03e1 --- /dev/null +++ b/doc/source/example/asynchronous_client.rst @@ -0,0 +1,4 @@ +================================================== +Asynchronous Client Example +================================================== +.. literalinclude:: ../../../examples/common/asynchronous_client.py \ No newline at end of file diff --git a/doc/source/example/asynchronous_processor.rst b/doc/source/example/asynchronous_processor.rst new file mode 100644 index 000000000..b5b5ffd76 --- /dev/null +++ b/doc/source/example/asynchronous_processor.rst @@ -0,0 +1,4 @@ +================================================== +Asynchronous Processor Example +================================================== +.. literalinclude:: ../../../examples/common/asynchronous_processor.py \ No newline at end of file diff --git a/doc/sphinx/examples/asynchronous-server.rst b/doc/source/example/asynchronous_server.rst similarity index 65% rename from doc/sphinx/examples/asynchronous-server.rst rename to doc/source/example/asynchronous_server.rst index 14aeef298..7b66a52bf 100644 --- a/doc/sphinx/examples/asynchronous-server.rst +++ b/doc/source/example/asynchronous_server.rst @@ -1,6 +1,4 @@ ================================================== Asynchronous Server Example ================================================== - -.. literalinclude:: ../../../examples/common/asynchronous-server.py - +.. literalinclude:: ../../../examples/common/asynchronous_server.py \ No newline at end of file diff --git a/doc/sphinx/html/_sources/examples/custom-message.rst.txt b/doc/source/example/bcd_payload.rst similarity index 53% rename from doc/sphinx/html/_sources/examples/custom-message.rst.txt rename to doc/source/example/bcd_payload.rst index 2ced10cbc..a1c9a2c23 100644 --- a/doc/sphinx/html/_sources/examples/custom-message.rst.txt +++ b/doc/source/example/bcd_payload.rst @@ -1,6 +1,4 @@ ================================================== -Custom Message Example +Bcd Payload Example ================================================== - -.. literalinclude:: ../../../examples/common/custom-message.py - +.. literalinclude:: ../../../examples/contrib/bcd_payload.py \ No newline at end of file diff --git a/doc/sphinx/examples/callback-server.rst b/doc/source/example/callback_server.rst similarity index 65% rename from doc/sphinx/examples/callback-server.rst rename to doc/source/example/callback_server.rst index e57475216..2dff5d612 100644 --- a/doc/sphinx/examples/callback-server.rst +++ b/doc/source/example/callback_server.rst @@ -1,6 +1,4 @@ ================================================== Callback Server Example ================================================== - -.. literalinclude:: ../../../examples/common/callback-server.py - +.. literalinclude:: ../../../examples/common/callback_server.py \ No newline at end of file diff --git a/doc/sphinx/examples/modbus-scraper.rst b/doc/source/example/changing_framers.rst similarity index 53% rename from doc/sphinx/examples/modbus-scraper.rst rename to doc/source/example/changing_framers.rst index 9931c4a62..1b2b372a1 100644 --- a/doc/sphinx/examples/modbus-scraper.rst +++ b/doc/source/example/changing_framers.rst @@ -1,6 +1,4 @@ ================================================== -Modbus Scraper Example +Changing Framers Example ================================================== - -.. literalinclude:: ../../../examples/contrib/modbus-scraper.py - +.. literalinclude:: ../../../examples/common/changing_framers.py \ No newline at end of file diff --git a/doc/sphinx/examples/bcd-payload.rst b/doc/source/example/concurrent_client.rst similarity index 52% rename from doc/sphinx/examples/bcd-payload.rst rename to doc/source/example/concurrent_client.rst index a95c5e7a6..235c91c47 100644 --- a/doc/sphinx/examples/bcd-payload.rst +++ b/doc/source/example/concurrent_client.rst @@ -1,6 +1,4 @@ ================================================== -Binary Coded Decimal Example +Concurrent Client Example ================================================== - -.. literalinclude:: ../../../examples/contrib/bcd-payload.py - +.. literalinclude:: ../../../examples/contrib/concurrent_client.py \ No newline at end of file diff --git a/doc/sphinx/examples/custom-datablock.rst b/doc/source/example/custom_datablock.rst similarity index 65% rename from doc/sphinx/examples/custom-datablock.rst rename to doc/source/example/custom_datablock.rst index 7139c0f08..21b9dc27a 100644 --- a/doc/sphinx/examples/custom-datablock.rst +++ b/doc/source/example/custom_datablock.rst @@ -1,6 +1,4 @@ ================================================== Custom Datablock Example ================================================== - -.. literalinclude:: ../../../examples/common/custom-datablock.py - +.. literalinclude:: ../../../examples/common/custom_datablock.py \ No newline at end of file diff --git a/doc/sphinx/examples/custom-message.rst b/doc/source/example/custom_message.rst similarity index 65% rename from doc/sphinx/examples/custom-message.rst rename to doc/source/example/custom_message.rst index 2ced10cbc..069d33101 100644 --- a/doc/sphinx/examples/custom-message.rst +++ b/doc/source/example/custom_message.rst @@ -1,6 +1,4 @@ ================================================== Custom Message Example ================================================== - -.. literalinclude:: ../../../examples/common/custom-message.py - +.. literalinclude:: ../../../examples/common/custom_message.py \ No newline at end of file diff --git a/doc/source/example/dbstore_update_server.rst b/doc/source/example/dbstore_update_server.rst new file mode 100644 index 000000000..1e27abd56 --- /dev/null +++ b/doc/source/example/dbstore_update_server.rst @@ -0,0 +1,4 @@ +================================================== +Dbstore Update Server Example +================================================== +.. literalinclude:: ../../../examples/common/dbstore_update_server.py \ No newline at end of file diff --git a/doc/sphinx/html/_sources/examples/modbus-logging.rst.txt b/doc/source/example/gui_common.rst similarity index 53% rename from doc/sphinx/html/_sources/examples/modbus-logging.rst.txt rename to doc/source/example/gui_common.rst index 710e5bd4d..ec177a635 100644 --- a/doc/sphinx/html/_sources/examples/modbus-logging.rst.txt +++ b/doc/source/example/gui_common.rst @@ -1,6 +1,4 @@ ================================================== -Modbus Logging Example +Gui Common Example ================================================== - -.. literalinclude:: ../../../examples/common/modbus-logging.py - +.. literalinclude:: ../../../examples/gui/gui_common.py \ No newline at end of file diff --git a/doc/source/example/libmodbus_client.rst b/doc/source/example/libmodbus_client.rst new file mode 100644 index 000000000..b68ed1045 --- /dev/null +++ b/doc/source/example/libmodbus_client.rst @@ -0,0 +1,4 @@ +================================================== +Libmodbus Client Example +================================================== +.. literalinclude:: ../../../examples/contrib/libmodbus_client.py \ No newline at end of file diff --git a/doc/sphinx/examples/changing-framers.rst b/doc/source/example/message_generator.rst similarity index 52% rename from doc/sphinx/examples/changing-framers.rst rename to doc/source/example/message_generator.rst index 3679aa43f..0a06b5953 100644 --- a/doc/sphinx/examples/changing-framers.rst +++ b/doc/source/example/message_generator.rst @@ -1,6 +1,4 @@ ================================================== -Changing Default Framers +Message Generator Example ================================================== - -.. literalinclude:: ../../../examples/common/changing-framers.py - +.. literalinclude:: ../../../examples/contrib/message_generator.py \ No newline at end of file diff --git a/doc/source/example/message_parser.rst b/doc/source/example/message_parser.rst new file mode 100644 index 000000000..f5aa06c9b --- /dev/null +++ b/doc/source/example/message_parser.rst @@ -0,0 +1,4 @@ +================================================== +Message Parser Example +================================================== +.. literalinclude:: ../../../examples/contrib/message_parser.py \ No newline at end of file diff --git a/doc/sphinx/examples/modbus-logging.rst b/doc/source/example/modbus_logging.rst similarity index 65% rename from doc/sphinx/examples/modbus-logging.rst rename to doc/source/example/modbus_logging.rst index 710e5bd4d..2c548c985 100644 --- a/doc/sphinx/examples/modbus-logging.rst +++ b/doc/source/example/modbus_logging.rst @@ -1,6 +1,4 @@ ================================================== Modbus Logging Example ================================================== - -.. literalinclude:: ../../../examples/common/modbus-logging.py - +.. literalinclude:: ../../../examples/common/modbus_logging.py \ No newline at end of file diff --git a/doc/source/example/modbus_mapper.rst b/doc/source/example/modbus_mapper.rst new file mode 100644 index 000000000..18b92c504 --- /dev/null +++ b/doc/source/example/modbus_mapper.rst @@ -0,0 +1,4 @@ +================================================== +Modbus Mapper Example +================================================== +.. literalinclude:: ../../../examples/contrib/modbus_mapper.py \ No newline at end of file diff --git a/doc/source/example/modbus_payload.rst b/doc/source/example/modbus_payload.rst new file mode 100644 index 000000000..4b0861ecb --- /dev/null +++ b/doc/source/example/modbus_payload.rst @@ -0,0 +1,4 @@ +================================================== +Modbus Payload Example +================================================== +.. literalinclude:: ../../../examples/common/modbus_payload.py \ No newline at end of file diff --git a/doc/source/example/modbus_payload_server.rst b/doc/source/example/modbus_payload_server.rst new file mode 100644 index 000000000..e9ba210cb --- /dev/null +++ b/doc/source/example/modbus_payload_server.rst @@ -0,0 +1,4 @@ +================================================== +Modbus Payload Server Example +================================================== +.. literalinclude:: ../../../examples/common/modbus_payload_server.py \ No newline at end of file diff --git a/doc/source/example/modbus_saver.rst b/doc/source/example/modbus_saver.rst new file mode 100644 index 000000000..bdba22817 --- /dev/null +++ b/doc/source/example/modbus_saver.rst @@ -0,0 +1,4 @@ +================================================== +Modbus Saver Example +================================================== +.. literalinclude:: ../../../examples/contrib/modbus_saver.py \ No newline at end of file diff --git a/doc/sphinx/html/_sources/examples/modbus-scraper.rst.txt b/doc/source/example/modbus_scraper.rst similarity index 65% rename from doc/sphinx/html/_sources/examples/modbus-scraper.rst.txt rename to doc/source/example/modbus_scraper.rst index 9931c4a62..5bf9ccea9 100644 --- a/doc/sphinx/html/_sources/examples/modbus-scraper.rst.txt +++ b/doc/source/example/modbus_scraper.rst @@ -1,6 +1,4 @@ ================================================== Modbus Scraper Example ================================================== - -.. literalinclude:: ../../../examples/contrib/modbus-scraper.py - +.. literalinclude:: ../../../examples/contrib/modbus_scraper.py \ No newline at end of file diff --git a/doc/sphinx/examples/modbus-simulator.rst b/doc/source/example/modbus_simulator.rst similarity index 65% rename from doc/sphinx/examples/modbus-simulator.rst rename to doc/source/example/modbus_simulator.rst index 5adcee5ee..d6883f030 100644 --- a/doc/sphinx/examples/modbus-simulator.rst +++ b/doc/source/example/modbus_simulator.rst @@ -1,5 +1,4 @@ ================================================== Modbus Simulator Example ================================================== - -.. literalinclude:: ../../../examples/contrib/modbus-simulator.py +.. literalinclude:: ../../../examples/contrib/modbus_simulator.py \ No newline at end of file diff --git a/doc/source/example/modicon_payload.rst b/doc/source/example/modicon_payload.rst new file mode 100644 index 000000000..ac0cb4d2c --- /dev/null +++ b/doc/source/example/modicon_payload.rst @@ -0,0 +1,4 @@ +================================================== +Modicon Payload Example +================================================== +.. literalinclude:: ../../../examples/contrib/modicon_payload.py \ No newline at end of file diff --git a/doc/source/example/modules.rst b/doc/source/example/modules.rst new file mode 100644 index 000000000..6d6460349 --- /dev/null +++ b/doc/source/example/modules.rst @@ -0,0 +1,39 @@ +=================== +Examples +=================== +=== + +.. toctree:: + :maxdepth: 4 + + asynchronous_client + asynchronous_processor + asynchronous_server + callback_server + changing_framers + custom_datablock + custom_message + dbstore_update_server + modbus_logging + modbus_payload + modbus_payload_server + performance + synchronous_client + synchronous_client_ext + synchronous_server + updating_server + bcd_payload + concurrent_client + libmodbus_client + message_generator + message_parser + modbus_mapper + modbus_saver + modbus_scraper + modbus_simulator + modicon_payload + remote_server_context + serial_forwarder + sunspec_client + thread_safe_datastore + gui_common diff --git a/doc/source/example/performance.rst b/doc/source/example/performance.rst new file mode 100644 index 000000000..86cef1169 --- /dev/null +++ b/doc/source/example/performance.rst @@ -0,0 +1,4 @@ +================== +performance module +================== +.. literalinclude:: ../../../examples/common/performance.py diff --git a/doc/sphinx/examples/remote-server-context.rst b/doc/source/example/remote_server_context.rst similarity index 81% rename from doc/sphinx/examples/remote-server-context.rst rename to doc/source/example/remote_server_context.rst index 2a2ac3c05..0450e6ef6 100644 --- a/doc/sphinx/examples/remote-server-context.rst +++ b/doc/source/example/remote_server_context.rst @@ -1,6 +1,4 @@ ================================================== -Remote Single Server Context +Remote Server Context Example ================================================== - -.. literalinclude:: ../../../examples/contrib/remote_server_context.py - +.. literalinclude:: ../../../examples/contrib/remote_server_context.py \ No newline at end of file diff --git a/doc/source/example/serial_forwarder.rst b/doc/source/example/serial_forwarder.rst new file mode 100644 index 000000000..1a8fba691 --- /dev/null +++ b/doc/source/example/serial_forwarder.rst @@ -0,0 +1,4 @@ +================================================== +Serial Forwarder Example +================================================== +.. literalinclude:: ../../../examples/contrib/serial_forwarder.py \ No newline at end of file diff --git a/doc/source/example/sunspec_client.rst b/doc/source/example/sunspec_client.rst new file mode 100644 index 000000000..48b284b97 --- /dev/null +++ b/doc/source/example/sunspec_client.rst @@ -0,0 +1,4 @@ +================================================== +Sunspec Client Example +================================================== +.. literalinclude:: ../../../examples/contrib/sunspec_client.py \ No newline at end of file diff --git a/doc/source/example/synchronous_client.rst b/doc/source/example/synchronous_client.rst new file mode 100644 index 000000000..6df8cc562 --- /dev/null +++ b/doc/source/example/synchronous_client.rst @@ -0,0 +1,4 @@ +================================================== +Synchronous Client Example +================================================== +.. literalinclude:: ../../../examples/common/synchronous_client.py \ No newline at end of file diff --git a/doc/source/example/synchronous_client_ext.rst b/doc/source/example/synchronous_client_ext.rst new file mode 100644 index 000000000..c26074cf5 --- /dev/null +++ b/doc/source/example/synchronous_client_ext.rst @@ -0,0 +1,4 @@ +================================================== +Synchronous Client Ext Example +================================================== +.. literalinclude:: ../../../examples/common/synchronous_client_ext.py \ No newline at end of file diff --git a/doc/sphinx/examples/synchronous-server.rst b/doc/source/example/synchronous_server.rst similarity index 65% rename from doc/sphinx/examples/synchronous-server.rst rename to doc/source/example/synchronous_server.rst index 1db715d7f..15f0db3d9 100644 --- a/doc/sphinx/examples/synchronous-server.rst +++ b/doc/source/example/synchronous_server.rst @@ -1,6 +1,4 @@ ================================================== Synchronous Server Example ================================================== - -.. literalinclude:: ../../../examples/common/synchronous-server.py - +.. literalinclude:: ../../../examples/common/synchronous_server.py \ No newline at end of file diff --git a/doc/sphinx/examples/thread-safe-datastore.rst b/doc/source/example/thread_safe_datastore.rst similarity index 95% rename from doc/sphinx/examples/thread-safe-datastore.rst rename to doc/source/example/thread_safe_datastore.rst index 7a965a3f4..f4414be0a 100644 --- a/doc/sphinx/examples/thread-safe-datastore.rst +++ b/doc/source/example/thread_safe_datastore.rst @@ -1,6 +1,4 @@ ================================================== Thread Safe Datastore Example ================================================== - -.. literalinclude:: ../../../examples/contrib/thread_safe_datastore.py - +.. literalinclude:: ../../../examples/contrib/thread_safe_datastore.py \ No newline at end of file diff --git a/doc/sphinx/html/_sources/examples/updating-server.rst.txt b/doc/source/example/updating_server.rst similarity index 65% rename from doc/sphinx/html/_sources/examples/updating-server.rst.txt rename to doc/source/example/updating_server.rst index 07d1baac0..d7fbcafcc 100644 --- a/doc/sphinx/html/_sources/examples/updating-server.rst.txt +++ b/doc/source/example/updating_server.rst @@ -1,6 +1,4 @@ ================================================== Updating Server Example ================================================== - -.. literalinclude:: ../../../examples/common/updating-server.py - +.. literalinclude:: ../../../examples/common/updating_server.py \ No newline at end of file diff --git a/doc/source/library/modules.rst b/doc/source/library/modules.rst new file mode 100644 index 000000000..f36970d42 --- /dev/null +++ b/doc/source/library/modules.rst @@ -0,0 +1,7 @@ +Pymodbus +======== + +.. toctree:: + :maxdepth: 4 + + pymodbus diff --git a/doc/source/library/pymodbus.client.rst b/doc/source/library/pymodbus.client.rst new file mode 100644 index 000000000..391658189 --- /dev/null +++ b/doc/source/library/pymodbus.client.rst @@ -0,0 +1,38 @@ +pymodbus\.client package +======================== + +Submodules +---------- + +pymodbus\.client\.async module +------------------------------ + +.. automodule:: pymodbus.client.async + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.client\.common module +------------------------------- + +.. automodule:: pymodbus.client.common + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.client\.sync module +----------------------------- + +.. automodule:: pymodbus.client.sync + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus.client + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/source/library/pymodbus.datastore.database.rst b/doc/source/library/pymodbus.datastore.database.rst new file mode 100644 index 000000000..d0321e6d5 --- /dev/null +++ b/doc/source/library/pymodbus.datastore.database.rst @@ -0,0 +1,30 @@ +pymodbus\.datastore\.database package +===================================== + +Submodules +---------- + +pymodbus\.datastore\.database\.redis\_datastore module +------------------------------------------------------ + +.. automodule:: pymodbus.datastore.database.redis_datastore + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.datastore\.database\.sql\_datastore module +---------------------------------------------------- + +.. automodule:: pymodbus.datastore.database.sql_datastore + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus.datastore.database + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/source/library/pymodbus.datastore.rst b/doc/source/library/pymodbus.datastore.rst new file mode 100644 index 000000000..2aa8a3b93 --- /dev/null +++ b/doc/source/library/pymodbus.datastore.rst @@ -0,0 +1,45 @@ +pymodbus\.datastore package +=========================== + +Subpackages +----------- + +.. toctree:: + + pymodbus.datastore.database + +Submodules +---------- + +pymodbus\.datastore\.context module +----------------------------------- + +.. automodule:: pymodbus.datastore.context + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.datastore\.remote module +---------------------------------- + +.. automodule:: pymodbus.datastore.remote + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.datastore\.store module +--------------------------------- + +.. automodule:: pymodbus.datastore.store + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus.datastore + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/source/library/pymodbus.internal.rst b/doc/source/library/pymodbus.internal.rst new file mode 100644 index 000000000..35467c8a5 --- /dev/null +++ b/doc/source/library/pymodbus.internal.rst @@ -0,0 +1,22 @@ +pymodbus\.internal package +========================== + +Submodules +---------- + +pymodbus\.internal\.ptwisted module +----------------------------------- + +.. automodule:: pymodbus.internal.ptwisted + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus.internal + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/source/library/pymodbus.rst b/doc/source/library/pymodbus.rst new file mode 100644 index 000000000..9517ad686 --- /dev/null +++ b/doc/source/library/pymodbus.rst @@ -0,0 +1,184 @@ +Pymodbus package +================ + +Subpackages +----------- + +.. toctree:: + + pymodbus.client + pymodbus.datastore + pymodbus.internal + pymodbus.server + +Submodules +---------- + +pymodbus\.bit\_read\_message module +----------------------------------- + +.. automodule:: pymodbus.bit_read_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.bit\_write\_message module +------------------------------------ + +.. automodule:: pymodbus.bit_write_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.compat module +----------------------- + +.. automodule:: pymodbus.compat + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.constants module +-------------------------- + +.. automodule:: pymodbus.constants + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.device module +----------------------- + +.. automodule:: pymodbus.device + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.diag\_message module +------------------------------ + +.. automodule:: pymodbus.diag_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.events module +----------------------- + +.. automodule:: pymodbus.events + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.exceptions module +--------------------------- + +.. automodule:: pymodbus.exceptions + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.factory module +------------------------ + +.. automodule:: pymodbus.factory + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.file\_message module +------------------------------ + +.. automodule:: pymodbus.file_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.interfaces module +--------------------------- + +.. automodule:: pymodbus.interfaces + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.mei\_message module +----------------------------- + +.. automodule:: pymodbus.mei_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.other\_message module +------------------------------- + +.. automodule:: pymodbus.other_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.payload module +------------------------ + +.. automodule:: pymodbus.payload + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.pdu module +-------------------- + +.. automodule:: pymodbus.pdu + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.register\_read\_message module +---------------------------------------- + +.. automodule:: pymodbus.register_read_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.register\_write\_message module +----------------------------------------- + +.. automodule:: pymodbus.register_write_message + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.transaction module +---------------------------- + +.. automodule:: pymodbus.transaction + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.utilities module +-------------------------- + +.. automodule:: pymodbus.utilities + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.version module +------------------------ + +.. automodule:: pymodbus.version + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/source/library/pymodbus.server.rst b/doc/source/library/pymodbus.server.rst new file mode 100644 index 000000000..973bb5b55 --- /dev/null +++ b/doc/source/library/pymodbus.server.rst @@ -0,0 +1,30 @@ +pymodbus\.server package +======================== + +Submodules +---------- + +pymodbus\.server\.async module +------------------------------ + +.. automodule:: pymodbus.server.async + :members: + :undoc-members: + :show-inheritance: + +pymodbus\.server\.sync module +----------------------------- + +.. automodule:: pymodbus.server.sync + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: pymodbus.server + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/sphinx/Makefile b/doc/sphinx/Makefile deleted file mode 100644 index 9ea4a8dfa..000000000 --- a/doc/sphinx/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf build/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html - @echo - @echo "Build finished. The HTML pages are in build/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml - @echo - @echo "Build finished. The HTML pages are in build/dirhtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in build/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in build/qthelp, like this:" - @echo "# qcollectiongenerator build/qthelp/PyModbus.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile build/qthelp/PyModbus.qhc" - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex - @echo - @echo "Build finished; the LaTeX files are in build/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes - @echo - @echo "The overview file is in build/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in build/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in build/doctest/output.txt." diff --git a/doc/sphinx/conf.py b/doc/sphinx/conf.py deleted file mode 100644 index 3faaccc37..000000000 --- a/doc/sphinx/conf.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# pymodbus documentation build configuration file, created by -# sphinx-quickstart on Fri May 26 10:10:53 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import sys - -sys.path.insert(0, os.path.abspath(os.pardir)) - -from pymodbus import __version__, __author__, __maintainer__ - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -# Sphinx extension module names. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.viewcode', - 'humanfriendly.sphinx', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# Sort members by the source order instead of alphabetically. -autodoc_member_order = 'bysource' - -# Paths that contain templates, relative to this directory. -templates_path = ['templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'pymodbus' -copyright = u'2017, {}, {}'.format(__author__, __maintainer__) -author = u'{}, {}'.format(__author__, __maintainer__) - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = __version__ -# The full version, including alpha/beta/rc tags. -release = __version__ - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'en' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['build', '_build', 'Thumbs.db', '.DS_Store'] - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# Refer to the Python standard library. -# From: http://twistedmatrix.com/trac/ticket/4582. -intersphinx_mapping = dict( - python=('https://docs.python.org/2', None), - capturer=('https://capturer.readthedocs.io/en/latest', None), - humanfriendly=('https://humanfriendly.readthedocs.io/en/latest', None), -) - -# -- Options for HTML output -------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'pymodbusdoc' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['static'] diff --git a/doc/sphinx/doctrees/environment.pickle b/doc/sphinx/doctrees/environment.pickle deleted file mode 100644 index 97c03334b95a8af404614d6bab8edfeb56d91977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774735 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�cby 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�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�sd0%0FVUz@I9ix>ysnPzPrW<5|=d>!Sf0 z;aZ^pH_%LMftF~EHV8sHbU;URMi+ELcl1Or^g&*Gbh0z#`ahQOK zn2d{V|1zeFGcgNuFca055-2X5moD!a6*cp^T-bNq?F@HbxJ4c_7( ze8LwLEgGOWzKg*eFE~OX6v7}Z!XpAAAu^&O8e$+OVj~XX;iYNz3JJx;NP=WYj+97+ zG)Rl|c3CP4L#5kz0n8#&>sUa2tzOw z!!R5pF$!Za7UMAilQ0=mF%2^?6SMKn#Qcu=;zBIK5-i1XtiUR)##;1u(*vF$w zSz2rnw_+Q1U?+BC5B6a{4&o4w;3$scG|u36oWprs#3fw8Ae-P2gtn!H{js?z+`=EY zgS)to2Y7_Xc#3Cufxqz@Z}1NP-~&G5Grr&({>6U?raMC*Btqk>$@MS7ixH7PHzh<= zG5QZ&cud3=<02js;3p(PVkAW}q(Dlf#zY65j5K08q{q+5h|I`>Y{-tB$b~$}i~J~n zLWt$k;-HvV0wqxzWl#>~Q4y6;1!GN>@u(rzLT%JVJv2Z=G)5CNLvyr5E3`pdv_pGz zL??7XS9C`Y^g?g+ML!I{Kn%tZ{DNT^fsq)EF&KyOn21T3f~lB}8JLCHn2UK>fQ49$ zC0K^#Scz3wgBRX&{=z%F$5w^yh;Aaq#BOmf_Td1I;24hMBu?QsoWWVlGK_OD#i6F* zio!Kq$4#uZtk&XyCWmlG;U3P4=kZ8<@}nR=zzgv&yu>TK##_9@dwjqre8yMIv6$xl zSXN?iR~iDLa8=+p!b7um^jw9|v#F7Dw09^x^c<4^pBzkfuBdWpB6Frf7~9Xoc2j ziy*W|QxmBFdQQ>3S;mF?@-kSRUH$=NtleO zn1&gciP@Ngd64BMibJJR%|zq9C4MawI@hF*;%(7GfhV;voTkLLwwaQY1qPq(o|@ zK{}+z&&Y_($bxLhj+{v5GEyK7(xJ2^UKT0E)X1fA9+X6BltDR^M@3XZ6;wra)IcrN zMqSiH12jZqG(j^oM@zIq8?;3`v`0sDLKk#Jcl1Cn^hRIw!vH)pP%kh<`~|}>0wXaR zV=xZmF%gq61v4-UvoRO*umB6O7)!7W%drxxumVVz;;# z`)~jUaTrH%499U2r|=ur*xT2kv7v2>iwc)<1=nyLH*pKMaR>Ks9}n>ePw*7a@dAG# zzU}KLOckf&9p0m+LT!8&zv3Id<39w~FCh>LPh9vj91ss7A|hjFu>iXfMT~~%h>2K; zgSd!~NCg8#K_W2;k|H@$AQe(OWm=>YGvH@rLS|$|HsnA~CK9S5E0Fbau9@Kk(` z5@IQoMp=|Y1yn?3R6#Z5M?q9aP3*Qz_o9|q2X#>&4bTXU(G<Zob#~@_(dF!5g3Kh7>jY3fVH}5J^pp_ z|1e!)CT3v{=3+h;U=iwQTo22{70Bgs^I)a88f&l)#avnmti^h4QrLoDu?^d?6T7en zd$Awk5CMmA6vuD^Cvh5ikPl~Z9v5&4i?I~fa055-2X5mo?%@I2yRD9RB0j@&{E5Ht zH(ucl-r^s;$47j^7ktIP_>N#!S#X3zD1<>+ghvEKLS#fmG{nH4mi8mq(NGwM+Rg>CS*ZYWJeC5_!emUvY_~cWGk-+P!92{zLM*}(EX8u1vrI2wk43i+>l8L%BQ|3T zwql_ZEk;?fJfhfwqG7*y5QlICM{yh{a0;h!2EXGR&f_93;R>$eI&R<={=gkvaLP+~ zAU?ulJjFA-z$;DO;BWCY-ryZlx#=|cD1OEld_y0FehB8KLm(tVBMibJJR%|zq97`w zBL-q2HsT_t!^g%~m-a6bDVI*#BNrWvvs zm?tj4HgO03!3Qi+Scc_TiB(vGwOEf0*o4ja6jSDg=oP=#1j)B zF_L0#ykP(3VBScc_TiB(vGc8vmbz%X$HHsjX-ZC%F zIE*7WhT}MiMim1z!5Q%^&fx-ryS$LNC|<@DT*GzT{P8EldlPrWdw7H=0oq({b2aFN z^cP;@6<*^l-r+qy;1fRMD~>quG5jY6FB@QkMX(7W#83!_2#AQth=OQ{j+lsrI4JAZ z$|I4O1WAz`H5FgO)9pl6an25>vY`DK-x;PWFFb8unAL*(E$bfSiU%+C8 zrC5d)=&MP8tP$5?JvL$!w%}K6!*=Y%F6_Zx?8gBd!eJc6F`U5C>H(JHH}Q9z#d%CO zX=dVrcnOzr71wYBp*^O;VueGk!fl1SNLMpJ2HdwQ9^#3@Gd#zic!f7Vq656dd+{Sa z;S0XvUu3a;W<&6D0YV}a!XPZdBQl~Q8e*WF+p2(=Vr<06Pe_QwNP=WYj+97+G)Rl| z$bgKFWH!MR7%C1! ztO^0*ATHu#vcgnM!wk&CY|Ozt%*R43!V)aSa;(5Atj1cb!v<``W^BP$Y{L#5v^WoA zr??w?un+rj5QlICM{yi?J+$xRw0H);;~c(PB>&>PcoCOy1y^w$H*gDo;12HMJ|@|6 zr{J+g@)XY$Uf@r>L=pp)3~$7D$m?VIkswI~Vp60;YVi?Xolu! ziB@QXwrGd;=!hB?Y%O#ZyQ2qsp*Q-X9|m9`1|zbIjEZ662#myNjKMgJ$3#rR6s*-v z>oG%|g|J@y!eh2L7xS4)5^+pOC~*B*QoHJN`p(pAC($2!{xWh{%Y7Xo!xOm~VkC!~_d*5)vpRL{cP2 zTBl5p)ITB)>f*!rSCN1zMst+8_w+&;ec04c*ZbebFBSFbLah3On$NI2>7ZXLgJb zM`1L^VjL#mjIKM2DdIFt$4o@^)hs&Ziu17mi?A3=u?#EF(uUU>E5+4VgLT-1EvR4^ zD`C616T7end$AwY+*S>=b~9~pK;aM$<0y{d1ll-x5OR6Q<-tjX)A$X)<1EhOqT9dx z1Mw=Z;Rb>`c}T?55ed-I7s1YWsL5kI!82?y+?(*1_&2UQ{7t+UKcc4FuZ^$bzu4+y z+wolt<~w0-@{2VxM0U?_%RI7VWELrub1ar}>} zDLN7p#7UTpshEZtKYpgkRLl|QVLldO5tiVw2h~$76_;ZLR$(>PVjVVMBQ|3TwqhrC zV-NOWKMvv$j^HScqkxVmgx|$;2;n6^6#BdAfe7ms!sDtY*HOx(E`vA<@o+=o7KSPe z!vpaV9^)yV;RXK2YrMfb{DTkph|lltDR^M@3XZ6|A=;H=>4E3$;-f_0Rx+dWm_7CSo%*M@zIq8?;3`v`0sDLKn<8 zpbODM?1kRwiw6piFhu+XrR{KK1GIVD=AWRy6<=e#;zUfs6imf*%)l(n#$3$90xZO0 zgwmy9uv}b;Rak>vx@8a6itDifoA9$Ko(WsU?bv}`*p0ntYk9Oo4kyZmg9?Xn1jle3 zCvghD;SA2ArSj4Hp6T2E#BchKHw8R<14=5J3{!%9txom7U2*9Q4kH$5fjhNg+H;# zMJ_>a9orY_eNp-ui8M}v^%`$P3NaN@BQ0wCSY2$h9qd46g{;Vl+_>lVA0WS25QR_# zV-3o96cvl3G|FP9$+{aA#mcCHYN(EysD(PHi~4AQMre$tXoePOgCKN7XLLa~bVpD0 zLLc-+e{^!wT`*W2ieE4sBQOf1F&5)60TVG9A#`jgOc!S&wikuCNQM+xps)ywu@s+l z=NGILS7W>jnus;xI;_V=Y{C}&ifwr6@XxVJ+=IQ?j{`V_)J~KZhsC4lVXE}PG4TXW z;&gyE_u4!N`c3*Br3`NwoE6Wbv|s3zMFn3*D&d;K4cx}v0Bydu`8VjE^Z-drvSfH7 zKEreTiNEkSUf~UT>EJ$iFMh;N9uJA|Rs0v<5zI`hq)-K+#4rep@ED@-3yxd3Cy~!m zDu9@7GB$Sjh3_sT^s&VF>|?vXoMzcisop6 zR%ng32ts>QwE0)YD2E?|ZVEln6TQ(N12G6ga988|7%q;)D2%~ajK>DcVG|~cQ!x!Q zFcY&e2lLR?=Gq+tF&Ik~mSeL+{fgD%TCBqcY{X`4!B*_ncrVJCVHMEYz_-OAO^)Cw zj^hMQA%mgFh|}U3wDi){8o!I@a2^+N30H6x*RjvZ51_0=mB$|ncW@W?5do3#7*FvG zFMj;YQd7)3GS$23Jru{6q{ z9Ll32DxnJU_{Cm6)DUZ-HtM1t8sMRA^)Z@=&CnbzG0rI`puN};ozMkuy<+@>-eO<$ z!vGA#U<|=87={suZDPm87;zlNV-iZe#8gO) zv`Ar^ra~MGEgmu}WJNaQKu+XFN{32~LShjVMRAlsDU?Q8ltTr)cHwVPMXZLFKekUS z^|)P*S_*Yg7xmEqjnEiP(F`rn60H&1gEB1Ii5<`pozVr|&>cO|3w zDsIDe?8GkY!Cvgg0UW|%9K|u5z)76OJ=?(poE6XG0xsb)t|E~~R}x$kZy6rrBDWCQ63dg36)VbK%0|oP6ySLYNI|HVx}!;Hkyjf(E_ak zw7J&iMo??1E%xiUg8>5np}h`%&c|k|6~~8s5=JDW*mmq(g466M0b?Rq@cUJw_j~Uw}5> zgM#Vkygrj3k*t|0IOM*LpqN4lG_zl|KnPF2P^hTiE2E4ijG;Ue!~g2t0@$>3hWiXR8SR*ko#r5kLGZ3;VZ1GmsncQ(dB zjSmNCbGyympd->T9LGt-aFelcMm&pixPUX>SI*+1co|o44cBoKk6rvzbazobaYx}E zni|07cqBf-Q#?lmg-CcQzQSS$Sc-Szdwjqre8yLN!*~3L;64!oq0q(yF$m$r2#AQt zh=OQ{j+lsrIEah*xak0YAd#2^Ns%1S-1G}1v2P?pYK648XPrL4&tfKIMpiu4?az@@ z%#A$Ahd&MFOXL>|;)cWDLQ%0eN}v?F>BJsrY`HbXXH)kpvT2e7RZtBRG@gX&VolUS z9Sqc`gV8{2gvMx!W@v#On(RUwF$i^BWIc2g|JTtyK-+b+VE~RB+iq;zwr%6aP8v0~ zZ8WxR+qRoDHk&5BPyVj;ti1P|Gkf;T>^bM$rt9yBPUwQ08sA0_u_t<=5Bj1X24M(> zVmL-)EJk1y#$f^`Vlt*+8m40=W?>HIVm=mO36^3xLOD7^3M4 zJFyFUuowFgMpxl*SUiejIDs=bhx53IOSpooxQ-jRh16W|}29Vhp6W@EH+D zjEDG0h|7+ft4JjNjwDEi(D@KgvMx!W@v$yXoc2j zi+1RM+8*w@=qPqZ7j#2+{DGe6jbh#?OQ4@P00S`?Lof`(F%l~+{%TARCt)(CVj5;( zCT3#}=3zb-U?CP`36|lu&qH@H#L+nns}$B?E!JZLHeoZiVjFhgg>Cf;d&GU%kApab zBdFy!D|K)}JcZLZi*vYui@1y{xQ6Svi4XpL=O_GbN|FW=a5CU@>j#RD@Hd{|A3Vcz zyu>TK!CSn?2YkX&Z}rFVP5h4k@DsCara5?Ko4!Cji{AjjJ(?jA3ZYTlt}lu3Vnnnw z1+5TOjE>_r;z`67<02jsAR!VXf;WjsNG7I0N~A_Szl~3TIGV&mdWDS0ge=I4?8t#! zzy9RnxiH7u#XJ;LD2%dhwLFT8B~c1xepOK(6;KKJUA!O)p$NLT>24_I&A0?=YFrx` zY`;vXBi2KGG{gvvN1=rnfL3UOwrGzI=!D~jdlDUeOX-Ym3O(=#dZ9P^;!pI)aE(V| zyv3V{kqV00EsZnhx-voA*MoV zq{VuLjmRiw#(oz%h%90@WJgZqLLTHreiT3<6h=|pa0J~#NwG8v+USK5&YMdF#CM^D zsH901R7G`c(PSIKn)dJ*Y`8;lUg08MSiDzg;$_Vc)5nY02oPJN4cehSI%2&K5F61| z?2aDjiC*Y~zUYVk7>Gd_f+CKkVyKL&Xn_EX(_{i7yM?HjC{D&wN5*nY7iS`Z4H5}+ z#rgOP3$X}GFxnK4#ZqxOR$vvHInr8SwYV1RumKyf8QUzt4s7`qQPp%-$2x34Q@gl1 z4rp=+hjA1OEXpFB6i;KCi_gFr@f>nE9&+K5cm-E+9W{LIuZ0`pE$lJ0eYht+z(f3v zpDr2HKIrcW9f;QoZ}AQvkV2=aFxz7_7atWqV+2N_sV&+Z|BC$nJ9NM+yuk;2!dtvYb1!R&yW)L(##em9cl?K+ z2;wjgh6}ia;0TFO2#qiZhe(KmsECdjh=tgQi(xjy2qY8}<98%Q25dD;FZ4!V zoc6)>ECz^!Fc?EI3?q=!0h${l#nBjpaTt$@n1m^qis_hvS(uHvn1{cx0E@5~OL5VF zE@P#*8i_4g608x|p}2#mBsPg#uoc@;$Jd~G*e&kGNr(PvRPp9t4WV=p8pnS%!3-~( zg^RvuUPc51iiG0|Cvg+EfBnhJZsQK_;XWSX5gy|Sp5hr^;3Zz;JwD1V1zj;w%sCLrYkMLj*)bWJEzUL`O{2H5v60SB#ISj+f|2 zEG9u0-FHJrAOAWdwL)5?G_urz1bhtm+&Y~fWk5z`Miykla~FGwTw)&NMSc`OArwYY z6hjG=L}`>kIh035R6-Rzv-My6dI-eosDWB|XhZ#tQQmaMprJxzwD*;!Bcf{(6EPf5 zvCz)3(*f@kKA^pqbwmia6$(!@eu}ON-O&R*kxi2v=qvU^EM3LHP;od$U=&XJsCXLV z#0i*)$%t$@qGF0T4bw3bCtTmS8ECqlXW4J+VSug~~QWRjd;?U?VnT z3%232>HLZ$4#;HKrLYHku^-b6Xa)|8M{x`%(Ap!{7H7nBIFF0Cge$m;>qu?t(&Dyw z7rDedsAw3K@mS#>#B{X9#tZQkUgIs^;R8P6GZyJ;2}YWT(fFYdL@z-R93c=2zab35 zB0M4>5+WliqFKBc$c7wiN{!emTEJm+EpG|;#aW-83a9L&RfEWko6#$=7BBA>5y z1yIDmi(#!M>k;45Cd3AD6E} z+ovDSX?y_}aT$}mYznT6H<7^ekqCFi`*?sysH@ZZ=->uB;km*~yuus2#e00fCw#_N ze8YGAho1=R%_=;CTfC6yZx{oS%cGG82YfI%gj=@q9YoSN3Zf!9Vjvb`BQAm<7~Y!1 z_edxv4kX}wz{S?dq!dVr)Tp9aHKZ3aA``M8E3zX8av?YJA|DE%APS=hiXn`x5e}uq zGHBvKG=Dz(|b77>vUW8}SyViqkOzv+yVSBehRRX|X_DgvD5j zu#TqiSShYX8=ba8ZBthl>lHR)fEyh23xy%rs<0h9unW7f7Xxka!PqArKv_3k9!JDu zIF6Gzg)_*cNfxxTu{$7>hb#;Fh<{?AR$RhFGRE4q}OM5Et>W z!lSwhF+HlWkys%~AOSZ5Znb{urO%Pt&(k6uG9V)|BMY)2J946@ZO|Ke#r!CMLMVn3 zD2dW2gK{X3il~Gt7;Hv{BBoAbqqag_)I)!LLw|0JMw&OlBRoccLTi+>)D;j< zAptrmbU{~i#~%v4P*^OAzUcQ0TX6vTivy9$;L-%rt@X0NZ`}S*(zZ4W{Lyyoz%J~@ zUhKmG9K>N9!7&`iNz`f)NFAIN&*K6vp;Gfessu8nUX~!g{@41NpWnbu+{PW;!+ku& zBRs|vJjM04f!xG1@daMuHQwMI-s2-8whtsSK8auO760Npe&8p98f`FyKuG+C&iMcRodDV9bVltXz`L{(Hr4b(zy)I~isKtnV}6Es6}v_t?} zqYc`jJvyQjx}Yn%qX&AT7y6(t`k_AtVi1O4D28JMMqxC@VjL#mW1B!eW1=`28~r+J zGp2~sFdZ{73v)0R^YIrJViA^LDVAdeR$(>PVjVVMBQ|3TwqZMVVi)${01n|Wj$(*s zZWvCAr*Q`7a2^+N30H6x*Kq^4a2t2=5P#z_{=ri`#|yl|YrMrfe85M1#t#HBs-Ost z5D0~%w&QU`5F;TnqGC?4K;|Ku7y~g88*va1@sSWA90j3}NcbJ>uoD#YAkw2px<690<-VXQbF6EF#rF%{KO6EiUzORx;{u>iANe9kY#d038>ScNrMi}l!m zP1uaB*oGb0iQV|e#6H756LA2C6pr91j^hMQ;WWjIQX09{2;j&>Ma6C;H=W%lHI?#i1C65g3WlSnJqakESl( z9OD%xViKkxt-~@s4p_27n5Xa;Ry!2dVu82_i?I~TumUTw8f&l)>#-4=umxMO9XqfK zyRjGhZ~zB!7)Njn$8i#q+{_f570=@WF5xn+Vy6dtH*SizaR>Ks9}n>ekMRUg@eD68 z)+CO{d+{Sa;S0XvUwp?8oHvOV5zNQ35V-8%zKYOdScF3aL_}m{bZlluTrobb>gqZY zi%F0Isc=K#7Sf3skP(@Y1=)}tIq}9I-yxh$9Rc@r@Bn!=$&UgkgkmUxk|>QbD2MW> zh)Sq}s;G`trfv;th_z4~bx{uu&=8H0&VVwYx!4i`XpJ^#hxX`*PUwQJ=#C!fiC*Y~ zzUYVk7>Gd_f}t3W5g3Kh7>jY3fQgulDVT=on2A}KgSnWGzpxOCumnr794oL2tFadA zumKyf8C$Ro+p!b7um{B*hb3`9JcNa&eK8J;M{x`%a1y6+2Ip`d7jX$!a23~a8+UOJ z5AYCw<1zk0O%G>n1a-6o$7_YRc!v-8h|lISdV!w+Y#6WQ{hF}<)xrG)OE{?<~jKNrpM^n?;923Mz zn2f2Ih8fuIsM?7+;ymPaZ01K@u|5`QvIGmo#aM!6SdNugg*8}<_1J(-*o>{%h8@`J zLi@2t+=u-*h-_{(2f})@4v!NGr;tQUhI8Tt>@;<|kwMIa>$r(qxP!a6j|X^!zwrdq zbT9*ZbiWVJ6<*>M-r#}4BYY4);WNHss0ka6|HPjN{3q}Y4Z#r-(QUJs2qT6=AvawF z;l+sf6a5hhQ8311Fb*-qSQvmoxTbIe3B|5&nckOf(h z9XXH-xsex7Z0e^dC>BN$6vJM(x*w&)GAN7ksDMhSjH=jUDfS_=L1slwh1#ftdZ>?v zXoM!1;r3^tg&2TVXoI$Bj}GXB_XhqE-NYXF1HI52eG$biL_=&bE(T*LhG7IoVl>8J z9L8fJCSeMuVmfAE7G`5E=HV|az#=ThQY^y?ti)=p!8)wRMr^_sY{hoWG_kX>TilC- zIE*7WhT}MiQ#gaOIFAdsgv+>!Yq)`%xQ+XGh(~ygMwX`uo{2B;2Ji45AMpua@D=~! zI|BcU(!d7{K|OE55CS3b8$u&2ZdkHgh$u!z6huRG#6&E_L0rT~0wh9WBtcRnM+&4u zYNSO-7y1nu#mvZpZ0P9l=!{%q9^^%S6hI*qMo|<)36w->ltDR!@MwfWPlrcuR8pvd zs;G_{sDjCnnfjlh9Y}hyECd zK^TI@CZZ|2;}7(~pBSgf1Wd$aOu;lv$4o5LcroUR^YO$jJjGwXnxK$rDuSirax``e zO|e2;h1FP#-)+&P*eGts7Hq>?UA@OHaSxJO_~e-CWz%t3;V6#b1Ww{K252$}XT)>( zDF)TcCGiRph>4IIX_3RBl?%~*@Q;aH3VATWZB4>s9sGl*c#ao%h1YnCcldx9Mi2{M z#BcZ)|KSIM==p^Uy~1x6APjy}2!pT)j|hl_$cT!UmghBMim{R3bQVN>F(E37m61eD zhU7?zR7iuFn#@K9F%vQ)D-J0fK~6C@@*p4bqagMf&;b+`i=zZep)|^3o9(>=<-`i8 zh{~vfYN(EysD(PHi~4AQMks6&i(-jRm!YLXE3`&iv_l7UL}zqCH+07zC~u7_qL26| z`e6VDVldik(hn_EsL9`$EKbEV%)m^{#vIJUd@R61EXEQn!*Z;|Dy+d; ztj7jy!e(s6Js%q%V5hhnd$14taS(@a1V?ckCvXau0Aw4o86S5#HvLl=g5&^lzyvT&=&2{0iDnpUC|9a z@CSO~iw*Y;e~SGv0D~|XLvh_DZ(^i48u2Vt0*n_Y;?%FB9#h5Xn1NZCjk%bIzpwy{ zuoz3R3@fk_tFZ>_(8~h!!Fq8cHen04Vmo$V7j|PWHamE>;;F;vIac_%unGq?IgBGX zhT}MiQ#gaOIFAdsgv+>!Yq)`%xQ#owhx>SlM|g~UCb0klZ1mQ6sqh+a@D80d>55O{ z7fg0DQ<2V;WWZO2fAJkZ@DoAx+#Vef3?VRI2MZ8V{0;SV)c{@59g*}BY)J|qA{AF8JeRdp1I@;v=Q4OxEK<9-Qa$7 zQs{!N=#C!f8A!L*y8?Hnzl+hwkN!kI48TAP#t;m{aE!z#jKNrp#{^8mWK6|O%*Gtd z!+b2jLM+A-EW>iF#44=8-<<+^f(_y(9PALtVchE&$OG(D*o{5dhs$=}RqPiJBD%&g zaa25xXu6Mq)8biN#AUovc!MkAHC)F{+`=8)#eF=$Bm9jg_)Q045UfieA@Ejwk5`(! z!CSn?2YkY3e8o3>M;tGUhae^*7;d`N+Xy9wMi_)cA&rY5yciLY5Cu^Y9ho)BibVJw zu@&MX9ugoS5~GHjsfFLgq)3JoNQu-)gLFubjL3v6$cpU9fn12xIglvGCl)|K6h;vg zLvfTuDU?B3lt%?rLJVESLN&1lj+n4xXeG8m9n?d8G(=N0M={%{1X_pzsEOLhqL2+8 z#7^jpuIPpy_yfJr8-4L7`eOhFp^F9RhQZ=c48sVF#AuAcIE=?cWbm>~m?}=kY|O(+DBO+@Y6`RB@*oy5)Y+EG34sjQDV=wmM0FK}oj^iXw z;SA2=JTBl8F5@b$S-cy#Cf>kJ+{PW;!+ku&BRs|vJjFA-z#F{7dwj$ve8E@zi=PN; zrGp^^LgF_(vdtbNoEQNS5gD63#9MI)M-WRP4&ov{p6K8y5{pTY6v>eqX^{>YkP(^D z*7({ZyOfu87vKIn^n=#POIgdrG;;TVBY*kOuy;ew5H3F8zd zU?L`C3Z`K?W?~lR;4du1QY^;`tio!n#YSw#7HmTc7Z1R8aVK_R5B6d|4&V?D<0wwz zG|u20&f_93;R>$eI&R<=ZsRT<;%_|0KX{7gc!5`VjkkD*5BP}B_=0cv7ylug10Vu| zIw*pp9XjA2oBtWYis2Cfk+4l+2TtG=Vk*SOf8tNX7ZW0eZ5s!T zgGm}s!D1{$HiaC>iQLG8e8`W27-PxC;kZq664MN528wD@9APvGhZ15bltx+fL~m3? zWmG{mR7XwJLLJmaeKbHLG)B{3xKMMn6kDM++9Cu(p(8qDu7#S9a$*If5L00tHejH_ zU<|=9497@}!WfLjc$r(i7XA!wiFYs)v+)3r zu-3L%kAK8xc#fBdVvx~rR#)foLE#fV<14=5JO0B@1Ti_m5F8;93Ze1bC0`=E7!kSM zU|vKOqocA|73Va*fOrZCkPwM6+91awnV148ks4``4(X8*nUDopksUK!Xclsdd65qV zaL4W6LlLnUilZb-p$y8RJSw0PDx)f@p$2NAHtL`r>Z2hVp$VFq&KCG?Xg|?s4av&E@;SA2=JTBl8PU!R$VvBKc8CP))H_+8^yW@^{5BKp9B^62|w5=Q# z36KcSG>mu}sfWcVN8BFNAH diff --git a/doc/sphinx/doctrees/examples/asynchronous-client.doctree b/doc/sphinx/doctrees/examples/asynchronous-client.doctree deleted file mode 100644 index bba09eeb2ae812a4fce3c0c3c37f5b84f28db1db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15603 zcmeHOZExJh5tidfmd=*^lDhp68`(r?EEy-B92BT4#BCipDN?6`;mS<`!=?Agy<1j1 zlHOhFbSMI}9||M@zm@#~{b&8ypV4P_N#30-yK-N1X@NjJng04E@Ty z+sQ_QH0lTmWi5l4KG#X@(u9wmWPX_Dr8D~Kbo>nUx(eU}FZmMzSDJ_;=d z7lN2;ZMn&dt2*y$6B#TzP5iK0!CH_j1uA~U;+`9fwY_`7Tw4_*rCca3Xb}*pMqF}H zE)`1|Cvv4cFIONDdGT2(-@)$7w_Jm5DnY4qG6vpxs~#L`Q9`?V5XT(Zpt>zB5&j2Lh<&# zI3f_dp5$LkixDh(8`QnL%Zs<;C=unu^F^(1c_r_H;0k2I`-*3Bg5lp^Jh!m0F9n+v zb1jixo>~M@%|Icei#Kpd!_t^yz*Kd{j$-~&*s95*_80c zXnX)PegZVgpFdnA*aLz0ojH?>#Xmn0aXN$wrcq~ttVUj>p^*WUZxkn(s60ucq+e^5 z@fM7Xz(x!JN}-^BkA2=_qcmq>%3vIs_4hluR-JB?bVPCpO&OUcty{NlwH{Sx6nl-))vc|W z{j^$SDSK%Q^b#6@Qee0`H(1&u+ec7?g?rihx#P4llPscxl#Y2$hZn$@4jK%4c5&-7 zV|#0Bowe3!$`m+Ggb1;t;;5^*iiB>>cp|%$%Dj6~0>vi6)RQa0X@|5~rc#pzY22D# zc|cp9Ck7{ux6Mn!tB`4Gmu-F^rC*Q9LC)mSe*9z*b=jztwKRfz53VdavcS` zmXD3i7M`+uH3wc_m@mMLQ0^N~<1-wRc%vTt;L}f@{A%+I03}77;Y=6^7%1!6*dwR* zYgoYJnB3!;?>NlBLh`Vc*{El0H`8tIv>1NqCEvZ2s*OV)=VEgQ=dT^*KGyG9H_YQ< zxLa|&5%WPe~RuChf$d0`^x@! zY+r&*fT3LhMH~ zB8Xs*!=FyV*sjdduPg(tREs189eV5nwVH_(*3h~)9%El(Q8+Oyl^V&_+qteDOfXYR zz?syI%DQcOXMyOhz{xe~LGHs9IEL#NV_XjvoK*{K!u7s_9ktf)mDs;iS;xxOsuyiG zwx`OggKUrt1^bw7AKl&FB#X@;Q;JzEz=lqK6xoo=sZ^?*&8?}zr<$bNjf{S}{fyna z=UB7^r>P3;WtbN7daV7o^xRTTT&~^6Pieu=Zr}Y6Yp%YpPo?i}&9vZ#$7a!uB){F7 z?RoX;MPoMy*iXWbk}NkQrvHWID{Kpjajo^7qg!Dq3ahKb;A z#K^I^<7CDYSK+=#vBDQL32mp!KSX9PL4H>mk9b2cm$*cJrA(J7m>Bs{8}5b89(dZM z+1WUeV5)Y;&%lMOGL+;9!8JlCFd)yTnbDo}a1ZS%f5@Ylcj0nXxpyZv_(+53C_<*2 za-BBG2^XxQR{3Bymr>`*L5^~n*g!iwt#u5aP9=m9@B63}Y2L?7F6Xiv3$Au)XCtd# zIr`sbpv&IdNh`OU!N8nE9ijR+Qo!{A<|{DpKHJo#%P=5f!u5Y z9DXN-KoeO@AWx#;Qk7af_L(i*L=;sJXB0_LDwG`7Blr>|cvoj}fyp?9e~fO0c$-xR zttPMD9%tiU%GjSpXn=VAUXu#+c5T*e7e)vfOhB*7WS*F?v#7&gn;tTnWY|!K+V}w3 zZ63>1n-ALTK^3igk6;2fTQ&-t%DJ2vmTaQ#;cOtv7T7h@<*H)kXb|t{j8mm}Im7Ot z(nwjX$*3=5{2Cu;rY#v?q#|JgR#4g~AD+{;ELs-~i^p$LAg)4h-3ihGN;W4JhqIBZ zbD{=YT&Silzp+JDls*42QBs>{{AXf@<{AHKFUWp@o@e~)!0QxQPxYEA$2{Xd&-lNp#`VT& z<+G{qeVgPm?GBp}Zc^v-jK3{%q4I&c;XLF2QkZk<2Z)CVU3GeDp7FN<;ymL&&-kBu z3r)S~5-;N`s`HG0b3eMi@jvUTht0wN*Ju34cj=dKf&RI>OMltjr59+oI8Plc=&>rU z^4z4;y<*6|FGrzYXZ?#cTujuWuK(F)t<@lMchZ~gvTIXxnz2{(XwXe#zn+0c+a{@t zwz5mrO`*!YVuc#0%qX+HY4XE8U0k7?kJKvRqxyjBx^~`6bqAR3UfL_JA0uBgy?}bb zxngB<)?yizB-iDJhB1^Ye(~Q6_`70^Xs;^z2cG* zRO$9(x`A2u2sI@#sR`4kxb^Yxd5UkB*m= zZrot%C;Ojm-7SmjnaKQJgmK`~Hv%O(RNATjBeJa@Z~p}Ax|!w%HH zxDU|2x2Adl>D_hKXs~c&dfMY7uh;AaPw5_tKP;7p_$iCj0?c2YFV40Ihh6%a-JEBi+T~Vx=}x z63DL+fPLT|6|r7)R2FYV5XvPqA5u-y-cTeaLWm9M9%T4%1y|#6D*;o34cy=*QCuS7 z;O4m%bXnYx#$Lt(k;k;2wo05R6&iv40sL+6-y z&=s^pN9ePZLKv)f)qb4WUpbfh9!ou2^aivu0nN;#xy)#($CH4yh($6}&8D z?53a=RNKesAJL}8JBy*{<^;eMY~?_Zj?1snrNfhcj(Y<3rXr+>Hpt?K7I`ShDgTU934!`G=_2qhJbZ4)l$6Aeq{iG7ub4FAP1o41-|M`AE-D$TT!D7>tr0Hj3pB z3%*uw|B1bb$5&BiMhhwISFY>5wpd)pW zFlMkp00mldz|=KrYelQ y+g{W6c=3bd))qU(f@5{k_}eEJ$kI}0?^mV#P~OmBb+V(kvBOKW+3ah1*ZVhdzT1)j diff --git a/doc/sphinx/doctrees/examples/asynchronous-processor.doctree b/doc/sphinx/doctrees/examples/asynchronous-processor.doctree deleted file mode 100644 index 72c7735d14b621fe440290244e3b8480f7aa64c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18069 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 diff --git a/doc/sphinx/doctrees/examples/bcd-payload.doctree b/doc/sphinx/doctrees/examples/bcd-payload.doctree deleted file mode 100644 index 6f70e22878bc5802c8fcaf638288dbc45307d11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16238 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 kxkQJoa3?UUv+;JsZGr2#PF; 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 diff --git a/doc/sphinx/doctrees/examples/changing-framers.doctree b/doc/sphinx/doctrees/examples/changing-framers.doctree deleted file mode 100644 index c7b4a142b25b21752c4b5e5fbf420d1b20ac61c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7861 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 TNS*(2L>Grw$l1cSay0li=fdvT diff --git a/doc/sphinx/doctrees/examples/custom-message.doctree b/doc/sphinx/doctrees/examples/custom-message.doctree deleted file mode 100644 index 8779f1c1f2e97f0bd71d7881d7b9eb8d4b199a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9525 zcmeHN-ESPX5tl9N>ukxgQ~RYh!azuL3Zy$LXq{H5(>Au-7_NoFv5USK3*Ij8$a=rB z;AG;N0 zVQEyX2Wb`wUDUVUBl?MA^*bygOksO(Z@H^*6K(#(jU5MzxIw#SVr z)TlHdKoi!ZGEaGeU#}{=(tcZQh&&&@)S}Qs&C|c|+3-=#Q4c4|(4Ql2K}vf=mm_VI z!Fsbah-%@t!m=o^-k_H5*iXi?Zg<%n)a)y{WY@F^iAt*^xguBXYR-vLC70y}^dPUk zs^ok4yTj!sgsSPWT5Q(P8p}=E6M)eR{nYQm}Cr$Jwb$CroL^)5az&8#9@m zGLx}V3uZ7&I9tH?(`R7?kz*cShQ5{yw|ZqUNlydvhe;~ zyI!14CUF1r=2n}lp$ z`TM3dH-<(hRVCV5EpK142v%~vt zgdQLwzEo-GO*t-8w;SPI1V8{f#6)a{NfV`k#xsfhL+fdm^@E1?su zUN?YY~t48IQ1!YmJG7v-If@9CU`yah4_z>bam_e`{&D*I`xyi^2TX-Os-GVs{^4I_FdWa%2&2Br7e*dq%ySh#S5@`1__qD!(HP%5;&P zn?5HkrUGfG7k8h4${-@o7-f&Ap~z`# z?kA!svSRQgj>Uw>f8uc|=9;c~)XWDbJXVm>%QWcN`G06@ZrvX)$8T%TXpIWi*i)do zMixM$6IMIr|6pNSg0()nUhSi+@0q;|SbagT0y`n|amkJ3Cjtl~Qt~DwkAyMj9lqUd zcZB$J8BCLM*W1!_pyNYIYUTpH zrYPb>RBtz7oVmggrzO5LU=w9nqA)SuV)S(0Sw*)l($`2rRtwOy;ZR^Pb78TIUM+Isev7nSBkrTL?> z!i!4tN2zUbl2akD^`g>T)C#_P#b6V^s5CDsP4b3|N>l5LN^@#1D$O%U`Bpz2tX@=_ z7nLTpIxZ^B?~NVA$^T2GId3MeqM7(Pnu+qWrz_O3EJp%gm#Gv*tJdD2qP^Q~M(MY% zqM)fZ?G{c>vq@}pyIw^bUc0;dN7PG)d8=lEW08p*CPdTeiRnSgktrQ-B{#m*U`B4 zeRA}jdvwrRxMm`8ZbZ{f)MDj}svrn5I!>SN$f{2!0jny$Lswp;G-HE;*hSOHkSeDS-3UsU#1F7jZk zFb`4&MxY;pB$>_~M1Jt$y`N!SceB#urD-Pzo|Z(PAcl?5gNF1WZUJl+lHnt$EHbis zx^C}=66bk1TPnQ1&bkc314x+H7Pbkl!K)4&e7Vi5aVD zWiKlzqTNMmw+G#r{N z!vzo}%y^I$lc6+8Jgn^XGdhRCN;4*dZK-t87?s^{FAg+p4#vqyP=wBKQ$q@2u-;AQ zEUoJv+pD-z0%MZ1L^w3EtF6auxuG4YHS}hJuS&GeH4&@b%ejmT3cAGNE=B}X3R;X= ziNvTR2i!m?hk|Tey}{K4o}!^XAqS1%V3%>P!rpeChcj7GxO*XuRB!B-cdFn-X@yo9 zsClPv(Sda82IU}_&9o`dk>Qcw?7whXNe$bnS7*#pOTjHS)K);aOw&)6>&|zk=Zm zABmG8Mrs%z*ogZK)1W=?t8n2Xqp02VKrx4g_W*=h5y2UAU=YGixwyMYS7dPGrfZmu ziAZrf#H(|YhNNXOSIfrS$K`4{B3vZcaWH(d)%zmcyBjR;bNiFCXp2a3&at@&{_e>d eAuU}H`nr-I$vfKK>|6|Lad?%2%?&F@gZ~0u$j&YR diff --git a/doc/sphinx/doctrees/examples/database-datastore.doctree b/doc/sphinx/doctrees/examples/database-datastore.doctree deleted file mode 100644 index b02a1f3c0dfce86c9a5bbeaae8e1c4d5b4791024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15916 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 diff --git a/doc/sphinx/doctrees/examples/gtk-frontend.doctree b/doc/sphinx/doctrees/examples/gtk-frontend.doctree deleted file mode 100644 index d18a345c05f0e87679f495adaebf0806e6e9e0b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47222 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 DsNmLY diff --git a/doc/sphinx/doctrees/examples/index.doctree b/doc/sphinx/doctrees/examples/index.doctree deleted file mode 100644 index 8e0a735b2e172568541c32efa4de62a717ddd834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5145 zcmcIoTaO$^6<&L9v+LdQ+VKVq>v#;ra;(fwBtRlO1Vko%!3g@!tz3KO$P+O0il3E%1e|7#1G&PaKHYDNPMUII-6Z%kchms*{-frr%rv} zch2drFTK^hvf%!+-9Y-82_wCm$bjqIcIZLO6O+H0KlMg_FTZ8i6g$!~Q$Ek_LT)$5 zQkp~>?kPUjc*CwUV^lcG3=GhMPLQPui}Bap+%DJuw^AAT;^2bh(*d8dIE}a-gh{}syGk4QJ7WHUa|C-WhJo92)sL9g zZvV_)(%DFx(BPOd@q*IluAeD|V|t}i!(uVHf3@1XAB7{u)U01^oQnm!s<}^=>iCFd zv0_(JM%Hq%DAr&@T)3Ny$MCbm#3mf8P4-HYz1k!bm+;>9-8{3ahD|71xwt0IiACG- zMHmIJi#XoG*2_3W#9JHNtFM${>b+dJ+Iz8#Q7&$X>+`0YRNtmos8BAz`tu7lFcbeK$fM(|#B7wc8v!lZY|R46muJ7P0^I~Si5TMs?x=UWHu z@HiDrhq~pMcme16!b45G?BevSef9rvg1iar3LF_Cu=ppQ+gqk9L_D7;ct|*-Cv%S4 zDtoq<_UZAd;t3g-JRe%Es9MI@+w?x0%#$G8wRDNosM8yWYZoSIFbwpUNi1kA8eB>jW-szNCHk(^Axnp0*{Hj5++a{EMWuUu2k z^ebmSTEB4GNt>g5a26VgSe(ATvR>g)4{%XqsbZE;PWf=XX_n%EI797EGv%`=BB`&Z zTCouH>axbrvF3*D z)`xb<%n`}1h%g8s_s4d#L}C44X%fj%eoRTlc9JX}am9mtZ^3qAHVt@cM80?4r4hjY z4JTL6?OgzO4js#e1<5#MrQ+MeWu=5-CBOZ)tQ2##G(*IleCe74GYM7Lw(4X*xD+UjcEnUb zbB)}TBA|Up=lrT_CXBPF*sE~_{*|>;ErAUek)_MEl{_|FR6Iu2SP~e3N(^a+_fl!K zSCQoXM<&S`Hfomaub*335I6Qa_*HP_lc#d!>>d9Lu2hjgac>UlSmiA$obmW*+IqWT z$VeL0z|GV=eD*(%GXW3#pD2GnS^mE1e*aGp`7}cHIF_G8Nf|Vf)WtG>?}~T!&*N3` zzW9oG9jyn;jGS+mNWR0s(}pRN@13(u{qFJdLtjlwD>a|;X7LR1) zRXfmX*En1-iY1ydENDHnYt&SjS&HO#4~5=nDBc^2o5TGjxH`=27BWz%P=$MNYQl|k zVx#JhT!}xl+b8y_POyM9_uH`$gz106qZnsmOdQ?1;m!3ht0R=^s)4}uplh1q#W!N>DnKU!?Vz01; zGA4*fhgZmZALUe6jeP~4HtIiw>`OXi(;YC{G#l^zEoXZgRQuRNMp^@Da{|- zE)qk6Bj83+E5&q4C^8YUfNF}4z2*yabH3rKh?f^8gb6QZ>L5$W0G)Ww%XPt`I=ajD zLV0a;Nig3fGdy`aMoN6n2)P;WN;Me>6GwyGUOW+VU?nqSy0C7Tv@avKYi^>iap%|= zl@`%;hHgM`Zm2eMV5y-yv={J!1eZx*K}mMbuGEO>x>x7C)`*+&zM3HwYBE;B%R$DG zfo@o=4$mA9u(L6Qq5oAeC1S zY_|ZFcNprBss|w4Iaf;s#nio&!eH!pLoY!PC{NQf0LIY9a4<~9Ad2%32fkd3x2Mh-k4voP||mMPRO2*m@t$dg0txHEqrCm_Cm7ouf12y)Hc z_o}-;Iy%}-XGX}x-F?6h(Q2d`_YbX144Zl)oQMcNVAoP4sa@JEw4zam$DoB$1;As9 zv<~J`S1`1f>BA4cCC%T>T2qffj_4H>=S^hR8kmcfY(&yX%Hw4Davl1%{JYZqI;C=fmSgp=0L_xPQ8}0rZ^^47@ diff --git a/doc/sphinx/doctrees/examples/libmodbus-client.doctree b/doc/sphinx/doctrees/examples/libmodbus-client.doctree deleted file mode 100644 index 7ac317fa22c9e5b7c0842ad22bf938395caa2951..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37552 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 diff --git a/doc/sphinx/doctrees/examples/message-generator.doctree b/doc/sphinx/doctrees/examples/message-generator.doctree deleted file mode 100644 index f1c8e740c4132bc00fa3b3f93dfc0dbee30ac306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44289 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 JGI@XH{{Sriq8R`H diff --git a/doc/sphinx/doctrees/examples/message-parser.doctree b/doc/sphinx/doctrees/examples/message-parser.doctree deleted file mode 100644 index 136037c4cbc3c2462145f98f358c8c1c5825a33a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18888 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 diff --git a/doc/sphinx/doctrees/examples/modbus-payload-server.doctree b/doc/sphinx/doctrees/examples/modbus-payload-server.doctree deleted file mode 100644 index e91de84c1774cafadc6eff0b9669e3348e8c95e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8899 zcmeHNYmXGi61N)(}1O?S;ydAqyX z_1N8sWGPV;2}|`Yo&S=bms8b`d4Q8x8omwEKvS=K>)unh>)z9Uz4otv-&^y4Y&#Z_ z(L7Q8OvF?bcH1?iG}FaDi=)34-xeLaBguslMn<%-YlYn#386EgX(;JPVT5fFttB5C zjRo96`%-D>KP1taR}8Y(dF*xAiV~uf*T>kK$_$m} z8rv3G7*~5}M@C9)JFJvEEhl4l{dY?1MIzJmQul_2Co#{)y-K@+t=TO_Be!~EL$<*- z?PgA#go3TJ9hiw-e_gN-@Vi6U9+a)*1l6vBa#ukmC#dBFwH(53V)E_Rg|SvlV0Pzu7}fDZK8z;+WlqmAu9^VSWXmnIBecoPO+l$#13R+|bQmnJXRN9@CS zt)X(G06St`Cz$;VjcfMWOBe>yez25(6drM~)-eS3&5+n@3D0QpWZl;2Vf$tX8G8xW zRFWhdCL%hU+1ekEcGuPpJ{lM$2Sc6>Xm%dt6U{`{Iy^jVJ+E+8@3=NVwb52@X@6R+ zFGs;dnBanBI?y8E8P}X7{4X>hi{8Be>d_hr0Gvle(>O?JD&(Y<5UioQex-m3BGgMg>Gkk|$Uo)gK1QS}zklTa5ih=aUpEm`zP ziWCkk4`IJL>S~fjwMs8Ek@{tnmk@5X<|oAToJX`CTcZAvZ~HQa&V1yo4ZRnq5lxg9 za$)8R`i*h3Nb(2+9y;j#pA!>uPOH<^4N5gig{#Kavh6nKvO1(C)II$L?gV88I;$s6SIPg0FIzT02 zJVw-Cwz$d|_3G8X{UK320#cwz=ct9&;H1`|Kc@OAl%cZh!4c6<={Ze0_2fs7AHMqC z(R;9rN0SRovJOJaHb;e5>~;0bneH54-hZ&z{h8~nJLhMjM|J*u+`Zp* zzw+zFHCA5`b)s8xpfX7Ws+ z?!+9(^NV*82ByzUPM>-6eAGgyaCbsrO1PLyb7;E(=@*Kmo}n!HCl&R$T|pNq~EBfa6F^;x0P4 z8qqY@6QIK#R<(3|aQ~)QIe2hxMKDa600-6tRi)7kEqg z5zl7&%Gs}E68PCn>-_UUmDluf!y6!)vkM{5rb*7s>}q8%d`5P4U!55Uh|#3faaPH9 z3?yF*`HW{m{s9*sh0Bf`f4_fx_#SX4O&Na5i&}I4T{ghyFMXZr;B|xAg(vkxH^6H^ zQl(Bh_i$Y!2@^`+>jpnResGM#U$9@Z{U))oJC|wlxyp%4b+>a&b7@gw+l-G{f}akF z9Q&O2y30#4tcA;G@#Ko~DO{bS*q1*f!>tlJH2^kJk$q2gn@`Go3mK!`s)QHc`TP&* z*KeBi>zAtp$mMxUk8Z03$dzMO3DDb#HS*(yLohMsQ=jlORf^2sg+=kRRT0M z$J^?^sP=av_p$Dp=p7PtR`8>}bo!Z+A z%hyV;A$huDcV?y9ZIrT{l#<+xQHz$oWa6aP+wnrSQRUFCWKr0g4Ur1|0ac(ZF6`!4 zBr#Z}VNzQqxfmLm6sN3vYWK8=LdRG_%QLL90dhf33i}gR3duuS5-Tcn^iWunn5TAE zQpd)GiL3J#Pp;Y^Qn{3~(dGDvkpJHEkK}h9BHmLBND6`m8HEs!btiNJ z-kedYvEMxpmIk_~_BsfDIMab8MlHi`Hi&8ap>tX**iDDu7<>Sr++r2HJY@W#aGw-- zzB#;fhZbWtVmdSqfIB$K5p_N;-hja++1MaXV1*a}y9&D6{@5drXDGaQdcM}`jcu2p z3S9*Y#2i*DLEl6NXH!2Y$AYONBwfo51O!);b#18YXeSs7xnQi;IhX z$y9sCgSi}Fq=NGi8$qvLhD{l&052}wsog6B#WXa0fIui@3^3-1K{(zVx}Dlv?u!I` z_%QF7oiWWoqL=2}b3-zdPR+72#W>qELl+la*zsZbR%7?saPL0=_>kBiEk;|M6c3KQ k+2HS6wp^rj-)VeXu#edt1yyIi&uHTCraNqYm>Kr}1Adv_-v9sr diff --git a/doc/sphinx/doctrees/examples/modbus-payload.doctree b/doc/sphinx/doctrees/examples/modbus-payload.doctree deleted file mode 100644 index 37ad8a6ecc00f06c6ff20a6bd6d657d0535af5dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8627 zcmeHNZEqa65tc3M?PSTaQ};`4gt6f06x^HS)Kv|rEgUCk;6x1qr!CML3*Ij8xYge7 zhUDt*P#9=Y6mS53>-InN2lNN_A-P=LNe*fQN2e%d=4)X>rL=++`nD|k zQpF1A&C(#Mgx?MeA#mQHlJ3N9#<807Y})-IPNFy+wj&m1_MsA}X6df9!mi#`y z#+UVa$RQWlK-*17vVtQfY(@^<{L-qDeC6~-o>m9xKC2EwK6RQc`3L;{c}XE=&6@A? zmSM?1!r+p=@q$eZOx}V1-%ATA=%xo&ouW_mjU-N4`FvS>c<`N~59(V@tvKqr0F+*e)8FG_J07q{EiWX2r|r|2cj}kNDL5( zBP6w&Ff3Ub5yW63*tZ3fN?x_jDvKP?;h?#9aQL%M5C0DKTEw9E_@}+Y-hRWaHW*J4 z_Mo$?7H5}yJ|NSqASq*!(Tfd@&`g*a%}fYx7fFXelhaMhE)HpG6=)zkGQ2`D2F9=mwh`65=huJ#+%rVfpwzzNzsSIzwNqeC1funKBg1 z)X;S5nV&u~vwm`Z%IK(hNj>`wZ}DS~rH+*rxQDa?NJJ#*O?n3nJQs-~_*!|$Sl|}J zi_$QbxXomO@+(o+oZ)es$3vdrqXH_1Hox37DMFgzby}$M`88>CC!a3pFW)7b ztW!w5N8pOTm`UbSm+c@&(`yyi@;jS%A^G`Lo&5ZKk%XAc+ouz6y5=vWEfp3PNys7z znZ4O&o^i=Jkl@moO-2_<$RY`ufyrAv0!xb|WRZj{l90FZmbY89NJ17#$p1kSa^8Yi zMGN97S`hpf&sR+2qv$g{E}JX`jUs)U7Al+Xbs;NQk4<^XB_eto?H$R2supQGPFrED zsBJL$?%16mJ7zH$e zdQAX1P`I{yZ~8WtZKs^*yBElNp_h=yT+D`-rJ zX{mo=$^$5aCCs!QWiUn)Fz~&*6Ma)KQ+y5*Q<5*AU)Q&yVw4BDWJQz($Ri=?tssge z?I$d7tp*IO`JNu%(c4UjOt?ZDP5{>5y!fnrRO-7q%Y#9TeULIhHl8P_`kIuKN89Q0tUqDy^`E0xP9-LA?qw4Y<92Axa{yIhTuZmDlw z&^ZiNsDUxqwySJ;W0ZQsPP9=KFTr@!XU0RP=o53s6wbS4!BRu_L~o*@4PzRxM5rg| z)fzF|cIlkd5_(g?w*?yB(h#fQWg%mo!nDwB%Qcu7r^T9;i1mx1H4F^FjE&3JXlT-O zSfFPC3K0Ny9UWW!V~e~vMe)N14KLMez3o61oW(L$nTZ4r^mTMFI<<>(5FA;*F^doo z6#BAe47C+y7(>7~9l%knd^qqO@BTBsh~e98g3>r_s0!(QZAITjnTVbSY((QEsLGH~ z#cREc&MP?Ho43aWi1WYcn+9*^h9}$T;{qBxw$D`jrZfAC*(qeS3mW^|a^VOnn z;-U#VHVogX^*$T!Z72MFs(*Ab+QL&TIJRbkza3dKk=Fcq!mE;h$nQygXYS7u>Nvb= LoXsvP`kns(ClSDO diff --git a/doc/sphinx/doctrees/examples/modbus-scraper.doctree b/doc/sphinx/doctrees/examples/modbus-scraper.doctree deleted file mode 100644 index c21e58e591fb12e5527129f595312e6b67408b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23370 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 RZi{wy_$nzIH>(ET{{npp6xRR% diff --git a/doc/sphinx/doctrees/examples/modbus-simulator.doctree b/doc/sphinx/doctrees/examples/modbus-simulator.doctree deleted file mode 100644 index 3d5b66c9a0f03ab381d540c77018f11928fb3e8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11210 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 diff --git a/doc/sphinx/doctrees/examples/performance.doctree b/doc/sphinx/doctrees/examples/performance.doctree deleted file mode 100644 index 414dbca74dcc7422873430f8956794c004aad504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10613 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 F=Ra+lHhTa7 diff --git a/doc/sphinx/doctrees/examples/redis-datastore.doctree b/doc/sphinx/doctrees/examples/redis-datastore.doctree deleted file mode 100644 index e5d0f99252704b306624d9ec66d7d4dffef9582b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21030 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 diff --git a/doc/sphinx/doctrees/examples/remote-server-context.doctree b/doc/sphinx/doctrees/examples/remote-server-context.doctree deleted file mode 100644 index 0d823732db9548d074ea014cc5310d801f7076a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17518 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 DBVeUz diff --git a/doc/sphinx/doctrees/examples/synchronous-client-ext.doctree b/doc/sphinx/doctrees/examples/synchronous-client-ext.doctree deleted file mode 100644 index 91674e5f67288e155864274b5167df815a2114be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18229 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 nm1DK;{Oyy=QcYfx~oIkzs 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 CjaV)K diff --git a/doc/sphinx/doctrees/examples/tk-frontend.doctree b/doc/sphinx/doctrees/examples/tk-frontend.doctree deleted file mode 100644 index c7f6716b364d89bd5e3cda6447348b5ee4f589b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29046 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 bKJhlajV%8VuvV7~mcsZvIZn!E{m%aZ$(*FL diff --git a/doc/sphinx/doctrees/examples/updating-server.doctree b/doc/sphinx/doctrees/examples/updating-server.doctree deleted file mode 100644 index 3d6b4325200eb1d1a2efe9fd65dfcc2a0b97a67c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9631 zcmeHN>u*%Y6*m~a7HkYD&4+?A0VQ6i_U_UawYB870YVi4778YN8YI&Xl`SkUvvVGEo^#Hbzh3!Q@yVS3achwZ za~mh7ld4FV!Y$LnNTjy-XR-OW;=7{lRx}?QmFrLxZmw{v1Ep-LtO&Fi80>H@Zmo{{ zxdj3OSdQ{6pl}P#r^On{%kC>9wCNh2e#0l-#}!4>9mbY^W!~>*laY%0x#@zR zuE}Ja9(TntA7zO!-8_r9jnm;a&>RWf(Z+)FJ`WE)OQ1R*N1pmpm~dk}C%L;}^1iXL z#er2CL>2dIVXid}98~P>mB2XHho|UlR}2(#&Mg@c5}HO#azQS-#f%fGLe9$-NJ3sc zDC7tDz0Kt+xM~oxl5tieu2v{M^HV7}^0Ew6) z>ppx{iG#iL;$UBtaw_D<@}pTkz(hkyZptm9AV0(6oV&6wj!Ef1jP4(Ww+9@w2h5$k z&)tvzHXQ$O- z_!($5s+Ne6c$6t^fybZU@2J?>trpvs>!Gl_HG9EWlLodJmd$RvVsvYBa|*a)0A$;n zUh?yoU3K6x=nW&dq9XL8wY~W^+hBY@Y>BReC zRys;+79bKwaVYAo&wcoL?AN}G;MDOT4xvz3>M1a8xv@&0f_y2y%?XMpkFnt)`N59_ zO!$#_R9e;+E7>UdtrkzAv6`ob`(QN7`&Tx9q7g}81tpfxO&G`JQtP~BKcjFvj*S)3 z|48E%wN4CY)Tyu?=;N>!#WSTcxX>e>B=6zO@T);Q%%S_*`N@J3H5`KGd5gG;0yXyP zZ>P^q9Ktlf2z(i&&Ug;WT>2CeusT&nUN|_B8upAA1XmTZfvA@fV{#qheZG= ziYa!mfzlpLNug7Q`yE^x_=sY)zj~P+M0J3tS#D1jnN=kNWXhBzC}GlH=&}=uem-p9 zt;7E`r+3SkU-8Xg9sG6gz(Z;=BuCX)`=wtn6nla=!b0!3*Yj&U!tKKt0_+{%FV`xO z&{~D}bq#tzM)$QBS-ZxMG*lwl!uCA1yAMj9rqH}TVn1j1y?Bmr@=E9>n^Ol&#kl%v zhusB)vASJisZ!h9?7-%Kn4JptJvcy|Lg74#|57;tZmb;aB2S#R`IpIOw@wvP>7(rx z7{yRiok!kEO6}ejdwu`c2cO;V^)|OWK&ajkK#~Q$3x)W{18g?8tP>J+>3>xEVcXlC z+4Vx$Vg_+H5xe_37w;pgO)0ew`0$=Mg;$TtyTLhMX<~o#u#-l216Rk3~Z8akIQQ zQtD!3p4#(vR~th&yX*nGhhJ2YNDYQT9(;o2tulNyb!TZ0&bZRg+~*0Vy2%sfEu^CH z?h{lRViOc9gH0wS1=gQ1+SQu92siZstL7xLoiCFASkx{7pr z@6sV?+5#}pkxJj{4rG(E=tUv!mMXHv_rBUj4g80u2LA0uae7glUKFRk?(NWZ<*cf9 z>UL3=l^4b78NCzqK*}agSqfhirx(R(I=m=OsUdn%oSxLm7scsCae7Afc-N(}<9^a{ zxF}A`;o(%xc~PAHSEGUz{eKmwClkv>Oe`N_Vkv+3bb-dAd0*h;JXNol3A-CSw`z8- zjbd>*j)J;Cb!+I+8WCWsZTPSpZLfy0^%2ru}gDsvq7^ z_ekhs&#k2B+t^9w=jig&J>%A6G>$b!%|SWf^F!@x^~BmwU-#UtQ|N1^=TP2Wax2qR z-7+TRM5P?uM`%CLloE4nP_K{Ui7X>EQMSgLfE&#t0bFU({Z6C8EtWmiX0+>C<@h|v zbyDoftv$DDRTxm)A6y;+%L1lhdQ!Nbp=TRsfk*^BGcW7i<)bXfjL0JupuYf4uLn_Vcs~&Vx+j=>U}>oy-^+EkCbU*M5NW6)oB*U>?LXQ6 zP2p~3A`1qX)e@J16?jd+t#4I`Z2ObmuW+tADz|96H^4!OOJXvRKt~vKgZmKA4c7D^ zB)y~2pJJ#17H-dyJq@`|vOwlHnBsyiwMgy&*Ql|I6Kp}*LiygUjk!*71ZWha-w`Rv z@;*csSy?Z4=2*bQcxXY0k1ItvM!D@1!)N6h2?fY3S09tkVYAWTk&6P8|WN_M}0vaI>DO| zDTKv&SG}<`rn~2^;_(XL$yg%vncQMyF>8M74A%y7v%$AHhB=0iRp#YQ#ybT)m+|i} zf@5-8>{;-W7q1wa^pK8=H+cWR(_xM{0SploeHqU;+)usb#VML%LTGJG$Zz2fkUm|CBFc`Gz=-@#F>Z zD>t>TEx21@qWEDTMm$b}YGwmbym9k*r~!(%XZ3N)#O2@JHL|x8#j{%RY0s=; zR)!*_7Z_fgtF$G}M<-%gIk9oMnD;3zQrPif_+}&b>2UAg$$Z4!PfkZ$c#1cU)#>2x gSC%N!(o3Z83i+wLZNTdE3#29vFOswQZF#@*AJvoO1^@s6 diff --git a/doc/sphinx/doctrees/examples/wx-frontend.doctree b/doc/sphinx/doctrees/examples/wx-frontend.doctree deleted file mode 100644 index e3f93f0754376cd7925b84e24ac1821d9ae26621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26776 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 Fe*kdDN!0)V diff --git a/doc/sphinx/doctrees/library/async-client.doctree b/doc/sphinx/doctrees/library/async-client.doctree deleted file mode 100644 index 549c6a58e846d611635f37d560a5ff2cc3fea110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27467 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 diff --git a/doc/sphinx/doctrees/library/async-server.doctree b/doc/sphinx/doctrees/library/async-server.doctree deleted file mode 100644 index 0c5f143c0396065d4534c8fa797fe303717573f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55492 zcmd5_eUKbiahI*T)9K?*l8xeuk?gV8A1B#&=Mu&?0@(v~qhooYFC!wvjV z{Gw^Jyx?rG|NX&z!GyoHqc6Blw^K6$e^cO(%{h+Oay+BjG3H!&!r!KQUdNj4de8t? z7_E2PExie)y90k%{xu>RdB^l!uF-L)UA<-NOVe-W6y520%ftVh-P!5(Qq!r=cHL>< zXWDI>R%>y(Va;~*&eF8*F12ct(8Ot@Gu3fD;CfcCog#LC;%2K(l(*Cxy6X}bU4OUR zopn9SgU&jwYMpaFUh8%`(Ag?yZH86GPFyEAnBs(p>eMmf>aKeGc*pUan$wu78jA+V z5QMXn@j0c}>s*@SAk$jawdPy8*XH(vCS|R^aO$M5yMpyr}BTVfy(>rbu4ec~w9la(hRBdu{QsY%M zYKT|WSXGTZ9O&k5U}n$VLD%2n=^)dl5tvivdFEz+v}Rh3ItU3&Zo=H;4}+>3io6dU zg2oQr6Qz3(5kARy){dZ63Bt!n&Dx!0V*!ZxpdtLOTVM8^Jw2`qqex$T*|h=jidYAxuUR&WMo52MeRt2<5IY6brJ?WMrq4qq6H?S@se zJa~q4;*ZdCwZMN>(l80AS#PNgX1W;!0Yj#}bchB>Fyn89zu`;JZZLz&CZe9+nKxi; z?TCtui644=2lf^Oy`^D!Mn`W%`e_~qdCjECYr-EQ!IqC(XsnDAkwCk`@mWX1#I7d8h9qCo&M zyI!iD&| zj~u^U6Rw@L27d`WPYpyQr4w^W)*r}a?}pY&Om%+lQoGov^zLWT@ZWd=A_0Yt>SFqCg`W^EQ&hFLtJz=%;~OUq&2@eDvhfGzZt`8|Im8qb6) zyF$3K3G-4hl>Oa3BEVSuZ!A!b&UG6N1_FLap>lZ6LNv%?;&aSJp|gBW_ea2NF}(SE z66FIhmGeF#__-wHXP>{5;FaD2*vnj*0LK92Mwm{Jv6nK<_vfNT@NS|~Xqy-|enGYg zLid-}$ay3f28A_-ClSaZ$cps#mlEYSmD_uJ?7U5zA_7QjM-hm<6DkRr*gL2IF?TCz zBgUEe!#oAp`&1SZj7z0{X(II@r`1@Bh=k$|)4V?fz^oJaL#Eek1O%OXgSLHbl#OG; z)}a{@t^HxZa#lSsf2g3p&8`Qytrz}9pxx+c%UGzvOpc*b9E1WFn(t9i-6d5vBHVDM z#UKd_JrZFEoHt^%2x^6^#hkX%zW3-Vd1z@^ACfJ#Tx~BpiV!VA6Yan)X{n7U@ z=zDjd%KaFVJ1V|nPq6|49PmYeZeV-}Ti73wp70A|#uDWO!Nr8IKAazHg&CDT-_hG< zM3erNGFZ6~@jyTj8hNBcpUY!ru)gCnRop1uI!c$%ML@y@J0!(#n^?bM&k3O;vbNtt zB{go*my(q@$T|Wu(H5Iz9@Fc_#C~le*>Cjtcdco7rc;MVc0<7$Q!1_g1Do0a(GZ3=`x0nFj3a+MF3pPl5y>6T1;j>H+^@!)kk&;W{VODq7AWky;Mbzj;hXR* z7!ZpNUu1 zv&nx|ti38Eo0^d!>3?(z64#z_=#U1Pm71Y>rlGZYW>%ZiYo60t(rN_UwOK>cYc&H> z!gXz~<23Q%ZSvu26&bHqucbCr^+K*xYeF2;ELX$&EzbgzSlR|jaZS|YfeVoE3H!yo zZvFxvpmgCTe+WE{(x+Qi*r!4qY&)NE03cz-^g`|2AOdluVfxnxRZh4?r>ahtq>g2S`!3!8;Z67f}6;KV*nEs-A5M}4~Ux9A>U~Lo^?<5+GxGbDhi&p3Jq5#9Asqv zAx+i^kg;e7rJ37bKy6m+$A$C>HGYOlhzsT{qfxIW0Y-c#)eMleC-H$0FhU9#nu-in z@Ksqodj_j>Aja8<1 zDu$WCsCzu8h$}L&r5UN)Hfq+KRSTARUc&xaD7|EF`3jR9pc&U6!fwTqhe(iqys}t- zrC$7k6~G1<4FmrAf#3!UUt@(t=h7DlyQQvs`a6x9VVySWeL=A6izd;cl-2}*O>Bmd zR{(%r(F?$$yiQ<&z*hwu`F=sZ7^@`o;CN^+JQN#ejuZ9p0* zIgUfnmOu*rht@BBrt~omx`y!ALOqW{F1rKcM*=t5#_f61yBDf)fW<1Q61$U0ObE?> z8#1U!U}6)Jv-eTC7urZQ4HnvL0dgA; z+PpDKuBD*O@ld=K`vz8sc|0cZ7_kZ$g3W&hB{XX!{Rxix`8{!(8kEc!9u3%>hrLLEDQL_OpuCpq@x0T{edEiB7jHM zmb$0t@EInJRLp~fBA6$oJF-oVc~TzZjN=+w#eP^&#zL1B5~$Z zdv|kA5s5WP=zI&rQv~fKY;a<7;C4q)=Ns4}_iO1kgI5rbF zz`cdxPFr;?;;K7g)M~m6G!yJ(%YMys2=KHFZ^7xDLS(b}&6Wo7@{7tuIv>2vo zvOU}#!)-e)w@*wXyc1~5RfJIp(}>zq`xFoEWAaGFG)Rbk+=qFb^bW~Z{hS9m^9}xO^YsjOurt87 z@x6rkC$RQsEx9R;mEt?=43_zVJio+u@v?2|Ujoe*fn;w?=qWg7r(;|TJ0)Q=bm#Dl z(}IFk$Gwl<5-%P&a0*T;&$|TK{tSt6$aY~ug9==G3?2^Q8Y^YNwWMQNugJ9`aheK@ z`3cEIN^r_Og=IetO$f~4zjtk+nra^a)5fElnbHnT73g<==dZpU5rzFM6_n!w_Ftp8 z^Q9h#$cgqLT^R$+38a;sUDuQ_P)yt9S%w|OwG--Mxh)sf{TExh%a{ZI$9h$rMM0uP93_tfOC! znNFk5^1pZGAgihYHtDvi*O4E`=sK}`8f~cVCGxZAB0*VbYrCq=*A#I z{M4a>BH%6>eq;xO!y}TbWDgR@5@BU&Mg$-}4edx6_dDwd<3gDWcI+<@Z!y;ysw27M zVO~Xb3KhL!=`P-^!7lVUbPrQ}WZnB780R3AqJw+__Ev6{t%e&cqhErizRG$bkFfg} zXEU&iF>q(8i;c{8!^w467?@M0cQ7unAgXt|Lv zctbuzJ-&lpQ8F5LfQQAgw7l&Ustc5duS@tpL8-9+>$y=R(fuVKy#57tx`6MyJ<0b8 zPD@X1e=0?t;wVMS${hDcP%CtltW?@jPQ*NANU35EZHZVw{PG3FB(V!GMrCEyQ|^Lx zglqEG)l*6a;|mmJCwsY~DKy!;G*7^JlfC^+vU!ueGITN~dp9Oii%r+S>6D=ttF2nj zTaqb;bGDMi!ip-LI|Us+*}H_wy(>Xd?Sq}{jRLuiH`zM{T*&|sAO58#d+!zE#mSz| z3bDx^lXwiVgnls(u}r9tW%3%X}qc7)J|>d!Ud@?Q3Uw7(9(=%+l#b9XW0YfCJhfIbbIxg z3MKW2Oj4hclET>{msIZ_=)8`s?lRg}^2irjMtf3r6_?St8|+y|%cUij(ctji_F1?^ z&F~UW-+eQW=jZSNetd2#p5KdK&_JN~pYxjeE^kIP?*lBG!FMS|0UcT}ToM|lJo?(J z6ee|FQWz|q`vo2bt7mQFa^Cj@7xoMAmzdtH zL=ji8+_YF-Sv1RKvb5ZqCQ>*?PMtd>5vjG zMkS>5MK{L)1ja z)ak;VGY-XC+*qXMc6&ak3N zXQ!aUb4uJ;do~bAa~o_<2}j??%PCzALP;GHrE*F)3h`o2X&)=ZqA-(qET`lip0F-p$7NeI{$GndDA1}g5cv4qndw%L8oM8t2KO!g&OyD=jv?|X)aW=)Qndd#U3Aoi#hXa``dkVld z3sR&Uo8xooxh0IGPnFg}SY3*Z)bNZDO3DllDUliuMAVSiKS{zbQ;YYDDeEr;UjtLt z^&J1iQzbAFgX>jc9RcPZZKvbWS(90KD+Oo|(%XHgY73`?n)=Vunv%7p6iHD(76M68 z6cQpu?T_Y6vO6a!_$4awPBAroS8z2jH67xxk<_HkHS~E{o2Xkgc&P@w;l`TNmYlA( zpu@!*9{7d2G25L-=Y})L{*)yvSL{98qLHnrb0gAHl%%Xnp`ok{BN8HIO&=-QMM=jm zT@@6^=wi}ihv0BvireTZuv@JDde*^3z$LW8I6VUSbI;;JFN~SZ!6Hf0;~C%}A9bs8&|# zJ)KN1%n_BO6;@Q~JS*t%y}&!y;iD}SCU+cbWIw&y=ObQ*$d$x3IUW{+D4_`47mDUZ#J5LMSP7Bcw!X zD3c}%HB+V*sEAQRW!*3M8kn-yC%N=^X-%ahm!1#;Nl_FMB1M(R6NP#zQ3;g8XrY=u zBe)uvnl^fl;ya}kS|~^HeIdvc^&(kPZ{G=qP}zMq0Sae)pz6ORI1Y0Zm$R=DFfv#^n~<-+|Y zu)C1oAa}&AS=McI^T*XU$9C;(L&kVsV|Nd6CAF~`9t~3)th8FGjXjdBWN6=CYU46! zRi-x9?4``TQjKRfei?fUDc`(K$Fds<`jUg2u+?>u{@T-2P!k-#mX_dHv2kH8B)2~W zb0LTG{GHR&oaFAO-Hq$T5>PKL`g}u!ip-Ldj%by zVd2KwlVOo2HP{Rb4#168Th1FR5>&P?L53`-atlHG7>hUK+I zx9_m99!avSqgzgubwZw{&kjnfw;xC4R_xCUWl*Z+kEzs~YQgU_xm(>-%hP$}3#D5A zQFawmEqsLcq*`)mrKei{EsxENRLhHbb=NP|@>7Mi6{K1=j}iQ#=|fVg1qsoQD@?Vp zc5rU+-_#%RlIwW zieIuK?;G3D^Jc-_!1Q$mZmJU6a%sX%`>ar9aDS0rGvTkkw(bmJ%ZOnYN~?xdl_Dd> zykB%ZMKMT)6tfo^HzE(>fl%6r#tnMqhy7;WVZ^NzZ#y zH%?o%{`OFf3R z>Ft@)`obN(37g)Y6=F$I7ZM_MO|R{yH%1qO(boir15?~aPbmKwdRz`*6iO)npAck< zs*x*k`iA%_+P*|#MSUeP7Wxg2IBXv6z9?#kHgcB?S|2W%lYAUU~zj^S8hdvLl&C1 zK$igHU0Q3FFzt24S-rDk_Y9Zll(cI5X;fat{#zkzOp=-hAigV?XPO5jBk`LvUoY+; z%)2==;&u6%Q@A%c^F^eQ8dHMG3YLMa)JJy;ou`O5FQ{Jt4S-zpf_fP`89`l3rWOm!U^Zpw#cHc| zGnGs+jLjv9g%wpgZxD2NP~Sr3-pewj+6Nod&%yB6ctQOn2toS%6z3N6r*=)F`@?-E@7 zTPb0I@;>AyYx))gIIGW8D5(!KNu80B!mBd5q=O`r`3d^4QE+Jbp5-Zt~*s+FgnHErmgm`hhf%J-m6-re%J^mi@Ey!BXG? zP)HRfPSpQ}DS^_3NejqGhJGw?%cV5tf>&a)wlP2W_kxSw)Nr4QSd%L;e_mP#$%~RB zyEw2)N$4USQbN{cm!b5to&sUB)==y(4_xePdL`ynAhys878wG3{oY%Oz4hU`90edH zQb68Cm!T5!o&@o;R#6fA1pR^8|3+ULIbK?Kg_cI%Ed-e|l8`JZvhQ_`P{VyU0Sae) zpz7Z$I1ZOaKE{S+B4!QKP(|}4x7Kw}pNFmD?=)(Lb=t^%pLt{o8|F=JO1=%VHzg6L zw)**#-$7FpJ&30=SYUoq)N9>mDKjXD%$6{gFm8jZ|*=E#b9#>9|3Y3FL&@Pa1{c9 z*ivYz1%dAi@nY`a8CHn-VJ7id?jUp&$zw1zcW~LQdZRI`*G_2*CcOD?!GK$-$xUl| zYl-g9#|43nGzwD%osc&u&^u|~_A98xiv2Sob;=d|h)TWNr}6ttPF8mYeBtgK@`Yx= zd!ZHbv`29U%!hK%3^Tlzp@RhGo zgir*3Cwa`nObCR^l4hVtg?@ZBZv0E@h%_TV^D(e5)*eEy1A;OZwy{FuU@s54USBm9 zjat_;`dOqh_nIR!UZBej9q7^cLdyN-dFE!C&@axIC-6;eR~244yQzv-;P=CkKUoz1 z5sB5ud>&}42)qBEj&jnuj2S^Oi==&qufqsK)5ZuHEieMJmE!9oUEsc z?vqS(sX(p_35NdE_Wwk*&w*S(_i z`F1Ap7?2CSK=QCl1#(y2iLVz4Un&Ai@*TJ{lkPLcfZKw1J3F0Ii00OPAf}2q0m2pS zm$YvCB~&8Zy()xGIPSYt>cw&ReI`4ri{mz5kVC!@j@tpPggB0mcnW&alLsD3?gcMQ|utdag_RDm zr(?jIC0pWq7j8VqV6&cE4fq_Wz${ZtYFxim|DiapOVZKTE?Bt$>5^h8Q`WScyTk@6TA zI%^O8+t&nTEIi5zF{JwxeJed1GyQXZ(#B6YWD)+dji2UTIm^XAS31QV6{!)JsF_;k zFpOP}6V{Y+BH8~q(rKIZRo!nn#&yPK`}uUUW|>0$AneT-=D3mQEK}4|Ss#NY06C`4 zGRu%i3dgS&?el2Hr4v6t!1XZLDdtO{mW?;Xd`*_pN=-3u6|%)C=6+U49C+q)=1b;7 z@G9RCc;C^y;RR;{;f&CJBX0uqhb<34n^ay_Z-4J{{k01C>K6)>ky%%-|*;DXg-eexMaTho3ySCp4xnuhy`0*IF z_5^-lPK$CfHeL;8(@i}$+9!Ysh5v(c5GV70V+#L(zVKw9jaRC(TehDtzij^qImh?J z+qh;*tDE*A@Za_w_;C)|-wa*q`n&b6=gc{d2QSh#svTp_4ekzn*y2%j@x4;P(ewQA zw%&2!y`U`FN57BNEDzph;j~zd`vU(0r5#y!m%G%QbsAMc0c)e|{q1xe8@vg@`a ze``x`8s1XdaD)4T3G>hl33Zu7woGDOCXp_idzVR~%jUx~=2vG(C(G3NWzyg>X>Qqk zZkhVKOnqG@B`%XJmPt0tq{8K{zYE{Y0jot`m6;WFZ%3`$=|E;5UKiamfV(}hUI^K2 zg2O83`CFr%^G893*ct4IzYRk!99RcQVJC&un2cS+!xw_Mfxo-%K$_cXxKnc-yji_f z5B!mL=?w_5(#-vBuG8(*jB2;j2xiPT&iG@VQ>)^t7jStBS{Vk8J4=E8YD}86s|G(R zQ(dq;vr4z&L31MwJ>TD1?>5`jwrh0jPIa*ft@}Hxb<5Rf8%7n* zNzYmH@YR+oqaT>N{Be2#Y?bD+&;uZS*U8%^ZwmZ9ZKGYCv!EVuS@qye>kT-*5B3D# zPhNT5_0X?7ifF^3h`CgT5yyh;H1-yCI zHKB(Mco_~5gSMK|_`=qzZX16;3px0!lFN_W`b&eeuWg679@oK#_WwV{%=82IN~Ae0@| zI$$ZQB`pP3Xy6OI*@h~+jK#JC1CUhLX^gTL4GytaF2dfIawup-Ow z=BAv^{Iuyc8`FWmGbVFTSl63Fg^gRSs4@b7EB!F(g3f_(bJjpdu+%VI(*U1)#vdbN zk)}K2Z|~>}piDHDI(mx{X))vUsKT`ia`US9cEQ)U*cdl2G8q~a<1i9D%L4;iMBf0< z4Ac8@NHL%Y19coM`(q8gHQ$A`2WX)Viay_H1^zFQ5y*{TrKaI%w;EMU8h}#;Q7rqLjn-+PxL4Ij%*5@FLe%hgpvi^0*M#mD z78a)3OP&e$TcYmaGK^_>(gpp47jAj_V%4bdBhF$l+fgMIQ|; zv?g~@_g@uvxG-4AKE|S9hQ8T?&ep2)xMAMJqA`VJinsJZahX0SF5?HR5AJ2L83VNW zuzA+}s`&(q@f7GOpwb5+1NtCTfFFQHo?`)(qACSc`XIDG9~5}$gMu-A5N^Pau73eY X6NbD8ejmc9j2I*67N|Gf*{S~r2-Dy> diff --git a/doc/sphinx/doctrees/library/bit-read-message.doctree b/doc/sphinx/doctrees/library/bit-read-message.doctree deleted file mode 100644 index c850597c50bd00d6cc3213d4385dfd8c941d392d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67175 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 b?0M&bM_|~xkh@`;lUaWRhc;Q%Ys~&1bN~;L diff --git a/doc/sphinx/doctrees/library/constants.doctree b/doc/sphinx/doctrees/library/constants.doctree deleted file mode 100644 index b606376fb73ad768b7594129ff5dce4e8fe82818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44657 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 QHtqAq$gpvL^yg;&AK;LvTL1t6 diff --git a/doc/sphinx/doctrees/library/datastore/context.doctree b/doc/sphinx/doctrees/library/datastore/context.doctree deleted file mode 100644 index 9c8c53ff77bacbceb127195cbd77e640f94db12d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42980 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 O6~=Mu6UW`9x&H$;J&sQR diff --git a/doc/sphinx/doctrees/library/datastore/index.doctree b/doc/sphinx/doctrees/library/datastore/index.doctree deleted file mode 100644 index 9159561b458f082737bac4b0d6376c252454a54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3067 zcmb_eO>Y}T7*3nSv6I+ITFQq=se1sGs)>8x036C!g;WJu2nrWet!8(}o*}z4+nL$K zK2(AORV%$WhX27&<0tUU*xuMFlnYTDIkU6x$MZhVGxN*FAAjwv#UJYBI;)*5?6J~0 zx1QQzq2$W>-~ETb`e*(QbqqVVx;7d2wC1Th(%LEQcw+d-Vh3$A=Zs8ihXCP)c3xMC zmH6+8r_JVDYZ2tT!4H-jJFras%%+2f^Ne;dmM(lmoervLsq?h91JpCHm5^#OC}e7w znGSO1n04ClfmAu492@IUc*?TVSP_!0%RDCE$_i#}ETpCbTc_4Zhkmt6@_F&StTqPy zCiCisvzO7|c)wMWN578utNU-(ls8Zy)s+jAQ}n zz6I6P*!CSe4yLjzv98kCjPq>v1@0#taPpNv&;3wT;m_0Op3_#wswl%@5SY0APZdS0h)k!Jka-Rb zy`=8Emu6vOT_rcp8JzEYL{%1^U4W-ay4obAd1L=2PbVz;7Od-Fi@{f zIi|Kg`)cWc)lRQ^W(Y3x#5!i2Ke<9ZXu|RYj%nF=W}Dqix=8rOWv{KoY2Mwp(=ydX zvd9p8FM7p}Gfdf$HYJ8Wq)zY=H?0uKJo48tU3z*kP3KkZxQG zzbJYQ{a>NZa#m`?erIm~4CBjrrcG=iWM8xsle8^&E~wbkK~Q%*fFNZUE4WRqA6ZeO z&gKN#o~b*jO@Wc$8&Ve(O@iU0%2Pzy4D6VCdN;U3mGFXxBg`h}I82ho88D<>!z*oE zQt&fgV34$z*JYJdme;vXCMBZNUXn}8(t;;o>PU{Uw6!=J#6I=7G1??t!D`R}QvdMy z>!Xi7-Kcn#1Wkl069-o*7`RMrtRKC9|0DEuQ`fGlUGs7>izVRx1!e@NMD-cYvYr`b zVeTNG$^gWW4p-A&ese!yVR6<8bXc%(Qr|?ZvSGzVw8U27`Ah1ZGo#P~CTchW+IIVGw zk=%`rwHXhDD~o}ry-S#5V6_{Cf%T+X9)_n*d~jqjb0miJgF>e;Il;LLW)aEKP zxENuWfh_QdE7WQj(~DbIs;q6k;9XnDybh!%S`bDq|LfE`FV z<6*}B1$7Ii#x;Bb5poRrDx8eojLee?SC)9YSyc6cdNWcbXVOaCnGkJ8`oLE`-{P!pPwIBQzx{FgU|Wd06Q&)4{ubC zO%fr;qQD2z+9-5TZFgoA7uIkcMyO2=GFI>)$S#~UL%J3&c(^yN4yH5aio@F?oZYYm zN5us!oePeOR-Fc447L+(_*#SevfamnwmLoj8xwxGQ2+n{ diff --git a/doc/sphinx/doctrees/library/datastore/remote.doctree b/doc/sphinx/doctrees/library/datastore/remote.doctree deleted file mode 100644 index acae54db8258c759098e7d472bef85ff363d3227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26371 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 diff --git a/doc/sphinx/doctrees/library/device.doctree b/doc/sphinx/doctrees/library/device.doctree deleted file mode 100644 index b8952ec2c4d2035960b3b87438b9fab21bbb9612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87838 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 diff --git a/doc/sphinx/doctrees/library/diag-message.doctree b/doc/sphinx/doctrees/library/diag-message.doctree deleted file mode 100644 index e21c8c32a19535b65bfa8a7c94166cbce9404100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168993 zcmeIb37i~9bw4g!m$f>4;R7SvW4Di$EUjeuHoj!}60+qJFgVV7cBXe{%Cj@e96AWb z*j!_1FxcZiG5Lp^7!q?P+~NHBM?yG5AmD_M00F|`0D%}o;_!R#RabR)b=T3ev%4e5 z{y=MMcDw4;x2oRz_WM@XylBaN`z_jU5&jpfDK|=;cD2?Tt2fGis}~%AA58o8cJJQa zx;uKe^+tmg&EoD>qth(;y2wTksdbNU_~+Rwp`br~q#`pxl|M z7pI|gb1zsbe_AFgxq8zxTYj^(sa34A;@(Y{ge|rcw`a=}U|&OM_G0YaU%+ zY)-Y-^@3$HMYO(GIXYN^HOK0!EUS3%@hWPt)Tp=PLt0r%zdn%WX42>UlbFULDZ^K`~RO?m7D*IIy2M3fY)mj-qfvGoI zSrjaVA+IHH-f}KfckV6m_HLmDFNqqwil$!SDn7+pJ%DmcqSt7%G@^2TZ{7 zUa%5A@b}Ers-IF~9S|&ZJw!L=-rsZM)0G79SOSju|r zf66QMD|>eAU%9q&5Y&Hku(Vn)`+MTO#f28lj$k<~v}TpO&M1s6%mY9*I4llgVU&Xn zD>!rURF>^*!z34T3T1#%KFh;TnR2w_dZoAY3`G4S?CKod!7Ma@oMZW!x`^s`5ur)%`Hu zFcd4pe%~%yCRY}k@(Xp}FBjU4!h~OFSK-HM9SX%lyW$r@eo+9vv&(N5C=l;yk2IPEa9p?Y z+wkv-Gc(P`OtV^S`-O6`UF^Xu|FRLnuSi$WnoBz({J#eHf0g6E1P8b?Aw18QVMe+x z$Frk}bA1~~P%C6jg;5GdfL->i2Va@($Hp`j_MBEOc+s6;eUb^q))R7*<&6o(Bj-{c zFe&n5m|R|O@NjS!a9-eF^jDQ%1MG#|pc-LuuoQTFwcMkTOOXG?tv1m1H2aS+`vZ1W{oN&akmnC4=%U19LFJ|dsXu0% z`+-*MK|A)CD+#Bd`OB(xV%pJAV%OQE3G86CFlQqMyIv8|-xEXsCjR7eb1#Yh^CR>< zb`viU-vv(%AqV_{7?5=_0EL$n52g}*KJ1lI;c-SQe=BYaF1n#oZ57~u#ll1pB02Y9 zlMtSZwHh)ojLl_9r+_2TBYt7BQ>Q0ocr+XW=OiZ&(m%D|ah@>y?#hv3_u@c$?6qQi z@EMGCsgxuG^r19SrRQ76$E)>fdwhI!U12oajcP(2M3grK{? z;U_X#dzrX?e4doC-XwRf1>os^wBNE(%y$7pB@5T0m zpMrwzZgP!m3H&Y56ZQc7BpC`Xu>-Is4MAZe@Jk-o!j&Bn6t)R|Cl~ht(Lj6bqwpI! z2{YCSQ-WZ0vz+qe@jeUnh`2CR^MYNF=zA>A+WQ_4wd@(%dcJPM&>^(`GsjOr$i7Bp z_S{&bgtHv4Fs`z3Y#fu0>9k0WsQL-0B_35-4L>jiRW^eSv7Ri6*f zw-h-u0w#n>_HI)rF&h+*R5_}a>ysS|ori88%`t#n5r(9vh!XM!-uIA1ph4=BYto;p z!RkW4j_hg{q3ZN}p^CTX9H>%{vdQik!@~s#o%y=~*h+E}!qm_FN)FPHx@Un%b31RO#6Nz9zhFZHD zj{%%y|339C?V4p(gLTbUKy$`;KM18nR4=KjWWGU16Y$~s{dha6 zkkSk#ArvgX&IjeWj+!R>3!6C~59@ljvmCN{%ZbEW__WL9EtG&A3O*uMz9Awfo@pJsCMP%ZaST0H5||UucrKOL zJHVqQatQdjDJCYk1^e^l?S?Kyq=J1Sc2h8NjnH_AOZU3Xa(EALlz?rtf+g4|ML@yk z=$Grrl07GEbWB7Xt3dwKedd{lsmAC^7*sL#B9r# ziOFox?lU$VK_P!653X(It6Dpm0vVsxkh&=W5OX_Nx z!pW)zOX2x5!^!g0UIO>kB*Sv(~zibDNZ>I2V<=S`*h3boW?X;XiTF9B1diABIjK8u$LgXOais1pH5^Z)uL1o?P;j}44Q9vWfk=FgUlIEC6Gtw6ioUmHw6B-kt#cqA^OAXyXj2;W<`vi}!*hts zZnhq`TudebUP^M8HV-zq;XvnWquLS2lJPVH5vE%^#s0LlJ&k^V=;F*DBSi3cdrt z-%5nLCgI(s!tP43U4S>9nnjtGfR_Q_4YCouxzgB;Zx)2F6c&nN2O`pka<*2CljR2gXKG`p}FDXJC~V&&Bb?~6~XJV^LRnwI~;L^@5ps*Th1_6M<6{`6CEcCQ4%Fg1MuF5X#lhcoNA7sbrIi>Gnd9C5`%%hjZrso77Y1Kwr_I}L|s zdPgqJ@?zD1F_252{Rk(8$9^aVk)qAFsg&LVfS;R89`qIfxhD`T{GF}snEo&Cll>&e zalo?B#nE2E&?ltCe``Y-;(z8wKLb_g>OQFJSvN|fGk*(E92@q-V~6vf`2N91#TX{` z5Atqml!0ViRiADz;@cPIlPHKSFOCP4%!Vjz1?*gi!in0LAHsu)7*dtb!x~-4g6L(E zESv$iM`VFYgCYx}L62Q7Y}B~m6j=ywm6MWI()Ccw5Rrw@MujXy+heSqjx&a2vRrN= zoUj2GdvMI!Q&Z!R3Dj7T%4td>Z5=En*#XTBA0>H-3DjJaq!+>KvFG!GLPD0cP03)_y8N1(MAB(tosPu9ML5z+36B2-gL@cx6fj&Fi#U3-1b?FLMX@n=LF;NO~1=;+JL^k=Su@kUDEIC1^D% zP9{f_Y;qZ|5UaTkJ7@^W@r@Vawxs#L$IXYa)Ssx3rxl&t!9+Wue+-8!wY@_EGg#(| zGhz6c>z$_I%f(#p5%6L%Z4WOfaf&0ZFjwh3HQp(kxqe`4p@!$K7N(1=0cR=h%{YWe z?&K)I>A!^*MX?b$l^71w6WasiR?F5{0pEDoOZypcJ41_~OE2e{V& z-himWD>vcMM)VFuA^dzVHO04N`sES6bF+oE;fjHS&aNF6*J)a_i476^DALl$us_8q z?y+}>DM_sUjZ}&WXgjt~!mbfHsMR`bL8;P)lxk}O4mr#)IMYm?VM((I&;K5Q-^qO^ z;y|Hm*`Hyn2EUlVc%Y3(J^u*r`G;iB@hGye=SiUrKa|$0gz)nGyF(ITIy!*rygry= zY`a3=*|bFWjGHsQi9k5WZmHur6FrtTXY<9s6KM0D8Yda~qO40Lj$eRUBH~CTJ8@)0 zNYdO|>ATR}@G+)!0E%>#vpR$7904yfrek?QVN4ux zg)vF@p;?jHjOnz?{W=~%pK%Tqr$*VwQ3b=cRJGWv$C~uj;V5`si{tFEtHrnwZMcj| zG1~ARr_`oM8#%)S0x?HsL}=W?(fECd25vOvXrxo4__@jSLF=pW{3e*yu{H0M8hxSc zDyBw5*Oy9-THDGMw!CI3Ty)OYpzlqT| zawxQkQEY{Nd9qv$un0^&k`pU%z6A!Bw}W}mKv;x@8ZTtJPEGogSg@R;D&f5>+(z!M z7$?|Y#CMurQO;0-@r(^u;}{Q4i5BL5dF zjxw|d-aQt(?)jilQ{ zH$##;q?gh_VK&j)`8dT+<_n`requu~MzF)XlGyzx$4!UYCOA8 z=PtuncdZaHC?|K)(r_SYJ$<-VKPQL$YSGx&PTonyaz$C}gCLW>x!|j1^bF z-BGNdl08=BQuUrI?9;3UH&t&EY7u^J;ZCkpu*@OrSyAXq*6YMjVQnfTWxd}=@I7X2 zU6J){lSsM=3gIu#u)?nES#64kP`$4A8tkFr@zbvBy`GzI%u?lPMVF;|hiE5snc;Y) zbUg{oV52ooh2e|VpE3?*VVw=p*duth#&sIU(#Rh2 zw4!4VTSYq|dl;p1`dMEBGg$U;2sAf*?BO|JmGqah(zvPuUStnf^Mb-2IN}O>kPbw% zB(vGW>G?D+@tAsTFm#Jmi@vII_1EPnh~9xi?Xla%&`=QFMWwW`gP)r$n`2?;b++c6 zgq=6ZuA;CLuJ@F%V{I!#*x3>ncHj(FkOT3w8~PLzPjpfrrl4@kP^ng>ucS9TV*y>m zFDcMyJ0D7*(XY1iX^w_g+rd`om+Mj6aqN_wUO}F_U>fq)P}F(1unP;X=7mhhA=6=r z$3OXLk_pBVODYXKi+|z6wH?2?_Yx53-1ob0$Yy=n_09Q4_n!b(E(GtCZ2LyTZ!$@3 za{mF=8&SH$vu{@!+&{xz5rdC8e{!2G$q`#oN*HIa*C-Pp0X3SAkkF4ex$m(5}v_QSey&PM`53B8o^u%uqgpA zQrN3_L5V~hafQN4hpBN)*%bEmatp;wvDJc2L+}k#NEgI6>JpituRFr8;{`4;fxpAA zDuTZqtu-1m@b3hC_0PHyd1v?}NJshu=fF)y;)HnEtI%o{VIO^~(&*ISPEf|m_%|ik zDaM(~NZ2&(USDX}Xj+ts?A9>jDBT3R9cQV>ZWFVL*ms*sN#errL)m$iyIf>XVP%J! zXse3mD5UJ$VhNjmCB9^bj47)(V%Hr~R;OEx)l!?+3vBs*>|-tUs2t~BxIN-HRI+m% zMjXB4u-j0y5VX9`QbTQtFf^&@jlnqap82>jMOk<4C(~vI4 ze^ay*#`sTCIi04G@C-J_zZ04pz8L>=uuA&GS*58Kt)ex7%K`)ij?$Ur!WErLL|NO)NJOm{tSCs71KN4s+2 zUu23%6Z3B_ULMwl&q+HIK)B?f6!0Fj)gW2g$>a!k41iL>W{29u>NV-0eA zUytDR*vEK5afKXlg$>DNt637+Z0NL0_xPnw+vkV>i?}2c9-|YTYOTzFDY6!D>dHKR z&$eZ;n0QDcCDB($rMF;@;P`s%Ct^G(SMXgbr3n&#ZZd4p1W6uM2^KD1ZD~8kj^ur^ zpX3!+K^3&R>4?j4d8eq6wV@1ZMDH8TG-f)rVjD7LvFXOMWP)2b@FF<((z!O-J@;Dx zNiT%KV@L6yI92(rm;#9tGC4|;og|XM^3!Bi$smWFotpI_KK9Mx8yyLbkl*{IC^73z zyTmWW>FAI?+MwyNHf?kfRvfXEBQ*D`^yD14Eutq>veOe-73o}&?!c!V!Z3{=c9X=O z4Yh~}8{EENl2|xPfRea=ua>p@eQ9EoF*uk{g`_5SHKOh@YwL<8rkys@WspZ~XEg65 zidpT6Gd5*Ecud-Yp51{RG;CLhZwZgxne4|ac|VK^vpfyy5@z>{c0xZGj#x?*lkg0d zBI0BiK8pB0(+K9Gh@TelV#4eJUQj3^M_i$Z(r0R1Q#M5$W-$kt=z=>()2d8R&|wBr z`U&ypb+O-I z=N*X685&|Dt<^G|UkP}*FjlZtq*9$n;Qol}P{~ep7zNTa+tD9U^gCgu#;K^O7~THu zm1|;*r@O$6M~)7ja_JQ5tuQ!8`lA2{xvW%S1+x84k^TgZrZLjzX-F68w}^JaNdHtS zr;|Yvp20@?#n9aFMfzueRoW5E73rTV;KfLP5icl_o+GYAdg(hfi!wXXuXmBg#Dn9t z!SF0nE!e6!mZyhNNNnPGdTd7EPa$!NO6lYeer~d7(8(X={GG0?`B?rZeyi*)J@C9% zb`{mJa8ajHK-RW0Qb5NG`6#W9iFA-d_D9*4Ep;szrFSF%n1w3#evW}w6~l(;mq#e7 znCyqdG|>J@XfRJLy-~D?D%kD3kh$7rMk(=pB|lB_v{aDA1@E`Xr*k|i#nyv0!+p#w|_v#X3uR@Y(&!nBxN4JD?oa3z8k6~`Okk6+( zATio*Oik7N^DisbTE23&`uDM&D9PqIRHw4gZ$lLk3#F2sh2~1Q{ahHSiFIxXxBrG( zWWw#0^G81oYb2aZIg)QyDEdmitvoP-hK*1mnSA>dj)2Fktt-hlr|BepD8;3xW|)$o z=Z9y{X521eHP67%SH-Kv%1#19j8Q(Oq9$)nc4#y2kdde7X-mh`FA(j75hEPNR7OsM zG+3UFGi3O9`m;=fn2V=R3V4yHU&#wf!q3x|CGlHaAG&^jHiaGt&viv*@QoaGrD2p`<2yJ+pia{ z#v{A0YLp?W)bRzpF!I9A`DVChehhZSLs1?O1r=eXbk=tRy3xk3ou6pJdwg7irq&vr zHg42Y8%ddjr+-?^g6)5e<}`q&H*Ta+f=XI|<75N+kLHE=;VS^)PM6Q%5HaWoU^SU*V2f5%^038E+8}mhi=X2V8`)x>wsdUq8={?%Eq;Q^ z>8!2h^#H=HX~3$&WiHT5nEqemP>Ve~Nghwp6L50GC)rE~@tKR2~M#~Iv>w&tBOxM#|) zVg@%{z^M$bwXKW{?&=!<@y{QlT8G9?h1Rw^S+k|yD;y20xx9x z1DWAXJjKgTlZ?=i_q~W~$I`WjzZ)mEG<6^Fz@ z-#(6Abliq0ZcCc~SKNFfht1Q9j>CRkv=jQuaKKU-PYKLmIV{eF;p4E6n1(MGhkabY ziyZcQyr9G^j<~{Mr3=+~sB8{<(+!Y!D>WbwS%)-b`0YK3^ykT~!l`F&oT#>w-=xID z8m2DcB#rQ(4#-f3X}lRwJAsCudq)@w8nqr-;ZE%MLr3T-u@VPehzYsFY+I z3_q0CtNEuZ9N)my0u!a4G{?MJ;(7G7BK=CU$qpK`PG=w#4q2x$N26meXKofK^Ze4u zjy0&MrFBqE#6+lMXCjQ^nt$eOj09S66BuWM2OD_4tC^+pShivmgNc^$|!gK|c{nW}U@lYT?O;Vaz%0cBbTlLYwd4HMl?S?EOlyh_0eDBXSm<&m^ev&!A zfsu6KQCn=Ik)6%?6;>Z*a|*UvR1)=5xIZFMRI-z(T-Q7l5}+BxkoeXuqSk^R>j$+@@lEb z%s}VPz&_3@p>rWO-y35>SH{>R*T95-URnYJb+3A<^k^)7HZa*8xQyd)FRRV^G6P?Xy(v$ ztT^<=1HKr;g?)hvNgnV)gx_P<)>R&0?Rt_2{9}e4b{=50%8dv78}@NlJm5dL`9>a) zrxhI!Sac{&V|>`#gI+Tnu@n!GzzmiL;A9v+9&jXpq8+|mJYZD7i#%WrFDN{KBd+iO z=|wd@D&hh0uN?dj5_T%ZX0ZgJs&MkQE4E&Da>07~`h*W#)x$%}eAv?7m>d!B6_!QZ zE5L?r*jf&vk36%oRTyphGqqv~zZnKKpt3(%gfEIITzT0@Nf@y%y(_)YY59|#8t!c` z6D*u=V#_TJLE#P@afLg`rL0*T+1#NYZ3x7$;afE_T+FQ+_IVs$=nj|)c+|$K|_~0yuot2x;`vebBKgi1o|RIkHrvSzotTx7<~tU_n5VHg&3J8k6ie~h?X4| zjft?p&WNn`xG|zbq4C)7pnW z(Q0<+a8239h^8lFg`Jusvv5EEFnDB>H;8YqdUEKR;K%^>|c$$)*CP|AyD?BeV&^oJxr{>5q<+WK6ss&%J>ap!uW0YTdn&C#3lw1tAMx=yFc2bf{fV)8$ zr}4aQ38q`177*l^k#*iuMATo1_`TEA(>&i5s~+pwRI)KWSl<96w_@P zCL~f!QLe?s5IsRl)bk4Lm!sMi-I%nz$1N9AO5m4D_DJvsOVe;@hL5H_XaY7DP5a9T zUXQ(n7ZjStXRJcgq$krji%gpKWX2%M7(lXTD7>R-eLk7(kq08g&$f?cd%lJX(PLi~ z3y0YB=cp9Ze~+fa@XHOzLgLx=Eqr~Th^NhqW2)HKu^xk`jE_WMsZRP&_C0RhccgXj zrXdThOT2zaAIkRCT-2rZGsX=>Cdx*go15ZA2Ryr;DINqvKsh3_Rpyxl+L#?%d<0Ah zhwRvx0efjkl7{||m~A{oc7jU{Dj$6m>WKI#mF#?!5!10G$)fL(gxR_RQ7|kFHA@!V zESCXkY==QTf#^taf)d*};!13j zOIEWWvSVAHJ1>S~rARkFw|g!g#Ig0*pNg@d*z;y8rT1Lm=O(-6a?izQY;D{3Tzp=3 z65r1bmv(B;g|(r5XwSuW!ybF=Vg3`}bMX-YL}Jec2SjEp66{`nnj|EKJr`#xVbyuJ z#VJlSMCcQa->eYawm{)e3jKW@M!fW?Zq(=GOt7;vDT}bqD3fwn=B+C4c?@Pu#Cxb@ z=RLVnDJz9p8W-=DN;v{*5y5-m$J}{yhqd#4J)9A)Fj>g>XtIsqsb;;fx6v^OZRO^71?I$EFFsz!{DEaR5E` zIsrJb%2$gL3MU-(aMELMa=bHqK0h@7;!f)-cps}c<&#?CE|q8!9j036Tr&AEBIc0f z2*185yYJZn|Ie}NDB!O(_cQtJkq^SXQQW7}faCrrgms#g<`(z=25OOUf8HM8j7a8? zQmh#C75*QNVZy#ig=F~u3_|ZQYwJq*H&37>3;1D%4R#h_waASH{0jRwD;DrS+&5j*G#WmMHqj<5AlUV zeWx33JSlirwd5Bn#TNY7_TjW*ICYr65gdEn7rsxj(Ao>%q&yA(R_kyBzK&cgw(xM^ zR=e12gF-{HPAS|~P-x8f&0@RSsBb91dBt&&W;lGOcG%UUS@vD5rJrP1;ym}*GsL_k zvb2>-$!rV54<$6J{Bx;Q{xOBCNCwhug*4qP)BF9)L5Z#z<)9jZ;J}nlaj`fi3rz`d z!<~mNx2tKATcD1JE>X!&ml(z29P&_8SgLVLj`Gk8p&H4V=524P6Rdif$lCWfHPFdK zud)GXlZjr(p%dt_fXZo^NLoACc)bgn8@_n`9uum$;`JvZcs=%ZUQpsSM_h^5atUh| zMs~dJQzja&6(hsK+{#7Yz%lmN*TtAntoj0#(sB`gZnA4G<)TMyZQJFdM`b5bE((`; zN-nZCv=7NetDnXrg2$HdpSWD~uL6jKT*Lv9!cdsX;XGP?nj|m=x#$8-TyU0+PRo{! zjMX}4b%K}9mwaTlSAAzA2588cmX?6{w|bR>VaxNO@c&=mRe6kUhS7APOq-0YXJ?mA z!MdaD($U5$RKDcF%@JRslASN*l9kRB=4nELTYBkYs6_<(;h780@{$#VzVb`g#z0}$ zP$8LLIv26`n6-5!zhs$0^1+GrIE`l*VNWnwO^UNfz06d@4$dmUw2PZ>OfcnXMVDZD ziD)Nu)8TNX5=;`9!4g)S3ByNN|9{i)1N^DP9*+<-HcO6>%8Uh@s8CgL?z z8ZfW7e?l#i*W5kt9M>|Xawuq4IQn8ZOV&p4u*FnJGMqHmYT>Luedm)0vJ;M;IRy&h8QDbKxvXBAMY7 zHL2X`l~7&8ov38zPK+XP4h`*(h0z*sUBd#pd`Y2In4?~oE+%nv=7^` zw8?3o;V23q*@vi{meZuQgN@j4hUSJZV*i5))m#z##}T|9`wA~85t}2fL~OaRHESe0 zV)rSh4ejEQfn{!$wf&E#XtxOdp>;sf?$a_)lC}J5T_TP}VpgQbS8T#>h{T6eyNNQTfkydt`SO*)(7O z?b?EKl4$WRn~mF(mzmmpUZ zmTH2ETjFXOY7ul{C?|`vHfP17uguj8V)(E>ph7Zp<>N4T%-Xt=xpJRa@;Q!Vx>sb_ zV^3XKt&6i$y-fEy?5ina#rSFV(K>JD<{ML2d0Nq>uHGZs34MMza;emn1ZJ>A7$?Q> z5#hfw4PP!I{0#vwrmjBD3knhDh$}=`dRL9liimJbrW@WA3vjMynlM#mxZ&-IbTaH` z*ddQSA_kS{^S_D`%4~dO!-a+Y&mps2BID_$drCfin^r#(+c}oJk-lT zQnNzQ7ctosgNBV!AxTV*#1ZhAwRMGk31Mwt0a&_1 z_7SwN2O$riQ$J52sO=grMt|gk57@rwzY4nBvp_8Uq(xG)F`ig1|e~v zO%&LOM)wJ=!Yl^kWYuR%4E zK;1h;1WKZ-m(;8f#0i2E|Ob?B$lQB>QA zL+!Cs_&9}U>K;#}w48>Yo9voPIc=M*ZM&RyrR*fiY2ivw$!XSx_8~c~6!zF-&*eXH zIqh5lL_$vEfJosi@fagNO;R0$oOY=>k~>Rjw%6=4BRsF&IT;x;9bQTCJHNnFz zIrWE7i=YKVH$j|bGbL>I>X_V|pr2E4uX5KZtfhzaEZSDm^8E87$Go2{C*`_diU-my77` zUx*Rif8$syM3*D35MAj}HNGk$x-rRYUrC+-%X*OsVU^16EB%rVh#dvP4u0-PKKdbj zK2VfUPUE8Xbhn#jHkFVF)io5*&j&MBPlpfO6>&%<_717Q?)Eu%wo6Y^t<|wCQ zX@yu>z%q(dM^QpvEw&Pc2_xiOLs_Hb5=n(ZMk0Y3EF;0GFno;U?WW<&#YjFN;KkJ2AMt|1NI2pOBa!}7F7 zM-sOR#c~<6vKHuL@U>d)iVw`+HKcyXfHD3(ibP~!%9^dqQhvA?3DA7`4460eBf zR~r$hJ8IrnYb9S;OPuaFEDqJQkP~v+69|6kOW7B3EqLtnV(yaS_8BTA(@+dQlvt^X z+vSdmn=Y(HV%vHBuqi2p^sloex@Xkc9zh@+nAJuzD-t%xB({GO5Oay`B)1Awdi5Qs zC8AeUvePR@Q9Fma_Df-_#)UbmYrlhPB*%L7aBwU!GKOymv-UntBy_^sn&VafQidnx~kYihm#BB7~qK%{z>c+!!dCdrIJQ@cnTbe-k2 zGjdXxyh_^37d%Xc7WXNly$^=bg+QHZ8H()O)Pq=il$$!%Qi;l*-Uhcv?1@Tt_LNIH z`;ahD6CT`>Q~w8Q5rID#q8Z_=npt7!D?9bo7%c2>sgTT0eGJj}n6-5!J7t|lGBiR&R(4A}C_!bPKwXz^ zj9rS;&|}-gv>}Flt|+1G#^+ABbP=!|vfIV6u)MQzUAU1y=a;9QWhGkKRnNKjRz~a` zQbea&QOM>v<5+*hagMWAqq3YEp@N9zP-(y{hY1rkKE#dX?1EY(%eiX-c&}yxNEsJ!WlP;W-XdNxBGPI`?K6VrM#5v)q`@o3N9!Vmg1y%{MZg zJgw-M&WA-ip}P!+EX8yrFoR_}I2(qK>3qdBe7Ts;zX*7d>3o(K6sE%wSD21;q#7?3 zF`Xx_5I00_)wGtM_>Ai@Tn-+4R7_uDT#ryGnZ9E9p~Onn;+~O5i_4C0ksNnnpA<`K zDE%vPiB1|7xg$M*!+~za_c~>FT$mjb`-fH<|#Npt7eP_#*N+c8hR6M!`Z+>I|Fv z)abqigXu!4)C^YIg6s^|H?aPQRjFx*bTulQ`Z81yu_-Fq*;Fo_?z_T7O{{RsVEsGP zB3Qt1%?oFx&I&|d8LY=+z_9b$srGOBVslq18P-p7PkbBd18W*`7g4*6B>M`h7L-ZbZu= zU9>^p?`%@@3amIHHAm_1SJ}*q;m(N7P-(zy=00JY#!tAhnKwf%lFi(?5NRQ0uH+En ztO)c)W8ND>guRCfNg8uM0`Dk5rAO`arw`9y{VcK%|u$Bn;y9(!l-z41Nl+5F|} z+ZMec@qgmKpsg^2*Y8&2bYj>J;cyX>+*y&Hf7n<(! z3tLOK)*HKPetF6-jPBgJV_n9Plp6|8U+AWLL2hhBo*M%u@XQ9h#@F-p|{u7<{wIFT^?7lcQ-IP3i5K2Wt#g*KvHQg(o2# zNu^{4jp2t9epMjcmP;T^2HZ#)JUcJ1liE%Hl3=1+MoDlR0^q>$5^`R$tHR!x7I=Yx zmA{~Oyq@5Rn^mHB7Ss?CJu2CW9wQEsLj>F|?9@0_M-lLuP>p1JuUL4tCqdP#f7YJI zX^l?(E8F0UC1o;CysUHJ1a_=M<+S=ItsN}axC)vZKCbaH6RNqm#{U<=>#-N`g2FX8 z;tJQ0%U823GPy?3r}{Tc>qUlwxt0CijU()_2gQg`8se=~O3Qxuxyi1%l>HvEwQZOE zz9>71vR}BsQ?j46p?yg9``56?9{WfB6PNuyCV)uDejE@f@FkwP2hJ13S;}3 zhE+Kp^GPuEsi?7@bhYe{5L1ucFQzsz{nv;R3XXh!hwcT3Acx=>r+XK7T6=RUj&{1I zRyyaB<3|xMhjdh&X{knLGp!F`&Dl&#tw3d3?}l3=rbVRzGp$bv<23%vjcI)WYFSXG zl>#z{>S%?aFQ)a6F-X`yP$9{*9zx_jW^LWTv{Jp6%b%Fmk1|ZKGcBt@ZcOV@?B1-H z)}oVXQW=?6o>p{BYmI0pbcNwyrI?lkX0S{P=fUtXt&;#0?eOJdT4xG)k!h{v1%+vG z#1*C`-KNGfMNBIuI|g5yZ_Sa;ODtUC@2Zyk0xrl%YLvR*hLPDxjVKo`L>43EU$iqq zA!$$0VUX^X?ZoBbu`9)NCU&)rO39QN!w)5Fs?K*w9-U7ejY#M-ep4__Q1xD^)3|2Q zQaibl9WyF@b%elyTCI=epmYYuq`s;^mP>u%ce+}-oBS4*38*6CS5&g|D@Kt!ht}5? zhH5;Sqt^E#s78{kdH%jjGpc&A&)W4knb3)SciZr@iGBBT|PZ-^nG zDD@>OrPV(C++^2Ws(nARwQX1X9+RC!wJ%)ZDYehq&_1O09XQJ4fyb8dpSarh0|7)r z?c;z*T`%#dBR@@27lYb&es-jGmix9?<-S<_&#U*nWC8TPw7Go>ep_HDUAWSiX#}$K zP#dx8C=a#PRD+s`IuY)Th!U0TL@Af#ceb!j6AauEQI|k1BFqQFG7+3LKPv`(WumT+ zVZyGXLNXI|9zyRiYwJoT$~=MOvl6AEiWxT8Q&Con;_Oi``qi<2vr0wn;pQ7tQF&U? zrJ`OY+6n!0I9jPxlmuq5L=`8(@DbHFn1(MGQGK_77gJF^UQmcCM_eJQ(sOEjQ$$oF z(eDYG0s(Hd!89KK+Y&*aMKC<}keEzFu|FnCD6{by6)tGRE{DvvBN?N&Rf^4GsqHtf z-sLx&oqA5y?IIV}Wol#2MY!)Hnhu#FMSe8doXv&)1sjUEkdk>a)u%F}hoPp38BuA# z%;+b=R*m;@V@AJ*S|l^NXJII^5!W1wofVP3c+#?U5khP!6_PyZXE+cZv$n4Aq&$-= z$(o*$VUe9RS?zOUO~*mwvtv!CaPy6vm*riyL1ZJ?T38%&Iv8HQH z!-gc`krMnc;TKx%M$<3zFACgCe_m^} z;N`{1M6YB=p`T?qDa9{L7i*K9I=z`V*1PZ0dl%7vAUFl=y*{T*YT_A@YI?F@wV)I_(9BI^AJkOMV7 z$NiB(*dNnWdtw;4rn)76Why^@71S8)345odoo#r2~$IBkmSLmWtfCHn}K(~7IKcCeJ}t?8`X;et;Iu-1n5Ap!Q>u*V)dmH)&A*nEqpJKg zNs0^t?3GS|*;$X>Itwb4SDw9hsKRP!eV=OW%`nt1q)gGvHT;y@lAW-;5nGB9mZ#(x zf0dD4164(gj7oM!mP^Ym31c;3#w}ynfLa8B2!?dlI7_=$Ncu`yzAy$6yNwFTl;sqT zgvYF{D=Eud(@Q??keCKa`TNj%RH^(8%2e|Ws^(b-iS?7X~1mq zaABRsC%du9xJ!CUn4c<+$!*hsse+GoKFQFA-OwK z1uhhBsDMR66)wQftr@>movfBnBu6Fs?6Xg&Gi-;$kD69+TorzT;4b|qdmGMwkG)0A zS0YjOQz@BAWcZe?X5TCYt^VIbO?1sDp+1BlI54O%`(d^? zCYpXyfXhYG6L@aUe7j1cJ`8n4G>S@g8pS9+=a5PNMp&wGSB^62-$ON$O9k_r&$Yk` zfjGe)qHmqF_B~D+bi(NOZ2-m+Oqu7-{)|H>&}08f<+Ly=tsQI}{}MDed~tmFhM0F! z6}en-{0OKCutj)1_Bh8{iQ^n`C63D_tXUY@alFr0QHN{A$grRSuVha8l7XXGwF$@A zV;lJZg(st*K&7-4il3Y8noBA4Qd`@0DRigoBub&-5>H8?)`s>WDbx>p?6KeDKXEDa zJOM;P3gv)E(KGQxBR@?N7=sjgfhOEKi=U_EqAhvl&X+E5c$}TU*@Xdgp-h{MgOHtd zdNI}=Wu1;TR-y8xKY*JfzCtgS0~C(9I)!H5!1AIdNyK^-%{RMKivoJHz|%7?Invr0UDiJNas zJmqOcmw5V?XeV^j;c%rAPZF5H5>}iE!$(+uWg5O*gmuZr7-9V}$66t*9C3xPO6RHZ zP7z^^gv#Ix{T_}sQY@F@OOEh8g)jrusukgTmaH#S)G<{w63=x-?^8H_|I$cf#&5#c zI>8$l1^C{lnZ|Cvxv?`t2glxN8V8lXKCyZ)of%sTQwW^pQG6za%=%zaLMe^Upl|^r zW;vv^bGFs|VxKRZj%70|U5#@tp*RJV=fPv zhA$U$`H+AYQ*D3D3kq}Lh%3xRdP|K@ikM4WGUH*WMe37yc@oY*073vSbJp>VNc^%z z;3z(SSCap3vR0hJ!&4XDX_=NxLZg~RN2QlwU&c}P*cZj9kTCQRm11 zYq9VyX$eClL-5tH#dZU%4GSoQ)jvC+>8+GER}6?rYCu2vO5+q9L`Q6`!o!i3oSZD z3w(A~=`XR~D68~T?d>Wj`U|)*;zU%kbD~_**k1|LG_Kz*t@L+LiwNq$P>jE`EM^6u zue{QCV}P*lP$8LD`aI(9F>C8eUdb?ZWWb@vo1bSGU{5Sr&55%_y(IQHcFypO$YMM( z``x|en`lBA6H9qo(Iu7+6YYeqI2@`}Vo3rsSVD@kVE72>MgT=Se7Oke`2t={EP1@3 z5K@k~LP({<)Oe*Ru@uXJ%p%ncs_@n^k1~C^z32ne()w zi_Cv5+6moXI8>>~EP)wpWX4%Ae3AKIOv9HeGXGq_i;?;7c|nQH9C0NwONXiPN>OBv zNj^8e0ZszlUN6Ab6FPrW>^!+FJgpLhpR!*V-F)^sl76o5OvpEu@HZo)n>QCuJ)=@6uwR(&`V6m$zbjT7IF;u;5honI9c50IA% zC&OYbT;B%Gqt&jKS|{Uf6!?_lW&HDK!^#-GN(H-Qb~g%g6AQj0@8fp_LTs(V7MhJD zX<^+bM>pc@TzEWb356K?gO+R;><6U_Yzmu>-&St;Ejrh<>9;%0IvffrtS!tmt6(qm zi|PbHX9TL49*Y@Hh81fd;LxAIUY`a8`*6Dr9wdrw(!QUOGJV}4y#h9G4{mx_Y4S~R z2KMBP8vYq2!yY?eGlkS;@DFhjV!Dr$(@7?~7=9?{fU3$}Y*pp76DyMC&dTJxW7<2V zw$lG=ZHZ19b-7Ul%7NyNTFs3Ka~@V2aoppq_o`fXEmRP3T`JkRE+Zb5Lzx>BW@;jf zqcV3cR3i!RUGtTSv||c{DZ%ohx7n;6k5fCHG`HP`UM%I3`8M1295(?SyMoGTX---@ zSiZFdnj1d8b*l;0Tzu;fB6vMkw#vyRRciFlaA!n~sAQ)`xdgiZ5VmOofLj{yf1nl-+JoVk0?rDZ6@k9; zfU8f95MisRkjw)pop1oty%4fvqil`Hwuj#V_A$Z zW=nKixcSCJV4hZViNK3QJE2Do$10Twl)wy@nBp`TK4N;KY4~yx(~5u>6M;KWtG1r=GcS0=63OZZylS!sw}+&xY^N zY5Ogi?W3>Lp|sven7o4R;WMyL8M213r8#!OQMo!f={MnnW@DPNT%A^@Sd&@8k(yth zYF9)GEUI_i80Gi)_x3dE?P3)+K~t72%DYWAnwV)Ta7C?vl3HQLhlJuxvr&Rq>L4k{ zH&yf0S|LiUu^(8xcs#ci{O?3bI!E>*oZKFJp_q(B$~&Tj!YH4Sp+i7yk=X6ov9fY) z})e`NK zZ(Tiu+vGz*b+p}>nyUHdUj`Xhe?wvY`di`an5J6mdKIs-A;v3?w^ya|i?6JS^9w2s zm|xt7I7q+{9s~`c;<+0)e(~nm=mf8rFN*1aXAZs5ibP*L7O7z&cjNtHsJbZ|iD|dn9j8cIfN8Lq-OY zr!5@=`JQMebU5KCrWlAE!oe~SoFK!;K>o`#h`AWZ$}Pmi@$tlCzu;Ia41^&cfHx zFbd$CR8Sl#)@sNhs%`kvzeHdt_`Bd0D)A;8R|rE5Zmh7K3vcx0f7RAVsncx2AJ_IG zZMYJoNWWgVx(-Dk7!XJ54SWfXvmBr}TnB`=uu^9_5-DlmjSc7qy~sb&1X++17;3En zZ-0TkY9lF=NU1cNRRqJD@Ku8b<3<`K=vxbL1j>XK`S{0(AF8sUibJoH4OOf#x!*WJ zyYb1nG<uBFNa&z8Lu24$K^jhKDw?jnw^QWGml7d z)P5t6jaQBdJ7%%HF6yOGc-)GZIk4ev_Kr)d4YZh@hwVifH#nv<2N)}F?y)7{&hNr5 zu`{5mC(H zg>Mn?A}#Flf`7a{h}A1xgha;5Y`qxx3o(dnPb} zdR}mIZ^*QtSLAWt4h5{J(vmkP@%Syr1Bg;9 zSc10qlE24x=$9usc1qqJxZV-=hRd`+6!!S=@n7*mrUQtc3KK^>R3h%9GQ1tuon&@G zA_-n)ZJw=RCnb^y(YW(eO}$zc7XV~ z3FbjNz~!NEg6sVXTiY@3C-0N}B-eMX>?F9pp&VUcZz)%7?RbVOCRHb%%xQ|0$}}i8 z#VHrp3;xhvjRe@?Z($It;Rtx_7XB0Wc^8U-No-9Sr%xj{7d<$wxBIDR18d^Bsj^l+ zG{KJpdSY5G7pGS#7}tlA&6YPx7-^o~5rczq6g0aiEzQNBLv&jx?}o;VHpiYnGPh9P z&#e_tcfw#bPaK*$*r$QL(Dv{>4ZP0;X|AV%Pe<5#>;Ya-$UrzhUb%MBBKF64x$$_o zFuY(^fS%wPZqcDV9qb!VgP(qcm;H}{%Tw^O?qIk)9WS2+w!|LB%e^b%@^-v@5dY+_ z@pADJxZD7j%2|~~K&L?N^V_|9dxD*U+C%kkHg3HVCa@L7(*^ZYJ(fG6RGI26o+IV^K32?a& zFZdlP48JCWJ%|Q<0xxGQgUjV`seG*RLG}Qod)P91#Xf!j7V&b=fpB>n zUamkKpNp68V6(r(%cI!DiX-6iD)_2*_C~zyJr*tjUfzw(ehM$Q9|o7#;^ht;$b0dE zC!EuH*zATw;ipNw{4);IFYtn|lG4kE43B%D0|MA84}LlZFLz**_rj%e5BoCAn#6?L zY?*NPXeJymoog!}fEo7%oLJw+%Mu(6`~oueWo-7lc)?Rm`9YZXRyKEngNvPZW3tg` zgJ$55H~q<0@8(``K(#zh6t1^pzhKQwvDxy+!$?cNUtOx=hKfd=-*HcD192+gGzj3W zwo-$iG>ub4%sDdd%b^YIkL*7$CC+i;w= zoQ$@ABVHGC#zHN z(eiQLey?&+u!fF!9QW(+RwVQQnttXDmu)<|7aTU@&x}u2;Xbf(yzNiV)QW8%RwI1A z@x;xiL%)s&32>&{x+?IbSA&HVEJN!{?Ow2^Ia$KR>4P>2yPCj+waI4HI}buE z;AO&A1$tO3mZ06Ep{{AUbfenFTQm6kyMi^aL#7U0fDvu_#c60{MY}iwkd@n&-i`x; zqf6quZ8=^b$l#n9pDs3U?aW{W*yDtiBb8!JqPsL$84eo`5>&qiz05c`ry01Zx~CWH zUjNuZq;=Ta1D~xza3+fIDNcuAZKd6w zX`Q=iQ@hcCSyc7glVgqM)TT;%y0)no9H?Lp1J-Fz;()EG*5iZG3s%rCHnw2Qq2cKX zAKmEQn%}DUz%1?xR?}pWQ+H>uvRT{>gNc)+jJ|f6oH1+YPZL(R0Jrw|^E%+ETUc2* zy=cnNqF4hfp4LXPSd)Ev`+Dhcd<4fu{qzUWHRG8vBA6``x>D!|CXdwyD$D!_I#qX98U#dL9awhe+t-VVN=|TZ+L`REG=_!UQCpjE<}mxLX?;;M2YD_1dc95iRnU=7%!ENS3bsRF>zy} z#dINBOc$cXbRk+y7ox>q@(N7#kZ)_Qcn=c7=CWvW;Zqm>}5-amil!A%lZaUFP09yECnO zXRc@FO1lsOxOl9?kODle1XHOzDrF!EDc&IvDhaP7RUyQXKOqVHaDf9=1PYS?Re*EO z>FJ*L<7#)c>%<1Hw`Zpx=k$4eeNK1Jo3=jo>rZT=f4qsd)#|%O$C)v$w&wWWC_df0^N_cr<7_`GGgrsZl4Tbp;_4X>uUu5C2?E;N7@M%(?K zsdk}s+V_U!Z^NRIJ7({9G~1bVRFkPov$qF5I-2QP zT%7F~OX0@|0K4->uTo`XtZJnWkKwn#oHuX8u>Zp!G{rA0HPQU56h6`j`W}_X9 zd7{;~ZD^(u3~G*7#^JwM^gR=Fbg$M0a_`kznsHV;j-Agm8ir}OjfU^-;Deh{+wFjb z6Trw;!!Z_2)$QAwWTZaiU0cx9wCSe*jl6weORx<)THI`o*V#592Tc{f;)xx!`+O z@?V1Tbl=h1(}p=MxaDj5ILyJ-{4HgAdRhs7#WxkhROFkgz6(0JQ$c(;|8uv!veV94Ze*~Ea z`l8LZt*&aAzIRb?$@jLw18uR_Fi*q+__6t#%?*>30Kn=5o0+>1`!8 z=&uA}T$;vVXnkl=3tHTIN?Sy^lU=^mCufTq|6S%pcMLzrn0EN@33q?4Sf zpnM6r*N5j^Ulp^4EGNkYUi_wz9({2x7{-Cd z;UARvA41K6{z+rF^d1$O?Cm;w_Z^Bbsk}8{!-3q1#z~cG027o^U(SmDK4|K_Ft5P) zZ2`q^6g`vW3Hyn$TYsB(nb7`#ZY5-R9%m|X9%Snt@4-PliWrFSBcM>gWCvu!Tu`ie zX{N*kfpoP9- z_Ux0DCo;Q|wqb6sI(p+*iU=;XF6YO|% zNpW>ed4=XGw^`k8-!xhz%?@XVa;LSR%=b<5YqgeYDossM%_YS$HJrqG04xgHP-jLt z1?}Lkis2~W|G^?r^G(B54%a5J7u{IUr!Bj!*$OdZBUtDwgbD|bW+D~+N>&5x^&E^W4wNE#jYww1YBKJHhq&`4twonRVp`nUJOWr3 z;2FK8|HvDTx_#j#t`QSIsb3{*rME3M;=2A{Bs<>de81D-aOhdW5<~L_!dwm-p5}G~ zJbN>*cM{k&O9WBkzi^Q32-@Iv) zXcWALs27R^IA1maFOgILyS;@qw9zpEAT+@7F@kagmk|ngCb$KvTSn{NIIZax;#6N1 zp_=WX0>G0o;(B5<`m?2-Psclt2~ND<+01^oT4rY{!T@s9d~Ut1fJ$xO+p4?Wj!(c} z;NuYGuwRZ2;4UG-(2RgL-Vgv;qwVX@#-Q&O#|7w`#=a4BJ9^g8&b46S$w4`)mH@^2 zgE3%xS%XWv6D|yMpzg3?66Or294TgZAQfW71mXm#unh6W#XzQ^?ipVNP{ba@8VH{q zZ}dTq_)q(Bj-TcnM-i{Hm+=B&L9i`g072@-{7*&rCbV6wv?R2|1rY#(NugJham&fh zL}^Ikt7*+dPEJlKlSv7W*czp)xw_Q`8+vuYTQj_^^EajOp%Q`5fWe}^KQ(7nqYn5p+12{v@AsFA}6zDE{Sa5}HhTpv15o#qJuql^Y}W8fYs<=4Y|-JmFv({I#m(`7*o<0>UlN$9N%O zc{s22nB@tTrGoK!QjFbu@o|!GhY+~~sG;v5PKL4tm^*;)5btx;1u*6Jco$k?b9sv9 zGzz>2B1Ebr`xeeyojoP^jPVTibt*w{r8aM9opvKjMev=X!Lc9W3qnO8+C@#p6)jI* z(3t!jt5f(&4kLjuypelpMdhGzdbVshqZje^z~{+&k`1J(HF$$8(}_*s-2xetoj0v^ z5^I!qdYR}n6u8TA$;ORpJ1JfT{D8UU4!fYfB*!aw33ycx2(7ah@!!y;*V&JNg~Bq2 zUY_%TyL?<%#8y0UXPENaZEf}ZHgD^K`0e93YZd(VuVE ze<^V>cfA)p2q0pVys**vGLH4|1+J7qtvIu6&Md(%rcpVK5aj4r7a^R4?luxa z_$_2to`o9-Av_*3w$9$f3kih4d7VHAQX_M8Ai6vW4fgf7lNI9#fkX~g8iWTBBOp|W zz=jJ75rlTDj9iD)F52z;J9&FI*pxPbj4UcG>l z5D>62=t5e7+T8-k6At+MvhE`|AX-&YOGG?L#9=M~p+KOxmq)s#w@UlUaQ}O_1VILo zZ~$iaP>iZgCBY#uUqQ;N0fBwXT*x+G{~2RMWUWDq1gEF9jCrHwF9!=i_CtKXz?%Jt zvjh-;<86gZmy!q=V1M+-i?axm?DaDL4ARBxBM$kd=m`sd%?p|8EkQ{vAR(W|p-LoA zl)@?L)OBHuHWgn;*B=O{Twi&l`*~0IK{od|iB3@{`Kn|XBvE;wF&2fB^=D*QHdtQr z_{a1X5UDCSDlxFgb^(xpNo*y=Q9BYZQ*bX50r@3(Jp@ryDg;p(fn+uwu}U)j3q!e4 z3?;{bR0|#d3bZ0Xfp=ytBOpmu0fM?RN?JPHTZPEI(1cvrIbOOEsqADW=OW~?yQmNg zF|otQ)e6j=j`y1qgm|~F$>=r)A4kQe6hx4vGaE&a>>)5p(gDTVF_4xbFBSofVa52! z9X@g)B7$eB$dVlM>f%P6j*WyH-%-TUfpFvdLdMqFn|UGOSh##9aHF(9IclGc8?WNp z2d@3B(bAN=PTqd({`(X(-8{{UQ1OClf010qLP@0~m-5O!hLclg9}&zXX!rpt=^=#v zG(rNK_7DhmIId-Dh^ZlQO$lsBY;$Ntx$<+mW&*ZWAfs(Ky5`h+w$%dEjr$l>XzHQ9 z=0NJ2<8Vr2Lp#(aY?GR&U|y`hnoPc{ifP$hwWCh=aF4DK)PjIfc{5r!8Xxg5tmq2aKaC9c#g8 zDfD3uioc#SIvw1XkZj}NJ~6>93${7pwBgRS z8tfNr8#I?Nl2iBIf1GcQz@9qllGS%%i^P#515f9NpKBzBu-tp@jU9ySpQOl*gd(@e z8y9PyX2)usi7a^@XaOuZ2D5w{-!SUbV0-5I{!=@kD6la}1rsez16XWVnGDOfK`PQw z4o=@VRXYf8-`7#kYRb{3WxFMnl$)k%H^>^t`p!~G1xI$|tGrQcMbFCoC)PG$_CK{p zAn|5IuqtkUT_?GRXi99=P5xIht8nMR)~&$S3M=oc^LP_qfo(i*>_)gctU_nS<>|F$ z{Hm}#o#ng|>|)nYIi1#!bF;e3(+TKqBP~x~QN+@LmZz@@8Cz$!@{GmuFrA#& z3DYTcBu5;xBYOjFwSr~SdPryyDvHIc1|mkPA^R@Q9c1kUugQjglS=8FFg`CD&}!#| z;=VVyp4lbEwJ;+nstLu|R+PvaIE_E&@KIFnB)iIQ#3O;#n z($5BTQeuc!n?B6V@u@Qe^#vfWdZBU1$g(w7S@X$mpmy7&TJk*@tlU>g-Pi zw+RFM5tY&y0H0q-3=rMi1%v#2S@#hb5UnbyB_!~Vl2qIm7AS8D36%Dgfdp2(FN{4C z-INfTtfyjxM?&T7XHcQ?_OI`8%5%4WVK*z;{>AI#j<2tap0My~UdYsB2}1&K!gKfX zY2{5-2am%|BevG&*$>Qnl<%!dMGLaqSo1AbFC4ChN-oVCU!Cp7CL|nTS79*@J+{H4 z5PDFl2zr2~q+_^wTdMYo-gE44wJlYX(2DS>YrEXa;bWzpRi(5JxU=eTglcw(3h|v) zG?#T&+HYcKRi3cKZQ=2Z-cx&&WY?>UW00_ogkxR<by1L2qs=PC+wo!uK@ad;w! z&vXLENG;CMqih^=9bc@7O*w&Zr}Ds<`(4u@MvhkHvNXA~y(%42g4tVe#^8jl;4opA zB`QUth7(^$M@~IB=7qYm2l2>8&`}s%UN_j5*}< zqnyw0mVCyIL;;`UsbG94iA+WhZWfX4^bzoE*$MN($y&h79Y(o6E4 zTd0&?_v7=T0j*{1|C+MCBa8l=*#ER75?B0z?xt4!r5$Cg_%}f8|Mq~mI=hAc#$*3i z2%2NDe@=VO@|s+_oaU7G<`Jo^*nhUk9o&11nAdq{0;+rOd0I-iSfnxtD$n}!l|@!7cRQ0vyK>Bj}^y|V+A?d)x`=u=x!rng%1|-b0Dnnmmy>8?Du&g zffYEf6Iem2W{&u0V}-#2>gxm+gpOBTR}My$)PMFQPGX&XMKGPv!k4I&Mho~{x{(a{ zvf5}N8tR8ZK3&#*1TaLaN@~g4{Xmk6m?6;N6lN&xD+4pES(adAG|Kn$&Jyf`X25vm zW(lyHm1GHceM}7eg7cUImTw4##{dgwyaX&kmVigk(?K7-F3r5|Tpk26h`3xb&4-o6RWK$2X3AU zPUgZFMW*E+gDH$ptfQQyGt;%8>H+1z!6`~pd=R-&6;A%YU`i+{f59c?6H-zz50aFW z2kwWntfzDp&bV=P#E=)C?mCraHk1|D_v=ul93T;MPtkJR2eN_E=I$F>( zoFTrPeW3EfV&$357#W3` z%^xDc71kJ6=TaDqmM1sAC-}#cn{h`J<%^^-z7+X3)DM>;R4Q7E@YPIuHIkR#{D~M| z4t`1nM>F%ATgM`+k>6OC)reqUB0fsdj8Y<_kx`!F+)Wgv!fk610@{B%P$=T}dQHECcmTMJ!7@%7|EQ zfGp=*0^;CY0RN2#4IdOV$AX5O_MGq_0d_gfDSyr*>RDONTyGa9ItTFQB65G;xz6hT z{0U%E6@L!vg~&oR=9vSo5Q3xgPk)GQhUv}%r!EMMJN3t*e(2Pxv~s5|x~j836T{1~ zohhdtRE=xYr=S%XVq7Of84N7p)FVmHQc|O?Jum6`cV+x4OL{)ZStYo|zC`6TdXS@C zUG(r_=x!sShwl{eb0GBa(~z-nt1d4jlAfH`3G^TpG)Dun(ZgW*!S#a=Ler}Tss^J= zS^>7JM)+X|{D(xF@WU{b()a8$U#omjEI5m31G15YeiVT0#*AB&moZ z0yR#dh|<0?P{f+$Jzo(c{Jis?_i)N{^PbqvO7fn(KIT1NCVIlcmAsIt(-Oi2c~71I zh(49yIhC4#^yl2=dH~smR$6luUdG zX_Ca_XPATl@DMU;2nj4TAc%*3yi# zn9aO{(wo6W&P{C|E{RTG=BxylK?f-@aSJruAPj9~WeV^T;KSl3;ovS}xN?|2!I8dl zxK{DXVLYr=eC06E#;+Xy0W!3}f<$lRdEnaTSzC>@;Z?`a^9(YsmBbNmhWnY+Ye+() zUbAli%90;6_>%!|Q>IIk=PXyb-_hE1!?7&j)y1-a_YvQw!`FIRa5Pdmc~-OSzFF}S z;$ya@wp%JBdIOtFml7Yu%_Zm7GGmgqxsmH*g+jA$0sGju;fDl}k#Bm&uOjxIOWc(n zftGjMwuzPOc;F6V$xeO0v~bDD=pk`uYgTMD&0-l8)%R4rZE^ji0KDRLiA|*WjJPR3 z{wk-UY1)tiQI~-}3pEi2ITbmr@s967gj2gG5R? z94nhz-IdC5=x!seRIDO-7-*&PMlKU57ImiaLSm)Dd7TKyN=?a;$m|u%Kv~bV-lLf> zq|#?(1U;juc(4yOOUK222dA&j9uw@QD6B`NbQBh!7Y%5&qp&g?3nTncS>KTmtgI*L zB<233BogDVf!?O#ucaMj#9uc+7Wc~madq|u{u|HY{;{Armc`|?hwJ^SK;{}y6U{->`oxD(4s{`mzftUZ9 z%4swpN4vUc;HNOr8wm~EP{hxH(7>^fvG9#cUPzz;&g%pkkSduY`q^k;uq5U>zyYD# zVohBJ2L>ZZ>OFfkPGFrqAQ(<~;3SpOcmSUlYR}q!%eYt8eFPHZXJwZpsfY>!{Y{~Q z(!MfK!J1`d-xVWVB;_EcGT5D!k8{d%v$ELDO0u%NJ|<${E_%Yk0xx7LvxFr4mmqr< z${5eU4)a~!z8?FW?#H3se9x}L?F0lRid1P*ejH1N^u5wAc!2oqD{;Ir$X?oDsFq(u z+TfN}!8%gQPm2;@yY&q41apP7gSdonC@aJvB3+57g}z6kA^3I0P$>M45k%sYqM1%2 zp|GZ8KCK=8Ey8Q|Bo*?%M^w^fJ}?QhqcGXufnExS9>FGI#rUwF;lq~jBp7)ztr`q? zb+O6Upzn=@O}32}@N*z+as{*mEaj1k&AgB>X91%T*%KOPczGP7JIoI2o4jE-p17d7 zk?%C3l<7Cf`Sykk2hO9x_va(#T|caf5BNkJO&n>`nAk+tC_9?vwsL-ZESjzkteX zyutT&$J&u~cREYmrqyYP9E7lpSZ}|(e8J9jh>_R+g1ZUdkOFCXtWJSZFaNl;QjmhPHzJ8X_nof za5PW=UEhD|SEq0Gy-RvpuQ6{xJs4%f)w*!f)1@zHYQ5=e58MQF?S-#{_WG`@+~95L zaKy3$qTmhV=v%JuP1y4-6fd|h8$J?-Bi|G6Hd%8g^1=Z+b)XQBu|j9iR#ysN*jj^s z+4B)^;+$%mKmyFDt*Kq;WXx5Yz_PZh`zJ=dy)BVN1s!EcgWioOdC!TG(UlQ(g5{>Z;H+vi@tY}0ZiH6fDgTbFi1&h1KU7}x;?0}Q(Np= zpn!0ARkKYvr3=rtBXgQ6JVkNv_UNwLbB@f;x|Rh}WN7aEjAbv(>Tb6)>w7yAJckME zyYo0<6NVX`4Bs20KTJC?=g@Jtsi7fQ>S*v~Y_PG9c;h52Qgr9MZMJ$2CKH9F?Sr)# zmJ%~Tuf|600N>okLw&F{4mK8u7l{lh#RO=AYq%gli)b6*ouRhY?4tmVfyHQPILH1n ze4|%27y9Y~3TPW9`XbHry-P{*4EVOTO}0slYT29MLe)5HI0k$T99rW-FO3lLlwRsV zgI&@ad)r_O@u|S?F<3d_EE)&J1u0-gXqZaPAc`_vg-?o9QjNx@FSb z!^hxf;Y|nTAFQzHs*4TXSkOE0FKE}+j)jUl&TU0#9WDl2XxVL$#~yq>9yHG&)!XfW ziG&0D@wpjW&`b@?8*y|TUordLkTYYUnCrv+CYnaHJY?{9OV&pn3w<2v2Gx5((%^!! zkbI0s-3&b$L1SyQ1HYl~;jWkbFS%3tLD+$Q5O$y+94q5}Q1`e!&GAXGrEmj6Iki%v&>On;Pv3PcutZ#QrgRNe)<4{lU? NjA1kjL`}ar^S=}9&7lAQ diff --git a/doc/sphinx/doctrees/library/exceptions.doctree b/doc/sphinx/doctrees/library/exceptions.doctree deleted file mode 100644 index ae59f9a71cee43207b337634cb4a346ba121b48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19414 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 BXG{P9 diff --git a/doc/sphinx/doctrees/library/file-message.doctree b/doc/sphinx/doctrees/library/file-message.doctree deleted file mode 100644 index 01b9070c42fa9d799bc217ab94388002badb522d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84656 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 F{{VBfTU7u6 diff --git a/doc/sphinx/doctrees/library/other-message.doctree b/doc/sphinx/doctrees/library/other-message.doctree deleted file mode 100644 index 707b782c9f439573cfdb552fcf6d1cc2bf262ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76848 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 idzW#jB~ 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 diff --git a/doc/sphinx/doctrees/library/pdu.doctree b/doc/sphinx/doctrees/library/pdu.doctree deleted file mode 100644 index b148c8e716a4b79aca0582ef20233c1669143595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56390 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 diff --git a/doc/sphinx/doctrees/library/register-read-message.doctree b/doc/sphinx/doctrees/library/register-read-message.doctree deleted file mode 100644 index d0ca283c41b2f8ffc5245f2025d7beb2c4dddef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92068 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

Q6V59`E(hoReLA%eu7R^E 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 diff --git a/doc/sphinx/doctrees/library/sync-server.doctree b/doc/sphinx/doctrees/library/sync-server.doctree deleted file mode 100644 index e8946211ea3121c35bb26b1843be897c93d85850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99274 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 diff --git a/doc/sphinx/doctrees/library/utilities.doctree b/doc/sphinx/doctrees/library/utilities.doctree deleted file mode 100644 index 0749c3e1d7bfd85c770ff5cbbb4414bdf33b49ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36183 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 NKS2YU>FCuL{tp|26374m diff --git a/doc/sphinx/examples/asynchronous-client.rst b/doc/sphinx/examples/asynchronous-client.rst deleted file mode 100644 index 7f5b7d3c3..000000000 --- a/doc/sphinx/examples/asynchronous-client.rst +++ /dev/null @@ -1,16 +0,0 @@ -================================================== -Asynchronous Client Example -================================================== - -The asynchronous client functions in the same way as the synchronous -client, however, the asynchronous client uses twisted to return deferreds -for the response result. Just like the synchronous version, it works against -TCP, UDP, serial ASCII, and serial RTU devices. - -Below an asynchronous tcp client is demonstrated running against a -reference server. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/asynchronous-client.py - diff --git a/doc/sphinx/examples/asynchronous-processor.rst b/doc/sphinx/examples/asynchronous-processor.rst deleted file mode 100644 index 4afd8504e..000000000 --- a/doc/sphinx/examples/asynchronous-processor.rst +++ /dev/null @@ -1,15 +0,0 @@ -================================================== -Asynchronous Processor Example -================================================== - -Below is a simplified asynchronous client skeleton that was -submitted by a user of the library. It can be used as a guide -for implementing more complex pollers or state machines. - -Feel free to test it against whatever device you currently have -available. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/asynchronous-processor.py - diff --git a/doc/sphinx/examples/bottle-frontend.rst b/doc/sphinx/examples/bottle-frontend.rst deleted file mode 100644 index 95507c5a8..000000000 --- a/doc/sphinx/examples/bottle-frontend.rst +++ /dev/null @@ -1,22 +0,0 @@ -================================================== -Bottle Web Frontend Example -================================================== - --------------------------------------------------- -Summary --------------------------------------------------- - -This is a simple example of adding a live REST api -on top of a running pymodbus server. This uses the -bottle microframework to achieve this. - -The example can be hosted under twisted as well as -the bottle internal server and can furthermore be -run behind gunicorn, cherrypi, etc wsgi containers. - --------------------------------------------------- -Main Program --------------------------------------------------- - -.. literalinclude:: ../../../examples/gui/bottle/frontend.py - diff --git a/doc/sphinx/examples/concurrent-client.rst b/doc/sphinx/examples/concurrent-client.rst deleted file mode 100644 index 1a3799ac9..000000000 --- a/doc/sphinx/examples/concurrent-client.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Concurrent Client Example -================================================== - -.. literalinclude:: ../../../examples/contrib/concurrent-client.py - diff --git a/doc/sphinx/examples/database-datastore.rst b/doc/sphinx/examples/database-datastore.rst deleted file mode 100644 index 9186be812..000000000 --- a/doc/sphinx/examples/database-datastore.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Database Datastore Example -================================================== - -.. literalinclude:: ../../../examples/contrib/database-datastore.py - diff --git a/doc/sphinx/examples/gtk-frontend.rst b/doc/sphinx/examples/gtk-frontend.rst deleted file mode 100644 index 3efc72644..000000000 --- a/doc/sphinx/examples/gtk-frontend.rst +++ /dev/null @@ -1,26 +0,0 @@ -================================================== -Glade/GTK Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the pygtk -bindings. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/gtk/simulator.py - :language: python - -Glade Layout File --------------------------------------------------- - -The following is the glade layout file that is used by this script: - -.. literalinclude:: ../../../examples/gui/gtk/simulator.glade - :language: xml - diff --git a/doc/sphinx/examples/index.rst b/doc/sphinx/examples/index.rst deleted file mode 100644 index a41f01129..000000000 --- a/doc/sphinx/examples/index.rst +++ /dev/null @@ -1,60 +0,0 @@ - -Pymodbus Library Examples -==================================== - -*What follows is a collection of examples using the pymodbus -library in various ways* - -Example Library Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - asynchronous-client - asynchronous-server - asynchronous-processor - custom-message - custom-datablock - modbus-logging - modbus-payload - modbus-payload-server - synchronous-client - synchronous-client-ext - synchronous-server - performance - updating-server - callback-server - changing-framers - thread-safe-datastore - -Custom Pymodbus Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - redis-datastore - database-datastore - bcd-payload - modicon-payload - message-generator - message-parser - serial-forwarder - modbus-scraper - modbus-simulator - concurrent-client - libmodbus-client - remote-server-context - -Example Frontend Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - gtk-frontend - tk-frontend - wx-frontend - bottle-frontend - diff --git a/doc/sphinx/examples/libmodbus-client.rst b/doc/sphinx/examples/libmodbus-client.rst deleted file mode 100644 index 17ac8e2cf..000000000 --- a/doc/sphinx/examples/libmodbus-client.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Libmodbus Client Facade -================================================== - -.. literalinclude:: ../../../examples/contrib/libmodbus-client.py - diff --git a/doc/sphinx/examples/message-generator.rst b/doc/sphinx/examples/message-generator.rst deleted file mode 100644 index 605554c45..000000000 --- a/doc/sphinx/examples/message-generator.rst +++ /dev/null @@ -1,26 +0,0 @@ -================================================== -Modbus Message Generator Example -================================================== - -This is an example of a utility that will build -examples of modbus messages in all the available -formats in the pymodbus package. - --------------------------------------------------- -Program Source --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/message-generator.py - --------------------------------------------------- -Example Request Messages --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/tx-messages - --------------------------------------------------- -Example Response Messages --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/rx-messages - diff --git a/doc/sphinx/examples/message-parser.rst b/doc/sphinx/examples/message-parser.rst deleted file mode 100644 index 0bbaee9fc..000000000 --- a/doc/sphinx/examples/message-parser.rst +++ /dev/null @@ -1,55 +0,0 @@ -================================================== -Modbus Message Parsing Example -================================================== - -This is an example of a parser to decode raw messages -to a readable description. It will attempt to decode -a message to the request and response version of a -message if possible. Here is an example output:: - - $./message-parser.py -b -m 000112340006ff076d - ================================================================================ - Decoding Message 000112340006ff076d - ================================================================================ - ServerDecoder - -------------------------------------------------------------------------------- - name = ReadExceptionStatusRequest - check = 0x0 - unit_id = 0xff - transaction_id = 0x1 - protocol_id = 0x1234 - documentation = - This function code is used to read the contents of eight Exception Status - outputs in a remote device. The function provides a simple method for - accessing this information, because the Exception Output references are - known (no output reference is needed in the function). - - ClientDecoder - -------------------------------------------------------------------------------- - name = ReadExceptionStatusResponse - check = 0x0 - status = 0x6d - unit_id = 0xff - transaction_id = 0x1 - protocol_id = 0x1234 - documentation = - The normal response contains the status of the eight Exception Status - outputs. The outputs are packed into one data byte, with one bit - per output. The status of the lowest output reference is contained - in the least significant bit of the byte. The contents of the eight - Exception Status outputs are device specific. - --------------------------------------------------- -Program Source --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/message-parser.py - --------------------------------------------------- -Example Messages --------------------------------------------------- - -See the documentation for the message generator -for a collection of messages that can be parsed -by this utility. - diff --git a/doc/sphinx/examples/modbus-payload-server.rst b/doc/sphinx/examples/modbus-payload-server.rst deleted file mode 100644 index 9144f0f53..000000000 --- a/doc/sphinx/examples/modbus-payload-server.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Payload Server Context Building Example -================================================== - -.. literalinclude:: ../../../examples/common/modbus-payload-server.py - diff --git a/doc/sphinx/examples/modbus-payload.rst b/doc/sphinx/examples/modbus-payload.rst deleted file mode 100644 index 79e46dfdb..000000000 --- a/doc/sphinx/examples/modbus-payload.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Payload Building/Decoding Example -================================================== - -.. literalinclude:: ../../../examples/common/modbus-payload.py - diff --git a/doc/sphinx/examples/modicon-payload.rst b/doc/sphinx/examples/modicon-payload.rst deleted file mode 100644 index 997a12f50..000000000 --- a/doc/sphinx/examples/modicon-payload.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modicon Encoded Example -================================================== - -.. literalinclude:: ../../../examples/contrib/modicon-payload.py - diff --git a/doc/sphinx/examples/performance.rst b/doc/sphinx/examples/performance.rst deleted file mode 100644 index 93185bdea..000000000 --- a/doc/sphinx/examples/performance.rst +++ /dev/null @@ -1,11 +0,0 @@ -================================================== -Synchronous Client Performance Check -================================================== - -Below is a quick example of how to test the performance of a tcp modbus -device using the synchronous tcp client. If you do not have a device -to test with, feel free to run a pymodbus server instance or start -the reference tester in the tools directory. - -.. literalinclude:: ../../../examples/common/performance.py - diff --git a/doc/sphinx/examples/redis-datastore.rst b/doc/sphinx/examples/redis-datastore.rst deleted file mode 100644 index bb5554e04..000000000 --- a/doc/sphinx/examples/redis-datastore.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Redis Datastore Example -================================================== - -.. literalinclude:: ../../../examples/contrib/redis-datastore.py - diff --git a/doc/sphinx/examples/serial-forwarder.rst b/doc/sphinx/examples/serial-forwarder.rst deleted file mode 100644 index 87f6e0a0c..000000000 --- a/doc/sphinx/examples/serial-forwarder.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Synchronous Serial Forwarder -================================================== - -.. literalinclude:: ../../../examples/contrib/serial-forwarder.py - diff --git a/doc/sphinx/examples/synchronous-client-ext.rst b/doc/sphinx/examples/synchronous-client-ext.rst deleted file mode 100644 index 5012ec8b0..000000000 --- a/doc/sphinx/examples/synchronous-client-ext.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Synchronous Client Extended Example -================================================== - -.. literalinclude:: ../../../examples/common/synchronous-client-ext.py - diff --git a/doc/sphinx/examples/synchronous-client.rst b/doc/sphinx/examples/synchronous-client.rst deleted file mode 100644 index b90563402..000000000 --- a/doc/sphinx/examples/synchronous-client.rst +++ /dev/null @@ -1,19 +0,0 @@ -================================================== -Synchronous Client Example -================================================== - -It should be noted that each request will block waiting for the result. If asynchronous -behaviour is required, please use the asynchronous client implementations. -The synchronous client, works against TCP, UDP, serial ASCII, and serial RTU devices. - -The synchronous client exposes the most popular methods of the modbus protocol, -however, if you want to execute other methods against the device, -simple create a request instance and pass it to the execute method. - -Below an synchronous tcp client is demonstrated running against a -reference server. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/synchronous-client.py - diff --git a/doc/sphinx/examples/tk-frontend.rst b/doc/sphinx/examples/tk-frontend.rst deleted file mode 100644 index 1849d0abc..000000000 --- a/doc/sphinx/examples/tk-frontend.rst +++ /dev/null @@ -1,17 +0,0 @@ -================================================== -TK Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the native tk -toolkit. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/tk/simulator.py - diff --git a/doc/sphinx/examples/updating-server.rst b/doc/sphinx/examples/updating-server.rst deleted file mode 100644 index 07d1baac0..000000000 --- a/doc/sphinx/examples/updating-server.rst +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Updating Server Example -================================================== - -.. literalinclude:: ../../../examples/common/updating-server.py - diff --git a/doc/sphinx/examples/wx-frontend.rst b/doc/sphinx/examples/wx-frontend.rst deleted file mode 100644 index 5d68142c0..000000000 --- a/doc/sphinx/examples/wx-frontend.rst +++ /dev/null @@ -1,17 +0,0 @@ -================================================== -WX Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the python wx -bindings. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/wx/simulator.py - diff --git a/doc/sphinx/html/.buildinfo b/doc/sphinx/html/.buildinfo deleted file mode 100644 index 72a1539e3..000000000 --- a/doc/sphinx/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a869ccec57cd788c41a89393439ff025 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/sphinx/html/_modules/index.html b/doc/sphinx/html/_modules/index.html deleted file mode 100644 index 1133838f3..000000000 --- a/doc/sphinx/html/_modules/index.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - Overview: module code — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - -

- - - - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/bit_read_message.html b/doc/sphinx/html/_modules/pymodbus/bit_read_message.html deleted file mode 100644 index 53fb041ba..000000000 --- a/doc/sphinx/html/_modules/pymodbus/bit_read_message.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - pymodbus.bit_read_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.bit_read_message

-"""
-Bit Reading Request/Response messages
---------------------------------------
-
-"""
-import struct
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.utilities import pack_bitstring, unpack_bitstring
-from pymodbus.compat import byte2int
-
-
-
[docs]class ReadBitsRequestBase(ModbusRequest): - ''' Base class for Messages Requesting bit values ''' - - _rtu_frame_size = 8 -
[docs] def __init__(self, address, count, **kwargs): - ''' Initializes the read request data - - :param address: The start address to read from - :param count: The number of bits after 'address' to read - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.count = count
- -
[docs] def encode(self): - ''' Encodes a request pdu - - :returns: The encoded pdu - ''' - return struct.pack('>HH', self.address, self.count)
- -
[docs] def decode(self, data): - ''' Decodes a request pdu - - :param data: The packet data to decode - ''' - self.address, self.count = struct.unpack('>HH', data)
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Byte Count(1 byte) + Quantity of Coils (n Bytes) - :return: - """ - return 1 + 1 + self.count
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "ReadBitRequest(%d,%d)" % (self.address, self.count)
- - -
[docs]class ReadBitsResponseBase(ModbusResponse): - ''' Base class for Messages responding to bit-reading values ''' - - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, values, **kwargs): - ''' Initializes a new instance - - :param values: The requested values to be returned - ''' - ModbusResponse.__init__(self, **kwargs) - self.bits = values or []
- -
[docs] def encode(self): - ''' Encodes response pdu - - :returns: The encoded packet message - ''' - result = pack_bitstring(self.bits) - packet = struct.pack(">B", len(result)) + result - return packet
- -
[docs] def decode(self, data): - ''' Decodes response pdu - - :param data: The packet data to decode - ''' - self.byte_count = byte2int(data[0]) - self.bits = unpack_bitstring(data[1:])
- -
[docs] def setBit(self, address, value=1): - ''' Helper function to set the specified bit - - :param address: The bit to set - :param value: The value to set the bit to - ''' - self.bits[address] = (value != 0)
- -
[docs] def resetBit(self, address): - ''' Helper function to set the specified bit to 0 - - :param address: The bit to reset - ''' - self.setBit(address, 0)
- -
[docs] def getBit(self, address): - ''' Helper function to get the specified bit's value - - :param address: The bit to query - :returns: The value of the requested bit - ''' - return self.bits[address]
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "ReadBitResponse(%d)" % len(self.bits)
- - -
[docs]class ReadCoilsRequest(ReadBitsRequestBase): - ''' - This function code is used to read from 1 to 2000(0x7d0) contiguous status - of coils in a remote device. The Request PDU specifies the starting - address, ie the address of the first coil specified, and the number of - coils. In the PDU Coils are addressed starting at zero. Therefore coils - numbered 1-16 are addressed as 0-15. - ''' - function_code = 1 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Initializes a new instance - - :param address: The address to start reading from - :param count: The number of bits to read - ''' - ReadBitsRequestBase.__init__(self, address, count, **kwargs)
- -
[docs] def execute(self, context): - ''' Run a read coils request against a datastore - - Before running the request, we make sure that the request is in - the max valid range (0x001-0x7d0). Next we make sure that the - request is valid against the current datastore. - - :param context: The datastore to request from - :returns: The initializes response message, exception message otherwise - ''' - if not (1 <= self.count <= 0x7d0): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, self.count): - return self.doException(merror.IllegalAddress) - values = context.getValues(self.function_code, self.address, self.count) - return ReadCoilsResponse(values)
- - -
[docs]class ReadCoilsResponse(ReadBitsResponseBase): - ''' - The coils in the response message are packed as one coil per bit of - the data field. Status is indicated as 1= ON and 0= OFF. The LSB of the - first data byte contains the output addressed in the query. The other - coils follow toward the high order end of this byte, and from low order - to high order in subsequent bytes. - - If the returned output quantity is not a multiple of eight, the - remaining bits in the final data byte will be padded with zeros - (toward the high order end of the byte). The Byte Count field specifies - the quantity of complete bytes of data. - ''' - function_code = 1 - -
[docs] def __init__(self, values=None, **kwargs): - ''' Intializes a new instance - - :param values: The request values to respond with - ''' - ReadBitsResponseBase.__init__(self, values, **kwargs)
- - -
[docs]class ReadDiscreteInputsRequest(ReadBitsRequestBase): - ''' - This function code is used to read from 1 to 2000(0x7d0) contiguous status - of discrete inputs in a remote device. The Request PDU specifies the - starting address, ie the address of the first input specified, and the - number of inputs. In the PDU Discrete Inputs are addressed starting at - zero. Therefore Discrete inputs numbered 1-16 are addressed as 0-15. - ''' - function_code = 2 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Intializes a new instance - - :param address: The address to start reading from - :param count: The number of bits to read - ''' - ReadBitsRequestBase.__init__(self, address, count, **kwargs)
- -
[docs] def execute(self, context): - ''' Run a read discrete input request against a datastore - - Before running the request, we make sure that the request is in - the max valid range (0x001-0x7d0). Next we make sure that the - request is valid against the current datastore. - - :param context: The datastore to request from - :returns: The initializes response message, exception message otherwise - ''' - if not (1 <= self.count <= 0x7d0): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, self.count): - return self.doException(merror.IllegalAddress) - values = context.getValues(self.function_code, self.address, self.count) - return ReadDiscreteInputsResponse(values)
- - -
[docs]class ReadDiscreteInputsResponse(ReadBitsResponseBase): - ''' - The discrete inputs in the response message are packed as one input per - bit of the data field. Status is indicated as 1= ON; 0= OFF. The LSB of - the first data byte contains the input addressed in the query. The other - inputs follow toward the high order end of this byte, and from low order - to high order in subsequent bytes. - - If the returned input quantity is not a multiple of eight, the - remaining bits in the final data byte will be padded with zeros - (toward the high order end of the byte). The Byte Count field specifies - the quantity of complete bytes of data. - ''' - function_code = 2 - -
[docs] def __init__(self, values=None, **kwargs): - ''' Intializes a new instance - - :param values: The request values to respond with - ''' - ReadBitsResponseBase.__init__(self, values, **kwargs)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ReadCoilsRequest", "ReadCoilsResponse", - "ReadDiscreteInputsRequest", "ReadDiscreteInputsResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/bit_write_message.html b/doc/sphinx/html/_modules/pymodbus/bit_write_message.html deleted file mode 100644 index c1a379119..000000000 --- a/doc/sphinx/html/_modules/pymodbus/bit_write_message.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - pymodbus.bit_write_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.bit_write_message

-"""
-Bit Writing Request/Response
-------------------------------
-
-TODO write mask request/response
-"""
-import struct
-from pymodbus.constants import ModbusStatus
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.utilities import pack_bitstring, unpack_bitstring
-
-#---------------------------------------------------------------------------#
-# Local Constants
-#---------------------------------------------------------------------------#
-# These are defined in the spec to turn a coil on/off
-#---------------------------------------------------------------------------#
-_turn_coil_on  = struct.pack(">H", ModbusStatus.On)
-_turn_coil_off = struct.pack(">H", ModbusStatus.Off)
-
-
-
[docs]class WriteSingleCoilRequest(ModbusRequest): - ''' - This function code is used to write a single output to either ON or OFF - in a remote device. - - The requested ON/OFF state is specified by a constant in the request - data field. A value of FF 00 hex requests the output to be ON. A value - of 00 00 requests it to be OFF. All other values are illegal and will - not affect the output. - - The Request PDU specifies the address of the coil to be forced. Coils - are addressed starting at zero. Therefore coil numbered 1 is addressed - as 0. The requested ON/OFF state is specified by a constant in the Coil - Value field. A value of 0XFF00 requests the coil to be ON. A value of - 0X0000 requests the coil to be off. All other values are illegal and - will not affect the coil. - ''' - function_code = 5 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, value=None, **kwargs): - ''' Initializes a new instance - - :param address: The variable address to write - :param value: The value to write at address - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.value = bool(value)
- -
[docs] def encode(self): - ''' Encodes write coil request - - :returns: The byte encoded message - ''' - result = struct.pack('>H', self.address) - if self.value: result += _turn_coil_on - else: result += _turn_coil_off - return result
- -
[docs] def decode(self, data): - ''' Decodes a write coil request - - :param data: The packet data to decode - ''' - self.address, value = struct.unpack('>HH', data) - self.value = (value == ModbusStatus.On)
- -
[docs] def execute(self, context): - ''' Run a write coil request against a datastore - - :param context: The datastore to request from - :returns: The populated response or exception message - ''' - #if self.value not in [ModbusStatus.Off, ModbusStatus.On]: - # return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, 1): - return self.doException(merror.IllegalAddress) - - context.setValues(self.function_code, self.address, [self.value]) - values = context.getValues(self.function_code, self.address, 1) - return WriteSingleCoilResponse(self.address, values[0])
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Output Address (2 byte) + Output Value (2 Bytes) - :return: - """ - return 1 + 2 + 2
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :return: A string representation of the instance - ''' - return "WriteCoilRequest(%d, %s) => " % (self.address, self.value)
- - -
[docs]class WriteSingleCoilResponse(ModbusResponse): - ''' - The normal response is an echo of the request, returned after the coil - state has been written. - ''' - function_code = 5 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, value=None, **kwargs): - ''' Initializes a new instance - - :param address: The variable address written to - :param value: The value written at address - ''' - ModbusResponse.__init__(self, **kwargs) - self.address = address - self.value = value
- -
[docs] def encode(self): - ''' Encodes write coil response - - :return: The byte encoded message - ''' - result = struct.pack('>H', self.address) - if self.value: result += _turn_coil_on - else: result += _turn_coil_off - return result
- -
[docs] def decode(self, data): - ''' Decodes a write coil response - - :param data: The packet data to decode - ''' - self.address, value = struct.unpack('>HH', data) - self.value = (value == ModbusStatus.On)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "WriteCoilResponse(%d) => %d" % (self.address, self.value)
- - -
[docs]class WriteMultipleCoilsRequest(ModbusRequest): - ''' - "This function code is used to force each coil in a sequence of coils to - either ON or OFF in a remote device. The Request PDU specifies the coil - references to be forced. Coils are addressed starting at zero. Therefore - coil numbered 1 is addressed as 0. - - The requested ON/OFF states are specified by contents of the request - data field. A logical '1' in a bit position of the field requests the - corresponding output to be ON. A logical '0' requests it to be OFF." - ''' - function_code = 15 - _rtu_byte_count_pos = 6 - -
[docs] def __init__(self, address=None, values=None, **kwargs): - ''' Initializes a new instance - - :param address: The starting request address - :param values: The values to write - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - if not values: values = [] - elif not hasattr(values, '__iter__'): values = [values] - self.values = values - self.byte_count = (len(self.values) + 7) // 8
- -
[docs] def encode(self): - ''' Encodes write coils request - - :returns: The byte encoded message - ''' - count = len(self.values) - self.byte_count = (count + 7) // 8 - packet = struct.pack('>HHB', self.address, count, self.byte_count) - packet += pack_bitstring(self.values) - return packet
- -
[docs] def decode(self, data): - ''' Decodes a write coils request - - :param data: The packet data to decode - ''' - self.address, count, self.byte_count = struct.unpack('>HHB', data[0:5]) - values = unpack_bitstring(data[5:]) - self.values = values[:count]
- -
[docs] def execute(self, context): - ''' Run a write coils request against a datastore - - :param context: The datastore to request from - :returns: The populated response or exception message - ''' - count = len(self.values) - if not (1 <= count <= 0x07b0): - return self.doException(merror.IllegalValue) - if (self.byte_count != (count + 7) // 8): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, count): - return self.doException(merror.IllegalAddress) - - context.setValues(self.function_code, self.address, self.values) - return WriteMultipleCoilsResponse(self.address, count)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - params = (self.address, len(self.values)) - return "WriteNCoilRequest (%d) => %d " % params
- - -
[docs]class WriteMultipleCoilsResponse(ModbusResponse): - ''' - The normal response returns the function code, starting address, and - quantity of coils forced. - ''' - function_code = 15 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Initializes a new instance - - :param address: The starting variable address written to - :param count: The number of values written - ''' - ModbusResponse.__init__(self, **kwargs) - self.address = address - self.count = count
- -
[docs] def encode(self): - ''' Encodes write coils response - - :returns: The byte encoded message - ''' - return struct.pack('>HH', self.address, self.count)
- -
[docs] def decode(self, data): - ''' Decodes a write coils response - - :param data: The packet data to decode - ''' - self.address, self.count = struct.unpack('>HH', data)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "WriteNCoilResponse(%d, %d)" % (self.address, self.count)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "WriteSingleCoilRequest", "WriteSingleCoilResponse", - "WriteMultipleCoilsRequest", "WriteMultipleCoilsResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/client/async.html b/doc/sphinx/html/_modules/pymodbus/client/async.html deleted file mode 100644 index 51c879075..000000000 --- a/doc/sphinx/html/_modules/pymodbus/client/async.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - - pymodbus.client.async — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.client.async

-"""
-Implementation of a Modbus Client Using Twisted
---------------------------------------------------
-
-Example run::
-
-    from twisted.internet import reactor, protocol
-    from pymodbus.client.async import ModbusClientProtocol
-
-    def printResult(result):
-        print "Result: %d" % result.bits[0]
-
-    def process(client):
-        result = client.write_coil(1, True)
-        result.addCallback(printResult)
-        reactor.callLater(1, reactor.stop)
-
-    defer = protocol.ClientCreator(reactor, ModbusClientProtocol
-            ).connectTCP("localhost", 502)
-    defer.addCallback(process)
-
-Another example::
-
-    from twisted.internet import reactor
-    from pymodbus.client.async import ModbusClientFactory
-
-    def process():
-        factory = reactor.connectTCP("localhost", 502, ModbusClientFactory())
-        reactor.stop()
-
-    if __name__ == "__main__":
-       reactor.callLater(1, process)
-       reactor.run()
-"""
-from twisted.internet import defer, protocol
-from pymodbus.factory import ClientDecoder
-from pymodbus.exceptions import ConnectionException
-from pymodbus.transaction import ModbusSocketFramer
-from pymodbus.transaction import FifoTransactionManager
-from pymodbus.transaction import DictTransactionManager
-from pymodbus.client.common import ModbusClientMixin
-from twisted.python.failure import Failure
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Connected Client Protocols
-#---------------------------------------------------------------------------#
-
[docs]class ModbusClientProtocol(protocol.Protocol, ModbusClientMixin): - ''' - This represents the base modbus client protocol. All the application - layer code is deferred to a higher level wrapper. - ''' - -
[docs] def __init__(self, framer=None, **kwargs): - ''' Initializes the framer module - - :param framer: The framer to use for the protocol - ''' - self._connected = False - self.framer = framer or ModbusSocketFramer(ClientDecoder()) - if isinstance(self.framer, ModbusSocketFramer): - self.transaction = DictTransactionManager(self, **kwargs) - else: self.transaction = FifoTransactionManager(self, **kwargs)
- -
[docs] def connectionMade(self): - ''' Called upon a successful client connection. - ''' - _logger.debug("Client connected to modbus server") - self._connected = True
- -
[docs] def connectionLost(self, reason): - ''' Called upon a client disconnect - - :param reason: The reason for the disconnect - ''' - _logger.debug("Client disconnected from modbus server: %s" % reason) - self._connected = False - for tid in list(self.transaction): - self.transaction.getTransaction(tid).errback(Failure( - ConnectionException('Connection lost during request')))
- -
[docs] def dataReceived(self, data): - ''' Get response, check for valid message, decode result - - :param data: The data returned from the server - ''' - self.framer.processIncomingPacket(data, self._handleResponse)
- -
[docs] def execute(self, request): - ''' Starts the producer to send the next request to - consumer.write(Frame(request)) - ''' - request.transaction_id = self.transaction.getNextTID() - packet = self.framer.buildPacket(request) - self.transport.write(packet) - return self._buildResponse(request.transaction_id)
- -
[docs] def _handleResponse(self, reply): - ''' Handle the processed response and link to correct deferred - - :param reply: The reply to process - ''' - if reply is not None: - tid = reply.transaction_id - handler = self.transaction.getTransaction(tid) - if handler: - handler.callback(reply) - else: _logger.debug("Unrequested message: " + str(reply))
- -
[docs] def _buildResponse(self, tid): - ''' Helper method to return a deferred response - for the current request. - - :param tid: The transaction identifier for this response - :returns: A defer linked to the latest request - ''' - if not self._connected: - return defer.fail(Failure( - ConnectionException('Client is not connected'))) - - d = defer.Deferred() - self.transaction.addTransaction(d, tid) - return d
- - #----------------------------------------------------------------------# - # Extra Functions - #----------------------------------------------------------------------# - #if send_failed: - # if self.retry > 0: - # deferLater(clock, self.delay, send, message) - # self.retry -= 1 - - -#---------------------------------------------------------------------------# -# Not Connected Client Protocol -#---------------------------------------------------------------------------# -class ModbusUdpClientProtocol(protocol.DatagramProtocol, ModbusClientMixin): - ''' - This represents the base modbus client protocol. All the application - layer code is deferred to a higher level wrapper. - ''' - - def __init__(self, framer=None, **kwargs): - ''' Initializes the framer module - - :param framer: The framer to use for the protocol - ''' - self.framer = framer or ModbusSocketFramer(ClientDecoder()) - if isinstance(self.framer, ModbusSocketFramer): - self.transaction = DictTransactionManager(self, **kwargs) - else: self.transaction = FifoTransactionManager(self, **kwargs) - - def datagramReceived(self, data, params): - ''' Get response, check for valid message, decode result - - :param data: The data returned from the server - :param params: The host parameters sending the datagram - ''' - _logger.debug("Datagram from: %s:%d" % params) - self.framer.processIncomingPacket(data, self._handleResponse) - - def execute(self, request): - ''' Starts the producer to send the next request to - consumer.write(Frame(request)) - ''' - request.transaction_id = self.transaction.getNextTID() - packet = self.framer.buildPacket(request) - self.transport.write(packet) - return self._buildResponse(request.transaction_id) - - def _handleResponse(self, reply): - ''' Handle the processed response and link to correct deferred - - :param reply: The reply to process - ''' - if reply is not None: - tid = reply.transaction_id - handler = self.transaction.getTransaction(tid) - if handler: - handler.callback(reply) - else: _logger.debug("Unrequested message: " + str(reply)) - - def _buildResponse(self, tid): - ''' Helper method to return a deferred response - for the current request. - - :param tid: The transaction identifier for this response - :returns: A defer linked to the latest request - ''' - d = defer.Deferred() - self.transaction.addTransaction(d, tid) - return d - - -#---------------------------------------------------------------------------# -# Client Factories -#---------------------------------------------------------------------------# -
[docs]class ModbusClientFactory(protocol.ReconnectingClientFactory): - ''' Simple client protocol factory ''' - - protocol = ModbusClientProtocol
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ModbusClientProtocol", "ModbusUdpClientProtocol", - "ModbusClientFactory", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/client/common.html b/doc/sphinx/html/_modules/pymodbus/client/common.html deleted file mode 100644 index 5eec0cabb..000000000 --- a/doc/sphinx/html/_modules/pymodbus/client/common.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - pymodbus.client.common — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.client.common

-'''
-Modbus Client Common
-----------------------------------
-
-This is a common client mixin that can be used by
-both the synchronous and asynchronous clients to
-simplify the interface.
-'''
-from pymodbus.bit_read_message import *
-from pymodbus.bit_write_message import *
-from pymodbus.register_read_message import *
-from pymodbus.register_write_message import *
-from pymodbus.diag_message import *
-from pymodbus.file_message import *
-from pymodbus.other_message import *
-
-
-
[docs]class ModbusClientMixin(object): - ''' - This is a modbus client mixin that provides additional factory - methods for all the current modbus methods. This can be used - instead of the normal pattern of:: - - # instead of this - client = ModbusClient(...) - request = ReadCoilsRequest(1,10) - response = client.execute(request) - - # now like this - client = ModbusClient(...) - response = client.read_coils(1, 10) - ''' - -
[docs] def read_coils(self, address, count=1, **kwargs): - ''' - - :param address: The starting address to read from - :param count: The number of coils to read - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = ReadCoilsRequest(address, count, **kwargs) - return self.execute(request)
- -
[docs] def read_discrete_inputs(self, address, count=1, **kwargs): - ''' - - :param address: The starting address to read from - :param count: The number of discretes to read - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = ReadDiscreteInputsRequest(address, count, **kwargs) - return self.execute(request)
- -
[docs] def write_coil(self, address, value, **kwargs): - ''' - - :param address: The starting address to write to - :param value: The value to write to the specified address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = WriteSingleCoilRequest(address, value, **kwargs) - return self.execute(request)
- -
[docs] def write_coils(self, address, values, **kwargs): - ''' - - :param address: The starting address to write to - :param values: The values to write to the specified address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = WriteMultipleCoilsRequest(address, values, **kwargs) - return self.execute(request)
- -
[docs] def write_register(self, address, value, **kwargs): - ''' - - :param address: The starting address to write to - :param value: The value to write to the specified address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = WriteSingleRegisterRequest(address, value, **kwargs) - return self.execute(request)
- -
[docs] def write_registers(self, address, values, **kwargs): - ''' - - :param address: The starting address to write to - :param values: The values to write to the specified address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = WriteMultipleRegistersRequest(address, values, **kwargs) - return self.execute(request)
- -
[docs] def read_holding_registers(self, address, count=1, **kwargs): - ''' - - :param address: The starting address to read from - :param count: The number of registers to read - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = ReadHoldingRegistersRequest(address, count, **kwargs) - return self.execute(request)
- -
[docs] def read_input_registers(self, address, count=1, **kwargs): - ''' - - :param address: The starting address to read from - :param count: The number of registers to read - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = ReadInputRegistersRequest(address, count, **kwargs) - return self.execute(request)
- -
[docs] def readwrite_registers(self, *args, **kwargs): - ''' - - :param read_address: The address to start reading from - :param read_count: The number of registers to read from address - :param write_address: The address to start writing to - :param write_registers: The registers to write to the specified address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = ReadWriteMultipleRegistersRequest(*args, **kwargs) - return self.execute(request)
- -
[docs] def mask_write_register(self, *args, **kwargs): - ''' - - :param address: The address of the register to write - :param and_mask: The and bitmask to apply to the register address - :param or_mask: The or bitmask to apply to the register address - :param unit: The slave unit this request is targeting - :returns: A deferred response handle - ''' - request = MaskWriteRegisterRequest(*args, **kwargs) - return self.execute(request)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ 'ModbusClientMixin' ] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/client/sync.html b/doc/sphinx/html/_modules/pymodbus/client/sync.html deleted file mode 100644 index 04e0ce562..000000000 --- a/doc/sphinx/html/_modules/pymodbus/client/sync.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - - pymodbus.client.sync — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.client.sync

-import socket
-import serial
-import time
-
-from pymodbus.constants import Defaults
-from pymodbus.factory import ClientDecoder
-from pymodbus.compat import byte2int
-from pymodbus.exceptions import NotImplementedException, ParameterException
-from pymodbus.exceptions import ConnectionException
-from pymodbus.transaction import FifoTransactionManager
-from pymodbus.transaction import DictTransactionManager
-from pymodbus.transaction import ModbusSocketFramer, ModbusBinaryFramer
-from pymodbus.transaction import ModbusAsciiFramer, ModbusRtuFramer
-from pymodbus.client.common import ModbusClientMixin
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# The Synchronous Clients
-#---------------------------------------------------------------------------#
-
[docs]class BaseModbusClient(ModbusClientMixin): - ''' - Inteface for a modbus synchronous client. Defined here are all the - methods for performing the related request methods. Derived classes - simply need to implement the transport methods and set the correct - framer. - ''' - -
[docs] def __init__(self, framer, **kwargs): - ''' Initialize a client instance - - :param framer: The modbus framer implementation to use - ''' - self.framer = framer - if isinstance(self.framer, ModbusSocketFramer): - self.transaction = DictTransactionManager(self, **kwargs) - else: self.transaction = FifoTransactionManager(self, **kwargs)
- - #-----------------------------------------------------------------------# - # Client interface - #-----------------------------------------------------------------------# -
[docs] def connect(self): - ''' Connect to the modbus remote host - - :returns: True if connection succeeded, False otherwise - ''' - raise NotImplementedException("Method not implemented by derived class")
- -
[docs] def close(self): - ''' Closes the underlying socket connection - ''' - pass
- -
[docs] def _send(self, request): - ''' Sends data on the underlying socket - - :param request: The encoded request to send - :return: The number of bytes written - ''' - raise NotImplementedException("Method not implemented by derived class")
- -
[docs] def _recv(self, size): - ''' Reads data from the underlying descriptor - - :param size: The number of bytes to read - :return: The bytes read - ''' - raise NotImplementedException("Method not implemented by derived class")
- - #-----------------------------------------------------------------------# - # Modbus client methods - #-----------------------------------------------------------------------# -
[docs] def execute(self, request=None): - ''' - :param request: The request to process - :returns: The result of the request execution - ''' - if not self.connect(): - raise ConnectionException("Failed to connect[%s]" % (self.__str__())) - return self.transaction.execute(request)
- - #-----------------------------------------------------------------------# - # The magic methods - #-----------------------------------------------------------------------# -
[docs] def __enter__(self): - ''' Implement the client with enter block - - :returns: The current instance of the client - ''' - if not self.connect(): - raise ConnectionException("Failed to connect[%s]" % (self.__str__())) - return self
- -
[docs] def __exit__(self, klass, value, traceback): - ''' Implement the client with exit block ''' - self.close()
- -
[docs] def __str__(self): - ''' Builds a string representation of the connection - - :returns: The string representation - ''' - return "Null Transport"
- - -#---------------------------------------------------------------------------# -# Modbus TCP Client Transport Implementation -#---------------------------------------------------------------------------# -
[docs]class ModbusTcpClient(BaseModbusClient): - ''' Implementation of a modbus tcp client - ''' - -
[docs] def __init__(self, host='127.0.0.1', port=Defaults.Port, - framer=ModbusSocketFramer, **kwargs): - ''' Initialize a client instance - - :param host: The host to connect to (default 127.0.0.1) - :param port: The modbus port to connect to (default 502) - :param source_address: The source address tuple to bind to (default ('', 0)) - :param timeout: The timeout to use for this socket (default Defaults.Timeout) - :param framer: The modbus framer to use (default ModbusSocketFramer) - - .. note:: The host argument will accept ipv4 and ipv6 hosts - ''' - self.host = host - self.port = port - self.source_address = kwargs.get('source_address', ('', 0)) - self.socket = None - self.timeout = kwargs.get('timeout', Defaults.Timeout) - BaseModbusClient.__init__(self, framer(ClientDecoder()), **kwargs)
- -
[docs] def connect(self): - ''' Connect to the modbus tcp server - - :returns: True if connection succeeded, False otherwise - ''' - if self.socket: return True - try: - address = (self.host, self.port) - self.socket = socket.create_connection((self.host, self.port), - timeout=self.timeout, source_address=self.source_address) - except socket.error as msg: - _logger.error('Connection to (%s, %s) failed: %s' % \ - (self.host, self.port, msg)) - self.close() - return self.socket != None
- -
[docs] def close(self): - ''' Closes the underlying socket connection - ''' - if self.socket: - self.socket.close() - self.socket = None
- -
[docs] def _send(self, request): - ''' Sends data on the underlying socket - - :param request: The encoded request to send - :return: The number of bytes written - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - if request: - return self.socket.send(request) - return 0
- -
[docs] def _recv(self, size): - ''' Reads data from the underlying descriptor - - :param size: The number of bytes to read - :return: The bytes read - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - return self.socket.recv(size)
- -
[docs] def __str__(self): - ''' Builds a string representation of the connection - - :returns: The string representation - ''' - return "%s:%s" % (self.host, self.port)
- - -#---------------------------------------------------------------------------# -# Modbus UDP Client Transport Implementation -#---------------------------------------------------------------------------# -
[docs]class ModbusUdpClient(BaseModbusClient): - ''' Implementation of a modbus udp client - ''' - -
[docs] def __init__(self, host='127.0.0.1', port=Defaults.Port, - framer=ModbusSocketFramer, **kwargs): - ''' Initialize a client instance - - :param host: The host to connect to (default 127.0.0.1) - :param port: The modbus port to connect to (default 502) - :param framer: The modbus framer to use (default ModbusSocketFramer) - :param timeout: The timeout to use for this socket (default None) - ''' - self.host = host - self.port = port - self.socket = None - self.timeout = kwargs.get('timeout', None) - BaseModbusClient.__init__(self, framer(ClientDecoder()), **kwargs)
- - @classmethod -
[docs] def _get_address_family(cls, address): - ''' A helper method to get the correct address family - for a given address. - - :param address: The address to get the af for - :returns: AF_INET for ipv4 and AF_INET6 for ipv6 - ''' - try: - _ = socket.inet_pton(socket.AF_INET6, address) - except socket.error: # not a valid ipv6 address - return socket.AF_INET - return socket.AF_INET6
- -
[docs] def connect(self): - ''' Connect to the modbus tcp server - - :returns: True if connection succeeded, False otherwise - ''' - if self.socket: return True - try: - family = ModbusUdpClient._get_address_family(self.host) - self.socket = socket.socket(family, socket.SOCK_DGRAM) - self.socket.settimeout(self.timeout) - except socket.error as ex: - _logger.error('Unable to create udp socket %s' % ex) - self.close() - return self.socket != None
- -
[docs] def close(self): - ''' Closes the underlying socket connection - ''' - self.socket = None
- -
[docs] def _send(self, request): - ''' Sends data on the underlying socket - - :param request: The encoded request to send - :return: The number of bytes written - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - if request: - return self.socket.sendto(request, (self.host, self.port)) - return 0
- -
[docs] def _recv(self, size): - ''' Reads data from the underlying descriptor - - :param size: The number of bytes to read - :return: The bytes read - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - return self.socket.recvfrom(size)[0]
- -
[docs] def __str__(self): - ''' Builds a string representation of the connection - - :returns: The string representation - ''' - return "%s:%s" % (self.host, self.port)
- - -#---------------------------------------------------------------------------# -# Modbus Serial Client Transport Implementation -#---------------------------------------------------------------------------# -
[docs]class ModbusSerialClient(BaseModbusClient): - ''' Implementation of a modbus serial client - ''' - -
[docs] def __init__(self, method='ascii', **kwargs): - ''' Initialize a serial client instance - - The methods to connect are:: - - - ascii - - rtu - - binary - - :param method: The method to use for connection - :param port: The serial port to attach to - :param stopbits: The number of stop bits to use - :param bytesize: The bytesize of the serial messages - :param parity: Which kind of parity to use - :param baudrate: The baud rate to use for the serial device - :param timeout: The timeout between serial requests (default 3s) - ''' - self.method = method - self.socket = None - BaseModbusClient.__init__(self, self.__implementation(method), **kwargs) - - self.port = kwargs.get('port', 0) - self.stopbits = kwargs.get('stopbits', Defaults.Stopbits) - self.bytesize = kwargs.get('bytesize', Defaults.Bytesize) - self.parity = kwargs.get('parity', Defaults.Parity) - self.baudrate = kwargs.get('baudrate', Defaults.Baudrate) - self.timeout = kwargs.get('timeout', Defaults.Timeout) - if self.method == "rtu": - self._last_frame_end = 0.0 - self._silent_interval = 3.5 * (1 + 8 + 2) / self.baudrate
- - @staticmethod - def __implementation(method): - ''' Returns the requested framer - - :method: The serial framer to instantiate - :returns: The requested serial framer - ''' - method = method.lower() - if method == 'ascii': return ModbusAsciiFramer(ClientDecoder()) - elif method == 'rtu': return ModbusRtuFramer(ClientDecoder()) - elif method == 'binary': return ModbusBinaryFramer(ClientDecoder()) - elif method == 'socket': return ModbusSocketFramer(ClientDecoder()) - raise ParameterException("Invalid framer method requested") - -
[docs] def connect(self): - ''' Connect to the modbus serial server - - :returns: True if connection succeeded, False otherwise - ''' - if self.socket: return True - try: - self.socket = serial.Serial(port=self.port, timeout=self.timeout, - bytesize=self.bytesize, stopbits=self.stopbits, - baudrate=self.baudrate, parity=self.parity) - except serial.SerialException as msg: - _logger.error(msg) - self.close() - if self.method == "rtu": - self._last_frame_end = time.time() - return self.socket != None
- -
[docs] def close(self): - ''' Closes the underlying socket connection - ''' - if self.socket: - self.socket.close() - self.socket = None
- -
[docs] def _send(self, request): - ''' Sends data on the underlying socket - - If receive buffer still holds some data then flush it. - - Sleep if last send finished less than 3.5 character - times ago. - - :param request: The encoded request to send - :return: The number of bytes written - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - if request: - ts = time.time() - if self.method == "rtu": - if ts < self._last_frame_end + self._silent_interval: - _logger.debug("will sleep to wait for 3.5 char") - time.sleep(self._last_frame_end + self._silent_interval - ts) - - try: - in_waiting = "in_waiting" if hasattr(self.socket, "in_waiting") else "inWaiting" - if in_waiting == "in_waiting": - waitingbytes = getattr(self.socket, in_waiting) - else: - waitingbytes = getattr(self.socket, in_waiting)() - if waitingbytes: - result = self.socket.read(waitingbytes) - if _logger.isEnabledFor(logging.WARNING): - _logger.warning("cleanup recv buffer before send: " + " ".join([hex(byte2int(x)) for x in result])) - except NotImplementedError: - pass - - size = self.socket.write(request) - if self.method == "rtu": - self._last_frame_end = time.time() - return size - return 0
- -
[docs] def _recv(self, size): - ''' Reads data from the underlying descriptor - - :param size: The number of bytes to read - :return: The bytes read - ''' - if not self.socket: - raise ConnectionException(self.__str__()) - result = self.socket.read(size) - if self.method == "rtu": - self._last_frame_end = time.time() - return result
- -
[docs] def __str__(self): - ''' Builds a string representation of the connection - - :returns: The string representation - ''' - return "%s baud[%s]" % (self.method, self.baudrate)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ModbusTcpClient", "ModbusUdpClient", "ModbusSerialClient" -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/constants.html b/doc/sphinx/html/_modules/pymodbus/constants.html deleted file mode 100644 index adfc5a0b0..000000000 --- a/doc/sphinx/html/_modules/pymodbus/constants.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - pymodbus.constants — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.constants

-'''
-Constants For Modbus Server/Client
-----------------------------------
-
-This is the single location for storing default
-values for the servers and clients.
-'''
-from pymodbus.interfaces import Singleton
-
-
-
[docs]class Defaults(Singleton): - ''' A collection of modbus default values - - .. attribute:: Port - - The default modbus tcp server port (502) - - .. attribute:: Retries - - The default number of times a client should retry the given - request before failing (3) - - .. attribute:: RetryOnEmpty - - A flag indicating if a transaction should be retried in the - case that an empty response is received. This is useful for - slow clients that may need more time to process a requst. - - .. attribute:: Timeout - - The default amount of time a client should wait for a request - to be processed (3 seconds) - - .. attribute:: Reconnects - - The default number of times a client should attempt to reconnect - before deciding the server is down (0) - - .. attribute:: TransactionId - - The starting transaction identifier number (0) - - .. attribute:: ProtocolId - - The modbus protocol id. Currently this is set to 0 in all - but proprietary implementations. - - .. attribute:: UnitId - - The modbus slave addrss. Currently this is set to 0x00 which - means this request should be broadcast to all the slave devices - (really means that all the devices should respons). - - .. attribute:: Baudrate - - The speed at which the data is transmitted over the serial line. - This defaults to 19200. - - .. attribute:: Parity - - The type of checksum to use to verify data integrity. This can be - on of the following:: - - - (E)ven - 1 0 1 0 | P(0) - - (O)dd - 1 0 1 0 | P(1) - - (N)one - 1 0 1 0 | no parity - - This defaults to (N)one. - - .. attribute:: Bytesize - - The number of bits in a byte of serial data. This can be one of - 5, 6, 7, or 8. This defaults to 8. - - .. attribute:: Stopbits - - The number of bits sent after each character in a message to - indicate the end of the byte. This defaults to 1. - - .. attribute:: ZeroMode - - Indicates if the slave datastore should use indexing at 0 or 1. - More about this can be read in section 4.4 of the modbus specification. - - .. attribute:: IgnoreMissingSlaves - - In case a request is made to a missing slave, this defines if an error - should be returned or simply ignored. This is useful for the case of a - serial server emulater where a request to a non-existant slave on a bus - will never respond. The client in this case will simply timeout. - ''' - Port = 502 - Retries = 3 - RetryOnEmpty = False - Timeout = 3 - Reconnects = 0 - TransactionId = 0 - ProtocolId = 0 - UnitId = 0x00 - Baudrate = 19200 - Parity = 'N' - Bytesize = 8 - Stopbits = 1 - ZeroMode = False - IgnoreMissingSlaves = False
- - -
[docs]class ModbusStatus(Singleton): - ''' - These represent various status codes in the modbus - protocol. - - .. attribute:: Waiting - - This indicates that a modbus device is currently - waiting for a given request to finish some running task. - - .. attribute:: Ready - - This indicates that a modbus device is currently - free to perform the next request task. - - .. attribute:: On - - This indicates that the given modbus entity is on - - .. attribute:: Off - - This indicates that the given modbus entity is off - - .. attribute:: SlaveOn - - This indicates that the given modbus slave is running - - .. attribute:: SlaveOff - - This indicates that the given modbus slave is not running - ''' - Waiting = 0xffff - Ready = 0x0000 - On = 0xff00 - Off = 0x0000 - SlaveOn = 0xff - SlaveOff = 0x00
- - -
[docs]class Endian(Singleton): - ''' An enumeration representing the various byte endianess. - - .. attribute:: Auto - - This indicates that the byte order is chosen by the - current native environment. - - .. attribute:: Big - - This indicates that the bytes are in little endian format - - .. attribute:: Little - - This indicates that the bytes are in big endian format - - .. note:: I am simply borrowing the format strings from the - python struct module for my convenience. - ''' - Auto = '@' - Big = '>' - Little = '<'
- - -
[docs]class ModbusPlusOperation(Singleton): - ''' Represents the type of modbus plus request - - .. attribute:: GetStatistics - - Operation requesting that the current modbus plus statistics - be returned in the response. - - .. attribute:: ClearStatistics - - Operation requesting that the current modbus plus statistics - be cleared and not returned in the response. - ''' - GetStatistics = 0x0003 - ClearStatistics = 0x0004
- - -
[docs]class DeviceInformation(Singleton): - ''' Represents what type of device information to read - - .. attribute:: Basic - - This is the basic (required) device information to be returned. - This includes VendorName, ProductCode, and MajorMinorRevision - code. - - .. attribute:: Regular - - In addition to basic data objects, the device provides additional - and optinoal identification and description data objects. All of - the objects of this category are defined in the standard but their - implementation is optional. - - .. attribute:: Extended - - In addition to regular data objects, the device provides additional - and optional identification and description private data about the - physical device itself. All of these data are device dependent. - - .. attribute:: Specific - - Request to return a single data object. - ''' - Basic = 0x01 - Regular = 0x02 - Extended = 0x03 - Specific = 0x04
- - -
[docs]class MoreData(Singleton): - ''' Represents the more follows condition - - .. attribute:: Nothing - - This indiates that no more objects are going to be returned. - - .. attribute:: KeepReading - - This indicates that there are more objects to be returned. - ''' - Nothing = 0x00 - KeepReading = 0xFF
- -#---------------------------------------------------------------------------# -# Exported Identifiers -#---------------------------------------------------------------------------# -__all__ = [ - "Defaults", "ModbusStatus", "Endian", - "ModbusPlusOperation", - "DeviceInformation", "MoreData", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/datastore/context.html b/doc/sphinx/html/_modules/pymodbus/datastore/context.html deleted file mode 100644 index 306a20e72..000000000 --- a/doc/sphinx/html/_modules/pymodbus/datastore/context.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - pymodbus.datastore.context — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.datastore.context

-from pymodbus.exceptions import ParameterException, NoSuchSlaveException
-from pymodbus.interfaces import IModbusSlaveContext
-from pymodbus.datastore.store import ModbusSequentialDataBlock
-from pymodbus.constants import Defaults
-from pymodbus.compat import iteritems, itervalues
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging;
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Slave Contexts
-#---------------------------------------------------------------------------#
-
[docs]class ModbusSlaveContext(IModbusSlaveContext): - ''' - This creates a modbus data model with each data access - stored in its own personal block - ''' - -
[docs] def __init__(self, *args, **kwargs): - ''' Initializes the datastores, defaults to fully populated - sequential data blocks if none are passed in. - - :param kwargs: Each element is a ModbusDataBlock - - 'di' - Discrete Inputs initializer - 'co' - Coils initializer - 'hr' - Holding Register initializer - 'ir' - Input Registers iniatializer - ''' - self.store = {} - self.store['d'] = kwargs.get('di', ModbusSequentialDataBlock.create()) - self.store['c'] = kwargs.get('co', ModbusSequentialDataBlock.create()) - self.store['i'] = kwargs.get('ir', ModbusSequentialDataBlock.create()) - self.store['h'] = kwargs.get('hr', ModbusSequentialDataBlock.create()) - self.zero_mode = kwargs.get('zero_mode', Defaults.ZeroMode)
- -
[docs] def __str__(self): - ''' Returns a string representation of the context - - :returns: A string representation of the context - ''' - return "Modbus Slave Context"
- -
[docs] def reset(self): - ''' Resets all the datastores to their default values ''' - for datastore in itervalues(self.store): - datastore.reset()
- -
[docs] def validate(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to test - :returns: True if the request in within range, False otherwise - ''' - if not self.zero_mode: address = address + 1 - _logger.debug("validate[%d] %d:%d" % (fx, address, count)) - return self.store[self.decode(fx)].validate(address, count)
- -
[docs] def getValues(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - if not self.zero_mode: address = address + 1 - _logger.debug("getValues[%d] %d:%d" % (fx, address, count)) - return self.store[self.decode(fx)].getValues(address, count)
- -
[docs] def setValues(self, fx, address, values): - ''' Sets the datastore with the supplied values - - :param fx: The function we are working with - :param address: The starting address - :param values: The new values to be set - ''' - if not self.zero_mode: address = address + 1 - _logger.debug("setValues[%d] %d:%d" % (fx, address, len(values))) - self.store[self.decode(fx)].setValues(address, values)
- - -
[docs]class ModbusServerContext(object): - ''' This represents a master collection of slave contexts. - If single is set to true, it will be treated as a single - context so every unit-id returns the same context. If single - is set to false, it will be interpreted as a collection of - slave contexts. - ''' - -
[docs] def __init__(self, slaves=None, single=True): - ''' Initializes a new instance of a modbus server context. - - :param slaves: A dictionary of client contexts - :param single: Set to true to treat this as a single context - ''' - self.single = single - self.__slaves = slaves or {} - if self.single: - self.__slaves = {Defaults.UnitId: self.__slaves}
- -
[docs] def __iter__(self): - ''' Iterater over the current collection of slave - contexts. - - :returns: An iterator over the slave contexts - ''' - return iteritems(self.__slaves)
- -
[docs] def __contains__(self, slave): - ''' Check if the given slave is in this list - - :param slave: slave The slave to check for existance - :returns: True if the slave exists, False otherwise - ''' - return slave in self.__slaves
- -
[docs] def __setitem__(self, slave, context): - ''' Used to set a new slave context - - :param slave: The slave context to set - :param context: The new context to set for this slave - ''' - if self.single: slave = Defaults.UnitId - if 0xf7 >= slave >= 0x00: - self.__slaves[slave] = context - else: - raise NoSuchSlaveException('slave index :{} out of range'.format(slave))
- -
[docs] def __delitem__(self, slave): - ''' Wrapper used to access the slave context - - :param slave: The slave context to remove - ''' - if not self.single and (0xf7 >= slave >= 0x00): - del self.__slaves[slave] - else: - raise NoSuchSlaveException('slave index: {} out of range'.format(slave))
- -
[docs] def __getitem__(self, slave): - ''' Used to get access to a slave context - - :param slave: The slave context to get - :returns: The requested slave context - ''' - if self.single: slave = Defaults.UnitId - if slave in self.__slaves: - return self.__slaves.get(slave) - else: - raise NoSuchSlaveException("slave - {} does not exist, or is out of range".format(slave))
-
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/datastore/remote.html b/doc/sphinx/html/_modules/pymodbus/datastore/remote.html deleted file mode 100644 index 05a888254..000000000 --- a/doc/sphinx/html/_modules/pymodbus/datastore/remote.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - pymodbus.datastore.remote — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.datastore.remote

-from pymodbus.exceptions import NotImplementedException
-from pymodbus.interfaces import IModbusSlaveContext
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Context
-#---------------------------------------------------------------------------#
-
[docs]class RemoteSlaveContext(IModbusSlaveContext): - ''' TODO - This creates a modbus data model that connects to - a remote device (depending on the client used) - ''' - -
[docs] def __init__(self, client): - ''' Initializes the datastores - - :param client: The client to retrieve values with - ''' - self._client = client - self.__build_mapping()
- -
[docs] def reset(self): - ''' Resets all the datastores to their default values ''' - raise NotImplementedException()
- -
[docs] def validate(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to test - :returns: True if the request in within range, False otherwise - ''' - _logger.debug("validate[%d] %d:%d" % (fx, address, count)) - result = self.__get_callbacks[self.decode(fx)](address, count) - return result.function_code < 0x80
- -
[docs] def getValues(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - # TODO deal with deferreds - _logger.debug("get values[%d] %d:%d" % (fx, address, count)) - result = self.__get_callbacks[self.decode(fx)](address, count) - return self.__extract_result(self.decode(fx), result)
- -
[docs] def setValues(self, fx, address, values): - ''' Sets the datastore with the supplied values - - :param fx: The function we are working with - :param address: The starting address - :param values: The new values to be set - ''' - # TODO deal with deferreds - _logger.debug("set values[%d] %d:%d" % (fx, address, len(values))) - self.__set_callbacks[self.decode(fx)](address, values)
- -
[docs] def __str__(self): - ''' Returns a string representation of the context - - :returns: A string representation of the context - ''' - return "Remote Slave Context(%s)" % self._client
- - def __build_mapping(self): - ''' - A quick helper method to build the function - code mapper. - ''' - self.__get_callbacks = { - 'd': lambda a, c: self._client.read_discrete_inputs(a, c), - 'c': lambda a, c: self._client.read_coils(a, c), - 'h': lambda a, c: self._client.read_holding_registers(a, c), - 'i': lambda a, c: self._client.read_input_registers(a, c), - } - self.__set_callbacks = { - 'd': lambda a, v: self._client.write_coils(a, v), - 'c': lambda a, v: self._client.write_coils(a, v), - 'h': lambda a, v: self._client.write_registers(a, v), - 'i': lambda a, v: self._client.write_registers(a, v), - } - - def __extract_result(self, fx, result): - ''' A helper method to extract the values out of - a response. TODO make this consistent (values?) - ''' - if result.function_code < 0x80: - if fx in ['d', 'c']: return result.bits - if fx in ['h', 'i']: return result.registers - else: return result
-
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/datastore/store.html b/doc/sphinx/html/_modules/pymodbus/datastore/store.html deleted file mode 100644 index 54b6b4f02..000000000 --- a/doc/sphinx/html/_modules/pymodbus/datastore/store.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - pymodbus.datastore.store — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.datastore.store

-"""
-Modbus Server Datastore
--------------------------
-
-For each server, you will create a ModbusServerContext and pass
-in the default address space for each data access.  The class
-will create and manage the data.
-
-Further modification of said data accesses should be performed
-with [get,set][access]Values(address, count)
-
-Datastore Implementation
--------------------------
-
-There are two ways that the server datastore can be implemented.
-The first is a complete range from 'address' start to 'count'
-number of indecies.  This can be thought of as a straight array::
-
-    data = range(1, 1 + count)
-    [1,2,3,...,count]
-
-The other way that the datastore can be implemented (and how
-many devices implement it) is a associate-array::
-
-    data = {1:'1', 3:'3', ..., count:'count'}
-    [1,3,...,count]
-
-The difference between the two is that the latter will allow
-arbitrary gaps in its datastore while the former will not.
-This is seen quite commonly in some modbus implementations.
-What follows is a clear example from the field:
-
-Say a company makes two devices to monitor power usage on a rack.
-One works with three-phase and the other with a single phase. The
-company will dictate a modbus data mapping such that registers::
-
-    n:      phase 1 power
-    n+1:    phase 2 power
-    n+2:    phase 3 power
-
-Using this, layout, the first device will implement n, n+1, and n+2,
-however, the second device may set the latter two values to 0 or
-will simply not implmented the registers thus causing a single read
-or a range read to fail.
-
-I have both methods implemented, and leave it up to the user to change
-based on their preference.
-"""
-from pymodbus.exceptions import NotImplementedException, ParameterException
-from pymodbus.compat import iteritems, iterkeys, itervalues, get_next
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Datablock Storage
-#---------------------------------------------------------------------------#
-
[docs]class BaseModbusDataBlock(object): - ''' - Base class for a modbus datastore - - Derived classes must create the following fields: - @address The starting address point - @defult_value The default value of the datastore - @values The actual datastore values - - Derived classes must implemented the following methods: - validate(self, address, count=1) - getValues(self, address, count=1) - setValues(self, address, values) - ''' - -
[docs] def default(self, count, value=False): - ''' Used to initialize a store to one value - - :param count: The number of fields to set - :param value: The default value to set to the fields - ''' - self.default_value = value - self.values = [self.default_value] * count - self.address = 0x00
- -
[docs] def reset(self): - ''' Resets the datastore to the initialized default value ''' - self.values = [self.default_value] * len(self.values)
- -
[docs] def validate(self, address, count=1): - ''' Checks to see if the request is in range - - :param address: The starting address - :param count: The number of values to test for - :returns: True if the request in within range, False otherwise - ''' - raise NotImplementedException("Datastore Address Check")
- -
[docs] def getValues(self, address, count=1): - ''' Returns the requested values from the datastore - - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - raise NotImplementedException("Datastore Value Retrieve")
- -
[docs] def setValues(self, address, values): - ''' Returns the requested values from the datastore - - :param address: The starting address - :param values: The values to store - ''' - raise NotImplementedException("Datastore Value Retrieve")
- -
[docs] def __str__(self): - ''' Build a representation of the datastore - - :returns: A string representation of the datastore - ''' - return "DataStore(%d, %d)" % (len(self.values), self.default_value)
- -
[docs] def __iter__(self): - ''' Iterater over the data block data - - :returns: An iterator of the data block data - ''' - if isinstance(self.values, dict): - return iteritems(self.values) - return enumerate(self.values, self.address)
- - -
[docs]class ModbusSequentialDataBlock(BaseModbusDataBlock): - ''' Creates a sequential modbus datastore ''' - -
[docs] def __init__(self, address, values): - ''' Initializes the datastore - - :param address: The starting address of the datastore - :param values: Either a list or a dictionary of values - ''' - self.address = address - if hasattr(values, '__iter__'): - self.values = list(values) - else: self.values = [values] - self.default_value = self.values[0].__class__()
- - @classmethod -
[docs] def create(klass): - ''' Factory method to create a datastore with the - full address space initialized to 0x00 - - :returns: An initialized datastore - ''' - return klass(0x00, [0x00] * 65536)
- -
[docs] def validate(self, address, count=1): - ''' Checks to see if the request is in range - - :param address: The starting address - :param count: The number of values to test for - :returns: True if the request in within range, False otherwise - ''' - result = (self.address <= address) - result &= ((self.address + len(self.values)) >= (address + count)) - return result
- -
[docs] def getValues(self, address, count=1): - ''' Returns the requested values of the datastore - - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - start = address - self.address - return self.values[start:start + count]
- -
[docs] def setValues(self, address, values): - ''' Sets the requested values of the datastore - - :param address: The starting address - :param values: The new values to be set - ''' - if not isinstance(values, list): - values = [values] - start = address - self.address - self.values[start:start + len(values)] = values
- - -
[docs]class ModbusSparseDataBlock(BaseModbusDataBlock): - ''' Creates a sparse modbus datastore ''' - -
[docs] def __init__(self, values): - ''' Initializes the datastore - - Using the input values we create the default - datastore value and the starting address - - :param values: Either a list or a dictionary of values - ''' - if isinstance(values, dict): - self.values = values - elif hasattr(values, '__iter__'): - self.values = dict(enumerate(values)) - else: raise ParameterException( - "Values for datastore must be a list or dictionary") - self.default_value = get_next(itervalues(self.values)).__class__() - self.address = get_next(iterkeys(self.values))
- - @classmethod -
[docs] def create(klass): - ''' Factory method to create a datastore with the - full address space initialized to 0x00 - - :returns: An initialized datastore - ''' - return klass([0x00] * 65536)
- -
[docs] def validate(self, address, count=1): - ''' Checks to see if the request is in range - - :param address: The starting address - :param count: The number of values to test for - :returns: True if the request in within range, False otherwise - ''' - if count == 0: return False - handle = set(range(address, address + count)) - return handle.issubset(set(iterkeys(self.values)))
- -
[docs] def getValues(self, address, count=1): - ''' Returns the requested values of the datastore - - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - return [self.values[i] for i in range(address, address + count)]
- -
[docs] def setValues(self, address, values): - ''' Sets the requested values of the datastore - - :param address: The starting address - :param values: The new values to be set - ''' - if isinstance(values, dict): - for idx, val in iteritems(values): - self.values[idx] = val - else: - if not isinstance(values, list): - values = [values] - for idx, val in enumerate(values): - self.values[address + idx] = val
-
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/device.html b/doc/sphinx/html/_modules/pymodbus/device.html deleted file mode 100644 index ce0d93f53..000000000 --- a/doc/sphinx/html/_modules/pymodbus/device.html +++ /dev/null @@ -1,712 +0,0 @@ - - - - - - - - pymodbus.device — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.device

-"""
-Modbus Device Controller
--------------------------
-
-These are the device management handlers.  They should be
-maintained in the server context and the various methods
-should be inserted in the correct locations.
-"""
-from pymodbus.constants import DeviceInformation
-from pymodbus.interfaces import Singleton
-from pymodbus.utilities import dict_property
-from pymodbus.compat import iteritems, itervalues, izip, int2byte
-
-from collections import OrderedDict
-
-#---------------------------------------------------------------------------#
-# Network Access Control
-#---------------------------------------------------------------------------#
-
[docs]class ModbusAccessControl(Singleton): - ''' - This is a simple implementation of a Network Management System table. - Its purpose is to control access to the server (if it is used). - We assume that if an entry is in the table, it is allowed accesses to - resources. However, if the host does not appear in the table (all - unknown hosts) its connection will simply be closed. - - Since it is a singleton, only one version can possible exist and all - instances pull from here. - ''' - __nmstable = [ - "127.0.0.1", - ] - -
[docs] def __iter__(self): - ''' Iterater over the network access table - - :returns: An iterator of the network access table - ''' - return self.__nmstable.__iter__()
- -
[docs] def __contains__(self, host): - ''' Check if a host is allowed to access resources - - :param host: The host to check - ''' - return host in self.__nmstable
- -
[docs] def add(self, host): - ''' Add allowed host(s) from the NMS table - - :param host: The host to add - ''' - if not isinstance(host, list): - host = [host] - for entry in host: - if entry not in self.__nmstable: - self.__nmstable.append(entry)
- -
[docs] def remove(self, host): - ''' Remove allowed host(s) from the NMS table - - :param host: The host to remove - ''' - if not isinstance(host, list): - host = [host] - for entry in host: - if entry in self.__nmstable: - self.__nmstable.remove(entry)
- -
[docs] def check(self, host): - ''' Check if a host is allowed to access resources - - :param host: The host to check - ''' - return host in self.__nmstable
- - -#---------------------------------------------------------------------------# -# Modbus Plus Statistics -#---------------------------------------------------------------------------# -
[docs]class ModbusPlusStatistics(object): - ''' - This is used to maintain the current modbus plus statistics count. As of - right now this is simply a stub to complete the modbus implementation. - For more information, see the modbus implementation guide page 87. - ''' - - __data = OrderedDict({ - 'node_type_id' : [0x00] * 2, # 00 - 'software_version_number' : [0x00] * 2, # 01 - 'network_address' : [0x00] * 2, # 02 - 'mac_state_variable' : [0x00] * 2, # 03 - 'peer_status_code' : [0x00] * 2, # 04 - 'token_pass_counter' : [0x00] * 2, # 05 - 'token_rotation_time' : [0x00] * 2, # 06 - - 'program_master_token_failed' : [0x00], # 07 hi - 'data_master_token_failed' : [0x00], # 07 lo - 'program_master_token_owner' : [0x00], # 08 hi - 'data_master_token_owner' : [0x00], # 08 lo - 'program_slave_token_owner' : [0x00], # 09 hi - 'data_slave_token_owner' : [0x00], # 09 lo - 'data_slave_command_transfer' : [0x00], # 10 hi - '__unused_10_lowbit' : [0x00], # 10 lo - - 'program_slave_command_transfer' : [0x00], # 11 hi - 'program_master_rsp_transfer' : [0x00], # 11 lo - 'program_slave_auto_logout' : [0x00], # 12 hi - 'program_master_connect_status' : [0x00], # 12 lo - 'receive_buffer_dma_overrun' : [0x00], # 13 hi - 'pretransmit_deferral_error' : [0x00], # 13 lo - 'frame_size_error' : [0x00], # 14 hi - 'repeated_command_received' : [0x00], # 14 lo - 'receiver_alignment_error' : [0x00], # 15 hi - 'receiver_collision_abort_error' : [0x00], # 15 lo - 'bad_packet_length_error' : [0x00], # 16 hi - 'receiver_crc_error' : [0x00], # 16 lo - 'transmit_buffer_dma_underrun' : [0x00], # 17 hi - 'bad_link_address_error' : [0x00], # 17 lo - - 'bad_mac_function_code_error' : [0x00], # 18 hi - 'internal_packet_length_error' : [0x00], # 18 lo - 'communication_failed_error' : [0x00], # 19 hi - 'communication_retries' : [0x00], # 19 lo - 'no_response_error' : [0x00], # 20 hi - 'good_receive_packet' : [0x00], # 20 lo - 'unexpected_path_error' : [0x00], # 21 hi - 'exception_response_error' : [0x00], # 21 lo - 'forgotten_transaction_error' : [0x00], # 22 hi - 'unexpected_response_error' : [0x00], # 22 lo - - 'active_station_bit_map' : [0x00] * 8, # 23-26 - 'token_station_bit_map' : [0x00] * 8, # 27-30 - 'global_data_bit_map' : [0x00] * 8, # 31-34 - 'receive_buffer_use_bit_map' : [0x00] * 8, # 35-37 - 'data_master_output_path' : [0x00] * 8, # 38-41 - 'data_slave_input_path' : [0x00] * 8, # 42-45 - 'program_master_outptu_path' : [0x00] * 8, # 46-49 - 'program_slave_input_path' : [0x00] * 8, # 50-53 - }) - -
[docs] def __init__(self): - ''' - Initialize the modbus plus statistics with the default - information. - ''' - self.reset()
- -
[docs] def __iter__(self): - ''' Iterater over the statistics - - :returns: An iterator of the modbus plus statistics - ''' - return iteritems(self.__data)
- -
[docs] def reset(self): - ''' This clears all of the modbus plus statistics - ''' - for key in self.__data: - self.__data[key] = [0x00] * len(self.__data[key])
- -
[docs] def summary(self): - ''' Returns a summary of the modbus plus statistics - - :returns: 54 16-bit words representing the status - ''' - return itervalues(self.__data)
- -
[docs] def encode(self): - ''' Returns a summary of the modbus plus statistics - - :returns: 54 16-bit words representing the status - ''' - total, values = [], sum(self.__data.values(), []) - for c in range(0, len(values), 2): - total.append((values[c] << 8) | values[c+1]) - return total
- - -#---------------------------------------------------------------------------# -# Device Information Control -#---------------------------------------------------------------------------# -
[docs]class ModbusDeviceIdentification(object): - ''' - This is used to supply the device identification - for the readDeviceIdentification function - - For more information read section 6.21 of the modbus - application protocol. - ''' - __data = { - 0x00: '', # VendorName - 0x01: '', # ProductCode - 0x02: '', # MajorMinorRevision - 0x03: '', # VendorUrl - 0x04: '', # ProductName - 0x05: '', # ModelName - 0x06: '', # UserApplicationName - 0x07: '', # reserved - 0x08: '', # reserved - # 0x80 -> 0xFF are private - } - - __names = [ - 'VendorName', - 'ProductCode', - 'MajorMinorRevision', - 'VendorUrl', - 'ProductName', - 'ModelName', - 'UserApplicationName', - ] - -
[docs] def __init__(self, info=None): - ''' - Initialize the datastore with the elements you need. - (note acceptable range is [0x00-0x06,0x80-0xFF] inclusive) - - :param information: A dictionary of {int:string} of values - ''' - if isinstance(info, dict): - for key in info: - if (0x06 >= key >= 0x00) or (0x80 > key > 0x08): - self.__data[key] = info[key]
- -
[docs] def __iter__(self): - ''' Iterater over the device information - - :returns: An iterator of the device information - ''' - return iteritems(self.__data)
- -
[docs] def summary(self): - ''' Return a summary of the main items - - :returns: An dictionary of the main items - ''' - return dict(zip(self.__names, itervalues(self.__data)))
- -
[docs] def update(self, value): - ''' Update the values of this identity - using another identify as the value - - :param value: The value to copy values from - ''' - self.__data.update(value)
- -
[docs] def __setitem__(self, key, value): - ''' Wrapper used to access the device information - - :param key: The register to set - :param value: The new value for referenced register - ''' - if key not in [0x07, 0x08]: - self.__data[key] = value
- -
[docs] def __getitem__(self, key): - ''' Wrapper used to access the device information - - :param key: The register to read - ''' - return self.__data.setdefault(key, '')
- -
[docs] def __str__(self): - ''' Build a representation of the device - - :returns: A string representation of the device - ''' - return "DeviceIdentity"
- - #-------------------------------------------------------------------------# - # Properties - #-------------------------------------------------------------------------# - VendorName = dict_property(lambda s: s.__data, 0) - ProductCode = dict_property(lambda s: s.__data, 1) - MajorMinorRevision = dict_property(lambda s: s.__data, 2) - VendorUrl = dict_property(lambda s: s.__data, 3) - ProductName = dict_property(lambda s: s.__data, 4) - ModelName = dict_property(lambda s: s.__data, 5) - UserApplicationName = dict_property(lambda s: s.__data, 6)
- - -
[docs]class DeviceInformationFactory(Singleton): - ''' This is a helper factory that really just hides - some of the complexity of processing the device information - requests (function code 0x2b 0x0e). - ''' - - __lookup = { - DeviceInformation.Basic: lambda c,r,i: c.__gets(r, list(range(0x00, 0x03))), - DeviceInformation.Regular: lambda c,r,i: c.__gets(r, list(range(0x00, 0x08))), - DeviceInformation.Extended: lambda c,r,i: c.__gets(r, list(range(0x80, i))), - DeviceInformation.Specific: lambda c,r,i: c.__get(r, i), - } - - @classmethod -
[docs] def get(cls, control, read_code=DeviceInformation.Basic, object_id=0x00): - ''' Get the requested device data from the system - - :param control: The control block to pull data from - :param read_code: The read code to process - :param object_id: The specific object_id to read - :returns: The requested data (id, length, value) - ''' - identity = control.Identity - return cls.__lookup[read_code](cls, identity, object_id)
- - @classmethod - def __get(cls, identity, object_id): - ''' Read a single object_id from the device information - - :param identity: The identity block to pull data from - :param object_id: The specific object id to read - :returns: The requested data (id, length, value) - ''' - return { object_id:identity[object_id] } - - @classmethod - def __gets(cls, identity, object_ids): - ''' Read multiple object_ids from the device information - - :param identity: The identity block to pull data from - :param object_ids: The specific object ids to read - :returns: The requested data (id, length, value) - ''' - return dict((oid, identity[oid]) for oid in object_ids)
- - -#---------------------------------------------------------------------------# -# Counters Handler -#---------------------------------------------------------------------------# -class ModbusCountersHandler(object): - ''' - This is a helper class to simplify the properties for the counters:: - - 0x0B 1 Return Bus Message Count - - Quantity of messages that the remote - device has detected on the communications system since its - last restart, clear counters operation, or power-up. Messages - with bad CRC are not taken into account. - - 0x0C 2 Return Bus Communication Error Count - - Quantity of CRC errors encountered by the remote device since its - last restart, clear counters operation, or power-up. In case of - an error detected on the character level, (overrun, parity error), - or in case of a message length < 3 bytes, the receiving device is - not able to calculate the CRC. In such cases, this counter is - also incremented. - - 0x0D 3 Return Slave Exception Error Count - - Quantity of MODBUS exception error detected by the remote device - since its last restart, clear counters operation, or power-up. It - comprises also the error detected in broadcast messages even if an - exception message is not returned in this case. - Exception errors are described and listed in "MODBUS Application - Protocol Specification" document. - - 0xOE 4 Return Slave Message Count - - Quantity of messages addressed to the remote device, including - broadcast messages, that the remote device has processed since its - last restart, clear counters operation, or power-up. - - 0x0F 5 Return Slave No Response Count - - Quantity of messages received by the remote device for which it - returned no response (neither a normal response nor an exception - response), since its last restart, clear counters operation, or - power-up. Then, this counter counts the number of broadcast - messages it has received. - - 0x10 6 Return Slave NAK Count - - Quantity of messages addressed to the remote device for which it - returned a Negative Acknowledge (NAK) exception response, since - its last restart, clear counters operation, or power-up. Exception - responses are described and listed in "MODBUS Application Protocol - Specification" document. - - 0x11 7 Return Slave Busy Count - - Quantity of messages addressed to the remote device for which it - returned a Slave Device Busy exception response, since its last - restart, clear counters operation, or power-up. Exception - responses are described and listed in "MODBUS Application - Protocol Specification" document. - - 0x12 8 Return Bus Character Overrun Count - - Quantity of messages addressed to the remote device that it could - not handle due to a character overrun condition, since its last - restart, clear counters operation, or power-up. A character - overrun is caused by data characters arriving at the port faster - than they can. - - .. note:: I threw the event counter in here for convinience - ''' - __data = dict([(i, 0x0000) for i in range(9)]) - __names = [ - 'BusMessage', - 'BusCommunicationError', - 'SlaveExceptionError', - 'SlaveMessage', - 'SlaveNoResponse', - 'SlaveNAK', - 'SlaveBusy', - 'BusCharacterOverrun' - 'Event ' - ] - - def __iter__(self): - ''' Iterater over the device counters - - :returns: An iterator of the device counters - ''' - return izip(self.__names, itervalues(self.__data)) - - def update(self, values): - ''' Update the values of this identity - using another identify as the value - - :param values: The value to copy values from - ''' - for k, v in iteritems(values): - v += self.__getattribute__(k) - self.__setattr__(k, v) - - def reset(self): - ''' This clears all of the system counters - ''' - self.__data = dict([(i, 0x0000) for i in range(9)]) - - def summary(self): - ''' Returns a summary of the counters current status - - :returns: A byte with each bit representing each counter - ''' - count, result = 0x01, 0x00 - for i in itervalues(self.__data): - if i != 0x00: result |= count - count <<= 1 - return result - - #-------------------------------------------------------------------------# - # Properties - #-------------------------------------------------------------------------# - BusMessage = dict_property(lambda s: s.__data, 0) - BusCommunicationError = dict_property(lambda s: s.__data, 1) - BusExceptionError = dict_property(lambda s: s.__data, 2) - SlaveMessage = dict_property(lambda s: s.__data, 3) - SlaveNoResponse = dict_property(lambda s: s.__data, 4) - SlaveNAK = dict_property(lambda s: s.__data, 5) - SlaveBusy = dict_property(lambda s: s.__data, 6) - BusCharacterOverrun = dict_property(lambda s: s.__data, 7) - Event = dict_property(lambda s: s.__data, 8) - - -#---------------------------------------------------------------------------# -# Main server controll block -#---------------------------------------------------------------------------# -
[docs]class ModbusControlBlock(Singleton): - ''' - This is a global singleotn that controls all system information - - All activity should be logged here and all diagnostic requests - should come from here. - ''' - - __mode = 'ASCII' - __diagnostic = [False] * 16 - __instance = None - __listen_only = False - __delimiter = '\r' - __counters = ModbusCountersHandler() - __identity = ModbusDeviceIdentification() - __plus = ModbusPlusStatistics() - __events = [] - - #-------------------------------------------------------------------------# - # Magic - #-------------------------------------------------------------------------# -
[docs] def __str__(self): - ''' Build a representation of the control block - - :returns: A string representation of the control block - ''' - return "ModbusControl"
- -
[docs] def __iter__(self): - ''' Iterater over the device counters - - :returns: An iterator of the device counters - ''' - return self.__counters.__iter__()
- - #-------------------------------------------------------------------------# - # Events - #-------------------------------------------------------------------------# -
[docs] def addEvent(self, event): - ''' Adds a new event to the event log - - :param event: A new event to add to the log - ''' - self.__events.insert(0, event) - self.__events = self.__events[0:64] # chomp to 64 entries - self.Counter.Event += 1
- -
[docs] def getEvents(self): - ''' Returns an encoded collection of the event log. - - :returns: The encoded events packet - ''' - events = [event.encode() for event in self.__events] - return b''.join(events)
- -
[docs] def clearEvents(self): - ''' Clears the current list of events - ''' - self.__events = []
- - #-------------------------------------------------------------------------# - # Other Properties - #-------------------------------------------------------------------------# - Identity = property(lambda s: s.__identity) - Counter = property(lambda s: s.__counters) - Events = property(lambda s: s.__events) - Plus = property(lambda s: s.__plus) - -
[docs] def reset(self): - ''' This clears all of the system counters and the - diagnostic register - ''' - self.__events = [] - self.__counters.reset() - self.__diagnostic = [False] * 16
- - #-------------------------------------------------------------------------# - # Listen Properties - #-------------------------------------------------------------------------# -
[docs] def _setListenOnly(self, value): - ''' This toggles the listen only status - - :param value: The value to set the listen status to - ''' - self.__listen_only = bool(value)
- - ListenOnly = property(lambda s: s.__listen_only, _setListenOnly) - - #-------------------------------------------------------------------------# - # Mode Properties - #-------------------------------------------------------------------------# -
[docs] def _setMode(self, mode): - ''' This toggles the current serial mode - - :param mode: The data transfer method in (RTU, ASCII) - ''' - if mode in ['ASCII', 'RTU']: - self.__mode = mode
- - Mode = property(lambda s: s.__mode, _setMode) - - #-------------------------------------------------------------------------# - # Delimiter Properties - #-------------------------------------------------------------------------# -
[docs] def _setDelimiter(self, char): - ''' This changes the serial delimiter character - - :param char: The new serial delimiter character - ''' - if isinstance(char, str): - self.__delimiter = char.encode() - if isinstance(char, bytes): - self.__delimiter = char - elif isinstance(char, int): - self.__delimiter = int2byte(char)
- - Delimiter = property(lambda s: s.__delimiter, _setDelimiter) - - #-------------------------------------------------------------------------# - # Diagnostic Properties - #-------------------------------------------------------------------------# -
[docs] def setDiagnostic(self, mapping): - ''' This sets the value in the diagnostic register - - :param mapping: Dictionary of key:value pairs to set - ''' - for entry in iteritems(mapping): - if entry[0] >= 0 and entry[0] < len(self.__diagnostic): - self.__diagnostic[entry[0]] = (entry[1] != 0)
- -
[docs] def getDiagnostic(self, bit): - ''' This gets the value in the diagnostic register - - :param bit: The bit to get - :returns: The current value of the requested bit - ''' - try: - if bit and bit >= 0 and bit < len(self.__diagnostic): - return self.__diagnostic[bit] - except Exception: - return None
- -
[docs] def getDiagnosticRegister(self): - ''' This gets the entire diagnostic register - - :returns: The diagnostic register collection - ''' - return self.__diagnostic
- -#---------------------------------------------------------------------------# -# Exported Identifiers -#---------------------------------------------------------------------------# -__all__ = [ - "ModbusAccessControl", - "ModbusPlusStatistics", - "ModbusDeviceIdentification", - "DeviceInformationFactory", - "ModbusControlBlock" -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/diag_message.html b/doc/sphinx/html/_modules/pymodbus/diag_message.html deleted file mode 100644 index b706258af..000000000 --- a/doc/sphinx/html/_modules/pymodbus/diag_message.html +++ /dev/null @@ -1,845 +0,0 @@ - - - - - - - - pymodbus.diag_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.diag_message

-'''
-Diagnostic Record Read/Write
-------------------------------
-
-These need to be tied into a the current server context
-or linked to the appropriate data
-'''
-import struct
-
-from pymodbus.constants import ModbusStatus, ModbusPlusOperation
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.device import ModbusControlBlock
-from pymodbus.exceptions import NotImplementedException
-from pymodbus.utilities import pack_bitstring
-
-_MCB = ModbusControlBlock()
-
-
-#---------------------------------------------------------------------------#
-# Diagnostic Function Codes Base Classes
-# diagnostic 08, 00-18,20
-#---------------------------------------------------------------------------#
-# TODO Make sure all the data is decoded from the response
-#---------------------------------------------------------------------------#
-
[docs]class DiagnosticStatusRequest(ModbusRequest): - ''' - This is a base class for all of the diagnostic request functions - ''' - function_code = 0x08 - _rtu_frame_size = 8 - -
[docs] def __init__(self, **kwargs): - ''' - Base initializer for a diagnostic request - ''' - ModbusRequest.__init__(self, **kwargs) - self.message = None
- -
[docs] def encode(self): - ''' - Base encoder for a diagnostic response - we encode the data set in self.message - - :returns: The encoded packet - ''' - packet = struct.pack('>H', self.sub_function_code) - if self.message is not None: - if isinstance(self.message, str): - packet += self.message.encode() - elif isinstance(self.message, bytes): - packet += self.message - elif isinstance(self.message, list): - for piece in self.message: - packet += struct.pack('>H', piece) - elif isinstance(self.message, int): - packet += struct.pack('>H', self.message) - return packet
- -
[docs] def decode(self, data): - ''' Base decoder for a diagnostic request - - :param data: The data to decode into the function code - ''' - self.sub_function_code, self.message = struct.unpack('>HH', data)
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Sub function code (2 byte) + Data (2 * N bytes) - :return: - """ - if not isinstance(self.message,list): - self.message = [self.message] - return 1 + 2 + 2 * len(self.message)
- - - -
[docs]class DiagnosticStatusResponse(ModbusResponse): - ''' - This is a base class for all of the diagnostic response functions - - It works by performing all of the encoding and decoding of variable - data and lets the higher classes define what extra data to append - and how to execute a request - ''' - function_code = 0x08 - _rtu_frame_size = 8 - -
[docs] def __init__(self, **kwargs): - ''' - Base initializer for a diagnostic response - ''' - ModbusResponse.__init__(self, **kwargs) - self.message = None
- -
[docs] def encode(self): - ''' - Base encoder for a diagnostic response - we encode the data set in self.message - - :returns: The encoded packet - ''' - packet = struct.pack('>H', self.sub_function_code) - if self.message is not None: - if isinstance(self.message, str): - packet += self.message.encode() - elif isinstance(self.message, bytes): - packet += self.message - elif isinstance(self.message, list): - for piece in self.message: - packet += struct.pack('>H', piece) - elif isinstance(self.message, int): - packet += struct.pack('>H', self.message) - return packet
- -
[docs] def decode(self, data): - ''' Base decoder for a diagnostic response - - :param data: The data to decode into the function code - ''' - self.sub_function_code, self.message = struct.unpack('>HH', data)
- - -
[docs]class DiagnosticStatusSimpleRequest(DiagnosticStatusRequest): - ''' - A large majority of the diagnostic functions are simple - status request functions. They work by sending 0x0000 - as data and their function code and they are returned - 2 bytes of data. - - If a function inherits this, they only need to implement - the execute method - ''' - -
[docs] def __init__(self, data=0x0000, **kwargs): - ''' - General initializer for a simple diagnostic request - - The data defaults to 0x0000 if not provided as over half - of the functions require it. - - :param data: The data to send along with the request - ''' - DiagnosticStatusRequest.__init__(self, **kwargs) - self.message = data
- -
[docs] def execute(self, *args): - ''' Base function to raise if not implemented ''' - raise NotImplementedException("Diagnostic Message Has No Execute Method")
- - -
[docs]class DiagnosticStatusSimpleResponse(DiagnosticStatusResponse): - ''' - A large majority of the diagnostic functions are simple - status request functions. They work by sending 0x0000 - as data and their function code and they are returned - 2 bytes of data. - ''' - -
[docs] def __init__(self, data=0x0000, **kwargs): - ''' General initializer for a simple diagnostic response - - :param data: The resulting data to return to the client - ''' - DiagnosticStatusResponse.__init__(self, **kwargs) - self.message = data
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 00 -#---------------------------------------------------------------------------# -
[docs]class ReturnQueryDataRequest(DiagnosticStatusRequest): - ''' - The data passed in the request data field is to be returned (looped back) - in the response. The entire response message should be identical to the - request. - ''' - sub_function_code = 0x0000 - -
[docs] def __init__(self, message=0x0000, **kwargs): - ''' Initializes a new instance of the request - - :param message: The message to send to loopback - ''' - DiagnosticStatusRequest.__init__(self, **kwargs) - if isinstance(message, list): - self.message = message - else: - self.message = [message]
- -
[docs] def execute(self, *args): - ''' Executes the loopback request (builds the response) - - :returns: The populated loopback response message - ''' - return ReturnQueryDataResponse(self.message)
- - -
[docs]class ReturnQueryDataResponse(DiagnosticStatusResponse): - ''' - The data passed in the request data field is to be returned (looped back) - in the response. The entire response message should be identical to the - request. - ''' - sub_function_code = 0x0000 - -
[docs] def __init__(self, message=0x0000, **kwargs): - ''' Initializes a new instance of the response - - :param message: The message to loopback - ''' - DiagnosticStatusResponse.__init__(self, **kwargs) - if isinstance(message, list): - self.message = message - else: self.message = [message]
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 01 -#---------------------------------------------------------------------------# -
[docs]class RestartCommunicationsOptionRequest(DiagnosticStatusRequest): - ''' - The remote device serial line port must be initialized and restarted, and - all of its communications event counters are cleared. If the port is - currently in Listen Only Mode, no response is returned. This function is - the only one that brings the port out of Listen Only Mode. If the port is - not currently in Listen Only Mode, a normal response is returned. This - occurs before the restart is executed. - ''' - sub_function_code = 0x0001 - -
[docs] def __init__(self, toggle=False, **kwargs): - ''' Initializes a new request - - :param toggle: Set to True to toggle, False otherwise - ''' - DiagnosticStatusRequest.__init__(self, **kwargs) - if toggle: - self.message = [ModbusStatus.On] - else: self.message = [ModbusStatus.Off]
- -
[docs] def execute(self, *args): - ''' Clear event log and restart - - :returns: The initialized response message - ''' - #if _MCB.ListenOnly: - return RestartCommunicationsOptionResponse(self.message)
- -
[docs]class RestartCommunicationsOptionResponse(DiagnosticStatusResponse): - ''' - The remote device serial line port must be initialized and restarted, and - all of its communications event counters are cleared. If the port is - currently in Listen Only Mode, no response is returned. This function is - the only one that brings the port out of Listen Only Mode. If the port is - not currently in Listen Only Mode, a normal response is returned. This - occurs before the restart is executed. - ''' - sub_function_code = 0x0001 - -
[docs] def __init__(self, toggle=False, **kwargs): - ''' Initializes a new response - - :param toggle: Set to True if we toggled, False otherwise - ''' - DiagnosticStatusResponse.__init__(self, **kwargs) - if toggle: - self.message = [ModbusStatus.On] - else: self.message = [ModbusStatus.Off]
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 02 -#---------------------------------------------------------------------------# -
[docs]class ReturnDiagnosticRegisterRequest(DiagnosticStatusSimpleRequest): - ''' - The contents of the remote device's 16-bit diagnostic register are - returned in the response - ''' - sub_function_code = 0x0002 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - #if _MCB.isListenOnly(): - register = pack_bitstring(_MCB.getDiagnosticRegister()) - return ReturnDiagnosticRegisterResponse(register)
- - -
[docs]class ReturnDiagnosticRegisterResponse(DiagnosticStatusSimpleResponse): - ''' - The contents of the remote device's 16-bit diagnostic register are - returned in the response - ''' - sub_function_code = 0x0002
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 03 -#---------------------------------------------------------------------------# -
[docs]class ChangeAsciiInputDelimiterRequest(DiagnosticStatusSimpleRequest): - ''' - The character 'CHAR' passed in the request data field becomes the end of - message delimiter for future messages (replacing the default LF - character). This function is useful in cases of a Line Feed is not - required at the end of ASCII messages. - ''' - sub_function_code = 0x0003 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - char = (self.message & 0xff00) >> 8 - _MCB.Delimiter = char - return ChangeAsciiInputDelimiterResponse(self.message)
- - -
[docs]class ChangeAsciiInputDelimiterResponse(DiagnosticStatusSimpleResponse): - ''' - The character 'CHAR' passed in the request data field becomes the end of - message delimiter for future messages (replacing the default LF - character). This function is useful in cases of a Line Feed is not - required at the end of ASCII messages. - ''' - sub_function_code = 0x0003
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 04 -#---------------------------------------------------------------------------# -
[docs]class ForceListenOnlyModeRequest(DiagnosticStatusSimpleRequest): - ''' - Forces the addressed remote device to its Listen Only Mode for MODBUS - communications. This isolates it from the other devices on the network, - allowing them to continue communicating without interruption from the - addressed remote device. No response is returned. - ''' - sub_function_code = 0x0004 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - _MCB.ListenOnly = True - return ForceListenOnlyModeResponse()
- - -
[docs]class ForceListenOnlyModeResponse(DiagnosticStatusResponse): - ''' - Forces the addressed remote device to its Listen Only Mode for MODBUS - communications. This isolates it from the other devices on the network, - allowing them to continue communicating without interruption from the - addressed remote device. No response is returned. - - This does not send a response - ''' - sub_function_code = 0x0004 - should_respond = False - -
[docs] def __init__(self, **kwargs): - ''' Initializer to block a return response - ''' - DiagnosticStatusResponse.__init__(self, **kwargs) - self.message = []
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 10 -#---------------------------------------------------------------------------# -
[docs]class ClearCountersRequest(DiagnosticStatusSimpleRequest): - ''' - The goal is to clear ll counters and the diagnostic register. - Also, counters are cleared upon power-up - ''' - sub_function_code = 0x000A - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - _MCB.reset() - return ClearCountersResponse(self.message)
- - -
[docs]class ClearCountersResponse(DiagnosticStatusSimpleResponse): - ''' - The goal is to clear ll counters and the diagnostic register. - Also, counters are cleared upon power-up - ''' - sub_function_code = 0x000A
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 11 -#---------------------------------------------------------------------------# -
[docs]class ReturnBusMessageCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages that the - remote device has detected on the communications systems since its last - restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000B - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.BusMessage - return ReturnBusMessageCountResponse(count)
- - -
[docs]class ReturnBusMessageCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages that the - remote device has detected on the communications systems since its last - restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000B
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 12 -#---------------------------------------------------------------------------# -
[docs]class ReturnBusCommunicationErrorCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of CRC errors encountered - by the remote device since its last restart, clear counter operation, or - power-up - ''' - sub_function_code = 0x000C - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.BusCommunicationError - return ReturnBusCommunicationErrorCountResponse(count)
- - -
[docs]class ReturnBusCommunicationErrorCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of CRC errors encountered - by the remote device since its last restart, clear counter operation, or - power-up - ''' - sub_function_code = 0x000C
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 13 -#---------------------------------------------------------------------------# -
[docs]class ReturnBusExceptionErrorCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of modbus exception - responses returned by the remote device since its last restart, - clear counters operation, or power-up - ''' - sub_function_code = 0x000D - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.BusExceptionError - return ReturnBusExceptionErrorCountResponse(count)
- - -
[docs]class ReturnBusExceptionErrorCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of modbus exception - responses returned by the remote device since its last restart, - clear counters operation, or power-up - ''' - sub_function_code = 0x000D
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 14 -#---------------------------------------------------------------------------# -
[docs]class ReturnSlaveMessageCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages addressed to the - remote device, or broadcast, that the remote device has processed since - its last restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000E - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.SlaveMessage - return ReturnSlaveMessageCountResponse(count)
- - -
[docs]class ReturnSlaveMessageCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages addressed to the - remote device, or broadcast, that the remote device has processed since - its last restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000E
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 15 -#---------------------------------------------------------------------------# -
[docs]class ReturnSlaveNoResponseCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages addressed to the - remote device, or broadcast, that the remote device has processed since - its last restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000F - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.SlaveNoResponse - return ReturnSlaveNoReponseCountResponse(count)
- - -
[docs]class ReturnSlaveNoReponseCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages addressed to the - remote device, or broadcast, that the remote device has processed since - its last restart, clear counters operation, or power-up - ''' - sub_function_code = 0x000F
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 16 -#---------------------------------------------------------------------------# -
[docs]class ReturnSlaveNAKCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages addressed to the - remote device for which it returned a Negative Acknowledge (NAK) exception - response, since its last restart, clear counters operation, or power-up. - Exception responses are described and listed in section 7 . - ''' - sub_function_code = 0x0010 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.SlaveNAK - return ReturnSlaveNAKCountResponse(count)
- - -
[docs]class ReturnSlaveNAKCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages addressed to the - remote device for which it returned a Negative Acknowledge (NAK) exception - response, since its last restart, clear counters operation, or power-up. - Exception responses are described and listed in section 7. - ''' - sub_function_code = 0x0010
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 17 -#---------------------------------------------------------------------------# -
[docs]class ReturnSlaveBusyCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages addressed to the - remote device for which it returned a Slave Device Busy exception response, - since its last restart, clear counters operation, or power-up. - ''' - sub_function_code = 0x0011 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.SlaveBusy - return ReturnSlaveBusyCountResponse(count)
- - -
[docs]class ReturnSlaveBusyCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages addressed to the - remote device for which it returned a Slave Device Busy exception response, - since its last restart, clear counters operation, or power-up. - ''' - sub_function_code = 0x0011
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 18 -#---------------------------------------------------------------------------# -
[docs]class ReturnSlaveBusCharacterOverrunCountRequest(DiagnosticStatusSimpleRequest): - ''' - The response data field returns the quantity of messages addressed to the - remote device that it could not handle due to a character overrun condition, - since its last restart, clear counters operation, or power-up. A character - overrun is caused by data characters arriving at the port faster than they - can be stored, or by the loss of a character due to a hardware malfunction. - ''' - sub_function_code = 0x0012 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.BusCharacterOverrun - return ReturnSlaveBusCharacterOverrunCountResponse(count)
- - -
[docs]class ReturnSlaveBusCharacterOverrunCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages addressed to the - remote device that it could not handle due to a character overrun condition, - since its last restart, clear counters operation, or power-up. A character - overrun is caused by data characters arriving at the port faster than they - can be stored, or by the loss of a character due to a hardware malfunction. - ''' - sub_function_code = 0x0012
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 19 -#---------------------------------------------------------------------------# -
[docs]class ReturnIopOverrunCountRequest(DiagnosticStatusSimpleRequest): - ''' - An IOP overrun is caused by data characters arriving at the port - faster than they can be stored, or by the loss of a character due - to a hardware malfunction. This function is specific to the 884. - ''' - sub_function_code = 0x0013 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - count = _MCB.Counter.BusCharacterOverrun - return ReturnIopOverrunCountResponse(count)
- - -
[docs]class ReturnIopOverrunCountResponse(DiagnosticStatusSimpleResponse): - ''' - The response data field returns the quantity of messages - addressed to the slave that it could not handle due to an 884 - IOP overrun condition, since its last restart, clear counters - operation, or power-up. - ''' - sub_function_code = 0x0013
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 20 -#---------------------------------------------------------------------------# -
[docs]class ClearOverrunCountRequest(DiagnosticStatusSimpleRequest): - ''' - Clears the overrun error counter and reset the error flag - - An error flag should be cleared, but nothing else in the - specification mentions is, so it is ignored. - ''' - sub_function_code = 0x0014 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - _MCB.Counter.BusCharacterOverrun = 0x0000 - return ClearOverrunCountResponse(self.message)
- - -
[docs]class ClearOverrunCountResponse(DiagnosticStatusSimpleResponse): - ''' - Clears the overrun error counter and reset the error flag - ''' - sub_function_code = 0x0014
- - -#---------------------------------------------------------------------------# -# Diagnostic Sub Code 21 -#---------------------------------------------------------------------------# -
[docs]class GetClearModbusPlusRequest(DiagnosticStatusSimpleRequest): - ''' - In addition to the Function code (08) and Subfunction code - (00 15 hex) in the query, a two-byte Operation field is used - to specify either a 'Get Statistics' or a 'Clear Statistics' - operation. The two operations are exclusive - the 'Get' - operation cannot clear the statistics, and the 'Clear' - operation does not return statistics prior to clearing - them. Statistics are also cleared on power-up of the slave - device. - ''' - sub_function_code = 0x0015 - -
[docs] def execute(self, *args): - ''' Execute the diagnostic request on the given device - - :returns: The initialized response message - ''' - message = None # the clear operation does not return info - if self.message == ModbusPlusOperation.ClearStatistics: - _MCB.Plus.reset() - else: message = _MCB.Plus.encode() - return GetClearModbusPlusResponse(message)
- - -
[docs]class GetClearModbusPlusResponse(DiagnosticStatusSimpleResponse): - ''' - Returns a series of 54 16-bit words (108 bytes) in the data field - of the response (this function differs from the usual two-byte - length of the data field). The data contains the statistics for - the Modbus Plus peer processor in the slave device. - ''' - sub_function_code = 0x0015
- - -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "DiagnosticStatusRequest", "DiagnosticStatusResponse", - "ReturnQueryDataRequest", "ReturnQueryDataResponse", - "RestartCommunicationsOptionRequest", "RestartCommunicationsOptionResponse", - "ReturnDiagnosticRegisterRequest", "ReturnDiagnosticRegisterResponse", - "ChangeAsciiInputDelimiterRequest", "ChangeAsciiInputDelimiterResponse", - "ForceListenOnlyModeRequest", "ForceListenOnlyModeResponse", - "ClearCountersRequest", "ClearCountersResponse", - "ReturnBusMessageCountRequest", "ReturnBusMessageCountResponse", - "ReturnBusCommunicationErrorCountRequest", "ReturnBusCommunicationErrorCountResponse", - "ReturnBusExceptionErrorCountRequest", "ReturnBusExceptionErrorCountResponse", - "ReturnSlaveMessageCountRequest", "ReturnSlaveMessageCountResponse", - "ReturnSlaveNoResponseCountRequest", "ReturnSlaveNoReponseCountResponse", - "ReturnSlaveNAKCountRequest", "ReturnSlaveNAKCountResponse", - "ReturnSlaveBusyCountRequest", "ReturnSlaveBusyCountResponse", - "ReturnSlaveBusCharacterOverrunCountRequest", "ReturnSlaveBusCharacterOverrunCountResponse", - "ReturnIopOverrunCountRequest", "ReturnIopOverrunCountResponse", - "ClearOverrunCountRequest", "ClearOverrunCountResponse", - "GetClearModbusPlusRequest", "GetClearModbusPlusResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/events.html b/doc/sphinx/html/_modules/pymodbus/events.html deleted file mode 100644 index 1b3a1f593..000000000 --- a/doc/sphinx/html/_modules/pymodbus/events.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - - pymodbus.events — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.events

-'''
-Modbus Remote Events
-------------------------------------------------------------
-
-An event byte returned by the Get Communications Event Log function
-can be any one of four types. The type is defined by bit 7
-(the high-order bit) in each byte. It may be further defined by bit 6.
-'''
-from pymodbus.exceptions import NotImplementedException
-from pymodbus.exceptions import ParameterException
-from pymodbus.utilities import pack_bitstring, unpack_bitstring
-
-
-
[docs]class ModbusEvent(object): - -
[docs] def encode(self): - ''' Encodes the status bits to an event message - - :returns: The encoded event message - ''' - raise NotImplementedException()
- -
[docs] def decode(self, event): - ''' Decodes the event message to its status bits - - :param event: The event to decode - ''' - raise NotImplementedException()
- - -
[docs]class RemoteReceiveEvent(ModbusEvent): - ''' Remote device MODBUS Receive Event - - The remote device stores this type of event byte when a query message - is received. It is stored before the remote device processes the message. - This event is defined by bit 7 set to logic '1'. The other bits will be - set to a logic '1' if the corresponding condition is TRUE. The bit layout - is:: - - Bit Contents - ---------------------------------- - 0 Not Used - 2 Not Used - 3 Not Used - 4 Character Overrun - 5 Currently in Listen Only Mode - 6 Broadcast Receive - 7 1 - ''' - -
[docs] def __init__(self, **kwargs): - ''' Initialize a new event instance - ''' - self.overrun = kwargs.get('overrun', False) - self.listen = kwargs.get('listen', False) - self.broadcast = kwargs.get('broadcast', False)
- -
[docs] def encode(self): - ''' Encodes the status bits to an event message - - :returns: The encoded event message - ''' - bits = [False] * 3 - bits += [self.overrun, self.listen, self.broadcast, True] - packet = pack_bitstring(bits) - return packet
- -
[docs] def decode(self, event): - ''' Decodes the event message to its status bits - - :param event: The event to decode - ''' - bits = unpack_bitstring(event) - self.overrun = bits[4] - self.listen = bits[5] - self.broadcast = bits[6]
- - -
[docs]class RemoteSendEvent(ModbusEvent): - ''' Remote device MODBUS Send Event - - The remote device stores this type of event byte when it finishes - processing a request message. It is stored if the remote device - returned a normal or exception response, or no response. - - This event is defined by bit 7 set to a logic '0', with bit 6 set to a '1'. - The other bits will be set to a logic '1' if the corresponding - condition is TRUE. The bit layout is:: - - Bit Contents - ----------------------------------------------------------- - 0 Read Exception Sent (Exception Codes 1-3) - 1 Slave Abort Exception Sent (Exception Code 4) - 2 Slave Busy Exception Sent (Exception Codes 5-6) - 3 Slave Program NAK Exception Sent (Exception Code 7) - 4 Write Timeout Error Occurred - 5 Currently in Listen Only Mode - 6 1 - 7 0 - ''' - -
[docs] def __init__(self, **kwargs): - ''' Initialize a new event instance - ''' - self.read = kwargs.get('read', False) - self.slave_abort = kwargs.get('slave_abort', False) - self.slave_busy = kwargs.get('slave_busy', False) - self.slave_nak = kwargs.get('slave_nak', False) - self.write_timeout = kwargs.get('write_timeout', False) - self.listen = kwargs.get('listen', False)
- -
[docs] def encode(self): - ''' Encodes the status bits to an event message - - :returns: The encoded event message - ''' - bits = [self.read, self.slave_abort, self.slave_busy, - self.slave_nak, self.write_timeout, self.listen] - bits += [True, False] - packet = pack_bitstring(bits) - return packet
- -
[docs] def decode(self, event): - ''' Decodes the event message to its status bits - - :param event: The event to decode - ''' - # todo fix the start byte count - bits = unpack_bitstring(event) - self.read = bits[0] - self.slave_abort = bits[1] - self.slave_busy = bits[2] - self.slave_nak = bits[3] - self.write_timeout = bits[4] - self.listen = bits[5]
- - -
[docs]class EnteredListenModeEvent(ModbusEvent): - ''' Remote device Entered Listen Only Mode - - The remote device stores this type of event byte when it enters - the Listen Only Mode. The event is defined by a content of 04 hex. - ''' - - value = 0x04 - __encoded = b'\x04' - -
[docs] def encode(self): - ''' Encodes the status bits to an event message - - :returns: The encoded event message - ''' - return self.__encoded
- -
[docs] def decode(self, event): - ''' Decodes the event message to its status bits - - :param event: The event to decode - ''' - if event != self.__encoded: - raise ParameterException('Invalid decoded value')
- - -
[docs]class CommunicationRestartEvent(ModbusEvent): - ''' Remote device Initiated Communication Restart - - The remote device stores this type of event byte when its communications - port is restarted. The remote device can be restarted by the Diagnostics - function (code 08), with sub-function Restart Communications Option - (code 00 01). - - That function also places the remote device into a 'Continue on Error' - or 'Stop on Error' mode. If the remote device is placed into 'Continue on - Error' mode, the event byte is added to the existing event log. If the - remote device is placed into 'Stop on Error' mode, the byte is added to - the log and the rest of the log is cleared to zeros. - - The event is defined by a content of zero. - ''' - - value = 0x00 - __encoded = b'\x00' - -
[docs] def encode(self): - ''' Encodes the status bits to an event message - - :returns: The encoded event message - ''' - return self.__encoded
- -
[docs] def decode(self, event): - ''' Decodes the event message to its status bits - - :param event: The event to decode - ''' - if event != self.__encoded: - raise ParameterException('Invalid decoded value')
-
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/exceptions.html b/doc/sphinx/html/_modules/pymodbus/exceptions.html deleted file mode 100644 index eafc77a48..000000000 --- a/doc/sphinx/html/_modules/pymodbus/exceptions.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - pymodbus.exceptions — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.exceptions

-'''
-Pymodbus Exceptions
---------------------
-
-Custom exceptions to be used in the Modbus code.
-'''
-
-
-
[docs]class ModbusException(Exception): - ''' Base modbus exception ''' - -
[docs] def __init__(self, string): - ''' Initialize the exception - :param string: The message to append to the error - ''' - self.string = string
- - def __str__(self): - return 'Modbus Error: %s' % self.string
- - -
[docs]class ModbusIOException(ModbusException): - ''' Error resulting from data i/o ''' - -
[docs] def __init__(self, string=""): - ''' Initialize the exception - :param string: The message to append to the error - ''' - message = "[Input/Output] %s" % string - ModbusException.__init__(self, message)
- - -
[docs]class ParameterException(ModbusException): - ''' Error resulting from invalid parameter ''' - -
[docs] def __init__(self, string=""): - ''' Initialize the exception - - :param string: The message to append to the error - ''' - message = "[Invalid Parameter] %s" % string - ModbusException.__init__(self, message)
- - -class NoSuchSlaveException(ModbusException): - ''' Error resulting from making a request to a slave - that does not exist ''' - - def __init__(self, string=""): - ''' Initialize the exception - - :param string: The message to append to the error - ''' - message = "[No Such Slave] %s" % string - ModbusException.__init__(self, message) - - -
[docs]class NotImplementedException(ModbusException): - ''' Error resulting from not implemented function ''' - -
[docs] def __init__(self, string=""): - ''' Initialize the exception - :param string: The message to append to the error - ''' - message = "[Not Implemented] %s" % string - ModbusException.__init__(self, message)
- - -class ConnectionException(ModbusException): - ''' Error resulting from a bad connection ''' - - def __init__(self, string=""): - ''' Initialize the exception - - :param string: The message to append to the error - ''' - message = "[Connection] %s" % string - ModbusException.__init__(self, message) - -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ModbusException", "ModbusIOException", - "ParameterException", "NotImplementedException", - "ConnectionException", "NoSuchSlaveException", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/factory.html b/doc/sphinx/html/_modules/pymodbus/factory.html deleted file mode 100644 index cfffdf5d4..000000000 --- a/doc/sphinx/html/_modules/pymodbus/factory.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - - - pymodbus.factory — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.factory

-"""
-Modbus Request/Response Decoder Factories
--------------------------------------------
-
-The following factories make it easy to decode request/response messages.
-To add a new request/response pair to be decodeable by the library, simply
-add them to the respective function lookup table (order doesn't matter, but
-it does help keep things organized).
-
-Regardless of how many functions are added to the lookup, O(1) behavior is
-kept as a result of a pre-computed lookup dictionary.
-"""
-
-from pymodbus.pdu import IllegalFunctionRequest
-from pymodbus.pdu import ExceptionResponse
-from pymodbus.pdu import ModbusExceptions as ecode
-from pymodbus.interfaces import IModbusDecoder
-from pymodbus.exceptions import ModbusException
-from pymodbus.bit_read_message import *
-from pymodbus.bit_write_message import *
-from pymodbus.diag_message import *
-from pymodbus.file_message import *
-from pymodbus.other_message import *
-from pymodbus.mei_message import *
-from pymodbus.register_read_message import *
-from pymodbus.register_write_message import *
-from pymodbus.compat import byte2int
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Server Decoder
-#---------------------------------------------------------------------------#
-
[docs]class ServerDecoder(IModbusDecoder): - ''' Request Message Factory (Server) - - To add more implemented functions, simply add them to the list - ''' - __function_table = [ - ReadHoldingRegistersRequest, - ReadDiscreteInputsRequest, - ReadInputRegistersRequest, - ReadCoilsRequest, - WriteMultipleCoilsRequest, - WriteMultipleRegistersRequest, - WriteSingleRegisterRequest, - WriteSingleCoilRequest, - ReadWriteMultipleRegistersRequest, - - DiagnosticStatusRequest, - - ReadExceptionStatusRequest, - GetCommEventCounterRequest, - GetCommEventLogRequest, - ReportSlaveIdRequest, - - ReadFileRecordRequest, - WriteFileRecordRequest, - MaskWriteRegisterRequest, - ReadFifoQueueRequest, - - ReadDeviceInformationRequest, - ] - __sub_function_table = [ - ReturnQueryDataRequest, - RestartCommunicationsOptionRequest, - ReturnDiagnosticRegisterRequest, - ChangeAsciiInputDelimiterRequest, - ForceListenOnlyModeRequest, - ClearCountersRequest, - ReturnBusMessageCountRequest, - ReturnBusCommunicationErrorCountRequest, - ReturnBusExceptionErrorCountRequest, - ReturnSlaveMessageCountRequest, - ReturnSlaveNoResponseCountRequest, - ReturnSlaveNAKCountRequest, - ReturnSlaveBusyCountRequest, - ReturnSlaveBusCharacterOverrunCountRequest, - ReturnIopOverrunCountRequest, - ClearOverrunCountRequest, - GetClearModbusPlusRequest, - - ReadDeviceInformationRequest, - ] - -
[docs] def __init__(self): - ''' Initializes the client lookup tables - ''' - functions = set(f.function_code for f in self.__function_table) - self.__lookup = dict([(f.function_code, f) for f in self.__function_table]) - self.__sub_lookup = dict((f, {}) for f in functions) - for f in self.__sub_function_table: - self.__sub_lookup[f.function_code][f.sub_function_code] = f
- -
[docs] def decode(self, message): - ''' Wrapper to decode a request packet - - :param message: The raw modbus request packet - :return: The decoded modbus message or None if error - ''' - try: - return self._helper(message) - except ModbusException as er: - _logger.warning("Unable to decode request %s" % er) - return None
- -
[docs] def lookupPduClass(self, function_code): - ''' Use `function_code` to determine the class of the PDU. - - :param function_code: The function code specified in a frame. - :returns: The class of the PDU that has a matching `function_code`. - ''' - return self.__lookup.get(function_code, ExceptionResponse)
- -
[docs] def _helper(self, data): - ''' - This factory is used to generate the correct request object - from a valid request packet. This decodes from a list of the - currently implemented request types. - - :param data: The request packet to decode - :returns: The decoded request or illegal function request object - ''' - function_code = byte2int(data[0]) - _logger.debug("Factory Request[%d]" % function_code) - request = self.__lookup.get(function_code, lambda: None)() - if not request: - request = IllegalFunctionRequest(function_code) - request.decode(data[1:]) - - if hasattr(request, 'sub_function_code'): - lookup = self.__sub_lookup.get(request.function_code, {}) - subtype = lookup.get(request.sub_function_code, None) - if subtype: request.__class__ = subtype - - return request
- - -#---------------------------------------------------------------------------# -# Client Decoder -#---------------------------------------------------------------------------# -
[docs]class ClientDecoder(IModbusDecoder): - ''' Response Message Factory (Client) - - To add more implemented functions, simply add them to the list - ''' - __function_table = [ - ReadHoldingRegistersResponse, - ReadDiscreteInputsResponse, - ReadInputRegistersResponse, - ReadCoilsResponse, - WriteMultipleCoilsResponse, - WriteMultipleRegistersResponse, - WriteSingleRegisterResponse, - WriteSingleCoilResponse, - ReadWriteMultipleRegistersResponse, - - DiagnosticStatusResponse, - - ReadExceptionStatusResponse, - GetCommEventCounterResponse, - GetCommEventLogResponse, - ReportSlaveIdResponse, - - ReadFileRecordResponse, - WriteFileRecordResponse, - MaskWriteRegisterResponse, - ReadFifoQueueResponse, - - ReadDeviceInformationResponse, - ] - __sub_function_table = [ - ReturnQueryDataResponse, - RestartCommunicationsOptionResponse, - ReturnDiagnosticRegisterResponse, - ChangeAsciiInputDelimiterResponse, - ForceListenOnlyModeResponse, - ClearCountersResponse, - ReturnBusMessageCountResponse, - ReturnBusCommunicationErrorCountResponse, - ReturnBusExceptionErrorCountResponse, - ReturnSlaveMessageCountResponse, - ReturnSlaveNoReponseCountResponse, - ReturnSlaveNAKCountResponse, - ReturnSlaveBusyCountResponse, - ReturnSlaveBusCharacterOverrunCountResponse, - ReturnIopOverrunCountResponse, - ClearOverrunCountResponse, - GetClearModbusPlusResponse, - - ReadDeviceInformationResponse, - ] - -
[docs] def __init__(self): - ''' Initializes the client lookup tables - ''' - functions = set(f.function_code for f in self.__function_table) - self.__lookup = dict([(f.function_code, f) for f in self.__function_table]) - self.__sub_lookup = dict((f, {}) for f in functions) - for f in self.__sub_function_table: - self.__sub_lookup[f.function_code][f.sub_function_code] = f
- -
[docs] def lookupPduClass(self, function_code): - ''' Use `function_code` to determine the class of the PDU. - - :param function_code: The function code specified in a frame. - :returns: The class of the PDU that has a matching `function_code`. - ''' - return self.__lookup.get(function_code, ExceptionResponse)
- -
[docs] def decode(self, message): - ''' Wrapper to decode a response packet - - :param message: The raw packet to decode - :return: The decoded modbus message or None if error - ''' - try: - return self._helper(message) - except ModbusException as er: - _logger.error("Unable to decode response %s" % er) - return None
- -
[docs] def _helper(self, data): - ''' - This factory is used to generate the correct response object - from a valid response packet. This decodes from a list of the - currently implemented request types. - - :param data: The response packet to decode - :returns: The decoded request or an exception response object - ''' - function_code = byte2int(data[0]) - _logger.debug("Factory Response[%d]" % function_code) - response = self.__lookup.get(function_code, lambda: None)() - if function_code > 0x80: - code = function_code & 0x7f # strip error portion - response = ExceptionResponse(code, ecode.IllegalFunction) - if not response: - raise ModbusException("Unknown response %d" % function_code) - response.decode(data[1:]) - - if hasattr(response, 'sub_function_code'): - lookup = self.__sub_lookup.get(response.function_code, {}) - subtype = lookup.get(response.sub_function_code, None) - if subtype: response.__class__ = subtype - - return response
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = ['ServerDecoder', 'ClientDecoder'] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/file_message.html b/doc/sphinx/html/_modules/pymodbus/file_message.html deleted file mode 100644 index fcc06fca1..000000000 --- a/doc/sphinx/html/_modules/pymodbus/file_message.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - - - pymodbus.file_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.file_message

-'''
-File Record Read/Write Messages
--------------------------------
-
-Currently none of these messages are implemented
-'''
-import struct
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.compat import byte2int
-
-
-#---------------------------------------------------------------------------#
-# File Record Types
-#---------------------------------------------------------------------------#
-
[docs]class FileRecord(object): - ''' Represents a file record and its relevant data. - ''' - -
[docs] def __init__(self, **kwargs): - ''' Initializes a new instance - - :params reference_type: Defaults to 0x06 (must be) - :params file_number: Indicates which file number we are reading - :params record_number: Indicates which record in the file - :params record_data: The actual data of the record - :params record_length: The length in registers of the record - :params response_length: The length in bytes of the record - ''' - self.reference_type = kwargs.get('reference_type', 0x06) - self.file_number = kwargs.get('file_number', 0x00) - self.record_number = kwargs.get('record_number', 0x00) - self.record_data = kwargs.get('record_data', '') - - self.record_length = kwargs.get('record_length', len(self.record_data) // 2) - self.response_length = kwargs.get('response_length', len(self.record_data) + 1)
- -
[docs] def __eq__(self, relf): - ''' Compares the left object to the right - ''' - return self.reference_type == relf.reference_type \ - and self.file_number == relf.file_number \ - and self.record_number == relf.record_number \ - and self.record_length == relf.record_length \ - and self.record_data == relf.record_data
- -
[docs] def __ne__(self, relf): - ''' Compares the left object to the right - ''' - return not self.__eq__(relf)
- -
[docs] def __repr__(self): - ''' Gives a representation of the file record - ''' - params = (self.file_number, self.record_number, self.record_length) - return 'FileRecord(file=%d, record=%d, length=%d)' % params
- - -#---------------------------------------------------------------------------# -# File Requests/Responses -#---------------------------------------------------------------------------# -
[docs]class ReadFileRecordRequest(ModbusRequest): - ''' - This function code is used to perform a file record read. All request - data lengths are provided in terms of number of bytes and all record - lengths are provided in terms of registers. - - A file is an organization of records. Each file contains 10000 records, - addressed 0000 to 9999 decimal or 0x0000 to 0x270f. For example, record - 12 is addressed as 12. The function can read multiple groups of - references. The groups can be separating (non-contiguous), but the - references within each group must be sequential. Each group is defined - in a seperate 'sub-request' field that contains seven bytes:: - - The reference type: 1 byte (must be 0x06) - The file number: 2 bytes - The starting record number within the file: 2 bytes - The length of the record to be read: 2 bytes - - The quantity of registers to be read, combined with all other fields - in the expected response, must not exceed the allowable length of the - MODBUS PDU: 235 bytes. - ''' - function_code = 0x14 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, records=None, **kwargs): - ''' Initializes a new instance - - :param records: The file record requests to be read - ''' - ModbusRequest.__init__(self, **kwargs) - self.records = records or []
- -
[docs] def encode(self): - ''' Encodes the request packet - - :returns: The byte encoded packet - ''' - packet = struct.pack('B', len(self.records) * 7) - for record in self.records: - packet += struct.pack('>BHHH', 0x06, record.file_number, - record.record_number, record.record_length) - return packet
- -
[docs] def decode(self, data): - ''' Decodes the incoming request - - :param data: The data to decode into the address - ''' - self.records = [] - byte_count = byte2int(data[0]) - for count in range(1, byte_count, 7): - decoded = struct.unpack('>BHHH', data[count:count+7]) - record = FileRecord(file_number=decoded[1], - record_number=decoded[2], record_length=decoded[3]) - if decoded[0] == 0x06: self.records.append(record)
- -
[docs] def execute(self, context): - ''' Run a read exeception status request against the store - - :param context: The datastore to request from - :returns: The populated response - ''' - # TODO do some new context operation here - # if file number, record number, or address + length - # is too big, return an error. - files = [] - return ReadFileRecordResponse(files)
- - -
[docs]class ReadFileRecordResponse(ModbusResponse): - ''' - The normal response is a series of 'sub-responses,' one for each - 'sub-request.' The byte count field is the total combined count of - bytes in all 'sub-responses.' In addition, each 'sub-response' - contains a field that shows its own byte count. - ''' - function_code = 0x14 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, records=None, **kwargs): - ''' Initializes a new instance - - :param records: The requested file records - ''' - ModbusResponse.__init__(self, **kwargs) - self.records = records or []
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - total = sum(record.response_length + 1 for record in self.records) - packet = struct.pack('B', total) - for record in self.records: - packet += struct.pack('>BB', 0x06, record.record_length) - packet += record.record_data - return packet
- -
[docs] def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - count, self.records = 1, [] - byte_count = byte2int(data[0]) - while count < byte_count: - response_length, reference_type = struct.unpack('>BB', data[count:count+2]) - count += response_length + 1 # the count is not included - record = FileRecord(response_length=response_length, - record_data=data[count - response_length + 1:count]) - if reference_type == 0x06: self.records.append(record)
- - -
[docs]class WriteFileRecordRequest(ModbusRequest): - ''' - This function code is used to perform a file record write. All - request data lengths are provided in terms of number of bytes - and all record lengths are provided in terms of the number of 16 - bit words. - ''' - function_code = 0x15 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, records=None, **kwargs): - ''' Initializes a new instance - - :param records: The file record requests to be read - ''' - ModbusRequest.__init__(self, **kwargs) - self.records = records or []
- -
[docs] def encode(self): - ''' Encodes the request packet - - :returns: The byte encoded packet - ''' - total_length = sum((record.record_length * 2) + 7 for record in self.records) - packet = struct.pack('B', total_length) - for record in self.records: - packet += struct.pack('>BHHH', 0x06, record.file_number, - record.record_number, record.record_length) - packet += record.record_data - return packet
- -
[docs] def decode(self, data): - ''' Decodes the incoming request - - :param data: The data to decode into the address - ''' - count, self.records = 1, [] - byte_count = byte2int(data[0]) - while count < byte_count: - decoded = struct.unpack('>BHHH', data[count:count+7]) - response_length = decoded[3] * 2 - count += response_length + 7 - record = FileRecord(record_length=decoded[3], - file_number=decoded[1], record_number=decoded[2], - record_data=data[count - response_length:count]) - if decoded[0] == 0x06: self.records.append(record)
- -
[docs] def execute(self, context): - ''' Run the write file record request against the context - - :param context: The datastore to request from - :returns: The populated response - ''' - # TODO do some new context operation here - # if file number, record number, or address + length - # is too big, return an error. - return WriteFileRecordResponse(self.records)
- - -
[docs]class WriteFileRecordResponse(ModbusResponse): - ''' - The normal response is an echo of the request. - ''' - function_code = 0x15 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, records=None, **kwargs): - ''' Initializes a new instance - - :param records: The file record requests to be read - ''' - ModbusResponse.__init__(self, **kwargs) - self.records = records or []
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - total_length = sum((record.record_length * 2) + 7 for record in self.records) - packet = struct.pack('B', total_length) - for record in self.records: - packet += struct.pack('>BHHH', 0x06, record.file_number, - record.record_number, record.record_length) - packet += record.record_data - return packet
- -
[docs] def decode(self, data): - ''' Decodes the incoming request - - :param data: The data to decode into the address - ''' - count, self.records = 1, [] - byte_count = byte2int(data[0]) - while count < byte_count: - decoded = struct.unpack('>BHHH', data[count:count+7]) - response_length = decoded[3] * 2 - count += response_length + 7 - record = FileRecord(record_length=decoded[3], - file_number=decoded[1], record_number=decoded[2], - record_data=data[count - response_length:count]) - if decoded[0] == 0x06: self.records.append(record)
- - -class MaskWriteRegisterRequest(ModbusRequest): - ''' - This function code is used to modify the contents of a specified holding - register using a combination of an AND mask, an OR mask, and the - register's current contents. The function can be used to set or clear - individual bits in the register. - ''' - function_code = 0x16 - _rtu_frame_size = 10 - - - def __init__(self, address=0x0000, and_mask=0xffff, or_mask=0x0000, **kwargs): - ''' Initializes a new instance - - :param address: The mask pointer address (0x0000 to 0xffff) - :param and_mask: The and bitmask to apply to the register address - :param or_mask: The or bitmask to apply to the register address - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.and_mask = and_mask - self.or_mask = or_mask - - def encode(self): - ''' Encodes the request packet - - :returns: The byte encoded packet - ''' - return struct.pack('>HHH', self.address, self.and_mask, self.or_mask) - - def decode(self, data): - ''' Decodes the incoming request - - :param data: The data to decode into the address - ''' - self.address, self.and_mask, self.or_mask = struct.unpack('>HHH', data) - - def execute(self, context): - ''' Run a mask write register request against the store - - :param context: The datastore to request from - :returns: The populated response - ''' - if not (0x0000 <= self.and_mask <= 0xffff): - return self.doException(merror.IllegalValue) - if not (0x0000 <= self.or_mask <= 0xffff): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, 1): - return self.doException(merror.IllegalAddress) - values = context.getValues(self.function_code, self.address, 1)[0] - values = ((values & self.and_mask) | self.or_mask) - context.setValues(self.function_code, self.address, [values]) - return MaskWriteRegisterResponse(self.address, self.and_mask, self.or_mask) - - -class MaskWriteRegisterResponse(ModbusResponse): - ''' - The normal response is an echo of the request. The response is returned - after the register has been written. - ''' - function_code = 0x16 - _rtu_frame_size = 10 - - def __init__(self, address=0x0000, and_mask=0xffff, or_mask=0x0000, **kwargs): - ''' Initializes a new instance - - :param address: The mask pointer address (0x0000 to 0xffff) - :param and_mask: The and bitmask applied to the register address - :param or_mask: The or bitmask applied to the register address - ''' - ModbusResponse.__init__(self, **kwargs) - self.address = address - self.and_mask = and_mask - self.or_mask = or_mask - - def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - return struct.pack('>HHH', self.address, self.and_mask, self.or_mask) - - def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - self.address, self.and_mask, self.or_mask = struct.unpack('>HHH', data) - - -
[docs]class ReadFifoQueueRequest(ModbusRequest): - ''' - This function code allows to read the contents of a First-In-First-Out - (FIFO) queue of register in a remote device. The function returns a - count of the registers in the queue, followed by the queued data. - Up to 32 registers can be read: the count, plus up to 31 queued data - registers. - - The queue count register is returned first, followed by the queued data - registers. The function reads the queue contents, but does not clear - them. - ''' - function_code = 0x18 - _rtu_frame_size = 6 - -
[docs] def __init__(self, address=0x0000, **kwargs): - ''' Initializes a new instance - - :param address: The fifo pointer address (0x0000 to 0xffff) - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.values = [] # this should be added to the context
- -
[docs] def encode(self): - ''' Encodes the request packet - - :returns: The byte encoded packet - ''' - return struct.pack('>H', self.address)
- -
[docs] def decode(self, data): - ''' Decodes the incoming request - - :param data: The data to decode into the address - ''' - self.address = struct.unpack('>H', data)[0]
- -
[docs] def execute(self, context): - ''' Run a read exeception status request against the store - - :param context: The datastore to request from - :returns: The populated response - ''' - if not (0x0000 <= self.address <= 0xffff): - return self.doException(merror.IllegalValue) - if len(self.values) > 31: - return self.doException(merror.IllegalValue) - # TODO pull the values from some context - return ReadFifoQueueResponse(self.values)
- - -
[docs]class ReadFifoQueueResponse(ModbusResponse): - ''' - In a normal response, the byte count shows the quantity of bytes to - follow, including the queue count bytes and value register bytes - (but not including the error check field). The queue count is the - quantity of data registers in the queue (not including the count register). - - If the queue count exceeds 31, an exception response is returned with an - error code of 03 (Illegal Data Value). - ''' - function_code = 0x18 - - @classmethod -
[docs] def calculateRtuFrameSize(cls, buffer): - ''' Calculates the size of the message - - :param buffer: A buffer containing the data that have been received. - :returns: The number of bytes in the response. - ''' - hi_byte = byte2int(buffer[2]) - lo_byte = byte2int(buffer[3]) - return (hi_byte << 16) + lo_byte + 6
- -
[docs] def __init__(self, values=None, **kwargs): - ''' Initializes a new instance - - :param values: The list of values of the fifo to return - ''' - ModbusResponse.__init__(self, **kwargs) - self.values = values or []
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - length = len(self.values) * 2 - packet = struct.pack('>HH', 2 + length, length) - for value in self.values: - packet += struct.pack('>H', value) - return packet
- -
[docs] def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - self.values = [] - _, count = struct.unpack('>HH', data[0:4]) - for index in range(0, count - 4): - idx = 4 + index * 2 - self.values.append(struct.unpack('>H', data[idx:idx + 2])[0])
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "FileRecord", - "ReadFileRecordRequest", "ReadFileRecordResponse", - "WriteFileRecordRequest", "WriteFileRecordResponse", - "MaskWriteRegisterRequest", "MaskWriteRegisterResponse", - "ReadFifoQueueRequest", "ReadFifoQueueResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/interfaces.html b/doc/sphinx/html/_modules/pymodbus/interfaces.html deleted file mode 100644 index 46190819f..000000000 --- a/doc/sphinx/html/_modules/pymodbus/interfaces.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - pymodbus.interfaces — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.interfaces

-'''
-Pymodbus Interfaces
----------------------
-
-A collection of base classes that are used throughout
-the pymodbus library.
-'''
-from pymodbus.exceptions import NotImplementedException
-
-
-#---------------------------------------------------------------------------#
-# Generic
-#---------------------------------------------------------------------------#
-
[docs]class Singleton(object): - ''' - Singleton base class - http://mail.python.org/pipermail/python-list/2007-July/450681.html - ''' -
[docs] def __new__(cls, *args, **kwargs): - ''' Create a new instance - ''' - if '_inst' not in vars(cls): - cls._inst = object.__new__(cls) - return cls._inst
- - -#---------------------------------------------------------------------------# -# Project Specific -#---------------------------------------------------------------------------# -
[docs]class IModbusDecoder(object): - ''' Modbus Decoder Base Class - - This interface must be implemented by a modbus message - decoder factory. These factories are responsible for - abstracting away converting a raw packet into a request / response - message object. - ''' - -
[docs] def decode(self, message): - ''' Wrapper to decode a given packet - - :param message: The raw modbus request packet - :return: The decoded modbus message or None if error - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def lookupPduClass(self, function_code): - ''' Use `function_code` to determine the class of the PDU. - - :param function_code: The function code specified in a frame. - :returns: The class of the PDU that has a matching `function_code`. - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- - -
[docs]class IModbusFramer(object): - ''' - A framer strategy interface. The idea is that we abstract away all the - detail about how to detect if a current message frame exists, decoding - it, sending it, etc so that we can plug in a new Framer object (tcp, - rtu, ascii). - ''' - -
[docs] def checkFrame(self): - ''' Check and decode the next frame - - :returns: True if we successful, False otherwise - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def advanceFrame(self): - ''' Skip over the current framed message - This allows us to skip over the current message after we have processed - it or determined that it contains an error. It also has to reset the - current frame header handle - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def addToFrame(self, message): - ''' Add the next message to the frame buffer - - This should be used before the decoding while loop to add the received - data to the buffer handle. - - :param message: The most recent packet - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def isFrameReady(self): - ''' Check if we should continue decode logic - - This is meant to be used in a while loop in the decoding phase to let - the decoder know that there is still data in the buffer. - - :returns: True if ready, False otherwise - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def getFrame(self): - ''' Get the next frame from the buffer - - :returns: The frame data or '' - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def populateResult(self, result): - ''' Populates the modbus result with current frame header - - We basically copy the data back over from the current header - to the result header. This may not be needed for serial messages. - - :param result: The response packet - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def processIncomingPacket(self, data, callback): - ''' The new packet processing pattern - - This takes in a new request packet, adds it to the current - packet stream, and performs framing on it. That is, checks - for complete messages, and once found, will process all that - exist. This handles the case when we read N + 1 or 1 / N - messages at a time instead of 1. - - The processed and decoded messages are pushed to the callback - function to process and send. - - :param data: The new packet data - :param callback: The function to send results to - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- -
[docs] def buildPacket(self, message): - ''' Creates a ready to send modbus packet - - The raw packet is built off of a fully populated modbus - request / response message. - - :param message: The request/response to send - :returns: The built packet - ''' - raise NotImplementedException( - "Method not implemented by derived class")
- - -
[docs]class IModbusSlaveContext(object): - ''' - Interface for a modbus slave data context - - Derived classes must implemented the following methods: - reset(self) - validate(self, fx, address, count=1) - getValues(self, fx, address, count=1) - setValues(self, fx, address, values) - ''' - __fx_mapper = {2: 'd', 4: 'i'} - __fx_mapper.update([(i, 'h') for i in [3, 6, 16, 22, 23]]) - __fx_mapper.update([(i, 'c') for i in [1, 5, 15]]) - -
[docs] def decode(self, fx): - ''' Converts the function code to the datastore to - - :param fx: The function we are working with - :returns: one of [d(iscretes),i(inputs),h(oliding),c(oils) - ''' - return self.__fx_mapper[fx]
- -
[docs] def reset(self): - ''' Resets all the datastores to their default values - ''' - raise NotImplementedException("Context Reset")
- -
[docs] def validate(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to test - :returns: True if the request in within range, False otherwise - ''' - raise NotImplementedException("validate context values")
- -
[docs] def getValues(self, fx, address, count=1): - ''' Validates the request to make sure it is in range - - :param fx: The function we are working with - :param address: The starting address - :param count: The number of values to retrieve - :returns: The requested values from a:a+c - ''' - raise NotImplementedException("get context values")
- -
[docs] def setValues(self, fx, address, values): - ''' Sets the datastore with the supplied values - - :param fx: The function we are working with - :param address: The starting address - :param values: The new values to be set - ''' - raise NotImplementedException("set context values")
- - -
[docs]class IPayloadBuilder(object): - ''' - This is an interface to a class that can build a payload - for a modbus register write command. It should abstract - the codec for encoding data to the required format - (bcd, binary, char, etc). - ''' - -
[docs] def build(self): - ''' Return the payload buffer as a list - - This list is two bytes per element and can - thus be treated as a list of registers. - - :returns: The payload buffer as a list - ''' - raise NotImplementedException("set context values")
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - 'Singleton', - 'IModbusDecoder', 'IModbusFramer', 'IModbusSlaveContext', - 'IPayloadBuilder', -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/mei_message.html b/doc/sphinx/html/_modules/pymodbus/mei_message.html deleted file mode 100644 index 0e3336359..000000000 --- a/doc/sphinx/html/_modules/pymodbus/mei_message.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - pymodbus.mei_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.mei_message

-'''
-Encapsulated Interface (MEI) Transport Messages
------------------------------------------------
-
-'''
-import struct
-from pymodbus.constants import DeviceInformation, MoreData
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.device import ModbusControlBlock
-from pymodbus.device import DeviceInformationFactory
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.compat import iteritems, byte2int
-
-_MCB = ModbusControlBlock()
-
-
-#---------------------------------------------------------------------------#
-# Read Device Information
-#---------------------------------------------------------------------------#
-
[docs]class ReadDeviceInformationRequest(ModbusRequest): - ''' - This function code allows reading the identification and additional - information relative to the physical and functional description of a - remote device, only. - - The Read Device Identification interface is modeled as an address space - composed of a set of addressable data elements. The data elements are - called objects and an object Id identifies them. - ''' - function_code = 0x2b - sub_function_code = 0x0e - _rtu_frame_size = 7 - -
[docs] def __init__(self, read_code=None, object_id=0x00, **kwargs): - ''' Initializes a new instance - - :param read_code: The device information read code - :param object_id: The object to read from - ''' - ModbusRequest.__init__(self, **kwargs) - self.read_code = read_code or DeviceInformation.Basic - self.object_id = object_id
- -
[docs] def encode(self): - ''' Encodes the request packet - - :returns: The byte encoded packet - ''' - packet = struct.pack('>BBB', self.sub_function_code, - self.read_code, self.object_id) - return packet
- -
[docs] def decode(self, data): - ''' Decodes data part of the message. - - :param data: The incoming data - ''' - params = struct.unpack('>BBB', data) - self.sub_function_code, self.read_code, self.object_id = params
- -
[docs] def execute(self, context): - ''' Run a read exeception status request against the store - - :param context: The datastore to request from - :returns: The populated response - ''' - if not (0x00 <= self.object_id <= 0xff): - return self.doException(merror.IllegalValue) - if not (0x00 <= self.read_code <= 0x04): - return self.doException(merror.IllegalValue) - - information = DeviceInformationFactory.get(_MCB, - self.read_code, self.object_id) - return ReadDeviceInformationResponse(self.read_code, information)
- -
[docs] def __str__(self): - ''' Builds a representation of the request - - :returns: The string representation of the request - ''' - params = (self.read_code, self.object_id) - return "ReadDeviceInformationRequest(%d,%d)" % params
- - -
[docs]class ReadDeviceInformationResponse(ModbusResponse): - ''' - ''' - function_code = 0x2b - sub_function_code = 0x0e - - @classmethod -
[docs] def calculateRtuFrameSize(cls, buffer): - ''' Calculates the size of the message - - :param buffer: A buffer containing the data that have been received. - :returns: The number of bytes in the response. - ''' - size = 8 # skip the header information - count = byte2int(buffer[7]) - - while count > 0: - _, object_length = struct.unpack('>BB', buffer[size:size+2]) - size += object_length + 2 - count -= 1 - return size + 2
- -
[docs] def __init__(self, read_code=None, information=None, **kwargs): - ''' Initializes a new instance - - :param read_code: The device information read code - :param information: The requested information request - ''' - ModbusResponse.__init__(self, **kwargs) - self.read_code = read_code or DeviceInformation.Basic - self.information = information or {} - self.number_of_objects = len(self.information) - self.conformity = 0x83 # I support everything right now - - # TODO calculate - self.next_object_id = 0x00 # self.information[-1](0) - self.more_follows = MoreData.Nothing
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - packet = struct.pack('>BBBBBB', self.sub_function_code, - self.read_code, self.conformity, self.more_follows, - self.next_object_id, self.number_of_objects) - - for (object_id, data) in iteritems(self.information): - packet += struct.pack('>BB', object_id, len(data)) - packet += data.encode() - return packet
- -
[docs] def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - params = struct.unpack('>BBBBBB', data[0:6]) - self.sub_function_code, self.read_code = params[0:2] - self.conformity, self.more_follows = params[2:4] - self.next_object_id, self.number_of_objects = params[4:6] - self.information, count = {}, 6 # skip the header information - - while count < len(data): - object_id, object_length = struct.unpack('>BB', data[count:count+2]) - count += object_length + 2 - self.information[object_id] = data[count-object_length:count]
- -
[docs] def __str__(self): - ''' Builds a representation of the response - - :returns: The string representation of the response - ''' - return "ReadDeviceInformationResponse(%d)" % self.read_code
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ReadDeviceInformationRequest", "ReadDeviceInformationResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/other_message.html b/doc/sphinx/html/_modules/pymodbus/other_message.html deleted file mode 100644 index cf1081c62..000000000 --- a/doc/sphinx/html/_modules/pymodbus/other_message.html +++ /dev/null @@ -1,533 +0,0 @@ - - - - - - - - pymodbus.other_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.other_message

-'''
-Diagnostic record read/write
-
-Currently not all implemented
-'''
-import struct
-from pymodbus.constants import ModbusStatus
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.device import ModbusControlBlock
-from pymodbus.compat import byte2int, int2byte
-
-_MCB = ModbusControlBlock()
-
-
-#---------------------------------------------------------------------------#
-# TODO Make these only work on serial
-#---------------------------------------------------------------------------#
-
[docs]class ReadExceptionStatusRequest(ModbusRequest): - ''' - This function code is used to read the contents of eight Exception Status - outputs in a remote device. The function provides a simple method for - accessing this information, because the Exception Output references are - known (no output reference is needed in the function). - ''' - function_code = 0x07 - _rtu_frame_size = 4 - -
[docs] def __init__(self, **kwargs): - ''' Initializes a new instance - ''' - ModbusRequest.__init__(self, **kwargs)
- -
[docs] def encode(self): - ''' Encodes the message - ''' - return b''
- -
[docs] def decode(self, data): - ''' Decodes data part of the message. - - :param data: The incoming data - ''' - pass
- -
[docs] def execute(self): - ''' Run a read exeception status request against the store - - :returns: The populated response - ''' - status = _MCB.Counter.summary() - return ReadExceptionStatusResponse(status)
- -
[docs] def __str__(self): - ''' Builds a representation of the request - - :returns: The string representation of the request - ''' - return "ReadExceptionStatusRequest(%d)" % (self.function_code)
- - -
[docs]class ReadExceptionStatusResponse(ModbusResponse): - ''' - The normal response contains the status of the eight Exception Status - outputs. The outputs are packed into one data byte, with one bit - per output. The status of the lowest output reference is contained - in the least significant bit of the byte. The contents of the eight - Exception Status outputs are device specific. - ''' - function_code = 0x07 - _rtu_frame_size = 5 - -
[docs] def __init__(self, status=0x00, **kwargs): - ''' Initializes a new instance - - :param status: The status response to report - ''' - ModbusResponse.__init__(self, **kwargs) - self.status = status
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - return struct.pack('>B', self.status)
- -
[docs] def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - self.status = byte2int(data[0])
- -
[docs] def __str__(self): - ''' Builds a representation of the response - - :returns: The string representation of the response - ''' - arguments = (self.function_code, self.status) - return "ReadExceptionStatusResponse(%d, %s)" % arguments
- -# Encapsulate interface transport 43, 14 -# CANopen general reference 43, 13 - - -#---------------------------------------------------------------------------# -# TODO Make these only work on serial -#---------------------------------------------------------------------------# -
[docs]class GetCommEventCounterRequest(ModbusRequest): - ''' - This function code is used to get a status word and an event count from - the remote device's communication event counter. - - By fetching the current count before and after a series of messages, a - client can determine whether the messages were handled normally by the - remote device. - - The device's event counter is incremented once for each successful - message completion. It is not incremented for exception responses, - poll commands, or fetch event counter commands. - - The event counter can be reset by means of the Diagnostics function - (code 08), with a subfunction of Restart Communications Option - (code 00 01) or Clear Counters and Diagnostic Register (code 00 0A). - ''' - function_code = 0x0b - _rtu_frame_size = 4 - -
[docs] def __init__(self, **kwargs): - ''' Initializes a new instance - ''' - ModbusRequest.__init__(self, **kwargs)
- -
[docs] def encode(self): - ''' Encodes the message - ''' - return b''
- -
[docs] def decode(self, data): - ''' Decodes data part of the message. - - :param data: The incoming data - ''' - pass
- -
[docs] def execute(self): - ''' Run a read exeception status request against the store - - :returns: The populated response - ''' - status = _MCB.Counter.Event - return GetCommEventCounterResponse(status)
- -
[docs] def __str__(self): - ''' Builds a representation of the request - - :returns: The string representation of the request - ''' - return "GetCommEventCounterRequest(%d)" % (self.function_code)
- - -
[docs]class GetCommEventCounterResponse(ModbusResponse): - ''' - The normal response contains a two-byte status word, and a two-byte - event count. The status word will be all ones (FF FF hex) if a - previously-issued program command is still being processed by the - remote device (a busy condition exists). Otherwise, the status word - will be all zeros. - ''' - function_code = 0x0b - _rtu_frame_size = 8 - -
[docs] def __init__(self, count=0x0000, **kwargs): - ''' Initializes a new instance - - :param count: The current event counter value - ''' - ModbusResponse.__init__(self, **kwargs) - self.count = count - self.status = True # this means we are ready, not waiting
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - if self.status: ready = ModbusStatus.Ready - else: ready = ModbusStatus.Waiting - return struct.pack('>HH', ready, self.count)
- -
[docs] def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - ready, self.count = struct.unpack('>HH', data) - self.status = (ready == ModbusStatus.Ready)
- -
[docs] def __str__(self): - ''' Builds a representation of the response - - :returns: The string representation of the response - ''' - arguments = (self.function_code, self.count, self.status) - return "GetCommEventCounterResponse(%d, %d, %d)" % arguments
- - -#---------------------------------------------------------------------------# -# TODO Make these only work on serial -#---------------------------------------------------------------------------# -class GetCommEventLogRequest(ModbusRequest): - ''' - This function code is used to get a status word, event count, message - count, and a field of event bytes from the remote device. - - The status word and event counts are identical to that returned by - the Get Communications Event Counter function (11, 0B hex). - - The message counter contains the quantity of messages processed by the - remote device since its last restart, clear counters operation, or - power-up. This count is identical to that returned by the Diagnostic - function (code 08), sub-function Return Bus Message Count (code 11, - 0B hex). - - The event bytes field contains 0-64 bytes, with each byte corresponding - to the status of one MODBUS send or receive operation for the remote - device. The remote device enters the events into the field in - chronological order. Byte 0 is the most recent event. Each new byte - flushes the oldest byte from the field. - ''' - function_code = 0x0c - _rtu_frame_size = 4 - - def __init__(self, **kwargs): - ''' Initializes a new instance - ''' - ModbusRequest.__init__(self, **kwargs) - - def encode(self): - ''' Encodes the message - ''' - return b'' - - def decode(self, data): - ''' Decodes data part of the message. - - :param data: The incoming data - ''' - pass - - def execute(self): - ''' Run a read exeception status request against the store - - :returns: The populated response - ''' - results = { - 'status' : True, - 'message_count' : _MCB.Counter.BusMessage, - 'event_count' : _MCB.Counter.Event, - 'events' : _MCB.getEvents(), - } - return GetCommEventLogResponse(**results) - - def __str__(self): - ''' Builds a representation of the request - - :returns: The string representation of the request - ''' - return "GetCommEventLogRequest(%d)" % self.function_code - - -class GetCommEventLogResponse(ModbusResponse): - ''' - The normal response contains a two-byte status word field, - a two-byte event count field, a two-byte message count field, - and a field containing 0-64 bytes of events. A byte count - field defines the total length of the data in these four field - ''' - function_code = 0x0c - _rtu_byte_count_pos = 3 - - def __init__(self, **kwargs): - ''' Initializes a new instance - - :param status: The status response to report - :param message_count: The current message count - :param event_count: The current event count - :param events: The collection of events to send - ''' - ModbusResponse.__init__(self, **kwargs) - self.status = kwargs.get('status', True) - self.message_count = kwargs.get('message_count', 0) - self.event_count = kwargs.get('event_count', 0) - self.events = kwargs.get('events', []) - - def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - if self.status: ready = ModbusStatus.Ready - else: ready = ModbusStatus.Waiting - packet = struct.pack('>B', 6 + len(self.events)) - packet += struct.pack('>H', ready) - packet += struct.pack('>HH', self.event_count, self.message_count) - packet += b''.join(struct.pack('>B', e) for e in self.events) - return packet - - def decode(self, data): - ''' Decodes a the response - - :param data: The packet data to decode - ''' - length = byte2int(data[0]) - status = struct.unpack('>H', data[1:3])[0] - self.status = (status == ModbusStatus.Ready) - self.event_count = struct.unpack('>H', data[3:5])[0] - self.message_count = struct.unpack('>H', data[5:7])[0] - - self.events = [] - for e in range(7, length + 1): - self.events.append(byte2int(data[e])) - - def __str__(self): - ''' Builds a representation of the response - - :returns: The string representation of the response - ''' - arguments = (self.function_code, self.status, self.message_count, self.event_count) - return "GetCommEventLogResponse(%d, %d, %d, %d)" % arguments - - -#---------------------------------------------------------------------------# -# TODO Make these only work on serial -#---------------------------------------------------------------------------# -
[docs]class ReportSlaveIdRequest(ModbusRequest): - ''' - This function code is used to read the description of the type, the - current status, and other information specific to a remote device. - ''' - function_code = 0x11 - _rtu_frame_size = 4 - -
[docs] def __init__(self, **kwargs): - ''' Initializes a new instance - ''' - ModbusRequest.__init__(self, **kwargs)
- -
[docs] def encode(self): - ''' Encodes the message - ''' - return b''
- -
[docs] def decode(self, data): - ''' Decodes data part of the message. - - :param data: The incoming data - ''' - pass
- -
[docs] def execute(self): - ''' Run a read exeception status request against the store - - :returns: The populated response - ''' - identifier = b'\x70\x79\x6d\x6f\x64\x62\x75\x73' - return ReportSlaveIdResponse(identifier)
- -
[docs] def __str__(self): - ''' Builds a representation of the request - - :returns: The string representation of the request - ''' - return "ResportSlaveIdRequest(%d)" % self.function_code
- - -
[docs]class ReportSlaveIdResponse(ModbusResponse): - ''' - The format of a normal response is shown in the following example. - The data contents are specific to each type of device. - ''' - function_code = 0x11 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, identifier=b'\x00', status=True, **kwargs): - ''' Initializes a new instance - - :param identifier: The identifier of the slave - :param status: The status response to report - ''' - ModbusResponse.__init__(self, **kwargs) - self.identifier = identifier - self.status = status
- -
[docs] def encode(self): - ''' Encodes the response - - :returns: The byte encoded message - ''' - if self.status: status = ModbusStatus.SlaveOn - else: status = ModbusStatus.SlaveOff - length = len(self.identifier) + 2 - packet = int2byte(length) - packet += self.identifier # we assume it is already encoded - packet += int2byte(status) - return packet
- -
[docs] def decode(self, data): - ''' Decodes a the response - - Since the identifier is device dependent, we just return the - raw value that a user can decode to whatever it should be. - - :param data: The packet data to decode - ''' - length = byte2int(data[0]) - self.identifier = data[1:length + 1] - status = byte2int(data[-1]) - self.status = status == ModbusStatus.SlaveOn
- -
[docs] def __str__(self): - ''' Builds a representation of the response - - :returns: The string representation of the response - ''' - arguments = (self.function_code, self.identifier, self.status) - return "ResportSlaveIdResponse(%d, %d, %d)" % arguments
- -#---------------------------------------------------------------------------# -# TODO Make these only work on serial -#---------------------------------------------------------------------------# -# report device identification 43, 14 - -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ReadExceptionStatusRequest", "ReadExceptionStatusResponse", - "GetCommEventCounterRequest", "GetCommEventCounterResponse", - "GetCommEventLogRequest", "GetCommEventLogResponse", - "ReportSlaveIdRequest", "ReportSlaveIdResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/payload.html b/doc/sphinx/html/_modules/pymodbus/payload.html deleted file mode 100644 index 67fb0efeb..000000000 --- a/doc/sphinx/html/_modules/pymodbus/payload.html +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - pymodbus.payload — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.payload

-'''
-Modbus Payload Builders
-------------------------
-
-A collection of utilities for building and decoding
-modbus messages payloads.
-'''
-from struct import pack, unpack
-from pymodbus.interfaces import IPayloadBuilder
-from pymodbus.constants import Endian
-from pymodbus.utilities import pack_bitstring
-from pymodbus.utilities import unpack_bitstring
-from pymodbus.exceptions import ParameterException
-
-
-
[docs]class BinaryPayloadBuilder(IPayloadBuilder): - ''' - A utility that helps build payload messages to be - written with the various modbus messages. It really is just - a simple wrapper around the struct module, however it saves - time looking up the format strings. What follows is a simple - example:: - - builder = BinaryPayloadBuilder(endian=Endian.Little) - builder.add_8bit_uint(1) - builder.add_16bit_uint(2) - payload = builder.build() - ''' - -
[docs] def __init__(self, payload=None, endian=Endian.Little): - ''' Initialize a new instance of the payload builder - - :param payload: Raw payload data to initialize with - :param endian: The endianess of the payload - ''' - self._payload = payload or [] - self._endian = endian
- -
[docs] def to_string(self): - ''' Return the payload buffer as a string - - :returns: The payload buffer as a string - ''' - return b''.join(self._payload)
- -
[docs] def __str__(self): - ''' Return the payload buffer as a string - - :returns: The payload buffer as a string - ''' - return self.to_string().decode('utf-8')
- -
[docs] def reset(self): - ''' Reset the payload buffer - ''' - self._payload = []
- -
[docs] def to_registers(self): - ''' Convert the payload buffer into a register - layout that can be used as a context block. - - :returns: The register layout to use as a block - ''' - fstring = self._endian + 'H' - payload = self.build() - return [unpack(fstring, value)[0] for value in payload]
- -
[docs] def build(self): - ''' Return the payload buffer as a list - - This list is two bytes per element and can - thus be treated as a list of registers. - - :returns: The payload buffer as a list - ''' - string = self.to_string() - length = len(string) - string = string + (b'\x00' * (length % 2)) - return [string[i:i+2] for i in range(0, length, 2)]
- -
[docs] def add_bits(self, values): - ''' Adds a collection of bits to be encoded - - If these are less than a multiple of eight, - they will be left padded with 0 bits to make - it so. - - :param value: The value to add to the buffer - ''' - value = pack_bitstring(values) - self._payload.append(value)
- -
[docs] def add_8bit_uint(self, value): - ''' Adds a 8 bit unsigned int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'B' - self._payload.append(pack(fstring, value))
- -
[docs] def add_16bit_uint(self, value): - ''' Adds a 16 bit unsigned int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'H' - self._payload.append(pack(fstring, value))
- -
[docs] def add_32bit_uint(self, value): - ''' Adds a 32 bit unsigned int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'I' - self._payload.append(pack(fstring, value))
- -
[docs] def add_64bit_uint(self, value): - ''' Adds a 64 bit unsigned int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'Q' - self._payload.append(pack(fstring, value))
- -
[docs] def add_8bit_int(self, value): - ''' Adds a 8 bit signed int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'b' - self._payload.append(pack(fstring, value))
- -
[docs] def add_16bit_int(self, value): - ''' Adds a 16 bit signed int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'h' - self._payload.append(pack(fstring, value))
- -
[docs] def add_32bit_int(self, value): - ''' Adds a 32 bit signed int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'i' - self._payload.append(pack(fstring, value))
- -
[docs] def add_64bit_int(self, value): - ''' Adds a 64 bit signed int to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'q' - self._payload.append(pack(fstring, value))
- -
[docs] def add_32bit_float(self, value): - ''' Adds a 32 bit float to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'f' - self._payload.append(pack(fstring, value))
- -
[docs] def add_64bit_float(self, value): - ''' Adds a 64 bit float(double) to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + 'd' - self._payload.append(pack(fstring, value))
- -
[docs] def add_string(self, value): - ''' Adds a string to the buffer - - :param value: The value to add to the buffer - ''' - fstring = self._endian + str(len(value)) + 's' - self._payload.append(pack(fstring, value))
- - -
[docs]class BinaryPayloadDecoder(object): - ''' - A utility that helps decode payload messages from a modbus - reponse message. It really is just a simple wrapper around - the struct module, however it saves time looking up the format - strings. What follows is a simple example:: - - decoder = BinaryPayloadDecoder(payload) - first = decoder.decode_8bit_uint() - second = decoder.decode_16bit_uint() - ''' - -
[docs] def __init__(self, payload, endian=Endian.Little): - ''' Initialize a new payload decoder - - :param payload: The payload to decode with - :param endian: The endianess of the payload - ''' - self._payload = payload - self._pointer = 0x00 - self._endian = endian
- - @classmethod -
[docs] def fromRegisters(klass, registers, endian=Endian.Little): - ''' Initialize a payload decoder with the result of - reading a collection of registers from a modbus device. - - The registers are treated as a list of 2 byte values. - We have to do this because of how the data has already - been decoded by the rest of the library. - - :param registers: The register results to initialize with - :param endian: The endianess of the payload - :returns: An initialized PayloadDecoder - ''' - if isinstance(registers, list): # repack into flat binary - payload = b''.join(pack(endian + 'H', x) for x in registers) - return klass(payload, endian) - raise ParameterException('Invalid collection of registers supplied')
- - @classmethod -
[docs] def fromCoils(klass, coils, endian=Endian.Little): - ''' Initialize a payload decoder with the result of - reading a collection of coils from a modbus device. - - The coils are treated as a list of bit(boolean) values. - - :param coils: The coil results to initialize with - :param endian: The endianess of the payload - :returns: An initialized PayloadDecoder - ''' - if isinstance(coils, list): - payload = pack_bitstring(coils) - return klass(payload, endian) - raise ParameterException('Invalid collection of coils supplied')
- -
[docs] def reset(self): - ''' Reset the decoder pointer back to the start - ''' - self._pointer = 0x00
- -
[docs] def decode_8bit_uint(self): - ''' Decodes a 8 bit unsigned int from the buffer - ''' - self._pointer += 1 - fstring = self._endian + 'B' - handle = self._payload[self._pointer - 1:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_bits(self): - ''' Decodes a byte worth of bits from the buffer - ''' - self._pointer += 1 - fstring = self._endian + 'B' - handle = self._payload[self._pointer - 1:self._pointer] - return unpack_bitstring(handle)
- -
[docs] def decode_16bit_uint(self): - ''' Decodes a 16 bit unsigned int from the buffer - ''' - self._pointer += 2 - fstring = self._endian + 'H' - handle = self._payload[self._pointer - 2:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_32bit_uint(self): - ''' Decodes a 32 bit unsigned int from the buffer - ''' - self._pointer += 4 - fstring = self._endian + 'I' - handle = self._payload[self._pointer - 4:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_64bit_uint(self): - ''' Decodes a 64 bit unsigned int from the buffer - ''' - self._pointer += 8 - fstring = self._endian + 'Q' - handle = self._payload[self._pointer - 8:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_8bit_int(self): - ''' Decodes a 8 bit signed int from the buffer - ''' - self._pointer += 1 - fstring = self._endian + 'b' - handle = self._payload[self._pointer - 1:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_16bit_int(self): - ''' Decodes a 16 bit signed int from the buffer - ''' - self._pointer += 2 - fstring = self._endian + 'h' - handle = self._payload[self._pointer - 2:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_32bit_int(self): - ''' Decodes a 32 bit signed int from the buffer - ''' - self._pointer += 4 - fstring = self._endian + 'i' - handle = self._payload[self._pointer - 4:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_64bit_int(self): - ''' Decodes a 64 bit signed int from the buffer - ''' - self._pointer += 8 - fstring = self._endian + 'q' - handle = self._payload[self._pointer - 8:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_32bit_float(self): - ''' Decodes a 32 bit float from the buffer - ''' - self._pointer += 4 - fstring = self._endian + 'f' - handle = self._payload[self._pointer - 4:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_64bit_float(self): - ''' Decodes a 64 bit float(double) from the buffer - ''' - self._pointer += 8 - fstring = self._endian + 'd' - handle = self._payload[self._pointer - 8:self._pointer] - return unpack(fstring, handle)[0]
- -
[docs] def decode_string(self, size=1): - ''' Decodes a string from the buffer - - :param size: The size of the string to decode - ''' - self._pointer += size - return self._payload[self._pointer - size:self._pointer]
- -#---------------------------------------------------------------------------# -# Exported Identifiers -#---------------------------------------------------------------------------# -__all__ = ["BinaryPayloadBuilder", "BinaryPayloadDecoder"] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/pdu.html b/doc/sphinx/html/_modules/pymodbus/pdu.html deleted file mode 100644 index afcda7a14..000000000 --- a/doc/sphinx/html/_modules/pymodbus/pdu.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - pymodbus.pdu — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.pdu

-'''
-Contains base classes for modbus request/response/error packets
-'''
-from pymodbus.interfaces import Singleton
-from pymodbus.exceptions import NotImplementedException
-from pymodbus.constants import Defaults
-from pymodbus.utilities import rtuFrameSize
-from pymodbus.compat import iteritems, int2byte, byte2int
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Base PDU's
-#---------------------------------------------------------------------------#
-
[docs]class ModbusPDU(object): - ''' - Base class for all Modbus mesages - - .. attribute:: transaction_id - - This value is used to uniquely identify a request - response pair. It can be implemented as a simple counter - - .. attribute:: protocol_id - - This is a constant set at 0 to indicate Modbus. It is - put here for ease of expansion. - - .. attribute:: unit_id - - This is used to route the request to the correct child. In - the TCP modbus, it is used for routing (or not used at all. However, - for the serial versions, it is used to specify which child to perform - the requests against. The value 0x00 represents the broadcast address - (also 0xff). - - .. attribute:: check - - This is used for LRC/CRC in the serial modbus protocols - - .. attribute:: skip_encode - - This is used when the message payload has already been encoded. - Generally this will occur when the PayloadBuilder is being used - to create a complicated message. By setting this to True, the - request will pass the currently encoded message through instead - of encoding it again. - ''' - -
[docs] def __init__(self, **kwargs): - ''' Initializes the base data for a modbus request ''' - self.transaction_id = kwargs.get('transaction', Defaults.TransactionId) - self.protocol_id = kwargs.get('protocol', Defaults.ProtocolId) - self.unit_id = kwargs.get('unit', Defaults.UnitId) - self.skip_encode = kwargs.get('skip_encode', False) - self.check = 0x0000
- -
[docs] def encode(self): - ''' Encodes the message - - :raises: A not implemented exception - ''' - raise NotImplementedException()
- -
[docs] def decode(self, data): - ''' Decodes data part of the message. - - :param data: is a string object - :raises: A not implemented exception - ''' - raise NotImplementedException()
- - @classmethod -
[docs] def calculateRtuFrameSize(cls, buffer): - ''' Calculates the size of a PDU. - - :param buffer: A buffer containing the data that have been received. - :returns: The number of bytes in the PDU. - ''' - if hasattr(cls, '_rtu_frame_size'): - return cls._rtu_frame_size - elif hasattr(cls, '_rtu_byte_count_pos'): - return rtuFrameSize(buffer, cls._rtu_byte_count_pos) - else: raise NotImplementedException( - "Cannot determine RTU frame size for %s" % cls.__name__)
- - -
[docs]class ModbusRequest(ModbusPDU): - ''' Base class for a modbus request PDU ''' - -
[docs] def __init__(self, **kwargs): - ''' Proxy to the lower level initializer ''' - ModbusPDU.__init__(self, **kwargs)
- -
[docs] def doException(self, exception): - ''' Builds an error response based on the function - - :param exception: The exception to return - :raises: An exception response - ''' - _logger.error("Exception Response F(%d) E(%d)" % - (self.function_code, exception)) - return ExceptionResponse(self.function_code, exception)
- - -
[docs]class ModbusResponse(ModbusPDU): - ''' Base class for a modbus response PDU - - .. attribute:: should_respond - - A flag that indicates if this response returns a result back - to the client issuing the request - - .. attribute:: _rtu_frame_size - - Indicates the size of the modbus rtu response used for - calculating how much to read. - ''' - - should_respond = True - -
[docs] def __init__(self, **kwargs): - ''' Proxy to the lower level initializer ''' - ModbusPDU.__init__(self, **kwargs)
- - -#---------------------------------------------------------------------------# -# Exception PDU's -#---------------------------------------------------------------------------# -
[docs]class ModbusExceptions(Singleton): - ''' - An enumeration of the valid modbus exceptions - ''' - IllegalFunction = 0x01 - IllegalAddress = 0x02 - IllegalValue = 0x03 - SlaveFailure = 0x04 - Acknowledge = 0x05 - SlaveBusy = 0x06 - MemoryParityError = 0x08 - GatewayPathUnavailable = 0x0A - GatewayNoResponse = 0x0B - - @classmethod -
[docs] def decode(cls, code): - ''' Given an error code, translate it to a - string error name. - - :param code: The code number to translate - ''' - values = dict((v, k) for k, v in iteritems(cls.__dict__) - if not k.startswith('__') and not callable(v)) - return values.get(code, None)
- - -
[docs]class ExceptionResponse(ModbusResponse): - ''' Base class for a modbus exception PDU ''' - ExceptionOffset = 0x80 - _rtu_frame_size = 5 - -
[docs] def __init__(self, function_code, exception_code=None, **kwargs): - ''' Initializes the modbus exception response - - :param function_code: The function to build an exception response for - :param exception_code: The specific modbus exception to return - ''' - ModbusResponse.__init__(self, **kwargs) - self.original_code = function_code - self.function_code = function_code | self.ExceptionOffset - self.exception_code = exception_code
- -
[docs] def encode(self): - ''' Encodes a modbus exception response - - :returns: The encoded exception packet - ''' - return int2byte(self.exception_code)
- -
[docs] def decode(self, data): - ''' Decodes a modbus exception response - - :param data: The packet data to decode - ''' - self.exception_code = byte2int(data[0])
- -
[docs] def __str__(self): - ''' Builds a representation of an exception response - - :returns: The string representation of an exception response - ''' - message = ModbusExceptions.decode(self.exception_code) - parameters = (self.function_code, self.original_code, message) - return "Exception Response(%d, %d, %s)" % parameters
- - -
[docs]class IllegalFunctionRequest(ModbusRequest): - ''' - Defines the Modbus slave exception type 'Illegal Function' - This exception code is returned if the slave:: - - - does not implement the function code **or** - - is not in a state that allows it to process the function - ''' - ErrorCode = 1 - -
[docs] def __init__(self, function_code, **kwargs): - ''' Initializes a IllegalFunctionRequest - - :param function_code: The function we are erroring on - ''' - ModbusRequest.__init__(self, **kwargs) - self.function_code = function_code
- -
[docs] def decode(self, data): - ''' This is here so this failure will run correctly - - :param data: Not used - ''' - pass
- -
[docs] def execute(self, context): - ''' Builds an illegal function request error response - - :param context: The current context for the message - :returns: The error response packet - ''' - return ExceptionResponse(self.function_code, self.ErrorCode)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - 'ModbusRequest', 'ModbusResponse', 'ModbusExceptions', - 'ExceptionResponse', 'IllegalFunctionRequest', -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/register_read_message.html b/doc/sphinx/html/_modules/pymodbus/register_read_message.html deleted file mode 100644 index 5ecb331d7..000000000 --- a/doc/sphinx/html/_modules/pymodbus/register_read_message.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - - - pymodbus.register_read_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.register_read_message

-'''
-Register Reading Request/Response
----------------------------------
-'''
-import struct
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.compat import int2byte, byte2int
-
-
-
[docs]class ReadRegistersRequestBase(ModbusRequest): - ''' - Base class for reading a modbus register - ''' - _rtu_frame_size = 8 - -
[docs] def __init__(self, address, count, **kwargs): - ''' Initializes a new instance - - :param address: The address to start the read from - :param count: The number of registers to read - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.count = count
- -
[docs] def encode(self): - ''' Encodes the request packet - - :return: The encoded packet - ''' - return struct.pack('>HH', self.address, self.count)
- -
[docs] def decode(self, data): - ''' Decode a register request packet - - :param data: The request to decode - ''' - self.address, self.count = struct.unpack('>HH', data)
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Byte Count(1 byte) + 2 * Quantity of Coils (n Bytes) - :return: - """ - return 1 + 1 + 2 * self.count
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "ReadRegisterRequest (%d,%d)" % (self.address, self.count)
- - -
[docs]class ReadRegistersResponseBase(ModbusResponse): - ''' - Base class for responsing to a modbus register read - ''' - - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, values, **kwargs): - ''' Initializes a new instance - - :param values: The values to write to - ''' - ModbusResponse.__init__(self, **kwargs) - self.registers = values or []
- -
[docs] def encode(self): - ''' Encodes the response packet - - :returns: The encoded packet - ''' - result = int2byte(len(self.registers) * 2) - for register in self.registers: - result += struct.pack('>H', register) - return result
- -
[docs] def decode(self, data): - ''' Decode a register response packet - - :param data: The request to decode - ''' - byte_count = byte2int(data[0]) - self.registers = [] - for i in range(1, byte_count + 1, 2): - self.registers.append(struct.unpack('>H', data[i:i + 2])[0])
- -
[docs] def getRegister(self, index): - ''' Get the requested register - - :param index: The indexed register to retrieve - :returns: The request register - ''' - return self.registers[index]
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "ReadRegisterResponse (%d)" % len(self.registers)
- - -
[docs]class ReadHoldingRegistersRequest(ReadRegistersRequestBase): - ''' - This function code is used to read the contents of a contiguous block - of holding registers in a remote device. The Request PDU specifies the - starting register address and the number of registers. In the PDU - Registers are addressed starting at zero. Therefore registers numbered - 1-16 are addressed as 0-15. - ''' - function_code = 3 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Initializes a new instance of the request - - :param address: The starting address to read from - :param count: The number of registers to read from address - ''' - ReadRegistersRequestBase.__init__(self, address, count, **kwargs)
- -
[docs] def execute(self, context): - ''' Run a read holding request against a datastore - - :param context: The datastore to request from - :returns: An initialized response, exception message otherwise - ''' - if not (1 <= self.count <= 0x7d): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, self.count): - return self.doException(merror.IllegalAddress) - values = context.getValues(self.function_code, self.address, self.count) - return ReadHoldingRegistersResponse(values)
- - -
[docs]class ReadHoldingRegistersResponse(ReadRegistersResponseBase): - ''' - This function code is used to read the contents of a contiguous block - of holding registers in a remote device. The Request PDU specifies the - starting register address and the number of registers. In the PDU - Registers are addressed starting at zero. Therefore registers numbered - 1-16 are addressed as 0-15. - ''' - function_code = 3 - -
[docs] def __init__(self, values=None, **kwargs): - ''' Initializes a new response instance - - :param values: The resulting register values - ''' - ReadRegistersResponseBase.__init__(self, values, **kwargs)
- - -
[docs]class ReadInputRegistersRequest(ReadRegistersRequestBase): - ''' - This function code is used to read from 1 to approx. 125 contiguous - input registers in a remote device. The Request PDU specifies the - starting register address and the number of registers. In the PDU - Registers are addressed starting at zero. Therefore input registers - numbered 1-16 are addressed as 0-15. - ''' - function_code = 4 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Initializes a new instance of the request - - :param address: The starting address to read from - :param count: The number of registers to read from address - ''' - ReadRegistersRequestBase.__init__(self, address, count, **kwargs)
- -
[docs] def execute(self, context): - ''' Run a read input request against a datastore - - :param context: The datastore to request from - :returns: An initialized response, exception message otherwise - ''' - if not (1 <= self.count <= 0x7d): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, self.count): - return self.doException(merror.IllegalAddress) - values = context.getValues(self.function_code, self.address, self.count) - return ReadInputRegistersResponse(values)
- - -
[docs]class ReadInputRegistersResponse(ReadRegistersResponseBase): - ''' - This function code is used to read from 1 to approx. 125 contiguous - input registers in a remote device. The Request PDU specifies the - starting register address and the number of registers. In the PDU - Registers are addressed starting at zero. Therefore input registers - numbered 1-16 are addressed as 0-15. - ''' - function_code = 4 - -
[docs] def __init__(self, values=None, **kwargs): - ''' Initializes a new response instance - - :param values: The resulting register values - ''' - ReadRegistersResponseBase.__init__(self, values, **kwargs)
- - -
[docs]class ReadWriteMultipleRegistersRequest(ModbusRequest): - ''' - This function code performs a combination of one read operation and one - write operation in a single MODBUS transaction. The write - operation is performed before the read. - - Holding registers are addressed starting at zero. Therefore holding - registers 1-16 are addressed in the PDU as 0-15. - - The request specifies the starting address and number of holding - registers to be read as well as the starting address, number of holding - registers, and the data to be written. The byte count specifies the - number of bytes to follow in the write data field." - ''' - function_code = 23 - _rtu_byte_count_pos = 10 - -
[docs] def __init__(self, **kwargs): - ''' Initializes a new request message - - :param read_address: The address to start reading from - :param read_count: The number of registers to read from address - :param write_address: The address to start writing to - :param write_registers: The registers to write to the specified address - ''' - ModbusRequest.__init__(self, **kwargs) - self.read_address = kwargs.get('read_address', 0x00) - self.read_count = kwargs.get('read_count', 0) - self.write_address = kwargs.get('write_address', 0x00) - self.write_registers = kwargs.get('write_registers', None) - if not hasattr(self.write_registers, '__iter__'): - self.write_registers = [self.write_registers] - self.write_count = len(self.write_registers) - self.write_byte_count = self.write_count * 2
- -
[docs] def encode(self): - ''' Encodes the request packet - - :returns: The encoded packet - ''' - result = struct.pack('>HHHHB', - self.read_address, self.read_count, \ - self.write_address, self.write_count, self.write_byte_count) - for register in self.write_registers: - result += struct.pack('>H', register) - return result
- -
[docs] def decode(self, data): - ''' Decode the register request packet - - :param data: The request to decode - ''' - self.read_address, self.read_count, \ - self.write_address, self.write_count, \ - self.write_byte_count = struct.unpack('>HHHHB', data[:9]) - self.write_registers = [] - for i in range(9, self.write_byte_count + 9, 2): - register = struct.unpack('>H', data[i:i + 2])[0] - self.write_registers.append(register)
- -
[docs] def execute(self, context): - ''' Run a write single register request against a datastore - - :param context: The datastore to request from - :returns: An initialized response, exception message otherwise - ''' - if not (1 <= self.read_count <= 0x07d): - return self.doException(merror.IllegalValue) - if not (1 <= self.write_count <= 0x079): - return self.doException(merror.IllegalValue) - if (self.write_byte_count != self.write_count * 2): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.write_address, - self.write_count): - return self.doException(merror.IllegalAddress) - if not context.validate(self.function_code, self.read_address, - self.read_count): - return self.doException(merror.IllegalAddress) - context.setValues(self.function_code, self.write_address, - self.write_registers) - registers = context.getValues(self.function_code, self.read_address, - self.read_count) - return ReadWriteMultipleRegistersResponse(registers)
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Byte Count(1 byte) + 2 * Quantity of Coils (n Bytes) - :return: - """ - return 1 + 1 + 2 * self.read_count
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - params = (self.read_address, self.read_count, self.write_address, - self.write_count) - return "ReadWriteNRegisterRequest R(%d,%d) W(%d,%d)" % params
- - -
[docs]class ReadWriteMultipleRegistersResponse(ModbusResponse): - ''' - The normal response contains the data from the group of registers that - were read. The byte count field specifies the quantity of bytes to - follow in the read data field. - ''' - function_code = 23 - _rtu_byte_count_pos = 2 - -
[docs] def __init__(self, values=None, **kwargs): - ''' Initializes a new instance - - :param values: The register values to write - ''' - ModbusResponse.__init__(self, **kwargs) - self.registers = values or []
- -
[docs] def encode(self): - ''' Encodes the response packet - - :returns: The encoded packet - ''' - result = int2byte(len(self.registers) * 2) - for register in self.registers: - result += struct.pack('>H', register) - return result
- -
[docs] def decode(self, data): - ''' Decode the register response packet - - :param data: The response to decode - ''' - bytecount = byte2int(data[0]) - for i in range(1, bytecount, 2): - self.registers.append(struct.unpack('>H', data[i:i + 2])[0])
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "ReadWriteNRegisterResponse (%d)" % len(self.registers)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "ReadHoldingRegistersRequest", "ReadHoldingRegistersResponse", - "ReadInputRegistersRequest", "ReadInputRegistersResponse", - "ReadWriteMultipleRegistersRequest", "ReadWriteMultipleRegistersResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/register_write_message.html b/doc/sphinx/html/_modules/pymodbus/register_write_message.html deleted file mode 100644 index f2990db88..000000000 --- a/doc/sphinx/html/_modules/pymodbus/register_write_message.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - pymodbus.register_write_message — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.register_write_message

-'''
-Register Writing Request/Response Messages
--------------------------------------------
-'''
-import struct
-from pymodbus.pdu import ModbusRequest
-from pymodbus.pdu import ModbusResponse
-from pymodbus.pdu import ModbusExceptions as merror
-
-
-
[docs]class WriteSingleRegisterRequest(ModbusRequest): - ''' - This function code is used to write a single holding register in a - remote device. - - The Request PDU specifies the address of the register to - be written. Registers are addressed starting at zero. Therefore register - numbered 1 is addressed as 0. - ''' - function_code = 6 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, value=None, **kwargs): - ''' Initializes a new instance - - :param address: The address to start writing add - :param value: The values to write - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - self.value = value
- -
[docs] def encode(self): - ''' Encode a write single register packet packet request - - :returns: The encoded packet - ''' - if self.skip_encode: - return self.value - return struct.pack('>HH', self.address, self.value)
- -
[docs] def decode(self, data): - ''' Decode a write single register packet packet request - - :param data: The request to decode - ''' - self.address, self.value = struct.unpack('>HH', data)
- -
[docs] def execute(self, context): - ''' Run a write single register request against a datastore - - :param context: The datastore to request from - :returns: An initialized response, exception message otherwise - ''' - if not (0 <= self.value <= 0xffff): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, 1): - return self.doException(merror.IllegalAddress) - - context.setValues(self.function_code, self.address, [self.value]) - values = context.getValues(self.function_code, self.address, 1) - return WriteSingleRegisterResponse(self.address, values[0])
- -
[docs] def get_response_pdu_size(self): - """ - Func_code (1 byte) + Register Address(2 byte) + Register Value (2 bytes) - :return: - """ - return 1 + 2 + 2
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - return "WriteRegisterRequest %d => %d" % (self.address, self.value)
- - -
[docs]class WriteSingleRegisterResponse(ModbusResponse): - ''' - The normal response is an echo of the request, returned after the - register contents have been written. - ''' - function_code = 6 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, value=None, **kwargs): - ''' Initializes a new instance - - :param address: The address to start writing add - :param value: The values to write - ''' - ModbusResponse.__init__(self, **kwargs) - self.address = address - self.value = value
- -
[docs] def encode(self): - ''' Encode a write single register packet packet request - - :returns: The encoded packet - ''' - return struct.pack('>HH', self.address, self.value)
- -
[docs] def decode(self, data): - ''' Decode a write single register packet packet request - - :param data: The request to decode - ''' - self.address, self.value = struct.unpack('>HH', data)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - params = (self.address, self.value) - return "WriteRegisterResponse %d => %d" % params
- - -#---------------------------------------------------------------------------# -# Write Multiple Registers -#---------------------------------------------------------------------------# -
[docs]class WriteMultipleRegistersRequest(ModbusRequest): - ''' - This function code is used to write a block of contiguous registers (1 - to approx. 120 registers) in a remote device. - - The requested written values are specified in the request data field. - Data is packed as two bytes per register. - ''' - function_code = 16 - _rtu_byte_count_pos = 6 - _pdu_length = 5 #func + adress1 + adress2 + outputQuant1 + outputQuant2 - -
[docs] def __init__(self, address=None, values=None, **kwargs): - ''' Initializes a new instance - - :param address: The address to start writing to - :param values: The values to write - ''' - ModbusRequest.__init__(self, **kwargs) - self.address = address - if values is None: - values = [] - elif not hasattr(values, '__iter__'): - values = [values] - self.values = values - self.count = len(self.values) - self.byte_count = self.count * 2
- -
[docs] def encode(self): - ''' Encode a write single register packet packet request - - :returns: The encoded packet - ''' - packet = struct.pack('>HHB', self.address, self.count, self.byte_count) - if self.skip_encode: - return packet + b''.join(self.values) - - for value in self.values: - packet += struct.pack('>H', value) - - return packet
- -
[docs] def decode(self, data): - ''' Decode a write single register packet packet request - - :param data: The request to decode - ''' - self.address, self.count, \ - self.byte_count = struct.unpack('>HHB', data[:5]) - self.values = [] # reset - for idx in range(5, (self.count * 2) + 5, 2): - self.values.append(struct.unpack('>H', data[idx:idx + 2])[0])
- -
[docs] def execute(self, context): - ''' Run a write single register request against a datastore - - :param context: The datastore to request from - :returns: An initialized response, exception message otherwise - ''' - if not (1 <= self.count <= 0x07b): - return self.doException(merror.IllegalValue) - if (self.byte_count != self.count * 2): - return self.doException(merror.IllegalValue) - if not context.validate(self.function_code, self.address, self.count): - return self.doException(merror.IllegalAddress) - - context.setValues(self.function_code, self.address, self.values) - return WriteMultipleRegistersResponse(self.address, self.count)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - params = (self.address, self.count) - return "WriteMultipleRegisterRequest %d => %d" % params
- - -
[docs]class WriteMultipleRegistersResponse(ModbusResponse): - ''' - "The normal response returns the function code, starting address, and - quantity of registers written. - ''' - function_code = 16 - _rtu_frame_size = 8 - -
[docs] def __init__(self, address=None, count=None, **kwargs): - ''' Initializes a new instance - - :param address: The address to start writing to - :param count: The number of registers to write to - ''' - ModbusResponse.__init__(self, **kwargs) - self.address = address - self.count = count
- -
[docs] def encode(self): - ''' Encode a write single register packet packet request - - :returns: The encoded packet - ''' - return struct.pack('>HH', self.address, self.count)
- -
[docs] def decode(self, data): - ''' Decode a write single register packet packet request - - :param data: The request to decode - ''' - self.address, self.count = struct.unpack('>HH', data)
- -
[docs] def __str__(self): - ''' Returns a string representation of the instance - - :returns: A string representation of the instance - ''' - params = (self.address, self.count) - return "WriteMultipleRegisterResponse (%d,%d)" % params
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "WriteSingleRegisterRequest", "WriteSingleRegisterResponse", - "WriteMultipleRegistersRequest", "WriteMultipleRegistersResponse", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/server/async.html b/doc/sphinx/html/_modules/pymodbus/server/async.html deleted file mode 100644 index dbbe5cea1..000000000 --- a/doc/sphinx/html/_modules/pymodbus/server/async.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - pymodbus.server.async — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.server.async

-'''
-Implementation of a Twisted Modbus Server
-------------------------------------------
-
-'''
-from binascii import b2a_hex
-from twisted.internet import protocol
-from twisted.internet.protocol import ServerFactory
-
-from pymodbus.constants import Defaults
-from pymodbus.factory import ServerDecoder
-from pymodbus.datastore import ModbusServerContext
-from pymodbus.device import ModbusControlBlock
-from pymodbus.device import ModbusAccessControl
-from pymodbus.device import ModbusDeviceIdentification
-from pymodbus.exceptions import NoSuchSlaveException
-from pymodbus.transaction import ModbusSocketFramer, ModbusAsciiFramer
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.internal.ptwisted import InstallManagementConsole
-from pymodbus.compat import byte2int
-from twisted.internet import reactor
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Modbus TCP Server
-#---------------------------------------------------------------------------#
-
[docs]class ModbusTcpProtocol(protocol.Protocol): - ''' Implements a modbus server in twisted ''' - -
[docs] def connectionMade(self): - ''' Callback for when a client connects - - ..note:: since the protocol factory cannot be accessed from the - protocol __init__, the client connection made is essentially - our __init__ method. - ''' - _logger.debug("Client Connected [%s]" % self.transport.getHost()) - self.framer = self.factory.framer(decoder=self.factory.decoder)
- -
[docs] def connectionLost(self, reason): - ''' Callback for when a client disconnects - - :param reason: The client's reason for disconnecting - ''' - _logger.debug("Client Disconnected: %s" % reason)
- -
[docs] def dataReceived(self, data): - ''' Callback when we receive any data - - :param data: The data sent by the client - ''' - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug(' '.join([hex(byte2int(x)) for x in data])) - if not self.factory.control.ListenOnly: - self.framer.processIncomingPacket(data, self._execute)
- -
[docs] def _execute(self, request): - ''' Executes the request and returns the result - - :param request: The decoded request message - ''' - try: - context = self.factory.store[request.unit_id] - response = request.execute(context) - except NoSuchSlaveException as ex: - _logger.debug("requested slave does not exist: %s" % request.unit_id ) - if self.factory.ignore_missing_slaves: - return # the client will simply timeout waiting for a response - response = request.doException(merror.GatewayNoResponse) - except Exception as ex: - _logger.debug("Datastore unable to fulfill request: %s" % ex) - response = request.doException(merror.SlaveFailure) - #self.framer.populateResult(response) - response.transaction_id = request.transaction_id - response.unit_id = request.unit_id - self._send(response)
- -
[docs] def _send(self, message): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - ''' - if message.should_respond: - self.factory.control.Counter.BusMessage += 1 - pdu = self.framer.buildPacket(message) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug('send: %s' % b2a_hex(pdu)) - return self.transport.write(pdu)
- - -
[docs]class ModbusServerFactory(ServerFactory): - ''' - Builder class for a modbus server - - This also holds the server datastore so that it is - persisted between connections - ''' - - protocol = ModbusTcpProtocol - -
[docs] def __init__(self, store, framer=None, identity=None, **kwargs): - ''' Overloaded initializer for the modbus factory - - If the identify structure is not passed in, the ModbusControlBlock - uses its own empty structure. - - :param store: The ModbusServerContext datastore - :param framer: The framer strategy to use - :param identity: An optional identify structure - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - self.decoder = ServerDecoder() - self.framer = framer or ModbusSocketFramer - self.store = store or ModbusServerContext() - self.control = ModbusControlBlock() - self.access = ModbusAccessControl() - self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) - - if isinstance(identity, ModbusDeviceIdentification): - self.control.Identity.update(identity)
- - -#---------------------------------------------------------------------------# -# Modbus UDP Server -#---------------------------------------------------------------------------# -
[docs]class ModbusUdpProtocol(protocol.DatagramProtocol): - ''' Implements a modbus udp server in twisted ''' - -
[docs] def __init__(self, store, framer=None, identity=None, **kwargs): - ''' Overloaded initializer for the modbus factory - - If the identify structure is not passed in, the ModbusControlBlock - uses its own empty structure. - - :param store: The ModbusServerContext datastore - :param framer: The framer strategy to use - :param identity: An optional identify structure - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - framer = framer or ModbusSocketFramer - self.framer = framer(decoder=ServerDecoder()) - self.store = store or ModbusServerContext() - self.control = ModbusControlBlock() - self.access = ModbusAccessControl() - self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) - - if isinstance(identity, ModbusDeviceIdentification): - self.control.Identity.update(identity)
- -
[docs] def datagramReceived(self, data, addr): - ''' Callback when we receive any data - - :param data: The data sent by the client - ''' - _logger.debug("Client Connected [%s:%s]" % addr) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug(" ".join([hex(byte2int(x)) for x in data])) - if not self.control.ListenOnly: - continuation = lambda request: self._execute(request, addr) - self.framer.processIncomingPacket(data, continuation)
- -
[docs] def _execute(self, request, addr): - ''' Executes the request and returns the result - - :param request: The decoded request message - ''' - try: - context = self.store[request.unit_id] - response = request.execute(context) - except NoSuchSlaveException as ex: - _logger.debug("requested slave does not exist: %s" % request.unit_id ) - if self.ignore_missing_slaves: - return # the client will simply timeout waiting for a response - response = request.doException(merror.GatewayNoResponse) - except Exception as ex: - _logger.debug("Datastore unable to fulfill request: %s" % ex) - response = request.doException(merror.SlaveFailure) - #self.framer.populateResult(response) - response.transaction_id = request.transaction_id - response.unit_id = request.unit_id - self._send(response, addr)
- -
[docs] def _send(self, message, addr): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - :param addr: The (host, port) to send the message to - ''' - self.control.Counter.BusMessage += 1 - pdu = self.framer.buildPacket(message) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug('send: %s' % b2a_hex(pdu)) - return self.transport.write(pdu, addr)
- - -#---------------------------------------------------------------------------# -# Starting Factories -#---------------------------------------------------------------------------# -
[docs]def StartTcpServer(context, identity=None, address=None, console=False, **kwargs): - ''' Helper method to start the Modbus Async TCP server - - :param context: The server data context - :param identify: The server identity to use (default empty) - :param address: An optional (interface, port) to bind to. - :param console: A flag indicating if you want the debug console - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - from twisted.internet import reactor - - address = address or ("", Defaults.Port) - framer = ModbusSocketFramer - factory = ModbusServerFactory(context, framer, identity, **kwargs) - if console: - InstallManagementConsole({'factory': factory}) - - _logger.info("Starting Modbus TCP Server on %s:%s" % address) - reactor.listenTCP(address[1], factory, interface=address[0]) - reactor.run()
- - -
[docs]def StartUdpServer(context, identity=None, address=None, **kwargs): - ''' Helper method to start the Modbus Async Udp server - - :param context: The server data context - :param identify: The server identity to use (default empty) - :param address: An optional (interface, port) to bind to. - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - from twisted.internet import reactor - - address = address or ("", Defaults.Port) - framer = ModbusSocketFramer - server = ModbusUdpProtocol(context, framer, identity, **kwargs) - - _logger.info("Starting Modbus UDP Server on %s:%s" % address) - reactor.listenUDP(address[1], server, interface=address[0]) - reactor.run()
- - -
[docs]def StartSerialServer(context, identity=None, - framer=ModbusAsciiFramer, **kwargs): - ''' Helper method to start the Modbus Async Serial server - - :param context: The server data context - :param identify: The server identity to use (default empty) - :param framer: The framer to use (default ModbusAsciiFramer) - :param port: The serial port to attach to - :param baudrate: The baud rate to use for the serial device - :param console: A flag indicating if you want the debug console - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - from twisted.internet import reactor - from twisted.internet.serialport import SerialPort - - port = kwargs.get('port', '/dev/ttyS0') - baudrate = kwargs.get('baudrate', Defaults.Baudrate) - console = kwargs.get('console', False) - - _logger.info("Starting Modbus Serial Server on %s" % port) - factory = ModbusServerFactory(context, framer, identity, **kwargs) - if console: - InstallManagementConsole({'factory': factory}) - - protocol = factory.buildProtocol(None) - SerialPort.getHost = lambda self: port # hack for logging - SerialPort(protocol, port, reactor, baudrate) - reactor.run()
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "StartTcpServer", "StartUdpServer", "StartSerialServer", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/server/sync.html b/doc/sphinx/html/_modules/pymodbus/server/sync.html deleted file mode 100644 index cd97b92e7..000000000 --- a/doc/sphinx/html/_modules/pymodbus/server/sync.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - - - pymodbus.server.sync — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.server.sync

-'''
-Implementation of a Threaded Modbus Server
-------------------------------------------
-
-'''
-from binascii import b2a_hex
-import serial
-import socket
-import traceback
-
-from pymodbus.constants import Defaults
-from pymodbus.factory import ServerDecoder
-from pymodbus.datastore import ModbusServerContext
-from pymodbus.device import ModbusControlBlock
-from pymodbus.device import ModbusDeviceIdentification
-from pymodbus.transaction import *
-from pymodbus.exceptions import NotImplementedException, NoSuchSlaveException
-from pymodbus.pdu import ModbusExceptions as merror
-from pymodbus.compat import socketserver, byte2int
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# Protocol Handlers
-#---------------------------------------------------------------------------#
-
[docs]class ModbusBaseRequestHandler(socketserver.BaseRequestHandler): - ''' Implements the modbus server protocol - - This uses the socketserver.BaseRequestHandler to implement - the client handler. - ''' - -
[docs] def setup(self): - ''' Callback for when a client connects - ''' - _logger.debug("Client Connected [%s:%s]" % self.client_address) - self.running = True - self.framer = self.server.framer(self.server.decoder) - self.server.threads.append(self)
- -
[docs] def finish(self): - ''' Callback for when a client disconnects - ''' - _logger.debug("Client Disconnected [%s:%s]" % self.client_address) - self.server.threads.remove(self)
- -
[docs] def execute(self, request): - ''' The callback to call with the resulting message - - :param request: The decoded request message - ''' - try: - context = self.server.context[request.unit_id] - response = request.execute(context) - except NoSuchSlaveException as ex: - _logger.debug("requested slave does not exist: %s" % request.unit_id ) - if self.server.ignore_missing_slaves: - return # the client will simply timeout waiting for a response - response = request.doException(merror.GatewayNoResponse) - except Exception as ex: - _logger.debug("Datastore unable to fulfill request: %s; %s", ex, traceback.format_exc() ) - response = request.doException(merror.SlaveFailure) - response.transaction_id = request.transaction_id - response.unit_id = request.unit_id - self.send(response)
- - #---------------------------------------------------------------------------# - # Base class implementations - #---------------------------------------------------------------------------# -
[docs] def handle(self): - ''' Callback when we receive any data - ''' - raise NotImplementedException("Method not implemented by derived class")
- -
[docs] def send(self, message): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - ''' - raise NotImplementedException("Method not implemented by derived class")
- - -# class ModbusSingleRequestHandler(ModbusBaseRequestHandler): -# ''' Implements the modbus server protocol -# -# This uses the socketserver.BaseRequestHandler to implement -# the client handler for a single client(serial clients) -# ''' -# -# def handle(self): -# ''' Callback when we receive any data -# ''' -# while self.running: -# try: -# data = self.request.recv(1024) -# if data: -# if _logger.isEnabledFor(logging.DEBUG): -# _logger.debug(' '.join([hex(byte2int(x)) for x in data])) -# self.framer.processIncomingPacket(data, self.execute) -# except Exception as msg: -# # since we only have a single socket, we cannot exit -# _logger.error("Socket error occurred %s" % msg) -# -# def send(self, message): -# ''' Send a request (string) to the network -# -# :param message: The unencoded modbus response -# ''' - - -
[docs]class ModbusSingleRequestHandler(ModbusBaseRequestHandler): - ''' Implements the modbus server protocol - - This uses the socketserver.BaseRequestHandler to implement - the client handler for a single client(serial clients) - ''' - -
[docs] def handle(self): - ''' Callback when we receive any data - ''' - while self.running: - try: - data = self.request.recv(1024) - if data: - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug(" ".join([hex(byte2int(x)) for x in data])) - self.framer.processIncomingPacket(data, self.execute) - except Exception as msg: - # since we only have a single socket, we cannot exit - _logger.error("Socket error occurred %s" % msg)
- -
[docs] def send(self, message): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - ''' - if message.should_respond: - #self.server.control.Counter.BusMessage += 1 - pdu = self.framer.buildPacket(message) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug('send: %s' % b2a_hex(pdu)) - return self.request.send(pdu)
- - -
[docs]class ModbusConnectedRequestHandler(ModbusBaseRequestHandler): - ''' Implements the modbus server protocol - - This uses the socketserver.BaseRequestHandler to implement - the client handler for a connected protocol (TCP). - ''' - -
[docs] def handle(self): - '''Callback when we receive any data, until self.running becomes not True. Blocks indefinitely - awaiting data. If shutdown is required, then the global socket.settimeout(<seconds>) may be - used, to allow timely checking of self.running. However, since this also affects socket - connects, if there are outgoing socket connections used in the same program, then these will - be prevented, if the specfied timeout is too short. Hence, this is unreliable. - - To respond to Modbus...Server.server_close() (which clears each handler's self.running), - derive from this class to provide an alternative handler that awakens from time to time when - no input is available and checks self.running. Use Modbus...Server( handler=... ) keyword - to supply the alternative request handler class. - - ''' - while self.running: - try: - data = self.request.recv(1024) - if not data: self.running = False - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug(' '.join([hex(byte2int(x)) for x in data])) - # if not self.server.control.ListenOnly: - self.framer.processIncomingPacket(data, self.execute) - except socket.timeout as msg: - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug("Socket timeout occurred %s", msg) - pass - except socket.error as msg: - _logger.error("Socket error occurred %s" % msg) - self.running = False - except: - _logger.error("Socket exception occurred %s" % traceback.format_exc() ) - self.running = False
- -
[docs] def send(self, message): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - ''' - if message.should_respond: - #self.server.control.Counter.BusMessage += 1 - pdu = self.framer.buildPacket(message) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug('send: %s' % b2a_hex(pdu)) - return self.request.send(pdu)
- - -
[docs]class ModbusDisconnectedRequestHandler(ModbusBaseRequestHandler): - ''' Implements the modbus server protocol - - This uses the socketserver.BaseRequestHandler to implement - the client handler for a disconnected protocol (UDP). The - only difference is that we have to specify who to send the - resulting packet data to. - ''' - -
[docs] def handle(self): - ''' Callback when we receive any data - ''' - while self.running: - try: - data, self.request = self.request - if not data: self.running = False - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug(' '.join([hex(byte2int(x)) for x in data])) - # if not self.server.control.ListenOnly: - self.framer.processIncomingPacket(data, self.execute) - except socket.timeout: pass - except socket.error as msg: - _logger.error("Socket error occurred %s" % msg) - self.running = False - except: self.running = False
- -
[docs] def send(self, message): - ''' Send a request (string) to the network - - :param message: The unencoded modbus response - ''' - if message.should_respond: - #self.server.control.Counter.BusMessage += 1 - pdu = self.framer.buildPacket(message) - if _logger.isEnabledFor(logging.DEBUG): - _logger.debug('send: %s' % b2a_hex(pdu)) - return self.request.sendto(pdu, self.client_address)
- - -#---------------------------------------------------------------------------# -# Server Implementations -#---------------------------------------------------------------------------# -
[docs]class ModbusTcpServer(socketserver.ThreadingTCPServer): - ''' - A modbus threaded tcp socket server - - We inherit and overload the socket server so that we - can control the client threads as well as have a single - server context instance. - ''' - -
[docs] def __init__(self, context, framer=None, identity=None, address=None, handler=None, **kwargs): - ''' Overloaded initializer for the socket server - - If the identify structure is not passed in, the ModbusControlBlock - uses its own empty structure. - - :param context: The ModbusServerContext datastore - :param framer: The framer strategy to use - :param identity: An optional identify structure - :param address: An optional (interface, port) to bind to. - :param handler: A handler for each client session; default is ModbusConnectedRequestHandler - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - self.threads = [] - self.decoder = ServerDecoder() - self.framer = framer or ModbusSocketFramer - self.context = context or ModbusServerContext() - self.control = ModbusControlBlock() - self.address = address or ("", Defaults.Port) - self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) - - if isinstance(identity, ModbusDeviceIdentification): - self.control.Identity.update(identity) - - socketserver.ThreadingTCPServer.__init__(self, - self.address, ModbusConnectedRequestHandler)
- -
[docs] def process_request(self, request, client): - ''' Callback for connecting a new client thread - - :param request: The request to handle - :param client: The address of the client - ''' - _logger.debug("Started thread to serve client at " + str(client)) - socketserver.ThreadingTCPServer.process_request(self, request, client)
- -
[docs] def shutdown(self): - ''' Stops the serve_forever loop. - - Overridden to signal handlers to stop. - ''' - for thread in self.threads: - thread.running = False - socketserver.ThreadingTCPServer.shutdown(self)
- -
[docs] def server_close(self): - ''' Callback for stopping the running server - ''' - _logger.debug("Modbus server stopped") - self.socket.close() - for thread in self.threads: - thread.running = False
- - -
[docs]class ModbusUdpServer(socketserver.ThreadingUDPServer): - ''' - A modbus threaded udp socket server - - We inherit and overload the socket server so that we - can control the client threads as well as have a single - server context instance. - ''' - -
[docs] def __init__(self, context, framer=None, identity=None, address=None, handler=None, **kwargs): - ''' Overloaded initializer for the socket server - - If the identify structure is not passed in, the ModbusControlBlock - uses its own empty structure. - - :param context: The ModbusServerContext datastore - :param framer: The framer strategy to use - :param identity: An optional identify structure - :param address: An optional (interface, port) to bind to. - :param handler: A handler for each client session; default is ModbusDisonnectedRequestHandler - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - self.threads = [] - self.decoder = ServerDecoder() - self.framer = framer or ModbusSocketFramer - self.context = context or ModbusServerContext() - self.control = ModbusControlBlock() - self.address = address or ("", Defaults.Port) - self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) - - if isinstance(identity, ModbusDeviceIdentification): - self.control.Identity.update(identity) - - socketserver.ThreadingUDPServer.__init__(self, - self.address, ModbusDisconnectedRequestHandler)
- -
[docs] def process_request(self, request, client): - ''' Callback for connecting a new client thread - - :param request: The request to handle - :param client: The address of the client - ''' - packet, socket = request # TODO I might have to rewrite - _logger.debug("Started thread to serve client at " + str(client)) - socketserver.ThreadingUDPServer.process_request(self, request, client)
- -
[docs] def server_close(self): - ''' Callback for stopping the running server - ''' - _logger.debug("Modbus server stopped") - self.socket.close() - for thread in self.threads: - thread.running = False
- - -
[docs]class ModbusSerialServer(object): - ''' - A modbus threaded serial socket server - - We inherit and overload the socket server so that we - can control the client threads as well as have a single - server context instance. - ''' - -
[docs] def __init__(self, context, framer=None, identity=None, **kwargs): - ''' Overloaded initializer for the socket server - - If the identify structure is not passed in, the ModbusControlBlock - uses its own empty structure. - - :param context: The ModbusServerContext datastore - :param framer: The framer strategy to use - :param identity: An optional identify structure - :param port: The serial port to attach to - :param stopbits: The number of stop bits to use - :param bytesize: The bytesize of the serial messages - :param parity: Which kind of parity to use - :param baudrate: The baud rate to use for the serial device - :param timeout: The timeout to use for the serial device - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - self.threads = [] - self.decoder = ServerDecoder() - self.framer = framer or ModbusAsciiFramer - self.context = context or ModbusServerContext() - self.control = ModbusControlBlock() - - if isinstance(identity, ModbusDeviceIdentification): - self.control.Identity.update(identity) - - self.device = kwargs.get('port', 0) - self.stopbits = kwargs.get('stopbits', Defaults.Stopbits) - self.bytesize = kwargs.get('bytesize', Defaults.Bytesize) - self.parity = kwargs.get('parity', Defaults.Parity) - self.baudrate = kwargs.get('baudrate', Defaults.Baudrate) - self.timeout = kwargs.get('timeout', Defaults.Timeout) - self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) - self.socket = None - self._connect() - self.is_running = True
- -
[docs] def _connect(self): - ''' Connect to the serial server - - :returns: True if connection succeeded, False otherwise - ''' - if self.socket: return True - try: - self.socket = serial.Serial(port=self.device, timeout=self.timeout, - bytesize=self.bytesize, stopbits=self.stopbits, - baudrate=self.baudrate, parity=self.parity) - except serial.SerialException as msg: - _logger.error(msg) - return self.socket != None
- -
[docs] def _build_handler(self): - ''' A helper method to create and monkeypatch - a serial handler. - - :returns: A patched handler - ''' - request = self.socket - request.send = request.write - request.recv = request.read - handler = ModbusSingleRequestHandler(request, - (self.device, self.device), self) - return handler
- -
[docs] def serve_forever(self): - ''' Callback for connecting a new client thread - - :param request: The request to handle - :param client: The address of the client - ''' - _logger.debug("Started thread to serve client") - handler = self._build_handler() - while self.is_running: - handler.handle()
- -
[docs] def server_close(self): - ''' Callback for stopping the running server - ''' - _logger.debug("Modbus server stopped") - self.is_running = False - self.socket.close()
- - -#---------------------------------------------------------------------------# -# Creation Factories -#---------------------------------------------------------------------------# -
[docs]def StartTcpServer(context=None, identity=None, address=None, **kwargs): - ''' A factory to start and run a tcp modbus server - - :param context: The ModbusServerContext datastore - :param identity: An optional identify structure - :param address: An optional (interface, port) to bind to. - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - framer = ModbusSocketFramer - server = ModbusTcpServer(context, framer, identity, address, **kwargs) - server.serve_forever()
- - -
[docs]def StartUdpServer(context=None, identity=None, address=None, **kwargs): - ''' A factory to start and run a udp modbus server - - :param context: The ModbusServerContext datastore - :param identity: An optional identify structure - :param address: An optional (interface, port) to bind to. - :param framer: The framer to operate with (default ModbusSocketFramer) - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - framer = kwargs.pop('framer', ModbusSocketFramer) - server = ModbusUdpServer(context, framer, identity, address, **kwargs) - server.serve_forever()
- - -
[docs]def StartSerialServer(context=None, identity=None, **kwargs): - ''' A factory to start and run a serial modbus server - - :param context: The ModbusServerContext datastore - :param identity: An optional identify structure - :param framer: The framer to operate with (default ModbusAsciiFramer) - :param port: The serial port to attach to - :param stopbits: The number of stop bits to use - :param bytesize: The bytesize of the serial messages - :param parity: Which kind of parity to use - :param baudrate: The baud rate to use for the serial device - :param timeout: The timeout to use for the serial device - :param ignore_missing_slaves: True to not send errors on a request to a missing slave - ''' - framer = kwargs.pop('framer', ModbusAsciiFramer) - server = ModbusSerialServer(context, framer, identity, **kwargs) - server.serve_forever()
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "StartTcpServer", "StartUdpServer", "StartSerialServer" -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/transaction.html b/doc/sphinx/html/_modules/pymodbus/transaction.html deleted file mode 100644 index c7d53ea22..000000000 --- a/doc/sphinx/html/_modules/pymodbus/transaction.html +++ /dev/null @@ -1,1064 +0,0 @@ - - - - - - - - pymodbus.transaction — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.transaction

-'''
-Collection of transaction based abstractions
-'''
-import sys
-import struct
-import socket
-from binascii import b2a_hex, a2b_hex
-
-from pymodbus.exceptions import ModbusIOException, NotImplementedException
-from pymodbus.constants  import Defaults
-from pymodbus.interfaces import IModbusFramer
-from pymodbus.utilities  import checkCRC, computeCRC
-from pymodbus.utilities  import checkLRC, computeLRC
-from pymodbus.compat import iterkeys, imap, byte2int
-
-#---------------------------------------------------------------------------#
-# Logging
-#---------------------------------------------------------------------------#
-import logging
-_logger = logging.getLogger(__name__)
-
-
-#---------------------------------------------------------------------------#
-# The Global Transaction Manager
-#---------------------------------------------------------------------------#
-class ModbusTransactionManager(object):
-    ''' Impelements a transaction for a manager
-
-    The transaction protocol can be represented by the following pseudo code::
-
-        count = 0
-        do
-          result = send(message)
-          if (timeout or result == bad)
-             count++
-          else break
-        while (count < 3)
-
-    This module helps to abstract this away from the framer and protocol.
-    '''
-
-    def __init__(self, client, **kwargs):
-        ''' Initializes an instance of the ModbusTransactionManager
-
-        :param client: The client socket wrapper
-        :param retry_on_empty: Should the client retry on empty
-        :param retries: The number of retries to allow
-        '''
-        self.tid = Defaults.TransactionId
-        self.client = client
-        self.retry_on_empty = kwargs.get('retry_on_empty', Defaults.RetryOnEmpty)
-        self.retries = kwargs.get('retries', Defaults.Retries)
-        if client:
-            self._set_adu_size()
-
-    def _set_adu_size(self):
-        # base ADU size of modbus frame in bytes
-        if isinstance(self.client.framer, ModbusSocketFramer):
-            self.base_adu_size = 7 # tid(2), pid(2), length(2), uid(1)
-        elif isinstance(self.client.framer, ModbusRtuFramer):
-            self.base_adu_size = 3 # address(1), CRC(2)
-        elif isinstance(self.client.framer, ModbusAsciiFramer):
-            self.base_adu_size = 4 # Address(2), LRC(2)
-        elif isinstance(self.client.framer, ModbusBinaryFramer):
-            self.base_adu_size = 3 #, Address(1), CRC(2)
-        else:
-            self.base_adu_size = -1
-
-    def _calculate_response_length(self, expected_pdu_size):
-        if self.base_adu_size == -1:
-            return 1024
-        else:
-            return self.base_adu_size + expected_pdu_size
-
-    def execute(self, request):
-        ''' Starts the producer to send the next request to
-        consumer.write(Frame(request))
-        '''
-        retries = self.retries
-        request.transaction_id = self.getNextTID()
-        _logger.debug("Running transaction %d" % request.transaction_id)
-        if hasattr(request, "get_response_pdu_size"):
-            response_pdu_size = request.get_response_pdu_size()
-            expected_response_length = self._calculate_response_length(response_pdu_size)
-        else:
-            expected_response_length = 1024
-
-        while retries > 0:
-            try:
-                self.client.connect()
-                self.client._send(self.client.framer.buildPacket(request))
-                result = self.client._recv(expected_response_length)
-
-                if not result and self.retry_on_empty:
-                    retries -= 1
-                    continue
-                if _logger.isEnabledFor(logging.DEBUG):
-                    _logger.debug("recv: " + " ".join([hex(byte2int(x)) for x in result]))
-                self.client.framer.processIncomingPacket(result, self.addTransaction)
-                break;
-            except socket.error as msg:
-                self.client.close()
-                _logger.debug("Transaction failed. (%s) " % msg)
-                retries -= 1
-        return self.getTransaction(request.transaction_id)
-
-
-    def addTransaction(self, request, tid=None):
-        ''' Adds a transaction to the handler
-
-        This holds the requets in case it needs to be resent.
-        After being sent, the request is removed.
-
-        :param request: The request to hold on to
-        :param tid: The overloaded transaction id to use
-        '''
-        raise NotImplementedException("addTransaction")
-
-    def getTransaction(self, tid):
-        ''' Returns a transaction matching the referenced tid
-
-        If the transaction does not exist, None is returned
-
-        :param tid: The transaction to retrieve
-        '''
-        raise NotImplementedException("getTransaction")
-
-    def delTransaction(self, tid):
-        ''' Removes a transaction matching the referenced tid
-
-        :param tid: The transaction to remove
-        '''
-        raise NotImplementedException("delTransaction")
-
-    def getNextTID(self):
-        ''' Retrieve the next unique transaction identifier
-
-        This handles incrementing the identifier after
-        retrieval
-
-        :returns: The next unique transaction identifier
-        '''
-        self.tid = (self.tid + 1) & 0xffff
-        return self.tid
-
-    def reset(self):
-        ''' Resets the transaction identifier '''
-        self.tid = Defaults.TransactionId
-        self.transactions = type(self.transactions)()
-
-
-
[docs]class DictTransactionManager(ModbusTransactionManager): - ''' Impelements a transaction for a manager where the - results are keyed based on the supplied transaction id. - ''' - -
[docs] def __init__(self, client, **kwargs): - ''' Initializes an instance of the ModbusTransactionManager - - :param client: The client socket wrapper - ''' - self.transactions = {} - super(DictTransactionManager, self).__init__(client, **kwargs)
- -
[docs] def __iter__(self): - ''' Iterater over the current managed transactions - - :returns: An iterator of the managed transactions - ''' - return iterkeys(self.transactions)
- -
[docs] def addTransaction(self, request, tid=None): - ''' Adds a transaction to the handler - - This holds the requets in case it needs to be resent. - After being sent, the request is removed. - - :param request: The request to hold on to - :param tid: The overloaded transaction id to use - ''' - tid = tid if tid != None else request.transaction_id - _logger.debug("adding transaction %d" % tid) - self.transactions[tid] = request
- -
[docs] def getTransaction(self, tid): - ''' Returns a transaction matching the referenced tid - - If the transaction does not exist, None is returned - - :param tid: The transaction to retrieve - ''' - _logger.debug("getting transaction %d" % tid) - return self.transactions.pop(tid, None)
- -
[docs] def delTransaction(self, tid): - ''' Removes a transaction matching the referenced tid - - :param tid: The transaction to remove - ''' - _logger.debug("deleting transaction %d" % tid) - self.transactions.pop(tid, None)
- - -
[docs]class FifoTransactionManager(ModbusTransactionManager): - ''' Impelements a transaction for a manager where the - results are returned in a FIFO manner. - ''' - -
[docs] def __init__(self, client, **kwargs): - ''' Initializes an instance of the ModbusTransactionManager - - :param client: The client socket wrapper - ''' - super(FifoTransactionManager, self).__init__(client, **kwargs) - self.transactions = []
- -
[docs] def __iter__(self): - ''' Iterater over the current managed transactions - - :returns: An iterator of the managed transactions - ''' - return iter(self.transactions)
- -
[docs] def addTransaction(self, request, tid=None): - ''' Adds a transaction to the handler - - This holds the requets in case it needs to be resent. - After being sent, the request is removed. - - :param request: The request to hold on to - :param tid: The overloaded transaction id to use - ''' - tid = tid if tid != None else request.transaction_id - _logger.debug("adding transaction %d" % tid) - self.transactions.append(request)
- -
[docs] def getTransaction(self, tid): - ''' Returns a transaction matching the referenced tid - - If the transaction does not exist, None is returned - - :param tid: The transaction to retrieve - ''' - _logger.debug("getting transaction %s" % str(tid)) - return self.transactions.pop(0) if self.transactions else None
- -
[docs] def delTransaction(self, tid): - ''' Removes a transaction matching the referenced tid - - :param tid: The transaction to remove - ''' - _logger.debug("deleting transaction %d" % tid) - if self.transactions: self.transactions.pop(0)
- - -#---------------------------------------------------------------------------# -# Modbus TCP Message -#---------------------------------------------------------------------------# -
[docs]class ModbusSocketFramer(IModbusFramer): - ''' Modbus Socket Frame controller - - Before each modbus TCP message is an MBAP header which is used as a - message frame. It allows us to easily separate messages as follows:: - - [ MBAP Header ] [ Function Code] [ Data ] - [ tid ][ pid ][ length ][ uid ] - 2b 2b 2b 1b 1b Nb - - while len(message) > 0: - tid, pid, length`, uid = struct.unpack(">HHHB", message) - request = message[0:7 + length - 1`] - message = [7 + length - 1:] - - * length = uid + function code + data - * The -1 is to account for the uid byte - ''' - -
[docs] def __init__(self, decoder): - ''' Initializes a new instance of the framer - - :param decoder: The decoder factory implementation to use - ''' - self.__buffer = b'' - self.__header = {'tid':0, 'pid':0, 'len':0, 'uid':0} - self.__hsize = 0x07 - self.decoder = decoder
- - #-----------------------------------------------------------------------# - # Private Helper Functions - #-----------------------------------------------------------------------# -
[docs] def checkFrame(self): - ''' - Check and decode the next frame Return true if we were successful - ''' - if len(self.__buffer) > self.__hsize: - self.__header['tid'], self.__header['pid'], \ - self.__header['len'], self.__header['uid'] = struct.unpack( - '>HHHB', self.__buffer[0:self.__hsize]) - - # someone sent us an error? ignore it - if self.__header['len'] < 2: - self.advanceFrame() - # we have at least a complete message, continue - elif len(self.__buffer) - self.__hsize + 1 >= self.__header['len']: - return True - # we don't have enough of a message yet, wait - return False
- -
[docs] def advanceFrame(self): - ''' Skip over the current framed message - This allows us to skip over the current message after we have processed - it or determined that it contains an error. It also has to reset the - current frame header handle - ''' - length = self.__hsize + self.__header['len'] - 1 - self.__buffer = self.__buffer[length:] - self.__header = {'tid':0, 'pid':0, 'len':0, 'uid':0}
- -
[docs] def isFrameReady(self): - ''' Check if we should continue decode logic - This is meant to be used in a while loop in the decoding phase to let - the decoder factory know that there is still data in the buffer. - - :returns: True if ready, False otherwise - ''' - return len(self.__buffer) > self.__hsize
- -
[docs] def addToFrame(self, message): - ''' Adds new packet data to the current frame buffer - - :param message: The most recent packet - ''' - self.__buffer += message
- -
[docs] def getFrame(self): - ''' Return the next frame from the buffered data - - :returns: The next full frame buffer - ''' - length = self.__hsize + self.__header['len'] - 1 - return self.__buffer[self.__hsize:length]
- -
[docs] def populateResult(self, result): - ''' - Populates the modbus result with the transport specific header - information (pid, tid, uid, checksum, etc) - - :param result: The response packet - ''' - result.transaction_id = self.__header['tid'] - result.protocol_id = self.__header['pid'] - result.unit_id = self.__header['uid']
- - #-----------------------------------------------------------------------# - # Public Member Functions - #-----------------------------------------------------------------------# -
[docs] def processIncomingPacket(self, data, callback): - ''' The new packet processing pattern - - This takes in a new request packet, adds it to the current - packet stream, and performs framing on it. That is, checks - for complete messages, and once found, will process all that - exist. This handles the case when we read N + 1 or 1 / N - messages at a time instead of 1. - - The processed and decoded messages are pushed to the callback - function to process and send. - - :param data: The new packet data - :param callback: The function to send results to - ''' - _logger.debug(' '.join([hex(byte2int(x)) for x in data])) - self.addToFrame(data) - while True: - if self.isFrameReady(): - if self.checkFrame(): - self._process(callback) - else: self.resetFrame() - else: - if len(self.__buffer): - # Possible error ??? - if self.__header['len'] < 2: - self._process(callback, error=True) - break
- -
[docs] def _process(self, callback, error=False): - """ - Process incoming packets irrespective error condition - """ - data = self.getRawFrame() if error else self.getFrame() - result = self.decoder.decode(data) - if result is None: - raise ModbusIOException("Unable to decode request") - self.populateResult(result) - self.advanceFrame() - callback(result) # defer or push to a thread?
- -
[docs] def resetFrame(self): - ''' Reset the entire message frame. - This allows us to skip ovver errors that may be in the stream. - It is hard to know if we are simply out of sync or if there is - an error in the stream as we have no way to check the start or - end of the message (python just doesn't have the resolution to - check for millisecond delays). - ''' - self.__buffer = '' - self.__header = {}
- -
[docs] def getRawFrame(self): - """ - Returns the complete buffer - """ - return self.__buffer
- -
[docs] def buildPacket(self, message): - ''' Creates a ready to send modbus packet - - :param message: The populated request/response to send - ''' - data = message.encode() - packet = struct.pack('>HHHBB', - message.transaction_id, - message.protocol_id, - len(data) + 2, - message.unit_id, - message.function_code) + data - return packet
- - -#---------------------------------------------------------------------------# -# Modbus RTU Message -#---------------------------------------------------------------------------# -
[docs]class ModbusRtuFramer(IModbusFramer): - ''' - Modbus RTU Frame controller:: - - [ Start Wait ] [Address ][ Function Code] [ Data ][ CRC ][ End Wait ] - 3.5 chars 1b 1b Nb 2b 3.5 chars - - Wait refers to the amount of time required to transmist at least x many - characters. In this case it is 3.5 characters. Also, if we recieve a - wait of 1.5 characters at any point, we must trigger an error message. - Also, it appears as though this message is little endian. The logic is - simplified as the following:: - - block-on-read: - read until 3.5 delay - check for errors - decode - - The following table is a listing of the baud wait times for the specified - baud rates:: - - ------------------------------------------------------------------ - Baud 1.5c (18 bits) 3.5c (38 bits) - ------------------------------------------------------------------ - 1200 13333.3 us 31666.7 us - 4800 3333.3 us 7916.7 us - 9600 1666.7 us 3958.3 us - 19200 833.3 us 1979.2 us - 38400 416.7 us 989.6 us - ------------------------------------------------------------------ - 1 Byte = start + 8 bits + parity + stop = 11 bits - (1/Baud)(bits) = delay seconds - ''' - -
[docs] def __init__(self, decoder): - ''' Initializes a new instance of the framer - - :param decoder: The decoder factory implementation to use - ''' - self.__buffer = b'' - self.__header = {} - self.__hsize = 0x01 - self.__end = b'\x0d\x0a' - self.__min_frame_size = 4 - self.decoder = decoder
- - #-----------------------------------------------------------------------# - # Private Helper Functions - #-----------------------------------------------------------------------# -
[docs] def checkFrame(self): - ''' - Check if the next frame is available. Return True if we were - successful. - ''' - try: - self.populateHeader() - frame_size = self.__header['len'] - data = self.__buffer[:frame_size - 2] - crc = self.__buffer[frame_size - 2:frame_size] - crc_val = (byte2int(crc[0]) << 8) + byte2int(crc[1]) - return checkCRC(data, crc_val) - except (IndexError, KeyError): - return False
- -
[docs] def advanceFrame(self): - ''' Skip over the current framed message - This allows us to skip over the current message after we have processed - it or determined that it contains an error. It also has to reset the - current frame header handle - ''' - try: - self.__buffer = self.__buffer[self.__header['len']:] - except KeyError: - # Error response, no header len found - self.resetFrame() - self.__header = {}
- -
[docs] def resetFrame(self): - ''' Reset the entire message frame. - This allows us to skip ovver errors that may be in the stream. - It is hard to know if we are simply out of sync or if there is - an error in the stream as we have no way to check the start or - end of the message (python just doesn't have the resolution to - check for millisecond delays). - ''' - self.__buffer = b'' - self.__header = {}
- -
[docs] def isFrameReady(self): - ''' Check if we should continue decode logic - This is meant to be used in a while loop in the decoding phase to let - the decoder know that there is still data in the buffer. - - :returns: True if ready, False otherwise - ''' - return len(self.__buffer) > self.__hsize
- -
[docs] def populateHeader(self): - ''' Try to set the headers `uid`, `len` and `crc`. - - This method examines `self.__buffer` and writes meta - information into `self.__header`. It calculates only the - values for headers that are not already in the dictionary. - - Beware that this method will raise an IndexError if - `self.__buffer` is not yet long enough. - ''' - self.__header['uid'] = byte2int(self.__buffer[0]) - func_code = byte2int(self.__buffer[1]) - pdu_class = self.decoder.lookupPduClass(func_code) - size = pdu_class.calculateRtuFrameSize(self.__buffer) - self.__header['len'] = size - self.__header['crc'] = self.__buffer[size - 2:size]
- -
[docs] def addToFrame(self, message): - ''' - This should be used before the decoding while loop to add the received - data to the buffer handle. - - :param message: The most recent packet - ''' - self.__buffer += message
- -
[docs] def getFrame(self): - ''' Get the next frame from the buffer - - :returns: The frame data or '' - ''' - start = self.__hsize - end = self.__header['len'] - 2 - buffer = self.__buffer[start:end] - if end > 0: return buffer - return ''
- -
[docs] def populateResult(self, result): - ''' Populates the modbus result header - - The serial packets do not have any header information - that is copied. - - :param result: The response packet - ''' - result.unit_id = self.__header['uid']
- - #-----------------------------------------------------------------------# - # Public Member Functions - #-----------------------------------------------------------------------# -
[docs] def processIncomingPacket(self, data, callback): - ''' The new packet processing pattern - - This takes in a new request packet, adds it to the current - packet stream, and performs framing on it. That is, checks - for complete messages, and once found, will process all that - exist. This handles the case when we read N + 1 or 1 / N - messages at a time instead of 1. - - The processed and decoded messages are pushed to the callback - function to process and send. - - :param data: The new packet data - :param callback: The function to send results to - ''' - self.addToFrame(data) - while True: - if self.isFrameReady(): - if self.checkFrame(): - self._process(callback) - else: - # Could be an error response - if len(self.__buffer): - # Possible error ??? - self._process(callback, error=True) - else: - if len(self.__buffer): - # Possible error ??? - if self.__header.get('len', 0) < 2: - self._process(callback, error=True) - break
- -
[docs] def buildPacket(self, message): - ''' Creates a ready to send modbus packet - - :param message: The populated request/response to send - ''' - data = message.encode() - packet = struct.pack('>BB', - message.unit_id, - message.function_code) + data - packet += struct.pack(">H", computeCRC(packet)) - return packet
- -
[docs] def _process(self, callback, error=False): - """ - Process incoming packets irrespective error condition - """ - data = self.getRawFrame() if error else self.getFrame() - result = self.decoder.decode(data) - if result is None: - raise ModbusIOException("Unable to decode request") - self.populateResult(result) - self.advanceFrame() - callback(result) # defer or push to a thread?
- -
[docs] def getRawFrame(self): - """ - Returns the complete buffer - """ - return self.__buffer
- - - -#---------------------------------------------------------------------------# -# Modbus ASCII Message -#---------------------------------------------------------------------------# -
[docs]class ModbusAsciiFramer(IModbusFramer): - ''' - Modbus ASCII Frame Controller:: - - [ Start ][Address ][ Function ][ Data ][ LRC ][ End ] - 1c 2c 2c Nc 2c 2c - - * data can be 0 - 2x252 chars - * end is '\\r\\n' (Carriage return line feed), however the line feed - character can be changed via a special command - * start is ':' - - This framer is used for serial transmission. Unlike the RTU protocol, - the data in this framer is transferred in plain text ascii. - ''' - -
[docs] def __init__(self, decoder): - ''' Initializes a new instance of the framer - - :param decoder: The decoder implementation to use - ''' - self.__buffer = b'' - self.__header = {'lrc':'0000', 'len':0, 'uid':0x00} - self.__hsize = 0x02 - self.__start = b':' - self.__end = b"\r\n" - self.decoder = decoder
- - #-----------------------------------------------------------------------# - # Private Helper Functions - #-----------------------------------------------------------------------# -
[docs] def checkFrame(self): - ''' Check and decode the next frame - - :returns: True if we successful, False otherwise - ''' - start = self.__buffer.find(self.__start) - if start == -1: return False - if start > 0 : # go ahead and skip old bad data - self.__buffer = self.__buffer[start:] - start = 0 - - end = self.__buffer.find(self.__end) - if (end != -1): - self.__header['len'] = end - self.__header['uid'] = int(self.__buffer[1:3], 16) - self.__header['lrc'] = int(self.__buffer[end - 2:end], 16) - data = a2b_hex(self.__buffer[start + 1:end - 2]) - return checkLRC(data, self.__header['lrc']) - return False
- -
[docs] def advanceFrame(self): - ''' Skip over the current framed message - This allows us to skip over the current message after we have processed - it or determined that it contains an error. It also has to reset the - current frame header handle - ''' - self.__buffer = self.__buffer[self.__header['len'] + 2:] - self.__header = {'lrc':'0000', 'len':0, 'uid':0x00}
- -
[docs] def isFrameReady(self): - ''' Check if we should continue decode logic - This is meant to be used in a while loop in the decoding phase to let - the decoder know that there is still data in the buffer. - - :returns: True if ready, False otherwise - ''' - return len(self.__buffer) > 1
- -
[docs] def addToFrame(self, message): - ''' Add the next message to the frame buffer - This should be used before the decoding while loop to add the received - data to the buffer handle. - - :param message: The most recent packet - ''' - self.__buffer += message
- -
[docs] def getFrame(self): - ''' Get the next frame from the buffer - - :returns: The frame data or '' - ''' - start = self.__hsize + 1 - end = self.__header['len'] - 2 - buffer = self.__buffer[start:end] - if end > 0: return a2b_hex(buffer) - return b''
- -
[docs] def populateResult(self, result): - ''' Populates the modbus result header - - The serial packets do not have any header information - that is copied. - - :param result: The response packet - ''' - result.unit_id = self.__header['uid']
- - #-----------------------------------------------------------------------# - # Public Member Functions - #-----------------------------------------------------------------------# -
[docs] def processIncomingPacket(self, data, callback): - ''' The new packet processing pattern - - This takes in a new request packet, adds it to the current - packet stream, and performs framing on it. That is, checks - for complete messages, and once found, will process all that - exist. This handles the case when we read N + 1 or 1 / N - messages at a time instead of 1. - - The processed and decoded messages are pushed to the callback - function to process and send. - - :param data: The new packet data - :param callback: The function to send results to - ''' - self.addToFrame(data) - while self.isFrameReady(): - if self.checkFrame(): - result = self.decoder.decode(self.getFrame()) - if result is None: - raise ModbusIOException("Unable to decode response") - self.populateResult(result) - self.advanceFrame() - callback(result) # defer this - else: break
- -
[docs] def buildPacket(self, message): - ''' Creates a ready to send modbus packet - Built off of a modbus request/response - - :param message: The request/response to send - :return: The encoded packet - ''' - encoded = message.encode() - buffer = struct.pack('>BB', message.unit_id, message.function_code) - checksum = computeLRC(encoded + buffer) - - packet = bytearray() - params = (message.unit_id, message.function_code) - packet.extend(self.__start) - packet.extend(('%02x%02x' % params).encode()) - packet.extend(b2a_hex(encoded)) - packet.extend(('%02x' % checksum).encode()) - packet.extend(self.__end) - return bytes(packet).upper()
- - -#---------------------------------------------------------------------------# -# Modbus Binary Message -#---------------------------------------------------------------------------# -
[docs]class ModbusBinaryFramer(IModbusFramer): - ''' - Modbus Binary Frame Controller:: - - [ Start ][Address ][ Function ][ Data ][ CRC ][ End ] - 1b 1b 1b Nb 2b 1b - - * data can be 0 - 2x252 chars - * end is '}' - * start is '{' - - The idea here is that we implement the RTU protocol, however, - instead of using timing for message delimiting, we use start - and end of message characters (in this case { and }). Basically, - this is a binary framer. - - The only case we have to watch out for is when a message contains - the { or } characters. If we encounter these characters, we - simply duplicate them. Hopefully we will not encounter those - characters that often and will save a little bit of bandwitch - without a real-time system. - - Protocol defined by jamod.sourceforge.net. - ''' - -
[docs] def __init__(self, decoder): - ''' Initializes a new instance of the framer - - :param decoder: The decoder implementation to use - ''' - self.__buffer = b'' - self.__header = {'crc':0x0000, 'len':0, 'uid':0x00} - self.__hsize = 0x02 - self.__start = b'\x7b' # { - self.__end = b'\x7d' # } - self.__repeat = [b'}'[0], b'{'[0]] # python3 hack - self.decoder = decoder
- - #-----------------------------------------------------------------------# - # Private Helper Functions - #-----------------------------------------------------------------------# -
[docs] def checkFrame(self): - ''' Check and decode the next frame - - :returns: True if we are successful, False otherwise - ''' - start = self.__buffer.find(self.__start) - if start == -1: return False - if start > 0 : # go ahead and skip old bad data - self.__buffer = self.__buffer[start:] - - end = self.__buffer.find(self.__end) - if (end != -1): - self.__header['len'] = end - self.__header['uid'] = struct.unpack('>B', self.__buffer[1:2]) - self.__header['crc'] = struct.unpack('>H', self.__buffer[end - 2:end])[0] - data = self.__buffer[start + 1:end - 2] - return checkCRC(data, self.__header['crc']) - return False
- -
[docs] def advanceFrame(self): - ''' Skip over the current framed message - This allows us to skip over the current message after we have processed - it or determined that it contains an error. It also has to reset the - current frame header handle - ''' - self.__buffer = self.__buffer[self.__header['len'] + 2:] - self.__header = {'crc':0x0000, 'len':0, 'uid':0x00}
- -
[docs] def isFrameReady(self): - ''' Check if we should continue decode logic - This is meant to be used in a while loop in the decoding phase to let - the decoder know that there is still data in the buffer. - - :returns: True if ready, False otherwise - ''' - return len(self.__buffer) > 1
- -
[docs] def addToFrame(self, message): - ''' Add the next message to the frame buffer - This should be used before the decoding while loop to add the received - data to the buffer handle. - - :param message: The most recent packet - ''' - self.__buffer += message
- -
[docs] def getFrame(self): - ''' Get the next frame from the buffer - - :returns: The frame data or '' - ''' - start = self.__hsize + 1 - end = self.__header['len'] - 2 - buffer = self.__buffer[start:end] - if end > 0: return buffer - return b''
- -
[docs] def populateResult(self, result): - ''' Populates the modbus result header - - The serial packets do not have any header information - that is copied. - - :param result: The response packet - ''' - result.unit_id = self.__header['uid']
- - #-----------------------------------------------------------------------# - # Public Member Functions - #-----------------------------------------------------------------------# -
[docs] def processIncomingPacket(self, data, callback): - ''' The new packet processing pattern - - This takes in a new request packet, adds it to the current - packet stream, and performs framing on it. That is, checks - for complete messages, and once found, will process all that - exist. This handles the case when we read N + 1 or 1 / N - messages at a time instead of 1. - - The processed and decoded messages are pushed to the callback - function to process and send. - - :param data: The new packet data - :param callback: The function to send results to - ''' - self.addToFrame(data) - while self.isFrameReady(): - if self.checkFrame(): - result = self.decoder.decode(self.getFrame()) - if result is None: - raise ModbusIOException("Unable to decode response") - self.populateResult(result) - self.advanceFrame() - callback(result) # defer or push to a thread? - else: break
- -
[docs] def buildPacket(self, message): - ''' Creates a ready to send modbus packet - - :param message: The request/response to send - :returns: The encoded packet - ''' - data = self._preflight(message.encode()) - packet = struct.pack('>BB', - message.unit_id, - message.function_code) + data - packet += struct.pack(">H", computeCRC(packet)) - packet = self.__start + packet + self.__end - return packet
- -
[docs] def _preflight(self, data): - ''' Preflight buffer test - - This basically scans the buffer for start and end - tags and if found, escapes them. - - :param data: The message to escape - :returns: the escaped packet - ''' - array = bytearray() - for d in data: - if d in self.__repeat: - array.append(d) - array.append(d) - return bytes(array)
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - "FifoTransactionManager", - "DictTransactionManager", - "ModbusSocketFramer", "ModbusRtuFramer", - "ModbusAsciiFramer", "ModbusBinaryFramer", -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_modules/pymodbus/utilities.html b/doc/sphinx/html/_modules/pymodbus/utilities.html deleted file mode 100644 index a81af94bf..000000000 --- a/doc/sphinx/html/_modules/pymodbus/utilities.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - pymodbus.utilities — pymodbus 1.3.0.rc2 documentation - - - - - - - - - - - - - - -
-
-
-
- -

Source code for pymodbus.utilities

-'''
-Modbus Utilities
------------------
-
-A collection of utilities for packing data, unpacking
-data computing checksums, and decode checksums.
-'''
-from pymodbus.compat import int2byte, byte2int
-
-
-#---------------------------------------------------------------------------#
-# Helpers
-#---------------------------------------------------------------------------#
-
[docs]def default(value): - ''' - Given a python object, return the default value - of that object. - - :param value: The value to get the default of - :returns: The default value - ''' - return type(value)()
- - -
[docs]def dict_property(store, index): - ''' Helper to create class properties from a dictionary. - Basically this allows you to remove a lot of possible - boilerplate code. - - :param store: The store store to pull from - :param index: The index into the store to close over - :returns: An initialized property set - ''' - if hasattr(store, '__call__'): - getter = lambda self: store(self)[index] - setter = lambda self, value: store(self).__setitem__(index, value) - elif isinstance(store, str): - getter = lambda self: self.__getattribute__(store)[index] - setter = lambda self, value: self.__getattribute__(store).__setitem__( - index, value) - else: - getter = lambda self: store[index] - setter = lambda self, value: store.__setitem__(index, value) - - return property(getter, setter)
- - -#---------------------------------------------------------------------------# -# Bit packing functions -#---------------------------------------------------------------------------# -
[docs]def pack_bitstring(bits): - ''' Creates a string out of an array of bits - - :param bits: A bit array - - example:: - - bits = [False, True, False, True] - result = pack_bitstring(bits) - ''' - ret = b'' - i = packed = 0 - for bit in bits: - if bit: packed += 128 - i += 1 - if i == 8: - ret += int2byte(packed) - i = packed = 0 - else: packed >>= 1 - if i > 0 and i < 8: - packed >>= (7 - i) - ret += int2byte(packed) - return ret
- - -
[docs]def unpack_bitstring(string): - ''' Creates bit array out of a string - - :param string: The modbus data packet to decode - - example:: - - bytes = 'bytes to decode' - result = unpack_bitstring(bytes) - ''' - byte_count = len(string) - bits = [] - for byte in range(byte_count): - value = byte2int(string[byte]) - for _ in range(8): - bits.append((value & 1) == 1) - value >>= 1 - return bits
- - -#---------------------------------------------------------------------------# -# Error Detection Functions -#---------------------------------------------------------------------------# -
[docs]def __generate_crc16_table(): - ''' Generates a crc16 lookup table - - .. note:: This will only be generated once - ''' - result = [] - for byte in range(256): - crc = 0x0000 - for _ in range(8): - if (byte ^ crc) & 0x0001: - crc = (crc >> 1) ^ 0xa001 - else: crc >>= 1 - byte >>= 1 - result.append(crc) - return result
- -__crc16_table = __generate_crc16_table() - - -
[docs]def computeCRC(data): - ''' Computes a crc16 on the passed in string. For modbus, - this is only used on the binary serial protocols (in this - case RTU). - - The difference between modbus's crc16 and a normal crc16 - is that modbus starts the crc value out at 0xffff. - - :param data: The data to create a crc16 of - :returns: The calculated CRC - ''' - crc = 0xffff - for a in data: - idx = __crc16_table[(crc ^ byte2int(a)) & 0xff]; - crc = ((crc >> 8) & 0xff) ^ idx - swapped = ((crc << 8) & 0xff00) | ((crc >> 8) & 0x00ff) - return swapped
- - -
[docs]def checkCRC(data, check): - ''' Checks if the data matches the passed in CRC - - :param data: The data to create a crc16 of - :param check: The CRC to validate - :returns: True if matched, False otherwise - ''' - return computeCRC(data) == check
- - -
[docs]def computeLRC(data): - ''' Used to compute the longitudinal redundancy check - against a string. This is only used on the serial ASCII - modbus protocol. A full description of this implementation - can be found in appendex B of the serial line modbus description. - - :param data: The data to apply a lrc to - :returns: The calculated LRC - - ''' - lrc = sum(byte2int(a) for a in data) & 0xff - lrc = (lrc ^ 0xff) + 1 - return lrc & 0xff
- - -
[docs]def checkLRC(data, check): - ''' Checks if the passed in data matches the LRC - - :param data: The data to calculate - :param check: The LRC to validate - :returns: True if matched, False otherwise - ''' - return computeLRC(data) == check
- - -
[docs]def rtuFrameSize(data, byte_count_pos): - ''' Calculates the size of the frame based on the byte count. - - :param data: The buffer containing the frame. - :param byte_count_pos: The index of the byte count in the buffer. - :returns: The size of the frame. - - The structure of frames with a byte count field is always the - same: - - - first, there are some header fields - - then the byte count field - - then as many data bytes as indicated by the byte count, - - finally the CRC (two bytes). - - To calculate the frame size, it is therefore sufficient to extract - the contents of the byte count field, add the position of this - field, and finally increment the sum by three (one byte for the - byte count field, two for the CRC). - ''' - return byte2int(data[byte_count_pos]) + byte_count_pos + 3
- -#---------------------------------------------------------------------------# -# Exported symbols -#---------------------------------------------------------------------------# -__all__ = [ - 'pack_bitstring', 'unpack_bitstring', 'default', - 'computeCRC', 'checkCRC', 'computeLRC', 'checkLRC', 'rtuFrameSize' -] -
- -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/sphinx/html/_sources/examples/asynchronous-client.rst.txt b/doc/sphinx/html/_sources/examples/asynchronous-client.rst.txt deleted file mode 100644 index 7f5b7d3c3..000000000 --- a/doc/sphinx/html/_sources/examples/asynchronous-client.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -================================================== -Asynchronous Client Example -================================================== - -The asynchronous client functions in the same way as the synchronous -client, however, the asynchronous client uses twisted to return deferreds -for the response result. Just like the synchronous version, it works against -TCP, UDP, serial ASCII, and serial RTU devices. - -Below an asynchronous tcp client is demonstrated running against a -reference server. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/asynchronous-client.py - diff --git a/doc/sphinx/html/_sources/examples/asynchronous-processor.rst.txt b/doc/sphinx/html/_sources/examples/asynchronous-processor.rst.txt deleted file mode 100644 index 4afd8504e..000000000 --- a/doc/sphinx/html/_sources/examples/asynchronous-processor.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -================================================== -Asynchronous Processor Example -================================================== - -Below is a simplified asynchronous client skeleton that was -submitted by a user of the library. It can be used as a guide -for implementing more complex pollers or state machines. - -Feel free to test it against whatever device you currently have -available. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/asynchronous-processor.py - diff --git a/doc/sphinx/html/_sources/examples/asynchronous-server.rst.txt b/doc/sphinx/html/_sources/examples/asynchronous-server.rst.txt deleted file mode 100644 index 14aeef298..000000000 --- a/doc/sphinx/html/_sources/examples/asynchronous-server.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Asynchronous Server Example -================================================== - -.. literalinclude:: ../../../examples/common/asynchronous-server.py - diff --git a/doc/sphinx/html/_sources/examples/bcd-payload.rst.txt b/doc/sphinx/html/_sources/examples/bcd-payload.rst.txt deleted file mode 100644 index a95c5e7a6..000000000 --- a/doc/sphinx/html/_sources/examples/bcd-payload.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Binary Coded Decimal Example -================================================== - -.. literalinclude:: ../../../examples/contrib/bcd-payload.py - diff --git a/doc/sphinx/html/_sources/examples/bottle-frontend.rst.txt b/doc/sphinx/html/_sources/examples/bottle-frontend.rst.txt deleted file mode 100644 index 95507c5a8..000000000 --- a/doc/sphinx/html/_sources/examples/bottle-frontend.rst.txt +++ /dev/null @@ -1,22 +0,0 @@ -================================================== -Bottle Web Frontend Example -================================================== - --------------------------------------------------- -Summary --------------------------------------------------- - -This is a simple example of adding a live REST api -on top of a running pymodbus server. This uses the -bottle microframework to achieve this. - -The example can be hosted under twisted as well as -the bottle internal server and can furthermore be -run behind gunicorn, cherrypi, etc wsgi containers. - --------------------------------------------------- -Main Program --------------------------------------------------- - -.. literalinclude:: ../../../examples/gui/bottle/frontend.py - diff --git a/doc/sphinx/html/_sources/examples/callback-server.rst.txt b/doc/sphinx/html/_sources/examples/callback-server.rst.txt deleted file mode 100644 index e57475216..000000000 --- a/doc/sphinx/html/_sources/examples/callback-server.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Callback Server Example -================================================== - -.. literalinclude:: ../../../examples/common/callback-server.py - diff --git a/doc/sphinx/html/_sources/examples/changing-framers.rst.txt b/doc/sphinx/html/_sources/examples/changing-framers.rst.txt deleted file mode 100644 index 3679aa43f..000000000 --- a/doc/sphinx/html/_sources/examples/changing-framers.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Changing Default Framers -================================================== - -.. literalinclude:: ../../../examples/common/changing-framers.py - diff --git a/doc/sphinx/html/_sources/examples/concurrent-client.rst.txt b/doc/sphinx/html/_sources/examples/concurrent-client.rst.txt deleted file mode 100644 index 1a3799ac9..000000000 --- a/doc/sphinx/html/_sources/examples/concurrent-client.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Concurrent Client Example -================================================== - -.. literalinclude:: ../../../examples/contrib/concurrent-client.py - diff --git a/doc/sphinx/html/_sources/examples/custom-datablock.rst.txt b/doc/sphinx/html/_sources/examples/custom-datablock.rst.txt deleted file mode 100644 index 7139c0f08..000000000 --- a/doc/sphinx/html/_sources/examples/custom-datablock.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Custom Datablock Example -================================================== - -.. literalinclude:: ../../../examples/common/custom-datablock.py - diff --git a/doc/sphinx/html/_sources/examples/database-datastore.rst.txt b/doc/sphinx/html/_sources/examples/database-datastore.rst.txt deleted file mode 100644 index 9186be812..000000000 --- a/doc/sphinx/html/_sources/examples/database-datastore.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Database Datastore Example -================================================== - -.. literalinclude:: ../../../examples/contrib/database-datastore.py - diff --git a/doc/sphinx/html/_sources/examples/gtk-frontend.rst.txt b/doc/sphinx/html/_sources/examples/gtk-frontend.rst.txt deleted file mode 100644 index 3efc72644..000000000 --- a/doc/sphinx/html/_sources/examples/gtk-frontend.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -================================================== -Glade/GTK Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the pygtk -bindings. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/gtk/simulator.py - :language: python - -Glade Layout File --------------------------------------------------- - -The following is the glade layout file that is used by this script: - -.. literalinclude:: ../../../examples/gui/gtk/simulator.glade - :language: xml - diff --git a/doc/sphinx/html/_sources/examples/index.rst.txt b/doc/sphinx/html/_sources/examples/index.rst.txt deleted file mode 100644 index a41f01129..000000000 --- a/doc/sphinx/html/_sources/examples/index.rst.txt +++ /dev/null @@ -1,60 +0,0 @@ - -Pymodbus Library Examples -==================================== - -*What follows is a collection of examples using the pymodbus -library in various ways* - -Example Library Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - asynchronous-client - asynchronous-server - asynchronous-processor - custom-message - custom-datablock - modbus-logging - modbus-payload - modbus-payload-server - synchronous-client - synchronous-client-ext - synchronous-server - performance - updating-server - callback-server - changing-framers - thread-safe-datastore - -Custom Pymodbus Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - redis-datastore - database-datastore - bcd-payload - modicon-payload - message-generator - message-parser - serial-forwarder - modbus-scraper - modbus-simulator - concurrent-client - libmodbus-client - remote-server-context - -Example Frontend Code --------------------------------------------------- - -.. toctree:: - :maxdepth: 2 - - gtk-frontend - tk-frontend - wx-frontend - bottle-frontend - diff --git a/doc/sphinx/html/_sources/examples/libmodbus-client.rst.txt b/doc/sphinx/html/_sources/examples/libmodbus-client.rst.txt deleted file mode 100644 index 17ac8e2cf..000000000 --- a/doc/sphinx/html/_sources/examples/libmodbus-client.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Libmodbus Client Facade -================================================== - -.. literalinclude:: ../../../examples/contrib/libmodbus-client.py - diff --git a/doc/sphinx/html/_sources/examples/message-generator.rst.txt b/doc/sphinx/html/_sources/examples/message-generator.rst.txt deleted file mode 100644 index 605554c45..000000000 --- a/doc/sphinx/html/_sources/examples/message-generator.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -================================================== -Modbus Message Generator Example -================================================== - -This is an example of a utility that will build -examples of modbus messages in all the available -formats in the pymodbus package. - --------------------------------------------------- -Program Source --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/message-generator.py - --------------------------------------------------- -Example Request Messages --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/tx-messages - --------------------------------------------------- -Example Response Messages --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/rx-messages - diff --git a/doc/sphinx/html/_sources/examples/message-parser.rst.txt b/doc/sphinx/html/_sources/examples/message-parser.rst.txt deleted file mode 100644 index 0bbaee9fc..000000000 --- a/doc/sphinx/html/_sources/examples/message-parser.rst.txt +++ /dev/null @@ -1,55 +0,0 @@ -================================================== -Modbus Message Parsing Example -================================================== - -This is an example of a parser to decode raw messages -to a readable description. It will attempt to decode -a message to the request and response version of a -message if possible. Here is an example output:: - - $./message-parser.py -b -m 000112340006ff076d - ================================================================================ - Decoding Message 000112340006ff076d - ================================================================================ - ServerDecoder - -------------------------------------------------------------------------------- - name = ReadExceptionStatusRequest - check = 0x0 - unit_id = 0xff - transaction_id = 0x1 - protocol_id = 0x1234 - documentation = - This function code is used to read the contents of eight Exception Status - outputs in a remote device. The function provides a simple method for - accessing this information, because the Exception Output references are - known (no output reference is needed in the function). - - ClientDecoder - -------------------------------------------------------------------------------- - name = ReadExceptionStatusResponse - check = 0x0 - status = 0x6d - unit_id = 0xff - transaction_id = 0x1 - protocol_id = 0x1234 - documentation = - The normal response contains the status of the eight Exception Status - outputs. The outputs are packed into one data byte, with one bit - per output. The status of the lowest output reference is contained - in the least significant bit of the byte. The contents of the eight - Exception Status outputs are device specific. - --------------------------------------------------- -Program Source --------------------------------------------------- - -.. literalinclude:: ../../../examples/contrib/message-parser.py - --------------------------------------------------- -Example Messages --------------------------------------------------- - -See the documentation for the message generator -for a collection of messages that can be parsed -by this utility. - diff --git a/doc/sphinx/html/_sources/examples/modbus-payload-server.rst.txt b/doc/sphinx/html/_sources/examples/modbus-payload-server.rst.txt deleted file mode 100644 index 9144f0f53..000000000 --- a/doc/sphinx/html/_sources/examples/modbus-payload-server.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Payload Server Context Building Example -================================================== - -.. literalinclude:: ../../../examples/common/modbus-payload-server.py - diff --git a/doc/sphinx/html/_sources/examples/modbus-payload.rst.txt b/doc/sphinx/html/_sources/examples/modbus-payload.rst.txt deleted file mode 100644 index 79e46dfdb..000000000 --- a/doc/sphinx/html/_sources/examples/modbus-payload.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modbus Payload Building/Decoding Example -================================================== - -.. literalinclude:: ../../../examples/common/modbus-payload.py - diff --git a/doc/sphinx/html/_sources/examples/modbus-simulator.rst.txt b/doc/sphinx/html/_sources/examples/modbus-simulator.rst.txt deleted file mode 100644 index 5adcee5ee..000000000 --- a/doc/sphinx/html/_sources/examples/modbus-simulator.rst.txt +++ /dev/null @@ -1,5 +0,0 @@ -================================================== -Modbus Simulator Example -================================================== - -.. literalinclude:: ../../../examples/contrib/modbus-simulator.py diff --git a/doc/sphinx/html/_sources/examples/modicon-payload.rst.txt b/doc/sphinx/html/_sources/examples/modicon-payload.rst.txt deleted file mode 100644 index 997a12f50..000000000 --- a/doc/sphinx/html/_sources/examples/modicon-payload.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Modicon Encoded Example -================================================== - -.. literalinclude:: ../../../examples/contrib/modicon-payload.py - diff --git a/doc/sphinx/html/_sources/examples/performance.rst.txt b/doc/sphinx/html/_sources/examples/performance.rst.txt deleted file mode 100644 index 93185bdea..000000000 --- a/doc/sphinx/html/_sources/examples/performance.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -================================================== -Synchronous Client Performance Check -================================================== - -Below is a quick example of how to test the performance of a tcp modbus -device using the synchronous tcp client. If you do not have a device -to test with, feel free to run a pymodbus server instance or start -the reference tester in the tools directory. - -.. literalinclude:: ../../../examples/common/performance.py - diff --git a/doc/sphinx/html/_sources/examples/redis-datastore.rst.txt b/doc/sphinx/html/_sources/examples/redis-datastore.rst.txt deleted file mode 100644 index bb5554e04..000000000 --- a/doc/sphinx/html/_sources/examples/redis-datastore.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Redis Datastore Example -================================================== - -.. literalinclude:: ../../../examples/contrib/redis-datastore.py - diff --git a/doc/sphinx/html/_sources/examples/remote-server-context.rst.txt b/doc/sphinx/html/_sources/examples/remote-server-context.rst.txt deleted file mode 100644 index 2a2ac3c05..000000000 --- a/doc/sphinx/html/_sources/examples/remote-server-context.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Remote Single Server Context -================================================== - -.. literalinclude:: ../../../examples/contrib/remote_server_context.py - diff --git a/doc/sphinx/html/_sources/examples/serial-forwarder.rst.txt b/doc/sphinx/html/_sources/examples/serial-forwarder.rst.txt deleted file mode 100644 index 87f6e0a0c..000000000 --- a/doc/sphinx/html/_sources/examples/serial-forwarder.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Synchronous Serial Forwarder -================================================== - -.. literalinclude:: ../../../examples/contrib/serial-forwarder.py - diff --git a/doc/sphinx/html/_sources/examples/synchronous-client-ext.rst.txt b/doc/sphinx/html/_sources/examples/synchronous-client-ext.rst.txt deleted file mode 100644 index 5012ec8b0..000000000 --- a/doc/sphinx/html/_sources/examples/synchronous-client-ext.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Synchronous Client Extended Example -================================================== - -.. literalinclude:: ../../../examples/common/synchronous-client-ext.py - diff --git a/doc/sphinx/html/_sources/examples/synchronous-client.rst.txt b/doc/sphinx/html/_sources/examples/synchronous-client.rst.txt deleted file mode 100644 index b90563402..000000000 --- a/doc/sphinx/html/_sources/examples/synchronous-client.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -================================================== -Synchronous Client Example -================================================== - -It should be noted that each request will block waiting for the result. If asynchronous -behaviour is required, please use the asynchronous client implementations. -The synchronous client, works against TCP, UDP, serial ASCII, and serial RTU devices. - -The synchronous client exposes the most popular methods of the modbus protocol, -however, if you want to execute other methods against the device, -simple create a request instance and pass it to the execute method. - -Below an synchronous tcp client is demonstrated running against a -reference server. If you do not have a device to test with, feel free -to run a pymodbus server instance or start the reference tester in -the tools directory. - -.. literalinclude:: ../../../examples/common/synchronous-client.py - diff --git a/doc/sphinx/html/_sources/examples/synchronous-server.rst.txt b/doc/sphinx/html/_sources/examples/synchronous-server.rst.txt deleted file mode 100644 index 1db715d7f..000000000 --- a/doc/sphinx/html/_sources/examples/synchronous-server.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Synchronous Server Example -================================================== - -.. literalinclude:: ../../../examples/common/synchronous-server.py - diff --git a/doc/sphinx/html/_sources/examples/thread-safe-datastore.rst.txt b/doc/sphinx/html/_sources/examples/thread-safe-datastore.rst.txt deleted file mode 100644 index 7a965a3f4..000000000 --- a/doc/sphinx/html/_sources/examples/thread-safe-datastore.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -================================================== -Thread Safe Datastore Example -================================================== - -.. literalinclude:: ../../../examples/contrib/thread_safe_datastore.py - diff --git a/doc/sphinx/html/_sources/examples/tk-frontend.rst.txt b/doc/sphinx/html/_sources/examples/tk-frontend.rst.txt deleted file mode 100644 index 1849d0abc..000000000 --- a/doc/sphinx/html/_sources/examples/tk-frontend.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -================================================== -TK Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the native tk -toolkit. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/tk/simulator.py - diff --git a/doc/sphinx/html/_sources/examples/wx-frontend.rst.txt b/doc/sphinx/html/_sources/examples/wx-frontend.rst.txt deleted file mode 100644 index 5d68142c0..000000000 --- a/doc/sphinx/html/_sources/examples/wx-frontend.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -================================================== -WX Frontend Example -================================================== - -Main Program --------------------------------------------------- - -This is an example simulator that is written using the python wx -bindings. Although it currently does not have a frontend for -modifying the context values, it does allow one to expose N -virtual modbus devices to a network which is useful for testing -data center monitoring tools. - -.. note:: The virtual networking code will only work on linux - -.. literalinclude:: ../../../examples/gui/wx/simulator.py - diff --git a/doc/sphinx/html/_sources/index.rst.txt b/doc/sphinx/html/_sources/index.rst.txt deleted file mode 100644 index 7017018f2..000000000 --- a/doc/sphinx/html/_sources/index.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -.. PyModbus documentation master file, created by - sphinx-quickstart on Tue Apr 14 19:11:16 2009. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to PyModbus's documentation! -==================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - - examples/index.rst - library/index.rst - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/doc/sphinx/html/_sources/library/async-client.rst.txt b/doc/sphinx/html/_sources/library/async-client.rst.txt deleted file mode 100644 index c325706dc..000000000 --- a/doc/sphinx/html/_sources/library/async-client.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -:mod:`client.async` --- Twisted Async Modbus Client -==================================================== - -.. module:: client.async - :synopsis: Twisted Asynchronous Modbus Client - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation ------------------- - -.. automodule:: pymodbus.client.async - -.. autoclass:: ModbusClientProtocol - :members: - -.. autoclass:: ModbusClientFactory - :members: diff --git a/doc/sphinx/html/_sources/library/async-server.rst.txt b/doc/sphinx/html/_sources/library/async-server.rst.txt deleted file mode 100644 index 8f2dcdb7b..000000000 --- a/doc/sphinx/html/_sources/library/async-server.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -:mod:`server.async` --- Twisted Asynchronous Modbus Server -============================================================ - -.. module:: server.async - :synopsis: Twisted Asynchronous Modbus Server - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.server.async - -.. autoclass:: ModbusTcpProtocol - :members: - -.. autoclass:: ModbusUdpProtocol - :members: - -.. autoclass:: ModbusServerFactory - :members: - -.. autofunction:: StartTcpServer - -.. autofunction:: StartUdpServer - -.. autofunction:: StartSerialServer - diff --git a/doc/sphinx/html/_sources/library/bit-read-message.rst.txt b/doc/sphinx/html/_sources/library/bit-read-message.rst.txt deleted file mode 100644 index 9ea4b0cfa..000000000 --- a/doc/sphinx/html/_sources/library/bit-read-message.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -:mod:`bit_read_message` --- Bit Read Modbus Messages -============================================================ - -.. module:: bit_read_message - :synopsis: Bit Read Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.bit_read_message - -.. autoclass:: ReadBitsRequestBase - :members: - -.. autoclass:: ReadBitsResponseBase - :members: - -.. autoclass:: ReadCoilsRequest - :members: - -.. autoclass:: ReadCoilsResponse - :members: - -.. autoclass:: ReadDiscreteInputsRequest - :members: - -.. autoclass:: ReadDiscreteInputsResponse - :members: - diff --git a/doc/sphinx/html/_sources/library/bit-write-message.rst.txt b/doc/sphinx/html/_sources/library/bit-write-message.rst.txt deleted file mode 100644 index 6a73f9a46..000000000 --- a/doc/sphinx/html/_sources/library/bit-write-message.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -:mod:`bit_write_message` --- Bit Write Modbus Messages -============================================================ - -.. module:: bit_write_message - :synopsis: Bit Write Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.bit_write_message - -.. autoclass:: WriteSingleCoilRequest - :members: - -.. autoclass:: WriteSingleCoilResponse - :members: - -.. autoclass:: WriteMultipleCoilsRequest - :members: - -.. autoclass:: WriteMultipleCoilsResponse - :members: - diff --git a/doc/sphinx/html/_sources/library/client-common.rst.txt b/doc/sphinx/html/_sources/library/client-common.rst.txt deleted file mode 100644 index 5cca7ada3..000000000 --- a/doc/sphinx/html/_sources/library/client-common.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -:mod:`client.common` --- Twisted Async Modbus Client -==================================================== - -.. module:: client.common - :synopsis: Modbus common client clode - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation ------------------- - -.. automodule:: pymodbus.client.common - -.. autoclass:: ModbusClientMixin - :members: diff --git a/doc/sphinx/html/_sources/library/constants.rst.txt b/doc/sphinx/html/_sources/library/constants.rst.txt deleted file mode 100644 index a99e207c6..000000000 --- a/doc/sphinx/html/_sources/library/constants.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -:mod:`constants` --- Modbus Default Values -============================================================ - -.. module:: constants - :synopsis: Modbus Default Values - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.constants - -.. autoclass:: Defaults - :members: - -.. autoclass:: ModbusStatus - :members: - -.. autoclass:: Endian - :members: - -.. autoclass:: ModbusPlusOperation - :members: - -.. autoclass:: DeviceInformation - :members: - -.. autoclass:: MoreData - :members: diff --git a/doc/sphinx/html/_sources/library/datastore/context.rst.txt b/doc/sphinx/html/_sources/library/datastore/context.rst.txt deleted file mode 100644 index 16a62e2e1..000000000 --- a/doc/sphinx/html/_sources/library/datastore/context.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -:mod:`context` --- Modbus Server Contexts -============================================================ - -.. module:: context - :synopsis: Modbus Server Contexts - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.datastore.context - -.. autoclass:: ModbusSlaveContext - :members: - -.. autoclass:: ModbusServerContext - :members: - diff --git a/doc/sphinx/html/_sources/library/datastore/index.rst.txt b/doc/sphinx/html/_sources/library/datastore/index.rst.txt deleted file mode 100644 index 6ea14b24e..000000000 --- a/doc/sphinx/html/_sources/library/datastore/index.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ - -Server Datastores and Contexts -==================================== - -*The following are the API documentation strings taken -from the sourcecode* - -.. toctree:: - :maxdepth: 2 - - store.rst - context.rst - remote.rst diff --git a/doc/sphinx/html/_sources/library/datastore/remote.rst.txt b/doc/sphinx/html/_sources/library/datastore/remote.rst.txt deleted file mode 100644 index 551f0b17b..000000000 --- a/doc/sphinx/html/_sources/library/datastore/remote.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -:mod:`remote` --- Remote Slave Context -============================================================ - -.. module:: remote - :synopsis: Remote Slave Context - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.datastore.remote - -.. autoclass:: RemoteSlaveContext - :members: diff --git a/doc/sphinx/html/_sources/library/datastore/store.rst.txt b/doc/sphinx/html/_sources/library/datastore/store.rst.txt deleted file mode 100644 index 1a5ff2d67..000000000 --- a/doc/sphinx/html/_sources/library/datastore/store.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -:mod:`store` --- Datastore for Modbus Server Context -============================================================ - -.. module:: store - :synopsis: Datastore for Modbus Server Context - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.datastore.store - -.. autoclass:: BaseModbusDataBlock - :members: - -.. autoclass:: ModbusSequentialDataBlock - :members: - -.. autoclass:: ModbusSparseDataBlock - :members: - diff --git a/doc/sphinx/html/_sources/library/device.rst.txt b/doc/sphinx/html/_sources/library/device.rst.txt deleted file mode 100644 index 59b996de4..000000000 --- a/doc/sphinx/html/_sources/library/device.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -:mod:`device` --- Modbus Device Representation -============================================================ - -.. module:: device - :synopsis: Modbus Device Representation - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.device - -.. autoclass:: ModbusAccessControl - :members: - -.. autoclass:: ModbusPlusStatistics - :members: - -.. autoclass:: ModbusDeviceIdentification - :members: - -.. autoclass:: DeviceInformationFactory - :members: - -.. autoclass:: ModbusControlBlock - :members: diff --git a/doc/sphinx/html/_sources/library/diag-message.rst.txt b/doc/sphinx/html/_sources/library/diag-message.rst.txt deleted file mode 100644 index 5500a1cbc..000000000 --- a/doc/sphinx/html/_sources/library/diag-message.rst.txt +++ /dev/null @@ -1,128 +0,0 @@ -:mod:`diag_message` --- Diagnostic Modbus Messages -============================================================ - -.. module:: diag_message - :synopsis: Diagnostic Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.diag_message - -.. autoclass:: DiagnosticStatusRequest - :members: - -.. autoclass:: DiagnosticStatusResponse - :members: - -.. autoclass:: DiagnosticStatusSimpleRequest - :members: - -.. autoclass:: DiagnosticStatusSimpleResponse - :members: - -.. autoclass:: ReturnQueryDataRequest - :members: - -.. autoclass:: ReturnQueryDataResponse - :members: - -.. autoclass:: RestartCommunicationsOptionRequest - :members: - -.. autoclass:: RestartCommunicationsOptionResponse - :members: - -.. autoclass:: ReturnDiagnosticRegisterRequest - :members: - -.. autoclass:: ReturnDiagnosticRegisterResponse - :members: - -.. autoclass:: ChangeAsciiInputDelimiterRequest - :members: - -.. autoclass:: ChangeAsciiInputDelimiterResponse - :members: - -.. autoclass:: ForceListenOnlyModeRequest - :members: - -.. autoclass:: ForceListenOnlyModeResponse - :members: - -.. autoclass:: ClearCountersRequest - :members: - -.. autoclass:: ClearCountersResponse - :members: - -.. autoclass:: ReturnBusMessageCountRequest - :members: - -.. autoclass:: ReturnBusMessageCountResponse - :members: - -.. autoclass:: ReturnBusCommunicationErrorCountRequest - :members: - -.. autoclass:: ReturnBusCommunicationErrorCountResponse - :members: - -.. autoclass:: ReturnBusExceptionErrorCountRequest - :members: - -.. autoclass:: ReturnBusExceptionErrorCountResponse - :members: - -.. autoclass:: ReturnSlaveMessageCountRequest - :members: - -.. autoclass:: ReturnSlaveMessageCountResponse - :members: - -.. autoclass:: ReturnSlaveNoResponseCountRequest - :members: - -.. autoclass:: ReturnSlaveNoReponseCountResponse - :members: - -.. autoclass:: ReturnSlaveNAKCountRequest - :members: - -.. autoclass:: ReturnSlaveNAKCountResponse - :members: - -.. autoclass:: ReturnSlaveBusyCountRequest - :members: - -.. autoclass:: ReturnSlaveBusyCountResponse - :members: - -.. autoclass:: ReturnSlaveBusCharacterOverrunCountRequest - :members: - -.. autoclass:: ReturnSlaveBusCharacterOverrunCountResponse - :members: - -.. autoclass:: ReturnIopOverrunCountRequest - :members: - -.. autoclass:: ReturnIopOverrunCountResponse - :members: - -.. autoclass:: ClearOverrunCountRequest - :members: - -.. autoclass:: ClearOverrunCountResponse - :members: - -.. autoclass:: GetClearModbusPlusRequest - :members: - -.. autoclass:: GetClearModbusPlusResponse - :members: - diff --git a/doc/sphinx/html/_sources/library/events.rst.txt b/doc/sphinx/html/_sources/library/events.rst.txt deleted file mode 100644 index 5bc4d466e..000000000 --- a/doc/sphinx/html/_sources/library/events.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -:mod:`events` --- Events Used in PyModbus -============================================================ - -.. module:: events - :synopsis: Events Used in PyModbus - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.events - -.. autoclass:: ModbusEvent - :members: - -.. autoclass:: RemoteReceiveEvent - :members: - -.. autoclass:: RemoteSendEvent - :members: - -.. autoclass:: EnteredListenModeEvent - :members: - -.. autoclass:: CommunicationRestartEvent - :members: diff --git a/doc/sphinx/html/_sources/library/exceptions.rst.txt b/doc/sphinx/html/_sources/library/exceptions.rst.txt deleted file mode 100644 index 03c05ea71..000000000 --- a/doc/sphinx/html/_sources/library/exceptions.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -:mod:`exceptions` --- Exceptions Used in PyModbus -============================================================ - -.. module:: exceptions - :synopsis: Exceptions Used in PyModbus - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.exceptions - -.. autoclass:: ModbusException - :members: - -.. autoclass:: ModbusIOException - :members: - -.. autoclass:: ParameterException - :members: - -.. autoclass:: NotImplementedException - :members: - diff --git a/doc/sphinx/html/_sources/library/factory.rst.txt b/doc/sphinx/html/_sources/library/factory.rst.txt deleted file mode 100644 index 5f0fcc83a..000000000 --- a/doc/sphinx/html/_sources/library/factory.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -:mod:`factory` --- Request/Response Decoders -============================================================ - -.. module:: factory - :synopsis: Request/Response Decoders - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.factory - -.. autoclass:: ServerDecoder - :members: - -.. autoclass:: ClientDecoder - :members: diff --git a/doc/sphinx/html/_sources/library/file-message.rst.txt b/doc/sphinx/html/_sources/library/file-message.rst.txt deleted file mode 100644 index e5d0b666d..000000000 --- a/doc/sphinx/html/_sources/library/file-message.rst.txt +++ /dev/null @@ -1,34 +0,0 @@ -:mod:`file_message` --- File Modbus Messages -============================================================ - -.. module:: file_message - :synopsis: File Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.file_message - -.. autoclass:: FileRecord - :members: - -.. autoclass:: ReadFileRecordRequest - :members: - -.. autoclass:: ReadFileRecordResponse - :members: - -.. autoclass:: WriteFileRecordRequest - :members: - -.. autoclass:: WriteFileRecordResponse - :members: - -.. autoclass:: ReadFifoQueueRequest - :members: - -.. autoclass:: ReadFifoQueueResponse - :members: diff --git a/doc/sphinx/html/_sources/library/index.rst.txt b/doc/sphinx/html/_sources/library/index.rst.txt deleted file mode 100644 index f21e8e4a7..000000000 --- a/doc/sphinx/html/_sources/library/index.rst.txt +++ /dev/null @@ -1,35 +0,0 @@ - -Pymodbus Library API Documentation -==================================== - -*The following are the API documentation strings taken -from the sourcecode* - -.. toctree:: - :maxdepth: 2 - - bit-read-message.rst - bit-write-message.rst - client-common.rst - sync-client.rst - async-client.rst - constants.rst - datastore/index.rst - diag-message.rst - device.rst - factory.rst - interfaces.rst - exceptions.rst - other-message.rst - mei-message.rst - file-message.rst - events.rst - payload.rst - pdu.rst - pymodbus.rst - register-read-message.rst - register-write-message.rst - sync-server.rst - async-server.rst - transaction.rst - utilities.rst diff --git a/doc/sphinx/html/_sources/library/interfaces.rst.txt b/doc/sphinx/html/_sources/library/interfaces.rst.txt deleted file mode 100644 index cb10d0c62..000000000 --- a/doc/sphinx/html/_sources/library/interfaces.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -:mod:`interfaces` --- System Interfaces -============================================================ - -.. module:: interfaces - :synopsis: System Interfaces - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.interfaces - -.. autoclass:: Singleton - :members: - -.. autoclass:: IModbusDecoder - :members: - -.. autoclass:: IModbusFramer - :members: - -.. autoclass:: IModbusSlaveContext - :members: - -.. autoclass:: IPayloadBuilder - :members: diff --git a/doc/sphinx/html/_sources/library/mei-message.rst.txt b/doc/sphinx/html/_sources/library/mei-message.rst.txt deleted file mode 100644 index d75809445..000000000 --- a/doc/sphinx/html/_sources/library/mei-message.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -:mod:`mei_message` --- MEI Modbus Messages -============================================================ - -.. module:: mei_message - :synopsis: MEI Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.mei_message - -.. autoclass:: ReadDeviceInformationRequest - :members: - -.. autoclass:: ReadDeviceInformationResponse - :members: diff --git a/doc/sphinx/html/_sources/library/other-message.rst.txt b/doc/sphinx/html/_sources/library/other-message.rst.txt deleted file mode 100644 index 3baf24888..000000000 --- a/doc/sphinx/html/_sources/library/other-message.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -:mod:`other_message` --- Other Modbus Messages -============================================================ - -.. module:: other_message - :synopsis: Other Modbus Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.other_message - -.. autoclass:: ReadExceptionStatusRequest - :members: - -.. autoclass:: ReadExceptionStatusResponse - :members: - -.. autoclass:: GetCommEventCounterRequest - :members: - -.. autoclass:: GetCommEventCounterResponse - :members: - -.. autoclass:: ReportSlaveIdRequest - :members: - -.. autoclass:: ReportSlaveIdResponse - :members: diff --git a/doc/sphinx/html/_sources/library/payload.rst.txt b/doc/sphinx/html/_sources/library/payload.rst.txt deleted file mode 100644 index 4083aa2ca..000000000 --- a/doc/sphinx/html/_sources/library/payload.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -:mod:`payload` --- Modbus Payload Utilities -============================================================ - -.. module:: payload - :synopsis: Modbus Payload Utilities - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.payload - -.. autoclass:: BinaryPayloadBuilder - :members: - -.. autoclass:: BinaryPayloadDecoder - :members: diff --git a/doc/sphinx/html/_sources/library/pdu.rst.txt b/doc/sphinx/html/_sources/library/pdu.rst.txt deleted file mode 100644 index 46b8fd456..000000000 --- a/doc/sphinx/html/_sources/library/pdu.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -:mod:`pdu` --- Base Structures -============================================================ - -.. module:: pdu - :synopsis: Base Structures - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.pdu - -.. autoclass:: ModbusPDU - :members: - -.. autoclass:: ModbusRequest - :members: - -.. autoclass:: ModbusResponse - :members: - -.. autoclass:: ModbusExceptions - :members: - -.. autoclass:: ExceptionResponse - :members: - -.. autoclass:: IllegalFunctionRequest - :members: - diff --git a/doc/sphinx/html/_sources/library/pymodbus.rst.txt b/doc/sphinx/html/_sources/library/pymodbus.rst.txt deleted file mode 100644 index 54719825d..000000000 --- a/doc/sphinx/html/_sources/library/pymodbus.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -:mod:`pymodbus` --- Pymodbus Library -============================================================ - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -.. automodule:: pymodbus diff --git a/doc/sphinx/html/_sources/library/register-read-message.rst.txt b/doc/sphinx/html/_sources/library/register-read-message.rst.txt deleted file mode 100644 index aeb4c3402..000000000 --- a/doc/sphinx/html/_sources/library/register-read-message.rst.txt +++ /dev/null @@ -1,38 +0,0 @@ -:mod:`register_read_message` --- Register Read Messages -============================================================ - -.. module:: register_read_message - :synopsis: Register Read Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.register_read_message - -.. autoclass:: ReadRegistersRequestBase - :members: - -.. autoclass:: ReadRegistersResponseBase - :members: - -.. autoclass:: ReadHoldingRegistersRequest - :members: - -.. autoclass:: ReadHoldingRegistersResponse - :members: - -.. autoclass:: ReadInputRegistersRequest - :members: - -.. autoclass:: ReadInputRegistersResponse - :members: - -.. autoclass:: ReadWriteMultipleRegistersRequest - :members: - -.. autoclass:: ReadWriteMultipleRegistersResponse - :members: - diff --git a/doc/sphinx/html/_sources/library/register-write-message.rst.txt b/doc/sphinx/html/_sources/library/register-write-message.rst.txt deleted file mode 100644 index 71a917646..000000000 --- a/doc/sphinx/html/_sources/library/register-write-message.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -:mod:`register_write_message` --- Register Write Messages -============================================================ - -.. module:: register_write_message - :synopsis: Register Write Messages - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.register_write_message - -.. autoclass:: WriteSingleRegisterRequest - :members: - -.. autoclass:: WriteSingleRegisterResponse - :members: - -.. autoclass:: WriteMultipleRegistersRequest - :members: - -.. autoclass:: WriteMultipleRegistersResponse - :members: - diff --git a/doc/sphinx/html/_sources/library/sync-client.rst.txt b/doc/sphinx/html/_sources/library/sync-client.rst.txt deleted file mode 100644 index 5f60a3a50..000000000 --- a/doc/sphinx/html/_sources/library/sync-client.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -:mod:`client.sync` --- Twisted Synchronous Modbus Client -========================================================= - -.. module:: client.sync - :synopsis: Twisted Synchronous Modbus Client - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation ------------------- - -.. automodule:: pymodbus.client.sync - -.. autoclass:: BaseModbusClient - :members: - -.. autoclass:: ModbusTcpClient - :members: - -.. autoclass:: ModbusUdpClient - :members: - -.. autoclass:: ModbusSerialClient - :members: - diff --git a/doc/sphinx/html/_sources/library/sync-server.rst.txt b/doc/sphinx/html/_sources/library/sync-server.rst.txt deleted file mode 100644 index 3dcf9e04d..000000000 --- a/doc/sphinx/html/_sources/library/sync-server.rst.txt +++ /dev/null @@ -1,40 +0,0 @@ -:mod:`server.sync` --- Twisted Synchronous Modbus Server -============================================================ - -.. module:: server.sync - :synopsis: Twisted Synchronous Modbus Server - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.server.sync - -.. autoclass:: ModbusBaseRequestHandler - :members: - -.. autoclass:: ModbusSingleRequestHandler - :members: - -.. autoclass:: ModbusConnectedRequestHandler - :members: - -.. autoclass:: ModbusDisconnectedRequestHandler - :members: - -.. autoclass:: ModbusTcpServer - :members: - -.. autoclass:: ModbusUdpServer - :members: - -.. autoclass:: ModbusSerialServer - :members: - -.. autofunction:: StartTcpServer - -.. autofunction:: StartUdpServer - -.. autofunction:: StartSerialServer diff --git a/doc/sphinx/html/_sources/library/transaction.rst.txt b/doc/sphinx/html/_sources/library/transaction.rst.txt deleted file mode 100644 index b6ee89a8a..000000000 --- a/doc/sphinx/html/_sources/library/transaction.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -:mod:`transaction` --- Transaction Controllers for Pymodbus -============================================================ - -.. module:: transaction - :synopsis: Transaction controllers for pymodbus - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.transaction - -.. autoclass:: DictTransactionManager - :members: - -.. autoclass:: FifoTransactionManager - :members: - -.. autoclass:: ModbusSocketFramer - :members: - -.. autoclass:: ModbusRtuFramer - :members: - -.. autoclass:: ModbusAsciiFramer - :members: - -.. autoclass:: ModbusBinaryFramer - :members: diff --git a/doc/sphinx/html/_sources/library/utilities.rst.txt b/doc/sphinx/html/_sources/library/utilities.rst.txt deleted file mode 100644 index d8e78527e..000000000 --- a/doc/sphinx/html/_sources/library/utilities.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -:mod:`utilities` --- Extra Modbus Helpers -========================================== - -.. module:: utilities - :synopsis: Extra Modbus Helpers - -.. moduleauthor:: Galen Collins -.. sectionauthor:: Galen Collins - -API Documentation -------------------- - -.. automodule:: pymodbus.utilities - -.. autofunction:: default - -.. autofunction:: dict_property - -.. autofunction:: pack_bitstring - -.. autofunction:: unpack_bitstring - -.. autofunction:: __generate_crc16_table - -.. autofunction:: computeCRC - -.. autofunction:: checkCRC - -.. autofunction:: computeLRC - -.. autofunction:: checkLRC - -.. autofunction:: rtuFrameSize diff --git a/doc/sphinx/html/_static/README b/doc/sphinx/html/_static/README deleted file mode 100644 index 06016c7ce..000000000 --- a/doc/sphinx/html/_static/README +++ /dev/null @@ -1 +0,0 @@ -include any html static content here diff --git a/doc/sphinx/html/_static/ajax-loader.gif b/doc/sphinx/html/_static/ajax-loader.gif deleted file mode 100644 index 61faf8cab23993bd3e1560bff0668bd628642330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN diff --git a/doc/sphinx/html/_static/basic.css b/doc/sphinx/html/_static/basic.css deleted file mode 100644 index dc88b5a2d..000000000 --- a/doc/sphinx/html/_static/basic.css +++ /dev/null @@ -1,632 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox input[type="text"] { - width: 170px; -} - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - border: 0; - border-collapse: collapse; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dl { - margin-bottom: 15px; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, .highlighted { - background-color: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - margin-left: 0.5em; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -div.code-block-caption { - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -div.code-block-caption + div > div.highlight > pre { - margin-top: 0; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - padding: 1em 1em 0; -} - -div.literal-block-wrapper div.highlight { - margin: 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: relative; - left: 0px; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/doc/sphinx/html/_static/classic.css b/doc/sphinx/html/_static/classic.css deleted file mode 100644 index 22fa0bde7..000000000 --- a/doc/sphinx/html/_static/classic.css +++ /dev/null @@ -1,261 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #11303d; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - background-color: #1c4e63; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - background-color: #133f52; - line-height: 30px; - color: #ffffff; -} - -div.related a { - color: #ffffff; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #ffffff; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #ffffff; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - color: #98dbcc; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #355f7c; - text-decoration: none; -} - -a:visited { - color: #355f7c; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - color: #20435c; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: #eeffcc; - color: #333333; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} \ No newline at end of file diff --git a/doc/sphinx/html/_static/comment-bright.png b/doc/sphinx/html/_static/comment-bright.png deleted file mode 100644 index 15e27edb12ac25701ac0ac21b97b52bb4e45415e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ diff --git a/doc/sphinx/html/_static/default.css b/doc/sphinx/html/_static/default.css deleted file mode 100644 index 81b936363..000000000 --- a/doc/sphinx/html/_static/default.css +++ /dev/null @@ -1 +0,0 @@ -@import url("classic.css"); diff --git a/doc/sphinx/html/_static/doctools.js b/doc/sphinx/html/_static/doctools.js deleted file mode 100644 index 565497723..000000000 --- a/doc/sphinx/html/_static/doctools.js +++ /dev/null @@ -1,287 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s == 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node) { - if (node.nodeType == 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span = document.createElement("span"); - span.className = className; - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this); - }); - } - } - return this.each(function() { - highlight(this); - }); -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated == 'undefined') - return string; - return (typeof translated == 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated == 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) == 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this == '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keyup(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); \ No newline at end of file diff --git a/doc/sphinx/html/_static/down-pressed.png b/doc/sphinx/html/_static/down-pressed.png deleted file mode 100644 index 5756c8cad8854722893dc70b9eb4bb0400343a39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl diff --git a/doc/sphinx/html/_static/down.png b/doc/sphinx/html/_static/down.png deleted file mode 100644 index 1b3bdad2ceffae91cee61b32f3295f9bbe646e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* diff --git a/doc/sphinx/html/_static/file.png b/doc/sphinx/html/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/doc/sphinx/html/_static/jquery-3.1.0.js b/doc/sphinx/html/_static/jquery-3.1.0.js deleted file mode 100644 index f2fc27478..000000000 --- a/doc/sphinx/html/_static/jquery-3.1.0.js +++ /dev/null @@ -1,10074 +0,0 @@ -/*eslint-disable no-unused-vars*/ -/*! - * jQuery JavaScript Library v3.1.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-07-07T21:44Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.1.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = jQuery.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.0 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-01-04 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - // Known :disabled false positives: - // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) - // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Check form elements and option elements for explicit disabling - return "label" in elem && elem.disabled === disabled || - "form" in elem && elem.disabled === disabled || - - // Check non-disabled form elements for fieldset[disabled] ancestors - "form" in elem && elem.disabled === false && ( - // Support: IE6-11+ - // Ancestry is covered for us - elem.isDisabled === disabled || - - // Otherwise, assume any non-

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