Agent skill

Oraclecloud Upgrade Migration

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback.

MITAuto-check passedDevOps & Cloud

Install Oraclecloud Upgrade Migration

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill oraclecloud-upgrade-migration -a claude-code

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

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace oraclecloud-upgrade-migration --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/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/oraclecloud-upgrade-migration .claude/skills/oraclecloud-upgrade-migration && 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
oraclecloud-upgrade-migration
GitHub stars
2.8k
Token cost
~2.8k tokens
SKILL.md length
607 words
Files
2 (incl. references)
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback.

  • Works in 7 steps: Audit Current Versions → Check for Known Breaking Changes → Python SDK Safe Upgrade → …
  • Upgrading oci pip packages
  • SKILL.md covers Overview, Prerequisites, Instructions and Output, plus 4 more sections
  • Calls terraform, pip and python3

What it does

Oraclecloud Upgrade Migration is an agent skill from jeremylongshore/tons-of-skills-marketplace. Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback. Use when upgrading oci pip packages, updating the Terraform OCI provider, or debugging post-upgrade failures. Trigger with "oraclecloud upgrade", "oci sdk upgrade", "oci terraform provider update", "oci version migration".

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/one-pager.md`). Compatibility notes: Designed for Claude Code

It sits in DevOps & Cloud, covering Infrastructure as code and Anomaly detection. It works with Terraform and Python. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Upgrading oci pip packages
  • Updating the Terraform OCI provider
  • Debugging post-upgrade failures
  • With oraclecloud upgrade

Example prompts

  • “oraclecloud upgrade”
  • “oci sdk upgrade”
  • “oci terraform provider update”
  • “/oraclecloud-upgrade-migration”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(pip:*), Bash(oci:*), Bash(terraform:*), Bash(python3:*), Grep

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Audit Current Versions
  2. Check for Known Breaking Changes
  3. Python SDK Safe Upgrade
  4. Terraform Provider Safe Upgrade
  5. Deprecation Detection Script
  6. OCI CLI Upgrade
  7. Rollback Procedures

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(pip:*)
    • Bash(oci:*)
    • Bash(terraform:*)
    • Bash(python3:*)
    • Grep

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • terraform
    • pip
    • python3
    • git

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

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.oracle.com
    • registry.terraform.io

    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

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Oraclecloud Upgrade Migration loads about 2.8k tokens when it runs, and up to ~3.2k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 607 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~91
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k
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 passed

The automated check found no risky patterns in SKILL.md.

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 607 words, ~2,765 tokens.

Download SKILL.mdSave it as .claude/skills/oraclecloud-upgrade-migration/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
oraclecloud-upgrade-migration
description
Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback. Use when upgrading oci pip packages, updating the Terraform OCI provider, or debugging post-upgrade failures. Trigger with "oraclecloud upgrade", "oci sdk upgrade", "oci terraform provider update", "oci version migration".
allowed-tools
Read, Write, Edit, Bash(pip:*), Bash(oci:*), Bash(terraform:*), Bash(python3:*), Grep
compatibility
Designed for Claude Code
version
1.8.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
saas, oraclecloud, oci

Oracle Cloud Upgrade & Migration

Overview

OCI Terraform provider and Python SDK break backwards compatibility more often than AWS equivalents. The Terraform provider has had provider crashes on terraform plan after upgrades, deprecated resource types removed without migration paths, and schema changes that silently alter behavior. The Python SDK has had memory leak fixes that changed object lifecycle semantics and authentication class renames between minor versions. This skill tracks known breaking changes and provides safe upgrade patterns with version pinning, pre-upgrade testing, and rollback procedures.

Purpose: Upgrade OCI Python SDK and Terraform provider versions safely, detect breaking changes before they hit production, and roll back cleanly if an upgrade fails.

Prerequisites

  • Python 3.8+ with the current OCI SDK installed — pip show oci
  • Terraform 1.5+ with the OCI provider — terraform version
  • OCI CLI installed — oci --version
  • Git for version control of infrastructure code
  • A test environment — never upgrade directly in production
  • Current ~/.oci/config validated (see oraclecloud-install-auth)

Instructions

Step 1: Audit Current Versions
bash
# Python SDK version
pip show oci | grep -E "^(Name|Version|Location)"
# Example: Version: 2.125.0

# OCI CLI version
oci --version
# Example: 3.41.0

# Terraform provider version
grep -A2 'oracle/oci' .terraform.lock.hcl 2>/dev/null || echo "No lock file found"
terraform providers
# Example: oracle/oci v5.46.0
python
import oci
print(f"OCI SDK version: {oci.__version__}")
Step 2: Check for Known Breaking Changes

Python SDK known breaking changes:

VersionBreaking ChangeImpactMitigation
2.120.0+oci.retry module refactoredCustom retry strategies may breakUpdate to oci.retry.retry.RetryStrategyBuilder
2.115.0+oci.config.validate_config() stricterRejects configs with extra fieldsRemove non-standard fields from ~/.oci/config
2.105.0+Composite operations return type changed.data attribute structure changedCheck .data type assertions in your code
2.90.0+wait_for_state deprecated on some clientsDirect get_* polling requiredUse oci.wait_until() helper instead

Terraform provider known breaking changes:

VersionBreaking ChangeImpactMitigation
5.40.0+oci_core_instance schema changesource_details block restructuredRun terraform plan before apply to detect drift
5.30.0+Deprecated oci_core_virtual_network removedMust use oci_core_vcnSearch-and-replace in all .tf files
5.20.0+Provider crashes on terraform plan with certain instance configsSegfault in provider binaryPin to 5.19.x until hotfix release
5.0.0Major version bump — multiple resources renamedState file references breakUse terraform state mv for renamed resources
Step 3: Python SDK Safe Upgrade
bash
# Step 3a: Pin current version as fallback
pip freeze | grep ^oci > requirements-oci-backup.txt
echo "Current version saved to requirements-oci-backup.txt"

# Step 3b: Create an isolated branch
git checkout -b upgrade/oci-sdk-$(date +%Y%m%d)

# Step 3c: Upgrade with version constraint
pip install --upgrade "oci>=2.125.0,<2.130.0"  # Constrain to minor range
pip show oci | grep Version
python
# Step 3d: Run validation script
import oci

config = oci.config.from_file("~/.oci/config")
oci.config.validate_config(config)

# Test core client instantiation
identity = oci.identity.IdentityClient(config)
compute = oci.core.ComputeClient(config)
network = oci.core.VirtualNetworkClient(config)
storage = oci.object_storage.ObjectStorageClient(config)
database = oci.database.DatabaseClient(config)
monitoring = oci.monitoring.MonitoringClient(config)

# Verify each client can make a basic call
identity.list_regions()
print("IdentityClient: OK")

compute.list_instances(compartment_id=config["tenancy"], limit=1)
print("ComputeClient: OK")

network.list_vcns(compartment_id=config["tenancy"], limit=1)
print("VirtualNetworkClient: OK")

namespace = storage.get_namespace().data
print(f"ObjectStorageClient: OK (namespace={namespace})")

print(f"\nAll clients validated on oci=={oci.__version__}")
Step 4: Terraform Provider Safe Upgrade
bash
# Step 4a: Record current state
terraform version > terraform-version-backup.txt
cp .terraform.lock.hcl .terraform.lock.hcl.backup

# Step 4b: Pin provider version in required_providers
hcl
# versions.tf — pin to specific minor version
terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "~> 5.46.0"  # Allows 5.46.x patches only
    }
  }
}
bash
# Step 4c: Upgrade provider
terraform init -upgrade

# Step 4d: Run plan to detect breaking changes (NEVER skip this)
terraform plan -out=upgrade-plan.tfplan 2>&1 | tee upgrade-plan.log

# Step 4e: Check for unexpected changes
grep -E "(must be replaced|forces replacement|will be destroyed)" upgrade-plan.log
# If any resources are being replaced unexpectedly, STOP and investigate
Step 5: Deprecation Detection Script

Scan your codebase for deprecated OCI resource types and SDK patterns:

bash
#!/bin/bash
echo "=== Deprecated Terraform Resources ==="
grep -rn "oci_core_virtual_network" *.tf 2>/dev/null && echo "  DEPRECATED: Use oci_core_vcn" || echo "  None found"
grep -rn "oci_core_security_list" *.tf 2>/dev/null && echo "  WARNING: Prefer oci_core_network_security_group" || echo "  None found"

echo ""
echo "=== Deprecated Python SDK Patterns ==="
grep -rn "from oci.core import" *.py 2>/dev/null | grep -v "ComputeClient\|VirtualNetworkClient\|BlockstorageClient" && echo "  Check for deprecated imports" || echo "  None found"
grep -rn "wait_for_state" *.py 2>/dev/null && echo "  DEPRECATED: Use oci.wait_until() instead" || echo "  None found"
Step 6: OCI CLI Upgrade
bash
# Check current version
oci --version

# Upgrade via pip (OCI CLI is a Python package)
pip install --upgrade oci-cli

# Verify CLI still works after upgrade
oci iam region list --output table && echo "CLI upgrade: OK" || echo "CLI upgrade: FAILED"

# If CLI breaks, rollback
pip install oci-cli==3.41.0  # Replace with your backup version
Step 7: Rollback Procedures

Python SDK rollback:

bash
# Restore pinned version
pip install -r requirements-oci-backup.txt
pip show oci | grep Version

Terraform provider rollback:

bash
# Restore lock file
cp .terraform.lock.hcl.backup .terraform.lock.hcl
terraform init

# Verify state is intact
terraform plan  # Should show no changes

Git-level rollback:

bash
# Discard upgrade branch entirely
git checkout main
git branch -D upgrade/oci-sdk-$(date +%Y%m%d)
Show full SKILL.md (254 more words)Show less

Output

Successful completion produces:

  • Version audit showing current OCI SDK, CLI, and Terraform provider versions
  • Breaking change assessment against the known issues table
  • Upgraded Python SDK with all core clients validated (Identity, Compute, Network, Storage, Database, Monitoring)
  • Upgraded Terraform provider with a clean terraform plan showing no unexpected resource replacements
  • Deprecation scan results for both Terraform resources and Python SDK patterns
  • Backup files for rollback (requirements-oci-backup.txt, .terraform.lock.hcl.backup)

Error Handling

ErrorCodeCauseSolution
ModuleNotFoundError: oci—SDK uninstalled during upgradepip install oci — start upgrade process over
Terraform provider crash (segfault)—Known provider bug in certain versionsPin to last known good version (check Terraform registry issues)
terraform plan shows unexpected replacements—Schema change in providerReview the plan carefully; use terraform state mv if resources were renamed
NotAuthenticated401SDK upgrade changed auth behaviorRe-validate config: python3 -c "import oci; oci.config.validate_config(oci.config.from_file())"
CERTIFICATE_VERIFY_FAILED—New SDK version uses updated cert bundleInstall certifi: pip install --upgrade certifi
terraform init fails on lock file—Lock file hash mismatch after provider upgradeDelete .terraform.lock.hcl and re-run terraform init

Examples

Quick version check one-liner:

bash
echo "SDK: $(python3 -c 'import oci; print(oci.__version__)' 2>/dev/null || echo 'not installed')" && \
echo "CLI: $(oci --version 2>/dev/null || echo 'not installed')" && \
echo "TF: $(terraform version -json 2>/dev/null | python3 -c 'import sys,json; d=json.load(sys.stdin); [print(f"  {k}: {v}") for k,v in d.get("provider_selections",{}).items()]' || echo 'not installed')"

Automated upgrade test script:

bash
#!/bin/bash
set -euo pipefail
echo "=== OCI Upgrade Test ==="
pip install --upgrade oci oci-cli
python3 -c "
import oci
config = oci.config.from_file()
oci.config.validate_config(config)
oci.identity.IdentityClient(config).list_regions()
print(f'SDK {oci.__version__}: PASS')
"
oci iam region list --output table > /dev/null && echo "CLI: PASS" || echo "CLI: FAIL"
echo "=== Done ==="

Resources

Next Steps

After upgrading, run oraclecloud-prod-checklist to verify the environment still passes all production checks, or see oraclecloud-common-errors for debugging any new error patterns introduced by the upgrade.

© jeremylongshore, 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 1 other file (references) in skills/.curated/oraclecloud-upgrade-migration of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • references/one-pager.md

Open the folder on GitHubat commit cfae287

Compare with similar skills

Oraclecloud Upgrade Migration 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.

Oraclecloud Upgrade Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Oraclecloud Upgrade Migration this skilljeremylongshore/tons-of-skills-marketplace2.8k—~2.8kAutomated safety check: PassMIT
Datadog Data Source GeneratorDataDog/terraform-provider-datadog468—~2.7kAutomated safety check: PassMPL-2.0
Terraform Azurerm Set Diff Analyzergithub/awesome-copilot40k1 repos~547Automated safety check: PassMIT
Neo4j Aura Provisioning Skillneo4j-contrib/neo4j-skills114—~3.7kAutomated safety check: NotesMIT
Make Python Recipe Deployablegoogle/adk-recipes10k—~6.9kAutomated safety check: NotesApache-2.0
Asdfjjmartres/opencode133—~2.1kAutomated safety check: NotesMIT

Similar skills

  • Datadog Data Source Generator

    DataDog/terraform-provider-datadog

    Official

    Generates a Datadog Terraform provider data source from an OpenAPI operation with tfgen and opens a review-ready GitHub PR with a risk scan and testing guide.

    468 GitHub stars~2.7k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Official

    Analyze Terraform plan JSON output for AzureRM Provider to distinguish between false-positive diffs (order-only changes in Set-type attributes) and actual resource changes.

    40k GitHub starsUsed in 1 repo~547 tokens
    DevOps & CloudAuto-check passed
  • Neo4j Aura Provisioning Skill

    neo4j-contrib/neo4j-skills

    Provisions and manages Neo4j Aura instances via CLI (aura-cli v1.7+) or REST API.

    114 GitHub stars~3.7k tokensUpdated yesterday
    DevOps & CloudAuto-check: notes
  • Official

    Makes an existing Python recipe deployable: generates the serving files a container needs (Dockerfile, .dockerignore, fastapiapp.py, apputils/a2a.py, apputils/services.py…

    10k GitHub stars~6.9k tokensUpdated yesterday
    DevOps & CloudAuto-check: notes
  • Asdf

    jjmartres/opencode

    A skill your agent uses whenever the user wants to install, configure, or use asdf (asdf-vm), the universal version manager.

    133 GitHub stars~2.1k tokensUpdated 5 mo ago
    DevOps & CloudAuto-check: notes
  • Apex Azure Bicep Patterns

    jonathan-vella/apex

    UTILITY SKILL — Reusable Azure Bicep patterns: hub-spoke, private endpoints, diagnostics, AVM composition.

    217 GitHub stars~2.5k tokensUpdated today
    DevOps & CloudAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Oraclecloud Upgrade Migration

What does Oraclecloud Upgrade Migration do?

Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback. Oraclecloud Upgrade Migration is an agent skill from jeremylongshore/tons-of-skills-marketplace. Safely upgrade OCI Python SDK and Terraform provider — version pinning, breaking change detection, and rollback.

When should I use Oraclecloud Upgrade Migration?

Oraclecloud Upgrade Migration fits situations like: upgrading oci pip packages; updating the Terraform OCI provider; debugging post-upgrade failures; with oraclecloud upgrade.

How do I install Oraclecloud Upgrade Migration in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill oraclecloud-upgrade-migration -a claude-code`. Or copy the skill folder (skills/.curated/oraclecloud-upgrade-migration in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/oraclecloud-upgrade-migration in your project. Claude Code loads it when a task matches its description.

How do I install Oraclecloud Upgrade Migration in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill oraclecloud-upgrade-migration -a codex`. Or copy the skill folder (skills/.curated/oraclecloud-upgrade-migration in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/oraclecloud-upgrade-migration in your project. Codex loads it when a task matches its description.

Can I use Oraclecloud Upgrade Migration 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 jeremylongshore/tons-of-skills-marketplace --skill oraclecloud-upgrade-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/oraclecloud-upgrade-migration, .gemini/skills/oraclecloud-upgrade-migration, .github/skills/oraclecloud-upgrade-migration and .opencode/skills/oraclecloud-upgrade-migration in your project.

What does Oraclecloud Upgrade Migration need to run?

Going by SKILL.md and its folder, Oraclecloud Upgrade Migration needs the command-line tools its instructions call (terraform, pip, python3 and git). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(pip:*), Bash(oci:*), Bash(terraform:*), Bash(python3:*), Grep. Compatibility (from SKILL.md): Designed for Claude Code.

Does Oraclecloud Upgrade Migration access the network?

SKILL.md names 2 domains. As links in the text: docs.oracle.com and registry.terraform.io. This is read from the text; nothing was executed.

Is Oraclecloud Upgrade Migration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Oraclecloud Upgrade Migration use?

Oraclecloud Upgrade Migration 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 Oraclecloud Upgrade Migration use?

About 2.8k tokens (SKILL.md is roughly 11k 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 444 tokens, read only when the agent opens those files.

What are the alternatives to Oraclecloud Upgrade Migration?

Skills that share tags, products or a category with Oraclecloud Upgrade Migration: Datadog Data Source Generator (DataDog/terraform-provider-datadog, 468 stars), Terraform Azurerm Set Diff Analyzer (github/awesome-copilot, 40k stars), Neo4j Aura Provisioning Skill (neo4j-contrib/neo4j-skills, 114 stars) and Make Python Recipe Deployable (google/adk-recipes, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Oraclecloud Upgrade Migration?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.