Integration details
Description
Plasmole brings deterministic molecular-biology tools into ChatGPT. Annotate raw DNA (ORF and parts detection), parse GenBank/FASTA files, edit and assemble sequences, design and visualize PCR primers, find restriction sites and predict digests, calculate melting temperature, design CRISPR guides, optimize codons, align two or many sequences, verify a clone against its reference, check a design for problems, export GenBank or FASTA, and fetch public NCBI records by accession, or resolve a gene, plasmid or vector name to one. Plasmid-producing tools render an interactive circular map inline; drag-select a region to design primers against it. Constructs are versioned, so you can compare or restore any earlier snapshot. For research use only.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- Plasmole
- Access
- Account required
- First tracked
- 2026-09-17
- Tool count
- 22
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competitive lineup
22 tools agents can invoke
Aligns several DNA or protein sequences at once using MUSCLE v5. Reach for it when the user is screening clones against a reference, comparing variants or homologs, or building a consensus. Accepts 2 to 50 sequences, as `sequences` ([{id, name, sequence}, ...]) or multi-FASTA text in `fasta`, each 50,000 bp or less and 500,000 bp in total; repeated names get a counter appended. Returns the aligned rows, a majority consensus, per-column conservation and occupancy, and a `differences` list placing each differing region in the annotated feature it falls in, with codon number and an in-frame or frameshift call. Positions are alignment columns, not positions in any input sequence, and conservation_scores is computed over non-gap rows only, so a column with a deletion elsewhere can read as conserved unless weighted by occupancy_scores. reference_id names the reference row (default: the first input's id); MUSCLE does not preserve input order. Differences are capped at 40 (differences_truncated); a very large aligned matrix is withheld, not trimmed (aligned_sequences_withheld). For exactly two sequences, align_two_sequences reports amino-acid effect per mutation. For research use only.
align_sequence_set
Annotates a DNA or plasmid sequence and returns an interactive plasmid map plus a link to open it in Plasmole. It calls open reading frames and matches the sequence by similarity against a catalog of over 1,300 annotated parts, labeling genes, promoters, origins, markers and tags with computed coordinates. Reach for it when a bare A/T/G/C/N sequence is pasted into the conversation and the question is what it contains; pasted GenBank or FASTA text goes to parse_plasmid_text, an attached file to open_uploaded_plasmid_file. Input is nucleotide only, 50 to 50,000 bp; protein, other letters and longer input are refused rather than approximated. topology defaults to circular and sets whether the two ends are treated as joined: a linear fragment left on the default reports wrap-around features and cut sites that do not exist. include_enzymes=true adds cut marks and a predicted digest gel for a default panel of 29 cloning enzymes; if sites_truncated is true then sites holds sites_shown of site_count positions and every enzyme in sites_omitted is reported by cut count only. Returns a construct_handle later tools take in place of the sequence. Research use only; confirm critical features independently.
auto_annotate
Join two or more DNA fragments into one construct by their overlapping ends (Gibson or In-Fusion) and return the product with an interactive map. Fits a request that supplies the fragments to be joined. Give `fragments` as [{name, sequence}] in any order; the order is inferred from the overlaps (15 to 50 bp). `method`: 'gibson' (default) or 'in_fusion', on the same overlap model. `circular`: true for a plasmid (default), false for a linear product. The tool assembles only when exactly one valid product exists. If the fragments could assemble more than one way, do not chain into a single product, do not close into a circle when `circular` is true, or include a piece in the wrong orientation (fragments are never silently flipped), it returns a refusal naming the reason. It does not perform Golden Gate, MoClo, or Type IIS assembly: fragments carrying Type IIS flanks with no homology overlap are refused with a diagnostic (leftover sites, overhang mismatch, or the matching enzyme) and nothing is saved. Input: 2 or more fragments, A/T/G/C/N, 50,000 bp total. Changing a region inside one existing plasmid is a different tool. For research use only; confirm junctions experimentally.
assemble_fragments_by_overlap
Calculates the melting temperature of a primer or oligo with BioPython Tm_NN, using the Allawi and SantaLucia (1997) nearest-neighbour parameters (the SantaLucia 1998 unified set) with the SantaLucia (1998) salt correction, which converts Mg2+ and dNTPs into a monovalent equivalent, so the result is Mg-aware. Reach for it when a user supplies an oligo and asks for its Tm, or wants Tm compared across candidate oligos under a stated buffer. The polymerase argument ("taq", "phusion", "q5") selects buffer defaults for Tris, K+, Mg2+, dNTPs and primer concentration; na_concentration, k_concentration, mg_concentration, dntp_concentration and primer_concentration override individual values. The response's conditions block reports every buffer parameter actually applied, and notes reports any parameter that was not: a dNTP concentration at or above Mg2+ zeroes the magnesium term and lowers the reported Tm by roughly 6 C. Inputs: unambiguous A/T/G/C only (no degenerate bases), up to 200 bp. For research use only.
calculate_tm
Runs Plasmole's deterministic biological design validator over a DNA construct and returns a verdict (green, yellow, red, incomplete_check, or insufficient_input), a 0 to 100 score, a short summary, the list of individual checks that ran, and a separate ungraded synthesis_complexity flag list. Use it when the user asks whether a construct or assembly design looks sound before ordering or building it. What runs on this surface is driven by the sequence and its annotations: GC content (informational, ungraded), host size compatibility for the three curated organisms, feature-derived checks, and an ungraded synthesis-complexity flag list. Marker compatibility and the assembly-structure checks (component order, missing components, duplicate components) need an explicit marker or component list, which this tool takes no parameter for, so they do NOT run here and a green verdict has not examined them. Read the returned `checks` array to see which ones actually ran. The score is a rough relative signal, not a calibrated probability of success. Accepts `sequence` and/or a `construct_handle` minted by an earlier annotate, edit, or assemble_fragments_by_overlap call, plus optional organism, topology, features, and name. Input limits: A, T, G, C, or N only (whitespace ignored) and at most 50,000 bp; other characters or a longer sequence are refused. When nothing checkable is supplied, or when no check could run on the inputs given, the result is verdict insufficient_input with score 0 rather than a pass, because an empty or uncheckable input is not a clearance for synthesis ordering. For research use only.
check_design
Compares two immutable versions of one Plasmole construct, given `construct_handle`, `from_version`, and `to_version`. Returns from_length, to_length, length_delta, `substitutions` (1-indexed position, from base, to base), substitutions_total, substitutions_truncated, and the names of features added or removed. Use it when the user asks what changed between two versions, or wants to confirm an edit landed as intended. A same-length single-base change gives length_delta 0 together with a non-empty substitutions list, so length_delta 0 on its own does not mean the versions are identical. `substitutions` is capped at 50 entries: when substitutions_truncated is true, substitutions_total holds the real number of changed bases and is larger than the list. Refusals: an unknown handle, a version_number that does not exist, a handle belonging to another user, or an expired handle returns an error rather than an empty diff.
diff_construct_versions
Compares two DNA sequences and reports what differs. Reach for it when the user asks whether a clone or a sequencing read matches its intended design. Pass query_sequence (the clone or read) and reference_sequence (the design). Runs a Biopython pairwise alignment, tries both strands so a reverse-complement read still aligns, and reports percent identity plus substitutions, insertions and deletions at 1-based reference positions, with each change's amino-acid effect when the reference is coding. Two traps. Frame: pass reading_frame (1, 2 or 3) when the coding sequence does not start at base 1; it is otherwise inferred only from a leading ATG, and a wrong frame gives wrong amino-acid calls. Coverage: identity_pct counts gaps (EMBOSS convention), identity_in_covered_region_pct is over the compared bases only and is omitted when nothing could be compared; coverage_pct and covered_reference_span say how much of the reference the read SPANNED, so sequence the read aligned across but the clone lacks is inside that span and reported as a deletion, while terminal_gaps lists the ends the read never reached. unreadable_positions counts N basecalls, which are neither match nor mismatch. Positions are 1-based on the reference. Two sequences only (align_sequence_set takes 2 to 50). Inputs are basecalled A/T/G/C/N, 20,000 bp or less each; raw AB1 files are refused (verify_clone_from_sanger_read reads AB1). First 50 differences listed. For research use only.
align_two_sequences
Finds and ranks CRISPR guide RNAs within a supplied DNA sequence, returning each guide's sequence, PAM, strand, position, quality and specificity scores, and any within-sequence off-targets, plus the number returned and the total found. Positions are 0-based offsets into the supplied sequence, not 1-based coordinates. Use it when the user asks for guides, sgRNAs, or CRISPR cut sites in a gene, insert, or plasmid region they have provided. Accepts `sequence` or a `construct_handle` from an earlier annotate, edit, or assemble_fragments_by_overlap call; `pam` (DNA or IUPAC symbols, NGG by default; the PAM is searched 3' of the guide, so SpCas9-style systems only and Cas12a/Cpf1 PAMs such as TTTN are refused rather than mis-placed); `top_n` (1 to 50); and `include_off_targets`. Scope limit: off-target scoring searches only within the sequence supplied to the call, not an organism's genome, so a guide that scores as specific here can still have genomic off-targets. Input limits: A, T, G, C, or N only (whitespace ignored), at least 23 bp so a guide plus PAM fits, and at most 50,000 bp. A sequence outside those bounds, a PAM using other symbols, or a top_n outside 1 to 50 is refused rather than adjusted. For research use only.
design_guides
Designs PCR primer pairs for a DNA target with primer3-py. Returns up to num_return ranked pairs with 1-based position, Tm (Taq buffer defaults), GC%, self-dimer and hairpin scores, annealing temperature and product size. Use it when a user wants primers to amplify a gene, an insert, a plasmid region, or a qPCR amplicon. With no product_size_min/max the recommended pair is anchored at the exact ends of the target, so terminal bases such as a start codon are kept; widened Tm, structure or GC limits are named in constraint_note or gc_constraint_note, and if the ends cannot be anchored, full_length_note says the product is internal, not full length. To amplify a sub-region ("positions 100-400"), pass region_start and region_end (1-based, inclusive) rather than pre-slicing: primer positions are then 1-based within that region, and a region outside the supplied sequence, or too short to hold two primers, is refused rather than amplified in full. If an earlier tool returned a construct_handle (parse_plasmid_text, open_uploaded_plasmid_file, auto_annotate, fetch_ncbi, assemble_fragments_by_overlap, edit_sequence), pass it as construct_handle instead of the bases: the sequence and its name are read server-side. If no pair can be found, the result is success=false with the attempts made. Inputs: A/T/G/C/N, up to 50,000 bp; primers anneal to the template and carry no assembly tails. For research use only; confirm primers experimentally before ordering.
design_primers
Replace, insert, or delete a region in one plasmid sequence and return the edited plasmid with an interactive map. Fits requests to swap a promoter, replace a gene, insert a fragment at a named site, or delete a region. 'replace' and 'delete' act on a range; 'insert' acts at a point and needs `new_sequence` ('replace' needs it too). Give exactly one target: `feature` (resolved against the plasmid's annotation), `start`+`end` (1-based), or `enzyme_site` (an enzyme marking an insertion point). If a feature name matches zero or several features, or the named site cuts more than once, the tool refuses and lists what it found instead of picking one. Passing the plasmid's `features` carries annotations across the splice: features outside the edit kept, fully deleted ones dropped, features the edit cuts through marked disrupted, and a CDS whose reading frame shifts flagged. Without `features` the product is re-annotated from the catalog and custom annotations are lost. `construct_handle` from an earlier result edits a stored construct without re-pasting it. Input: A/T/G/C/N, 50 to 50,000 bp. Joining separate fragments into a plasmid is a different tool. For research use only.
edit_sequence
Export a plasmid as GenBank or FASTA text. Pass `sequence` (A/T/G/C/N), `features` as a list of {name, type, start, end, strand} dicts with 1-indexed positions, and `format` ('genbank' or 'fasta'); `name` and `topology` fill in the header. Fits a request to save, download, or hand off a plasmid produced by an earlier tool as a file. The format decides what survives: FASTA has no feature table, so exporting to FASTA drops every feature. GenBank keeps them. Every result reports `features_supplied` and `features_written`, plus `warnings` naming each feature that was dropped for being malformed or for spanning coordinates outside the sequence, so a partial export_plasmid_file is visible rather than silent. The response carries the file content as a string. Limits: sequence of A/T/G/C/N, 50,000 bp or less. For research use only.
export_plasmid_file
Retrieves one NCBI nucleotide record by exact accession (NC_000913.3, U12345, NM_001256799) and returns the sequence, annotated features in 1-indexed coordinates, a construct_handle, and a link that opens the record in Plasmole. Reach for it when the user has an accession and wants that record's sequence, features or map. Input is an accession only: a gene, plasmid or vector name (TP53, GFP, lacZ, pUC19) does not resolve here, and search_ncbi turns a name into candidate accessions this tool can load. An accession inferred from a name rather than looked up either fails or returns an unrelated record, and the tool cannot detect that it was inferred. Optional include_enzymes=true draws restriction cut sites and a predicted digest on the same map; it is off by default. The construct_handle can be passed to find_restriction_sites, predict_digest, edit_sequence or version tools instead of fetching again. Limits: records over 500,000 bp are refused with their real size rather than truncated, and a record carrying no sequence is refused rather than returned empty. Successful fetches are cached seven days. For research use only; confirm critical accessions against the NCBI record.
fetch_ncbi
Finds restriction enzyme cut sites using BioPython.Restriction with REBASE data. Each site returns its recognition sequence, 1-based position and cut_after_base, and is drawn on a map; a construct_handle overlays them on that construct's features. Use it when someone asks which enzymes cut a sequence, whether a site is unique, or where an enzyme cuts. Topology: linear defaults to true, and a circular plasmid searched as linear misses sites spanning the origin, so pass linear=false for a plasmid. Dense 4-cutters are NOT in the default set of about 30 common cloning enzymes; they and any other enzyme are searched only when named in enzyme_names. Unknown names are skipped and listed in unknown_enzymes. Completeness: site_count is how many sites were found; sites may list fewer, enzymes in sites_omitted carry a cut count and no positions, and map_truncated means the map drew enzymes_shown_count of distinct_enzyme_count. Named enzymes that did not cut are listed in enzymes_with_no_sites, and none_found_note says whether a linear search or an N could hide a site. Input is A/T/G/C/N only, up to 50,000 bp. For research use only: star activity and methylation sensitivity are not modeled.
find_restriction_sites
Lists the version history of one Plasmole construct, identified by a `construct_handle` minted by an earlier auto_annotate, edit_sequence, or assemble_fragments_by_overlap call. Versions are immutable snapshots. Each entry carries version_number, name, length, topology, sha256, seguid, and claimed (whether that version has been saved into the caller's library). Raw sequence bases are not returned; export_plasmid_file or restore_construct_version return bases. Use it when the user asks which versions of a construct exist, which one is current, how long each is, or whether two versions hold the same sequence (equal sha256 or seguid means identical bases). Refusals: an unknown handle, a handle belonging to a different user, and an expired handle each return an error rather than a partial or empty list. Construct handles are temporary and expire seven days after the construct was first created, after which its versions are no longer readable.
list_construct_versions
Opens a plasmid file the user attached to the conversation. Pass the attachment in the file parameter: the file is fetched and parsed server side in full, and the tool returns an interactive map plus a link to open it in Plasmole. Reach for it when the plasmid arrives as an upload rather than as text in the message. Accepts GenBank (.gb, .gbk), FASTA (.fa, .fasta, .fna), .ape, and the binary .dna format, which is parsed only here. Taking the file by reference keeps its content out of the message, so a long file is not shortened by message limits. Limit 5 MB; larger files, other formats, and downloads that fail or are blocked are refused with the reason rather than parsed in part. include_enzymes=true adds restriction cut marks and a predicted digest gel to the same map for a default panel of 29 cloning enzymes; if sites_truncated is true then sites holds sites_shown of site_count positions and every enzyme in sites_omitted is reported by cut count only. Returns a construct_handle later tools take in place of re-uploading. Research use only.
open_uploaded_plasmid_file
Rewrites a coding DNA sequence for a chosen expression host while preserving the encoded protein, and returns the optimized sequence, an optimization score, the number of codons changed, any warnings, and protein_preserved (computed by translating both sequences and comparing them). Use it when the user wants a gene recoded for expression in a different host, or wants rare codons reduced in a coding sequence. Accepts `sequence` or a `construct_handle` from an earlier call, `organism` (one of E_coli, yeast, mammalian), and `strategy` (one of maximize_expression, balance_codons, minimize_repeats). The input must be a complete reading frame: A, T, G, C only (whitespace ignored), DNA rather than RNA, and a whole number of codons. A length that is not a multiple of 3, any other character including U or N, a sequence over 30,000 bp, or an organism or strategy outside the lists above is refused rather than trimmed or guessed. This call reads only: it saves no construct and stores no optimization history. For research use only.
optimize_codons
Parses plasmid text in GenBank, FASTA or .ape format into a structured plasmid, keeping the record's own feature table, and returns an interactive map plus a link to open it in Plasmole. Reach for it when the plasmid arrives as text in the conversation: pass that text in content. The file parameter takes an uploaded file on hosts that pass file references; those bytes are fetched and parsed server side, so a long file is not shortened by message limits. Supply one of the two, not both. The binary .dna format is parsed only by open_uploaded_plasmid_file. Limit 5 MB of text; larger input and other formats are refused rather than guessed at. Text with no header that is otherwise valid DNA is read as FASTA. include_enzymes=true draws restriction cut marks and a predicted digest gel on the same map for a default panel of 29 cloning enzymes; if sites_truncated is true then sites holds sites_shown of site_count positions and every enzyme in sites_omitted is reported by cut count only. Returns a construct_handle later tools take in place of the file. Research use only.
parse_plasmid_text
Predicts a restriction digest: fragment sizes computed from the cut positions, plus a simulated gel with visible and runoff bands, co-migration and a diagnostic verdict. Takes a sequence or construct_handle. Use it when someone asks what bands a digest should give, whether an enzyme set linearizes a plasmid, or whether a digest distinguishes two constructs. Topology defaults to circular; a linear template predicted as circular joins its ends and returns one fragment too few, so pass topology='linear'. Optional experimental_goal (linearization, insert_verification, construct_discrimination, general_inspection) scopes the verdict; without one it is clarity-based. enzymes must be a non-empty list, and the returned enzymes field lists what was searched, not only what cut. Unknown names come back in unknown_enzymes and are excluded; a call where none are recognised is not an uncut digest. Requested enzymes with no site are listed in enzymes_with_no_sites with a sentence in warnings; null there means the check did not run. Input is A/T/G/C/N only, up to 50,000 bp. For research use only: complete digestion is assumed; partial digests, methylation and star activity are not modeled.
predict_digest
Restores an earlier snapshot of a Plasmole construct, given `construct_handle` and `version_number`. The restore is non-destructive: the chosen snapshot is copied forward as a new highest version and every existing version stays in place and readable, so restoring version 2 of a five-version construct produces version 6 carrying version 2's bases. Use it when the user wants to undo an edit, return a construct to how it looked earlier, or continue work from an earlier state. Returns construct_version (the new tip), restored_from_version, name, sequence, features, topology, length, sha256, and seguid. Ownership and lineage stay with the original construct and are not reassigned to the caller. Refusals: an unknown handle, a version_number that does not exist, a handle belonging to a different user, or an expired handle returns an error and nothing is written. Construct handles expire seven days after the construct was first created.
restore_construct_version
Resolves a gene, plasmid, vector or keyword name to candidate NCBI nucleotide accessions. Reach for it when the user names what they want ('get me TP53', 'the GFP sequence', 'lacZ from E. coli', 'pUC19', 'pET28a') rather than giving an accession, which is the input fetch_ncbi requires. It searches the gene-name field, the protein-name field (the product annotation on a record's coding sequences, so a protein name like 'GFP' reaches records that ENCODE it rather than only records named after it) and the title/keyword fields TOGETHER and interleaves all three, so no one lane can hide another lane's match and vector names, which are not gene symbols, still resolve; match_field on each candidate says which lane found it. Genome-assembly fragments (whole-genome shotgun) are excluded: they are not the molecule anyone names, and they used to crowd out the real record. Returns ranked candidates, each with accession, symbol, name, organism, length_bp, kind and description, plus the total hit count; a candidate's accession is what fetch_ncbi loads. kind is the SHAPE of the record -- cds (a coding sequence), gene (a source-organism gene or transcript), vector (an engineered construct carrying it), genome (a larger molecule containing it), or unknown when the record does not say. kind is NOT a claim that the record is the molecule requested, and unknown means unclassified, not unimportant. symbol and organism are null when the record supplies neither; they are never filled in from the caller's own query. When the surviving candidates span more than one kind, ambiguous is true and disambiguation_question carries a question to put to the user before fetching -- 'GFP' can mean a bare coding sequence, a vector carrying it, or the native gene, and those are different molecules. An accession inferred from a name rather than looked up here can look plausible and still point at a different record. Optional organism ('Homo sapiens', 'Escherichia coli') narrows the species. Limits: query up to 200 characters, limit clamped to 1-25 (default 5). Ranking prefers records under the 500,000 bp fetch_ncbi can load; larger ones surface only when nothing smaller matches. Candidates are then ordered by kind: cds, gene and vector rank above unknown, which ranks above genome, so a 441,000 bp plasmid that merely contains what you asked for cannot outrank a 711 bp coding sequence. That ordering is by record shape, not a relevance score, and it never reorders records of the same kind. When nothing fetchable matches, the result is an empty candidate list with a note, not a guessed accession. For research use only; confirm a candidate matches intent before fetching.
search_ncbi
Verifies a clone by aligning a Sanger sequencing read against a reference sequence. Reach for it when the user has sequencing back from a picked colony or a miniprep and asks whether the clone is correct. Accepts either read_sequence (pasted basecalls) or ab1_base64 (a base64 AB1 trace), one or the other and not both; an AB1 is parsed and its low-quality ends trimmed first. The reference comes from reference_sequence or a construct_handle. Both strands are tried. Returns percent identity, a verdict, and each difference at its 1-based reference position, capped at 50 with mutations_truncated set. Two traps. Quality: when the whole trace is low quality the trim bounds span the entire read and trim.all_low_quality is true, so the verdict rests on unreliable bases. Coverage: a read is a fragment, so mode defaults to semi_global and the read is not charged for reference it does not span. identity_pct counts gaps; identity_in_covered_region_pct is over the bases actually compared and is the one that answers whether the clone is right; it is omitted when nothing could be compared. coverage_pct and covered_reference_span say how much of the reference the read SPANNED, so sequence the read aligned across but the clone lacks is inside that span and reported as a deletion, not as missing coverage. terminal_gaps lists ends that could not be compared -- reference the read never reached, or read past the reference such as vector flanking an insert -- reported, not counted as differences. unreadable_positions counts N basecalls. An exact match is only claimed at full coverage. Read and reference must be A/T/G/C/N and 20,000 bp or less; anything else is refused. For research use only.
verify_clone_from_sanger_read
Draws primers onto a Plasmole sequence map showing where each one binds. Reach for it when a user asks to see, check or map primer binding sites on a template or plasmid, or to view a designed pair on the sequence. Two input forms: forward_primer and/or reverse_primer, each with a 1-based "start-end" position; or primers=[{name, sequence}] for oligos the user already has, which are located by their 3' anneal core, so 5' tails such as restriction sites or assembly overhangs do not block placement. A supplied position is verified against the template: if the bases there do not spell the oligo it is re-located by 3'-anchored search, or kept as given when no binding site exists (normal for mutagenesis or degenerate primers), and every such case is listed in position_overrides. A primer that will not prime is returned in unlocated rather than dropped, and a primer with more than one binding site is drawn and flagged as possible mispriming. When an earlier tool returned a construct_handle, pass it instead of sequence: the bases and the topology both come from the handle, which is what lets a primer whose footprint spans the origin be drawn correctly. Pass topology="circular" for a plasmid; the default, linear, misses primers whose footprint spans the origin. Forward primers draw right-pointing, reverse left-pointing. Inputs: A/T/G/C/N, up to 50,000 bp. For research use only.
visualize_primers
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.