2024-07-10 23:20:06 +01:00
|
|
|
|
|
|
|
|
# VERSION=$(shell git describe | sed 's/^v//')
|
2024-10-04 17:28:07 +01:00
|
|
|
|
2024-10-15 00:31:08 +01:00
|
|
|
VERSION=0.0.0
|
2024-07-10 23:20:06 +01:00
|
|
|
|
2024-08-12 17:39:54 +01:00
|
|
|
DOCKER=podman
|
|
|
|
|
|
2026-02-23 15:56:29 +00:00
|
|
|
all: containers
|
2024-07-10 23:20:06 +01:00
|
|
|
|
2024-09-30 20:50:20 +01:00
|
|
|
# Not used
|
|
|
|
|
wheels:
|
2024-10-04 22:12:39 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph/
|
2024-09-30 19:36:09 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-base/
|
|
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-flow/
|
|
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-vertexai/
|
|
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-bedrock/
|
2024-09-30 14:00:29 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-embeddings-hf/
|
2024-09-30 22:20:26 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-cli/
|
2025-03-20 09:29:40 +00:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-ocr/
|
Add universal document decoder with multi-format support (#705)
Add universal document decoder with multi-format support
using 'unstructured'.
New universal decoder service powered by the unstructured
library, handling DOCX, XLSX, PPTX, HTML, Markdown, CSV, RTF,
ODT, EPUB and more through a single service. Tables are preserved
as HTML markup for better downstream extraction. Images are
stored in the librarian but excluded from the text
pipeline. Configurable section grouping strategies
(whole-document, heading, element-type, count, size) for non-page
formats. Page-based formats (PDF, PPTX, XLSX) are automatically
grouped by page.
All four decoders (PDF, Mistral OCR, Tesseract OCR, universal)
now share the "document-decoder" ident so they are
interchangeable. PDF-only decoders fetch document metadata to
check MIME type and gracefully skip unsupported formats.
Librarian changes: removed MIME type whitelist validation so any
document format can be ingested. Simplified routing so text/plain
goes to text-load and everything else goes to document-load.
Removed dual inline/streaming data paths — documents always use
document_id for content retrieval.
New provenance entity types (tg:Section, tg:Image) and metadata
predicates (tg:elementTypes, tg:tableCount, tg:imageCount) for
richer explainability.
Universal decoder is in its own package (trustgraph-unstructured)
and container image (trustgraph-unstructured).
2026-03-23 12:56:35 +00:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-unstructured/
|
feat: add Docling-based document decoder as alternative to unstructured (#1054)
Add trustgraph-docling package providing a document decoder powered by
IBM's Docling library. Supports PDF, DOCX, XLSX, PPTX, HTML, Markdown,
and CSV with two chunking modes:
- page mode (default): groups output by page for page-based formats,
emits TextDocument messages for the existing downstream chunker
- hybrid mode: uses Docling's HybridChunker for structure-aware
semantic chunking, emits Chunk messages directly
Tables are preserved as HTML markup. Images are stored in the librarian
with provenance but excluded from the text pipeline. Full provenance
chain is maintained for explainability tracing.
Includes Containerfile, CI/CD integration (PR checks and release
workflows), Makefile targets, and tech spec documentation.
Added unit tests for the package.
2026-07-20 21:25:33 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-docling/
|
2025-07-02 18:19:23 +01:00
|
|
|
pip3 wheel --no-deps --wheel-dir dist trustgraph-mcp/
|
2024-09-30 14:00:29 +01:00
|
|
|
|
2024-10-04 15:47:46 +01:00
|
|
|
packages: update-package-versions
|
2024-09-30 20:50:20 +01:00
|
|
|
rm -rf dist/
|
2025-07-23 21:22:08 +01:00
|
|
|
cd trustgraph && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-base && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-flow && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-vertexai && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-bedrock && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-embeddings-hf && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-cli && python -m build --sdist --outdir ../dist/
|
|
|
|
|
cd trustgraph-ocr && python -m build --sdist --outdir ../dist/
|
Add universal document decoder with multi-format support (#705)
Add universal document decoder with multi-format support
using 'unstructured'.
New universal decoder service powered by the unstructured
library, handling DOCX, XLSX, PPTX, HTML, Markdown, CSV, RTF,
ODT, EPUB and more through a single service. Tables are preserved
as HTML markup for better downstream extraction. Images are
stored in the librarian but excluded from the text
pipeline. Configurable section grouping strategies
(whole-document, heading, element-type, count, size) for non-page
formats. Page-based formats (PDF, PPTX, XLSX) are automatically
grouped by page.
All four decoders (PDF, Mistral OCR, Tesseract OCR, universal)
now share the "document-decoder" ident so they are
interchangeable. PDF-only decoders fetch document metadata to
check MIME type and gracefully skip unsupported formats.
Librarian changes: removed MIME type whitelist validation so any
document format can be ingested. Simplified routing so text/plain
goes to text-load and everything else goes to document-load.
Removed dual inline/streaming data paths — documents always use
document_id for content retrieval.
New provenance entity types (tg:Section, tg:Image) and metadata
predicates (tg:elementTypes, tg:tableCount, tg:imageCount) for
richer explainability.
Universal decoder is in its own package (trustgraph-unstructured)
and container image (trustgraph-unstructured).
2026-03-23 12:56:35 +00:00
|
|
|
cd trustgraph-unstructured && python -m build --sdist --outdir ../dist/
|
feat: add Docling-based document decoder as alternative to unstructured (#1054)
Add trustgraph-docling package providing a document decoder powered by
IBM's Docling library. Supports PDF, DOCX, XLSX, PPTX, HTML, Markdown,
and CSV with two chunking modes:
- page mode (default): groups output by page for page-based formats,
emits TextDocument messages for the existing downstream chunker
- hybrid mode: uses Docling's HybridChunker for structure-aware
semantic chunking, emits Chunk messages directly
Tables are preserved as HTML markup. Images are stored in the librarian
with provenance but excluded from the text pipeline. Full provenance
chain is maintained for explainability tracing.
Includes Containerfile, CI/CD integration (PR checks and release
workflows), Makefile targets, and tech spec documentation.
Added unit tests for the package.
2026-07-20 21:25:33 +01:00
|
|
|
cd trustgraph-docling && python -m build --sdist --outdir ../dist/
|
2025-07-23 21:22:08 +01:00
|
|
|
cd trustgraph-mcp && python -m build --sdist --outdir ../dist/
|
2024-09-30 20:50:20 +01:00
|
|
|
|
2024-09-30 21:07:18 +01:00
|
|
|
pypi-upload:
|
|
|
|
|
twine upload dist/*-${VERSION}.*
|
|
|
|
|
|
2025-01-28 19:36:05 +00:00
|
|
|
CONTAINER_BASE=docker.io/trustgraph
|
2024-07-10 23:20:06 +01:00
|
|
|
|
2024-09-30 16:38:50 +01:00
|
|
|
update-package-versions:
|
2024-09-30 22:20:26 +01:00
|
|
|
mkdir -p trustgraph-cli/trustgraph
|
2024-10-08 20:33:14 +01:00
|
|
|
mkdir -p trustgraph/trustgraph
|
2024-09-30 19:36:09 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-base/trustgraph/base_version.py
|
|
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-flow/trustgraph/flow_version.py
|
|
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-vertexai/trustgraph/vertexai_version.py
|
|
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-bedrock/trustgraph/bedrock_version.py
|
2024-09-30 16:38:50 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-embeddings-hf/trustgraph/embeddings_hf_version.py
|
2024-09-30 22:20:26 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-cli/trustgraph/cli_version.py
|
2025-03-20 09:29:40 +00:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-ocr/trustgraph/ocr_version.py
|
Add universal document decoder with multi-format support (#705)
Add universal document decoder with multi-format support
using 'unstructured'.
New universal decoder service powered by the unstructured
library, handling DOCX, XLSX, PPTX, HTML, Markdown, CSV, RTF,
ODT, EPUB and more through a single service. Tables are preserved
as HTML markup for better downstream extraction. Images are
stored in the librarian but excluded from the text
pipeline. Configurable section grouping strategies
(whole-document, heading, element-type, count, size) for non-page
formats. Page-based formats (PDF, PPTX, XLSX) are automatically
grouped by page.
All four decoders (PDF, Mistral OCR, Tesseract OCR, universal)
now share the "document-decoder" ident so they are
interchangeable. PDF-only decoders fetch document metadata to
check MIME type and gracefully skip unsupported formats.
Librarian changes: removed MIME type whitelist validation so any
document format can be ingested. Simplified routing so text/plain
goes to text-load and everything else goes to document-load.
Removed dual inline/streaming data paths — documents always use
document_id for content retrieval.
New provenance entity types (tg:Section, tg:Image) and metadata
predicates (tg:elementTypes, tg:tableCount, tg:imageCount) for
richer explainability.
Universal decoder is in its own package (trustgraph-unstructured)
and container image (trustgraph-unstructured).
2026-03-23 12:56:35 +00:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-unstructured/trustgraph/unstructured_version.py
|
feat: add Docling-based document decoder as alternative to unstructured (#1054)
Add trustgraph-docling package providing a document decoder powered by
IBM's Docling library. Supports PDF, DOCX, XLSX, PPTX, HTML, Markdown,
and CSV with two chunking modes:
- page mode (default): groups output by page for page-based formats,
emits TextDocument messages for the existing downstream chunker
- hybrid mode: uses Docling's HybridChunker for structure-aware
semantic chunking, emits Chunk messages directly
Tables are preserved as HTML markup. Images are stored in the librarian
with provenance but excluded from the text pipeline. Full provenance
chain is maintained for explainability tracing.
Includes Containerfile, CI/CD integration (PR checks and release
workflows), Makefile targets, and tech spec documentation.
Added unit tests for the package.
2026-07-20 21:25:33 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-docling/trustgraph/docling_version.py
|
2024-10-04 22:12:39 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph/trustgraph/trustgraph_version.py
|
2025-07-02 18:19:23 +01:00
|
|
|
echo __version__ = \"${VERSION}\" > trustgraph-mcp/trustgraph/mcp_version.py
|
2024-09-30 16:38:50 +01:00
|
|
|
|
2026-04-13 20:51:09 +01:00
|
|
|
containers: container-base container-flow \
|
|
|
|
|
container-bedrock container-vertexai \
|
|
|
|
|
container-hf container-ocr \
|
feat: add Docling-based document decoder as alternative to unstructured (#1054)
Add trustgraph-docling package providing a document decoder powered by
IBM's Docling library. Supports PDF, DOCX, XLSX, PPTX, HTML, Markdown,
and CSV with two chunking modes:
- page mode (default): groups output by page for page-based formats,
emits TextDocument messages for the existing downstream chunker
- hybrid mode: uses Docling's HybridChunker for structure-aware
semantic chunking, emits Chunk messages directly
Tables are preserved as HTML markup. Images are stored in the librarian
with provenance but excluded from the text pipeline. Full provenance
chain is maintained for explainability tracing.
Includes Containerfile, CI/CD integration (PR checks and release
workflows), Makefile targets, and tech spec documentation.
Added unit tests for the package.
2026-07-20 21:25:33 +01:00
|
|
|
container-unstructured container-docling container-mcp
|
2026-04-13 20:51:09 +01:00
|
|
|
|
feat: LLM-native structured output via JSON schema enforcement (#1037)
Thread existing JSON schemas from prompt definitions through the
text-completion service to LLM backends' native structured output
APIs. When a prompt has response-type "json" and a strict-mode
compatible schema, the LLM constrains token selection at the logit
level to guarantee schema-valid output.
Wire-level changes:
- Add response_format and schema fields to TextCompletionRequest
- Update translator to encode/decode new fields
- Pass new fields through LlmService, TextCompletionClient, and
PromptManager
Runtime schema compatibility checker:
- New is_strict_mode_compatible() utility validates schemas against
LLM provider constraints (additionalProperties, required fields,
no unsupported constraints, no open-ended objects)
- Per-prompt eligibility decision: compliant schemas use structured
output, non-compliant schemas fall back to free-text + post-hoc
validation
LLM backend implementations:
- OpenAI: response_format with json_schema, variant-aware top-level
array rejection (openai variant blocks, llama/vllm variants allow)
- New vllm variant for the OpenAI backend
- vLLM (dedicated): response_format in raw HTTP body
- Ollama: format=<schema> parameter
- Claude: tool-use trick (forced tool call with schema as input_schema)
- Mistral: native json_schema response_format
- Llamafile, LM Studio: OpenAI SDK response_format
- Azure OpenAI: AzureOpenAI SDK response_format
- Azure serverless: response_format in raw HTTP body
- TGI: response_format in raw HTTP body
- VertexAI Gemini: response_mime_type + response_schema
- VertexAI Claude: tool-use trick
- Google AI Studio: response_mime_type + response_schema
- Bedrock, Cohere: signature-only (no structured output yet)
Post-hoc jsonschema.validate() retained as defence-in-depth.
Tech spec added: docs/tech-specs/structured-output.md
Update tests
2026-07-10 15:28:56 +01:00
|
|
|
some-containers: container-base container-flow
|
|
|
|
|
# container-unstructured
|
2024-07-10 23:20:06 +01:00
|
|
|
|
|
|
|
|
push:
|
2025-01-28 19:36:05 +00:00
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-base:${VERSION}
|
|
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-flow:${VERSION}
|
|
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-bedrock:${VERSION}
|
|
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-vertexai:${VERSION}
|
|
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-hf:${VERSION}
|
2025-03-20 09:29:40 +00:00
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-ocr:${VERSION}
|
Add universal document decoder with multi-format support (#705)
Add universal document decoder with multi-format support
using 'unstructured'.
New universal decoder service powered by the unstructured
library, handling DOCX, XLSX, PPTX, HTML, Markdown, CSV, RTF,
ODT, EPUB and more through a single service. Tables are preserved
as HTML markup for better downstream extraction. Images are
stored in the librarian but excluded from the text
pipeline. Configurable section grouping strategies
(whole-document, heading, element-type, count, size) for non-page
formats. Page-based formats (PDF, PPTX, XLSX) are automatically
grouped by page.
All four decoders (PDF, Mistral OCR, Tesseract OCR, universal)
now share the "document-decoder" ident so they are
interchangeable. PDF-only decoders fetch document metadata to
check MIME type and gracefully skip unsupported formats.
Librarian changes: removed MIME type whitelist validation so any
document format can be ingested. Simplified routing so text/plain
goes to text-load and everything else goes to document-load.
Removed dual inline/streaming data paths — documents always use
document_id for content retrieval.
New provenance entity types (tg:Section, tg:Image) and metadata
predicates (tg:elementTypes, tg:tableCount, tg:imageCount) for
richer explainability.
Universal decoder is in its own package (trustgraph-unstructured)
and container image (trustgraph-unstructured).
2026-03-23 12:56:35 +00:00
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-unstructured:${VERSION}
|
feat: add Docling-based document decoder as alternative to unstructured (#1054)
Add trustgraph-docling package providing a document decoder powered by
IBM's Docling library. Supports PDF, DOCX, XLSX, PPTX, HTML, Markdown,
and CSV with two chunking modes:
- page mode (default): groups output by page for page-based formats,
emits TextDocument messages for the existing downstream chunker
- hybrid mode: uses Docling's HybridChunker for structure-aware
semantic chunking, emits Chunk messages directly
Tables are preserved as HTML markup. Images are stored in the librarian
with provenance but excluded from the text pipeline. Full provenance
chain is maintained for explainability tracing.
Includes Containerfile, CI/CD integration (PR checks and release
workflows), Makefile targets, and tech spec documentation.
Added unit tests for the package.
2026-07-20 21:25:33 +01:00
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-docling:${VERSION}
|
2025-07-03 17:00:59 +01:00
|
|
|
${DOCKER} push ${CONTAINER_BASE}/trustgraph-mcp:${VERSION}
|
2024-07-10 23:20:06 +01:00
|
|
|
|
2025-09-11 12:32:04 +01:00
|
|
|
# Individual container build targets
|
2026-04-13 20:51:09 +01:00
|
|
|
container-%: update-package-versions
|
|
|
|
|
${DOCKER} build \
|
|
|
|
|
-f containers/Containerfile.${@:container-%=%} \
|
|
|
|
|
-t ${CONTAINER_BASE}/trustgraph-${@:container-%=%}:${VERSION} .
|
Add universal document decoder with multi-format support (#705)
Add universal document decoder with multi-format support
using 'unstructured'.
New universal decoder service powered by the unstructured
library, handling DOCX, XLSX, PPTX, HTML, Markdown, CSV, RTF,
ODT, EPUB and more through a single service. Tables are preserved
as HTML markup for better downstream extraction. Images are
stored in the librarian but excluded from the text
pipeline. Configurable section grouping strategies
(whole-document, heading, element-type, count, size) for non-page
formats. Page-based formats (PDF, PPTX, XLSX) are automatically
grouped by page.
All four decoders (PDF, Mistral OCR, Tesseract OCR, universal)
now share the "document-decoder" ident so they are
interchangeable. PDF-only decoders fetch document metadata to
check MIME type and gracefully skip unsupported formats.
Librarian changes: removed MIME type whitelist validation so any
document format can be ingested. Simplified routing so text/plain
goes to text-load and everything else goes to document-load.
Removed dual inline/streaming data paths — documents always use
document_id for content retrieval.
New provenance entity types (tg:Section, tg:Image) and metadata
predicates (tg:elementTypes, tg:tableCount, tg:imageCount) for
richer explainability.
Universal decoder is in its own package (trustgraph-unstructured)
and container image (trustgraph-unstructured).
2026-03-23 12:56:35 +00:00
|
|
|
|
2026-04-13 23:14:37 +01:00
|
|
|
# Multi-arch: build both platforms sequentially into one manifest (local use)
|
2026-04-13 20:51:09 +01:00
|
|
|
manifest-%: update-package-versions
|
|
|
|
|
-@${DOCKER} manifest rm \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:manifest-%=%}:${VERSION}
|
|
|
|
|
${DOCKER} build --platform linux/amd64,linux/arm64 \
|
|
|
|
|
-f containers/Containerfile.${@:manifest-%=%} \
|
|
|
|
|
--manifest \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:manifest-%=%}:${VERSION} .
|
|
|
|
|
|
2026-04-13 23:14:37 +01:00
|
|
|
# Multi-arch: build a single platform image (for parallel CI)
|
|
|
|
|
platform-%-amd64: update-package-versions
|
|
|
|
|
${DOCKER} build --platform linux/amd64 \
|
|
|
|
|
-f containers/Containerfile.${@:platform-%-amd64=%} \
|
|
|
|
|
-t ${CONTAINER_BASE}/trustgraph-${@:platform-%-amd64=%}:${VERSION}-amd64 .
|
|
|
|
|
|
|
|
|
|
platform-%-arm64: update-package-versions
|
|
|
|
|
${DOCKER} build --platform linux/arm64 \
|
|
|
|
|
-f containers/Containerfile.${@:platform-%-arm64=%} \
|
|
|
|
|
-t ${CONTAINER_BASE}/trustgraph-${@:platform-%-arm64=%}:${VERSION}-arm64 .
|
|
|
|
|
|
|
|
|
|
# Push a single platform image
|
|
|
|
|
push-platform-%-amd64:
|
|
|
|
|
${DOCKER} push \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:push-platform-%-amd64=%}:${VERSION}-amd64
|
|
|
|
|
|
|
|
|
|
push-platform-%-arm64:
|
|
|
|
|
${DOCKER} push \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:push-platform-%-arm64=%}:${VERSION}-arm64
|
|
|
|
|
|
|
|
|
|
# Combine per-platform images into a multi-arch manifest
|
|
|
|
|
combine-manifest-%:
|
|
|
|
|
-@${DOCKER} manifest rm \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:combine-manifest-%=%}:${VERSION}
|
|
|
|
|
${DOCKER} manifest create \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:combine-manifest-%=%}:${VERSION} \
|
|
|
|
|
docker://${CONTAINER_BASE}/trustgraph-${@:combine-manifest-%=%}:${VERSION}-amd64 \
|
|
|
|
|
docker://${CONTAINER_BASE}/trustgraph-${@:combine-manifest-%=%}:${VERSION}-arm64
|
|
|
|
|
${DOCKER} manifest push \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:combine-manifest-%=%}:${VERSION}
|
|
|
|
|
|
2026-04-13 20:51:09 +01:00
|
|
|
# Push a container
|
|
|
|
|
push-container-%:
|
|
|
|
|
${DOCKER} push \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:push-container-%=%}:${VERSION}
|
|
|
|
|
|
2026-04-13 23:14:37 +01:00
|
|
|
# Push a manifest (from local multi-arch build)
|
2026-04-13 20:51:09 +01:00
|
|
|
push-manifest-%:
|
|
|
|
|
${DOCKER} manifest push \
|
|
|
|
|
${CONTAINER_BASE}/trustgraph-${@:push-manifest-%=%}:${VERSION}
|
2025-09-11 12:32:04 +01:00
|
|
|
|
2024-07-10 23:20:06 +01:00
|
|
|
clean:
|
|
|
|
|
rm -rf wheels/
|
|
|
|
|
|
2024-07-15 19:42:16 +01:00
|
|
|
set-version:
|
2024-08-30 17:47:35 +01:00
|
|
|
echo '"${VERSION}"' > templates/values/version.jsonnet
|
2024-08-13 17:30:59 +01:00
|
|
|
|
2024-09-28 11:55:30 +01:00
|
|
|
docker-hub-login:
|
|
|
|
|
cat docker-token.txt | \
|
2025-01-06 21:45:42 +00:00
|
|
|
${DOCKER} login -u trustgraph --password-stdin registry-1.docker.io
|
2024-09-28 11:55:30 +01:00
|
|
|
|