<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Awaisranahmad</title>
    <description>The latest articles on DEV Community by Awaisranahmad (@awaisranahmad).</description>
    <link>https://dev.to/awaisranahmad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3856788%2F01944222-4dcb-40ea-952e-b782d7159104.png</url>
      <title>DEV Community: Awaisranahmad</title>
      <link>https://dev.to/awaisranahmad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/awaisranahmad"/>
    <language>en</language>
    <item>
      <title>Reviving TruthGuard AI: From Zero History to Full CRUD with GitHub Copilot</title>
      <dc:creator>Awaisranahmad</dc:creator>
      <pubDate>Fri, 22 May 2026 05:20:29 +0000</pubDate>
      <link>https://dev.to/awaisranahmad/reviving-truthguard-ai-from-zero-history-to-full-crud-with-github-copilot-42kl</link>
      <guid>https://dev.to/awaisranahmad/reviving-truthguard-ai-from-zero-history-to-full-crud-with-github-copilot-42kl</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TruthGuard AI&lt;/strong&gt; is an enterprise-grade fake news detection and fact-checking tool that combines real-time web search with advanced LLM analysis. Users can paste any claim, news excerpt, or social media post, and the tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searches the live web using Tavily's search API&lt;/li&gt;
&lt;li&gt;Analyzes evidence using Groq's Llama 3.3-70B model&lt;/li&gt;
&lt;li&gt;Provides a structured verdict with veracity score (0-100%)&lt;/li&gt;
&lt;li&gt;Identifies logical fallacies and emotional manipulation&lt;/li&gt;
&lt;li&gt;Offers a follow-up chat to interrogate the evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application is built with &lt;strong&gt;Streamlit&lt;/strong&gt; for the frontend, &lt;strong&gt;LangChain&lt;/strong&gt; for LLM orchestration, &lt;strong&gt;Tavily&lt;/strong&gt; for live web search, and &lt;strong&gt;Groq's Llama 3.3-70B&lt;/strong&gt; for fast, high-quality inference.&lt;/p&gt;

&lt;p&gt;This project started as a hackathon prototype where I had the core verification logic working, but it lacked persistence, testing, proper environment configuration, and a polished user experience. It was functional but incomplete — perfect for this challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool" rel="noopener noreferrer"&gt;https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before (Abandoned State):&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa46ts6q7in3xssctzxkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa46ts6q7in3xssctzxkp.png" alt="Before updation of code" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After (Revived &amp;amp; Polished):&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxf0176mswms6oa4sj2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxf0176mswms6oa4sj2z.png" alt="After review and updation" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fav3p0t26tjds95p5mdod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fav3p0t26tjds95p5mdod.png" alt="Manage history" width="799" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot in Action:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftcfev42sjh556bziotg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftcfev42sjh556bziotg.png" alt="Copilote down their work" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📸 Before vs After — The Comeback Story
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Where It Was (The "Before")
&lt;/h3&gt;

&lt;p&gt;The original version of TruthGuard AI was a working prototype that proved the concept but had significant gaps:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;❌ No history persistence&lt;/td&gt;
&lt;td&gt;Results disappeared on page refresh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ No .env support&lt;/td&gt;
&lt;td&gt;API keys only worked via Streamlit secrets; local development required manual editing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ No unit tests&lt;/td&gt;
&lt;td&gt;Zero test coverage — fragile to API changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ No delete or load functionality&lt;/td&gt;
&lt;td&gt;History items stuck forever&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ No "New Chat" option&lt;/td&gt;
&lt;td&gt;No way to reset session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ Deprecated &lt;code&gt;st.experimental_rerun()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Caused AttributeError in newer Streamlit versions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The code worked for me, but nobody else could use it reliably.&lt;/strong&gt; There was no proper database setup, no environment configuration, and no way to revisit past verifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Changed (The "After")
&lt;/h3&gt;

&lt;p&gt;I transformed TruthGuard AI from a prototype into a production-ready application with &lt;strong&gt;GitHub Copilot&lt;/strong&gt; writing most of the new infrastructure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;History&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅ SQLite database with timestamps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load old claims&lt;/td&gt;
&lt;td&gt;❌ Not possible&lt;/td&gt;
&lt;td&gt;✅ One-click load with full report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete history&lt;/td&gt;
&lt;td&gt;❌ Not possible&lt;/td&gt;
&lt;td&gt;✅ Delete button per item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New chat&lt;/td&gt;
&lt;td&gt;❌ No reset&lt;/td&gt;
&lt;td&gt;✅ Reset all session state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment&lt;/td&gt;
&lt;td&gt;❌ Hardcoded/st.secrets only&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;.env&lt;/code&gt; + st.secrets fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit tests&lt;/td&gt;
&lt;td&gt;❌ 0 tests&lt;/td&gt;
&lt;td&gt;✅ 3 passing tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API calls on load&lt;/td&gt;
&lt;td&gt;❌ N/A&lt;/td&gt;
&lt;td&gt;✅ Load uses saved report (no re-verification)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecated code&lt;/td&gt;
&lt;td&gt;❌ &lt;code&gt;experimental_rerun&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;rerun&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  New Files Added
&lt;/h4&gt;

