Linux lorencats.com 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l
Apache/2.4.59 (Raspbian)
: 10.0.0.29 | : 216.73.216.130
Cant Read [ /etc/named.conf ]
7.3.31-1~deb10u7
root
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
share /
doc /
ruby-kramdown /
rdoc /
Kramdown /
[ HOME SHELL ]
Name
Size
Permission
Action
Converter
[ DIR ]
drwxr-xr-x
Options
[ DIR ]
drwxr-xr-x
Parser
[ DIR ]
drwxr-xr-x
Utils
[ DIR ]
drwxr-xr-x
Converter.html
3.31
KB
-rw-r--r--
Document.html
13.8
KB
-rw-r--r--
Element.html
34.86
KB
-rw-r--r--
Error.html
2.52
KB
-rw-r--r--
Options.html
27.26
KB
-rw-r--r--
Parser.html
2.55
KB
-rw-r--r--
Utils.html
7.73
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : Options.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>module Kramdown::Options - RDoc Documentation</title> <script type="text/javascript"> var rdoc_rel_prefix = "../"; var index_rel_prefix = "../"; </script> <script src="../js/jquery.js"></script> <script src="../js/darkfish.js"></script> <link href="../css/fonts.css" rel="stylesheet"> <link href="../css/rdoc.css" rel="stylesheet"> <body id="top" role="document" class="module"> <nav role="navigation"> <div id="project-navigation"> <div id="home-section" role="region" title="Quick navigation" class="nav-section"> <h2> <a href="../index.html" rel="home">Home</a> </h2> <div id="table-of-contents-navigation"> <a href="../table_of_contents.html#pages">Pages</a> <a href="../table_of_contents.html#classes">Classes</a> <a href="../table_of_contents.html#methods">Methods</a> </div> </div> <div id="search-section" role="search" class="project-section initially-hidden"> <form action="#" method="get" accept-charset="utf-8"> <div id="search-field-wrapper"> <input id="search-field" role="combobox" aria-label="Search" aria-autocomplete="list" aria-controls="search-results" type="text" name="search" placeholder="Search" spellcheck="false" title="Type to search, Up and Down to navigate, Enter to load"> </div> <ul id="search-results" aria-label="Search Results" aria-busy="false" aria-expanded="false" aria-atomic="false" class="initially-hidden"></ul> </form> </div> </div> <div id="class-metadata"> <div id="sections-section" class="nav-section"> <h3>Sections</h3> <ul class="link-list" role="directory"> <li><a href="#5Buntitled-5D"></a></li> <li><a href="#Option+Definitions">Option Definitions</a></li> <li><a href="#Option+Validators">Option Validators</a></li> <li><a href="#Option+definitions">Option definitions</a></li> </ul> </div> <!-- Method Quickref --> <div id="method-list-section" class="nav-section"> <h3>Methods</h3> <ul class="link-list" role="directory"> <li ><a href="#method-c-defaults">::defaults</a> <li ><a href="#method-c-define">::define</a> <li ><a href="#method-c-defined-3F">::defined?</a> <li ><a href="#method-c-definitions">::definitions</a> <li ><a href="#method-c-merge">::merge</a> <li ><a href="#method-c-parse">::parse</a> <li ><a href="#method-c-simple_array_validator">::simple_array_validator</a> <li ><a href="#method-c-simple_hash_validator">::simple_hash_validator</a> <li ><a href="#method-c-str_to_sym">::str_to_sym</a> </ul> </div> </div> </nav> <main role="main" aria-labelledby="module-Kramdown::Options"> <h1 id="module-Kramdown::Options" class="module"> module Kramdown::Options </h1> <section class="description"> <p>This module defines all options that are used by parsers and/or converters as well as providing methods to deal with the options.</p> </section> <section id="5Buntitled-5D" class="documentation-section"> </section> <section id="Option+Definitions" class="documentation-section"> <header class="documentation-section-title"> <h2> Option Definitions </h2> <span class="section-click-top"> <a href="#top">↑ top</a> </span> </header> </section> <section id="Option+Validators" class="documentation-section"> <header class="documentation-section-title"> <h2> Option Validators </h2> <span class="section-click-top"> <a href="#top">↑ top</a> </span> </header> <section id="public-class-Option+Validators-method-details" class="method-section"> <header> <h3>Public Class Methods</h3> </header> <div id="method-c-simple_array_validator" class="method-detail "> <div class="method-heading"> <span class="method-name">simple_array_validator</span><span class="method-args">(val, name, size = nil)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Ensures that the option value <code>val</code> for the option called <code>name</code> is a valid array. The parameter <code>val</code> can be</p> <ul><li> <p>a comma separated string which is split into an array of values</p> </li><li> <p>or an array.</p> </li></ul> <p>Optionally, the array is checked for the correct size.</p> <div class="method-source-code" id="simple_array_validator-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 136</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">simple_array_validator</span>(<span class="ruby-identifier">val</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">size</span> = <span class="ruby-keyword">nil</span>) <span class="ruby-keyword">if</span> <span class="ruby-constant">String</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">val</span> <span class="ruby-identifier">val</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/,/</span>) <span class="ruby-keyword">elsif</span> <span class="ruby-operator">!</span>(<span class="ruby-constant">Array</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">val</span>) <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Invalid type #{val.class} for option #{name}"</span> <span class="ruby-keyword">end</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">size</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">size</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Option #{name} needs exactly #{size} values"</span> <span class="ruby-keyword">end</span> <span class="ruby-identifier">val</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-simple_hash_validator" class="method-detail "> <div class="method-heading"> <span class="method-name">simple_hash_validator</span><span class="method-args">(val, name)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Ensures that the option value <code>val</code> for the option called <code>name</code> is a valid hash. The parameter <code>val</code> can be</p> <ul><li> <p>a hash in YAML format</p> </li><li> <p>or a Ruby Hash object.</p> </li></ul> <div class="method-source-code" id="simple_hash_validator-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 153</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">simple_hash_validator</span>(<span class="ruby-identifier">val</span>, <span class="ruby-identifier">name</span>) <span class="ruby-keyword">if</span> <span class="ruby-constant">String</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">val</span> <span class="ruby-keyword">begin</span> <span class="ruby-identifier">val</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-identifier">val</span>) <span class="ruby-keyword">rescue</span> <span class="ruby-constant">RuntimeError</span>, <span class="ruby-constant">ArgumentError</span>, <span class="ruby-constant">SyntaxError</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Invalid YAML value for option #{name}"</span> <span class="ruby-keyword">end</span> <span class="ruby-keyword">end</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Invalid type #{val.class} for option #{name}"</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-constant">Hash</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">val</span>) <span class="ruby-identifier">val</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> </section> </section> <section id="Option+definitions" class="documentation-section"> <header class="documentation-section-title"> <h2> Option definitions </h2> <span class="section-click-top"> <a href="#top">↑ top</a> </span> </header> <section class="constants-list"> <header> <h3>Constants</h3> </header> <dl> <dt id="ALLOWED_TYPES">ALLOWED_TYPES <dd><p>Allowed option types.</p> <dt id="Definition">Definition <dd><p>Struct class for storing the definition of an option.</p> </dl> </section> <section id="public-class-Option+definitions-method-details" class="method-section"> <header> <h3>Public Class Methods</h3> </header> <div id="method-c-defaults" class="method-detail "> <div class="method-heading"> <span class="method-name">defaults</span><span class="method-args">()</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Return a Hash with the default values for all options.</p> <div class="method-source-code" id="defaults-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 69</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">defaults</span> <span class="ruby-identifier">temp</span> = {} <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">n</span>, <span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">o</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">default</span>} <span class="ruby-identifier">temp</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-define" class="method-detail "> <div class="method-heading"> <span class="method-name">define</span><span class="method-args">(name, type, default, desc, &block)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Define a new option called <code>name</code> (a Symbol) with the given <code>type</code> (String, Integer, Float, Symbol, <a href="Options/Boolean.html">Boolean</a>, Object), default value <code>default</code> and the description <code>desc</code>. If a block is specified, it should validate the value and either raise an error or return a valid value.</p> <p>The type 'Object' should only be used for complex types for which none of the other types suffices. A block needs to be specified when using type 'Object' and it has to cope with a value given as string and as the opaque type.</p> <div class="method-source-code" id="define-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 49</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">define</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">default</span>, <span class="ruby-identifier">desc</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"Option name #{name} is already used"</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>) <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"Invalid option type #{type} specified"</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">ALLOWED_TYPES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">type</span>) <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"Invalid type for default value"</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">type</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">default</span>) <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">default</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"Missing validator block"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Object</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-constant">Definition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">default</span>, <span class="ruby-identifier">desc</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-defined-3F" class="method-detail "> <div class="method-heading"> <span class="method-name">defined?</span><span class="method-args">(name)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Return <code>true</code> if an option called <code>name</code> is defined.</p> <div class="method-source-code" id="defined-3F-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 64</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-keyword">defined?</span>(<span class="ruby-identifier ruby-title">name</span>) <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>) <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-definitions" class="method-detail "> <div class="method-heading"> <span class="method-name">definitions</span><span class="method-args">()</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Return all option definitions.</p> <div class="method-source-code" id="definitions-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 59</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">definitions</span> <span class="ruby-ivar">@options</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-merge" class="method-detail "> <div class="method-heading"> <span class="method-name">merge</span><span class="method-args">(hash)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Merge the defaults Hash with the <strong>parsed</strong> options from the given Hash, i.e. only valid option names are considered and their value is run through the parse method.</p> <div class="method-source-code" id="merge-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 77</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">merge</span>(<span class="ruby-identifier">hash</span>) <span class="ruby-identifier">temp</span> = <span class="ruby-identifier">defaults</span> <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">k</span> = <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">k</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span> <span class="ruby-keyword">end</span> <span class="ruby-identifier">temp</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-parse" class="method-detail "> <div class="method-heading"> <span class="method-name">parse</span><span class="method-args">(name, data)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Parse the given value <code>data</code> as if it was a value for the option <code>name</code> and return the parsed value with the correct type.</p> <p>If <code>data</code> already has the correct type, it is just returned. Otherwise it is converted to a String and then to the correct type.</p> <div class="method-source-code" id="parse-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 91</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">parse</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">data</span>) <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"No option named #{name} defined"</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>) <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">data</span>) <span class="ruby-identifier">data</span> = <span class="ruby-identifier">data</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-identifier">data</span> = <span class="ruby-keyword">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">String</span> <span class="ruby-identifier">data</span> <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Integer</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">data</span>) <span class="ruby-keyword">rescue</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Invalid integer value for option '#{name}': '#{data}'"</span> <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Float</span> <span class="ruby-constant">Float</span>(<span class="ruby-identifier">data</span>) <span class="ruby-keyword">rescue</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Kramdown</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-node">"Invalid float value for option '#{name}': '#{data}'"</span> <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Symbol</span> <span class="ruby-identifier">str_to_sym</span>(<span class="ruby-identifier">data</span>) <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Boolean</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">strip</span> <span class="ruby-operator">!=</span> <span class="ruby-string">'false'</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">data</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword">end</span> <span class="ruby-keyword">end</span> <span class="ruby-identifier">data</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">validator</span>[<span class="ruby-identifier">data</span>] <span class="ruby-keyword">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">validator</span> <span class="ruby-identifier">data</span> <span class="ruby-keyword">end</span></pre> </div> </div> </div> <div id="method-c-str_to_sym" class="method-detail "> <div class="method-heading"> <span class="method-name">str_to_sym</span><span class="method-args">(data)</span> <span class="method-click-advice">click to toggle source</span> </div> <div class="method-description"> <p>Converts the given String <code>data</code> into a Symbol or <code>nil</code> with the following provisions:</p> <ul><li> <p>A leading colon is stripped from the string.</p> </li><li> <p>An empty value or a value equal to “nil” results in <code>nil</code>.</p> </li></ul> <div class="method-source-code" id="str_to_sym-source"> <pre><span class="ruby-comment"># File lib/kramdown/options.rb, line 117</span> <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">str_to_sym</span>(<span class="ruby-identifier">data</span>) <span class="ruby-identifier">data</span> = <span class="ruby-identifier">data</span>.<span class="ruby-identifier">strip</span> <span class="ruby-identifier">data</span> = <span class="ruby-identifier">data</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?:</span> (<span class="ruby-identifier">data</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">data</span> <span class="ruby-operator">==</span> <span class="ruby-string">'nil'</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">nil</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">to_sym</span>) <span class="ruby-keyword">end</span></pre> </div> </div> </div> </section> </section> </main> <footer id="validator-badges" role="contentinfo"> <p><a href="https://validator.w3.org/check/referer">Validate</a> <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.0.1. <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>. </footer>
Close