mirror of
https://github.com/JessSystemV/zProtect.git
synced 2024-12-23 04:45:36 +00:00
136 lines
46 KiB
HTML
136 lines
46 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en-US">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<meta name="generator" content="VuePress 2.0.0-beta.49">
|
|
<style>
|
|
:root {
|
|
--c-bg: #fff;
|
|
}
|
|
html.dark {
|
|
--c-bg: #22272e;
|
|
}
|
|
html, body {
|
|
background-color: var(--c-bg);
|
|
}
|
|
</style>
|
|
<script>
|
|
const userMode = localStorage.getItem('vuepress-color-scheme');
|
|
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
|
|
document.documentElement.classList.toggle('dark', true);
|
|
}
|
|
</script>
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"><meta name="theme-color" content="#936edb"><meta name="og:title" content="zProtect Documentation"><meta name="og:type" content="website"><meta name="og:image" content="/og.png"><meta name="og:url" content="https://docs.zprotect.dev/"><title>Configuration Options | zProtect Documentation</title><meta name="description" content="Documentation for all things zProtect.">
|
|
<link rel="modulepreload" href="/assets/app.fe610a35.js"><link rel="modulepreload" href="/assets/config.html.4750604a.js"><link rel="modulepreload" href="/assets/config.html.24d9df8b.js"><link rel="prefetch" href="/assets/commandline.html.0cdd07e7.js"><link rel="prefetch" href="/assets/index.html.9efec093.js"><link rel="prefetch" href="/assets/privacy.html.b7d51f10.js"><link rel="prefetch" href="/assets/terms.html.c69bbe45.js"><link rel="prefetch" href="/assets/0.1.html.7d525fed.js"><link rel="prefetch" href="/assets/0.2.html.43bc391f.js"><link rel="prefetch" href="/assets/commandline.html.15f2e1ec.js"><link rel="prefetch" href="/assets/config.html.533c1ab4.js"><link rel="prefetch" href="/assets/index.html.3175b1e4.js"><link rel="prefetch" href="/assets/404.html.7d858b3d.js"><link rel="prefetch" href="/assets/commandline.html.18ab6d88.js"><link rel="prefetch" href="/assets/index.html.8005e5a3.js"><link rel="prefetch" href="/assets/privacy.html.5ecb4b69.js"><link rel="prefetch" href="/assets/terms.html.a0651db1.js"><link rel="prefetch" href="/assets/0.1.html.94430b3b.js"><link rel="prefetch" href="/assets/0.2.html.ad5891ed.js"><link rel="prefetch" href="/assets/commandline.html.4dc00259.js"><link rel="prefetch" href="/assets/config.html.2e9b9f19.js"><link rel="prefetch" href="/assets/index.html.7c543494.js"><link rel="prefetch" href="/assets/404.html.cbce7884.js"><link rel="prefetch" href="/assets/404.e86a7fd5.js"><link rel="prefetch" href="/assets/Layout.d3d80637.js">
|
|
<link rel="stylesheet" href="/assets/style.8bf88d10.css">
|
|
</head>
|
|
<body>
|
|
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class=""><img class="logo" src="/logo.png" alt="zProtect Documentation"><span class="site-name can-hide">zProtect Documentation</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a class="external-link" href="https://zprotect.dev" target="_self" aria-label="Return to zProtect.dev"><!--[--><!--]--> Return to zProtect.dev <!----><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-color-mode-button" title="toggle color mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><form class="search-box" role="search"><input type="search" autocomplete="off" spellcheck="false" value><!----></form></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a class="external-link" href="https://zprotect.dev" target="_self" aria-label="Return to zProtect.dev"><!--[--><!--]--> Return to zProtect.dev <!----><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">Documentation <!----></p><ul style="" class="sidebar-item-children"><!--[--><li><a href="/" class="sidebar-item" aria-label="General Information"><!--[--><!--]--> General Information <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="Configuration Options"><!--[--><!--]--> Configuration Options <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#introduction" class="router-link-active router-link-exact-active sidebar-item" aria-label="Introduction"><!--[--><!--]--> Introduction <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#value-types" class="router-link-active router-link-exact-active sidebar-item" aria-label="Value Types"><!--[--><!--]--> Value Types <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#boolean" class="router-link-active router-link-exact-active sidebar-item" aria-label="Boolean"><!--[--><!--]--> Boolean <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#string" class="router-link-active router-link-exact-active sidebar-item" aria-label="String"><!--[--><!--]--> String <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#string-array" class="router-link-active router-link-exact-active sidebar-item" aria-label="String Array"><!--[--><!--]--> String Array <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#simple-option" class="router-link-active router-link-exact-active sidebar-item" aria-label="Simple Option"><!--[--><!--]--> Simple Option <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#option-with-path" class="router-link-active router-link-exact-active sidebar-item" aria-label="Option with Path"><!--[--><!--]--> Option with Path <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#options" class="router-link-active router-link-exact-active sidebar-item" aria-label="Options"><!--[--><!--]--> Options <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#libraries" class="router-link-active router-link-exact-active sidebar-item" aria-label="libraries"><!--[--><!--]--> libraries <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#exclusions" class="router-link-active router-link-exact-active sidebar-item" aria-label="exclusions"><!--[--><!--]--> exclusions <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#forceexclusions" class="router-link-active router-link-exact-active sidebar-item" aria-label="ForceExclusions"><!--[--><!--]--> ForceExclusions <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#watermark" class="router-link-active router-link-exact-active sidebar-item" aria-label="Watermark"><!--[--><!--]--> Watermark <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#transformers" class="router-link-active router-link-exact-active sidebar-item" aria-label="Transformers"><!--[--><!--]--> Transformers <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#antidebug" class="router-link-active router-link-exact-active sidebar-item" aria-label="AntiDebug"><!--[--><!--]--> AntiDebug <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#decompilercrasher" class="router-link-active router-link-exact-active sidebar-item" aria-label="DecompilerCrasher"><!--[--><!--]--> DecompilerCrasher <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#badannotationcrasher" class="router-link-active router-link-exact-active sidebar-item" aria-label="BadAnnotationCrasher"><!--[--><!--]--> BadAnnotationCrasher <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#flow" class="router-link-active router-link-exact-active sidebar-item" aria-label="Flow"><!--[--><!--]--> Flow <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#renamers" class="router-link-active router-link-exact-active sidebar-item" aria-label="Renamers"><!--[--><!--]--> Renamers <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#classrenamer" class="router-link-active router-link-exact-active sidebar-item" aria-label="ClassRenamer"><!--[--><!--]--> ClassRenamer <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#fieldrenamer" class="router-link-active router-link-exact-active sidebar-item" aria-label="FieldRenamer"><!--[--><!--]--> FieldRenamer <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#localvariablerenamer" class="router-link-active router-link-exact-active sidebar-item" aria-label="LocalVariableRenamer"><!--[--><!--]--> LocalVariableRenamer <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#methodrenamer" class="router-link-active router-link-exact-active sidebar-item" aria-label="MethodRenamer"><!--[--><!--]--> MethodRenamer <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#optimization" class="router-link-active router-link-exact-active sidebar-item" aria-label="Optimization"><!--[--><!--]--> Optimization <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#enumoptimiser" class="router-link-active router-link-exact-active sidebar-item" aria-label="EnumOptimiser"><!--[--><!--]--> EnumOptimiser <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#finalremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="FinalRemover"><!--[--><!--]--> FinalRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#hideclassmembers" class="router-link-active router-link-exact-active sidebar-item" aria-label="HideClassMembers"><!--[--><!--]--> HideClassMembers <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#insnremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="InsnRemover"><!--[--><!--]--> InsnRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#kotlinmetadataremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="KotlinMetadataRemover"><!--[--><!--]--> KotlinMetadataRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#nopinsnremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="NOPInsnRemover"><!--[--><!--]--> NOPInsnRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#removesignatures" class="router-link-active router-link-exact-active sidebar-item" aria-label="RemoveSignatures"><!--[--><!--]--> RemoveSignatures <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#poolers" class="router-link-active router-link-exact-active sidebar-item" aria-label="Poolers"><!--[--><!--]--> Poolers <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#numberpooler" class="router-link-active router-link-exact-active sidebar-item" aria-label="NumberPooler"><!--[--><!--]--> NumberPooler <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#stringpooler" class="router-link-active router-link-exact-active sidebar-item" aria-label="StringPooler"><!--[--><!--]--> StringPooler <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#shrinking" class="router-link-active router-link-exact-active sidebar-item" aria-label="Shrinking"><!--[--><!--]--> Shrinking <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#linenumberremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="LineNumberRemover"><!--[--><!--]--> LineNumberRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#localvariableremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="LocalVariableRemover"><!--[--><!--]--> LocalVariableRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#removeinnerclasses" class="router-link-active router-link-exact-active sidebar-item" aria-label="RemoveInnerClasses"><!--[--><!--]--> RemoveInnerClasses <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#sourcedebugremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="SourceDebugRemover"><!--[--><!--]--> SourceDebugRemover <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#sourcefileremover" class="router-link-active router-link-exact-active sidebar-item" aria-label="SourceFileRemover"><!--[--><!--]--> SourceFileRemover <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#shufflers" class="router-link-active router-link-exact-active sidebar-item" aria-label="Shufflers"><!--[--><!--]--> Shufflers <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/config.html#shufflefields" class="router-link-active router-link-exact-active sidebar-item" aria-label="ShuffleFields"><!--[--><!--]--> ShuffleFields <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#shufflemethods" class="router-link-active router-link-exact-active sidebar-item" aria-label="ShuffleMethods"><!--[--><!--]--> ShuffleMethods <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/config.html#shuffleclasses" class="router-link-active router-link-exact-active sidebar-item" aria-label="ShuffleClasses"><!--[--><!--]--> ShuffleClasses <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/config.html#example" class="router-link-active router-link-exact-active sidebar-item" aria-label="Example"><!--[--><!--]--> Example <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/commandline.html" class="sidebar-item" aria-label="Command Line Tool"><!--[--><!--]--> Command Line Tool <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Changelog <!----></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/changelog/0.2.html" class="sidebar-item" aria-label="zProtect 0.2"><!--[--><!--]--> zProtect 0.2 <!--[--><!--]--></a><!----></li><li><a href="/changelog/0.1.html" class="sidebar-item" aria-label="zProtect 0.1"><!--[--><!--]--> zProtect 0.1 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Legal <!----></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/privacy.html" class="sidebar-item" aria-label="Privacy Policy"><!--[--><!--]--> Privacy Policy <!--[--><!--]--></a><!----></li><li><a href="/terms.html" class="sidebar-item" aria-label="Terms of Service"><!--[--><!--]--> Terms of Service <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="configuration-options" tabindex="-1"><a class="header-anchor" href="#configuration-options" aria-hidden="true">#</a> Configuration Options</h1><h2 id="introduction" tabindex="-1"><a class="header-anchor" href="#introduction" aria-hidden="true">#</a> Introduction</h2><p>zProtect uses the <a href="https://en.wikipedia.org/wiki/YAML" target="_blank" rel="noopener noreferrer">YAML<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> data serialization language for configuring the behavior of the zProtect obfuscator. It is possible to hand-write the configuration file to upload on the web interface, however, you may wish to modify the <a href="#example">example file</a> or generate one using the <a href="/commandline.html" class="">command line tool</a>.</p><h2 id="value-types" tabindex="-1"><a class="header-anchor" href="#value-types" aria-hidden="true">#</a> Value Types</h2><p>There are a few value types used in the zProtect configuration, which are listed below.</p><h3 id="boolean" tabindex="-1"><a class="header-anchor" href="#boolean" aria-hidden="true">#</a> Boolean</h3><p>Only accepts <code>true</code> and <code>false</code> as the value.</p><p>For example:</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># A key with value as true</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key1</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">true</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># A key with value as false</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key2</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string" tabindex="-1"><a class="header-anchor" href="#string" aria-hidden="true">#</a> String</h3><p>Accepts any text character.</p><p>For example:</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># A key with a string value</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">value</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-array" tabindex="-1"><a class="header-anchor" href="#string-array" aria-hidden="true">#</a> String Array</h3><p>A list of <a href="#string"><code>strings</code></a>, separated by a newline and prefixed with a dash.</p><p>For example:</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># An array with entries</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;">- </span><span style="color:#CE9178;">something</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;">- </span><span style="color:#CE9178;">another thing</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># An empty array</span></span>
|
|
<span class="line"><span style="color:#569CD6;">empty</span><span style="color:#D4D4D4;">: []</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="simple-option" tabindex="-1"><a class="header-anchor" href="#simple-option" aria-hidden="true">#</a> Simple Option</h3><p>A <a href="#string-array"><code>string array</code></a> with a <a href="#boolean"><code>boolean</code></a> value <code>enabled</code>.</p><p>For example:</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># Option enabled</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">true</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="option-with-path" tabindex="-1"><a class="header-anchor" href="#option-with-path" aria-hidden="true">#</a> Option with Path</h3><p>A <a href="#string-array"><code>string array</code></a> with a <a href="#boolean"><code>boolean</code></a> key <code>enabled</code> and a <a href="#string"><code>string</code></a> key <code>path</code>.</p><p>For example:</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># Option enabled</span></span>
|
|
<span class="line"><span style="color:#569CD6;">key</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">true</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">path</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">something</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="options" tabindex="-1"><a class="header-anchor" href="#options" aria-hidden="true">#</a> Options</h2><p>These options specify runtime information and general configuration.</p><h3 id="libraries" tabindex="-1"><a class="header-anchor" href="#libraries" aria-hidden="true">#</a> libraries</h3><p>Dependencies required to obfuscate your jar to prevent "Not found" errors.</p><p>Value type: <a href="#string-array"><code>string array</code></a></p><h3 id="exclusions" tabindex="-1"><a class="header-anchor" href="#exclusions" aria-hidden="true">#</a> exclusions</h3><p>Class files and directories that should be ignored by the obfuscator. They will not have any obfuscation applied to them.</p><p>Value type: <a href="#string-array"><code>string array</code></a></p><h3 id="forceexclusions" tabindex="-1"><a class="header-anchor" href="#forceexclusions" aria-hidden="true">#</a> ForceExclusions</h3><div class="custom-container tip"><p class="custom-container-title">Note</p><p>Transformer priority will fix this in the future.</p></div><p>Class files and directories that should be blacklisted by the obfuscator before processing. This will prevent issues with exclusions if the regular exclusions fail for some unknown reason.</p><p>Value type: <a href="#string-array"><code>string array</code></a></p><h3 id="watermark" tabindex="-1"><a class="header-anchor" href="#watermark" aria-hidden="true">#</a> Watermark</h3><p>Adds a watermark to the obfuscated JAR for advertisement. Only removable for users with a Commercial License.</p><p>Value type: <a href="#boolean"><code>boolean</code></a></p><h2 id="transformers" tabindex="-1"><a class="header-anchor" href="#transformers" aria-hidden="true">#</a> Transformers</h2><p>These options specify wherether to enable available obfuscation techniques.</p><h3 id="antidebug" tabindex="-1"><a class="header-anchor" href="#antidebug" aria-hidden="true">#</a> AntiDebug <span class="badge warning" style="vertical-align:top;"><!--[-->incompatibilities<!--]--></span></h3><div class="custom-container tip"><p class="custom-container-title">Warning!</p><p>This option may cause issues with certain programs.</p></div><p>Blocks debugging options on terminal.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="decompilercrasher" tabindex="-1"><a class="header-anchor" href="#decompilercrasher" aria-hidden="true">#</a> DecompilerCrasher <span class="badge danger" style="vertical-align:top;"><!--[-->issues<!--]--></span></h3><div class="custom-container tip"><p class="custom-container-title">Warning!</p><p>This option is very buggy at the moment and will likely cause problems. You are strongly advised not to use this.</p></div><p>Manipulates instructions to crash decompilers.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="badannotationcrasher" tabindex="-1"><a class="header-anchor" href="#badannotationcrasher" aria-hidden="true">#</a> BadAnnotationCrasher</h3><p>Manipulates annotations to break bad decompilers. This should not cause any major issues.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="flow" tabindex="-1"><a class="header-anchor" href="#flow" aria-hidden="true">#</a> Flow</h3><p>Adds fake jumps, and such to code.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="renamers" tabindex="-1"><a class="header-anchor" href="#renamers" aria-hidden="true">#</a> Renamers</h2><p>Renames various components of your JAR's contents.</p><h3 id="classrenamer" tabindex="-1"><a class="header-anchor" href="#classrenamer" aria-hidden="true">#</a> ClassRenamer</h3><p>Renames class files.</p><p>Value type: <a href="#option-with-path"><code>option with path</code></a></p><h3 id="fieldrenamer" tabindex="-1"><a class="header-anchor" href="#fieldrenamer" aria-hidden="true">#</a> FieldRenamer</h3><p>Renames field names.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="localvariablerenamer" tabindex="-1"><a class="header-anchor" href="#localvariablerenamer" aria-hidden="true">#</a> LocalVariableRenamer</h3><p>Renames local variables.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="methodrenamer" tabindex="-1"><a class="header-anchor" href="#methodrenamer" aria-hidden="true">#</a> MethodRenamer</h3><p>Renames methods.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="optimization" tabindex="-1"><a class="header-anchor" href="#optimization" aria-hidden="true">#</a> Optimization</h2><p>Modifies or removes various aspects of your jar file to make debugging harder.</p><h3 id="enumoptimiser" tabindex="-1"><a class="header-anchor" href="#enumoptimiser" aria-hidden="true">#</a> EnumOptimiser</h3><p>Removes all clone call(s) and returns an array to optimize enum values.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="finalremover" tabindex="-1"><a class="header-anchor" href="#finalremover" aria-hidden="true">#</a> FinalRemover</h3><p>Removes finals from your code.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="hideclassmembers" tabindex="-1"><a class="header-anchor" href="#hideclassmembers" aria-hidden="true">#</a> HideClassMembers</h3><p>Mark classes as synthetic to hide them from bad decompilers.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="insnremover" tabindex="-1"><a class="header-anchor" href="#insnremover" aria-hidden="true">#</a> InsnRemover</h3><p>Removes the instructions <code>const_.</code> and <code>tableswitch</code>.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="kotlinmetadataremover" tabindex="-1"><a class="header-anchor" href="#kotlinmetadataremover" aria-hidden="true">#</a> KotlinMetadataRemover</h3><p>Removes Kotlin-specific Metadata such as <code>NotNull</code>, <code>Nullable</code>, etc.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="nopinsnremover" tabindex="-1"><a class="header-anchor" href="#nopinsnremover" aria-hidden="true">#</a> NOPInsnRemover</h3><p>Removes extended type information.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="removesignatures" tabindex="-1"><a class="header-anchor" href="#removesignatures" aria-hidden="true">#</a> RemoveSignatures</h3><p>Removes the signature attribute from classes and methods.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="poolers" tabindex="-1"><a class="header-anchor" href="#poolers" aria-hidden="true">#</a> Poolers</h2><p>Move values into an array to make the resulting JAR harder.</p><h3 id="numberpooler" tabindex="-1"><a class="header-anchor" href="#numberpooler" aria-hidden="true">#</a> NumberPooler</h3><p>Moves numbers into an array.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="stringpooler" tabindex="-1"><a class="header-anchor" href="#stringpooler" aria-hidden="true">#</a> StringPooler</h3><p>Moves strings into an array.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="shrinking" tabindex="-1"><a class="header-anchor" href="#shrinking" aria-hidden="true">#</a> Shrinking</h2><p>Remove various attributes to make it harder to understand the resulting JAR.</p><h3 id="linenumberremover" tabindex="-1"><a class="header-anchor" href="#linenumberremover" aria-hidden="true">#</a> LineNumberRemover</h3><p>Removes line numbers so StackTraces show <code>(Unknown)</code> on errors.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="localvariableremover" tabindex="-1"><a class="header-anchor" href="#localvariableremover" aria-hidden="true">#</a> LocalVariableRemover</h3><p>Removes the local variable attribute from methods.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="removeinnerclasses" tabindex="-1"><a class="header-anchor" href="#removeinnerclasses" aria-hidden="true">#</a> RemoveInnerClasses</h3><p>Removes various attributes such as <code>outerClass</code>, <code>outerMethod</code>, etc. from the class.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="sourcedebugremover" tabindex="-1"><a class="header-anchor" href="#sourcedebugremover" aria-hidden="true">#</a> SourceDebugRemover</h3><p>Removes the <code>SourceDebug</code> attribute from the class.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="sourcefileremover" tabindex="-1"><a class="header-anchor" href="#sourcefileremover" aria-hidden="true">#</a> SourceFileRemover</h3><p>Removes the <code>SourceFile</code> attribute from the class.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="shufflers" tabindex="-1"><a class="header-anchor" href="#shufflers" aria-hidden="true">#</a> Shufflers</h2><p>Randomly shuffles various elements of your jar file to make it more difficult to find them.</p><h3 id="shufflefields" tabindex="-1"><a class="header-anchor" href="#shufflefields" aria-hidden="true">#</a> ShuffleFields</h3><p>Randomly shuffles elements in the mutable list of fields.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="shufflemethods" tabindex="-1"><a class="header-anchor" href="#shufflemethods" aria-hidden="true">#</a> ShuffleMethods</h3><p>Randomly shuffles elements in the mutable list of methods.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h3 id="shuffleclasses" tabindex="-1"><a class="header-anchor" href="#shuffleclasses" aria-hidden="true">#</a> ShuffleClasses</h3><p>Randomly shuffles elements in the mutable list of classes.</p><p>Value type: <a href="#simple-option"><code>simple option</code></a></p><h2 id="example" tabindex="-1"><a class="header-anchor" href="#example" aria-hidden="true">#</a> Example</h2><p>Below is a fully functional example configuration file with some zProtect transformers enabled and some disabled.</p><div class="language-yaml ext-yml line-numbers-mode"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#6A9955;"># zProtect Configuration File Version 1</span></span>
|
|
<span class="line"><span style="color:#6A9955;"># Reference: https://docs.zprotect.dev/config.html</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># May cause issues with certain programs.</span></span>
|
|
<span class="line"><span style="color:#569CD6;">antiDebug</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># Strongly advised not to use this.</span></span>
|
|
<span class="line"><span style="color:#569CD6;">decompilerCrasher</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">badAnnotationCrasher</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">true</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">flow</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">classRenamer</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">path</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">""</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">fieldRenamer</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">localVariableRenamer</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">methodRenamer</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># Optimization</span></span>
|
|
<span class="line"><span style="color:#569CD6;">enumOptimiser</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">finalRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">hideClassMembers</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">insnRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">kotlinMetadataRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">NOPInsnRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">removeSignatures</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># Poolers</span></span>
|
|
<span class="line"><span style="color:#569CD6;">numberPooler</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">stringPooler</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># Shrinking</span></span>
|
|
<span class="line"><span style="color:#569CD6;">lineNumberRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">localVariableRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">removeInnerClasses</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">sourceDebugRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">sourceFileRemover</span><span style="color:#D4D4D4;">:</span></span>
|
|
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">enabled</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#6A9955;"># Shufflers</span></span>
|
|
<span class="line"><span style="color:#569CD6;">shuffleFields</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">shuffleMethods</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#569CD6;">shuffleClasses</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--[--><!--]--></div><footer class="page-meta"><div class="meta-item edit-link"><a class="external-link meta-item-label" href="https://github.com/zProtect-Development/Documentation/edit/main/docs/config.md" rel="noopener noreferrer" target="_blank" aria-label="Edit this page"><!--[--><!--]--> Edit this page <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><nav class="page-nav"><p class="inner"><span class="prev"><a href="/" class="" aria-label="General Information"><!--[--><!--]--> General Information <!--[--><!--]--></a></span><span class="next"><a href="/commandline.html" class="" aria-label="Command Line Tool"><!--[--><!--]--> Command Line Tool <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
<script type="module" src="/assets/app.fe610a35.js" defer></script>
|
|
</body>
|
|
</html>
|