Intro

Note: Kusama Shield has not been audited.

License:

Kusama Shield is developed under the MIT license.

All current features have been tested with Talisman

Code repositories:

https://codeberg.org/KusamaShield/

Test instance:

https://kusamashield.laissez-faire.trade

How does Kusama Shield work?

Kusama Shield is a zk-powerd multi-asset shielded pool, allowing anyone to deposit any supported token into the shielded pool

User journey

  • User generates a deposit transaction, generating a secret, the secrets gets wrapped in Zero Knowledge and takes a small piece of that data as a deposit token.
  • Anyone that wants to withdraw the tokens, will connect their browser wallet to

How anonymous is the system?

The privacy score can be measured by the K-anonymity score. Which roughly translates to the more users that deposit and withdraws at the same time, the higher anonymity the systems gets, the goal is to get lost in the crowd and provide a

How does it compare to Monero?

Monero relies on decoy transactions. To calculate the anonymity score of your Monero transaction we need to look at a block explorer, and calculate

\( k = \frac{\text{Total number of decoys in the block}}{\text{Total number of transactions in the block}} \)

Supported assets

Kusama Shield supports all ethereum erc20 asset as well as the native token on the chain where it is deployed.

Supported Networks

  • Westend Assethub | Testnet
  • Moonbase | Testnet
  • Paseo Contracts Chain | Testnet
  • Kusama Assethub | Mainnet

Kusama Shield is compatible with any EVM chain that supports smart contracts in solidity and have an Ethereum RPC.

Westend Assethub

Note: Westend Assethub is currently bricked, use the Paseo chain instead

Faucet:

https://faucet.polkadot.io/westend?parachain=1000

Block explorer:

https://blockscout-asset-hub.parity-chains-scw.parity.io

Moonbase Testnet

Deployed contract address:

  • Todo

Deployed contract source code:

  • Todo

Faucet:

faucet.moonbeam.network

Block explorer:

moonbase.moonscan.io

Chain id:

1287

Project documentation page:

docs.moonbeam.network

Reproduce ZK solidity code:

git clone https://codeberg.org/KusamaShield/ZKSOLgen
cd ZKSOLgen/ && cargo run

Shield assets with Kusama Shield on Moonbase:

  • Coming soon

Paseo Contracts Assethub

Deployed contract address:

  • Todo

Deployed contract source code:

  • Todo

Block explorer:

https://blockscout-passet-hub.parity-testnet.parity.io/

Ethereum RPC:

The current RPC is hosted by parity:

https://testnet-passet-hub-eth-rpc.polkadot.io

However due to strict traffic filtering we recommend that you use this RPC instance:

http://eth-pas-hub.laissez-faire.trade:8545  

Add network to talisman:

See screenshot

Run your own RPC instance:

git clone https://github.com/paritytech/polkadot-sdk
cd polkadot-sdk/
cargo build --release -p pallet-revive-eth-rpc
RUST_LOG=info,eth-rpc=debug ./target/release/eth-rpc --dev --rpc-external --rpc-message-buffer-capacity-per-connection 1152048 --rpc-cors all  -lerror,runtime::revive::strace=trace,runtime::revive=info  --node-rpc-url wss://testnet-passet-hub.polkadot.io --cache-size 5000000 

Note: Do not forget to set the --cache-size, otherwise it will not work after a certain amount of blocks.

Faucet:

https://faucet.polkadot.io/?parachain=1111

Native Asset:

PAS

Ethereum Chain id:

420420422

Paseo Paraid:

1111

Block explorer:

https://blockscout-passet-hub.parity-testnet.parity.io/

Kusama Shield Paseo demo:

Video link

Paseo Contracts Assethub v2

Paseo v2 is a mirror of the Kusama Version and meant as a latest version of Kusama Shield, here we can test features before they go live on Kusama Assethub Mainnet.

Faucet:

Select Paseo contracts chain in this faucet to prefund your wallet: https://faucet.polkadot.io

Deployed contract address:

  • 0xa1Ab66CB2634007a5450643F0a240f8E8062178C

Deployed contract source code:

https://codeberg.org/KusamaShield/Solidity_helpers/src/branch/main/contracts/paseo2_kusama

Block explorer:

https://blockscout-passet-hub.parity-testnet.parity.io/

Ethereum RPC:

