Daily Reading for 2026-08-22 - Learning in Public

Daily Reading for 2026-08-22

Daily Reading for 2026-08-22

LLM CLI Tool Releases

  • llm 0.32.1 ONE SENTENCE SUMMARY:

    A dot-release pins OpenAI below version 3 to restore fresh LLM installs, with version 0.33 migrating to httpx2.

    MAIN POINTS:

    1. Fresh LLM installs stopped working recently.
    2. OpenAI Python library dropped its usage of httpx.
    3. LLM depended on httpx transitively through openai.
    4. LLM never installed httpx as a direct dependency.
    5. Version 0.32.1 fixes this by pinning to openai<3.
    6. The pinning restores functionality for the moment.
    7. A soon-to-drop 0.33 release is planned.
    8. Version 0.33 will switch from httpx to httpx2.
    9. The switch addresses the removed OpenAI httpx dependency.
    10. This is a temporary fix until the migration arrives.

    TAKEAWAYS:

    1. Relying on transitive dependencies risks silent breakage when upstream changes.
    2. Explicitly declaring direct dependencies prevents unexpected runtime failures.
    3. Version pinning offers a quick mitigation for dependency drift.
    4. Upstream library changes can cascade into downstream tool failures.
    5. Planning a follow-up release keeps short-term fixes sustainable.
  • llm-openrouter 0.7 ONE SENTENCE SUMMARY:

    llm-openrouter 0.7 updates its LLM plugin to be compatible with LLM 0.32, adding reasoning traces display and three new server-side tools.

    MAIN POINTS:

    1. Plugin now compatible with LLM version 0.32.
    2. Reasoning traces display for OpenRouter LLMs.
    3. Models use OpenRouter’s Responses API implementation.
    4. Added three new server-side tools.
    5. New tools include Shell, WebFetch, and WebSearch.
    6. Tools enable with options such as -T WebSearch.
    7. Compatibility update is the primary focus.
    8. Reasoning display is the key new feature.
    9. OpenRouter API implementation was modernized.
    10. Server-side tools expand plugin functionality.

    TAKEAWAYS:

    1. Update to 0.7 for LLM 0.32 compatibility.
    2. Gain visibility into model reasoning traces through OpenRouter.
    3. Leverage the modernized Responses API implementation.
    4. Use -T WebSearch, Shell, or WebFetch flags for server tools.
    5. Server-side tools add powerful new capabilities to prompts.

    Source: Simon Willison’s Weblog — llm-openrouter 0.7

wardley-beta
%% 1. Users: Developers/engineers using LLM CLI tools for AI-powered command-line workflows
%% 2. Needs: Reliable LLM CLI access, plugin compatibility, latest features (reasoning, tools), stable dependencies
%% 3. Capabilities: Core CLI execution, plugin system, API integration, dependency management, server-side tool execution
%% 4. Components: llm core (0.32.1), llm-openrouter plugin (0.7), OpenAI Python lib, httpx/httpx2, OpenRouter Responses API, server-side tools
%% 5. Maturity: llm core=Product, llm-openrouter=Custom/Product, OpenAI lib=Product, httpx2=Product, Responses API=Custom, server tools=Genesis
%% 6. Management: Simon Willison (llm core), plugin author (llm-openrouter), OpenAI (Python lib), OpenRouter (API), community (httpx)

anchor cliUser [0.95, 0.92]
component llmCore [0.55, 0.75]
component openrouterPlugin [0.38, 0.60]
component openaiLib [0.62, 0.45]
component httpxMigration [0.70, 0.35]
component responsesAPI [0.28, 0.50]
component serverTools [0.18, 0.40]

llmCore -> cliUser
openrouterPlugin -> llmCore
openaiLib -> llmCore
httpxMigration -> openaiLib
responsesAPI -> openrouterPlugin
serverTools -> responsesAPI

evolve llmCore 0.60
evolve openrouterPlugin 0.42
evolve openaiLib 0.65
evolve httpxMigration 0.75
evolve responsesAPI 0.32
evolve serverTools 0.22

