# Rose-Obf
Rose Python Obfuscator can heavily encrypt your code.

**This obfuscator is not finished yet and has a few bugs so it isnt really compatible with large or complex scripts. The variable renaming is really messed up. Gonna look into it soon tho...**

Anyways, heres the usage:
```
usage: obfuscate.py [-h] -i <input_file> [-o <output_file>]

Obfuscate Python code efficiently with Rose-obf.

options:
  -h, --help            show this help message and exit
  -i <input_file>, --input <input_file>
                        Input file name (required, .py)
  -o <output_file>, --output <output_file>
                        Output file name
```

<details>
  <summary>Before Obfuscation</summary>
  
  ```py
print("hello, world!\nHI")

print("wassup?!?!?!\nHI")

# Dictionaries are a key-value object in Python.
# Like sets, you create them using { and }, but unlike sets, they must be
# created as key-value pairs using the : symbol.
# The values used can be any object.
my_dictionary = {"banana": "$10.00", "cheese": True}

# Access items like with lists, except keys are usually strings.
my_dictionary["banana"]  # returns the string '$10.00'
my_dictionary["cheese"]  # returns True

# If accessing a key that doesn't exist using [ ], Python raises a KeyError.
# e.g. my_dictionary['optimus'] will raise a KeyError.

# Adding new items.
my_dictionary["optimus"] = "Truck"

# Changing existing items.
my_dictionary["cheese"] = False

# Get all the keys. (used for looping/iterating later on)
my_dictionary.keys()

# Get all the values.
my_dictionary.values()

# Get all the items (key-value pairs)
my_dictionary.items()

# See help(dict) for other methods.

for i in range(1, 10):
    print(i)

# A tuple is a read-only data structure for storing collections that
# don't need to be changed. You create one using ( and ) characters.

# Create a tuple with ( and )
my_tuple = (1, 2, "hello", 3.14, False, "hello")

print(type(my_tuple))

# Access an item by index using [ and ]. Indexes start at 0
print(my_tuple[0])

print(my_tuple[3])

# Access a container from right-to-left
print(my_tuple[-1])
print(my_tuple[-3])

# Count number of items in a tuple
my_tuple.count("hello")
my_tuple.count(3.14)
my_tuple.count("blahblah")

# Search and get the index of an item
my_tuple.index("hello")

my_tuple.index(3.14)
my_tuple.index(False)


# Trying to change the value of an item in a tuple causes an error.


# Warning: If creating a tuple with only 1 item, you need to use this special syntax with a comma.
my_tuple2 = (42,)
type(my_tuple2)  # is a 'tuple' type

# If you forget the comma, then Python doesn't create the tuple.
fake_tuple = 42
type(fake_tuple)  # is an 'int' type

import random
import math
from functools import reduce


# Define a custom function to calculate factorial recursively
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)


# Generate a random list of numbers using list comprehension
random_numbers = [random.randint(1, 100) for _ in range(20)]

# Filter even numbers from the list
even_numbers = list(filter(lambda x: x % 2 == 0, random_numbers))

# Find square roots of all numbers in the list
square_roots = list(map(math.sqrt, random_numbers))

# Calculate the sum of all numbers in the list
total_sum = reduce(lambda x, y: x + y, random_numbers)

# Print the list of random numbers
print("Random numbers:", random_numbers)

# Print the list of even numbers
print("Even numbers:", even_numbers)

# Print the list of square roots
print("Square roots:", square_roots)

# Print the total sum of the numbers
print("Total sum:", total_sum)

# Generate a random dictionary with random keys and values
random_dict = {chr(random.randint(97, 122)): random.randint(1, 100) for _ in range(10)}

# Print the random dictionary
print("Random dictionary:", random_dict)

# Calculate the factorial of a random number
random_number = random.choice(random_numbers)
factorial_result = factorial(random_number)

# Print the factorial result
print("Factorial of {}: {}".format(random_number, factorial_result))
  ```
