From 1ab7044d224856b504d04f2e1bceab7359f0bd0b Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 28 Dec 2019 16:34:49 +0100 Subject: [PATCH] rimosso proxytools --- core/httptools.py | 375 +++++++++++----------------------------- core/proxytools.py | 1 - videolibrary_service.py | 4 - 3 files changed, 101 insertions(+), 279 deletions(-) delete mode 100644 core/proxytools.py diff --git a/core/httptools.py b/core/httptools.py index e0e76bed..e2460e01 100755 --- a/core/httptools.py +++ b/core/httptools.py @@ -144,34 +144,6 @@ def random_useragent(): return default_headers["User-Agent"] -def channel_proxy_list(url, forced_proxy=None): - import base64 - import ast - - try: - proxy_channel_bloqued_str = base64.b64decode(config.get_setting - ('proxy_channel_bloqued')).decode('utf-8') - proxy_channel_bloqued = dict() - proxy_channel_bloqued = ast.literal_eval(proxy_channel_bloqued_str) - except: - logger.debug('Proxytools not initialized correctly') - return False - - if not url.endswith('/'): - url += '/' - if scrapertools.find_single_match(url, r'(?:http.*\:)?\/\/(?:www\.)?([^\?|\/]+)(?:\?|\/)') \ - in proxy_channel_bloqued: - if forced_proxy and forced_proxy not in ['Total', 'ProxyDirect', 'ProxyCF', 'ProxyWeb']: - if forced_proxy in proxy_channel_bloqued[scrapertools.find_single_match(url, r'(?:http.*\:)?\/\/(?:www\.)?([^\?|\/]+)(?:\?|\/)')]: - return True - else: - return False - if forced_proxy: - return True - if not 'OFF' in proxy_channel_bloqued[scrapertools.find_single_match(url, r'(?:http.*\:)?\/\/(?:www\.)?([^\?|\/]+)(?:\?|\/)')]: - return True - - return False def show_infobox(info_dict): logger.info() @@ -232,137 +204,6 @@ def show_infobox(info_dict): logger.info('%s%s%s' % (box['r_dn_corner'], box['fill'] * width, box['l_dn_corner'])) return -def check_proxy(url, **opt): - proxy_data = dict() - proxy_data['dict'] = {} - proxy = opt.get('proxy', True) - proxy_web = opt.get('proxy_web', False) - proxy_addr_forced = opt.get('proxy_addr_forced', None) - forced_proxy = opt.get('forced_proxy', None) - - try: - if (proxy or proxy_web) and (forced_proxy or proxy_addr_forced or - channel_proxy_list(url, forced_proxy=forced_proxy)): - import proxytools - proxy_data['addr'], proxy_data['CF_addr'], proxy_data['web_name'], \ - proxy_data['log'] = proxytools.get_proxy_addr(url, post=opt.get('post', None), forced_proxy=forced_proxy) - - if proxy_addr_forced and proxy_data['log']: - proxy_data['log'] = scrapertools.find_single_match(str(proxy_addr_forced), r"{'http.*':\s*'(.*?)'}") - - if proxy and proxy_data['addr']: - if proxy_addr_forced: proxy_data['addr'] = proxy_addr_forced - proxy_data['dict'] = proxy_data['addr'] - proxy_data['stat'] = ', Proxy Direct ' + proxy_data['log'] - elif proxy and proxy_data['CF_addr']: - if proxy_addr_forced: proxy_data['CF_addr'] = proxy_addr_forced - proxy_data['dict'] = proxy_data['CF_addr'] - proxy_data['stat'] = ', Proxy CF ' + proxy_data['log'] - elif proxy and proxy_addr_forced: - proxy_data['addr'] = proxy_addr_forced - proxy_data['dict'] = proxy_data['addr'] - proxy_data['stat'] = ', Proxy Direct ' + proxy_data['log'] - elif proxy and not proxy_data['addr'] and not proxy_data['CF_addr'] \ - and not proxy_addr_forced: - proxy = False - if not proxy_data['web_name']: - proxy_data['addr'], proxy_data['CF_addr'], proxy_data['web_name'], \ - proxy_data['log'] = proxytools.get_proxy_addr(url, forced_proxy='Total') - if proxy_data['web_name']: - proxy_web = True - else: - proxy_web = False - if proxy_data['addr']: - proxy = True - proxy_data['dict'] = proxy_data['addr'] - proxy_data['stat'] = ', Proxy Direct ' + proxy_data['log'] - - if proxy_web and proxy_data['web_name']: - if opt.get('post', None): proxy_data['log'] = '(POST) ' + proxy_data['log'] - url, opt['post'], headers_proxy, proxy_data['web_name'] = \ - proxytools.set_proxy_web(url, proxy_data['web_name'], post=opt.get('post', None)) - if proxy_data['web_name']: - proxy_data['stat'] = ', Proxy Web ' + proxy_data['log'] - if headers_proxy: - request_headers.update(dict(headers_proxy)) - if proxy_web and not proxy_data['web_name']: - proxy_web = False - proxy_data['addr'], proxy_data['CF_addr'], proxy_data['web_name'], \ - proxy_data['log'] = proxytools.get_proxy_addr(url, forced_proxy='Total') - if proxy_data['CF_addr']: - proxy = True - proxy_data['dict'] = proxy_data['CF_addr'] - proxy_data['stat'] = ', Proxy CF ' + proxy_data['log'] - elif proxy_data['addr']: - proxy = True - proxy_data['dict'] = proxy_data['addr'] - proxy_data['stat'] = ', Proxy Direct ' + proxy_data['log'] - - except: - import traceback - logger.error(traceback.format_exc()) - opt['proxy'] = '' - opt['proxy_web'] = '' - proxy_data['stat'] = '' - proxy_data['addr'] = '' - proxy_data['CF_addr'] = '' - proxy_data['dict'] = {} - proxy_data['web_name'] = '' - proxy_data['log'] = '' - url = opt['url_save'] - try: - proxy_data['addr']['https'] = str('https://'+ proxy_data['addr']['https']) - except: - pass - return url, proxy_data, opt - - -def proxy_post_processing(url, proxy_data, response, opt): - opt['out_break'] = False - try: - if ', Proxy Web' in proxy_data.get('stat', ''): - import proxytools - response["data"] = proxytools.restore_after_proxy_web(response["data"], - proxy_data['web_name'], opt['url_save']) - if response["data"] == 'ERROR': - response['sucess'] = False - if response["code"] == 302: - proxy_data['stat'] = ', Proxy Direct' - opt['forced_proxy'] = 'ProxyDirect' - url = opt['url_save'] - opt['post'] = opt['post_save'] - response['sucess'] = False - - if proxy_data.get('stat', '') and response['sucess'] == False and \ - opt.get('proxy_retries_counter', 0) <= opt.get('proxy_retries', 1) and opt.get('count_retries_tot', 5) > 1: - import proxytools - if ', Proxy Direct' in proxy_data.get('stat', ''): - proxytools.get_proxy_list_method(proxy_init='ProxyDirect', - error_skip=proxy_data['addr'], url_test=url) - elif ', Proxy CF' in proxy_data.get('stat', ''): - proxytools.get_proxy_list_method(proxy_init='ProxyCF', - error_skip=proxy_data['CF_addr']) - url = opt['url_save'] - elif ', Proxy Web' in proxy_data.get('stat', ''): - if channel_proxy_list(opt['url_save'], forced_proxy=proxy_data['web_name']): - opt['forced_proxy'] = 'ProxyCF' - url =opt['url_save'] - opt['post'] = opt['post_save'] - else: - proxytools.get_proxy_list_method(proxy_init='ProxyWeb', - error_skip=proxy_data['web_name']) - url =opt['url_save'] - opt['post'] = opt['post_save'] - - else: - opt['out_break'] = True - except: - import traceback - logger.error(traceback.format_exc()) - opt['out_break'] = True - - return response["data"], response['sucess'], url, opt - def downloadpage(url, **opt): @@ -437,147 +278,133 @@ def downloadpage(url, **opt): req_headers['User-Agent'] = random_useragent() url = urllib.quote(url, safe="%/:=&?~#+!$,;'@()*[]") - opt['proxy_retries_counter'] = 0 opt['url_save'] = url opt['post_save'] = opt.get('post', None) - while opt['proxy_retries_counter'] < opt.get('proxy_retries', 1): - response = {} - info_dict = [] - payload = dict() - files = {} - file_name = '' - opt['proxy_retries_counter'] += 1 + response = {} + info_dict = [] + payload = dict() + files = {} + file_name = '' - session.verify = opt.get('verify', True) + session.verify = opt.get('verify', True) - if opt.get('cookies', True): - session.cookies = cj - session.headers.update(req_headers) + if opt.get('cookies', True): + session.cookies = cj + session.headers.update(req_headers) - # Prepare the url in case you need a proxy, or if proxies are sent from the channel - # url, proxy_data, opt = check_proxy(url, **opt) - # if opt.get('proxies', None) is not None: - # session.proxies = opt['proxies'] - # elif proxy_data.get('dict', {}): - # session.proxies = proxy_data['dict'] - proxy_data = {'dict': {}} + proxy_data = {'dict': {}} - inicio = time.time() + inicio = time.time() - if opt.get('timeout', None) is None and HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT is not None: - opt['timeout'] = HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT - if opt['timeout'] == 0: opt['timeout'] = None + if opt.get('timeout', None) is None and HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT is not None: + opt['timeout'] = HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT + if opt['timeout'] == 0: opt['timeout'] = None - if len(url) > 0: - try: - if opt.get('post', None) is not None or opt.get('file', None) is not None: - if opt.get('post', None) is not None: - # Convert string post in dict - try: - json.loads(opt['post']) - payload = opt['post'] - except: - if not isinstance(opt['post'], dict): - post = urlparse.parse_qs(opt['post'], keep_blank_values=1) - payload = dict() + if len(url) > 0: + try: + if opt.get('post', None) is not None or opt.get('file', None) is not None: + if opt.get('post', None) is not None: + # Convert string post in dict + try: + json.loads(opt['post']) + payload = opt['post'] + except: + if not isinstance(opt['post'], dict): + post = urlparse.parse_qs(opt['post'], keep_blank_values=1) + payload = dict() - for key, value in post.items(): - try: - payload[key] = value[0] - except: - payload[key] = '' - else: - payload = opt['post'] - - # Verify 'file' and 'file_name' options to upload a buffer or file - if opt.get('file', None) is not None: - if os.path.isfile(opt['file']): - if opt.get('file_name', None) is None: - path_file, opt['file_name'] = os.path.split(opt['file']) - files = {'file': (opt['file_name'], open(opt['file'], 'rb'))} - file_name = opt['file'] + for key, value in post.items(): + try: + payload[key] = value[0] + except: + payload[key] = '' else: - files = {'file': (opt.get('file_name', 'Default'), opt['file'])} - file_name = opt.get('file_name', 'Default') + ', Buffer de memoria' + payload = opt['post'] - info_dict = fill_fields_pre(url, opt, proxy_data, file_name) - if opt.get('only_headers', False): - # Makes the request with HEAD method - req = session.head(url, allow_redirects=opt.get('follow_redirects', True), - timeout=opt['timeout']) + # Verify 'file' and 'file_name' options to upload a buffer or file + if opt.get('file', None) is not None: + if os.path.isfile(opt['file']): + if opt.get('file_name', None) is None: + path_file, opt['file_name'] = os.path.split(opt['file']) + files = {'file': (opt['file_name'], open(opt['file'], 'rb'))} + file_name = opt['file'] else: - # Makes the request with POST method - req = session.post(url, data=payload, allow_redirects=opt.get('follow_redirects', True), - files=files, timeout=opt['timeout']) + files = {'file': (opt.get('file_name', 'Default'), opt['file'])} + file_name = opt.get('file_name', 'Default') + ', Buffer de memoria' - elif opt.get('only_headers', False): - info_dict = fill_fields_pre(url, opt, proxy_data, file_name) + info_dict = fill_fields_pre(url, opt, proxy_data, file_name) + if opt.get('only_headers', False): # Makes the request with HEAD method req = session.head(url, allow_redirects=opt.get('follow_redirects', True), timeout=opt['timeout']) else: - info_dict = fill_fields_pre(url, opt, proxy_data, file_name) - # Makes the request with GET method - req = session.get(url, allow_redirects=opt.get('follow_redirects', True), - timeout=opt['timeout']) - except Exception as e: - from lib import requests - if not opt.get('ignore_response_code', False) and not proxy_data.get('stat', ''): - req = requests.Response() - response['data'] = '' - response['sucess'] = False - info_dict.append(('Success', 'False')) - response['code'] = str(e) - info_dict.append(('Response code', str(e))) - info_dict.append(('Finalizado en', time.time() - inicio)) - if not opt.get('alfa_s', False): - show_infobox(info_dict) - return type('HTTPResponse', (), response) - else: - req = requests.Response() - req.status_code = str(e) + # Makes the request with POST method + req = session.post(url, data=payload, allow_redirects=opt.get('follow_redirects', True), + files=files, timeout=opt['timeout']) - else: - response['data'] = '' - response['sucess'] = False - response['code'] = '' - return type('HTTPResponse', (), response) + elif opt.get('only_headers', False): + info_dict = fill_fields_pre(url, opt, proxy_data, file_name) + # Makes the request with HEAD method + req = session.head(url, allow_redirects=opt.get('follow_redirects', True), + timeout=opt['timeout']) + else: + info_dict = fill_fields_pre(url, opt, proxy_data, file_name) + # Makes the request with GET method + req = session.get(url, allow_redirects=opt.get('follow_redirects', True), + timeout=opt['timeout']) + except Exception as e: + from lib import requests + if not opt.get('ignore_response_code', False) and not proxy_data.get('stat', ''): + req = requests.Response() + response['data'] = '' + response['sucess'] = False + info_dict.append(('Success', 'False')) + response['code'] = str(e) + info_dict.append(('Response code', str(e))) + info_dict.append(('Finalizado en', time.time() - inicio)) + if not opt.get('alfa_s', False): + show_infobox(info_dict) + return type('HTTPResponse', (), response) + else: + req = requests.Response() + req.status_code = str(e) - response_code = req.status_code + else: + response['data'] = '' + response['sucess'] = False + response['code'] = '' + return type('HTTPResponse', (), response) - response['data'] = req.content - response['url'] = req.url - if not response['data']: - response['data'] = '' - try: - response['json'] = to_utf8(req.json()) - except: - response['json'] = dict() - response['code'] = response_code - response['headers'] = req.headers - response['cookies'] = req.cookies + response_code = req.status_code - info_dict, response = fill_fields_post(info_dict, req, response, req_headers, inicio) + response['data'] = req.content + response['url'] = req.url + if not response['data']: + response['data'] = '' + try: + response['json'] = to_utf8(req.json()) + except: + response['json'] = dict() + response['code'] = response_code + response['headers'] = req.headers + response['cookies'] = req.cookies - if opt.get('cookies', True): - save_cookies(alfa_s=opt.get('alfa_s', False)) + info_dict, response = fill_fields_post(info_dict, req, response, req_headers, inicio) - # is_channel = inspect.getmodule(inspect.currentframe().f_back) - # is_channel = scrapertools.find_single_match(str(is_channel), " 399: - # show_infobox(info_dict) - # raise WebErrorException(urlparse.urlparse(url)[1]) + if opt.get('cookies', True): + save_cookies(alfa_s=opt.get('alfa_s', False)) - if not 'api.themoviedb' in url and not opt.get('alfa_s', False): - show_infobox(info_dict) + # is_channel = inspect.getmodule(inspect.currentframe().f_back) + # is_channel = scrapertools.find_single_match(str(is_channel), " 399: + # show_infobox(info_dict) + # raise WebErrorException(urlparse.urlparse(url)[1]) - # If there is a proxy error, refresh the list and retry the number indicated in proxy_retries - # response['data'], response['sucess'], url, opt = proxy_post_processing(url, proxy_data, response, opt) - # if opt.get('out_break', False): - # break + if not 'api.themoviedb' in url and not opt.get('alfa_s', False): + show_infobox(info_dict) return type('HTTPResponse', (), response) diff --git a/core/proxytools.py b/core/proxytools.py deleted file mode 100644 index f3eefb54..00000000 --- a/core/proxytools.py +++ /dev/null @@ -1 +0,0 @@ -import base64; exec(base64.b64decode('aW1wb3J0IG1hcnNoYWwKZXhlYyhtYXJzaGFsLmxvYWRzKGJhc2U2NC5iNjRkZWNvZGUoJ1l3QUFBQUFBQUFBQUl3QUFBRUFBQUFCenFnSUFBR1FBQUZvQUFHUUJBR1FDQUd3QkFGb0JBR1FCQUdRQ0FHd0NBRm9DQUdRQkFHUUNBR3dEQUZvREFHUUJBR1FDQUd3RUFGb0VBR1FCQUdRQ0FHd0ZBRm9GQUdRQkFHUUNBR3dHQUZvR0FHUUJBR1FDQUd3SEFGb0hBR1FCQUdRQ0FHd0lBRm9JQUdRQkFHUUNBR3dKQUZvSkFHUUJBR1FEQUd3S0FHMExBRm9MQUcwTUFGb01BRzBOQUZvTkFBRmtBUUJrQkFCc0RnQnREd0JhRHdBQlpBRUFaQUlBYkJBQVdoQUFaUkVBV2hJQWFRY0FaQVVBWkFZQU5tUUhBR1FJQURaa0J3QmtDUUEyWkFjQVpBb0FObVFIQUdRTEFEWmtCd0JrREFBMlpBY0FaQTBBTmxvVEFHUU9BR1FQQUdRUUFHUVJBR1FTQUdRVEFHUVVBR1FWQUdRV0FHUVhBR1FZQUdRWkFHUWFBR1FiQUdRY0FHUWRBR1FlQUdRZkFHUWdBR1FoQUdRaUFHUWpBR1FrQUdRbEFHUW1BR1FuQUdRb0FHUXBBR1FxQUdRckFHUXNBR1F0QUdRdUFHUXZBR1F3QUdjakFGb1VBR1FPQUdRWEFHUVBBR1F4QUdRVkFHUVNBR1FXQUdRYUFHUVlBR1FiQUdRZUFHUWZBR1FjQUdReUFHUXpBR1EwQUdRMUFHUWlBR1EyQUdRbEFHY1VBRm9WQUdrQ0FHUm1BR1E5QURaa1p3QmtRZ0EyV2hZQVpEMEFXaGNBYVFRQVpFTUFaQW9BTm1SRUFHUUdBRFprUlFCa0NBQTJaRVlBWkEwQU5sb1lBR1JIQUlRQUFGb1pBR1JJQUlRQUFGb2FBR1VSQUdSSkFHVVNBR1JLQUdSTEFJUUVBRm9iQUdSTUFJUUFBRm9jQUdVU0FHUk5BSVFCQUZvZEFHUUNBR1JPQUlRQkFGb2ZBR1JQQUlRQUFGb2dBR1FDQUdSUUFJUUJBRm9oQUdRQ0FHUUNBR1JSQUlRQ0FGb2lBR1JTQUlRQUFGb2pBR1JUQUlRQUFGb2tBR2NBQUdSVUFHUlZBR1JXQUdSWEFHUllBR1JaQUdSYUFHUmJBR1JjQUdSZEFHUllBR1JlQUdSWUFHUlZBR1JmQUdSZ0FHUmNBR1JoQUdSaUFHUmpBR1JZQUdSaEFHUmtBR1JsQUdjWUFHY0NBRm9sQUdRQ0FGTW9hQUFBQUhQc0Z3QUFDbEpsWVd4cGVtRWdablZ1WTJsdmJtVnpJR1JsSUc5amRXeDBZV05wdzdOdUlHUmxJR3hoSUhWeWJDQmtaU0JzWVhNZ2QyVmlJR1JsSUdSbGMzUnBibThnYkdsemRHRmtZWE1zSUhCaGNtRWdZbTl5WkdWaGNpQnNiM01nWW14dmNYVmxiM01nYW5Wa2FXTnBZV3hsY3lCdklHUmxJR3hoY3lCdmNHVnlZV1J2Y21GekxpQWdVMlVnY0hKbGRHVnVaR1VnY1hWbElHVnpkR1VnY0hKdlkyVnpieUJ6WldFZ2JHOGdiY09oY3lCaGRYUnZiY09oZEdsamJ5QjVJSFJ5WVc1emNHRnlaVzUwWlNCd1lYSmhJR3h2Y3lCallXNWhiR1Z6SUdWdUlHeHZJSEJ2YzJsaWJHVXVDZ3BGZUdsemRHVnVJR1J2Y3lCMGFYQnZjeUJrWlNCd2NtOTRhV1Z6SUdkeVlYUjFhWFJ2Y3pvS0xRbFFjbTk0ZVNCWFpXSUtMUWxRY205NGVTRGlnSnhrYVhKbFkzUnY0b0NkTGlBZ1JHVnVkSEp2SUdSbElHVnpkR1VnWjNKMWNHOGdhR0Y1SUdScGNtVmpZMmx2Ym1WeklIRjFaU0J6YjNCdmNuUmhjaUJEYkc5MVpFWnNZWEpsTGdvS1JXNGdaV3dnVUhKdmVIa2dWMlZpTENCelpTQnNiR0Z0WVNCaElIVnVZU0IzWldJZ1VISnZlSGtnWkc5dVpHVWdjMlVnYkdVZ2NHRnpZU0JqYjIxdklGQnZjM1FnYkdFZ2RYSnNJR1JsSUd4aElIZGxZaUJrWlNCa1pYTjBhVzV2TENCaGM4T3RJR052Ylc4Z2JHOXpJSEJoY3NPaGJXVjBjbTl6SUhGMVpTQnBibVJwWTJGdUlIRjFaU0JPVHlCbGJtTnlhWEIwWlNCc1lTQjFjbXdnYnlCc2IzTWdaR0YwYjNNc0lIa2djWFZsSUhQRHJTQjFjMlVnWTI5dmEybGxjeTRLQ2tWdUlHeHZjeUJrWVhSdmN5QmtaU0J5WlhOd2RXVnpkR0VnYUdGNUlIRjFaU0J6ZFhCeWFXMXBjaUJrWlNCc1lYTWdkWEpzY3lCMWJtRWdZMkZpWldObGNtRWdlU0IxYm1FZ1kyOXNZU3dnY1hWbElIWmhjc090WVc0Z2MyVm53N3B1SUd4aElIZGxZaUJRY205NGVTNGdJRVZzSUhKbGMzVnNkR0ZrYnlCbGN5QjFibUVnY01PaFoybHVZU0JpWVhOMFlXNTBaU0J3WVhKbFkybGtZU0JoSUd4aElIRjFaU0J6WlNCdlluUmxibVJ5dzYxaElITnBiaUIxYzJGeUlHVnNJSEJ5YjNoNUxDQmhkVzV4ZFdVZ1pXNGdaV3dnWTJGdVlXd2djWFZsSUd4dklIVnpaU0J6WlNCa1pXSmxJSFpsY21sbWFXTmhjaUJ4ZFdVZ2JHRnpJR1Y0Y0hKbGMybHZibVZ6SUhKbFoyVjRJR1oxYm1OcGIyNWhiaUJ6YVc0Z2NISnZZbXhsYldGekxnb0tSV3dnVUhKdmVIa2dWMlZpSUhCaGNtVmpaU0J0dzZGeklHVnpkR0ZpYkdVZ2VTQnl3NkZ3YVdSdkxDQndaWEp2SUhScFpXNWxJR1ZzSUdsdVkyOXVkbVZ1YVdWdWRHVWdjWFZsSUc1dklITmxJSFpoYkdVZ2QyVmljeUJ4ZFdVZ2RYTmxiaUJEYkc5MVpHWnNZWEpsTGdvS1UyVWdhR0VnWTNKbFlXUnZJSFZ1SUVScFkyTnBiMjVoY21sdklHTnZiaUJzWVhNZ1pXNTBjbUZrWVhNZ2RtVnlhV1pwWTJGa1lYTWdaR1VnVUhKdmVIa2dWMlZpY3k0Z0lFVnVJR1Z6WVhNZ1pXNTBjbUZrWVhNZ2MyVWdaVzVqZFdWdWRISmhiaUJzYjNNZ2NHRnl3NkZ0WlhSeWIzTWdibVZqWlhOaGNtbHZjeUJ3WVhKaElHVnVkbWxoY2lCc1lTQjFjbXdnWkdVZ2JHRWdkMlZpSUdSbElHUmxjM1JwYm04c0lHRnp3NjBnWTI5dGJ5QndZWEpoSUdOdmJuWmxjblJwY2lCc2IzTWdaR0YwYjNNZ1pHVWdjbVYwYjNKdWJ5QmhJR0ZzWjI4Z2RISmhibk53WVhKbGJuUmxJSEJoY21FZ1pXd2dZMkZ1WVd3dUlDQklZV0p5dzZFZ2NYVmxJR2x5SUdIRHNXRmthV1Z1Wkc4Z2VTQmliM0p5WVc1a2J5QlhaV0p6SUZCeWIzaDVJSE5sWjhPNmJpQnpkU0J5Wlc1a2FXMXBaVzUwYnlCNUlHVnpkR0ZpYVd4cFpHRmtMZ29LUld3Z1VISnZlSGtnNG9DY1pHbHlaV04wYitLQW5Td2daWE1nZEc5MFlXeHRaVzUwWlNCMGNtRnVjM0JoY21WdWRHVWdjR0Z5WVNCbGJDQmpZVzVoYkN3Z2NHVnliV2wwYVdWdVpHOGdkWE5oY2lCUWIzTjBMQ0I1SUdWdUlHRnNaM1Z1YjNNZ1kyRnpiM01nYkd4aGJXRmtZWE1nWVNCM1pXSnpJSEYxWlNCMWMyRnVJRU5zYjNWa1pteGhjbVV1SUNCRmJDQndjbTlpYkdWdFlTQnhkV1VnZEdsbGJtVnVJR1Z6ZEc5eklGQnliM2hwWlhNZ1pYTWdjM1VnWlhoMGNtVnRZV1JoSUhadmJHRjBhV3hwWkdGa0lHVnVJR3hoSUdScGMzQnZibWxpYVd4cFpHRmtJSGtnZEdsbGJYQnZJR1JsSUhKbGMzQjFaWE4wWVM0S0NsTmxJR2hoSUdOdmJtWmxZMk5wYjI1aFpHOGdkVzVoSUd4cGMzUmhJR2x1YVdOcFlXd2daR1VnVUhKdmVHbGxjeUJrYVhKbFkzUnZjeUI1SUc5MGNtRWdaR1VnVUhKdmVHbGxjeUJEYkc5MVpFWnNZWEpsTENCd2NtbHVZMmx3WVd4dFpXNTBaU0JrWlNCVGFXNW5ZWEIxY2lCNUlFaHZibWNnUzI5dVp5d2djWFZsSUdoaGJpQnphV1J2SUhCeWIySmhaRzl6SUhrZ2NYVmxJSE4xWld4bGJpQm1kVzVqYVc5dVlYSWdZMjl1SUhKbFozVnNZWEpwWkdGa0xpQWdRU0JsYzNSaElHeHBjM1JoSUdsdWFXTnBZV3dnYzJVZ1ljT3hZV1JsYmlCa2FXN0RvVzFwWTJGdFpXNTBaU0J2ZEhKdmN5QmtaU0IzWldJb2N5a2djWFZsSUd4cGMzUmhiaUJsYzNSdmN5QndjbTk0ZVNCbmNtRjBkV2wwYjNNc0lHTnZiaUJoYkdkMWJtOXpJR055YVhSbGNtbHZjeUJrWlNCaXc3cHpjWFZsWkdFZ1pYaHBaMlZ1ZEdWeklHUmxJR1JwYzNCdmJtbGlhV3hwWkdGa0lIa2dkR2xsYlhCdklHUmxJSEpsYzNCMVpYTjBZUzRLQ2xObElHaGhJRzl3ZEdGa2J5QndiM0lnZFhOaGNpQndiM0lnWkdWbVpXTjBieUJzYjNNZ1VISnZlR2xsY3lEaWdKeGthWEpsWTNSdmMrS0FuU3dnWkdWcVlXNWtieUJzYjNNZ1VISnZlSGtnVjJWaWN5QmpiMjF2SUdGc2RHVnlibUYwYVhaaElHRjFkRzl0dzZGMGFXTmhJSEJoY21FZ1pXd2dZMkZ6YnlCa1pTQnBibVJwYzNCdmJtbGlhV3hwWkdGa0lHUmxJRkJ5YjNocFpYTWc0b0NjWkdseVpXTjBiM1BpZ0owdUNncEVaWE5rWlNCamRXRnNjWFZwWlhJZ1EyRnVZV3dnYzJVZ2NIVmxaR1Z1SUdoaFkyVnlJR3hzWVcxaFpHRnpJR0VnU0hSMGNIUnZiMnh6SUhCaGNtRWdjWFZsSUhObFlXNGdabWxzZEhKaFpHRnpJSEJ2Y2lCaGJHZkR1bTRnZEdsd2J5QmtaU0JRY205NGVTNGdJRXhoY3lCc2JHRnRZV1JoY3lCa1pXSmxiaUJwYm1Oc2RXbHlJR3h2Y3lCd1lYTERvVzFsZEhKdmN5QWljSEp2ZUhrOVZISjFaU0J2SUhCeWIzaDVYM2RsWWoxVWNuVmxJaUI1SUNKbWIzSmpaV1JmY0hKdmVIazlWRzkwWVd4OFVISnZlSGxFYVhKbFkzUjhVSEp2ZUhsRFJueFFjbTk0ZVZkbFlpSXVJQ0JEYjI0Z2JHRWdiM0JqYWNPemJpQWlWRzkwWVd3aUlHRnpkVzFwY3NPaElDSlFjbTk0ZVVScGNtVmpkQ0lnY0dGeVlTQWljSEp2ZUhrOVZISjFaU0lLQ2xSQlFreEJVem9LUTI5dGJ5QjJZU0JoSUhObGNpQjFiaUJ0dzdOa2RXeHZJR1JsSUcxMVkyaHZJSFZ6Ynl3Z2MyVWdhR0VnYjNKbllXNXBlbUZrYnlCamIyNGdkR0ZpYkdGeklHVnVJRzFsYlc5eWFXRWdaVzRnZG1WNklHUmxJR1Z1SUdGeVkyaHBkbTl6SUM1cWMyOXVMQ0J3WVhKaElHMXBibWx0YVhwaGNpQmxiQ0JwYlhCaFkzUnZJR1Z1SUdWc0lISmxibVJwYldsbGJuUnZMaUFnVUc5eUlHOTBjbUVnY0dGeWRHVXNJR1Z6SUhKbFkyOXRaVzVrWVdKc1pTQnhkV1VnWlhOMFpTQXVjSGtnS0hrZ2NHOXlJSFJoYm5SdklITjFjeUIwWVdKc1lYTXBJR1Z6ZE1PcElPS0FuR1Z1WTI5a1pXVGlnSjBnYnlCdFpXcHZjaUJsYm1OeWFYQjBZV1J2SUhCaGNtRWdaWFpwZEdGeUlIRjFaU0JzWVhNZ1lXTmphVzl1WlhNZ2VTQmthWEpsWTJOcGIyNWxjeUJ4ZFdVZ1lYRjF3NjBnYzJVZ1pHVnpZM0pwWW1WdUlITmxZVzRnWnNPaFkybHNiV1Z1ZEdVZ2JtVjFkSEpoYkdsNllXSnNaWE11Q2dvdENXd3hNVEZzYkNBOUlHeHBjM1JoSUdSbElIZGxZbk1nWW14dmNYVmxZV1JoY3lCaElITmxjaUIwY21GMFlXUmhjeUJ3YjNJZ1VISnZlSGwwYjI5c2N5NGdJRlJwWlc1bElHeHBjM1JoSUdSbElHSnNiM0YxWlc5eklHZGxiMmR5dzZGbWFXTmhMZ290Q1d3eGJERnNiQ0E5SUd4cGMzUmhJR1JsSUZCeWIzaHBaWE1nNG9DY1pHbHlaV04wYjNQaWdKMGdhVzVwWTJsaGJHVnpMQ0IyWlhKcFptbGpZV1J2Y3lCMFlXNTBieUJ3WVhKaElHaDBkSEFnWTI5dGJ5QndZWEpoSUdoMGRIQnpDaTBnSUNCc01URXhiREVnUFNCc2FYTjBZU0JrWlNCUWNtOTRhV1Z6SU9LQW5HUnBjbVZqZEc5eklFTnNiMjlrUm14aGNtWGlnSjBnYVc1cFkybGhiR1Z6TENCMlpYSnBabWxqWVdSdmN3b3RDV3hzTVRGc2JDQTlJR3hwYzNSaElHUmxJRkJ5YjNoNUlGZGxZbk1zSUdOdmJpQnpkWE1nY0dGeXc2RnRaWFJ5YjNNZ1pHVWdkWE52Q2kwSmJERXhNVEV4SUQwZ2JHbHpkR0VnWkdVZ2QyVmljeUJpYkc5eGRXVmhaR0Z6SUdSdmJtUmxJSE5sSUdScFkyVWdZMjl1SUhGMXc2a2dkR2x3YnlCa1pTQndjbTk0ZVNCbGMzQmxZMmxtYVdOdklITmxJSEYxYVdWeVpTQjBjbUYwWVhJdUlDQlRhU0JzWVNCM1pXSWdZbXh2Y1hWbFlXUmhJRzV2SUdWemRNT2hJR1Z1SUdWemRHRWdiR2x6ZEdFc0lITmxJSFJ5WVhSaElHTnZiaUJzYjNNZ2NISnZlR2xsY3lCd2IzSWdaR1ZtWldOMGJ5NEtDazNEaVZSUFJFOVRPZ290Q1dkbGRGOXdjbTk0ZVY5c2FYTjBYMjF2Ym1sMGIzSTZJR1Z6SUhWdUlGTkZVbFpKUTBsUElIRjFaU0J6WlNCc1lXNTZZU0JoYkNCcGJtbGphVzhnWkdVZ1FXeG1ZUzRnVTJrZ1pXNGdiRzl6SUhObGRIUnBibWR6SUhObElHaGhJR1Z6Y0dWamFXWnBZMkZrYnlCeGRXVWdaV3dnZFhOdklHUmxJQ0pCWTJObGMyOGdRV3gwWlhKdVlYUnBkbThnWVNCc1lTQlhaV0lpSUdWemRNT2hJR1JsYzJGamRHbDJZV1J2TENCelpTQmhZM1JwZG1FZ1pXd2dJazF2Wkc4Z1JHVnRZVzVrWVNJZ2RYTmhibVJ2SUd4aGN5QmthWEpsWTJsdmJtVnpJR1JsSUZCeWIzaHBaWE1nY0c5eUlHUmxabVZqZEc4dUlDQlRhU0JsYzNURG9TQmhZM1JwZG04c0lITmxJR0Z6ZFcxbElHVnNJQ0pOYjJSdklFWnZjbnBoWkc4aUlIa2djMlVnWldwbFkzVjBZWExEb1NCd1pYSnB3N05rYVdOaGJXVnVkR1VnS0dOaFpHRWdNVElnYUc5eVlYTXBMQ0J6YVdWdGNISmxJSEYxWlNCdWJ5Qm9ZWGxoSUhKbGNHOXlaSFZqWTJsdmJtVnpJR0ZqZEdsMllYTXVJQ0JGYzNSbElITmxjblpwWTJsdklISmxZV3hwZW1FZ2JHRnpJSE5wWjNWcFpXNTBaU0JtZFc1amFXOXVaWE02Q2dsdkNVbGtaVzUwYVdacFkyRWdaV3dnY0dIRHJYTWdaR1ZzSUhWemRXRnlhVzhnZVNCaFkzUnBkbUV2WkdWellXTjBhWFpoSUdWc0lIQnliM2g1SUdWdUlHTmhaR0VnZDJWaUlHSnNiM0YxWldSaFpDQnpaV2ZEdW00Z2JHRWdiR2x6ZEdFZ2NHRnBjMlZ6SUdKc2IzRjFaV0ZrYjNNS0NXOEpRV3hsWVhSdmNtbDZZU0JzWVhNZ2JHbHpkR0Z6SUdsdWFXTnBZV3hsY3lCa1pTQmthWEpsWTJOcGIyNWxjeUJ3Y205NGVRb2dJQ0FnYndsVGFTQnVieUJvWVhrZ1lteHZjWFZsYjNNZ1pXNGdiR0VnZW05dVlTQm5aVzluY3NPaFptbGpZU0JrWld3Z2RYTjFZWEpwYnl3Z1lXSmhibVJ2Ym1FS0xTQWdJRk5wSUdWemRHRnRiM01nWlc0Z0lrMXZaRzhnUm05eWVtRmtieUlzSUd4c1lXMWhJR0ZzSUczRHFYUnZaRzhnWjJWMFgzQnliM2g1WDJ4cGMzUmZiV1YwYUc5a0xDQnhkV1VnY21WaGJHbDZZU0JsYzNSaGN5QjBZWEpsWVhNZ1pHVWdhVzVwWTJsc1lXbDZZV05wdzdOdUlHUmxJSFJoWW14aGN6b0tDVzhKUTJGeVoyRWdiR0VnYkdsemRHRWdhVzVwWTJsaGJDQmtaU0JRY205NGFXVnpJT0tBbkdScGNtVmpkRzl6NG9DZElIa2diRzl6SUdGc1pXRjBiM0pwZW1FS0NXOEpSR1VnYkdFZ2QyVmlJT0tBbkVocFpHVk5lUzV1WVcxbDRvQ2RJRzlpZEdsbGJtVWdkVzVoSUd4cGMzUmhJR0ZrYVdOcGIyNWhiQ0JrWlNCUWNtOTRhV1Z6SU9LQW5HUnBjbVZqZEc5ejRvQ2RDZ2x2Q1ZWellXNWtieUJzWVNCM1pXSWdZbXh2Y1hWbFlXUmhJT0tBbkcxbGFtOXlkRzl5Y21WdWRDNWpiMjNpZ0owc0lITmxJSFpoYkdsa1lXNGdiRzl6SUZCeWIzaHBaWE1nNG9DY1pHbHlaV04wYjNQaWdKMGdhR0Z6ZEdFZ2NYVmxJSE5sSUdWdVkzVmxiblJ5WVNCMWJtOGdjWFZsSUhKbGMzQnZibVJsSUdOdmNuSmxZM1JoYldWdWRHVXVJQ0JGYzNSbElIQnliM2g1SUdWdVkyOXVkSEpoWkc4Z2NHRnpZU0JoSUhObGNpQmxiQ0IxYzJGa2J5QndiM0lnWkdWbVpXTjBieUJrZFhKaGJuUmxJR1Z6ZEdVZ2NHVnlhVzlrYndvZ0lDQWdid2xUYVcxcGJHRnlJR0VnVUhKdmVHbGxjeURpZ0p4a2FYSmxZM1J2YytLQW5Td2daR1VnYkdFZ2JHbHpkR0VnYVc1cFkybGhiQ0J6WlNCaGJHVmhkRzl5YVhwaElIa2djMlVnZG1WeWFXWnBZMkVnZFc1dklIRjFaU0JtZFc1amFXOXVaUW9KYndsVFpTQjJZV3hwWkdFZ2JHRWdiR2x6ZEdFZ1pHVWdVSEp2ZUhrZ1YyVmljeUJvWVhOMFlTQnhkV1VnYzJVZ1pXNWpkV1Z1ZEhKaElIVnVZU0J4ZFdVZ2NtVnpjRzl1WkdFZ1kyOXljbVZqZEdGdFpXNTBaUzRnSUVWemRHRWdVSEp2ZUhrZ1YyVmlJR1Z1WTI5dWRISmhaR0VnY0dGellTQmhJSE5sY2lCc1lTQjFjMkZrWVNCd2IzSWdaR1ZtWldOMGJ5QmtkWEpoYm5SbElHVnpkR1VnY0dWeWFXOWtieTRnUlhNZ2NISmxabVZ5YVdKc1pTQjFkR2xzYVhwaGNpQWlTR2xrWlM1dFpTSWdjRzl5SUhOMUlISmxjSFYwWVdOcHc3TnVJSGtnY0c5eWNYVmxJSE52Y0c5eWRHRWdZbWxsYmlCc1lYTWdiR3hoYldGa1lYTWdZMjl1SUZCUFUxUWdaR1Z6WkdVZ1pXd2dZMkZ1WVd3dUlDQlRhU0J1YnlCbGMzUjFkbWxsY21FZ1pHbHpjRzl1YjJKc1pTd2dkR1VnZEc5dFlYTERyV0VnYjNSeVlTd2djR1Z5YnlCc1lYTWdiR3hoYldGa1lYTWdZMjl1SUZCUFUxUWdjMlVnY21WaGJHbDZZWExEcldGdUlIQnZjaUFpVUhKdmVIbEVhWEpsWTNRaUNnbHZDVVZ1SUd4aElPS0FuSGRvYVhSbGJHbHpkT0tBblNCelpTQmhibUZzYVhwaElITnBJR2hoZVNCdHc2RnpJR1JsSUhWdVlTQlFjbTk0ZVNCaGJIUmxjbTVoZEdsMmJ5QndiM0lnZDJWaUlHSnNiM0YxWldGa1lTNGdJRk5wSUdWeklHRnp3NjBzSUhObElHRnNaV0YwYjNKcGVtRnVJR3hoY3lCbGJuUnlZV1JoY3lCNUlITmxJR1Z6WTI5blpTQjFibUVnY0dGeVlTQmxjM1JsSUhCbGNtbHZaRzhLQ1c4SlRHOXpJR1JoZEc5eklHUmxJRkJ5YjNoNUlPS0FuR1JwY21WamRHL2lnSjBnWVdOMGFYWnZMQ0JzYVhOMFlTQmtaU0JRY205NGFXVnpJT0tBbkdScGNtVmpkRzl6NG9DZExDQnViMjFpY21VZ1pHVWdVSEp2ZUhrZ1YyVmlJR0ZqZEdsMmJ5d2dJSGtnVUhKdmVIa2c0b0NjZDJocGRHVnNhWE4wNG9DZElHVnVJSFZ6YnlCelpTQm5kV0Z5WkdGdUlHTnZiVzhnY0dGeXc2RnRaWFJ5YjNNZ1pXNGc0b0NjYzJWMGRHbHVaM011ZUcxc0xDQmxibU52WkdWa0lFSmhjMlUyTk9LQW5Td2dZWFZ1Y1hWbElHVnpkTU9oSUhCeVpYQmhjbUZrYnlCd1lYSmhJR1Z1WTNKcGNIUmhjbXh2SUdOdmJpQjFiaUJ1YVhabGJDQmtaU0J6WldkMWNtbGtZV1FnYmNPaGN5QmhiSFJ2TGdvdENYSmhibVJ2YldsNlpWOXNhWE4wY3pvZ1lXeGxZWFJ2Y21sNllTQnNZWE1nYkdsemRHRnpJR2x1YVdOcFlXeGxjeUJrWlNCa2FYSmxZMk5wYjI1bGN5QndjbTk0ZVFvdENYTmxkRjl3Y205NGVWOTNaV0k2SUhCeVpYQmhjbUVnYkc5eklIQmhjc09oYldWMGNtOXpJSEJoY21FZ2JHeGhiV0Z5SUdFZ2RXNGdVSEp2ZUhrZ1YyVmlDaTBKY21WemRHOXlaVjloWm5SbGNsOXdjbTk0ZVY5M1pXSTZJSEpsZEdseVlTQnNiM01nWkdGMGIzTWdaR1ZzSUZCeWIzaDVJRmRsWWlCa1pTQnNZU0J5WlhOd2RXVnpkR0VzSUhCaGNtRWdhR0ZqWlhKc2J5QjBjbUZ1YzNCaGNtVnVkR1VnWVd3Z1kyRnVZV3dLTFFsamFHRnVibVZzWDNCeWIzaDVYMnhwYzNRNklIWmxjbWxtYVdOaElITnBJR3hoSUhkbFlpQmtaU0JzWVNCMWNtd2daWE4wdzZFZ1lteHZjWFZsWVdSaElHVnVJR1Z6WVNCblpXOXNiMk5oYkdsNllXTnB3N051Q2kwSloyVjBYM0J5YjNoNVgyRmtaSEk2SUhCaGMyRWdiRzl6SUdSaGRHOXpJR1JsYkNCUWNtOTRlU0RpZ0p4a2FYSmxZM1J2NG9DZExDQlFjbTk0ZVNEaWdKeERiRzkxWkVac1lYSmw0b0NkSUhrZ1VISnZlSGtnVjJWaUlIQnZjaUJrWldabFkzUnZMQ0J0YjJScFptbGpZV1J2Y3lCamIyNGdiRzl6SUhaaGJHOXlaWE1nWkdVZ2JHRWc0b0NjZDJocGRHVnNhWE4wNG9DZExDQnphU0JzYjNNZ2FHRjVDaTBKWlc1amNubHdkRjl3Y205NGVUb2dZMjlrYVdacFkyRWdaVzRnUW1GelpUWTBJR3h2Y3lCa1lYUnZjeUJ3WVhOaFpHOXpMQ0JqYjI0Z2NHOTBaVzVqYVdGc0lIQmhjbUVnWlc1amNtbHdkR0ZqYWNPemJnb3RDV1JsWTNKNWNIUmZjSEp2ZUhrNklHUmxZMjlrYVdacFkyRWdaR1Z6WkdVZ1FtRnpaVFkwSUd4dmN5QmtZWFJ2Y3lCd1lYTmhaRzl6Q21uLy8vLy9UaWdEQUFBQWRBWUFBQUJqYjI1bWFXZDBCZ0FBQUd4dloyZGxjblFOQUFBQWNHeGhkR1p2Y20xMGIyOXNjeWdCQUFBQWRCRUFBQUJYWldKRmNuSnZja1Y0WTJWd2RHbHZibk1GQUFBQVJWTXNVRTl6RkFBQUFIZDNkeTV0WldwdmNuUnZjbkpsYm5RdVkyOXRkQUlBQUFCRlUzTVVBQUFBZDNkM0xtMWxhbTl5ZEc5eWNtVnVkQzV2Y21kekZBQUFBSGQzZHk1dFpXcHZjblJ2Y25KbGJuUXVibVYwY3dnQUFBQm5iblZzWVM1dWRYTUlBQUFBWjI1MWJHRXVjMlZ6RkFBQUFIZDNkeTVsYkdsMFpYUnZjbkpsYm5RdVltbDZjeEVBQUFCdFpXcHZjblJ2Y25KbGJuUXhMbTVsZEhNU0FBQUFOamd1TVRnekxqRTRNeTQwTkRveE1URXhjeEVBQUFBeE1Ua3VNamd1TXpFdU1qazZPRGc0T0hNVEFBQUFNVFUzTGpJek1DNDBOUzR4TWpFNk1URXhNWE1WQUFBQU1USTRMakU1T1M0eE5USXVNVFk1T2pNeE16TXdjeEVBQUFBNU1DNHhORFV1TWpJeExqRTROam80TUhNU0FBQUFNVFUzTGpJek1DNHpNeTR6TnpveE1URXhjeE1BQUFBeE56Z3VNVEk0TGpFd015NHpPak14TXpNd2N4TUFBQUF4TURRdU1qUTRMakUxTkM0NU56b3hNVEV4Y3hNQUFBQXhOVGN1TWpNd0xqTTBMakU1TURveE1URXhjeFFBQUFBeE1qZ3VNVGs1TGpFMU5pNHpOem96TVRNek1ITVZBQUFBTVRJNExqRTVPUzR4TXpndU1UTTJPak14TXpNd2N4TUFBQUF4TVRFdU1qSXpMamMxTGpFM09EbzRNRGd3Y3hVQUFBQXhNamd1TVRrNUxqRXpNaTR4TWpnNk16RXpNekJ6RlFBQUFERXlPQzR4T1RrdU1UTTJMakU1Tnpvek1UTXpNSE1WQUFBQU1USTRMakU1T1M0eE5UVXVNVGd5T2pNeE16TXdjeFVBQUFBeE1qZ3VNVGs1TGpFME55NHlNRGc2TXpFek16QnpGUUFBQURFeU9DNHhPVGt1TVRRMExqRTNORG96TVRNek1ITVVBQUFBTVRJNExqRTVPUzR4TkRndU5EVTZNekV6TXpCekZRQUFBREV5T0M0eE9Ua3VNVFk0TGpFek1qb3pNVE16TUhNVUFBQUFNVGM0TGpFeU9DNDJNeTR4TlRVNk16RXpNekJ6RXdBQUFEVXlMakUyTXk0eU1EY3VNVEF3T2pNeE1qaHpFd0FBQURFd015NDBNaTR5TVRNdU1UYzNPamd3T0RCekV3QUFBREV3TXk0ME1pNHlNVE11TVRjMk9qZ3dPREJ6RGdBQUFERXpMamN3TGpJMExqRTFPamd3Y3hFQUFBQXhOVEF1TVRBNUxqVTFMakU1TURvNE0zTVFBQUFBTVRVNUxqRXpPQzR4TGpFNE5UbzRNSE1TQUFBQU1qRTRMakV3TWk0eE1Ua3VOem80TXpnd2N4SUFBQUF5TVRndU1UQXlMakV4T1M0M09qZ3pPRE56RWdBQUFESXhPQzR4TURJdU1URTVMamM2T0RNNE1uTU9BQUFBTkRjdU9UQXVOVEF1TVRjNk9EQnpFZ0FBQURJeE9DNHhNREl1TVRFNUxqYzZPRE00TlhNU0FBQUFNakU0TGpFd01pNHhNVGt1TnpvNE1UazNjeElBQUFBMU9TNHhORGt1TmpBdU1qQTVPamd6T0RCekV3QUFBREV4TXk0eU5USXVNakl5TGpjek9qZ3pPREJ6RVFBQUFESXhNQzR3TGpFeU9DNDFPRG80TURnd2N4QUFBQUE1TXk0NE9DNDNOUzR6TVRvNE1EZ3djeE1BQUFBeE1qZ3VNVGs1TGpJd05DNDJPak14TXpNd2N4QUFBQUF4TXk0eU1qa3VOall1TVRVME9qZ3djeEVBQUFBeE16a3VPVGt1Tmk0eE5ESTZNekV5T0hNT0FBQUFNVFU1TGpZMUxqRXVNalk2T0RCekVBQUFBRFUwTGpJMU5DNHhPVGd1TnpFNk9EQnpPZ0FBQUdoMGRIQnpPaTh2Ym13dWFHbGtaWEJ5YjNoNUxtMWxMMmx1WTJ4MVpHVnpMM0J5YjJObGMzTXVjR2h3UDJGamRHbHZiajExY0dSaGRHVnpGd0FBQUdoMGRIQnpPaTh2Ym13dWFHbGtaWEJ5YjNoNUxtMWxkQUFBQUFCekNnQUFBQzluYnk1d2FIQS9kVDF6RFFBQUFDWmlQVFI4Sm1GdGNEdGlQVFJ6T0FBQUFIVTlKWE1tY0hKdmVIbGZabTl5YldSaGRHRmZjMlZ5ZG1WeVBXNXNKbUZzYkc5M1EyOXZhMmxsY3oweEptVnVZMjlrWlZWU1REMHdjd2NBQUFCb2FXUmxMbTFsY3pVQUFBQm9kSFJ3T2k4dmQyVmljSEp2ZUhrdWRHOHZhVzVqYkhWa1pYTXZjSEp2WTJWemN5NXdhSEEvWVdOMGFXOXVQWFZ3WkdGMFpYTVNBQUFBYUhSMGNEb3ZMM2RsWW5CeWIzaDVMblJ2Y3c0QUFBQXZZbkp2ZDNObExuQm9jRDkxUFhOR0FBQUFkVDBsY3labGJtTnZaR1ZWVWt3OU1DWmxibU52WkdWUVlXZGxQVEFtWVd4c2IzZERiMjlyYVdWelBXOXVKbk4wY21sd1NsTTlNQ1p6ZEhKcGNFOWlhbVZqZEhNOU1ITUxBQUFBZDJWaWNISnZlSGt1ZEc5MEJ3QUFBRkJ5YjNoNVEwWnpFQUFBQUZCeWIzaDVWMlZpT21ocFpHVXViV1Z6SEFBQUFGQnliM2g1VjJWaU9taHBaR1V1YldVc2QyVmljSEp2ZUhrdWRHOTBDQUFBQUZCeWIzaDVWMlZpWXdBQUFBQUJBQUFBQXdBQUFFTUFBQUJ6VndBQUFIUUFBSFFCQUdRQkFJUUNBSDBBQUhrbkFIUUNBR29EQUdRQ0FId0FBSU1BQVdvRUFJTUFBQUYwQlFCcUJnQmtBd0NEQVFBQlYyNGFBQUVCQVhRSEFHb0lBSFFKQUdvS0FJTUFBSU1CQUFGdUFRQllaQUFBVXlnRUFBQUFUbU1DQUFBQUVBQUFBQXdBQUFCVEFBQUFjNDREQUFCa0FRQmtBQUJzQUFCOUFnQmtBUUJrQUFCc0FRQjlBd0IwQWdCOUJBQjVNd0IwQXdCcUJBQmtBZ0NEQVFCelVBQjhBUUJ5UmdCMEJRQnFCZ0JrQXdDREFRQUJiZ0FBZEFjQWd3QUFBVzRBQUZkdUpBQUJBUUY4QVFCeWJRQjBCUUJxQmdCa0F3Q0RBUUFCYmdBQWRBY0Fnd0FBQVc0QkFGaDhBd0JxQ0FCcUNRQjhBd0JxQ0FCcUNnQjBBd0JxQ3dDREFBQmtCQUJrQlFDREF3Q0RBUUJ5c1FCa0JnQjlCUUIwREFCOUJBQnVGUUJrQndCOUJRQjhBUUJ5eGdCMERBQjlCQUJ1QUFCMEF3QnFEUUJrQ0FCMERnQjhCUUNEQVFDREFnQUJaQWtBZlFZQVpBb0FmUWNBZEE4QWFoQUFnd0FBZlFnQWVVd0FaQXNBZlFrQWZBSUFhaEVBZkFZQVpBd0FkQXdBWkEwQWRBd0FaQTRBWkE4QVpCQUFkQUlBWkJFQWZBUUFnd0VGYWhJQWZRa0FkQk1BYWhRQWZBa0FaQklBZ3dJQWZRY0FWMjRnQUFFQkFYUUZBR29HQUhRVkFHb1dBSU1BQUlNQkFBRmtDZ0I5QndCdUFRQllmQVVBWkFZQWF3SUFjM1VCZkFFQWNwRUJkQVVBYWhjQVpCTUFmQWNBRjJRVUFCZDhDUUFYZ3dFQUFXNEFBSFFNQUgwS0FIaGpBSHdJQUdvWUFJTUFBRVJkVlFCY0FnQjlDd0I5REFCOEJ3QjhEQUJyQmdCenlBRmtGUUI4REFCckJnQnk1UUY4Q0FCcUdRQnBBUUJrRmdCOEN3QTJnd0VBQVhRQ0FIMEtBSEdrQVh3SUFHb1pBR2tCQUdRWEFId0xBRGFEQVFBQmNhUUJWM3dJQUhJaUFuUURBR29OQUdRWUFIUU9BSFFhQUh3SUFJTUJBSU1CQUlNQ0FBRnVGZ0IwQXdCcURRQmtHQUIwRGdCa0N3Q0RBUUNEQWdBQmZBVUFaQVlBYXdJQWMwb0NmQUVBY25zQ2RBVUFhaGNBWkJrQWRCb0FkQU1BYWdRQVpCb0Fnd0VBZ3dFQUYyUWJBQmQwR2dCOENnQ0RBUUFYZ3dFQUFXNEFBSHdGQUdRR0FHc0NBSE9OQW53QkFIS2RBblFiQUdRY0FId0JBSU1BQVFGdUFBQjhDZ0J6cmdKMEJ3Q0RBQUFCWkFBQVUzUURBR29FQUdRYUFJTUJBSFBJQW5RSEFJTUFBQUZrQUFCVGZBRUFjdkVDZEFVQWFoY0FaQjBBZEJvQWRBTUFhZ1FBWkJvQWd3RUFnd0VBRjRNQkFBRnVBQUIwQXdCcUhBQjBBZ0NEQVFCa0hnQVpaQjhBYXdVQWNpVURaQUVBWkFBQWJCMEFmUTBBZkEwQWFoNEFnd0FBZlE0QWJoY0FkQjhBWkNBQWZBQUFaQndBZkFFQWd3QUNBV1FBQUZONFN3QjhEZ0JxSUFDREFBQnppUU4wSVFCcUlnQ0RBQUJ6YlFOMEh3QmtJQUI4QUFCa0hBQjhBUUNEQUFJQmJnQUFaQ01BZlE4QWZBNEFhaU1BZkE4QWd3RUFjajhEVUhFL0EzRS9BMWRrQUFCVEtDUUFBQUJPYWYvLy8vOTBDZ0FBQUhCeWIzaDVYMkZrWkhKekRRQUFBRTVQSUhCeWIzaDVYMkZrWkhKMENBQUFBR05vWVc1dVpXeHpjd2tBQUFCamRYTjBiMjB1Y0hsMEF3QUFBR1JsZG5RRUFBQUFkWE5sY25RSkFBQUFjSEp2ZUhsZlpHVjJjeG9BQUFCb2RIUndjem92TDJkbGIybHdMV1JpTG1OdmJTOXFjMjl1TDFJRUFBQUFVZ1VBQUFCMEJRQUFBSEJ5YjNoNWRBa0FBQUJ3Y205NGVWOTNaV0owQndBQUFIUnBiV1Z2ZFhScENnQUFBSFFPQUFBQWNtRnVaRzl0WDJobFlXUmxjbk4wQmdBQUFHRnNabUZmYzNNWUFBQUFJbU52ZFc1MGNubGZZMjlrWlNJNklpaGJYaUpkS3lraWN3Z0FBQUJIWlc5c2IyTTZJSE1EQUFBQUlDOGdkQU1BQUFCQlRFeDBBZ0FBQUU5T2RBTUFBQUJQUmtaMEZRQUFBSEJ5YjNoNVgyTm9ZVzV1Wld4ZllteHZjWFZsWkhNWUFBQUFRV3gwWlhKdVlYUnBkbVZmZDJWaVgyRmpZMlZ6Y3pvZ2RCWUFBQUJoYkhSbGNtNWhkR2wyWlY5M1pXSmZZV05qWlhOemN4RUFBQUFnTHlCUWNtOTRlU0JCWTNScGRtODZJSFFKQUFBQVpHVmlkV2RuYVc1bmN4VUFBQUJGYm5SeVlXNWtieUJsYmlCTmIyNXBkRzl5SURwMEN3QUFBRzUxYlY5MlpYSnphVzl1YVE0QUFBQjBCQUFBQUhSbGMzUnBFQTRBQUdrTUFBQUFhY0NvQUFBb0pBQUFBSFFKQUFBQWFIUjBjSFJ2YjJ4emRBSUFBQUJ2YzNRRUFBQUFWSEoxWlZJQUFBQUFkQXNBQUFCblpYUmZjMlYwZEdsdVoxSUJBQUFBZEFVQUFBQmxjbkp2Y25RUEFBQUFjbUZ1Wkc5dGFYcGxYMnhwYzNSemRBUUFBQUJ3WVhSb2RBWUFBQUJsZUdsemRITjBCQUFBQUdwdmFXNTBFQUFBQUdkbGRGOXlkVzUwYVcxbFgzQmhkR2gwQlFBQUFFWmhiSE5sZEFzQUFBQnpaWFJmYzJWMGRHbHVaM1FOQUFBQVpXNWpjbmx3ZEY5d2NtOTRlWFFHQUFBQWJERXhNV3hzZEFRQUFBQmpiM0I1ZEF3QUFBQmtiM2R1Ykc5aFpIQmhaMlYwQkFBQUFHUmhkR0YwREFBQUFITmpjbUZ3WlhKMGIyOXNjM1FSQUFBQVptbHVaRjl6YVc1bmJHVmZiV0YwWTJoMENRQUFBSFJ5WVdObFltRmphM1FLQUFBQVptOXliV0YwWDJWNFkzUUVBQUFBYVc1bWIzUUZBQUFBYVhSbGJYTjBCZ0FBQUhWd1pHRjBaWFFEQUFBQWMzUnlkQXNBQUFCc2IyZG5aWEpmWkdsemNIUU1BQUFBWjJWMFgzQnNZWFJtYjNKdGRBUUFBQUI0WW0xamRBY0FBQUJOYjI1cGRHOXlkQlVBQUFCblpYUmZjSEp2ZUhsZmJHbHpkRjl0WlhSb2IyUjBEZ0FBQUdGaWIzSjBVbVZ4ZFdWemRHVmtVZ0lBQUFCMENnQUFBR2x6WDNCc1lYbHBibWQwREFBQUFIZGhhWFJHYjNKQlltOXlkQ2dRQUFBQVVoa0FBQUJTRndBQUFGSWFBQUFBVWhzQUFBQlNFUUFBQUZJTUFBQUFkQXdBQUFCd2NtOTRlVjluWlc5c2IyTjBEQUFBQUdOdmRXNTBjbmxmWTI5a1pWSVZBQUFBVWlvQUFBQjBEQUFBQUhCeWIzaDVYMkZqZEdsMlpYUUhBQUFBWTJoaGJtNWxiSFFKQUFBQVkyOTFiblJ5YVdWelVqVUFBQUIwQndBQUFHMXZibWwwYjNKMEJRQUFBSFJwYldWeUtBQUFBQUFvQUFBQUFITUlBQUFBUEhOMGNtbHVaejUwRmdBQUFHZGxkRjl3Y205NGVWOXNhWE4wWDIxdmJtbDBiM0ppQUFBQWMzNEFBQUFBQVF3QkRBSUdBZ01CRHdFR0FCQUJEZ0VEQVFZQUVBRUxBaW9CQmdFSkFnWUJCZ0FKQVJZREJnRUdBUXdCQXdFR0FUQUJGZ0VEQVJNQkNnRVNBUndEQmdFWkFSZ0JGQUVKQWhnQkJnRWZBaFlDRWdBeEFSSUFFQU1HQVFjQkJBTVBBUWNCQkFJR0FDTUNHUUVNQVE4Q0V3RUVBZzhDREFFV0FnWUJEd0YwQmdBQUFIUmhjbWRsZEdrRkFBQUFLQXNBQUFCU0pBQUFBRklYQUFBQWRBa0FBQUIwYUhKbFlXUnBibWQwQmdBQUFGUm9jbVZoWkhRRkFBQUFjM1JoY25SMEJBQUFBSFJwYldWMEJRQUFBSE5zWldWd1VnRUFBQUJTSGdBQUFGSXRBQUFBVWk0QUFBQW9BUUFBQUZKQ0FBQUFLQUFBQUFBb0FBQUFBSE1JQUFBQVBITjBjbWx1Wno1MERnQUFBR2RsZEY5d2NtOTRlVjlzYVhOMFlBQUFBSE1PQUFBQUFBSVBVUU1CRmdFUkFRTUJGd0pqQUFBQUFBY0FBQUFHQUFBQVF3QUFBSFBOQVFBQWRBQUFIbjBBQUhRQkFHb0NBSHdBQUlNQkFBRjBBd0JxQkFCa0FRQjBCUUIwQmdCOEFBQmtBZ0FaZ3dFQWd3RUFnd0lBQVhRREFHb0VBR1FEQUhRRkFIUUdBSHdBQUlNQkFJTUJBSU1DQUFGMEJ3QWVmUUFBZEFFQWFnSUFmQUFBZ3dFQUFYUURBR29FQUdRRUFIUUZBSFFHQUh3QUFHUUNBQm1EQVFDREFRQ0RBZ0FCZEFNQWFnUUFaQVVBZEFVQWRBWUFmQUFBZ3dFQWd3RUFnd0lBQVhRREFHb0VBR1FHQUhRRkFHUUhBSU1CQUlNQ0FBRjBDQUJxQ1FDREFBQjlBUUJuQUFCOUFnQjQ0Z0I4QVFCcUNnQ0RBQUJFWGRRQVhBSUFmUU1BZlFRQVpBZ0FmUVVBZkFFQWZBTUFHWDBHQUdRSkFId0dBR3NHQUhJWUFXUUpBSDBGQUh3R0FHb0xBR1FKQUdRSUFJTUNBSDBHQUc0QUFHUUtBSHdHQUdzR0FISS9BV1FLQUgwRkFId0dBR29MQUdRS0FHUUlBSU1DQUgwR0FHNEFBSHdHQUdvTUFHUUxBSU1CQUgwQ0FIUU5BSHdDQUlNQkFHUU1BR3NFQUhKd0FYUUJBR29DQUh3Q0FJTUJBQUZ1QUFCOEJRQnlrUUY4QlFCMEJnQjhBZ0JrQWdBWmd3RUFGM3dDQUdRQ0FEeHVBQUI4QVFCcURnQnBBUUI4QWdCa0FnQVpmQU1BTm9NQkFBRngxUUJYZEFNQWFnUUFaQTBBZEFVQWRBWUFmQUVBZ3dFQWd3RUFnd0lBQVdRQUFGTW9EZ0FBQUU1U0NBQUFBR2tBQUFBQWRBb0FBQUJ3Y205NGVWOXNhWE4wZEEwQUFBQndjbTk0ZVY5RFJsOWhaR1J5ZEEwQUFBQndjbTk0ZVY5RFJsOXNhWE4wZEE0QUFBQndjbTk0ZVY5M1pXSmZibUZ0WlhNSEFBQUFhR2xrWlM1dFpWSUZBQUFBY3dnQUFBQlFjbTk0ZVVOR09uTUpBQUFBVUhKdmVIbFhaV0k2ZEFFQUFBQXNhUUVBQUFCMEVBQUFBSEJ5YjNoNVgzZG9hWFJsWDJ4cGMzUW9Ed0FBQUhRR0FBQUFiREZzTVd4c2RBWUFBQUJ5WVc1a2IyMTBCd0FBQUhOb2RXWm1iR1ZTQUFBQUFGSWxBQUFBVWlZQUFBQlNNZ0FBQUhRR0FBQUFiREV4TVd3eGRBWUFBQUJzTVRFeE1URlNLQUFBQUZJd0FBQUFkQWNBQUFCeVpYQnNZV05sZEFVQUFBQnpjR3hwZEhRREFBQUFiR1Z1VWpFQUFBQW9Cd0FBQUhRSEFBQUFjSEp2ZUdsbGMxSlBBQUFBZEFzQUFBQndjbTk0ZVY5MFlXSnNaWFFIQUFBQWJHRmlaV3hmWVhRSEFBQUFkbUZzZFdWZllYUUpBQUFBY0hKdmVIbGZkRjl6ZEFjQUFBQndjbTk0ZVY5MEtBQUFBQUFvQUFBQUFITUlBQUFBUEhOMGNtbHVaejVTSHdBQUFMd0FBQUJ6T0FBQUFBQURCd0VOQVNBQkhBTUhBUTBCSUFFY0F4WUREQUVHQWhrQkJnRUtBUXdCQmdFVkFRd0JCZ0VWQVE4QkVnRVFBUVlCR3dFY0Fod0NkQVVBQUFCVWIzUmhiR2tGQUFBQVl3UUFBQUFvQUFBQUV3QUFBRU1BQUFCeld3c0FBSHdDQUhJdUFIUUFBR29CQUdRQkFIUUNBSHdBQUlNQkFCZGtBZ0FYZEFJQWZBRUFnd0VBRjRNQkFBRnVBQUJrQXdCa0FBQnNBd0I5QkFCMEJBQjlCUUI1R1FCMEJRQjBCZ0JxQndCa0JBQ0RBUUNEQVFCOUJnQlhiaU1BQVFFQlpBVUFmUVlBZEFZQWFnZ0FaQVFBZEFrQWZBWUFnd0VBZ3dJQUFXNEJBRmg4QmdCa0JnQnJBZ0J6a1FCOEFnQnltZ0IwQ2dCOUJRQnVBQUJuQUFCOUJ3QmtCd0I5Q0FCbkFBQjlDUUJrQndCOUNnQm5BQUI5Q3dCa0J3QjlEQUJrQ0FCOURRQmtDUUI5RGdCa0NnQjlEd0JrQ3dCOUVBQjBDd0NEQUFBQlp3QUFmUkVBZEFVQWRBWUFhZ2NBWkF3QWd3RUFnd0VBZlJJQWRBd0FhZzBBZkJJQWd3RUFmUkVBZkJFQUhuMFRBSHdHQUdRR0FHc0NBSE1nQVh3Q0FISTZBWFFBQUdvT0FHUU5BSFFDQUh3UkFJTUJBQmVEQVFBQmJnQUFmQVlBWkFZQWF3SUFjMHdCZkFJQWNuVUJkQUFBYWc0QVpBNEFkQUlBZEFVQWRBWUFhZ2NBWkE4QWd3RUFnd0VBZ3dFQUY0TUJBQUZ1QUFCa0VBQmtFUUJuQWdCOUZBQjRQZ0Y4RkFCRVhUWUJmUlVBZWQ4QVpBY0FmUllBZkFRQWFnOEFaQklBZkJVQUZtUVRBSFFLQUdRVUFIUUtBR1FWQUdRV0FHUVhBR1FZQUdRWkFHUWFBR1FiQUhRRUFJTUJCbW9RQUgwV0FId1dBSEpzQW5RUkFHb1NBR1FjQUdRSEFId1dBSU1EQUgwV0FHUWRBSFFSQUdvU0FHUWVBR1FmQUh3V0FJTURBQmQ5RmdCOEZnQnFFd0JrSUFDREFRQnlJUUo4RmdCa0lRQWdmUllBYmdBQVp3QUFmUmNBZEF3QWFnMEFmQllBZ3dFQWZSY0FlRE1BZkJjQVJGMG9BSDBZQUh3WUFIMFpBSHdaQUh3UkFHc0hBSEk5QW53UkFHb1VBSHdaQUlNQkFBRnhQUUp4UFFKWGJnQUFWMjRhQUFFQkFYUUFBR29WQUhRV0FHb1hBSU1BQUlNQkFBRnVBUUJZZkFZQVpBWUFhd0lBYzV3Q2ZBSUFjb2dCZEFBQWFnNEFaQ0lBZkJVQUYyUWpBQmQwQWdCOEZ3Q0RBUUFYZ3dFQUFYR0lBWEdJQVZkOEFBQnkzd041UmdCa0J3QjlGZ0I4QkFCcUR3QmtKQUJrRXdCMEJBQmtGQUIwQ2dCa0ZRQmtKUUJrRndCa0dBQmtHUUJrR2dCa0d3QjBCQUJrSmdCa0p3Q0RBUWRxRUFCOUZnQlhiaG9BQVFFQmRBQUFhaFVBZEJZQWFoY0Fnd0FBZ3dFQUFXNEJBRmg4RmdCeTN3TjBFUUJxRWdCa0tBQmtCd0I4RmdDREF3QjlGZ0JrS1FCOUdnQjBFUUJxR0FCOEdnQjBFUUJxR1FDREFnQnFHZ0I4RmdDREFRQjlGd0I0UUFCOEZ3QkVYVGdBWEFJQWZSZ0FmUnNBWkNvQWZCZ0FmQnNBWmdJQUZuMFpBSHdaQUh3UkFHc0hBSEp4QTN3UkFHb1VBSHdaQUlNQkFBRnhjUU54Y1FOWGZBWUFaQVlBYXdJQWM3OERmQUlBY3R3RGRBQUFhZzRBWkNzQWRBSUFmQmNBZ3dFQUY0TUJBQUZ4M0FOeDN3TnVBQUI4QmdCa0JnQnJBZ0J6OFFOOEFnQnlDd1IwQUFCcURnQmtMQUIwQWdCOEVRQ0RBUUFYZ3dFQUFXNEFBSHdCQUdRdEFHc0NBSE1qQkh3QkFHUXVBR3NDQUhLQ0Jud0dBR1FHQUdzQ0FITTFCSHdDQUhKSkJIUUFBR29PQUdRdkFId0JBQmVEQVFBQmJnQUFad0FBZlJ3QWRCc0FhaHNBZ3dBQWZSMEFlSGNCZEJ3QVpCWUFkQjBBZkJFQWd3RUFmQU1BZ3dNQVJGMWRBWDBlQUh3SUFIS0xCSHdBQUF4eWl3UlFiZ0FBZUtzQWZCRUFmQjRBZkI0QWZBTUFGeUZFWFpnQWZSa0FmQmtBZkFrQWF3WUFjclVFY1owRWJnQUFlV01BZEI0QWFoOEFaREFBZENBQVpERUFmQmtBZkEwQWZBNEFkQVFBZEFvQVpDNEFaQllBWkNVQVpESUFmQVVBZkIwQWZBQUFmQUlBWmcwQWd3QUNmUjhBZEFRQWZCOEFYeUVBZkI4QWFpSUFnd0FBQVh3Y0FHb1VBSHdmQUlNQkFBRlhjWjBFQVFFQmRBQUFhaFVBZEJZQWFoY0Fnd0FBZ3dFQUFYR2RCRmh4blFSWGVKVUFad0FBZkJ3QVJGMFlBSDBnQUh3Z0FHb2pBSU1BQUhKREJYd2dBRjRDQUhGREJYTFFCWGxQQUh3ZEFHb2tBSFFFQUdRbEFJTUNBSDBJQUh3SkFHb1VBSHdJQUlNQkFBRjBCZ0JxQ0FCa013QjBDUUIwQWdCOENBQ0RBUUNEQVFDREFnQUJmQUFBYzY4RmZCTUFmUWtBVUc0QUFGZHhQQVVFZEJzQWFpVUFhd29BY3N3RkFRRUJaQWNBZlFnQWNUd0ZXSEU4QlZkeGRBUlhmQWdBREhMN0JYUWRBSHdKQUlNQkFHUVdBR3NFQUhMN0JYd0pBR1FEQUJsOUNBQnVBQUI4Q0FBTWNoc0dmQUVBWkMwQWF3SUFjaHNHZENZQVpCWUFHWDBJQUc0QUFIUUdBR29JQUdRekFIUUpBSFFDQUh3SUFJTUJBSU1CQUlNQ0FBRjBCZ0JxQ0FCa0RBQjBDUUIwQWdCOENRQ0RBUUNEQVFDREFnQUJmQVlBWkFZQWF3SUFjMlVHZkFJQWNvSUdkQUFBYWdFQVpEUUFkQUlBZkFnQWd3RUFGNE1CQUFGeGdnWnVBQUI4QVFCa0xRQnJBZ0J6bWdaOEFRQmtKd0JyQWdCeVhnbDhCZ0JrQmdCckFnQnpyQVo4QWdCeXdBWjBBQUJxRGdCa05RQjhBUUFYZ3dFQUFXNEFBSFFGQUhRR0FHb0hBR1FQQUlNQkFJTUJBSDBTQUhRTUFHb05BSHdTQUlNQkFIMGhBSHdoQUI1OUV3QjhBUUJrTFFCckFnQnlCd2Q4SVFCcUp3QjhFUUNEQVFBQmJpVUFmQ0VBYWljQWRBd0FhZzBBZEFVQWRBWUFhZ2NBWkF3QWd3RUFnd0VBZ3dFQWd3RUFBV2NBQUgwaUFIUWJBR29iQUlNQUFIMGpBR1FZQUgwREFIaDNBWFFjQUdRV0FIUWRBSHdoQUlNQkFId0RBSU1EQUVSZFhRRjlIZ0I4Q2dCeWRBZDhBQUFNY25RSFVHNEFBSGlyQUh3aEFId2VBSHdlQUh3REFCY2hSRjJZQUgwWkFId1pBSHdMQUdzR0FIS2VCM0dHQjI0QUFIbGpBSFFlQUdvZkFHUXdBSFFnQUdReEFId1pBSHdQQUh3UUFIUUVBSFFLQUdRbkFHUVdBR1FsQUdRYUFId0ZBSHdqQUh3QUFId0NBR1lOQUlNQUFuMGZBSFFFQUh3ZkFGOGhBSHdmQUdvaUFJTUFBQUY4SWdCcUZBQjhId0NEQVFBQlYzR0dCd0VCQVhRQUFHb1ZBSFFXQUdvWEFJTUFBSU1CQUFGeGhnZFljWVlIVjNpVkFHY0FBSHdpQUVSZEdBQjlJQUI4SUFCcUl3Q0RBQUJ5TEFoOElBQmVBZ0J4TEFoeXVRaDVUd0I4SXdCcUpBQjBCQUJrSlFDREFnQjlDZ0I4Q3dCcUZBQjhDZ0NEQVFBQmRBWUFhZ2dBWkRZQWRBa0FkQUlBZkFvQWd3RUFnd0VBZ3dJQUFYd0FBSE9ZQ0h3VEFIMExBRkJ1QUFCWGNTVUlCSFFiQUdvbEFHc0tBSEsxQ0FFQkFXUUhBSDBLQUhFbENGaHhKUWhYY1YwSFYzd0tBQXh5NUFoMEhRQjhDd0NEQVFCa0ZnQnJCQUJ5NUFoOEN3QmtBd0FaZlFvQWJnQUFmQW9BYy9jSWRDZ0FaQllBR1gwS0FHNEFBSFFHQUdvSUFHUTJBSFFKQUhRQ0FId0tBSU1CQUlNQkFJTUNBQUYwQmdCcUNBQmtEd0IwQ1FCMEFnQjhDd0NEQVFDREFRQ0RBZ0FCZkFZQVpBWUFhd0lBYzBFSmZBSUFjbDRKZEFBQWFnRUFaRGNBZEFJQWZBb0Fnd0VBRjRNQkFBRnhYZ2x1QUFCbkFBQjlKQUI4QVFCa0xRQnJBZ0J6ZkFsOEFRQmtPQUJyQWdCeVNndDhCZ0JrQmdCckFnQnpqZ2w4QWdCeW9nbDBBQUJxRGdCa09RQjhBUUFYZ3dFQUFXNEFBSGduQUhRcEFHb3FBSU1BQUVSZEdRQmNBZ0I5SlFCOUpnQjhKQUJxRkFCOEpRQ0RBUUFCY2E4SlYzUXJBSHdrQUlNQkFIMGtBSGdVQVh3a0FFUmREQUY5SlFCOEpRQjlEQUIwQmdCcUNBQmtPZ0IwQ1FCMEFnQjhEQUNEQVFDREFRQ0RBZ0FCZVVZQVpBY0FmUllBZkFRQWFnOEFmQTBBWkJNQWRBb0FaQlFBZEFRQVpDWUFaRGdBWkJVQVpCWUFaQmNBWkNVQVpCa0FaQm9BWkRzQWZBVUFnd0VIYWhBQWZSWUFWMjRqQUFFQkFYUUFBR29WQUhRV0FHb1hBSU1BQUlNQkFBRmtCd0I5REFCeDN3bHVBUUJZZkJZQWN1VUtkQkVBYWhJQVpDZ0FaQWNBZkJZQWd3TUFmUllBZEN3QWFpMEFmQllBZkE0QWd3SUFmU2NBZkNjQWM5Z0tmQVlBWkFZQWF3SUFjN2dLZkFJQWNzd0tkQUFBYWhVQVpEd0FmQXdBRjRNQkFBRnVBQUJrQndCOURBQngzd2x4NndwOEFBQno2d3BRY2VzS2NkOEpaQWNBZlF3QWNkOEpWM3dNQUF4eUd3dDhBUUJrTFFCckFnQnlHd3QwQmdCcUNBQmtPZ0IwQ1FCa1BRQ0RBUUNEQWdBQmNVb0xmQXdBREhKS0Mzd0JBR1F0QUdzREFISktDM1FHQUdvSUFHUTZBSFFKQUdRSEFJTUJBSU1DQUFGeFNndHVBQUIwTGdCa1BnQjhBZ0NEQUFFQlpBQUFVeWcvQUFBQVRuTUdBQUFBVkdWemREb2djdzRBQUFBc0lGQnliM2g1WDJsdWFYUTZJR24vLy8vL1Vnd0FBQUJTQ3dBQUFGSUtBQUFBVWdVQUFBQnpOZ0FBQUdoMGRIQTZMeTkzZDNjdWJXVnFiM0owYjNKeVpXNTBMbU52YlM5MGIzSnlaVzUwY3kxa1pTMXdaV3hwWTNWc1lYTXVhSFJ0YkhNMEFBQUFQR0VnYUhKbFpqMGlLQ2cvT2x0ZUlsMHJLVDh2Y0dWc2FTMWtaWE5qWVhKbllYSXRkRzl5Y21WdWRGdGVJbDByS1NJK1AzTkRBQUFBYUhSMGNEb3ZMMmR1ZFd4aExtNTFMM0JsYkdsamRXeGhjeTF2Ym14cGJtVXZiR2x6ZEdFdFpHVXRjR1ZzYVdOMWJHRnpMVzl1YkdsdVpTMXdZWEowWlMweEwzTmVBQUFBUEdFZ1kyeGhjM005SWs1MGIyOXNkR2x3SWlCb2NtVm1QU0lvVzE0aVhTc3BJajRvVzE0OFhTc3BQSE53WVc0K1BHSnlXMTQ4WFNzOGFXMW5JSE55WXowaUtGdGVJbDByS1NJK1BDOXpjR0Z1UGp3dllUNG9MaW8vS1R4aWNsSktBQUFBY3hzQUFBQlVZV0pzWVNCcGJtbGphV0ZzSUZCeWIzaDVSR2x5WldOME9pQnpGd0FBQUZSaFlteGhJR2x1YVdOcFlXd2dVSEp2ZUhsRFJqb2dVa3dBQUFCMEFnQUFBRk5IZEFJQUFBQklTM05MQUFBQWFIUjBjSE02THk5M2QzY3VjSEp2ZUhrdGJHbHpkQzVrYjNkdWJHOWhaQzloY0drdmRqRXZaMlYwUDNSNWNHVTlhSFIwY0hNbVlXNXZiajFsYkdsMFpTWmpiM1Z1ZEhKNVBTVnpVZzBBQUFCU0RnQUFBSFFOQUFBQWNISnZlSGxmY21WMGNtbGxjMmtBQUFBQWRCRUFBQUJqYjNWdWRGOXlaWFJ5YVdWelgzUnZkR2tDQUFBQVVnOEFBQUJwQ2dBQUFGSVFBQUFBY3hnQUFBQmNjbnhjZEh3bWJtSnpjRHQ4UEdKeVBueGNjM3N5TEgxMEFRQUFBQ2R6QWdBQUFGeHVjd1FBQUFBbkxDQW5jd01BQUFBc0lDZHAvZi8vLzNNYUFBQUFWR0ZpYkdFZ2NISnZlSGt0YkdsemRDNWtiM2R1Ykc5aFpDQnpBZ0FBQURvZ2MxRUFBQUJvZEhSd2N6b3ZMMmhwWkdWdGVXNWhMbTFsTDJWdUwzQnliM2g1TFd4cGMzUXZQMk52ZFc1MGNuazlTRXRPVEZOSEptMWhlSFJwYldVOU1UQXdNQ1owZVhCbFBYTW1ZVzV2YmowMEkyeHBjM1JwQVFBQUFIUU1BQUFBWm05eVkyVmtYM0J5YjNoNVVnWUFBQUJ6R3dBQUFGeHVmRnh5ZkZ4MGZDWnVZbk53TzN3OFluSStmRnh6ZXpJc2ZYTW9BQUFBUEhSa0lHTnNZWE56UFhSa2JENG9MaW8vS1R4Y0wzUmtQangwWkQ0b0xpby9LVHhjTDNSa1BuTUZBQUFBSlhNNkpYTnpFd0FBQUZSaFlteGhJRWhwWkdWTmVTNXVZVzFsT2lCekdRQUFBRlJoWW14aElFRk9WRVZUSUdSbGJDQjBaWE4wYVc1bk9pQlNYZ0FBQUhRTEFBQUFVSEp2ZUhsRWFYSmxZM1J6RWdBQUFFbE9TVlFnVUhKdmVIbEVhWEpsWTNRNklGSkRBQUFBZEFRQUFBQmhjbWR6YVFjQUFBQlNDQUFBQUhNU0FBQUFVSEp2ZUhsRWFYSmxZM1FnWVdSa2Nqb2djdzRBQUFCSlRrbFVJRkJ5YjNoNVEwWTZJRkpMQUFBQWN3NEFBQUJRY205NGVVTkdJR0ZrWkhJNklGSUhBQUFBY3c4QUFBQkpUa2xVSUZCeWIzaDVWMlZpT2lCU1RRQUFBRklSQUFBQWN4QUFBQUJRY205NGVWZGxZaUJsY25KdmNqb2djd2NBQUFCb2FXUmxMbTFsVWhjQUFBQW9Md0FBQUZJQkFBQUFVaThBQUFCU01nQUFBRklhQUFBQVVod0FBQUIwRFFBQUFHUmxZM0o1Y0hSZmNISnZlSGxTQUFBQUFGSWRBQUFBVWlVQUFBQlNKZ0FBQUZJa0FBQUFVaDhBQUFCMEF3QUFBR0Z6ZEhRTUFBQUFiR2wwWlhKaGJGOWxkbUZzZEFVQUFBQmtaV0oxWjFJcEFBQUFVaW9BQUFCMEFnQUFBSEpsZEFNQUFBQnpkV0owQ0FBQUFHVnVaSE4zYVhSb2RBWUFBQUJoY0hCbGJtUlNIZ0FBQUZJdEFBQUFVaTRBQUFCMEJ3QUFBR052YlhCcGJHVjBCZ0FBQUVSUFZFRk1USFFIQUFBQVptbHVaR0ZzYkhRRkFBQUFVWFZsZFdWMEJRQUFBSEpoYm1kbFVsY0FBQUJTUkFBQUFGSkZBQUFBZEE4QUFBQjBaWE4wWDNCeWIzaDVYMkZrWkhKMEJnQUFBR1JoWlcxdmJsSkdBQUFBZEFjQUFBQnBjMEZzYVhabGRBTUFBQUJuWlhSMEJRQUFBRVZ0Y0hSNVVsQUFBQUIwQmdBQUFHVjRkR1Z1WkZKVEFBQUFkQVlBQUFCc2JERXhiR3hTTUFBQUFIUUdBQUFBYzI5eWRHVmtVaXNBQUFCU0xBQUFBRkl6QUFBQUtDZ0FBQUJTR1FBQUFIUUtBQUFBY0hKdmVIbGZhVzVwZEZJWEFBQUFkQWdBQUFCc2IzUmxYMnhsYmxJYUFBQUFVaEVBQUFCU0RBQUFBSFFNQUFBQWNISnZlR2xsYzE5ellYWmxVZ2dBQUFCU1NnQUFBRkpMQUFBQVVrd0FBQUJTVFFBQUFIUU9BQUFBY0hKdmVIbGZkWEpzWDNSbGMzUjBFZ0FBQUhCeWIzaDVYM0JoZEhSbGNtNWZkR1Z6ZEhRUkFBQUFjSEp2ZUhsZlEwWmZkWEpzWDNSbGMzUjBGUUFBQUhCeWIzaDVYME5HWDNCaGRIUmxjbTVmZEdWemRGSllBQUFBZEFzQUFBQndjbTk0YVdWelgzTjBjblFNQUFBQWNISnZlR2xsYzE5cGJtbDBkQXdBQUFCamIzVnVkSEo1WDJ4cGMzUjBCd0FBQUdOdmRXNTBjbmxTS2dBQUFIUUhBQUFBYldGMFkyaGxjM1FGQUFBQWRtRnlYMkYwQndBQUFIQnliM2g1WDJGMEJnQUFBSEJoZEhKdmJuUUZBQUFBZG1GeVgyTjBEQUFBQUhSb2NtVmhaSE5mYkdsemRIUUpBQUFBY0hKdmVIbGZjWFZsZEFvQUFBQndjbTk0ZVY5c2IzUmxkQXdBQUFCd2NtOTRlVjkwYUhKbFlXUjBDQUFBQUhSb2NtVmhaRjk0ZEFvQUFBQndjbTk0YVdWelgyTm1kQThBQUFCMGFISmxZV1J6WDJ4cGMzUmZRMFowREFBQUFIQnliM2g1WDNGMVpWOURSbEpaQUFBQVVsb0FBQUJTV3dBQUFIUUpBQUFBWkdGMFlWOTBaWE4wS0FBQUFBQW9BQUFBQUhNSUFBQUFQSE4wY21sdVp6NVNOd0FBQU9ZQUFBQnpiQUVBQUFBQkJnQW9BUXdDQmdFREFSa0JBd0VHQVJvQkVnQUpBUVlCQmdFR0FRWUJCZ0VHQWdZQkJnSUdBUVlEQndNR0FSVUJEd0VIQlJJQUdnRVNBQ2tEREFFTkFRTUJCZ0U2QWdZQkZRRVpBUThCRFFFR0FROENEUUVHQVF3Qkd3RURBUmNCRWdBbUF3WUNBd0VHQVVBQkF3RVhBZ1lCRlFFR0FoNENFd0VRQVF3QkZBSVNBQjBkQXdJU0FCb0RHQUVTQUJRQkJnRU1BaDhCRFFFRUFoZ0JEQUVHQVFNQlB3RUpBUW9CRVFFREFSc0NLQUVEQVJJQkRRRWNBUVlCQmdFSUFSQUJFZ0laQVEwQkV3RU5BaHdCSEFFU0FCMERHQUVTQUJRQkZRRVBBUWNDREFFUUFpVURCZ0VNQVFZQ0h3SU5BUVFDR0FFTUFRWUJBd0UvQVFrQkNnRVJBUU1CR3dJb0FRTUJFZ0VOQVJ3QkJnRUdBUWdCRUFFU0Foa0JEUUVHQVEwQ0hBRWNBUklBSFFNR0FSZ0JFZ0FVQWhrQkVRSU1BZzBCQmdFY0FRTUJCZ0ZBQVFNQkV3RUdBUWNDQmdFVkFSSUJCZ0VTQUJRQkJnRUdBZ1lCQndJS0FoTUJHUUVUQVJ3Q0RRRmpEUUFBQUJJQUFBQVNBQUFBUXdBQUFITTZBUUFBWkFFQVpBQUFiQUFBZlEwQWRBRUFhZ0lBZkFFQVpBSUFnd0lBZlE0QWZBNEFjeTBBWkFNQWZRNEFiZ0FBYVFFQWZBQUFmQTRBTm4wUEFIbE1BR1FFQUgwUUFId05BR29EQUh3QkFHUUZBSHdEQUdRR0FId0VBR1FIQUh3RkFHUUlBSHdQQUdRSkFId0dBR1FLQUh3SEFHUUxBSHdJQUdRTUFId0pBSU1CQ0dvRUFIMFFBRmR1R3dBQkFRRjBCUUJxQmdCMEJ3QnFDQUNEQUFDREFRQUJaQVFBVTFoOEVBQnlNQUY4QWdCeUN3RjBDUUJxQ2dCa0RRQmtCQUI4RUFDREF3QjlFQUIwQVFCcUFnQjhFQUI4QWdDREFnQjlFUUI4RVFCeUFnRjBDd0I4Q2dCMERBQnFEQUNEQWdCeUNBRjhDZ0JxRFFCOEFBQ0RBUUFCY1FnQmNTMEJaQVFBZlFBQWNUWUJkQXNBZkFvQWRBd0FhZ3dBZ3dJQWNqWUJmQW9BYWcwQWZBQUFnd0VBQVhFMkFXNEdBR1FFQUgwQUFId0FBRk1vRGdBQUFFNXAvLy8vLzNNTkFBQUFLR2gwZEhBdUtpazZYQzljTDNRRUFBQUFhSFIwY0ZJRkFBQUFVZzBBQUFCU0RnQUFBRkprQUFBQWRCRUFBQUJ3Y205NGVWOWhaR1J5WDJadmNtTmxaRkpoQUFBQVVtSUFBQUJTRHdBQUFGSVJBQUFBY3hzQUFBQmNibnhjY254Y2RId21ibUp6Y0R0OFBHSnlQbnhjYzNzeUxIMG9EZ0FBQUZJYUFBQUFVaXNBQUFCU0xBQUFBRklwQUFBQVVpb0FBQUJTQVFBQUFGSWVBQUFBVWkwQUFBQlNMZ0FBQUZKckFBQUFVbXdBQUFCMENnQUFBR2x6YVc1emRHRnVZMlZTY2dBQUFIUURBQUFBY0hWMEtCSUFBQUJTQ0FBQUFGSi9BQUFBVW9BQUFBQlNEUUFBQUZJT0FBQUFVbVFBQUFCU1lRQUFBRkppQUFBQVVnOEFBQUJTRVFBQUFGS05BQUFBVWhrQUFBQlNGd0FBQUZJYUFBQUFkQVlBQUFCb1pXRmtaWEpTaVFBQUFGSXFBQUFBVXBRQUFBQW9BQUFBQUNnQUFBQUFjd2dBQUFBOGMzUnlhVzVuUGxKMEFBQUE0Z0VBQUhNdUFBQUFBQU1NQWhJQkJnQUpBUTBDQXdFR0FVWUJBd0VUQVFVREJnRUdBUlVCRWdFR0FSSUJFd0lKQWhJQkV3SUdBbU1CQUFBQUNBQUFBQWdBQUFCREFBQUFjNndCQUFCMEFBQjBBUUJxQWdCa0FRQ0RBUUNEQVFCOUFRQjBBQUIwQVFCcUFnQmtBZ0NEQVFDREFRQjlBZ0IwQUFCMEFRQnFBZ0JrQXdDREFRQ0RBUUI5QXdCMEFBQjBBUUJxQWdCa0JBQ0RBUUNEQVFCOUJBQjBBQUIwQVFCcUFnQmtCUUNEQVFDREFRQjlCUUIwQUFCMEFRQnFBZ0JrQmdDREFRQ0RBUUI5QmdCMEFBQjBBUUJxQWdCa0J3Q0RBUUNEQVFCOUJ3QjhBUUJrQ0FCckFnQnpwUUI4QUFCeUlnRjBBd0JxQkFCa0NRQjBCUUI4QXdDREFRQVhaQW9BRjNRRkFId0VBSU1CQUJka0N3QVhkQVVBZkFVQWd3RUFGMlFNQUJkMEJRQjhCZ0NEQVFBWFpBMEFGM1FGQUh3SEFJTUJBQmRrRGdBWGRBVUFkQUFBZEFFQWFnSUFaQThBZ3dFQWd3RUFnd0VBRjJRUUFCZDBCUUI4QWdDREFRQVhnd0VBQVc2R0FIUURBR29HQUhRRkFIUUhBR1FKQUhRRkFId0RBSU1CQUJka0NnQVhkQVVBZkFRQWd3RUFGMlFMQUJkMEJRQjhCUUNEQVFBWFpBd0FGM1FGQUh3R0FJTUJBQmRrRFFBWGRBVUFmQWNBZ3dFQUYyUU9BQmQwQlFCMEFBQjBBUUJxQWdCa0R3Q0RBUUNEQVFDREFRQVhaQkFBRjNRRkFId0NBSU1CQUJlREFRQ0RBUUNEQVFBQlpBQUFVeWdSQUFBQVRsSU1BQUFBVWhVQUFBQlNDQUFBQUZKS0FBQUFVa3NBQUFCU1RBQUFBRkpOQUFBQVVnb0FBQUJ6R2dBQUFGQlNUMWhaSUV4cGMzUnpPaUJRY205NGVVUnBjbVZqZERvZ2N4VUFBQUFnTHlCUWNtOTRlVVJwY21WamRDQlFiMjlzT2lCekRBQUFBQ0F2SUZCeWIzaDVRMFk2SUhNUkFBQUFJQzhnVUhKdmVIbERSaUJRYjI5c09pQnpEUUFBQUNBdklGQnliM2g1VjJWaU9pQnpGQUFBQUNBdklGQnliM2g1SUZkb2FYUmxiR2x6ZERvZ1VrOEFBQUJ6RlFBQUFDQXZJRUpzYjNGMVpXUWdRMmhoYm01bGJITTZJQ2dJQUFBQVVtY0FBQUJTQUFBQUFGSWRBQUFBVWdFQUFBQlNMd0FBQUZJeUFBQUFVbW9BQUFCU0pnQUFBQ2dJQUFBQVVoY0FBQUJTREFBQUFIUVpBQUFBY0hKdmVIbGZZMmhoYm01bGJGOWliRzl4ZFdWa1gzTjBjbElJQUFBQVVrb0FBQUJTU3dBQUFGSk1BQUFBVWswQUFBQW9BQUFBQUNnQUFBQUFjd2dBQUFBOGMzUnlhVzVuUGxJekFBQUFCUUlBQUhNV0FBQUFBQU1WQVJVQkZRRVZBUlVCRlFFVkFoSUJmUUtHQW1NREFBQUFDd0FBQUFRQUFBQkRBQUFBYzI0QkFBQjBBQUI4QVFBWlpBRUFHWDBEQUhRQUFId0JBQmxrQWdBWmRBQUFmQUVBR1dRREFCa1hmUVFBZEFBQWZBRUFHV1FFQUJsOUJRQjBBQUI4QVFBWlpBTUFHWDBHQUhRQUFId0JBQmxrQlFBWmZRY0FkQUFBZkFFQUdXUUdBQmw5Q0FCMEFRQnlnZ0IwQWdCcUF3QmtCd0I4QXdBWFpBZ0FGM3dFQUJlREFRQUJiZ0FBZkFJQWNwMEFmQUVBZEFRQWF3TUFjcDBBWkFrQWZRRUFiZ0FBWkFrQWZRa0FmQUVBY2pBQmRBVUFhZ1lBZkFBQWd3RUFmUUFBZkFJQWN1SUFmQWNBYWdjQVpBb0Fnd0VBZlFvQWZBUUFmQUFBRjN3S0FHUUJBQmtYZlFBQWJpNEFmQWdBZkFBQUZuMENBSHdDQUdvSUFHUUxBR1FNQUlNQ0FHb0lBR1FOQUdRT0FJTUNBSDBDQUh3REFIMEFBSHdGQUhJd0FXa0NBR1FQQUdRUUFEWjhCUUJrRVFBMmZRa0FjVEFCYmdBQWRBRUFjbDRCZEFJQWFna0FmQUFBWkJJQUYzd0NBQmRrRWdBWGZBa0FGMlFTQUJkOEFRQVhnd0VBQVc0QUFId0FBSHdDQUh3SkFId0JBR1lFQUZNb0V3QUFBRTVwQUFBQUFHa0JBQUFBYVFNQUFBQnBBZ0FBQUdrRUFBQUFhUVVBQUFCekRBQUFBRkJTVDFoWklGQlBVMVE2SUhNSUFBQUFJQzhnUjBWVU9pQlNCUUFBQUhRQkFBQUFmSFFCQUFBQVczTURBQUFBSlRWQ2RBRUFBQUJkY3dNQUFBQWxOVVJ6SVFBQUFHRndjR3hwWTJGMGFXOXVMM2d0ZDNkM0xXWnZjbTB0ZFhKc1pXNWpiMlJsWkhNTUFBQUFRMjl1ZEdWdWRDMVVlWEJsZEFjQUFBQlNaV1psY21WeWN3TUFBQUFnTHlBb0NnQUFBRko2QUFBQVVoY0FBQUJTQVFBQUFGSXZBQUFBZEFZQUFBQnNiREV4TVRGMEJnQUFBSFZ5Ykd4cFluUUtBQUFBY1hWdmRHVmZjR3gxYzFKV0FBQUFVbFVBQUFCU2FnQUFBQ2dMQUFBQWRBTUFBQUIxY214U1RRQUFBSFFFQUFBQWNHOXpkSFFUQUFBQWNISnZlSGxmYzJsMFpWOTFjbXhmY0c5emRIUVNBQUFBY0hKdmVIbGZjMmwwWlY5MWNteGZaMlYwZEJJQUFBQndjbTk0ZVY5emFYUmxYM0psWm1WeVpYSjBFUUFBQUhCeWIzaDVYM05wZEdWZmFHVmhaR1Z5ZEE4QUFBQndjbTk0ZVY5emFYUmxYM1JoYVd4MER3QUFBSEJ5YjNoNVgzTnBkR1ZmY0c5emRIUUhBQUFBYUdWaFpHVnljM1FFQUFBQWRHRnBiQ2dBQUFBQUtBQUFBQUJ6Q0FBQUFEeHpkSEpwYm1jK2RBMEFBQUJ6WlhSZmNISnZlSGxmZDJWaUdBSUFBSE13QUFBQUFBSU9BUm9CRGdFT0FRNEJEZ0lHQUJ3QkVnRUpBUVlDQmdFUEFRWUJEd0VWQWdvQkhnRUdBUVlCR2dJR0FDZ0JZd01BQUFBSUFBQUFCQUFBQUVNQUFBQnpCd0VBQUhRQUFId0JBQmxrQVFBWmZRTUFkQUFBZkFFQUdXUUNBQmw5QkFCa0F3QjhBQUJyQmdCeU1nQmtCQUI5QUFCOEFBQlRkQUVBYWdJQWZBQUFaQVVBZ3dJQURISURBWHdBQUdvREFHUUdBSU1CQUF4eUF3RjBCQUJxQlFCOEFBQ0RBUUI5QUFCbkFBQjlCUUI4QXdCcUJnQmtCd0NEQVFCOUJRQjRJQUI4QlFCRVhSZ0FmUVlBZkFBQWFnY0FmQVlBWkFnQWd3SUFmUUFBY1lBQVYyY0FBSDBGQUh3RUFHb0dBR1FIQUlNQkFIMEZBSGdnQUh3RkFFUmRHQUI5QndCOEFBQnFCd0I4QndCa0NBQ0RBZ0I5QUFCeHVBQlhmQUFBYWdjQVpBa0FmQUlBRm1RS0FJTUNBSDBBQUh3QUFHb0hBR1FMQUh3Q0FCWmtEQUNEQWdCOUFBQnVBQUI4QUFCVEtBMEFBQUJPYVFNQUFBQnBCQUFBQUhNMkFBQUFTRzkwYkdsdWEybHVaeUJrYVhKbFkzUnNlU0IwYnlCd2NtOTRhV1ZrSUhCaFoyVnpJR2x6SUc1dmRDQndaWEp0YVhSMFpXUXVkQVVBQUFCRlVsSlBVbk1OQUFBQVhtUmNaQ3M2TGlvL1hHUXJPblFDQUFBQVVFdFNtd0FBQUZJRkFBQUFjeEFBQUFCb2NtVm1QU0lsYzIxaFoyNWxkRG8vY3c0QUFBQm9jbVZtUFNKdFlXZHVaWFE2UDNNUUFBQUFhSEpsWmowbkpYTnRZV2R1WlhRNlAzTU9BQUFBYUhKbFpqMG5iV0ZuYm1WME9qOG9DQUFBQUZKNkFBQUFVaXNBQUFCU0xBQUFBSFFLQUFBQWMzUmhjblJ6ZDJsMGFGS2dBQUFBZEFjQUFBQjFibkYxYjNSbFVsWUFBQUJTVlFBQUFDZ0lBQUFBVWlvQUFBQlNUUUFBQUZLaUFBQUFVcWNBQUFCU3FBQUFBSFFRQUFBQWNISnZlSGxmYzJsMFpWOTBZV0pzWlhRTUFBQUFjSEp2ZUhsZmFHVmhaR1Z5ZEFvQUFBQndjbTk0ZVY5MFlXbHNLQUFBQUFBb0FBQUFBSE1JQUFBQVBITjBjbWx1Wno1MEZ3QUFBSEpsYzNSdmNtVmZZV1owWlhKZmNISnZlSGxmZDJWaU5nSUFBSE1rQUFBQUFBSU9BUTRDREFFR0FRUUNJd0VQQVFZQkR3RU5BUllCQmdFUEFRMEJGZ0VXQVJrQ1l3SUFBQUFFQUFBQUJRQUFBRU1BQUFCenZRQUFBSFFBQUhRQkFHb0NBR1FCQUlNQkFJTUJBSDBDQUhRREFJTUFBSDBEQUh3Q0FISTJBSFFFQUdvRkFId0NBSU1CQUgwREFHNEFBSHdBQUdvR0FHUUNBSU1CQUhOU0FId0FBR1FDQURkOUFBQnVBQUIwQndCcUNBQjhBQUJrQXdDREFnQjhBd0JyQmdCeXVRQjhBUUJ5ZEFCMENRQlRaQVFBZkFNQWRBY0FhZ2dBZkFBQVpBTUFnd0lBR1dzR0FISzVBSFFLQUhLeUFIUUxBR29NQUhRSEFHb0lBSHdBQUdRREFJTUNBSU1CQUFGdUFBQjBDUUJUYmdBQWRBMEFVeWdGQUFBQVRsSVZBQUFBZEFFQUFBQXZjeVFBQUFBb1B6cG9kSFJ3TGlvNlhDOWNMeWsvS0Z0ZVhEOThYQzlkS3lrb1B6cGNQM3hjTHlsU0V3QUFBQ2dPQUFBQVVtY0FBQUJTQUFBQUFGSWRBQUFBZEFRQUFBQmthV04wVW1nQUFBQlNhUUFBQUZKdEFBQUFVaXNBQUFCU0xBQUFBRkljQUFBQVVoY0FBQUJTQVFBQUFGSnFBQUFBVWlRQUFBQW9CQUFBQUZLaUFBQUFVbVFBQUFCU21nQUFBRklWQUFBQUtBQUFBQUFvQUFBQUFITUlBQUFBUEhOMGNtbHVaejUwRWdBQUFHTm9ZVzV1Wld4ZmNISnZlSGxmYkdsemRFOENBQUJ6SEFBQUFBQUNGUUVKQVFZQkVnSVBBUTBCR0FFR0FRUUJIQUVHQUJ3QkJ3SmpBd0FBQUE0QUFBQUVBQUFBUXdBQUFITkNBd0FBWkFFQWZRTUFaQUVBZlFRQVpBRUFmUVVBZEFBQWZRWUFaQUVBZlFjQVpBSUFmUWdBWkFFQWZRa0FmQUFBZlFvQWRBRUFkQUlBYWdNQVpBTUFnd0VBZ3dFQWZRTUFkQUVBZEFJQWFnTUFaQVFBZ3dFQWd3RUFmUVFBZEFFQWRBSUFhZ01BWkFVQWd3RUFnd0VBZlFVQWRBRUFkQUlBYWdNQVpBWUFnd0VBZ3dFQWZRc0FkQUVBZEFJQWFnTUFaQWNBZ3dFQWd3RUFmUXdBZEFRQWFnVUFmQW9BWkFnQWd3SUFmUWdBZkFvQWFnWUFaQWtBZ3dFQWM4Y0FmQW9BWkFrQU4zMEtBRzRBQUhRRUFHb0ZBSHdLQUdRS0FJTUNBSDBKQUh3SkFITENBWHdGQUhMQ0FYd0NBQXh5d2dGOENRQjhCUUJyQmdCeXdnRjBCd0I5QmdCMENBQ0RBQUI5RFFCMENRQnFDZ0I4QlFDREFRQjlEUUJrQ3dCOERRQjhDUUFaYXdZQWNsNEJaQUVBZlFNQVpBRUFmUVFBWkF3QWZBMEFmQWtBR1dzR0FISzhBWHdOQUh3SkFCbHFDd0JrRFFCa0FRQ0RBZ0I5Q3dCeHZBRnh2d0ZrRGdCOERRQjhDUUFaYXdZQWNxWUJaQUVBZlFNQVpBRUFmUXNBWkF3QWZBMEFmQWtBR1dzR0FISzhBWHdOQUh3SkFCbHFDd0JrRHdCa0FRQ0RBZ0I5QkFCeHZBRnh2d0Y4RFFCOENRQVpmUU1BWkFFQWZRUUFaQUVBZlFzQWNjSUJiZ0FBZkFJQWNod0NmQUlBWkJBQWF3SUFjdGNCY1RFQ2ZBSUFaQTRBYXdJQWN2SUJaQUVBZlFNQVpBRUFmUXNBY1RFQ2ZBSUFaQXNBYXdJQWNnMENaQUVBZlFNQVpBRUFmUVFBY1RFQ1pBRUFmUVFBWkFFQWZRc0FiaFVBZkFZQWN6RUNaQUVBZlFRQVpBRUFmUXNBYmdBQWZBc0Fja0FDZkFBQWZRY0FiZ0FBZkFNQWNsd0NmQU1BZlFjQWFRRUFmQU1BZkFnQU5uMERBRzRBQUh3RUFISjRBbndFQUgwSEFHa0JBSHdFQUh3SUFEWjlCQUJ1QUFCOEF3QU1jdE1DZkFRQURITFRBbndMQUF4eTB3SjBBUUIwQWdCcUF3QmtCQUNEQVFDREFRQjlCQUJrQVFCOUF3QmtBUUI5Q3dCOEJBQnl5Z0o4QkFCOUJ3QnBBUUI4QkFCOENBQTJmUVFBY2RNQ1pBRUFmUVFBYmdBQWZBd0FaQkVBYXdNQWN1Z0NaQUVBZlFjQWJnQUFkQXdBY2pJRGRBMEFhZzRBWkJJQWRBOEFmQU1BZ3dFQUYyUVRBQmQwRHdCOEJBQ0RBUUFYWkJRQUYzUVBBSHdMQUlNQkFCZGtGUUFYZEE4QWZBY0Fnd0VBRjRNQkFBRnVBQUI4QXdCOEJBQjhDd0I4QndCbUJBQlRLQllBQUFCT1VnVUFBQUJTbFFBQUFGSUlBQUFBVWtzQUFBQlNUd0FBQUZKTkFBQUFVZ3dBQUFCekRRQUFBQ2hvZEhSd0xpb3BPbHd2WEM5U3RRQUFBSE1rQUFBQUtEODZhSFIwY0M0cU9sd3ZYQzhwUHloYlhsdy9mRnd2WFNzcEtEODZYRDk4WEM4cFVnY0FBQUIwQVFBQUFEcHpDUUFBQUZCeWIzaDVWMlZpT2xJR0FBQUFjd2dBQUFCUWNtOTRlVU5HT2xKZUFBQUFVZ29BQUFCekJ3QUFBRkJ5YjNoNU9pQnpEUUFBQUNBdklGQnliM2g1SUVOR09pQnpEUUFBQUNBdklGQnliM2g1VjJWaU9pQnpEUUFBQUNBdklGQnliM2g1VEc5bk9pQW9FQUFBQUZJa0FBQUFVbWNBQUFCU0FBQUFBRklkQUFBQVVpc0FBQUJTTEFBQUFGSnRBQUFBVWh3QUFBQlN0Z0FBQUZKb0FBQUFVbWtBQUFCU1ZRQUFBRklYQUFBQVVnRUFBQUJTYWdBQUFGSXlBQUFBS0E0QUFBQlNvZ0FBQUZLakFBQUFVbVFBQUFCU2lRQUFBSFFLQUFBQWNISnZlSGxmUTBaZllYUVVBQUFBY0hKdmVIbGZkMmhwZEdWZmJHbHpkRjl6ZEhKMEJ3QUFBSEJ5YjNoNVgzZDBDUUFBQUhCeWIzaDVYMnh2WjFLWkFBQUFkQVlBQUFCa2IyMWhhVzUwQlFBQUFIVnliRjltVWswQUFBQlNEQUFBQUZKUEFBQUFLQUFBQUFBb0FBQUFBSE1JQUFBQVBITjBjbWx1Wno1MERnQUFBR2RsZEY5d2NtOTRlVjloWkdSeVlnSUFBSE9NQUFBQUFBSUdBUVlCQmdFR0FRWUJCZ0VHQVFZQ0ZRRVZBUlVCRlFFVkFoSUJEd0VOQVJJQ0V3RU1BUVlCQ1FFUEFSQUJCZ0VHQVJBQkhBRVFBUVlCQmdFUUFSd0NDZ0VHQVF3Q0JnRU1BUU1CREFFR0FRa0JEQUVHQVFrQ0JnRUpBUVlCQmdFSkFnWUJDUUVHQVFZQkVBRUdBUVlCRUFFVkFSVUJCZ0VHQVFZQkJnRVFBZ2tCREFFSkFnWUFSQUZqQVFBQUFBRUFBQUFEQUFBQVF3QUFBSE5SQUFBQWRBQUFjaFlBZEFFQWFnSUFmQUFBZ3dFQUFXNEFBSHdBQUhJM0FIUURBR29FQUh3QUFHb0ZBR1FCQUlNQkFJTUJBSDBBQUc0QUFIUUFBSEpOQUhRQkFHb0NBSHdBQUlNQkFBRnVBQUI4QUFCVEtBSUFBQUJPY3dVQUFBQjFkR1l0T0NnR0FBQUFVaGNBQUFCU0FRQUFBRkpxQUFBQWRBWUFBQUJpWVhObE5qUjBDUUFBQUdJMk5HVnVZMjlrWlhRR0FBQUFaVzVqYjJSbEtBRUFBQUJTS2dBQUFDZ0FBQUFBS0FBQUFBQnpDQUFBQUR4emRISnBibWMrVWlZQUFBQzBBZ0FBY3c0QUFBQUFBUVlBRUFJR0FSc0NCZ0FRQVdNQkFBQUFBUUFBQUFJQUFBQkRBQUFBYzFFQUFBQjBBQUJ5RmdCMEFRQnFBZ0I4QUFDREFRQUJiZ0FBZkFBQWNqY0FkQU1BYWdRQWZBQUFnd0VBYWdVQVpBRUFnd0VBZlFBQWJnQUFkQUFBY2swQWRBRUFhZ0lBZkFBQWd3RUFBVzRBQUh3QUFGTW9BZ0FBQUU1ekJRQUFBSFYwWmkwNEtBWUFBQUJTRndBQUFGSUJBQUFBVW1vQUFBQlN3QUFBQUhRSkFBQUFZalkwWkdWamIyUmxkQVlBQUFCa1pXTnZaR1VvQVFBQUFGSXFBQUFBS0FBQUFBQW9BQUFBQUhNSUFBQUFQSE4wY21sdVp6NVNad0FBQUw0Q0FBQnpEZ0FBQUFBQkJnQVFBZ1lCR3dJR0FCQUJhV01BQUFCcFJ3QUFBR2w0QUFBQWFURUFBQUJwV2dBQUFHa3lBQUFBYVd3QUFBQnBkUUFBQUdsTUFBQUFhVzRBQUFCcGNBQUFBR2xXQUFBQWFYWUFBQUJwYlFBQUFHbEdBQUFBYVhNQUFBQnBSUUFBQUdrOUFBQUFLQVlBQUFCek9nQUFBR2gwZEhCek9pOHZibXd1YUdsa1pYQnliM2g1TG0xbEwybHVZMngxWkdWekwzQnliMk5sYzNNdWNHaHdQMkZqZEdsdmJqMTFjR1JoZEdWekZ3QUFBR2gwZEhCek9pOHZibXd1YUdsa1pYQnliM2g1TG0xbFVnVUFBQUJ6Q2dBQUFDOW5ieTV3YUhBL2RUMXpEUUFBQUNaaVBUUjhKbUZ0Y0R0aVBUUnpPQUFBQUhVOUpYTW1jSEp2ZUhsZlptOXliV1JoZEdGZmMyVnlkbVZ5UFc1c0ptRnNiRzkzUTI5dmEybGxjejB4Sm1WdVkyOWtaVlZTVEQwd0tBWUFBQUJ6TlFBQUFHaDBkSEE2THk5M1pXSndjbTk0ZVM1MGJ5OXBibU5zZFdSbGN5OXdjbTlqWlhOekxuQm9jRDloWTNScGIyNDlkWEJrWVhSbGN4SUFBQUJvZEhSd09pOHZkMlZpY0hKdmVIa3VkRzlTQlFBQUFITU9BQUFBTDJKeWIzZHpaUzV3YUhBL2RUMXpEUUFBQUNaaVBUUjhKbUZ0Y0R0aVBUUnpSZ0FBQUhVOUpYTW1aVzVqYjJSbFZWSk1QVEFtWlc1amIyUmxVR0ZuWlQwd0ptRnNiRzkzUTI5dmEybGxjejF2YmlaemRISnBjRXBUUFRBbWMzUnlhWEJQWW1wbFkzUnpQVEFvSmdBQUFIUUhBQUFBWDE5a2IyTmZYMUtnQUFBQVVzQUFBQUJTYXdBQUFGSkhBQUFBVWtRQUFBQlNMUUFBQUZKb0FBQUFVbEVBQUFCU2NnQUFBSFFNQUFBQWNHeGhkR1p2Y20xamIyUmxVZ0FBQUFCU0FRQUFBRklDQUFBQWRCTUFBQUJ3YkdGMFptOXliV052WkdVdWJHOW5aMlZ5VWdNQUFBQlNLd0FBQUZJa0FBQUFVaGNBQUFCU0p3QUFBRkpRQUFBQVVsTUFBQUJTZWdBQUFGS2ZBQUFBVWxRQUFBQlNTUUFBQUZJZkFBQUFVamNBQUFCU2RBQUFBRkl6QUFBQWRBUUFBQUJPYjI1bFVxd0FBQUJTdEFBQUFGSzNBQUFBVXI4QUFBQlNKZ0FBQUZKbkFBQUFkQUlBQUFCc01TZ0FBQUFBS0FBQUFBQW9BQUFBQUhNSUFBQUFQSE4wY21sdVp6NTBDQUFBQUR4dGIyUjFiR1UrT1FBQUFITkdBQUFBQmdJTUFRd0JEQUVNQVF3QkRBRU1BUXdCREFJY0FSQUJEQUlHQWpjQ2J3SkNBZ01CQUFFSEFRQUJDZ1lHQWlJRENWd0pLaFg4Q1NNTUV3d2VDUmtNRXc5U0NRb0pDQT09JykpKQ==')) \ No newline at end of file diff --git a/videolibrary_service.py b/videolibrary_service.py index 5ebc4e4a..299d6be1 100644 --- a/videolibrary_service.py +++ b/videolibrary_service.py @@ -381,15 +381,11 @@ if __name__ == "__main__": if not config.dev_mode(): from platformcode import updater updater.check_addon_init() - # get_channel_json() -> disabilitato, lo si fa con l'updater # Copia Custom code a las carpetas de Alfa desde la zona de Userdata from platformcode import custom_code custom_code.init() - # Identifica la dirección Proxy y la lista de alternativas - # from core import proxytools - # proxytools.get_proxy_list() if not config.get_setting("update", "videolibrary") == 2: check_for_update(overwrite=False)