pythclient
Advanced tools
+13
-2
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.1 | ||
| Metadata-Version: 2.2 | ||
| Name: pythclient | ||
| Version: 0.2.0 | ||
| Version: 0.2.1 | ||
| Summary: A library to retrieve Pyth account structures off the Solana blockchain. | ||
@@ -44,2 +44,13 @@ Home-page: https://github.com/pyth-network/pyth-client-py | ||
| Requires-Dist: pytest-asyncio; extra == "testing" | ||
| Dynamic: author | ||
| Dynamic: author-email | ||
| Dynamic: classifier | ||
| Dynamic: description | ||
| Dynamic: description-content-type | ||
| Dynamic: home-page | ||
| Dynamic: project-url | ||
| Dynamic: provides-extra | ||
| Dynamic: requires-dist | ||
| Dynamic: requires-python | ||
| Dynamic: summary | ||
@@ -46,0 +57,0 @@ Pyth Client in Python |
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.1 | ||
| Metadata-Version: 2.2 | ||
| Name: pythclient | ||
| Version: 0.2.0 | ||
| Version: 0.2.1 | ||
| Summary: A library to retrieve Pyth account structures off the Solana blockchain. | ||
@@ -44,2 +44,13 @@ Home-page: https://github.com/pyth-network/pyth-client-py | ||
| Requires-Dist: pytest-asyncio; extra == "testing" | ||
| Dynamic: author | ||
| Dynamic: author-email | ||
| Dynamic: classifier | ||
| Dynamic: description | ||
| Dynamic: description-content-type | ||
| Dynamic: home-page | ||
| Dynamic: project-url | ||
| Dynamic: provides-extra | ||
| Dynamic: requires-dist | ||
| Dynamic: requires-python | ||
| Dynamic: summary | ||
@@ -46,0 +57,0 @@ Pyth Client in Python |
@@ -20,5 +20,5 @@ from __future__ import annotations | ||
| _SUPPORTED_VERSIONS = set((_VERSION_1, _VERSION_2)) | ||
| _ACCOUNT_HEADER_BYTES = 16 # magic + version + type + size, u32 * 4 | ||
| ACCOUNT_HEADER_BYTES = 16 # magic + version + type + size, u32 * 4 | ||
| _NULL_KEY_BYTES = b'\x00' * SolanaPublicKey.LENGTH | ||
| MAX_SLOT_DIFFERENCE = 25 | ||
| DEFAULT_MAX_LATENCY = 25 | ||
@@ -85,3 +85,3 @@ | ||
| def _parse_header(buffer: bytes, offset: int = 0, *, key: SolanaPublicKeyOrStr) -> Tuple[PythAccountType, int, int]: | ||
| if len(buffer) - offset < _ACCOUNT_HEADER_BYTES: | ||
| if len(buffer) - offset < ACCOUNT_HEADER_BYTES: | ||
| raise ValueError("Pyth account data too short") | ||
@@ -146,3 +146,3 @@ | ||
| try: | ||
| self.update_from(data[:size], version=version, offset=_ACCOUNT_HEADER_BYTES) | ||
| self.update_from(data[:size], version=version, offset=ACCOUNT_HEADER_BYTES) | ||
| except Exception as e: | ||
@@ -488,2 +488,3 @@ logger.exception("error while parsing account", exception=e) | ||
| product (Optional[PythProductAccount]): the product this price is for, if loaded | ||
| max_latency (int): the maximum allowed slot difference for this feed | ||
| """ | ||
@@ -510,2 +511,3 @@ | ||
| self.prev_timestamp: int = 0 # unix timestamp in seconds | ||
| self.max_latency: int = 0 # maximum allowed slot difference for this feed | ||
@@ -545,3 +547,3 @@ @property | ||
| if self.aggregate_price_info.price_status == PythPriceStatus.TRADING and \ | ||
| slot - self.aggregate_price_info.pub_slot > MAX_SLOT_DIFFERENCE: | ||
| slot - self.aggregate_price_info.pub_slot > self.max_latency: | ||
| return PythPriceStatus.UNKNOWN | ||
@@ -580,5 +582,8 @@ | ||
| offset += 48 # struct.calcsize("6q") | ||
| # drv[2-4]_ fields are currently unused | ||
| timestamp, min_publishers = struct.unpack_from("<qB", buffer, offset) | ||
| offset += 16 # struct.calcsize("qBbhi") ("bhi" is drv_2, drv_3, drv_4) | ||
| offset += 9 # struct.calcsize("qB") | ||
| _message_sent, max_latency = struct.unpack_from("<bB", buffer, offset) | ||
| offset += 2 # struct.calcsize("bB") | ||
| _drv_3, _drv_4 = struct.unpack_from("<bi", buffer, offset) | ||
| offset += 5 # struct.calcsize("bi") | ||
| product_account_key_bytes, next_price_account_key_bytes = struct.unpack_from("32s32s", buffer, offset) | ||
@@ -630,2 +635,4 @@ offset += 64 # struct.calcsize("32s32s") | ||
| self.prev_timestamp = prev_timestamp | ||
| # a max latency of 0 is the default max latency | ||
| self.max_latency = max_latency if max_latency != 0 else DEFAULT_MAX_LATENCY | ||
@@ -632,0 +639,0 @@ def __str__(self) -> str: |
+1
-1
@@ -10,3 +10,3 @@ from setuptools import setup | ||
| name='pythclient', | ||
| version='0.2.0', | ||
| version='0.2.1', | ||
| packages=['pythclient'], | ||
@@ -13,0 +13,0 @@ author='Pyth Developers', |
+251
-76
@@ -6,3 +6,4 @@ import pytest | ||
| from pythclient.pythaccounts import ( | ||
| MAX_SLOT_DIFFERENCE, | ||
| ACCOUNT_HEADER_BYTES, | ||
| DEFAULT_MAX_LATENCY, | ||
| PythPriceAccount, | ||
@@ -16,45 +17,218 @@ PythPriceType, | ||
| # Yes, this sucks, but it is actually a monster datastructure (2K) | ||
| # Yes, this sucks, but it is actually a monster datastructure | ||
| # Equity.US.AAPL/USD symbol | ||
| @pytest.fixture | ||
| def price_account_bytes(): | ||
| return base64.b64decode(( | ||
| b'AQAAAPj///8TAAAAEAAAANupUgYAAAAA2qlSBgAAAAB4XGx3EAAAAJ86jskAAAAA3CH+HAEA' | ||
| b'AAD6ORUDAAAAABzzZ5MAAAAA3CH+HAEAAAABAAAAAAAAAAAAAAAAAAAASNYDPXM+J5UMLgNR' | ||
| b'4lBUkc2RVIJPcW2VE1FMdLn5j1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmp' | ||
| b'UgYAAAAAIB/LdhAAAADEKi0CAAAAAAAAAAAAAAAAIB/LdhAAAADk7y4CAAAAAAEAAAAAAAAA' | ||
| b'26lSBgAAAAD3Zn27jXzTFyGJQUojwmtSHYwZxkUEVVXj4o6CVo5leGBYnXYQAAAAYBBIAQAA' | ||
| b'AAABAAAAAAAAANipUgYAAAAAYFiddhAAAABgEEgBAAAAAAEAAAAAAAAA2alSBgAAAAAWD7rB' | ||
| b'Ovfd2AXTFwo94Ma9lxJqHgLA0lnQqG74IdblxyAfy3YQAAAACyXuAAAAAAABAAAAAAAAANip' | ||
| b'UgYAAAAAIB/LdhAAAAALJe4AAAAAAAEAAAAAAAAA2alSBgAAAAAF0gZPMxz/3cq+lvo2VSTd' | ||
| b'ZPSzhuiFo00VLL6uBCzq9cgcPHEQAAAAVAF9BAAAAAABAAAAAAAAANmpUgYAAAAAyBw8cRAA' | ||
| b'AABUAX0EAAAAAAEAAAAAAAAA2qlSBgAAAADiuY8mkITUiAURyBFdzvBPU8fiB5kuA//RJt+U' | ||
| b'TeTbBEB4h9UNAAAAQFSJAAAAAAABAAAAAAAAANfOOgYAAAAAQHiH1Q0AAABAVIkAAAAAAAEA' | ||
| b'AAAAAAAA1846BgAAAAAa5QKj6UK4sRzDdElrTZxcOfgMXawfRZ81og7BuHMIndC7Q3UQAAAA' | ||
| b'cNddAAAAAAABAAAAAAAAANipUgYAAAAA0LtDdRAAAABw110AAAAAAAEAAAAAAAAA2alSBgAA' | ||
| b'AAANw7zqkVVpdgiwXwSnCtCaQVFyqpu190CHOsB4KysaRYA0/X4QAAAA6PWmKgAAAAABAAAA' | ||
| b'AAAAANipUgYAAAAAgDT9fhAAAADo9aYqAAAAAAEAAAAAAAAA2alSBgAAAAAH8ss5/bAp3FF4' | ||
| b'TSjvF5Edl8GmnIVyOhtiVbNCU0OtdaDilHgQAAAAQHh9AQAAAAABAAAAAAAAANmpUgYAAAAA' | ||
| b'oOKUeBAAAABAeH0BAAAAAAEAAAAAAAAA2qlSBgAAAACfPqV71Am6AMQNkq5XE0HCfjwvft+s' | ||
| b'4cJKUbGhXDGytwB+w3YQAAAAAJDQAwAAAAABAAAAAAAAANapUgYAAAAAAH7DdhAAAAAAkNAD' | ||
| b'AAAAAAEAAAAAAAAA1qlSBgAAAABDgo+jYZ2mvK7WiRfeHXzOkhfexyuuEjBj/3vn3S+WPp+1' | ||
| b'Y3cQAAAAIND8AwAAAAABAAAAAAAAANipUgYAAAAAn7VjdxAAAADQDPwDAAAAAAEAAAAAAAAA' | ||
| b'2alSBgAAAAAYg7EkbdpdBxc9vTjVZwAHFYQsH9DolucLCm3S5RpPl5CJPXoQAAAAoH4mAQAA' | ||
| b'AAABAAAAAAAAANSpUgYAAAAAkIk9ehAAAACgfiYBAAAAAAEAAAAAAAAA1KlSBgAAAABDt3hL' | ||
| b'b4VmyzKDZfvOC0BGFSO67OeFF7MVXDHaozgpj6CarHYQAAAA4MrUAgAAAAABAAAAAAAAANip' | ||
| b'UgYAAAAAoJqsdhAAAADgytQCAAAAAAEAAAAAAAAA2alSBgAAAAD1nd3vzBZrLYmko8zz/sS7' | ||
| b'S5ihUbTAN/9hXrt4QuM9dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACp6tPj00vMhTS7LGUOsnqMjD8aItaIKEMoU4xC' | ||
| b'qOgjQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAADQyjMc9dnucWvIxpCjAKuoQDs3FBy2OwJlwJjAxY5jrEDJD3cQAAAA' | ||
| b'iO90AgAAAAABAAAAAAAAANipUgYAAAAAQMkPdxAAAACI73QCAAAAAAEAAAAAAAAA2alSBgAA' | ||
| b'AABfyWT+IQLDTV2m/OVBHX+euZaDX9doeSPt8Afh6snTmyAfy3YQAAAA8MjSAAAAAAABAAAA' | ||
| b'AAAAANipUgYAAAAAIB/LdhAAAADwyNIAAAAAAAEAAAAAAAAA2alSBgAAAADshtw0V/2qFXMo' | ||
| b'0kCdNAHTz61GgIqwRBk8Hn7J+tXPYra163kQAAAAmhIJAwAAAAABAAAAAAAAANipUgYAAAAA' | ||
| b'trXreRAAAACaEgkDAAAAAAEAAAAAAAAA2alSBgAAAADYb4QN6+LtpmaFm/jCx0LD5ke+Thdt' | ||
| b'/FIl2ATx1J/iLU9xK3YQAAAAUQDeAQAAAAABAAAAAAAAANipUgYAAAAAT3ErdhAAAABRAN4B' | ||
| b'AAAAAAEAAAAAAAAA2alSBgAAAAD3oTB6i0MnB/D217PntQNBRQJinx7o+cT2tZFViRokLtlj' | ||
| b'UXkQAAAAhB8gAgAAAAABAAAAAAAAANipUgYAAAAA2WNReRAAAACEHyACAAAAAAEAAAAAAAAA' | ||
| b'2alSBgAAAAAQObH1+gS8Ag0HeG1UdQRs2fQLBW50YN8kJo4QAHwOnZ+DNHgQAAAAYe1IAgAA' | ||
| b'AAABAAAAAAAAANipUgYAAAAAn4M0eBAAAABh7UgCAAAAAAEAAAAAAAAA2alSBgAAAAA=' | ||
| )) | ||
| b'1MOyoQIAAAADAAAAIDEAAAEAAAD7////HQAAABsAAAD/rccLAAAAAP6txwsAAAAATKVnAQAAAACfFQcN' | ||
| b'AQAAAP0gJHIAAAAAczcAAAAAAAA8DgiiAAAAAP0gJHIAAAAA9fasZwAAAAADADIDPQEAACkunmg3xiSw' | ||
| b'fCBPOBN1xaL8HmQRPUjcgostWu2uVecsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+rccL' | ||
| b'AAAAAEp3aAEAAAAA+TcAAAAAAAD09qxnAAAAAM12aAEAAAAAdjgAAAAAAAABAAAAAAAAAP+txwsAAAAA' | ||
| b'BHkihWa8qHaHujLYgFXDIwjMb1piz6Z/GIGZQeOFsrJwcWgBAAAAALvEAAAAAAAAAQAAAAAAAAD8rccL' | ||
| b'AAAAAHBxaAEAAAAAu8QAAAAAAAABAAAAAAAAAPytxwsAAAAABw99DZApUxxfQ451HfqUNEecEJ+K3q4L' | ||
| b'ImQn81mfXBnOemgBAAAAANkUAQAAAAAAAQAAAAAAAADzrccLAAAAAM56aAEAAAAA2RQBAAAAAAABAAAA' | ||
| b'AAAAAPOtxwsAAAAAB/LLOf2wKdxReE0o7xeRHZfBppyFcjobYlWzQlNDrXVMd2gBAAAAAEhcAAAAAAAA' | ||
| b'AQAAAAAAAAD3rccLAAAAAEx3aAEAAAAASFwAAAAAAAABAAAAAAAAAPetxwsAAAAAC7W169huq2IOUmHg' | ||
| b'hY4UR1FAoCOpXo1cicOJgwqilmeucmgBAAAAAPQBAAAAAAAAAQAAAAAAAAD9rccLAAAAAK5yaAEAAAAA' | ||
| b'9AEAAAAAAAABAAAAAAAAAP2txwsAAAAAFzpASQCO7GVI83hRl/cs7iBjSV0Av1Bj68V8d837GUHzPVwB' | ||
| b'AAAAANBpwAAAAAAABAAAAAAAAAAd35ILAAAAAPM9XAEAAAAA0GnAAAAAAAAEAAAAAAAAAB3fkgsAAAAA' | ||
| b'GIOxJG3aXQcXPb041WcABxWELB/Q6JbnCwpt0uUaT5cJbWgBAAAAAFgHAwAAAAAAAQAAAAAAAAD8rccL' | ||
| b'AAAAAAltaAEAAAAAWAcDAAAAAAABAAAAAAAAAPytxwsAAAAAJh54j4GAISD3TwZWpS7jDYp6d0mcRf2n' | ||
| b'xlxmID4iZ25tgWgBAAAAAOWaAwAAAAAAAQAAAAAAAAD0rccLAAAAAG2BaAEAAAAA5ZoDAAAAAAABAAAA' | ||
| b'AAAAAPStxwsAAAAANIa+/riGb203XbXQ8h0HwnTKrhg+e3cLJXNgHPRZHSRRd2gBAAAAABwwAAAAAAAA' | ||
| b'AQAAAAAAAAD6rccLAAAAAFF3aAEAAAAAHDAAAAAAAAABAAAAAAAAAPqtxwsAAAAAQ4KPo2Gdpryu1okX' | ||
| b'3h18zpIX3scrrhIwY/97590vlj5nf2gBAAAAABh+AAAAAAAAAQAAAAAAAAD8rccLAAAAAGd/aAEAAAAA' | ||
| b'GH4AAAAAAAABAAAAAAAAAPytxwsAAAAATXYO0eWeK9NQsMMZj+HvA16XRS7UvMYr42xvExZSkdFcdWgB' | ||
| b'AAAAABmLAAAAAAAAAQAAAAAAAAD8rccLAAAAAFx1aAEAAAAAGYsAAAAAAAABAAAAAAAAAPytxwsAAAAA' | ||
| b'Tjqyi56CYuBQyurc9ATAapzuKuOgdEwh/hm0Mt5mkOtkdWgBAAAAANsQAQAAAAAAAQAAAAAAAAD+rccL' | ||
| b'AAAAAGR1aAEAAAAA2xABAAAAAAABAAAAAAAAAP6txwsAAAAATrAvjfOs/kT57qji7Ps3wu5XqD3//AFC' | ||
| b'0CdHbBz0M3QEnGgBAAAAAIpIAgAAAAAAAQAAAAAAAAD7rccLAAAAAAScaAEAAAAAikgCAAAAAAABAAAA' | ||
| b'AAAAAPutxwsAAAAAVBkdg3Zb8Ej6G4LYAW466xu/DHb3ezUTWu9Vo3T3/ms8e2gBAAAAAAc0AAAAAAAA' | ||
| b'AQAAAAAAAADyrccLAAAAADx7aAEAAAAABzQAAAAAAAABAAAAAAAAAPKtxwsAAAAAaj2lMUYld1Wxfrwl' | ||
| b'0Lo22hdeJPxpkprmafPfHmPVnUBafWgBAAAAAElcAAAAAAAAAQAAAAAAAADxrccLAAAAAFp9aAEAAAAA' | ||
| b'SVwAAAAAAAABAAAAAAAAAPGtxwsAAAAAfEFChNuJaWdU8R/x7GUP3o44600xL/0IC/SH/5J1561Nd2gB' | ||
| b'AAAAAEdcAAAAAAAAAQAAAAAAAAD4rccLAAAAAE13aAEAAAAAR1wAAAAAAAABAAAAAAAAAPitxwsAAAAA' | ||
| b'fcK1rXWbYoQKtCq2nzJiCmvpYCTjfvXYuWgji0GQsGpwcWgBAAAAAOAuAAAAAAAAAQAAAAAAAAD5rccL' | ||
| b'AAAAAHBxaAEAAAAA4C4AAAAAAAABAAAAAAAAAPmtxwsAAAAAh2GV5NQWzsgLKj06RBPx0QCB97kCA1OV' | ||
| b'UrDxEcZNvhhKd2gBAAAAANCPAAAAAAAAAQAAAAAAAAD4rccLAAAAAEp3aAEAAAAA0I8AAAAAAAABAAAA' | ||
| b'AAAAAPitxwsAAAAAibazYiCMITlc2drXqvTlt3fSCnk7W1heG3EouJogjZd4eGgBAAAAAGfNAQAAAAAA' | ||
| b'AQAAAAAAAAD8rccLAAAAAHh4aAEAAAAAZ80BAAAAAAABAAAAAAAAAPytxwsAAAAAi0AFlC/4wcwisiCx' | ||
| b'v13ss5/vcrirPwLzrSXGpy8fewyuZ2gBAAAAAN+IAAAAAAAAAQAAAAAAAAD/rccLAAAAAK5naAEAAAAA' | ||
| b'34gAAAAAAAABAAAAAAAAAP+txwsAAAAArU0itxPC4r5fWaGWOzot71pBjR2EcS+WEjK4Bzkzs3Crc2gB' | ||
| b'AAAAAPdaAAAAAAAAAQAAAAAAAAD6rccLAAAAAKtzaAEAAAAA91oAAAAAAAABAAAAAAAAAPqtxwsAAAAA' | ||
| b'vFRslRVZlbwHP1fHn9TC4H0gHT4cvadEJLsMYazqQb5kpmgBAAAAAG/6AAAAAAAAAQAAAAAAAADxrccL' | ||
| b'AAAAAGSmaAEAAAAAb/oAAAAAAAABAAAAAAAAAPGtxwsAAAAAxeks08X3OzuidkIc+gZFbXnnuyIHgNNb' | ||
| b'7PpPEpd/qijgKWMBAAAAAHBvAgAAAAAAAQAAAAAAAACdb60LAAAAAOApYwEAAAAAcG8CAAAAAAABAAAA' | ||
| b'AAAAAJ1vrQsAAAAA0HoGOdUHEoMy5c1/vlS8fo3SBHH6TZX9zKxofXfx7YOddWgBAAAAAKS2AwAAAAAA' | ||
| b'AQAAAAAAAAD6rccLAAAAAJ11aAEAAAAApLYDAAAAAAABAAAAAAAAAPqtxwsAAAAA0sj8lXSClC3CIjOA' | ||
| b'kkwaV8JH5xFY0ct7hVWuwlD+R7jNdmgBAAAAABdxAQAAAAAAAQAAAAAAAAD7rccLAAAAAM12aAEAAAAA' | ||
| b'F3EBAAAAAAABAAAAAAAAAPutxwsAAAAA1S855pC2mSbP8jFQCvvqX3MpTOXs5/BYHTl/r3O5RalFe2gB' | ||
| b'AAAAABBLAAAAAAAAAQAAAAAAAAD+rccLAAAAAEV7aAEAAAAAEEsAAAAAAAABAAAAAAAAAP6txwsAAAAA' | ||
| b'4nYQ5DOiRvjmu8YoeyW1DLXF7pdywpOP4PGqQglGiGhkc2gBAAAAAPUBAAAAAAAAAQAAAAAAAAD7rccL' | ||
| b'AAAAAGRzaAEAAAAA9QEAAAAAAAABAAAAAAAAAPutxwsAAAAA4tX2SZD3l3FAyKYJNSbTLHNOH4n15gMg' | ||
| b'uh53FIMjwtkzjGgBAAAAAHwvAAAAAAAAAQAAAAAAAAD1rccLAAAAADOMaAEAAAAAfC8AAAAAAAABAAAA' | ||
| b'AAAAAPWtxwsAAAAA6RNLhwN/jdZo6gCE/jH7lRcwks1xI3vR8WRwtPd0ihQbcGgBAAAAAOwZAAAAAAAA' | ||
| b'AQAAAAAAAAD6rccLAAAAABtwaAEAAAAA7BkAAAAAAAABAAAAAAAAAPqtxwsAAAAA75mJdHHcLE7j7fIP' | ||
| b'srWt70W9Qm7X3gxVvFw7bbzVMJJrfWgBAAAAAOUrAAAAAAAAAQAAAAAAAAD6rccLAAAAAGt9aAEAAAAA' | ||
| b'5SsAAAAAAAABAAAAAAAAAPqtxwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' | ||
| b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7xHUr72YBwAAAAAA' | ||
| b'AAAAAJNnayVdBgAAAAAAAAAAAACBeRAFAAAAAAAAAAAAAAAA' | ||
| )) | ||
@@ -69,22 +243,23 @@ @pytest.fixture | ||
| def test_price_account_update_from(price_account_bytes: bytes, price_account: PythPriceAccount): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| assert price_account.price_type == PythPriceType.PRICE | ||
| assert price_account.exponent == -8 | ||
| assert price_account.num_components == 19 | ||
| assert price_account.exponent == -5 | ||
| assert price_account.num_components == 29 | ||
| assert len(price_account.price_components) == price_account.num_components | ||
| assert price_account.last_slot == 106080731 | ||
| assert price_account.valid_slot == 106080730 | ||
| assert price_account.last_slot == 197635583 | ||
| assert price_account.valid_slot == 197635582 | ||
| assert price_account.product_account_key == SolanaPublicKey( | ||
| "5uKdRzB3FzdmwyCHrqSGq4u2URja617jqtKkM71BVrkw" | ||
| "3mkwqdkawySvAm1VjD4f2THN5mmXzb76fvft2hWpAANo" | ||
| ) | ||
| assert price_account.max_latency == 50 | ||
| assert price_account.next_price_account_key is None | ||
| assert asdict(price_account.aggregate_price_info) == { | ||
| "raw_price": 70712500000, | ||
| "raw_confidence_interval": 36630500, | ||
| "raw_price": 23623373, | ||
| "raw_confidence_interval": 14454, | ||
| "price_status": PythPriceStatus.TRADING, | ||
| "pub_slot": 106080731, | ||
| "exponent": -8, | ||
| "price": 707.125, | ||
| "confidence_interval": 0.366305, | ||
| "pub_slot": 197635583, | ||
| "exponent": -5, | ||
| "price": 236.23373, | ||
| "confidence_interval": 0.14454, | ||
| } | ||
@@ -94,25 +269,25 @@ # Only assert the first element of the 19 price components | ||
| "publisher_key": SolanaPublicKey( | ||
| "HekM1hBawXQu6wK6Ah1yw1YXXeMUDD2bfCHEzo25vnEB" | ||
| "JTmFx5zX9mM94itfk2nQcJnQQDPjcv4UPD7SYj6xDCV" | ||
| ), | ||
| "last_aggregate_price_info": { | ||
| "raw_price": 70709500000, | ||
| "raw_confidence_interval": 21500000, | ||
| "raw_price": 23622000, | ||
| "raw_confidence_interval": 50363, | ||
| "price_status": PythPriceStatus.TRADING, | ||
| "pub_slot": 106080728, | ||
| "exponent": -8, | ||
| "price": 707.095, | ||
| "confidence_interval": 0.215, | ||
| "pub_slot": 197635580, | ||
| "exponent": -5, | ||
| "price": 236.22000000000003, | ||
| "confidence_interval": 0.50363, | ||
| }, | ||
| "latest_price_info": { | ||
| "raw_price": 70709500000, | ||
| "raw_confidence_interval": 21500000, | ||
| "raw_price": 23622000, | ||
| "raw_confidence_interval": 50363, | ||
| "price_status": PythPriceStatus.TRADING, | ||
| "pub_slot": 106080729, | ||
| "exponent": -8, | ||
| "price": 707.095, | ||
| "confidence_interval": 0.215, | ||
| "pub_slot": 197635580, | ||
| "exponent": -5, | ||
| "price": 236.22000000000003, | ||
| "confidence_interval": 0.50363, | ||
| }, | ||
| "exponent": -8, | ||
| "exponent": -5, | ||
| } | ||
| assert price_account.min_publishers == 0 | ||
| assert price_account.min_publishers == 3 | ||
@@ -127,3 +302,3 @@ | ||
| expected = "PythPriceAccount PythPriceType.PRICE (5ALDzwcRJfSyGdGyhP3kP628aqBNHZzLuVww7o9kdspe)" | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| assert str(price_account) == expected | ||
@@ -147,3 +322,3 @@ | ||
| ): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot | ||
@@ -156,3 +331,3 @@ assert price_account.aggregate_price_confidence_interval == 0.366305 | ||
| ): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot | ||
@@ -164,3 +339,3 @@ assert price_account.aggregate_price == 707.125 | ||
| ): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot | ||
@@ -175,4 +350,4 @@ price_account.aggregate_price_info.price_status = PythPriceStatus.UNKNOWN | ||
| ): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot + MAX_SLOT_DIFFERENCE | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot + DEFAULT_MAX_LATENCY | ||
@@ -185,6 +360,6 @@ price_status = price_account.aggregate_price_status | ||
| ): | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=0) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot + MAX_SLOT_DIFFERENCE + 1 | ||
| price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES) | ||
| price_account.slot = price_account.aggregate_price_info.pub_slot + DEFAULT_MAX_LATENCY + 1 | ||
| price_status = price_account.aggregate_price_status | ||
| assert price_status == PythPriceStatus.UNKNOWN |
@@ -6,3 +6,3 @@ from typing import Any, Dict, Union, Sequence, List | ||
| from pythclient.pythaccounts import ( | ||
| _ACCOUNT_HEADER_BYTES, _VERSION_2, PythMappingAccount, PythPriceType, PythProductAccount, PythPriceAccount | ||
| ACCOUNT_HEADER_BYTES, _VERSION_2, PythMappingAccount, PythPriceType, PythProductAccount, PythPriceAccount | ||
| ) | ||
@@ -238,3 +238,3 @@ | ||
| def product_account_bytes() -> bytes: | ||
| return base64.b64decode(PRODUCT_ACCOUNT_B64_DATA)[_ACCOUNT_HEADER_BYTES:] | ||
| return base64.b64decode(PRODUCT_ACCOUNT_B64_DATA)[ACCOUNT_HEADER_BYTES:] | ||
@@ -252,3 +252,3 @@ | ||
| def price_account_bytes() -> bytes: | ||
| return base64.b64decode(PRICE_ACCOUNT_B64_DATA)[_ACCOUNT_HEADER_BYTES:] | ||
| return base64.b64decode(PRICE_ACCOUNT_B64_DATA)[ACCOUNT_HEADER_BYTES:] | ||
@@ -255,0 +255,0 @@ |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
265236
6.96%4432
4.28%