UAT-10147 Agentic AI Exploitation Campaign

  • 🚩 UAT-10147 Uses Agentic AI to Scale Exploitation and Post-Compromise Operations ONE SENTENCE SUMMARY:

    Cisco Talos exposed UAT-10147, a Chinese-speaking cybercrime group using agentic AI to scale exploitation and post-compromise operations against thousands of vulnerable web servers across multiple countries and sectors.

    MAIN POINTS:

    1. UAT-10147 targets Windows and Linux web servers globally across government, education, media, technology, and gaming sectors.
    2. Actor leverages publicly disclosed vulnerabilities plus Metasploit, ysoserial, PentestGPT, DeepAudit for automated intrusions.
    3. Financially motivated group engages in SEO fraud and data theft.
    4. Target list includes approximately 170,000 URLs split into 17 files of 10,000 URLs each.
    5. Talos identified activity through OPSEC failure — open directory on a download server.
    6. Windows attacks use batch scripts, EfsPotato, and QuasarRAT to establish persistence and evade antivirus.
    7. Linux chain deploys web shell, multiple LPE exploits, and implants like NoodleRAT, SPECTRE, Meterpreter.
    8. Actor exploits known one-day flaws including Zimbra, AjaxPro, Nacos, and Telerik vulnerabilities.
    9. AI generates operational playbooks, exploit automation, troubleshooting logic, and validation workflows.
    10. ClamAV signatures and SNORT rules detect and block this threat along with published IOCs.

    TAKEAWAYS:

    1. Agentic AI marks a shift from AI-assisted scripting to semi-autonomous offensive orchestration.
    2. MachineKey confidentiality is the most critical defensive control against ViewState deserialization attacks.
    3. Attackers use error-stream (5xx) indicators as silent success conditions, creating defensive blind spots.
    4. Defense evasion includes Defender exclusions, PowerShell encoded commands, and OOB callbacks for validation.
    5. Organizations should prioritize patching known CVEs and monitoring AI-generated exploit patterns.
wardley-beta
%% 1. Users: Security teams (SOC, threat hunters, IR), targeted organizations (gov, edu, media, tech, gaming), threat intel researchers
%% 2. Needs: Detect/block UAT-10147 campaigns, understand agentic AI attack patterns, patch vulnerable systems, monitor AI-generated exploits, protect MachineKey, detect 5xx success indicators
%% 3. Capabilities: Threat intel collection, vuln management, detection engineering, behavioral analysis for AI attacks, post-compromise detection, OPSEC failure exploitation
%% 4. Components: Agentic AI orchestration (PentestGPT, DeepAudit), automated exploit frameworks (Metasploit, ysoserial), known CVE exploitation (Zimbra, AjaxPro, Nacos, Telerik), post-exploitation tooling (QuasarRAT, NoodleRAT, SPECTRE, Meterpreter), detection signatures (ClamAV, SNORT), MachineKey protection, error-stream monitoring
%% 5. Maturity: AgenticAIOrchestration=Genesis(0.1), PentestGPT=Custom(0.35), AutomatedExploitFramework=Commodity(0.85), KnownCVEExploitation=Commodity(0.9), PostExploitationTooling=Product(0.55), DetectionSignatures=Commodity(0.8), MachineKeyProtection=Product(0.6), ErrorStreamMonitoring=Custom(0.3)
%% 6. Management: Security vendors (Talos, ClamAV, SNORT) manage signatures; internal sec teams manage patching, monitoring, MachineKey; threat intel teams manage IOCs; researchers track agentic AI evolution

anchor securityTeam [0.95, 0.9]
anchor targetedOrg [0.95, 0.75]

component agenticAIOrchestration [0.10, 0.70]
component automatedExploitFramework [0.85, 0.40]
component knownCVEExploitation [0.90, 0.35]
component postExploitationTooling [0.55, 0.50]
component detectionSignatures [0.80, 0.60]
component machineKeyProtection [0.60, 0.45]
component errorStreamMonitoring [0.30, 0.55]

agenticAIOrchestration -> securityTeam
automatedExploitFramework -> agenticAIOrchestration
knownCVEExploitation -> automatedExploitFramework
postExploitationTooling -> knownCVEExploitation
detectionSignatures -> securityTeam
machineKeyProtection -> targetedOrg
errorStreamMonitoring -> securityTeam
errorStreamMonitoring -> postExploitationTooling
detectionSignatures -> postExploitationTooling
detectionSignatures -> knownCVEExploitation
machineKeyProtection -> knownCVEExploitation

