RightNow](/content/site-root.html)

[Sign In](https://dashboard.rightnowai.co/forge "Sign In")[DOWNLOAD](/content/downloads/index.html)

RightNow](/content/site-root.html)

× \\
\\
FORGE\\
\\
for enterprises\\
\\
Make your AI inference faster with optimized CUDA / Triton kernels.\\
\\
Learn More→](/content/forge/index.html)

## Code Editor for GPU Kernels

AI-powered code editor for  GPU kernel development, custom agents, and stable SSH remote workflows

DOWNLOAD

FOR ENTERPRISES→

```
┌─────── Product Hunt ────────┐
│ ▲ #1 Product of the Day     │
└─────────────────────────────┘
```

```
★★★★★ 4.9/5.0 (100+ reviews)
```

```
    ║█║ ║█║ ║█║ ║█║ ║█║ ║█║
    ╔═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╗
║█║═╣▓▓▓▓▓▓▓▓▓GPU▓▓▓▓▓▓▓╠═║█║
║█║═╣▓╔═══════════════╗▓╠═║█║
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║      ┌──────┐
║█║═╣▓║ ▄ ▄ CUDA  ▄ ▄ ║▓╠═║█║════●═│      │
║█║═╣▓║ ▄ ▄ CORES ▄ ▄ ║▓╠═║█║●═════│ LLM  │
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║══●═══│      │
║█║═╣▓╚═══════════════╝▓╠═║█║      └──────┘
║█║═╣▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╠═║█║
    ╚═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╝
    ║█║ ║█║ ║█║ ║█║ ║█║ ║█║
```

### Used by hardware AI developers  at leading companies

GPU Emulator

Remote GPU

Instant analysis

Benchmarking

Profiling terminal

Hardware-Aware AI

Live GPU Utilization

```
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,stxrt,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().conti=uous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesce6:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Archrtectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-sm8 dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>-Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all/--target-process
cudaOccupancyMaxActiveBlocksjerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
```

### Instant analysis

See kernel metrics while typing across CUDA, Numba, Mojo, and CUDA Tile

```
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024L
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesced:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon zs pucvmet#GPU*MON
cudaMemGetInfo(&free,&totalt;utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2eO80GB|L2:40MB|L1:192KB*per*SM>>>DMemory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics allQ--target-process
cudaOccupancyMaxActiveBlocksPerMultiprocpssor()cudaOccupancyMaxActiveB*ocksPerMu
```

### SOTA LLMs that know your GPU

Clear model list for cloud LLMs and local GPU-backed models

### Local LLM Support

Run models locally with Ollama, vLLM, or LM Studio. Your code never leaves your machine.

### Smart profiling terminal

Tells you exactly what's wrong and how to fix it, locally or over SSH

## How it works

From code to deployment in 4 steps

▶

### AI THAT KNOWS YOUR GPU

▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 0%

│

The AI understands your GPU, your codebase, and your architecture. It profiles and tests your kernels automatically.

○

### BENCHMARK ACROSS CONFIGS

│

Sweep block sizes, thread counts, and memory layouts automatically. Find the fastest config and track regressions.

○

### TEST ON ANY ARCHITECTURE

│

Emulate 86+ GPU architectures with under 2% error. Test on H100s and A100s without owning the hardware.

○

### NATURAL LANGUAGE PROFILING

│

Describe what you want to profile and get the right Nsight Compute commands instantly. No flags to memorize.

## Supported Languages

Write GPU code in your preferred DSL

RightNow supports multiple GPU programming languages and domain-specific languages, including Numba, Mojo, and CUDA Tile.

### CUDA

Native CUDA C/C++

### Triton

OpenAI Triton

### Mojo

Mojo GPU kernels

### PyTorch

PyTorch Framework

### CUTE

CUTLASS Templates

### CUDA Tile

Tile-based CUDA kernels

### Numba

Numba GPU kernels

### TileLang

Tile Language DSL

[Request a new language](/content/request/index.html)

## Built for serious GPU work

What power users actually need