The current RPC is hosted by parity:

https://testnet-passet-hub-eth-rpc.polkadot.io

However due to strict traffic filtering we recommend that you use this RPC instance:

http://eth-pas-hub.laissez-faire.trade:8545  

Use same setting as previous paseo conf

Kusama Assethub Mainnet

Deployed contracts:

  • [ZK Verifier] 0xc81D878518791fE261841a1eF7Eb7cc565598Ae4
  • [Poseidon Hasher] 0x02bB94D5eeEAc7C102D90e661BB925d0BE98E639
  • [Shielded Pool] 0xDC80565357D63eCa67F3f020b6DD1CE1fD0E1Ed8

Kusama Assethub EVM RPC's:

  • https://kusama-rpc.laissez-faire.trade
  • https://kusama-asset-hub-eth-rpc.polkadot.io
  • https://eth-asset-hub-kusama.dotters.network

How to fund an EVM account on Kusama Assethub.

XCM tokens from Kusama to Kusama Assethub:

app.turtle.cool is an easy to use tool to send your KSM from Kusama to Kusama Assethub.

Account conversion:

When we make transactions we are doing this from an ethereum account in an ethereum way, in order to do so we must send funds from our regular substrate address to the EVM address we want to use.

Let's create a new ethereum account and send funds to it:

 cast wallet new
Successfully created new keypair.
Address:     0xbe386C4368Fadf622830d00e2353D4dF5fEE52Ac
Private key: 0x45f3cb7cd86153b09b83c914c9306161e790738295a209334f35127d45897639

Take the Address and append 24 small e:

0xbe386C4368Fadf622830d00e2353D4dF5fEE52Aceeeeeeeeeeeeeeeeeeeeeeee

send a balance transfer to this account like this:
https://assethub-kusama.subscan.io/extrinsic/10684721-2

How to use Kusama Shield on Kusama Assethub:

Note: make sure you have balance on your ETHEREUM account on Kusama Assethub

Video Demo

1: Connect wallet:

2: Select Amount

3: Save token

Next you will have a secret token being generated for you, when you want to withdraw you neeed to know the amount and this secret token.

Redeploying the shielded pool:

  • 1: Deploy the PolkaVM poseidon project
  • 2: deploy the zk verifier
  • 3: Link the poseidon contract into InternalLeanIMT
  • 4: Link the zk contract address into the FixedIlop/Shielded Pool contract
  • 5: Deploy the Shielded pool with the script provided in same repo
  • 6: Test withdrawals and deposits with this script:

https://codeberg.org/KusamaShield/Solidity_helpers/src/branch/main/contracts/paseo2_kusama/test_deposit_withdraw.js

Cross chain Swaps

Note: Not all pairs and tokens have been fully tested, we have mostly tested the USDT trx to DOT transfers.

The long term vision of Kusama Shield is to build up the world's biggest anonymity set. A home for your shielded Asset's. By tapping into to various DEFI protocols we are able to facilitate easy to use swaps. Allowing third party ecosystem to easily swap their crypto currency into DOT and then KSM to be able to hold shielded KSM.

Dot > KSM

See next page for further information.

Crypto Currency > DOT

Tap into third party liquidity and swap your tokens into DOT for a low fee.

DOT > KSM

Send DOT from Polkadot Assethub chain to Kusama Assethub using Polkadot Assethub's DEX and then send KSM to Kusama Assethub.

Technical overview:

Demo:

DOT Polkadot assethub to Kusama Assethub KSM

How to:

Step 1:

Connect your Talisman browser wallet and select your polkadot account. Make sure you have funds on Polkadot Assethub not regular Polkadot Relay chain.

Step 2:

Navigate to bridge tab and select the amount of DOT you want to swap. You will be able to preview the rate before the swap takes place.

Step 3:

Press swap and approve the transactions, Because Kusama Shield tries to be EVM compatible we ask the user to first select their Polkadot wallet then switch to the connected address to your talisman Ethereum account. This makes it much easier to be able to directly shield your KSM, once you have swapped them.

Step 4:

Shield your fresh KSM.

Other interfaces:

https://kheopswap.xyz/#/polkadot/swap
Snowbridge trustless bridge documentation

Cross-Chain Swap Guide