evolve agenticAIOrchestration 0.15
evolve errorStreamMonitoring 0.45

Collaboration Platform Identity Phishing

  • 🚩 Threat Actors Abuse Teams, Slack, and Other Trusted Collaboration Platforms for Identity Phishing and Post-Compromise Access ONE SENTENCE SUMMARY:

    Threat actors increasingly abuse trusted collaboration platforms like Teams and Slack for identity phishing, impersonation, credential theft, and post-compromise access.

    MAIN POINTS:

    1. Collaboration tool malicious activity alerts quadrupled over the last 12 months.
    2. Unit 42 found 99% of alerts related to chat phishing operations.
    3. Compromised accounts inherit identity context, permissions, relationships and conversations.
    4. APT29 misused external federation to impersonate IT support in Teams.
    5. Okta documented phishing via attacker-controlled Slack workspaces and MFA token capture.
    6. Fireblocks impersonated recruiters in Contagious Interview-style attack with fake interviews.
    7. Attacker used staged Slack workspace to compromise the Axios npm maintainer.
    8. OpenSSF reported Slack impersonation campaign targeting Linux Foundation TOD workGroup.
    9. CERT Polska found attackers using Slack webhooks to exfiltrate credentials post-compromise.
    10. Defenders should treat collaboration platforms as part of the identity attack surface.

    TAKEAWAYS:

    1. Treat collaboration platforms with same scrutiny as email and identity infrastructure.
    2. Review external federation, guest access and third-party integrations to reduce exposure.
    3. Monitor behavior after authentication: unusual messaging, file sharing, unfamiliar tenants.
    4. Define secondary-channel verification procedures for security-sensitive requests.
    5. Include collaboration telemetry, webhooks and appliance activity in SIEM monitoring.
wardley-beta
%% 1. Users: Security teams, IT admins, identity teams, SOC analysts
%% 2. Needs: Detect/prevent identity phishing via collaboration platforms, monitor post-compromise activity, secure federation/guest access, verify sensitive requests, integrate collaboration telemetry into SIEM
%% 3. Capabilities: Collaboration monitoring, chat phishing detection, federation governance, secondary verification, SIEM integration, behavioral analytics, webhook monitoring
%% 4. Components: Teams/Slack platforms, federation/guest controls, SIEM integration, verification procedures, phishing detection rules, webhook monitoring, identity context tracking
%% 5. Maturity: Teams/Slack (Commodity 0.85), federation controls (Product 0.55), SIEM integration (Product 0.50), identity context (Product 0.45), phishing detection (Custom 0.35), verification procedures (Custom 0.30), webhook monitoring (Genesis 0.20)
%% 6. Management: Security teams (detection/SIEM), IT admins (platform config), identity teams (verification), SOC (monitoring/response)

anchor securityTeam [0.95, 0.90]
anchor itAdmin [0.90, 0.85]

component collabPlatforms [0.85, 0.75]
component federationControls [0.55, 0.60]
component siemIntegration [0.50, 0.50]
component identityContext [0.45, 0.45]
component phishingDetection [0.35, 0.55]
component verificationProcs [0.30, 0.40]
component webhookMonitoring [0.20, 0.30]

collabPlatforms -> securityTeam
collabPlatforms -> itAdmin
federationControls -> collabPlatforms
siemIntegration -> collabPlatforms
identityContext -> collabPlatforms
phishingDetection -> siemIntegration
verificationProcs -> securityTeam
webhookMonitoring -> siemIntegration

evolve collabPlatforms 0.90
evolve federationControls 0.65
evolve siemIntegration 0.60
evolve identityContext 0.55
evolve phishingDetection 0.45
evolve verificationProcs 0.40
evolve webhookMonitoring 0.30

