From 45d23d9713826184062dea6e862da28a8ea64fbb Mon Sep 17 00:00:00 2001
From: Genarito
Date: Wed, 18 Aug 2021 17:46:36 -0300
Subject: [PATCH] + Added website source code
---
.gitignore | 20 +
.vscode/settings.json | 3 +
babel.config.js | 3 +
docs/conventions.md | 33 +
docs/gura.md | 24 +
docs/spec.md | 571 +
docusaurus.config.js | 67 +
package.json | 49 +
sidebars.js | 26 +
src/components/Differences/Differences.tsx | 132 +
.../FeaturesReview/FeaturesReview.tsx | 145 +
src/components/HomepageFeatures.module.css | 8 +
src/components/HomepageFeatures.tsx | 72 +
src/css/custom.scss | 103 +
src/pages/index.module.css | 25 +
src/pages/index.tsx | 109 +
src/prism_themes/github/index.js | 75 +
src/prism_themes/monokai/index.js | 39 +
src/theme/CodeSnippet/index.js | 54 +
src/theme/CodeSnippet/styles.module.css | 3 +
static/.nojekyll | 0
static/img/differences/gura.png | Bin 0 -> 17393 bytes
static/img/differences/json.png | Bin 0 -> 18700 bytes
static/img/differences/toml.png | Bin 0 -> 16112 bytes
static/img/differences/yaml.png | Bin 0 -> 9665 bytes
static/img/docusaurus.png | Bin 0 -> 5142 bytes
static/img/favicon.ico | Bin 0 -> 15086 bytes
static/img/features/friendly.png | Bin 0 -> 21826 bytes
static/img/features/robustness.png | Bin 0 -> 35870 bytes
static/img/features/simple.png | Bin 0 -> 18591 bytes
static/img/gura-200.png | Bin 0 -> 14209 bytes
static/img/gura-thumbnail.png | Bin 0 -> 20590 bytes
static/img/old/favicon.ico | Bin 0 -> 3626 bytes
static/img/old/logo.svg | 1 +
tsconfig.json | 9 +
versioned_docs/version-1.0.0/conventions.md | 33 +
versioned_docs/version-1.0.0/gura.md | 24 +
versioned_docs/version-1.0.0/spec.md | 571 +
.../version-1.0.0-sidebars.json | 8 +
versions.json | 3 +
yarn.lock | 9305 +++++++++++++++++
41 files changed, 11515 insertions(+)
create mode 100644 .gitignore
create mode 100644 .vscode/settings.json
create mode 100644 babel.config.js
create mode 100644 docs/conventions.md
create mode 100644 docs/gura.md
create mode 100644 docs/spec.md
create mode 100644 docusaurus.config.js
create mode 100644 package.json
create mode 100644 sidebars.js
create mode 100644 src/components/Differences/Differences.tsx
create mode 100644 src/components/FeaturesReview/FeaturesReview.tsx
create mode 100644 src/components/HomepageFeatures.module.css
create mode 100644 src/components/HomepageFeatures.tsx
create mode 100644 src/css/custom.scss
create mode 100644 src/pages/index.module.css
create mode 100644 src/pages/index.tsx
create mode 100644 src/prism_themes/github/index.js
create mode 100644 src/prism_themes/monokai/index.js
create mode 100755 src/theme/CodeSnippet/index.js
create mode 100755 src/theme/CodeSnippet/styles.module.css
create mode 100644 static/.nojekyll
create mode 100644 static/img/differences/gura.png
create mode 100644 static/img/differences/json.png
create mode 100644 static/img/differences/toml.png
create mode 100644 static/img/differences/yaml.png
create mode 100644 static/img/docusaurus.png
create mode 100644 static/img/favicon.ico
create mode 100644 static/img/features/friendly.png
create mode 100644 static/img/features/robustness.png
create mode 100644 static/img/features/simple.png
create mode 100644 static/img/gura-200.png
create mode 100644 static/img/gura-thumbnail.png
create mode 100644 static/img/old/favicon.ico
create mode 100644 static/img/old/logo.svg
create mode 100644 tsconfig.json
create mode 100644 versioned_docs/version-1.0.0/conventions.md
create mode 100644 versioned_docs/version-1.0.0/gura.md
create mode 100644 versioned_docs/version-1.0.0/spec.md
create mode 100644 versioned_sidebars/version-1.0.0-sidebars.json
create mode 100644 versions.json
create mode 100644 yarn.lock
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b2d6de3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,20 @@
+# Dependencies
+/node_modules
+
+# Production
+/build
+
+# Generated files
+.docusaurus
+.cache-loader
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..32fbb9a
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "git.ignoreLimitWarning": true
+}
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..e00595d
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
+};
diff --git a/docs/conventions.md b/docs/conventions.md
new file mode 100644
index 0000000..e28a24d
--- /dev/null
+++ b/docs/conventions.md
@@ -0,0 +1,33 @@
+---
+sidebar_position: 3
+---
+
+# Conventions
+
+
+## Filename Extension
+
+Gura files should use the extension `.ura`.
+
+
+## File naming convention
+
+As with keys, file names should have short, all-lowercase names and underscores can be used if it improves readability.
+
+
+## MIME Type
+
+When transferring Gura files over the internet, the appropriate MIME type is `application/gura`.
+
+
+## ABNF Grammar
+
+A formal description of Gura's syntax is available, as a separate [ABNF file][abnf].
+
+
+## License
+
+Gura is distributed under the terms of the MIT license.
+
+
+[abnf]: https://github.com/gura-conf/gura/blob/master/gura.abnf
\ No newline at end of file
diff --git a/docs/gura.md b/docs/gura.md
new file mode 100644
index 0000000..1e40f77
--- /dev/null
+++ b/docs/gura.md
@@ -0,0 +1,24 @@
+---
+sidebar_position: 1
+---
+
+
+# Gura
+
+Gura configuration file.
+
+By Jware solutions.
+
+
+
+
+## Objectives
+
+Gura aims to be a minimal configuration file format that's easy to read due to its similarity with YAML. The key of the language is that there is one and only one way to do things. That feature make it ease to learn, parse, implement and understand.
+
+
+## Standard errors
+
+The Gura specifications define the semantic errors that should be thrown in certain situations to define implementation-agnostic behavior so that you can receive the same type of error regardless of the programming language from which you are using Gura.
+
+Each type of error will be mentioned in the respective sections.
diff --git a/docs/spec.md b/docs/spec.md
new file mode 100644
index 0000000..137d96a
--- /dev/null
+++ b/docs/spec.md
@@ -0,0 +1,571 @@
+---
+sidebar_position: 2
+---
+
+# Specs
+
+* Gura is case-sensitive.
+* A Gura file must be a valid UTF-8 encoded Unicode document.
+* Whitespace means tab (U+0009) or space (U+0020).
+* Newline means LF (U+000A) or CRLF (U+000D U+000A).
+
+
+## Comment
+
+A hash symbol marks the rest of the line as a comment, except when inside a
+string.
+
+```yaml
+# This is a full-line comment
+key: "value" # This is a comment at the end of a line
+another: "# This is not a comment"
+```
+
+Control characters other than tab (U+0000 to U+0008, U+000A to U+001F, U+007F) are not permitted in comments.
+
+
+## Key/Value Pair
+
+The primary building block of a Gura document is the key/value pair.
+
+Keys are on the left of the colon and values are on the right. Whitespace is ignored around key names and values. The key, colon, and value must be on the same line (though some values can be broken over multiple lines).
+
+```yaml
+key: "value"
+```
+
+Values must have one of the following types.
+
+- [Null](#null)
+- [String](#string)
+- [Integer](#integer)
+- [Float](#float)
+- [Boolean](#boolean)
+- [Object](#object)
+- [Array](#array)
+
+Unspecified values are invalid.
+
+```yaml
+key: # INVALID
+```
+
+There must be a newline (or EOF) after a key/value pair.
+
+```
+first: "Carlitos" last: "Gardel" # INVALID
+```
+
+
+## Keys
+
+In Gura there is only one way to define keys. A key may only contain ASCII letters and underscores (`A-Za-z0-9_`). Dashes are not allowed to keep a simple and consistent key naming convention. Note that keys are allowed to be composed of only ASCII digits, e.g. `1234`, but are always interpreted as strings.
+
+```yaml
+key: "value"
+some_key: "value"
+some-key: "value" # INVALID
+1234: "value"
+```
+
+A key must be non-empty.
+
+```yaml
+: "no key name" # INVALID
+```
+
+Defining a key multiple times is invalid and it must raise a `DuplicatedKeyError` error.
+
+```yaml
+# DO NOT DO THIS
+name: "Carlos"
+name: "Anibal"
+```
+
+
+## Null
+
+The absence of value can be represented by the `null` value:
+
+```yaml
+none_value: null
+```
+
+
+## String
+
+There are four ways to express strings: basic, multi-line basic, literal, and multi-line literal. All strings must contain only valid UTF-8 characters.
+
+Unlike YAML, unquoted strings are not allowed.
+
+**Basic strings** are surrounded by quotation marks (`"`). Any Unicode character may be used except those that must be escaped: quotation mark, backslash, and the control characters other than tab (U+0000 to U+0008, U+000A to U+001F, U+007F).
+
+```yaml
+str: "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
+```
+
+For convenience, some popular characters have a compact escape sequence.
+
+```
+\b - backspace (U+0008)
+\t - tab (U+0009)
+\n - linefeed (U+000A)
+\f - form feed (U+000C)
+\r - carriage return (U+000D)
+\" - quote (U+0022)
+\\ - backslash (U+005C)
+\$ - dollar sign (variables) (U+0024)
+\uXXXX - unicode (U+XXXX)
+\UXXXXXXXX - unicode (U+XXXXXXXX)
+```
+
+Any Unicode character may be escaped with the `\uXXXX` or `\UXXXXXXXX` forms. The escape codes must be valid Unicode [scalar values](https://unicode.org/glossary/#unicode_scalar_value).
+
+All other escape sequences not listed above will be interpreted as literal.
+
+Sometimes you need to express passages of text (e.g. translation files) or would like to break up a very long string into multiple lines. Gura makes this easy.
+
+**Multi-line basic strings** are surrounded by three quotation marks on each side and allow newlines. A newline immediately following the opening delimiter will be trimmed. All other whitespace and newline characters remain intact.
+
+```yaml
+str1: """
+Roses are red
+Violets are blue"""
+```
+
+Gura parsers should feel free to normalize newline to whatever makes sense for their platform.
+
+```yaml
+# On a Unix system, the above multi-line string will most likely be the same as:
+str2: "Roses are red\nViolets are blue"
+
+# On a Windows system, it will most likely be equivalent to:
+str3: "Roses are red\r\nViolets are blue"
+```
+
+For writing long strings without introducing extraneous whitespace, use a "line ending backslash". When the last non-whitespace character on a line is an unescaped `\`, it will be trimmed along with all whitespace (including newlines) up to the next non-whitespace character or closing delimiter. All of the escape sequences that are valid for basic strings are also valid for multi-line basic strings.
+
+```yaml
+# The following strings are byte-for-byte equivalent:
+str1: "The quick brown fox jumps over the lazy dog."
+
+str2: """
+The quick brown \
+
+
+ fox jumps over \
+ the lazy dog."""
+
+str3: """\
+ The quick brown \
+ fox jumps over \
+ the lazy dog.\
+ """
+```
+
+Any Unicode character may be used except those that must be escaped: backslash and the control characters other than tab, line feed, and carriage return (U+0000 to U+0008, U+000B, U+000C, U+000E to U+001F, U+007F).
+
+You can write a quotation mark, or two adjacent quotation marks, anywhere inside a multi-line basic string. They can also be written just inside the delimiters.
+
+```yaml
+str4: """Here are two quotation marks: "". Simple enough."""
+# str5: """Here are three quotation marks: """.""" # INVALID
+str5: """Here are three quotation marks: ""\"."""
+str6: """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""
+```
+
+Unlike TOML, it is invalid to use three quotation marks inside a multi-line string:
+
+```yaml
+# "This," she said, "is just a pointless statement."
+str7: """"This," she said, "is just a pointless statement."""" # INVALID
+```
+
+If you're a frequent specifier of Windows paths or regular expressions, then having to escape backslashes quickly becomes tedious and error-prone. To help, Gura supports literal strings which do not allow escaping at all.
+
+**Literal strings** are surrounded by single quotes. Like basic strings, they must appear on a single line:
+
+```yaml
+# What you see is what you get.
+winpath: 'C:\Users\nodejs\templates'
+winpath2: '\\ServerX\admin$\system32\'
+quoted: 'John "Dog lover" Wick'
+regex: '<\i\c*\s*>'
+```
+
+Since there is no escaping, there is no way to write a single quote inside a literal string enclosed by single quotes. Luckily, Gura supports a multi-line version of literal strings that solves this problem.
+
+**Multi-line literal strings** are surrounded by three single quotes on each side and allow newlines. Like literal strings, there is no escaping whatsoever. A newline immediately following the opening delimiter will be trimmed. All other content between the delimiters is interpreted as-is without modification.
+
+```yaml
+regex2: '''I [dw]on't need \d{2} apples'''
+lines: '''
+The first newline is
+trimmed in raw strings.
+ All other whitespace
+ is preserved.
+'''
+```
+
+You can write 1 or 2 single quotes anywhere within a multi-line literal string, but sequences of three or more single quotes are not permitted.
+
+```yaml
+quot15: '''Here are fifteen quotation marks: """""""""""""""'''
+
+# apos15: '''Here are fifteen apostrophes: '''''''''''''''''' # INVALID
+apos15: "Here are fifteen apostrophes: '''''''''''''''"
+
+# 'That,' she said, 'is still pointless.'
+str: ''''That,' she said, 'is still pointless.''''
+```
+
+Control characters other than tab are not permitted in a literal string. Thus, for binary data, it is recommended that you use Base64 or another suitable ASCII or UTF-8 encoding. The handling of that encoding will be application-specific.
+
+
+## Integer
+
+Integers are whole numbers. Positive numbers may be prefixed with a plus sign. Negative numbers are prefixed with a minus sign.
+
+```yaml
+int1: +99
+int2: 42
+int3: 0
+int4: -17
+```
+
+For large numbers, you may use underscores between digits to enhance readability. Each underscore must be surrounded by at least one digit on each side.
+
+```yaml
+int5: 1_000
+int6: 5_349_221
+int7: 53_49_221 # Indian number system grouping
+```
+
+Leading zeros are not allowed. Integer values `-0` and `+0` are valid and identical to an unprefixed zero. Non-negative integer values may also be expressed in hexadecimal, octal, or binary. In these formats, leading `+` is not allowed and leading zeros are allowed (after the prefix). Hex values are case-insensitive. Underscores are allowed between digits (but not between the prefix and the value).
+
+```yaml
+# Hexadecimal with prefix `0x`
+hex1: 0xDEADBEEF
+hex2: 0xdeadbeef
+hex3: 0xdead_beef
+
+# Octal with prefix `0o`
+oct1: 0o01234567
+oct2: 0o755 # useful for Unix file permissions
+
+# Binary with prefix `0b`
+bin1: 0b11010110
+```
+
+Arbitrary 64-bit signed integers (from −2^63 to 2^63−1) should be accepted and handled losslessly. If an integer cannot be represented losslessly, an error must be thrown.
+
+
+## Float
+
+Floats should be implemented as IEEE 754 binary64 values.
+
+A float consists of an integer part (which follows the same rules as decimal integer values) followed by a fractional part and/or an exponent part. If both a fractional part and exponent part are present, the fractional part must precede the exponent part.
+
+```yaml
+# Fractional
+flt1: +1.0
+flt2: 3.1415
+flt3: -0.01
+
+# Exponent
+flt4: 5e+22
+flt5: 1e06
+flt6: -2E-2
+
+# Both
+flt7: 6.626e-34
+```
+
+A fractional part is a decimal point followed by one or more digits.
+
+An exponent part is an E (upper or lower case) followed by an integer part (which follows the same rules as decimal integer values but may include leading zeros).
+
+The decimal point, if used, must be surrounded by at least one digit on each side.
+
+```yaml
+# INVALID FLOATS
+invalid_float_1: .7
+invalid_float_2: 7.
+invalid_float_3: 3.e+20
+```
+
+Similar to integers, you may use underscores to enhance readability.
+
+```yaml
+flt8: 224_617.445_991_228
+```
+
+Float values `-0.0` and `+0.0` are valid and should map according to IEEE 754.
+
+Special float values can also be expressed. They are always lowercase.
+
+```yaml
+# Infinity
+sf1: inf # Positive infinity
+sf2: +inf # Positive infinity
+sf3: -inf # Negative infinity
+
+# Not a number
+sf4: nan # Actual sNaN/qNaN encoding is implementation-specific
+sf5: +nan # Same as `nan`
+sf6: -nan # Valid, actual encoding is implementation-specific
+```
+
+
+## Boolean
+
+Booleans are just the tokens you're used to. Always lowercase.
+
+```yaml
+bool1: true
+bool2: false
+```
+
+
+## Object
+
+Like YAML, objects have a header (key), a colon and underneath each of their attributes, which must begin in an indented block. This indentation must be respected throughout the entire Gura file and each indentation level must be represented by 4 (four) spaces (U+0020). Unlike YAML, tabs (U+0009) are not allowed to define indentation blocks in order to standardize language formatting and provide users with a convenient way to maintain documents.
+
+
+```yaml
+services:
+ nginx:
+ host: "127.0.0.1"
+ port: 80
+
+ apache:
+ virtual_host: "10.10.10.4"
+ port: 81
+```
+
+The equivalent JSON would be:
+
+```json
+{
+ "services": {
+ "nginx": {
+ "host": "127.0.0.1",
+ "port": 80
+ },
+ "apache": {
+ "virtual_host": "10.10.10.4",
+ "port": 81
+ }
+ }
+}
+```
+
+**Some considerations about the indentation**
+
+A space (U+0020) or a tab (U+0009) can be used on useless lines like comments o empty lines (lines composed of whitespaces and new lines) but only. In case a tab is found as an indentation character, an `InvalidIndentationError` must be raised.
+
+Also, as mentioned previously, the indentation levels must be divisible by 4, otherwise an `InvalidIndentationError` error must be raised:
+
+```yaml
+# INVALID as second level has block of 8 spaces as indentation
+services:
+ nginx:
+ host: "127.0.0.1"
+ port: 80
+
+# INVALID as 2 spaces are used as indentation block
+user:
+ name: "Gura"
+```
+
+Finally, as empty values are not allowed, the following case considers any value below `name` as an internal block. As the indentation length between parent and child blocks is the same an `InvalidIndentationError` exception will be thrown:
+
+```yaml
+user:
+ name: # INVALID
+ surname: "Troilo"
+```
+
+**Empty objects**
+
+While the idea is that the configuration of a system is valid, complete, and static information, there may be situations where the information is empty. Assume the following case in JSON:
+
+```json
+{
+ "empty_object": {}
+}
+```
+
+To maintain compatibility with existing languages with support for empty objects such as JSON or YAML, Gura provides the `empty` keyword to cover these scenarios. The above example could be represented in Gura as follows:
+
+```yaml
+empty_object: empty
+```
+
+In this way, an explicit and clear syntax is provided to cover these rare cases, without losing the portability of the configuration to and from other languages.
+
+
+## Array
+
+Arrays are square brackets with values inside. Whitespace is ignored. Elements are separated by commas. Arrays can contain values of the same data types as allowed in key/value pairs. Values of different types may be mixed.
+
+```yaml
+integers: [ 1, 2, 3 ]
+colors: [ "red", "yellow", "green" ]
+nested_arrays_of_ints: [ [ 1, 2 ], [3, 4, 5] ]
+nested_mixed_array: [ [ 1, 2 ], ["a", "b", "c"] ]
+
+# Mixed-type arrays are allowed
+numbers: [ 0.1, 0.2, 0.5, 1, 2, 5 ]
+tango_singers: [
+ user1:
+ name: "Carlos"
+ surname: "Gardel"
+ year_of_birth: 1890,
+ user2:
+ name: "Aníbal"
+ surname: "Troilo"
+ year_of_birth: 1914
+]
+```
+
+Arrays can span multiple lines. A terminating comma (also called a trailing comma) is permitted after the last value of the array. Any number of newlines and comments may precede values, commas, and the closing bracket. Indentation between array values and commas is treated as whitespace and ignored.
+
+```yaml
+integers2: [
+ 1, 2, 3
+]
+
+integers3: [
+ 1,
+ 2, # this is ok
+]
+```
+
+
+## Variables
+
+You can define variables. They start with a `$` sign, a name and a colon. A variable name has to respect the same regex as keys and only strings, numbers or other variable are allowed as values. If any of another kind of value type is used a parsing error must be raised.
+
+```yaml
+$my_string_var: "127.0.0.1"
+$my_integer_var: 8080
+
+nginx:
+ host: $my_string_var
+ port: $my_integer_var
+
+$invalid_var: null # INVALID null is not allowed as variable value
+$invalid_var2: true # INVALID booleans are not allowed as variable value
+$invalid_var3: [ 1, 2, 3 ] # INVALID complex types such as arrays or objects are not allowed as variable value
+```
+
+Variables can not be used as key.
+
+```yaml
+$hostkey: "host"
+nginx:
+ $hostkey : 4 # INVALID
+```
+
+Variables must be specified before they are used, in source code order. Redefining variables must raise a `DuplicatedVariableError` error, even when defined in different files (see [imports](#imports)).
+
+Variables can be used in *Basic strings* and *Multi-line basic strings*:
+
+```yaml
+$name: "Gura"
+key: "$name is cool"
+key_2: """Config languages using variables:
+ - $name"""
+```
+
+Environment variables can be accessed using `$` sign too.
+
+```yaml
+service:
+ postgres:
+ environment:
+ user: $DB_USER
+ password: $DB_PASS
+
+# You can store its value in a variable too
+$my_path: $PATH
+
+# You can replace environment variables like normal ones. After all, environment variables are normal variables defined before parsing.
+$PATH: "Another value"
+```
+
+When a variable is used Gura looks for the definition in the current file and the imported ones. If it is not defined, checks for available environment variables, if it is not, it must raise a `VariableNotDefinedError` error.
+
+To use `$` in string just use literal or escape them:
+
+
+```yaml
+basic: "I won \$500 dollars!"
+basic_multiline: """I won \$500 dollars!"""
+literal: 'I won $500 dollars!'
+literal_multiline: '''I won $500 dollars!'''
+```
+
+
+## Imports
+
+You can import one or more Gura files using an `import` statement. The effect of importing a file is the same as replacing the import by the file's contents. Therefore, all the keys and variables defined on them will be available in the file which is importing.
+
+Imports must occur at the beginning of the file and there must be no blanks in front of the `import` statement. Must be only one whitespace between the `import` and file name. The file name must be between single quotation marks (") and there won't be special character escaping. Importing a non-existing file must raise a `FileNotFoundError` error.
+
+```yaml
+import "another_file.ura" # Good
+ import "another_file.ura" # INVALID: there are blanks before import
+import "another_file.ura" # INVALID: there are more than one whitespace between import and file name
+
+some_key: "Some value"
+
+import "another_file.ura" # INVALID: is not at the beginning of the file
+```
+
+
+
+A file can only be imported once. Re-importing a file must raise a `DuplicatedImportError` error.
+
+
+**one.ura**:
+
+```yaml
+life: 42
+```
+
+**two.ura**:
+
+```yaml
+import "one.ura"
+
+$my_var: true
+```
+
+**three.ura**:
+
+```yaml
+$name: "Elisa"
+```
+
+**main.ura**:
+
+```yaml
+import "two.ura"
+import "/absolute/path/to/three.ura" # You can use absolute path too
+
+# Life, $my_var and $name are available here
+my_name: $name
+
+# life: "some value" # This WILL NOT work as it is defined in one.ura which is included in two.ura
+```
+
+You can use variables inside import sentences!
+
+```yaml
+$common_path: "/extremely/long/path/to/some/useful/directory"
+
+import "$common_path/one.ura"
+import "$common_path/two.ura"
+```
diff --git a/docusaurus.config.js b/docusaurus.config.js
new file mode 100644
index 0000000..d8eb35a
--- /dev/null
+++ b/docusaurus.config.js
@@ -0,0 +1,67 @@
+/** @type {import('@docusaurus/types').DocusaurusConfig} */
+module.exports = {
+ title: 'Gura',
+ tagline: '',
+ url: 'https://gura.netlify.app/',
+ baseUrl: '/',
+ onBrokenLinks: 'throw',
+ onBrokenMarkdownLinks: 'warn',
+ favicon: 'img/favicon.ico',
+ organizationName: 'JWare',
+ projectName: 'Gura',
+ themeConfig: {
+ navbar: {
+ title: 'Gura',
+ logo: {
+ alt: 'Gura Logo',
+ src: 'img/gura-thumbnail.png',
+ },
+ items: [
+ {
+ type: 'docsVersionDropdown',
+ position: 'right'
+ },
+ {
+ href: 'https://discord.gg/Qs5AXPQpKd',
+ position: 'right',
+ className: 'header-discord-link header-icon-link',
+ title: 'Discord server',
+ 'aria-label': 'Discord server',
+ },
+ {
+ href: 'https://github.com/gura-conf/gura',
+ position: 'right',
+ className: 'header-github-link header-icon-link',
+ title: 'GitHub repository',
+ 'aria-label': 'GitHub repository',
+ },
+ ],
+ },
+ footer: {
+ style: 'dark',
+ copyright: `Copyright © ${new Date().getFullYear()} JWare Solutions`,
+ },
+ },
+ presets: [
+ [
+ '@docusaurus/preset-classic',
+ {
+ docs: {
+ sidebarPath: require.resolve('./sidebars.js'),
+ /**
+ * Skip the next release docs when versioning is enabled.
+ * This will not generate HTML files in the production build for documents
+ * in `/docs/next` directory, only versioned docs.
+ */
+ includeCurrentVersion: false,
+ },
+ theme: {
+ customCss: [
+ require.resolve('./src/css/custom.scss'),
+ ]
+ },
+ },
+ ],
+ ],
+ plugins: ['docusaurus-plugin-sass'],
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5e3c91f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "gura-site",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "docusaurus": "docusaurus",
+ "start": "docusaurus start",
+ "build": "docusaurus build",
+ "swizzle": "docusaurus swizzle",
+ "deploy": "docusaurus deploy",
+ "clear": "docusaurus clear",
+ "serve": "docusaurus serve",
+ "write-translations": "docusaurus write-translations",
+ "write-heading-ids": "docusaurus write-heading-ids"
+ },
+ "dependencies": {
+ "@docusaurus/core": "^2.0.0-beta.1b0acc554",
+ "@docusaurus/preset-classic": "^2.0.0-beta.1b0acc554",
+ "@mdx-js/react": "^1.6.21",
+ "@svgr/webpack": "^5.5.0",
+ "docusaurus-plugin-sass": "^0.1.14",
+ "file-loader": "^6.2.0",
+ "prism-react-renderer": "^1.2.0",
+ "react": "^17.0.1",
+ "react-dom": "^17.0.1",
+ "sass": "^1.32.12",
+ "url-loader": "^4.1.1"
+ },
+ "browserslist": {
+ "production": [
+ ">0.5%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "devDependencies": {
+ "@docusaurus/module-type-aliases": "^2.0.0-alpha.75",
+ "@tsconfig/docusaurus": "^1.0.2",
+ "@types/react": "^17.0.5",
+ "@types/react-helmet": "^6.1.1",
+ "@types/react-router-dom": "^5.1.7",
+ "typescript": "^4.2.4"
+ }
+}
diff --git a/sidebars.js b/sidebars.js
new file mode 100644
index 0000000..981a73c
--- /dev/null
+++ b/sidebars.js
@@ -0,0 +1,26 @@
+/**
+ * Creating a sidebar enables you to:
+ - create an ordered group of docs
+ - render a sidebar for each doc of that group
+ - provide next/previous navigation
+
+ The sidebars can be generated from the filesystem, or explicitly defined here.
+
+ Create as many sidebars as you want.
+ */
+
+module.exports = {
+ // By default, Docusaurus generates a sidebar from the docs folder structure
+ tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
+
+ // But you can create a sidebar manually
+ /*
+ tutorialSidebar: [
+ {
+ type: 'category',
+ label: 'Tutorial',
+ items: ['hello'],
+ },
+ ],
+ */
+};
diff --git a/src/components/Differences/Differences.tsx b/src/components/Differences/Differences.tsx
new file mode 100644
index 0000000..eae492f
--- /dev/null
+++ b/src/components/Differences/Differences.tsx
@@ -0,0 +1,132 @@
+import React from 'react'
+import useBaseUrl from '@docusaurus/useBaseUrl';
+import styles from '../../pages/index.module.css';
+
+
+/** TODO: add docs */
+interface DifferenceElem {
+ title: string,
+ imageUrl: string,
+ description: JSX.Element
+}
+
+/** TODO: add docs */
+const differences: DifferenceElem[] = [
+ {
+ title: 'Differences with YAML',
+ imageUrl: 'img/differences/yaml.png',
+ description: (
+ <>
+
+ YAML offered a readable alternative to JSON or INI for a configuration file. While TOML was great for basic files because of its simplicity, YAML provided a readable solution when the complexity of the file grew. However, as the NOYAML manifesto argues, we should stop supporting that format. The reason? YAML is unnecessarily complex ). We highlight main issues with YAML that Gura tries to solve.
+
+
+ Multiple different ways to define a list and the elements inside it.
+ 5 (!) ways to define a string.
+ 4 (!) ways to define a boolean.
+ Boolean automatically inferred from strings (workarounds ).
+ Serious security issues. Safe YAML attempts to address those, but only those.
+ Increadibly long YAML specs for what is supposed to be a simple configuration language?
+ Special data types such as like Date or Datetime are defined in the spec, but the definition of their semantics is relegated to each specific implementation.
+
+
+ >
+ ),
+ },
+ {
+ title: 'Differences with JSON',
+ imageUrl: 'img/differences/json.png',
+ description: (
+ <>
+
+ It's easy, JSON is and will be the fastest serialization language available. Gura is not meant for fast processing and/or machine-to-machine communication. When a readable, simple, and maintainable language is needed Gura becomes an excellent alternative.
+
+ >
+ ),
+ },
+ {
+ title: 'Differences with TOML',
+ imageUrl: 'img/differences/toml.png',
+ description: (
+ <>
+
+ The idea of Gura is not to replace TOML but to complement it when the complexity of the project warrants it. The use of TOML for files such as cargo.toml in the Rust programming language is an excellent example of matching the complexity of the language to that of the domain. However, when the level of nesting increases, TOML is very cumbersome since you must resort to repeating all the parent levels (using Dotted keys) every time you want to define a nested value.
+
+ Furthermore, even TOML falls in some cases into the same complexity as YAML, with features such as:
+
+
+ Multiple ways to specify keys.
+ Empty keys.
+ Special data types.
+
+
+ >
+ ),
+ },
+ {
+ title: 'Gura ⭐',
+ imageUrl: 'img/differences/gura.png',
+ description: (
+ <>
+
+ Gura combines the readability of YAML and a reduced version of its syntax with the (even more simplified) simplicity of TOML. It also brings in some features and characteristics exclusive to this language:
+
+
+ 📦 Variables: Gura allows you to define variables of any type, even using environment variables, both as a flat value and as values inside a string. So you can compact and reuse the values you require.
+
+ 📑 Imports: Gura defines a way to import different Gura files within the same file in order to modularize the configuration.
+
+ 🚫 Standard errors: Gura defines the semantic errors that should be thrown in certain situations. This way you get an implementation-agnostic definition and the developer can get the same type of error regardless of the programming language he/she is using.
+
+ 🥧 Gura is short and simple to learn and use since it follows the only one way to do it Python maxim.
+
+ 🌈 Writing a parser or wrapper for Gura in a new language should be a short and simple as well.
+
+
+ >
+ ),
+ },
+];
+
+interface LanguageComparisonProps {
+ difference: DifferenceElem
+}
+
+
+/**
+ * TODO: add docs
+ * @param props
+ * @returns
+ */
+function LanguageComparison(props: LanguageComparisonProps) {
+ const { imageUrl, title, description } = props.difference
+ const imgUrl = useBaseUrl(imageUrl);
+ return (
+
+ {imgUrl && (
+
+
+
+ )}
+
{title}
+
{description}
+
+ );
+}
+
+
+/**
+ * TODO: add docs
+ * @returns
+ */
+export const DifferencesSection = () => (
+
+
+
+ {differences.map((difference, idx) => (
+
+ ))}
+
+
+
+)
\ No newline at end of file
diff --git a/src/components/FeaturesReview/FeaturesReview.tsx b/src/components/FeaturesReview/FeaturesReview.tsx
new file mode 100644
index 0000000..6512eb0
--- /dev/null
+++ b/src/components/FeaturesReview/FeaturesReview.tsx
@@ -0,0 +1,145 @@
+import React from 'react'
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import CodeSnippet from "../../theme/CodeSnippet";
+import styles from '../../pages/index.module.css';
+import Link from '@docusaurus/Link';
+
+/** TODO: add docs */
+interface Snippet {
+ label: string,
+ further: string,
+ config: string
+}
+
+/** TODO: add docs */
+const snippets: Snippet[] = [
+ {
+ label: 'Strings',
+ further: '/docs/spec#string',
+ config: `basic: "I'm a string. \"You can quote me\". Name\\tJos\\u00E9\\nLocation\\tSF."
+
+multiline_basic: """
+ The quick brown \\
+ fox jumps over \\
+ the lazy dog."""
+
+literal: 'C:\Users\\nodejs\\templates'
+
+multiline_literal: lines: '''
+The first newline is
+ trimmed in raw strings.
+ All other whitespace
+ is preserved.`
+ },
+ {
+ label: 'Numbers',
+ further: '/docs/spec#integer',
+ config: `# Integers
+int1: +99
+int2: 1_000 # Separator!
+
+# Different formats
+hex: 0xDEADBEEF # Hexadecimal
+oct: 0o01234567 # Octal
+bin: 0b11010110 # Binary
+
+# Floats
+flt1: +1.0
+flt2: 3.1415
+
+# Infinity
+sf1: inf # Positive infinity
+sf2: +inf # Positive infinity
+sf3: -inf # Negative infinity
+
+# Not a number
+sf4: nan # Actual sNaN/qNaN encoding is implementation-specific
+sf5: +nan # Same as \`nan\`
+sf6: -nan # Valid, actual encoding is implementation-specific`,
+ },
+ {
+ label: 'Objects',
+ further: '/docs/spec#object',
+ config: `services:
+ nginx:
+ host: "127.0.0.1"
+ port: 80
+
+ apache:
+ virtual_host: "10.10.10.4"
+ port: 81`
+ },
+ {
+ label: 'Arrays',
+ further: '/docs/spec#array',
+ config: `numbers: [ 0.1, 0.2, 0.5, 1, 2, 5 ]
+
+# Nested and mixed
+numbers_and_strings: [ [ 1, 2 ], ["a", "b", "c"] ]
+
+# Array of objects
+tango_singers: [
+ user1:
+ name: "Carlos"
+ surname: "Gardel"
+ year_of_birth: 1890,
+ user2:
+ name: "Aníbal"
+ surname: "Troilo"
+ year_of_birth: 1914
+]`
+ },
+ {
+ label: 'Variables',
+ further: '/docs/spec#variables',
+ config: `$my_host: "127.0.0.1"
+nginx:
+ host: $my_host
+ port: 8080`
+ },
+];
+
+
+const FeaturesReview = () => {
+ return (
+
+
+
+
+ {snippets && snippets.length && (
+
+ (
+ { label: snippet.label, value: snippet.label }
+ ))}>
+ {snippets.map((props, idx) => (
+
+
+
+ Read more about {props.label.toLowerCase()}
+
+
+ ))}
+
+
+ )}
+
+
+
+
Gura is simple and elegant
+
+ Gura was born from the need to have a configuration language that is human readable without falling into the unnecessary complexity of popular formats such as YAML.
+
+
+ Read more the full specs!
+
+
+
+
+
+ )
+}
+
+export { FeaturesReview }
\ No newline at end of file
diff --git a/src/components/HomepageFeatures.module.css b/src/components/HomepageFeatures.module.css
new file mode 100644
index 0000000..270ff8c
--- /dev/null
+++ b/src/components/HomepageFeatures.module.css
@@ -0,0 +1,8 @@
+/* stylelint-disable docusaurus/copyright-header */
+
+.features {
+ display: flex;
+ align-items: center;
+ padding: 2rem 0;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/src/components/HomepageFeatures.tsx b/src/components/HomepageFeatures.tsx
new file mode 100644
index 0000000..9dc8a20
--- /dev/null
+++ b/src/components/HomepageFeatures.tsx
@@ -0,0 +1,72 @@
+import React from 'react';
+import styles from './HomepageFeatures.module.css';
+
+interface Feature {
+ img: string,
+ title: string,
+ description: JSX.Element
+}
+
+
+const FeatureList: Feature[] = [
+ {
+ title: 'Simple',
+ img: require('../../static/img/features/simple.png').default,
+ description: (
+ <>
+ Gura is simple, and its "one way of doing things" philosophy minimizes the possibility of error and its implementation complexity.
+ >
+ ),
+ },
+ {
+ title: 'Robust',
+ img: require('../../static/img/features/robustness.png').default,
+ description: (
+ <>
+ Gura has no implicit mechanisms that lead to bugs, it is strongly typed and bugs are standardized to make it a robust configuration language.
+ >
+ ),
+ },
+ {
+ title: 'Friendly',
+ img: require('../../static/img/features/friendly.png').default,
+ description: (
+ <>
+ Gura retains the best aspects of well-known languages such as TOML and YAML to make user adoption a smooth and agile process.
+ >
+ ),
+ },
+];
+
+
+function Feature(props: Feature) {
+ return (
+
+
+
+
+
+
{props.title}
+
{props.description}
+
+
+ );
+}
+
+/**
+ * Renders list of features
+ * @returns Component
+ */
+export default function HomepageFeatures() {
+ return (
+
+
+
+ {FeatureList.map((feature, idx) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/css/custom.scss b/src/css/custom.scss
new file mode 100644
index 0000000..85a606c
--- /dev/null
+++ b/src/css/custom.scss
@@ -0,0 +1,103 @@
+/* stylelint-disable docusaurus/copyright-header */
+/**
+ * Any CSS included here will be global. The classic template
+ * bundles Infima by default. Infima is a CSS framework designed to
+ * work well for content-centric websites.
+ */
+
+/* You can override the default Infima variables here. */
+:root {
+ --ifm-color-primary: #ff914d;
+ --ifm-color-primary-dark: #ff7c2c;
+ --ifm-color-primary-darker: #ff721b;
+ --ifm-color-primary-darkest: #e85900;
+ --ifm-color-primary-light: #ffa66e;
+ --ifm-color-primary-lighter: #ffb07f;
+ --ifm-color-primary-lightest: #ffcfb1;
+ --ifm-code-font-size: 95%;
+}
+
+.header-github-link {
+ padding-right: 16px !important;
+ padding-left: 16px !important;
+
+ &:before {
+ content: '';
+ width: 24px;
+ height: 24px;
+ display: flex;
+ background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
+ no-repeat;
+ }
+
+ &:hover {
+ opacity: 0.6;
+ }
+}
+
+.header-discord-link {
+ padding-right: 16px !important;
+ padding-left: 16px !important;
+
+ &:before {
+ content: '';
+ width: 24px;
+ height: 24px;
+ display: flex;
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg width='71' height='55' viewBox='0 0 71 55' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z' fill='%2323272A'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='71' height='55' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E")
+ no-repeat;
+ background-size: 100% 100%;
+ }
+
+ &:hover {
+ opacity: 0.6;
+ }
+}
+
+.darker-row {
+ background-color: #f7f7f7ba;
+}
+
+
+/* For dark theme */
+html[data-theme='dark'] {
+ .header-github-link:before {
+ background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
+ no-repeat;
+ }
+
+ .header-discord-link:before {
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg width='71' height='55' viewBox='0 0 71 55' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z' fill='%23ffffff'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='71' height='55' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E")
+ no-repeat;
+ background-size: 100% 100%;
+ }
+
+ .darker-row {
+ background-color: #1e2028;
+ }
+
+ /* Disables different color for hero section */
+ .hero {
+ background-color: inherit;
+ }
+}
+
+.difference-image {
+ width: 25%;
+}
+
+.padded-section {
+ padding-top: 2%;
+ padding-bottom: 2%;
+}
+
+@media (max-width: 996px) {
+ #main-snippet-col {
+ margin-top: 5%;
+ }
+
+ #find-library-col {
+ padding-left: 0px;
+ margin-top: 2%;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/index.module.css b/src/pages/index.module.css
new file mode 100644
index 0000000..f4f6805
--- /dev/null
+++ b/src/pages/index.module.css
@@ -0,0 +1,25 @@
+/* stylelint-disable docusaurus/copyright-header */
+
+/**
+ * CSS files with the .module.css suffix will be treated as CSS modules
+ * and scoped locally.
+ */
+
+.mainBanner {
+ padding: 4rem 0;
+ /* text-align: center; */
+ position: relative;
+ overflow: hidden;
+}
+
+@media screen and (max-width: 966px) {
+ .mainBanner {
+ padding: 2rem;
+ }
+}
+
+.buttons {
+ display: flex;
+ align-items: left;
+ justify-content: left;
+}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
new file mode 100644
index 0000000..37e2750
--- /dev/null
+++ b/src/pages/index.tsx
@@ -0,0 +1,109 @@
+import React from 'react';
+import Head from '@docusaurus/Head';
+import Layout from '@theme/Layout';
+import Link from '@docusaurus/Link';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import styles from './index.module.css';
+import HomepageFeatures from '../components/HomepageFeatures';
+import { FeaturesReview} from '../components/FeaturesReview/FeaturesReview'
+import { DifferencesSection } from '../components/Differences/Differences';
+import CodeSnippet from '../theme/CodeSnippet';
+
+
+const HeaderWithCodeSnippet = () => {
+ const { siteConfig } = useDocusaurusContext();
+
+ const snippetContent = `# This is a comment in a Gura configuration file.
+# Define a variable named \`title\` with string value "Gura Example"
+title: "Gura Example"
+
+# Define an object with fields \`username\` and \`age\`
+# with string and integer values, respectively
+# Indentation is used to indicate nesting
+person:
+ username: "Stephen"
+ age: 20
+
+# Define a list of values
+# Line breaks are OK when inside arrays
+hosts: [
+ "alpha",
+ "omega"
+]
+
+# Variables can be defined and referenced to avoid repetition
+$foreground: "#FFAH84"
+color_scheme:
+ editor: $foreground
+ ui: $foreground`
+
+ return (
+
+
+
+
+
{siteConfig.title}
+
+ Gura is a file format for configuration files. Gura is as readable as YAML and simple as TOML . Its syntax is clear and powerful, yet familiar for YAML/TOML users.
+
+
+
+
+
+
+ Find a library
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default function Home() {
+ const title = 'Gura | Configuration language'
+ return (
+
+
+
+ {title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/prism_themes/github/index.js b/src/prism_themes/github/index.js
new file mode 100644
index 0000000..4ad08d5
--- /dev/null
+++ b/src/prism_themes/github/index.js
@@ -0,0 +1,75 @@
+var theme = {
+ plain: {
+ color: "#393A34",
+ backgroundColor: "#f6f8fa"
+ },
+ styles: [
+ {
+ types: ["comment", "prolog", "doctype", "cdata"],
+ style: {
+ color: "#999988",
+ fontStyle: "italic"
+ }
+ },
+ {
+ types: ["namespace"],
+ style: {
+ opacity: 0.7
+ }
+ },
+ {
+ types: ["string", "attr-value"],
+ style: {
+ color: "#e3116c"
+ }
+ },
+ {
+ types: ["punctuation", "operator"],
+ style: {
+ color: "#393A34"
+ }
+ },
+ {
+ types: [
+ "entity",
+ "url",
+ "symbol",
+ "number",
+ "boolean",
+ "variable",
+ "constant",
+ "property",
+ "regex",
+ "inserted"
+ ],
+ style: {
+ color: "#36acaa"
+ }
+ },
+ {
+ types: ["atrule", "keyword", "attr-name", "selector"],
+ style: {
+ color: "#00a4db"
+ }
+ },
+ {
+ types: ["function", "deleted", "tag"],
+ style: {
+ color: "#d73a49"
+ }
+ },
+ {
+ types: ["function-variable"],
+ style: {
+ color: "#6f42c1"
+ }
+ },
+ {
+ types: ["tag", "selector", "keyword"],
+ style: {
+ color: "#00009f"
+ }
+ }
+ ]
+};
+module.exports = theme;
diff --git a/src/prism_themes/monokai/index.js b/src/prism_themes/monokai/index.js
new file mode 100644
index 0000000..1d50688
--- /dev/null
+++ b/src/prism_themes/monokai/index.js
@@ -0,0 +1,39 @@
+// Converted automatically using ./tools/themeFromVsCode
+var theme = {
+ "plain": {
+ "color": "#f8f8f2",
+ "backgroundColor": "#272822"
+ },
+ "styles": [{
+ "types": ["comment"],
+ "style": {
+ "color": "rgb(136, 132, 111)"
+ }
+ }, {
+ "types": ["string", "changed"],
+ "style": {
+ "color": "rgb(230, 219, 116)"
+ }
+ }, {
+ "types": ["punctuation", "tag", "deleted"],
+ "style": {
+ "color": "rgb(249, 38, 114)"
+ }
+ }, {
+ "types": ["number", "builtin"],
+ "style": {
+ "color": "rgb(174, 129, 255)"
+ }
+ }, {
+ "types": ["variable"],
+ "style": {
+ "color": "rgb(248, 248, 242)"
+ }
+ }, {
+ "types": ["function", "attr-name", "inserted"],
+ "style": {
+ "color": "rgb(166, 226, 46)"
+ }
+ }]
+};
+module.exports = theme;
diff --git a/src/theme/CodeSnippet/index.js b/src/theme/CodeSnippet/index.js
new file mode 100755
index 0000000..310770a
--- /dev/null
+++ b/src/theme/CodeSnippet/index.js
@@ -0,0 +1,54 @@
+import React, {useEffect, useState} from 'react';
+import styles from './styles.module.css';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import useThemeContext from '@theme/hooks/useThemeContext';
+import Highlight, { defaultProps } from "prism-react-renderer";
+import monokai from "@site/src/prism_themes/monokai";
+
+function CodeSnippet(props) {
+ const {
+ siteConfig: {
+ themeConfig: {prism = {}},
+ },
+ } = useDocusaurusContext();
+
+ const [mounted, setMounted] = useState(false);
+ // The Prism theme on SSR is always the default theme but the site theme
+ // can be in a different mode. React hydration doesn't update DOM styles
+ // that come from SSR. Hence force a re-render after mounting to apply the
+ // current relevant styles. There will be a flash seen of the original
+ // styles seen using this current approach but that's probably ok. Fixing
+ // the flash will require changing the theming approach and is not worth it
+ // at this point.
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ const {isDarkTheme} = useThemeContext();
+ const lightModeTheme = prism.theme || monokai;
+ const darkModeTheme = prism.darkTheme || lightModeTheme;
+ const prismTheme = isDarkTheme ? darkModeTheme : lightModeTheme;
+
+ const {
+ lang = 'yaml',
+ snippet,
+ } = props;
+
+ return (
+
+ {({ className, style, tokens, getLineProps, getTokenProps }) => (
+
+ {tokens.map((line, i) => (
+
+ {line.map((token, key) => (
+
+ ))}
+
+ ))}
+
+ )}
+
+ );
+}
+
+export default CodeSnippet;
diff --git a/src/theme/CodeSnippet/styles.module.css b/src/theme/CodeSnippet/styles.module.css
new file mode 100755
index 0000000..cd93eb5
--- /dev/null
+++ b/src/theme/CodeSnippet/styles.module.css
@@ -0,0 +1,3 @@
+.codeSnippet {
+ font-size: 10pt;
+}
\ No newline at end of file
diff --git a/static/.nojekyll b/static/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/static/img/differences/gura.png b/static/img/differences/gura.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa3963e81c4a8d14a22bb7425075e210dd4c0cf3
GIT binary patch
literal 17393
zcmeIYWmsIxx-Qzd1b4UK?(XjH5&}&l0h-21kN`mf1b26bU_paB39dl`jRe=AA;|4y
z&b8K@_w2jRUC%lD-vS!OsCvJ*KCK#~iU@5@B}{ZObN~Q=siG{e3;TQX>w}66``t6e
z_5=VR6?mm@?4fJrO#^Xrv2}0)(RjRsfM`HI4z>V*&r)@Uog2l+gwRJIVM9o;#&eNc
z+=e$M4}K^bOp((axF-?1LUSeP%I@lht@p1VeODe&OA*;PL6ybH-%ptuXJvO%Z`&U(
ze(vUaP@m+UKjb`KdS0I?LW_sp{qCDnnkTxtj-{|pU+v$ebWxOzHwz8cxO}+qy1PA+
zc43M%)q$p7dgWbt<&ivdxoJkYSZKnh(cP714
zw$<@^U#ZI2NE^2v1Ed-27a4MM{!Hly^3DCuPwH<12|a#&=8Ml?4<6t={n@;vOF59a
zJB-3NQS`3`IOWrGIo*p(HM1G!nJCv)IE>P8vPByO;(?EGVK7Wekhp-
zxD)sgAh>nZ2?_5@F9mitJGBe*rySa+nDfDOJ2Je2@q
zvo)+Xsi`Z;a4a{htgOBwGDW0tXB#thuD%>s5mP$$`*Fp7cxJG$t(qYr9z0aY`(pF7rHgl!h%5Hp*^0nuZON#t~Z`Tv>Qob3^H^}
zF&Z3xz9hM|Ddl#Z-fH=MTlY5hJJBlNPEy;W;&ztqb@=FgPBV3VQ@`MO#Idcib6K8b
z{M9DH$1ClR%15yil{NN!8868ZUE4flC#t+IIu_fhG3hcZgH49M)2DruV%nbiMAMl(
z$LUyWdfpIQIy+~To3d!S}
z(2cSPX_HqeecE=_G3AJ7U{(*el1bM4kpKnsx30o0Hj(_*Q+8`T{M5M
zYLn24fm1K3_|pr4p(^x6_MeCa?Y2yee65MV$VKZDtqZ;<6Q0;9WXtJ(4K*Q#
zLDW^ag)Py%=*~D#C7a#c4`X+0aHkvaDNqKFB&MnS`!%r2T*QEb+gfG>9{c|F7wz_x
zSCmu*B4(*`zn-|T(|Q+xv40u|QL%gIWNBCH;}${c
z3$%vHe@54bbp5qX>Gm1Q^SpgjR0ex_z8J!5wT^OvoG$0dd(Ryx>+M#^!XuKON~E>6&O{N>QGR4w
zqx=lK=DloNBW(iQYnZT3#n*!SdhqOYrZFbq^
znFAGhMAGj!)iZ$+eKU5u*)l5CrPE3bNvMI&y!D2)2D?Cq;jSaI=O`bV{0-TNV^Nr6
zGR~$IQ>bNV3u>ovV+yjz>T8~0V73Boq@%+f%i6N{NV}3#tbRrWlXP3nk(lKRSZB9C
zVVFI1yHXtuBT1R0jWKmntyRM)g8xaMm()<$vN6nlU{adTny^}alDF3@Rk&}NOHK|T
zX!`8votxj9Wx~e_npEAA2&Pf2X>2aVL(ypd{NY`UX{!eaULbD&;*K@xJm?sIqz9~)3U*C
zo?vIl#{Em5mIh)}*6uhhwD;}>9fPXt#-nPd#qhc#lZmq`a-AEk%v$s8IdZ!!JA=Mey
zYn{Pjgm=mJdYi)ovOsBTyIGNLMHG~Iy!hDozFwuwIm+qj0cMKN&3=p
z_2I5u?Ket10?Gmq9o7WoWUS+M5Na^fzYvs)&4wgbD)TCagO5WsgKY4=^(`XNvR(E)
zEIea}m(Ft==HERq%0KW!$A2=V_a-X#ZoJ@#j{l}Jq4;)y%H0p4-nQVimI=tKrb3t-
zRl!WAW{A|kPLHRbWO5^)5dpC{CXV=R7hwcAjr?mERUtac{t%9eUYK~5-Dss9&yb7%
z-Q88zx>p&IsIy>Dld3Vzi~MVu?rPs8pR!XzR%?PaA-C;NGaY1_LN-4zfUnDaKCo7r
zgx=8EV|5hiiKZ1-(M(Y}
zW>p{W2Q2d(V(qBfz`)EGz;Np~Z2{cPSx5rHgFvSTNktL_@!Fy*M6w@~{wp@NEw^X;
z)*|+qW-t8}>vbdfv1OIT6wogv=&=F#+TH}32;_P(5P5fh5bvWl<8#>(UJRD4#9?7=
zv$wNqGHeq8%ote+tgXk3)9F#c=?8}z*HDEk=$mhs^2!pzA?Q~K8f0Rs4VWR*hU&>0
zb&V)>;1>;Hyft>$Kj3xVd&jDFF2H9LkBod?g`+X$4f}vxyx6C5+WSt~^;~Cva-9in
z99dZh9oXmf^u3$_@zQJB^u-_YgnA7ndbBG_m>_*9YI)K?PJa)D8@Y^(V*J_xJ^jvx
zJ%3?ob#KakxbZ$ZV{D|Olcyk^K
zxN|&Yujx}>KsG|me)7y0Hp57J`y?qpQU3l~e=7L{#Vu`L^tVj5yFn7yIX6Q1E7Zye
z?(G#H@U{_GXhw0kN70Kc7X31;$5M?2Di~60_CCe>PyBFJ8_Dv#pjjMco?B;)2{W-SEFac55rm?$&u6KH~3uiw*6eaah6+R
zx8{Rr9qd-uiW1U@(`M0y8oM`H8QnFAM8LsY#4nRLsByAL3?8!_7&_hRez>Nieo-_}
zhagJ0#S0*fTSaDNtU%I6L`)N8v*|7T_%Aq!${yVb(vlhZ?O3g!noWl$^uFM1ATE^O
zhQIO-gh-hgz7s%*?(CHYFYxvR;|^{(ey}m!73wjNH??7W7cFNpeYif4--!Mj7lt`^MIcl
zL42{NEchYBTUyN^%g{k1$A?ThRg?LitVgcrf(466sO2`gTtWeE%T<|L=ff@_0l}_A
zP&0qmy_RrAVztXm=1I71$h1Zo5~fgOu@9zWg5Snol|ON9sKn<_;Izm!6#+nqmU&VTdnE(_`-deIe6#)*=P%9cXtOdrYQ2&I_oVq)?y(RPs
zPa^6ZsfJF)HeWKnK-7qQBvjPJiDmYE{@K4G%er9&r#6oN>#RJccv>JI;A)0@%bmzg
zY|_7}z~)3QT2nd=838hjJM0p&MJ7=VmuMxZY9?5W!uc&e63KymA2p^)=rL3#nCr(w
z+1YrucK%tU4_pJ{6SViha=t*+JMv(77O8DF`*4ABB?62uN`{6AV9hW!B^;c05QvS~
z`82;CpQA96&`hs^If?6lQM9(0iM;~fa|C0`Ps|^R0yYokiV#8RLdg=+ml@x2;h>*h
zyw-uM>j*f4`sRrVr}JqCDA;nzQ;y61<@6W+ZVa?7w^&SMnt!Tdj_VU^wb*N
z5YZk~oqJqBgxd!=zrBJ(czv&%WDDeyCQ>YN$>KhC_fEAJdBvhS_WAJj
zTxjkD<#t7zt=?LONk6Wh?@xmH6)U7Y%p}}og#6l_)2h?Hsj^MoCw}~$!uS}YwP54i(GN+;##cdH7UKX{7ydw_MJYAfE974S;(S}q=2*h4Q
zjvC&=)ydT~=fg3elroy!$T%8p*~1Odf2c3vk@lVy7x+%B8*G1mA~09ZRHd&-6qG=Q
z+?1DY$l3Q&<2uO72|6DCDLhEKuM+9-QLt@*?wO`!RB(U4#=eY)3nr;U21(7bqs733
z+z*wlJ{cS-rZLPZlrkLr9+nZA=Mu_ISVrn2EJbVhu7SWFM0>o~R2uK3pB&l@-9f4l
zPIP8#^zyuj`7>#{BRowL>)$7lM`B8L5+j|ug2vx=^^0JPm096tL8m4MQeBn523tbD
zLShK82o?4Mr77dL=o1P*j4@|u(ZY!^35b>lcrbdbp)dww<&z7MY@=~@A{U+lG*_dd
zaSO=iw0b`6+e7QhF==%465VT^i|ICt`*vguS7eJA*amP1=IaxH_Ofe~&q#8G>j$06
zD&PJr39TJKn3wQid;e224H93mP&FUZv2Ku$!2jTf3MupERjt5{9%>-cc;92ZLbx9V
z4mUCWtgwTVt57m$`nHxO2r+=tB4Y2RaZIqCQEMLM8Og1Kgr+ei-HKWtK?A}4JQAnV
zdCC_HpGnT{-OJWZ&9rGyX863~SF5E-O9i_FeV3_gw4J&Z92J4JZL~hMkV{^P%o-0f
zt3s_2ETJf3j<#L61L9@57ii0&9@2}uaWXS(vMg2Kw}|fs#fV=PV&2DJ>NRXDr57=c
zt0%5=!byr26}WZ_JT~sugiPh--!RjLH31yt#%Huns6<&M_seeQb!hEB$thVKl)bB1
zWaPZ@(oY=?l3;4A%E(MUbUZcW9?H{^`)E|fC#*XsnlbvN!$!q7Oiy-ZQh6Nr@?AD{
zWuV#hr??emMe8=DX=Z=DJ6h}+^|XziZ}JN8N|@4?8<;<;MECq0_-AA2+9_{IyK-w|
zKuLM!SQyR#qVVa!YhEdq1)uLSlGD*&nlu?*52GQA6q0g1~#l6D3ihWmV!-gzF@M
zY~~@;t+I9wqAxhxTe21Up3L|ju8Pp9X?-cD+Tx?^UN!xk5XF~DZW;HM04%}~W+9BVKc+N+}HQyqEI`HS2EV8o_Rp)b)-esWPh3j@3
ztK^4o2dSV3W+P%=WkYm1VeGv6VHRnRNspQgFR&smRLh?a}T
za=sCsEXq@&vXD%Urj-ShzFQU-RZjQKpXCR;7)#Zwz1`y^YYnKDxE=^NrrYJIc!_|>
z9FLB|`I2-l0BP$ksav3oN-R;}93#6$H?B>k)M2uC-3wtFXCdvQKZ^Ng5$1L8aShxt
zC%IgLXn922P5+a82r?SMS0T5zmD{t!J;9zdk^r7~7bG1=5!|{IlasKmE1#xOP8#}H
zxYv5t!KqL~_#=KF-(!Q4T;vU0{O=I-IK9MHCmTuqMypg?zbCMHzAFIauw8-tr@+qU=#0q7aANHgSM6
zOO4KF*nTHZTZt${%0mVx6AFx!^{WcutSMQT6Np~&@WgZ*K$dL#h=?4w*aP%xuaPiB6+efkQ|c`FHvz`fSjh9yDT($(}UMU%b;Quf>8
zOfz>Vptq(O@$wY(_V@wf>?+S<;Z|0eOuhi
zC>#L(Iu5_B^_9UI)TF^{XRLHZ^5i{Ro=H`4CJ}(f!hV{Ar3#l$wl^pi4b|LG!ZJ#*s*_maw^aQ1F|Qbi>KZ*s-O#a(*f-9Of@@
zBt7$0aFc@=DS7i7Av%?c#gGYP8Z^gb*)Jt*>eWF=3Z-Il3$fRVw#AWEGLeQBN~&$O
z!Y2$L_S8ekFr2LCKK?!2v&hUg
zLBA7jRcoO`Fk*GWrIFJ8fkfK`G4~@!A8qa9c-tCQJX(FF?nvCWHzTI1t?{IvM`|M2
zh|Vn3v+z!(1|0tmSJ1evd5BoQ9o)<}b~3lyLPuc6%5df%xWnk>u0Bl3uQ9qXralz0&M`tw~$D{HEYo$IX+{0v`{7v!nNI
zM$HFJ8f~20`D>I#k@m^
zw*SHVQJ(_j)w1!)?Bi9xF5ZeK7eDI9j3con@|TGqb)2wi7c3G!vj2u(e?TQ8nukR%Wg
zEA=!&p+nYlJp(32C`K|kcK}y+cU_NoyvI}m(|#YwO04%amG=oCUk8*iCxC3<=4`90
z!jo!=+gF47G=v!$H#r?Ns;W!Yxp_bZ*SX5zlk(UqrKHbcjDh;LpKp}gdBby~Tw@v9
zu0;U^nJ`E)Q3>n?_s5zWi3e<&yO}`KdH6EZpT^)u6=NBSrX_1c`y>dzeW2UT_EWdl)FEw=0054e1MEP{SVLVD=;F+2W#eKE;`DKbzz)0s
z0C6cFh!xNgM|17A4;MQrG#
zB+}9yQq%@-EUq|*!8bwE;^du5D!NQI%5rO8aWp?5Dh;kKPNYb
zf{%k2FP$VhjkueQt*EZN;-3_-I|({_4-bea7nirUH>Worr;D2%7mtXD2p2am7cVad
z48h_466|5+!vS`G`itTZ4tbC}(9Hqj;ot(M`Ne5v?c(VnK}QGcr}>i{)(cedfi?a)
zz_0t?^zI%uTq>{|ewaNl02ePew=f4cF9)v(*I(sfy&4+-lm@&1=|z}7xqPf3Ts)lI
zT+YsalW_M?@cP$y|D}YxKI~kPOBdws;^_tiDR_av9#8)|D8$Lr{jXzsx`Tc-{np#b
z#+D1F)bEl1Dx;*Lq5V&pUv9K>aEAPr_=Wx}(gyfX9K_Sj={Lp($OUo&Il~ljhcWZ~
z4e#M#`>z1~&7NO9|BE89;r_}0H}pUJ^;?(UeifB>0eb!#R7GBb?w7uzHZDL18__>5
zK|pS90RdhPer_w+FFpZ24iNzXK@MvHJ|RIXUS4i~TkgM5ses)*tiV9fFDe*0rvr?K
zhnJV%hS!>pLr_qFn}c7-Mvy}UC?L!sAYjYS&BqTEuo1EP3x$@O1FRCPoc^lSFDjc~
zR3bc9Kp>38R*2u0gWnp&&0%c~vgQyH;1{$42?2Qp1x0>S{fdLAjJApd9WUn}`u%Rv
zcCzxYb#Zf+pi_4Md;0tfs_)#ye`8^4US^@uXzq^$e$mVwlV1E3g3utczwgbUt+doU~
zAMFnRMH+Jp^ILNZ34=Inxq&tu{5Cw?93uR%tmX!CgKYQ(ZFp>W`2WuC?qciVZRG}%
zv4iCREY7gf`WdL
z9Q?K*D-J7u0RavHUOp>sA!{oUK5O9LHT*xfN1W@|0`ZS>`U
zuS(MMgg~4eKyH5z^gj~+{{#0I`9F*7e<%J|*dNkzE|8b7Nyy$q%NzXP4*y>O|6ove
z0D{2oF8`hCe}(+vmcOi{FrEKsgRRf7<(})G>;0c;{%a=qAN=~WeEtVVfKmTvkbld+
z|8duU-1TpH;NJrOC%gXRu7Aq|{}%W^+4X{Y1SR;yuiiQHpHxwjHD#Fek`B?yfL{UXv
zM&D=YDBIUbe<6FQYiHb7oG;+{Il3TXEiETpg0Z$bx=&`@Smojih9v_b!WYB}hlWmt
z1`YL(%6Zu8I*CpVl_i)uGY0Yrrpt^$gDk@R4j7uUlw?%fpjtVIQ}^@DGoQipHoHge
zq9p0l&GFGz?@nq5dL?w=n)}4gL%@#fYo)-n$dnW!B~MRJcKoi7O-=JAIy$&J7Tnmu
z8hMP~YyQprGi%F}lii*2JrRU9B^Lx)%xTtk85tR5N(Kf7!5x9Ye6n_M?@kG_Wc7Sx
zdsqZPOaxiFdLHPSV0nN4j)T3@Tq9@U*u(4fHA>(hwRUHri%sZ0y-Fb!2B~i{!P8T}IhvQ$o4!^|rp^lenkc_bi4=@sB2kU`lNB(lD
z^bTY@MNUrsH7Sz>m&UZo<(fB`?*+c1JGy2o8iQS=WJ=PCW~+*+?o|pA%2VM&K`Z`J
zXi}!O+wcAf#vT@-{4FAaENgrN9yuAbV!J7`gZ->SMR^0ml+w={HRzqSzf8BMZIyu
zudH+398`w+o2~MxuofY$A=6Bz6)zb~(>l@g<4w{i=t{6^eS|tkF4`xJx1J2dNtrkY
zs+_Q~=99&p6P==?qrFy5Wy4a#IEZ^lJJ3{K6Z{QQ3_KkiR1|WdrCnf}8=%v@y?B1X
zNZ+7it__y0Vr$J?2{ATuiyl*b>&bH$(X*@ZR`ky<5j_vtv;w|Y_|}8WU}Z!XSdh+A
zigL|k@%0eE1Uqf6dfm|@0YYvPnqT;P26;p{mYaQ(BcShAH|-R2hyzgKPU6y_i0Br0
zlHnoCSX*Bh%muqS0Uwct6@3;G@JQ4F@$}qD1aBFGd~~7K7{bJaEjakQu?Y7(5$^e@
zF2P8JEqN<@1MeM}xh|{=)C%a8l`!&`-11(K42L#24r-r}|mf}>S}MZ&sVs;yM&n`%h1
z2xXQmd980`WVc)oQlncYzyJ76l07#|KHe;tP49KGL_We10@GwvQs4gg@ey7)emtf1maXd=Q*DJj~DX*Pn&5soh*L!nM`e
z<*yhEZpzvm1?L4H=P9HrT%tFdWIss|!HixN7Z?uXe%sd8ro+(^v+oe6G4;_;7w{gt`(OQ#kpwXXLDo4~N)Z(gi4I6Nfug;uNu3
zxpRA(E#gX`bL={UOK{^(ywDeI%g@OhY}wQHLvqC|D=^wNHZueZCS9?ZhL3vDrhe1TJ)$a
z9eZ?aQxW4S8dIS6xa%J6+`IlUa>gP<&575yATA=J{Va99w0mOyJ7@L9r*!
z)=$6%E9KT)se_~VJ=KZ>NdT&h_$^)INLVpEiVQEvYS6Y2&YYj54B|pgDUbE*9^viA
z4b)~DwqwMbxKSG5lf(>m@$7ePUx6c0!Hv83lj>52>faPo^ruCbPfKUA%=I`T%_M_;
zv%UP>ZG&t4O46=HT1)6t)+%mYzHt(?j8S)Zq9Ja=-`B0X4NQed>r>}^iQMZOA`@}$
zD=icj=(b9PECFII=!Q7gy=g#fDEB-;+vocdGCO0L;h|56t#2>(h9@S%CwAm$Z~~L?
zdYC4pIR};MMfcQbf?j#;AZrjt{qo6)?jm%Fj)Ag*wkL+0B|T7#J8J!W5Gq
zCM=)p=uFv385tN@UGC2bL!f~DgM&KnlV_iWX{y8@9?l9V*fZ>Nb~)h8-=R}oqdT~TXMJcUaxwR}0
zZMwGKUoHFWmzSz9?$oTdy;wvIFp8i)XX@8T49JZ_<@Z`X?Tx>vd3qu$5NJ^v_ImtM
z_$-z$>qfUTCi5PT>f>FnKSK7K3_Q0Q<2v|*`RX?lLY;|KM_yvbZ3mo)@NiX@T{$dm
z6)R#KXw7Kb{_KZyp{LYiR(D%@2rhosL+Q1F0VC%RW!*o~oxmm?uLQoIpJP6*e*2sXTy1|@
zvj5Y_$l^Zpad&^ezTf(+*>+hcqY|vqn1*$DI~#V%VdW8CP+~vxK8RUTn7pr&5)E}M
z+MEd@UbgXTC>aA=F!m+IeTWo
zL^?_L9lYnzYCNL$g4NJGaQkb+{YD+mGjTz2v0R4~b`$uI5}sdMK75!JWoaWUW1rN4
z>bld?WFS6s5NcjA;!R-?D`a6~Q`@`#XwJ!Q*_jnw*_%peL8P|Z-K6K$?w93aMmkWS
z5QT$^sCz3Gf|DlU+w=pex%c+Epd3#9y3(7p4e?>txi6(JX;~Q^9UX(x*AlyV*}1~2
zbsD6maQaDBpzt~(FD&;Vbm*ESdSXW{3aVL}$kK*Bs#7caf}8Qwk9;Ck8EM4kd&An4nJ<`jI#7%YfHC&S@yDg7VSpNR}>M
zdGWfrsVSq)pPkmH)sodaN?l8pwJtQr{LB
z3?5{wX}7*@nld#trLgS`+_ESuF~vT%q@-j>qf1+CK*F3}8z})#
znAGM~jzbgpYh<-qv-MPg0y7(1A4l^FeAgN*>XD<-sq3O
zFUjTUA}S$XInXY3`z&n^-KEhI)DP|Oy*8~t{GK)lwe13Q$;OsFFhjQ3ht@)HSGe5>
zGoBw{kYBgA+l5g#Z=0Od_BX)=EoiyL0+6U_f1snS;`4AySjJUuzIT`x6wM|p@RhpdMbTFv##n|_2#E7?_;(GxfWEeG-Z1{6~t@#pm^xu
z(-xx&{GOw#b7|(5x_%F7-e7#|DO9X{b;OA}_fd7`mUSS+fUaetXI!4SB_D%@z9pJP
z6vpgUFO(I0xx*t^1OTTKJddR#SW!-h#OOWBkdIH?gutv|C>th4(8OfEs+EIT!F(Ut
zUQ&+sJUA0Kt1NV{vLb8)zQXAsYd0Uts$*gjk&u9wl$@MjR)&fdj(|0E>ZZg_BqvTa
zRIXP#IX@p36N5z|?h_YWsc4)p`(&owuUH+4D&WS7-J~9IU|;~!YHoS+IG!y=e7)k1
zeS3QgIsC%YemQUEbN$turG@okAcXhl)V(GY_C$AAoLQP_6TIxwMY;BH)y!izPVvR5
zP^?gbiwir7m`m~HOOa2XKAqm3PngM_E-jhbd3rWF90YmEb9O{If4*Bw0H&sWOTLMM
zTk{mH%D)UgdtIoJn3h;$b_|*oJ88#X`?-3pt*y=d{^ab3-_6oOXIO8qEUe&0W}WM8
z$1>I_XMerMm7~OR8MemnB-A>i+hUnVp^D+&CvQKSj}o$y&w9Z`Ph6};k^N1gRRq>ffu^b2J^Z%$a}knH|w5khybEG5HBkq=y$
zNhv8M7eBK#nNm0{RD1YFj>mB}(9xc4r5FoF)T9
zvultz)p@6a4QbDsM9q9LD&RVqJF-;NziIj;A8Og1&xf!}s_R(9)5D5F8t6*tK
z?ICf=Mij3c5?t9mBy-8R!HB7U2+%wREWCA)x_=1*8YO@lj
z{4S=HNGQ~gnx3;Th>D46%yAmEIhCV!cKAz|YjEWj?}H;=b3|>XL?o@)FD)(U-rmFF
zfQgBzK9x)wbzSjNg&`oK5rj6%YSRX$hpml@yyP)!}U=bAY&
z)JaS{v2#Y4z@71IduL}2lZ$|(#)YbI=uttl*fhG68nIhr-_f(b!f_uO}+A)6~B!i+ed@#BxFv
zNuCM^+zIFSeOI}-z9wG?Uwuu@)qWbhw`4t6VW6T`x(le?Y42`*yA%bFh1t?997No;
z-_yJeF_(OHb+jB#{csu%Be-cv8HY`vr`wq>)|-RTDfX!oN9UOWj`Ob?EcGpg!&IIL
zZEx+7R+{tb`eDJIohc3UvYEfPgmTV)}NBG5jQoMC+hGh5Ez
zUqYM;+s)m5{me(PJy`%R0t%a&eSUmPJ)2hJN^d%8ZfJU+=9B
zMK=4SMwO-criiGzQ2)Kum+Q)?OmE0e`0Mx=+y&WQJv0m*y*-_C>O}>QF$e5A;nci#
z3b(1ytY>~@r-6tPXi1H>zN=8O4_l<_+rL;Txg^bLq9HY#XJ7$1EM(d}reh$%LOI4#
z5)*BxSb*gvl+$pn!#<`2yo4i`+rn7M{iY=asn^0G*W*jwB0|=-iW}RQNL?qLKMM?<
zvZ(!q-xm63c|6?)(SvP0u^+D`tSF9WNJdnyU@IHxaAx|+2^#S6rK;xWfO57?3_7
zy6*9Q4yoW#Znk2GqOY)O=XRedo%DF;b6;Wn8$w
zAMJBykE+!uI?2;*N39cESy@8H+G0@ge)a9P)*GKKEvxqBF;@|ts9zm91q<`@q7B77
zukY4razqZLjf^2F*)~~qHj{-!?F9vNIU3QXYdnE-E=s5SLtYmHh#r81Tps@fyti(6
z?xXJ*-cZd*yMNdOu$_LEqrJ25LV&$WTX8emAD~L9Q0~T}A9m%fCnsXvT@maE4)%^0
zt2qOIcms1dn`9ln)z#mW04f+6T^)mB(7=o*M))&9on_tSaG2q@{2$B_mnN`ltpQhLV>TAv-
z+A67$P0R0z^=NLo+gA-o$>)!k*e=T07Oq8#i;ji?5Dg3>nIwnpq#(WuN7TeXr@-Fd
z#ZvUqYv56^BcLXaV)E7AM{qlY?E=Za*XuoLq3tD&}=K{9|zvV1W8=7bE^L}xP+((a-FR%YjgI;nWE=t8?}`*JqEOTWCEuYQu*BI<(){SF?PjwLw!
z6PGTFg@HjR2wC?1(63~#=wfilaNlpOPA-#YY|b^+{bf<}z+cR}9-bOqnsl76s%!Wh
z@1bpGcEDe_QW6b)w;iG*riS?259|tE^U=zexZLzny5C{j%~dqbAUfef5v$p8ydD;j
z{1qbNtb#-*Vlg%to<8&2IC>9@=!jxngC-;}lpeL#st?%(1Om~Uy*IMi)Uf5Zn=OG7
zWNSOk6rK&@SJu1l>6$gI0liMuhA$5qlYOt~7xA|3#xex13@Q!Jp6Q-W%zXJ`zt-aV
zR81irXYQa-2cqa9TgT$lwr-P^0l^9l*7Jze=o#6yudZ|tc>Otr*^JKLW*M0feY|Yk
zUV~W}R60wLrR}Av(S!E;(hm-{E8oOn)@1W7gTp%wM(3kw58Gmw05KA*1lzdPi0e6>
bpFMWgH6<h9|5?;=W7`866cF){!EK$Dk~R)>7w{eC0DLq5AFm{0%!
zk{TaPT{m@8PaxRE$`C
z?cUpayxa?TVtsn)czlxCF8^ld^ISW3drff~F-Fp6Oe>bg#&`Jm9CQ81CL6HU`L1>1
zQ9_mbhOj0=`Es#cCzkiL^hh0k?k`C3?zH~oM5JPQEmiGt9e5|onJpETznWb@$Om9T)#SUkJ0LBZP0vuAn&%>
z({ofdCs})ohKM!Bib_kvxo#)-YI@xumIZcmerRl4R-}}afB~^Y+B}uxqo%xaf)8(=
z%|O&=|`uYc;R6UK+`e}Uwyt~nKeaDiS
zS$(IX(OjPsI4}G5R?!DiXPU0+Si!}8^H>4z{p}wqDk`iQu6=3R#-N!Q?YHKmO7}n8
zhAUc+Pj2R?3SYs{ebujZ?A=9*P#3&U)ld<7j^$!2@t7KIT=rQy_FTTttY0^_c^;nY
z9MiuW)c4~oL0Phzy|cEXXhaN7Da=l)&VV6u`VN32OXFIT`Z2-a{+;MpNhfuXJ|@{*
zf`~fgK2+E7Ze*o$QgAbL
ziwP*odDSXOiwTttEUP)tIPI{`t@a$mMM{^Xv=p;}gAMNNM-4SdyO}Sg(16iJMXllD
zDbAef$Xq?$K)Xms4(svQ$4bXm%;ajj%(l;gmikE+zLqtTY@T^Do5n)34Nl6(r5@-_
zR!iN}@5gxw-2(lNdo0s+BD2Kq&!)%^Mg+~?wmUsU-;bmZ>pPrasbopVntUYj{48>*
zNY$oZF}L)+`K@jd;%A4)03XHvRMwJlx=VfB6{-j(RT7(TsJ9892C!rh^RT}#rW$T7
z<79t))1<|GCPgpIl%vFKa6%w1H5%h2e+6?b);twwdFJ1%NMzZ0k<{yU1MLvU1$;6H$rV
zj1{TSdE>{ePkzDRlsxD1+S2>9u@*a{e#y%1CI^XJ?%=ilK^Cq^4i$st6}BZS!|}P}
zHv|MsOgBm#?$mgV63(v{qGzS(#;UP;dxf9<6tImFkqpi|jaP2@I@;9L{YXLIju~o~
zt%S0|6|xK!fGaZPoCt3(T!;$EhlvNJ%5D-{KF67?%1YG3$O1TdU>UdI8U0VWrt1T?!Orr*t)2`wJ9R>6Tcneyp)Xx&x{V-T#?9)(jQthhna%C4hn?tTbEzt|C
z?>q`MdNPaOmzmqR&h86GRzsJxqLMQpUT1!aHR-@a&L_!I$24&En1IgL{H_>#5ols4
z@>=&j$tWGdBnfCGWHYI)(TKpapvvQmYeSWXSQzrzgMY>zqu@c*ar!E??3M3)dp%Pu
zkJzpfuzIrl$MF`PVx6ArV7g6=yhBexPLA)ccqk!WU`kBk0VqS`);CmG@>RVy>93l0k_{cDrA$kUEosZ8-tH>+PZ4>a3E6N?LG_oNf
zTNOwt5?j8&yDxjOR5o%Vt0I{u4w?**qRqBs2ILSs*KX;@h
z4U~7045+^%+K0yo@5M%aL=2N$Y9>vU92RPXv)4E+yW2IB-%$S)MHLbX{NTf-PJJ;f
zl@si4u1iU2^#+{qsnV+A4UYAQ+^Jr#Tzq0`^eQv7|Ee(6!#b}7DE7Ez7@d^CI;M&Fie~iY=BhmOPc4hH+-=v>*At=xma`JO)Bp`8Z*2aR{P{7
z7)_#HNDzj?b7-mcW&j6%$5Xl1UrJ&oG=x|Z{f$|w*Sef{$VIWxrN~NLXLYSO`iDas
z%H2U&RQZ518%_Xzba{jv%ZV&bE4)Om`h_8~MeSmVBqk=0XI!>+AF0Z|Q5=7H!3RdS
zF!tgE0!>EFNp(j$$7bu$u2i$)HOjw5F)uNFOECKc4za?>5RJkGckk|!C)Re`c`6=WgPk2eW3
z78*7J1J$6$vcG{0E=P+&$R@~9&iT9>iJ1)CZD#0uQyG;~q^c>gL!LVD5+zrm`$2;1
zn=-3hlucciuX`xW_N%IVq!g(I=F$Y_Pyve%kr+xRB}f_Q87dpLp1hJ?YW;Da
z)ut?n(dJ%t(cW*hT44C(YtbZ}(<<0eXHs1)(1HSo16dfNbH^XtOJYp;EU-Vtok?S3
zWvR`ed4`*y;X^AYZvYFYTPUu@HSt!U_Nf~a2>?(}d%;&p`&{PbHqHI1Cin&kHIk>M
z3)O6q65IOqu8z}M)xq$zVS%!=N^?+cp544mceP+0>pUN|NcF4m0szkCm&ylYaB?Ls
zA14ke?546TtSS8$Pq;PoG$@0Z;!^Y*t`Be`P##5vI~ya>U#x+vK9_DXF=z`Yp}!V;
zayQuPG_8t8`vIGEJpe8h%>4G2H@6$|JO#rub39Yc>#fAZ0BV%uW!z=T5?D32CB%C9
z_bywK+~fB#FQ0l}!=&Fgp1T!ytfftckRws9kTOwPNZ;3&)~?yIbdVU^-YdAnFk-=x
zVe8{aFejm-GK-MvGrk_@3a8e%ourmJi=_{LHj#!;$dF#fBSpwwDOM~laAvmzzZ$yA
z8K#lNyn6=D%kN;HO~s+bDS;X|QO|WyFvL%aC0f@g^SL?WUg>Sc5>vCI(MYWpX}qQi
zjiHm?e~x2+eu!R;=s7H47$mBiSSLB#7q4c3Bb_`4)29t?}0zz
zMKdH~jbe|3SF4zi;AvV;;u#Is}l5N-arMX(qdS{iGOC*q6J&u|2P((!WWrKACi(!s&6L52L|Wz+Ke
zYjuK%EhDCB-HnQB>#FC~c>Xx=nJe1g^|`MFAn9&RNxUpVz1!!n+X_5aZFmrKPUBaD
zhVAJB6`;Wr_2qAimX7nNNCkcij<%bRQn)+`sX!W-G2%qKNVTmNV6U|vA;1EJi~drK
zkdT0O&Dpj?elcS+4U%W2?^Mqq`JyjTFyEsICtEas+B>^RqrUVmaAhJR`m#al35
z%7a1}{a~~Gp!&?Ox)?x&hV)9rc}X|E)z}O#2W@#4-}FoA%=?5wziBt?sm{KI3F!US
z8MDgzVi_CCnd9>f;XbvObup^&vqBk<;fII;UkbxJ29rlh
zl{VsGK3DDs{WL^~|D5UT^YzsXim#G1UW>Vyg9xdA+yWp@O~`k`gmH?pAnF!xEaco{
z!&=vL9g%&9JrRhHXT~o1QD`(gwez&cL$ci>RwxO*MFHydp!)Tl5a!Qh>x5Cd4UCZ3
zVh|mY1DH<$mQL5TO4DUTe>-?FOn`UX+!}XU)!+6cIVI;ENAGFn$s=K15!DhSJvy_Z{u*Y
zk~qf@jsb~Ouo>gxRT#$inUN=?P@`D&FZ&aLKs1Ze!f>W9`E{=}b<=mlJ^XayfQ;~U
zo6@6*2=;>QT)M^(()^C9O`hnQ@ADA@AhU@()vJG70h}GBaj@#YBWfj5v}-1=#UM
z<3k86v&k3vSTD(@rjQ@vz??zhI54{P%=zCoi_T~`>8&QQ-IR4)u_|TBI502V;)QW4
zkaE90dAs}?he2*5K&qDC2+VhvT-E1-lzYjj?;;J9p
z{~SZzr*H?_1{|^6B%-Kcqmp`$lhOgC=hJbu=t+
zs)ISZjN6ia5{E<%^#R3oR8EaA^-%1b`KGj
zwvqp|TBXNy3{4bj-)u+>mbu<*`Z`@EQupmskk_I_0KEfiZxgizWQ#bFe8%3S=7c_L
z4)*!3zq5y+d7N!6z=W`sg4Z{90wWxoZKrKALAkxHTyMQo*-fsGo`a<5k3PFo5@0C*
zX{~!CoOcx;=AyIm`im=_Z6S<*`p!Z%hdK{K0vigQvK?o_6a9e#)5NBxJ)E|)&_Lp}
zoaqAFcGI`nq2RQV*hK1LhD>o7GCEwRec{+{C9KF0uDX$U!>>{W%F|G?*hXldp@zJ$
zo`|#&kD}a>_{AyndNZcosEOUxPK}d4K}Bi=XGER7?K8DO%DWTK-40SX~CjNAxaNG<^Xq^KFsS&$Xg+*w3-HkflU-W!sf=JTInUdPhwuxkR8*1ywqMiQHlJ>uVBW*n6Gsn8a5MK|j?8
z)i|qdk)l*yC6QC@{D@}ZdLT&LH-59#bUXtso){~hc
zv;`%>Pjr8rI#&Yn2<5b(Mm_?QXLBe|_~OMimbT8b{dU60HMIThnhX$q8J}EQP>EjN
zPSj+bbP#OTRLb2Ae*$3vg*_Q(LvvLBT27nIG47{AV3N*E$a2QKtNJ%PDfufF&yi+n
zAJfl333vxZf)9laJAt|vQRGv$Bb(ikbjz6W$h?V;64O-Y$#nRHlE+lED>Bzh)Z-EN
zor2i4eEb`?ORy_QAD7r<)4Zr`J!;iX;bu|oE>5*Ppc^R8Q_0V_$M;DDH@8gC0eOjr
zZ<+^tmBy9JYA8RVwX23$2^%;euG$T{w&W(yNj^EFHg1W4wV)YC)R^Fp2fsrjE!IBT
zg7$pv(CT9<;o^vYVDCCKZ_zPytqSa&LX0+&7b-5v)KBlF}oXHQ;_;zg_)
zGu&!eg(3}-n2y{{t>i^gibVGyOVJ0c{9OH5WdoA>j1964Wfso~rs!O}O0s3++|qm&
zyIGI%y7%FXo(7UX%)vVxquqHXv{a$$1;s&_yOOm|whK3JiZBi$Oa)UV_Pz(7d9t<$
z294CB7kiJe(ww!bUJTMOhM1(U)@8R`bln13hwl1kg27ZL3+~0}{&<5!?@L5(zaA&y
zI9$3(EaUjh2zGYaY}P?x*iW<^qUn3(TU2%E8nCda`T?za$tdL+5$zhaMTCGUZnl6I
z!n+2mXIsmaTwBtyU^MrkHr0#irXA1O%*7pZ-@K2QYJv9(HGwj>u$(m0yeVEH((k#M(*w%d5?VAC
zD2c%}^Rlc-^)=OX#gqv$auWEH@q)zkf7*8d_Pz_4KL(j-u!TSl}<~OAK*NhnVcIB4y#d%}K^;diGVu5g@lVN+$#t
z>yOq&SHRETnboGdAFX0AzI^MYq|coRO)U_3qN^Y&i2N>-SFm`XkEnDKX~$b)+#2TU
zwrzPRK3IVP263j;9I$IiLiOK^lm8fTWn!sRYIfA6=`BFbKe|KWR)xfr#&p4|1xlrQ
zw(@0H_hBh_c-j1%sE4T!rsF!SBraKIUM**FSB$S7i4G{#rt12Pa6IxWKHjCv8yDiKZt)s*{X3Nsph#X?Y^;EvNm8JRg1BLuh#R)~u^jrE8%iqE
zsk-)l_fg%~&q{}@UbE9Dam8HPa3fl_Up(sb)8NMj-yMt)bj2n~%H2d`zE2pNlfT3}
z=+|1aLrkPDweQoe%O&(I)|7%$rqbH|xa_DxrOpjXW-Ktn)PIT*eO0J$C9;ToVH5Zh
zwt_GBtpwj;*6b9%Gv)CZ`uT)pyhn0RuS9LDQ-r6RFsyA){`!c{_{%)tl&@%9pt#hX
zuP6ShdIiMR2FEXU*Q
zg2@Vz6kob4Y^oy{0=d-o9(`t!NHrVdp-m<^lJZYoMZfw)l(Ci|jLKQ~nWIR7>s)E4
z@0zTn6qpQfa9}UEQtl#hK)3F8MA$w1@2$)Os2T#vz~#pF8l#_HeLL3bZ*p_b$*U{m
zF%R}>n<|ZdCGSzkbdF>57VnK4qi3~Jr?nsa;j%q
zBxlH#$z?(OS7$CWEflXp(8m`Q>5!}k{5E`4O_qS^8caoXi0-h#A@jDQs}eHrOn^Bh
ze)<}81uv#E+Y9^PJ}PKBYYIcRJ$L4$QYFdjMicCnp@n3A_%>*k$T02%yy<(+hgW2-
zi;Wc07+U$4w&N|@)0o(WnQ{9D;$#n4dIWhzPPRX8hZ=Vi+Lb#@=juC=3KHGOHYcLQ
zrVsBL@SfR>R|YTwgp>Uqt%685yP4U7kyrJ7z8)+(uXEP3mL>yOSb`EI@MX8ohhp|NbHekA>`5?9LW>U9$)Q!DYH
z)-a&1IZzObT7)U-W=|unt)q}?B}12`QSn_vWhLvZ6sJ56CT;LWZD|NUtECVLLTPeIGe%O
zF$x3@B=w2j;rIs}_lw-cD);m~U*Hjf(PQ&o*3c~9%uZkkrY+f{*MC&DOM4K!XX@}#
zwn3}x?XGNL;B*t>FHf@%C};gRb3e*G&M_lvxM9Q32sF46-#4X4sDLyLhaR4Ly_!9BF$3W;mF
z{jMd-uhNuQefzGVfQ|ZDTUj;KGRt8
z0|21HY^0=A<)x(leg6W-OggGE56I^Frhw~
zpDhRY^KH|Uq6fac@zDC|Cj*eUGDW4v=DKdS;Dj1GcgLW3ds-+w{J5M~WH6M8dKUGq
z_6;BNCfeqKlHy*Q3aO=xJf$cdInRFZw*Xa$aO0KAS~tuHZ`{cxdF{URyK|zRHv<-R6rXG5h@)XC3YpS6v)~}&c_9$
z;iIf+?qg>zU_m7&iY)9U2mx>axtRjJ9PAxk1-(S5{@@Bie*dm!qXPaRakCSl(p6Fg
zN;$cJfZVLytn4f@UN#<_RHDd0VHXQaL3L@_e?UM=B2?CHZeT$+HcwAaR!=TgCl@O=
z4gmoHHg--nPEHmG1&gbpn}fr@ak#q4c>GJ=f6C#i3Axo~QwO;^xx1KyWIRBQZq$Dl3buE5
z{ku$eSJ3aOKYH6+Sh7Ks`Xl-8Jg?=IRR78I+l*E=4&Xl=zp4LDX<`0PIy&d$Tb$->QU3i;sT;bIZs;o)U570S;4ha~^gUOFnK(7H%^TJByha$c%-Lhnv?F#AnXQ%Pa5)
z>i0MZN~p?=He~?f9TZzgHHG_ca?+iI=OiNO}+-m`LEJn3zEIfA5#H=e-;5jQ}e&f?`rA+
zviLIu5Ig?WWNvNhXa$0-w*Q!F|50!ApSUqQKerh>A3uo2lHJ^bh1-IIokf7#jEjZc
zoE>Dr&1=D7!NL9S=&nwdZl0ztAPFmo4?xBlGPVAUGm!p|_c8oCwWl=*;v+2VT!QTE
zRDTUGP?+uag8Cob6aKyAC@Bg4-2lSBmn1>?-=3%84hGxXfL#9FF#q8w|1WfZdR6HI3OY#2+;a>=EY|KH9u1^1z>VGHs%PfD}cOW|dRR`J6
zAloC`KljIfxW(_8^MCR0AMW;lQ33?|e}w$E?E63F`X6)sw=D4ABK{xm`X6)sw=D4A
zBK{xm`v1*b$p1QFgB&4&o+sq|Y%dS{5pwp1H&c8q4fyr@mEZm`1yX|qmeX^EJQqFp
z`wb;YpXCLqL~xT=l0n#kL&k?j$h^0LJOWKpD=#gf>9u&AqY}H^mp0H@c{nHXY$Xeh
z)Yk7ZQK?b5iH@zi82$K_RKn3%Pcbz804lgPp4k~lGQ^QyxYPAr&%nNGN-7vy@*K?o
zC_}o7y_3AKOa;O~ZQ$5W4l!MRXW3G=N**x7B?5EvX0GyMYrwVdTN{gzgKtLHqSvcs
zKG)H}?`hgPI*J6WPxh|Fzt;ACw5yByTv@AFQi@R#1+!mIYpiVvKl@i2J&N1Q0|@#6
zwc>1nG0>>hAIod4-ZGMj1+=kg0|R3sSOdTHqO3#L0obs+;Ov8pXaZ5Dp<4i~i;5Hh
zcN-%lPHn4cNg3HcSUOb29=1~)h>)NR+v>gClK`wHDErV}rhR*3Wv9Om5@cnm5H?y<
z$C1|`XYwkIS$=KjH1b){z`8*h3OCS;%lBnNI0(c~#a=>7FZap;#;QZRdK{YDqx{%a
zGSEJ4>M{>COiWC*(4N)Q4QtOQp6=)CoAolAqi|p-1Dbq@j*W6a0*H=DfvkZj%Tz&r
zYtfbj{vc2Z6*#7U1E^j3wlWHVpppgK>92M}Nw>U2VXP(@9Ha$^sW!X&>|(xU{S(JA
zN!*yG3l8!{PPq=qo#mvkjvv);
z*9(0o(&G|jkm_mF@f0KUyPMdB7z`?vQS>rhv)wD!bY9x%PYnY}!b)j?tdJmK-0wZ3&L{dq%f5>n4nu7Y8pG=I13Z@XJ2!zVG
zh0T_z!smBCNRsq*k?Hcaa+G2y-fDX9jSV#pzz)P_2P~ZessM;_B?IG!S0Qlzi+$`v
z+?{@(z+)fj~lQc~yK-PMpeUlJe-LB(sE;bVk`LUE?QM1)co*aBb8uG)&Y;
zuO++Q6Xc0o^RHA1{A16$d?yFOm_+pUl1$;V#0ol9ZFfk!wo!_odnULYjF6U>j33*%
z@`{?hQ1r2ITYy*M77-@+VQ?LANpJ-SVXSpj+yqV=5DN1KW4ytSP+pPXu~F^nHm_c9
z2ZdheE7JMGGZ563_`Zal%jy&St|gp{mRHje9ybYJz7|n5ulPR7ya0U8ctjzZwU%rx
zWugk|Sz1~e4YzAXxz2=P8&bIfa1qc%SKx(OAapBkkhq4*YM8f;Ru=^oaK35Ro(Qjp
zW!hW~U-BIY88zxK!_Vr1V^9ulN;N0uRDltMALf`C(GHrZ!2_rQlU$cRG6bBOIx?ZY
zjt$Yfu6Yu6a8%Ub*Qf&B;&ySnmyIZy2^93}5MN3gFEwP4bTvg&7;92s3=#?$WJ&!}
zd|A;WNd2pq;zf0oWu1Vn1K;p{j88c8g79as{#6BW@YkUr;E;MHN7nA0Bi8IWnl
z!|ODJ)wn?9MUT7r+}YSL;-C*B8BYthX+`*B%4inhsa_*=e)k&_ZIjuPxo(W05_JDL
z%_ips;@S;o5<_;Py$n6RQ&J0U57iOe?}vvxbH!-`Y9+Ghhp@58%rmC;(B>RhQU;y+
zS;hn`4>{mrN79D=i12=!vy?7%vRLE{90VZ{JZam(PZQbA!uhsFsvch}(TK@c^ln@L
zWdJTAaV(K;t^db&kGU7^aR%HO36IR*T2EG(jG&rP#1>BAtaUX_N8y!?eCP+6O1Dl9
zWMu+)}nOrsNRwu`?9eEnN{09UTSZwk@H+Ij)D--|>IyzlT}{sI3W^fKp9j
zyFV*pAoxc3Whc_faAfG$CqsX4e_mPZ7y#?#2GwU-b0_4_ECkl)6g(MoH>j?%q#t<-
z@w?wsPM2|6^NK=YNl3Ilz~!;GV~7`Mm%(~^3h!fzT+xLGJZ^PLzS5$1>^}91?V|71
z?eCdPk|ca>tx(s~D)wN%-=CK-^r}iT}0Mlwg
zSMl*(PQYUp^lj=iAAVek6nlS{Sj%p?wpsyCIN|K!^-;YEpwsKT{<=!ZT(x@k_D4Gr
z(!Boiz504?seVq!5(uwV%qApwiN6Xjd&G_Is755GV|8g~3toGYBoZq)2e=`>ZT
zRn~mhpr?EJVls$<|MM<51cg=}O*$%%LyhW9SU=zTF31gsRv|xGFr8q|<=nltY8UQq
zrcB3ul{vU=juRTAJ?0hiU@a&EGZ;EDxK+=C?f!=Qs^-CS)w?zCwd>gf?ycz~3wQb+
z2tfo>Z}`CP%E090aY-t^bgJ>=#$cdI4fVFy#x81J{cXE6)rYpp`zoS6p0_9s2?P{G
zXX9@nY5uMBn>U4i!vir1uwIevqjX7~FpJ0EVkFgCU`~8%IO^v2>_;iwf7#J=NgX+e
znsFXS@V!!%XBpHMlbOBPB-T_%NMfD7C3pW-W|CA!-Ok1CF378RYpfqMFsEKGY!9
z_esBXY!i6kn}48j&W#+i*)0Q?qjA2TueO$TQzG(q;aMF8FA8>{;tNYM=88~K!duv81=_@jPwj+SeVNjF
zWrYT=Tr4e{-Jm}523qHJGaL>m){SO*I>)wr6O5ZQ)Lfs7ywiJ7F~LL-N%Fqfbg7=28MlodJL_puhUR>M1AYgm(YD*BFrIqv-w!2pteB)uSKAk
z;;H@lx~VTXZKIaBUSA6^RyzrQ&oc&p5BnMJdk9iO2LOlRQ*roCzdi>b;rz*$8SSEx
zq6j}dc%<`rFD>8oI`k}nXT;^{B&v4TKw&+8JVX(l9B28bK`nEZ{f3asu@mXCO2V)%
zV2on}6$rB)f+py^xgoP};7ij%F8ngg2zM}K*+!SVviCKODl;+l2ZGb63U8NyV^@*W
zSyw>dM;#d<7cFj87Ut33o26XO9-?)x(_4&;_{9(>G3-20h*Cv#_!l>0dw4EO!1sly
z(Ea8qh>xXK1h?^iN6eQ_J{6|f%Dt49R+Yyaj%{(9pF3PkBss
zX!U)&=PIZjaornf%nt9i6^)=j&QbU$?MjV(RT%wn>{RDH@7G(7Pb)PE^U+3y@P-UM
zF6L+oI^xEy#RnhlJ43=sA%tIr-Y&x}iOwH2#Y*gl$Zd2t^IwANTUzv^j}>R^@N^1W
z4o=&X048-yMg{a1Y>rcLoU%hgY3k8u4_p-H4devdkX;L@&qKO2@@zG8tiTNpnXK3<
zhq~hE4ZC(hwHx8lajq(E)2=NDvR{ic!BA1SDx0W<@fc;dT&Zd@=($n)v?r50V6_C!
z!Dm6!uNd07KS-*ePaoR1bPdnNkXW(({Q27Dj9ur#HW;#TO4>ntzo%rZS`v9bTAv+y
zfSMifNMYhY>>pRbO)#flaKHQ!5_&*;S)1M)Y8BltvsjmlSDlrMSYdu$NQ7`4{O~~-
znKcp}f^L>|J;&euB9Hsps`*EE8r8HN9yh@(pz3lN{>-m7TCcaJKc+KxVC|$X>_hee
z3C8TX*smK7T+~RvBMNRp;(lE~X#a(<{;{LuDHV-(C~3~(o2LtBNT?Hw{2`76V8G11H{s~%`o00~v^(Mm$e0VP_S0=T?B^;13b&
zt|Pp-#@x>OG-@bf#?Qg?fO*o?BCm+;C9nqaZB|6pYFb?VvXn6;cV6c)a7-`{`JkT(
zDg!Dd__#4=w4|hFtiv0z+%cmv8@_d@6w&MG-au7fib}4L+w8GrF=R_1*PmymtPj1dOE91L#`3G&D8i?*n4WNXOOG)TLvLBt^y1|{u&G5m$
zdn}CU&x)7?lOffJ1fOfY#%e)^`K5u*Lgu73&m{N^;IoZ=;aHd
z2~5=GVjzzQ_lJn;Rjf)Q`avQ1xLs4-DMcv{8o6QdO?Z(gU;Q+pf$Sh25^FdYf5RG!LFhpjC%9Ls$NUIviLplI?xFgzktm9K$>ut39_l
z(z+I2-(Dvd_C1$A)JYM`7mRX7i)+JfWB4%F2>=ieuYG$k`pm`lW!KWqn$-_=-IZQT
zxt;H^;hI>S+%bc~8{JW2U#j3J8vBbi?`&ZUIz2JeiGHvp^>JMpkAwr>o4zHAc6PQb
zOdr+hAnnlIO{Ebn`bFgrg+{W!3f3y+amP
z95l{IToz|4HhKM2C=VraHy3(rQIO_B`G__$IvX0QyWzMjC*@MIe9UR^iDM9I9pUl}
zkQ4+7nT=#?ondO-gM?{EXEmDYS*0dq!{IS+YZdXHE+-k?nldM;@GN&896;Wj9-f08
zNRk8!X;sU2x-J)yE+;$v1FBzAc{R32Ikp!+uW)>vi^)Xb!8g_EgF|TotuOFlbQ8mv
zGsh|!5RtHksJZ)BrNqAN-r30(HPgw%>M~dLhXdv-k~QW2>wB
z*B6));Fqo_b;yiT)xFMw^x9rRe!+;V`t+|%jkZuLNRb(lr^K^*|7f*)HAkH@Fh21L
zN~)VPq#P=L+?rgrti5`x6Q$XU@x2lO-b6*NJ(u~xP(LKXiwP^CZdyvF3%PvnsZ-r{
zC*M-A`}}3J3x6`#e%5jQYH96T4x3O_dI{ZF#HrnhU+Z%G_?Z#`Y09lhy_K9+;XgLjHoSOKjNTFtm_S=aTr
z*8kRQ(EDUMepcw2o~r2+veE34KX(ObFvsl5?RC&{iy^s-eR`2dCa&7rU|jZIgSDYR
z=(UHi)8uE@J!6Ie?uGIS_X2IWfMf5ktwylZM|cHv2#X)+ZdP=sei*0L=J8)$O^wkU
z?oSk{17UtUuoUJ8QNGo9?RPDVO^u}dtVes
z)!?_!oIsD9q^WksJbi2Lc9NkS9>wq`sN0`b&d_L$a)63;{!tEstc|8hbM0~*hm(#*
zP47E`Xrp+$Bs+kvdOHf~gThHVV-~*{V|c!#RP`S9M9P*$4wa%9z&x1>)IcHBR9}_h
zMXQ)HY@)*1I*hBNMxf7GkU*kBTf%^((=3qkp+m=JZF1(Sbn!^+E+#tyVXu8?bU5~Q
z8Twqzw0JW@sD18;qBQH+O$Ar`0j=r&9BmATR8x^1%1_-71^@z(hCC@FVkDex+@B*&
zD4xtgd!6a>El$F+3=3MqK^{}LTCKyK@BtJWu?P8brXQ3a`TS>lvBhihbIV
zy>uAREeeHUI_cJ}#yT{k$6~C83!=C+)dwyLr;8EH>x68_cPNKUMV_y?hD4ym0-n6Y
zepKe{(1(hjT)Nbj>-
z@AFK6xpy@^5q4&Z-_9B&ye=#Z-{0($IcKccN_?zlBsZi|LSsb?VVx?>e-QTK<8XBexzFD*(6@C*`zPM8*x`)zhqiZ4)n9so|nBWG$`M!s^U=`fsx;>L?
zyKz9_8K6VAPsvt%xlzL7KoG+<;TnX^@>VT{E{%kdB?i)4(y^*BrIW2A!
zU0x}!njl6CEY*$;3UNVRNaye5oP-w`aChR_x%55CyUVjEZW$}f>m0Lv`tQZJTSL-JoHtG6sZ
zV|wm>1#y3PZK8xQ((%z3U)rCZCuFCe7@K9Kg7&jC6Eojz{xoXj!5gLAHBls(bNRv`51^Mu3G&A_`p`*vg**b*8(iZWBiU@FN%ypD4d
zveTD+-blbE>$*`AKjK(9Q$X~RFAM_sjmPmK!WAT)ivqTBOHq6UFuK#O$GXm!4^o3K
z3f<{noXvxz{7&uowc{rnp*j+X=8m)=F=;pz9a@QIOIPx!B@8!AeuRDN*?r)nIHd0w
zA7Q^CzkuR@>{lU4ViY6hb7o*$rM8ZZG{)^OycG?eE$uR5gK>I3yV0SuvTK7(V0VTlQf$spMi|)29EV8@M?g&x9++&XYCyx7`|J7eY)f|
z^6?NJ)M-vLS_#1A8g9wF!Duv%JZPn?XV@v15Gj_DJ3YbV*-@ABL87FQ(dpgB8*eWr
zv{9lGj(}^4(JCmcRtll3trs$8>E5OVBXf{PtPU}fUhLQ?Bj4%IpTK}73|ug<%_@PJ
zi+HrRs&p@Ygti%89$K{h9LSFQ^`PXELNy{6lIs>6=bD3o6aHqEpnt4nWz3ZrVH8bu
zyzA@xA~o?l#o7#MQx&=1d~Gtii`&*@O*{mEsj{TbxeaW)rI}Z)_DfQ$TRkjv-Z3TY
zHJOF>9s$>ebHw(iy{;lxJrQA`rNu7_pVereQHn9nusyLi1SX(4sxsufrLSw*uy;{T
z4vT^!*H>{Lj_tqTGd-rwu!6lH+}I`3ZO#1QDqe6;qnEMIssS!|Sm7le9Wb%SNVn=@
z&T{04)a$)KjXf@y@IyWFTna-O{Rr)qk?6TRp-0eP6JjVn_7OJ&FSfp_G)DFktP006
zRpqah%GUCpPR#v)l6zGc)*J~RgwPWD(;I0hlZW{`G8}u&
zS_C<4&0dl1mry3KRw2B%5=wAT3$702@#juQH*X&f6GBHp2Lne|508$?A$c{zIHrVd
zVia>cNJLB@XLtAn
z81!{zfcnAbh+`*~ia+URdw7A;-&Y;EHwFO`O=)6p+x1_Dgq)m0?NSev=t^+O{Y=m+
zf333_%sYm(H--(lPiS6qZk1C6@CJK3zE=47?viZz-i&NkAAqY#FZvbY9bd@Zh-@o1
z`)7{k>>ydOL77Y0lEHJ~56<$v5jnYj78A!Ug
zLT*rwfB8LR5^<2IDX&+ABYIYm`wgcc_=VD93p6Pf7!@P0hB$d&Fyv82OW#gCCWsYC
zg$sFMh<;`FEsu%*($@ARtL#BO$dCq-2yPN*#crZTFa#1HEhoXC19U2lXHMHLJ>HHe
zyNx4nOv-Hl2%K24D~$kMa4tz*WCH7es+t=0W=MuGKBI)*Rj%Vs@_9c+rNR7;b)udK
z%ZZh-WiFl={0AMqDUg*>a6Sz3-+c)1h)yH{tobp~h#ngNgyN)7M6dguyxDj%A?=K*
zbV=SLd?!|80|3Fe47A5diN&T&_2KhC-ndMjIR}_d^qsN)FO_%PoY?nsQz~L9*}~rH
zyXt^nU$nKglVb?prf91PXzo8xz=F^Bsh|u1d36?CtZ#|RzKwd^!xP63GPmC*WenofI_OEu)+!M?j9^ifDkM=Bm^fwa3@G`hv4uk
zIj6f%zuWKL*WdTvzlN_iwbmMQ%(=#zOLlE4LPJd+^YOFC0000}Q9(u%{`d0N3k?N+
z?HXgj002mhy|ndRHO)P!oS+bEkOPp))zb+`1%!dD0RY%sWtIVyR4h|=xhC?}qaWr%
z#I#IutGY
zc{P2gZnJjh`H&NLu`oS7e1kcn{JQt(*6?)qGH!bD25Cfk)8N{*K-d%#T@9(b6!yP!
zFPIJqlw0@w@QTr{8Xx(g_4_Nvt&uthaJ^6Nrl2d>K;8l?L)eaK{b)f%qk)Eg}5ki(?RU~g>!R1PT_L<(bgRuzE@@F
zYF1v?vy-Ri8?kSJpJ?n~sC*-ZO?LFI9=Of7Ex4v&aP%fDIdi|&RSnxj
zw)9@F=cRSA;w4C7g-q0q_Ujq_J{kNyA(g1i?v#t?`?keWeHcoRG`rcn+c$rC%_v{4>wwm-3{(nlE_1
z@}9ERX3koh`h_5?y=xsPuc&NaEJ=1>0BxGMFFIaGm*qIEDl+ClcR+7DYJUtRO)a5OVPd77O*vC;w{A?BRUDSLd*V+a2({qlACtxt<358th4s$~I
z`tUdfCY$lzyNDk@K7S8xkQN&o=F!|nvdO{i(>tocTx~sJU{%205v@PSB+m)w8%H?|
z)-n;#F?4xBryOfsK(j(M@-c%I{Y6(LPQ&@zYn76o*TXz%w3=?1pQ{V6xB~6z81|dw
z=fgHDT*}@&663S(Y;SJuc~Zu>%)DtI66FqPpKGpoUOcNEfi;uY6ET6M^S-=|RcFzQ
zI|UI_m(BGHwSY^D2GV%R{zBx7^q!*6ZCI9>Z|Z*B?JQM%^LQKJ)_~}X{7DT|{sPeT
zp_UQGl{~4O>q5HoodUX5*WCN{YESoK^=j2$L(!4)$^Jpy9aiLw+59B;m`xdJq+Np<4Kiz!l3gs}bOM5g~%%9>Dx~-`(yno)<
zzI)U@R_k8=St1ygTco3It7Zyh*btjCpM5{&JRX>8v%iP{S}6btT_-N=*x4p=Q`P
zo#yxnCr3YqN@CTKb8=mo!s{pcU(Rc(_n3MYlO)V3m4Jqs#B%)vw@kKO-49f9-*|4q
z$}D64a2ARn{M8n&^0
zV?dNHrLji6CcFPKwJ>9?48bH^I8NZoY~!GcG_tOGDgdRqB(ZF7pj-nxaCl>S|Z8x*KWsH
z{g>ZR^chEqY7Sn3FdmuM*sMQ)Gl3^XOfqWgo3q@U^A#&7L)iN9xTcE=-^F9J{3w&c
z5uuEcp*?_h*oRl;S1#EcDm-J1WO>+Tf|``sGnDu`xM~O{uH>*MEt1RxX!IrBVTj%=
z-HaQP+;?JK)e@zj589qgOD4U*Fd!Z9`fevRB0I%~s7(I}rR8;-RU6apO9SkXg2fE1
zz$xFn_Xi=U!Be~aX}xVaN)jxBzI{TSbGq|qwr`Cd=S$08LUp6?VMy{p2(OZZ5wjo@
zlSum~&Jvvlih)z7t!$&U!vnYl1w}neD@O&d6cY$CxcPFiH*E%NS>LmdO3hxs%DesC
zh$)BEkQlQ6tW9aVFbZKqslOxkER-V8K3cb@LSbilW^dP$R%_LwkvlNwMTZHfLw<0+
zhH85Vu&EY*j--P&QSv4%Zd6~Eu+zUZxdv1AC2~IEZDA?;Agu(Ac?SMd(h0LZ@19y~
zELW^aRNsbSjP0X{amIIMf-UyGpLThbOhx4Bl#!l;p2#=bEzD%NJ1DYOB1;B2hoj9A
zRcZ*bF}_t%LE|KE)AV4qpnM+`Y!D!#ng@+pKJJYH7z6n2d5F}8IL>f>2;#q&6B!>=
zU>~eM!EID0$3#+Sl3)cu)kn!6J9_&@HlSJxNSRj!nuv3|;b*XqXxBxF?Kk>WR1H&DaVtJd?*
zr?ym|{M1pmsD%#JMR27aS5b`EY7p7&488ct;D%%c9KjR{b2@aPiypEuvIh$_@3wDB2}FlfHGg&pw==WBkot=quW3UjJtDUrTRpco#O`A4ih@blxZ71Sp@%5Kb_cBDu=euQZ@NDx_x$w|Mi(j?0KDKJc#LUtT4(@6<6`NNvdP4h1ZY>;nAYNb@Y!makkAOiw9x6_0Q)%6_y`6A
zp2x{RYePyt0kuLaRbXRSiio!_!gyf?v664U^9ut81`PwYo}!i|)T5Ak^q@*ogLrH0
z?_I%?w?QtzlHB$=Az14ysGU-0#Q^#;{>hHQevNq)BqFL`BLc
zsy@BO$19qUcW4)1r3*-A$$d$1Hj9%3aDWlH`WUO!uTm6|(!{8ZYaXvV65dvOs|xsJ
zf}0cdzOs$e4ksgEa<06t!Q^hEUDlVhxRmsi_I=8aGK$c?0h>dr6>h~>^J$w*Z+
ze(2`BGJbRqVYJ-jLD(Qs2_*`;s0k>qA+<*$>FN<7e%QYC=-
z(uzA};`Li(#u|o?SXhdOl9*8=IFUwiPSSv&+?TN`2)u6V`C48n-H3f4#5;Tj!<88(
zW3p|E+VA6L#Dob#=4N)tYR*m*>j{C2`+clNbJ5H+k%k#aKQ|C~$ndHfaHHb!^zevU
ziWLkjN>RZ9_}d;GJI-2Kauo}>c`pz9j_L}kL?@YSvNF5mmL%vUdhBSrBtQAqaef-N
z{2U=1;W2yxmBy(^dPCj)syY2?eDWvT8EEj16;p7qP&=?KJVa^Pj=;RbC*6}>&gey&
zH+#?Fqnmdsg~M0t)k30LFx7zm-t)f9i!Zs#{cKChTn2eHRN4bnZ1L22)f)N|edfkE
zuX&%Eh$u=PjZ3^Urt376AP`1e18g=ez2_`9o82imnL%TFo>>;e8P)ATXICNMg%}u2
zXr5okZrkZ0OS^y4=nrFTVb^x+7_nSf@_sr-n4`UiXb30l+
z;C#jjxu!-V#;tO!YRr5^U-F~gZY#5@s!A5WK)|XRr@`ptQGGlMh1yckPt*@8!Cj|n
zh6lao-W4e%@4iSeeUc1Ym$DD<6)oswiv7O%I#=W_syvX5yOSqwn@%c&Ob{n7j{Y?v
zcRFgBoab0c^hM8e%1nZ<17vxdu3tAKT8Kzm@P=6X1{Yonyx`UjFp$I*4)7oq+al_u
z0pgUsMqds4o^Xj2d3s&S$NFqA-j-}vKKw@*k;s!3j>lx%IKbW1Pv%#|~B)
zFqUW%LO?cMvj`pEJr?czC5(`vkT)DuGH7%bk0+dw*0%UcBC9^EEaR;6Tw{iQTrhbR
z9>s}+%h{&e94@}S(EXThVoA|=6EH?KV)o2CnGo(a3oc`&orw`kAKn~
zLh?s-NnVxkmL=qU^s-EGXxn{MV78IvStY?#8{2izJvC+#VzCg_kh3}44!0i{!lmR6
z+1wDOx79ZHkDJU6&qOcjBdmafZ&Gx5Qk^W6T!N+8(S%m&KXD)@aK3zU2Z_C5Ja4C{uy=GR@%$l`_h$WNf_F(#N~^fi
z>CmKrz7D0X3#A;faKTB&P=hvw?G#n@^#nJYi=S;q89|#5k?euKkHHfqEu-*$>T^UD
z<+A*I%Rxh=+IV7f$P3!{84f1cj3QW8MWprmdE=fywxtrP`pyt+E?oxkY1+YWn>&{*
z4;jnoMDT3z>7hITcp70}%8u{^5OvKGX!O
z))o)14rGS(38WKu^@d!SW@<+X$1yK{df)7{8Z!4;Gl#f7{<=+Ks6}eWkFDsVk)hS5
zp0jL5py{X69W`Pety97M)l&MPo-z)8+C@Nq?FMqIxX#OmrpP+KGb4g85BZTedk;Cx
zN`to^<)vz;l)7Ukd#9NM^cEg*DA~`s$GK-bnxdnro+Qf5yPa|x
zun9<6BmzepMV=O=z75+lunib5u}THYt!~C+hF#M&3*Vt^q
z1gw#3VoOcAhCVtptjEmVQL~iweco%!rF-i>c;1$cXiZo>F&XLufD2?V?1hhN3jqD@DANzvhQy|FIg>`N~k~tMglO{TH|!Zg3Pc>A?B7sPV}XL%cFXU$L23mN)iKey+k=W!mq4oAxiMU&2#Jbs~-Vqiyqn@m2W
zTF;sKgFLi^Fug&q&i6zMx%N5Wv|L4|@NrTs_R%-CA<~S4x+#C_%P^X0*^5
z8M-RJ=Pe9uNWl|k--A&R0Usuxoz$Ue?KG>Xd{}JeXr&QKs-qdcW8iYJLs9e2>Mafq
zh;lr3e%?M(Ir%)}sY-SW1O2O}0L8HqG-LIG>J6_hDq~qQO6=ou()D>fbu{lrEyDKa*4a
zKJHytb6~1eKNniRg{-_<9shK>1%YC0YzIK18eXBod@^>wMA=ic_=vY`TsZ3>co8T!
zLdRX$<6N0iRxsC!K69e$eAkYTPKryw1T4aJMPUm-76dS*G6yIb9!$(t>j*0V#S;6@
zd^|S_N6m7uc9Sm<#M|N^vT;7=W6`#sB)^xy+IKEK%L$NCp$01T2^)U|n(-AXy6$
zEt-U7f1^gBUCl#&e=zFpyOfZOuEIK>kxyP!1EPOUXZo#8HE?X(Q0|rc(4H4VMGs^V
zWAg4YgoN_rw{As?6<*uqb{5Y_wCuzz|G@DGTP@jOdD5H&iY_cUafyN~1x0Jc#_;RC
z-PVJ)gT>F1?G4u6MRO?Uk5n)W9S&6FFKz&HjGw?By5|
zoq`PVC_dSM)z&IRO@5xp$#uI})#z}Go;Df9P^9Aeq^s=Idtmv@?$}_8+BZlV1pT_#
z>%?k;~Rv)
zF~6q`V(MCzs@Fy?8EP>JFX}-6B;>uJX@IYJRVOG
z#65|T^ykMPtRv&Yrc>K&@MTfVBB?jIkB+&Hwxx?p>g2{4L|ZiSv%PU*ir=typG?H!
zf8ltvVO-nA{!l5z_2-pWy*6q6kmbEOo5n;0tsiE=_wRQg!SH1}~NQ
zALga(03z0-hy}wFnUkC9)vR_%e1(freoohNqv4
zi?_Dy%b9`F({E#BSemt{pWskPecDb~qonph*6`9*bO+~9iyKsrkAu^HJy#5LDku?WgcnjU9wjz
zZfA?%t|gp3^>(_Jtnw7v_inGZWS
z)dA(&Ykknr(3*O-8GViw%9kixY1n%n*3y?pIou(`&bAm2y!R*@?G
zB)lQI5B2y>TCZz`lD*iLy0Q!sA(yPwC65K^90}=mb+awNX;NkX^I{Cc32)E=jg!Y8ZqM}fx~n-`ypp1i8VW1`vUfE?bP*}l+?DGz$&YIFl;wN24LFRckke9|D@f3zL2jzQ5Kg?WcYM@2YHn?Ch_^``pT)1W7&B}}S^h=y
zdM>1Qfd=>FqjSM`!bE4bAZvP0VsiF4chumgB5&D-0;y(c!kY^m@O4UUX7Ju4d#o@U
za+-}#)Q2)ZMW+CTQy`sbH_h|fD;T47nX31(43pI46ke&3uD_3MKK;rFzpgwneY~
zIrXLsU_0Ly%$G?W{ZHPyBk-v^f}kd
zel*${S^vg@J3M((KJS6}LLz!j@dcqz5fopsrD)m@Rx1a3I`}E_G2OJfM0i&u5{~h{N^+hrO_bkV9%Hecz4;-(
z_GY4|ok~vgIY=6}b83Six%?gSQ8~YaXW*APzgRSq8*pPB#ayEQL9YhJ9Gb&4Fo?5`
zF-gk(<6ZE;5Me^c^MC?zqyb%jiqSf`H!(jaW
z{&X$dH$hC{vjo`}Q>`dXW-MJC=ROUSIvVEHQXM9#5KWf49W&@Q5idwV)0hl-IxvVb
zN(Yt5#)RA$S@H<6dw5uJOjhaERMQrBt;<<_Y0-P34Kdg&qs+QjFyAgUA+ony#a(C5
zM;0J?X8wd0kLSF}iW_0%*bSS~^sqp5@Ma;e(5OG-$x%dit%?BaD(338s`6&5I+?Ys
zBJ~SK3cjtt?l|K#6TdZMC;gQSbK0CtMlAfO5dPHpbOOv2SfpS<>9Y+Ck~D&^M%k0l
z6u!fLQ{n*-%b@XFp>RRMnqWGazS4qVZdMu4qykq$!CiWof9Ek{KYdaKl3XmZcD@w!
zcE$gw#fV2-=sQD*g~ZC22Jz5M0^B)w`p7bZ&@`m_Oz{Cq71CQDoC7g!$E1TlRQK?i-=)nO&(q0u>i8e9G&0~Mgag(ahQ|2
zr9IG<$^vKu0*lccwsg=?fvm)6^!QXcRh^`Pwjc#BC{W8wP21AT-crblM*PKNQJ65C
zz!B(bP6cyx0J{jo#Atr=3d7(3s^*}f`VDcl7o*Wv)u57wK!H@e?7ZxpY_c$rJ2%aX
z$5f(FD{Em*8M!|x;3Y8{TUS>nVGa%t4-a+^9(D-ShJ#B;NQi@zn}eI14US-Q@dUe?
z!`Q$sw7)3+;E(~jSVBQgt{@1Q>KCWE1;ou&jD`l@PW2}_ywy?`2Cw|n!LRafdKXtK
z4n=r@7v3K@fPb=
z-T&e5Us||m!=FEMXaZdzZct00tUD0wO8Zx*P7ZD^fA#6+0{m6=J8lOnYYuo&zdire
zMqW`>GsR1qKp{LuXu&6AeJC2;XmH;0{J+tEd<%D
ztu1-kcr661*(`W0h1h`R7JNWX9zGsxZs1?26u~a8=3q!5BXip-GNrWhXAhQA5E6F=3pBje6{^^s{O4V^smyG8_3PY
zV`0T+Wx)?mV;&xO+6f3)v6)-*37MPo2wHLr{E-oVXLo^EyLy;Ifs!`x9Dt8Ad}{q3
zXDX)O+4uaPWAU&B!gGX;lSi17lje`%r4r@%wV?j3d!oOV9931}zX~AwYe^DT{FQlH
zZca`PARzRgh51{e{2y?CvHvqE|0nam!v3(9hB$e`C#|ikx(E2bb^kAbe=w+kEP-Gb
z$bT35Um<_U@|S%F9`he{@cj(FJ#zegfBZ8oe$AZ!k3WB=+y6%oaO(d!`M31_k6ize
z>)%q~-va+9yZ$5Bzoo#x1^!QV{XdiI@jvdcfnfMS&jWt{yui+X4ZrtBu~3$m0X+Qr
z&2M{~1g}ANQZR6V{|EE*uNQ(8Qx*(fiR!ATDvP>-{Fs232>Yo%I{<*YuP7s_4V&A~
znTHtn`u6(sEMO=)mla#i*cB1;GmBK(eM#w_du*>~*ph%pBWVcVyU%KvMo|$b;U5rf
z4bmXntq(s)jTIoH5xiy%h%F^H;$#0_7p*N(kB9{Q)=nJDYQPJ6X~=$|LizL4uH8kp
zSelT_3(E9_?BGVBQ=#SMp$wivB+V};C(!%#<3cywmt6k#E_XjFSI^E|gDT=Fo~oKL
zzViK|Ja*32tUqPUhZN>(`)-+!MlM;CMkzv5N&A`u^P3TXi0U<7OO0Qz!vhW%8*Mbm
z7bd52)1mAFgPjx9-WBRrY-}OWeXKEfBdFKCxjliQibkob9wAy1g+GOV^1;|
z|5B#tg&o+EG~r7QiR;yw3dEYlU3gh`k!IY;u<`*FcpEDu$9VTO7V6xVWmvXUdc_9ybB-qCRXv9`#F6<{f|UP4)G}9vmiV%GZpO$
zuZkz?w{JmdyP+7hG2pBA*6g=@3P-Om&HUPr78*?}=V4_E$MU~Kcx1n!cqGrzkOPIN
zJ6Gv&s8NVFcSQ;zE$i(KA9gIM^sB2>?|;t7z{jj^w@|6iyt>cXHXMmPc8llsrAsCa
z-kwEY*da8?jn`C1aLR8y69TOrrV3m#SYRn$F};0&CmF?`z|UME-KzA;*a1>XwYW-LAYWNRJHK*rs})1rlxf0nVREALG-r^NjF&5v_hbzD_`R)S-bi<
zCMe@m-y9McYU*s$PrGt_50-9*{^zsg1Y}KY$;S3J{81|2{kd}@+LgM4)Qy!JUOPlz
z_E=}NZiVfb57okRLNyng$Za(ZKG?5^+G-jb3$~i~`VLl96T<_t1s$vp?t+qxX$9g}
z50t93s2ai+iay39zBQLduki20{;`Si3B{^R-B~XUGfRM-*D=q$QTHe$B&4A2rto#%
zQx8wdrlj6DFe@8d4E0CsU+M7BGfPBC6DD2U{5kuDo5Nk(#S+WxWvzkU{i`;w^Oad~
z(VD=g2l@41`^s2Ls-m(xR4y*@$k&UMxVCOrNL3FUV54R!H?S7QxWP3lAY__sp
z66}=)lv0#7Fz{N3QBO~i*WJCJ8
z)^GC$n=t(G`(dJ3{cf2XC^v&HL|BX}r!Y~?E=Pkn48^#vH+rWsZ3Z$$fgQKsj!}(2
z@1<@QdHAd42{+^_bv++e1h0A@9mC3h4ZUg=HSF7(v+B6i<#y#9sc1m8h{ZD`#y09t
z_ey2CMJs)nMoIQK8YiksuJ1pJ5+PB>;<6w!wju1Xz*oUm-3nDF1Bs$@;e<_3i)hAH
zb0#@DcMOMdNaz^dlBsYG4w=o`B1B+O`#F
znTvr%`pIS0x$(v|TQ{e@SgAlCXyVe09+aLYH~ef_%5(L&cOzm`UGeT-&)5HL49Aq!
zM&Uz(^@!+1chT)uJbO
z!Vr#Yn`4krMFw2)M4ON{W4OXa+asJho*#rT2(HnFa}1hGXfp+Ju(Cb{DN8_Zh`Wc|
zN9sGAe|`z$E%w*dn=Wdv>7vb-)RcQpLP?nv5rNmjcC(UIJuJGHw$5rC5$=CCHh+Ts
zaLI8(seCw2?0dO3{dK^!<6e*ZrqU(wJN2?C<+(U_6N;I@9m70tAx(gGVJHq6Ae(i}
zpa~^41ow=691|VuQZ>+HJgbtQ3Za8b6c)K`be^LKQu3%MYq6#304Li-3*p=Ffr;MpF@z7A1&9Gg
zoIhg2eO_=BN1%J|u*h3n`DG2OUR|!Kf4Z7=5fXCU>TkD!g~@^}q~xHqu9-~85V40J
zxCZ)UUMJ|D$JlBEc`>;CEpqE}Ctw(yc*y)GXlK~Znd4%Qrv)ERb4aSpMn~S1Z2b6o^
z5UE#cd44bbE-%F6rKl+j7RqmGjGT&-qodN>>_A=5CJ}WMh#t(;pjnVYSeYQAD9n*t
zhfmf)eVN|I2bp5;^&U!=enixhi)Z4TR8!+$`igebk>>F7fr`)a$Rwvb-04G+TS^07
zWxZ{&2du&i6`AUCDKXa4(viJI$AM+G6TQpGqQae-c+HuUQeq;IgM(vp4X;HjkrcZL
zp`ZkQ_<+I}V{6)S^s2T&d{raxGfFBucxun|$ucxfu{E_MamtBW&Ot2&CCJuRM|)Rt
zNM;smD|%cXf~@0g(U9KTJfQ%~@AkFf(}pV6#}|Vi#&hOJhhWm$fh@&_^jGa8GBLy>
zoCjE3l^6ceAuBk|E0tJp-3~oGW4QL$dydS(`82Jq2wacb`J|V;_okVL6GXD>~oo_qkd?RZLid^i7L6Cat6F;$Jlo?d5*?OZ(XdxXPxck#(zY8zqn`roqVZsbf
z?Mhp&{e?Q@nFpY@v7DwmR1o<>EB4Sd(-Jl#pce2Q`4HTKUu4W1-G-{*NWRj8&Y8U;
z!asnK%KVP!FmJAn2nj)k8fGhEmif~K^32V@i7&2=%CE~UZk*v!v4G{_-2{cxB0vHu
zFpP(gcmG%bv)Kq-NdgJNv^+9DXK3@7URNoRTn!$-Ir4%);oDf^O7iA>kP+rN-J{MA
zNH*pe(4boM*s1yTA0z^TdIgq(gKAwHT(H#MWzjX1Y2~vacJ+PHH97G6G-}4#C%+g>
z3T(ig!#vL#YKe>+{iZQD
zKm^}MkVnxOV8rQ-L}^`6nY60Jg@G9lvxB$@O@J)j1rgpi%3#~@eyz0v=pi2_@4Q1n
ze6Mx{KP8-)r|d-cBCNt=`eLl!#gZ~$4O?@LSqE_Oz=L17KTJ3%pEJA$$#kz>2?o$x
zI^kEXS6ccee-mXv4JRDeJ2KA;yBIaDTe@dvC_oI(ox1r*y4Ho7lcrfmJT5%K+R{sb
z&@KIlG0W9@Mpe%>f$Bq}N79=;)FYOU2KX-!g!-z0jRo9jIone04q)r?BaeNpk(Vu@8cvF_E;|W_8f9bkbV`&
z>SSy_V0N;jK%rD!84if=9UR2+lfp4pPGUNH$%9fH0q#YOk4>BaPJ&&spXS{N0D(2$
z(-RuV*e=sLfTNKE6Rn%?H*RCQ0uX{
zyrm&XW%<4sFT}(ak9Jt<8h|RP3>#sPdx>b9P{X?XWQ8{x@y6`(g@$tRkA+8dT45lr
zi?+kuLgU8pv9SU&|N9GDG(DC&f#qlDC!Vj7^0Kn*o0C_2h(Tcf_4~#7RmW>eU)xH0
zaenrYW5l!W_|oc1rNUQ4mbcgfQ{pWw!>WxZ@;Vi-90ENKn0{@@j7Si$lJB|8)kX@X
zqPgqP#U_z*(#iVi+x5|!YIAFa+aE*%8wc`~N|wHh7n@6_S1SDN`s7ZCBid)9_4#=j
zq(5R;+nl>%ew=1%n%)?L+1kl%Nq>BML#yd?%NZEf_qO9c#pf&u*`ULF{(;du7nXI<
zN;_#U{Y3#8;=A@C5^^!wx9fV$Pl0r;U0u^PYyW21RqXf~>FVS(&mz|6Dk@A%dQve`
zs)Cz^QGsxr15Q>Cu)r~P;z)^Ze
zhNoG~in$63K;n`;MAVP}-Ah#BSdHn_VCIkPY6ML$0Mf-CUk$sSPa^C=8O!C3RoRIG
zI*uLb1Y&rTNdP1Ykep|~8=dIC>DZEaBOTdRu`Louo$Sgp!)|N|rpgh|h&}X}Q^Lv!
zLlW9tG~ShGv$Ns}Jwc}tuS%u3I5s|;zUd9^TN}Bn+B)utm!qA{F<{6O
zO>TC+aJR@pgCE74cz76}xtf?Q_|j5N6Ry{Mb@e_c;5ax$HzOGqq@?X-&*Bm31n3)Q
zGBOAzB0@#j|8ea-YD>EP5|ldyh$l=uSc@33{k5kE4dEECUk@9FY;SMNP+~H+4>)*v
zH6KSQM>#x2P;++N?$Q4SHA+}nr0ekUyoDb!XIgQM<6E@LwADZ9YI}nKpzqQblwN4%w$O
zU_npjFb#rWjxX{hq-nKL^R@v&_Guv(v0j9#%${;+deoOWGW6l+&)?F}UL?DdsYm
zdaN7csP&=DwtQ(=4k`f-LzahM^TZ*-q%#iRCaJ7do?Tq4!@u6!ESS;(10{@WQ4vopJhF)f5-%-Do{2Y#>oX5Nfc|&
z(v6KXHn67>K$BKpn{j`g`mU34AGPu(^6OgtdjI+wyV4m9PkPtFz?n(<)|If7N&sE0
zJZUOmrSI#^vo7k7dn!ZJe1SGHKUHzR*N|>_+zO~=Ql+{M)H8-_r#5;YyyLX|5RGKB
zrzV9MNGryTNbe;)=+#!4z3*pi)SQrJ_4Bnri;{zElcV?pHaI-R!tm_$7XDcfKv7mr
Krb@~z@P7fT+0%0X
literal 0
HcmV?d00001
diff --git a/static/img/differences/yaml.png b/static/img/differences/yaml.png
new file mode 100644
index 0000000000000000000000000000000000000000..de1af082754ceb1bbaaff2353365b120ea8a7c5d
GIT binary patch
literal 9665
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