Kusama Shield provides low cost cross-chain swaps, allowing users to exchange DOT for a wide variety of digital assets across different blockchain networks. And send the DOT to Kusama Assethub to provide shielded KSM and more privacy.

Note: Kusama Shield has not been audited, proceed with care. Application assumes that you have connected a Talisman browser wallet.

Overview

The swap functionality enables you to:

  • Convert DOT to/from 50+ different cryptocurrencies(on other l1 and l2 chains)
  • Swap between major blockchains (Bitcoin, Ethereum, Solana, etc.)
  • Track your swap status in real-time
  • By utilizing the dotsend bot we are able to provide fast and lowcost(0.6% fee) swaps.

Demo:

Send USDT(trc20) from Tron, that the user has in Trust wallet to DOT.

How to Use Swaps

Note: Tested with chrome browser + Talisman wallet

1. Connect Your Wallet

  • Click "Connect Wallet" in the interface
  • Select your preferred Polkadot wallet (Talisman, Polkadot.js, SubWallet)
  • Ensure your wallet contains DOT tokens

2. Navigate to Bridge & Swap

  • Select the "Bridge & Swap" tab in the main interface
  • This feature is available on Kusama AssetHub mainnet

3. Configure Your Swap

From Currency

  • DOT is currently the primary source currency
  • Enter the amount of DOT you want to swap

To Currency

Choose from 80+ available destination currencies including:

  • Bitcoin Network: BTC, BTCLN (Lightning), BTCBSC
  • Ethereum Network: ETH, ETHOP, ETHARBITRUM, ETHZKSYNC
  • Stablecoins: USDT, USDTBSC, USDTMATIC, USDC, DAI
  • Major Altcoins: ADA, SOL, AVAX, ATOM, APT, LINK
  • DeFi Tokens: AAVE, UNI, CAKE, SUSHI
  • And many more

Destination Address

  • For DOT → KSM swaps: Uses your connected wallet address automatically
  • For other destinations: Enter the destination address for the target network
  • Important: Ensure the address format matches the destination blockchain

4. Review Exchange Rate

  • The interface displays the current exchange rate
  • Shows estimated amount you'll receive
  • Rates are fetched in real-time from the swap provider

5. Create Swap:

  • Click "Create Swap" to initiate the process
  • A QR code will be generated for the deposit address
  • Copy the deposit address or scan the QR code with your wallet

6. Send Your DOT:

  • Send the exact DOT amount to the provided deposit address
  • Click "I've sent the DOT" once the transaction is broadcast
  • Do not send more or less than the specified amount

7. Track Your Swap

The interface provides real-time status updates:

Status Stages

  • NEW: Order created, waiting for your deposit
  • PENDING: Deposit received, confirming on blockchain
  • EXCHANGE: Funds confirmed, exchange in progress
  • WITHDRAW: Sending tokens to your destination address
  • DONE: Swap completed successfully

Transaction Details

  • Deposit Transaction: Hash, amount, fees, confirmations
  • Withdrawal Transaction: Hash, amount, fees, confirmations
  • Destination Address: Where your tokens are being sent
  • Time Tracking: Order creation, processing times, completion

8. Completion

  • Receive confirmation when swap is complete
  • Transaction hashes are provided for verification
  • Tokens are sent to your specified destination address

Available Trading Pairs:

DOT to Other Cryptocurrencies (50+ pairs)

Bitcoin Networks:

  • DOT → BTC (Bitcoin)
  • DOT → BTCLN (Bitcoin Lightning)
  • DOT → BTCBSC (Bitcoin on BSC)
  • DOT → BCH (Bitcoin Cash)

Ethereum Ecosystem:

  • DOT → ETH (Ethereum)
  • DOT → ETHOP (Ethereum Optimism)
  • DOT → ETHARBITRUM (Ethereum Arbitrum)
  • DOT → ETHZKSYNC (Ethereum zkSync)
  • DOT → ETHBASE (Ethereum Base)

Stablecoins:

  • DOT → USDT (Tether)
  • DOT → USDTBSC (Tether BSC)
  • DOT → USDTMATIC (Tether Polygon)
  • DOT → USDTARBITRUM (Tether Arbitrum)
  • DOT → USDTSOL (Tether Solana)
  • DOT → USDTTRC (Tether TRON)
  • DOT → USDC (USD Coin)
  • DOT → USDCBSC (USD Coin BSC)
  • DOT → USDCARBITRUM (USD Coin Arbitrum)
  • DOT → USDCSOL (USD Coin Solana)
  • DOT → DAI (Dai)
  • DOT → DAIBSC (Dai BSC)
  • DOT → DAIMATIC (Dai Polygon)
  • DOT → TUSD (TrueUSD)
  • DOT → USDP (Pax Dollar)