Microsoft Entra ID RCE Vulnerability

  • Actively Exploited Microsoft Entra ID RCE Flaw Receives Maximum CVSS 10.0 Severity ONE SENTENCE SUMMARY: Microsoft fully mitigated the already-patched Entra ID deserialization RCE bug (CVE-2026-69836), maximum CVSS 10.0, requiring no customer action and never exploited.

    MAIN POINTS:

    1. CVE-2026-69836 is an Entra ID remote code execution vulnerability.
    2. Deserialization of untrusted data enables unauthorized network code execution.
    3. Severity is maximum Critical with CVSS 3.1 score of 10.0.
    4. Attack vector is network, requiring no privileges or user interaction.
    5. Scope is changed, with high confidentiality, integrity, and availability impact.
    6. Microsoft already fully mitigated it; no customer action required.
    7. Publication purpose is transparency for cloud service CVEs.
    8. Vulnerability was never exploited in the wild per revision.
    9. Exploit code maturity is unproven with exploitation assessed less likely.
    10. An official Microsoft fix exists and confidence in details is confirmed.

    TAKEAWAYS:

    1. Microsoft resolved this cloud bug proactively, so defenders need no remediation.
    2. Maximum CVSS scores can accompany zero-days already fixed before disclosure.
    3. Cloud CVEs add transparency even when no patching action is required.
    4. Deserialization of untrusted data remains a critical remote-code-execution vector.
    5. Verifying actual exploitation status matters before assigning threat urgency.
wardley-beta
%% 1. Users: Security teams, IT admins, CISOs, cloud security researchers monitoring Entra ID vulnerabilities
%% 2. Needs: Determine if action required for CVE-2026-69836, assess exploitation risk, maintain cloud vuln visibility, trust vendor transparency, prioritize remediation
%% 3. Capabilities: Vulnerability intelligence/monitoring, CVE assessment/triage, vendor advisory tracking, exploitation status verification, risk prioritization
%% 4. Components: MSRC Advisory, CVE-2026-69836, Entra ID Service, CVSS 3.1 Framework, Deserialization RCE Technique, Microsoft Mitigation, Exploitation Assessment
%% 5. Maturity: Entra ID (Commodity 0.85), CVSS Framework (Commodity 0.90), MSRC Advisory (Product 0.65), Microsoft Mitigation (Product 0.60), CVE-2026-69836 (Product 0.55), Deserialization RCE (Product 0.50), Exploitation Assessment (Custom 0.30)
%% 6. Management: Microsoft manages Entra ID & mitigation (cloud provider); MSRC manages advisory; Security teams consume advisory; FIRST manages CVSS framework
anchor securityTeam [0.95, 0.93]
component msrcAdvisory [0.65, 0.75]
component cve202669836 [0.55, 0.65]
component entraIdService [0.85, 0.45]
component cvssFramework [0.90, 0.55]
component deserializationRCE [0.50, 0.35]
component microsoftMitigation [0.60, 0.40]
component exploitationAssessment [0.30, 0.30]
msrcAdvisory -> securityTeam
cve202669836 -> msrcAdvisory
cvssFramework -> msrcAdvisory
entraIdService -> cve202669836
deserializationRCE -> cve202669836
microsoftMitigation -> cve202669836
exploitationAssessment -> cve202669836
entraIdService -> microsoftMitigation
evolve exploitationAssessment 0.45

Open vs Closed AI Models

  • Are Open Models Catching Up? ONE SENTENCE SUMMARY: The provided input contains only the title and metadata of a SemiAnalysis newsletter article, with no body content to summarize.

    MAIN POINTS:

    1. The source is the SemiAnalysis newsletter feed.
    2. The article title is “Are Open Models Catching Up?”
    3. The piece is authored by Dylan Patel.
    4. Copyright attribution is dated 2026.
    5. The content is hosted on the Substack platform.
    6. No article body or summary text was supplied.
    7. The input includes only footer and header metadata.
    8. The actual article text is absent from the input.
    9. The working directory contains only a reference link.
    10. The daily-reading entry points to the newsletter URL.

    TAKEAWAYS:

    1. Summary is limited because only metadata was provided.
    2. The title concerns whether open-weight models are closing gaps.
    3. To summarize, the full newsletter body is required.
    4. The reading-log links confirm the source location.
    5. Obtain the article text to produce meaningful takeaways.
wardley-beta
%% 1. Users: AI practitioners, researchers, enterprises, developers
%% 2. Needs: Capable models at lower cost, customization/fine-tuning, transparency/auditability, no vendor lock-in
%% 3. Capabilities: Model access, fine-tuning, evaluation, deployment, governance
%% 4. Components: Open-weight models, closed models, fine-tuning infra, eval benchmarks, hosting platforms, model routers
%% 5. Maturity: Open models (Custom->Product), Closed models (Product), Fine-tuning infra (Product), Benchmarks (Custom), Hosting (Commodity), Routers (Genesis)
%% 6. Management: Community/consortia (open), Vendors (closed), Cloud providers (hosting), Internal teams (routers)

