diff --git a/.github/workflows/smoke_test.yml b/.github/workflows/smoke_test.yml index 309424f3..bc36af66 100644 --- a/.github/workflows/smoke_test.yml +++ b/.github/workflows/smoke_test.yml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest, macos-11, macos-10] python-version: [3.8, 3.9] steps: diff --git a/README.md b/README.md index a58e270f..71201106 100644 --- a/README.md +++ b/README.md @@ -29,319 +29,80 @@ Twitter
- An Obfuscation-Neglect Android Malware Scoring System

-Quark-Engine is also bundled with [Kali Linux](https://tools.kali.org/tools-listing), [BlackArch](https://blackarch.org/mobile.html). -:shipit: A trust-worthy, practical tool that's ready to boost up your malware reverse engineering. - -## Quark Script - Ecosystem for Mobile Security Tools +# Quark Script - Dig Vulnerabilities in the BlackBox ### Innovative & Interactive -The goal of Quark Script aims to provide an innovative way for mobile security researchers to analyze or **pentest** the targets. - -Based on Quark, we integrate decent tools as Quark Script APIs and make them exchange valuable intelligence to each other. This enables security researchers to **interact** with staged results and perform **creative** analysis with Quark Script. +* The goal of Quark Script aims to provide an innovative way for mobile security researchers to analyze or **pentest** the targets. +* Based on Quark, we integrate decent tools as Quark Script APIs and make them exchange valuable intelligence to each other. This enables security researchers to **interact** with staged results and perform **creative** analysis with Quark Script. ### Dynamic & Static Analysis -In Quark script, we integrate not only static analysis tools (e.g. Quark itself) but also dynamic analysis tools (e.g. [objection](https://github.com/sensepost/objection)). +* In Quark script, we integrate not only static analysis tools (e.g. Quark itself) but also dynamic analysis tools (e.g. [objection](https://github.com/sensepost/objection)). ### Re-Usable & Sharable -Once the user creates a Quark script for specific analysis scenario. The script can be used in another targets. Also, the script can be shared to other security researchers. This enables the exchange of knowledges. +* Once the user creates a Quark script for specific analysis scenario. The script can be used in another targets. Also, the script can be shared to other security researchers. This enables the exchange of knowledges. ### More APIs to come -Quark Script is now in a beta version. We'll keep releasing practical APIs and analysis scenarios. +* Quark Script is now in a beta version. We'll keep releasing practical APIs and analysis scenarios. +* **See API document [here](https://quark-engine.readthedocs.io/en/latest/quark_script.html#introduce-of-quark-script-apis).** -**See API document [here](https://quark-engine.readthedocs.io/en/latest/quark_script.html#introduce-of-quark-script-apis).** +# CWE Showcases -# 2022 CWE Top 25 Showcases +[CWE-20](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-20-in-android-application-diva-apk) | [CWE-89](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-89-in-android-application-androgoat-apk) | [CWE-94](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-94-in-android-application-ovaa-apk) | [CWE-312](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-312-in-android-application-ovaa-apk) | [CWE-319](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-319-in-android-application-ovaa-apk) | [CWE-327](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-327-in-android-application-injuredandroid-apk) | [CWE-532](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-532-in-android-application-dvba-apk) | [CWE-749](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-749-in-android-application-mstg-android-java-apk) | [CWE-780](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-780-in-android-application-mstg-android-java-apk) | [CWE-798](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-798-in-android-application-ovaa-apk) | [CWE-921](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-921-in-android-application-ovaa-apk) | [CWE-926](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-926-in-android-application-dvba-apk) -* [CWE-798](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-798-in-android-application-ovaa-apk) -* [CWE-94](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-94-in-android-application-ovaa-apk) -* [CWE-921](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-921-in-android-application-ovaa-apk) -* [CWE-312](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-312-in-android-application-ovaa-apk) -* [CWE-89](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-89-in-android-application-androgoat-apk) +# Quick Start -# Other CWE Showcases +In this section, we will show how to detect CWE-798 with Quark Script. -* [CWE-926](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-926-in-android-application-dvba-apk) -* [CWE-749](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-749-in-android-application-mstg-android-java-apk) -* [CWE-532](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-532-in-android-application-dvba-apk) -* [CWE-780](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-780-in-android-application-mstg-android-java-apk) -* [CWE-319](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-319-in-android-application-ovaa-apk) +### Step 1: Environments Requirements -## Quark Web Report +* Quark requires Python 3.8 or above. -With the following command, you can easily analyze the Android sample and output the web report. +### Step 2: Install Quark Engine -See our demo [here](https://pulorsok.github.io/ruleviewer/web-report-demo). - -```bash -quark -a sample.apk -s -w quark_report.html -``` - -![](https://i.imgur.com/uizHQan.jpg) - -## Navigate the Rules - -To navigate the latest rules for Quark, please visit the [Detection Rules Viewer](https://quark-engine.github.io/ruleviewer/)! In this viewer, you can use labels and keywords to search for the rules you need. - -
-Illustration - -![An illustration of the rule viewer](https://camo.githubusercontent.com/d2218ac92c2f4bff21dad45ddd693f1e2d61cc173fb89d4ce17c727d8375b379/68747470733a2f2f692e696d6775722e636f6d2f626f44535862662e676966) - -
- -## Why Quark? - -Android malware analysis engine is not a new story. Every antivirus company has their own secrets to build it. With curiosity, we develop a malware scoring system from the perspective of Taiwan Criminal Law in an easy but solid way. - -We have an order theory of criminal which explains stages of committing a crime. For example, crime of murder consists of five stages, they are determined, conspiracy, preparation, start and practice. The latter the stage the more we’re sure that the crime is practiced. - -According to the above principle, `we developed our order theory of android malware`. We developed five stages to see if the malicious activity is being practiced. They are 1. Permission requested. 2. Native API call. 3. Certain combination of native API. 4. Calling sequence of native API. 5. APIs that handle the same register. We not only define malicious activities and their stages but also develop weights and thresholds for calculating the threat level of a malware. - -Malware evolved with new techniques to gain difficulties for reverse engineering. Obfuscation is one of the most commonly used techniques. In this talk, we present a Dalvik bytecode loader with the order theory of android malware to neglect certain cases of obfuscation. - -Our Dalvik bytecode loader consists of functionalities such as 1. Finding cross reference and calling sequence of the native API. 2. Tracing the bytecode register. The combination of these functionalities (yes, the order theory) not only can neglect obfuscation but also match perfectly to the design of our malware scoring system. - -## Easy to Use and Reading Friendly Report - -Quark provides **7 flexible report formats** and **2 powerful features** to boost your analysis. - -7 Types of Report Formats: - -* [Summary Report](https://github.com/quark-engine/quark-engine#summary-report) -* [Detail Report](https://github.com/quark-engine/quark-engine#detail-report) -* [Web Report](https://github.com/quark-engine/quark-engine#quark-web-report) -* [Label-based Report](https://github.com/quark-engine/quark-engine#label-based-report) -* [Behaviors Comparison Radar Chart](https://github.com/quark-engine/quark-engine#behaviors-comparison-radar-chart) -* [Call Graph](https://github.com/quark-engine/quark-engine#call-graph-for-every-potential-malicious-activity) -* [Rule Classification](https://github.com/quark-engine/quark-engine#rules-classification) - -2 Features to Boost Your Analysis: - -* [Radiocontrast](https://github.com/quark-engine/quark-engine#behaviors-comparison-radar-chart) -* [Parallelizing Quark](https://github.com/quark-engine/quark-engine#parallelizing-quark) - -Please see below for more details. - -## Quick Start - -### Requirements - -* Python 3.8+ -* git -* graphviz -* click >= 8.0.1 (For CLI supports) - -### Installation +* Install Quark Engine by running: ```bash $ pip3 install -U quark-engine ``` -### Get the Latest Rules - -Now you can download [the Quark official ruleset](https://github.com/quark-engine/quark-rules) to your home directory with a simple command. - -```bash -$ freshquark -``` - -Check `--help` to see the detailed usage description. - -```bash -$ quark --help -``` - -### Test It Out - -You may refer to the [Quark Engine Document](https://quark-engine.readthedocs.io/en/latest/) for more details of testing and development information. - -## Available Report or Features - -### Summary Report - -Examine with rules. - -```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s -``` - -There is the possibility to select only one label to filter the rules: - -```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s network -``` - -There is also the possibility to select only one rule: - -```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s -``` - -
-Result - -![](https://i.imgur.com/v7ehRW0.png) - -
- -Note that if you want to select the default rules of Quark, the path to the ruleset is `$HOME/.quark-engine/quark-rules/rules/`. - -### Detail Report - -This is how we examine a real android malware (candy corn) with one single rule (crime). - -```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d -``` - -There is the possibility to select only one label to filter the rules: - -```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d network -``` +### Step 3: Prepare Quark Script, Detection Rule and the Sample File -There is also the possibility to select only one rule: +1. Get the CWE-798 Quark Script and the detection rule [here](https://quark-engine.readthedocs.io/en/latest/quark_script.html#detect-cwe-798-in-android-application-ovaa-apk). +2. Get the sampe file (ovaa.apk) [here](https://github.com/dark-warlord14/ovaa/releases/tag/1.0). +3. Put the script, detection rule, and sample file in the same directory. +4. Edit accordingly to the file names: ```bash -quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d +SAMPLE_PATH = "ovaa.apk" +RULE_PATH = "findSecretKeySpec.json" +# Now you are ready to run the script! ``` -
-Result - -![](https://i.imgur.com/LFLFpvc.png) - -
- -Note that if you want to select the default rules of Quark, the path to the ruleset is `$HOME/.quark-engine/quark-rules/rules/`. - -### Label-based Report - -Check which topic (indicated by [labels](https://github.com/quark-engine/quark-rules/blob/master/label_desc.csv)) of the malware is more aggressive. +### Step 4: Run the script ```bash -quark -a Ahmyth.apk -l detailed -``` - -
-Result - -![](https://i.imgur.com/0GbBDfn.png) +$ python3 CWE-798.py -
- -### Behaviors Comparison Radar Chart - -With the following command, you can compare different APK actions based on the max confidence of rule labels and generate -a radar chart. - -```bash -quark -a first.apk -a second.apk -C +# You should now see the detection result in the terminal. +Found hard-coded AES key 49u5gh249gh24985ghf429gh4ch8f23f ``` -
-Result - -![](https://i.imgur.com/ClRWOei.png) - -
- -### Call Graph for Every Potential Malicious Activity - -You can add the `-g` option to the quark command, and you can -get the call graph (only those rules match with 100% confidence) - -```bash -quark -a Ahmyth.apk -s -g -``` - -
-Result - -![](https://i.imgur.com/5xcrcdN.png) - -
- -### Rules Classification - -You can add the `-c` option to the quark command, and you can -output the rules classification with the mutual parent function (only those rules match with 100% confidence). - -```bash -quark -a Ahmyth.apk -s -c -``` +* **Check the [document](https://quark-engine.readthedocs.io/en/latest/quark_script.html#quark-script) for more examples.** -
-Result +# Acknowledgments -![](https://i.imgur.com/YTK8V1x.png) - -
- -### Radiocontrast - -Radiocontrast is a Quark API that quickly generates Quark rules from a specified method. It builds up 100% matched rules by using native APIs in that method. The feature lets you easily expose the behavior of a method, just like radiocontrast. - -For example, we want to know the behavior of a method called `Lahmyth/mine/king/ahmyth/CameraManager;->startUp(I)V,` in Ahmyth.apk. -Here is the simplest way for Radiocontrast usage: - -```python -from quark.radiocontrast import RadioContrast - -# The target APK. -APK_PATH = "~/apk-malware-sample/Ahmyth.apk" - -# The method that you want to generate rules. -TARGET_METHOD = "Lahmyth/mine/king/ahmyth/CameraManager;->startUp(I)V" - -# The output directory for generated rules. -GENERATED_RULE_DIR = "~/generated_rules" - -radiocontrast = RadioContrast( - APK_PATH, - TARGET_METHOD, - GENERATED_RULE_DIR -) - -# param: web_editor: the file path for generated rules web editor. -# param: percentile_rank: the percentile number of api filter rank. -# For example, percentile_rank=0.2 use 20% least usage count APIs to generate rules -radiocontrast.generate_rule(percentile_rank=0.2, web_editor="ahmyth.html") -``` - -### Parallelizing Quark - -Now Quark supports multiprocessing for analyzing APKs parallelly. By adding the option `--multi-process`, you can set the number of processes. - -Note that Quark-Engine automatically limits this value to be less than or equal to the number of CPUs - 1. This restriction is done to avoid the CPU from running out of memory. - -```bash -quark -a Ahmyth.apk -s --multi-process 4 -``` - -### Upcoming Unstable Feature - -Now Quark also supports [Rizin](https://github.com/rizinorg/rizin) as one of our Android analysis frameworks. You can use option `--core-library` with `rizin` to enable the Rizin-based analysis library. - -```bash -quark -a Ahmyth.apk -s --core-library rizin -``` - -## Acknowledgments - -#### The Honeynet Project +### The Honeynet Project Honeynet.org logo -#### Google Summer Of Code +### Google Summer Of Code Quark-Engine has been participating in the GSoC under the Honeynet Project! @@ -351,19 +112,6 @@ Quark-Engine has been participating in the GSoC under the Honeynet Project! Stay tuned for the upcoming GSoC! Join the [Honeynet Slack chat](https://gsoc-slack.honeynet.org/) for more info. -## Quark MIT Program - -Quark MIT aims to create a **WIN-WIN** for both new comers and the community. - -For new comers, the community helps you to build a stronger resume by creating specific works that fit the job description of your **DREAM JOB**. - -For the community, Quark-Engine gets new energy by the work the new comers contribute. And the most important of all, the Quark community gets to **GROW**. - -* **Find more details [here](https://quark-engine.readthedocs.io/en/latest/quark_mit_program.html)** - -![](https://i.imgur.com/xXilFs8.png) - -## Core Values of Quark Engine Team +# Core Values of Quark Engine Team -* We love **battle fields**. We embrace **uncertainties**. We challenge **impossibles**. We **rethink** everything. We change the way people think. - And the most important of all, we benefit ourselves by benefit others **first**. +* We love **battle fields**. We embrace **uncertainties**. We challenge **impossibles**. We **rethink** everything. We change the way people think. And the most important of all, we benefit ourselves by benefit others **first**. diff --git a/docs/build/doctrees/addRules.doctree b/docs/build/doctrees/addRules.doctree index 7f9a7756..8357c0b9 100644 Binary files a/docs/build/doctrees/addRules.doctree and b/docs/build/doctrees/addRules.doctree differ diff --git a/docs/build/doctrees/coding_style.doctree b/docs/build/doctrees/coding_style.doctree index 3fe5693f..2588ff59 100644 Binary files a/docs/build/doctrees/coding_style.doctree and b/docs/build/doctrees/coding_style.doctree differ diff --git a/docs/build/doctrees/contribution.doctree b/docs/build/doctrees/contribution.doctree index 78e791d5..298768a8 100644 Binary files a/docs/build/doctrees/contribution.doctree and b/docs/build/doctrees/contribution.doctree differ diff --git a/docs/build/doctrees/dev.doctree b/docs/build/doctrees/dev.doctree index e185fb46..19ec52c3 100644 Binary files a/docs/build/doctrees/dev.doctree and b/docs/build/doctrees/dev.doctree differ diff --git a/docs/build/doctrees/dev_index.doctree b/docs/build/doctrees/dev_index.doctree index 7b8e6cce..c64a1b9d 100644 Binary files a/docs/build/doctrees/dev_index.doctree and b/docs/build/doctrees/dev_index.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index ab483dbc..6ded94f6 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 83fb8761..9b08a2b1 100644 Binary files a/docs/build/doctrees/index.doctree and b/docs/build/doctrees/index.doctree differ diff --git a/docs/build/doctrees/install.doctree b/docs/build/doctrees/install.doctree index 69e5e19a..37d7251e 100644 Binary files a/docs/build/doctrees/install.doctree and b/docs/build/doctrees/install.doctree differ diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 2e731931..730a193f 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -21,6 +21,7 @@ This guide will explain how to set up Quark, use it, and customize it. install_index quark_script quark_mit_program + quark_reports addRules rule_generation integration diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index eeb0519a..4e9a9f1f 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -236,16 +236,6 @@ div.body p, div.body dd, div.body li, div.body blockquote { a.headerlink { visibility: hidden; } -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - h1:hover > a.headerlink, h2:hover > a.headerlink, @@ -334,11 +324,15 @@ aside.sidebar { p.sidebar-title { font-weight: bold; } +nav.contents, +aside.topic, div.admonition, div.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, div.topic { border: 1px solid #ccc; padding: 7px; @@ -377,6 +371,8 @@ div.body p.centered { div.sidebar > :last-child, aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; @@ -384,6 +380,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, +nav.contents::after, +aside.topic::after, div.topic::after, div.admonition::after, blockquote::after { @@ -608,19 +606,26 @@ ol.simple p, ul.simple p { margin-bottom: 0; } -dl.footnote > dt, -dl.citation > dt { +aside.footnote > span, +div.citation > span { float: left; - margin-right: 0.5em; } - -dl.footnote > dd, -dl.citation > dd { +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { margin-bottom: 0em; } - -dl.footnote > dd:after, -dl.citation > dd:after { +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { content: ""; clear: both; } @@ -636,10 +641,6 @@ dl.field-list > dt { padding-left: 0.5em; padding-right: 5px; } -dl.field-list > dt:after { - content: ":"; -} - dl.field-list > dd { padding-left: 0.5em; diff --git a/docs/build/html/_static/css/badge_only.css b/docs/build/html/_static/css/badge_only.css index c718cee4..e380325b 100644 --- a/docs/build/html/_static/css/badge_only.css +++ b/docs/build/html/_static/css/badge_only.css @@ -1 +1 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/build/html/_static/css/theme.css b/docs/build/html/_static/css/theme.css index b2c29d0f..0d9ae7e1 100644 --- a/docs/build/html/_static/css/theme.css +++ b/docs/build/html/_static/css/theme.css @@ -1,4 +1,4 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dt:after,html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets,html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content dl.citation,.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content dl.citation code,.rst-content dl.citation tt,.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/build/html/addRules.html b/docs/build/html/addRules.html index d359d7ef..184c8c1e 100644 --- a/docs/build/html/addRules.html +++ b/docs/build/html/addRules.html @@ -1,7 +1,7 @@ - + Add Rules — quark-engine v22.10.3 documentation @@ -21,7 +21,7 @@ - + @@ -45,6 +45,7 @@
  • Installation
  • Quark Script
  • Quark MIT Program
  • +
  • Quark Report
  • Add Rules
  • Rule Generation
  • Integration
  • @@ -70,8 +71,8 @@
    diff --git a/docs/build/html/coding_style.html b/docs/build/html/coding_style.html index 194daed4..2f0fcc7f 100644 --- a/docs/build/html/coding_style.html +++ b/docs/build/html/coding_style.html @@ -1,7 +1,7 @@ - + Coding Style — quark-engine v22.10.3 documentation @@ -45,6 +45,7 @@
  • Installation
  • Quark Script
  • Quark MIT Program
  • +
  • Quark Report
  • Add Rules
  • Rule Generation
  • Integration
  • @@ -94,9 +95,9 @@
      -
    • - - +
    • »
    • +
    • Development »
    • +
    • Coding Style
    • View page source
    • diff --git a/docs/build/html/contribution.html b/docs/build/html/contribution.html index 880754b1..d66cfddc 100644 --- a/docs/build/html/contribution.html +++ b/docs/build/html/contribution.html @@ -1,7 +1,7 @@ - + Contribution — quark-engine v22.10.3 documentation @@ -45,6 +45,7 @@
    • Installation
    • Quark Script
    • Quark MIT Program
    • +
    • Quark Report
    • Add Rules
    • Rule Generation
    • Integration
    • @@ -76,8 +77,8 @@
        -
      • - +
      • »
      • +
      • Contribution
      • View page source
      • @@ -106,10 +107,6 @@

        Different stages of core members

        Core members

        ---- @@ -140,10 +137,6 @@

        Core members

        Alumni

        Name

        Contribution

        ---- @@ -176,9 +169,6 @@

        Consultants -

        -- diff --git a/docs/build/html/dev.html b/docs/build/html/dev.html index 653fb96a..f9666ecc 100644 --- a/docs/build/html/dev.html +++ b/docs/build/html/dev.html @@ -1,7 +1,7 @@ - + Development Notes — quark-engine v22.10.3 documentation @@ -45,6 +45,7 @@
      • Installation
      • Quark Script
      • Quark MIT Program
      • +
      • Quark Report
      • Add Rules
      • Rule Generation
      • Integration
      • @@ -80,9 +81,9 @@
          -
        • - - +
        • »
        • +
        • Development »
        • +
        • Development Notes
        • View page source
        • diff --git a/docs/build/html/dev_index.html b/docs/build/html/dev_index.html index 8e0e8121..74dc455c 100644 --- a/docs/build/html/dev_index.html +++ b/docs/build/html/dev_index.html @@ -1,7 +1,7 @@ - + Development — quark-engine v22.10.3 documentation @@ -45,6 +45,7 @@
        • Installation
        • Quark Script
        • Quark MIT Program
        • +
        • Quark Report
        • Add Rules
        • Rule Generation
        • Integration
        • @@ -74,8 +75,8 @@
            -
          • - +
          • »
          • +
          • Development
          • View page source
          • diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 0facf97c..536e498c 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -42,6 +42,7 @@
          • Installation
          • Quark Script
          • Quark MIT Program
          • +
          • Quark Report
          • Add Rules
          • Rule Generation
          • Integration
          • @@ -67,8 +68,8 @@
              -
            • - +
            • »
            • +
            • Index
            @@ -569,7 +570,7 @@

            I

          • insert_genrule_report_html() (quark.webreport.generate.ReportGenerator method)
          • -
          • insert_radarechart_html() (quark.webreport.generate.ReportGenerator method) +
          • insert_radarchart_html() (quark.webreport.generate.ReportGenerator method)
          • insert_report_html() (quark.webreport.generate.ReportGenerator method)
          • diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 2c30fc7c..a9479c1a 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -1,7 +1,7 @@ - + Quark-Engine Book — quark-engine v22.10.3 documentation @@ -44,6 +44,7 @@
          • Installation
          • Quark Script
          • Quark MIT Program
          • +
          • Quark Report
          • Add Rules
          • Rule Generation
          • Integration
          • @@ -69,8 +70,8 @@
              -
            • - +
            • »
            • +
            • Quark-Engine Book
            • View page source
            • @@ -97,6 +98,7 @@

              Quark-Engine BookQuark Script
            • Quark MIT Program
                @@ -119,6 +122,17 @@

                Quark-Engine BookContact us

            • +
            • Quark Report +
            • Add Rules
            • Rule Generation
              • CLI Usage
              • diff --git a/docs/build/html/install.html b/docs/build/html/install.html index 7ff4069a..8a07b379 100644 --- a/docs/build/html/install.html +++ b/docs/build/html/install.html @@ -1,7 +1,7 @@ - + Installing Quark-Engine — quark-engine v22.10.3 documentation @@ -49,6 +49,7 @@
              • Quark Script
              • Quark MIT Program
              • +
              • Quark Report
              • Add Rules
              • Rule Generation
              • Integration
              • @@ -74,9 +75,9 @@
                  -
                • - - +
                • »
                • +
                • Installation »
                • +
                • Installing Quark-Engine
                • View page source
                • diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index c7399e33..00eeceba 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 168a0e3f..562de76e 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -45,6 +45,7 @@
                • Installation
                • Quark Script
                • Quark MIT Program
                • +
                • Quark Report
                • Add Rules
                • Rule Generation
                • Integration
                • @@ -70,8 +71,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Search
                  diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index a1b54631..0a9887e7 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["addRules", "coding_style", "contribution", "dev", "dev_index", "doc", "faq", "index", "install", "install_index", "integration", "modules", "organization", "quark", "quark.core", "quark.core.axmlreader", "quark.core.interface", "quark.core.struct", "quark.evaluator", "quark.forensic", "quark.script", "quark.script.frida", "quark.utils", "quark.webreport", "quark_inside_index", "quark_inside_objects", "quark_inside_overview", "quark_inside_workflow", "quark_mit_program", "quark_script", "rule_generation", "testing"], "filenames": ["addRules.rst", "coding_style.rst", "contribution.rst", "dev.rst", "dev_index.rst", "doc.rst", "faq.rst", "index.rst", "install.rst", "install_index.rst", "integration.rst", "modules.rst", "organization.rst", "quark.rst", "quark.core.rst", "quark.core.axmlreader.rst", "quark.core.interface.rst", "quark.core.struct.rst", "quark.evaluator.rst", "quark.forensic.rst", "quark.script.rst", "quark.script.frida.rst", "quark.utils.rst", "quark.webreport.rst", "quark_inside_index.rst", "quark_inside_objects.rst", "quark_inside_overview.rst", "quark_inside_workflow.rst", "quark_mit_program.rst", "quark_script.rst", "rule_generation.rst", "testing.rst"], "titles": ["Add Rules", "Coding Style", "Contribution", "Development Notes", "Development", "Updating Documentation", "FAQ", "Quark-Engine Book", "Installing Quark-Engine", "Installation", "Integration", "quark", "Organization", "quark package", "quark.core package", "quark.core.axmlreader package", "quark.core.interface package", "quark.core.struct package", "quark.evaluator package", "quark.forensic package", "quark.script package", "quark.script.frida package", "quark.utils package", "quark.webreport package", "Quark-Engine Inside", "Quark-Engine Objects Introduction", "Quark-Engine Project Overview", "Quark-Engine Workflow", "Quark MIT Program", "Quark Script", "Rule Generation", "Testing Quark-Engine"], "terms": {"android": [0, 7, 8, 10, 14, 15, 16, 19, 22, 25, 26, 27], "malwar": [0, 2, 8, 10, 22, 27, 29, 30, 31], "analysi": [0, 7, 10, 11, 13, 18, 27], "engin": [0, 1, 2, 3, 5, 9, 10, 13, 17, 28, 29], "i": [0, 1, 2, 3, 7, 8, 10, 12, 13, 14, 16, 17, 20, 21, 23, 25, 26, 27, 28, 30, 31], "new": [0, 3, 6, 28], "stori": 0, "everi": [0, 28], "antiviru": 0, "compani": 0, "ha": [0, 20, 27, 29], "own": [0, 1, 29], "secret": 0, "build": [0, 1, 5, 10, 28, 30, 31], "With": [0, 25], "curios": 0, "we": [0, 1, 3, 5, 6, 10, 17, 25, 27, 28, 29, 30, 31], "develop": [0, 1, 2, 6, 7], "score": [0, 2, 7, 8, 10, 14, 17, 24, 25, 26, 29, 30], "system": [0, 2, 4, 7, 8, 26], "from": [0, 1, 3, 8, 10, 13, 14, 16, 17, 20, 21, 22, 25, 26, 27, 29, 30], "perspect": 0, "taiwan": 0, "crimin": 0, "law": 0, "an": [0, 1, 2, 7, 8, 12, 17, 20, 22, 25, 27, 29, 30, 31], "easi": 0, "solid": 0, "wai": [0, 6, 10, 29, 30], "have": [0, 1, 3, 7, 8, 17, 25, 27, 29], "order": [0, 17, 25, 27, 30], "theori": [0, 14], "which": [0, 1, 14, 17, 19, 25, 27, 29], "explain": [0, 4, 6, 7, 9, 24], "stage": [0, 7, 13, 14, 17, 24, 26, 27, 29], "commit": [0, 1, 3], "crime": [0, 10, 14, 17, 23, 25, 27, 29, 30], "For": [0, 10, 17, 27, 28, 30, 31], "exampl": [0, 1, 10, 17, 25, 27, 29, 30, 31], "murder": 0, "consist": 0, "five": [0, 14, 17, 24, 26, 27], "thei": [0, 12, 25], "ar": [0, 1, 3, 6, 12, 13, 20, 25, 27, 28, 29], "determin": [0, 12], "conspiraci": 0, "prepar": 0, "start": [0, 1, 21, 25, 27], "practic": [0, 1, 17, 29], "The": [0, 1, 2, 6, 10, 12, 13, 17, 25, 26, 27, 29, 30], "latter": 0, "more": [0, 1, 12, 22, 28], "re": [0, 1, 6, 8], "sure": [0, 1, 29], "accord": [0, 13, 14, 16, 17, 25, 27, 30], "abov": [0, 23, 25, 27, 29], "principl": [0, 25, 27, 30], "our": [0, 2, 3, 6, 13, 25, 26, 27, 28], "see": [0, 1, 8, 27, 29], "malici": [0, 7, 25, 27], "activ": [0, 2, 13, 14, 16, 20, 29], "being": [0, 25], "permiss": [0, 1, 8, 10, 13, 14, 16, 17, 25, 27, 29], "request": [0, 3, 6, 17, 27, 29], "nativ": [0, 8, 10, 14, 16, 17, 22, 25, 27, 30], "api": [0, 2, 7, 10, 13, 14, 16, 17, 19, 20, 21, 22, 25, 27], "call": [0, 8, 10, 14, 17, 18, 20, 21, 22, 25, 27, 29, 30], "certain": [0, 27], "combin": [0, 10, 27, 30], "sequenc": [0, 10, 27], "handl": [0, 4, 12, 27], "same": [0, 7, 14, 25, 27, 29], "regist": [0, 10, 14, 17, 20, 25, 27], "onli": [0, 14, 16, 29], "defin": [0, 1, 6, 12, 14, 16, 17, 20, 25, 26, 27, 30], "also": [0, 1, 6, 27, 29, 31], "weight": [0, 7, 10, 11, 13, 14, 17, 24, 25, 26], "threshold": [0, 7, 8, 14, 27], "calcul": [0, 7, 13, 17, 22, 24, 26], "threat": [0, 7], "level": [0, 1, 7, 14, 24], "But": 0, "befor": [0, 14, 29], "how": [0, 3, 4, 7, 8, 9, 24, 29], "set": [0, 7, 8, 13, 14, 16, 17, 19, 22, 23, 27, 29, 30], "need": [0, 1, 6, 14, 28], "correspond": [0, 14, 15, 16, 17, 21, 25, 26, 31], "send": [0, 10, 21, 25, 27, 28, 29], "locat": [0, 10, 14, 16, 27, 29], "via": [0, 10, 27], "sm": [0, 10, 27], "shown": [0, 22], "below": [0, 12, 25, 27, 28, 30], "us": [0, 1, 3, 7, 8, 10, 13, 14, 17, 21, 22, 25, 26, 27, 30, 31], "json": [0, 8, 10, 13, 14, 17, 23, 24, 25], "format": [0, 4, 13, 14, 25], "construct": 0, "send_sm": [0, 10, 27], "access_coarse_loc": [0, 10, 27], "access_fine_loc": [0, 10, 27], "class": [0, 1, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27, 29], "landroid": [0, 10, 25, 27, 29], "telephoni": [0, 10, 27], "telephonymanag": [0, 10, 27], "method": [0, 1, 8, 10, 13, 14, 16, 17, 18, 20, 21, 22, 25, 27, 30], "getcellloc": [0, 10, 22, 27], "descriptor": [0, 8, 10, 13, 14, 16, 17, 18, 20, 22, 29], "cellloc": [0, 10], "smsmanag": [0, 10, 27], "sendtextmessag": [0, 10, 22, 27], "ljava": [0, 10, 14, 16, 29], "lang": [0, 10, 14, 16, 29], "string": [0, 4, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 29], "app": [0, 10, 21, 25, 29, 31], "pendingint": [0, 10, 25], "v": [0, 6, 10, 25, 29, 30, 31], "4": [0, 1, 10, 15, 17, 24], "so": [0, 1, 7, 26, 27], "let": [0, 10, 29, 30, 31], "me": 0, "walk": 0, "you": [0, 1, 2, 3, 5, 6, 7, 8, 13, 25, 27, 29, 30, 31], "through": [0, 27, 29], "file": [0, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 30], "first": [0, 6, 7, 14, 16, 27, 29], "action": [0, 17], "target": [0, 10, 13, 17, 20, 21, 29, 30], "In": [0, 1, 10, 25, 27, 29], "thi": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 17, 20, 23, 24, 25, 27, 28, 29, 30, 31], "info": [0, 1, 12], "therefor": [0, 25], "where": [0, 1, 3, 7, 8, 14], "fill": 0, "apk": [0, 7, 8, 10, 13, 14, 16, 17, 19, 20, 22, 24, 25, 26, 30, 31], "instanc": [0, 14, 16, 17, 20, 21, 25, 29], "inform": [0, 6, 12, 14, 17, 20, 23, 24, 25, 26, 29, 30], "mean": [0, 3], "field": [0, 15, 27], "can": [0, 1, 2, 5, 7, 10, 25, 26, 27, 29, 30], "2": [0, 10, 13, 15, 17, 22, 24, 30], "find": [0, 13, 14, 16, 20, 25, 27, 28, 29], "kei": [0, 17, 28], "do": [0, 1, 7, 10, 17], "And": [0, 1, 12, 28, 30], "sinc": [0, 1, 6, 25], "name": [0, 2, 4, 8, 14, 15, 16, 17, 18, 20, 21, 25, 26, 27, 29, 30], "self": [0, 1, 14, 16, 25, 26, 27], "both": [0, 25, 28, 29], "like": [0, 3, 5, 6, 10, 25, 27, 29, 30], "keep": [0, 7, 29, 30], "simpl": [0, 3, 10, 29], "than": [0, 12, 26], "3": [0, 13, 15, 17, 24], "further": [0, 27], "check": [0, 6, 13, 14, 20, 21, 24, 25, 29], "whether": [0, 25, 27], "If": [0, 1, 3, 5, 6, 12, 27, 29], "sai": 0, "caught": 0, "don": [0, 3], "t": [0, 3, 8, 12, 25, 31], "anyth": 0, "adjust": [0, 6], "know": [0, 3, 10, 25, 27, 30], "might": [0, 1], "wrap": 0, "other": [0, 2, 12, 25, 29, 30], "xref": [0, 14, 16], "solv": 0, "problem": [0, 6, 12], "right": 0, "confid": [0, 8, 10, 14, 17, 22, 23, 27], "pleas": [0, 1, 3, 6, 8, 27, 29], "place": [0, 1], "5": [0, 15, 22, 24, 28, 30], "oper": [0, 25], "paramet": [0, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 29, 30], "100": [0, 8, 10, 23, 30], "As": [0, 1, 2, 7, 25, 27], "updat": [0, 3, 6, 7], "part": [0, 1, 7, 20, 21, 26, 29], "later": 0, "clean": [1, 5], "structur": [1, 22, 26], "veri": 1, "sustain": 1, "project": [1, 2, 3, 7, 24], "cuckoo": 1, "sandbox": 1, "good": 1, "follow": [1, 2, 5, 6, 8, 27, 30], "most": [1, 12, 28], "maintain": 1, "base": [1, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 29, 30], "help": [1, 3, 5, 8, 27, 28], "out": [1, 6, 20, 25, 29], "refactor": 1, "requir": [1, 7, 8, 12, 14, 25], "try": [1, 6], "much": 1, "possibl": [1, 6, 15, 19], "your": [1, 3, 6, 28, 29], "essenti": 1, "quark": [1, 2, 3, 4, 5, 9, 10, 30], "": [1, 3, 4, 6, 8, 9, 12, 14, 25, 27, 29, 30, 31], "pep": 1, "8": [1, 15, 29], "guid": [1, 7], "python": [1, 6, 10, 13, 15, 20, 21, 22, 25, 26, 29], "257": 1, "docstr": 1, "convent": 1, "all": [1, 3, 7, 8, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30], "charact": 1, "filenam": [1, 14, 16, 19, 23], "should": [1, 12], "lowercas": 1, "letter": 1, "exist": [1, 6, 29], "sourc": [1, 3, 5, 7, 8], "http": [1, 6, 8, 13, 17, 29, 31], "rtfd": 1, "io": [1, 29], "gplv3": 1, "copi": [1, 29], "must": [1, 25], "space": 1, "tab": 1, "enforc": 1, "make": [1, 5, 6, 7, 29], "configur": [1, 29], "editor": [1, 7, 13], "properli": 1, "caus": [1, 6, 29], "malfunct": 1, "limit": [1, 8], "79": 1, "separ": [1, 22, 30], "definit": 1, "top": [1, 14, 17, 25], "function": [1, 13, 14, 16, 17, 24, 26, 27, 29], "one": [1, 2, 6, 12, 25, 31], "insid": [1, 5, 7, 10, 19, 20, 29], "singl": [1, 13, 25, 29], "myclass": 1, "someth": 1, "def": [1, 27], "__init__": 1, "initi": [1, 12, 25, 27], "pass": [1, 25], "do_it": 1, "what": [1, 7, 25, 27], "param": [1, 14, 16, 20, 22, 23, 27, 29], "sparingli": 1, "isol": 1, "logic": [1, 3], "section": 1, "block": 1, "multipl": [1, 8, 10, 22, 25], "object": [1, 7, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 27], "packag": [1, 6, 7, 11, 29], "lib": 1, "b": [1, 10, 29], "c": [1, 8, 25, 29], "NOT": 1, "alwai": 1, "specifi": [1, 6, 8, 10, 13, 21, 22, 27, 29, 30], "explicitli": 1, "delimit": 1, "doubl": 1, "quot": 1, "discourag": 1, "event": [1, 21, 25, 26], "alreadi": 1, "modul": [1, 7, 11, 24, 25, 27], "add": [1, 6, 7], "getlogg": 1, "__name__": 1, "detail": [1, 6, 8, 14, 24, 25, 28, 29], "found": [1, 6, 22, 27, 29], "messag": [1, 8, 15, 22, 28], "custom": [1, 7, 8, 14, 16, 25, 26, 27, 29], "util": [1, 11, 13, 24, 27, 29], "py": 1, "end": [1, 27], "error": [1, 7], "repres": [1, 14], "unexpect": 1, "when": [1, 3, 12, 25, 26, 29, 31], "catch": [1, 29], "access": 1, "its": [1, 29], "e": [1, 29], "foo": 1, "bar": 1, "It": [1, 10, 13, 25, 30], "instead": 1, "addit": 1, "comment": [1, 2], "mai": [1, 6, 14, 20, 25, 29, 31], "ad": [1, 6], "easier": 1, "understand": [1, 6], "contribut": [1, 4, 7, 9, 28], "rtdf": 1, "html": [1, 5, 13, 23, 30], "rst": 1, "altogeth": 1, "user": [1, 5, 6, 8, 13, 22, 29], "read": [1, 5, 25], "doc": [1, 3, 5], "offlin": [1, 5], "believ": [1, 28], "provid": [1, 13, 29], "high": [1, 10, 13, 22, 27], "qualiti": 1, "avoid": [1, 8], "easili": [1, 10, 30], "overlook": 1, "mistak": 1, "proper": 1, "unit": 1, "particular": 1, "attent": 1, "fix": [1, 2, 3], "bug": [1, 2, 3], "write": [1, 3, 4, 7, 9, 29], "reproduc": [1, 12], "fixtur": 1, "adopt": 1, "pytest": 1, "framework": 1, "travi": 1, "ci": 1, "continu": 1, "integr": [1, 7, 29], "contributor": 2, "soon": [2, 6], "post": [2, 6], "typo": [2, 12], "ask": [2, 7, 12], "question": [2, 7], "report": [2, 3, 8, 10, 11, 14, 23, 24, 25, 30], "etc": 2, "becom": [2, 25], "mentor": 2, "spot": [2, 29], "get": [2, 10, 14, 15, 17, 20, 21, 22, 23, 25, 27, 28, 29], "speedup": 2, "learn": [2, 8], "onc": [2, 3, 8, 25, 29], "consid": [2, 20, 25, 27, 29], "readi": [2, 29, 31], "promot": 2, "open": [2, 7], "privat": 2, "vote": 2, "candid": 2, "kunyu": 2, "chen": 2, "bdfl": 2, "founder": 2, "man": 2, "who": [2, 13, 20, 29], "run": [2, 8, 9, 10, 13, 14, 20, 25, 27, 29], "show": [2, 8, 14, 20, 22, 25, 29], "yushiang": 2, "dang": 2, "ui": 2, "ux": 2, "team": [2, 7], "lead": 2, "rule": [2, 7, 8, 10, 13, 17, 20, 22, 23, 24, 25, 26, 31], "gener": [2, 5, 7, 10, 11, 12, 13, 14, 16, 22, 25], "analyst": 2, "shengfon": 2, "lu": 2, "triag": [2, 7], "rizin": [2, 8], "implement": [2, 25, 27, 29], "anwei": 2, "kung": 2, "backend": 2, "databas": [2, 29], "download": [2, 11, 13], "test": [2, 3, 4, 7, 9, 12, 14, 29], "zin": 2, "wong": 2, "zee": 2, "junwei": 2, "song": 2, "co": 2, "frontend": 2, "shunt": 2, "lin": 2, "chaowen": 2, "li": 2, "commun": [2, 7, 12], "sin": 2, "detect": [2, 7, 20, 21], "anti": 2, "iokjin": 2, "sih": 2, "yunchen": 2, "liu": 2, "artwork": 2, "design": [2, 25, 29], "import": [2, 4, 10, 12, 28, 29, 30], "great": 2, "support": 2, "chun": 2, "fan": 2, "hy": 2, "jheng": 2, "jia": 2, "huang": 2, "gao": 2, "yu": 2, "pippen": 2, "wang": 2, "code": [3, 4, 7, 9, 14, 16, 25, 26], "avail": 3, "offici": 3, "repositori": [3, 6], "6": [3, 15, 24, 28, 29], "master": [3, 17], "stabl": 3, "dev": 3, "beta": [3, 29], "featur": [3, 6, 10, 30], "fulli": 3, "merg": [3, 12], "done": [3, 10], "codebas": 3, "hotfix": 3, "Will": 3, "document": [3, 4, 6, 7], "just": [3, 10, 12, 28, 30], "quit": 3, "year": 3, "month": [3, 12, 28], "number": [3, 6, 8, 13, 14, 15, 16, 17, 22, 23, 25, 30], "v19": 3, "10": [3, 10, 21, 22, 29], "oct": 3, "2019": 3, "To": [3, 5, 7, 8, 10], "submit": 3, "github": [3, 6, 8, 12, 13, 17, 29, 31], "issu": [3, 6, 12], "track": [3, 14, 17, 21, 25, 26, 29], "patch": 3, "creat": [3, 8, 12, 25, 27, 28, 29], "pull": [3, 6], "fork": 3, "take": [3, 7, 25, 27, 30], "look": [3, 8, 25, 29], "chapter": [4, 9, 24], "note": [4, 7], "git": [4, 8, 31], "branch": 4, "model": 4, "releas": [4, 29], "version": [4, 6, 8, 12, 29], "ticket": 4, "style": [4, 7], "folder": [4, 6, 26, 27], "copyright": 4, "header": [4, 15, 22], "indent": 4, "maximum": [4, 13, 14], "line": [4, 13, 24, 25], "length": 4, "blank": 4, "print": [4, 10, 26, 29], "log": 4, "except": [4, 15], "autom": [4, 7], "want": [5, 6, 10, 13, 25, 27, 30], "refer": [5, 6, 27], "command": [5, 6, 13, 24, 25, 29, 30, 31], "reserv": 5, "after": [5, 14, 25, 27], "edit": [5, 29, 30], "would": [5, 6, 17, 27], "modifi": 5, "type": [5, 6, 14, 15, 17, 21, 22, 29], "automat": 5, "directori": [5, 7, 8, 13, 26, 27, 30], "auto": 5, "gen": 5, "sphinx": 5, "apidoc": 5, "o": [5, 8, 10, 29], "f": [5, 29], "welcom": 6, "telegram": 6, "ll": [6, 29], "best": 6, "answer": [6, 29], "instant": 6, "focus": 6, "about": [6, 12, 14, 17, 25], "person": 6, "them": [6, 13, 25, 29], "privaci": 6, "pip3": [6, 8, 10], "instal": [6, 7, 29], "upgrad": 6, "freshquark": [6, 11], "inspect": [6, 24], "misspel": 6, "here": [6, 10, 25, 29, 30], "two": [6, 12, 14, 16, 17, 20, 25, 27, 29, 30], "common": 6, "occur": 6, "those": 6, "happen": 6, "too": 6, "argument": [6, 13, 20, 22, 29], "239": 6, "usual": [6, 25], "outdat": 6, "relat": [6, 25], "still": 6, "237": 6, "path_to_the_rul": 6, "input": [6, 20, 29, 30], "current": [6, 17, 25], "select": [6, 22, 30], "default": [6, 8, 14, 16, 20, 21, 22, 29], "path": [6, 8, 13, 14, 19, 29, 30], "home": 6, "video": 6, "youtub": 6, "www": 6, "com": [6, 8, 13, 17, 29, 31], "watch": 6, "soh4eqrv9_g": 6, "valu": [6, 14, 15, 17, 20, 21, 22, 23, 25, 29, 30], "themselv": 6, "experi": 6, "introduct": [6, 7, 24], "feel": 6, "free": 6, "appreci": 6, "That": [6, 29], "big": 6, "ye": [6, 29], "anyon": 6, "interest": 6, "join": [6, 28, 29], "softwar": 7, "suspici": 7, "applic": 7, "dalvik": [7, 17, 24, 26, 27], "bytecod": [7, 14, 16, 17, 24, 26, 27], "loader": [7, 24, 26], "uniqu": 7, "behavior": [7, 8, 10, 13, 20, 21, 25, 27, 29, 30], "within": [7, 12], "second": [7, 14, 16, 21, 27, 29], "up": [7, 10, 14, 27, 30], "script": [7, 10, 11, 13, 23], "ecosystem": 7, "mobil": 7, "secur": 7, "tool": [7, 11, 13, 26], "introduc": 7, "analyz": [7, 8], "real": 7, "case": 7, "instasteal": 7, "cwe": 7, "798": 7, "ovaa": 7, "94": 7, "921": 7, "312": 7, "89": 7, "androgoat": 7, "926": 7, "dvba": 7, "749": 7, "mstg": 7, "java": 7, "532": 7, "780": 7, "319": 7, "mit": 7, "program": [7, 25, 27], "better": 7, "minumum": 7, "contact": 7, "u": [7, 8, 10], "cli": [7, 11, 27], "usag": [7, 8, 10, 12, 13, 14, 17, 25], "web": [7, 13, 23, 29], "tutori": 7, "radiocontrast": [7, 11], "step": [7, 24, 28, 30], "snippet": 7, "go": 7, "scan": [7, 8], "differ": [7, 20, 21, 27, 29, 30], "core": [7, 8, 11, 13], "member": [7, 12, 28], "alumni": 7, "consult": 7, "organ": 7, "workflow": [7, 24], "overview": [7, 24, 30], "faq": 7, "some": [7, 29, 31], "got": 7, "while": [7, 17, 25, 27], "work": [7, 24, 28], "why": 7, "analys": 7, "my": 7, "index": [7, 15, 17, 20, 22, 25, 29], "search": [7, 13, 14, 30], "page": 7, "pypi": [8, 12], "clone": [8, 31], "cd": [8, 31], "pipenv": 8, "skip": 8, "lock": 8, "shell": 8, "cmd": 8, "msg": 8, "option": [8, 14, 16, 17, 20], "obfusc": 8, "neglect": 8, "summari": [8, 14, 23, 24, 25], "text": [8, 17, 22, 29], "label": [8, 12, 14, 17, 22, 23, 29, 30], "d": [8, 10, 27, 29], "output": [8, 10, 11, 13, 25, 26, 30], "r": [8, 27, 29], "g": [8, 29], "graph": [8, 11, 13], "call_graph_imag": 8, "classif": 8, "80": [8, 30], "60": 8, "40": 8, "20": [8, 13, 22, 30], "lower": 8, "list": [8, 13, 14, 15, 16, 17, 19, 20, 21, 25, 27, 29], "p": [8, 30], "l": 8, "max": [8, 14, 22], "comparison": 8, "librari": [8, 13], "androguard": [8, 13, 14, 19, 25, 27], "multi": 8, "process": 8, "integ": [8, 17], "rang": [8, 10, 27], "allow": [8, 22], "n": [8, 29], "doesn": 8, "exce": 8, "usabl": 8, "cpu": [8, 25, 26], "1": [8, 12, 13, 14, 15, 17, 24, 28, 29], "memori": 8, "exhaust": 8, "exit": 8, "sampl": [8, 10, 20, 23, 29, 30, 31], "docker": 9, "present": [10, 14, 27], "simplest": [10, 30], "apk_path": [10, 13, 30], "14d9f1a92dd984d6040cc41ed06e273": 10, "rule_path": [10, 14, 29], "sendlocation_sm": [10, 25], "ex": 10, "json_report": [10, 13, 14, 23], "get_report": [10, 11, 13, 19], "Then": [10, 27, 29, 31], "md5": [10, 14, 16, 23], "apk_filenam": [10, 13, 14, 16], "size_byt": 10, "166917": 10, "threat_level": 10, "risk": [10, 22, 27], "total_scor": 10, "0": [10, 12, 13, 15, 22, 23, 27, 29, 30], "native_api": [10, 22], "lcom": [10, 14, 16, 17, 25, 29], "googl": [10, 14, 16, 17, 25, 29], "progress": [10, 14, 16, 17, 19, 25], "androidclientservic": 10, "sendmessag": 10, "invok": [10, 14, 16, 17, 25, 29], "virtual": [10, 14, 16, 17, 25, 26, 29], "v6": 10, "getloc": [10, 14, 16], "first_hex": 10, "6e": 10, "2f": 10, "02": 10, "06": 10, "00": 10, "v4": [10, 14, 16, 25], "v7": 10, "smshelper": [10, 14, 16], "sendsm": [10, 14, 16], "second_hex": 10, "30": [10, 15], "3e": 10, "64": 10, "07": 10, "dobyt": 10, "v35": 10, "74": 10, "01": 10, "23": 10, "v0": [10, 14, 16, 29], "v1": [10, 12, 29], "v2": [10, 25, 29], "v5": [10, 14, 16], "05": 10, "v3": [10, 14, 16, 17, 25], "03": 10, "04": 10, "entir": [10, 17, 25, 26], "bash": [10, 31], "bin": 10, "apkfil": 10, "_output": 10, "altern": 10, "well": 10, "usr": 10, "env": 10, "glob": 10, "00001": 10, "quickli": [10, 30], "match": [10, 20, 21, 25, 29, 30], "expos": [10, 29, 30], "lahmyth": [10, 30], "mine": [10, 30], "king": [10, 30], "ahmyth": [10, 30, 31], "cameramanag": [10, 30], "startup": [10, 30], "target_method": [10, 13, 29, 30], "generated_rule_dir": [10, 30], "generated_rul": [10, 30], "rule_gener": 10, "subpackag": 11, "submodul": 11, "apkinfo": [11, 13, 18, 22, 24], "parallelquark": [11, 13], "rzapkinfo": [11, 13], "content": [11, 12, 25, 29], "evalu": [11, 13, 24, 27], "pyeval": [11, 13, 24], "forens": [11, 13], "vt_analysi": [11, 13], "ciphei": [11, 13, 29], "color": [11, 13], "pprint": [11, 13], "regex": [11, 13, 14, 21], "webreport": [11, 13], "update_rule_buff": [11, 13], "config": 11, "entry_point": [11, 13], "logo": 11, "generate_rul": [11, 13, 30], "method_recursive_search": [11, 13, 14], "rulegener": [11, 30], "manag": [12, 30], "pr": 12, "includ": [12, 14, 16, 17, 26, 29], "review": [12, 30], "close": [12, 13, 14], "appli": [12, 25, 29], "appropri": 12, "resolv": 12, "minor": 12, "techniqu": [12, 30], "discuss": 12, "major": [12, 26], "chang": 12, "revis": 12, "kali": 12, "receiv": 12, "unabl": 12, "raiser": 12, "hasn": 12, "respond": 12, "over": 12, "assigne": 12, "invalid": 12, "axmlread": [13, 14], "interfac": [13, 14, 27], "baseapkinfo": [13, 14], "struct": [13, 14], "bytecodeobject": [13, 14, 16, 24], "methodobject": [13, 14, 16, 20], "registerobject": [13, 14, 24], "ruleobject": [13, 14, 20, 24, 27], "tableobject": [13, 14, 24], "quarkanalysi": [13, 14], "call_graph_analysis_list": [13, 14, 22], "clean_result": [13, 14], "crime_descript": [13, 14], "first_api": [13, 14], "label_report_t": [13, 14], "level_1_result": [13, 14], "level_2_result": [13, 14], "level_3_result": [13, 14], "level_4_result": [13, 14], "level_5_result": [13, 14], "parent_wrapper_map": [13, 14], "score_sum": [13, 14, 22, 27], "second_api": [13, 14], "summary_report_t": [13, 14], "weight_sum": [13, 14, 22], "init_label_report_t": [13, 14], "init_pretty_t": [13, 14], "androguardimp": [13, 14], "all_method": [13, 14, 16], "android_api": [13, 14, 16], "custom_method": [13, 14, 16], "dalvikvmformat": [13, 14], "find_method": [13, 14, 16, 25], "get_method_bytecod": [13, 14, 16, 25], "get_str": [13, 14, 15, 16], "get_wrapper_smali": [13, 14, 16], "lowerfunc": [13, 14, 16], "subclass_relationship": [13, 14], "superclass_relationship": [13, 14, 16], "upperfunc": [13, 14, 16, 25], "apply_rul": [13, 14], "add_table_row": [13, 14], "check_paramet": [13, 14, 25], "check_parameter_on_single_method": [13, 14], "check_parameter_valu": [13, 14], "check_sequ": [13, 14, 25], "find_api_usag": [13, 14], "find_intersect": [13, 14, 25], "find_previous_method": [13, 14, 25], "generate_json_report": [13, 14], "get_json_report": [13, 14], "show_call_graph": [13, 14], "show_detail_report": [13, 14, 25], "show_label_report": [13, 14], "show_rule_classif": [13, 14], "show_summary_report": [13, 14, 25], "rizincach": [13, 14], "rizinimp": [13, 14], "apk_filepath": [13, 14, 16], "core_librari": [13, 14, 16, 19], "ret_typ": [13, 14, 16], "aget_kind": [13, 18], "aget_wide_kind": [13, 18], "aput_kind": [13, 18], "aput_wide_kind": [13, 18], "binop_kind": [13, 18], "cast_typ": [13, 18], "const": [13, 18, 25, 29], "const_class": [13, 18], "const_four": [13, 18], "const_highsixteen": [13, 18], "const_sixteen": [13, 18], "const_str": [13, 18], "const_wid": [13, 18], "const_wide_highsixteen": [13, 18], "const_wide_sixteen": [13, 18], "const_wide_thirty_two": [13, 18], "filled_new_array_kind": [13, 18], "invoke_custom": [13, 18], "invoke_direct": [13, 18, 25], "invoke_interfac": [13, 18], "invoke_polymorph": [13, 18], "invoke_stat": [13, 18], "invoke_sup": [13, 18], "invoke_virtu": [13, 18], "invoke_virtual_rang": [13, 18], "move_kind": [13, 18], "move_result": [13, 18], "move_result_object": [13, 18], "move_result_wid": [13, 18], "neg_and_not_kind": [13, 18], "new_arrai": [13, 18], "new_inst": [13, 18], "get_method_pattern": [13, 18], "show_tabl": [13, 18], "logger": [13, 18], "all_str": [13, 19], "get_all_str": [13, 19], "get_android_api": [13, 19], "get_base64": [13, 19], "get_cont": [13, 19], "get_fil": [13, 19], "get_ip": [13, 19], "get_url": [13, 19], "vtanalysi": [13, 19], "analyze_multi_fil": [13, 19], "analyze_single_fil": [13, 19], "change_api_kei": [13, 19], "check_api_key_avail": [13, 19], "get_api_keys_list": [13, 19], "get_file_md5": [13, 19], "retreive_report": [13, 19], "scan_fil": [13, 19], "set_progress": [13, 19], "frida": [13, 20], "checkcleartext": [13, 20], "hookmethod": [13, 20], "convertmethodtostr": [13, 20], "isargumenttru": [13, 20], "hasintentfilt": [13, 20], "isexport": [13, 20], "getparamvalu": [13, 20, 21], "hasstr": [13, 20, 21], "hasurl": [13, 20, 21], "isargfrommethod": [13, 20], "defaultruleset": [13, 20], "classnam": [13, 20, 29], "fullnam": [13, 20], "getargu": [13, 20], "getxreffrom": [13, 20], "getxrefto": [13, 20], "methodnam": [13, 20, 29], "quarkresult": [13, 20, 29], "behavioroccurlist": [13, 20, 21], "findmethodincal": [13, 20], "getallstr": [13, 20], "getmethodxreffrom": [13, 20], "getmethodxrefto": [13, 20], "ruleset": [13, 20], "findmethodinapk": [13, 20], "getact": [13, 20], "runquarkanalysi": [13, 20], "black": [13, 22], "blue": [13, 22], "bold": [13, 22], "colorful_report": [13, 22], "cyan": [13, 22], "green": [13, 22], "lightblu": [13, 22], "lightyellow": [13, 22], "magenta": [13, 22], "red": [13, 22], "white": [13, 22], "yellow": [13, 22], "call_graph": [13, 22], "select_label_menu": [13, 22], "show_comparison_graph": [13, 22], "wrapper_lookup": [13, 22], "get_rule_classification_data": [13, 22], "output_parent_function_graph": [13, 22], "output_parent_function_json": [13, 22], "output_parent_function_t": [13, 22], "print_error": [13, 22], "print_info": [13, 22], "print_success": [13, 22], "print_warn": [13, 22], "tabl": [13, 17, 22, 25, 26], "extract_cont": [13, 22], "extract_fil": [13, 22], "extract_ip": [13, 22], "extract_url": [13, 22], "validate_base64": [13, 22], "validate_ip_address": [13, 22], "validate_url": [13, 22], "contain": [13, 14, 17, 19, 20, 21, 22, 23, 25, 31], "descriptor_to_androguard_format": [13, 22], "filter_api_by_usage_count": [13, 22], "get_arguments_from_argument_str": [13, 22], "get_parenthetic_cont": [13, 22], "remove_dup_list": [13, 22], "level_info": [13, 22], "low": [13, 22, 27], "moder": [13, 22], "reportgener": [13, 23], "get_analysis_report_html": [13, 23], "get_rule_generate_editor_html": [13, 23], "insert_genrule_report_html": [13, 23], "insert_radarechart_html": [13, 23], "insert_report_html": [13, 23], "insert_sample_information_html": [13, 23], "count_confidence_rule_numb": [13, 23], "get_all_label": [13, 23], "get_five_stages_label": [13, 23], "get_json_report_html": [13, 23], "rule_buffer_list": 13, "rule_path_list": 13, "latest": 13, "return": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 29], "none": [13, 14, 15, 16, 17, 20, 21, 22], "entri": [13, 27], "point": [13, 17, 27], "amaz": 13, "output_dir": 13, "max_search_lay": 13, "specif": [13, 25, 28, 29], "percentile_rank": [13, 22, 30], "web_editor": [13, 30], "export": [13, 20, 29], "percentil": [13, 22, 30], "rank": [13, 22, 30], "filter": [13, 20, 29, 30], "count": [13, 30], "method_set": 13, "depth": [13, 14], "each": [13, 14, 17, 23, 24, 27, 29, 30], "methodanalysi": [13, 14, 19], "recurs": [13, 14], "first_method_list": [13, 14], "second_method_list": [13, 14], "main": [13, 25, 26], "binari": [13, 15], "could": [13, 31], "report_typ": 13, "least": [13, 28, 30], "given": [13, 14, 16, 17, 20, 21, 22, 23, 25, 26, 27, 29], "int": [13, 16, 20, 21, 22, 23], "axmlexcept": [14, 15], "axml_siz": [14, 15], "file_s": [14, 15], "get_attribut": [14, 15], "get_xml_tre": [14, 15], "resvalu": [14, 15], "data": [14, 15, 17, 22, 23, 26, 29], "namespac": [14, 15], "res_value_typ": [14, 15], "type_attribut": [14, 15], "type_dimens": [14, 15], "type_dynamic_attribut": [14, 15], "type_dynamic_refer": [14, 15], "type_first_color_int": [14, 15], "type_first_int": [14, 15], "type_float": [14, 15], "type_fract": [14, 15], "type_int_boolean": [14, 15], "type_int_color_argb4": [14, 15], "type_int_color_argb8": [14, 15], "type_int_color_rgb4": [14, 15], "type_int_color_rgb8": [14, 15], "type_int_dec": [14, 15], "type_int_hex": [14, 15], "type_last_color_int": [14, 15], "type_last_int": [14, 15], "type_nul": [14, 15], "type_refer": [14, 15], "type_str": [14, 15], "files": [14, 16, 23], "get_subclass": [14, 16], "mnemon": [14, 17, 25], "access_flag": [14, 17], "cach": [14, 17], "class_nam": [14, 16, 17, 18], "full_nam": [14, 17], "is_android_api": [14, 17], "called_by_func": [14, 17, 25], "current_typ": [14, 17], "hash_index": [14, 17, 25], "register_nam": [14, 17, 25], "type_histroi": [14, 17], "check_item": [14, 17], "get_scor": [14, 17, 25, 27], "rule_filenam": [14, 17], "get_obj_list": [14, 17, 25], "get_tabl": [14, 17, 25], "hash_tabl": [14, 17], "insert": [14, 17, 25, 29], "pop": [14, 17, 25], "union": [14, 16, 20, 21], "str": [14, 15, 16, 17, 18, 20, 21, 22, 29], "pathlik": [14, 16, 17, 20], "properti": [14, 15, 16, 17, 20, 21], "element": [14, 16, 17, 20, 22, 25], "method_nam": [14, 16, 17, 18], "method_object": [14, 16], "instruct": [14, 16, 17, 18, 25, 26, 27], "parent_method": [14, 16], "first_method": [14, 16], "second_method": [14, 16], "dict": [14, 15, 16, 17, 21, 23], "smali": [14, 16, 17, 25], "method_analysi": [14, 16], "num_of_process": 14, "rule_obj_list": 14, "rule_obj": 14, "y_score": 14, "parent_funct": 14, "keyword_item_list": 14, "fals": [14, 19, 20, 21, 22, 29], "between": [14, 22], "time": [14, 30], "true": [14, 20, 21, 22, 29], "usage_t": 14, "tupl": [14, 15, 20, 29], "involv": 14, "keyword": [14, 29, 30], "treat": 14, "regular": [14, 20, 21, 29], "express": [14, 20, 21, 25, 29], "yield": 14, "_description_": [14, 20], "static": [14, 18], "source_str": 14, "pattern_list": 14, "mutual_par": 14, "appear": [14, 20, 25, 27, 29], "descriptor_nam": 14, "first_method_set": 14, "second_method_set": 14, "base_method": 14, "wrapper": 14, "visited_method": 14, "under": [14, 30], "parent": 14, "append": [14, 29], "basic": [14, 20, 29], "output_format": [14, 22], "all_label": [14, 22, 23], "table_vers": 14, "last": 14, "column": [14, 25], "label_desc": [14, 17], "csv": [14, 17], "dictionari": [14, 22], "arrai": [14, 22], "associ": 14, "alia": [14, 15], "rizin_cach": 14, "tmp_dir": 14, "A": [15, 17, 29], "file_path": 15, "structure_path": 15, "pars": [15, 22, 29], "xml": [15, 20], "chunk": 15, "ani": [15, 20, 22, 29], "attribut": [15, 29], "resourc": 15, "hold": [15, 20, 21, 22, 29], "elementtre": 15, "androidmanifest": 15, "enum": [15, 22], "7": 15, "28": 15, "16": [15, 19], "18": 15, "31": 15, "29": 15, "17": 15, "abstract": 16, "size": 16, "byte": 16, "checksum": 16, "store": [17, 20, 21, 25, 26, 29], "commonli": 17, "kind": 17, "apnoper": [17, 25], "deleteapn": [17, 25], "z": [17, 25, 29], "dex": [17, 26], "bool": [17, 20, 21], "value_typ": 17, "record": [17, 18, 25], "state": [17, 25, 27], "been": [17, 27], "plant": 17, "describ": [17, 25], "varabileobject": [17, 25], "individu": 17, "rulejson": 17, "jsondata": 17, "descript": [17, 28, 29], "exponenti": [17, 27], "growth": [17, 27], "captur": [17, 21, 27], "third": [17, 27], "float": [17, 27], "variou": 17, "lebel": [17, 23], "blob": 17, "count_reg": 17, "variabl": [17, 25, 26], "variableobject": 17, "hash": [17, 23, 25], "dimension": 17, "var_obj": 17, "nest": [17, 25], "hashtabl": [17, 25], "overrid": [17, 25], "built": [17, 25, 29], "stack": [17, 25], "delet": [17, 25], "kwarg": 18, "convert": [18, 23], "represent": 18, "dure": 18, "taint": 18, "func": 18, "apkpath": 19, "base64": 19, "encod": 19, "ip": [19, 22, 29], "address": 19, "url": [19, 20, 21, 22], "api_keys_list": 19, "waiting_tim": 19, "all_info": 19, "file_md5": 19, "fridaresult": [20, 21, 29], "methodcalleventdispatch": [20, 21], "handlecapturedev": [20, 21], "startwatchingmethodcal": [20, 21], "stopwatchingmethodcal": [20, 21], "runfridahook": [20, 21], "inputstr": 20, "decrypt": [20, 29], "host": 20, "overloadfilt": 20, "watcharg": 20, "watchbacktrac": 20, "watchret": 20, "hook": 20, "tagrget": [20, 29], "arg": [20, 29], "backtrac": [20, 29], "boolean": [20, 29], "intent": [20, 29], "quarkresultinst": 20, "methodcal": 20, "firstapi": 20, "secondapi": 20, "pattern": [20, 21], "isregex": 20, "targetmethod": [20, 21], "rulefold": 20, "methodobj": 20, "caller": [20, 29], "calle": [20, 29], "ruleinst": 20, "callermethod": 20, "samplepath": 20, "_callev": 21, "_eventbuff": 21, "session": 21, "eventwrapperfromfrida": 21, "_": [21, 29], "buffer": 21, "methodparamtyp": 21, "stop": 21, "apkpackagenam": 21, "secondtowait": 21, "wait": [21, 29], "color_cod": 22, "arg0": 22, "call_graph_analysi": 22, "png": 22, "min_label": 22, "max_label": 22, "radar": [22, 23], "chart": [22, 23], "min": 22, "titl": 22, "labl": 22, "malware_confid": 22, "font_siz": 22, "22": 22, "sever": [22, 27], "displai": [22, 27], "malware_nam": 22, "search_depth": 22, "rule_classification_data_bundl": 22, "row": [22, 25], "sb": 22, "subset_to_check": 22, "target_list": 22, "put": 22, "queri": [22, 25], "api_pool": 22, "sort": [22, 30], "split": 22, "p_set": 22, "less": [22, 30], "s_set": 22, "argument_str": 22, "comma": 22, "infer": 22, "start_index": 22, "pair": 22, "parenthes": 22, "parenthesi": 22, "remov": 22, "duplic": 22, "enumer": 22, "load": [23, 24, 29], "result": 23, "rule_numb": 23, "secton": 23, "five_stages_label": 23, "rules_number_set": 23, "layout": 23, "tag": 23, "extract": 24, "map": [24, 29], "architectur": 24, "diagram": 24, "xrule": [24, 27], "explan": 24, "inspir": 25, "ceval": 25, "cpython": [25, 26], "interpret": 25, "infinit": 25, "loop": [25, 29], "interact": [25, 26, 31], "languag": 25, "thu": 25, "fifth": [25, 27], "Of": 25, "cours": 25, "haven": 25, "condit": 25, "jump": 25, "now": [25, 29], "direct": [25, 28, 29], "enter": 25, "switch": [25, 26], "execut": [25, 26, 27, 29, 30], "_invok": 25, "anoth": [25, 29], "written": 25, "reus": 25, "becaus": 25, "mani": 25, "famili": 25, "respons": 25, "respect": 25, "previou": 25, "intersect": 25, "xrul": 25, "long": 25, "met": 25, "upper": 25, "human": 25, "readabl": 25, "form": [25, 27], "compar": 25, "machin": [25, 26, 29], "difficult": 25, "often": 25, "compos": [25, 26], "gp": 25, "howev": [25, 26], "overwritten": 25, "futur": 25, "revers": 25, "tracker": 25, "encount": 25, "togeth": 25, "assum": [25, 27], "hello": 25, "v34": 25, "34": 25, "four": [26, 30], "divid": 26, "three": 26, "come": 26, "itself": [26, 29], "huge": 26, "doe": 26, "faster": 26, "dynam": 26, "repetit": 26, "control": 26, "final": [27, 29], "No": 27, "matter": 27, "choos": 27, "full": 27, "imag": [27, 31], "cross": 27, "travers": 27, "sum": 27, "formula": 27, "medium": 27, "yscore": 27, "complet": [27, 28], "reach": 27, "_score": 27, "fourth": 27, "confirm": [27, 29], "qaurk": 27, "There": 27, "level_one_threshold": 27, "level_two_threshold": 27, "level_three_threshold": 27, "level_four_threshold": 27, "level_five_threshold": 27, "total": 27, "fall": 27, "aim": [28, 29], "win": 28, "comer": 28, "stronger": 28, "resum": 28, "fit": 28, "job": 28, "dream": 28, "energi": 28, "grow": 28, "upon": 28, "aluni": 28, "expect": 28, "posit": 28, "feedback": 28, "contin": 28, "particip": 28, "mandatori": 28, "peopl": 28, "goal": [28, 29], "twitter": 28, "quarkengin": 28, "research": 29, "pentest": 29, "decent": 29, "exchang": 29, "valuabl": 29, "intellig": 29, "enabl": 29, "perform": 29, "creativ": 29, "scenario": 29, "share": 29, "knowledg": 29, "api1": 29, "api2": 29, "monitor": 29, "port": 29, "manifest": 29, "6f032": 29, "00211": 29, "detectedurl": 29, "ndetect": 29, "nthe": 29, "wa": 29, "nattempt": 29, "obj": 29, "127": 29, "8888": 29, "thook": 29, "methodcalle": 29, "nsee": 29, "environ": 29, "guidelin": 29, "Or": 29, "root": 29, "devic": 29, "pixel": 29, "seek": 29, "credenti": 29, "vulner": 29, "secretkeyspec": 29, "identifi": 29, "dump": 29, "bingo": 29, "allstr": 29, "firstparam": 29, "secondparam": 29, "aeskei": 29, "findal": 29, "getbyt": 29, "bljava": 29, "ljavax": 29, "crypto": 29, "spec": 29, "init": 29, "python3": 29, "49u5gh249gh24985ghf429gh4ch8f23f": 29, "move": 29, "inject": 29, "createpackagecontext": 29, "checksignatur": 29, "verif": 29, "pm": 29, "packagemanag": 29, "ldexternalcod": 29, "nmethod": 29, "extern": 29, "context": 29, "classload": 29, "loadclass": 29, "unsecur": 29, "storag": 29, "mechan": 29, "sdcard": 29, "existingfil": 29, "filepath": 29, "cleartext": 29, "sensit": 29, "putstr": 29, "encrypt": 29, "app_package_nam": 29, "oversecur": 29, "sharedpreferencesimpl": 29, "editorimpl": 29, "method_param_typ": 29, "email": 29, "password": 29, "utf": 29, "licens": 29, "global": 29, "rpc": 29, "replacemethodimplement": 29, "classandmethodnam": 29, "returntyp": 29, "callev": 29, "callcaptur": 29, "paramvalu": 29, "push": 29, "tostr": 29, "stringifi": 29, "watchmethodcal": 29, "null": 29, "indexoflastsepar": 29, "lastindexof": 29, "classnamepattern": 29, "substr": 29, "methodnamepattern": 29, "classoftargetmethod": 29, "possiblemethod": 29, "typeof": 29, "undefin": 29, "failedtowatchev": 29, "failedtowatch": 29, "overload": 29, "paramtypesofpossiblemethod": 29, "argumenttyp": 29, "foreach": 29, "matchedmethod": 29, "rettyp": 29, "sql": 29, "gettext": 29, "widget": 29, "edittext": 29, "sqlcommandexecut": 29, "stringbuild": 29, "sqlite": 29, "sqlitedatabas": 29, "rawqueri": 29, "cursor": 29, "improp": 29, "compon": 29, "damnvulnerablebank": 29, "currencyr": 29, "splashscreen": 29, "setjavascripten": 29, "javascript": 29, "websit": 29, "addjavascriptinterfac": 29, "webkit": 29, "webview": 29, "enablej": 29, "exposeapi": 29, "getset": 29, "webset": 29, "lsg": 29, "vp": 29, "owasp_mobil": 29, "omtg_android": 29, "omtg_env_005_webview_remot": 29, "oncreat": 29, "bundl": 29, "omtg_env_005_webview_loc": 29, "token": 29, "leakag": 29, "credential_keyword": 29, "methodsfound": 29, "debuglogg": 29, "firebas": 29, "auth": 29, "firebaseauth": 29, "lc": 29, "h": 29, "rsa": 29, "algorithm": 29, "without": 29, "optim": 29, "asymmetr": 29, "pad": 29, "oaep": 29, "cryptograph": 29, "scheme": 29, "plaintext": 29, "predict": 29, "usecryptographicalgo": 29, "usecryptographicalgor": 29, "cipher": 29, "getinst": 29, "omtg_datast_001_keystor": 29, "encryptstr": 29, "transmiss": 29, "retrofit": 29, "protocol": 29, "protocol_keyword": 29, "smtp": 29, "ftp": 29, "regexrul": 29, "9a": 29, "za": 29, "cleartextprotocolurl": 29, "lretrofit2": 29, "builder": 29, "baseurl": 29, "idea": 30, "group": 30, "pareto": 30, "phase": 30, "pxp": 30, "px": 30, "sxp": 30, "sx": 30, "earlier": 30, "higher": 30, "spent": 30, "manner": 30, "situat": 30, "constraint": 30, "w": 30, "demo": 30, "save": 30, "firstli": 31, "fetch": 31, "pwd": 31, "tmp": 31}, "objects": {"": [[13, 0, 0, "-", "quark"]], "quark": [[13, 0, 0, "-", "cli"], [13, 0, 0, "-", "config"], [14, 0, 0, "-", "core"], [18, 0, 0, "-", "evaluator"], [19, 0, 0, "-", "forensic"], [13, 0, 0, "-", "freshquark"], [13, 0, 0, "-", "logo"], [13, 0, 0, "-", "radiocontrast"], [13, 0, 0, "-", "report"], [13, 0, 0, "-", "rulegeneration"], [20, 0, 0, "-", "script"], [22, 0, 0, "-", "utils"], [23, 0, 0, "-", "webreport"]], "quark.cli": [[13, 1, 1, "", "update_rule_buffer"]], "quark.core": [[14, 0, 0, "-", "analysis"], [14, 0, 0, "-", "apkinfo"], [15, 0, 0, "-", "axmlreader"], [16, 0, 0, "-", "interface"], [14, 0, 0, "-", "parallelquark"], [14, 0, 0, "-", "quark"], [14, 0, 0, "-", "rzapkinfo"], [17, 0, 0, "-", "struct"]], "quark.core.analysis": [[14, 2, 1, "", "QuarkAnalysis"], [14, 1, 1, "", "init_label_report_table"], [14, 1, 1, "", "init_pretty_table"]], "quark.core.analysis.QuarkAnalysis": [[14, 3, 1, "", "call_graph_analysis_list"], [14, 4, 1, "", "clean_result"], [14, 3, 1, "", "crime_description"], [14, 3, 1, "", "first_api"], [14, 3, 1, "", "json_report"], [14, 3, 1, "", "label_report_table"], [14, 3, 1, "", "level_1_result"], [14, 3, 1, "", "level_2_result"], [14, 3, 1, "", "level_3_result"], [14, 3, 1, "", "level_4_result"], [14, 3, 1, "", "level_5_result"], [14, 3, 1, "", "parent_wrapper_mapping"], [14, 3, 1, "", "score_sum"], [14, 3, 1, "", "second_api"], [14, 3, 1, "", "summary_report_table"], [14, 3, 1, "", "weight_sum"]], "quark.core.apkinfo": [[14, 2, 1, "", "AndroguardImp"]], "quark.core.apkinfo.AndroguardImp": [[14, 5, 1, "", "activities"], [14, 5, 1, "", "all_methods"], [14, 3, 1, "", "analysis"], [14, 5, 1, "", "android_apis"], [14, 3, 1, "", "apk"], [14, 5, 1, "", "custom_methods"], [14, 3, 1, "", "dalvikvmformat"], [14, 4, 1, "", "find_method"], [14, 4, 1, "", "get_method_bytecode"], [14, 4, 1, "", "get_strings"], [14, 4, 1, "", "get_wrapper_smali"], [14, 4, 1, "", "lowerfunc"], [14, 5, 1, "", "permissions"], [14, 5, 1, "", "subclass_relationships"], [14, 5, 1, "", "superclass_relationships"], [14, 4, 1, "", "upperfunc"]], "quark.core.axmlreader": [[15, 6, 1, "", "AxmlException"], [15, 2, 1, "", "AxmlReader"], [15, 2, 1, "", "ResValue"], [15, 2, 1, "", "Res_value_type"]], "quark.core.axmlreader.AxmlReader": [[15, 5, 1, "", "axml_size"], [15, 5, 1, "", "file_size"], [15, 4, 1, "", "get_attributes"], [15, 4, 1, "", "get_string"], [15, 4, 1, "", "get_xml_tree"]], "quark.core.axmlreader.ResValue": [[15, 3, 1, "", "data"], [15, 3, 1, "", "name"], [15, 3, 1, "", "namespace"], [15, 3, 1, "", "type"], [15, 3, 1, "", "value"]], "quark.core.axmlreader.Res_value_type": [[15, 3, 1, "", "TYPE_ATTRIBUTE"], [15, 3, 1, "", "TYPE_DIMENSION"], [15, 3, 1, "", "TYPE_DYNAMIC_ATTRIBUTE"], [15, 3, 1, "", "TYPE_DYNAMIC_REFERENCE"], [15, 3, 1, "", "TYPE_FIRST_COLOR_INT"], [15, 3, 1, "", "TYPE_FIRST_INT"], [15, 3, 1, "", "TYPE_FLOAT"], [15, 3, 1, "", "TYPE_FRACTION"], [15, 3, 1, "", "TYPE_INT_BOOLEAN"], [15, 3, 1, "", "TYPE_INT_COLOR_ARGB4"], [15, 3, 1, "", "TYPE_INT_COLOR_ARGB8"], [15, 3, 1, "", "TYPE_INT_COLOR_RGB4"], [15, 3, 1, "", "TYPE_INT_COLOR_RGB8"], [15, 3, 1, "", "TYPE_INT_DEC"], [15, 3, 1, "", "TYPE_INT_HEX"], [15, 3, 1, "", "TYPE_LAST_COLOR_INT"], [15, 3, 1, "", "TYPE_LAST_INT"], [15, 3, 1, "", "TYPE_NULL"], [15, 3, 1, "", "TYPE_REFERENCE"], [15, 3, 1, "", "TYPE_STRING"]], "quark.core.interface": [[16, 0, 0, "-", "baseapkinfo"]], "quark.core.interface.baseapkinfo": [[16, 2, 1, "", "BaseApkinfo"]], "quark.core.interface.baseapkinfo.BaseApkinfo": [[16, 5, 1, "", "activities"], [16, 5, 1, "", "all_methods"], [16, 5, 1, "", "android_apis"], [16, 3, 1, "", "apk_filename"], [16, 3, 1, "", "apk_filepath"], [16, 3, 1, "", "core_library"], [16, 5, 1, "", "custom_methods"], [16, 5, 1, "", "filename"], [16, 5, 1, "", "filesize"], [16, 4, 1, "", "find_method"], [16, 4, 1, "", "get_method_bytecode"], [16, 4, 1, "", "get_strings"], [16, 5, 1, "", "get_subclasses"], [16, 4, 1, "", "get_wrapper_smali"], [16, 4, 1, "", "lowerfunc"], [16, 5, 1, "", "md5"], [16, 5, 1, "", "permissions"], [16, 3, 1, "", "ret_type"], [16, 5, 1, "", "superclass_relationships"], [16, 4, 1, "", "upperfunc"]], "quark.core.parallelquark": [[14, 2, 1, "", "ParallelQuark"]], "quark.core.parallelquark.ParallelQuark": [[14, 4, 1, "", "apply_rules"], [14, 4, 1, "", "close"], [14, 4, 1, "", "run"]], "quark.core.quark": [[14, 2, 1, "", "Quark"]], "quark.core.quark.Quark": [[14, 4, 1, "", "add_table_row"], [14, 4, 1, "", "check_parameter"], [14, 4, 1, "", "check_parameter_on_single_method"], [14, 4, 1, "", "check_parameter_values"], [14, 4, 1, "", "check_sequence"], [14, 4, 1, "", "find_api_usage"], [14, 4, 1, "", "find_intersection"], [14, 4, 1, "", "find_previous_method"], [14, 4, 1, "", "generate_json_report"], [14, 4, 1, "", "get_json_report"], [14, 4, 1, "", "method_recursive_search"], [14, 4, 1, "", "run"], [14, 4, 1, "", "show_call_graph"], [14, 4, 1, "", "show_detail_report"], [14, 4, 1, "", "show_label_report"], [14, 4, 1, "", "show_rule_classification"], [14, 4, 1, "", "show_summary_report"]], "quark.core.rzapkinfo": [[14, 3, 1, "", "RizinCache"], [14, 2, 1, "", "RizinImp"]], "quark.core.rzapkinfo.RizinImp": [[14, 5, 1, "", "activities"], [14, 5, 1, "", "all_methods"], [14, 5, 1, "", "android_apis"], [14, 3, 1, "", "apk_filename"], [14, 3, 1, "", "apk_filepath"], [14, 3, 1, "", "core_library"], [14, 5, 1, "", "custom_methods"], [14, 4, 1, "", "find_method"], [14, 4, 1, "", "get_method_bytecode"], [14, 4, 1, "", "get_strings"], [14, 4, 1, "", "get_wrapper_smali"], [14, 4, 1, "", "lowerfunc"], [14, 5, 1, "", "permissions"], [14, 3, 1, "", "ret_type"], [14, 5, 1, "", "subclass_relationships"], [14, 5, 1, "", "superclass_relationships"], [14, 4, 1, "", "upperfunc"]], "quark.core.struct": [[17, 0, 0, "-", "bytecodeobject"], [17, 0, 0, "-", "methodobject"], [17, 0, 0, "-", "registerobject"], [17, 0, 0, "-", "ruleobject"], [17, 0, 0, "-", "tableobject"]], "quark.core.struct.bytecodeobject": [[17, 2, 1, "", "BytecodeObject"]], "quark.core.struct.bytecodeobject.BytecodeObject": [[17, 5, 1, "", "mnemonic"], [17, 5, 1, "", "parameter"], [17, 5, 1, "", "registers"]], "quark.core.struct.methodobject": [[17, 2, 1, "", "MethodObject"]], "quark.core.struct.methodobject.MethodObject": [[17, 3, 1, "", "access_flags"], [17, 3, 1, "", "cache"], [17, 3, 1, "", "class_name"], [17, 3, 1, "", "descriptor"], [17, 5, 1, "", "full_name"], [17, 4, 1, "", "is_android_api"], [17, 3, 1, "", "name"]], "quark.core.struct.registerobject": [[17, 2, 1, "", "RegisterObject"]], "quark.core.struct.registerobject.RegisterObject": [[17, 5, 1, "", "called_by_func"], [17, 5, 1, "", "current_type"], [17, 5, 1, "", "hash_index"], [17, 5, 1, "", "register_name"], [17, 5, 1, "", "type_histroy"], [17, 5, 1, "", "value"]], "quark.core.struct.ruleobject": [[17, 2, 1, "", "RuleObject"]], "quark.core.struct.ruleobject.RuleObject": [[17, 5, 1, "", "api"], [17, 3, 1, "", "check_item"], [17, 5, 1, "", "crime"], [17, 4, 1, "", "get_score"], [17, 5, 1, "", "label"], [17, 5, 1, "", "permission"], [17, 3, 1, "", "rule_filename"], [17, 5, 1, "", "score"]], "quark.core.struct.tableobject": [[17, 2, 1, "", "TableObject"]], "quark.core.struct.tableobject.TableObject": [[17, 4, 1, "", "get_obj_list"], [17, 4, 1, "", "get_table"], [17, 3, 1, "", "hash_table"], [17, 4, 1, "", "insert"], [17, 4, 1, "", "pop"]], "quark.evaluator": [[18, 0, 0, "-", "pyeval"]], "quark.evaluator.pyeval": [[18, 2, 1, "", "PyEval"], [18, 1, 1, "", "logger"]], "quark.evaluator.pyeval.PyEval": [[18, 4, 1, "", "AGET_KIND"], [18, 4, 1, "", "AGET_WIDE_KIND"], [18, 4, 1, "", "APUT_KIND"], [18, 4, 1, "", "APUT_WIDE_KIND"], [18, 4, 1, "", "BINOP_KIND"], [18, 4, 1, "", "CAST_TYPE"], [18, 4, 1, "", "CONST"], [18, 4, 1, "", "CONST_CLASS"], [18, 4, 1, "", "CONST_FOUR"], [18, 4, 1, "", "CONST_HIGHSIXTEEN"], [18, 4, 1, "", "CONST_SIXTEEN"], [18, 4, 1, "", "CONST_STRING"], [18, 4, 1, "", "CONST_WIDE"], [18, 4, 1, "", "CONST_WIDE_HIGHSIXTEEN"], [18, 4, 1, "", "CONST_WIDE_SIXTEEN"], [18, 4, 1, "", "CONST_WIDE_THIRTY_TWO"], [18, 4, 1, "", "FILLED_NEW_ARRAY_KIND"], [18, 4, 1, "", "INVOKE_CUSTOM"], [18, 4, 1, "", "INVOKE_DIRECT"], [18, 4, 1, "", "INVOKE_INTERFACE"], [18, 4, 1, "", "INVOKE_POLYMORPHIC"], [18, 4, 1, "", "INVOKE_STATIC"], [18, 4, 1, "", "INVOKE_SUPER"], [18, 4, 1, "", "INVOKE_VIRTUAL"], [18, 4, 1, "", "INVOKE_VIRTUAL_RANGE"], [18, 4, 1, "", "MOVE_KIND"], [18, 4, 1, "", "MOVE_RESULT"], [18, 4, 1, "", "MOVE_RESULT_OBJECT"], [18, 4, 1, "", "MOVE_RESULT_WIDE"], [18, 4, 1, "", "NEG_AND_NOT_KIND"], [18, 4, 1, "", "NEW_ARRAY"], [18, 4, 1, "", "NEW_INSTANCE"], [18, 4, 1, "", "get_method_pattern"], [18, 4, 1, "", "show_table"]], "quark.forensic": [[19, 0, 0, "-", "forensic"], [19, 0, 0, "-", "vt_analysis"]], "quark.forensic.forensic": [[19, 2, 1, "", "Forensic"]], "quark.forensic.forensic.Forensic": [[19, 3, 1, "", "all_strings"], [19, 3, 1, "", "apk"], [19, 4, 1, "", "get_all_strings"], [19, 4, 1, "", "get_android_api"], [19, 4, 1, "", "get_base64"], [19, 4, 1, "", "get_content"], [19, 4, 1, "", "get_file"], [19, 4, 1, "", "get_ip"], [19, 4, 1, "", "get_url"]], "quark.forensic.vt_analysis": [[19, 2, 1, "", "VTAnalysis"]], "quark.forensic.vt_analysis.VTAnalysis": [[19, 4, 1, "", "analyze_multi_file"], [19, 4, 1, "", "analyze_single_file"], [19, 4, 1, "", "change_api_key"], [19, 4, 1, "", "check_api_key_available"], [19, 4, 1, "", "get_api_keys_list"], [19, 4, 1, "", "get_file_md5"], [19, 4, 1, "", "get_reports"], [19, 4, 1, "", "retreive_report"], [19, 4, 1, "", "scan_file"], [19, 4, 1, "", "set_progress"]], "quark.freshquark": [[13, 1, 1, "", "download"], [13, 1, 1, "", "entry_point"]], "quark.logo": [[13, 1, 1, "", "logo"]], "quark.radiocontrast": [[13, 2, 1, "", "RadioContrast"]], "quark.radiocontrast.RadioContrast": [[13, 4, 1, "", "generate_rule"], [13, 4, 1, "", "method_recursive_search"]], "quark.report": [[13, 2, 1, "", "Report"]], "quark.report.Report": [[13, 4, 1, "", "analysis"], [13, 4, 1, "", "get_report"]], "quark.rulegeneration": [[13, 2, 1, "", "RuleGeneration"]], "quark.rulegeneration.RuleGeneration": [[13, 4, 1, "", "generate_rule"]], "quark.script": [[20, 2, 1, "", "Activity"], [20, 2, 1, "", "Behavior"], [20, 2, 1, "", "DefaultRuleset"], [20, 2, 1, "", "Method"], [20, 2, 1, "", "QuarkResult"], [20, 2, 1, "", "Ruleset"], [20, 0, 0, "-", "ciphey"], [20, 1, 1, "", "findMethodInAPK"], [21, 0, 0, "-", "frida"], [20, 1, 1, "", "getActivities"], [20, 0, 0, "-", "objection"], [20, 1, 1, "", "runQuarkAnalysis"], [20, 0, 0, "-", "utils"]], "quark.script.Activity": [[20, 4, 1, "", "hasIntentFilter"], [20, 4, 1, "", "isExported"]], "quark.script.Behavior": [[20, 4, 1, "", "getParamValues"], [20, 4, 1, "", "hasString"], [20, 4, 1, "", "hasUrl"], [20, 4, 1, "", "isArgFromMethod"]], "quark.script.Method": [[20, 5, 1, "", "className"], [20, 5, 1, "", "descriptor"], [20, 5, 1, "", "fullName"], [20, 4, 1, "", "getArguments"], [20, 4, 1, "", "getXrefFrom"], [20, 4, 1, "", "getXrefTo"], [20, 5, 1, "", "methodName"]], "quark.script.QuarkResult": [[20, 5, 1, "", "behaviorOccurList"], [20, 4, 1, "", "findMethodInCaller"], [20, 4, 1, "", "getAllStrings"], [20, 4, 1, "", "getMethodXrefFrom"], [20, 4, 1, "", "getMethodXrefTo"]], "quark.script.ciphey": [[20, 1, 1, "", "checkClearText"]], "quark.script.frida": [[21, 2, 1, "", "Behavior"], [21, 2, 1, "", "FridaResult"], [21, 2, 1, "", "MethodCallEventDispatcher"], [21, 1, 1, "", "runFridaHook"]], "quark.script.frida.Behavior": [[21, 4, 1, "", "getParamValues"], [21, 4, 1, "", "hasString"], [21, 4, 1, "", "hasUrl"]], "quark.script.frida.FridaResult": [[21, 5, 1, "", "behaviorOccurList"]], "quark.script.frida.MethodCallEventDispatcher": [[21, 4, 1, "", "handleCapturedEvent"], [21, 4, 1, "", "startWatchingMethodCall"], [21, 4, 1, "", "stopWatchingMethodCall"]], "quark.script.objection": [[20, 2, 1, "", "Objection"], [20, 1, 1, "", "convertMethodToString"]], "quark.script.objection.Objection": [[20, 4, 1, "", "hookMethod"]], "quark.script.utils": [[20, 1, 1, "", "isArgumentTrue"]], "quark.utils": [[22, 0, 0, "-", "colors"], [22, 0, 0, "-", "graph"], [22, 0, 0, "-", "output"], [22, 0, 0, "-", "pprint"], [22, 0, 0, "-", "regex"], [22, 0, 0, "-", "tools"], [22, 0, 0, "-", "weight"]], "quark.utils.colors": [[22, 1, 1, "", "black"], [22, 1, 1, "", "blue"], [22, 1, 1, "", "bold"], [22, 1, 1, "", "color"], [22, 1, 1, "", "colorful_report"], [22, 1, 1, "", "cyan"], [22, 1, 1, "", "green"], [22, 1, 1, "", "lightblue"], [22, 1, 1, "", "lightyellow"], [22, 1, 1, "", "magenta"], [22, 1, 1, "", "red"], [22, 1, 1, "", "white"], [22, 1, 1, "", "yellow"]], "quark.utils.graph": [[22, 1, 1, "", "call_graph"], [22, 1, 1, "", "select_label_menu"], [22, 1, 1, "", "show_comparison_graph"], [22, 1, 1, "", "wrapper_lookup"]], "quark.utils.output": [[22, 1, 1, "", "get_rule_classification_data"], [22, 1, 1, "", "output_parent_function_graph"], [22, 1, 1, "", "output_parent_function_json"], [22, 1, 1, "", "output_parent_function_table"]], "quark.utils.pprint": [[22, 1, 1, "", "print_error"], [22, 1, 1, "", "print_info"], [22, 1, 1, "", "print_success"], [22, 1, 1, "", "print_warning"], [22, 1, 1, "", "table"]], "quark.utils.regex": [[22, 1, 1, "", "extract_content"], [22, 1, 1, "", "extract_file"], [22, 1, 1, "", "extract_ip"], [22, 1, 1, "", "extract_url"], [22, 1, 1, "", "validate_base64"], [22, 1, 1, "", "validate_ip_address"], [22, 1, 1, "", "validate_url"]], "quark.utils.tools": [[22, 1, 1, "", "contains"], [22, 1, 1, "", "descriptor_to_androguard_format"], [22, 1, 1, "", "filter_api_by_usage_count"], [22, 1, 1, "", "get_arguments_from_argument_str"], [22, 1, 1, "", "get_parenthetic_contents"], [22, 1, 1, "", "remove_dup_list"]], "quark.utils.weight": [[22, 2, 1, "", "LEVEL_INFO"], [22, 2, 1, "", "Weight"]], "quark.utils.weight.LEVEL_INFO": [[22, 3, 1, "", "High"], [22, 3, 1, "", "LOW"], [22, 3, 1, "", "Moderate"]], "quark.utils.weight.Weight": [[22, 4, 1, "", "calculate"]], "quark.webreport": [[23, 0, 0, "-", "generate"]], "quark.webreport.generate": [[23, 2, 1, "", "ReportGenerator"], [23, 1, 1, "", "count_confidence_rule_number"], [23, 1, 1, "", "get_all_labels"], [23, 1, 1, "", "get_five_stages_labels"], [23, 1, 1, "", "get_json_report_html"]], "quark.webreport.generate.ReportGenerator": [[23, 4, 1, "", "get_analysis_report_html"], [23, 4, 1, "", "get_rule_generate_editor_html"], [23, 4, 1, "", "insert_genrule_report_html"], [23, 4, 1, "", "insert_radarechart_html"], [23, 4, 1, "", "insert_report_html"], [23, 4, 1, "", "insert_sample_information_html"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property", "6": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "exception", "Python exception"]}, "titleterms": {"add": 0, "rule": [0, 6, 27, 29, 30], "code": [1, 10, 29], "style": 1, "format": 1, "file": [1, 29], "folder": 1, "name": 1, "copyright": 1, "header": 1, "indent": 1, "maximum": 1, "line": [1, 27], "length": 1, "blank": 1, "import": 1, "string": 1, "print": 1, "log": [1, 29], "except": 1, "handl": 1, "document": [1, 5], "autom": 1, "test": [1, 31], "contribut": [2, 3, 6], "differ": 2, "stage": [2, 25], "core": [2, 14, 15, 16, 17], "member": 2, "alumni": 2, "consult": 2, "develop": [3, 4], "note": 3, "git": 3, "branch": 3, "model": 3, "releas": [3, 12], "version": 3, "ticket": 3, "system": 3, "updat": 5, "faq": 6, "i": [6, 29], "have": 6, "some": 6, "question": 6, "where": 6, "can": 6, "ask": 6, "got": 6, "an": 6, "error": 6, "while": 6, "us": [6, 29], "quark": [6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31], "engin": [6, 7, 8, 24, 25, 26, 27, 31], "what": 6, "do": 6, "how": 6, "threshold": 6, "score": [6, 27], "weight": [6, 22, 27], "work": 6, "why": 6, "keep": 6, "same": 6, "all": 6, "analys": 6, "write": 6, "my": 6, "take": 6, "part": 6, "book": 7, "content": [7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "indic": 7, "tabl": 7, "instal": [8, 9, 10], "integr": 10, "first": 10, "step": [10, 27], "second": 10, "snippet": 10, "As": 10, "you": [10, 28], "go": 10, "directori": 10, "scan": 10, "radiocontrast": [10, 13, 30], "organ": 12, "triag": 12, "team": 12, "respons": 12, "process": 12, "packag": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "subpackag": [13, 14, 20], "submodul": [13, 14, 16, 17, 18, 19, 20, 22, 23], "cli": [13, 30], "modul": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "config": 13, "freshquark": 13, "logo": 13, "report": [13, 27], "rulegener": 13, "analysi": [14, 29], "apkinfo": [14, 25], "parallelquark": 14, "rzapkinfo": 14, "axmlread": 15, "interfac": 16, "baseapkinfo": 16, "struct": 17, "bytecodeobject": [17, 25], "methodobject": 17, "registerobject": [17, 25], "ruleobject": [17, 25], "tableobject": [17, 25], "evalu": [18, 25, 26], "pyeval": [18, 25], "forens": 19, "vt_analysi": 19, "script": [20, 21, 29], "ciphei": 20, "object": [20, 25, 26, 29], "util": [20, 22, 26], "frida": [21, 29], "color": 22, "graph": 22, "output": 22, "pprint": 22, "regex": 22, "tool": [22, 29], "check": [22, 27], "sequenc": 22, "pattern": [22, 29], "within": 22, "two": 22, "list": 22, "webreport": 23, "gener": [23, 30], "insid": 24, "introduct": 25, "dalvik": 25, "bytecod": 25, "loader": 25, "xrule": 25, "explan": 25, "each": 25, "function": 25, "five": 25, "inspect": 25, "level": [25, 27], "1": [25, 27], "2": [25, 27], "3": [25, 27], "4": [25, 27], "5": [25, 27], "project": 26, "overview": 26, "map": 26, "architectur": 26, "diagram": 26, "workflow": 27, "command": 27, "apk": [27, 29], "inform": 27, "extract": 27, "load": 27, "json": [27, 29], "calcul": 27, "6": 27, "summari": 27, "detail": 27, "mit": 28, "program": 28, "better": 28, "commun": 28, "minumum": 28, "requir": 28, "contact": 28, "u": 28, "ecosystem": 29, "mobil": 29, "secur": 29, "innov": 29, "interact": 29, "dynam": 29, "static": 29, "re": 29, "usabl": 29, "sharabl": 29, "more": 29, "api": [29, 30], "come": 29, "introduc": 29, "findmethodinapk": 29, "samplepath": 29, "targetmethod": 29, "runquarkanalysi": 29, "sample_path": 29, "ruleinst": 29, "quarkresultinst": 29, "behavioroccurlist": 29, "getallstr": 29, "none": 29, "findmethodincal": 29, "callermethod": 29, "behaviorinst": 29, "firstapi": 29, "fullnam": 29, "secondapi": 29, "hasstr": 29, "isregex": 29, "hasurl": 29, "methodcal": 29, "getparamvalu": 29, "isargfrommethod": 29, "methodinst": 29, "getxreffrom": 29, "getxrefto": 29, "getargu": 29, "host": 29, "objinst": 29, "hookmethod": 29, "method": 29, "watcharg": 29, "watchbacktrac": 29, "watchret": 29, "runfridahook": 29, "apkpackagenam": 29, "methodparamtyp": 29, "secondtowait": 29, "checkcleartext": 29, "inputstr": 29, "getact": 29, "activityinst": 29, "hasintentfilt": 29, "isexport": 29, "analyz": 29, "real": 29, "case": 29, "instasteal": 29, "hook": 29, "contain": 29, "url": 29, "result": 29, "termin": 29, "callcomponentmethod": 29, "detect": 29, "trigger": 29, "cwe": 29, "798": 29, "android": 29, "applic": 29, "ovaa": 29, "scipt": 29, "py": 29, "findsecretkeyspec": 29, "hard": 29, "ae": 29, "kei": 29, "94": 29, "loadexternalcod": 29, "921": 29, "checkfileexist": 29, "312": 29, "agent": 29, "j": 29, "89": 29, "androgoat": 29, "executesqlcommand": 29, "926": 29, "dvba": 29, "749": 29, "mstg": 29, "java": 29, "configurejsexecut": 29, "532": 29, "780": 29, "useofcryptographicalgo": 29, "319": 29, "setretrofitbaseurl": 29, "usag": 30, "web": 30, "editor": 30, "tutori": 30, "run": 31, "docker": 31}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Add Rules": [[0, "add-rules"]], "Coding Style": [[1, "coding-style"]], "Formatting": [[1, "formatting"]], "File and folder naming": [[1, "file-and-folder-naming"]], "Copyright header": [[1, "copyright-header"]], "Indentation": [[1, "indentation"]], "Maximum Line Length": [[1, "maximum-line-length"]], "Blank Lines": [[1, "blank-lines"]], "Imports": [[1, "imports"]], "Strings": [[1, "strings"]], "Printing and Logging": [[1, "printing-and-logging"]], "Exceptions": [[1, "exceptions"]], "Naming": [[1, "naming"]], "Exception handling": [[1, "exception-handling"]], "Documentation": [[1, "documentation"]], "Automated testing": [[1, "automated-testing"]], "Contribution": [[2, "contribution"]], "Different stages of core members": [[2, "different-stages-of-core-members"]], "Core members": [[2, "core-members"]], "Alumni": [[2, "alumni"]], "Consultants": [[2, "consultants"]], "Development Notes": [[3, "development-notes"]], "Git Branching Model": [[3, "git-branching-model"]], "Release Versioning": [[3, "release-versioning"]], "Ticketing System": [[3, "ticketing-system"]], "Contribute": [[3, "contribute"]], "Development": [[4, "development"]], "Updating Documentation": [[5, "updating-documentation"]], "FAQ": [[6, "faq"]], "I have some questions. Where can I ask?": [[6, "i-have-some-questions-where-can-i-ask"]], "I got an error while using Quark-Engine. What can I do?": [[6, "i-got-an-error-while-using-quark-engine-what-can-i-do"]], "How do threshold, score, and weight working in Quark Engine?": [[6, "how-do-threshold-score-and-weight-working-in-quark-engine"]], "Why do scores keeping the same in all the analyses?": [[6, "why-do-scores-keeping-the-same-in-all-the-analyses"]], "How can I write a rule?": [[6, "how-can-i-write-a-rule"]], "How can I contribute my rules?": [[6, "how-can-i-contribute-my-rules"]], "Can I take part and contribute to Quark?": [[6, "can-i-take-part-and-contribute-to-quark"]], "Quark-Engine Book": [[7, "quark-engine-book"]], "Contents:": [[7, null]], "Indices and tables": [[7, "indices-and-tables"]], "Installing Quark-Engine": [[8, "installing-quark-engine"]], "Installation": [[9, "installation"]], "Integration": [[10, "integration"]], "First Step: Installation": [[10, "first-step-installation"]], "Second Step: Code Snippet As You Go": [[10, "second-step-code-snippet-as-you-go"]], "Directory Scanning": [[10, "directory-scanning"]], "Radiocontrast": [[10, "radiocontrast"], [30, "radiocontrast"]], "quark": [[11, "quark"]], "Organization": [[12, "organization"]], "Quark triage team": [[12, "quark-triage-team"]], "Responsibilities": [[12, "responsibilities"]], "Triage process": [[12, "triage-process"]], "Release process": [[12, "release-process"]], "quark package": [[13, "quark-package"]], "Subpackages": [[13, "subpackages"], [14, "subpackages"], [20, "subpackages"]], "Submodules": [[13, "submodules"], [14, "submodules"], [16, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [22, "submodules"], [23, "submodules"]], "quark.cli module": [[13, "module-quark.cli"]], "quark.config module": [[13, "module-quark.config"]], "quark.freshquark module": [[13, "module-quark.freshquark"]], "quark.logo module": [[13, "module-quark.logo"]], "quark.radiocontrast module": [[13, "module-quark.radiocontrast"]], "quark.report module": [[13, "module-quark.report"]], "quark.rulegeneration module": [[13, "module-quark.rulegeneration"]], "Module contents": [[13, "module-quark"], [14, "module-quark.core"], [15, "module-quark.core.axmlreader"], [16, "module-quark.core.interface"], [17, "module-quark.core.struct"], [18, "module-quark.evaluator"], [19, "module-quark.forensic"], [20, "module-quark.script"], [21, "module-quark.script.frida"], [22, "module-quark.utils"], [23, "module-quark.webreport"]], "quark.core package": [[14, "quark-core-package"]], "quark.core.analysis module": [[14, "module-quark.core.analysis"]], "quark.core.apkinfo module": [[14, "module-quark.core.apkinfo"]], "quark.core.parallelquark module": [[14, "module-quark.core.parallelquark"]], "quark.core.quark module": [[14, "module-quark.core.quark"]], "quark.core.rzapkinfo module": [[14, "module-quark.core.rzapkinfo"]], "quark.core.axmlreader package": [[15, "quark-core-axmlreader-package"]], "quark.core.interface package": [[16, "quark-core-interface-package"]], "quark.core.interface.baseapkinfo module": [[16, "module-quark.core.interface.baseapkinfo"]], "quark.core.struct package": [[17, "quark-core-struct-package"]], "quark.core.struct.bytecodeobject module": [[17, "module-quark.core.struct.bytecodeobject"]], "quark.core.struct.methodobject module": [[17, "module-quark.core.struct.methodobject"]], "quark.core.struct.registerobject module": [[17, "module-quark.core.struct.registerobject"]], "quark.core.struct.ruleobject module": [[17, "module-quark.core.struct.ruleobject"]], "quark.core.struct.tableobject module": [[17, "module-quark.core.struct.tableobject"]], "quark.evaluator package": [[18, "quark-evaluator-package"]], "quark.evaluator.pyeval module": [[18, "module-quark.evaluator.pyeval"]], "quark.forensic package": [[19, "quark-forensic-package"]], "quark.forensic.forensic module": [[19, "module-quark.forensic.forensic"]], "quark.forensic.vt_analysis module": [[19, "module-quark.forensic.vt_analysis"]], "quark.script package": [[20, "quark-script-package"]], "quark.script.ciphey module": [[20, "module-quark.script.ciphey"]], "quark.script.objection module": [[20, "module-quark.script.objection"]], "quark.script.utils module": [[20, "module-quark.script.utils"]], "quark.script.frida package": [[21, "quark-script-frida-package"]], "quark.utils package": [[22, "quark-utils-package"]], "quark.utils.colors module": [[22, "module-quark.utils.colors"]], "quark.utils.graph module": [[22, "module-quark.utils.graph"]], "quark.utils.output module": [[22, "module-quark.utils.output"]], "quark.utils.pprint module": [[22, "module-quark.utils.pprint"]], "quark.utils.regex module": [[22, "module-quark.utils.regex"]], "quark.utils.tools module": [[22, "module-quark.utils.tools"]], "Check the sequence pattern within two list.": [[22, "check-the-sequence-pattern-within-two-list"]], "quark.utils.weight module": [[22, "module-quark.utils.weight"]], "quark.webreport package": [[23, "quark-webreport-package"]], "quark.webreport.generate module": [[23, "module-quark.webreport.generate"]], "Quark-Engine Inside": [[24, "quark-engine-inside"]], "Quark-Engine Objects Introduction": [[25, "quark-engine-objects-introduction"]], "Dalvik Bytecode Loader(quark.Evaluator.pyeval)": [[25, "dalvik-bytecode-loader-quark-evaluator-pyeval"]], "XRule(quark.Objects.XRule)": [[25, "xrule-quark-objects-xrule"]], "Explanation of each function": [[25, "explanation-of-each-function"], [25, "id1"], [25, "id2"], [25, "id3"], [25, "id4"]], "Five-stage inspection": [[25, "five-stage-inspection"]], "Level 1": [[25, "level-1"]], "Level 2": [[25, "level-2"]], "Level 3": [[25, "level-3"]], "Level 4": [[25, "level-4"]], "Level 5": [[25, "level-5"]], "Apkinfo(quark.Objects.Apkinfo)": [[25, "apkinfo-quark-objects-apkinfo"]], "BytecodeObject(quark.Objects.bytecodeObject)": [[25, "bytecodeobject-quark-objects-bytecodeobject"]], "RuleObject(quark.Objects.ruleobject)": [[25, "ruleobject-quark-objects-ruleobject"]], "TableObject(quark.Objects.tableobject)": [[25, "tableobject-quark-objects-tableobject"]], "RegisterObject(quark.Objects.registerobject)": [[25, "registerobject-quark-objects-registerobject"]], "Quark-Engine Project Overview": [[26, "quark-engine-project-overview"]], "Quark-Engine Map": [[26, "quark-engine-map"]], "Quark module architecture diagram": [[26, "quark-module-architecture-diagram"]], "Objects": [[26, "objects"]], "Evaluator": [[26, "evaluator"]], "utils": [[26, "utils"]], "Quark-Engine Workflow": [[27, "quark-engine-workflow"]], "Quark-Engine Step 1(Command Line)": [[27, "quark-engine-step-1-command-line"]], "Quark-Engine Step 2 (APK Information Extract)": [[27, "quark-engine-step-2-apk-information-extract"]], "Quark-Engine Step 3 (Load JSON Rule)": [[27, "quark-engine-step-3-load-json-rule"]], "Quark-Engine Step 4 (Level 1-5 Check)": [[27, "quark-engine-step-4-level-1-5-check"]], "Quark-Engine Step 5 (Weighted Score Calculation)": [[27, "quark-engine-step-5-weighted-score-calculation"]], "Quark-Engine Step 6 (Report)": [[27, "quark-engine-step-6-report"]], "Summary Report": [[27, "summary-report"]], "Detail Report": [[27, "detail-report"]], "Quark MIT Program": [[28, "quark-mit-program"]], "Quark to You": [[28, "quark-to-you"]], "You to Quark": [[28, "you-to-quark"]], "Better Community": [[28, "better-community"]], "Minumum Requirements": [[28, "minumum-requirements"]], "Contact us": [[28, "contact-us"]], "Quark Script": [[29, "quark-script"]], "Ecosystem for Mobile Security Tools": [[29, "ecosystem-for-mobile-security-tools"]], "Innovative & Interactive": [[29, "innovative-interactive"]], "Dynamic & Static Analysis": [[29, "dynamic-static-analysis"]], "Re-Usable & Sharable": [[29, "re-usable-sharable"]], "More APIs to come": [[29, "more-apis-to-come"]], "Introduce of Quark Script APIs": [[29, "introduce-of-quark-script-apis"]], "findMethodInAPK(samplePath, targetMethod)": [[29, "findmethodinapk-samplepath-targetmethod"]], "Rule(rule.json)": [[29, "rule-rule-json"]], "runQuarkAnalysis(SAMPLE_PATH, ruleInstance)": [[29, "runquarkanalysis-sample-path-ruleinstance"]], "quarkResultInstance.behaviorOccurList": [[29, "quarkresultinstance-behavioroccurlist"]], "quarkResultInstance.getAllStrings(none)": [[29, "quarkresultinstance-getallstrings-none"]], "quarkResultInstance.findMethodInCaller(callerMethod, targetMethod)": [[29, "quarkresultinstance-findmethodincaller-callermethod-targetmethod"]], "behaviorInstance.firstAPI.fullName": [[29, "behaviorinstance-firstapi-fullname"]], "behaviorInstance.secondAPI.fullName": [[29, "behaviorinstance-secondapi-fullname"]], "behaviorInstance.hasString(pattern, isRegex)": [[29, "behaviorinstance-hasstring-pattern-isregex"]], "behaviorInstance.hasUrl(none)": [[29, "behaviorinstance-hasurl-none"]], "behaviorInstance.methodCaller": [[29, "behaviorinstance-methodcaller"]], "behaviorInstance.getParamValues(none)": [[29, "behaviorinstance-getparamvalues-none"]], "behaviorInstance.isArgFromMethod(targetMethod)": [[29, "behaviorinstance-isargfrommethod-targetmethod"]], "methodInstance.getXrefFrom(none)": [[29, "methodinstance-getxreffrom-none"]], "methodInstance.getXrefTo(none)": [[29, "methodinstance-getxrefto-none"]], "methodInstance.getArguments(none)": [[29, "methodinstance-getarguments-none"]], "Objection(host)": [[29, "objection-host"]], "objInstance.hookMethod(method, watchArgs, watchBacktrace, watchRet)": [[29, "objinstance-hookmethod-method-watchargs-watchbacktrace-watchret"]], "runFridaHook(apkPackageName, targetMethod, methodParamTypes, secondToWait)": [[29, "runfridahook-apkpackagename-targetmethod-methodparamtypes-secondtowait"]], "checkClearText(inputString)": [[29, "checkcleartext-inputstring"]], "getActivities(samplePath)": [[29, "getactivities-samplepath"]], "activityInstance.hasIntentFilter(none)": [[29, "activityinstance-hasintentfilter-none"]], "activityInstance.isExported(none)": [[29, "activityinstance-isexported-none"]], "Analyzing real case (InstaStealer) using Quark Script": [[29, "analyzing-real-case-instastealer-using-quark-script"]], "Quark Script that dynamic hooks the method containing urls": [[29, "quark-script-that-dynamic-hooks-the-method-containing-urls"]], "Quark Script Result": [[29, "quark-script-result"], [29, "id3"], [29, "id5"], [29, "id7"], [29, "id9"], [29, "id11"], [29, "id13"], [29, "id15"], [29, "id17"], [29, "id19"], [29, "id21"]], "Logs on the Objection terminal (hooking)": [[29, "logs-on-the-objection-terminal-hooking"]], "Method (callComponentMethod) with urls is detected triggered!": [[29, "method-callcomponentmethod-with-urls-is-detected-triggered"]], "Detect CWE-798 in Android Application (ovaa.apk)": [[29, "detect-cwe-798-in-android-application-ovaa-apk"]], "Quark Scipt: CWE-798.py": [[29, "quark-scipt-cwe-798-py"]], "Quark Rule: findSecretKeySpec.json": [[29, "quark-rule-findsecretkeyspec-json"]], "Hard-Coded AES key in the APK file": [[29, "hard-coded-aes-key-in-the-apk-file"]], "Detect CWE-94 in Android Application (ovaa.apk)": [[29, "detect-cwe-94-in-android-application-ovaa-apk"]], "Quark Scipt: CWE-94.py": [[29, "quark-scipt-cwe-94-py"]], "Quark Rule: loadExternalCode.json": [[29, "quark-rule-loadexternalcode-json"]], "Detect CWE-921 in Android Application (ovaa.apk)": [[29, "detect-cwe-921-in-android-application-ovaa-apk"]], "Quark Script CWE-921.py": [[29, "quark-script-cwe-921-py"]], "Quark Rule: checkFileExistence.json": [[29, "quark-rule-checkfileexistence-json"]], "Detect CWE-312 in Android Application (ovaa.apk)": [[29, "detect-cwe-312-in-android-application-ovaa-apk"]], "Quark Script CWE-312.py": [[29, "quark-script-cwe-312-py"]], "Frida Script: agent.js": [[29, "frida-script-agent-js"]], "Detect CWE-89 in Android Application (AndroGoat.apk)": [[29, "detect-cwe-89-in-android-application-androgoat-apk"]], "Quark Script CWE-89.py": [[29, "quark-script-cwe-89-py"]], "Quark Rule: executeSQLCommand.json": [[29, "quark-rule-executesqlcommand-json"]], "Detect CWE-926 in Android Application (dvba.apk)": [[29, "detect-cwe-926-in-android-application-dvba-apk"]], "Quark Script CWE-926.py": [[29, "quark-script-cwe-926-py"]], "Detect CWE-749 in Android Application (MSTG-Android-Java.apk)": [[29, "detect-cwe-749-in-android-application-mstg-android-java-apk"]], "Quark Script CWE-749.py": [[29, "quark-script-cwe-749-py"]], "Quark Rule: configureJsExecution.json": [[29, "quark-rule-configurejsexecution-json"]], "Detect CWE-532 in Android Application (dvba.apk)": [[29, "detect-cwe-532-in-android-application-dvba-apk"]], "Quark Script CWE-532.py": [[29, "quark-script-cwe-532-py"]], "Detect CWE-780 in Android Application (MSTG-Android-Java.apk)": [[29, "detect-cwe-780-in-android-application-mstg-android-java-apk"]], "Quark Script CWE-780.py": [[29, "quark-script-cwe-780-py"]], "Quark Rule: useOfCryptographicAlgo.json": [[29, "quark-rule-useofcryptographicalgo-json"]], "Detect CWE-319 in Android Application (ovaa.apk)": [[29, "detect-cwe-319-in-android-application-ovaa-apk"]], "Quark Script CWE-319.py": [[29, "quark-script-cwe-319-py"]], "Quark Rule: setRetrofitBaseUrl.json": [[29, "quark-rule-setretrofitbaseurl-json"]], "Rule Generation": [[30, "rule-generation"]], "CLI Usage": [[30, "cli-usage"]], "API Usage": [[30, "api-usage"]], "Web Editor Tutorial": [[30, "web-editor-tutorial"]], "Testing Quark-Engine": [[31, "testing-quark-engine"]], "Running in Docker": [[31, "running-in-docker"]]}, "indexentries": {"radiocontrast (class in quark.radiocontrast)": [[13, "quark.radiocontrast.RadioContrast"]], "report (class in quark.report)": [[13, "quark.report.Report"]], "rulegeneration (class in quark.rulegeneration)": [[13, "quark.rulegeneration.RuleGeneration"]], "analysis() (quark.report.report method)": [[13, "quark.report.Report.analysis"]], "download() (in module quark.freshquark)": [[13, "quark.freshquark.download"]], "entry_point() (in module quark.freshquark)": [[13, "quark.freshquark.entry_point"]], "generate_rule() (quark.radiocontrast.radiocontrast method)": [[13, "quark.radiocontrast.RadioContrast.generate_rule"]], "generate_rule() (quark.rulegeneration.rulegeneration method)": [[13, "quark.rulegeneration.RuleGeneration.generate_rule"]], "get_report() (quark.report.report method)": [[13, "quark.report.Report.get_report"]], "logo() (in module quark.logo)": [[13, "quark.logo.logo"]], "method_recursive_search() (quark.radiocontrast.radiocontrast method)": [[13, "quark.radiocontrast.RadioContrast.method_recursive_search"]], "module": [[13, "module-quark"], [13, "module-quark.cli"], [13, "module-quark.config"], [13, "module-quark.freshquark"], [13, "module-quark.logo"], [13, "module-quark.radiocontrast"], [13, "module-quark.report"], [13, "module-quark.rulegeneration"], [14, "module-quark.core"], [14, "module-quark.core.analysis"], [14, "module-quark.core.apkinfo"], [14, "module-quark.core.parallelquark"], [14, "module-quark.core.quark"], [14, "module-quark.core.rzapkinfo"], [15, "module-quark.core.axmlreader"], [16, "module-quark.core.interface"], [16, "module-quark.core.interface.baseapkinfo"], [17, "module-quark.core.struct"], [17, "module-quark.core.struct.bytecodeobject"], [17, "module-quark.core.struct.methodobject"], [17, "module-quark.core.struct.registerobject"], [17, "module-quark.core.struct.ruleobject"], [17, "module-quark.core.struct.tableobject"], [18, "module-quark.evaluator"], [18, "module-quark.evaluator.pyeval"], [19, "module-quark.forensic"], [19, "module-quark.forensic.forensic"], [19, "module-quark.forensic.vt_analysis"], [20, "module-quark.script"], [20, "module-quark.script.ciphey"], [20, "module-quark.script.objection"], [20, "module-quark.script.utils"], [21, "module-quark.script.frida"], [22, "module-quark.utils"], [22, "module-quark.utils.colors"], [22, "module-quark.utils.graph"], [22, "module-quark.utils.output"], [22, "module-quark.utils.pprint"], [22, "module-quark.utils.regex"], [22, "module-quark.utils.tools"], [22, "module-quark.utils.weight"], [23, "module-quark.webreport"], [23, "module-quark.webreport.generate"]], "quark": [[13, "module-quark"]], "quark.cli": [[13, "module-quark.cli"]], "quark.config": [[13, "module-quark.config"]], "quark.freshquark": [[13, "module-quark.freshquark"]], "quark.logo": [[13, "module-quark.logo"]], "quark.radiocontrast": [[13, "module-quark.radiocontrast"]], "quark.report": [[13, "module-quark.report"]], "quark.rulegeneration": [[13, "module-quark.rulegeneration"]], "update_rule_buffer() (in module quark.cli)": [[13, "quark.cli.update_rule_buffer"]], "androguardimp (class in quark.core.apkinfo)": [[14, "quark.core.apkinfo.AndroguardImp"]], "parallelquark (class in quark.core.parallelquark)": [[14, "quark.core.parallelquark.ParallelQuark"]], "quark (class in quark.core.quark)": [[14, "quark.core.quark.Quark"]], "quarkanalysis (class in quark.core.analysis)": [[14, "quark.core.analysis.QuarkAnalysis"]], "rizincache (in module quark.core.rzapkinfo)": [[14, "quark.core.rzapkinfo.RizinCache"]], "rizinimp (class in quark.core.rzapkinfo)": [[14, "quark.core.rzapkinfo.RizinImp"]], "activities (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.activities"]], "activities (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.activities"]], "add_table_row() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.add_table_row"]], "all_methods (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.all_methods"]], "all_methods (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.all_methods"]], "analysis (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.analysis"]], "android_apis (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.android_apis"]], "android_apis (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.android_apis"]], "apk (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.apk"]], "apk_filename (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.apk_filename"]], "apk_filepath (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.apk_filepath"]], "apply_rules() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.apply_rules"]], "call_graph_analysis_list (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.call_graph_analysis_list"]], "check_parameter() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_parameter"]], "check_parameter_on_single_method() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_parameter_on_single_method"]], "check_parameter_values() (quark.core.quark.quark static method)": [[14, "quark.core.quark.Quark.check_parameter_values"]], "check_sequence() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_sequence"]], "clean_result() (quark.core.analysis.quarkanalysis method)": [[14, "quark.core.analysis.QuarkAnalysis.clean_result"]], "close() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.close"]], "core_library (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.core_library"]], "crime_description (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.crime_description"]], "custom_methods (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.custom_methods"]], "custom_methods (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.custom_methods"]], "dalvikvmformat (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.dalvikvmformat"]], "find_api_usage() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_api_usage"]], "find_intersection() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_intersection"]], "find_method() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.find_method"]], "find_method() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.find_method"]], "find_previous_method() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_previous_method"]], "first_api (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.first_api"]], "generate_json_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.generate_json_report"]], "get_json_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.get_json_report"]], "get_method_bytecode() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_method_bytecode"]], "get_method_bytecode() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_method_bytecode"]], "get_strings() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_strings"]], "get_strings() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_strings"]], "get_wrapper_smali() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_wrapper_smali"]], "get_wrapper_smali() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_wrapper_smali"]], "init_label_report_table() (in module quark.core.analysis)": [[14, "quark.core.analysis.init_label_report_table"]], "init_pretty_table() (in module quark.core.analysis)": [[14, "quark.core.analysis.init_pretty_table"]], "json_report (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.json_report"]], "label_report_table (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.label_report_table"]], "level_1_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_1_result"]], "level_2_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_2_result"]], "level_3_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_3_result"]], "level_4_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_4_result"]], "level_5_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_5_result"]], "lowerfunc() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.lowerfunc"]], "lowerfunc() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.lowerfunc"]], "method_recursive_search() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.method_recursive_search"]], "parent_wrapper_mapping (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.parent_wrapper_mapping"]], "permissions (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.permissions"]], "permissions (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.permissions"]], "quark.core": [[14, "module-quark.core"]], "quark.core.analysis": [[14, "module-quark.core.analysis"]], "quark.core.apkinfo": [[14, "module-quark.core.apkinfo"]], "quark.core.parallelquark": [[14, "module-quark.core.parallelquark"]], "quark.core.quark": [[14, "module-quark.core.quark"]], "quark.core.rzapkinfo": [[14, "module-quark.core.rzapkinfo"]], "ret_type (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.ret_type"]], "run() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.run"]], "run() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.run"]], "score_sum (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.score_sum"]], "second_api (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.second_api"]], "show_call_graph() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_call_graph"]], "show_detail_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_detail_report"]], "show_label_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_label_report"]], "show_rule_classification() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_rule_classification"]], "show_summary_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_summary_report"]], "subclass_relationships (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.subclass_relationships"]], "subclass_relationships (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.subclass_relationships"]], "summary_report_table (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.summary_report_table"]], "superclass_relationships (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.superclass_relationships"]], "superclass_relationships (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.superclass_relationships"]], "upperfunc() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.upperfunc"]], "upperfunc() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.upperfunc"]], "weight_sum (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.weight_sum"]], "axmlexception": [[15, "quark.core.axmlreader.AxmlException"]], "axmlreader (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.AxmlReader"]], "resvalue (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.ResValue"]], "res_value_type (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.Res_value_type"]], "type_attribute (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_ATTRIBUTE"]], "type_dimension (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DIMENSION"]], "type_dynamic_attribute (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DYNAMIC_ATTRIBUTE"]], "type_dynamic_reference (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DYNAMIC_REFERENCE"]], "type_first_color_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FIRST_COLOR_INT"]], "type_first_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FIRST_INT"]], "type_float (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FLOAT"]], "type_fraction (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FRACTION"]], "type_int_boolean (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_BOOLEAN"]], "type_int_color_argb4 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_ARGB4"]], "type_int_color_argb8 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_ARGB8"]], "type_int_color_rgb4 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_RGB4"]], "type_int_color_rgb8 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_RGB8"]], "type_int_dec (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_DEC"]], "type_int_hex (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_HEX"]], "type_last_color_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_LAST_COLOR_INT"]], "type_last_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_LAST_INT"]], "type_null (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_NULL"]], "type_reference (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_REFERENCE"]], "type_string (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_STRING"]], "axml_size (quark.core.axmlreader.axmlreader property)": [[15, "quark.core.axmlreader.AxmlReader.axml_size"]], "data (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.data"]], "file_size (quark.core.axmlreader.axmlreader property)": [[15, "quark.core.axmlreader.AxmlReader.file_size"]], "get_attributes() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_attributes"]], "get_string() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_string"]], "get_xml_tree() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_xml_tree"]], "name (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.name"]], "namespace (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.namespace"]], "quark.core.axmlreader": [[15, "module-quark.core.axmlreader"]], "type (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.type"]], "value (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.value"]], "baseapkinfo (class in quark.core.interface.baseapkinfo)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo"]], "activities (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.activities"]], "all_methods (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.all_methods"]], "android_apis (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.android_apis"]], "apk_filename (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.apk_filename"]], "apk_filepath (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.apk_filepath"]], "core_library (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.core_library"]], "custom_methods (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.custom_methods"]], "filename (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.filename"]], "filesize (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.filesize"]], "find_method() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.find_method"]], "get_method_bytecode() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_method_bytecode"]], "get_strings() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_strings"]], "get_subclasses (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_subclasses"]], "get_wrapper_smali() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_wrapper_smali"]], "lowerfunc() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.lowerfunc"]], "md5 (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.md5"]], "permissions (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.permissions"]], "quark.core.interface": [[16, "module-quark.core.interface"]], "quark.core.interface.baseapkinfo": [[16, "module-quark.core.interface.baseapkinfo"]], "ret_type (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.ret_type"]], "superclass_relationships (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.superclass_relationships"]], "upperfunc() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.upperfunc"]], "bytecodeobject (class in quark.core.struct.bytecodeobject)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject"]], "methodobject (class in quark.core.struct.methodobject)": [[17, "quark.core.struct.methodobject.MethodObject"]], "registerobject (class in quark.core.struct.registerobject)": [[17, "quark.core.struct.registerobject.RegisterObject"]], "ruleobject (class in quark.core.struct.ruleobject)": [[17, "quark.core.struct.ruleobject.RuleObject"]], "tableobject (class in quark.core.struct.tableobject)": [[17, "quark.core.struct.tableobject.TableObject"]], "access_flags (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.access_flags"]], "api (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.api"]], "cache (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.cache"]], "called_by_func (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.called_by_func"]], "check_item (quark.core.struct.ruleobject.ruleobject attribute)": [[17, "quark.core.struct.ruleobject.RuleObject.check_item"]], "class_name (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.class_name"]], "crime (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.crime"]], "current_type (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.current_type"]], "descriptor (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.descriptor"]], "full_name (quark.core.struct.methodobject.methodobject property)": [[17, "quark.core.struct.methodobject.MethodObject.full_name"]], "get_obj_list() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.get_obj_list"]], "get_score() (quark.core.struct.ruleobject.ruleobject method)": [[17, "quark.core.struct.ruleobject.RuleObject.get_score"]], "get_table() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.get_table"]], "hash_index (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.hash_index"]], "hash_table (quark.core.struct.tableobject.tableobject attribute)": [[17, "quark.core.struct.tableobject.TableObject.hash_table"]], "insert() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.insert"]], "is_android_api() (quark.core.struct.methodobject.methodobject method)": [[17, "quark.core.struct.methodobject.MethodObject.is_android_api"]], "label (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.label"]], "mnemonic (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.mnemonic"]], "name (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.name"]], "parameter (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.parameter"]], "permission (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.permission"]], "pop() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.pop"]], "quark.core.struct": [[17, "module-quark.core.struct"]], "quark.core.struct.bytecodeobject": [[17, "module-quark.core.struct.bytecodeobject"]], "quark.core.struct.methodobject": [[17, "module-quark.core.struct.methodobject"]], "quark.core.struct.registerobject": [[17, "module-quark.core.struct.registerobject"]], "quark.core.struct.ruleobject": [[17, "module-quark.core.struct.ruleobject"]], "quark.core.struct.tableobject": [[17, "module-quark.core.struct.tableobject"]], "register_name (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.register_name"]], "registers (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.registers"]], "rule_filename (quark.core.struct.ruleobject.ruleobject attribute)": [[17, "quark.core.struct.ruleobject.RuleObject.rule_filename"]], "score (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.score"]], "type_histroy (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.type_histroy"]], "value (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.value"]], "aget_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.AGET_KIND"]], "aget_wide_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.AGET_WIDE_KIND"]], "aput_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.APUT_KIND"]], "aput_wide_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.APUT_WIDE_KIND"]], "binop_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.BINOP_KIND"]], "cast_type() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CAST_TYPE"]], "const() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST"]], "const_class() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_CLASS"]], "const_four() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_FOUR"]], "const_highsixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_HIGHSIXTEEN"]], "const_sixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_SIXTEEN"]], "const_string() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_STRING"]], "const_wide() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE"]], "const_wide_highsixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_HIGHSIXTEEN"]], "const_wide_sixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_SIXTEEN"]], "const_wide_thirty_two() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_THIRTY_TWO"]], "filled_new_array_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.FILLED_NEW_ARRAY_KIND"]], "invoke_custom() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_CUSTOM"]], "invoke_direct() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_DIRECT"]], "invoke_interface() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_INTERFACE"]], "invoke_polymorphic() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_POLYMORPHIC"]], "invoke_static() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_STATIC"]], "invoke_super() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_SUPER"]], "invoke_virtual() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_VIRTUAL"]], "invoke_virtual_range() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_VIRTUAL_RANGE"]], "move_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_KIND"]], "move_result() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT"]], "move_result_object() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT_OBJECT"]], "move_result_wide() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT_WIDE"]], "neg_and_not_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEG_AND_NOT_KIND"]], "new_array() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEW_ARRAY"]], "new_instance() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEW_INSTANCE"]], "pyeval (class in quark.evaluator.pyeval)": [[18, "quark.evaluator.pyeval.PyEval"]], "get_method_pattern() (quark.evaluator.pyeval.pyeval static method)": [[18, "quark.evaluator.pyeval.PyEval.get_method_pattern"]], "logger() (in module quark.evaluator.pyeval)": [[18, "quark.evaluator.pyeval.logger"]], "quark.evaluator": [[18, "module-quark.evaluator"]], "quark.evaluator.pyeval": [[18, "module-quark.evaluator.pyeval"]], "show_table() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.show_table"]], "forensic (class in quark.forensic.forensic)": [[19, "quark.forensic.forensic.Forensic"]], "vtanalysis (class in quark.forensic.vt_analysis)": [[19, "quark.forensic.vt_analysis.VTAnalysis"]], "all_strings (quark.forensic.forensic.forensic attribute)": [[19, "quark.forensic.forensic.Forensic.all_strings"]], "analyze_multi_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.analyze_multi_file"]], "analyze_single_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.analyze_single_file"]], "apk (quark.forensic.forensic.forensic attribute)": [[19, "quark.forensic.forensic.Forensic.apk"]], "change_api_key() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.change_api_key"]], "check_api_key_available() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.check_api_key_available"]], "get_all_strings() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_all_strings"]], "get_android_api() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_android_api"]], "get_api_keys_list() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_api_keys_list"]], "get_base64() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_base64"]], "get_content() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_content"]], "get_file() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_file"]], "get_file_md5() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_file_md5"]], "get_ip() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_ip"]], "get_reports() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_reports"]], "get_url() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_url"]], "quark.forensic": [[19, "module-quark.forensic"]], "quark.forensic.forensic": [[19, "module-quark.forensic.forensic"]], "quark.forensic.vt_analysis": [[19, "module-quark.forensic.vt_analysis"]], "retreive_report() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.retreive_report"]], "scan_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.scan_file"]], "set_progress() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.set_progress"]], "activity (class in quark.script)": [[20, "quark.script.Activity"]], "behavior (class in quark.script)": [[20, "quark.script.Behavior"]], "defaultruleset (class in quark.script)": [[20, "quark.script.DefaultRuleset"]], "method (class in quark.script)": [[20, "quark.script.Method"]], "objection (class in quark.script.objection)": [[20, "quark.script.objection.Objection"]], "quarkresult (class in quark.script)": [[20, "quark.script.QuarkResult"]], "ruleset (class in quark.script)": [[20, "quark.script.Ruleset"]], "behavioroccurlist (quark.script.quarkresult property)": [[20, "quark.script.QuarkResult.behaviorOccurList"]], "checkcleartext() (in module quark.script.ciphey)": [[20, "quark.script.ciphey.checkClearText"]], "classname (quark.script.method property)": [[20, "quark.script.Method.className"]], "convertmethodtostring() (in module quark.script.objection)": [[20, "quark.script.objection.convertMethodToString"]], "descriptor (quark.script.method property)": [[20, "quark.script.Method.descriptor"]], "findmethodinapk() (in module quark.script)": [[20, "quark.script.findMethodInAPK"]], "findmethodincaller() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.findMethodInCaller"]], "fullname (quark.script.method property)": [[20, "quark.script.Method.fullName"]], "getactivities() (in module quark.script)": [[20, "quark.script.getActivities"]], "getallstrings() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getAllStrings"]], "getarguments() (quark.script.method method)": [[20, "quark.script.Method.getArguments"]], "getmethodxreffrom() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getMethodXrefFrom"]], "getmethodxrefto() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getMethodXrefTo"]], "getparamvalues() (quark.script.behavior method)": [[20, "quark.script.Behavior.getParamValues"]], "getxreffrom() (quark.script.method method)": [[20, "quark.script.Method.getXrefFrom"]], "getxrefto() (quark.script.method method)": [[20, "quark.script.Method.getXrefTo"]], "hasintentfilter() (quark.script.activity method)": [[20, "quark.script.Activity.hasIntentFilter"]], "hasstring() (quark.script.behavior method)": [[20, "quark.script.Behavior.hasString"]], "hasurl() (quark.script.behavior method)": [[20, "quark.script.Behavior.hasUrl"]], "hookmethod() (quark.script.objection.objection method)": [[20, "quark.script.objection.Objection.hookMethod"]], "isargfrommethod() (quark.script.behavior method)": [[20, "quark.script.Behavior.isArgFromMethod"]], "isargumenttrue() (in module quark.script.utils)": [[20, "quark.script.utils.isArgumentTrue"]], "isexported() (quark.script.activity method)": [[20, "quark.script.Activity.isExported"]], "methodname (quark.script.method property)": [[20, "quark.script.Method.methodName"]], "quark.script": [[20, "module-quark.script"]], "quark.script.ciphey": [[20, "module-quark.script.ciphey"]], "quark.script.objection": [[20, "module-quark.script.objection"]], "quark.script.utils": [[20, "module-quark.script.utils"]], "runquarkanalysis() (in module quark.script)": [[20, "quark.script.runQuarkAnalysis"]], "behavior (class in quark.script.frida)": [[21, "quark.script.frida.Behavior"]], "fridaresult (class in quark.script.frida)": [[21, "quark.script.frida.FridaResult"]], "methodcalleventdispatcher (class in quark.script.frida)": [[21, "quark.script.frida.MethodCallEventDispatcher"]], "behavioroccurlist (quark.script.frida.fridaresult property)": [[21, "quark.script.frida.FridaResult.behaviorOccurList"]], "getparamvalues() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.getParamValues"]], "handlecapturedevent() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.handleCapturedEvent"]], "hasstring() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.hasString"]], "hasurl() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.hasUrl"]], "quark.script.frida": [[21, "module-quark.script.frida"]], "runfridahook() (in module quark.script.frida)": [[21, "quark.script.frida.runFridaHook"]], "startwatchingmethodcall() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.startWatchingMethodCall"]], "stopwatchingmethodcall() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.stopWatchingMethodCall"]], "high (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.High"]], "level_info (class in quark.utils.weight)": [[22, "quark.utils.weight.LEVEL_INFO"]], "low (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.LOW"]], "moderate (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.Moderate"]], "weight (class in quark.utils.weight)": [[22, "quark.utils.weight.Weight"]], "black() (in module quark.utils.colors)": [[22, "quark.utils.colors.black"]], "blue() (in module quark.utils.colors)": [[22, "quark.utils.colors.blue"]], "bold() (in module quark.utils.colors)": [[22, "quark.utils.colors.bold"]], "calculate() (quark.utils.weight.weight method)": [[22, "quark.utils.weight.Weight.calculate"]], "call_graph() (in module quark.utils.graph)": [[22, "quark.utils.graph.call_graph"]], "color() (in module quark.utils.colors)": [[22, "quark.utils.colors.color"]], "colorful_report() (in module quark.utils.colors)": [[22, "quark.utils.colors.colorful_report"]], "contains() (in module quark.utils.tools)": [[22, "quark.utils.tools.contains"]], "cyan() (in module quark.utils.colors)": [[22, "quark.utils.colors.cyan"]], "descriptor_to_androguard_format() (in module quark.utils.tools)": [[22, "quark.utils.tools.descriptor_to_androguard_format"]], "extract_content() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_content"]], "extract_file() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_file"]], "extract_ip() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_ip"]], "extract_url() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_url"]], "filter_api_by_usage_count() (in module quark.utils.tools)": [[22, "quark.utils.tools.filter_api_by_usage_count"]], "get_arguments_from_argument_str() (in module quark.utils.tools)": [[22, "quark.utils.tools.get_arguments_from_argument_str"]], "get_parenthetic_contents() (in module quark.utils.tools)": [[22, "quark.utils.tools.get_parenthetic_contents"]], "get_rule_classification_data() (in module quark.utils.output)": [[22, "quark.utils.output.get_rule_classification_data"]], "green() (in module quark.utils.colors)": [[22, "quark.utils.colors.green"]], "lightblue() (in module quark.utils.colors)": [[22, "quark.utils.colors.lightblue"]], "lightyellow() (in module quark.utils.colors)": [[22, "quark.utils.colors.lightyellow"]], "magenta() (in module quark.utils.colors)": [[22, "quark.utils.colors.magenta"]], "output_parent_function_graph() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_graph"]], "output_parent_function_json() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_json"]], "output_parent_function_table() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_table"]], "print_error() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_error"]], "print_info() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_info"]], "print_success() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_success"]], "print_warning() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_warning"]], "quark.utils": [[22, "module-quark.utils"]], "quark.utils.colors": [[22, "module-quark.utils.colors"]], "quark.utils.graph": [[22, "module-quark.utils.graph"]], "quark.utils.output": [[22, "module-quark.utils.output"]], "quark.utils.pprint": [[22, "module-quark.utils.pprint"]], "quark.utils.regex": [[22, "module-quark.utils.regex"]], "quark.utils.tools": [[22, "module-quark.utils.tools"]], "quark.utils.weight": [[22, "module-quark.utils.weight"]], "red() (in module quark.utils.colors)": [[22, "quark.utils.colors.red"]], "remove_dup_list() (in module quark.utils.tools)": [[22, "quark.utils.tools.remove_dup_list"]], "select_label_menu() (in module quark.utils.graph)": [[22, "quark.utils.graph.select_label_menu"]], "show_comparison_graph() (in module quark.utils.graph)": [[22, "quark.utils.graph.show_comparison_graph"]], "table() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.table"]], "validate_base64() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_base64"]], "validate_ip_address() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_ip_address"]], "validate_url() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_url"]], "white() (in module quark.utils.colors)": [[22, "quark.utils.colors.white"]], "wrapper_lookup() (in module quark.utils.graph)": [[22, "quark.utils.graph.wrapper_lookup"]], "yellow() (in module quark.utils.colors)": [[22, "quark.utils.colors.yellow"]], "reportgenerator (class in quark.webreport.generate)": [[23, "quark.webreport.generate.ReportGenerator"]], "count_confidence_rule_number() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.count_confidence_rule_number"]], "get_all_labels() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_all_labels"]], "get_analysis_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.get_analysis_report_html"]], "get_five_stages_labels() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_five_stages_labels"]], "get_json_report_html() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_json_report_html"]], "get_rule_generate_editor_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.get_rule_generate_editor_html"]], "insert_genrule_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_genrule_report_html"]], "insert_radarechart_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_radarechart_html"]], "insert_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_report_html"]], "insert_sample_information_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_sample_information_html"]], "quark.webreport": [[23, "module-quark.webreport"]], "quark.webreport.generate": [[23, "module-quark.webreport.generate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["addRules", "coding_style", "contribution", "dev", "dev_index", "doc", "faq", "index", "install", "install_index", "integration", "modules", "organization", "quark", "quark.core", "quark.core.axmlreader", "quark.core.interface", "quark.core.struct", "quark.evaluator", "quark.forensic", "quark.script", "quark.script.frida", "quark.utils", "quark.webreport", "quark_inside_index", "quark_inside_objects", "quark_inside_overview", "quark_inside_workflow", "quark_mit_program", "quark_reports", "quark_script", "rule_generation", "testing"], "filenames": ["addRules.rst", "coding_style.rst", "contribution.rst", "dev.rst", "dev_index.rst", "doc.rst", "faq.rst", "index.rst", "install.rst", "install_index.rst", "integration.rst", "modules.rst", "organization.rst", "quark.rst", "quark.core.rst", "quark.core.axmlreader.rst", "quark.core.interface.rst", "quark.core.struct.rst", "quark.evaluator.rst", "quark.forensic.rst", "quark.script.rst", "quark.script.frida.rst", "quark.utils.rst", "quark.webreport.rst", "quark_inside_index.rst", "quark_inside_objects.rst", "quark_inside_overview.rst", "quark_inside_workflow.rst", "quark_mit_program.rst", "quark_reports.rst", "quark_script.rst", "rule_generation.rst", "testing.rst"], "titles": ["Add Rules", "Coding Style", "Contribution", "Development Notes", "Development", "Updating Documentation", "FAQ", "Quark-Engine Book", "Installing Quark-Engine", "Installation", "Integration", "quark", "Organization", "quark package", "quark.core package", "quark.core.axmlreader package", "quark.core.interface package", "quark.core.struct package", "quark.evaluator package", "quark.forensic package", "quark.script package", "quark.script.frida package", "quark.utils package", "quark.webreport package", "Quark-Engine Inside", "Quark-Engine Objects Introduction", "Quark-Engine Project Overview", "Quark-Engine Workflow", "Quark MIT Program", "Quark Report", "Quark Script", "Rule Generation", "Testing Quark-Engine"], "terms": {"android": [0, 7, 8, 10, 14, 15, 16, 19, 22, 25, 26, 27, 29], "malwar": [0, 2, 8, 10, 22, 27, 29, 30, 31, 32], "analysi": [0, 7, 10, 11, 13, 18, 27, 29], "engin": [0, 1, 2, 3, 5, 9, 10, 13, 17, 28, 29], "i": [0, 1, 2, 3, 7, 8, 10, 12, 13, 14, 16, 17, 20, 21, 23, 25, 26, 27, 28, 29, 31, 32], "new": [0, 3, 6, 28], "stori": 0, "everi": [0, 28], "antiviru": 0, "compani": 0, "ha": [0, 20, 27, 30], "own": [0, 1, 30], "secret": 0, "build": [0, 1, 5, 10, 28, 31, 32], "With": [0, 25, 29], "curios": 0, "we": [0, 1, 3, 5, 6, 10, 17, 25, 27, 28, 29, 30, 31, 32], "develop": [0, 1, 2, 6, 7], "score": [0, 2, 7, 8, 10, 14, 17, 24, 25, 26, 30, 31], "system": [0, 2, 4, 7, 8, 26], "from": [0, 1, 3, 8, 10, 13, 14, 16, 17, 20, 21, 22, 25, 26, 27, 30, 31], "perspect": 0, "taiwan": 0, "crimin": 0, "law": 0, "an": [0, 1, 2, 7, 8, 12, 17, 20, 22, 25, 27, 30, 31, 32], "easi": [0, 7, 30], "solid": 0, "wai": [0, 6, 10, 30, 31], "have": [0, 1, 3, 7, 8, 17, 25, 27, 30], "order": [0, 17, 25, 27, 31], "theori": [0, 14], "which": [0, 1, 14, 17, 19, 20, 25, 27, 29, 30], "explain": [0, 4, 6, 7, 9, 24], "stage": [0, 7, 13, 14, 17, 24, 26, 27, 30], "commit": [0, 1, 3], "crime": [0, 10, 14, 17, 23, 25, 27, 29, 30, 31], "For": [0, 10, 17, 27, 28, 31, 32], "exampl": [0, 1, 10, 17, 25, 27, 30, 31, 32], "murder": 0, "consist": 0, "five": [0, 14, 17, 24, 26, 27], "thei": [0, 12, 25], "ar": [0, 1, 3, 6, 12, 13, 20, 25, 27, 28, 30], "determin": [0, 12], "conspiraci": 0, "prepar": 0, "start": [0, 1, 21, 25, 27], "practic": [0, 1, 17, 30], "The": [0, 1, 2, 6, 10, 12, 13, 17, 25, 26, 27, 30, 31], "latter": 0, "more": [0, 1, 12, 22, 28, 29], "re": [0, 1, 6, 8], "sure": [0, 1, 30], "accord": [0, 13, 14, 16, 17, 25, 27, 31], "abov": [0, 23, 25, 27, 30], "principl": [0, 25, 27, 31], "our": [0, 2, 3, 6, 13, 25, 26, 27, 28, 29], "see": [0, 1, 8, 27, 29, 30], "malici": [0, 7, 25, 27], "activ": [0, 2, 13, 14, 16, 20, 30], "being": [0, 25], "permiss": [0, 1, 8, 10, 13, 14, 16, 17, 25, 27, 30], "request": [0, 3, 6, 17, 27, 30], "nativ": [0, 8, 10, 14, 16, 17, 22, 25, 27, 31], "api": [0, 2, 7, 10, 13, 14, 16, 17, 19, 20, 21, 22, 25, 27], "call": [0, 7, 8, 10, 14, 17, 18, 20, 21, 22, 25, 27, 30, 31], "certain": [0, 27], "combin": [0, 10, 27, 31], "sequenc": [0, 10, 27], "handl": [0, 4, 12, 27], "same": [0, 7, 14, 25, 27, 30], "regist": [0, 10, 14, 17, 20, 25, 27], "onli": [0, 14, 16, 29, 30], "defin": [0, 1, 6, 12, 14, 16, 17, 20, 25, 26, 27, 31], "also": [0, 1, 6, 27, 29, 30, 32], "weight": [0, 7, 10, 11, 13, 14, 17, 24, 25, 26], "threshold": [0, 7, 8, 14, 27], "calcul": [0, 7, 13, 17, 22, 24, 26], "threat": [0, 7], "level": [0, 1, 7, 14, 24], "But": 0, "befor": [0, 14, 30], "how": [0, 3, 4, 7, 8, 9, 24, 29, 30], "set": [0, 7, 8, 13, 14, 16, 17, 19, 22, 23, 27, 30, 31], "need": [0, 1, 6, 14, 28], "correspond": [0, 14, 15, 16, 17, 21, 25, 26, 32], "send": [0, 10, 21, 25, 27, 28, 30], "locat": [0, 10, 14, 16, 27, 30], "via": [0, 10, 27], "sm": [0, 10, 27], "shown": [0, 22], "below": [0, 12, 25, 27, 28, 29, 31], "us": [0, 1, 3, 7, 8, 10, 13, 14, 17, 21, 22, 25, 26, 27, 31, 32], "json": [0, 8, 10, 13, 14, 17, 23, 24, 25], "format": [0, 4, 13, 14, 25, 29], "construct": 0, "send_sm": [0, 10, 27], "access_coarse_loc": [0, 10, 27], "access_fine_loc": [0, 10, 27], "class": [0, 1, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27, 30], "landroid": [0, 10, 25, 27, 30], "telephoni": [0, 10, 27], "telephonymanag": [0, 10, 27], "method": [0, 1, 8, 10, 13, 14, 16, 17, 18, 20, 21, 22, 25, 27, 31], "getcellloc": [0, 10, 22, 27], "descriptor": [0, 8, 10, 13, 14, 16, 17, 18, 20, 22, 30], "cellloc": [0, 10], "smsmanag": [0, 10, 27], "sendtextmessag": [0, 10, 22, 27], "ljava": [0, 10, 14, 16, 30], "lang": [0, 10, 14, 16, 30], "string": [0, 4, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 30], "app": [0, 10, 21, 25, 30, 32], "pendingint": [0, 10, 25], "v": [0, 6, 10, 25, 30, 31, 32], "4": [0, 1, 10, 15, 17, 24], "so": [0, 1, 7, 26, 27], "let": [0, 10, 30, 31, 32], "me": 0, "walk": 0, "you": [0, 1, 2, 3, 5, 6, 7, 8, 13, 25, 27, 29, 30, 31, 32], "through": [0, 20, 27, 30], "file": [0, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 31], "first": [0, 6, 7, 14, 16, 27, 29, 30], "action": [0, 17, 29], "target": [0, 10, 13, 17, 20, 21, 30, 31], "In": [0, 1, 10, 25, 27, 30], "thi": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 17, 20, 23, 24, 25, 27, 28, 29, 30, 31, 32], "info": [0, 1, 12], "therefor": [0, 25], "where": [0, 1, 3, 7, 8, 14], "fill": 0, "apk": [0, 7, 8, 10, 13, 14, 16, 17, 19, 20, 22, 24, 25, 26, 29, 31, 32], "instanc": [0, 14, 16, 17, 20, 21, 25, 30], "inform": [0, 6, 12, 14, 17, 20, 23, 24, 25, 26, 30, 31], "mean": [0, 3], "field": [0, 15, 27], "can": [0, 1, 2, 5, 7, 10, 25, 26, 27, 29, 30, 31], "2": [0, 10, 13, 15, 17, 22, 24, 31], "find": [0, 13, 14, 16, 20, 25, 27, 28, 30], "kei": [0, 17, 28], "do": [0, 1, 7, 10, 17], "And": [0, 1, 12, 28, 31], "sinc": [0, 1, 6, 25], "name": [0, 2, 4, 8, 14, 15, 16, 17, 18, 20, 21, 25, 26, 27, 30, 31], "self": [0, 1, 14, 16, 25, 26, 27], "both": [0, 25, 28, 30], "like": [0, 3, 5, 6, 10, 25, 27, 30, 31], "keep": [0, 7, 30, 31], "simpl": [0, 3, 10, 30], "than": [0, 12, 26], "3": [0, 13, 15, 17, 24], "further": [0, 27], "check": [0, 6, 13, 14, 20, 21, 24, 25, 29, 30], "whether": [0, 25, 27], "If": [0, 1, 3, 5, 6, 12, 27, 30], "sai": 0, "caught": 0, "don": [0, 3], "t": [0, 3, 8, 12, 25, 32], "anyth": 0, "adjust": [0, 6], "know": [0, 3, 10, 25, 27, 31], "might": [0, 1], "wrap": 0, "other": [0, 2, 12, 25, 30, 31], "xref": [0, 14, 16], "solv": 0, "problem": [0, 6, 12], "right": 0, "confid": [0, 8, 10, 14, 17, 22, 23, 27, 29], "pleas": [0, 1, 3, 6, 8, 27, 29, 30], "place": [0, 1], "5": [0, 15, 22, 24, 28, 31], "oper": [0, 25], "paramet": [0, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 30, 31], "100": [0, 8, 10, 23, 29, 31], "As": [0, 1, 2, 7, 25, 27], "updat": [0, 3, 6, 7], "part": [0, 1, 7, 20, 21, 26, 30], "later": 0, "clean": [1, 5], "structur": [1, 22, 26], "veri": [1, 30], "sustain": 1, "project": [1, 2, 3, 7, 24], "cuckoo": 1, "sandbox": 1, "good": 1, "follow": [1, 2, 5, 6, 8, 27, 29, 31], "most": [1, 12, 28], "maintain": 1, "base": [1, 7, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 30, 31], "help": [1, 3, 5, 8, 27, 28], "out": [1, 6, 20, 25, 30], "refactor": 1, "requir": [1, 7, 8, 12, 14, 25], "try": [1, 6], "much": 1, "possibl": [1, 6, 15, 19, 29], "your": [1, 3, 6, 28, 29, 30], "essenti": 1, "quark": [1, 2, 3, 4, 5, 9, 10, 31], "": [1, 3, 4, 6, 8, 9, 12, 14, 25, 27, 29, 30, 31, 32], "pep": 1, "8": [1, 15, 30], "guid": [1, 7], "python": [1, 6, 10, 13, 15, 20, 21, 22, 25, 26, 30], "257": 1, "docstr": 1, "convent": 1, "all": [1, 3, 7, 8, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 31], "charact": 1, "filenam": [1, 14, 16, 19, 23], "should": [1, 12, 30], "lowercas": 1, "letter": 1, "exist": [1, 6, 30], "sourc": [1, 3, 5, 7, 8], "http": [1, 6, 8, 13, 17, 30, 32], "rtfd": 1, "io": [1, 30], "gplv3": 1, "copi": [1, 30], "must": [1, 25], "space": 1, "tab": 1, "enforc": 1, "make": [1, 5, 6, 7, 30], "configur": [1, 30], "editor": [1, 7, 13], "properli": 1, "caus": [1, 6, 30], "malfunct": 1, "limit": [1, 8], "79": 1, "separ": [1, 22, 31], "definit": 1, "top": [1, 14, 17, 25], "function": [1, 13, 14, 16, 17, 24, 26, 27, 29, 30], "one": [1, 2, 6, 12, 25, 29, 32], "insid": [1, 5, 7, 10, 19, 20, 30], "singl": [1, 13, 25, 29, 30], "myclass": 1, "someth": 1, "def": [1, 27], "__init__": 1, "initi": [1, 12, 25, 27], "pass": [1, 20, 25, 30], "do_it": 1, "what": [1, 7, 25, 27], "param": [1, 14, 16, 20, 22, 23, 27, 30], "sparingli": 1, "isol": 1, "logic": [1, 3], "section": 1, "block": 1, "multipl": [1, 8, 10, 22, 25], "object": [1, 7, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 27], "packag": [1, 6, 7, 11, 30], "lib": 1, "b": [1, 10, 30], "c": [1, 8, 25, 29, 30], "NOT": 1, "alwai": 1, "specifi": [1, 6, 8, 10, 13, 21, 22, 27, 30, 31], "explicitli": 1, "delimit": 1, "doubl": 1, "quot": 1, "discourag": 1, "event": [1, 21, 25, 26], "alreadi": 1, "modul": [1, 7, 11, 24, 25, 27], "add": [1, 6, 7, 29], "getlogg": 1, "__name__": 1, "detail": [1, 6, 7, 8, 14, 24, 25, 28, 30], "found": [1, 6, 22, 27, 30], "messag": [1, 8, 15, 22, 28], "custom": [1, 7, 8, 14, 16, 25, 26, 27, 30], "util": [1, 11, 13, 24, 27, 30], "py": 1, "end": [1, 27], "error": [1, 7], "repres": [1, 14], "unexpect": 1, "when": [1, 3, 12, 25, 26, 30, 32], "catch": [1, 30], "access": 1, "its": [1, 30], "e": [1, 30], "foo": 1, "bar": 1, "It": [1, 10, 13, 25, 31], "instead": 1, "addit": 1, "comment": [1, 2], "mai": [1, 6, 14, 20, 25, 30, 32], "ad": [1, 6], "easier": 1, "understand": [1, 6], "contribut": [1, 4, 7, 9, 28], "rtdf": 1, "html": [1, 5, 13, 23, 29, 31], "rst": 1, "altogeth": 1, "user": [1, 5, 6, 8, 13, 22, 30], "read": [1, 5, 25], "doc": [1, 3, 5], "offlin": [1, 5], "believ": [1, 28], "provid": [1, 13, 29, 30], "high": [1, 10, 13, 22, 27], "qualiti": 1, "avoid": [1, 8], "easili": [1, 10, 29, 31], "overlook": 1, "mistak": 1, "proper": 1, "unit": 1, "particular": 1, "attent": 1, "fix": [1, 2, 3], "bug": [1, 2, 3], "write": [1, 3, 4, 7, 9, 30], "reproduc": [1, 12], "fixtur": 1, "adopt": 1, "pytest": 1, "framework": 1, "travi": 1, "ci": 1, "continu": 1, "integr": [1, 7, 30], "contributor": 2, "soon": [2, 6], "post": [2, 6], "typo": [2, 12], "ask": [2, 7, 12], "question": [2, 7], "report": [2, 3, 7, 8, 10, 11, 14, 23, 24, 25, 31], "etc": 2, "becom": [2, 25], "mentor": 2, "spot": [2, 30], "get": [2, 10, 14, 15, 17, 20, 21, 22, 23, 25, 27, 28, 29, 30], "speedup": 2, "learn": [2, 8, 30], "onc": [2, 3, 8, 25, 30], "consid": [2, 20, 25, 27, 30], "readi": [2, 30, 32], "promot": 2, "open": [2, 7, 30], "privat": 2, "vote": 2, "candid": 2, "kunyu": 2, "chen": 2, "bdfl": 2, "founder": 2, "man": 2, "who": [2, 13, 20, 30], "run": [2, 8, 9, 10, 13, 14, 20, 25, 27], "show": [2, 8, 14, 20, 22, 25, 30], "yushiang": 2, "dang": 2, "ui": 2, "ux": 2, "team": [2, 7], "lead": 2, "rule": [2, 7, 8, 10, 13, 17, 20, 22, 23, 24, 25, 26, 32], "gener": [2, 5, 7, 10, 11, 12, 13, 14, 16, 22, 25, 29], "analyst": 2, "shengfon": 2, "lu": 2, "triag": [2, 7], "rizin": [2, 8], "implement": [2, 25, 27, 30], "anwei": 2, "kung": 2, "backend": 2, "databas": [2, 30], "download": [2, 11, 13], "test": [2, 3, 4, 7, 9, 12, 14, 30], "zin": 2, "wong": 2, "zee": 2, "junwei": 2, "song": 2, "co": 2, "frontend": 2, "shunt": 2, "lin": 2, "chaowen": 2, "li": 2, "commun": [2, 7, 12], "sin": 2, "detect": [2, 7, 20, 21], "anti": 2, "iokjin": 2, "sih": 2, "yunchen": 2, "liu": 2, "artwork": 2, "design": [2, 25, 30], "import": [2, 4, 10, 12, 28, 30, 31], "great": 2, "support": 2, "chun": 2, "fan": 2, "hy": 2, "jheng": 2, "jia": 2, "huang": 2, "gao": 2, "yu": 2, "pippen": 2, "wang": 2, "code": [3, 4, 7, 9, 14, 16, 25, 26], "avail": 3, "offici": 3, "repositori": [3, 6], "6": [3, 15, 24, 28, 30], "master": [3, 17], "stabl": 3, "dev": 3, "beta": [3, 30], "featur": [3, 6, 10, 31], "fulli": 3, "merg": [3, 12], "done": [3, 10], "codebas": 3, "hotfix": 3, "Will": 3, "document": [3, 4, 6, 7], "just": [3, 10, 12, 28, 31], "quit": 3, "year": 3, "month": [3, 12, 28], "number": [3, 6, 8, 13, 14, 15, 16, 17, 22, 23, 25, 31], "v19": 3, "10": [3, 10, 21, 22, 30], "oct": 3, "2019": 3, "To": [3, 5, 7, 8, 10], "submit": 3, "github": [3, 6, 8, 12, 13, 17, 30, 32], "issu": [3, 6, 12], "track": [3, 14, 17, 21, 25, 26, 30], "patch": 3, "creat": [3, 8, 12, 25, 27, 28, 30], "pull": [3, 6], "fork": 3, "take": [3, 7, 25, 27, 31], "look": [3, 8, 25, 30], "chapter": [4, 9, 24], "note": [4, 7, 29], "git": [4, 8, 32], "branch": 4, "model": 4, "releas": [4, 30], "version": [4, 6, 8, 12, 30], "ticket": 4, "style": [4, 7], "folder": [4, 6, 26, 27], "copyright": 4, "header": [4, 15, 22], "indent": 4, "maximum": [4, 13, 14], "line": [4, 13, 24, 25], "length": 4, "blank": 4, "print": [4, 10, 26, 30], "log": 4, "except": [4, 15], "autom": [4, 7], "want": [5, 6, 10, 13, 25, 27, 29, 31], "refer": [5, 6, 27], "command": [5, 6, 13, 24, 25, 29, 30, 31, 32], "reserv": 5, "after": [5, 14, 25, 27], "edit": [5, 30, 31], "would": [5, 6, 17, 27], "modifi": 5, "type": [5, 6, 14, 15, 17, 21, 22, 30], "automat": 5, "directori": [5, 7, 8, 13, 26, 27, 30, 31], "auto": 5, "gen": 5, "sphinx": 5, "apidoc": 5, "o": [5, 8, 10, 30], "f": [5, 30], "welcom": 6, "telegram": 6, "ll": [6, 30], "best": 6, "answer": [6, 30], "instant": 6, "focus": 6, "about": [6, 12, 14, 17, 25], "person": 6, "them": [6, 13, 25, 30], "privaci": 6, "pip3": [6, 8, 10, 30], "instal": [6, 7], "upgrad": 6, "freshquark": [6, 11], "inspect": [6, 24], "misspel": 6, "here": [6, 10, 25, 29, 30, 31], "two": [6, 12, 14, 16, 17, 20, 25, 27, 30, 31], "common": 6, "occur": 6, "those": [6, 29], "happen": 6, "too": 6, "argument": [6, 13, 20, 22, 30], "239": 6, "usual": [6, 25], "outdat": 6, "relat": [6, 25], "still": 6, "237": 6, "path_to_the_rul": [6, 29], "input": [6, 30, 31], "current": [6, 17, 25], "select": [6, 22, 29, 31], "default": [6, 8, 14, 16, 20, 21, 22, 29, 30], "path": [6, 8, 13, 14, 19, 29, 30, 31], "home": [6, 29], "video": 6, "youtub": 6, "www": 6, "com": [6, 8, 13, 17, 30, 32], "watch": 6, "soh4eqrv9_g": 6, "valu": [6, 14, 15, 17, 20, 21, 22, 23, 25, 30, 31], "themselv": 6, "experi": 6, "introduct": [6, 7, 24], "feel": 6, "free": 6, "appreci": 6, "That": [6, 30], "big": 6, "ye": [6, 30], "anyon": 6, "interest": 6, "join": [6, 28, 30], "softwar": 7, "suspici": 7, "applic": 7, "dalvik": [7, 17, 24, 26, 27], "bytecod": [7, 14, 16, 17, 24, 26, 27], "loader": [7, 24, 26], "uniqu": 7, "behavior": [7, 8, 10, 13, 20, 21, 25, 27, 30, 31], "within": [7, 12], "second": [7, 14, 16, 21, 27, 29, 30], "up": [7, 10, 14, 27, 31], "script": [7, 10, 11, 13, 23], "ecosystem": 7, "mobil": 7, "secur": 7, "tool": [7, 11, 13, 26], "quickstart": 7, "introduc": 7, "analyz": [7, 8, 29], "real": [7, 29], "case": 7, "instasteal": 7, "cwe": 7, "798": 7, "ovaa": 7, "94": 7, "921": 7, "312": 7, "89": 7, "androgoat": 7, "926": 7, "dvba": 7, "749": 7, "mstg": 7, "java": 7, "532": 7, "780": 7, "319": 7, "327": 7, "injuredandroid": 7, "20": [7, 8, 13, 22, 31], "diva": 7, "mit": 7, "program": [7, 25, 27], "better": 7, "minumum": 7, "contact": 7, "u": [7, 8, 10], "intuit": 7, "summari": [7, 8, 14, 23, 24, 25], "web": [7, 13, 23, 30], "label": [7, 8, 12, 14, 17, 22, 23, 30, 31], "comparison": [7, 8], "radar": [7, 22, 23], "chart": [7, 22, 23], "graph": [7, 8, 11, 13], "classif": [7, 8], "cli": [7, 11, 27], "usag": [7, 8, 10, 12, 13, 14, 17, 25], "tutori": [7, 30], "radiocontrast": [7, 11], "step": [7, 24, 28, 31], "snippet": 7, "go": 7, "scan": [7, 8], "differ": [7, 20, 21, 27, 29, 30, 31], "core": [7, 8, 11, 13], "member": [7, 12, 28], "alumni": 7, "consult": 7, "organ": 7, "workflow": [7, 24], "overview": [7, 24, 31], "faq": 7, "some": [7, 30, 32], "got": 7, "while": [7, 17, 25, 27], "work": [7, 24, 28], "why": 7, "analys": 7, "my": 7, "index": [7, 15, 17, 20, 22, 25, 30], "search": [7, 13, 14, 31], "page": 7, "pypi": [8, 12], "clone": [8, 32], "cd": [8, 32], "pipenv": 8, "skip": 8, "lock": 8, "shell": 8, "cmd": 8, "msg": 8, "option": [8, 14, 16, 17, 20, 29], "obfusc": 8, "neglect": 8, "text": [8, 17, 22, 30], "d": [8, 10, 27, 29, 30], "output": [8, 10, 11, 13, 25, 26, 29, 31], "r": [8, 27, 30], "g": [8, 29, 30], "call_graph_imag": 8, "80": [8, 31], "60": 8, "40": 8, "lower": 8, "list": [8, 13, 14, 15, 16, 17, 19, 20, 21, 25, 27, 30], "p": [8, 31], "l": [8, 29], "max": [8, 14, 22, 29], "librari": [8, 13], "androguard": [8, 13, 14, 19, 25, 27], "multi": 8, "process": 8, "integ": [8, 17], "rang": [8, 10, 27], "allow": [8, 22], "n": [8, 30], "doesn": 8, "exce": 8, "usabl": 8, "cpu": [8, 25, 26], "1": [8, 12, 13, 14, 15, 17, 24, 28], "memori": 8, "exhaust": 8, "exit": 8, "sampl": [8, 10, 20, 23, 29, 31, 32], "docker": 9, "present": [10, 14, 27], "simplest": [10, 31], "apk_path": [10, 13, 31], "14d9f1a92dd984d6040cc41ed06e273": [10, 29], "rule_path": [10, 14, 30], "sendlocation_sm": [10, 25], "ex": 10, "json_report": [10, 13, 14, 23], "get_report": [10, 11, 13, 19], "Then": [10, 27, 30, 32], "md5": [10, 14, 16, 23], "apk_filenam": [10, 13, 14, 16], "size_byt": 10, "166917": 10, "threat_level": 10, "risk": [10, 22, 27], "total_scor": 10, "0": [10, 12, 13, 15, 22, 23, 27, 30, 31], "native_api": [10, 22], "lcom": [10, 14, 16, 17, 25, 30], "googl": [10, 14, 16, 17, 25, 30], "progress": [10, 14, 16, 17, 19, 25], "androidclientservic": 10, "sendmessag": 10, "invok": [10, 14, 16, 17, 25, 30], "virtual": [10, 14, 16, 17, 25, 26, 30], "v6": 10, "getloc": [10, 14, 16], "first_hex": 10, "6e": 10, "2f": 10, "02": 10, "06": 10, "00": 10, "v4": [10, 14, 16, 25], "v7": 10, "smshelper": [10, 14, 16], "sendsm": [10, 14, 16], "second_hex": 10, "30": [10, 15], "3e": 10, "64": 10, "07": 10, "dobyt": 10, "v35": 10, "74": 10, "01": 10, "23": 10, "v0": [10, 14, 16, 30], "v1": [10, 12, 30], "v2": [10, 25, 30], "v5": [10, 14, 16], "05": 10, "v3": [10, 14, 16, 17, 25], "03": 10, "04": 10, "entir": [10, 17, 25, 26], "bash": [10, 32], "bin": 10, "apkfil": 10, "_output": 10, "altern": 10, "well": 10, "usr": 10, "env": 10, "glob": 10, "00001": 10, "quickli": [10, 31], "match": [10, 20, 21, 25, 29, 30, 31], "expos": [10, 30, 31], "lahmyth": [10, 31], "mine": [10, 31], "king": [10, 31], "ahmyth": [10, 29, 31, 32], "cameramanag": [10, 31], "startup": [10, 31], "target_method": [10, 13, 30, 31], "generated_rule_dir": [10, 31], "generated_rul": [10, 31], "rule_gener": 10, "subpackag": 11, "submodul": 11, "apkinfo": [11, 13, 18, 22, 24], "parallelquark": [11, 13], "rzapkinfo": [11, 13], "content": [11, 12, 25, 30], "evalu": [11, 13, 24, 27], "pyeval": [11, 13, 24], "forens": [11, 13], "vt_analysi": [11, 13], "ciphei": [11, 13, 30], "color": [11, 13], "pprint": [11, 13], "regex": [11, 13, 14, 21], "webreport": [11, 13], "update_rule_buff": [11, 13], "config": 11, "entry_point": [11, 13], "logo": 11, "generate_rul": [11, 13, 31], "method_recursive_search": [11, 13, 14], "rulegener": [11, 31], "manag": [12, 31], "pr": 12, "includ": [12, 14, 16, 17, 26, 30], "review": [12, 31], "close": [12, 13, 14], "appli": [12, 25, 30], "appropri": 12, "resolv": 12, "minor": 12, "techniqu": [12, 31], "discuss": 12, "major": [12, 26], "chang": 12, "revis": 12, "kali": 12, "receiv": 12, "unabl": 12, "raiser": 12, "hasn": 12, "respond": 12, "over": 12, "assigne": 12, "invalid": 12, "axmlread": [13, 14], "interfac": [13, 14, 27], "baseapkinfo": [13, 14], "struct": [13, 14], "bytecodeobject": [13, 14, 16, 24], "methodobject": [13, 14, 16, 20], "registerobject": [13, 14, 24], "ruleobject": [13, 14, 20, 24, 27], "tableobject": [13, 14, 24], "quarkanalysi": [13, 14], "call_graph_analysis_list": [13, 14, 22], "clean_result": [13, 14], "crime_descript": [13, 14], "first_api": [13, 14], "label_report_t": [13, 14], "level_1_result": [13, 14], "level_2_result": [13, 14], "level_3_result": [13, 14], "level_4_result": [13, 14], "level_5_result": [13, 14], "parent_wrapper_map": [13, 14], "score_sum": [13, 14, 22, 27], "second_api": [13, 14], "summary_report_t": [13, 14], "weight_sum": [13, 14, 22], "init_label_report_t": [13, 14], "init_pretty_t": [13, 14], "androguardimp": [13, 14], "all_method": [13, 14, 16], "android_api": [13, 14, 16], "custom_method": [13, 14, 16], "dalvikvmformat": [13, 14], "find_method": [13, 14, 16, 25], "get_method_bytecod": [13, 14, 16, 25], "get_str": [13, 14, 15, 16], "get_wrapper_smali": [13, 14, 16], "lowerfunc": [13, 14, 16], "subclass_relationship": [13, 14], "superclass_relationship": [13, 14, 16], "upperfunc": [13, 14, 16, 25], "apply_rul": [13, 14], "add_table_row": [13, 14], "check_paramet": [13, 14, 25], "check_parameter_on_single_method": [13, 14], "check_parameter_valu": [13, 14], "check_sequ": [13, 14, 25], "find_api_usag": [13, 14], "find_intersect": [13, 14, 25], "find_previous_method": [13, 14, 25], "generate_json_report": [13, 14], "get_json_report": [13, 14], "show_call_graph": [13, 14], "show_detail_report": [13, 14, 25], "show_label_report": [13, 14], "show_rule_classif": [13, 14], "show_summary_report": [13, 14, 25], "rizincach": [13, 14], "rizinimp": [13, 14], "apk_filepath": [13, 14, 16], "core_librari": [13, 14, 16, 19], "ret_typ": [13, 14, 16], "aget_kind": [13, 18], "aget_wide_kind": [13, 18], "aput_kind": [13, 18], "aput_wide_kind": [13, 18], "binop_kind": [13, 18], "cast_typ": [13, 18], "const": [13, 18, 25, 30], "const_class": [13, 18], "const_four": [13, 18], "const_highsixteen": [13, 18], "const_sixteen": [13, 18], "const_str": [13, 18], "const_wid": [13, 18], "const_wide_highsixteen": [13, 18], "const_wide_sixteen": [13, 18], "const_wide_thirty_two": [13, 18], "filled_new_array_kind": [13, 18], "invoke_custom": [13, 18], "invoke_direct": [13, 18, 25], "invoke_interfac": [13, 18], "invoke_polymorph": [13, 18], "invoke_stat": [13, 18], "invoke_sup": [13, 18], "invoke_virtu": [13, 18], "invoke_virtual_rang": [13, 18], "move_kind": [13, 18], "move_result": [13, 18], "move_result_object": [13, 18], "move_result_wid": [13, 18], "neg_and_not_kind": [13, 18], "new_arrai": [13, 18], "new_inst": [13, 18], "get_method_pattern": [13, 18], "show_tabl": [13, 18], "logger": [13, 18], "all_str": [13, 19], "get_all_str": [13, 19], "get_android_api": [13, 19], "get_base64": [13, 19], "get_cont": [13, 19], "get_fil": [13, 19], "get_ip": [13, 19], "get_url": [13, 19], "vtanalysi": [13, 19], "analyze_multi_fil": [13, 19], "analyze_single_fil": [13, 19], "change_api_kei": [13, 19], "check_api_key_avail": [13, 19], "get_api_keys_list": [13, 19], "get_file_md5": [13, 19], "retreive_report": [13, 19], "scan_fil": [13, 19], "set_progress": [13, 19], "frida": [13, 20], "hookmethod": [13, 20], "convertmethodtostr": [13, 20], "isargumenttru": [13, 20], "hasintentfilt": [13, 20], "isexport": [13, 20], "getmethodsinarg": [13, 20], "getparamvalu": [13, 20, 21], "hasstr": [13, 20, 21], "hasurl": [13, 20, 21], "isargfrommethod": [13, 20], "defaultruleset": [13, 20], "classnam": [13, 20, 30], "fullnam": [13, 20], "getargu": [13, 20], "getxreffrom": [13, 20], "getxrefto": [13, 20], "methodnam": [13, 20, 30], "quarkresult": [13, 20, 30], "behavioroccurlist": [13, 20, 21], "findmethodincal": [13, 20], "getallstr": [13, 20], "getmethodxreffrom": [13, 20], "getmethodxrefto": [13, 20], "ruleset": [13, 20, 29], "findmethodinapk": [13, 20], "getact": [13, 20], "runquarkanalysi": [13, 20], "black": [13, 22], "blue": [13, 22], "bold": [13, 22], "colorful_report": [13, 22], "cyan": [13, 22], "green": [13, 22], "lightblu": [13, 22], "lightyellow": [13, 22], "magenta": [13, 22], "red": [13, 22], "white": [13, 22], "yellow": [13, 22], "call_graph": [13, 22], "select_label_menu": [13, 22], "show_comparison_graph": [13, 22], "wrapper_lookup": [13, 22], "get_rule_classification_data": [13, 22], "output_parent_function_graph": [13, 22], "output_parent_function_json": [13, 22], "output_parent_function_t": [13, 22], "print_error": [13, 22], "print_info": [13, 22], "print_success": [13, 22], "print_warn": [13, 22], "tabl": [13, 17, 22, 25, 26], "extract_cont": [13, 22], "extract_fil": [13, 22], "extract_ip": [13, 22], "extract_url": [13, 22], "validate_base64": [13, 22], "validate_ip_address": [13, 22], "validate_url": [13, 22], "contain": [13, 14, 17, 19, 20, 21, 22, 23, 25, 32], "descriptor_to_androguard_format": [13, 22], "filter_api_by_usage_count": [13, 22], "get_arguments_from_argument_str": [13, 22], "get_parenthetic_cont": [13, 22], "remove_dup_list": [13, 22], "level_info": [13, 22], "low": [13, 22, 27], "moder": [13, 22], "reportgener": [13, 23], "get_analysis_report_html": [13, 23], "get_rule_generate_editor_html": [13, 23], "insert_genrule_report_html": [13, 23], "insert_radarchart_html": [13, 23], "insert_report_html": [13, 23], "insert_sample_information_html": [13, 23], "count_confidence_rule_numb": [13, 23], "get_all_label": [13, 23], "get_five_stages_label": [13, 23], "get_json_report_html": [13, 23], "rule_buffer_list": 13, "rule_path_list": 13, "latest": 13, "return": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 30], "none": [13, 14, 15, 16, 17, 20, 21, 22], "entri": [13, 27], "point": [13, 17, 27], "amaz": 13, "output_dir": 13, "max_search_lay": 13, "specif": [13, 25, 28, 30], "percentile_rank": [13, 22, 31], "web_editor": [13, 31], "export": [13, 20, 30], "percentil": [13, 22, 31], "rank": [13, 22, 31], "filter": [13, 20, 29, 30, 31], "count": [13, 31], "method_set": 13, "depth": [13, 14], "each": [13, 14, 17, 23, 24, 27, 30, 31], "methodanalysi": [13, 14, 19], "recurs": [13, 14], "first_method_list": [13, 14], "second_method_list": [13, 14], "main": [13, 25, 26], "binari": [13, 15], "could": [13, 32], "report_typ": 13, "least": [13, 28, 31], "given": [13, 14, 16, 17, 20, 21, 22, 23, 25, 26, 27, 30], "int": [13, 16, 20, 21, 22, 23], "axmlexcept": [14, 15], "axml_siz": [14, 15], "file_s": [14, 15], "get_attribut": [14, 15], "get_xml_tre": [14, 15], "resvalu": [14, 15], "data": [14, 15, 17, 22, 23, 26, 30], "namespac": [14, 15], "res_value_typ": [14, 15], "type_attribut": [14, 15], "type_dimens": [14, 15], "type_dynamic_attribut": [14, 15], "type_dynamic_refer": [14, 15], "type_first_color_int": [14, 15], "type_first_int": [14, 15], "type_float": [14, 15], "type_fract": [14, 15], "type_int_boolean": [14, 15], "type_int_color_argb4": [14, 15], "type_int_color_argb8": [14, 15], "type_int_color_rgb4": [14, 15], "type_int_color_rgb8": [14, 15], "type_int_dec": [14, 15], "type_int_hex": [14, 15], "type_last_color_int": [14, 15], "type_last_int": [14, 15], "type_nul": [14, 15], "type_refer": [14, 15], "type_str": [14, 15], "files": [14, 16, 23], "get_subclass": [14, 16], "mnemon": [14, 17, 25], "access_flag": [14, 17], "cach": [14, 17], "class_nam": [14, 16, 17, 18], "full_nam": [14, 17], "is_android_api": [14, 17], "called_by_func": [14, 17, 25], "current_typ": [14, 17], "hash_index": [14, 17, 25], "register_nam": [14, 17, 25], "type_histroi": [14, 17], "check_item": [14, 17], "get_scor": [14, 17, 25, 27], "rule_filenam": [14, 17], "get_obj_list": [14, 17, 25], "get_tabl": [14, 17, 25], "hash_tabl": [14, 17], "insert": [14, 17, 25, 30], "pop": [14, 17, 25], "union": [14, 16, 20, 21], "str": [14, 15, 16, 17, 18, 20, 21, 22, 30], "pathlik": [14, 16, 17, 20], "properti": [14, 15, 16, 17, 20, 21], "element": [14, 16, 17, 20, 22, 25], "method_nam": [14, 16, 17, 18], "method_object": [14, 16], "instruct": [14, 16, 17, 18, 25, 26, 27], "parent_method": [14, 16], "first_method": [14, 16], "second_method": [14, 16], "dict": [14, 15, 16, 17, 21, 23], "smali": [14, 16, 17, 25], "method_analysi": [14, 16], "num_of_process": 14, "rule_obj_list": 14, "rule_obj": 14, "y_score": 14, "parent_funct": 14, "keyword_item_list": 14, "fals": [14, 19, 20, 21, 22, 30], "between": [14, 22], "time": [14, 31], "true": [14, 20, 21, 22, 30], "usage_t": 14, "tupl": [14, 15, 20, 30], "involv": 14, "keyword": [14, 30, 31], "treat": 14, "regular": [14, 20, 21, 30], "express": [14, 20, 21, 25, 30], "yield": 14, "_description_": [14, 20], "static": [14, 18], "source_str": 14, "pattern_list": 14, "mutual_par": 14, "appear": [14, 20, 25, 27, 30], "descriptor_nam": 14, "first_method_set": 14, "second_method_set": 14, "base_method": 14, "wrapper": 14, "visited_method": 14, "under": [14, 31], "parent": [14, 29], "append": [14, 30], "basic": [14, 20, 30], "output_format": [14, 22], "all_label": [14, 22, 23], "table_vers": 14, "last": 14, "column": [14, 25], "label_desc": [14, 17], "csv": [14, 17], "dictionari": [14, 22], "arrai": [14, 22], "associ": 14, "alia": [14, 15], "rizin_cach": 14, "tmp_dir": 14, "A": [15, 17, 30], "file_path": 15, "structure_path": 15, "pars": [15, 22, 30], "xml": [15, 20], "chunk": 15, "ani": [15, 20, 22, 30], "attribut": [15, 30], "resourc": 15, "hold": [15, 20, 21, 22, 30], "elementtre": 15, "androidmanifest": 15, "enum": [15, 22], "7": [15, 29], "28": 15, "16": [15, 19], "18": 15, "31": 15, "29": 15, "17": 15, "abstract": 16, "size": 16, "byte": 16, "checksum": 16, "store": [17, 20, 21, 25, 26, 30], "commonli": 17, "kind": 17, "apnoper": [17, 25], "deleteapn": [17, 25], "z": [17, 25, 30], "dex": [17, 26], "bool": [17, 20, 21], "value_typ": 17, "record": [17, 18, 25], "state": [17, 25, 27], "been": [17, 27], "plant": 17, "describ": [17, 25], "varabileobject": [17, 25], "individu": 17, "rulejson": 17, "jsondata": 17, "descript": [17, 28, 30], "exponenti": [17, 27], "growth": [17, 27], "captur": [17, 21, 27], "third": [17, 27], "float": [17, 27], "variou": 17, "lebel": [17, 23], "blob": 17, "count_reg": 17, "variabl": [17, 25, 26], "variableobject": 17, "hash": [17, 23, 25], "dimension": 17, "var_obj": 17, "nest": [17, 25], "hashtabl": [17, 25], "overrid": [17, 25], "built": [17, 25, 30], "stack": [17, 25], "delet": [17, 25], "kwarg": 18, "convert": [18, 23], "represent": 18, "dure": 18, "taint": 18, "func": 18, "apkpath": 19, "base64": 19, "encod": 19, "ip": [19, 22, 30], "address": 19, "url": [19, 20, 21, 22], "api_keys_list": 19, "waiting_tim": 19, "all_info": 19, "file_md5": 19, "fridaresult": [20, 21, 30], "methodcalleventdispatch": [20, 21], "handlecapturedev": [20, 21], "startwatchingmethodcal": [20, 21], "stopwatchingmethodcal": [20, 21], "runfridahook": [20, 21], "host": 20, "overloadfilt": 20, "watcharg": 20, "watchbacktrac": 20, "watchret": 20, "hook": 20, "tagrget": [20, 30], "arg": [20, 30], "backtrac": [20, 30], "boolean": [20, 30], "intent": [20, 30], "quarkresultinst": 20, "methodcal": 20, "firstapi": 20, "secondapi": 20, "api2": [20, 30], "pattern": [20, 21], "isregex": 20, "targetmethod": [20, 21], "rulefold": 20, "methodobj": 20, "caller": [20, 30], "calle": [20, 30], "ruleinst": 20, "callermethod": 20, "samplepath": 20, "_callev": 21, "_eventbuff": 21, "session": 21, "eventwrapperfromfrida": 21, "_": [21, 30], "buffer": 21, "methodparamtyp": 21, "stop": 21, "apkpackagenam": 21, "secondtowait": 21, "wait": [21, 30], "color_cod": 22, "arg0": 22, "call_graph_analysi": 22, "png": 22, "min_label": 22, "max_label": 22, "min": 22, "titl": 22, "malware_confid": 22, "font_siz": 22, "22": 22, "sever": [22, 27], "displai": [22, 27], "malware_nam": 22, "search_depth": 22, "rule_classification_data_bundl": 22, "row": [22, 25], "sb": 22, "subset_to_check": 22, "target_list": 22, "put": [22, 30], "queri": [22, 25], "api_pool": 22, "sort": [22, 31], "split": 22, "p_set": 22, "less": [22, 31], "s_set": 22, "argument_str": 22, "comma": 22, "infer": 22, "start_index": 22, "pair": 22, "parenthes": 22, "parenthesi": 22, "remov": 22, "duplic": 22, "enumer": 22, "load": [23, 24, 30], "result": 23, "rule_numb": 23, "secton": 23, "five_stages_label": 23, "rules_number_set": 23, "layout": 23, "tag": 23, "extract": 24, "map": [24, 30], "architectur": 24, "diagram": 24, "xrule": [24, 27], "explan": 24, "inspir": 25, "ceval": 25, "cpython": [25, 26], "interpret": 25, "infinit": 25, "loop": [25, 30], "interact": [25, 26, 32], "languag": 25, "thu": 25, "fifth": [25, 27], "Of": 25, "cours": 25, "haven": 25, "condit": 25, "jump": 25, "now": [25, 30], "direct": [25, 28, 30], "enter": 25, "switch": [25, 26], "execut": [25, 26, 27, 30, 31], "_invok": 25, "anoth": [25, 30], "written": 25, "reus": 25, "becaus": 25, "mani": 25, "famili": 25, "respons": 25, "respect": 25, "previou": 25, "intersect": 25, "xrul": 25, "long": 25, "met": 25, "upper": 25, "human": 25, "readabl": 25, "form": [25, 27], "compar": [25, 29], "machin": [25, 26, 30], "difficult": 25, "often": 25, "compos": [25, 26], "gp": 25, "howev": [25, 26], "overwritten": 25, "futur": 25, "revers": 25, "tracker": 25, "encount": 25, "togeth": 25, "assum": [25, 27], "hello": 25, "v34": 25, "34": 25, "four": [26, 31], "divid": 26, "three": 26, "come": 26, "itself": [26, 30], "huge": 26, "doe": [26, 30], "faster": 26, "dynam": 26, "repetit": 26, "control": 26, "final": [27, 30], "No": [27, 30], "matter": 27, "choos": 27, "full": 27, "imag": [27, 32], "cross": 27, "travers": 27, "sum": 27, "formula": 27, "medium": 27, "yscore": 27, "complet": [27, 28], "reach": 27, "_score": 27, "fourth": 27, "confirm": [27, 30], "qaurk": 27, "There": [27, 29], "level_one_threshold": 27, "level_two_threshold": 27, "level_three_threshold": 27, "level_four_threshold": 27, "level_five_threshold": 27, "total": 27, "fall": 27, "aim": [28, 30], "win": 28, "comer": 28, "stronger": 28, "resum": 28, "fit": 28, "job": 28, "dream": 28, "energi": 28, "grow": 28, "upon": 28, "aluni": 28, "expect": 28, "posit": 28, "feedback": 28, "contin": 28, "particip": 28, "mandatori": 28, "peopl": 28, "goal": [28, 30], "twitter": 28, "quarkengin": 28, "flexibl": 29, "boost": 29, "examin": 29, "network": 29, "candi": 29, "corn": 29, "demo": [29, 31], "w": [29, 31], "quark_report": 29, "topic": 29, "indic": 29, "aggress": 29, "mutual": 29, "research": 30, "pentest": 30, "decent": 30, "exchang": 30, "valuabl": 30, "intellig": 30, "enabl": 30, "perform": 30, "creativ": 30, "scenario": 30, "share": 30, "knowledg": 30, "samp": 30, "accordingli": 30, "python3": 30, "49u5gh249gh24985ghf429gh4ch8f23f": 30, "api1": 30, "monitor": 30, "port": 30, "decrypt": 30, "manifest": 30, "6f032": 30, "00211": 30, "detectedurl": 30, "ndetect": 30, "nthe": 30, "wa": 30, "nattempt": 30, "obj": 30, "127": 30, "8888": 30, "thook": 30, "methodcalle": 30, "nsee": 30, "guidelin": 30, "Or": 30, "root": 30, "devic": 30, "pixel": 30, "seek": 30, "credenti": 30, "vulner": 30, "secretkeyspec": 30, "identifi": 30, "dump": 30, "bingo": 30, "allstr": 30, "firstparam": 30, "secondparam": 30, "aeskei": 30, "findal": 30, "getbyt": 30, "bljava": 30, "ljavax": 30, "crypto": 30, "spec": 30, "init": 30, "move": 30, "inject": 30, "createpackagecontext": 30, "checksignatur": 30, "verif": 30, "pm": 30, "packagemanag": 30, "ldexternalcod": 30, "nmethod": 30, "extern": 30, "context": 30, "classload": 30, "loadclass": 30, "unsecur": 30, "storag": 30, "mechan": 30, "sdcard": 30, "existingfil": 30, "filepath": 30, "cleartext": 30, "sensit": 30, "putstr": 30, "encrypt": 30, "app_package_nam": 30, "oversecur": 30, "sharedpreferencesimpl": 30, "editorimpl": 30, "method_param_typ": 30, "email": 30, "password": 30, "utf": 30, "licens": 30, "global": 30, "rpc": 30, "replacemethodimplement": 30, "classandmethodnam": 30, "returntyp": 30, "callev": 30, "callcaptur": 30, "paramvalu": 30, "push": 30, "tostr": 30, "stringifi": 30, "watchmethodcal": 30, "null": 30, "indexoflastsepar": 30, "lastindexof": 30, "classnamepattern": 30, "substr": 30, "methodnamepattern": 30, "classoftargetmethod": 30, "possiblemethod": 30, "typeof": 30, "undefin": 30, "failedtowatchev": 30, "failedtowatch": 30, "overload": 30, "paramtypesofpossiblemethod": 30, "argumenttyp": 30, "foreach": 30, "matchedmethod": 30, "rettyp": 30, "sql": 30, "gettext": 30, "widget": 30, "edittext": 30, "sqlcommandexecut": 30, "stringbuild": 30, "sqlite": 30, "sqlitedatabas": 30, "rawqueri": 30, "cursor": 30, "improp": 30, "compon": 30, "damnvulnerablebank": 30, "currencyr": 30, "splashscreen": 30, "setjavascripten": 30, "javascript": 30, "websit": 30, "addjavascriptinterfac": 30, "webkit": 30, "webview": 30, "enablej": 30, "exposeapi": 30, "getset": 30, "webset": 30, "lsg": 30, "vp": 30, "owasp_mobil": 30, "omtg_android": 30, "omtg_env_005_webview_remot": 30, "oncreat": 30, "bundl": 30, "omtg_env_005_webview_loc": 30, "token": 30, "leakag": 30, "credential_keyword": 30, "methodsfound": 30, "debuglogg": 30, "firebas": 30, "auth": 30, "firebaseauth": 30, "lc": 30, "h": 30, "rsa": 30, "algorithm": 30, "without": 30, "optim": 30, "asymmetr": 30, "pad": 30, "oaep": 30, "cryptograph": 30, "scheme": 30, "plaintext": 30, "predict": 30, "usecryptographicalgo": 30, "usecryptographicalgor": 30, "cipher": 30, "getinst": 30, "omtg_datast_001_keystor": 30, "encryptstr": 30, "transmiss": 30, "retrofit": 30, "protocol": 30, "protocol_keyword": 30, "smtp": 30, "ftp": 30, "regexrul": 30, "9a": 30, "za": 30, "cleartextprotocolurl": 30, "lretrofit2": 30, "builder": 30, "baseurl": 30, "broken": 30, "riski": 30, "exposur": 30, "weak_algorithm": 30, "de": 30, "arc4": 30, "blowfish": 30, "usecryptoalgo": 30, "algo": 30, "lb3nac": 30, "k": 30, "valid": 30, "openurlthatuserinput": 30, "loadurl": 30, "validate_method": 30, "indexof": 30, "replaceal": 30, "openurl": 30, "calledmethod": 30, "ljakhar": 30, "aseem": 30, "inputvalidation2urischemeact": 30, "view": 30, "idea": 31, "group": 31, "pareto": 31, "phase": 31, "pxp": 31, "px": 31, "sxp": 31, "sx": 31, "earlier": 31, "higher": 31, "spent": 31, "manner": 31, "situat": 31, "constraint": 31, "save": 31, "firstli": 32, "fetch": 32, "pwd": 32, "tmp": 32}, "objects": {"": [[13, 0, 0, "-", "quark"]], "quark": [[13, 0, 0, "-", "cli"], [13, 0, 0, "-", "config"], [14, 0, 0, "-", "core"], [18, 0, 0, "-", "evaluator"], [19, 0, 0, "-", "forensic"], [13, 0, 0, "-", "freshquark"], [13, 0, 0, "-", "logo"], [13, 0, 0, "-", "radiocontrast"], [13, 0, 0, "-", "report"], [13, 0, 0, "-", "rulegeneration"], [20, 0, 0, "-", "script"], [22, 0, 0, "-", "utils"], [23, 0, 0, "-", "webreport"]], "quark.cli": [[13, 1, 1, "", "update_rule_buffer"]], "quark.core": [[14, 0, 0, "-", "analysis"], [14, 0, 0, "-", "apkinfo"], [15, 0, 0, "-", "axmlreader"], [16, 0, 0, "-", "interface"], [14, 0, 0, "-", "parallelquark"], [14, 0, 0, "-", "quark"], [14, 0, 0, "-", "rzapkinfo"], [17, 0, 0, "-", "struct"]], "quark.core.analysis": [[14, 2, 1, "", "QuarkAnalysis"], [14, 1, 1, "", "init_label_report_table"], [14, 1, 1, "", "init_pretty_table"]], "quark.core.analysis.QuarkAnalysis": [[14, 3, 1, "", "call_graph_analysis_list"], [14, 4, 1, "", "clean_result"], [14, 3, 1, "", "crime_description"], [14, 3, 1, "", "first_api"], [14, 3, 1, "", "json_report"], [14, 3, 1, "", "label_report_table"], [14, 3, 1, "", "level_1_result"], [14, 3, 1, "", "level_2_result"], [14, 3, 1, "", "level_3_result"], [14, 3, 1, "", "level_4_result"], [14, 3, 1, "", "level_5_result"], [14, 3, 1, "", "parent_wrapper_mapping"], [14, 3, 1, "", "score_sum"], [14, 3, 1, "", "second_api"], [14, 3, 1, "", "summary_report_table"], [14, 3, 1, "", "weight_sum"]], "quark.core.apkinfo": [[14, 2, 1, "", "AndroguardImp"]], "quark.core.apkinfo.AndroguardImp": [[14, 5, 1, "", "activities"], [14, 5, 1, "", "all_methods"], [14, 3, 1, "", "analysis"], [14, 5, 1, "", "android_apis"], [14, 3, 1, "", "apk"], [14, 5, 1, "", "custom_methods"], [14, 3, 1, "", "dalvikvmformat"], [14, 4, 1, "", "find_method"], [14, 4, 1, "", "get_method_bytecode"], [14, 4, 1, "", "get_strings"], [14, 4, 1, "", "get_wrapper_smali"], [14, 4, 1, "", "lowerfunc"], [14, 5, 1, "", "permissions"], [14, 5, 1, "", "subclass_relationships"], [14, 5, 1, "", "superclass_relationships"], [14, 4, 1, "", "upperfunc"]], "quark.core.axmlreader": [[15, 6, 1, "", "AxmlException"], [15, 2, 1, "", "AxmlReader"], [15, 2, 1, "", "ResValue"], [15, 2, 1, "", "Res_value_type"]], "quark.core.axmlreader.AxmlReader": [[15, 5, 1, "", "axml_size"], [15, 5, 1, "", "file_size"], [15, 4, 1, "", "get_attributes"], [15, 4, 1, "", "get_string"], [15, 4, 1, "", "get_xml_tree"]], "quark.core.axmlreader.ResValue": [[15, 3, 1, "", "data"], [15, 3, 1, "", "name"], [15, 3, 1, "", "namespace"], [15, 3, 1, "", "type"], [15, 3, 1, "", "value"]], "quark.core.axmlreader.Res_value_type": [[15, 3, 1, "", "TYPE_ATTRIBUTE"], [15, 3, 1, "", "TYPE_DIMENSION"], [15, 3, 1, "", "TYPE_DYNAMIC_ATTRIBUTE"], [15, 3, 1, "", "TYPE_DYNAMIC_REFERENCE"], [15, 3, 1, "", "TYPE_FIRST_COLOR_INT"], [15, 3, 1, "", "TYPE_FIRST_INT"], [15, 3, 1, "", "TYPE_FLOAT"], [15, 3, 1, "", "TYPE_FRACTION"], [15, 3, 1, "", "TYPE_INT_BOOLEAN"], [15, 3, 1, "", "TYPE_INT_COLOR_ARGB4"], [15, 3, 1, "", "TYPE_INT_COLOR_ARGB8"], [15, 3, 1, "", "TYPE_INT_COLOR_RGB4"], [15, 3, 1, "", "TYPE_INT_COLOR_RGB8"], [15, 3, 1, "", "TYPE_INT_DEC"], [15, 3, 1, "", "TYPE_INT_HEX"], [15, 3, 1, "", "TYPE_LAST_COLOR_INT"], [15, 3, 1, "", "TYPE_LAST_INT"], [15, 3, 1, "", "TYPE_NULL"], [15, 3, 1, "", "TYPE_REFERENCE"], [15, 3, 1, "", "TYPE_STRING"]], "quark.core.interface": [[16, 0, 0, "-", "baseapkinfo"]], "quark.core.interface.baseapkinfo": [[16, 2, 1, "", "BaseApkinfo"]], "quark.core.interface.baseapkinfo.BaseApkinfo": [[16, 5, 1, "", "activities"], [16, 5, 1, "", "all_methods"], [16, 5, 1, "", "android_apis"], [16, 3, 1, "", "apk_filename"], [16, 3, 1, "", "apk_filepath"], [16, 3, 1, "", "core_library"], [16, 5, 1, "", "custom_methods"], [16, 5, 1, "", "filename"], [16, 5, 1, "", "filesize"], [16, 4, 1, "", "find_method"], [16, 4, 1, "", "get_method_bytecode"], [16, 4, 1, "", "get_strings"], [16, 5, 1, "", "get_subclasses"], [16, 4, 1, "", "get_wrapper_smali"], [16, 4, 1, "", "lowerfunc"], [16, 5, 1, "", "md5"], [16, 5, 1, "", "permissions"], [16, 3, 1, "", "ret_type"], [16, 5, 1, "", "superclass_relationships"], [16, 4, 1, "", "upperfunc"]], "quark.core.parallelquark": [[14, 2, 1, "", "ParallelQuark"]], "quark.core.parallelquark.ParallelQuark": [[14, 4, 1, "", "apply_rules"], [14, 4, 1, "", "close"], [14, 4, 1, "", "run"]], "quark.core.quark": [[14, 2, 1, "", "Quark"]], "quark.core.quark.Quark": [[14, 4, 1, "", "add_table_row"], [14, 4, 1, "", "check_parameter"], [14, 4, 1, "", "check_parameter_on_single_method"], [14, 4, 1, "", "check_parameter_values"], [14, 4, 1, "", "check_sequence"], [14, 4, 1, "", "find_api_usage"], [14, 4, 1, "", "find_intersection"], [14, 4, 1, "", "find_previous_method"], [14, 4, 1, "", "generate_json_report"], [14, 4, 1, "", "get_json_report"], [14, 4, 1, "", "method_recursive_search"], [14, 4, 1, "", "run"], [14, 4, 1, "", "show_call_graph"], [14, 4, 1, "", "show_detail_report"], [14, 4, 1, "", "show_label_report"], [14, 4, 1, "", "show_rule_classification"], [14, 4, 1, "", "show_summary_report"]], "quark.core.rzapkinfo": [[14, 3, 1, "", "RizinCache"], [14, 2, 1, "", "RizinImp"]], "quark.core.rzapkinfo.RizinImp": [[14, 5, 1, "", "activities"], [14, 5, 1, "", "all_methods"], [14, 5, 1, "", "android_apis"], [14, 3, 1, "", "apk_filename"], [14, 3, 1, "", "apk_filepath"], [14, 3, 1, "", "core_library"], [14, 5, 1, "", "custom_methods"], [14, 4, 1, "", "find_method"], [14, 4, 1, "", "get_method_bytecode"], [14, 4, 1, "", "get_strings"], [14, 4, 1, "", "get_wrapper_smali"], [14, 4, 1, "", "lowerfunc"], [14, 5, 1, "", "permissions"], [14, 3, 1, "", "ret_type"], [14, 5, 1, "", "subclass_relationships"], [14, 5, 1, "", "superclass_relationships"], [14, 4, 1, "", "upperfunc"]], "quark.core.struct": [[17, 0, 0, "-", "bytecodeobject"], [17, 0, 0, "-", "methodobject"], [17, 0, 0, "-", "registerobject"], [17, 0, 0, "-", "ruleobject"], [17, 0, 0, "-", "tableobject"]], "quark.core.struct.bytecodeobject": [[17, 2, 1, "", "BytecodeObject"]], "quark.core.struct.bytecodeobject.BytecodeObject": [[17, 5, 1, "", "mnemonic"], [17, 5, 1, "", "parameter"], [17, 5, 1, "", "registers"]], "quark.core.struct.methodobject": [[17, 2, 1, "", "MethodObject"]], "quark.core.struct.methodobject.MethodObject": [[17, 3, 1, "", "access_flags"], [17, 3, 1, "", "cache"], [17, 3, 1, "", "class_name"], [17, 3, 1, "", "descriptor"], [17, 5, 1, "", "full_name"], [17, 4, 1, "", "is_android_api"], [17, 3, 1, "", "name"]], "quark.core.struct.registerobject": [[17, 2, 1, "", "RegisterObject"]], "quark.core.struct.registerobject.RegisterObject": [[17, 5, 1, "", "called_by_func"], [17, 5, 1, "", "current_type"], [17, 5, 1, "", "hash_index"], [17, 5, 1, "", "register_name"], [17, 5, 1, "", "type_histroy"], [17, 5, 1, "", "value"]], "quark.core.struct.ruleobject": [[17, 2, 1, "", "RuleObject"]], "quark.core.struct.ruleobject.RuleObject": [[17, 5, 1, "", "api"], [17, 3, 1, "", "check_item"], [17, 5, 1, "", "crime"], [17, 4, 1, "", "get_score"], [17, 5, 1, "", "label"], [17, 5, 1, "", "permission"], [17, 3, 1, "", "rule_filename"], [17, 5, 1, "", "score"]], "quark.core.struct.tableobject": [[17, 2, 1, "", "TableObject"]], "quark.core.struct.tableobject.TableObject": [[17, 4, 1, "", "get_obj_list"], [17, 4, 1, "", "get_table"], [17, 3, 1, "", "hash_table"], [17, 4, 1, "", "insert"], [17, 4, 1, "", "pop"]], "quark.evaluator": [[18, 0, 0, "-", "pyeval"]], "quark.evaluator.pyeval": [[18, 2, 1, "", "PyEval"], [18, 1, 1, "", "logger"]], "quark.evaluator.pyeval.PyEval": [[18, 4, 1, "", "AGET_KIND"], [18, 4, 1, "", "AGET_WIDE_KIND"], [18, 4, 1, "", "APUT_KIND"], [18, 4, 1, "", "APUT_WIDE_KIND"], [18, 4, 1, "", "BINOP_KIND"], [18, 4, 1, "", "CAST_TYPE"], [18, 4, 1, "", "CONST"], [18, 4, 1, "", "CONST_CLASS"], [18, 4, 1, "", "CONST_FOUR"], [18, 4, 1, "", "CONST_HIGHSIXTEEN"], [18, 4, 1, "", "CONST_SIXTEEN"], [18, 4, 1, "", "CONST_STRING"], [18, 4, 1, "", "CONST_WIDE"], [18, 4, 1, "", "CONST_WIDE_HIGHSIXTEEN"], [18, 4, 1, "", "CONST_WIDE_SIXTEEN"], [18, 4, 1, "", "CONST_WIDE_THIRTY_TWO"], [18, 4, 1, "", "FILLED_NEW_ARRAY_KIND"], [18, 4, 1, "", "INVOKE_CUSTOM"], [18, 4, 1, "", "INVOKE_DIRECT"], [18, 4, 1, "", "INVOKE_INTERFACE"], [18, 4, 1, "", "INVOKE_POLYMORPHIC"], [18, 4, 1, "", "INVOKE_STATIC"], [18, 4, 1, "", "INVOKE_SUPER"], [18, 4, 1, "", "INVOKE_VIRTUAL"], [18, 4, 1, "", "INVOKE_VIRTUAL_RANGE"], [18, 4, 1, "", "MOVE_KIND"], [18, 4, 1, "", "MOVE_RESULT"], [18, 4, 1, "", "MOVE_RESULT_OBJECT"], [18, 4, 1, "", "MOVE_RESULT_WIDE"], [18, 4, 1, "", "NEG_AND_NOT_KIND"], [18, 4, 1, "", "NEW_ARRAY"], [18, 4, 1, "", "NEW_INSTANCE"], [18, 4, 1, "", "get_method_pattern"], [18, 4, 1, "", "show_table"]], "quark.forensic": [[19, 0, 0, "-", "forensic"], [19, 0, 0, "-", "vt_analysis"]], "quark.forensic.forensic": [[19, 2, 1, "", "Forensic"]], "quark.forensic.forensic.Forensic": [[19, 3, 1, "", "all_strings"], [19, 3, 1, "", "apk"], [19, 4, 1, "", "get_all_strings"], [19, 4, 1, "", "get_android_api"], [19, 4, 1, "", "get_base64"], [19, 4, 1, "", "get_content"], [19, 4, 1, "", "get_file"], [19, 4, 1, "", "get_ip"], [19, 4, 1, "", "get_url"]], "quark.forensic.vt_analysis": [[19, 2, 1, "", "VTAnalysis"]], "quark.forensic.vt_analysis.VTAnalysis": [[19, 4, 1, "", "analyze_multi_file"], [19, 4, 1, "", "analyze_single_file"], [19, 4, 1, "", "change_api_key"], [19, 4, 1, "", "check_api_key_available"], [19, 4, 1, "", "get_api_keys_list"], [19, 4, 1, "", "get_file_md5"], [19, 4, 1, "", "get_reports"], [19, 4, 1, "", "retreive_report"], [19, 4, 1, "", "scan_file"], [19, 4, 1, "", "set_progress"]], "quark.freshquark": [[13, 1, 1, "", "download"], [13, 1, 1, "", "entry_point"]], "quark.logo": [[13, 1, 1, "", "logo"]], "quark.radiocontrast": [[13, 2, 1, "", "RadioContrast"]], "quark.radiocontrast.RadioContrast": [[13, 4, 1, "", "generate_rule"], [13, 4, 1, "", "method_recursive_search"]], "quark.report": [[13, 2, 1, "", "Report"]], "quark.report.Report": [[13, 4, 1, "", "analysis"], [13, 4, 1, "", "get_report"]], "quark.rulegeneration": [[13, 2, 1, "", "RuleGeneration"]], "quark.rulegeneration.RuleGeneration": [[13, 4, 1, "", "generate_rule"]], "quark.script": [[20, 2, 1, "", "Activity"], [20, 2, 1, "", "Behavior"], [20, 2, 1, "", "DefaultRuleset"], [20, 2, 1, "", "Method"], [20, 2, 1, "", "QuarkResult"], [20, 2, 1, "", "Ruleset"], [20, 1, 1, "", "findMethodInAPK"], [21, 0, 0, "-", "frida"], [20, 1, 1, "", "getActivities"], [20, 0, 0, "-", "objection"], [20, 1, 1, "", "runQuarkAnalysis"], [20, 0, 0, "-", "utils"]], "quark.script.Activity": [[20, 4, 1, "", "hasIntentFilter"], [20, 4, 1, "", "isExported"]], "quark.script.Behavior": [[20, 4, 1, "", "getMethodsInArgs"], [20, 4, 1, "", "getParamValues"], [20, 4, 1, "", "hasString"], [20, 4, 1, "", "hasUrl"], [20, 4, 1, "", "isArgFromMethod"]], "quark.script.Method": [[20, 5, 1, "", "className"], [20, 5, 1, "", "descriptor"], [20, 5, 1, "", "fullName"], [20, 4, 1, "", "getArguments"], [20, 4, 1, "", "getXrefFrom"], [20, 4, 1, "", "getXrefTo"], [20, 5, 1, "", "methodName"]], "quark.script.QuarkResult": [[20, 5, 1, "", "behaviorOccurList"], [20, 4, 1, "", "findMethodInCaller"], [20, 4, 1, "", "getAllStrings"], [20, 4, 1, "", "getMethodXrefFrom"], [20, 4, 1, "", "getMethodXrefTo"]], "quark.script.frida": [[21, 2, 1, "", "Behavior"], [21, 2, 1, "", "FridaResult"], [21, 2, 1, "", "MethodCallEventDispatcher"], [21, 1, 1, "", "runFridaHook"]], "quark.script.frida.Behavior": [[21, 4, 1, "", "getParamValues"], [21, 4, 1, "", "hasString"], [21, 4, 1, "", "hasUrl"]], "quark.script.frida.FridaResult": [[21, 5, 1, "", "behaviorOccurList"]], "quark.script.frida.MethodCallEventDispatcher": [[21, 4, 1, "", "handleCapturedEvent"], [21, 4, 1, "", "startWatchingMethodCall"], [21, 4, 1, "", "stopWatchingMethodCall"]], "quark.script.objection": [[20, 2, 1, "", "Objection"], [20, 1, 1, "", "convertMethodToString"]], "quark.script.objection.Objection": [[20, 4, 1, "", "hookMethod"]], "quark.script.utils": [[20, 1, 1, "", "isArgumentTrue"]], "quark.utils": [[22, 0, 0, "-", "colors"], [22, 0, 0, "-", "graph"], [22, 0, 0, "-", "output"], [22, 0, 0, "-", "pprint"], [22, 0, 0, "-", "regex"], [22, 0, 0, "-", "tools"], [22, 0, 0, "-", "weight"]], "quark.utils.colors": [[22, 1, 1, "", "black"], [22, 1, 1, "", "blue"], [22, 1, 1, "", "bold"], [22, 1, 1, "", "color"], [22, 1, 1, "", "colorful_report"], [22, 1, 1, "", "cyan"], [22, 1, 1, "", "green"], [22, 1, 1, "", "lightblue"], [22, 1, 1, "", "lightyellow"], [22, 1, 1, "", "magenta"], [22, 1, 1, "", "red"], [22, 1, 1, "", "white"], [22, 1, 1, "", "yellow"]], "quark.utils.graph": [[22, 1, 1, "", "call_graph"], [22, 1, 1, "", "select_label_menu"], [22, 1, 1, "", "show_comparison_graph"], [22, 1, 1, "", "wrapper_lookup"]], "quark.utils.output": [[22, 1, 1, "", "get_rule_classification_data"], [22, 1, 1, "", "output_parent_function_graph"], [22, 1, 1, "", "output_parent_function_json"], [22, 1, 1, "", "output_parent_function_table"]], "quark.utils.pprint": [[22, 1, 1, "", "print_error"], [22, 1, 1, "", "print_info"], [22, 1, 1, "", "print_success"], [22, 1, 1, "", "print_warning"], [22, 1, 1, "", "table"]], "quark.utils.regex": [[22, 1, 1, "", "extract_content"], [22, 1, 1, "", "extract_file"], [22, 1, 1, "", "extract_ip"], [22, 1, 1, "", "extract_url"], [22, 1, 1, "", "validate_base64"], [22, 1, 1, "", "validate_ip_address"], [22, 1, 1, "", "validate_url"]], "quark.utils.tools": [[22, 1, 1, "", "contains"], [22, 1, 1, "", "descriptor_to_androguard_format"], [22, 1, 1, "", "filter_api_by_usage_count"], [22, 1, 1, "", "get_arguments_from_argument_str"], [22, 1, 1, "", "get_parenthetic_contents"], [22, 1, 1, "", "remove_dup_list"]], "quark.utils.weight": [[22, 2, 1, "", "LEVEL_INFO"], [22, 2, 1, "", "Weight"]], "quark.utils.weight.LEVEL_INFO": [[22, 3, 1, "", "High"], [22, 3, 1, "", "LOW"], [22, 3, 1, "", "Moderate"]], "quark.utils.weight.Weight": [[22, 4, 1, "", "calculate"]], "quark.webreport": [[23, 0, 0, "-", "generate"]], "quark.webreport.generate": [[23, 2, 1, "", "ReportGenerator"], [23, 1, 1, "", "count_confidence_rule_number"], [23, 1, 1, "", "get_all_labels"], [23, 1, 1, "", "get_five_stages_labels"], [23, 1, 1, "", "get_json_report_html"]], "quark.webreport.generate.ReportGenerator": [[23, 4, 1, "", "get_analysis_report_html"], [23, 4, 1, "", "get_rule_generate_editor_html"], [23, 4, 1, "", "insert_genrule_report_html"], [23, 4, 1, "", "insert_radarchart_html"], [23, 4, 1, "", "insert_report_html"], [23, 4, 1, "", "insert_sample_information_html"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property", "6": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "exception", "Python exception"]}, "titleterms": {"add": 0, "rule": [0, 6, 27, 29, 30, 31], "code": [1, 10, 30], "style": 1, "format": 1, "file": [1, 30], "folder": 1, "name": 1, "copyright": 1, "header": 1, "indent": 1, "maximum": 1, "line": [1, 27], "length": 1, "blank": 1, "import": 1, "string": 1, "print": 1, "log": [1, 30], "except": 1, "handl": 1, "document": [1, 5], "autom": 1, "test": [1, 32], "contribut": [2, 3, 6], "differ": 2, "stage": [2, 25], "core": [2, 14, 15, 16, 17], "member": 2, "alumni": 2, "consult": 2, "develop": [3, 4], "note": 3, "git": 3, "branch": 3, "model": 3, "releas": [3, 12], "version": 3, "ticket": 3, "system": 3, "updat": 5, "faq": 6, "i": [6, 30], "have": 6, "some": 6, "question": 6, "where": 6, "can": 6, "ask": 6, "got": 6, "an": 6, "error": 6, "while": 6, "us": [6, 29, 30], "quark": [6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32], "engin": [6, 7, 8, 24, 25, 26, 27, 30, 32], "what": 6, "do": 6, "how": 6, "threshold": 6, "score": [6, 27], "weight": [6, 22, 27], "work": 6, "why": 6, "keep": 6, "same": 6, "all": 6, "analys": 6, "write": 6, "my": 6, "take": 6, "part": 6, "book": 7, "content": [7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "indic": 7, "tabl": 7, "instal": [8, 9, 10, 30], "integr": 10, "first": 10, "step": [10, 27, 30], "second": 10, "snippet": 10, "As": 10, "you": [10, 28], "go": 10, "directori": 10, "scan": 10, "radiocontrast": [10, 13, 31], "organ": 12, "triag": 12, "team": 12, "respons": 12, "process": 12, "packag": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "subpackag": [13, 14, 20], "submodul": [13, 14, 16, 17, 18, 19, 20, 22, 23], "cli": [13, 31], "modul": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "config": 13, "freshquark": 13, "logo": 13, "report": [13, 27, 29], "rulegener": 13, "analysi": [14, 30], "apkinfo": [14, 25], "parallelquark": 14, "rzapkinfo": 14, "axmlread": 15, "interfac": 16, "baseapkinfo": 16, "struct": 17, "bytecodeobject": [17, 25], "methodobject": 17, "registerobject": [17, 25], "ruleobject": [17, 25], "tableobject": [17, 25], "evalu": [18, 25, 26], "pyeval": [18, 25], "forens": 19, "vt_analysi": 19, "script": [20, 21, 30], "ciphei": 20, "object": [20, 25, 26, 30], "util": [20, 22, 26], "frida": [21, 30], "color": 22, "graph": [22, 29], "output": 22, "pprint": 22, "regex": 22, "tool": [22, 30], "check": [22, 27], "sequenc": 22, "pattern": [22, 30], "within": 22, "two": 22, "list": 22, "webreport": 23, "gener": [23, 31], "insid": 24, "introduct": 25, "dalvik": 25, "bytecod": 25, "loader": 25, "xrule": 25, "explan": 25, "each": 25, "function": 25, "five": 25, "inspect": 25, "level": [25, 27], "1": [25, 27, 30], "2": [25, 27, 30], "3": [25, 27, 30], "4": [25, 27, 30], "5": [25, 27], "project": 26, "overview": 26, "map": 26, "architectur": 26, "diagram": 26, "workflow": 27, "command": 27, "apk": [27, 30], "inform": 27, "extract": 27, "load": 27, "json": [27, 30], "calcul": 27, "6": 27, "summari": [27, 29], "detail": [27, 29], "mit": 28, "program": 28, "better": 28, "commun": 28, "minumum": 28, "requir": [28, 30], "contact": 28, "u": 28, "easi": 29, "intuit": 29, "web": [29, 31], "label": 29, "base": 29, "behavior": 29, "comparison": 29, "radar": 29, "chart": 29, "call": 29, "classif": 29, "ecosystem": 30, "mobil": 30, "secur": 30, "innov": 30, "interact": 30, "dynam": 30, "static": 30, "re": 30, "usabl": 30, "sharabl": 30, "more": 30, "api": [30, 31], "come": 30, "quickstart": 30, "environ": 30, "prepar": 30, "detect": 30, "sampl": 30, "run": [30, 32], "introduc": 30, "findmethodinapk": 30, "samplepath": 30, "targetmethod": 30, "runquarkanalysi": 30, "sample_path": 30, "ruleinst": 30, "quarkresultinst": 30, "behavioroccurlist": 30, "getallstr": 30, "none": 30, "findmethodincal": 30, "callermethod": 30, "behaviorinst": 30, "firstapi": 30, "fullnam": 30, "secondapi": 30, "hasstr": 30, "isregex": 30, "hasurl": 30, "methodcal": 30, "getparamvalu": 30, "isargfrommethod": 30, "getmethodsinarg": 30, "methodinst": 30, "getxreffrom": 30, "getxrefto": 30, "getargu": 30, "host": 30, "objinst": 30, "hookmethod": 30, "method": 30, "watcharg": 30, "watchbacktrac": 30, "watchret": 30, "runfridahook": 30, "apkpackagenam": 30, "methodparamtyp": 30, "secondtowait": 30, "checkcleartext": 30, "inputstr": 30, "getact": 30, "activityinst": 30, "hasintentfilt": 30, "isexport": 30, "analyz": 30, "real": 30, "case": 30, "instasteal": 30, "hook": 30, "contain": 30, "url": 30, "result": 30, "termin": 30, "callcomponentmethod": 30, "trigger": 30, "cwe": 30, "798": 30, "android": 30, "applic": 30, "ovaa": 30, "scipt": 30, "py": 30, "findsecretkeyspec": 30, "hard": 30, "ae": 30, "kei": 30, "94": 30, "loadexternalcod": 30, "921": 30, "checkfileexist": 30, "312": 30, "agent": 30, "j": 30, "89": 30, "androgoat": 30, "executesqlcommand": 30, "926": 30, "dvba": 30, "749": 30, "mstg": 30, "java": 30, "configurejsexecut": 30, "532": 30, "780": 30, "useofcryptographicalgo": 30, "319": 30, "setretrofitbaseurl": 30, "327": 30, "injuredandroid": 30, "20": 30, "diva": 30, "inputweburl": 30, "usag": 31, "editor": 31, "tutori": 31, "docker": 32}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Add Rules": [[0, "add-rules"]], "Coding Style": [[1, "coding-style"]], "Formatting": [[1, "formatting"]], "File and folder naming": [[1, "file-and-folder-naming"]], "Copyright header": [[1, "copyright-header"]], "Indentation": [[1, "indentation"]], "Maximum Line Length": [[1, "maximum-line-length"]], "Blank Lines": [[1, "blank-lines"]], "Imports": [[1, "imports"]], "Strings": [[1, "strings"]], "Printing and Logging": [[1, "printing-and-logging"]], "Exceptions": [[1, "exceptions"]], "Naming": [[1, "naming"]], "Exception handling": [[1, "exception-handling"]], "Documentation": [[1, "documentation"]], "Automated testing": [[1, "automated-testing"]], "Contribution": [[2, "contribution"]], "Different stages of core members": [[2, "different-stages-of-core-members"]], "Core members": [[2, "core-members"]], "Alumni": [[2, "alumni"]], "Consultants": [[2, "consultants"]], "Development Notes": [[3, "development-notes"]], "Git Branching Model": [[3, "git-branching-model"]], "Release Versioning": [[3, "release-versioning"]], "Ticketing System": [[3, "ticketing-system"]], "Contribute": [[3, "contribute"]], "Development": [[4, "development"]], "Updating Documentation": [[5, "updating-documentation"]], "FAQ": [[6, "faq"]], "I have some questions. Where can I ask?": [[6, "i-have-some-questions-where-can-i-ask"]], "I got an error while using Quark-Engine. What can I do?": [[6, "i-got-an-error-while-using-quark-engine-what-can-i-do"]], "How do threshold, score, and weight working in Quark Engine?": [[6, "how-do-threshold-score-and-weight-working-in-quark-engine"]], "Why do scores keeping the same in all the analyses?": [[6, "why-do-scores-keeping-the-same-in-all-the-analyses"]], "How can I write a rule?": [[6, "how-can-i-write-a-rule"]], "How can I contribute my rules?": [[6, "how-can-i-contribute-my-rules"]], "Can I take part and contribute to Quark?": [[6, "can-i-take-part-and-contribute-to-quark"]], "Quark-Engine Book": [[7, "quark-engine-book"]], "Contents:": [[7, null]], "Indices and tables": [[7, "indices-and-tables"]], "Installing Quark-Engine": [[8, "installing-quark-engine"]], "Installation": [[9, "installation"]], "Integration": [[10, "integration"]], "First Step: Installation": [[10, "first-step-installation"]], "Second Step: Code Snippet As You Go": [[10, "second-step-code-snippet-as-you-go"]], "Directory Scanning": [[10, "directory-scanning"]], "Radiocontrast": [[10, "radiocontrast"], [31, "radiocontrast"]], "quark": [[11, "quark"]], "Organization": [[12, "organization"]], "Quark triage team": [[12, "quark-triage-team"]], "Responsibilities": [[12, "responsibilities"]], "Triage process": [[12, "triage-process"]], "Release process": [[12, "release-process"]], "quark package": [[13, "quark-package"]], "Subpackages": [[13, "subpackages"], [14, "subpackages"], [20, "subpackages"]], "Submodules": [[13, "submodules"], [14, "submodules"], [16, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [22, "submodules"], [23, "submodules"]], "quark.cli module": [[13, "module-quark.cli"]], "quark.config module": [[13, "module-quark.config"]], "quark.freshquark module": [[13, "module-quark.freshquark"]], "quark.logo module": [[13, "module-quark.logo"]], "quark.radiocontrast module": [[13, "module-quark.radiocontrast"]], "quark.report module": [[13, "module-quark.report"]], "quark.rulegeneration module": [[13, "module-quark.rulegeneration"]], "Module contents": [[13, "module-quark"], [14, "module-quark.core"], [15, "module-quark.core.axmlreader"], [16, "module-quark.core.interface"], [17, "module-quark.core.struct"], [18, "module-quark.evaluator"], [19, "module-quark.forensic"], [20, "module-quark.script"], [21, "module-quark.script.frida"], [22, "module-quark.utils"], [23, "module-quark.webreport"]], "quark.core package": [[14, "quark-core-package"]], "quark.core.analysis module": [[14, "module-quark.core.analysis"]], "quark.core.apkinfo module": [[14, "module-quark.core.apkinfo"]], "quark.core.parallelquark module": [[14, "module-quark.core.parallelquark"]], "quark.core.quark module": [[14, "module-quark.core.quark"]], "quark.core.rzapkinfo module": [[14, "module-quark.core.rzapkinfo"]], "quark.core.axmlreader package": [[15, "quark-core-axmlreader-package"]], "quark.core.interface package": [[16, "quark-core-interface-package"]], "quark.core.interface.baseapkinfo module": [[16, "module-quark.core.interface.baseapkinfo"]], "quark.core.struct package": [[17, "quark-core-struct-package"]], "quark.core.struct.bytecodeobject module": [[17, "module-quark.core.struct.bytecodeobject"]], "quark.core.struct.methodobject module": [[17, "module-quark.core.struct.methodobject"]], "quark.core.struct.registerobject module": [[17, "module-quark.core.struct.registerobject"]], "quark.core.struct.ruleobject module": [[17, "module-quark.core.struct.ruleobject"]], "quark.core.struct.tableobject module": [[17, "module-quark.core.struct.tableobject"]], "quark.evaluator package": [[18, "quark-evaluator-package"]], "quark.evaluator.pyeval module": [[18, "module-quark.evaluator.pyeval"]], "quark.forensic package": [[19, "quark-forensic-package"]], "quark.forensic.forensic module": [[19, "module-quark.forensic.forensic"]], "quark.forensic.vt_analysis module": [[19, "module-quark.forensic.vt_analysis"]], "quark.script package": [[20, "quark-script-package"]], "quark.script.ciphey module": [[20, "quark-script-ciphey-module"]], "quark.script.objection module": [[20, "module-quark.script.objection"]], "quark.script.utils module": [[20, "module-quark.script.utils"]], "quark.script.frida package": [[21, "quark-script-frida-package"]], "quark.utils package": [[22, "quark-utils-package"]], "quark.utils.colors module": [[22, "module-quark.utils.colors"]], "quark.utils.graph module": [[22, "module-quark.utils.graph"]], "quark.utils.output module": [[22, "module-quark.utils.output"]], "quark.utils.pprint module": [[22, "module-quark.utils.pprint"]], "quark.utils.regex module": [[22, "module-quark.utils.regex"]], "quark.utils.tools module": [[22, "module-quark.utils.tools"]], "Check the sequence pattern within two list.": [[22, "check-the-sequence-pattern-within-two-list"]], "quark.utils.weight module": [[22, "module-quark.utils.weight"]], "quark.webreport package": [[23, "quark-webreport-package"]], "quark.webreport.generate module": [[23, "module-quark.webreport.generate"]], "Quark-Engine Inside": [[24, "quark-engine-inside"]], "Quark-Engine Objects Introduction": [[25, "quark-engine-objects-introduction"]], "Dalvik Bytecode Loader(quark.Evaluator.pyeval)": [[25, "dalvik-bytecode-loader-quark-evaluator-pyeval"]], "XRule(quark.Objects.XRule)": [[25, "xrule-quark-objects-xrule"]], "Explanation of each function": [[25, "explanation-of-each-function"], [25, "id1"], [25, "id2"], [25, "id3"], [25, "id4"]], "Five-stage inspection": [[25, "five-stage-inspection"]], "Level 1": [[25, "level-1"]], "Level 2": [[25, "level-2"]], "Level 3": [[25, "level-3"]], "Level 4": [[25, "level-4"]], "Level 5": [[25, "level-5"]], "Apkinfo(quark.Objects.Apkinfo)": [[25, "apkinfo-quark-objects-apkinfo"]], "BytecodeObject(quark.Objects.bytecodeObject)": [[25, "bytecodeobject-quark-objects-bytecodeobject"]], "RuleObject(quark.Objects.ruleobject)": [[25, "ruleobject-quark-objects-ruleobject"]], "TableObject(quark.Objects.tableobject)": [[25, "tableobject-quark-objects-tableobject"]], "RegisterObject(quark.Objects.registerobject)": [[25, "registerobject-quark-objects-registerobject"]], "Quark-Engine Project Overview": [[26, "quark-engine-project-overview"]], "Quark-Engine Map": [[26, "quark-engine-map"]], "Quark module architecture diagram": [[26, "quark-module-architecture-diagram"]], "Objects": [[26, "objects"]], "Evaluator": [[26, "evaluator"]], "utils": [[26, "utils"]], "Quark-Engine Workflow": [[27, "quark-engine-workflow"]], "Quark-Engine Step 1(Command Line)": [[27, "quark-engine-step-1-command-line"]], "Quark-Engine Step 2 (APK Information Extract)": [[27, "quark-engine-step-2-apk-information-extract"]], "Quark-Engine Step 3 (Load JSON Rule)": [[27, "quark-engine-step-3-load-json-rule"]], "Quark-Engine Step 4 (Level 1-5 Check)": [[27, "quark-engine-step-4-level-1-5-check"]], "Quark-Engine Step 5 (Weighted Score Calculation)": [[27, "quark-engine-step-5-weighted-score-calculation"]], "Quark-Engine Step 6 (Report)": [[27, "quark-engine-step-6-report"]], "Summary Report": [[27, "summary-report"], [29, "summary-report"]], "Detail Report": [[27, "detail-report"], [29, "detail-report"]], "Quark MIT Program": [[28, "quark-mit-program"]], "Quark to You": [[28, "quark-to-you"]], "You to Quark": [[28, "you-to-quark"]], "Better Community": [[28, "better-community"]], "Minumum Requirements": [[28, "minumum-requirements"]], "Contact us": [[28, "contact-us"]], "Quark Report": [[29, "quark-report"]], "Easy to Use and Intuitive Report": [[29, "easy-to-use-and-intuitive-report"]], "Web Report": [[29, "web-report"]], "Label-based Report": [[29, "label-based-report"]], "Behaviors Comparison Radar Chart": [[29, "behaviors-comparison-radar-chart"]], "Call Graph": [[29, "call-graph"]], "Rule Classification": [[29, "rule-classification"]], "Quark Script": [[30, "quark-script"]], "Ecosystem for Mobile Security Tools": [[30, "ecosystem-for-mobile-security-tools"]], "Innovative & Interactive": [[30, "innovative-interactive"]], "Dynamic & Static Analysis": [[30, "dynamic-static-analysis"]], "Re-Usable & Sharable": [[30, "re-usable-sharable"]], "More APIs to come": [[30, "more-apis-to-come"]], "Quickstart": [[30, "quickstart"]], "Step 1: Environments Requirements": [[30, "step-1-environments-requirements"]], "Step 2: Install Quark Engine": [[30, "step-2-install-quark-engine"]], "Step 3: Prepare Quark Script, Detection Rule and the Sample File": [[30, "step-3-prepare-quark-script-detection-rule-and-the-sample-file"]], "Step 4: Run the script": [[30, "step-4-run-the-script"]], "Introduce of Quark Script APIs": [[30, "introduce-of-quark-script-apis"]], "findMethodInAPK(samplePath, targetMethod)": [[30, "findmethodinapk-samplepath-targetmethod"]], "Rule(rule.json)": [[30, "rule-rule-json"]], "runQuarkAnalysis(SAMPLE_PATH, ruleInstance)": [[30, "runquarkanalysis-sample-path-ruleinstance"]], "quarkResultInstance.behaviorOccurList": [[30, "quarkresultinstance-behavioroccurlist"]], "quarkResultInstance.getAllStrings(none)": [[30, "quarkresultinstance-getallstrings-none"]], "quarkResultInstance.findMethodInCaller(callerMethod, targetMethod)": [[30, "quarkresultinstance-findmethodincaller-callermethod-targetmethod"]], "behaviorInstance.firstAPI.fullName": [[30, "behaviorinstance-firstapi-fullname"]], "behaviorInstance.secondAPI.fullName": [[30, "behaviorinstance-secondapi-fullname"]], "behaviorInstance.hasString(pattern, isRegex)": [[30, "behaviorinstance-hasstring-pattern-isregex"]], "behaviorInstance.hasUrl(none)": [[30, "behaviorinstance-hasurl-none"]], "behaviorInstance.methodCaller": [[30, "behaviorinstance-methodcaller"]], "behaviorInstance.getParamValues(none)": [[30, "behaviorinstance-getparamvalues-none"]], "behaviorInstance.isArgFromMethod(targetMethod)": [[30, "behaviorinstance-isargfrommethod-targetmethod"]], "behaviorInstance.getMethodsInArgs(none)": [[30, "behaviorinstance-getmethodsinargs-none"]], "methodInstance.getXrefFrom(none)": [[30, "methodinstance-getxreffrom-none"]], "methodInstance.getXrefTo(none)": [[30, "methodinstance-getxrefto-none"]], "methodInstance.getArguments(none)": [[30, "methodinstance-getarguments-none"]], "Objection(host)": [[30, "objection-host"]], "objInstance.hookMethod(method, watchArgs, watchBacktrace, watchRet)": [[30, "objinstance-hookmethod-method-watchargs-watchbacktrace-watchret"]], "runFridaHook(apkPackageName, targetMethod, methodParamTypes, secondToWait)": [[30, "runfridahook-apkpackagename-targetmethod-methodparamtypes-secondtowait"]], "checkClearText(inputString)": [[30, "checkcleartext-inputstring"]], "getActivities(samplePath)": [[30, "getactivities-samplepath"]], "activityInstance.hasIntentFilter(none)": [[30, "activityinstance-hasintentfilter-none"]], "activityInstance.isExported(none)": [[30, "activityinstance-isexported-none"]], "Analyzing real case (InstaStealer) using Quark Script": [[30, "analyzing-real-case-instastealer-using-quark-script"]], "Quark Script that dynamic hooks the method containing urls": [[30, "quark-script-that-dynamic-hooks-the-method-containing-urls"]], "Quark Script Result": [[30, "quark-script-result"], [30, "id5"], [30, "id7"], [30, "id9"], [30, "id11"], [30, "id13"], [30, "id15"], [30, "id17"], [30, "id19"], [30, "id21"], [30, "id23"], [30, "id26"], [30, "id28"]], "Logs on the Objection terminal (hooking)": [[30, "logs-on-the-objection-terminal-hooking"]], "Method (callComponentMethod) with urls is detected triggered!": [[30, "method-callcomponentmethod-with-urls-is-detected-triggered"]], "Detect CWE-798 in Android Application (ovaa.apk)": [[30, "detect-cwe-798-in-android-application-ovaa-apk"]], "Quark Scipt: CWE-798.py": [[30, "quark-scipt-cwe-798-py"]], "Quark Rule: findSecretKeySpec.json": [[30, "quark-rule-findsecretkeyspec-json"]], "Hard-Coded AES key in the APK file": [[30, "hard-coded-aes-key-in-the-apk-file"]], "Detect CWE-94 in Android Application (ovaa.apk)": [[30, "detect-cwe-94-in-android-application-ovaa-apk"]], "Quark Scipt: CWE-94.py": [[30, "quark-scipt-cwe-94-py"]], "Quark Rule: loadExternalCode.json": [[30, "quark-rule-loadexternalcode-json"]], "Detect CWE-921 in Android Application (ovaa.apk)": [[30, "detect-cwe-921-in-android-application-ovaa-apk"]], "Quark Script CWE-921.py": [[30, "quark-script-cwe-921-py"]], "Quark Rule: checkFileExistence.json": [[30, "quark-rule-checkfileexistence-json"]], "Detect CWE-312 in Android Application (ovaa.apk)": [[30, "detect-cwe-312-in-android-application-ovaa-apk"]], "Quark Script CWE-312.py": [[30, "quark-script-cwe-312-py"]], "Frida Script: agent.js": [[30, "frida-script-agent-js"]], "Detect CWE-89 in Android Application (AndroGoat.apk)": [[30, "detect-cwe-89-in-android-application-androgoat-apk"]], "Quark Script CWE-89.py": [[30, "quark-script-cwe-89-py"]], "Quark Rule: executeSQLCommand.json": [[30, "quark-rule-executesqlcommand-json"]], "Detect CWE-926 in Android Application (dvba.apk)": [[30, "detect-cwe-926-in-android-application-dvba-apk"]], "Quark Script CWE-926.py": [[30, "quark-script-cwe-926-py"]], "Detect CWE-749 in Android Application (MSTG-Android-Java.apk)": [[30, "detect-cwe-749-in-android-application-mstg-android-java-apk"]], "Quark Script CWE-749.py": [[30, "quark-script-cwe-749-py"]], "Quark Rule: configureJsExecution.json": [[30, "quark-rule-configurejsexecution-json"]], "Detect CWE-532 in Android Application (dvba.apk)": [[30, "detect-cwe-532-in-android-application-dvba-apk"]], "Quark Script CWE-532.py": [[30, "quark-script-cwe-532-py"]], "Detect CWE-780 in Android Application (MSTG-Android-Java.apk)": [[30, "detect-cwe-780-in-android-application-mstg-android-java-apk"]], "Quark Script CWE-780.py": [[30, "quark-script-cwe-780-py"]], "Quark Rule: useOfCryptographicAlgo.json": [[30, "quark-rule-useofcryptographicalgo-json"], [30, "id25"]], "Detect CWE-319 in Android Application (ovaa.apk)": [[30, "detect-cwe-319-in-android-application-ovaa-apk"]], "Quark Script CWE-319.py": [[30, "quark-script-cwe-319-py"]], "Quark Rule: setRetrofitBaseUrl.json": [[30, "quark-rule-setretrofitbaseurl-json"]], "Detect CWE-327 in Android Application (InjuredAndroid.apk)": [[30, "detect-cwe-327-in-android-application-injuredandroid-apk"]], "Quark Script CWE-327.py": [[30, "quark-script-cwe-327-py"]], "Detect CWE-20 in Android Application (diva.apk)": [[30, "detect-cwe-20-in-android-application-diva-apk"]], "Quark Script CWE-20.py": [[30, "quark-script-cwe-20-py"]], "Quark Rule: inputWebUrl.json": [[30, "quark-rule-inputweburl-json"]], "Rule Generation": [[31, "rule-generation"]], "CLI Usage": [[31, "cli-usage"]], "API Usage": [[31, "api-usage"]], "Web Editor Tutorial": [[31, "web-editor-tutorial"]], "Testing Quark-Engine": [[32, "testing-quark-engine"]], "Running in Docker": [[32, "running-in-docker"]]}, "indexentries": {"radiocontrast (class in quark.radiocontrast)": [[13, "quark.radiocontrast.RadioContrast"]], "report (class in quark.report)": [[13, "quark.report.Report"]], "rulegeneration (class in quark.rulegeneration)": [[13, "quark.rulegeneration.RuleGeneration"]], "analysis() (quark.report.report method)": [[13, "quark.report.Report.analysis"]], "download() (in module quark.freshquark)": [[13, "quark.freshquark.download"]], "entry_point() (in module quark.freshquark)": [[13, "quark.freshquark.entry_point"]], "generate_rule() (quark.radiocontrast.radiocontrast method)": [[13, "quark.radiocontrast.RadioContrast.generate_rule"]], "generate_rule() (quark.rulegeneration.rulegeneration method)": [[13, "quark.rulegeneration.RuleGeneration.generate_rule"]], "get_report() (quark.report.report method)": [[13, "quark.report.Report.get_report"]], "logo() (in module quark.logo)": [[13, "quark.logo.logo"]], "method_recursive_search() (quark.radiocontrast.radiocontrast method)": [[13, "quark.radiocontrast.RadioContrast.method_recursive_search"]], "module": [[13, "module-quark"], [13, "module-quark.cli"], [13, "module-quark.config"], [13, "module-quark.freshquark"], [13, "module-quark.logo"], [13, "module-quark.radiocontrast"], [13, "module-quark.report"], [13, "module-quark.rulegeneration"], [14, "module-quark.core"], [14, "module-quark.core.analysis"], [14, "module-quark.core.apkinfo"], [14, "module-quark.core.parallelquark"], [14, "module-quark.core.quark"], [14, "module-quark.core.rzapkinfo"], [15, "module-quark.core.axmlreader"], [16, "module-quark.core.interface"], [16, "module-quark.core.interface.baseapkinfo"], [17, "module-quark.core.struct"], [17, "module-quark.core.struct.bytecodeobject"], [17, "module-quark.core.struct.methodobject"], [17, "module-quark.core.struct.registerobject"], [17, "module-quark.core.struct.ruleobject"], [17, "module-quark.core.struct.tableobject"], [18, "module-quark.evaluator"], [18, "module-quark.evaluator.pyeval"], [19, "module-quark.forensic"], [19, "module-quark.forensic.forensic"], [19, "module-quark.forensic.vt_analysis"], [20, "module-quark.script"], [20, "module-quark.script.objection"], [20, "module-quark.script.utils"], [21, "module-quark.script.frida"], [22, "module-quark.utils"], [22, "module-quark.utils.colors"], [22, "module-quark.utils.graph"], [22, "module-quark.utils.output"], [22, "module-quark.utils.pprint"], [22, "module-quark.utils.regex"], [22, "module-quark.utils.tools"], [22, "module-quark.utils.weight"], [23, "module-quark.webreport"], [23, "module-quark.webreport.generate"]], "quark": [[13, "module-quark"]], "quark.cli": [[13, "module-quark.cli"]], "quark.config": [[13, "module-quark.config"]], "quark.freshquark": [[13, "module-quark.freshquark"]], "quark.logo": [[13, "module-quark.logo"]], "quark.radiocontrast": [[13, "module-quark.radiocontrast"]], "quark.report": [[13, "module-quark.report"]], "quark.rulegeneration": [[13, "module-quark.rulegeneration"]], "update_rule_buffer() (in module quark.cli)": [[13, "quark.cli.update_rule_buffer"]], "androguardimp (class in quark.core.apkinfo)": [[14, "quark.core.apkinfo.AndroguardImp"]], "parallelquark (class in quark.core.parallelquark)": [[14, "quark.core.parallelquark.ParallelQuark"]], "quark (class in quark.core.quark)": [[14, "quark.core.quark.Quark"]], "quarkanalysis (class in quark.core.analysis)": [[14, "quark.core.analysis.QuarkAnalysis"]], "rizincache (in module quark.core.rzapkinfo)": [[14, "quark.core.rzapkinfo.RizinCache"]], "rizinimp (class in quark.core.rzapkinfo)": [[14, "quark.core.rzapkinfo.RizinImp"]], "activities (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.activities"]], "activities (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.activities"]], "add_table_row() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.add_table_row"]], "all_methods (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.all_methods"]], "all_methods (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.all_methods"]], "analysis (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.analysis"]], "android_apis (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.android_apis"]], "android_apis (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.android_apis"]], "apk (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.apk"]], "apk_filename (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.apk_filename"]], "apk_filepath (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.apk_filepath"]], "apply_rules() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.apply_rules"]], "call_graph_analysis_list (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.call_graph_analysis_list"]], "check_parameter() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_parameter"]], "check_parameter_on_single_method() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_parameter_on_single_method"]], "check_parameter_values() (quark.core.quark.quark static method)": [[14, "quark.core.quark.Quark.check_parameter_values"]], "check_sequence() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.check_sequence"]], "clean_result() (quark.core.analysis.quarkanalysis method)": [[14, "quark.core.analysis.QuarkAnalysis.clean_result"]], "close() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.close"]], "core_library (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.core_library"]], "crime_description (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.crime_description"]], "custom_methods (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.custom_methods"]], "custom_methods (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.custom_methods"]], "dalvikvmformat (quark.core.apkinfo.androguardimp attribute)": [[14, "quark.core.apkinfo.AndroguardImp.dalvikvmformat"]], "find_api_usage() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_api_usage"]], "find_intersection() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_intersection"]], "find_method() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.find_method"]], "find_method() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.find_method"]], "find_previous_method() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.find_previous_method"]], "first_api (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.first_api"]], "generate_json_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.generate_json_report"]], "get_json_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.get_json_report"]], "get_method_bytecode() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_method_bytecode"]], "get_method_bytecode() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_method_bytecode"]], "get_strings() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_strings"]], "get_strings() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_strings"]], "get_wrapper_smali() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.get_wrapper_smali"]], "get_wrapper_smali() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.get_wrapper_smali"]], "init_label_report_table() (in module quark.core.analysis)": [[14, "quark.core.analysis.init_label_report_table"]], "init_pretty_table() (in module quark.core.analysis)": [[14, "quark.core.analysis.init_pretty_table"]], "json_report (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.json_report"]], "label_report_table (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.label_report_table"]], "level_1_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_1_result"]], "level_2_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_2_result"]], "level_3_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_3_result"]], "level_4_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_4_result"]], "level_5_result (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.level_5_result"]], "lowerfunc() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.lowerfunc"]], "lowerfunc() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.lowerfunc"]], "method_recursive_search() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.method_recursive_search"]], "parent_wrapper_mapping (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.parent_wrapper_mapping"]], "permissions (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.permissions"]], "permissions (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.permissions"]], "quark.core": [[14, "module-quark.core"]], "quark.core.analysis": [[14, "module-quark.core.analysis"]], "quark.core.apkinfo": [[14, "module-quark.core.apkinfo"]], "quark.core.parallelquark": [[14, "module-quark.core.parallelquark"]], "quark.core.quark": [[14, "module-quark.core.quark"]], "quark.core.rzapkinfo": [[14, "module-quark.core.rzapkinfo"]], "ret_type (quark.core.rzapkinfo.rizinimp attribute)": [[14, "quark.core.rzapkinfo.RizinImp.ret_type"]], "run() (quark.core.parallelquark.parallelquark method)": [[14, "quark.core.parallelquark.ParallelQuark.run"]], "run() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.run"]], "score_sum (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.score_sum"]], "second_api (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.second_api"]], "show_call_graph() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_call_graph"]], "show_detail_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_detail_report"]], "show_label_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_label_report"]], "show_rule_classification() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_rule_classification"]], "show_summary_report() (quark.core.quark.quark method)": [[14, "quark.core.quark.Quark.show_summary_report"]], "subclass_relationships (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.subclass_relationships"]], "subclass_relationships (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.subclass_relationships"]], "summary_report_table (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.summary_report_table"]], "superclass_relationships (quark.core.apkinfo.androguardimp property)": [[14, "quark.core.apkinfo.AndroguardImp.superclass_relationships"]], "superclass_relationships (quark.core.rzapkinfo.rizinimp property)": [[14, "quark.core.rzapkinfo.RizinImp.superclass_relationships"]], "upperfunc() (quark.core.apkinfo.androguardimp method)": [[14, "quark.core.apkinfo.AndroguardImp.upperfunc"]], "upperfunc() (quark.core.rzapkinfo.rizinimp method)": [[14, "quark.core.rzapkinfo.RizinImp.upperfunc"]], "weight_sum (quark.core.analysis.quarkanalysis attribute)": [[14, "quark.core.analysis.QuarkAnalysis.weight_sum"]], "axmlexception": [[15, "quark.core.axmlreader.AxmlException"]], "axmlreader (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.AxmlReader"]], "resvalue (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.ResValue"]], "res_value_type (class in quark.core.axmlreader)": [[15, "quark.core.axmlreader.Res_value_type"]], "type_attribute (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_ATTRIBUTE"]], "type_dimension (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DIMENSION"]], "type_dynamic_attribute (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DYNAMIC_ATTRIBUTE"]], "type_dynamic_reference (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_DYNAMIC_REFERENCE"]], "type_first_color_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FIRST_COLOR_INT"]], "type_first_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FIRST_INT"]], "type_float (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FLOAT"]], "type_fraction (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_FRACTION"]], "type_int_boolean (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_BOOLEAN"]], "type_int_color_argb4 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_ARGB4"]], "type_int_color_argb8 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_ARGB8"]], "type_int_color_rgb4 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_RGB4"]], "type_int_color_rgb8 (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_COLOR_RGB8"]], "type_int_dec (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_DEC"]], "type_int_hex (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_INT_HEX"]], "type_last_color_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_LAST_COLOR_INT"]], "type_last_int (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_LAST_INT"]], "type_null (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_NULL"]], "type_reference (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_REFERENCE"]], "type_string (quark.core.axmlreader.res_value_type attribute)": [[15, "quark.core.axmlreader.Res_value_type.TYPE_STRING"]], "axml_size (quark.core.axmlreader.axmlreader property)": [[15, "quark.core.axmlreader.AxmlReader.axml_size"]], "data (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.data"]], "file_size (quark.core.axmlreader.axmlreader property)": [[15, "quark.core.axmlreader.AxmlReader.file_size"]], "get_attributes() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_attributes"]], "get_string() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_string"]], "get_xml_tree() (quark.core.axmlreader.axmlreader method)": [[15, "quark.core.axmlreader.AxmlReader.get_xml_tree"]], "name (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.name"]], "namespace (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.namespace"]], "quark.core.axmlreader": [[15, "module-quark.core.axmlreader"]], "type (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.type"]], "value (quark.core.axmlreader.resvalue attribute)": [[15, "quark.core.axmlreader.ResValue.value"]], "baseapkinfo (class in quark.core.interface.baseapkinfo)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo"]], "activities (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.activities"]], "all_methods (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.all_methods"]], "android_apis (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.android_apis"]], "apk_filename (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.apk_filename"]], "apk_filepath (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.apk_filepath"]], "core_library (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.core_library"]], "custom_methods (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.custom_methods"]], "filename (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.filename"]], "filesize (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.filesize"]], "find_method() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.find_method"]], "get_method_bytecode() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_method_bytecode"]], "get_strings() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_strings"]], "get_subclasses (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_subclasses"]], "get_wrapper_smali() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.get_wrapper_smali"]], "lowerfunc() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.lowerfunc"]], "md5 (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.md5"]], "permissions (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.permissions"]], "quark.core.interface": [[16, "module-quark.core.interface"]], "quark.core.interface.baseapkinfo": [[16, "module-quark.core.interface.baseapkinfo"]], "ret_type (quark.core.interface.baseapkinfo.baseapkinfo attribute)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.ret_type"]], "superclass_relationships (quark.core.interface.baseapkinfo.baseapkinfo property)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.superclass_relationships"]], "upperfunc() (quark.core.interface.baseapkinfo.baseapkinfo method)": [[16, "quark.core.interface.baseapkinfo.BaseApkinfo.upperfunc"]], "bytecodeobject (class in quark.core.struct.bytecodeobject)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject"]], "methodobject (class in quark.core.struct.methodobject)": [[17, "quark.core.struct.methodobject.MethodObject"]], "registerobject (class in quark.core.struct.registerobject)": [[17, "quark.core.struct.registerobject.RegisterObject"]], "ruleobject (class in quark.core.struct.ruleobject)": [[17, "quark.core.struct.ruleobject.RuleObject"]], "tableobject (class in quark.core.struct.tableobject)": [[17, "quark.core.struct.tableobject.TableObject"]], "access_flags (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.access_flags"]], "api (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.api"]], "cache (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.cache"]], "called_by_func (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.called_by_func"]], "check_item (quark.core.struct.ruleobject.ruleobject attribute)": [[17, "quark.core.struct.ruleobject.RuleObject.check_item"]], "class_name (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.class_name"]], "crime (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.crime"]], "current_type (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.current_type"]], "descriptor (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.descriptor"]], "full_name (quark.core.struct.methodobject.methodobject property)": [[17, "quark.core.struct.methodobject.MethodObject.full_name"]], "get_obj_list() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.get_obj_list"]], "get_score() (quark.core.struct.ruleobject.ruleobject method)": [[17, "quark.core.struct.ruleobject.RuleObject.get_score"]], "get_table() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.get_table"]], "hash_index (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.hash_index"]], "hash_table (quark.core.struct.tableobject.tableobject attribute)": [[17, "quark.core.struct.tableobject.TableObject.hash_table"]], "insert() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.insert"]], "is_android_api() (quark.core.struct.methodobject.methodobject method)": [[17, "quark.core.struct.methodobject.MethodObject.is_android_api"]], "label (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.label"]], "mnemonic (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.mnemonic"]], "name (quark.core.struct.methodobject.methodobject attribute)": [[17, "quark.core.struct.methodobject.MethodObject.name"]], "parameter (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.parameter"]], "permission (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.permission"]], "pop() (quark.core.struct.tableobject.tableobject method)": [[17, "quark.core.struct.tableobject.TableObject.pop"]], "quark.core.struct": [[17, "module-quark.core.struct"]], "quark.core.struct.bytecodeobject": [[17, "module-quark.core.struct.bytecodeobject"]], "quark.core.struct.methodobject": [[17, "module-quark.core.struct.methodobject"]], "quark.core.struct.registerobject": [[17, "module-quark.core.struct.registerobject"]], "quark.core.struct.ruleobject": [[17, "module-quark.core.struct.ruleobject"]], "quark.core.struct.tableobject": [[17, "module-quark.core.struct.tableobject"]], "register_name (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.register_name"]], "registers (quark.core.struct.bytecodeobject.bytecodeobject property)": [[17, "quark.core.struct.bytecodeobject.BytecodeObject.registers"]], "rule_filename (quark.core.struct.ruleobject.ruleobject attribute)": [[17, "quark.core.struct.ruleobject.RuleObject.rule_filename"]], "score (quark.core.struct.ruleobject.ruleobject property)": [[17, "quark.core.struct.ruleobject.RuleObject.score"]], "type_histroy (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.type_histroy"]], "value (quark.core.struct.registerobject.registerobject property)": [[17, "quark.core.struct.registerobject.RegisterObject.value"]], "aget_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.AGET_KIND"]], "aget_wide_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.AGET_WIDE_KIND"]], "aput_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.APUT_KIND"]], "aput_wide_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.APUT_WIDE_KIND"]], "binop_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.BINOP_KIND"]], "cast_type() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CAST_TYPE"]], "const() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST"]], "const_class() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_CLASS"]], "const_four() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_FOUR"]], "const_highsixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_HIGHSIXTEEN"]], "const_sixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_SIXTEEN"]], "const_string() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_STRING"]], "const_wide() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE"]], "const_wide_highsixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_HIGHSIXTEEN"]], "const_wide_sixteen() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_SIXTEEN"]], "const_wide_thirty_two() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.CONST_WIDE_THIRTY_TWO"]], "filled_new_array_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.FILLED_NEW_ARRAY_KIND"]], "invoke_custom() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_CUSTOM"]], "invoke_direct() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_DIRECT"]], "invoke_interface() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_INTERFACE"]], "invoke_polymorphic() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_POLYMORPHIC"]], "invoke_static() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_STATIC"]], "invoke_super() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_SUPER"]], "invoke_virtual() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_VIRTUAL"]], "invoke_virtual_range() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.INVOKE_VIRTUAL_RANGE"]], "move_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_KIND"]], "move_result() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT"]], "move_result_object() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT_OBJECT"]], "move_result_wide() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.MOVE_RESULT_WIDE"]], "neg_and_not_kind() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEG_AND_NOT_KIND"]], "new_array() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEW_ARRAY"]], "new_instance() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.NEW_INSTANCE"]], "pyeval (class in quark.evaluator.pyeval)": [[18, "quark.evaluator.pyeval.PyEval"]], "get_method_pattern() (quark.evaluator.pyeval.pyeval static method)": [[18, "quark.evaluator.pyeval.PyEval.get_method_pattern"]], "logger() (in module quark.evaluator.pyeval)": [[18, "quark.evaluator.pyeval.logger"]], "quark.evaluator": [[18, "module-quark.evaluator"]], "quark.evaluator.pyeval": [[18, "module-quark.evaluator.pyeval"]], "show_table() (quark.evaluator.pyeval.pyeval method)": [[18, "quark.evaluator.pyeval.PyEval.show_table"]], "forensic (class in quark.forensic.forensic)": [[19, "quark.forensic.forensic.Forensic"]], "vtanalysis (class in quark.forensic.vt_analysis)": [[19, "quark.forensic.vt_analysis.VTAnalysis"]], "all_strings (quark.forensic.forensic.forensic attribute)": [[19, "quark.forensic.forensic.Forensic.all_strings"]], "analyze_multi_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.analyze_multi_file"]], "analyze_single_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.analyze_single_file"]], "apk (quark.forensic.forensic.forensic attribute)": [[19, "quark.forensic.forensic.Forensic.apk"]], "change_api_key() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.change_api_key"]], "check_api_key_available() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.check_api_key_available"]], "get_all_strings() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_all_strings"]], "get_android_api() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_android_api"]], "get_api_keys_list() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_api_keys_list"]], "get_base64() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_base64"]], "get_content() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_content"]], "get_file() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_file"]], "get_file_md5() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_file_md5"]], "get_ip() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_ip"]], "get_reports() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.get_reports"]], "get_url() (quark.forensic.forensic.forensic method)": [[19, "quark.forensic.forensic.Forensic.get_url"]], "quark.forensic": [[19, "module-quark.forensic"]], "quark.forensic.forensic": [[19, "module-quark.forensic.forensic"]], "quark.forensic.vt_analysis": [[19, "module-quark.forensic.vt_analysis"]], "retreive_report() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.retreive_report"]], "scan_file() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.scan_file"]], "set_progress() (quark.forensic.vt_analysis.vtanalysis method)": [[19, "quark.forensic.vt_analysis.VTAnalysis.set_progress"]], "activity (class in quark.script)": [[20, "quark.script.Activity"]], "behavior (class in quark.script)": [[20, "quark.script.Behavior"]], "defaultruleset (class in quark.script)": [[20, "quark.script.DefaultRuleset"]], "method (class in quark.script)": [[20, "quark.script.Method"]], "objection (class in quark.script.objection)": [[20, "quark.script.objection.Objection"]], "quarkresult (class in quark.script)": [[20, "quark.script.QuarkResult"]], "ruleset (class in quark.script)": [[20, "quark.script.Ruleset"]], "behavioroccurlist (quark.script.quarkresult property)": [[20, "quark.script.QuarkResult.behaviorOccurList"]], "classname (quark.script.method property)": [[20, "quark.script.Method.className"]], "convertmethodtostring() (in module quark.script.objection)": [[20, "quark.script.objection.convertMethodToString"]], "descriptor (quark.script.method property)": [[20, "quark.script.Method.descriptor"]], "findmethodinapk() (in module quark.script)": [[20, "quark.script.findMethodInAPK"]], "findmethodincaller() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.findMethodInCaller"]], "fullname (quark.script.method property)": [[20, "quark.script.Method.fullName"]], "getactivities() (in module quark.script)": [[20, "quark.script.getActivities"]], "getallstrings() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getAllStrings"]], "getarguments() (quark.script.method method)": [[20, "quark.script.Method.getArguments"]], "getmethodxreffrom() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getMethodXrefFrom"]], "getmethodxrefto() (quark.script.quarkresult method)": [[20, "quark.script.QuarkResult.getMethodXrefTo"]], "getmethodsinargs() (quark.script.behavior method)": [[20, "quark.script.Behavior.getMethodsInArgs"]], "getparamvalues() (quark.script.behavior method)": [[20, "quark.script.Behavior.getParamValues"]], "getxreffrom() (quark.script.method method)": [[20, "quark.script.Method.getXrefFrom"]], "getxrefto() (quark.script.method method)": [[20, "quark.script.Method.getXrefTo"]], "hasintentfilter() (quark.script.activity method)": [[20, "quark.script.Activity.hasIntentFilter"]], "hasstring() (quark.script.behavior method)": [[20, "quark.script.Behavior.hasString"]], "hasurl() (quark.script.behavior method)": [[20, "quark.script.Behavior.hasUrl"]], "hookmethod() (quark.script.objection.objection method)": [[20, "quark.script.objection.Objection.hookMethod"]], "isargfrommethod() (quark.script.behavior method)": [[20, "quark.script.Behavior.isArgFromMethod"]], "isargumenttrue() (in module quark.script.utils)": [[20, "quark.script.utils.isArgumentTrue"]], "isexported() (quark.script.activity method)": [[20, "quark.script.Activity.isExported"]], "methodname (quark.script.method property)": [[20, "quark.script.Method.methodName"]], "quark.script": [[20, "module-quark.script"]], "quark.script.objection": [[20, "module-quark.script.objection"]], "quark.script.utils": [[20, "module-quark.script.utils"]], "runquarkanalysis() (in module quark.script)": [[20, "quark.script.runQuarkAnalysis"]], "behavior (class in quark.script.frida)": [[21, "quark.script.frida.Behavior"]], "fridaresult (class in quark.script.frida)": [[21, "quark.script.frida.FridaResult"]], "methodcalleventdispatcher (class in quark.script.frida)": [[21, "quark.script.frida.MethodCallEventDispatcher"]], "behavioroccurlist (quark.script.frida.fridaresult property)": [[21, "quark.script.frida.FridaResult.behaviorOccurList"]], "getparamvalues() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.getParamValues"]], "handlecapturedevent() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.handleCapturedEvent"]], "hasstring() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.hasString"]], "hasurl() (quark.script.frida.behavior method)": [[21, "quark.script.frida.Behavior.hasUrl"]], "quark.script.frida": [[21, "module-quark.script.frida"]], "runfridahook() (in module quark.script.frida)": [[21, "quark.script.frida.runFridaHook"]], "startwatchingmethodcall() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.startWatchingMethodCall"]], "stopwatchingmethodcall() (quark.script.frida.methodcalleventdispatcher method)": [[21, "quark.script.frida.MethodCallEventDispatcher.stopWatchingMethodCall"]], "high (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.High"]], "level_info (class in quark.utils.weight)": [[22, "quark.utils.weight.LEVEL_INFO"]], "low (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.LOW"]], "moderate (quark.utils.weight.level_info attribute)": [[22, "quark.utils.weight.LEVEL_INFO.Moderate"]], "weight (class in quark.utils.weight)": [[22, "quark.utils.weight.Weight"]], "black() (in module quark.utils.colors)": [[22, "quark.utils.colors.black"]], "blue() (in module quark.utils.colors)": [[22, "quark.utils.colors.blue"]], "bold() (in module quark.utils.colors)": [[22, "quark.utils.colors.bold"]], "calculate() (quark.utils.weight.weight method)": [[22, "quark.utils.weight.Weight.calculate"]], "call_graph() (in module quark.utils.graph)": [[22, "quark.utils.graph.call_graph"]], "color() (in module quark.utils.colors)": [[22, "quark.utils.colors.color"]], "colorful_report() (in module quark.utils.colors)": [[22, "quark.utils.colors.colorful_report"]], "contains() (in module quark.utils.tools)": [[22, "quark.utils.tools.contains"]], "cyan() (in module quark.utils.colors)": [[22, "quark.utils.colors.cyan"]], "descriptor_to_androguard_format() (in module quark.utils.tools)": [[22, "quark.utils.tools.descriptor_to_androguard_format"]], "extract_content() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_content"]], "extract_file() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_file"]], "extract_ip() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_ip"]], "extract_url() (in module quark.utils.regex)": [[22, "quark.utils.regex.extract_url"]], "filter_api_by_usage_count() (in module quark.utils.tools)": [[22, "quark.utils.tools.filter_api_by_usage_count"]], "get_arguments_from_argument_str() (in module quark.utils.tools)": [[22, "quark.utils.tools.get_arguments_from_argument_str"]], "get_parenthetic_contents() (in module quark.utils.tools)": [[22, "quark.utils.tools.get_parenthetic_contents"]], "get_rule_classification_data() (in module quark.utils.output)": [[22, "quark.utils.output.get_rule_classification_data"]], "green() (in module quark.utils.colors)": [[22, "quark.utils.colors.green"]], "lightblue() (in module quark.utils.colors)": [[22, "quark.utils.colors.lightblue"]], "lightyellow() (in module quark.utils.colors)": [[22, "quark.utils.colors.lightyellow"]], "magenta() (in module quark.utils.colors)": [[22, "quark.utils.colors.magenta"]], "output_parent_function_graph() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_graph"]], "output_parent_function_json() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_json"]], "output_parent_function_table() (in module quark.utils.output)": [[22, "quark.utils.output.output_parent_function_table"]], "print_error() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_error"]], "print_info() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_info"]], "print_success() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_success"]], "print_warning() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.print_warning"]], "quark.utils": [[22, "module-quark.utils"]], "quark.utils.colors": [[22, "module-quark.utils.colors"]], "quark.utils.graph": [[22, "module-quark.utils.graph"]], "quark.utils.output": [[22, "module-quark.utils.output"]], "quark.utils.pprint": [[22, "module-quark.utils.pprint"]], "quark.utils.regex": [[22, "module-quark.utils.regex"]], "quark.utils.tools": [[22, "module-quark.utils.tools"]], "quark.utils.weight": [[22, "module-quark.utils.weight"]], "red() (in module quark.utils.colors)": [[22, "quark.utils.colors.red"]], "remove_dup_list() (in module quark.utils.tools)": [[22, "quark.utils.tools.remove_dup_list"]], "select_label_menu() (in module quark.utils.graph)": [[22, "quark.utils.graph.select_label_menu"]], "show_comparison_graph() (in module quark.utils.graph)": [[22, "quark.utils.graph.show_comparison_graph"]], "table() (in module quark.utils.pprint)": [[22, "quark.utils.pprint.table"]], "validate_base64() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_base64"]], "validate_ip_address() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_ip_address"]], "validate_url() (in module quark.utils.regex)": [[22, "quark.utils.regex.validate_url"]], "white() (in module quark.utils.colors)": [[22, "quark.utils.colors.white"]], "wrapper_lookup() (in module quark.utils.graph)": [[22, "quark.utils.graph.wrapper_lookup"]], "yellow() (in module quark.utils.colors)": [[22, "quark.utils.colors.yellow"]], "reportgenerator (class in quark.webreport.generate)": [[23, "quark.webreport.generate.ReportGenerator"]], "count_confidence_rule_number() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.count_confidence_rule_number"]], "get_all_labels() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_all_labels"]], "get_analysis_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.get_analysis_report_html"]], "get_five_stages_labels() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_five_stages_labels"]], "get_json_report_html() (in module quark.webreport.generate)": [[23, "quark.webreport.generate.get_json_report_html"]], "get_rule_generate_editor_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.get_rule_generate_editor_html"]], "insert_genrule_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_genrule_report_html"]], "insert_radarchart_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_radarchart_html"]], "insert_report_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_report_html"]], "insert_sample_information_html() (quark.webreport.generate.reportgenerator method)": [[23, "quark.webreport.generate.ReportGenerator.insert_sample_information_html"]], "quark.webreport": [[23, "module-quark.webreport"]], "quark.webreport.generate": [[23, "module-quark.webreport.generate"]]}}) \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index 2e731931..730a193f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -21,6 +21,7 @@ This guide will explain how to set up Quark, use it, and customize it. install_index quark_script quark_mit_program + quark_reports addRules rule_generation integration diff --git a/docs/source/quark_reports.rst b/docs/source/quark_reports.rst new file mode 100644 index 00000000..9d7dbbd8 --- /dev/null +++ b/docs/source/quark_reports.rst @@ -0,0 +1,129 @@ +++++++++++++++++++++++++++++++++++++++++ +Quark Report +++++++++++++++++++++++++++++++++++++++++ + +Easy to Use and Intuitive Report +--------------------------------------- + +Quark provides **7 flexible report formats** to boost your analysis. + +* `Summary Report`_ +* `Detail Report`_ +* `Web Report`_ +* `Label-based Report`_ +* `Behaviors Comparison Radar Chart`_ +* `Call Graph`_ +* `Rule Classification`_ + +Please see below for more details. + +Summary Report +-------------- + +Examine with rules. + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s + +There is the possibility to select only one label to filter the rules: + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s network + + +There is also the possibility to select only one rule: + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -s + + +.. image:: https://i.imgur.com/v7ehRW0.png + +Note that if you want to select the default rules of Quark, the path to the ruleset is ``$HOME/.quark-engine/quark-rules/rules/``. + +Detail Report +------------- + +This is how we examine a real android malware (candy corn) with one single rule (crime). + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d + + +There is the possibility to select only one label to filter the rules: + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d network + + +There is also the possibility to select only one rule: + +.. code-block:: bash + + quark -a 14d9f1a92dd984d6040cc41ed06e273e.apk -d + +.. image:: https://i.imgur.com/LFLFpvc.png + +Note that if you want to select the default rules of Quark, the path to the ruleset is ``$HOME/.quark-engine/quark-rules/rules/``. + +Web Report +---------------- + +With the following command, you can easily analyze the Android sample and output the web report. See our demo `here `_. + +.. code-block:: python + + quark -a sample.apk -s -w quark_report.html + + +.. image:: https://i.imgur.com/fNc3mC0.jpg + +Label-based Report +------------------ + +Check which topic (indicated by `labels `_) of the malware is more aggressive. + +.. code-block:: bash + + quark -a Ahmyth.apk -l detailed + +.. image:: https://i.imgur.com/0GbBDfn.png + +Behaviors Comparison Radar Chart +-------------------------------- + +With the following command, you can compare different APK actions based on the max confidence of rule labels and generate a radar chart. + +.. code-block:: bash + + quark -a first.apk -a second.apk -C + +.. image:: https://i.imgur.com/ClRWOei.png + +Call Graph +---------- + +You can add the ``-g`` option to the quark command, and you can get the call graph (only those rules match with 100% confidence). + +.. code-block:: bash + + quark -a Ahmyth.apk -s -g + +.. image:: https://i.imgur.com/5xcrcdN.png + +Rule Classification +-------------------- + +You can add the ``-c`` option to the quark command, and you can output the rules classification with the mutual parent function (only those rules match with 100% confidence). + +.. code-block:: bash + + quark -a Ahmyth.apk -s -c + +.. image:: https://i.imgur.com/YTK8V1x.png + diff --git a/docs/source/quark_script.rst b/docs/source/quark_script.rst index c5f22206..912e4844 100644 --- a/docs/source/quark_script.rst +++ b/docs/source/quark_script.rst @@ -26,6 +26,58 @@ More APIs to come ================== Quark Script is now in a beta version. We'll keep releasing practical APIs and analysis scenarios. + +Quickstart +----------- + +| In this tutorial, we will learn how to install and run Quark Script with a very easy example. +| We show how to detect CWE-798 in ovaa.apk. + +Step 1: Environments Requirements +================================== +- Quark Script requires Python 3.8 or above. + +Step 2: Install Quark Engine +============================= + +You can install Quark Engine by running: + +:: + + $ pip3 install quark-engine + + +Step 3: Prepare Quark Script, Detection Rule and the Sample File +================================================================ + +1. Get the CWE-798 Quark Script and the detection rule `here `_. +2. Get the sampe file (ovaa.apk) `here `_. +3. Put the script, detection rule, and sample file in the same directory. +4. Edit accordingly to the file names: + +.. code-block:: python + + SAMPLE_PATH = "ovaa.apk" + RULE_PATH = "findSecretKeySpec.json" + + +Now you are ready to run the script! + +Step 4: Run the script +====================== + +:: + + $ python3 CWE-798.py + + +You should now see the detection result in the terminal. + +:: + + Found hard-coded AES key 49u5gh249gh24985ghf429gh4ch8f23f + + Introduce of Quark Script APIs ------------------------------ @@ -128,6 +180,13 @@ behaviorInstance.isArgFromMethod(targetMethod) 1. targetMethod: python list contains class name, method name, and descriptor of target method - **return**: True/False +behaviorInstance.getMethodsInArgs(none) +============================================== + +- **Description**: Get the methods which the arguments in API2 has passed through. +- **params**: none +- **return**: python list containing method instances + methodInstance.getXrefFrom(none) ================================ @@ -310,8 +369,8 @@ Quark Scipt: CWE-798.py allStrings = quarkResult.getAllStrings() - firstParam = secretKeySpec.getParamValues()[0] - secondParam = secretKeySpec.getParamValues()[1] + firstParam = secretKeySpec.getParamValues()[1] + secondParam = secretKeySpec.getParamValues()[2] if secondParam == "AES": AESKey = re.findall(r'\((.*?)\)', firstParam)[1] @@ -986,3 +1045,139 @@ Quark Script Result http://example.com./api/v1/ +Detect CWE-327 in Android Application (InjuredAndroid.apk) +------------------------------------------------------------- + +This scenario seeks to find **the use of a Broken or Risky Cryptographic Algorithm**. See `CWE-327 `_ for more details. + +Let's use this `APK `_ and the above APIs to show how the Quark script finds this vulnerability. + +We first design a detection rule ``useOfCryptographicAlgo.json`` to spot on behavior using cryptographic algorithms. Then, we use API ``behaviorInstance.hasString(pattern, isRegex)`` with a list to check if the algorithm is risky. If YES, that may cause the exposure of sensitive data. + +Quark Script CWE-327.py +======================= + +.. code-block:: python + + from quark.script import runQuarkAnalysis, Rule + + SAMPLE_PATH = "InjuredAndroid.apk" + RULE_PATH = "useOfCryptographicAlgo.json" + + WEAK_ALGORITHMS = ["DES", "ARC4", "BLOWFISH"] + + ruleInstance = Rule(RULE_PATH) + quarkResult = runQuarkAnalysis(SAMPLE_PATH, ruleInstance) + + for useCryptoAlgo in quarkResult.behaviorOccurList: + + caller = useCryptoAlgo.methodCaller + + for algo in WEAK_ALGORITHMS: + if useCryptoAlgo.hasString(algo): + print(f"CWE-327 is detected in method, {caller.fullName}") + +Quark Rule: useOfCryptographicAlgo.json +======================================= + +.. code-block:: json + + { + "crime": "Use of cryptographic algorithm", + "permission": [], + "api": [ + { + "class": "Ljavax/crypto/Cipher;", + "method": "getInstance", + "descriptor": "(Ljava/lang/String;)Ljavax/crypto/Cipher" + }, + { + "class": "Ljavax/crypto/Cipher;", + "method": "init", + "descriptor": "(I Ljava/security/Key;)V" + } + ], + "score": 1, + "label": [] + } + +Quark Script Result +=================== + +.. code-block:: TEXT + + $ python3 CWE-327.py + CWE-327 is detected in method, Lb3nac/injuredandroid/k; b (Ljava/lang/String;)Ljava/lang/String; + CWE-327 is detected in method, Lb3nac/injuredandroid/k; a (Ljava/lang/String;)Ljava/lang/String; + + +Detect CWE-20 in Android Application (diva.apk) +----------------------------------------------- + +This scenario seeks to find **Improper Input Validation**. See `CWE-20 `_ for more details. + +Let’s use this `APK `_ and the above APIs to show how the Quark script finds this vulnerability. + +First, we design a detection rule ``openUrlThatUserInput.json`` to spot the behavior of opening the URL that the user input. Then we use API ``behaviorInstance.getMethodsInArgs`` to get a list of methods which the URL in ``loadUrl`` has passed through. Finally, we check if any validation method is in the list. If **No**, the APK does not validate user input. +That causes CWE-20 vulnerability. + + + + +Quark Script CWE-20.py +====================== + +.. code-block:: python + + from quark.script import runQuarkAnalysis, Rule + + SAMPLE_PATH = "diva.apk" + RULE_PATH = "openUrlThatUserInput.json" + + rule = Rule(RULE_PATH) + result = runQuarkAnalysis(SAMPLE_PATH, rule) + + VALIDATE_METHODS = ["contains", "indexOf", "matches", "replaceAll"] + + for openUrl in result.behaviorOccurList: + calledMethods = openUrl.getMethodsInArgs() + + if not any(method.methodName in VALIDATE_METHODS + for method in calledMethods): + print("CWE-20 is detected in method," + f"{openUrl.methodCaller.fullName}") + + + +Quark Rule: inputWebUrl.json +==================================== + +.. code-block:: json + + { + "crime": "Open the Url that user input", + "permission": [], + "api": [ + { + "class": "Landroid/widget/EditText;", + "method": "getText", + "descriptor": "()Landroid/text/Editable;" + }, + { + "class": "Landroid/webkit/WebView;", + "method": "loadUrl", + "descriptor": "(Ljava/lang/String;)V" + } + ], + "score": 1, + "label": [] + } + +Quark Script Result +=================== + +.. code-block:: TEXT + + $ python CWE-20.py + CWE-20 is detected in method, Ljakhar/aseem/diva/InputValidation2URISchemeActivity; get (Landroid/view/View;)V + diff --git a/quark/__init__.py b/quark/__init__.py index ba97a54a..bf687dda 100644 --- a/quark/__init__.py +++ b/quark/__init__.py @@ -1 +1 @@ -__version__ = "22.10.1" +__version__ = "22.11.1" diff --git a/quark/script/__init__.py b/quark/script/__init__.py index f959bcb9..4e466652 100644 --- a/quark/script/__init__.py +++ b/quark/script/__init__.py @@ -2,6 +2,7 @@ # This file is part of Quark-Engine - https://github.com/quark-engine/quark-engine # See the file 'LICENSE' for copying permission. +import re import functools from os import PathLike from os.path import abspath, isfile, join @@ -295,6 +296,30 @@ def isArgFromMethod(self, targetMethod: List[str]) -> bool: return bool(self.hasString(pattern)) + def getMethodsInArgs(self) -> List[str]: + """Get the methods which the arguments in API2 has passed through. + + :return: python list containing method instances + """ + METHOD_REGEX = r"L(.*?)\;\(" + methodCalled = [] + + for param in self.getParamValues(): + for result in re.findall(METHOD_REGEX, param): + className = "L" + result.split("->")[0] + methodName = re.findall(r"->(.*?)\(", result)[0] + descriptor = result.split(methodName)[-1] + ";" + + methodObj = self.quarkResult.quark.apkinfo.find_method( + class_name=className, + method_name=methodName, + descriptor=descriptor + ) + + methodCalled.append(Method(methodObj=methodObj)) + + return methodCalled + class QuarkResult: def __init__(self, quark: Quark, ruleInstance: Rule) -> None: diff --git a/quark/webreport/analysis_report_layout.html b/quark/webreport/analysis_report_layout.html index 9f33f06f..cb9d5412 100644 --- a/quark/webreport/analysis_report_layout.html +++ b/quark/webreport/analysis_report_layout.html @@ -423,7 +423,7 @@

                  Sample Information

                  -

                  Select labels to see max confidence in radare chart

                  +

                  Select labels to see max confidence in radar chart

                  $all_labels_html$
                  @@ -500,7 +500,7 @@

                  The labels with 100% confidence crimes

                  const ctx = document.getElementById('myChart').getContext('2d'); Chart.defaults.font.size = 24; - const radareChart = new Chart(ctx, { + const radarChart = new Chart(ctx, { type: 'radar', backgroundColor: "rgba(0, 0, 0, 0.2)", data: { @@ -511,7 +511,7 @@

                  The labels with 100% confidence crimes

                  data: [], backgroundColor: 'rgba(0, 99, 132, 0.2)', borderColor: 'rgba(0, 0, 0, 1)', - borderWidth: 1 + borderWidth: 2, }] }, options: { @@ -528,6 +528,12 @@

                  The labels with 100% confidence crimes

                  ticks: { stepSize: 20 }, + angleLines: { + color: 'rgba(0, 0, 0, 0.4)' + }, + grid: { + color: "rgba(0, 0, 0, 0.4)" + } } } }, @@ -567,11 +573,11 @@

                  The labels with 100% confidence crimes

                  data: maxConfidence, backgroundColor: 'rgba(0, 99, 132, 0.2)', borderColor: 'rgba(0, 0, 0, 1)', - borderWidth: 1 + borderWidth: 2 }] } - radareChart.data = data - radareChart.update('active'); + radarChart.data = data + radarChart.update('active'); }) @@ -592,8 +598,8 @@

                  The labels with 100% confidence crimes

                  borderWidth: 1 }] } - radareChart.data = data - radareChart.update('active'); + radarChart.data = data + radarChart.update('active'); } function search() { @@ -636,4 +642,4 @@

                  The labels with 100% confidence crimes

                  } - \ No newline at end of file + diff --git a/quark/webreport/generate.py b/quark/webreport/generate.py index 428477af..435a5c86 100644 --- a/quark/webreport/generate.py +++ b/quark/webreport/generate.py @@ -80,7 +80,7 @@ def get_analysis_report_html(self): self.insert_sample_information_html( rule_number_set, filename, md5, filesize, five_stages_labels) - self.insert_radarechart_html(five_stages_labels, all_labels) + self.insert_radarchart_html(five_stages_labels, all_labels) self.insert_report_html(analysis_result) self.analysis_result_layout = get_json_report_html( @@ -88,9 +88,9 @@ def get_analysis_report_html(self): return self.analysis_result_layout - def insert_radarechart_html(self, five_stages_labels, all_labels): + def insert_radarchart_html(self, five_stages_labels, all_labels): """ - Generate the HTML of radare chart secton in Quark web report. + Generate the HTML of radar chart secton in Quark web report. :param five_stages_labels: the set of lebels with 100% confidence crimes diff --git a/tests/script/test_script.py b/tests/script/test_script.py index a4e5de91..40363ace 100644 --- a/tests/script/test_script.py +++ b/tests/script/test_script.py @@ -292,6 +292,17 @@ def testIsArgFromMethod(QUARK_ANALYSIS_RESULT_FOR_RULE_193): assert behavior.isArgFromMethod(expectedMethod) + @staticmethod + def testGetMethodsInArgs(QUARK_ANALYSIS_RESULT_FOR_RULE_193): + behaviorOccurList = ( + QUARK_ANALYSIS_RESULT_FOR_RULE_193.behaviorOccurList + ) + behavior = behaviorOccurList[0] + method = behavior.getMethodsInArgs()[0].fullName + + assert method == "Landroid/telephony/SmsManager;" + \ + " getDefault ()Landroid/telephony/SmsManager;" + class TestQuarkReuslt: @staticmethod

        Name

        Contribution

        Consultant