Major Blockchains:

  • DOT → KSM (Kusama) Special cross-chain route
  • DOT → ADA (Cardano)
  • DOT → SOL (Solana)
  • DOT → AVAX (Avalanche)
  • DOT → ATOM (Cosmos)
  • DOT → APT (Aptos)
  • DOT → SUI (Sui)
  • DOT → TON (Toncoin)
  • DOT → XRP (Ripple)
  • DOT → LTC (Litecoin)
  • DOT → DOGE (Dogecoin)

DeFi & Exchange Tokens:

  • DOT → AAVE (Aave)
  • DOT → LINK (Chainlink)
  • DOT → UNI (Uniswap)
  • DOT → CAKE (PancakeSwap)
  • DOT → SHIB (Shiba Inu)

Privacy Coins:

  • DOT → XMR (Monero)
  • DOT → ZEC (Zcash)
  • DOT → DASH (Dash)

Other Networks:

  • DOT → TRX (TRON)
  • DOT → VET (VeChain)
  • DOT → XLM (Stellar)
  • DOT → XTZ (Tezos)
  • DOT → ETC (Ethereum Classic)

Cryptocurrencies to DOT (50+ pairs)

You can swap the following cryptocurrencies to DOT:

Bitcoin Networks:

  • BTC → DOT (Bitcoin)
  • BTCLN → DOT (Bitcoin Lightning)
  • BTCBSC → DOT (Bitcoin on BSC)
  • BCH → DOT (Bitcoin Cash)

Ethereum Ecosystem:

  • ETH → DOT (Ethereum)
  • ETHARBITRUM → DOT (Ethereum Arbitrum)
  • ETHBASE → DOT (Ethereum Base)
  • ETHBSC → DOT (Ethereum on BSC)
  • ETHOP → DOT (Ethereum Optimism)
  • ETHZKSYNC → DOT (Ethereum zkSync)
  • WETHETH → DOT (Wrapped ETH)
  • WETHARBITRUM → DOT (Wrapped ETH Arbitrum)
  • WETHBASE → DOT (Wrapped ETH Base)

Stablecoins:

  • USDT → DOT (Tether)
  • USDTBSC → DOT (Tether BSC)
  • USDTMATIC → DOT (Tether Polygon)
  • USDTARBITRUM → DOT (Tether Arbitrum)
  • USDTSOL → DOT (Tether Solana)
  • USDTTRC → DOT (Tether TRON)
  • USDCETH → DOT (USD Coin Ethereum)
  • USDCBSC → DOT (USD Coin BSC)
  • USDCARBITRUM → DOT (USD Coin Arbitrum)
  • USDCMATIC → DOT (USD Coin Polygon)
  • USDCSOL → DOT (USD Coin Solana)
  • DAIBSC → DOT (Dai BSC)
  • DAIETH → DOT (Dai Ethereum)
  • TUSD → DOT (TrueUSD)
  • USDP → DOT (Pax Dollar)

Major Blockchains:

  • ADA → DOT (Cardano)
  • SOL → DOT (Solana)
  • WSOL → DOT (Wrapped Solana)
  • AVAX → DOT (Avalanche)
  • ATOM → DOT (Cosmos)
  • APT → DOT (Aptos)
  • TON → DOT (Toncoin)
  • XRP → DOT (Ripple)
  • LTC → DOT (Litecoin)
  • DOGE → DOT (Dogecoin)

DeFi & Exchange Tokens:

  • AAVEETH → DOT (Aave Ethereum)
  • LINK → DOT (Chainlink)
  • CAKE → DOT (PancakeSwap)
  • SHIB → DOT (Shiba Inu)
  • PEPEETH → DOT (Pepe Ethereum)
  • PAXGETH → DOT (PAX Gold Ethereum)
  • MANAETH → DOT (MANA Ethereum)
  • ZRX → DOT (0x Protocol)
  • BAT → DOT (Basic Attention Token)