anchor aiPractitioner [0.95, 0.92]
anchor enterpriseBuyer [0.90, 0.85]

component openModels [0.35, 0.70]
component closedModels [0.55, 0.72]
component fineTuneInfra [0.48, 0.48]
component evalBenchmarks [0.28, 0.42]
component modelHosting [0.82, 0.38]
component modelRouter [0.15, 0.30]

openModels -> aiPractitioner
closedModels -> aiPractitioner
openModels -> enterpriseBuyer
closedModels -> enterpriseBuyer
fineTuneInfra -> openModels
evalBenchmarks -> openModels
evalBenchmarks -> closedModels
modelHosting -> openModels
modelHosting -> closedModels
modelRouter -> openModels
modelRouter -> closedModels
modelRouter -> fineTuneInfra

evolve openModels 0.55
evolve closedModels 0.70
evolve fineTuneInfra 0.65
evolve evalBenchmarks 0.40
evolve modelHosting 0.90
evolve modelRouter 0.25

Git Commit Lookup by Message

  • Find Git Commits by Commit Message Text ONE SENTENCE SUMMARY:

    You can reference a Git commit by matching its message with the :/<text> syntax, avoiding tedious SHA or position lookups.

    MAIN POINTS:

    1. Git CLI lets you reference a revision using :/<text> syntax.
    2. Common commands needing revisions: git show, git revert, git commit --fixup.
    3. Two familiar ways to specify revisions are SHA-1 and relative positions.
    4. SHA comes in full or short forms, like git show dae86e.
    5. Relative positions use HEAD~3 to count back from latest.
    6. Looking up SHAs or positions requires switch between git log and commands.
    7. This back-and-forth is tedious, and commit SHAs are hard to memorize.
    8. The :/<text> syntax uses a regex matching the commit message.
    9. Example: git show :/fix typo finds the most recent matching commit.
    10. Reading daily-use tool documentation proves helpful, unexpectedly so.

    TAKEAWAYS:

    1. Use :/<text> to locate commits by message regex quickly.
    2. Combine regex power with Git’s revision referencing for flexibility.
    3. Reduce context switching between git log and target commands.
    4. Prefer message-based references when SHAs are hard to remember.
    5. Read tool documentation regularly to discover overlooked features.
wardley-beta
%% 1. Users: Developers/software engineers using Git daily
%% 2. Needs: Quickly locate commits by message without SHA memorization or context switching
%% 3. Capabilities: Revision referencing by message regex, integration with common Git commands
%% 4. Components: Git CLI, :/ syntax, regex matching, git show/revert/fixup, SHA refs, relative refs
%% 5. Maturity: Git CLI/SHA/relative/commands=Commodity, :/ syntax=Product, regex=Commodity
%% 6. Management: Git project maintains CLI/features; developers adopt individually/team knowledge sharing

anchor developer [0.95, 0.93]
component gitCLI [0.85, 0.70]
component shaRefs [0.90, 0.55]
component relativeRefs [0.85, 0.50]
component messageSyntax [0.55, 0.65]
component regexMatching [0.95, 0.40]
component gitCommands [0.80, 0.60]

gitCLI -> developer
shaRefs -> gitCLI
relativeRefs -> gitCLI
messageSyntax -> gitCLI
regexMatching -> messageSyntax
gitCommands -> gitCLI
messageSyntax -> gitCommands

evolve messageSyntax 0.75

Native UIs vs TUIs

  • Stop Making TUIs ONE SENTENCE SUMMARY:

    Coding agents have made building usable native GUIs nearly free, so developers should convert throwaway CLIs into real native user interfaces rather than settling for TUIs.

    MAIN POINTS:

    1. Thomas Ptacek advocates building native UIs even for tiny personal tools.
    2. Coding agents drastically reduced the cost of usable-enough GUIs.
    3. Simon Willison’s vibe-coded bandwidth and GPU monitoring macOS taskbar apps worked.
    4. Both monitoring apps are still used on a daily basis.
    5. Willison isn’t habitually building real UIs for other projects yet.
    6. Willison admits he’s running out of excuses not to build UIs.
    7. Turning any throwaway CLI into a native app is worthwhile.
    8. Thomas suggests going to build a native UI now.
    9. Building native UIs will likely change how you think.
    10. The message is captured as a link blog entry from August 2026.

    TAKEAWAYS:

    1. Native UIs are now cheap enough for even the smallest personal tools.
    2. When coding agents handle UI work, the cost barrier shrinks to nearly nothing.
    3. Continuous daily use validates that small native apps were worth building.
    4. Stop defaulting to text-based interfaces when GUIs are readily achievable.
    5. Build a native UI for a throwaway CLI to shift your perspective on software.