&lt;p&gt;During the revival, I added 6 new files to the repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;history_manager.py&lt;/code&gt; — SQLite database operations (init_db, save_history, get_all_history, delete_history)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/test_history_manager.py&lt;/code&gt; — Unit tests with 3 passing tests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env.example&lt;/code&gt; — Environment variable template&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.gitignore&lt;/code&gt; — Python-appropriate ignores (.env, &lt;strong&gt;pycache&lt;/strong&gt;, *.db)&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;requirements.txt&lt;/code&gt; — Added pytest and python-dotenv&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;app.py&lt;/code&gt; — Integrated history, .env support, and new UI buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verdict Summary Extraction Logic
&lt;/h3&gt;

&lt;p&gt;One of the more interesting additions was the extraction of structured data from the LLM's markdown output. The &lt;code&gt;extract_verdict_summary()&lt;/code&gt; and &lt;code&gt;extract_veracity_score()&lt;/code&gt; functions now cleanly parse the Groq Llama 3.3 response into database-friendly fields — something Copilot helped generate in a single prompt.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;This was my first time using GitHub Copilot for a serious revival project, and it completely changed how I approach incomplete work. Here's exactly how Copilot helped me:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Copilot Built the Entire &lt;code&gt;history_manager.py&lt;/code&gt; Module
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;My prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Create a Python module with SQLite database functions to store fact-check history. Columns: id, timestamp, claim, verdict_summary, veracity_score, full_report_text. Include functions: init_db(), save_history(), get_all_history(), delete_history()."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Copilot generated:&lt;/strong&gt; All 6 database functions with proper error handling, SQL injection prevention (using parameterized queries), and connection management. I didn't write a single line of SQL manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Copilot Added .env Support with Fallbacks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;My prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Add code to load .env file using python-dotenv, then fallback to st.secrets and os.getenv for API keys."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Copilot generated:&lt;/strong&gt; The complete environment loading chain, handling local development and Streamlit Cloud deployment seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Copilot Wrote All 3 Unit Tests
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;My prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Write pytest unit tests for history_manager.py – test init_db, save_history, get_all_history, delete_history. Use temporary file for database."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Copilot generated:&lt;/strong&gt; Complete test file with fixtures and assertions. All 3 tests passed on first run.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Copilot Added the "New Chat" and "Delete" Buttons
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;My prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"In the sidebar history section, next to each history item, add a small delete button. Also add a 'New Chat' button that clears the session and reruns."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Copilot generated:&lt;/strong&gt; The full Streamlit UI code with proper column layouts and session state management.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Copilot Fixed the Deprecated &lt;code&gt;experimental_rerun&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;I ran into the &lt;code&gt;AttributeError: module 'streamlit' has no attribute 'experimental_rerun'&lt;/code&gt; error. Instead of searching Stack Overflow, I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What replaces experimental_rerun in newer Streamlit versions?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Copilot answered:&lt;/strong&gt; &lt;code&gt;st.rerun()&lt;/code&gt; and replaced all occurrences automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Copilot Patterns I Learned
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;How I Used It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Comment-driven prompts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Writing detailed comments before implementation guides Copilot to generate exactly what's needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function signature first&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Typing &lt;code&gt;def save_history(&lt;/code&gt; and letting Copilot infer the schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Iterative refinement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accepting suggestions, then asking "Add error handling" or "Use parameterized queries" to improve them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Test generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Asking Copilot to write tests &lt;em&gt;before&lt;/em&gt; implementing the function (test-driven development with AI)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The biggest surprise:&lt;/strong&gt; Copilot didn't just autocomplete — it understood the project structure (Streamlit, SQLite, pytest) and generated context-aware code that integrated seamlessly with my existing logic.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🛠️ Technical Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Streamlit (Python)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Groq API (Llama 3.3-70B-Versatile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Tavily Search API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestration&lt;/td&gt;
&lt;td&gt;LangChain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment&lt;/td&gt;
&lt;td&gt;python-dotenv&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;pytest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev Assistant&lt;/td&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔍 Judging Criteria Reflection
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;How TruthGuard AI Addresses It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use of underlying technology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Combines Groq's LPU (sub-second inference), Tavily's real-time search, and LangChain for structured prompting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Usability &amp;amp; UX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Glassmorphism UI, progress indicators, chat-based follow-ups, one-click report downloads, persistent history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Originality &amp;amp; Creativity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-powered fact-checking with structured verdicts (Veracity Score + Final Verdict + Bias detection) is not a basic chatbot wrapper — it's a purpose-built misinformation tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Completion Arc&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clear "before" vs "after" transformation: from prototype to database-backed, tested, environment-aware application&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📦 How to Run Locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
# Clone the repository
git clone https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool.git
cd AI-Based-Content-Verification-Tool

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Create .env file with your API keys
cp .env.example .env
# Edit .env with your GROQ_API_KEY and TAVILY_API_KEY

# Run the application
streamlit run app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