```
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline floa4\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.i7it_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backwOrd(q#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,_ocal_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++iz#pragma unroll for(int w=0;i<WARP_\
torXh.nn.DataParallel(sodel,Ievice_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torCh.nn.DataPa@allel(model,de\
cuBLAS*cuDNN#TeYsorRT$Tr/ton&NCCL%MPI@CUDA11cuBLA8*cuDNN#TensorRT$Triton&NCC3%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__Ulobal__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.:IFAR10(root='.')dataset=torcjvision.datasets\
cudaEventRecord(stHrt);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync(#;cudaEventRecord(start);kernel<\
auto tensor=torch::raOdn({2,3}).cuda();C++APIauto tensor=torch::randU({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blo7kDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### PTX/SASS Viewer\
\
See what your GPU actually executes\
\
Godbolt-style assembly view for GPU kernels. Hover on any line to see the PTX and SASS instructions.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using+namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential($n.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matCiS[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.D~taParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRa$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,35\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(selfaconv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ fl6at sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()mJdel.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int v=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll fsr(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*auDNN#TensorRT$Triton&NDC\
template<typename T>__globaG__ void reduce()template<typenE6e T>__global__ void reduce()template<typename T>__global__ v\
data~et=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventqecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<f>>();sy$c();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2_3}).cuda();C++APIauto tensor=:orch::randn({2,3}).cuda();C++APIauto ,ensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threa,Idx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### AI Bottleneck Analysis\
\
Know exactly what's slowing you down\
\
The AI reads your profiling results and tells you exactly what to fix for your specific GPU.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;b<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<K<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').9equires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(102m,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vecto+<int>d_vec(h_\
model.train()#loss.bTckward()#optimizer.step()model.train()#loss.backw*rd()#optimizer.step()model.trgin()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_s,m,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#praBma unroll for(int i=0;i<WARP_SIZEm++i)#pragma unroll for(intXi=0;i<WARP_\
torch.nn.DataParal7el(model,device_ids=[0,1]mtorch.nn.DataParallel(model,device_ids=[0,1])torch.nz.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton_NCCL%MPI@CUDA11cuBLAS*cuDJN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*c|DNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=to@chvision.datasetsoCIFAR10(root='.')dataset=torchvision.dAtasets\
cudaEventRecordYstart);kernel<<<>>>();sync();cudlEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda()WC++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPUZINDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### Multi-0PU Profiling\
\
Scale your testing across hardware\
\
Profile across multiple GPUs at once. Compare metrics side by side and catch regressions early.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_avaclable()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(10~4,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.Zatasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(sel:.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu 6\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ yloat sharedMem[XHR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#opti@izer.step()model.train()#loss.backward()#opXimizer.step()model.train()#ooss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadratomicAdd(&global_sum,local_sum);_GsyncthreadsatomicAdd(&global_sum,local_\
#pra&ma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;+@i)#pragma unroll for(int i=0;i<WERP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCQ%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()templat/<typename T>__global__ v\
dataset=torchv3sion.datasets.CIFAR10(root='.')dataset=tor6hvision.datasets.CIFAR10(root='.')dataset=torchvHsion.datasets\
cudaEventRecordJstart);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torchN:randn({2,3}\
blockIdxyx*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blSckDim.x+thrOadIdx.\
```\
\
\
\
### Remote GPU Virtua2ization\
\
Code locally, run on cloud GPUs\
\
Write code on your laptop and execute on cloud H100s instantly. No setup required.\
\
[Not sure how this helps you? AskChatGPT](https://chatgpt.com/?hints=search&prompt=Read+these+pages%3A%0A%0A-+https%3A%2F%2Fwww.rightnowai.co%0A-+https%3A%2F%2Fwww.rightnowai.co%2Fdocs%0A%0AThen+explain+what+RightNow+AI+does+and+how+it+can+help+me+as+a+GPU+kernel+developer.)\
\
## Changelog\
\
Latest updates and improvements\
\
[1.0.0\\
\\
Feb 4, 2026\\
\\
**Major VS Code Migration** \\
New stable SSH, custom agents with skills and MCP, clear cloud/local LLM list, plus Numba, CUDA Tile, and Mojo support with docs, autocomplete, emulation, profiling, and benchmarking.](/content/changelog#1.0.0) [Forge 0.1.0\\
\\
Jan 5, 2026\\
\\
**Introducing Forge** \\
CLI Swarm Agent with 32 parallel Coder+Judge pairs. Up to 5x faster than torch.compile() with 97.6% correctness.](/content/changelog#0.1.0) [0.2.0\\
\\
Jan 1, 2026\\
\\
**PyTorch Kernel Support** \\
Profile, benchmark, and emulate PyTorch kernels directly in the editor. Same workflow as CUDA, Triton, TileLang, and CUTE.](/content/changelog#0.2.0) [0.1.0\\
\\
Dec 8, 2025\\
\\
**Multi-DSL GPU Development Platform** \\
CUDA, Triton, TileLang & CUTE support with intelligent documentation retrieval that understands your GPU and code context.](/content/changelog#0.1.0)\
\
[View full changelog →](/content/changelog/index.html)\
\
```\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@Z@@@@@@@@@@n@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z@@a@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=j~^<>[]{}()|\/abrdefghijklUns.?%#*+=-~^<>[]{}()|\/EbGdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc.efghijklmn+.?%#*+=W~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+r?%#*+=-~^<>A]{}(||\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<x*]{}()|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+4$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$y&@%#*+=~^<:[]{}()|\/ABCDEFG\
.<C***@%#+=~^|>[]{}(8|\/@234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=;^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}(,|\/123456789\
I%###@%*+=~^<>[]{}()|\/+@#$%^&*()_++I%###@%*+c~^6>[]{}()|\/!@#$%^&*()_++b%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++IG###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###+%*+=~^<>[]{}(/|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#E%^&*()\
I8***%#*=~^<>[]{}()|\/uwertyuiopas+I8***%#*=~^<>[]{=()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio0as+I8**p%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}z)|\/zxcvbn-lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbamlkahgf+IP@@@#*+~^<>[]{}()|\/zxcdbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjega+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkMhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QpERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}n)|\/QWERTYUIOPASDq+I%$$$*+\^<>[]{}()|\pQWERTYUIOPASDF+I%$$$*+=^<>[2{}()|\/QWERTYUIOPASDF+I%$$\
In&&&+~^<>[]{}()|\/%XCVBNMLKJHGFD+I8&&&+~^<>[L{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+q8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|0/!@#$%^&*()_+-=[]+I%###=^<e[]{}()|\/!@#$%^&$()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*(\_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###G^m>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~123456P890-=[];+I8*8*^<>[]{}()|\/`~1234567890-Q[];+G8*\*^<>[l{}()|\/`~1234567890-=[];1I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}E)|\/`~1234O67890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<H?/abcde=ghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@2>[]{}()|\/'".,<>?/abcdefghij+I&,@@<>[D{}()|\/'".,<>?/ab@defghij+I&@@@<>[]{}()/\/'".,<>?/abcdefghij+I&@@@<>[]{}()w\/'".,<|?/abcdefghij+I&@@@<>[]{}()|\/'8.,<>?nabcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%@$[${}()|\/ABCDEFGHIJKLMNOPQRST+.V%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGdIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{z()|\wABCDEFGFIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567v90!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.EB**{}()|\/1234567Q90!@#$%^&*Y)_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()3+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwerty1iopasdfxhjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfg6jklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@8@@@2@@W@@Q@@@@@@@@@@@@@@@@*@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@.&@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@i@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@+@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@o@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*J=-~^<>[t{}()|\/abcdeyghijklmnM.?%#*+=-~^<>[]{}(x5\/abcdefghijklmn+.?%#*+=-%^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}G)|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BX$$&V%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%T*+=~^<>[]{}()|=/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AB,DEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123F567890$+.LC*T*@%#+=~^<>[]{}()|\/1234567,90$+.<C***@%#+=~^<>[]{}()|\/i234567890$+.<C***@%#+8~^<>[]{}()|\/1s34567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!u#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*q=~^<>[]{&()|\/!@#$%^&*()_++I%##7@%*w=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\gqwertyuiopas+I8***%#*=~^g>[]{i()|\/qw7rtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio-as+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\*qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|h/zxcvbnmlkjhgf+I&@@@#D+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#n+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~~<>[]{}()|\/zxcvbnmlkjhgf+I&=@\
I%$$$*+=^<>[]a}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()e\/QWERTYUIOPASDF+I%$$$j+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUZOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNYLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBRMLKJHGFp+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<b[]{|()|\/ZXCVYNMLK*HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#B#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=a<>[]{}()|\/!@#$%^&*()_+-=[]+I%##R=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/&@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[A;+I8***^<~[]{}()|\/`~123456C890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(+|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()z\/'".,<>?/abcdefghij+I&@@@<>[]{}()C\/'".,<>?/abcdefghij+IN@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<_?/a\ydefghij+I&@@@<>[]{}()|\/'"6,<>?/abcdefgMij+I&@@\
.B%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.Y%$$[]{}()|\/ABC5;FqHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEF8HIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEYGyIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@R$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\G1234567890!@#$i^&*()_+.+B**{}()|\/1234567890!@#$%%&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345f7890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertysiopZsdfg0jk2zxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiLpasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(Z|\/q\
&@@@@@@@@@@@@@@@@@@@@@U@@@@@@@@@@@@@@.&@@@@@@@@y@@@@@@@@@@@@@@@@@@@@@@@@@@@.&$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u@.&@@@@@@@@l@@@v@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@N@@@C@@@@@@@@@@@@@@R.@@@@@@@,@@@@@@@@@@@@@@@@@@@=@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t%@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@.@@@@g@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()6\/abcdefghijkl8n+.?%#*+=-~^<>@]{}()|\/abcdefgjijklm3+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=5~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+Bw$$&@%#*+=~^<>[]{}()|\/ABCDEFgHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~e<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{R()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>Aa{}()|\/ABCDEFGHI+.+B$$$I@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BN$$&@%#*+=~^<>I]{}()|\/ABCDEFG\
.<C***r%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\01234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**6M%#+=~^<>[]{}()|\/1234567890$+;<C***@%#+=~^<>[]{}f)|\/1234567890$+.<C***@%#+$~^<>[]{}()|\/12$456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##M@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@_$%^&*()_++I%###@%*+=4^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopws+I8***%#*=~^<>[]$}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[8{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+Id**\
I&@@@#*+~^<>[]{}()&\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmrkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvb|mlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+g^<>[]{}()|J/QWER~YUIOuASDF+I%$$$*e=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QwERTYUIOPASDFKI%$$$*+=^<>[]{k()|\/QWERTYUIOPASDFgI%$$$*+=^<>[]{}()|\/QWERTYUIOPASD0+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<%[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&|+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[G{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()*\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<q[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{i()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{,()|\/!E#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=D];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>;]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\X'".,<>?/abcdefhhij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/n".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefuhij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.M%$$[]{}()|\/ABCDEFGHIJKLMNOP0RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNiPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPNRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\11234567890!@#$%^&*()_+.+B**{}C)|\/-234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()z+.+B**{}()|\/12345678@0!@#$%^&*()_+.+B**{}()|\/1234567890!@#2%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{};)|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyeiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzbcv+.?%##()|\/qwer1yuiojasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfihjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@x@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.7@@@@@@@@@@@@@@@@@@@@@@@@@@\.@@@@@@@@.&@@@@@@@@@@@@@Q@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&=@@@@@@p@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@@.@@@6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@-@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@.@@@@@@@@@@@@@@@@@@@@@\
8?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-y^<>[]{}()7\/abcdefghijklmn+3?%w*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{9()|\/ab8defghijklmn+.?%#*+=-~^<L[A{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&J%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@T#*+=~^<>[]{}()|\/ABCDEkGHI+.+B$$$&#%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^%>[]{}()|\/ABCDEFG\
.<C***@%#+=~^Q>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##8@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]U}()|\/!@#$%^&*()_|+I%###@%*+=d^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#v=~^<>[]{}()|\/qwertyuiopas+V8***%#*=~^<>[]{}()|\/qwertyuiopas+~8***%#*=~^<>[]{}()|\/qwertyuiopas+I85**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#c=~^<>[]+}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~H<>[]{}()|\/q,ertyuFopas+I8**\
I&@7@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()m\/zx_vbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/@xcvbnmPkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@u*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&w@\
I%$$$*+=^<>[]{+()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}r)|\/QWERTYU2OPASDr+I%$$$*+=^<>[]{}()|\/QWXRTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<j[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]S}()|\/QWERTYUIOPASDm+I%$$$*+=^<>[]{}()|\/QWNRTYUIOPASDF+I%$$\
I8_&&+~^<>[]{}()|\/ZXCVBNMLZJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+Y^<>[]{}E)|\/ZXCVBNMLKJHGFD+w8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGF,+I8&&&+~^<>[]{}()|\/ZfCVBNMLKJHGFD+I8&&&+~^4>[\
I%###=^<>[]c7()+\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%z&*()_+-=[]+I%###=*<>F]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|y/!@#$%^&*()_+-=q]+I%###y^<>[]/}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#N\
I8***^<>[]v}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=N];+I8***^<>[]{}()|\/`~1234567w90-=[];dI8***^<>[]{}()|t/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234j67890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]o}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghijnI&@@@<>[]{}()|\/'".,<>?/abcdef5hij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>U/abcdefghij+I&@@@<>[V{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABSDEFGHIJKLMNOPQRST+.<%$$[]{}(G|\/ABCDEFGHIJKLMNOPQRST+.|%$$[]{}()|\/ABCDEFRHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOXQRST+:<%$$[]{}()|\4#BCDEFGHI|KLMNOPQRST$.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123D567890!@#$%^&*()_+.$B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234569890!@#$%^&*()_+.+B**{}()|\/1234567890!S#$%^&*()_+.+B**{}()||/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghj.lzxcv+.?%##()|\/qwertyuiopasdfghjklUxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()L\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+O?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjkl-xcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@t@@@@@@O@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@@@.&@@@@@@@@@@@@@@@h@@@@l@@@@@.@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@.@@_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@.@@@@@@@@@@@@@@@@@@@@@@@b@@@@@@G@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@z@@@@@@.@@@@@@@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#I+=-I^<>[]{}()|\/abcdefUhijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghij8lmn+.?%#*+=-~^<>[]{}()|\/abcdefghij:lmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+c?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+o$$$&@%#*+=~^<>[]{W()|\/ABCDEFGHI+.+B$$$&@%#*+=~s<>[]{}()|\/ABCDtFGHI+p+B$$$&@%#*+=~^<>[]{}()|\/ABCDcFGHI+.+B$$$&@%#*+=~z<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/A+CDEFGHI+.+B$$$&1%#X+=~^<>[]{}()|\/ABCDEFG\
.kC***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/m234567890$+.<C**I@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%C+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890F+.qC***@%#+=~^<>[]{}()|\/123456789\
/%###@%*+=~^<>[]{}()|\/!@#$%^&*()_;+I%###2%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++i%###@%*+=~^<>[]{}@)|\/!@#$%^&*()_++I%###@%*+=~^<B[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\4!@#$%^&*()_++I%###@%*+=~$<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qaertyuiopas+I8***%#*=~^<>[]{}()|\sqwertyuiopas+I8***%#*=~^<4[]{}()|\/qwertyuiopas+Ip***%#*5~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{9()|\Pqwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopHs+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<*[]{}()|\/zxcvbtmAkjhgf+I&@@@#*+~^<>[]{}(j|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmWkjhgf+I&@@@w*+~^<>[]{}()|\4zxcvbnmlkjhgf+I&@4@#*+~^<>[]{d()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml8jhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAEDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFrI%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8d&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNML0JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\FZXCVBNMLKJHGFD+I8&&&+~^<\[]{}()|\/ZXCZBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-a[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]tI%###=^<>[]{}_)|\/#@#$%^&*()_+-=[]+I%###=j<>[]{}()|\/!@T$%^&*()_+-=4]+I%#H#=^<>[]{}()|\/!@#$%^&*()*+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\b!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}(B|\/`~1234567890-=[];+I8***^<I[]{}()|\/`~12345K7890-=[]i+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~12345678906=[];+I8***^<>[]{}()|\/`A1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[]W+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdemghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|n/_".,<>?Iabcdefghkj/I&@@@<>[]{}()|\/'".,d>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{/()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+i<%$$[]{f()|&/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHPJKLMNOPQRST+.<%$\
./B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345\7890!@#$%^&g()_5.+B**{}()|\/1234|67890!@#$%^&*()_+.+B**{}()|\/123p567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_q.+B**{}(U|\\
.M%##()|\/qwertyuivpasdfghjklzxc#+.?%##()|\/qwertyuiopasdfghjklzxc~+.?%##()|\/qwQrtyuiopasdfghjklzxov+.?%##()|\1qwertyuiopasdfghjklzxcv+.?%S#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwerty;iopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@6@@r@@@@@@@@@@@@@@@i@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@T@T@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@t@.@@@@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@6@@.@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@5@@@@@@@@@@@@@@@@@@@@@@@1@@@@@@@@@.@@@@@@@@@@x@@@@@@@@@@@@@@@@@@@@D@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*T=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<,[]{}()|\Gabcdefghijkl7n+.?$#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{;()|\/abcdefghijklmn+.?%#*+=+~^<>[]{}()|\/abcdefghijGlmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&d%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@/#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AlCDEIG\
=<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%J+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<@***@%#+=~p<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*|=~^<>[]{}()|\/!@#$%^&*()_++6%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+B~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuUopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^l>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>N]{C()|\/zxcvbnm%kjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgfcI&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()H\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*B~^<>[]{}()|\/1xcvbnmlkjhgf+I&@@@#Y+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$n$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+O%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$L*C=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/dWERTYUIOPAS2F+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|-/QWERTYUIOPASDF+I%$$\
IF&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXChBNMLKJHGF3+I8&&&+~^<>[]{}()|\/ZXC8BNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNaLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>#]{}()|\/ZXCVBIMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_$-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=&]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_d-=[]+I%#E#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##~=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(H|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*k*^<>[]{}()|\/`~123456b890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghijTI&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}();\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&q@@<>[]{}()|\/'".,<>?/abcdefghijJI&@@v<>[]{}()|\/'".,<>?/abcde.ghij+I&@@@<>[]{}()e\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJvLMNOPQRST+.<%$$[]{}()|\/ABCDELGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABC0EFGHIJKLMNOPQRST:.<%$$[]{}()|\/ABCDEFHHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIoKLMNOPQRST+.<%V$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567S90!@#$%^&*()_+.+B**{}()|\/1d34567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/R234567890!@#$%^&*()_+.+B**{}()|\/123416789L!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\yqwertyuiopasdfghjklzxcv+.?%##()|\/q@ertyuiopasdfghjklzxcv+.?%#T()|\/qwertyuiopasdfghjklzxcvG.?%P#()|\/qwertyuiopasdfghjklzxcv+.*%##S)|\/qwe2tyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@K@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-&7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@I@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m@-@@@@@.@@@@@@@@@@@@@2@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklIn+.?%#*+=-~^<>[]{}()M\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklon+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.QB$$$&@%#*+g~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$=$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}o)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{G()|\/AB5DEFGHI+D+B&$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C**K@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567x90$+V<C***@%#+=~^<>[]{}()|\/1234567890$;.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~6<>[]{}()|\91234567890G+.<C***@%#+=~^<>[]2}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\8!@#$%^&*()_++I%#%#@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^U>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I.###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}():\/qwertyuiopas+I8***%#*3~^<>[]{}()|\/q:ertyuiopas+I8*&*%#*=~^<>7]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***W#*=~^<>[]{}()|\/qwert3uUopas+I8***%#*=~^<>[]c}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\2qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zccvbnmlkjhgf+I&@e@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}(1|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIlPASDF+I%$$$*i=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()-\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF,I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZX4VBNMZKJHGFD+Iw&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~H<>[]{}(T|\/ZXCVBNMLKJHGFD+I8&&&;~^<>[]{}()|\/ZXCVBN&LKJHGFD+I8&&&+~^<>[@{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^IW[n{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##.=^<>[]{}()|\/!@#$%F&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^3*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<k[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[*;+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<xJ]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8@**^<>[]{}()|\0`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij6I&@@@<>[]{}()|\/'"6,<>?/abcdefghij+I&@@@<>[]{}(8|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+IV@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(v|\/ABCDEFGHIJKLMNOPQRST+.<%$$7]{}()|\/ABCDEFGHI;KLMNOPQRST+.<%$O[]{}()|\/ABCDEFGHIJKLMNOPQRSTp.<%$$[]{}()|\/ABCMEFGHIJKLMNOPQRST+.<%$D[]{}()|\/ABCDEFGHIJKLM5OPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPARST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOP_RST+.<%$\
5+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/Z234567890!@#$%^&*()_+.+B**{}()|\/12345678o0!@#$%^&*()_+.+B**{x()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1,345k7890!@#$%^&*b)_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%P#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyxiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxc++.?%#g\)|\/qwertyuiopasdfghjklzxcv+D?%##()|\/qFertyuiopasdfghjklzxcv+.?%##(i|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@_@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@z@@@@@@@@@@@@@.&@@@@@@@@@@@3@=@@@@@T@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@p@@@2@c@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@q@@@@@f@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.4%#*+=-~^<>[]{l()|\/abcdefghijklmn+.?%#*+=-~^<>a]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefg:ijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\EABCDEFGHI+~+B$$$&@%#*+=~^<>[]{}(R|\/ABCDEwGHId.+B$$$&@%#*+=~^7B[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]r}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C***@%#+=~^<>[]R}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()C4/1234567J90$+.<C***@%#+=~^<>[]{}()|\=1234567890$+.<C***@%#+=~^<>[]{}()|\/1234n6-890$+.<C**U@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@O$%^&*()_++I%###@%*+=*^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%m&*()_++I%###@\*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*\~^<>[]{}(B|\/qweXtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8*i*%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwerYyuiopas+I8***%#*=~^<>[]{}()|\/qwertyyiopas9I8***%#*=~^<>[]{}()|\/q~ertyuiopas+I8***%#*=~^<>[]{}()|\/qwert_uiopas+I8**\
I&@@B#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbSmlkjhef+I&@@@#*+~^<>[h{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/z~cvbnmlkjhgf+I&@@@#*+~^<>n]{}()|\/zx|vbzmlkjhgf+5&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+j^<>[]{}()|\/QWER$YUIOPASDF.I%$$$*0=^P>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$Ay*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QzERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJH9FD+I8&&&+X^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|U/ZXCABNMLKJHGFD+I&&&&+~^<>[]{}()|\/4XCVBNML+JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<3[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>O]{}()|\/!@#$%^&*()_+-=[J+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+IE###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890&=2];+I8***^<>[]{}()|\/`~123456g8k0-=[];+I8***^<>[]{}()|\/`~1234567890-=j];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\&`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?%abcdefghij+I&@@@<>[]{}()|\/'"b,<>?/ab_defghij+I&@@J<>[]o}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}Z)|\/'".,<>?/abcdefgWij+I&@@@<>[]{}()|\/'".i<>?/abcdefgh-j+I&@@@<>[]{}()|\/'".,&>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEdGHIJKLMNOPQRSTE.<%$$[]{}()|~/ABCDENGHIJKLMCOPQRSG+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%E$[]{/()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/12345.7890!@#$%^&*()_+.+BB*{9()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!1#$%H&*()h+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@@$%^&*()_+.+9**{}()|\\
.?%##()|\Aqwertyuiopasdfghjklzxcv+.?%##(E|\/qwertyuioMasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcr+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopDsdfghjklzxcv+.?9##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@@@.&@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@#@@@@.&@@t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@u@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@|@@@@@\
@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@a@@@@@@@@@@@@/@@@@@.@@@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#7+=-~G<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{8()|\/a0cdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/a=cdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+2$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~W<>[]{}()|\/A\CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+%$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B8$$&@%#*+#~^<>[]f}()|\/ABCDEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**M@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+V~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>~]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\N1234567890$+.<C***@%#+=~^<>[]d}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$Y^&*()_++I%###@%*+=~^<>[]{W()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!,#$%^&*()_++I%###@%*+=~^<>[]{}()|i/!g#$%^/*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8R**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**j%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*1~^m>[]{}()|\/qwertyuiopas+I8***%#Y=~^<>[]{}()|\/qwerty1iopas+I8***%#*=~^<>X]{}()|\/qwertyuio9as+I8**\
I&@1@#*+D^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbMmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+o&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTjUIOPASDF+I%$$$*+=^<>[]I}()|\/QWERTYUIOPASDF@I%$$$*+=e<>[]{}()|\/QWERTYUIOPASDF+U%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$/*+=^<w[]{}()|\/QWERTYUIOPASDF+I%$E$*+=^<>[]{}r)|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFMI%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHG7D+I8&&&n~^<>[]{}()|\/ZXCVBNM&p8HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()q\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-5[]+I%3##=^<p[]{}()|\/!@#$%^&*M)_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^e>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$l^&*()_+-=[]+I%###=^E>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8**d^<>[]{}()|\/`~1233567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*x*^<>[]{}()|\/`~1234567890W=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~123456S890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1t*4567890-=S];+I8**\
I&@@@<>[]{}()|4/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abedefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRxT+.<%$$[]{}()|\/ABCDEFGHNJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}J)|\/ABCDEFCHIJKgMNaPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKL4NOPQRST+.<%$\
.+B**{}()|\/123456f890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*%)_+.+B**{}()|\/12345%7890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/b234567890!@#$%I&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopawdfghJklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/owertyuiopasdfghjklzxcv+.?%##()|\/qwertyufopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(y|\/qwertyuiopasdfgHjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@-@@@@@@@@@@@9@@@@+@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@.@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@a@,@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|~/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()o\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B&$$&@%#*+=~^&>[]{}()|\/ABCDEAGHI+.+B$$$&@%#*+=~^<>s]{}()|\/A5CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&Y%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[${}()|W/ABCDEFG\
.<C***@%#+=~^<>[]{}A)|\/1234567890$+w<C***@%#+=~^<>[]{}()|\/123456789Y$+.<C***@%#+=~^<>[]{}()|\/1234567890$6.<C***@U5+=~^<>[]{}()|\/G234567890$+.<C***@%#N=~^<>[]{}()|\/123456789o$+.<C***@%#+=~^<>[]{}()5\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12345~~89\
I%###L%n+=~^<>[]{9()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}+K|\/!@#$x^&*()X++I%###@%*+=~^<>/]{}()|\/!@#$%^&*()_+DI%###@%*+=~^<>[]{}()|\&!@#$%^&*(pH++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~E<>[]{}()Q\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>I]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyui_p%s+I8***%#*=~^<>[]{}(\|\/qwertyuiopas+I8***%#*=~^f>K]{}()|\/qwertyuiopas+I8***%#*=~E<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>u]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcv;nmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
7%$$$*+=^<>[]{}()|\/QWERTYUIOPmRDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOP_SzF+Z%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]P}()|\/8WERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAS+F+I%$$\
I8&&&+~C<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|e/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^Q>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%##+=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[-{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*8)_+-=[]+I%##\
I8***^<>[]{}()n\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**T^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{_()|\/`~1234567890-=[];+I8***^<>[]{}()|\1`~1234567890-=[];+v8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'o.,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/aqcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".z<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(z|\/ABCDEFGHIJKLMNOP:RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}(S|\/ABCDEFGHIJKLMNOPQPST+.<%y$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$V^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+P+B**x}()|\/1234567890!@#B%^&*()_+.+B**{}()|\/12K4567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789|!@#$%^&*()_-.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdCghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyucopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(C|\/qwertyuiopaidfghjklzxcv+.?%##()|\/qwurtyuiopasdfghjklzfcv+.?%##()|\Jq\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.9@@@@@@@@@@@@@@@@@@@@@@@r@@@@@@@@@@@@.&@@@@@@@@@I@@@@@@@@@@@@@@@@@@@Q@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@#@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@g@@@@@.@@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@.@@@@@@@@@@@@@@@4@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+w?%#*+=-~^<>[]{}L)|\/abcdefghijklmn+.?%#*+=-~^<>Z]{}()F\/abcdefghijklmn+.?k#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghiXklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}(0|\/abcdefghijkl\
.+B$$$&@%#*+=~^\>[]{}()|\/AUCDEWGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%@*+=B^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~|<>[]{}()|\/ABCiEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C=**@%#+=~^<>[]{}()|\/1234567890$+.<u***@%#+=~^<>o]{}()|\/1234567890$+.+C***+%#+=~^T>[]{}()|\/1234567890$+.<C***@%#+=T^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12W4567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>P]{}()|\/!@#$%^&*()_++I%###@%*+=~^<#[]{}()|\/!@#x%^&*()_++I%###@%*+=~V<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}N)|\/!@#$%^&b()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<b[]{}(q|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyu.opas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I+***%#*=~^<>[]{}()|\/qwertKuiopas+I8**\
IM@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^l>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkRhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml|jhof+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{2()|\/zxcvbn/lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcibnmlkjhgf+I&@P\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$O+=^P>[]{}(E|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYU$OPASDF+I%$$$*+=^#>[]K}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTjUIOPpSDFtI%$#\
I8&&&+~^<>Z]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<h[]{}()|\/ZXCVBNMLKJHGFD+I8&&~+~^<>Pd{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[v{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\mZ@CVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFDdI/&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()Y+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%3&*()_+u=[]+I%###=^<>[]{}()|\/!@y$%^&*()_+-=[]+I%###=^<>X]{}()|\/!@#$%^_*()_+w=[]+I%###=^<>[]{}(,|\/!@#$%^&*()_+-=[]+I%###3^<>[]{}()|\/!@#$%^&*()_+\=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<T[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[8;+I8***^2>[]{}()|\/`~1@34567890-=[];+I8***^<>[]{}()|\/`O1234567860-=[];+I8***^<>[]{}(T|\/`~1234567890-=z];+I8**\
I-@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@H@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghgj+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()2\/'".,f>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\zABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\7ABVDEFGHIJKLMNOPQRST+.<%v$[]{}()|\/ABCD@FGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCD7FGHIJKLjNOPQWST+.<%$$[]{}()|\/ABCDEF+HIJKLMNOPQRSj+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B/*{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^I*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789l!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|w\
.?%##()|\Pqwertyuiopasdfghjklzxcv+.?%##()|\/qwertyu/opasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.W%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\\qwertyuiopasdfghjklzxcv+.?%##()|N/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@.p@@@@@@@@@@@@@6@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@Y@@@@@@@@q@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@F@@@@@@@E@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@m@@@Z@@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()j\/abcdefghijklmn+.?%#*+=$~^<>i]0}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn6.?%#*+=-~^<>[]{}()2\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc@efghijklmn+.?%#*+=-~^<>[]1}()|\/abcdefghijkl\
|+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=i^<>[]{}3)|\/ABCDEFGHI+.+c$g$&@%#*+=~^<>[]{}()w\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+Q9B$$$&@%#*+=~^w>[]{}@)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDE*GHI+.+B$$$&@%#*+=~^<>[]{}()|\/P_CDzFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~x<1[]{}()|\/1234567z90$+.<C***@%#+=~^<>[]{}()|\/1234567890$X.<C***@%#+=~^<>[]{3()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123~567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<T[]{}(f|\/123456789\
I%###@%*+=~^<>[]{}()|\+!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<+[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++\%###@%*+=~^<>[]{}Z)|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
```\
\
\
\
## Join the community\
\
Connect with GPU kernel developers\
\
[JOIN DISCORD](https://discord.gg/sSJqgNnq6X)\
\
## Now Available\
\
Download RightNow Editor\
\
Download our editor and start optimizing your CUDA kernels today.\
\
## Windows\
\
Download\
\
Windows x64\
\
For Windows 11/10 x64\
\
Windows ARM\
\
For Windows 11/10 ARM\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)\
\
## Mac\
\
Download\
\
Mac Apple Silicon\
\
For M1, M2, M3, M4 Macs\
\
Mac Intel\
\
For Intel-based Macs\
\
Works on remote GPUs for free or our GPU emulator [Upgrade](/content/pricing/index.html)\
\
## Linux\
\
Download\
\
Linux x64\
\
AppImage • Debian, Ubuntu, Fedora\
\
Linux ARM\
\
AppImage • ARM64 distributions\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)