Privacy & Alternative Coins:

  • XMR → DOT (Monero) Privacy coin
  • ZEC → DOT (Zcash)
  • DASH → DOT (Dash)
  • ETC → DOT (Ethereum Classic)
  • VET → DOT (VeChain)
  • XLM → DOT (Stellar)
  • XTZ → DOT (Tezos)

Other Networks & Tokens:

  • TRX → DOT (TRON)
  • BTT → DOT (BitTorrent Token)
  • POL → DOT (Polygon)
  • POLETH → DOT (Polygon Ethereum)
  • KCS → DOT (KuCoin Token)
  • BNBOPBNB → DOT (BNB Optimism)
  • WBNBBSC → DOT (Wrapped BNB BSC)
  • TWTBSC → DOT (Trust Wallet Token BSC)
  • BSC → DOT (Binance Smart Chain)
  • S → DOT (Specialty token)

Total: 70+ cryptocurrencies can be swapped to DOT

Special Features

DOT ↔ KSM Cross-Chain Swaps

  • Direct integration with Polkadot and Kusama
  • Uses on-chain DEX for optimal rates
  • Automatic address handling for connected wallets
  • No manual destination address required

See previous page for DOT > KSM swaps

Smart Status Tracking

  • Adaptive Polling: Faster updates during critical phases
  • Visual Progress: Step-by-step progress indicators
  • Copy Functions: Easy copying of transaction hashes and addresses
  • Emergency Handling: Clear instructions if manual review needed

Important Notes

Before Swapping

  • ✅ Verify destination address format matches the target blockchain
  • ✅ Check minimum and maximum swap amounts
  • ✅ Ensure you have enough DOT for the swap amount
  • ✅ Double-check the exchange rate and expected output

During Swaps

  • ⏱️ Send the exact amount shown - not more, not less
  • ⏱️ Don't send from exchange wallets (use personal wallets only)
  • ⏱️ Keep the swap interface open to monitor progress
  • ⏱️ Save transaction hashes for your records
  • ⏱️ Keep in mind this is early(beta) software

After Completion

  • 🔍 Verify receipt of tokens at destination address
  • 🔍 Check transaction on destination blockchain explorer
  • 🔍 Swap DOT to KSM and shield it for privacy

Troubleshooting

Emergency Status

If your swap enters "EMERGENCY" status:

  1. Don't panic - this requires manual review
  2. Email: kusamashield@smokes.thc.org
  3. Include: Your order number (displayed in the interface)
  4. Response: Support will resolve issues quickly

Common Issues

  • Wrong Address Format: Ensure destination address matches target blockchain
  • Insufficient Funds: Verify you have enough DOT for the swap
  • Network Delays: Blockchain congestion can cause delays
  • Expired Orders: Complete swaps within the time limit

Support

  • Documentation: https://kusamashield.codeberg.page
  • Emergency Support: kusamashield[replace me with the digital cyber post a]smokes.thc.org
  • Status Page: Monitor service status on the main interface

Technical Details

Supported Networks

  • Polkadot Ecosystem: DOT, KSM parachains
  • Bitcoin: BTC, Lightning Network, wrapped variants
  • Ethereum: Mainnet, L2s (Arbitrum, Optimism, Base, zkSync)
  • Alternative L1s: Solana, Avalanche, Cosmos, Cardano
  • Other Networks: BSC, Polygon, TRON, and more

Integration

  • External Partners: Established swap providers for other pairs
  • Real-time APIs: Live rate fetching and status tracking
  • Blockchain Monitoring: Multi-chain transaction confirmation

For the latest updates and additional information, visit the official Kusama Shield documentation and follow us on X.

Swap USDT on Tron

Swapping USDT(trc20) on Tron from Trust wallet to DOT in my talisman browser wallet.

Demo:

Video demo sending from Trust wallet

Try it today:

shield.markets

Integrate Kusama Shield

Deploy Kusama Shield UI Locally

Requirements:

Clone:

git clone https://codeberg.org/KusamaShield/Interface && cd Interface/ 

Build wasm:

cargo install wasm-pack
wasm-pack build --target web
rm -rf public/pkg/
cp -r pkg/ public/

Install node packages:

npm install -f

Run locally:

npm run local

Use npm run dev to run it on all public network interfaces

Operator Guide - Terms of Service