wardley-beta
%% 1. Users: Developers building personal tools (Simon Willison, Thomas Ptacek, general devs)
%% 2. Needs: Quickly build usable native interfaces for small personal tools; validate GUI worthiness
%% 3. Capabilities: AI-assisted GUI dev, native framework access, CLI-to-GUI conversion, daily-use validation
%% 4. Components: Coding agents, vibe coding, native GUI frameworks, CLI/TUI tools, personal monitoring apps
%% 5. Maturity: Coding agents (Genesis), Vibe coding (Genesis), Native GUI frameworks (Product), CLI/TUI (Commodity), Personal apps (Custom)
%% 6. Management: Devs self-manage; AI agents assist; Apple manages frameworks; OSS manages CLI tools

anchor developer [0.95, 0.93]
component nativeGUI [0.55, 0.75]
component personalApps [0.40, 0.65]
component codingAgents [0.15, 0.55]
component vibeCoding [0.10, 0.45]
component guiFrameworks [0.65, 0.30]
component cliTUI [0.85, 0.35]

nativeGUI -> developer
personalApps -> nativeGUI
codingAgents -> nativeGUI
vibeCoding -> codingAgents
guiFrameworks -> nativeGUI
cliTUI -> personalApps

evolve codingAgents 0.20
evolve vibeCoding 0.12
evolve personalApps 0.45

AI-Assisted Learning

  • Quoting Matt Webb ONE SENTENCE SUMMARY:

    Matt Webb describes using ChatGPT as an interactive tutor to learn quaternions himself rather than outsourcing the thinking, discovering AI pushes him to learn more.

    MAIN POINTS:

    1. After releasing version 1.0, Matt expected to do rotations himself.
    2. He sat down with ChatGPT to educate him on the topic.
    3. He didn’t get ChatGPT to write the code directly.
    4. Instead he used it as a patient, interactive tutor.
    5. This helped him learn what books and mathematician friends couldn’t teach.
    6. He finally learned quaternions enough to make the app work.
    7. Learning doesn’t stop just because thinking is outsourced to AI.
    8. AI pushes him to learn more rather than replace learning.
    9. He likes that outcome of working with AI.
    10. This came from his Galactic Compass app’s augmented reality mode.

    TAKEAWAYS:

    1. Use AI as an interactive tutor, not just a code generator.
    2. Ask AI to educate you rather than do the work.
    3. AI can succeed where books and experts previously failed you.
    4. Outsourcing thinking to AI can paradoxically increase learning.
    5. Frame AI as a push toward curiosity and understanding.
wardley-beta
%% 1. Users: Self-directed developers/learners tackling complex technical topics (quaternions, AR math)
%% 2. Needs: Deep conceptual understanding, not just code; patient adaptive tutoring; learning where books/experts failed
%% 3. Capabilities: Interactive Socratic tutoring, domain knowledge, explanation over generation, iterative refinement
%% 4. Components: ChatGPT (LLM), interactive tutor technique (prompting pattern), learner active engagement, AR app context
%% 5. Maturity: ChatGPT=Product, tutor technique=Custom, active engagement=Commodity, AR app context=Product
%% 6. Management: Learner self-manages process; LLM providers manage infrastructure; technique is community-emerging

anchor learnerNeed [0.95, 0.93]
component chatGPTTutor [0.55, 0.65]
component tutorTechnique [0.30, 0.50]
component activeEngagement [0.85, 0.55]
component arAppContext [0.60, 0.35]

chatGPTTutor -> learnerNeed
tutorTechnique -> chatGPTTutor
activeEngagement -> tutorTechnique
arAppContext -> learnerNeed

evolve chatGPTTutor 0.55
evolve tutorTechnique 0.30
evolve activeEngagement 0.90
evolve arAppContext 0.60