PageSourceSearch

https://ethpandaops.io/assets/js/febff1e2.d7e2ebf9.js

js ethpandaops.io collected 2026-09-25 18:59:14 UTC 20,405 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[4442],{20282(e,t,n){n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var s=n(50853),a=n(74848),r=n(28453);n(60966);const i={title:"Xatu - Getting started",slug:"xatu/getting-started",description:"How to work with Xatu data: public parquet files, your own ClickHouse, or the EthPandaOps ClickHouse cluster.",image:"/img/blog/xatu-data.jpg",tags:["xatu","data","getting-started"]},l=void 0,o={authorsImageUrls:[]},c=[{value:"Working with the data",id:"working-with-the-data",level:3},{value:"Getting started",id:"getting-started",level:3},{value:"Choose your data access method",id:"choose-your-data-access-method",level:4},{value:"Running your own Clickhouse",id:"running-your-own-clickhouse",level:4},{value:"Using EthPandaOps Clickhouse",id:"using-ethpandaops-clickhouse",level:4},{value:"Querying public parquet files",id:"querying-public-parquet-files",level:4},{value:"Examples",id:"examples",level:3},{value:"Queries",id:"queries",level:4},{value:"Jupyter Notebooks",id:"jupyter-notebooks",level:4}];function h(e){const t={a:"a",blockquote:"blockquote",br:"br",code:"code",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h3,{id:"working-with-the-data",children:"Working with the data"}),"\n",(0,a.jsx)(t.p,{children:"Public data is available in the form of Apache Parquet files. You can use any tool that supports the Apache Parquet format to query the data. If you have access to EthPandaOps Clickhouse you can query the data directly."}),"\n",(0,a.jsxs)(t.p,{children:["If you have access to EthPandaOps Clickhouse you can query the data directly. Skip ahead to ",(0,a.jsx)(t.a,{href:"#using-ethpandaops-clickhouse",children:"Using EthPandaOps Clickhouse"}),"."]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#getting-started",children:"Getting started"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#choose-your-data-access-method",children:"Choose your data access method"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#running-your-own-clickhouse",children:"Running your own Clickhouse"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#using-ethpandaops-clickhouse",children:"Using EthPandaOps Clickhouse"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#querying-public-parquet-files",children:"Querying public parquet files"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#examples",children:"Examples"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#queries",children:"Queries"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#jupyter-notebooks",children:"Jupyter Notebooks"})}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"getting-started",children:"Getting started"}),"\n",(0,a.jsx)(t.p,{children:"There's a few ways to get started with the data.\nFirst install the dependencies:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Install ",(0,a.jsx)(t.a,{href:"https://docs.docker.com/get-docker/",children:"docker"})]}),"\n",(0,a.jsxs)(t.li,{children:["Verify the installation by running the following command:\n",(0,a.jsx)(t.code,{children:"docker version"})]}),"\n"]}),"\n",(0,a.jsx)(t.h4,{id:"choose-your-data-access-method",children:"Choose your data access method"}),"\n",(0,a.jsx)(t.p,{children:"There are three options to get started with the data, all of them using Clickhouse."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Option 1: ",(0,a.jsx)(t.strong,{children:"Setup your own Clickhouse server and import the data."})]}),"\n"]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:"Recommended for most use cases."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Great for larger, repeated queries or when you want to query the data in a more complex way."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"#running-your-own-clickhouse",children:"Click here to get started"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Option 2: ",(0,a.jsx)(t.strong,{children:"Query the public parquet files directly."})]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Great for small queries one-off queriesor when you don't want to setup your own Clickhouse server."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"#querying-public-parquet-files",children:"Click here to get started"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Option 3: ",(0,a.jsx)(t.strong,{children:"Use EthPandaOps Clickhouse."})]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["Great for quick and easy queries. ",(0,a.jsx)(t.strong,{children:"No setup required but access is limited."})]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"#using-ethpandaops-clickhouse",children:"Click here to get started"})}),"\n",(0,a.jsx)(t.h4,{id:"running-your-own-clickhouse",children:"Running your own Clickhouse"}),"\n",(0,a.jsx)(t.p,{children:"Running your own Clickhouse cluster is recommended for most use cases. This process will walk 
1you through the steps of setting up a cluster with the Xatu Clickhouse migrations and importing the data straight from the public parquet files."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Clone the Xatu repo"}),(0,a.jsx)(t.br,{}),"\n","Xatu contains a docker compose file to run a Clickhouse cluster locally. This server will automatically have the correct schema migrations applied."]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Steps:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Clone the Xatu repo"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"git clone https://github.com/ethpandaops/xatu.git;\ncd xatu\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"2",children:["\n",(0,a.jsx)(t.li,{children:"Start the Xatu clickhouse stack"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"docker compose --profile clickhouse up --detach\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"3",children:["\n",(0,a.jsx)(t.li,{children:"Verify the Clickhouse server is running and migrations are applied"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'docker run --rm -it --net host clickhouse/clickhouse-server clickhouse client --query "SHOW TABLES FROM default" | grep -v local\n'})}),"\n",(0,a.jsx)(t.p,{children:"This should show you the tables that are available in the default database.\ne.g."}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{children:"...\nbeacon_api_eth_v1_beacon_committee\nbeacon_api_eth_v1_events_attestation\nbeacon_api_eth_v1_events_blob_sidecar\n...\n"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.strong,{children:"Load data into Clickhouse"})}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Our Clickhouse cluster is running but has no data! Let's import some data."}),"\n",(0,a.jsx)(t.p,{children:"Steps:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Clone the Xatu-data repository"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"cd;\ngit clone https://github.com/ethpandaops/xatu-data.git\ncd xatu-data;\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"2",children:["\n",(0,a.jsx)(t.li,{children:"Install clickhouse client"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"curl https://clickhouse.com/ | sh\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"3",children:["\n",(0,a.jsx)(t.li,{children:"Import the data into Clickhouse"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"./import-clickhouse.sh mainnet default beacon_api_eth_v1_events_block 2024-03-20 2024-03-27\n"})}),"\n",(0,a.jsxs)(t.p,{children:["This will import the data for the ",(0,a.jsx)(t.code,{children:"default.beacon_api_eth_v1_events_block"})," table in mainnet from the 20th of March 2024 to the 27th of March 2024.\n4. Verify the data import"]}
1),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'docker run --rm -it --net host \\\n    clickhouse/clickhouse-server clickhouse client -q "SELECT toStartOfDay(slot_start_date_time) AS day, COUNT(*) FROM default.beacon_api_eth_v1_events_block GROUP BY day FORMAT Pretty"\n'})}),"\n",(0,a.jsx)(t.p,{children:"This query will show you the count of events per day."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.strong,{children:"Query Parquet Files Directly"})}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Alternatively, you can query the parquet files directly without importing. This is useful if you only need to query a small subset of the data."}),"\n",(0,a.jsx)(t.p,{children:"Steps:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Query the first 10 rows of the beacon_api_eth_v1_events_block table for 2024-03-20"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"# date based partitioned tables\nclickhouse local --query=\"SELECT * FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/20.parquet', 'Parquet') LIMIT 10 FORMAT Pretty\"\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"2",children:["\n",(0,a.jsxs)(t.li,{children:["Query the first 10 rows of the canonical_execution_block table for chunk ",(0,a.jsx)(t.code,{children:"20000000.parquet"})," (block numbers between ",(0,a.jsx)(t.code,{children:"20000000"})," and ",(0,a.jsx)(t.code,{children:"20000999"}),")"]}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"# integer based partitioned tables\nclickhouse local --query=\"SELECT * FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/20000000.parquet', 'Parquet') LIMIT 10 FORMAT Pretty\"\n"})}),"\n",(0,a.jsxs)(t.ol,{start:"3",children:["\n",(0,a.jsxs)(t.li,{children:["Use globs to query multiple files, e.g., 15th to 20th March or between block ",(0,a.jsx)(t.code,{children:"20000000"})," and ",(0,a.jsx)(t.code,{children:"20010000"})]}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"# date based partitioned tables\nclickhouse local --query=\"SELECT COUNT(*) FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/{15..20}.parquet', 'Parquet') FORMAT Pretty\"\n\n# integer based partitioned tables\nclickhouse local --query=\"SELECT COUNT(*) FROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/{20000..20010}000.parquet', 'Parquet') LIMIT 10 FORMAT Pretty\"\n"})}),"\n",(0,a.jsx)(t.h4,{id:"using-ethpandaops-clickhouse",children:"Using EthPandaOps Clickhouse"}),"\n",(0,a.jsx)(t.p,{children:"The EthPandaOps Clickhouse cluster already has the data loaded and the schema migrations applied. You can query the data directly.\nIf you need access please reach out to us at ethpandaops at ethereum.org. Access is limited."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.strong,{children:"Query the data"})}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Steps:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Setup your credentials"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"export CLICKHOUSE_USER=YOUR_USERNAME\nexport CLICKHOUSE_PASSWORD=YOUR_PASSWORD\n"})}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Execute a query"}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'    echo """\n        SELECT\n            *\n        FROM default.beacon_api_eth_v1_events_block FINAL\n        WHERE\n            slot_start_date_time >= NOW() - INTERVAL \'1 HOUR\'\n        LIMIT 3\n        FORMAT Pretty\n    """ | curl "https://clickhouse.xatu.ethpandaops.io" -u "$CLICKHOUSE_USER:$CLICKHOUSE_PASSWORD" --data-binary @-\n'})}),"\n",(0,a.jsx)(t.h4,{id:"querying-public-parquet-files",children:"Querying public parquet files"}),"\n",(0,a.jsxs)(t.p,{children:["Querying the public parquet files is a great way to get started with the data. ",(0,a.jsx)(t.strong,{children:"We recommend you don't do this for larger queries or queries that you'll run again."})]}),"\n",(0,a.jsx)(t.p,{children:"Examples:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Count the number of block events per consensus client for the 20th of March 2024 on Mainnet"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"docker run --rm -it clickhouse/clickhouse-server clickhouse local --query=\"\nSELECT\n    count(*), meta_consensus_implementation \nFROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/beacon_api_eth_v1_events_block/2024/3/20.parquet', 'Parquet')\nGROUP BY meta_consensus_implementation \nFORMAT Pretty\n\"\n"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Show the top 5 block builders by block numbers between 20000000 and 20010999"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"docker run --rm -it clickhouse/clickhouse-server clickhouse local --query=\"\nSELECT\n    count(*),\n    extra_data_string\nFROM url('https://data.ethpandaops.io/xatu/mainnet/databases/default/canonical_execution_block/1000/{20000..20010}000.parquet', 'Parquet')\nWHERE\n    block_number BETWEEN 20000000 AND 20010000\nGROUP BY extra_data_string\nORDER BY count(*) DESC\nLIMIT 5\nFORMAT Pretty\n\"\n"})}),"\n",(0,a.jsx)(t.h3,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(t.p,{children:"Once your Clickhouse server is setup and the data is imported, you can query the data."}),"\n",(0,a.jsx)(t.h4,{id:"queries",children:"Queries"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Show all block events for the 20th of March 2024 by nimbus sentries on mainnet between 01:20 and 01:30"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query=\"\"\"\n    SELECT\n        *\n    FROM beacon_api_eth_v1_events_block\n    WHERE\n        meta_network_name = 'mainnet'\n        AND slot_start_date_time BETWEEN '2024-03-20 01:20:00' AND '2024-03-20 01:30:00' -- strongly recommend filtering by the partition key (slot_start_date_time) for query performance\n        AND meta_consensus_implementation = '
1nimbus'\n    FORMAT Pretty\n\"\"\"\n"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Show the 90th, 50th, 05th percentile and min arrival time for blocks per day for the 20th to 27th of March 2024"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""\n    SELECT\n        toStartOfDay(slot_start_date_time) AS day,\n        round(MIN(propagation_slot_start_diff)) AS min_ms,\n        round(quantile(0.05)(propagation_slot_start_diff)) AS p05_ms,\n        round(quantile(0.50)(propagation_slot_start_diff)) AS p50_ms,\n        round(quantile(0.90)(propagation_slot_start_diff)) AS p90_ms\n    FROM beacon_api_eth_v1_events_block\n    WHERE\n        slot_start_date_time BETWEEN \'2024-03-20\' AND \'2024-03-27\' -- strongly recommend filtering by the partition key (slot_start_date_time) for query performance\n    GROUP BY day\n    ORDER BY day AS\n    FORMAT Pretty\n"""\n'})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Show the amount of times a block was seen per sentry for the 20th to 27th of March 2024"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""\n    SELECT\n        meta_client_name AS client_name,\n        COUNT(*) AS count\n    FROM beacon_api_eth_v1_events_block\n    WHERE\n        slot_start_date_time BETWEEN \'2024-03-20\' AND \'2024-03-27\' -- strongly recommend filtering by the partition key (slot_start_date_time) for query performance\n    GROUP BY client_name\n    FORMAT Pretty\n"""\n'})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Show the top 5 block builders by block numbers between 20000000 and 20010000"}),"\n"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'docker run --rm -it --net host -e CLICKHOUSE_USER=$CLICKHOUSE_USER -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD -e CLICKHOUSE_HOST=$CLICKHOUSE_HOST clickhouse/clickhouse-server clickhouse client --query="""\n    SELECT\n        count(*),\n        extra_data_string\n    FROM canonical_execution_block\n    WHERE\n        block_number BETWEEN 20000000 AND 20010000\n    GROUP BY extra_data_string\n    ORDER BY count(*) DESC\n    LIMIT 5\n    FORMAT Pretty\n"""\n'})}),"\n",(0,a.jsx)(t.h4,{id:"jupyter-notebooks",children:"Jupyter Notebooks"}),"\n",(0,a.jsxs)(t.p,{children:["There are some examples for both Parquet and Clickhouse and SQLAlchemy in the ",(0,a.jsx)(t.a,{href:"https://github.com/ethpandaops/xatu-data/tree/master/examples/parquet",children:"examples/parquet"})," and ",(0,a.jsx)(t.a,{href:"https://github.com/ethpandaops/xatu-data/tree/master/examples/clickhouse",children:"examples/clickhouse"})," directories respectively."]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453(e,t,n){n.d(t,{R:()=>i,x:()=>l});var s=n(96540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}},50853(e){e.exports=JSON.parse('{"permalink":"/data/xatu/getting-started","source":"@site/data/xatu-data/getting-started.md","title":"Xatu - Getting started","description":"How to work with Xatu data: public parquet files, your own ClickHouse, or the EthPandaOps ClickHouse cluster.","date":"2026-08-17T04:05:48.000Z","tags":[{"inline":true,"label":"xatu","permalink":"/data/tags/xatu"},{"inline":true,"label":"data","permalink":"/data/tags/data"},{"inline":true,"label":"getting-started","permalink":"/data/tags/getting-started"}],"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Xatu - Getting started","slug":"xatu/getting-started","description":"How to work with Xatu data: public parquet files, your own ClickHouse, or the EthPandaOps ClickHouse cluster.","image":"/img/blog/xatu-data.jpg","tags":["xatu","data","getting-started"]},"unlisted":false,"prevItem":{"title":"Xatu - Contribute data","permalink":"/data/xatu/contribute"},"nextItem":{"title":"Xatu Data","permalink":"/data/xatu"}}')},60966(e,t,n){n.d(t,{B_:()=>u,BD:()=>p});var s=n(96540);const a="details_bdAo",r="summary_dHHT",i="open_cntL",l="summaryIcon_sZ_e",o="summaryTitle_e1Hx",c="detailsContent_Jcqq";var h=n(34164),d=n(74848);function u({children:e,summary:t,open:n=!1}
1){const[u,p]=(0,s.useState)(n);let x=t,m=e;if(!x&&Array.isArray(e)){const t=e.find(e=>"Summary"===e?.type?.name||"string"==typeof e?.type&&"summary"===e?.type?.toLowerCase());t&&(x=t.props.children,m=e.filter(e=>"Summary"!==e?.type?.name&&("string"!=typeof e?.type||"summary"!==e?.type?.toLowerCase())))}return(0,d.jsxs)("div",{className:a,children:[(0,d.jsxs)("div",{className:(0,h.A)(r,u&&i),onClick:()=>{p(!u)},children:[(0,d.jsx)("span",{className:l,children:u?"\u25bc":"\u25ba"}),(0,d.jsx)("span",{className:o,children:x})]}),(0,d.jsx)("div",{className:(0,h.A)(c,u&&i),children:m})]})}function p({children:e}){return(0,d.jsx)(d.Fragment,{children:e})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.