By hosting an instance and/or using Kusama Shield you agree to the following Terms of Service:

Terms of Service

1. Acceptance of Terms

By accessing and using Kusama Shield, you agree to be bound by these Terms of Service and all applicable laws and regulations.

2. Service Description

Kusama Shield provides a privacy-focused Zero Knowledge token shielding User Interface that allows users to shield and unshield tokens on supported decentralized networks.

3. User Responsibilities

  • You are responsible for maintaining the security of your wallet and secret keys
  • You must ensure you have sufficient funds for transactions
  • Developers and Operators of this website are not liable for any type of Regulatory actions or legal consequences arising from the use of the Platform
  • You are responsible for verifying transaction details before confirming

4. Risk Disclosure

  • Kusama Shield comes with no warranty
  • Cryptocurrency transactions are irreversible
  • Kusama Shield is early stage open source software and may contain bugs
  • You acknowledge the risks associated with blockchain technology
  • The service is provided "as is" without warranties

5. Privacy

  • We do not store your private keys or transaction secrets
  • This platform does not guarantee anonymity
  • All transactions are processed by decentralized blockchain networks without any middlemen
  • We do not process transactions or hold any private keys
  • The Pool utilizes zero-knowledge proofs to verify transactions and asset holdings without revealing underlying data
  • As a host of this website, I do not select the material transmitted through this website that I run, and I have no practical means of either identifying the source of such material or preventing its transmission
  • No userdata is ever stored at the host of the Kusama Shield UI

6. Prohibited Use

Users must not:

  • Use the Platform for illegal activities (e.g., money laundering, terrorism financing)
  • Exploit vulnerabilities, disrupt hosting or engage in attacks against the Platform
  • Misrepresent affiliation with the Platform's developers or operators
  • Violate applicable laws in their jurisdiction

7. Limitation of Liability

We are not liable for any losses, including but not limited to:

  • Lost or stolen secret keys
  • Network issues or blockchain congestion
  • Incorrect transaction parameters

Developers and maintainers are not financial advisors or custodians of user funds.

Acceptance of Terms

By using the Platform, you confirm that you:

  • Understand the risks of decentralized networks and privacy tools
  • Assume full responsibility for your interactions with the Platform
  • Release all maintainers, operators, and developers from liability

Disclaimer: This document is not legal advice. Consult a qualified attorney for compliance matters.



XCM Transfers

Send token transfers to and from other chains using XCM.

Kusama Shield is deployed on Paseo Hub chain

Supported Chains:

  • Paseo Relay
  • Paseo Assethub
  • Paseo Hub
  • Paseo Hydration
  • Paseo Pop

Bridge:

"Kusama Shield Bridge"

1: Connect wallet

Connect your browser wallet and select a substrate/polkadot address.

2: Select to and from chain

Make sure you have funds on your account, use the faucet if needed:
faucet.polkadot.io

3: Press bridge

Tested xcm asset sending routes:

Paseo Relay:

  • Relay > Assethub
  • Relay > Paseo hub
  • Relay > Paseo Hydration
    Unstable route, do not use
  • Relay > Paseo Pop
    Unstable XCM channel

Polkadot.js Apps Chain link

Paseo Assethub:

Paseo Hub:

  • Hub > Relay
  • Hub > Assethub No supported channel.
  • Hub > Hydration
    No open supported XCM channel.
  • Hub > Paseo Pop
    No open supported XCM channel. Polkadot.js App Chain link

Integrate Kusama Shield

Operator guide

Host Kusama Shield UI instances

Best pratice:

  • Own your own hardware
  • Always respond to abuse requests with a link to the terms of service, ideally within 24hours
  • Keep your systems up to date and happy.
  • use ssh public key authentication
  • Put Kusama Shield react app behind a proxy
  • Always keep a good social relationship with your ISP.

Use your own hardware:

Buying a used server on ebay and asking your local data center or a datacenter nearby for a one unit rack slot, is a great and cost effective way to actually own your own hardware and have more control. Colocation costs are different depending on where(you can also ship your server somewhere cheaper) but for a single unit server your looking at 30-80Euro's a month for the European market. The most price effective way to is often to ask local datacenters or maybe you nknow someone working for a company that has server racks?.

Host using a VPS:

Select a VPS provider, ideally one from Tor's recommended providers | Good Bad ISPs.