Agent skill

Lov Any2pdf

by lovstudio in lovstudio/any2pdf

Convert Markdown documents to professionally typeset PDF files with reportlab.

MITAuto-check: notesDocuments & Office

Install Lov Any2pdf

skills CLI
$ npx skills add lovstudio/any2pdf --skill lov-any2pdf -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install lovstudio/any2pdf lov-any2pdf --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/lovstudio/any2pdf.git skills-src && mkdir -p .claude/skills && cp -r skills-src/lov-any2pdf .claude/skills/lov-any2pdf && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
lov-any2pdf
GitHub stars
211
Token cost
~2.4k tokens
SKILL.md length
823 words
Files
4 (incl. scripts, references)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Convert Markdown documents to professionally typeset PDF files with reportlab.

  • Works in 11 steps: Font system: Palatino (Latin body),… → CJK wrapper: _font_wrap() wraps CJK… → Mixed text renderer: _draw_mixed()… → …
  • The user wants to turn a .md file into a styled PDF
  • SKILL.md covers When to Use, Quick Start, Pre-Conversion Options… and Architecture, plus 5 more sections
  • Runs Python scripts from its folder; calls pip, python and apt

What it does

Lov Any2pdf is an agent skill from lovstudio/any2pdf. Convert Markdown documents to professionally typeset PDF files with reportlab. Handles CJK/Latin mixed text, fenced code blocks, tables, blockquotes, Obsidian callouts, inline images, emoji fallback, LaTeX-style formulas, cover pages, clickable TOC, PDF bookmarks, watermarks, and page numbers. Supports multiple color themes (Configurable Academic, Nord, GitHub Light, Solarized, etc.) and is battle-tested for Chinese technical reports. Use this skill whenever the user wants to turn a .md file into a styled PDF…

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/themes.md`, `scripts/md2pdf.py` and `skill.yaml`). Compatibility notes: Requires Python 3.8+ and reportlab (pip install reportlab). Optional: matplotlib (pip install matplotlib) for rendered display formulas. macOS: uses Palatino…

It sits in Documents & Office, covering PDF, LaTeX and Markdown. It works with GitHub, LaTeX, pypdf and Obsidian. The repository describes itself as: Markdown to professionally typeset PDF — an agent skill for AI coding assistants. The licence is MIT.

When your agent uses it

  • The user wants to turn a .md file into a styled PDF
  • Generate a report PDF from markdown
  • Create a print-ready document from markdown content — especially if CJK characters
  • Tables are involved

Example prompts

  • “markdown to PDF”
  • “md2pdf”
  • “any2pdf”
  • “/lov-any2pdf”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Requires Python 3.8+ and reportlab (`pip install reportlab`). Optional: matplotlib (`pip install matplotlib`) for rendered display formulas. macOS: uses Palatino, Songti SC, Menlo (pre-installed). Linux: uses DejaVu/Liberation/FreeFont/Noto, Noto CJK, Droid Sans Fallback, DejaVu Sans Mono, and Noto Emoji when available.

Workflow steps

11 steps, taken from the first numbered list in SKILL.md.

  1. Font system: Palatino (Latin body), Songti SC (CJK body), Menlo (code) on macOS; auto-fallback on Linux
  2. CJK wrapper: _font_wrap() wraps CJK character runs in tags for automatic font switching
  3. Mixed text renderer: _draw_mixed() handles CJK/Latin mixed text on canvas (cover, headers, footers)
  4. Code block handler: esc_code() preserves indentation and line breaks in reportlab Paragraphs
  5. Smart table widths: Proportional column widths based on content length, with 18mm minimum
  6. Bookmark system: ChapterMark flowable creates PDF sidebar bookmarks + named anchors
  7. Heading preprocessor: _preprocess_md() splits merged headings like # Part## Chapter into separate lines
  8. Image handler: local, relative, file://, and remote markdown images are scaled into the body frame with fallback text on errors
  9. Callout renderer: Obsidian-style > [!NOTE] blocks render as themed boxed callouts
  10. Formula renderer: display formulas use optional matplotlib mathtext images, with styled text fallback
  11. Emoji fallback: emoji are rendered as cached Twemoji PNGs when available, or with a local emoji font fallback

What it can do on your machine

Read from SKILL.md and the folder at commit eed4161. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • pip
    • python
    • apt

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Python 3.8+ and reportlab (`pip install reportlab`). Optional: matplotlib (`pip install matplotlib`) for rendered display formulas. macOS: uses Palatino, Songti SC, Menlo (pre-installed). Linux: uses DejaVu/Liberation/FreeFont/Noto, Noto CJK, Droid Sans Fallback, DejaVu Sans Mono, and Noto Emoji when available.

    From compatibility in the SKILL.md frontmatter.

Context cost

Lov Any2pdf loads about 2.4k tokens when it runs, and up to ~3.2k if it reads all its reference files. Until then it costs about 216 tokens; SKILL.md has 823 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~216
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:222
    sudo apt install fonts-dejavu-core fonts-liberation fonts-freefont-ttf fonts-noto fonts-noto-cjk fonts-noto-color-emoji

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from lovstudio/any2pdf at commit eed4161, republished under its MIT licence (© lovstudio). 823 words, ~2,397 tokens.

Download SKILL.mdSave it as .claude/skills/lov-any2pdf/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
lov-any2pdf
description
Convert Markdown documents to professionally typeset PDF files with reportlab. Handles CJK/Latin mixed text, fenced code blocks, tables, blockquotes, Obsidian callouts, inline images, emoji fallback, LaTeX-style formulas, cover pages, clickable TOC, PDF bookmarks, watermarks, and page numbers. Supports multiple color themes (Configurable Academic, Nord, GitHub Light, Solarized, etc.) and is battle-tested for Chinese technical reports. Use this skill whenever the user wants to turn a .md file into a styled PDF, generate a report PDF from markdown, or create a print-ready document from markdown content — especially if CJK characters, code blocks, or tables are involved. Also trigger when the user mentions "markdown to PDF", "md2pdf", "any2pdf", "md转pdf", "报告生成", or asks for a "typeset" or "professionally formatted" PDF from markdown source.
compatibility
Requires Python 3.8+ and reportlab (`pip install reportlab`). Optional: matplotlib (`pip install matplotlib`) for rendered display formulas. macOS: uses Palatino, Songti SC, Menlo (pre-installed). Linux: uses DejaVu/Liberation/FreeFont/Noto, Noto CJK, Droid Sans Fallback, DejaVu Sans Mono, and Noto Emoji when available.
license
MIT
metadata.author
contributors
metadata.version
1.1.0
metadata.tags
markdown pdf cjk reportlab typesetting

any2pdf — Markdown to Professional PDF

This skill converts any Markdown file into a publication-quality PDF using Python's reportlab library. It was developed through extensive iteration on real Chinese technical reports and solves several hard problems that naive MD→PDF converters get wrong.

When to Use

  • User wants to convert .md → .pdf
  • User has a markdown report/document and wants professional typesetting
  • Document contains CJK characters (Chinese/Japanese/Korean) mixed with Latin text
  • Document has fenced code blocks, markdown tables, or nested lists
  • Document has local/remote images, Obsidian callouts, emoji, or math formulas
  • User wants a cover page, table of contents, or watermark in their PDF

Quick Start

bash
python md2pdf/scripts/md2pdf.py \
  --input report.md \
  --output report.pdf \
  --title "My Report" \
  --author "Author Name" \
  --theme warm-academic

All parameters except --input are optional — sensible defaults are applied.

Pre-Conversion Options (MANDATORY)

IMPORTANT: You MUST use the AskUserQuestion tool to ask these questions BEFORE running the conversion. Do NOT list options as plain text — use the tool so the user gets a proper interactive prompt. Ask all options in a SINGLE AskUserQuestion call.

Use AskUserQuestion with the following template. The tone should be friendly and concise — like a design assistant, not a config form:

开始转 PDF!先帮你确认几个选项 👇

━━━ 📐 设计风格 ━━━
 a) 暖学术    — 陶土色调,温润典雅,适合人文/社科报告
 b) 经典论文  — 棕色调,灵感源自 LaTeX classicthesis,适合学术论文
 c) Tufte     — 极简留白,深红点缀,适合数据叙事/技术写作
 d) 期刊蓝    — 藏蓝严谨,灵感源自 IEEE,适合正式发表风格
 e) 精装书    — 咖啡色调,书卷气,适合长篇专著/技术书
 f) 中国红    — 朱红配暖纸,适合中文正式报告/白皮书
 g) 水墨      — 纯灰黑,素雅克制,适合文学/设计类内容
 h) GitHub    — 蓝白极简,程序员熟悉的风格
 i) Nord 冰霜 — 蓝灰北欧风,清爽现代
 j) 海洋      — 青绿色调,清新自然

━━━ 🖼 扉页图片(封面之后的全页插图) ━━━
 1) 跳过
 2) 我提供本地图片路径
 3) AI 根据内容自动生成一张

━━━ 💧 水印 ━━━
 1) 不加
 2) 自定义文字(如 "DRAFT"、"内部资料")

━━━ 📇 封底物料(名片/二维码/品牌) ━━━
 1) 跳过
 2) 我提供图片
 3) 纯文字信息

示例回复:"a, 扉页跳过, 水印:仅供学习参考, 封底图片:/path/qr.png"
直接说人话就行,不用记编号 😄
Mapping User Choices to CLI Args
ChoiceCLI arg
Design style a-j--theme with value from table below
Frontispiece local--frontispiece <path>
Frontispiece AIGenerate image first, then --frontispiece /tmp/frontispiece.png
Watermark text--watermark "文字"
Back cover image--banner <path>
Back cover text--disclaimer "声明" and/or --copyright "© 信息"
Theme Name Mapping
Choice--theme valueInspiration
a) 暖学术warm-academicSkill Publisher design system
b) 经典论文classic-thesisLaTeX classicthesis
c) TuftetufteEdward Tufte's books
d) 期刊蓝ieee-journalIEEE journal format
e) 精装书elegant-bookLaTeX ElegantBook
f) 中国红chinese-redChinese formal documents
g) 水墨ink-wash水墨画 / ink wash painting
h) GitHubgithub-lightGitHub Markdown style
i) Nordnord-frostNord color scheme
j) 海洋ocean-breeze—
Handling AI-Generated Frontispiece

If user chose AI generation: read the document title + first paragraphs, use an image generation tool to create a themed illustration matching the chosen design style, show for approval, then pass via --frontispiece /path/to/image.png

Architecture

Markdown → Preprocess (split merged headings) → Parse (code-fence-aware) → Story (reportlab flowables) → PDF build

Key components:

  1. Font system: Palatino (Latin body), Songti SC (CJK body), Menlo (code) on macOS; auto-fallback on Linux
  2. CJK wrapper: _font_wrap() wraps CJK character runs in <font> tags for automatic font switching
  3. Mixed text renderer: _draw_mixed() handles CJK/Latin mixed text on canvas (cover, headers, footers)
  4. Code block handler: esc_code() preserves indentation and line breaks in reportlab Paragraphs
  5. Smart table widths: Proportional column widths based on content length, with 18mm minimum
  6. Bookmark system: ChapterMark flowable creates PDF sidebar bookmarks + named anchors
  7. Heading preprocessor: _preprocess_md() splits merged headings like # Part## Chapter into separate lines
  8. Image handler: local, relative, file://, and remote markdown images are scaled into the body frame with fallback text on errors
  9. Callout renderer: Obsidian-style > [!NOTE] blocks render as themed boxed callouts
  10. Formula renderer: display formulas use optional matplotlib mathtext images, with styled text fallback
  11. Emoji fallback: emoji are rendered as cached Twemoji PNGs when available, or with a local emoji font fallback

Hard-Won Lessons

Show full SKILL.md (330 more words)Show less
CJK Characters Rendering as □

reportlab's Paragraph only uses the font in ParagraphStyle. If fontName="Mono" but text contains Chinese, they render as □. Fix: Always apply _font_wrap() to ALL text that might contain CJK, including code blocks.

Code Blocks Losing Line Breaks

reportlab treats \n as whitespace. Fix: esc_code() converts \n → <br/> and all spaces → &nbsp;, preserving indentation and mid-line alignment before _font_wrap().

CJK/Latin Word Wrapping

Default reportlab breaks lines only at spaces, causing ugly splits like "Claude\nCode". Fix: Set wordWrap='CJK' on body/bullet styles to allow breaks at CJK character boundaries.

drawString() / drawCentredString() with a Latin font can't render 年/月/日 etc. Fix: Use _draw_mixed() for ALL user-content canvas text (dates, stats, disclaimers).

Configuration Reference

Most options can also be set in top-of-file YAML-style frontmatter. Explicit CLI arguments take precedence over frontmatter values.

ArgumentFrontmatter KeyDefaultDescription
--input—(required)Path to markdown file
--output—output.pdfOutput PDF path
--titletitleFrom first H1Document title for cover page
--subtitlesubtitle""Subtitle text
--authorauthor""Author name
--datedateTodayDate string
--versionversion""Version string for cover
--watermarkwatermark""Watermark text (empty = none)
--themethemewarm-academicColor theme name
--theme-file—""Custom theme JSON file path
--covercovertrueGenerate cover page
--toctoctrueGenerate table of contents
--page-sizepage-sizeA4Page size (A4 or Letter)
--frontispiecefrontispiece""Full-page image after cover
--bannerbanner""Back cover banner image
--header-titleheader-title""Report title in page header
--footer-leftfooter-leftauthorBrand/author in footer
--stats-linestats-line""Stats on cover
--stats-line2stats-line2""Second stats line
--edition-lineedition-line""Edition line at cover bottom
--disclaimerdisclaimer""Back cover disclaimer
--copyrightcopyright""Back cover copyright
--code-max-linescode-max-lines30Max lines per code block

Themes

Available: warm-academic, nord-frost, github-light, solarized-light, paper-classic, ocean-breeze.

Each theme defines: page background, ink color, accent color, faded text, border, code background, watermark tint.

Dependencies

bash
pip install reportlab --break-system-packages
# Optional formula rendering:
pip install matplotlib --break-system-packages

Recommended Ubuntu/Debian fonts:

bash
sudo apt install fonts-dejavu-core fonts-liberation fonts-freefont-ttf fonts-noto fonts-noto-cjk fonts-noto-color-emoji

Runtime context (shared)

运行前读取本 Skill 包的 skill.yaml,由宿主提供 skill-runtime/v1 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。

  • 只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。
  • required: true 字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。
  • 报错提供可复制的 context_id、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。

© lovstudio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts, references) in lov-any2pdf of lovstudio/any2pdf.

  • SKILL.md
  • references/themes.md
  • scripts/md2pdf.py
  • skill.yaml

Open the folder on GitHubat commit eed4161

Compare with similar skills

Lov Any2pdf next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Lov Any2pdf compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lov Any2pdf this skilllovstudio/any2pdf211—~2.4kAutomated safety check: NotesMIT
MineruNebutra/MinerU-Skill122—~1.4kAutomated safety check: PassMIT
MineruNebutra/MinerU-Skill122—~504Automated safety check: PassMIT
Z Md To PDFtjxj/z-skills545—~711Automated safety check: PassMIT
Using Streamlit Markdowniusztinpaul/designing-real-world-ai-agents-workshop512—~1.8kAutomated safety check: PassApache-2.0
Thu ThesisLeoYeAI/openclaw-master-skills2.2k—~4kAutomated safety check: PassMIT

Similar skills

  • Mineru

    Nebutra/MinerU-Skill

    An AI-Native skill for parsing PDF / Office / image files into clean Markdown with MinerU — a fast, zero-config document parser for AI agents.

    122 GitHub stars~1.4k tokensUpdated 13 days ago
    Documents & OfficeAuto-check passed
  • Mineru

    Nebutra/MinerU-Skill

    An AI-Native skill for parsing PDF / Office / image files into Markdown with MinerU — a fast, zero-config document parser for AI agents.

    122 GitHub stars~504 tokensUpdated 13 days ago
    Documents & OfficeAuto-check passed
  • Z Md To PDF

    tjxj/z-skills

    将 Markdown、Obsidian 笔记、技术文章、白皮书或长文排成中文 PDF。用户说“转成 PDF”“Markdown 转 PDF”“md 转 pdf”“排版成电子书”“生成指定风格 PDF”“一次生成多种风格”“学术风/书籍风/报告风”,或要编译 my-girlfriend-jingtian-latex 项目时,都应使用本…

    545 GitHub stars~711 tokensUpdated 15 days ago
    Documents & OfficeAuto-check passed
  • Using Streamlit Markdown

    iusztinpaul/designing-real-world-ai-agents-workshop

    Covers all Markdown features in Streamlit including GitHub-flavored syntax plus Streamlit extensions like colored text, badges, Material icons, and LaTeX.

    512 GitHub stars~1.8k tokensUpdated 4 mo ago
    Documents & OfficeAuto-check passed
  • Thu Thesis

    LeoYeAI/openclaw-master-skills

    清华大学毕业论文 Word → PDF 一键格式规范化工具。输入任意 Word (.docx) 格式的清华毕业论文,自动转换为符合清华 thuthesis 官方 LaTeX 模板规范的高质量 PDF。适用于所有清华学位论文(MBA/学硕/专硕),一条命令搞定。功能:自动提取章节结构、中英文摘要、参考文献(自动生成 BibTeX)、图片(含…

    2.2k GitHub stars~4k tokensUpdated 2 mo ago
    Documents & OfficeAuto-check passed
  • Lecture To Md

    ysyecust/lecture-to-notes

    把课堂视频(本地或 B 站/YouTube)、文字稿、课件三者(任意组合)整理成一份详细的中文 Markdown 课堂笔记,输出按课程标题命名的 {titlename}.md(首行为 文档标题)+ 相对路径图片。Markdown 工作流,与上游 lecture-to-notes 的 LaTeX/PDF 输出并行存在;上游 skill 完全不动。触发词:markdown 笔记、md 笔记、视频转…

    269 GitHub stars~3.9k tokensUpdated 4 days ago
    Documents & OfficeAuto-check passed

Questions about Lov Any2pdf

What does Lov Any2pdf do?

Convert Markdown documents to professionally typeset PDF files with reportlab. Lov Any2pdf is an agent skill from lovstudio/any2pdf. Convert Markdown documents to professionally typeset PDF files with reportlab.

When should I use Lov Any2pdf?

Lov Any2pdf fits situations like: the user wants to turn a .md file into a styled PDF; generate a report PDF from markdown; create a print-ready document from markdown content — especially if CJK characters; tables are involved.

How do I install Lov Any2pdf in Claude Code?

Run `npx skills add lovstudio/any2pdf --skill lov-any2pdf -a claude-code`. Or copy the skill folder (lov-any2pdf in lovstudio/any2pdf) into .claude/skills/lov-any2pdf in your project. Claude Code loads it when a task matches its description.

How do I install Lov Any2pdf in Codex?

Run `npx skills add lovstudio/any2pdf --skill lov-any2pdf -a codex`. Or copy the skill folder (lov-any2pdf in lovstudio/any2pdf) into .agents/skills/lov-any2pdf in your project. Codex loads it when a task matches its description.

Can I use Lov Any2pdf in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lovstudio/any2pdf --skill lov-any2pdf -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lov-any2pdf, .gemini/skills/lov-any2pdf, .github/skills/lov-any2pdf and .opencode/skills/lov-any2pdf in your project.

What does Lov Any2pdf need to run?

Going by SKILL.md and its folder, Lov Any2pdf needs Python for the scripts in its folder and the command-line tools its instructions call (pip, python and apt). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires Python 3.8+ and reportlab (`pip install reportlab`). Optional: matplotlib (`pip install matplotlib`) for rendered display formulas. macOS: uses Palatino, Songti SC, Menlo (pre-installed). Linux: uses DejaVu/Liberation/FreeFont/Noto, Noto CJK, Droid Sans Fallback, DejaVu Sans Mono, and Noto Emoji when available. .

Does Lov Any2pdf access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Lov Any2pdf safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Lov Any2pdf use?

Lov Any2pdf is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Lov Any2pdf use?

About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 845 tokens, read only when the agent opens those files.

What are the alternatives to Lov Any2pdf?

Skills that share tags, products or a category with Lov Any2pdf: Mineru (Nebutra/MinerU-Skill, 122 stars), Mineru (Nebutra/MinerU-Skill, 122 stars), Z Md To PDF (tjxj/z-skills, 545 stars) and Using Streamlit Markdown (iusztinpaul/designing-real-world-ai-agents-workshop, 512 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lov Any2pdf?

lovstudio (a GitHub organization) maintains it in lovstudio/any2pdf, which has 211 GitHub stars. The repository was last updated on August 10, 2026.

Source: lovstudio/any2pdf on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.