diff --git a/notebooks/applications/volatility_surface.md b/notebooks/applications/volatility_surface.md index fe8a474b..c44e74aa 100644 --- a/notebooks/applications/volatility_surface.md +++ b/notebooks/applications/volatility_surface.md @@ -4,11 +4,11 @@ jupytext: extension: .md format_name: myst format_version: 0.13 - jupytext_version: 1.16.6 + jupytext_version: 1.17.2 kernelspec: - display_name: .venv - language: python name: python3 + display_name: Python 3 (ipykernel) + language: python --- # Volatility Surface @@ -21,7 +21,7 @@ First thing, fetch the data from quantflow.data.deribit import Deribit async with Deribit() as cli: - loader = await cli.volatility_surface_loader("eth") + loader = await cli.volatility_surface_loader("eth", exclude_open_interest=0) ``` Once we have loaded the data, we create the surface and display the term-structure of forwards @@ -125,16 +125,20 @@ Serialization It is possible to save the vol surface into a json file so it can be recreated for testing or for serialization/deserialization. ```{code-cell} ipython3 -with open("../tests/volsurface.json", "w") as fp: - fp.write(vs.inputs().model_dump_json()) +with open("../../quantflow_tests/volsurface.json", "w") as fp: + fp.write(vs.inputs().model_dump_json(indent=2)) ``` ```{code-cell} ipython3 from quantflow.options.surface import VolSurfaceInputs, surface_from_inputs import json -with open("../tests/volsurface.json", "r") as fp: +with open("../../quantflow_tests/volsurface.json", "r") as fp: inputs = VolSurfaceInputs(**json.load(fp)) vs2 = surface_from_inputs(inputs) ``` + +```{code-cell} ipython3 + +``` diff --git a/poetry.lock b/poetry.lock index 88941169..134b6524 100644 --- a/poetry.lock +++ b/poetry.lock @@ -193,19 +193,20 @@ speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (> [[package]] name = "aiosignal" -version = "1.3.2" +version = "1.4.0" description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" groups = ["main"] markers = "extra == \"data\"" files = [ - {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, - {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, + {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, + {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, ] [package.dependencies] frozenlist = ">=1.1.0" +typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "alabaster" @@ -814,79 +815,79 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.9.1" +version = "7.9.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "coverage-7.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca"}, - {file = "coverage-7.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509"}, - {file = "coverage-7.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b"}, - {file = "coverage-7.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3"}, - {file = "coverage-7.9.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3"}, - {file = "coverage-7.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5"}, - {file = "coverage-7.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187"}, - {file = "coverage-7.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce"}, - {file = "coverage-7.9.1-cp310-cp310-win32.whl", hash = "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70"}, - {file = "coverage-7.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe"}, - {file = "coverage-7.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582"}, - {file = "coverage-7.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86"}, - {file = "coverage-7.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed"}, - {file = "coverage-7.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d"}, - {file = "coverage-7.9.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338"}, - {file = "coverage-7.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875"}, - {file = "coverage-7.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250"}, - {file = "coverage-7.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c"}, - {file = "coverage-7.9.1-cp311-cp311-win32.whl", hash = "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32"}, - {file = "coverage-7.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125"}, - {file = "coverage-7.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e"}, - {file = "coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626"}, - {file = "coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb"}, - {file = "coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300"}, - {file = "coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8"}, - {file = "coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5"}, - {file = "coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd"}, - {file = "coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898"}, - {file = "coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d"}, - {file = "coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74"}, - {file = "coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e"}, - {file = "coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342"}, - {file = "coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631"}, - {file = "coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f"}, - {file = "coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd"}, - {file = "coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86"}, - {file = "coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43"}, - {file = "coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1"}, - {file = "coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751"}, - {file = "coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67"}, - {file = "coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643"}, - {file = "coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a"}, - {file = "coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d"}, - {file = "coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0"}, - {file = "coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d"}, - {file = "coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f"}, - {file = "coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029"}, - {file = "coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece"}, - {file = "coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683"}, - {file = "coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f"}, - {file = "coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10"}, - {file = "coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363"}, - {file = "coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7"}, - {file = "coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c"}, - {file = "coverage-7.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f424507f57878e424d9a95dc4ead3fbdd72fd201e404e861e465f28ea469951"}, - {file = "coverage-7.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:535fde4001b2783ac80865d90e7cc7798b6b126f4cd8a8c54acfe76804e54e58"}, - {file = "coverage-7.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02532fd3290bb8fa6bec876520842428e2a6ed6c27014eca81b031c2d30e3f71"}, - {file = "coverage-7.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56f5eb308b17bca3bbff810f55ee26d51926d9f89ba92707ee41d3c061257e55"}, - {file = "coverage-7.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfa447506c1a52271f1b0de3f42ea0fa14676052549095e378d5bff1c505ff7b"}, - {file = "coverage-7.9.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9ca8e220006966b4a7b68e8984a6aee645a0384b0769e829ba60281fe61ec4f7"}, - {file = "coverage-7.9.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:49f1d0788ba5b7ba65933f3a18864117c6506619f5ca80326b478f72acf3f385"}, - {file = "coverage-7.9.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:68cd53aec6f45b8e4724c0950ce86eacb775c6be01ce6e3669fe4f3a21e768ed"}, - {file = "coverage-7.9.1-cp39-cp39-win32.whl", hash = "sha256:95335095b6c7b1cc14c3f3f17d5452ce677e8490d101698562b2ffcacc304c8d"}, - {file = "coverage-7.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:e1b5191d1648acc439b24721caab2fd0c86679d8549ed2c84d5a7ec1bedcc244"}, - {file = "coverage-7.9.1-pp39.pp310.pp311-none-any.whl", hash = "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514"}, - {file = "coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c"}, - {file = "coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec"}, + {file = "coverage-7.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66283a192a14a3854b2e7f3418d7db05cdf411012ab7ff5db98ff3b181e1f912"}, + {file = "coverage-7.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4e01d138540ef34fcf35c1aa24d06c3de2a4cffa349e29a10056544f35cca15f"}, + {file = "coverage-7.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f22627c1fe2745ee98d3ab87679ca73a97e75ca75eb5faee48660d060875465f"}, + {file = "coverage-7.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b1c2d8363247b46bd51f393f86c94096e64a1cf6906803fa8d5a9d03784bdbf"}, + {file = "coverage-7.9.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10c882b114faf82dbd33e876d0cbd5e1d1ebc0d2a74ceef642c6152f3f4d547"}, + {file = "coverage-7.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:de3c0378bdf7066c3988d66cd5232d161e933b87103b014ab1b0b4676098fa45"}, + {file = "coverage-7.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1e2f097eae0e5991e7623958a24ced3282676c93c013dde41399ff63e230fcf2"}, + {file = "coverage-7.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28dc1f67e83a14e7079b6cea4d314bc8b24d1aed42d3582ff89c0295f09b181e"}, + {file = "coverage-7.9.2-cp310-cp310-win32.whl", hash = "sha256:bf7d773da6af9e10dbddacbf4e5cab13d06d0ed93561d44dae0188a42c65be7e"}, + {file = "coverage-7.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:0c0378ba787681ab1897f7c89b415bd56b0b2d9a47e5a3d8dc0ea55aac118d6c"}, + {file = "coverage-7.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7a56a2964a9687b6aba5b5ced6971af308ef6f79a91043c05dd4ee3ebc3e9ba"}, + {file = "coverage-7.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123d589f32c11d9be7fe2e66d823a236fe759b0096f5db3fb1b75b2fa414a4fa"}, + {file = "coverage-7.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:333b2e0ca576a7dbd66e85ab402e35c03b0b22f525eed82681c4b866e2e2653a"}, + {file = "coverage-7.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:326802760da234baf9f2f85a39e4a4b5861b94f6c8d95251f699e4f73b1835dc"}, + {file = "coverage-7.9.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e7be4cfec248df38ce40968c95d3952fbffd57b400d4b9bb580f28179556d2"}, + {file = "coverage-7.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0b4a4cb73b9f2b891c1788711408ef9707666501ba23684387277ededab1097c"}, + {file = "coverage-7.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2c8937fa16c8c9fbbd9f118588756e7bcdc7e16a470766a9aef912dd3f117dbd"}, + {file = "coverage-7.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42da2280c4d30c57a9b578bafd1d4494fa6c056d4c419d9689e66d775539be74"}, + {file = "coverage-7.9.2-cp311-cp311-win32.whl", hash = "sha256:14fa8d3da147f5fdf9d298cacc18791818f3f1a9f542c8958b80c228320e90c6"}, + {file = "coverage-7.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:549cab4892fc82004f9739963163fd3aac7a7b0df430669b75b86d293d2df2a7"}, + {file = "coverage-7.9.2-cp311-cp311-win_arm64.whl", hash = "sha256:c2667a2b913e307f06aa4e5677f01a9746cd08e4b35e14ebcde6420a9ebb4c62"}, + {file = "coverage-7.9.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae9eb07f1cfacd9cfe8eaee6f4ff4b8a289a668c39c165cd0c8548484920ffc0"}, + {file = "coverage-7.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ce85551f9a1119f02adc46d3014b5ee3f765deac166acf20dbb851ceb79b6f3"}, + {file = "coverage-7.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8f6389ac977c5fb322e0e38885fbbf901743f79d47f50db706e7644dcdcb6e1"}, + {file = "coverage-7.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d9eae8cdfcd58fe7893b88993723583a6ce4dfbfd9f29e001922544f95615"}, + {file = "coverage-7.9.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fae939811e14e53ed8a9818dad51d434a41ee09df9305663735f2e2d2d7d959b"}, + {file = "coverage-7.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:31991156251ec202c798501e0a42bbdf2169dcb0f137b1f5c0f4267f3fc68ef9"}, + {file = "coverage-7.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d0d67963f9cbfc7c7f96d4ac74ed60ecbebd2ea6eeb51887af0f8dce205e545f"}, + {file = "coverage-7.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:49b752a2858b10580969ec6af6f090a9a440a64a301ac1528d7ca5f7ed497f4d"}, + {file = "coverage-7.9.2-cp312-cp312-win32.whl", hash = "sha256:88d7598b8ee130f32f8a43198ee02edd16d7f77692fa056cb779616bbea1b355"}, + {file = "coverage-7.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:9dfb070f830739ee49d7c83e4941cc767e503e4394fdecb3b54bfdac1d7662c0"}, + {file = "coverage-7.9.2-cp312-cp312-win_arm64.whl", hash = "sha256:4e2c058aef613e79df00e86b6d42a641c877211384ce5bd07585ed7ba71ab31b"}, + {file = "coverage-7.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:985abe7f242e0d7bba228ab01070fde1d6c8fa12f142e43debe9ed1dde686038"}, + {file = "coverage-7.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c3939264a76d44fde7f213924021ed31f55ef28111a19649fec90c0f109e6d"}, + {file = "coverage-7.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae5d563e970dbe04382f736ec214ef48103d1b875967c89d83c6e3f21706d5b3"}, + {file = "coverage-7.9.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdd612e59baed2a93c8843c9a7cb902260f181370f1d772f4842987535071d14"}, + {file = "coverage-7.9.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:256ea87cb2a1ed992bcdfc349d8042dcea1b80436f4ddf6e246d6bee4b5d73b6"}, + {file = "coverage-7.9.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f44ae036b63c8ea432f610534a2668b0c3aee810e7037ab9d8ff6883de480f5b"}, + {file = "coverage-7.9.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82d76ad87c932935417a19b10cfe7abb15fd3f923cfe47dbdaa74ef4e503752d"}, + {file = "coverage-7.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:619317bb86de4193debc712b9e59d5cffd91dc1d178627ab2a77b9870deb2868"}, + {file = "coverage-7.9.2-cp313-cp313-win32.whl", hash = "sha256:0a07757de9feb1dfafd16ab651e0f628fd7ce551604d1bf23e47e1ddca93f08a"}, + {file = "coverage-7.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:115db3d1f4d3f35f5bb021e270edd85011934ff97c8797216b62f461dd69374b"}, + {file = "coverage-7.9.2-cp313-cp313-win_arm64.whl", hash = "sha256:48f82f889c80af8b2a7bb6e158d95a3fbec6a3453a1004d04e4f3b5945a02694"}, + {file = "coverage-7.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:55a28954545f9d2f96870b40f6c3386a59ba8ed50caf2d949676dac3ecab99f5"}, + {file = "coverage-7.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdef6504637731a63c133bb2e6f0f0214e2748495ec15fe42d1e219d1b133f0b"}, + {file = "coverage-7.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd5ebe66c7a97273d5d2ddd4ad0ed2e706b39630ed4b53e713d360626c3dbb3"}, + {file = "coverage-7.9.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9303aed20872d7a3c9cb39c5d2b9bdbe44e3a9a1aecb52920f7e7495410dfab8"}, + {file = "coverage-7.9.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc18ea9e417a04d1920a9a76fe9ebd2f43ca505b81994598482f938d5c315f46"}, + {file = "coverage-7.9.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6406cff19880aaaadc932152242523e892faff224da29e241ce2fca329866584"}, + {file = "coverage-7.9.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d0d4f6ecdf37fcc19c88fec3e2277d5dee740fb51ffdd69b9579b8c31e4232e"}, + {file = "coverage-7.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c33624f50cf8de418ab2b4d6ca9eda96dc45b2c4231336bac91454520e8d1fac"}, + {file = "coverage-7.9.2-cp313-cp313t-win32.whl", hash = "sha256:1df6b76e737c6a92210eebcb2390af59a141f9e9430210595251fbaf02d46926"}, + {file = "coverage-7.9.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f5fd54310b92741ebe00d9c0d1d7b2b27463952c022da6d47c175d246a98d1bd"}, + {file = "coverage-7.9.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c48c2375287108c887ee87d13b4070a381c6537d30e8487b24ec721bf2a781cb"}, + {file = "coverage-7.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddc39510ac922a5c4c27849b739f875d3e1d9e590d1e7b64c98dadf037a16cce"}, + {file = "coverage-7.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a535c0c7364acd55229749c2b3e5eebf141865de3a8f697076a3291985f02d30"}, + {file = "coverage-7.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df0f9ef28e0f20c767ccdccfc5ae5f83a6f4a2fbdfbcbcc8487a8a78771168c8"}, + {file = "coverage-7.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f3da12e0ccbcb348969221d29441ac714bbddc4d74e13923d3d5a7a0bebef7a"}, + {file = "coverage-7.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a17eaf46f56ae0f870f14a3cbc2e4632fe3771eab7f687eda1ee59b73d09fe4"}, + {file = "coverage-7.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:669135a9d25df55d1ed56a11bf555f37c922cf08d80799d4f65d77d7d6123fcf"}, + {file = "coverage-7.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9d3a700304d01a627df9db4322dc082a0ce1e8fc74ac238e2af39ced4c083193"}, + {file = "coverage-7.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:71ae8b53855644a0b1579d4041304ddc9995c7b21c8a1f16753c4d8903b4dfed"}, + {file = "coverage-7.9.2-cp39-cp39-win32.whl", hash = "sha256:dd7a57b33b5cf27acb491e890720af45db05589a80c1ffc798462a765be6d4d7"}, + {file = "coverage-7.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f65bb452e579d5540c8b37ec105dd54d8b9307b07bcaa186818c104ffda22441"}, + {file = "coverage-7.9.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:8a1166db2fb62473285bcb092f586e081e92656c7dfa8e9f62b4d39d7e6b5050"}, + {file = "coverage-7.9.2-py3-none-any.whl", hash = "sha256:e425cd5b00f6fc0ed7cdbd766c70be8baab4b7839e4d4fe5fac48581dd968ea4"}, + {file = "coverage-7.9.2.tar.gz", hash = "sha256:997024fa51e3290264ffd7492ec97d0690293ccd2b45a6cd7d82d945a4a80c8b"}, ] [package.extras] @@ -1541,14 +1542,14 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "9.3.0" +version = "9.4.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.11" groups = ["book"] files = [ - {file = "ipython-9.3.0-py3-none-any.whl", hash = "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04"}, - {file = "ipython-9.3.0.tar.gz", hash = "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8"}, + {file = "ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066"}, + {file = "ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270"}, ] [package.dependencies] @@ -3925,157 +3926,184 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.25.1" +version = "0.26.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" groups = ["book"] files = [ - {file = "rpds_py-0.25.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f4ad628b5174d5315761b67f212774a32f5bad5e61396d38108bd801c0a8f5d9"}, - {file = "rpds_py-0.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c742af695f7525e559c16f1562cf2323db0e3f0fbdcabdf6865b095256b2d40"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:605ffe7769e24b1800b4d024d24034405d9404f0bc2f55b6db3362cd34145a6f"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ccc6f3ddef93243538be76f8e47045b4aad7a66a212cd3a0f23e34469473d36b"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f70316f760174ca04492b5ab01be631a8ae30cadab1d1081035136ba12738cfa"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1dafef8df605fdb46edcc0bf1573dea0d6d7b01ba87f85cd04dc855b2b4479e"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0701942049095741a8aeb298a31b203e735d1c61f4423511d2b1a41dcd8a16da"}, - {file = "rpds_py-0.25.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e87798852ae0b37c88babb7f7bbbb3e3fecc562a1c340195b44c7e24d403e380"}, - {file = "rpds_py-0.25.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3bcce0edc1488906c2d4c75c94c70a0417e83920dd4c88fec1078c94843a6ce9"}, - {file = "rpds_py-0.25.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e2f6a2347d3440ae789505693a02836383426249d5293541cd712e07e7aecf54"}, - {file = "rpds_py-0.25.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4fd52d3455a0aa997734f3835cbc4c9f32571345143960e7d7ebfe7b5fbfa3b2"}, - {file = "rpds_py-0.25.1-cp310-cp310-win32.whl", hash = "sha256:3f0b1798cae2bbbc9b9db44ee068c556d4737911ad53a4e5093d09d04b3bbc24"}, - {file = "rpds_py-0.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:3ebd879ab996537fc510a2be58c59915b5dd63bccb06d1ef514fee787e05984a"}, - {file = "rpds_py-0.25.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5f048bbf18b1f9120685c6d6bb70cc1a52c8cc11bdd04e643d28d3be0baf666d"}, - {file = "rpds_py-0.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fbb0dbba559959fcb5d0735a0f87cdbca9e95dac87982e9b95c0f8f7ad10255"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4ca54b9cf9d80b4016a67a0193ebe0bcf29f6b0a96f09db942087e294d3d4c2"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ee3e26eb83d39b886d2cb6e06ea701bba82ef30a0de044d34626ede51ec98b0"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89706d0683c73a26f76a5315d893c051324d771196ae8b13e6ffa1ffaf5e574f"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2013ee878c76269c7b557a9a9c042335d732e89d482606990b70a839635feb7"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45e484db65e5380804afbec784522de84fa95e6bb92ef1bd3325d33d13efaebd"}, - {file = "rpds_py-0.25.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48d64155d02127c249695abb87d39f0faf410733428d499867606be138161d65"}, - {file = "rpds_py-0.25.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:048893e902132fd6548a2e661fb38bf4896a89eea95ac5816cf443524a85556f"}, - {file = "rpds_py-0.25.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0317177b1e8691ab5879f4f33f4b6dc55ad3b344399e23df2e499de7b10a548d"}, - {file = "rpds_py-0.25.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bffcf57826d77a4151962bf1701374e0fc87f536e56ec46f1abdd6a903354042"}, - {file = "rpds_py-0.25.1-cp311-cp311-win32.whl", hash = "sha256:cda776f1967cb304816173b30994faaf2fd5bcb37e73118a47964a02c348e1bc"}, - {file = "rpds_py-0.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:dc3c1ff0abc91444cd20ec643d0f805df9a3661fcacf9c95000329f3ddf268a4"}, - {file = "rpds_py-0.25.1-cp311-cp311-win_arm64.whl", hash = "sha256:5a3ddb74b0985c4387719fc536faced33cadf2172769540c62e2a94b7b9be1c4"}, - {file = "rpds_py-0.25.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5ffe453cde61f73fea9430223c81d29e2fbf412a6073951102146c84e19e34c"}, - {file = "rpds_py-0.25.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:115874ae5e2fdcfc16b2aedc95b5eef4aebe91b28e7e21951eda8a5dc0d3461b"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a714bf6e5e81b0e570d01f56e0c89c6375101b8463999ead3a93a5d2a4af91fa"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35634369325906bcd01577da4c19e3b9541a15e99f31e91a02d010816b49bfda"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4cb2b3ddc16710548801c6fcc0cfcdeeff9dafbc983f77265877793f2660309"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ceca1cf097ed77e1a51f1dbc8d174d10cb5931c188a4505ff9f3e119dfe519b"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2cd1a4b0c2b8c5e31ffff50d09f39906fe351389ba143c195566056c13a7ea"}, - {file = "rpds_py-0.25.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1de336a4b164c9188cb23f3703adb74a7623ab32d20090d0e9bf499a2203ad65"}, - {file = "rpds_py-0.25.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9fca84a15333e925dd59ce01da0ffe2ffe0d6e5d29a9eeba2148916d1824948c"}, - {file = "rpds_py-0.25.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88ec04afe0c59fa64e2f6ea0dd9657e04fc83e38de90f6de201954b4d4eb59bd"}, - {file = "rpds_py-0.25.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8bd2f19e312ce3e1d2c635618e8a8d8132892bb746a7cf74780a489f0f6cdcb"}, - {file = "rpds_py-0.25.1-cp312-cp312-win32.whl", hash = "sha256:e5e2f7280d8d0d3ef06f3ec1b4fd598d386cc6f0721e54f09109a8132182fbfe"}, - {file = "rpds_py-0.25.1-cp312-cp312-win_amd64.whl", hash = "sha256:db58483f71c5db67d643857404da360dce3573031586034b7d59f245144cc192"}, - {file = "rpds_py-0.25.1-cp312-cp312-win_arm64.whl", hash = "sha256:6d50841c425d16faf3206ddbba44c21aa3310a0cebc3c1cdfc3e3f4f9f6f5728"}, - {file = "rpds_py-0.25.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559"}, - {file = "rpds_py-0.25.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325"}, - {file = "rpds_py-0.25.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295"}, - {file = "rpds_py-0.25.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b"}, - {file = "rpds_py-0.25.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98"}, - {file = "rpds_py-0.25.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd"}, - {file = "rpds_py-0.25.1-cp313-cp313-win32.whl", hash = "sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31"}, - {file = "rpds_py-0.25.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500"}, - {file = "rpds_py-0.25.1-cp313-cp313-win_arm64.whl", hash = "sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5"}, - {file = "rpds_py-0.25.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129"}, - {file = "rpds_py-0.25.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194"}, - {file = "rpds_py-0.25.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6"}, - {file = "rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78"}, - {file = "rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72"}, - {file = "rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66"}, - {file = "rpds_py-0.25.1-cp313-cp313t-win32.whl", hash = "sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523"}, - {file = "rpds_py-0.25.1-cp313-cp313t-win_amd64.whl", hash = "sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763"}, - {file = "rpds_py-0.25.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ce4c8e485a3c59593f1a6f683cf0ea5ab1c1dc94d11eea5619e4fb5228b40fbd"}, - {file = "rpds_py-0.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d8222acdb51a22929c3b2ddb236b69c59c72af4019d2cba961e2f9add9b6e634"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4593c4eae9b27d22df41cde518b4b9e4464d139e4322e2127daa9b5b981b76be"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd035756830c712b64725a76327ce80e82ed12ebab361d3a1cdc0f51ea21acb0"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:114a07e85f32b125404f28f2ed0ba431685151c037a26032b213c882f26eb908"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dec21e02e6cc932538b5203d3a8bd6aa1480c98c4914cb88eea064ecdbc6396a"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09eab132f41bf792c7a0ea1578e55df3f3e7f61888e340779b06050a9a3f16e9"}, - {file = "rpds_py-0.25.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c98f126c4fc697b84c423e387337d5b07e4a61e9feac494362a59fd7a2d9ed80"}, - {file = "rpds_py-0.25.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0e6a327af8ebf6baba1c10fadd04964c1965d375d318f4435d5f3f9651550f4a"}, - {file = "rpds_py-0.25.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:bc120d1132cff853ff617754196d0ac0ae63befe7c8498bd67731ba368abe451"}, - {file = "rpds_py-0.25.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:140f61d9bed7839446bdd44852e30195c8e520f81329b4201ceead4d64eb3a9f"}, - {file = "rpds_py-0.25.1-cp39-cp39-win32.whl", hash = "sha256:9c006f3aadeda131b438c3092124bd196b66312f0caa5823ef09585a669cf449"}, - {file = "rpds_py-0.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:a61d0b2c7c9a0ae45732a77844917b427ff16ad5464b4d4f5e4adb955f582890"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b24bf3cd93d5b6ecfbedec73b15f143596c88ee249fa98cefa9a9dc9d92c6f28"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:0eb90e94f43e5085623932b68840b6f379f26db7b5c2e6bcef3179bd83c9330f"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d50e4864498a9ab639d6d8854b25e80642bd362ff104312d9770b05d66e5fb13"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c9409b47ba0650544b0bb3c188243b83654dfe55dcc173a86832314e1a6a35d"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:796ad874c89127c91970652a4ee8b00d56368b7e00d3477f4415fe78164c8000"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85608eb70a659bf4c1142b2781083d4b7c0c4e2c90eff11856a9754e965b2540"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4feb9211d15d9160bc85fa72fed46432cdc143eb9cf6d5ca377335a921ac37b"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ccfa689b9246c48947d31dd9d8b16d89a0ecc8e0e26ea5253068efb6c542b76e"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3c5b317ecbd8226887994852e85de562f7177add602514d4ac40f87de3ae45a8"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:454601988aab2c6e8fd49e7634c65476b2b919647626208e376afcd22019eeb8"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1c0c434a53714358532d13539272db75a5ed9df75a4a090a753ac7173ec14e11"}, - {file = "rpds_py-0.25.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f73ce1512e04fbe2bc97836e89830d6b4314c171587a99688082d090f934d20a"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee86d81551ec68a5c25373c5643d343150cc54672b5e9a0cafc93c1870a53954"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89c24300cd4a8e4a51e55c31a8ff3918e6651b241ee8876a42cc2b2a078533ba"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:771c16060ff4e79584dc48902a91ba79fd93eade3aa3a12d6d2a4aadaf7d542b"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:785ffacd0ee61c3e60bdfde93baa6d7c10d86f15655bd706c89da08068dc5038"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a40046a529cc15cef88ac5ab589f83f739e2d332cb4d7399072242400ed68c9"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85fc223d9c76cabe5d0bff82214459189720dc135db45f9f66aa7cffbf9ff6c1"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0be9965f93c222fb9b4cc254235b3b2b215796c03ef5ee64f995b1b69af0762"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8378fa4a940f3fb509c081e06cb7f7f2adae8cf46ef258b0e0ed7519facd573e"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:33358883a4490287e67a2c391dfaea4d9359860281db3292b6886bf0be3d8692"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1d1fadd539298e70cac2f2cb36f5b8a65f742b9b9f1014dd4ea1f7785e2470bf"}, - {file = "rpds_py-0.25.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a46c2fb2545e21181445515960006e85d22025bd2fe6db23e76daec6eb689fe"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:50f2c501a89c9a5f4e454b126193c5495b9fb441a75b298c60591d8a2eb92e1b"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d779b325cc8238227c47fbc53964c8cc9a941d5dbae87aa007a1f08f2f77b23"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:036ded36bedb727beeabc16dc1dad7cb154b3fa444e936a03b67a86dc6a5066e"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:245550f5a1ac98504147cba96ffec8fabc22b610742e9150138e5d60774686d7"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff7c23ba0a88cb7b104281a99476cccadf29de2a0ef5ce864959a52675b1ca83"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e37caa8cdb3b7cf24786451a0bdb853f6347b8b92005eeb64225ae1db54d1c2b"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2f48ab00181600ee266a095fe815134eb456163f7d6699f525dee471f312cf"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e5fc7484fa7dce57e25063b0ec9638ff02a908304f861d81ea49273e43838c1"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d3c10228d6cf6fe2b63d2e7985e94f6916fa46940df46b70449e9ff9297bd3d1"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:5d9e40f32745db28c1ef7aad23f6fc458dc1e29945bd6781060f0d15628b8ddf"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:35a8d1a24b5936b35c5003313bc177403d8bdef0f8b24f28b1c4a255f94ea992"}, - {file = "rpds_py-0.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6099263f526efff9cf3883dfef505518730f7a7a93049b1d90d42e50a22b4793"}, - {file = "rpds_py-0.25.1.tar.gz", hash = "sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3"}, + {file = "rpds_py-0.26.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4c70c70f9169692b36307a95f3d8c0a9fcd79f7b4a383aad5eaa0e9718b79b37"}, + {file = "rpds_py-0.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:777c62479d12395bfb932944e61e915741e364c843afc3196b694db3d669fcd0"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec671691e72dff75817386aa02d81e708b5a7ec0dec6669ec05213ff6b77e1bd"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a1cb5d6ce81379401bbb7f6dbe3d56de537fb8235979843f0d53bc2e9815a79"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f789e32fa1fb6a7bf890e0124e7b42d1e60d28ebff57fe806719abb75f0e9a3"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c55b0a669976cf258afd718de3d9ad1b7d1fe0a91cd1ab36f38b03d4d4aeaaf"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70d9ec912802ecfd6cd390dadb34a9578b04f9bcb8e863d0a7598ba5e9e7ccc"}, + {file = "rpds_py-0.26.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3021933c2cb7def39d927b9862292e0f4c75a13d7de70eb0ab06efed4c508c19"}, + {file = "rpds_py-0.26.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a7898b6ca3b7d6659e55cdac825a2e58c638cbf335cde41f4619e290dd0ad11"}, + {file = "rpds_py-0.26.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:12bff2ad9447188377f1b2794772f91fe68bb4bbfa5a39d7941fbebdbf8c500f"}, + {file = "rpds_py-0.26.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:191aa858f7d4902e975d4cf2f2d9243816c91e9605070aeb09c0a800d187e323"}, + {file = "rpds_py-0.26.0-cp310-cp310-win32.whl", hash = "sha256:b37a04d9f52cb76b6b78f35109b513f6519efb481d8ca4c321f6a3b9580b3f45"}, + {file = "rpds_py-0.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:38721d4c9edd3eb6670437d8d5e2070063f305bfa2d5aa4278c51cedcd508a84"}, + {file = "rpds_py-0.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed"}, + {file = "rpds_py-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d"}, + {file = "rpds_py-0.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3"}, + {file = "rpds_py-0.26.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107"}, + {file = "rpds_py-0.26.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a"}, + {file = "rpds_py-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318"}, + {file = "rpds_py-0.26.0-cp311-cp311-win32.whl", hash = "sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a"}, + {file = "rpds_py-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03"}, + {file = "rpds_py-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41"}, + {file = "rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d"}, + {file = "rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a"}, + {file = "rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323"}, + {file = "rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158"}, + {file = "rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3"}, + {file = "rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2"}, + {file = "rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44"}, + {file = "rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c"}, + {file = "rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8"}, + {file = "rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d"}, + {file = "rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04"}, + {file = "rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1"}, + {file = "rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9"}, + {file = "rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9"}, + {file = "rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba"}, + {file = "rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b"}, + {file = "rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5"}, + {file = "rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256"}, + {file = "rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618"}, + {file = "rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f"}, + {file = "rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed"}, + {file = "rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632"}, + {file = "rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c"}, + {file = "rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0"}, + {file = "rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9"}, + {file = "rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9"}, + {file = "rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a"}, + {file = "rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246"}, + {file = "rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387"}, + {file = "rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af"}, + {file = "rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33"}, + {file = "rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953"}, + {file = "rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9"}, + {file = "rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37"}, + {file = "rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867"}, + {file = "rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da"}, + {file = "rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8"}, + {file = "rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b"}, + {file = "rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a"}, + {file = "rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170"}, + {file = "rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e"}, + {file = "rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f"}, + {file = "rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7"}, + {file = "rpds_py-0.26.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:7a48af25d9b3c15684059d0d1fc0bc30e8eee5ca521030e2bffddcab5be40226"}, + {file = "rpds_py-0.26.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c71c2f6bf36e61ee5c47b2b9b5d47e4d1baad6426bfed9eea3e858fc6ee8806"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d815d48b1804ed7867b539236b6dd62997850ca1c91cad187f2ddb1b7bbef19"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84cfbd4d4d2cdeb2be61a057a258d26b22877266dd905809e94172dff01a42ae"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbaa70553ca116c77717f513e08815aec458e6b69a028d4028d403b3bc84ff37"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39bfea47c375f379d8e87ab4bb9eb2c836e4f2069f0f65731d85e55d74666387"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1533b7eb683fb5f38c1d68a3c78f5fdd8f1412fa6b9bf03b40f450785a0ab915"}, + {file = "rpds_py-0.26.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5ab0ee51f560d179b057555b4f601b7df909ed31312d301b99f8b9fc6028284"}, + {file = "rpds_py-0.26.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e5162afc9e0d1f9cae3b577d9c29ddbab3505ab39012cb794d94a005825bde21"}, + {file = "rpds_py-0.26.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:43f10b007033f359bc3fa9cd5e6c1e76723f056ffa9a6b5c117cc35720a80292"}, + {file = "rpds_py-0.26.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e3730a48e5622e598293eee0762b09cff34dd3f271530f47b0894891281f051d"}, + {file = "rpds_py-0.26.0-cp39-cp39-win32.whl", hash = "sha256:4b1f66eb81eab2e0ff5775a3a312e5e2e16bf758f7b06be82fb0d04078c7ac51"}, + {file = "rpds_py-0.26.0-cp39-cp39-win_amd64.whl", hash = "sha256:519067e29f67b5c90e64fb1a6b6e9d2ec0ba28705c51956637bac23a2f4ddae1"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3c0909c5234543ada2515c05dc08595b08d621ba919629e94427e8e03539c958"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c1fb0cda2abcc0ac62f64e2ea4b4e64c57dfd6b885e693095460c61bde7bb18e"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d142d2d6cf9b31c12aa4878d82ed3b2324226270b89b676ac62ccd7df52d08"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a547e21c5610b7e9093d870be50682a6a6cf180d6da0f42c47c306073bfdbbf6"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35e9a70a0f335371275cdcd08bc5b8051ac494dd58bff3bbfb421038220dc871"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dfa6115c6def37905344d56fb54c03afc49104e2ca473d5dedec0f6606913b4"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:313cfcd6af1a55a286a3c9a25f64af6d0e46cf60bc5798f1db152d97a216ff6f"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f7bf2496fa563c046d05e4d232d7b7fd61346e2402052064b773e5c378bf6f73"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:aa81873e2c8c5aa616ab8e017a481a96742fdf9313c40f14338ca7dbf50cb55f"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:68ffcf982715f5b5b7686bdd349ff75d422e8f22551000c24b30eaa1b7f7ae84"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6188de70e190847bb6db3dc3981cbadff87d27d6fe9b4f0e18726d55795cee9b"}, + {file = "rpds_py-0.26.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1c962145c7473723df9722ba4c058de12eb5ebedcb4e27e7d902920aa3831ee8"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0"}, + {file = "rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a90a13408a7a856b87be8a9f008fff53c5080eea4e4180f6c2e546e4a972fb5d"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ac51b65e8dc76cf4949419c54c5528adb24fc721df722fd452e5fbc236f5c40"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59b2093224a18c6508d95cfdeba8db9cbfd6f3494e94793b58972933fcee4c6d"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f01a5d6444a3258b00dc07b6ea4733e26f8072b788bef750baa37b370266137"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6e2c12160c72aeda9d1283e612f68804621f448145a210f1bf1d79151c47090"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb28c1f569f8d33b2b5dcd05d0e6ef7005d8639c54c2f0be824f05aedf715255"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1766b5724c3f779317d5321664a343c07773c8c5fd1532e4039e6cc7d1a815be"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b6d9e5a2ed9c4988c8f9b28b3bc0e3e5b1aaa10c28d210a594ff3a8c02742daf"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b5f7a446ddaf6ca0fad9a5535b56fbfc29998bf0e0b450d174bbec0d600e1d72"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:eed5ac260dd545fbc20da5f4f15e7efe36a55e0e7cf706e4ec005b491a9546a0"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:582462833ba7cee52e968b0341b85e392ae53d44c0f9af6a5927c80e539a8b67"}, + {file = "rpds_py-0.26.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69a607203441e07e9a8a529cff1d5b73f6a160f22db1097211e6212a68567d11"}, + {file = "rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0"}, ] [[package]] name = "ruff" -version = "0.11.13" +version = "0.12.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46"}, - {file = "ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48"}, - {file = "ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71"}, - {file = "ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9"}, - {file = "ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc"}, - {file = "ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7"}, - {file = "ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432"}, - {file = "ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492"}, - {file = "ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250"}, - {file = "ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3"}, - {file = "ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b"}, - {file = "ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514"}, + {file = "ruff-0.12.2-py3-none-linux_armv6l.whl", hash = "sha256:093ea2b221df1d2b8e7ad92fc6ffdca40a2cb10d8564477a987b44fd4008a7be"}, + {file = "ruff-0.12.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:09e4cf27cc10f96b1708100fa851e0daf21767e9709e1649175355280e0d950e"}, + {file = "ruff-0.12.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8ae64755b22f4ff85e9c52d1f82644abd0b6b6b6deedceb74bd71f35c24044cc"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eb3a6b2db4d6e2c77e682f0b988d4d61aff06860158fdb413118ca133d57922"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:73448de992d05517170fc37169cbca857dfeaeaa8c2b9be494d7bcb0d36c8f4b"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b8b94317cbc2ae4a2771af641739f933934b03555e51515e6e021c64441532d"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:45fc42c3bf1d30d2008023a0a9a0cfb06bf9835b147f11fe0679f21ae86d34b1"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce48f675c394c37e958bf229fb5c1e843e20945a6d962cf3ea20b7a107dcd9f4"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793d8859445ea47591272021a81391350205a4af65a9392401f418a95dfb75c9"}, + {file = "ruff-0.12.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6932323db80484dda89153da3d8e58164d01d6da86857c79f1961934354992da"}, + {file = "ruff-0.12.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6aa7e623a3a11538108f61e859ebf016c4f14a7e6e4eba1980190cacb57714ce"}, + {file = "ruff-0.12.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2a4a20aeed74671b2def096bdf2eac610c7d8ffcbf4fb0e627c06947a1d7078d"}, + {file = "ruff-0.12.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:71a4c550195612f486c9d1f2b045a600aeba851b298c667807ae933478fcef04"}, + {file = "ruff-0.12.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4987b8f4ceadf597c927beee65a5eaf994c6e2b631df963f86d8ad1bdea99342"}, + {file = "ruff-0.12.2-py3-none-win32.whl", hash = "sha256:369ffb69b70cd55b6c3fc453b9492d98aed98062db9fec828cdfd069555f5f1a"}, + {file = "ruff-0.12.2-py3-none-win_amd64.whl", hash = "sha256:dca8a3b6d6dc9810ed8f328d406516bf4d660c00caeaef36eb831cf4871b0639"}, + {file = "ruff-0.12.2-py3-none-win_arm64.whl", hash = "sha256:48d6c6bfb4761df68bc05ae630e24f506755e702d4fb08f08460be778c7ccb12"}, + {file = "ruff-0.12.2.tar.gz", hash = "sha256:d7b4f55cd6f325cb7621244f19c873c565a08aff5a4ba9c69aa7355f3f7afd3e"}, ] [[package]] @@ -4893,14 +4921,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.14.0" +version = "4.14.1" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["main", "book", "dev"] files = [ - {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"}, - {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"}, + {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, + {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, ] [[package]] @@ -5226,4 +5254,4 @@ data = ["aio-fluid"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<4.0" -content-hash = "0f40df9c82e965cba96e5f89a62560fb8ef77829b322f71938025377293c1490" +content-hash = "325d887db9e4533fb86c2ddd1bc13ef6a1c119698cd294458dc647690de0c20c" diff --git a/pyproject.toml b/pyproject.toml index f08a14ac..facd4f64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "quantflow" -version = "0.3.3" +version = "0.4.0" description = "quantitative analysis" authors = [{ name = "Luca Sbardella", email = "luca@quantmind.com" }] license = "BSD-3-Clause" @@ -20,9 +20,7 @@ Repository = "https://github.com/quantmind/quantflow" Documentation = "https://quantmind.github.io/quantflow/" [project.optional-dependencies] -data = [ - "aio-fluid[http]>=1.2.1", -] +data = ["aio-fluid[http]>=1.2.1"] cli = [ "asciichartpy>=1.5.25", "async-cache>=1.1.1", @@ -41,7 +39,7 @@ black = "^25.1.0" pytest-cov = "^6.0.0" mypy = "^1.14.1" ghp-import = "^2.0.2" -ruff = "^0.11.12" +ruff = "^0.12.2" pytest-asyncio = "^1.0.0" isort = "^6.0.1" diff --git a/quantflow/__init__.py b/quantflow/__init__.py index ecc96a16..7765d6d4 100644 --- a/quantflow/__init__.py +++ b/quantflow/__init__.py @@ -1,3 +1,3 @@ """Quantitative analysis and pricing""" -__version__ = "0.3.3" +__version__ = "0.4.0" diff --git a/quantflow/data/deribit.py b/quantflow/data/deribit.py index a1dec577..80701eef 100644 --- a/quantflow/data/deribit.py +++ b/quantflow/data/deribit.py @@ -9,8 +9,14 @@ from fluid.utils.data import compact_dict from fluid.utils.http_client import AioHttpClient, HttpResponse, HttpResponseError +from quantflow.options.inputs import OptionType from quantflow.options.surface import VolSecurityType, VolSurfaceLoader -from quantflow.utils.numbers import round_to_step, to_decimal +from quantflow.utils.numbers import ( + Number, + round_to_step, + to_decimal, + to_decimal_or_none, +) def parse_maturity(v: str) -> datetime: @@ -80,9 +86,19 @@ async def get_volatility(self, currency: str, **kw: Any) -> pd.DataFrame: kw.update(params=dict(currency=currency), callback=self.to_df) return await self.get_path("public/get_historical_volatility", **kw) - async def volatility_surface_loader(self, currency: str) -> VolSurfaceLoader: + async def volatility_surface_loader( + self, + currency: str, + *, + exclude_open_interest: Number | None = None, + exclude_volume: Number | None = None, + ) -> VolSurfaceLoader: """Create a :class:`.VolSurfaceLoader` for a given crypto-currency""" - loader = VolSurfaceLoader() + loader = VolSurfaceLoader( + asset=currency, + exclude_open_interest=to_decimal_or_none(exclude_open_interest), + exclude_volume=to_decimal_or_none(exclude_volume), + ) futures = await self.get_book_summary_by_currency( currency=currency, kind=InstrumentKind.future ) @@ -92,9 +108,9 @@ async def volatility_surface_loader(self, currency: str) -> VolSurfaceLoader: instruments = await self.get_instruments(currency=currency) instrument_map = {i["instrument_name"]: i for i in instruments} min_tick_size = Decimal("inf") - for future in futures: - if (bid_ := future["bid_price"]) and (ask_ := future["ask_price"]): - name = future["instrument_name"] + for entry in futures: + if (bid_ := entry["bid_price"]) and (ask_ := entry["ask_price"]): + name = entry["instrument_name"] meta = instrument_map[name] tick_size = to_decimal(meta["tick_size"]) min_tick_size = min(min_tick_size, tick_size) @@ -105,8 +121,8 @@ async def volatility_surface_loader(self, currency: str) -> VolSurfaceLoader: VolSecurityType.spot, bid=bid, ask=ask, - open_interest=int(future["open_interest"]), - volume=int(future["volume_usd"]), + open_interest=to_decimal(entry["open_interest"]), + volume=to_decimal(entry["volume_usd"]), ) else: maturity = pd.to_datetime( @@ -119,15 +135,15 @@ async def volatility_surface_loader(self, currency: str) -> VolSurfaceLoader: maturity=maturity, bid=bid, ask=ask, - open_interest=int(future["open_interest"]), - volume=int(future["volume_usd"]), + open_interest=to_decimal(entry["open_interest"]), + volume=to_decimal(entry["volume_usd"]), ) loader.tick_size_forwards = min_tick_size min_tick_size = Decimal("inf") - for option in options: - if (bid_ := option["bid_price"]) and (ask_ := option["ask_price"]): - name = option["instrument_name"] + for entry in options: + if (bid_ := entry["bid_price"]) and (ask_ := entry["ask_price"]): + name = entry["instrument_name"] meta = instrument_map[name] tick_size = to_decimal(meta["tick_size"]) min_tick_size = min(min_tick_size, tick_size) @@ -139,9 +155,15 @@ async def volatility_surface_loader(self, currency: str) -> VolSurfaceLoader: unit="ms", utc=True, ).to_pydatetime(), - call=meta["option_type"] == "call", + option_type=( + OptionType.call + if meta["option_type"] == "call" + else OptionType.put + ), bid=round_to_step(bid_, tick_size), ask=round_to_step(ask_, tick_size), + open_interest=to_decimal(entry["open_interest"]), + volume=to_decimal(entry["volume_usd"]), ) loader.tick_size_options = min_tick_size return loader diff --git a/quantflow/options/inputs.py b/quantflow/options/inputs.py index b7afdeb8..da2461d8 100644 --- a/quantflow/options/inputs.py +++ b/quantflow/options/inputs.py @@ -3,13 +3,35 @@ import enum from datetime import datetime from decimal import Decimal -from typing import Generic, TypeVar +from typing import TypeVar from pydantic import BaseModel +from quantflow.utils.numbers import ZERO + P = TypeVar("P") +class Side(enum.StrEnum): + """Side of the market""" + + bid = enum.auto() + ask = enum.auto() + + +class OptionType(enum.StrEnum): + """Type of option""" + + call = enum.auto() + put = enum.auto() + + def is_call(self) -> bool: + return self is OptionType.call + + def is_put(self) -> bool: + return self is OptionType.put + + class VolSecurityType(enum.StrEnum): """Type of security for the volatility surface""" @@ -21,31 +43,30 @@ def vol_surface_type(self) -> VolSecurityType: return self -class VolSurfaceInput(BaseModel, Generic[P]): - bid: P - ask: P - +class VolSurfaceInput(BaseModel): + bid: Decimal + ask: Decimal + open_interest: Decimal = ZERO + volume: Decimal = ZERO -class OptionInput(BaseModel): - price: Decimal - strike: Decimal - maturity: datetime - call: bool - -class SpotInput(VolSurfaceInput[Decimal]): +class SpotInput(VolSurfaceInput): security_type: VolSecurityType = VolSecurityType.spot -class ForwardInput(VolSurfaceInput[Decimal]): +class ForwardInput(VolSurfaceInput): maturity: datetime security_type: VolSecurityType = VolSecurityType.forward -class OptionSidesInput(VolSurfaceInput[OptionInput]): +class OptionInput(VolSurfaceInput): + strike: Decimal + maturity: datetime + option_type: OptionType security_type: VolSecurityType = VolSecurityType.option class VolSurfaceInputs(BaseModel): + asset: str ref_date: datetime - inputs: list[ForwardInput | SpotInput | OptionSidesInput] + inputs: list[ForwardInput | SpotInput | OptionInput] diff --git a/quantflow/options/surface.py b/quantflow/options/surface.py index 5d89370d..c9fcedd1 100644 --- a/quantflow/options/surface.py +++ b/quantflow/options/surface.py @@ -10,17 +10,19 @@ import numpy as np import pandas as pd from ccy.core.daycounter import ActAct, DayCounter +from pydantic import BaseModel from quantflow.utils import plot from quantflow.utils.dates import utcnow from quantflow.utils.interest_rates import rate_from_spot_and_forward -from quantflow.utils.numbers import Number, sigfig, to_decimal +from quantflow.utils.numbers import ZERO, Number, sigfig, to_decimal from .bs import black_price, implied_black_volatility from .inputs import ( ForwardInput, OptionInput, - OptionSidesInput, + OptionType, + Side, SpotInput, VolSecurityType, VolSurfaceInput, @@ -28,7 +30,6 @@ ) INITIAL_VOL = 0.5 -ZERO = Decimal("0") default_day_counter = ActAct() @@ -70,44 +71,59 @@ def mid(self) -> Decimal: @dataclass class SpotPrice(Price[S]): - open_interest: int = 0 - volume: int = 0 + open_interest: Decimal = ZERO + volume: Decimal = ZERO def inputs(self) -> SpotInput: - return SpotInput(bid=self.bid, ask=self.ask) + return SpotInput( + bid=self.bid, + ask=self.ask, + open_interest=self.open_interest, + volume=self.volume, + ) @dataclass class FwdPrice(Price[S]): maturity: datetime - open_interest: int = 0 - volume: int = 0 + open_interest: Decimal = ZERO + volume: Decimal = ZERO def inputs(self) -> ForwardInput: return ForwardInput( bid=self.bid, ask=self.ask, maturity=self.maturity, + open_interest=self.open_interest, + volume=self.volume, ) -@dataclass -class OptionPrice: - price: Decimal - """Price of the option divided by the forward price""" +class OptionMetadata(BaseModel): strike: Decimal """Strike price""" - call: bool - """True if call, False if put""" + option_type: OptionType + """Type of the option""" maturity: datetime """Maturity date""" forward: Decimal = ZERO """Forward price of the underlying""" - implied_vol: float = 0 - """Implied Black volatility""" ttm: float = 0 """Time to maturity in years""" - side: str = "bid" + open_interest: Decimal = ZERO + """Open interest of the option""" + volume: Decimal = ZERO + """Volume of the option in USD""" + + +class OptionPrice(BaseModel): + price: Decimal + """Price of the option divided by the forward price""" + meta: OptionMetadata + """Metadata of the option price""" + implied_vol: float = 0 + """Implied Black volatility""" + side: Side = Side.bid """Side of the market""" converged: bool = True """Flag indicating if implied vol calculation converged""" @@ -123,7 +139,9 @@ def create( ref_date: datetime | None = None, maturity: datetime | None = None, day_counter: DayCounter | None = None, - call: bool = True, + option_type: OptionType = OptionType.call, + open_interest: Number = ZERO, + volume: Number = ZERO, ) -> OptionPrice: """Create an option price @@ -134,14 +152,46 @@ def create( day_counter = day_counter or default_day_counter return cls( price=to_decimal(price), - strike=to_decimal(strike), - forward=to_decimal(forward or strike), implied_vol=implied_vol, - call=call, - maturity=maturity, - ttm=day_counter.dcf(ref_date, maturity), + meta=OptionMetadata( + strike=to_decimal(strike), + forward=to_decimal(forward or strike), + option_type=option_type, + maturity=maturity, + ttm=day_counter.dcf(ref_date, maturity), + open_interest=to_decimal(open_interest), + volume=to_decimal(volume), + ), ) + @property + def strike(self) -> Decimal: + return self.meta.strike + + @property + def forward(self) -> Decimal: + return self.meta.forward + + @property + def maturity(self) -> datetime: + return self.meta.maturity + + @property + def ttm(self) -> float: + return self.meta.ttm + + @property + def option_type(self) -> OptionType: + return self.meta.option_type + + @property + def open_interest(self) -> Decimal: + return self.meta.open_interest + + @property + def volume(self) -> Decimal: + return self.meta.volume + @property def moneyness(self) -> float: return float(np.log(float(self.strike / self.forward))) @@ -156,7 +206,7 @@ def forward_price(self) -> Decimal: @property def price_intrinsic(self) -> Decimal: - if self.call: + if self.option_type.is_call(): return max(self.forward - self.strike, ZERO) / self.forward else: return max(self.strike - self.forward, ZERO) / self.forward @@ -171,7 +221,7 @@ def call_price(self) -> Decimal: use put-call parity to calculate the call price if a put """ - if self.call: + if self.option_type.is_call(): return self.price else: return self.price + 1 - self.strike / self.forward @@ -182,15 +232,11 @@ def put_price(self) -> Decimal: use put-call parity to calculate the put price if a call """ - if self.call: + if self.option_type.is_call(): return self.price - 1 + self.strike / self.forward else: return self.price - @property - def option_type(self) -> str: - return "call" if self.call else "put" - def can_price(self, converged: bool, select: OptionSelection) -> bool: if self.price_time > ZERO and not np.isnan(self.implied_vol): if not self.converged and converged is True: @@ -200,14 +246,6 @@ def can_price(self, converged: bool, select: OptionSelection) -> bool: return True return False - def inputs(self) -> OptionInput: - return OptionInput( - strike=self.strike, - price=self.price, - maturity=self.maturity, - call=self.call, - ) - def calculate_price(self) -> OptionPrice: self.price = Decimal( sigfig( @@ -215,7 +253,7 @@ def calculate_price(self) -> OptionPrice: np.asarray(self.moneyness), self.implied_vol, self.ttm, - 1 if self.call else -1, + 1 if self.option_type.is_call() else -1, ).sum(), 8, ) @@ -233,8 +271,10 @@ def _asdict(self) -> dict[str, Any]: price=float(self.price), price_bp=float(self.price_bp), forward_price=float(self.forward_price), - type=self.option_type, - side=self.side, + type=str(self.option_type), + side=str(self.side), + open_interest=float(self.open_interest), + volume=float(self.volume), ) @@ -250,10 +290,9 @@ class OptionArrays(NamedTuple): @dataclass class OptionPrices(Generic[S]): security: S + meta: OptionMetadata bid: OptionPrice ask: OptionPrice - open_interest: int = 0 - volume: int = 0 def prices( self, @@ -264,18 +303,32 @@ def prices( initial_vol: float = INITIAL_VOL, converged: bool = True, ) -> Iterator[OptionPrice]: + """Iterator over bid/ask option prices + + :param forward: Forward price of the underlying asset + :param ttm: Time to maturity in years + :param select: the :class:`.OptionSelection` method + :param initial_vol: Initial volatility for the root finding algorithm + """ + self.meta.forward = forward + self.meta.ttm = ttm for o in (self.bid, self.ask): - o.forward = forward - o.ttm = ttm + o.meta.forward = forward + o.meta.ttm = ttm if not o.implied_vol: o.implied_vol = initial_vol if o.can_price(converged, select): yield o - def inputs(self) -> OptionSidesInput: - return OptionSidesInput( - bid=self.bid.inputs(), - ask=self.ask.inputs(), + def inputs(self) -> OptionInput: + return OptionInput( + bid=self.bid.price, + ask=self.ask.price, + open_interest=self.meta.open_interest, + volume=self.meta.volume, + strike=self.meta.strike, + maturity=self.meta.maturity, + option_type=self.meta.option_type, ) @@ -402,6 +455,8 @@ class VolSurface(Generic[S]): ref_date: datetime """Reference date for the volatility surface""" + asset: str + """Name of the underlying asset""" spot: SpotPrice[S] """Spot price of the underlying asset""" maturities: tuple[VolCrossSection[S], ...] @@ -421,7 +476,9 @@ def securities(self) -> Iterator[SpotPrice[S] | FwdPrice[S] | OptionPrices[S]]: def inputs(self) -> VolSurfaceInputs: return VolSurfaceInputs( - ref_date=self.ref_date, inputs=list(s.inputs() for s in self.securities()) + asset=self.asset, + ref_date=self.ref_date, + inputs=list(s.inputs() for s in self.securities()), ) def term_structure(self, frequency: float = 0) -> pd.DataFrame: @@ -442,7 +499,12 @@ def option_prices( initial_vol: float = INITIAL_VOL, converged: bool = True, ) -> Iterator[OptionPrice]: - "Iterator over selected option prices in the surface" + """Iterator over selected option prices in the surface + + :param select: the :class:`.OptionSelection` method + :param index: Index of the cross section to use, if None use all + :param initial_vol: Initial volatility for the root finding algorithm + """ if index is not None: yield from self.maturities[index].option_prices( self.ref_date, @@ -543,7 +605,12 @@ def as_array( initial_vol: float = INITIAL_VOL, converged: bool = True, ) -> OptionArrays: - """Organize option prices in a numpy arrays for black volatility calculation""" + """Organize option prices in a numpy arrays for black volatility calculation + + :param select: the :class:`.OptionSelection` method + :param index: Index of the cross section to use, if None use all + :param initial_vol: Initial volatility for the root finding algorithm + """ options = list( self.option_prices( select=select, @@ -562,7 +629,7 @@ def as_array( price.append(float(option.price)) ttm.append(float(option.ttm)) vol.append(float(option.implied_vol)) - call_put.append(1 if option.call else -1) + call_put.append(1 if option.option_type.is_call() else -1) return OptionArrays( options=options, moneyness=np.array(moneyness), @@ -616,35 +683,29 @@ class VolCrossSectionLoader(Generic[S]): def add_option( self, strike: Decimal, - call: bool, + option_type: OptionType, security: S, bid: Decimal = ZERO, ask: Decimal = ZERO, - open_interest: int = 0, - volume: int = 0, + open_interest: Decimal = ZERO, + volume: Decimal = ZERO, ) -> None: if strike not in self.strikes: self.strikes[strike] = Strike(strike=strike) - option = OptionPrices( - security, - bid=OptionPrice( - price=bid, - strike=strike, - call=call, - maturity=self.maturity, - side="bid", - ), - ask=OptionPrice( - price=ask, - strike=strike, - call=call, - maturity=self.maturity, - side="ask", - ), + meta = OptionMetadata( + strike=strike, + option_type=option_type, + maturity=self.maturity, open_interest=open_interest, volume=volume, ) - if call: + option = OptionPrices( + security=security, + meta=meta, + bid=OptionPrice(price=bid, meta=meta, side=Side.bid), + ask=OptionPrice(price=ask, meta=meta, side=Side.ask), + ) + if option_type.is_call(): self.strikes[strike].call = option else: self.strikes[strike].put = option @@ -674,6 +735,8 @@ def cross_section(self) -> VolCrossSection[S] | None: class GenericVolSurfaceLoader(Generic[S]): """Helper class to build a volatility surface from a list of securities""" + asset: str = "" + """Name of the underlying asset""" spot: SpotPrice[S] | None = None """Spot price of the underlying asset""" maturities: dict[datetime, VolCrossSectionLoader[S]] = field(default_factory=dict) @@ -684,6 +747,10 @@ class GenericVolSurfaceLoader(Generic[S]): """Tick size for rounding forward and spot prices - optional""" tick_size_options: Decimal | None = None """Tick size for rounding option prices - optional""" + exclude_open_interest: Decimal | None = None + """Exclude options with open interest at or below this value""" + exclude_volume: Decimal | None = None + """Exclude options with volume at or below this value""" def get_or_create_maturity(self, maturity: datetime) -> VolCrossSectionLoader[S]: if maturity not in self.maturities: @@ -698,8 +765,8 @@ def add_spot( security: S, bid: Decimal = ZERO, ask: Decimal = ZERO, - open_interest: int = 0, - volume: int = 0, + open_interest: Decimal = ZERO, + volume: Decimal = ZERO, ) -> None: """Add a spot to the volatility surface loader""" if security.vol_surface_type() != VolSecurityType.spot: @@ -718,8 +785,8 @@ def add_forward( maturity: datetime, bid: Decimal = ZERO, ask: Decimal = ZERO, - open_interest: int = 0, - volume: int = 0, + open_interest: Decimal = ZERO, + volume: Decimal = ZERO, ) -> None: """Add a forward to the volatility surface loader""" if security.vol_surface_type() != VolSecurityType.forward: @@ -738,19 +805,26 @@ def add_option( security: S, strike: Decimal, maturity: datetime, - call: bool, + option_type: OptionType, bid: Decimal = ZERO, ask: Decimal = ZERO, - open_interest: int = 0, - volume: int = 0, + open_interest: Decimal = ZERO, + volume: Decimal = ZERO, ) -> None: """Add an option to the volatility surface loader""" if security.vol_surface_type() != VolSecurityType.option: raise ValueError("Security is not an option") + if self.exclude_volume is not None and volume <= self.exclude_volume: + return + if ( + self.exclude_open_interest is not None + and open_interest <= self.exclude_open_interest + ): + return self.get_or_create_maturity(maturity=maturity).add_option( - strike, - call, - security, + strike=strike, + option_type=option_type, + security=security, bid=bid, ask=ask, open_interest=open_interest, @@ -766,6 +840,7 @@ def surface(self, ref_date: datetime | None = None) -> VolSurface[S]: if section := self.maturities[maturity].cross_section(): maturities.append(section) return VolSurface( + asset=self.asset, ref_date=ref_date or utcnow(), spot=self.spot, maturities=tuple(maturities), @@ -776,7 +851,9 @@ def surface(self, ref_date: datetime | None = None) -> VolSurface[S]: class VolSurfaceLoader(GenericVolSurfaceLoader[VolSecurityType]): - def add(self, input: VolSurfaceInput[Any]) -> None: + """A volatility surface loader""" + + def add(self, input: VolSurfaceInput) -> None: """Add a volatility security input to the loader :params input: The input data for the security, @@ -791,14 +868,14 @@ def add(self, input: VolSurfaceInput[Any]) -> None: bid=input.bid, ask=input.ask, ) - elif isinstance(input, OptionSidesInput): + elif isinstance(input, OptionInput): self.add_option( VolSecurityType.option, - strike=assert_same(input.bid.strike, input.ask.strike), - call=assert_same(input.bid.call, input.ask.call), - maturity=assert_same(input.bid.maturity, input.ask.maturity), - bid=input.bid.price, - ask=input.ask.price, + strike=input.strike, + option_type=input.option_type, + maturity=input.maturity, + bid=input.bid, + ask=input.ask, ) else: raise ValueError(f"Unknown input type {type(input)}") diff --git a/quantflow/utils/numbers.py b/quantflow/utils/numbers.py index e2940875..96d2b408 100644 --- a/quantflow/utils/numbers.py +++ b/quantflow/utils/numbers.py @@ -18,6 +18,11 @@ def to_decimal(value: Number) -> Decimal: return Decimal(str(value)) if not isinstance(value, Decimal) else value +def to_decimal_or_none(value: Number | None) -> Decimal | None: + """Convert a value to Decimal, or return None if the value is None.""" + return to_decimal(value) if value is not None else None + + def sigfig(value: Number, sig: int = 5) -> str: """round a number to the given significant digit""" return f"%.{sig}g" % to_decimal(value) diff --git a/quantflow_tests/test_options.py b/quantflow_tests/test_options.py index d40f6e1d..ce63aa74 100644 --- a/quantflow_tests/test_options.py +++ b/quantflow_tests/test_options.py @@ -9,6 +9,7 @@ from quantflow.options.pricer import OptionPricer from quantflow.options.surface import ( OptionPrice, + OptionType, VolSurface, VolSurfaceInputs, surface_from_inputs, @@ -96,7 +97,7 @@ def test_call_put_parity(): option = OptionPrice.create(100).calculate_price() assert option.moneyness == 0 assert option.price == option.call_price - option2 = OptionPrice.create(100, call=False).calculate_price() + option2 = OptionPrice.create(100, option_type=OptionType.put).calculate_price() assert option2.price == option2.put_price assert option2.price == option.put_price assert option2.call_price == option.price @@ -106,7 +107,9 @@ def test_call_put_parity_otm(): option = OptionPrice.create(105, forward=100).calculate_price() assert option.moneyness > 0 assert option.price == option.call_price - option2 = OptionPrice.create(105, forward=100, call=False).calculate_price() + option2 = OptionPrice.create( + 105, forward=100, option_type=OptionType.put + ).calculate_price() assert option2.price == option2.put_price assert option2.price == pytest.approx(option.put_price) assert option2.call_price == pytest.approx(option.price) diff --git a/quantflow_tests/volsurface.json b/quantflow_tests/volsurface.json index 76757411..fa0fa9fc 100644 --- a/quantflow_tests/volsurface.json +++ b/quantflow_tests/volsurface.json @@ -1 +1,3847 @@ -{"ref_date":"2023-07-11T08:20:08.964427Z","inputs":[{"bid":"30566","ask":"30566.5","security_type":"spot"},{"bid":"30585.0","ask":"30587.5","maturity":"2023-07-14T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.34","strike":"20000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.353","strike":"20000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0001","strike":"20000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0005","strike":"20000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1765","strike":"25000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.1895","strike":"25000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0002","strike":"25000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0005","strike":"25000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.143","strike":"26000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.157","strike":"26000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0003","strike":"26000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0012","strike":"26000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0795","strike":"28000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.0925","strike":"28000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"28000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"28000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0525","strike":"29000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.06","strike":"29000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0017","strike":"29000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0025","strike":"29000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.026","strike":"30000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.027","strike":"30000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0065","strike":"30000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0075","strike":"30000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0085","strike":"31000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.009","strike":"31000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.022","strike":"31000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0225","strike":"31000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0025","strike":"32000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.003","strike":"32000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0465","strike":"32000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.055","strike":"32000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.001","strike":"33000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.0015","strike":"33000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0785","strike":"33000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.0865","strike":"33000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0005","strike":"34000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.001","strike":"34000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.105","strike":"34000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.1185","strike":"34000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0003","strike":"35000","maturity":"2023-07-14T08:00:00Z","call":true},"ask":{"price":"0.0005","strike":"35000","maturity":"2023-07-14T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1375","strike":"35000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.151","strike":"35000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.3","strike":"40000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.314","strike":"40000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4635","strike":"45000","maturity":"2023-07-14T08:00:00Z","call":false},"ask":{"price":"0.478","strike":"45000","maturity":"2023-07-14T08:00:00Z","call":false},"security_type":"option"},{"bid":"30627.5","ask":"30630.0","maturity":"2023-07-21T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.341","strike":"20000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.354","strike":"20000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1785","strike":"25000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.1915","strike":"25000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"25000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"25000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1465","strike":"26000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.1595","strike":"26000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"26000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"26000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0835","strike":"28000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.0965","strike":"28000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0035","strike":"28000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.004","strike":"28000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.054","strike":"29000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.0675","strike":"29000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.007","strike":"29000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.008","strike":"29000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.037","strike":"30000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.0375","strike":"30000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.016","strike":"30000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.0165","strike":"30000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0195","strike":"31000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.0205","strike":"31000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0315","strike":"31000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.033","strike":"31000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0105","strike":"32000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.011","strike":"32000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0465","strike":"32000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.061","strike":"32000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0055","strike":"33000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.006","strike":"33000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.077","strike":"33000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.0895","strike":"33000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.003","strike":"34000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.004","strike":"34000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1065","strike":"34000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.1195","strike":"34000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.002","strike":"35000","maturity":"2023-07-21T08:00:00Z","call":true},"ask":{"price":"0.0025","strike":"35000","maturity":"2023-07-21T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.142","strike":"35000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.151","strike":"35000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2985","strike":"40000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.3125","strike":"40000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.461","strike":"45000","maturity":"2023-07-21T08:00:00Z","call":false},"ask":{"price":"0.476","strike":"45000","maturity":"2023-07-21T08:00:00Z","call":false},"security_type":"option"},{"bid":"30672.5","ask":"30677.5","maturity":"2023-07-28T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.472","strike":"16000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.485","strike":"16000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.4065","strike":"18000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.42","strike":"18000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.342","strike":"20000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.355","strike":"20000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"20000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"20000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.31","strike":"21000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.323","strike":"21000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"21000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"21000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2775","strike":"22000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.29","strike":"22000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"22000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"22000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.245","strike":"23000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.258","strike":"23000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"23000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"23000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.213","strike":"24000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.226","strike":"24000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"24000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"24000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1855","strike":"25000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.1925","strike":"25000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0015","strike":"25000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.002","strike":"25000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1545","strike":"26000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.172","strike":"26000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0025","strike":"26000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.003","strike":"26000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1135","strike":"27000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.139","strike":"27000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.004","strike":"27000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.005","strike":"27000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.094","strike":"28000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.101","strike":"28000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.007","strike":"28000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.008","strike":"28000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.062","strike":"29000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.074","strike":"29000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.013","strike":"29000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.0135","strike":"29000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.045","strike":"30000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0465","strike":"30000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0235","strike":"30000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.024","strike":"30000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0285","strike":"31000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0295","strike":"31000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0395","strike":"31000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.04","strike":"31000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.018","strike":"32000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0185","strike":"32000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0605","strike":"32000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.067","strike":"32000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.011","strike":"33000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.012","strike":"33000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0805","strike":"33000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.09","strike":"33000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.007","strike":"34000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0075","strike":"34000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1135","strike":"34000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.122","strike":"34000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0045","strike":"35000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0055","strike":"35000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1405","strike":"35000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.152","strike":"35000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.003","strike":"36000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0035","strike":"36000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1695","strike":"36000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.183","strike":"36000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0015","strike":"38000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.002","strike":"38000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.233","strike":"38000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.247","strike":"38000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0005","strike":"40000","maturity":"2023-07-28T08:00:00Z","call":true},"ask":{"price":"0.0015","strike":"40000","maturity":"2023-07-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2975","strike":"40000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.3115","strike":"40000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4595","strike":"45000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.474","strike":"45000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.622","strike":"50000","maturity":"2023-07-28T08:00:00Z","call":false},"ask":{"price":"0.637","strike":"50000","maturity":"2023-07-28T08:00:00Z","call":false},"security_type":"option"},{"bid":"30810.0","ask":"30815.0","maturity":"2023-08-25T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.4745","strike":"16000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.488","strike":"16000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.41","strike":"18000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.4235","strike":"18000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"18000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"18000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.3455","strike":"20000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.359","strike":"20000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"20000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"20000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.3145","strike":"21000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.3275","strike":"21000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0015","strike":"21000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.0025","strike":"21000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2855","strike":"22000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.2955","strike":"22000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0025","strike":"22000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.003","strike":"22000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2545","strike":"23000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.2645","strike":"23000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0035","strike":"23000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.0045","strike":"23000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.222","strike":"24000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.2335","strike":"24000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.005","strike":"24000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.006","strike":"24000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.189","strike":"25000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.203","strike":"25000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.007","strike":"25000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.008","strike":"25000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.152","strike":"26000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.1735","strike":"26000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.01","strike":"26000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.011","strike":"26000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1275","strike":"27000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.156","strike":"27000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0145","strike":"27000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.0155","strike":"27000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.11","strike":"28000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.116","strike":"28000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.021","strike":"28000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.022","strike":"28000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0895","strike":"29000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.091","strike":"29000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.031","strike":"29000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.032","strike":"29000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.07","strike":"30000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0715","strike":"30000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.043","strike":"30000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.0445","strike":"30000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.054","strike":"31000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.055","strike":"31000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.06","strike":"31000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.061","strike":"31000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0415","strike":"32000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0425","strike":"32000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0795","strike":"32000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.081","strike":"32000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.032","strike":"33000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0325","strike":"33000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1015","strike":"33000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.104","strike":"33000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0245","strike":"34000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0255","strike":"34000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1265","strike":"34000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.129","strike":"34000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.019","strike":"35000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0195","strike":"35000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.151","strike":"35000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.158","strike":"35000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0145","strike":"36000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0155","strike":"36000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1785","strike":"36000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.1885","strike":"36000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.009","strike":"38000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.01","strike":"38000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2345","strike":"38000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.249","strike":"38000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.006","strike":"40000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.0065","strike":"40000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.298","strike":"40000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.3105","strike":"40000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.002","strike":"45000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.003","strike":"45000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.455","strike":"45000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.4695","strike":"45000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.001","strike":"50000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.002","strike":"50000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.6155","strike":"50000","maturity":"2023-08-25T08:00:00Z","call":false},"ask":{"price":"0.631","strike":"50000","maturity":"2023-08-25T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0005","strike":"55000","maturity":"2023-08-25T08:00:00Z","call":true},"ask":{"price":"0.001","strike":"55000","maturity":"2023-08-25T08:00:00Z","call":true},"security_type":"option"},{"bid":"31012.5","ask":"31015.0","maturity":"2023-09-29T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.6635","strike":"10000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.693","strike":"10000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"10000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.001","strike":"10000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.599","strike":"12000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.628","strike":"12000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.535","strike":"14000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.5625","strike":"14000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0005","strike":"14000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"14000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.503","strike":"15000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.5325","strike":"15000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"15000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0015","strike":"15000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4705","strike":"16000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.5","strike":"16000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.001","strike":"16000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.002","strike":"16000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.42","strike":"18000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.4365","strike":"18000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.002","strike":"18000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.003","strike":"18000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.3555","strike":"20000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.3745","strike":"20000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.004","strike":"20000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.005","strike":"20000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.291","strike":"22000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.312","strike":"22000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.007","strike":"22000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0075","strike":"22000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.229","strike":"24000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.2545","strike":"24000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0125","strike":"24000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0135","strike":"24000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1945","strike":"25000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.226","strike":"25000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0165","strike":"25000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0175","strike":"25000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.168","strike":"26000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.1915","strike":"26000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0225","strike":"26000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.023","strike":"26000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.126","strike":"28000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.138","strike":"28000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.039","strike":"28000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.04","strike":"28000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.097","strike":"30000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.099","strike":"30000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0645","strike":"30000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.0655","strike":"30000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0685","strike":"32000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.069","strike":"32000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1","strike":"32000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.1015","strike":"32000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.048","strike":"34000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.049","strike":"34000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1205","strike":"34000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.167","strike":"34000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.04","strike":"35000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.041","strike":"35000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.154","strike":"35000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.1835","strike":"35000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.034","strike":"36000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.035","strike":"36000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.192","strike":"36000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.198","strike":"36000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0185","strike":"40000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.019","strike":"40000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2895","strike":"40000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.3225","strike":"40000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0055","strike":"50000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.006","strike":"50000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.6095","strike":"50000","maturity":"2023-09-29T08:00:00Z","call":false},"ask":{"price":"0.625","strike":"50000","maturity":"2023-09-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.002","strike":"60000","maturity":"2023-09-29T08:00:00Z","call":true},"ask":{"price":"0.003","strike":"60000","maturity":"2023-09-29T08:00:00Z","call":true},"security_type":"option"},{"bid":"31415.0","ask":"31417.5","maturity":"2023-12-29T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.6765","strike":"10000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.691","strike":"10000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0015","strike":"10000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0025","strike":"10000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.6135","strike":"12000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.628","strike":"12000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.002","strike":"12000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.003","strike":"12000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.5515","strike":"14000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.5655","strike":"14000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0035","strike":"14000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0045","strike":"14000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.523","strike":"15000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.5355","strike":"15000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.005","strike":"15000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.006","strike":"15000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4905","strike":"16000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.505","strike":"16000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0065","strike":"16000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.007","strike":"16000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4305","strike":"18000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.445","strike":"18000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0105","strike":"18000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.011","strike":"18000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.373","strike":"20000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.3875","strike":"20000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0165","strike":"20000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0175","strike":"20000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.319","strike":"22000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.333","strike":"22000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.025","strike":"22000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0265","strike":"22000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.268","strike":"24000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.282","strike":"24000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0385","strike":"24000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0395","strike":"24000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2465","strike":"25000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.256","strike":"25000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.047","strike":"25000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.048","strike":"25000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2245","strike":"26000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.233","strike":"26000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0565","strike":"26000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0575","strike":"26000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.173","strike":"28000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.2125","strike":"28000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0805","strike":"28000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.0815","strike":"28000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1545","strike":"30000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.1585","strike":"30000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.11","strike":"30000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.111","strike":"30000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1265","strike":"32000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.1275","strike":"32000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.144","strike":"32000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.1465","strike":"32000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1045","strike":"34000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.1055","strike":"34000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1845","strike":"34000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.1885","strike":"34000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.095","strike":"35000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.096","strike":"35000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.162","strike":"35000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.255","strike":"35000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0855","strike":"36000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.0875","strike":"36000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.183","strike":"36000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.2805","strike":"36000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.071","strike":"38000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.073","strike":"38000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2775","strike":"38000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.2845","strike":"38000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0605","strike":"40000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.0615","strike":"40000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.3295","strike":"40000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.337","strike":"40000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.04","strike":"45000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.041","strike":"45000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.465","strike":"45000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.4785","strike":"45000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0275","strike":"50000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.0285","strike":"50000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.61","strike":"50000","maturity":"2023-12-29T08:00:00Z","call":false},"ask":{"price":"0.626","strike":"50000","maturity":"2023-12-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.0145","strike":"60000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.015","strike":"60000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.008","strike":"70000","maturity":"2023-12-29T08:00:00Z","call":true},"ask":{"price":"0.009","strike":"70000","maturity":"2023-12-29T08:00:00Z","call":true},"security_type":"option"},{"bid":"31840.0","ask":"31842.5","maturity":"2024-03-29T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.6835","strike":"10000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.699","strike":"10000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0045","strike":"10000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.0075","strike":"10000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.5335","strike":"15000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.549","strike":"15000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.011","strike":"15000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.0135","strike":"15000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.395","strike":"20000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.41","strike":"20000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.029","strike":"20000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.032","strike":"20000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.3445","strike":"22000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.3605","strike":"22000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0425","strike":"22000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.045","strike":"22000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2995","strike":"24000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.3145","strike":"24000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.059","strike":"24000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.0625","strike":"24000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.242","strike":"26000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.2865","strike":"26000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.081","strike":"26000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.085","strike":"26000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.121","strike":"28000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.255","strike":"28000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1075","strike":"28000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.111","strike":"28000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1","strike":"30000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.2255","strike":"30000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.139","strike":"30000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.143","strike":"30000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1685","strike":"32000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.2565","strike":"32000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.173","strike":"32000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.1795","strike":"32000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.146","strike":"34000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.1505","strike":"34000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2145","strike":"34000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.2195","strike":"34000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.136","strike":"35000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.1405","strike":"35000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.235","strike":"35000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.241","strike":"35000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1265","strike":"36000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.131","strike":"36000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2575","strike":"36000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.2635","strike":"36000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.11","strike":"38000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.1145","strike":"38000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.193","strike":"38000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.418","strike":"38000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.097","strike":"40000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.1005","strike":"40000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.3465","strike":"40000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.362","strike":"40000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.07","strike":"45000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.075","strike":"45000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.4765","strike":"45000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.493","strike":"45000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.053","strike":"50000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.058","strike":"50000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.616","strike":"50000","maturity":"2024-03-29T08:00:00Z","call":false},"ask":{"price":"0.633","strike":"50000","maturity":"2024-03-29T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.033","strike":"60000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.0365","strike":"60000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0225","strike":"70000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.025","strike":"70000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0155","strike":"80000","maturity":"2024-03-29T08:00:00Z","call":true},"ask":{"price":"0.018","strike":"80000","maturity":"2024-03-29T08:00:00Z","call":true},"security_type":"option"},{"bid":"32095.0","ask":"32177.5","maturity":"2024-06-28T08:00:00Z","security_type":"forward"},{"bid":{"price":"0.6875","strike":"10000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.7035","strike":"10000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.006","strike":"10000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.007","strike":"10000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.5435","strike":"15000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.5595","strike":"15000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.017","strike":"15000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.02","strike":"15000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.4135","strike":"20000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.43","strike":"20000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0425","strike":"20000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.0445","strike":"20000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.368","strike":"22000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.384","strike":"22000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0585","strike":"22000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.0625","strike":"22000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.326","strike":"24000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.342","strike":"24000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.0785","strike":"24000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.083","strike":"24000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.25","strike":"26000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.9875","strike":"26000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1015","strike":"26000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.1075","strike":"26000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.2355","strike":"28000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.987","strike":"28000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1315","strike":"28000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.1355","strike":"28000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.219","strike":"30000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.2595","strike":"30000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.1635","strike":"30000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.169","strike":"30000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1995","strike":"32000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.2055","strike":"32000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.237","strike":"34000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.245","strike":"34000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.161","strike":"36000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.168","strike":"36000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.281","strike":"36000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.289","strike":"36000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1445","strike":"38000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.1495","strike":"38000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.326","strike":"38000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.3345","strike":"38000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1275","strike":"40000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.134","strike":"40000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.2445","strike":"40000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"1.2285","strike":"40000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.1","strike":"45000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.1065","strike":"45000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.495","strike":"45000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.512","strike":"45000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.08","strike":"50000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.0855","strike":"50000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.629","strike":"50000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.648","strike":"50000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.055","strike":"60000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.0615","strike":"60000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.9135","strike":"60000","maturity":"2024-06-28T08:00:00Z","call":false},"ask":{"price":"0.933","strike":"60000","maturity":"2024-06-28T08:00:00Z","call":false},"security_type":"option"},{"bid":{"price":"0.04","strike":"70000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.0465","strike":"70000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"},{"bid":{"price":"0.027","strike":"80000","maturity":"2024-06-28T08:00:00Z","call":true},"ask":{"price":"0.038","strike":"80000","maturity":"2024-06-28T08:00:00Z","call":true},"security_type":"option"}]} \ No newline at end of file +{ + "asset": "eth", + "ref_date": "2025-07-06T13:26:53.540946Z", + "inputs": [ + { + "bid": "2524.15", + "ask": "2524.20", + "open_interest": "272489133", + "volume": "36899794.0", + "security_type": "spot" + }, + { + "bid": "2524.75", + "ask": "2525.25", + "open_interest": "5702605", + "volume": "1104055.0", + "maturity": "2025-07-11T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.2860", + "ask": "0.2895", + "open_interest": "100.0", + "volume": "0.0", + "strike": "1800.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0001", + "ask": "0.0003", + "open_interest": "5561.0", + "volume": "768.67", + "strike": "1800.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0004", + "ask": "0.0005", + "open_interest": "3485.0", + "volume": "501.18", + "strike": "1900.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1795", + "ask": "0.2405", + "open_interest": "1.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0007", + "ask": "0.0009", + "open_interest": "4471.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1590", + "ask": "0.2220", + "open_interest": "2.0", + "volume": "0.0", + "strike": "2050.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0009", + "ask": "0.0011", + "open_interest": "5291.0", + "volume": "32.99", + "strike": "2050.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1390", + "ask": "0.2035", + "open_interest": "3.0", + "volume": "0.0", + "strike": "2100.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0010", + "ask": "0.0014", + "open_interest": "2725.0", + "volume": "19.62", + "strike": "2100.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1480", + "ask": "0.1520", + "open_interest": "118.0", + "volume": "0.0", + "strike": "2150.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0014", + "ask": "0.0018", + "open_interest": "3015.0", + "volume": "241.4", + "strike": "2150.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1285", + "ask": "0.1335", + "open_interest": "243.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0020", + "ask": "0.0023", + "open_interest": "4562.0", + "volume": "122.51", + "strike": "2200.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1100", + "ask": "0.1140", + "open_interest": "394.0", + "volume": "0.0", + "strike": "2250.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0030", + "ask": "0.0032", + "open_interest": "4275.0", + "volume": "606.92", + "strike": "2250.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0925", + "ask": "0.0960", + "open_interest": "846.0", + "volume": "465.03", + "strike": "2300.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0040", + "ask": "0.0044", + "open_interest": "7816.0", + "volume": "5788.35", + "strike": "2300.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0735", + "ask": "0.0775", + "open_interest": "994.0", + "volume": "0.0", + "strike": "2350.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0060", + "ask": "0.0065", + "open_interest": "7747.0", + "volume": "27136.44", + "strike": "2350.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0570", + "ask": "0.0610", + "open_interest": "3473.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0090", + "ask": "0.0100", + "open_interest": "9120.0", + "volume": "17690.4", + "strike": "2400.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0435", + "ask": "0.0460", + "open_interest": "6918.0", + "volume": "0.0", + "strike": "2450.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0140", + "ask": "0.0150", + "open_interest": "4203.0", + "volume": "32836.91", + "strike": "2450.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0315", + "ask": "0.0330", + "open_interest": "7587.0", + "volume": "27128.03", + "strike": "2500.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0215", + "ask": "0.0225", + "open_interest": "8554.0", + "volume": "49578.3", + "strike": "2500.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0215", + "ask": "0.0225", + "open_interest": "5781.0", + "volume": "10555.87", + "strike": "2550.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0315", + "ask": "0.0325", + "open_interest": "2924.0", + "volume": "1948.25", + "strike": "2550.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0140", + "ask": "0.0150", + "open_interest": "9342.0", + "volume": "26151.77", + "strike": "2600.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0425", + "ask": "0.0455", + "open_interest": "3583.0", + "volume": "11699.21", + "strike": "2600.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0090", + "ask": "0.0095", + "open_interest": "5684.0", + "volume": "5581.41", + "strike": "2650.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0560", + "ask": "0.0600", + "open_interest": "165.0", + "volume": "0.0", + "strike": "2650.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0055", + "ask": "0.0060", + "open_interest": "16389.0", + "volume": "2501.86", + "strike": "2700.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0725", + "ask": "0.0765", + "open_interest": "303.0", + "volume": "196.36", + "strike": "2700.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0019", + "ask": "0.0023", + "open_interest": "12641.0", + "volume": "925.33", + "strike": "2800.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0720", + "ask": "0.1555", + "open_interest": "30.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0007", + "ask": "0.0011", + "open_interest": "12027.0", + "volume": "2.26", + "strike": "2900.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1090", + "ask": "0.1945", + "open_interest": "5.0", + "volume": "0.0", + "strike": "2900.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0004", + "ask": "0.0006", + "open_interest": "5557.0", + "volume": "143.52", + "strike": "3000.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1480", + "ask": "0.2350", + "open_interest": "20.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0002", + "ask": "0.0003", + "open_interest": "2393.0", + "volume": "75.18", + "strike": "3200.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2245", + "ask": "0.3165", + "open_interest": "18.0", + "volume": "0.0", + "strike": "3200.0000", + "maturity": "2025-07-11T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "2526.00", + "ask": "2526.75", + "open_interest": "500693", + "volume": "425149.0", + "maturity": "2025-07-18T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.0011", + "ask": "0.0013", + "open_interest": "2570.0", + "volume": "14.84", + "strike": "1800.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0022", + "ask": "0.0026", + "open_interest": "2473.0", + "volume": "76.37", + "strike": "2000.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0037", + "ask": "0.0041", + "open_interest": "2239.0", + "volume": "958.22", + "strike": "2100.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1015", + "ask": "0.1735", + "open_interest": "6.0", + "volume": "340.06", + "strike": "2200.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0065", + "ask": "0.0070", + "open_interest": "2856.0", + "volume": "7546.72", + "strike": "2200.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0660", + "ask": "0.1415", + "open_interest": "6.0", + "volume": "0.0", + "strike": "2300.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0120", + "ask": "0.0125", + "open_interest": "1326.0", + "volume": "8260.01", + "strike": "2300.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0505", + "ask": "0.1265", + "open_interest": "2.0", + "volume": "0.0", + "strike": "2350.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0160", + "ask": "0.0170", + "open_interest": "1098.0", + "volume": "2787.94", + "strike": "2350.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0705", + "ask": "0.0740", + "open_interest": "126.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0215", + "ask": "0.0225", + "open_interest": "2038.0", + "volume": "721.94", + "strike": "2400.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0580", + "ask": "0.0600", + "open_interest": "452.0", + "volume": "0.0", + "strike": "2450.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0285", + "ask": "0.0295", + "open_interest": "1019.0", + "volume": "564.59", + "strike": "2450.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0470", + "ask": "0.0485", + "open_interest": "320.0", + "volume": "2127.22", + "strike": "2500.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0375", + "ask": "0.0380", + "open_interest": "946.0", + "volume": "901.57", + "strike": "2500.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0375", + "ask": "0.0385", + "open_interest": "338.0", + "volume": "9577.28", + "strike": "2550.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0465", + "ask": "0.0480", + "open_interest": "515.0", + "volume": "637.14", + "strike": "2550.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0295", + "ask": "0.0305", + "open_interest": "961.0", + "volume": "2306.82", + "strike": "2600.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0580", + "ask": "0.0600", + "open_interest": "366.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0225", + "ask": "0.0235", + "open_interest": "1179.0", + "volume": "335.94", + "strike": "2650.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0690", + "ask": "0.0740", + "open_interest": "121.0", + "volume": "0.0", + "strike": "2650.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0170", + "ask": "0.0180", + "open_interest": "4520.0", + "volume": "5022.24", + "strike": "2700.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0480", + "ask": "0.1345", + "open_interest": "72.0", + "volume": "0.0", + "strike": "2700.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0130", + "ask": "0.0135", + "open_interest": "394.0", + "volume": "1997.81", + "strike": "2750.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0620", + "ask": "0.1505", + "open_interest": "5.0", + "volume": "0.0", + "strike": "2750.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0095", + "ask": "0.0105", + "open_interest": "6146.0", + "volume": "2498.79", + "strike": "2800.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0775", + "ask": "0.1675", + "open_interest": "4.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0050", + "ask": "0.0060", + "open_interest": "2522.0", + "volume": "1664.88", + "strike": "2900.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1120", + "ask": "0.2030", + "open_interest": "4.0", + "volume": "0.0", + "strike": "2900.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0029", + "ask": "0.0034", + "open_interest": "4147.0", + "volume": "641.94", + "strike": "3000.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1485", + "ask": "0.2405", + "open_interest": "9.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0010", + "ask": "0.0013", + "open_interest": "1184.0", + "volume": "27.9", + "strike": "3200.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2240", + "ask": "0.3185", + "open_interest": "2.0", + "volume": "0.0", + "strike": "3200.0000", + "maturity": "2025-07-18T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "2527.00", + "ask": "2528.50", + "open_interest": "30325083", + "volume": "625890.0", + "maturity": "2025-07-25T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.6035", + "ask": "0.6055", + "open_interest": "2047.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.4455", + "ask": "0.4475", + "open_interest": "615.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0004", + "ask": "0.0006", + "open_interest": "10088.0", + "volume": "3.02", + "strike": "1400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4060", + "ask": "0.4085", + "open_interest": "210.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0008", + "ask": "0.0010", + "open_interest": "5874.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3450", + "ask": "0.3950", + "open_interest": "19.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0010", + "ask": "0.0014", + "open_interest": "17082.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3275", + "ask": "0.3305", + "open_interest": "1460.0", + "volume": "0.0", + "strike": "1700.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0014", + "ask": "0.0018", + "open_interest": "3774.0", + "volume": "3.02", + "strike": "1700.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2885", + "ask": "0.2925", + "open_interest": "1057.0", + "volume": "0.0", + "strike": "1800.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0021", + "ask": "0.0025", + "open_interest": "6178.0", + "volume": "6448.06", + "strike": "1800.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2490", + "ask": "0.2535", + "open_interest": "1578.0", + "volume": "0.0", + "strike": "1900.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0031", + "ask": "0.0036", + "open_interest": "4633.0", + "volume": "9.25", + "strike": "1900.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2120", + "ask": "0.2165", + "open_interest": "3943.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0048", + "ask": "0.0055", + "open_interest": "25109.0", + "volume": "7069.06", + "strike": "2000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1755", + "ask": "0.1790", + "open_interest": "14035.0", + "volume": "0.0", + "strike": "2100.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0075", + "ask": "0.0085", + "open_interest": "18748.0", + "volume": "8235.14", + "strike": "2100.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1410", + "ask": "0.1445", + "open_interest": "2324.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0125", + "ask": "0.0135", + "open_interest": "42013.0", + "volume": "520.53", + "strike": "2200.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1095", + "ask": "0.1125", + "open_interest": "4272.0", + "volume": "0.0", + "strike": "2300.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0205", + "ask": "0.0210", + "open_interest": "15372.0", + "volume": "2825.46", + "strike": "2300.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0825", + "ask": "0.0850", + "open_interest": "6303.0", + "volume": "1844.74", + "strike": "2400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0320", + "ask": "0.0325", + "open_interest": "16596.0", + "volume": "1366.67", + "strike": "2400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0590", + "ask": "0.0610", + "open_interest": "11964.0", + "volume": "19439.58", + "strike": "2500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0485", + "ask": "0.0500", + "open_interest": "28195.0", + "volume": "10232.69", + "strike": "2500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0415", + "ask": "0.0425", + "open_interest": "32394.0", + "volume": "8214.36", + "strike": "2600.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0695", + "ask": "0.0720", + "open_interest": "10529.0", + "volume": "1145.2", + "strike": "2600.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0280", + "ask": "0.0290", + "open_interest": "17119.0", + "volume": "6480.61", + "strike": "2700.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0945", + "ask": "0.0975", + "open_interest": "1643.0", + "volume": "0.0", + "strike": "2700.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0185", + "ask": "0.0195", + "open_interest": "35338.0", + "volume": "1008.18", + "strike": "2800.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1245", + "ask": "0.1285", + "open_interest": "3769.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0120", + "ask": "0.0130", + "open_interest": "12551.0", + "volume": "47109.91", + "strike": "2900.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1575", + "ask": "0.1620", + "open_interest": "284.0", + "volume": "0.0", + "strike": "2900.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0075", + "ask": "0.0085", + "open_interest": "46799.0", + "volume": "43981.01", + "strike": "3000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1915", + "ask": "0.1985", + "open_interest": "266.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0034", + "ask": "0.0038", + "open_interest": "50046.0", + "volume": "3520.18", + "strike": "3200.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2670", + "ask": "0.2720", + "open_interest": "627.0", + "volume": "68890.45", + "strike": "3200.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0015", + "ask": "0.0018", + "open_interest": "40265.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3005", + "ask": "0.4015", + "open_interest": "66.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0012", + "ask": "0.0014", + "open_interest": "47169.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3830", + "ask": "0.3900", + "open_interest": "1066.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0003", + "ask": "0.0005", + "open_interest": "20134.0", + "volume": "545.85", + "strike": "4000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5290", + "ask": "0.6430", + "open_interest": "17.0", + "volume": "0.0", + "strike": "4000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0002", + "ask": "0.0004", + "open_interest": "3213.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.7200", + "ask": "0.8480", + "open_interest": "1.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0001", + "ask": "0.0003", + "open_interest": "1393.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2025-07-25T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2538.00", + "ask": "2539.25", + "open_interest": "6008617", + "volume": "146240.0", + "maturity": "2025-08-29T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.6060", + "ask": "0.6075", + "open_interest": "812.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0005", + "ask": "0.0009", + "open_interest": "6676.0", + "volume": "246.51", + "strike": "1000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4115", + "ask": "0.4145", + "open_interest": "365.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0036", + "ask": "0.0038", + "open_interest": "4405.0", + "volume": "111.23", + "strike": "1500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2990", + "ask": "0.3035", + "open_interest": "1092.0", + "volume": "735.54", + "strike": "1800.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0095", + "ask": "0.0105", + "open_interest": "2789.0", + "volume": "150.98", + "strike": "1800.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2300", + "ask": "0.2335", + "open_interest": "12.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0190", + "ask": "0.0205", + "open_interest": "3242.0", + "volume": "303.28", + "strike": "2000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1985", + "ask": "0.2020", + "open_interest": "98.0", + "volume": "0.0", + "strike": "2100.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0270", + "ask": "0.0280", + "open_interest": "1147.0", + "volume": "0.0", + "strike": "2100.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1695", + "ask": "0.1725", + "open_interest": "846.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0370", + "ask": "0.0380", + "open_interest": "3042.0", + "volume": "195.7", + "strike": "2200.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1430", + "ask": "0.1460", + "open_interest": "2448.0", + "volume": "0.0", + "strike": "2300.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0495", + "ask": "0.0510", + "open_interest": "2402.0", + "volume": "0.0", + "strike": "2300.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1195", + "ask": "0.1220", + "open_interest": "1995.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0655", + "ask": "0.0670", + "open_interest": "3747.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0995", + "ask": "0.1010", + "open_interest": "5451.0", + "volume": "754.81", + "strike": "2500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0840", + "ask": "0.0860", + "open_interest": "4103.0", + "volume": "1091.89", + "strike": "2500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0820", + "ask": "0.0835", + "open_interest": "3790.0", + "volume": "21451.72", + "strike": "2600.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1055", + "ask": "0.1080", + "open_interest": "3940.0", + "volume": "278.03", + "strike": "2600.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0665", + "ask": "0.0685", + "open_interest": "3599.0", + "volume": "508.94", + "strike": "2700.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1295", + "ask": "0.1330", + "open_interest": "591.0", + "volume": "667.88", + "strike": "2700.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0540", + "ask": "0.0555", + "open_interest": "6114.0", + "volume": "137.19", + "strike": "2800.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1560", + "ask": "0.1600", + "open_interest": "860.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0440", + "ask": "0.0450", + "open_interest": "2704.0", + "volume": "3398.8", + "strike": "2900.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1845", + "ask": "0.1890", + "open_interest": "297.0", + "volume": "0.0", + "strike": "2900.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0355", + "ask": "0.0365", + "open_interest": "4824.0", + "volume": "1482.86", + "strike": "3000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2150", + "ask": "0.2195", + "open_interest": "13.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0285", + "ask": "0.0295", + "open_interest": "1733.0", + "volume": "3653.61", + "strike": "3100.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2475", + "ask": "0.2525", + "open_interest": "8.0", + "volume": "0.0", + "strike": "3100.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0230", + "ask": "0.0240", + "open_interest": "5105.0", + "volume": "345.9", + "strike": "3200.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2815", + "ask": "0.2865", + "open_interest": "12.0", + "volume": "0.0", + "strike": "3200.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0150", + "ask": "0.0160", + "open_interest": "1580.0", + "volume": "74.25", + "strike": "3400.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3020", + "ask": "0.4205", + "open_interest": "23.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0120", + "ask": "0.0130", + "open_interest": "7628.0", + "volume": "279.88", + "strike": "3500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3385", + "ask": "0.4575", + "open_interest": "5.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0100", + "ask": "0.0110", + "open_interest": "3682.0", + "volume": "103.24", + "strike": "3600.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3750", + "ask": "0.4950", + "open_interest": "10.0", + "volume": "0.0", + "strike": "3600.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0047", + "ask": "0.0055", + "open_interest": "19205.0", + "volume": "162.25", + "strike": "4000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5240", + "ask": "0.6495", + "open_interest": "30.0", + "volume": "0.0", + "strike": "4000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0022", + "ask": "0.0026", + "open_interest": "7106.0", + "volume": "16.59", + "strike": "4500.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0012", + "ask": "0.0016", + "open_interest": "2440.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0003", + "ask": "0.0008", + "open_interest": "2235.0", + "volume": "2.25", + "strike": "6000.0000", + "maturity": "2025-08-29T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2548.25", + "ask": "2548.50", + "open_interest": "57771023", + "volume": "896771.0", + "maturity": "2025-09-26T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.8030", + "ask": "0.8050", + "open_interest": "1106.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0001", + "ask": "0.0002", + "open_interest": "8924.0", + "volume": "0.25", + "strike": "500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.6080", + "ask": "0.6100", + "open_interest": "599.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0014", + "ask": "0.0018", + "open_interest": "18986.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.5310", + "ask": "0.5330", + "open_interest": "467.0", + "volume": "0.0", + "strike": "1200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0027", + "ask": "0.0031", + "open_interest": "10251.0", + "volume": "818.04", + "strike": "1200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4925", + "ask": "0.4950", + "open_interest": "176.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0037", + "ask": "0.0040", + "open_interest": "1812.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4550", + "ask": "0.4570", + "open_interest": "431.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0050", + "ask": "0.0055", + "open_interest": "2083.0", + "volume": "1667.55", + "strike": "1400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4175", + "ask": "0.4200", + "open_interest": "1716.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0065", + "ask": "0.0075", + "open_interest": "14066.0", + "volume": "352.15", + "strike": "1500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3805", + "ask": "0.3835", + "open_interest": "9531.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0095", + "ask": "0.0100", + "open_interest": "6989.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3445", + "ask": "0.3475", + "open_interest": "1723.0", + "volume": "0.0", + "strike": "1700.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0125", + "ask": "0.0135", + "open_interest": "2376.0", + "volume": "0.0", + "strike": "1700.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3095", + "ask": "0.3125", + "open_interest": "30321.0", + "volume": "0.0", + "strike": "1800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0170", + "ask": "0.0180", + "open_interest": "3460.0", + "volume": "45.2", + "strike": "1800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2765", + "ask": "0.2795", + "open_interest": "977.0", + "volume": "0.0", + "strike": "1900.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0230", + "ask": "0.0240", + "open_interest": "3512.0", + "volume": "750.23", + "strike": "1900.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2455", + "ask": "0.2480", + "open_interest": "10715.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0310", + "ask": "0.0320", + "open_interest": "17011.0", + "volume": "660.2", + "strike": "2000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1890", + "ask": "0.1920", + "open_interest": "14077.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0530", + "ask": "0.0545", + "open_interest": "6742.0", + "volume": "23454.4", + "strike": "2200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1430", + "ask": "0.1445", + "open_interest": "32692.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0850", + "ask": "0.0860", + "open_interest": "12153.0", + "volume": "666.44", + "strike": "2400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1235", + "ask": "0.1250", + "open_interest": "12803.0", + "volume": "39149.04", + "strike": "2500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1045", + "ask": "0.1060", + "open_interest": "9093.0", + "volume": "0.0", + "strike": "2500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1060", + "ask": "0.1075", + "open_interest": "9274.0", + "volume": "13442.27", + "strike": "2600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1260", + "ask": "0.1290", + "open_interest": "16156.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0780", + "ask": "0.0790", + "open_interest": "24142.0", + "volume": "2763.22", + "strike": "2800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1755", + "ask": "0.1795", + "open_interest": "2696.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0570", + "ask": "0.0580", + "open_interest": "18060.0", + "volume": "585.71", + "strike": "3000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2325", + "ask": "0.2370", + "open_interest": "2762.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0415", + "ask": "0.0420", + "open_interest": "16566.0", + "volume": "1782.9", + "strike": "3200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2950", + "ask": "0.3000", + "open_interest": "369.0", + "volume": "0.0", + "strike": "3200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0300", + "ask": "0.0315", + "open_interest": "8220.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3620", + "ask": "0.3675", + "open_interest": "3077.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0260", + "ask": "0.0270", + "open_interest": "16306.0", + "volume": "196.49", + "strike": "3500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3940", + "ask": "0.4040", + "open_interest": "365.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0220", + "ask": "0.0230", + "open_interest": "10501.0", + "volume": "0.0", + "strike": "3600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.4295", + "ask": "0.4400", + "open_interest": "380.0", + "volume": "0.0", + "strike": "3600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0165", + "ask": "0.0175", + "open_interest": "6853.0", + "volume": "0.0", + "strike": "3800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5020", + "ask": "0.5130", + "open_interest": "306.0", + "volume": "0.0", + "strike": "3800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0125", + "ask": "0.0135", + "open_interest": "18856.0", + "volume": "670.32", + "strike": "4000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5760", + "ask": "0.5890", + "open_interest": "1976.0", + "volume": "0.0", + "strike": "4000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0095", + "ask": "0.0105", + "open_interest": "6369.0", + "volume": "0.0", + "strike": "4200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5965", + "ask": "0.7360", + "open_interest": "84.0", + "volume": "0.0", + "strike": "4200.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0075", + "ask": "0.0085", + "open_interest": "1739.0", + "volume": "0.0", + "strike": "4400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.6710", + "ask": "0.8120", + "open_interest": "28.0", + "volume": "0.0", + "strike": "4400.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0065", + "ask": "0.0070", + "open_interest": "12935.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.7650", + "ask": "0.7780", + "open_interest": "210.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0055", + "ask": "0.0060", + "open_interest": "3846.0", + "volume": "3363.68", + "strike": "4600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.8040", + "ask": "0.8165", + "open_interest": "141.0", + "volume": "0.0", + "strike": "4600.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0047", + "ask": "0.0050", + "open_interest": "4368.0", + "volume": "0.0", + "strike": "4800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.8215", + "ask": "0.9705", + "open_interest": "64.0", + "volume": "0.0", + "strike": "4800.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0038", + "ask": "0.0043", + "open_interest": "16325.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.9580", + "ask": "0.9720", + "open_interest": "728.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0023", + "ask": "0.0028", + "open_interest": "5731.0", + "volume": "787.46", + "strike": "5500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.0860", + "ask": "1.2490", + "open_interest": "59.0", + "volume": "0.0", + "strike": "5500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0015", + "ask": "0.0020", + "open_interest": "6811.0", + "volume": "249.75", + "strike": "6000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.2755", + "ask": "1.4500", + "open_interest": "80.0", + "volume": "0.0", + "strike": "6000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0010", + "ask": "0.0015", + "open_interest": "3691.0", + "volume": "0.0", + "strike": "6500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.4645", + "ask": "1.6510", + "open_interest": "88.0", + "volume": "0.0", + "strike": "6500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0007", + "ask": "0.0011", + "open_interest": "3950.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.6545", + "ask": "1.8535", + "open_interest": "73.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0005", + "ask": "0.0010", + "open_interest": "2025.0", + "volume": "0.0", + "strike": "7500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.8440", + "ask": "2.0560", + "open_interest": "11.0", + "volume": "0.0", + "strike": "7500.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0006", + "ask": "0.0009", + "open_interest": "5583.0", + "volume": "0.0", + "strike": "8000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2.0335", + "ask": "2.2595", + "open_interest": "8.0", + "volume": "0.0", + "strike": "8000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0003", + "ask": "0.0005", + "open_interest": "5361.0", + "volume": "0.0", + "strike": "9000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2.4120", + "ask": "2.6640", + "open_interest": "6.0", + "volume": "0.0", + "strike": "9000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0002", + "ask": "0.0003", + "open_interest": "3120.0", + "volume": "3412.38", + "strike": "10000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2.9045", + "ask": "2.9435", + "open_interest": "361.0", + "volume": "0.0", + "strike": "10000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0002", + "ask": "0.0004", + "open_interest": "3352.0", + "volume": "6444.98", + "strike": "11000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "3.1705", + "ask": "3.4760", + "open_interest": "4.0", + "volume": "0.0", + "strike": "11000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0001", + "ask": "0.0002", + "open_interest": "3160.0", + "volume": "0.25", + "strike": "12000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "3.5495", + "ask": "3.8820", + "open_interest": "18.0", + "volume": "0.0", + "strike": "12000.0000", + "maturity": "2025-09-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "2581.50", + "ask": "2581.75", + "open_interest": "51673998", + "volume": "536243.0", + "maturity": "2025-12-26T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.8060", + "ask": "0.8075", + "open_interest": "1229.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0005", + "ask": "0.0010", + "open_interest": "12338.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.6165", + "ask": "0.6190", + "open_interest": "1489.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0048", + "ask": "0.0060", + "open_interest": "7423.0", + "volume": "125.06", + "strike": "1000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.5435", + "ask": "0.5465", + "open_interest": "164.0", + "volume": "0.0", + "strike": "1200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0090", + "ask": "0.0100", + "open_interest": "1526.0", + "volume": "0.0", + "strike": "1200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.5080", + "ask": "0.5115", + "open_interest": "21.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0120", + "ask": "0.0135", + "open_interest": "1138.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4730", + "ask": "0.4755", + "open_interest": "88.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0160", + "ask": "0.0175", + "open_interest": "1324.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4395", + "ask": "0.4420", + "open_interest": "1814.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0210", + "ask": "0.0225", + "open_interest": "1685.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4065", + "ask": "0.4090", + "open_interest": "1089.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0270", + "ask": "0.0285", + "open_interest": "4772.0", + "volume": "218.84", + "strike": "1600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3755", + "ask": "0.3780", + "open_interest": "771.0", + "volume": "0.0", + "strike": "1700.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0345", + "ask": "0.0360", + "open_interest": "1728.0", + "volume": "0.0", + "strike": "1700.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3455", + "ask": "0.3480", + "open_interest": "2118.0", + "volume": "0.0", + "strike": "1800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0435", + "ask": "0.0450", + "open_interest": "2015.0", + "volume": "113.23", + "strike": "1800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3175", + "ask": "0.3200", + "open_interest": "2511.0", + "volume": "0.0", + "strike": "1900.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0540", + "ask": "0.0555", + "open_interest": "4013.0", + "volume": "0.0", + "strike": "1900.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2910", + "ask": "0.2935", + "open_interest": "37180.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0660", + "ask": "0.0680", + "open_interest": "8017.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2435", + "ask": "0.2455", + "open_interest": "4054.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0960", + "ask": "0.0975", + "open_interest": "6068.0", + "volume": "246.36", + "strike": "2200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2030", + "ask": "0.2050", + "open_interest": "3002.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1325", + "ask": "0.1345", + "open_interest": "6899.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1850", + "ask": "0.1870", + "open_interest": "5938.0", + "volume": "0.0", + "strike": "2500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1525", + "ask": "0.1560", + "open_interest": "9257.0", + "volume": "50600.52", + "strike": "2500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1685", + "ask": "0.1705", + "open_interest": "5767.0", + "volume": "63020.63", + "strike": "2600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1750", + "ask": "0.1785", + "open_interest": "2271.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1400", + "ask": "0.1420", + "open_interest": "8845.0", + "volume": "13369.26", + "strike": "2800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2235", + "ask": "0.2275", + "open_interest": "1604.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1160", + "ask": "0.1180", + "open_interest": "44209.0", + "volume": "59226.75", + "strike": "3000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2770", + "ask": "0.2810", + "open_interest": "3071.0", + "volume": "721.32", + "strike": "3000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0965", + "ask": "0.0985", + "open_interest": "34889.0", + "volume": "2673.07", + "strike": "3200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3345", + "ask": "0.3395", + "open_interest": "578.0", + "volume": "868.83", + "strike": "3200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0805", + "ask": "0.0825", + "open_interest": "5127.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3960", + "ask": "0.4010", + "open_interest": "472.0", + "volume": "1025.1", + "strike": "3400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0735", + "ask": "0.0755", + "open_interest": "34341.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.4275", + "ask": "0.4330", + "open_interest": "326.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0675", + "ask": "0.0690", + "open_interest": "1989.0", + "volume": "169.89", + "strike": "3600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.4600", + "ask": "0.4655", + "open_interest": "398.0", + "volume": "1188.86", + "strike": "3600.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0570", + "ask": "0.0585", + "open_interest": "2763.0", + "volume": "566.59", + "strike": "3800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5265", + "ask": "0.5325", + "open_interest": "211.0", + "volume": "1357.63", + "strike": "3800.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0480", + "ask": "0.0495", + "open_interest": "12087.0", + "volume": "483.34", + "strike": "4000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5955", + "ask": "0.6015", + "open_interest": "1523.0", + "volume": "0.0", + "strike": "4000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0405", + "ask": "0.0420", + "open_interest": "19119.0", + "volume": "203.74", + "strike": "4200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.5955", + "ask": "0.7655", + "open_interest": "541.0", + "volume": "0.0", + "strike": "4200.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0345", + "ask": "0.0355", + "open_interest": "1300.0", + "volume": "0.0", + "strike": "4400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.6655", + "ask": "0.8380", + "open_interest": "261.0", + "volume": "0.0", + "strike": "4400.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0320", + "ask": "0.0335", + "open_interest": "2691.0", + "volume": "80.71", + "strike": "4500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.7010", + "ask": "0.8745", + "open_interest": "398.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0220", + "ask": "0.0235", + "open_interest": "17675.0", + "volume": "257.08", + "strike": "5000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.8815", + "ask": "1.0615", + "open_interest": "456.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0155", + "ask": "0.0170", + "open_interest": "4500.0", + "volume": "194.36", + "strike": "5500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.0650", + "ask": "1.2520", + "open_interest": "330.0", + "volume": "0.0", + "strike": "5500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0110", + "ask": "0.0125", + "open_interest": "59620.0", + "volume": "93125.63", + "strike": "6000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.2500", + "ask": "1.4450", + "open_interest": "278.0", + "volume": "0.0", + "strike": "6000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0080", + "ask": "0.0095", + "open_interest": "4933.0", + "volume": "0.0", + "strike": "6500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.4355", + "ask": "1.6395", + "open_interest": "89.0", + "volume": "0.0", + "strike": "6500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0060", + "ask": "0.0075", + "open_interest": "2744.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.6220", + "ask": "1.8360", + "open_interest": "60.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0048", + "ask": "0.0060", + "open_interest": "3499.0", + "volume": "24.96", + "strike": "7500.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0037", + "ask": "0.0045", + "open_interest": "5091.0", + "volume": "0.0", + "strike": "8000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.9960", + "ask": "2.2315", + "open_interest": "2.0", + "volume": "0.0", + "strike": "8000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0023", + "ask": "0.0026", + "open_interest": "2466.0", + "volume": "6.3", + "strike": "9000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2.3695", + "ask": "2.6280", + "open_interest": "2.0", + "volume": "6302.24", + "strike": "9000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0015", + "ask": "0.0018", + "open_interest": "3564.0", + "volume": "8.57", + "strike": "10000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2.7435", + "ask": "3.0260", + "open_interest": "4.0", + "volume": "0.0", + "strike": "10000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0010", + "ask": "0.0016", + "open_interest": "5267.0", + "volume": "0.0", + "strike": "11000.0000", + "maturity": "2025-12-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2614.50", + "ask": "2615.50", + "open_interest": "29623651", + "volume": "115477.0", + "maturity": "2026-03-27T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.8095", + "ask": "0.8120", + "open_interest": "748.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0019", + "ask": "0.0021", + "open_interest": "2503.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.6265", + "ask": "0.6325", + "open_interest": "4.0", + "volume": "0.0", + "strike": "1000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0100", + "ask": "0.0160", + "open_interest": "2258.0", + "volume": "25.16", + "strike": "1000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.5575", + "ask": "0.5645", + "open_interest": "30.0", + "volume": "1414.84", + "strike": "1200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0170", + "ask": "0.0235", + "open_interest": "83.0", + "volume": "0.0", + "strike": "1200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.5240", + "ask": "0.5315", + "open_interest": "55.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0220", + "ask": "0.0270", + "open_interest": "62.0", + "volume": "0.0", + "strike": "1300.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4920", + "ask": "0.4995", + "open_interest": "90.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0290", + "ask": "0.0325", + "open_interest": "491.0", + "volume": "0.0", + "strike": "1400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4610", + "ask": "0.4685", + "open_interest": "468.0", + "volume": "0.0", + "strike": "1500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0350", + "ask": "0.0385", + "open_interest": "928.0", + "volume": "94.44", + "strike": "1500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.4310", + "ask": "0.4390", + "open_interest": "868.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0440", + "ask": "0.0495", + "open_interest": "2091.0", + "volume": "0.0", + "strike": "1600.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3755", + "ask": "0.3845", + "open_interest": "753.0", + "volume": "0.0", + "strike": "1800.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0650", + "ask": "0.0710", + "open_interest": "1979.0", + "volume": "23374.55", + "strike": "1800.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3255", + "ask": "0.3330", + "open_interest": "1610.0", + "volume": "1667.5", + "strike": "2000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0915", + "ask": "0.0990", + "open_interest": "1043.0", + "volume": "238.59", + "strike": "2000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2815", + "ask": "0.2895", + "open_interest": "8949.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1245", + "ask": "0.1320", + "open_interest": "1951.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2430", + "ask": "0.2515", + "open_interest": "11999.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1625", + "ask": "0.1705", + "open_interest": "2210.0", + "volume": "14031.23", + "strike": "2400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2265", + "ask": "0.2345", + "open_interest": "1552.0", + "volume": "0.0", + "strike": "2500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1810", + "ask": "0.1920", + "open_interest": "877.0", + "volume": "484.71", + "strike": "2500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2105", + "ask": "0.2180", + "open_interest": "1089.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2060", + "ask": "0.2140", + "open_interest": "290.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1825", + "ask": "0.1895", + "open_interest": "851.0", + "volume": "4606.74", + "strike": "2800.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1940", + "ask": "0.3465", + "open_interest": "362.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1580", + "ask": "0.1655", + "open_interest": "2577.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2425", + "ask": "0.4035", + "open_interest": "717.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1375", + "ask": "0.1445", + "open_interest": "8589.0", + "volume": "1400.31", + "strike": "3200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2945", + "ask": "0.4630", + "open_interest": "179.0", + "volume": "0.0", + "strike": "3200.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1195", + "ask": "0.1270", + "open_interest": "11545.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3505", + "ask": "0.5250", + "open_interest": "42.0", + "volume": "0.0", + "strike": "3400.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1115", + "ask": "0.1190", + "open_interest": "3239.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.3795", + "ask": "0.5565", + "open_interest": "75.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0800", + "ask": "0.0875", + "open_interest": "3000.0", + "volume": "2032.17", + "strike": "4000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0580", + "ask": "0.0655", + "open_interest": "798.0", + "volume": "311.21", + "strike": "4500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0435", + "ask": "0.0495", + "open_interest": "3084.0", + "volume": "353.11", + "strike": "5000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0330", + "ask": "0.0390", + "open_interest": "899.0", + "volume": "8164.86", + "strike": "5500.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0245", + "ask": "0.0315", + "open_interest": "3545.0", + "volume": "0.0", + "strike": "6000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "1.2295", + "ask": "1.4450", + "open_interest": "1.0", + "volume": "0.0", + "strike": "6000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0150", + "ask": "0.0220", + "open_interest": "6029.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0110", + "ask": "0.0145", + "open_interest": "4066.0", + "volume": "0.0", + "strike": "8000.0000", + "maturity": "2026-03-27T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "2647.75", + "ask": "2649.75", + "open_interest": "2378528", + "volume": "157915.0", + "maturity": "2026-06-26T08:00:00Z", + "security_type": "forward" + }, + { + "bid": "0.0017", + "ask": "0.0035", + "open_interest": "133.0", + "volume": "0.0", + "strike": "500.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0145", + "ask": "0.0180", + "open_interest": "22.0", + "volume": "468.18", + "strike": "1000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.0485", + "ask": "0.0530", + "open_interest": "73.0", + "volume": "258.65", + "strike": "1500.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3565", + "ask": "0.3660", + "open_interest": "134.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1135", + "ask": "0.1195", + "open_interest": "32.0", + "volume": "0.0", + "strike": "2000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.3160", + "ask": "0.3265", + "open_interest": "1.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1475", + "ask": "0.1550", + "open_interest": "8.0", + "volume": "0.0", + "strike": "2200.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2720", + "ask": "0.2905", + "open_interest": "2.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1860", + "ask": "0.2010", + "open_interest": "1270.0", + "volume": "0.0", + "strike": "2400.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2480", + "ask": "0.2600", + "open_interest": "277.0", + "volume": "0.0", + "strike": "2600.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2295", + "ask": "0.2465", + "open_interest": "37.0", + "volume": "1215.12", + "strike": "2600.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.2185", + "ask": "0.2325", + "open_interest": "502.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.2170", + "ask": "0.3800", + "open_interest": "1.0", + "volume": "0.0", + "strike": "2800.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "put", + "security_type": "option" + }, + { + "bid": "0.1975", + "ask": "0.2075", + "open_interest": "115.0", + "volume": "0.0", + "strike": "3000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1490", + "ask": "0.1600", + "open_interest": "104.0", + "volume": "0.0", + "strike": "3500.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.1140", + "ask": "0.1245", + "open_interest": "158.0", + "volume": "288.71", + "strike": "4000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0880", + "ask": "0.0985", + "open_interest": "148.0", + "volume": "0.0", + "strike": "4500.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0715", + "ask": "0.0745", + "open_interest": "1084.0", + "volume": "0.0", + "strike": "5000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0570", + "ask": "0.0595", + "open_interest": "135.0", + "volume": "292.48", + "strike": "5500.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0435", + "ask": "0.0535", + "open_interest": "431.0", + "volume": "0.0", + "strike": "6000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0285", + "ask": "0.0375", + "open_interest": "313.0", + "volume": "0.0", + "strike": "7000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + }, + { + "bid": "0.0195", + "ask": "0.0260", + "open_interest": "345.0", + "volume": "60.28", + "strike": "8000.0000", + "maturity": "2026-06-26T08:00:00Z", + "option_type": "call", + "security_type": "option" + } + ] +} \ No newline at end of file