</details>
<details>
     <summary>After Obfuscation/Obfuscated</summary>
   
   ```py
# Obfuscated with Rose
# github.com/rose-dll

# ^..^      /
# /_/\_____/
#    /\   /\
#   /  \ /  \

from base64 import urlsafe_b64decode as __O0O0O0O0O0;from lzma import decompress as lIlllIIIIIIlIllI;exec(eval(lIlllIIIIIIlIllI(b'\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3\xe02e\x0e\xc8]\x009\x9d\n\x88\x12\x8d6\x8b\xbeot\xe2\xa16s\x90\x9e\x06\xb4,+\x88c\x88\x06\x97\xa2\xdd\x9a\x9cP\xe6I\xeaRu\xcbx\x1e\x16\x9bl\xb5*<=\x0e}s\x7f:W\x93?\x80`K\x1c\x8b\x87;\xca\x0f\xef\x01\x1aw\xa4\x1ai\xa3\xd6\xaf4\x8e\'K\x18\x8c\xe0<\xe8\xbd\xfe\xaf`\x15c\xf4\x1fX\xff\xae\xef\xac^\x88\xf8\xe5\xbd\xe1\x0b.|\x17\x8b\x0c\x9e\x8e\x19go\xfc\xe9\xd0O^;=\x05\xfd3\x8d\x1fj\x10\xe75C\xf3v\x14\xa5\xcf\xe3\x0b\x91\xb2e}%{\xbf\xfb\x9a\x886\x85\x8cH\x9b`\x1dT\r\x11\xc3k\xce\xd4<\xd0\xab\x89w_\x1ak\xe0\xa3YO\x89\xb8\xdeg\xe6\x141\x0f\xb1*\x9fjp\xdfF\xf8z\x9d\xda\x9e\x8a\x9b\x01?\xd7\xea\xf8\xb3\xb5V\xeb\x92\x154\xa0\xdfc\xbe1Y\x99\x9c\x04\x92\xf0#;\xfe\xef\x86\xcd?\x05\xae\xdb\xf2\n\x0f\xcfY\xdaKo\n\xd8\xd1\xe1\x8a\x11Qh\x0cz\x0f\xd2<\x8b\xcb(tl\xf6W@\x19\xfaS\xb1y\x11\xa4>\x1dF\x85\x86\x9bW4Z\xf2\xa4\x99\x88g*\xf5\xdd+;\x03\xfc\xc7\xed\xda\xbf\x02\xe7W\x05\xbc\xc5Q\xdcQ\x9e%\xc2\x01&\xb5\x92H\xf8\xebA\x9e\xd0\xe5\xfaR\x8d\xa6\x17\xf9\x1fr\xc0o\xdf5\xdc\xdb3e\xa6n\xa4+q@B3K\xf2\x7f\xbb\x02[\xc2\x15_\xae\x98\xcd\x05\xfe\x88V\xd1X\xd6\x13tO\xef1\xf1\xf1MH\x8d\xb9\x8dpOA\x9c\xc61\x1d\xe4%\xda\xf1f\x9e\xfa\xe9!T!\x9f0z\x84\\\xb4\xdbE\xcf\x8aTY\xfa\xc89?\xf7>\x8b\xc7\xebV$LFnt\xac$\xea\xcc\x85N\xc6T\x90\x07\x1d\xd6\xc4\xb7\xadN\xad{TWy\xe5qx\x85|\x1e\xcc:\xe9\xda\xd1\xfap\xa2\xe3\xb1<\xf7b\xdf\xfb\xbd\xac\xe5=\xf8\x160\xbf\xa3 \xf2*\xfe\xd5\x7fB\xe4!\x80\x91\xb4\x18\xfb\xaa\xdd\x05\x14E/\xb8j\x92\xed{\xfbM:+\xe8\x87\x97\x98\x08\xe7s\x98$\xab\xf9\xcf\xb2\xed5\'~\xec:\x9c1\xa6\xa6\xa4#\xd6"\x15\xd1\xa6\xb8\xe1\xb6\xb5\x1a3"\xf3\xect\xdd\x15\xed|\xc7r\x9f; \xd0\xfbf\xe4E\xceL\xa9!\xbfTQ\xd0U\xed\x9eN^\xb3\xa2_\x81\x99\x84\xfaG\x84\x10"q\x92\xb5u\xe25\xa6`\xbf{\x0e\x97C\xd7\xee~kc\xa5\xa8\xdb\xc9\xa9k\xd89\xf58\x9f \t\xe9\x87\xdag\x9e\xa8\xe5w\x0f\xe3\xdc\x9c\x81R\xd9mh\x96\x91\xbd/\x04\xae\x16\xc3\xa70\x07Js\xd9\xe4[~\x8f\xbf\xc7\xc4=\xca\xa5=fF\xaf\x07\xc9\xe4\xcd/\x89\xa5\x9ft\x83\xd5\x15W\xf3rF\x08\xfa\x12\x11\x8ck*\x01\xa6(\xbfl \xf9\xf3t\x1c\x1d\xb7\x10\x18\xcf\xdc#\xbf\x04\xf4\xc3\xa3\x13\xb14\xdc\xc1*\x9c\xeb\xd3\x04\xb9\x03\xfa3\xcc1e\xca(\x88z\r\x18-\xed\x13a;d\xecC!W6\xe2Y\x17c2\\\x9f\xdd\x04\xdbEL\xe8\xbd\x96^E\xc9\x1ao\xa7\x8b\x10\x81\xb9\xa3\x1b\xc5\x10\xceOuF\x90o<\x15\xe8N?\\x\xcc\x8b\xfef\'\xff\xc2\x87\x9a\xf4\xf0\xa4\xe4\xe3\x0c\x1eC\x07\xed\n\xeaAU\xb6\x07&\x84\t\xeb\x8eHU\xbc\x88\xb3>.\x8c\xf0\xa2\xf2\xadj\xf5K\xa0\xea\x89\xec\x04\xa0\xfa\xc8\x93\xde\x17l\xd1\xd0\xb7\x19\xe8N\xbf~\x9b\xabw\x9bp\x0cA\x9b\x19&g\x17@\xdcmDc\xbaH\x10m\x1d\xf0\xca\xab\xb2\x07\xca\xde\xef\xb7\xd1\x01-\xf3E\xb7\x1b\x9c\x0c\x90\xf1\xaa\xbd\xf7\x0f\x8c\x84\x12&A\xa6\x06\xfb\xaa\xb8G8V\x18\x91\x1f\xffC\xc8\xbd\x02\xc6\xce\x9d\xab\xb9\x12!\xde\xc3n_\x00\xa8`\xfa4g\x01\x0b\xb2\x1e\xb7P\xd7nt\xae\xc7\xd5VP\xc1 \x97+\xfe{\x98\x01>\xca\x94&}\xa3;\xef[\x8bf}\xf6<\xa7\xcb\x0e\xdcw@\x80M\xcb@&^\xa9l\xf7g\x8c\x96\x95S\xea-\x9b\xc84=\xadc\x8d\xcb\xdf\xf2\xdb\x84b\xa2\x8e5\xcdN\x97\xc8\xe5\xff$-6\x9aIBgI\x84\t\xd4\xc4F\xb0\xa1d\x91O\xb3\xab\x1d\x85f\xbf\xb0\x1e\x8b\x98\xe8Y\x8e\'t\xa0\x05\xae~7u\xb2{\x8ep\x80s\xc6\x7fxb\x15J\xd3\xa5\xa4\xb3\\\xac\x11\xfd\xf0\xda\r\xe55s\x81\xc8\xdfC\xeb\x10\x8d\x14\x13\xc8\xda\xeb\xa1I/Z\x16\xdc\xe7\xaf\xc8P\xf5\xa4|\xe2\xe7\xa7\xe6t\xf9\xa8\x12\xe9!q\xd6\xb3\xf8w\xbd\xbb\x01;c\xb5v\xf0\xc1\xb7\x9b\xac\xd1?B\xf7\x0cKyu\xbf\xb2+y\xed\xc5\x1c\x013\x05\xad\xdan\xfd=sTB\x1e r\x9b\x11\xbaZ\x03\xb3\xc9\xb3\xab\x8ahW\x15N\xc8\xbb\xe4iw\xf3\xf2\xdd\xa5\x8at\xddH\xc8\x96\x05\x1c A\x0b\xbb\xf6\x98\xc6a\x97v\xf12=\xdd\xf6G\xf2\x1b\x07!\xd6\x13(\xfc\xe3t\xca\xcf\xb3\x96)\xa8\xff\xd1<w\xc4!q\xff\xc3\xf5!\xebc\xdb\xa0\x9d=\x02\xe3\xbf\x06\x8a\xec<\ro\x19\t\xe4`\xc7!3\xbe\xc1k[]*hc)\xf1\x92\xear\x10R\xc0\x1a\xa3\x8b\xe07\xd4\x85~C\xc4\x0f\xd7V\x16\xe8\x8fb\x8c\x1b\xd7?\xf5\x1dU.T\xbe1\xa6hS\xe4P\t\xa4\xdb\xca\xd2X\'c\x8cb\xe8\x027y\xed\x03\x11r\x08Y\xc7\xb51j\x08@]\xfd\x9c)\x94e\xed\xdbb\x85o\x93\x99+\xc6\xc3\x1a\xed\x1dz\xe6N\xc6\x7f)\xe0\xf8\n@)\xfd\x1c\xb9\xb8\xa08\x97\\\xe1\xfaA2q\xa4\x1d\xc6\x9f|\x90\x13Ak\x88\x85\xa5\xb6\xdf\x18n\x1f\xa8\xc12\x92j7o\xd5\n\x1a\xc1\xec\xc9 \xfc~\xba_\xf4J\xb7\x90\xf2\xec\x1bj\x80\xc5\x92\xd0\x95\x16\xaa_\xca\x05\x0c\x7f$\x85\xbe\xdf\xaaN\xbd\x1e\x9fr\xc7E\x93\xb4\x83!D\xf4n\xe4\xdb\xe6$<\xa8\xd7\x9euY\xfcQ\x8b\x0f\\\x1b\x9a8\x16Ly\xac\xfb\xc7Z\xdbP;#\xe0\xab>\x17CI\xa0\xcd\x8bJ\x86\x18n\x7f\xc27e\xc9w\xff\xe4\x05\xb2_\xb0\xd1\xc9\xf6\xeb\xfd%\x0f\x0b\xac\x9eJXQ\x1b\x92$>\x80\xc5:0r\xb8\xdc\x8a/w\x02g\x196\x92v\xb5\\\x8d\xef\x7f\x86\xa4\x02U\xf8\xde\xb7\xdd\xa7D"T\x92V\xa7e\x0b\xf5\x9b\xd3d\x95\xb9E\x99\nKb\x92\xa9\xa1\xac\xb6\x90\xedxt\xf7\xe7oX\x04\xd8\x1f,?\xaf\x8ak\x18"\xd8E\xc0V\xbb/\'\xf5\xc8\xf8\xa1Z>\x1b\xbe\xf1\xd8\xe8\\\xc5e\x08\xc5\x03\xc5#l_\x18x\xdb\x8d\xec\x0f\xf9\xa1\x90\xe99\xcf\xef\xe3\xddK\x9d\xf6\x91\x15\x16\xb5?\xb2\xd2\xab\xd0\xacK:be\xd5\xd6\xdb\x00\xce\xc8a\x99\xd03y!j\xa4\xbd\xce)\\\xd1\xf0\xcd-\xce\x07?HMz\xda#F>;S\xb5\xd4E\xa5{b\x1fk^sz3\x1b\xa6\xa1\xe2\x88G\x18\xde0\xc6\x02\xee\xf2Xi\x1fx\x99\xb6\x9a%Y\xee\x97\x05\\\xb8\xfd\xba\xa0\xfc;t\xcc\xb9\x00.\xa1\xe7\x15\xae?\xf9\xd5@\xf2\n\xe5\x01KDi5)\x1a\x94\xb2\xe47O\xa8ZR6\x08\x98\xe0\xc1\xe8\xf5`a\x12o\xba\xaf\xb7\xdf\xfbp\x1c\xba1\xc9\x14\xd9{\x8b\xa2c\xdc\x0f\x04\x0f\xc3\x96\x7fR%*\x12\xc2\x12\xaa\xfd\xea_\x89\x9d\x8b\x8c\x8cX\xea\x1f\xa0\x849\x91Z\x0b\x15\xcc\xc4?\xe0}Z\x02\x8aK\x1e\xc5\x8dk\x85\xe2\x0b\xcc\xd8\xd1\xf9\xaf\x87\x91\x9aU\x90\xc9\xd9\xc8\xf7\x85\x12\xf1R\x96\xae>6gy\x9e \xfb\xc5\x07\xe3\xe5)R<\x1dm^_\xd4\xf2z\xad\x1f\x03\x99NM\xac\xc3\x10\xcf5|\xd0@\xba\x8a\xf1\x1e\r\xb6\xec\x88\xe2o\xc3\xd6k\xf6\x88\x10\x07\xe4M.\xae\xa1\x9cn\x1a\xdb\x0e\x80\xee\x87\x1b\x02\xf0\x03l\xf5\xe6\x85(\xb4\xefqp\x8c:d\xbaeZ\xfet\xe2\x12\xa9\xb1\x87 r\xc6\x0c\xe5&\xa2\xbe\x98@\xa5\xb1\x14*\'&Z/\xc4~\xd2\xb4\xd4q\xdfk&\xea\x926\xc7\xd6T\x1c3\xaaO\xcf\xda\xb7$T\xd9\xe5{\x01L-%\x13\xa4\xb7)\x96\x0e\xc8\xc2*\xf6\xe9[\n,N\xb2\xa7,#h\xcdZ\tn\xc3\xb3,]\x95\x85\x07\xb4\xbe\xec\xfb\xce\x10\x1d!\n\xbc-\xa8B\xe1\x0e\xa0\xef\xd6a\xdf\xc2\xa7\x1a\xb4}\x8b\x1d1\xd81T\xb9IW\xc8\xa1s\xb4>\x9a\xeb\xddo|\xecp\x9a\x18\xabq\xeb-}k\x9c\\\xa2\x1f\x15C\n\x17`\xa2L\x87\xcef\xf2$\xa4\x1c\xdb\x19\xbb\xb3\xd9\x12\x8a\xdb\xa1\xd6\xfc{\xb9\x9a,%j\x15\xec\x9e\x05qf\xc1<\xe7\xbd\xbe\xa3P\xa5W"\x8d\xc6\x9e5\xbcV\x0f\x8c\x05\x11\xa0wM)f\xf5E2\xc4\x83S \xb7]b\xda\xd4\xa4hF,] hH1xY}\x0f\x7f\x80B\xa6\xc7,I\xcb\xae\xa6%\x80z\xc9\xbb\\\xa9a^\xc8\x839x\x11v\xa2\x83\xeb\x9c\x19\xb3\xe03d\x1d3\xfb\x96\xdc\xf5\x00\xa0&\x8erj|\xa0\x835(X\xa76rD\x0bG\xdb\xbb\xb8\xf4\xbf\xb0i\xa4\x15\x84S\'\x8a\x1d\xc1r}\x8b\xb1Z\xfb\xbf\xf2\xaf\x8d\x9c\nE\xe5U\x80AG\x1e9\x83\xe9\xe8\xeb\xef\xf3\xc9\xa5\xc7\xdar\xd5\xa4\xb1\xdb\xb4n\x08\xe7\xe5\xe2\xe3\xbb\xb6\x1b\x81C\x9d\x0e\xc5\xed|\x910\t\x11r\xf9Iv>\xe9-\x0cH\xd2\xcatq\xca\xdd\x9d\x94\xa9\xa4\xa1\x96v\xb6\xe0<P\xb3z\xf0\xf5\x03\xdc\xc7\xfe\x97\xc3\xa9\x1a,\xa2\xcei\xf9\xa1\x92\xa1Z\x06\xaf\x1eh\xa6\r\xb0\xa7o\xf15\xf1\xc1\xcb[\xd8\x03\xe0\xfe\x0br\x16\xb65&\x97\xfc\xb5\x82\x1c\x80X\xed\xa0\xb5g\xfc\x1c\xdaJ\x14?f3s8\xbc2\xf6\x89\xcb!\xf9KkO6\xb4t]\xf9Q6\x94\x85\x8a\x84y\x192~#\x87\x7f!V\x0e\x882\x83\xe51\xa9Fk{"\x81*\xbc\xcf\xdd\xd3H\x9bB\xe9\xb8b\xf5\xbd_\x12\xaaJ\x17>\x91\xbb-7\x05\xc0\xa9\x03n\xd0\xfb\x1am\x9a\xfa\xbbnKB\x10U\xbc\x9f\x8f\x18\t\xea\x9eS!|a\x97\xea\xce\x89\x84\xcb\xce)G\x14"\xdfK<\xab\x9e\x9ayo\xfa\x9c\x87\x01K\x06\x1fR\xf6\x1e\xb46\xe54\x15\x0f\'\xf7\xdd\xf3\xa4\x13\xde3\xfdJ\xb5\xd0j\x90~"\x18^\xcf\x8c/\x7f]\x00\x13\xf78\xb3z\x1b}\xcc\xa3\xe4\xf4\xf9\x08\xfe\x9d$s\x1f.\xf10\xd5\x8c\x1b\x16``\x87\xaab\x92h\xc8\xdfGY%{\xd18\x0e\x0bsE\xb8\xdbvB\x9d\xd0A`\xbc\x8e\xc1r\x17LTr\xd5<\xeb\x01D\x8b\'\x84\xd6U\x1bq\xa0\xadv\x01\xe0\x96\x05\\A\xff5Id&\r]\xd8\xe3\xa3\x80\r\xae\xe3\xea\xeag\x16Pq\xa2\xc8\x9b\x84\x8b\xbc+\xeb\xf6\xba\x11\x00e\x93n\xac\xb6!\xb1\x8c\xba;\x18\xcf\xa2\x1e\x81\xb1\xeb\xbf\x94\xbc\xde\xe1vS\x040\x87s\r\x92\x16B\x0bAS\x8f\x805\xef\x83=q6\x1d\xaf\xe0l\x057\xdeh\x9d\xf1t>\xd9\xef6\xd5\xcc\xdc\xc5c\x85\xa4\x0c\xb8\xfa\x99\x0b>}&/\xcd\x19\xe7\xa6-\xf7\xdf\ry\xfc\x91\n\xe0\xc4\xcaj"\xbei\xa2F\x97\x8d\xdd\xee\xca/\xe7\xe3L\x89\xa5q\x99\x10\xc2\r.\xd0\xa0\xb8\x0bb\xe2\x11P\xa2T#\\\xee\xee-\x06C\xb4z\x93"\x1a\xcfx\xcd\x17\xc8V\x8e\x93\xcb\x88\xff\xc9\xf0 D\xe3\xffL\xfb\x87\xd4\xa8\xf6\x01\xcf7/\xaf\x88t\xf7\xde\xca\x9b\xef\x08\r\x10\xc2!\xc9\xf0\xc8\x86T\xed\xd9\xac\x89\x9du|\x1a\x16jah=YQY\x92\xb5\x9eG\x13\x0b5^\xb3\x80\xf0\xccJ\xe4\x11\xc9\xbfJ\x1b\x81L\x9c\xb9\xae\x04\xa2t\xe3\x10>\x0e )n;a\x1c\xa7\xd4\xd9\xe7\xb1py\x02\xafo\x15\x17\xfe\xb1\x97\xb8\x9bl\xf2\xe4&\xe75G\x95\x98\x02d\x1aU=\xd5{a\xe2\xaew\xd7\x7fY|""\xd5 %$N>\x81v9\x1a\xf7.x\x9f\x05r[+\xb1\x9d\x92x0\x06\x93\xd1\xc1\xd9\xfds\xec|\xb0m\xe5\xb8\xda\x92D\xe4\x8d\xaa\xec\x97[?<\xc8U0\xc7\x13\x18\x18\x8a\tIm\xee\xb3\xd5\x86\xd6\x04\xec\x97|E)h\x12\x84SF"\xa0\xda\x84\xfb\x0c\x93\xbd\xcb6\x13@\xea\x82\x0f\xe8\x0b\xea\x1a\x9d\x13\xfet\xbf|[)\xdf6\xcc\x0c4K$o#{\xec,Nn\xff\xb8\xef\nak\xda1\xe8w-_\xa2\xee\x89Z\xe2\xdf\x1d5\xb3T*>\x19p\xf9\xdd\xf1\x06\xaf\\\x0c\x88\xf5\x8f\x18\xa3\x1e\xd6\x04\xe0\n\xa5\x98V\x04D\xb3\x8d\x14\x89%\xda\xd9\xf1\xdb\xef\x11|\x89\x10\x11"\xd1\xea\x9ej\x96"E\x14!\x9a\\\x8aMX\x95}*\xb6N\xac\x9fS\xd3\xdbZ?-m\x05\xcf\xeb[\xeb+\x0c\xf6\x1a0\x0ez.\xe4\xe8!\xed\xb3RQo\x97\xc4\xe9\xa6\xde\xad\xbb\xf1\x19$\x88o\x80\xb6\x81 \xf3\xd72zO\xaf\xae\xcf`p7\xbf\x947\x8dv\xbfU\x02\x87\xcb\x14\x90nT\nF\xa5$\xfe.\x9c\xcdxg\x1ej\x8f\xbd\xc8\xad:f\x04\xc2+O}\xa1E%\xf7\x95\xb6\x10\xba\xf0\xa5S\x00\xdc\x9dbY\n\x10\xe5\x9d\xa5oqCz\xe2\xbb@"F\xba"\xbbm\xf7#\xdb.\xe0\xb7ue\x97\xc9\xc0 \xd1\x8c1\x96ZQ*\xea@Sb\x1ccY\xf6\xf8\x92\x84[\x88\'\xdaDW\xf4s\xf1\x08\x14l\xd0+y\xabm\xb5S\x04\xb1\x968W6\x166\x8d\xd6\x82`3S\x1e\x90\xcc!\x1a\xc7\xcfc\x9d\xb5G\xa0\xc19_e\x92i\\\xb1\xd0\xe7\x86g\xf2X\xd9\xafS\x14*(\x13~\x89,\x8fI \n5\xacC4\xa4\xc0Pq\xc9f\xd0\x92/\xbdM\x94P\xe9\r\xc6\xb9%\x06\xf2\xda\x9fn\x1a\xc8I$\xbc6\xb4\xa0\xdd\xd1\x9b\xd8\x9d\x95$\x0f\xfel\xb7b\x04\xf9\x938\x96\x9e!3\x83~5hT\xf2qDm\r\xb8A\xe2\x05\x19%&\xfd\\\xa1\x1e\xd3q\x89".\xcf\xdb\xc4S\xab\xed\xec\xde<\xd9\xb6\xc1\xff\x9fb\xb6\xf6]\x0e\xa5\xce\xd6k\xeeQf\xfb\xf6o<I\x1a\x92\xf8\xac\xea\x9d#\x1e\x83\xb5sl\xd1\xbb<1\xe3`\xde\xf1\xbf*2\x06l\xa5`~\xf8G\xcbWb\xa3\xe6\xcf\x12d\t/\xc2\xf3\xda\x01<\x15\xb3\x94\x0e__\x02Z!=\x13r\x07\xd0b\xa2\xe5\x93\xd2\xb6S\xf9\x12D\xb8h2\x07K_\x8b4\xbcM\x9b\xfc\xb1\x8b7q\x8e^\x13\xb5\xca\xf1\x03\xc6\xe8\xbc\xa0=\xa9\x04\xb4\xaf\x1c;\xfcQ\xe2\xac\xb5K;\xc3~\xfa\x83\x89\xb8!\xa3\xecN%\x96E\xe5\xaf\xabF\xe5\xa3\x97\xaaLc\xa9\xfa\xbe}bB\xb9\xfcs\xa0\xc8]\x10\xfc\xe0\xf2\x0b(\x86\x12\x82\x95\x91\x06\x8c\xa6\xd4\x9e\x91\x84\x8f;\xbf\xbd\x0b\xf8\x04!n.R\x90q\x15\xd9\x94\x10\xf5Z\xc2\x9dP\t\xe2O\xadN3\xc5\xc9\x80\xabp\x1f+[\xb5\xe0Cdw\xbd(\x9c\xd2\xef\xb6d\xfc\xe3WO\xbfD\xe6\xb7\xee\xe2\xeeUGNx\xc8PE\xf6\xf2b\xf3\x06t\x0f\x06\xb6\x13\xaf\x04\x9e\xd0\xab\xec\x93Kq\x96~\x1c\x10\x83\xb91\x19\xe2\x1d\xf6\x8e,inM\x96\xe8\xcc\xbd\xb4\x08\x1f\x87{\xc5\xd4\xc8x2%\xbf\xda\x93\x12\xca`\x15\xa2\x05\xd6\x89\x837|\x15%4\xdf\xbe\x82B\x89\xb0\x1f_\xf6K\x8f\x1d\x1c\x9c\x06\x01\x8b\x19\x12\x0f\xa7\x14R\xcd\x8eA\x1fG\xbf\x1dm\xaa`\x00T\xca\x80\x18\xb7\xc6\xc4L\x00\x01\xe4\x1d\xe6d\x00\x00b\xa3:j\xb1\xc4g\xfb\x02\x00\x00\x00\x00\x04YZ')))
   ```
</details>
