diff --git a/bots/requirements.txt b/bots/requirements.txt index 439b22b34e3..9d27830ae5a 100644 --- a/bots/requirements.txt +++ b/bots/requirements.txt @@ -63,6 +63,7 @@ fear-greed-index==0.1.4; python_version >= "3.7" ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" filelock==3.6.0; python_version >= "3.7" and python_full_version >= "3.6.1" financedatabase==1.0.2 +finnhub-python==2.4.10 finviz==1.4.3 finvizfinance==0.9.10; python_version >= "3.5" flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") diff --git a/gamestonk_terminal/common/behavioural_analysis/finnhub_view.py b/gamestonk_terminal/common/behavioural_analysis/finnhub_view.py index e9fec97ac8c..912716fe6e1 100644 --- a/gamestonk_terminal/common/behavioural_analysis/finnhub_view.py +++ b/gamestonk_terminal/common/behavioural_analysis/finnhub_view.py @@ -28,6 +28,7 @@ def display_sentiment_stats(ticker: str, export: str = ""): Format to export data """ d_stats = finnhub_model.get_sentiment_stats(ticker) + print(d_stats) if d_stats: console.print( diff --git a/gamestonk_terminal/common/newsapi_model.py b/gamestonk_terminal/common/newsapi_model.py new file mode 100644 index 00000000000..6b86b7667a0 --- /dev/null +++ b/gamestonk_terminal/common/newsapi_model.py @@ -0,0 +1,71 @@ +""" News Model """ +__docformat__ = "numpy" + +import logging + +from typing import Dict +import requests +from gamestonk_terminal import config_terminal as cfg +from gamestonk_terminal.decorators import log_start_end +from gamestonk_terminal.rich_config import console + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def get_news( + term: str, + s_from: str, + show_newest: bool = True, + sources: str = "", +) -> Dict: + """Get news for a given term. [Source: NewsAPI] + + Parameters + ---------- + term : str + term to search on the news articles + s_from: str + date to start searching articles from formatted YYYY-MM-DD + show_newest: bool + flag to show newest articles first + sources: str + sources to exclusively show news from + + Returns + ---------- + articles : dict + term to search on the news articles + """ + link = ( + f"https://newsapi.org/v2/everything?q={term}&from={s_from}&sortBy=publishedAt&language=en" + f"&apiKey={cfg.API_NEWS_TOKEN}" + ) + + if sources: + link += f"&domain={sources}" + + response = requests.get(link) + + # Check that the API response was successful + if response.status_code == 426: + console.print(f"Error in request: {response.json()['message']}", "\n") + return {} + + if response.status_code != 200: + console.print( + f"Error in request {response.status_code}. Check News API token", "\n" + ) + return {} + + console.print( + f"{response.json()['totalResults']} news articles for {term} were found since {s_from}\n" + ) + + if show_newest: + articles = response.json()["articles"] + + else: + articles = response.json()["articles"][::-1] + + return articles diff --git a/gamestonk_terminal/common/newsapi_view.py b/gamestonk_terminal/common/newsapi_view.py index 919c1294acd..4eec3ec9988 100644 --- a/gamestonk_terminal/common/newsapi_view.py +++ b/gamestonk_terminal/common/newsapi_view.py @@ -3,9 +3,7 @@ __docformat__ = "numpy" import logging -import requests - -from gamestonk_terminal import config_terminal as cfg +from gamestonk_terminal.common import newsapi_model from gamestonk_terminal.decorators import log_start_end from gamestonk_terminal.rich_config import console @@ -13,58 +11,31 @@ logger = logging.getLogger(__name__) @log_start_end(log=logger) -def news( +def display_news( term: str, - num: int, s_from: str, - show_newest: bool, - sources: str, + num: int = 5, + show_newest: bool = True, + sources: str = "", ): - """Display news for a given title. [Source: NewsAPI] + """Display news for a given term. [Source: NewsAPI] Parameters ---------- term : str term to search on the news articles - num : int - number of articles to display s_from: str date to start searching articles from formatted YYYY-MM-DD + num : int + number of articles to display show_newest: bool flag to show newest articles first sources: str sources to exclusively show news from """ - link = ( - f"https://newsapi.org/v2/everything?q={term}&from={s_from}&sortBy=publishedAt&language=en" - f"&apiKey={cfg.API_NEWS_TOKEN}" - ) - - if sources: - link += f"&domains={sources}" - - response = requests.get(link) - - # Check that the API response was successful - if response.status_code == 426: - console.print(f"Error in request: {response.json()['message']}", "\n") - - elif response.status_code != 200: - console.print( - f"Error in request {response.status_code}. Check News API token", "\n" - ) - - else: - console.print( - f"{response.json()['totalResults']} news articles for {term} were found since {s_from}\n" - ) - - if show_newest: - articles = response.json()["articles"] - - else: - articles = response.json()["articles"][::-1] + articles = newsapi_model.get_news(term, s_from, show_newest, sources) + if articles: for idx, article in enumerate(articles): console.print( article["publishedAt"].replace("T", " ").replace("Z", ""), diff --git a/gamestonk_terminal/common/quantitative_analysis/qa_view.py b/gamestonk_terminal/common/quantitative_analysis/qa_view.py index c2a6170a6db..36050fd43e9 100644 --- a/gamestonk_terminal/common/quantitative_analysis/qa_view.py +++ b/gamestonk_terminal/common/quantitative_analysis/qa_view.py @@ -966,7 +966,7 @@ def display_line( else: text_loc = (0, 10) ax.annotate( - str(n), + str(n + 1), (mdates.date2num(marker_date), data.iloc[price_location_idx]), xytext=text_loc, textcoords="offset points", @@ -975,7 +975,7 @@ def display_line( marker_date, data.iloc[price_location_idx], color="#00AAFF", - s=200, + s=100, ) ax.set_xlim(data.index[0], data.index[-1]) diff --git a/gamestonk_terminal/cryptocurrency/defi/defi_controller.py b/gamestonk_terminal/cryptocurrency/defi/defi_controller.py index 506e52502b5..c27e9e0e38d 100644 --- a/gamestonk_terminal/cryptocurrency/defi/defi_controller.py +++ b/gamestonk_terminal/cryptocurrency/defi/defi_controller.py @@ -103,13 +103,12 @@ class DefiController(BaseController): def print_help(self): """Print help""" help_text = """[cmds] -[info]Overview:[/info] newsletter Recent DeFi related newsletters [src][Substack][/src] dpi DeFi protocols listed on DefiPulse [src][Defipulse][/src] funding Funding rates - current or last 30 days average [src][Defirate][/src] borrow DeFi borrow rates - current or last 30 days average [src][Defirate][/src] lending DeFi ending rates - current or last 30 days average [src][Defirate][/src] - vaults Top DeFi Vaults on different blockchains [src][[Coindix][/src] + vaults Top DeFi Vaults on different blockchains [src][Coindix][/src] [src][The Graph][/src] [info]Uniswap[/info] tokens Tokens trade-able on Uniswap stats Base statistics about Uniswap @@ -122,8 +121,8 @@ class DefiController(BaseController): stvl Displays historical values of the total sum of TVLs from all dApps dtvl Displays historical total value locked (TVL) by dApp [src][Terra Engineer][/src] - aterra Displays 30-day history of specified asset in terra address [src][Terra Engineer][/src] - ayr Displays 30-day history of anchor yield reserve [src][Terra Engineer][/src] + aterra Displays 30-day history of specified asset in terra address + ayr Displays 30-day history of anchor yield reserve [src][Terra FCD][/src] sinfo Displays staking info for provided terra account address validators Displays information about terra blockchain validators @@ -131,7 +130,6 @@ class DefiController(BaseController): gacc Displays terra blockchain account growth history sratio Displays terra blockchain staking ratio history sreturn Displays terra blockchain staking returns history - [src][Smartstake][/src] lcsc Displays Luna circulating supply changes[/cmds] """ diff --git a/gamestonk_terminal/economy/fred/fred_view.py b/gamestonk_terminal/economy/fred/fred_view.py index f0b489e6088..3878850ea4e 100644 --- a/gamestonk_terminal/economy/fred/fred_view.py +++ b/gamestonk_terminal/economy/fred/fred_view.py @@ -112,7 +112,6 @@ def display_fred_series( ], axis=1, ) - data = data.dropna() # Try to get everything onto the same 0-10 scale. # To do so, think in scientific notation. Divide the data by whatever the E would be if external_axes is None: diff --git a/gamestonk_terminal/etf/etf_api.py b/gamestonk_terminal/etf/etf_api.py index 0504da2b77c..bea0219cac4 100644 --- a/gamestonk_terminal/etf/etf_api.py +++ b/gamestonk_terminal/etf/etf_api.py @@ -7,7 +7,8 @@ from gamestonk_terminal.helper_classes import ModelsNamespace as _models # Context menus from gamestonk_terminal.stocks.stocks_helper import display_candle as candle -from gamestonk_terminal.common.newsapi_view import news +from gamestonk_terminal.common.newsapi_view import display_news +from gamestonk_terminal.common.newsapi_model import get_news from .financedatabase_view import display_etf_by_name as ln from .financedatabase_view import display_etf_by_description as ld from .stockanalysis_view import view_overview as overview diff --git a/gamestonk_terminal/etf/etf_controller.py b/gamestonk_terminal/etf/etf_controller.py index d96dd43c372..5eace20931c 100644 --- a/gamestonk_terminal/etf/etf_controller.py +++ b/gamestonk_terminal/etf/etf_controller.py @@ -413,7 +413,7 @@ class ETFController(BaseController): d_stock = yf.Ticker(self.etf_name).info - newsapi_view.news( + newsapi_view.display_news( term=d_stock["shortName"].replace(" ", "+") if "shortName" in d_stock else self.etf_name, diff --git a/gamestonk_terminal/helper_funcs.py b/gamestonk_terminal/helper_funcs.py index 73ce5ec8551..ab02405e7b3 100644 --- a/gamestonk_terminal/helper_funcs.py +++ b/gamestonk_terminal/helper_funcs.py @@ -9,6 +9,7 @@ import os import random import re import sys +from difflib import SequenceMatcher import pytz import pandas as pd from rich.table import Table @@ -48,6 +49,25 @@ def log_and_raise(error: Union[argparse.ArgumentTypeError, ValueError]) -> None: raise error +def similar(a: str, b: str) -> float: + """ + Return a similarity float between string a and string b + + Parameters + ---------- + a: str + string a + b: str + string b + + Returns + ------- + float: + Ratio of similarity between two strings + """ + return SequenceMatcher(None, a, b).ratio() + + def print_rich_table( df: pd.DataFrame, show_index: bool = False, diff --git a/gamestonk_terminal/portfolio/brokers/degiro/degiro_view.py b/gamestonk_terminal/portfolio/brokers/degiro/degiro_view.py index c0e6f2a56be..c620fda856a 100644 --- a/gamestonk_terminal/portfolio/brokers/degiro/degiro_view.py +++ b/gamestonk_terminal/portfolio/brokers/degiro/degiro_view.py @@ -52,7 +52,7 @@ class DegiroView: @log_start_end(log=logger) def help_display(): console.print( - "\nDegiro:\n" + "\n[cmds]" " login connect to degiro's api\n" " logout disconnect from degiro's api\n" "\n" @@ -66,7 +66,7 @@ class DegiroView: "\n" " companynews view news about a company with it's isin\n" " lastnews view latest news\n" - " topnews view top news preview\n" + " topnews view top news preview[/cmds]\n" ) @log_start_end(log=logger) diff --git a/gamestonk_terminal/stocks/behavioural_analysis/ba_api.py b/gamestonk_terminal/stocks/behavioural_analysis/ba_api.py index ccef2ebf047..c3aee9c2f70 100644 --- a/gamestonk_terminal/stocks/behavioural_analysis/ba_api.py +++ b/gamestonk_terminal/stocks/behavioural_analysis/ba_api.py @@ -55,9 +55,6 @@ from gamestonk_terminal.common.behavioural_analysis.twitter_view import ( from gamestonk_terminal.common.behavioural_analysis.finbrain_view import ( display_sentiment_analysis as headlines, ) -from gamestonk_terminal.common.behavioural_analysis.finnhub_view import ( - display_sentiment_stats as stats, -) from gamestonk_terminal.common.behavioural_analysis.sentimentinvestor_view import ( display_historical as hist, ) @@ -65,3 +62,7 @@ from gamestonk_terminal.common.behavioural_analysis.sentimentinvestor_view impor from gamestonk_terminal.common.behavioural_analysis.sentimentinvestor_view import ( display_trending as trend, ) + +from gamestonk_terminal.stocks.behavioural_analysis.finnhub_view import ( + display_stock_price_headlines_sentiment as snews, +) diff --git a/gamestonk_terminal/stocks/behavioural_analysis/ba_controller.py b/gamestonk_terminal/stocks/behavioural_analysis/ba_controller.py index 2666c4cfee5..da81dbdd6d1 100644 --- a/gamestonk_terminal/stocks/behavioural_analysis/ba_controller.py +++ b/gamestonk_terminal/stocks/behavioural_analysis/ba_controller.py @@ -11,13 +11,13 @@ from prompt_toolkit.completion import NestedCompleter from gamestonk_terminal import feature_flags as gtff from gamestonk_terminal.common.behavioural_analysis import ( finbrain_view, - finnhub_view, google_view, reddit_view, sentimentinvestor_view, stocktwits_view, twitter_view, ) +from gamestonk_terminal.stocks.behavioural_analysis import finnhub_view from gamestonk_terminal.decorators import log_start_end from gamestonk_terminal.helper_funcs import ( EXPORT_BOTH_RAW_DATA_AND_FIGURES, @@ -59,11 +59,11 @@ class BehaviouralAnalysisController(StockBaseController): "queries", "rise", "headlines", - "stats", "popular", "getdd", "hist", "trend", + "snews", ] historical_sort = ["date", "value"] @@ -93,7 +93,7 @@ class BehaviouralAnalysisController(StockBaseController): [src][Finbrain][/src] headlines sentiment from 15+ major news headlines [src][Finnhub][/src] - stats sentiment stats including comparison with sector{has_ticker_end} + snews stock price displayed over sentiment of news headlines{has_ticker_end} [src][Reddit][/src] wsb show what WSB gang is up to in subreddit wallstreetbets watchlist show other users watchlist @@ -117,7 +117,6 @@ class BehaviouralAnalysisController(StockBaseController): [src][SentimentInvestor][/src] trend most talked about tickers within the last hour{has_ticker_start} hist plot historical RHI and AHI data by hour{has_ticker_end}[/cmds] - """ console.print(text=help_text, menu="Stocks - Behavioural Analysis") @@ -145,6 +144,23 @@ class BehaviouralAnalysisController(StockBaseController): if ns_parser: reddit_view.display_watchlist(num=ns_parser.limit) + @log_start_end(log=logger) + def call_snews(self, other_args: List[str]): + """Process snews command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="snews", + description="""Display stock price and headlines sentiment using VADER model over time. [Source: Finnhub]""", + ) + ns_parser = parse_known_args_and_warn( + parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES + ) + if ns_parser: + finnhub_view.display_stock_price_headlines_sentiment( + ticker=self.ticker, export=ns_parser.export + ) + @log_start_end(log=logger) def call_spac(self, other_args: List[str]): """Process spac command""" @@ -667,30 +683,6 @@ class BehaviouralAnalysisController(StockBaseController): else: console.print("No ticker loaded. Please load using 'load '\n") - @log_start_end(log=logger) - def call_stats(self, other_args: List[str]): - """Process stats command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="stats", - description=""" - Sentiment stats which displays buzz, news score, articles last week, articles weekly average, - bullish vs bearish percentages, sector average bullish percentage, and sector average news score. - [Source: https://finnhub.io] - """, - ) - ns_parser = parse_known_args_and_warn( - parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES - ) - if ns_parser: - if self.ticker: - finnhub_view.display_sentiment_stats( - ticker=self.ticker, export=ns_parser.export - ) - else: - console.print("No ticker loaded. Please load using 'load '\n") - @log_start_end(log=logger) def call_hist(self, other_args: List[str]): """Process hist command""" diff --git a/gamestonk_terminal/stocks/behavioural_analysis/finnhub_model.py b/gamestonk_terminal/stocks/behavioural_analysis/finnhub_model.py new file mode 100644 index 00000000000..b3ed3ef0a1a --- /dev/null +++ b/gamestonk_terminal/stocks/behavioural_analysis/finnhub_model.py @@ -0,0 +1,83 @@ +""" Finnhub Model """ +__docformat__ = "numpy" + +import logging + +from datetime import datetime +from typing import List, Dict +import finnhub +import pandas as pd +from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer +from gamestonk_terminal import config_terminal as cfg +from gamestonk_terminal.decorators import log_start_end +from gamestonk_terminal.helper_funcs import similar +from gamestonk_terminal.rich_config import console + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def get_company_news( + ticker: str, + s_start: str, + s_end: str, +) -> List[Dict]: + """Get news from a company. [Source: Finnhub] + + Parameters + ---------- + ticker : str + company ticker to look for news articles + s_start: str + date to start searching articles, with format YYYY-MM-DD + s_end: str + date to end searching articles, with format YYYY-MM-DD + + Returns + ---------- + articles : List + term to search on the news articles + """ + try: + finnhub_client = finnhub.Client(api_key=cfg.API_FINNHUB_KEY) + articles = finnhub_client.company_news(ticker.upper(), _from=s_start, to=s_end) + return articles + + except Exception as e: + console.print(f"[red]{e}\n[/red]") + return [{}] + + +@log_start_end(log=logger) +def process_news_headlines_sentiment( + articles: List[Dict], +) -> pd.DataFrame: + """Process news headlines sentiment of a company using a VADER model. + + Parameters + ---------- + articles : List[Dict] + list of articles with `headline` and `datetime` keys + + Returns + ---------- + pd.DataFrame + Headlines sentiment using VADER model over time + """ + l_datetime = list() + l_compound = list() + + if articles and len(articles) > 1: + analyzer = SentimentIntensityAnalyzer() + + last_headline = "" + for article in articles: + # allows to discard news with similar headline + if similar(last_headline, article["headline"].upper()) < 0.7: + l_compound.append( + analyzer.polarity_scores(article["headline"])["compound"] + ) + l_datetime.append(datetime.fromtimestamp(article["datetime"])) + last_headline = article["headline"].upper() + + return pd.DataFrame(l_compound, index=l_datetime).sort_index() diff --git a/gamestonk_terminal/stocks/behavioural_analysis/finnhub_view.py b/gamestonk_terminal/stocks/behavioural_analysis/finnhub_view.py new file mode 100644 index 00000000000..86cc9a0c65e --- /dev/null +++ b/gamestonk_terminal/stocks/behavioural_analysis/finnhub_view.py @@ -0,0 +1,129 @@ +""" Finnhub View """ +__docformat__ = "numpy" + +import logging + +import os +from datetime import datetime, timedelta +from typing import Optional, List +import numpy as np +import pandas as pd +import yfinance as yf +from matplotlib import pyplot as plt +from gamestonk_terminal.stocks.behavioural_analysis import finnhub_model +from gamestonk_terminal.decorators import log_start_end +from gamestonk_terminal.config_terminal import theme +from gamestonk_terminal.config_plot import PLOT_DPI +from gamestonk_terminal.helper_funcs import ( + export_data, + plot_autoscale, +) +from gamestonk_terminal.rich_config import console + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def display_stock_price_headlines_sentiment( + ticker: str, + export: str = "", + external_axes: Optional[List[plt.Axes]] = None, +): + """Display stock price and headlines sentiment using VADER model over time. [Source: Finnhub] + + Parameters + ---------- + ticker : str + Ticker of company + export: str + Format to export data + external_axes : Optional[List[plt.Axes]], optional + External axes (1 axis is expected in the list), by default None + """ + start = datetime.now() - timedelta(days=30) + articles = finnhub_model.get_company_news( + ticker.upper(), + s_start=start.strftime("%Y-%m-%d"), + s_end=datetime.now().strftime("%Y-%m-%d"), + ) + sentiment = finnhub_model.process_news_headlines_sentiment(articles) + + if not sentiment.empty: + sentiment_data = [item for sublist in sentiment.values for item in sublist] + + df_stock = yf.download( + ticker, + start=min(sentiment.index).to_pydatetime().date(), + interval="15m", + prepost=True, + progress=False, + ) + + if not df_stock.empty: + + # This plot has 1 axis + if external_axes is None: + _, ax = plt.subplots( + figsize=plot_autoscale(), + dpi=PLOT_DPI, + nrows=2, + ncols=1, + sharex=True, + gridspec_kw={"height_ratios": [2, 1]}, + ) + else: + if len(external_axes) != 1: + logger.error("Expected list of one axis item.") + console.print("[red]Expected list of one axis item./n[/red]") + return + (ax,) = external_axes + + ax[0].set_title(f"Headlines sentiment and {ticker} price") + for uniquedate in np.unique(df_stock.index.date): + ax[0].plot( + df_stock[df_stock.index.date == uniquedate].index, + df_stock[df_stock.index.date == uniquedate]["Adj Close"].values, + c="#FCED00", + ) + + ax[0].set_ylabel("Stock Price") + theme.style_primary_axis(ax[0]) + theme.style_primary_axis(ax[1]) + + ax[1].plot( + sentiment.index, + pd.Series(sentiment_data) + .rolling(window=5, min_periods=1) + .mean() + .values, + c="#FCED00", + ) + ax[1].bar( + sentiment[sentiment.values >= 0].index, + [ + item + for sublist in sentiment[sentiment.values >= 0].values + for item in sublist + ], + color=theme.up_color, + width=0.01, + ) + ax[1].bar( + sentiment[sentiment.values < 0].index, + [ + item + for sublist in sentiment[sentiment.values < 0].values + for item in sublist + ], + color=theme.down_color, + width=0.01, + ) + ax[1].yaxis.set_label_position("right") + ax[1].set_ylabel("Headline Sentiment") + + if external_axes is None: + theme.visualize_output() + + export_data( + export, os.path.dirname(os.path.abspath(__file__)), "snews", sentiment + ) diff --git a/gamestonk_terminal/stocks/options/syncretism_view.py b/gamestonk_terminal/stocks/options/syncretism_view.py index 587086bf7a5..964488df30d 100644 --- a/gamestonk_terminal/stocks/options/syncretism_view.py +++ b/gamestonk_terminal/stocks/options/syncretism_view.py @@ -116,7 +116,7 @@ def view_historical_greeks( export: str = "", external_axes: Optional[List[plt.Axes]] = None, ): - """Plots historical greeks for a given option + """Plots historical greeks for a given option. [Source: Syncretism] Parameters ---------- @@ -157,7 +157,6 @@ def view_historical_greeks( return (ax,) = external_axes - # Theo I am sorry but I don't know how to get different line colors and move the delta im1 = ax.plot(df.index, df[greek], label=greek.title(), color=theme.up_color) ax.set_ylabel(greek) ax1 = ax.twinx() diff --git a/gamestonk_terminal/stocks/stocks_api.py b/gamestonk_terminal/stocks/stocks_api.py index b65b67afc6d..6baca88e6cb 100644 --- a/gamestonk_terminal/stocks/stocks_api.py +++ b/gamestonk_terminal/stocks/stocks_api.py @@ -3,7 +3,8 @@ # pylint: disable=unused-import # Context root level functions -from gamestonk_terminal.common.newsapi_view import news +from gamestonk_terminal.common.newsapi_view import display_news +from gamestonk_terminal.common.newsapi_model import get_news from .stocks_helper import load, process_candle, search, quote from .stocks_helper import display_candle as candle diff --git a/gamestonk_terminal/stocks/stocks_controller.py b/gamestonk_terminal/stocks/stocks_controller.py index de878d09407..a37572c8d79 100644 --- a/gamestonk_terminal/stocks/stocks_controller.py +++ b/gamestonk_terminal/stocks/stocks_controller.py @@ -26,7 +26,7 @@ from gamestonk_terminal.parent_classes import StockBaseController from gamestonk_terminal.rich_config import console from gamestonk_terminal.stocks import stocks_helper -# pylint: disable=R1710,import-outside-toplevel +# pylint: disable=R1710,import-outside-toplevel,R0913,R1702 logger = logging.getLogger(__name__) @@ -264,7 +264,6 @@ Stock: [/param]{stock_text} mov_avgs = [] if ns_parser.mov_avg: - mov_list = (num for num in ns_parser.mov_avg.split(",")) for num in mov_list: @@ -272,7 +271,7 @@ Stock: [/param]{stock_text} mov_avgs.append(int(num)) except ValueError: console.print( - f"{num} is not valid moving average, must be integer" + f"{num} is not a valid moving average, must be integer" ) stocks_helper.display_candle( @@ -301,13 +300,13 @@ Stock: [/param]{stock_text} """, ) parser.add_argument( - "-n", - "--num", + "-l", + "--limit", action="store", - dest="n_num", + dest="limit", type=check_positive, default=5, - help="Number of latest news being printed.", + help="Limit of latest news being printed.", ) parser.add_argument( "-d", @@ -333,7 +332,8 @@ Stock: [/param]{stock_text} nargs="+", help="Show news only from the sources specified (e.g bbc yahoo.com)", ) - + if other_args and "-" not in other_args[0][0]: + other_args.insert(0, "-l") ns_parser = parse_known_args_and_warn(parser, other_args) if ns_parser: sources = ns_parser.sources @@ -343,11 +343,11 @@ Stock: [/param]{stock_text} d_stock = yf.Ticker(self.ticker).info - newsapi_view.news( + newsapi_view.display_news( term=d_stock["shortName"].replace(" ", "+") if "shortName" in d_stock else self.ticker, - num=ns_parser.n_num, + num=ns_parser.limit, s_from=ns_parser.n_start_date.strftime("%Y-%m-%d"), show_newest=ns_parser.n_oldest, sources=",".join(sources), diff --git a/gamestonk_terminal/stocks/stocks_helper.py b/gamestonk_terminal/stocks/stocks_helper.py index 84f96b15512..d5317fbe741 100644 --- a/gamestonk_terminal/stocks/stocks_helper.py +++ b/gamestonk_terminal/stocks/stocks_helper.py @@ -35,7 +35,7 @@ from gamestonk_terminal.rich_config import console logger = logging.getLogger(__name__) -# pylint: disable=no-member,too-many-branches,C0302 +# pylint: disable=no-member,too-many-branches,C0302,R0913 INTERVALS = [1, 5, 15, 30, 60] SOURCES = ["yf", "av", "iex"] @@ -289,7 +289,7 @@ def display_candle( Flag for intraday data for plotly range breaks add_trend: bool Flag to add high and low trends to chart - mov_avg: Tuple[int] + ma: Tuple[int] Moving averages to add to the candle asset_type_: str String to include in title @@ -526,7 +526,6 @@ def display_candle( ) fig.show(config=dict({"scrollZoom": True})) - console.print("") def quote(other_args: List[str], s_ticker: str): diff --git a/poetry.lock b/poetry.lock index adec2558e35..d3188dfacae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -830,6 +830,17 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "finnhub-python" +version = "2.4.10" +description = "Finnhub API" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +requests = ">=2.22.0" + [[package]] name = "finviz" version = "1.4.3" @@ -3988,7 +3999,7 @@ prediction = ["tensorflow"] [metadata] lock-version = "1.1" python-versions = "^3.8,<3.10" -content-hash = "9c4b1ab073be95f2bbabdc2c1309ec600cf0fe5309a00f35a7d927eecd4c12a9" +content-hash = "5627f70eca6b911461177c361ec7374f5f3576c96dbc9052887ab0c7749b4e5a" [metadata.files] absl-py = [ @@ -4557,6 +4568,10 @@ financedatabase = [ {file = "financedatabase-1.0.2-py3-none-any.whl", hash = "sha256:2fbe8acea1a12d2e3371c81b075f357f61f34cae5e6d94de9b3afd68ff3c3a19"}, {file = "financedatabase-1.0.2.tar.gz", hash = "sha256:7b03d37ef5eef8433380d92122f2fd24bad741971518eaf1bd4a9c6f30763e23"}, ] +finnhub-python = [ + {file = "finnhub-python-2.4.10.tar.gz", hash = "sha256:5be38a649ad2e81f1aaa41375d7870b1dec0e6f64055813b3d30e4e534222b8f"}, + {file = "finnhub_python-2.4.10-py3-none-any.whl", hash = "sha256:6bc25e57aabb942fa6a62bc95cd4451a3f974ed71a27b4b2e5fab54d85003a51"}, +] finviz = [ {file = "finviz-1.4.3.tar.gz", hash = "sha256:26e15a4c0ffbff2fa9bc04b588f2edaf33caa7e7344e5f64e74437ea98641943"}, ] diff --git a/pyproject.toml b/pyproject.toml index 835cf30504b..0968911d228 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,7 @@ disnake = {version = "^2.3.0", optional = true} PyNaCl = {version = "^1.5.0", optional = true} ascii-magic = "^1.6" squarify = "^0.4.3" +finnhub-python = "^2.4.10" [tool.poetry.dev-dependencies] diff --git a/requirements-full.txt b/requirements-full.txt index bf94d32f6af..6c07a52bf35 100644 --- a/requirements-full.txt +++ b/requirements-full.txt @@ -62,6 +62,7 @@ fear-greed-index==0.1.4; python_version >= "3.7" ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" filelock==3.6.0; python_version >= "3.7" and python_full_version >= "3.6.1" financedatabase==1.0.2 +finnhub-python==2.4.10 finviz==1.4.3 finvizfinance==0.9.10; python_version >= "3.5" flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") diff --git a/requirements.txt b/requirements.txt index c43dc3ee7f1..9e3f06b0225 100644 --- a/requirements.txt +++ b/requirements.txt @@ -50,6 +50,7 @@ executing==0.8.2; python_version >= "3.8" fear-greed-index==0.1.4; python_version >= "3.7" ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" financedatabase==1.0.2 +finnhub-python==2.4.10 finviz==1.4.3 finvizfinance==0.9.10; python_version >= "3.5" fonttools==4.29.1; python_version >= "3.7" diff --git a/tests/gamestonk_terminal/cryptocurrency/defi/txt/test_defi_controller/test_print_help.txt b/tests/gamestonk_terminal/cryptocurrency/defi/txt/test_defi_controller/test_print_help.txt index 2835e15ad6e..2c57f00a0dd 100644 --- a/tests/gamestonk_terminal/cryptocurrency/defi/txt/test_defi_controller/test_print_help.txt +++ b/tests/gamestonk_terminal/cryptocurrency/defi/txt/test_defi_controller/test_print_help.txt @@ -1,11 +1,10 @@ -Overview: newsletter Recent DeFi related newsletters [Substack] dpi DeFi protocols listed on DefiPulse [Defipulse] funding Funding rates - current or last 30 days average [Defirate] borrow DeFi borrow rates - current or last 30 days average [Defirate] lending DeFi ending rates - current or last 30 days average [Defirate] - vaults Top DeFi Vaults on different blockchains [[Coindix] + vaults Top DeFi Vaults on different blockchains [Coindix] [The Graph] Uniswap tokens Tokens trade-able on Uniswap stats Base statistics about Uniswap @@ -18,8 +17,8 @@ Overview: stvl Displays historical values of the total sum of TVLs from all dApps dtvl Displays historical total value locked (TVL) by dApp [Terra Engineer] - aterra Displays 30-day history of specified asset in terra address [Terra Engineer] - ayr Displays 30-day history of anchor yield reserve [Terra Engineer] + aterra Displays 30-day history of specified asset in terra address + ayr Displays 30-day history of anchor yield reserve [Terra FCD] sinfo Displays staking info for provided terra account address validators Displays information about terra blockchain validators @@ -27,7 +26,6 @@ Overview: gacc Displays terra blockchain account growth history sratio Displays terra blockchain staking ratio history sreturn Displays terra blockchain staking returns history - [Smartstake] lcsc Displays Luna circulating supply changes diff --git a/tests/gamestonk_terminal/economy/cassettes/test_nasdaq_view/test_display_big_mac_index.yaml b/tests/gamestonk_terminal/economy/cassettes/test_nasdaq_view/test_display_big_mac_index.yaml index 6a082b6384a..bb855647fe9 100644 --- a/tests/gamestonk_terminal/economy/cassettes/test_nasdaq_view/test_display_big_mac_index.yaml +++ b/tests/gamestonk_terminal/economy/cassettes/test_nasdaq_view/test_display_big_mac_index.yaml @@ -8,23 +8,26 @@ interactions: - gzip, deflate Connection: - keep-alive + User-Agent: + - python-requests/2.27.1 method: GET uri: https://data.nasdaq.com/api/v3/datasets/ECONOMIST/BIGMAC_VNM?api_key=MOCK_API_KEY&column_index=3 response: body: string: !!binary | - H4sIAAAAAAAAA21Uy27bMBD8FYJn2+BDfOnWJkXhg5NDjBxaBAYj0TZRvUpKTowg/96lI9lOEUA+ - 2LOzszO71hsubW+j63H+hn2Jc8a0pCSTswnYFG3pcI6/L3+uvt1sHu9W+AN7BtoE/ri5v7tfLR/W - gDW2PtX7HVrZAi2b0r2iOXr0rgcokV0sgu963zZQt9479LnWR2Qb5JttG2pbodrZOASH2i0qhhBc - UxyRey32ttk5FGzvoLxHXdct0LKfqiPq984HdLDV4JDdWd/EHlkUfe0rGxAM/8f1qeeubcskWKLo - wsEXLs5AG+gwRgEWgTSOt0C3frt1wTc71IVUmYRrG1Kn/yZ6aYeqRL7uqiO0grK2cZfxofUAsQTU - wnMA2TRluYBsgtsGF/eu3FhYCWaEsTmhcyrWhOTwMLUwXP1KMbsXF/uNPVgw9Fy5DSwy5Q4UOidq - zikUtRWE/WURzc5FRVsNdbNJe4s4/41vUyNYU1tBUpuTU/w0wzDY3yGlDyIliB6hpj92SXPta4ce - IBloMMNdcLUfapxvbRXdDFeQOZhphqoCRrBNTJudfhjVfToTnPMZjr0N/cXN1aCuKb90mU4YBv/9 - yTtbGCOZVowYzpRQT7MJp6ds2AIOXRKWGcWNFtmIkykWwDPFNKPcKCXkxAf8zM+UUlwIrQU35oNP - zYWvjEqNBcnO8gk+0wnVWWaIokTTka2v1BllGVWaZIzIC3w1vNGSQQsuJlhd2JIbbhh8JOPTaABP - bCk0eBeCaaNG51ResQ0RmhlhZEb5qA3wma2IYBkxhAs25kLFlW9BCaeSSy25HtkAX3wDBJ4FZXJq - fj5GSJ1Jqg0XGdD1E9wdHEhluwh39nFBbYB/zvQlrf70IkrvLsE5eX//B27vTLnTBAAA + H4sIAAAAAAAAA21Uy24iMRD8FctnQH6MX9x2k9WKA8khKIeNIuTMGLB2XmvPkKAo/75tYBgSRYID + VFVXV3fPvOPCdja6Ds/fsS/wnDEtKcnkZADWeVM4PMc/F7+XP27Wj3dLfMJeQDaAv27u7+6Xi4cV + YLWtjny/RUubo0VduDc0RY/edQAlsYt58G3nmxp4q51Dn7k+IlsjX2+aUNkSVc7GPjjUbFDeh+Dq + /IDcW76z9dahYDsH9A61bTtDi25gR9TtnA9ob8veIbu1vo4dsij6ypc2IGj+r+tSzW3TFMmwQNGF + vc9dnIA3yKGNHCKC6NzeDN36zcYFX29RGxIzGVc2pEpfOnpt+rJAvmrLA5QCWlO7sX0o3cNYAmrg + swfb1GUxg9kEtwku7lyxtrASzAhjU8KmVKwImcOHihmn5E8as3t1sVvbvYVAL6VbwyLT3E8SOuUU + SE0Jw/6WRLMpUSdS3pR9Va/T3iKeP+HbVAjW1JQwqfUxKX6eYGjsX5+mDyYFmB6A0x3a5LnylUMP + MBkoMMFtcJXvKzzf2DK6CS5h5hCm7ssSFMHWMW12+OPs7tOZ4Dmf4NjZ0I1prhp1dfFtynTC0PjT + p+x8BlfMhZJUaJOR7HlyxOkQm82MkUwrRgxnSqgRP82OzeBBkIRlRnGjxaAno15nimlGuVFKyEEP + +EWfKaW4EFoLbsypPjWjXhmVCguSXewTfJETqrPMEEWJpme1vnJnlGVUaZIxIkf4qnmjJYMSXAyw + GtWSG24YfCXjQ2sAD2opNGQXgmmjzsmpvFIbIjQzwsiM8rM3wBe1IoJlxBAu2HkuVFzlFpRwKrnU + kuuzGuAxN0CQWVAmh+KXY4WtMEm14SIDuX6Gu4QDKm0b4Q5PF9YEeLKGH+k0ji+q9G4TnJOPj/+g + l/r48wQAAA== headers: Access-Control-Allow-Credentials: - 'true' @@ -47,15 +50,15 @@ interactions: Content-Encoding: - gzip Content-Length: - - '678' + - '691' Content-Security-Policy: - frame-ancestors 'self'; Content-Type: - application/json; charset=utf-8 Date: - - Mon, 24 Jan 2022 18:27:54 GMT + - Thu, 03 Mar 2022 15:58:30 GMT ETag: - - W/"213829aa5f7d40ef9cfb801209d06212" + - W/"d3fbeb372e3105853a66dc23f7077d59" Pragma: - no-cache Referrer-Policy: @@ -63,10 +66,10 @@ interactions: Server: - openresty Set-Cookie: - - visid_incap_2170999=H3u2wO7WQKuKN8N/iywt3qnv7mEAAAAAQUIPAAAAAAASn1+FT7/6mlILYAo3V2OW; - expires=Tue, 24 Jan 2023 09:00:57 GMT; HttpOnly; path=/; Domain=.nasdaq.com - - nlbi_2170999=LaImQMkIj3aoGLuAKj7S7QAAAAAJCtSqmyubCBXkwldUQXNP; path=/; Domain=.nasdaq.com - - incap_ses_891_2170999=F+8uPyS6ImB32wM9THhdDKnv7mEAAAAAsyeqIsmJAOjK5fObYw0UAw==; + - visid_incap_2170999=e/6oNgBHR7CvOerhN9k2jqHlIGIAAAAAQUIPAAAAAAACaa46anfOur19ybA3pWv6; + expires=Fri, 03 Mar 2023 15:44:50 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=4Sm5LxmHKg2yuNzoKj7S7QAAAAC9GGQ7HEP/OB6FHrJy+HSS; path=/; Domain=.nasdaq.com + - incap_ses_1346_2170999=ncY/NGPj3mmA7KXPRPStEqXlIGIAAAAAxvLXCLJ/Do5+CIatFJH48g==; path=/; Domain=.nasdaq.com Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload @@ -77,16 +80,16 @@ interactions: X-Frame-Options: - SAMEORIGIN X-Iinfo: - - 10-29222217-29222237 NNNN CT(2 39 0) RT(1643048873176 130) q(0 0 0 -1) r(2 + - 9-7623695-7623708 NNNY CT(1023 208 0) RT(1646323109240 111) q(0 0 0 2) r(2 2) U2 X-RateLimit-Limit: - '50000' X-RateLimit-Remaining: - - '49996' + - '49993' X-Request-Id: - - 640de875-e76a-42bf-bb28-c9607f0a5896 + - e4b156f9-4a65-4679-b1e6-75aa426f3688 X-Runtime: - - '0.139344' + - '0.141636' X-XSS-Protection: - 1; mode=block status: @@ -101,28 +104,30 @@ interactions: - gzip, deflate Connection: - keep-alive + User-Agent: + - python-requests/2.27.1 method: GET uri: https://data.nasdaq.com/api/v3/datasets/ECONOMIST/BIGMAC_ARG?api_key=MOCK_API_KEY&column_index=3 response: body: string: !!binary | - H4sIAAAAAAAAA21VXW/bOBD8K4SebWH5Lfot1x6KPOQKXPN0RWGwFu0Ipw8fJacNiv73G1pk3BYF - nADm7OzOzi7pb1XrFz+Hpdp9q7q22jlrjeFqU873h6kN1a764/7dw92b/d3f76oV+wxWAf988/6v - 9w/3Hx6BjX64xncn9uAP7H5sw1e2ZXfxFMalG32ih/kQu/PSTSMiH58C+zm6m5kfWTcepzj4ng3B - z5cY2HRkh0uMYTy8sPD18OTHU2DRLwHhCzufzzW7X0r0zJan0EX27PtLYP7ku3FemGdzN3S9jwzy - /w1LynmapjYVbNkc4nN3CPMGtUGHjAOaBCnLq9nb7ngMsRtP7BxTZCo8+Jgy/aLoy3TpW9YN5/4F - qRA2jeEmH6kvMCayCZ9nlE0q2xrexHCMYX4K7d5jJpUgIbbEt1w/Eu3wEbZ20v6TjA5fwrzs/bNH - Q5/7sMckk/Og8C3ZreQImnqY/dsgoi2prSQEHab+Moz7NLm52n2s3qZEGNPUw6n9tdPq06aCsP8u - yX0UaVH0BTHLyznVfOyGwD7AGSTYVOcYhu4yVLuj7+ewqXp4jmbGS9+DEf04p8mWg1y9S4tS7eSm - mhcfl1s3PwgNY/vbLtMOQ/jHn3qXtVPKcGe4Mc5y82lTcH71RtZWNUJySVJqaWXGYcvqnaw1OSGF - ks4IrfgNX/mibpRpGqtIctJOrTh3hQ/ckiYlLdfS3dDCJhKKRNNIZSgn582NDC6XzhqttdKZDbho - d4ag6/pXKttCVjUXWkvFyUlhbCYDLmTolo6k5to0BTa3vqWyjSKjhG10SQ64CJeNs4QCSikrcnJ9 - Y5OBcEUuGV/aBlxqCy1Iln+ZrW5ta0vWCmsErCttAy5sQldITlY3Ok+My1vtxjpHIHOhbPEUcGE3 - 3GInpEzdl8ZwvdZ5wzVDzkjtki15Xfj19qV1UbWRxpAhUopUk5W/3jRVI6mBXwK4Lab+uEy6cUqT - sARrMhvwmpxjl0SDYWFReVlFel0lWRNOG4GFVUrkxgjbYK4XWNaYlWusUA5DycrRVYZFbdAPWUyL - o/haO8FloMaSwxrCVPFaG/PW175FLRwJ4uBipQr7dR14rTVJI4TTvCkoxr0q4zANt8cKIq1FHhie - nZyb18VIwpTW1whnWSGsX4+ottlvSM5nos7bcXse0hGeKbwnvT/PeJbWB2eKeGjLl/RSXH+50m+d - lpK+f/8f4KOrOAMHAAA= + H4sIAAAAAAAAA21Vy47bOBD8FUJnW2i+Sd9mk0Uwh9kAmzltEBiMRXuE1cMryZMMgvz7Fi1ynAQB + bANmdXVXV7eob1UTljDHpdp9q9qm2nlrjeFqU873h7GJ1a764/7dw92b/d3f76oV+wxWAf988/6v + 9w/3Hx6BDaG/xrcn9hAO7H5o4le2ZXfTKQ5LO4REj/Nhas9LOw6IfHyK7OfodmZhYO1wHKc+dKyP + Yb5MkY1HdrhMUxwOLyx+PTyF4RTZFJaI8IWdz+ea3S8lembLU2wn9hy6S2ThFNphXlhgc9u3XZgY + 5P8bl5TzNI5NKtiwOU7P7SHOG9QGHTIOaBKkLK9mb9vjMU7tcGLnKUWmwn2YUqZfFH0ZL13D2v7c + vSAVwsYh3uQj9QXGTGzE5xllk8qmhjdTPE5xforNPmAmlSAhtiS2XD8S7fDhupac/klGxy9xXvbh + OaChz13cY5LJ+ZXCt5IjaOxg9m+DiLaktpIQdBi7Sz/s0+TmavexepsSYUxjB6f2106rT5sKwv67 + JPdRpEHRF8QsL+dU87HtI/sAZ5BgU52n2LeXvtodQzfHTdXBczQzXLoOjCkMc5psOcjV27Qo1U5u + qnkJ03Lr5gehcWh+22XaYQj/+FPvqhZOkyIvBFfk+KfNFedbsldvZO2VMtwbboy33Nzw1TtZW+WE + 5JKk1NLKjMO2wtfILYWS3gitSn7gK1/UThnnrCIMTHu18rkvfOCWIFBarqW/oYVNJBQJ56QylJNz + dyODy6W3RmutdGYDLtq9Iei6fktlW8iq5kJrqTh5KYzNZMCFDN3Sk9RcG1dgc+tbKusUGSWs0yU5 + 4CJcOm8JBZRSVuTk+sYmA+EYSzK+tA241BZakCw/ma1ubWtL1gprBKwrbQMubEJXSE5WO50nxuWt + trPeE8hcKFs8BVzYjlvshJSp+9IYHr913nDNkDdS+2RLXhcOeGWr2khjyBApRcpl5a/bpmokNfBL + ALfF1B+XSTuvNAlLsCazX3eJY5eEw7CwqLysIr2ukqwJp05gYZUSuTHCNpjrAy5rzMo7K5THULJy + dJVhURv0QxbT4ii+1k5wGaix5LGGMFW81sa89fUxErXwJIiDi5Uq7Nd14LXWJI0QXnNXUIx7VcZh + Gp4eK4i0FnlguJZybl4XIwlTWm8rnGWFsH49otpmvyE5n4k6b8ft+khHuMZw33ThPOPaWi+kccJF + XP6km+T6ZkvvQi0lff/+Py42B04jBwAA headers: Access-Control-Allow-Credentials: - 'true' @@ -145,15 +150,15 @@ interactions: Content-Encoding: - gzip Content-Length: - - '926' + - '936' Content-Security-Policy: - frame-ancestors 'self'; Content-Type: - application/json; charset=utf-8 Date: - - Mon, 24 Jan 2022 18:27:54 GMT + - Thu, 03 Mar 2022 15:58:31 GMT ETag: - - W/"78ad4124a9a0a5a40d42035affcc280b" + - W/"496691ed60c585948e779aa3af9ff0cd" Pragma: - no-cache Referrer-Policy: @@ -161,10 +166,10 @@ interactions: Server: - openresty Set-Cookie: - - visid_incap_2170999=pSLDYE0GQiqeWDC9vfZXd6rv7mEAAAAAQUIPAAAAAACoM6+JKkDyTKGeT6P8JlS8; - expires=Tue, 24 Jan 2023 09:00:56 GMT; HttpOnly; path=/; Domain=.nasdaq.com - - nlbi_2170999=xDEkcYxZ7xYyxB0VKj7S7QAAAABGzyhrwbiEA2c2AtuJD4Ru; path=/; Domain=.nasdaq.com - - incap_ses_891_2170999=9lbgCLRyvHRo3AM9THhdDKrv7mEAAAAApeelD1oTX5fEsyl70KVydQ==; + - visid_incap_2170999=e/6oNgBHR7CvOerhN9k2jqHlIGIAAAAAQUIPAAAAAAACaa46anfOur19ybA3pWv6; + expires=Fri, 03 Mar 2023 15:44:50 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=ABiyfZKY7lPRmrtIKj7S7QAAAAArrYC6JVNPrHr0ySRac20l; path=/; Domain=.nasdaq.com + - incap_ses_1346_2170999=MIJZKZaGV3CA7KXPRPStEqblIGIAAAAAdAbUADFV715NEyL4fWi0kg==; path=/; Domain=.nasdaq.com Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload @@ -175,16 +180,15 @@ interactions: X-Frame-Options: - SAMEORIGIN X-Iinfo: - - 4-17251222-17251230 NNNN CT(2 1 0) RT(1643048873720 136) q(0 0 0 -1) r(2 2) - U2 + - 10-10125631-10125498 PNNy RT(1646323109689 368) q(0 0 0 0) r(1 1) U2 X-RateLimit-Limit: - '50000' X-RateLimit-Remaining: - - '49995' + - '49992' X-Request-Id: - - 88ac730d-6f63-4b26-ada9-f7175c487126 + - fd0e09da-1b9c-4232-9868-65188ac363a7 X-Runtime: - - '0.137028' + - '0.127307' X-XSS-Protection: - 1; mode=block status: @@ -199,26 +203,28 @@ interactions: - gzip, deflate Connection: - keep-alive + User-Agent: + - python-requests/2.27.1 method: GET uri: https://data.nasdaq.com/api/v3/datasets/ECONOMIST/BIGMAC_AUS?api_key=MOCK_API_KEY&column_index=3 response: body: string: !!binary | - H4sIAAAAAAAAA21VyW7bMBT8FYJnW+BO0bd0QZFD2kPSS4vAYCXaIaqtpJQ2KPrvfbREySlqGAHy - 5s1bZkj6N67taKMb8eE39jU+GK2VonKX48eqrx0+4De3H+5u3h5vPt/jGfsGrAy+f/vp46e72/sH - wDrbXvL9Gd3ZCt12tfuF9uhmimOwjbeJ7mIV/DD6voPMhyeHXmf7iGyHfHfqQ2sb1Dobp+BQf0LV - FILrqhfkflVPtjs7FOzoIH1EwzAU6HbM2RGNT84H9GybySF7tr6LI7Io+tY3NiAY/7sbU81z39ep - YY2iC8++cnEHvYEOY1SwJJCW8Qr0zp9OLvjujIaQMlPj1oZU6Z+JfvZTUyPfDs0LlIK0vnPb+FB6 - AmEC6uH7DG3TlHUB2gR3Ci4+ufpowRPMCGN7QvdUPhBygC/TheH6SxLa/XRxPNpnCwt9a9wRnEzK - A4Xuid5zCkl9A2L/N4mQPRF7TiCp6pup7Y7JuYgPX/G7VAhs6htQ6njZFD/uMAz2Y0rqQ5Mamr5A - zvgypJ4PvnXoHpSBAjs8BNf6qcWHk22i2+EGNIdluqlpgBFsF5OzObB09+mg4APf4TjaMG7bXA3q - uvq/W6YzDIN/fbW7KLRhRjFh5s/jLuP0oo0oTCm0WMKgxiyZKKQuhSTLh254pglJ6Zqw4NRsfKYI - JXLmpXjmccmIyPHyqh+VguorIBM0UZTnuL4iMG3kVTznMy1pufRVWzonQvO1PgBzPi+04GqtIzOB - F4YxpnJ9iK8L0FKvi4mtQUkFCLI0hvgqlOZSsAzwjaCoKdUrZLWEgESZASc/e6JKQqVaWlxuxGIh - bJDD66kHZwXXbLGWrtbyouTKbFIDkKWAZw92Y9xQZhYeWS3lRaomwCVYk5t5CgIOqsv9AVgxqTkx - RlDJFhj8mmEG05Sa6uXvBs+9WaEZB3pJpCqlXmBwSV5WZIXgpVFGaEMpzcVXEwEWjApC4NFmWQmg - rr2F0TTZZmhJc3GwKBdnOQbuzK8BLZYjREDmHFK5MWicY+um60NCCyke4aGAG93YIcLDMF/5PsBT - l/9Jd/Xy25F+bSTn5M+fv8qSq5mFBgAA + H4sIAAAAAAAAA21VyW7bMBT8FYJnW+BO0bd0QZFD2kPSS4vAYCXaIaqtpJQ2KPrvfbREySlqGAb8 + 3sxbZijqN67taKMb8eE39jU+GK2VonKX48eqrx0+4De3H+5u3h5vPt/jOfcNWDn5/u2nj5/ubu8f + INfZ9oL3Z3RnK3Tb1e4X2qObKY7BNt4muotV8MPo+w6QD08OvUb7iGyHfHfqQ2sb1Dobp+BQf0LV + FILrqhfkflVPtjs7FOzoAD6iYRgKdDtmdETjk/MBPdtmcsiere/iiCyKvvWNDQjG/+7GVPPc93Vq + WKPowrOvXNxBb6DDGBUsCaRlvAK986eTC747oyEkZGrc2pAq/TPRz35qauTboXmBUgDrO7eND6Un + ECagHr7P0DZNWRegTXCn4OKTq48WPMGMMLYnbE/lAyEH+FJZcEq+JKHdTxfHo322sNC3xh3ByaT8 + TKF7TgHUNyD2f0GE7InYcwKgqm+mtjsm5yI+fMXvUiGwqW9AqeNlU/y4wzDYjympD01qaPoCmPFl + SD0ffOvQPSgDBXZ4CK71U4sPJ9tEt8MNaA7LdFPTACPYLiZnc2Dp7tNBwQe+w3G0Ydy2uRrUdfV/ + t0xnGAb/+mp3UUhiKCPLhz7uLnm6J/qijSi0YUYxYebPlp+1E4UphRZLGNTKNKlLIf8tC/lME5LS + FbC0pWbjM0UokXPdFM88LhkROV5e9aNSUH2VyARNFOU5rq8ITBt5Fc94piUtl75qg3MiNF/rQ2LG + 80ILrtY6MhN4YRhjKteH+LoALfW6mNgalFSAIEtjiK9CaS4Fywm+ERQ1pXqVWS0hIFFmwJORPVEl + oVItLSC+4mGDHL5y3giu2WItXa3lRcmV2aRePYWVtYbdGIcDZRYeWS3lRaomwCVYk5t5CgIOqsvz + BWnFpObEGEElW9Lg15xmhRGlpnr53dLzDqzQjAO9JFKVUi9pcEleTjErBC+NMkIbSmkuvpoIacGo + IAQudZaVAOraWxhNk22GljQXB4tycZZj4M58W9BiOUJwK60hlRuDxhm2brpeNLSQ4hEuEnjiGztE + uDjmK6EPcBXmP+lZvrxb0ttIck7+/PkLjj1d2qUGAAA= headers: Access-Control-Allow-Credentials: - 'true' @@ -241,15 +247,15 @@ interactions: Content-Encoding: - gzip Content-Length: - - '822' + - '830' Content-Security-Policy: - frame-ancestors 'self'; Content-Type: - application/json; charset=utf-8 Date: - - Mon, 24 Jan 2022 18:27:55 GMT + - Thu, 03 Mar 2022 15:58:31 GMT ETag: - - W/"24d7fd1a832d96feeba80de3265297b5" + - W/"7e8e49eff7b6210cb48a16a1c09da631" Pragma: - no-cache Referrer-Policy: @@ -257,10 +263,10 @@ interactions: Server: - openresty Set-Cookie: - - visid_incap_2170999=60n1zTp/Q6eQz+cVdtxwRqrv7mEAAAAAQUIPAAAAAAAnXsLTUbYCcocoS/7HvABO; - expires=Tue, 24 Jan 2023 09:00:57 GMT; HttpOnly; path=/; Domain=.nasdaq.com - - nlbi_2170999=4JOQN5nmzD6rN2S5Kj7S7QAAAADMfvU76ylbSx9Gtv6G/abt; path=/; Domain=.nasdaq.com - - incap_ses_891_2170999=/y+qD+aQr1H+3AM9THhdDKrv7mEAAAAABknbLVGoeNsq6mjIKKB+3w==; + - visid_incap_2170999=e/6oNgBHR7CvOerhN9k2jqHlIGIAAAAAQUIPAAAAAAACaa46anfOur19ybA3pWv6; + expires=Fri, 03 Mar 2023 15:44:50 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=QepEIDeXQxnOhxSUKj7S7QAAAADjkrZbwmPS/C/50yeWQylI; path=/; Domain=.nasdaq.com + - incap_ses_1346_2170999=KB1Ec+rnUEyA7KXPRPStEqblIGIAAAAADx0Ksqh8rF9ukd8y6soKJQ==; path=/; Domain=.nasdaq.com Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload @@ -271,16 +277,15 @@ interactions: X-Frame-Options: - SAMEORIGIN X-Iinfo: - - 7-27921314-27921318 NNNY CT(2 12 0) RT(1643048874242 111) q(0 0 0 -1) r(2 - 2) U2 + - 8-5288547-5288558 NNNY CT(1 6 0) RT(1646323110489 98) q(0 0 0 0) r(2 2) U2 X-RateLimit-Limit: - '50000' X-RateLimit-Remaining: - - '49994' + - '49991' X-Request-Id: - - 05cbd069-9117-4a4b-9c41-f85639d35e45 + - ce11c349-292c-4f87-b077-1f258c1cb92c X-Runtime: - - '0.173050' + - '0.095326' X-XSS-Protection: - 1; mode=block status: diff --git a/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True0].txt b/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True0].txt index bcdd432cd98..5da85636648 100644 --- a/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True0].txt +++ b/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True0].txt @@ -1,5 +1,6 @@ VNM ARG AUS Date +2022-01-31 3.046358 4.285041 4.509120 2021-07-31 2.996287 3.944620 4.792962 2021-01-31 2.861602 3.748231 4.984740 2020-07-31 2.847282 3.509232 4.578450 diff --git a/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True1].txt b/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True1].txt index bcdd432cd98..5da85636648 100644 --- a/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True1].txt +++ b/tests/gamestonk_terminal/economy/txt/test_nasdaq_view/test_display_big_mac_index[True1].txt @@ -1,5 +1,6 @@ VNM ARG AUS Date +2022-01-31 3.046358 4.285041 4.509120 2021-07-31 2.996287 3.944620 4.792962 2021-01-31 2.861602 3.748231 4.984740 2020-07-31 2.847282 3.509232 4.578450 diff --git a/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_candle.yaml b/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_candle.yaml index b3306d19de2..fc60df4bc62 100644 --- a/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_candle.yaml +++ b/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_candle.yaml @@ -8,17 +8,14 @@ interactions: - gzip, deflate Connection: - keep-alive - User-Agent: - - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, - like Gecko) Chrome/39.0.2171.95 Safari/537.36 method: GET - uri: https://query2.finance.yahoo.com/v8/finance/chart/ARKW?period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2&interval=1d&includePrePost=False&events=div%2Csplits + uri: https://query2.finance.yahoo.com/v8/finance/chart/ARKW?events=div%2Csplits&includePrePost=False&interval=1d&period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2 response: body: - string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"ARKW","exchangeName":"PCX","instrumentType":"ETF","firstTradeDate":1412083800,"regularMarketTime":1642694754,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":103.255,"chartPreviousClose":120.66,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1642689000,"start":1642669200,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1642712400,"start":1642689000,"gmtoffset":-18000},"post":{"timezone":"EST","end":1642726800,"start":1642712400,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639578600,1639665000,1639751400],"indicators":{"quote":[{"low":[115.37000274658203,116.48999786376953,114.55000305175781],"close":[121.55999755859375,117.88999938964844,121.55000305175781],"volume":[1503000,1292600,1459500],"open":[119.62999725341797,123.26000213623047,116.5],"high":[122.19999694824219,123.47000122070312,122.33999633789062]}],"adjclose":[{"adjclose":[118.27759552001953,114.70669555664062,118.26786804199219]}]}}],"error":null}}' + string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"ARKW","exchangeName":"PCX","instrumentType":"ETF","firstTradeDate":1412083800,"regularMarketTime":1646320709,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":83.82,"chartPreviousClose":120.66,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1646298000,"end":1646317800,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1646317800,"end":1646341200,"gmtoffset":-18000},"post":{"timezone":"EST","start":1646341200,"end":1646355600,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639578600,1639665000,1639751400],"indicators":{"quote":[{"high":[122.19999694824219,123.47000122070312,122.33999633789062],"close":[121.55999755859375,117.88999938964844,121.55000305175781],"low":[115.37000274658203,116.48999786376953,114.55000305175781],"volume":[1503000,1292600,1459500],"open":[119.62999725341797,123.26000213623047,116.5]}],"adjclose":[{"adjclose":[118.27759552001953,114.70669555664062,118.26786804199219]}]}}],"error":null}}' headers: Age: - - '0' + - '1' Connection: - keep-alive Expect-CT: @@ -36,11 +33,11 @@ interactions: cache-control: - public, max-age=10, stale-while-revalidate=20 content-length: - - '1157' + - '1155' content-type: - application/json;charset=utf-8 date: - - Thu, 20 Jan 2022 16:06:30 GMT + - Thu, 03 Mar 2022 15:19:22 GMT server: - ATS vary: @@ -48,13 +45,13 @@ interactions: x-envoy-decorator-operation: - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* x-envoy-upstream-service-time: - - '13' + - '11' x-request-id: - - 233a77be-ba62-4f6f-b948-6436c4ceb0d5 + - 77d53c37-b2b3-44d9-bb50-ac8abeccd09e x-yahoo-request-id: - - 3sml3bhguj246 + - 3ejhaq5h21n3r y-rid: - - 3sml3bhguj246 + - 3ejhaq5h21n3r status: code: 200 message: OK @@ -67,271 +64,258 @@ interactions: - gzip, deflate Connection: - keep-alive - User-Agent: - - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:86.1) Gecko/20100101 Firefox/86.1 method: GET uri: https://stockanalysis.com/etf/ARKW/holdings/ response: body: string: !!binary | - H4sIAAAAAAAAA9xba5PbxpX9vr+iw63sSJXpYb8BjDRKbMeOsms5qbVKW7uplAoEQBISSHABcB5K - 8t/3nAY5Q44kR5poP8QuDUA0um/fvo9zTwPw01/89g/fvPzvP34rlsOqefaUR9Hk68XFpFpPcF3l - 5bOnTb1+K7qquZhsuqpo1+uqGCZi2VXzi8lyGDb9+XSab+qzfmiLt/k6b276uj8r2tVEFF3b921X - L+r1xWQyffa0L7p6Mzx7NN+ui6Fu14+uTsvT/rQ5rR//5epPzZ8vePjrX//05yf8cbbZ9stHfzlZ - DCtIz7vh5HxdXYnf5kP16PHZohpe1iv8Oq0uq/VwHru96U/+9vjJZd6J+UXJLt821Qp3+69vXuaL - H3L07x//Sf359A1uF10FUbseaD8tm4vmFxcnZT7k3+c3VXfy65N/ay5OftWcn5w8eXOW9zfr4mLo - thUu+q64ONmv/+rq6mzRtoumGvLFCkZYVB1NMB11+nVdQkr9q7J5Mj/b5B2m+6Etq7N63Vfd8HU1 - b7vq0ZvT+eMnf3v86Kpely3s0hZb6nV6Mhrt5PRAr9OT3718IV9+98eXqXt+8vjJ0+nOsjsLi1HV - yURQzVs3baBXXpqdquhS1kVOP0Rdx7vTN/00L/vZzdiJ2hdNDUUuilxutjOZJMoob51JvPWJ9ffc - nK/b9c2q3fYIoFutVrCLWMP6F5PLurratB1CCLE0UO7kqi6H5UVZXdZFJeMFYyWOKZZ592OFPtth - LlM2D/XQVM+++s//+C/x7cvvxPO2Kev1ohdSoE38UF0P4nfVuuriusTvMUW3robY96/iR8ao+GoX - pE+no7BD9cpq1BmDDzT8SjTteiGauh9EOxfL/aRwnIiqPPp7kz8WV/WwFCVmqpte5LN2O4gqL5Yi - 5o3I16Woh15sqq7AlHCFuKrqxXLAPKJei2FZUczZrWVGdbt21g79gaar/Fr263qzqYZzqU95Wa8g - TSJ5afrzJu8WVWy/rMuqvW2XmqLvkr2gIxEezf1cfy/Pp9Uwn+bd26vp3i7TWy03XYsVDTcXk3Zx - Hq19aNUv4cQPT/VP48Yjrbddc6DtP27w6PlPklivFtNZlXfyspezbdOcvdksPuLEm82hyKtq1tdD - 9eG+vPOagXow4CPeG8N5gHVh7PMi78qDMf12tcq7m9cxdl+Pq/rwwKjL3cDfxJW+3i/1+iOj/n8D - 83iuf5rIPFb7Hw+lO2jpl8D/AurVBY3w9+Blnl+y4xkOx3LG4QxI/KZ+0816gZJXv6v6i4k119Z8 - snQZu59RwGfMocO1Dp8+R+z+/hz5ZtNUcmi3xVJ+mknujzg7UipV1/i758g1YkeS0cmi3a4Py6+5 - h/yoCE2bl3stpq85FEog5opp0fdTW2WmUtrnZZVbX9ozNE5AOeDZ4aap7jmbTf2yqobPFUi6I9dy - MVLHdbujNrtmdMENcIz9jVvuU1bzqiP3Wberttw21S0Pujfzcrt+2083bXMzr5uml74oM1ekWWnz - Ii/8HNznkMTsxH9cErBwkxdvpZ3nTs91GmauzG3IKOdWq88ROO/guqu2eyuz+cznOjOZVWlVZfbB - Ild5vZb5LJvNVJnPihBCkvsHSyNl7KevEY7SpjNXZUVWaZW5eZE+WKb3zshZOc9DHuw8nSV6PtcP - lhZUGqRX3jhVBlUUmU50/mBpSaqctGGWFlkocgUKnM5nD5ZmEmelqqrC2bJ0WciLNH24L1zwVuok - V2li4F2jbZE9XFqWqCBDmFVqhnC22pi0enjUZakyUhf5PAkOGeHmSWbLB0vziFpZVNqmviq9SmZ6 - bh8eITaziTRpqVLvtKm8q4JVD5ZmdOrk3BSVTStklzL53BUPlkaNZFWWKiuULWYmtcbNHyzNZF7J - rJynNp+r4J2yNg8PljbmPqnoL/3X/c1q1ja/9L+9paRSzV3urCmVoXHdAxyU1TeJsSv98t+/+3FR - f7V99eq7r7Lp69m2bsoX+bqeV/3wxaT2/eKLy1zVZdlUV9jw/z3R0/FZy6wtb+5K3bOndawAx5v4 - jz5rWPdnfILDhw0HTwcm/yJ2/y0j3buYqIkYd9z8Fcsztr11v2nym3Ps+aonl3Vfz+qmHm7Ol1hB - fBY0HVU5qrdlfSkw2eR1tMWuYHfgnEPXtkNcIJdVdaJocpbrZSmvunwzGYfeNdZrUFq05juG8K+s - UpN9h76T7bq5ARcutj00HOSuZfLsx7f1RgytYP89oXk6ze/LX1XrLcT3lwtxvWrW/WjMnS2v7Fnb - LaZGKTVFj9tpOWhHx0gPwKBgm4ngZvnr9hrGE0oYh380Yte+hRWLbcdnO9+0TdvdmpZb7Wjvc6c2 - 11Bjkw/L3RAJnlQV+YYb+e26nBw2v2n5OOW4fec30FqY/YUTYakDTtrszinOdBanYHRdLnCELWja - vKtz2eQzkrLjnQq2GwiyTST4O4r2nouadtHunfeJdjyylFVBicykk3syP2AmSIh2Woihy9c9tkAr - 3h66+vrRmRaUJuMZ4h7v7Rnt4awXmTKukNYD061MMiW1RlnU3ktQgG90khiRmqBF8F4EQL+wmRbe - Bl1Il6EOJNIHkBnLU2J1n0kXgsDwxOlvQhKE0ZkXoGKJSHUqrE9xSHThTMJpRJKi0vkEPnFocLhp - tUgwgxX4kTpomAqtFCIHw3WmMAQaGO8wJhglXJKIoAMEZQIlLog0NeibwL0Wf9pkEqOEMVkmecvq - zMmgwjizswH9rMPqE6jpkyCdgiBWc2twK0gNNiS0g2UCFJCWzSA1Xup3L6A09NFgNzqV0B0W8dAI - BsHMmBfjsFOC4BSjE91gUMAaE6wpQYVyNhM2pWUspGC5kJ0Y2BfNWEQmvMNvIx0MpR0GY70GM9MU - JmTxnAoloSQEOAR46ptgOUjBG8IWkiumT6MKsGjAogMmlTCAF/AKlgpZMTWTMUEz/C2NMY2BZ2Fq - Hi+lc6qRMKbJEC6pBAlIcYRxTSqhESRYhAMCFxaCN9EZrvOwopI+DVDEG8SXkSksmaRaptAfPpO0 - EMwpHeIJS9FR3wx6IbwcbALzNZgQkg2NjzkKybV4TA7NXJAptEhs0sgUXku0emUQukudqMYgMryw - 8QjduMAk/khpGwS5oJUT5puGLNrICudACwUSwkIAAsON8mxQlwgFXyi4NrGSsQVlAzyjHdREM1IF - 0eRE9DgkJ9AR8hX6Wo0EwxD4EH2xECwTK0awRNeBciuBRalUN5oRl47zJUnW0CepGI9WUXEDDzKQ - 0ZPpIjMRFAPPp5zdpzJz2SXcMyptvErhShFdieMyWN8g++iyIE2yW55VBZgmTYEcMMIp+G2MXw/N - ArMIipmGZ5rFqww7QLgCt3gJAxqcENGB9oP5EEcIXea8pP1j4BmmI07e0OomCQgeJnMqAkzlkcsO - hqSzBYXg+G5fT7rFLH8U1CnsHU6R4ebxHXTfYlowGitwVt05zVgYAhGmXrH93Qun2MU4v+vi0QVN - 6OLRBe3vXnitIwR7WNH40RXBj1JiEzI/U9Q/RRfvdl1Utu+Cps/TWwOxEAHKI7sQrRLhB9CDEW1E - ZBNTxSBzPHFaqwjXJvU9jooJywvgCSydMfuQpjR2AjRjnYM0ZJBjkCtABl0GUMOCJWPYEfYTRg7D - CMAARHECMEncQA5rAC57eHobEYPR1CMgNghMY/SyZHhL/1lgC5MI6aAY3cBZJANUh+sBAgQCJhDS - eVyM5hFFg51Tlg5GuYYEB3EYBIAEwkpD8MviQsd0ImAq9mb1AKIgBtEd8ZeJDGlpA8ENKIjlQoDA - Ioh82C1TPSITXIxRKCSeuiQAR9QxjUkJrSwMwBPvYEfOwuqDXZlDGmmAjodEg2tDaAUessbYzAkH - cyYsLhFbgQpIHwNkxklDD+K3ijhJXwF64WhPFUeMpj4IvRALCEwGs6Iq6541FE2cHNZwQFhUO4eW - NCswDrUdNUViQvgFg5i8DoCA+isz5FQSVAR/xAVKNTSD+sQKhLFSNsadY9xlMjDuEuCTj+UCIO+Y - sGhg2gN+E4aaiqEBfQAMCTGFceRjDQaew2I20L+wOQEblkGdZQCBPcC6LNiWZBC1GiDh4E+DmmVQ - XpGqAGuuEFGr6AJCkKXjPI0PuFUyhZtTQj/9q1hVaCzHaAReAFEST+lARx0979+tLPydWFeAhyCO - ItonNCBjG124WJ/FMUAH4BBkAJIQli4wFzAlCwEBUJOlMM2gAPLEsJKibBj2JUlBXDkdi3QCgE0s - MRFOTFhJXZYS/rEGQY6kiDEO5gDhQSSk+I2k9FyUIAXhL4G0EF6z2sCnGRkHicoIFJr6G+hhANVA - WnSAmlwb4xQzwzg+JYIToFPmNkpqIgNKtgusM0hDdAc1kcBhF+sTSB7yQJIYgQPIBGlCyVg5qxgK - JJRiPDlP5oT1MgwZn3Auix7jnzQDaDOSC9rBYr1MQ9hDuFgxWSoN8B35iWosWTAS0jTESUpGYlk1 - gXeSOuypAX0d8Uen5AzgcVggeRZRBKkD74LMsYxirQgQ0jEoCgoM50QaCXvEBAVdRawQQlgxqWkM - TMSEYW6lxGnmGLujNSFSZhGbOMxxCkEw0wQaLXGMFxlPJmIZFwZqQk4RUw5+TEkkSffA7SMrpiw4 - 3OgYF2QK0Mqk1N6MoIQYDwgzDWiD0iOxgPJYko45DfmkSSbmtPcxp5GBuJ9Y1qag/BICLj0qHf5e - gQuwRqWoUQE1TwdUq6B3TbEeohfrl4rDYCHes0ZFUQi/AFoBVSgAkbC0GVkhtAes0glMjSz+hE/M - fpJkP0mmLuHlJTC3AXYkSYHFIL2NiYhDYAN8qQY0HpawS61c2I0MYIEOLggOgW+QTNyyOJSEwOyI - Z0c6JMgdDUKOYemy0JBju0wvwfMusV9YsgbF1WcN2T3RG16VjHXU/iJGGZtY3kxG4ItQ00gWQmWX - 6JVeQkkypp1AaBitAfN468g/EsBpHEyOBwwGVcoIFqyKI2WOlRQ9AIpj+WQVZMIgsDMbyZ2Ht7m/ - 4vYBqR2zCJNBfqAcz3IQccvFepWylmiEUjICdEQnG9VOIoRrhqaN9ZqVQrJGURkmIYsQDJhyc2zi - CXyBRZ0MFiJ58LFCw1Rh3PfBJiBAyCgBsPMFSQcyBsQDmsMfGbqkPsqD3yx15G4tHXkfQAUXmAEN - HgljeSZ14U4Ircg5Fcs8LlIkMcBH+ZgHcHbcOcICo8lS6sBijurGDIPSjBRNTIysn6rHnSgpGE3M - jR73VoalPlJ3WlXF2Uk/A1U13FZgWgK9oOWR8jxhqIpLwewielLETQZSgFs2A8TwINyekIBmmxb4 - xXEx0jjrWH2QewwyEW1JC2FjFKkOQol7CKQkqQOpJnYSuB0Y+YRzgB4IIGwRSzayU0b1AOLkeQgV - xBDqEQ1O0sfdvWAAOM5qxtgxUXPUFhZ7UlkQqIwbjIxQSvKEmLFcMExDWoQwIdSmkf1zLwdcI5Fz - jG5kDvIYXoqW4hMAIJikTyQ3seSC3vVkFGP02LvoSYA2oSC6u3EbQ+8r0mgx5grrio08y3M4WIP2 - DG0UEm7gYVtHfkAkdru9lyMF4p7WCMLsjkQY7tXIzyy9TLTFBHx+MOKHNhGK0Irwp1V0LFQjz8A5 - MmmglqOTyWXTGFQEkGwMLBATRjIfNmDpkV6ifpOZptH3u10tqSJCl76QLjqcO3dhIl2MAUta2BtW - E+5YcVMXjDIACQ42qglxWCUiNU3HRwNYHOs97UUWwLl8DBSYU8eVarornkCjBdCKcI0ZvbJFrKjY - 9iCaEsQPIc+ATSCxudMmS08ZVjpdSpYVEMwlNkCXPBMVCxmzguWe5Rcw3YMmeBeTSvsmItsOBOKR - ecEdTsEi58eLwOcn3I9QkOTzIcrC0iznGGdtCCAmPvSxe7DnUWZ8bkDglORHmdufzRLQphvJZzzI - o3erhG60BSE0jYCAW3Z3jmvQZAwEy3ji1gU2gnKoeYKEIcAhiAYRtzOEIUxlA6yJdXFjibKAxEOR - 87E0JrEy8tUVkZBH9Ee5yDKUN783oVEFkz+SHJowkkZYCcmEaHJ8LJG6BkdQJgd6FoAN49lFxDHx - SJNkjI64cHMrXXFP6kad8CNTyDc+P9L8DZ3iBpCoxqcvsL0LBEao7xBVASnvGEZLkqi4Niw2Iduw - DpbkmlgYmLMIrZTQYCM6OZZ1bGlS0l+gVMZHOeTayHMSeOLVaIrGuehWt3drOroVumtYJqjoGBUf - ZYF+kBPHPQFr4hhgxPV0mdjQsFyZIiYskpD5wWd3WMAI1Y5wzrumR/bJLIZYdhdhyww2okr0Rxy+ - DyUsEJnJMxkeFk4sGukewoRUmjsNsNNMmTG+XCxGNurIKEl7+oLPSbgdQnQYFo5YNFXhsliGWOe1 - i/Qfe0QxlicgAQsSubOXESc1H/ZEkmvgjczdD71XmhwOyqmG9TfdPVXjhgxCuTmITAxYQu7CZxsB - +QwkUYdxk6qdv43mpupuBtTkxgIMvaWa3MPGZfGJRTx+INbTndQoHpFg+XyTG+TdmQuPB1qfkyu1 - d0iBSqr4JCI+juATT8c9DmOOVd6kCNX4I+5nAAkhKWQ2btRJyg07J8wRFZ/bkfTjX8anddBM75fr - bpcbae4HDeqPDer5LBRHkK4xavYJHKFIMO/Br46zcW/Vg1cPi+PXD++/k+mrvCuWGMHn+yKPnwNf - TKZj83QiVtWwbMuLyYIfjnQtXxHcDjmQNG+qa1EP1aqX/Kyp6vjVST7Ul9Vxv3zWt812qAS/uR3k - jVSiqeYDTu9L2CCQz/zuRcdu/BXsjOAS1/35FdgXTsBhMfCjmkWX3zDYjt8T/UMveOzH3il9+O3T - T7xn4rM48ESD5ATzWaGA5knEGz5s5dPR8UpxB3vkwAPn1evNdth9AzXEN307o8zajm/3xtNoB4QB - 7JcXFd8D7xuxuxhN1a9oufhzlveV2NxIfebFqjzHL0PDJ2Ko1zfn+JWyK856dBEktVe7d4BdvV7Q - c/Hi/uxja7sdaGNJZ4hle1l157OFvFrC0ftxx5f9Mi/bK9ksRPRIVVJZ9Ilyvbo/6ErOt00zOX6r - NsbnLlqLdjVrZ+31rk91vckpFiGbN321a+U7S3SHLdurdVW+5geA45jt0H7TrjZNNUBWO5/Dz5uq - aYplVbw9lsGuxW1XSpjsvvn638mhLy4mFJivb0Tb7T4KHF/bn52dIbLyZluNn1odpE3ZtZsSOcP8 - jCm1S+fxyNTdX7z3urBexze6u7Z6Hd3xfrK92fZDPb/ZX452FZtr5FqMiQ/EmN2HE5w1hwGBJasa - 6ygPXbfzJ37dJSkfcd968DYo4i394cg5iDdzeDGDseI2dzVA0RVxhLG8V1Ptp49C7hRIiBK7V6zR - RNPJs+/bhfj9OiLkl7ZWfH86/v8Gn22w0Uiz3VJnkMToXCyHO8Md3MHgbvMFDDiJHxQM+UJuN4tO - jp8PyHlXVVhMffcx+nTTtbDdd7ghXvJGtN9RcI5jjwKTnwnwE4vj0nB93Rx85zC+Le/rstrfZ50o - 2uZ4EBvX+SUacdw34qcce+aHTfSg2OG4AIxtNxMRPzm+mDxvV0cv3T/x1frDPkg4VCl+1/Be5fBf - +AsFvjgFuzAr6NYkfCgqkhd8DHypVQ7WwsqDPaVe2lV85N6A0qzIuw7u86UgqLpdySAOBkm+wr3t - g8ulubsSYECH8uPY5XufRiA31odWiTg+eUanoAduPjtOy1tnHjsxfk3R37oxQmv/M/Qm3z1cypBz - d0bD0lHP/cGlMJd3d3GGS26vpHnHKHiV7Zu4bb/rwCe+cPro5I+KiBL8T0lwt5dUB/T24BoqfGIE - jB49jIGD1Ge/+HEQP4fZhcKHgmQE3tso+f0f/3AXI/Wm/TlGSCqSV3aFDSqOMhMp9iIv+DpgeecX - uvFV8pMxpA98Lj7ZZ7TvT3gs78AfD79gun8PDW1flfcNzH87ojUWCZSnblt98LulY9odRPg+bny/ - 57bsVfifvR+PvPRBxr3/Zuuncefbl9/dRRQ/xPz5BRSfdOrnfsXdyVGih6M8v4ugmOYHIEWMiKPv - gCfGHKuQPgajD4BLOJrTvED5Qkh/YkDSPZ9TRn6oru7cucbFz9OfRt3z1qsjZ8G+x4i+4nPk4wHJ - UVtElGPvAvdX0kn7PHvBNwXLgFO6DJfuefIq/VRAoT8+x38vYVl++nzrw2HX8HP0o0UmpMyYSxxl - yu16yk/eUL8/lWbt7fVly+yLvHtbDeIFNyl36bSKrf10gR0A2n+OHgkihS/gAX/peQJerfjd21If - Uai7bFP/BwAA///kHWtz2zbyr+B8k047Q0p8iZJc1x1ZUuzUD+kiObkk07mhRNjimCJZPmIrf+y+ - 3y+7XYAPgKJTJnZ6M7kPtkiQxIL7XuwCZLZXPP1q2ysh/fsywk/nyMUaolQscC8DhLyBRwrfIy8a - xH5jgXYomAlnV+BcLbxATHpY6OsPqhtUfEC4gZ8DE2sqdgaExPjAVo22j7Tk3YI83xfb/pmxGodx - FMZOSsmITb1XqpJPxX+PKrKHAYmFPyLLVLEJ40q8/FGXY1DxFDToAGMba9OWwfZQLXJaF26U+G0d - +r4T4eRuSSneQC75KpYabyJtvz9S4RTO0Ff7vI5ui2nO8qw12jneSmyLk4N5Ugqn+RhGj4/YEiKc - fJTWHuHJ3txflKo9kmwP4deWr2wf2Gw8TsiaLH2BE7P+Lf7aZLtSjQM+XyhmDVYxddx1nG1XSZVY - EdqOj0IfF1RXy6O6xRQV8g9ekC7yQBCCj89cZ5tHHLBdVKS7iv0OeEMXAe8xKLwGcv5GLxrYdLHx - 4CNK2PEHw44efuczzWyWWZqBZ2A/v5UCbnbw9qej7kaXILNuMD0k591w9viDDhDBZX+3mI5ej0eH - fNOE//ybTKjv7KhL5rG3pthwvZhITJBQJpTC2/V4SpAlnVC38wl48FUJMNKaqkhLoGlxYtVYAGVC - /dDTXvwuX1j5LOOyPeST+/wdLEBbiaeD42G/0x/uOx71R+Fo66t6Oadf5NQEGhhFx9VUP709kIWF - 3RhTlyUvj1W9Az7kj/jTf/GTLDV1Ijw8JCVQRpBVdFgk+KRsB5vZ57lUAXD9faSBAn+k3J4e5oMg - R39TVaKqx79BF/pQwbogcGwPofv55WPOWp4C8Ruyk2qvBWU+6J1+TLe/Ex9EETMWvRo+5azO8XDQ - 0XQ+DPKnndfzoAXVgJaAMEyJIokBdTXE3aKrov6RhSk9ONY6gIUf8f9nyIXd1UgCXTMGb6RkDeBe - BqqJhXbU98E/6mlae0OUP78BWbqHPxgTZtfh5x4E6ivN1DdfcInVRB/1LZZXws+QVdmw5Zdn5lbv - dXC5kY3/fbXT1/rs3yU0WCZh/4XmrW50+saAaLxNuFPvd2ysJSybsRDPcCxiMQ8Fi0UIP9H0QVPK - PhcZkUpMWdSEbB5TlUfFhXQdlkzEf8Qeco1zwETQ0HIR7B3C4EaXZLpYNlrZXLdKObJcHFdlsnI/ - jZjn1o+PMr94Kk90Qj/5Wl5u0vKreXaaL0DO3aYZhKLIOgcNdq+4VreQeXdlulvqsLCN+x1WuzAJ - BvQLep54uBVX4O737OZXoOfipi/qeQz4TPe7xV3VUuiTXa467Galvd/TI1iogFuH5IusUU2ZuZJi - Hg781rQqNMaYL1bRyVo58UHuaNU6xeqHmgWNmROFPoYhWx2/tDP75o3lq7lNDkIeqoE0VfTYGA1v - xaMyfA+mpg8aR8eXj5eJ6RvqpFjNEcYpQEqjGEe6ytK0ciLKJ1dpwB/EZLRPkyTz+AwCv1/F5PsN - qB632GKItxcxo5NEYZRFRdTYWEdyPGVDaat3mwLUhshy7024378fyubaFbtQY7bXDu7GGLpuHnJ1 - jKFJ+vi/ys52LJyQv9Axhu/0BrZv4nXVFO7S87vYfx9YzBLSwfx5H6cby1aNN3/CkXtRbSh1Fcmx - fFx3HSTqwxtxc8fcdNyIq2wrlWKxDcFL1g4eVpL5KTrP+EhT3RQvyym6QcYojovyG7lgh3eM9Tnd - mmqtDxdn3m7QCj8UwpM6K7+sYeCFPipv25SajLFmsWEHu4gP8r0o0hgPj6/CzlEXcQd/C9ZLeVqU - E+G2mmXjCzJKEopYKB4CJUPz0y522i0A8N0uGBz3GHyn1GVHlVJb+VXBR55VX4esaGY8e3XFFVf+ - 0BjamSt16ocrLAfJ29GhflGe6Ypm6YptGryFDSeHb7SDnya+A/CXi4uRBH9J4YIA1epVUA3dUgZ2 - fx+m2Q7m7SpdA8zTk+VYgnkKHl2ydoCiJ16KiCHLOEvS8rrdsQbVKGylb9qK1u/tj8NqN45PWxjF - +0tpDO/DcEve4E6SBNhhmwX5jqJJeUevYxsSBXpDRTfN/VH02o0C/LIMxvF6dn4tjeQ1tCsQR647 - AuieVYEeDmzFsKx9wHY7wKCM0Wgu5rOlBHgB7d7NjizpehOA9rzdCQMwzGoAfbOvaHrDm/fbDSB1 - Q+SD5WQ2rvGe78AlckYdP90IwHVdYEJF03qKaev74Actwd+nMYJ/u3wtg+dbBJbnVmcoML+pDC0N - RG6wD3fYFq4fMrgXszpc3wsFsBK3o5z3G15W19pBTTZhhNQ+m81lakM7UFsAqwlY1nVT0YwmsC31 - W/IHAv2HBPIEfZMKoWAyK4ADva8Y+rABYEuFhrIkC9J14KU7sghvUty5SIBrCS86GA4UY6A1wG2p - 1OKV/4BifHLxz5oYgyv2IEA1+qL2MEB72HqDLtVbKrEk8u+YFF+c16TYz4K7R+AODAOw3MDCekul - 5d6xNPDk/OpUgjqJnZv0nHuoJWRd0BmWog8NZdhkPfSWegtdH4A9Hy3PZDp7c0dQF0ZnIFhKQ7Eg - zBv2mjirpbpKKOJ5KmOZOuTC24Kr7lZE7QwFA2GalmJbTa/bUk1twhDjpbPZbFJnLC/Ai4RnKxNh - AANbVFgDE5VW05u31FiRzzTl/KKmKeeO7wSpF1emwqPSMEQ8AJv3FNtoEDGjpQqLEA/zSW0ItzSe - ZOlOACvqE13pDXRlaDaoMKOlCnM9jIQnrxaytt5Q8hbsE5l4SUB3JHcehWGIAmdYfUUfNNhqo6Va - A/ru2DT44p00jCm017wEgCw6a4YNkO0GyC0VW3iXooc4O1/KHuIM2vchi67RwFQMrYHtjJaqbUt9 - DyBfTi9eSZAvabwGB+HCWwnqHGAL6tw0wDts8opb6reAomt0NZU9o7EfZu6N70hgddE5sC3wiBqE - 3Wip2z5mn/CV31y/l1/5DbQ/iEAllWoPe4pmN3FXW9V2539C5XZ+8V5Wb3cQB38S4Qr07SlD8MA0 - o8GMGC1125pNBY2vZJkeh8E6jF0yWv+ReYmH7rc4BJHMYLPBojS+ekvd9nG9Q1K/Gb+Taf2Gxg5c - EimtCc63rkBIrwyaPAazpTq7pQHS+nR6JdP6FNqzhCxwGiR5BLwFCr0H3n9D8GO2VGtB4GL8c3U1 - kSOgKycIQaltaZDIiNc0wYFQejYEX1qD82+21Gh3HiP++asa9TGT5oZhLMx15Vc0yaJbSg8ccV1r - UG1mS9XmuDuKWnU0eTeV1eoIrgQiYFskPTiKim40vXtLzZbehxkLAWayq2pc1zSq1rFlyBY4T4Mm - yC0VG3XRkk8nsiGfBi51PgLOT7GoognzYuDZM0Dl2E2s11LLBfjyV/KrX2VNYC3p7ft9CPqNJsAt - 9dw2cJHel1cTmdzbMHCdHe46KsIWXtlGLdMEuFJ0QbeaL5m8nr57eb0gp7M3SzIeLc7I5eiKvLpa - CN2L5spWTPBSek1uotlSj0VpiBNJ8+VMnkiaUz9Mi4Q0n1MXBiHGekMUqP0BWC3VGX7gBf2k2Vgm - 7ATaF96tKE2iJjH7DQJstdRhfpSwJWfzhfzSF/CWcxon4WNQhw0Ww2qpuJLAYZH01agWSUP7nviK - QEF8jQafxGqprZIgvGdwZ29rcMN7cEru6CNgh6Lv281nKbtsdvT4kXx4fZWr4/sskQuqMsHvOTQl - sOVyLXHBGTzZz3MqWl5zsFMHtZx189LbmK/nK7PMEa/VMIvHNhuTl30QXt28McUsWy2lfeR75ZBW - qkngMD2EI3gtg4D8J8S5DYtXIyo5KmpMxK2KVzT4BErKYVsUp2GkAnViCHu6htHV9K4+HA57ht7v - riEW9ah6DwEa5jh8xwsS9X6zUyFYU73gI01S/BySmtDATVRHdR3P36l0Cz8qRBxYMIBZekZ7dRvC - /Qckxe+FpL8c/GsFcdfdAf8gQRCGEdadkCCMcSPmmB3ehJjDPhDZ6XjMhkTeYsw4zYdE3m52ZBTf - Ad8WQyILHBIZkQkOiUxxSBjl5EPKPwuCtbEsLYiIynF2kuOmyOc9hm2d3FN61wbbNL1hiM4zr0kX - s1VZTAFjgauyRQU7j/qumkTeHbRuM9dlKAZcO6Dwkl+DMHJuYVC/6E/G3zuEBH4ZQiKXCAnLcn74 - +4PR/xkQyeDVMDJdvmRG5fP4MBg+WrEfIISV4fPvZgCjxFmEOl1Ny9ladb1xgoD6oDdi6myRi7wg - Dh1gs413u2GLXhFF9yqINeCy+2TELApAwEUMEDkrAPHCpREDtI8bwmrmkz/Dj9keP58cUJWcZZBN - +boTiLx7mmV3N+E9yJarirKZCAKpRjTGNeBwinvzPZ1jzsJ7kByXCJJXsAsWjXGZI3MOFb9ag1B/ - reHpPb6SKJ+vKd854hnR1kLOVoig+zCu0ISchWynwtOJuoMxPae0nSBqfnC20c+At7hCE7IZzjdh - ZV1CZjcEZ2LeAfCvEj3ri3DUWvQAQ4mXYGWBSlW4fYtfKVL54/jBGtBYqyzccTHk3GY8XQ7nJVQy - Vcc51FzGyBihkhOAymWSc5vx1UKpE/Ca000bzEk2kzGTAZbS6BqWrQ8HmiYZS8cFFGU3a5UvO8BC - RRabqGmIjAY21ElzeQW2UJMNw+ZdgMh4Iv5EAzmCYZDrl2My5/sNlCHSMkTOOwTD6aS5VMI4yIKN - g5zDOL7aKrZG6Jew4hrEOQNOUIvbwkD1wBTQmDLhZiy4cVDSk3u2lujJaMwhotOQQySvwCYARIV9 - t4vx35kDSpCD/Ct48BHDYNo9o9/18mpdrsn8MLxD3XaL39NUVzQF3GzBbIRbbx2zKpc1jbF6KN09 - GVdinXBCLjhkCMMBMjkByGQEkMmMQybXFeTnMhJfgMIWRgJt6U2GSs6nDkOiw6onntMwoOV8iTDI - BYdRVmg8qv9ZJVgZW/2f7UZSxpFCxeAlIDkPmZwiZiuWDzQsLMBlA3lQ13zfTRgixgoy5ZvQgGqH - Jvx23ipMaxtd8bry/gMElsUigxS3oQRs88UIeVk6tvKDlTrI1x7UYscH//A2BinJf3HLkgTXK8Cp - E9VvZndWtxmE3YM3w7mKRZ9sVYM4Upd3n/8Wz+Fp1T0EpZYUdgKlH6uvtjCwjkFgkVT3HrJUFuF3 - DB2sf1vQYlXNxhKDWVaZWETPVr1ktKq9ruDgvkKcnSqeq08qVHtDIB/slWF+cbf5RhB884Ln6bJc - ACL0yEs763MXW8ZBQJi81PzZSALHWJP4bSnCSlLXrI6VH5HrZ8OhsDmTFzxXp817FtXIs0+kv1ac - xkVe9pvSjn2eFDMJ+Ptc+MWPv275XCM/eq6OnYiltEdz8Mp4hDVxUud/JV0X9BZ555vSJ4q9j856 - p0ah760xBTDnDWTOGp4LsWADwZsIb9SMFYss8RTnS68T+lwgWDk8myB0PPCxccYdWvj8HGv5jBQ2 - kZSZvmem6CJb4TfVVhS/ZYYf4kXf0Ke8qg7pHElkfgQHB6zGwndSnAjIIhcPFFzI4jBHCbrehVlM - cAu0h85RNzr+LwAAAP//zF1tb9w2Ev4rwuKAfvHSen9ZFAaM2G5zl9q52pcW7QWLfZHjvdjZxb44 - MYr8oPsb/WWdZ0iRHFlrr51cr0UqSyvx4ZCcGZGSnhkdelMokKEG4cN+nm/cTF0kTrpTrXvBaDKp - aY4BCsEKk9J/XZyQE7IBPP357+hjPTa56XTKOLxBnIJPpRagd/jfR5sAbOYLaeStHVLpISQczqb2 - ++giSZE9JsrwQfT28giCqPNOm3Kjj/gpi7M0ieKHyy7r6WxJcwpbdnsa3lUzbvtrWjy+79/hLSV/ - VN2ADIssHxV5Hod1XEdlOA2LSVyV0WUVjbLLUVQ/LAv3w2jaaI4V6YSnj5xo132drp+F65nl/W/U - 9WNp6n9af6w6P1Hn8k3N5gBtkbgyMKW5zFQ2IpUe0Qx8YqbbN7MPpENhszCwoRe3rwuaFcDNVK8g - eC3Rpe9V2BFnFDP4J8z655eXiAXb9ZudjnunRPBQLbr/0z1pUgR7FJ/zH/Myia1Qd9x+27skfg8Y - DqCheyaNdfZXVyTPe/ZA/viRNt7MLMmgOTLYbgjuraCeOBqPLgPdcLE3vCFT2Ihl3FdZsj1x8O5V - xe3kb2WC6UaTkPkN2mSzXM2XdOPjZxzW4qyL9pgYfvjT7ltF06fiPR3eEy5wlqYG3Jn0V/QnHTdd - Oq7XH2sOTOlBaxdtuch0uUbHOqzrOcQlXTmez9+7pzmNF6MOe8LjK6tM8r7m3XrtrciypVbzCc10 - jffoN5LIuLkn/NAioJE4ac5rHmkXMamLDmrEuqI+/Uj/m7Hrg/6zXvU1jXSXKBw+X3QboylGjptJ - 2M9UhhRJCukWolD/O4+DHD8E+pogVVUVBQkInUGlorgMSoU0LpUqi/K2n6uqLK4Qazp9E8VX/LdS - RVUgmr3Kwhz0JySfUWVFKAXVxLuRCpHvIIhVnJQKiXfs3m2s0vyqH6k4n2CbJgg0r3KUjniHSmd5 - rOsrCnBSUwTYJ1xIkiS3kKp8EZXMRo0jFhuNzrkx3PzdWFaj+9q41lQBp4jDRhM//ZlqaMTYpoWG - 0PAXUEKOqaiQnyNUcRZNCoUESqDHqbzISIHiLGkO9B8aboUUNPQnybK+Qkw1lSWHGE6oH7YcxyQO - MlXFI2hNwBsdXY1KFSpPc9LdKCrNFgUihdznpGgFXR5Tm/XWlMpDQqu4VFiYLceUgtYkUN5UC5qZ - LZcja0DSIxWXukxutro+qimDNR2mKkSWCN6iHCkrmVARJbcqzOIRymSB3qIkeIR8eczbKjNbQx4s - s0QZGUuz1aVK5Gyj09RXMRLS8ZbrC8ga0rAYQXTQsfUflMoxOIR5LxZMl/a/m62vNuP7Xnha3/6Z - 2q/FkMr/hhQ6wLzku9n6+81YJwP+/+v/NieMyIAvGlfLThdpQ8gzkb4X7HiRLZAGkzSNlLukK5CZ - ryKnmqqMtIE0tiTDiMG2x05awlHSiBdkMmHZp5IljCchhSnChDS8KFnLyQMj3UsE7yj2SZVTxM5A - OhAVMUsVSYzcrqqAm5OIVIagSrsDhx6yUpJvRjpGFSIrm9sn56yPqUm0AMKPJTllVZHm0VlqDuGk - hUL6PJwiN4+qk6SEwaKdGW5VWZaxQM0+iFqcCJMQqCloSVWyNEiLSx1D8iJ/Fxen2wQw4wL1AVcb - cUC634epUg9lXDQ/pG5Guk3eMuEXI1Sm6YSMSyHzMfoU7DQMEUYEiWqobqRqUpznk9xFAbE0brOv - kLuSmlVUKkZcJhKZBjeAKGSRqSq4fjQgqzKzz80gKci805JvcBVpR16h9UjTRX2QUtuzSiVhRQ60 - VNCNAiBlhhbqblQcjFKlUdXsFuyI6T4L/VJZiXpIjeLDCF8JIt0h/zG+Vmvmi7jRVdK7LI5ZZYPd - b6d6kuk/DCg7F0dwCOa5k5sdRr2D3/+r4zboL5Ka9N8Kn5sEzNVfgcNcL2/rqX5A8JxZ7WJMc1KW - xV8PiMAwWBkd/FiTS1rPbuqA45msgsVyjhAH02B8Z9+s3fOhs/rTBKwCNZt/2cy186HRwcvjnwNm - LaC/VXC2vsJ8XEc3xJMk2r8LxnUwNWGFxnfIlUbr3A1aMKdrqU7l9Rtc8GSyGEkJ/J6x0rRXHsYz - TmcrWkTeDdiDHhzNqVlrvB5b0vr6LljwV5uj62D2AcsRXscosSbZ126/OdRPYliu4fD0+OeL4dHh - xeFw2EQgoDX8teHw7v+HoHsHv/VoZBar3oB26LbwujlAjfiLcr1Br15f9vYM0ZwO8eKMjtezyXtq - zKCHd9h0zE9l+OjBEFB0JQ301ejDO1zdhHWiX3XsG4jSG3C0pL3eYkqX8D6dn9A+RzLC/sIcFDiA - UOQvqowO5tivyC3T/hXtRzTdyEM6uDZQOHGLE3vkBfbCBIU2dNwVgQinJu1zUUQn0X4Ih1/6mHxA - wjV1XpSncR7nYRhipkQyZDEqq0BUgRR82MhRf5JdcEMAPRNwkM72BriR0g56BEGIsDvVjQ0jXAHh - ECaI9xfeQdOiroAuOI+KXJyY3mca3vUI3U82Rrp2TdfglfmM/EVvwOEoeNjqhY4oSKNE9/paByFp - zsPklq1fPxMyrAslJvPNB/o9TahX+RnmtNW16ML5Igp7gyxXOfrQ/pfu6fQng19/Iwmpmz19/BtC - BjgFbMULQEv4pTid4pABUGUOXMBKYKIGUA9o4NgHRiwAB8yBACRcmgk4Ew7AgiU+GEj+Duy7ZSfD - 34dnkr8Pb3n+toLUr+CXHxz8VvK+XwHz91vdoSn8toLMrwDEfFeFY+VLzCwVmIabbxFzHxGMe4d4 - n24vkeNEIBvSvUUuxNAdnXm9LXn0EjWK5Bg2bHqLWwrcny5+9HDNetIDZI68D2hp8hawkoCvzgTg - 9Wwu8dpaoPnvFi0KRY9+f/ba61FNaZd4oWywIbY7PGFb5/90aMxW97GYsO5jGc66wxLm5CmPZKJL - zFTKZ/joDlNYFVjmvk6CYi7h4qKl44Zo7gCFFYE+7qskuOMPAhoGuYMTNgNeuINzpHAJGUnNttRw - ByrMBoRvry+Z7e0DMuFbKrXhfDtAYS3nx16THZHbx2Qut9BrTed2iMJOQNIW4yIZ2hK5zFsWY3ja - DluYDNjXDruTet3Cb0neELCd1xc29PrIRzesaonY0nvLrXaIwoqOXp47yC18aVlBS8kMa9rBC8MC - F9rhOyJ0C7J1s9J0aAcp7AokZwfpGM4tyNb9Q/OcHaSwLLCXHaRPXW6BSvvXBGaHKczr9Ni7fzhS - sgSMWg5ZU5MdorAtEI4dJLONW2htWzWcY4cnTesfr37xjItpxC1A2YmWTOwAhWW9OPXUs4Mg3AJv - dWZDE3bgwrRA/vVab5i/EjKUN3jL/3XTHmFNYPU6SEHpfRDXEnsdrrAp0HUdruTqtoBD6bAbxq4D - FtYEHq4HXLdIuD522Ha0lorrsIVZMb/WgTO5tgWYt3rXUGwdoDAqEGcdXsOalZD5PUjNnXWQwqaO - jzzvuoUPKytoTfkMK9bBCwM79eT1qK4SMW2LbAivDlMYGWisDtVxWFugUkzNZHWIvpV92B85vK0c - Vgnf8luWyepqkHexizNv1dJBTpXorVkbU1QtciosDsRTT3rDOm3BSZtICqexqTAzMEodmKOTPghX - Of+SCtsCVdShOZ7og2jMFnWAiQQ8+8kHNATQh6Wj2/RbWpjiWxxeUXJMTTrx9WmBVO1mCUH/IsRJ - PLbRnsLSPNEz881ygl8bggZ3dtMr3WS/bxqeX2cTd/hAfne2ohXasSV9ofXn7ULkHWl420TfmVGy - M6/Q63fLsmq1wRA9RDs6WHPfPEiY62zR12UC2qYk3U3Zyr8QLWNO2783YRjnO5LanqtnT2XrPda+ - DnV7Dtvsi3XvecQ627r0SYr4lfhgj7vD/yEnznMjlujzqPN7MoPri8f16Sy1xxq2ZUyfTbh6ipP5 - UlbZY23bzdtsI0o916fsQu56TPLGj2AmMhyeDs/PX+sH/nTML+kHmvDxq57svLXByHt4V1Iv7/BM - 3U6E+CUMlRxvZtfTl/ySYHZXxMlNdPH3k/N3s8PNmzcnh3hLMVud0F1pTP1mn9y/W60WzcsG/Rbp - 1Rwplmly9Pbzt+YT34Nv903AjKv1zfXBHwAAAP//AwALlka3Y6wAAA== + H4sIAAAAAAAAA9xbbY/bRpL+K306LJAFtkf93k3DY1w2m1xyl9kNNoEPd18MiqJeYkrUkhzNjHE/ + /p6nKc1IYzsZT3IfvICHFMnu6uqqp56qbtIv/+Uvf/vqp//+4WuxGjbNq5c8iqbcLi8n9XaC67qc + v3q5qYdSbMtNfTnZr+ubXdsNE1G126HeDpeTm/V8WF3O6/26qmW+mEwPfapV2f1Yo831sJCJt4f1 + 0NSvvvz7f/6X+Pqnb8S3bTNfb5e9kAL3xF/r20H8e72tu3JYt1vxHYbotvWQ2/6v+HFoq7fiy23Z + 3PXr/uV0FHaq3rzuq269Y+cTDb8UTbtdimbdD6JdiNVx0EXbiazKF782+B/FzXpYiTlGWje9KGft + 9SDqslqJPutUbudiPfRiV3cVhiyXtbip18vVgHHEeiuGVU0xFzRBs96+FV3dXE6qcttu11XZTMSq + qxeXk9Uw7PoX02kWWh7meVG1m2k9LKZl9/ZmelR+em/kXddi2OHuctIuX2STnE7997D0h4f6HGz9 + vtbXXXOi7W83+HoDBZ4kcb1ZTmd12cl9L2fXTXPx8275ESfe7U5F3tSzfj3UH27LJ28I/pMOH/He + GCIDrAtjv6jKbn7Sp7/ebMru7k1Tdsv6zTirD3fMujx0/Lc80zfHqd5+pNf/LzDPx/pskHmu9m+H + 0gO19CuQdAX11hWN8Gv0sij3bHiBw7mcsTsBid/Ub7rbLieiX7+r+8uJNbfWPFm6zM0vKOATxtDh + Voenj5Gbvz9Guds1tRza62oln2aSxz0uzpRK6hZ/jxy5BXYkU6as2uvtaY40H2y6wGO562o029bV + cK4x7jdtOT8qOn3DLtATsKymVd9Pq0rXrqrroNws1N5f4OZElNCuH+6a+hEeeKtf1fXwqQLn5VDK + rURFQInbdgyt4200wYNXL6fHB69eHhvUi7rDM7FtN+38uqn5u++q90ZeXW/f9tNd29wt1k3TS1/N + C1elYm7Lqqz84uLnngM8Ev9xSaDLXVm9lTNnTRkXvpwp6+a2oJx7rT5F4KKDy27a7q0sVVTVbLFY + 2Cp6Vflni9yU660sQhm1VaVZxEUIs/BsaTvETD99A8RKp0u9SJi0mWsbfXq2TO+dkbWKZh6100HN + lZrpZ0uLTiup4tzoCn+xWlgfn69bEVWQEGlqX/oF0FqVi/nzpSVlpIaIGFxpg1vEwj5fmg8hyKrW + Nvl67lWc6YV9vt20jlGWRtui1kbPop2Xun62NGtMkkWyi3KhKuNNZWK5eLY0E32USrs5lCxTOYNm + yT5bWkoa0qwPsYhpYcrazObx2dLGiGAN9wf/5/5uM2ubP/i/3NdyMi10AAjjDO4JqngGNyTZl03z + 9+UPP8p3xX9cNd+X+qefp29m1+tmflVu14u6H343qX2//N1lbtbzeVPflF39a6Kn4ypw1s7vXr2c + r/diPb+cvMljHNJDhyJo6Np2yB3ZpGpKZgb64aYrd4elZN0dH6zm8nD/pDVurpEJO9wtD1nqX8mU + k2ODvpPttrlDyVZd9y+27SAPdyavfny73omhFWx/zLsvp+Vj+Zt6ew3x/X4pbjfNth8rABQANzc3 + Fzf2ou2WU6OUmqLF/bDsdKgamKKQvdstCjWuhf/c3l5OlFDCOPxDgoMZ3iLVVdddBw2+apu24907 + 5r9NeTsukF84tbuFGrtyWB26SOTquip3l5MOtcN8cnr753a9fXx/XHVPUH3BGVdOhJUOOGlzOCec + 6UQOQV/ulzjCFjRt2a1L2ZQzFgbnBTWq4k0tdrkOPZQJ77moaZft0XlPtOOZpawKShQmTR7J/ICZ + ICHbaSmGrtz2qNQ3fDx069svLrSgNJnPEPfHoz2zPZz1olDGVRKZRhorY6Gk1hZ/3kvj1FdgViOS + CVoE70UobBS20MLboCvpCmlSlD5ImyxP0eq+kC4Ege5IPV+FGITRhRe6MFEknYT1CYeoK2cihxEx + Ia/4CJ843HB4aLWIGMEK/EgOGiahlQJy0F0XCl2ggfEOfYJRwsUogg4QVAgklCBSMmgb4V6LP20K + iV7CmKKQfGR14WRQYRzZ2YB21mH2EWr6GKRTEITcGazBoyC18vjhYJkABaTlbWmDl/rdFZSGProI + lU4SusMiHhrBIBgZ46IfCnoITugddYNOAXOMmFNUtnK2EDbRMhZSMF3Ijgb2xW1MohDe4bdBwQIR + Dp0xX4ORaQoTinxOQkkoCQEOAE++CZadFLwhbCU5Y/o0qwCLBkw6YFAJA3gBr2CqkJVDM44BWuBv + ZYxpDDwLU/O4l86pRsKYpgBckrQR1pSYsEa6hEaQYAEHABcWgjfRGK7zsKKSPgUo4g3wZWSCJWPS + MkF/+EzSQjCndMATpqKzvgX0ArwcbALzNRgQkg2NjzEqybl4DA7NXJAJWkQbG5lY8Wj12gC6Kx1V + Y4AML2w+QjdOMOYfibYByAWtHBlvGrJoIyuckxoAhBMhAMBwozwb1B5Q8JWCa6OVxBaUDfAMaj/M + G5MWgJ92InsckiN0hHyFthaJG8aF1pwSJoJpYsYAS3ad9EoJTEol3WgiLo3jxVg09EkS49EqKm7g + QQIZLRkushBBEXg+cXSP8sUVe7hnVNp4leBKkV2J4ypY3yD66LIgTTxMz6oKdR1NgRgwwin4bcSv + h2aBUQTFTMMzzeJVgVUIXIFHvIQBDU5AdKD9YD7gCNBlzEvaPwPPMBxx8oZWNzEAPAzmJAJM5RHL + DoakswWF4PjumE+65az8Iqg/wd7hT4hw88cH6r7ntGA0ZuCsenCasTAEEKZe8/67K6fYxDh/aOLR + BLfQxKMJ7r+78lpnCvawovGjK4IfpeRbiPxCUf+EJt4dmqji2AS3Pk1vFK4RCFAe0QW0SsAPpAcj + 2szIJoeKQeR48rRWma5N8j2OigHLC/AJLF0w+hCmNHYEmzHPQRoiyBHkCpRBl4HUMGFJDDvSfiRy + CCMQAxjFCdAkeQMxrEG4bOHpbSAGvalHADZITCN6mTK8pf8suIVBhHBQRDd4FsEA1eF6kACJgAGE + cB4no3lE0mDjxNRBlGtIcBCHTiBIMKw0JL8iT3QMJxKmYmtmDzAKMIjmwF8hCoSlDSQ3sCCmCwEC + kyDzYcVG9chMcDF6IZF46hJBjshjWBEKUisTA/jEO9iRozD7YA3kEEYapOMh0eDakFrBh8wxtnDC + wZyRySVzK1gB4WPAzDhp6EH+Vpkn6StQLxztqeLI0dQH0As5gcBkMCuysu6ZQ3GLg8MaDgyLbOdw + JxUV+iG3I6dIDAi/oBOD14EQkH9lgZiKQWXyBy6QqqEZ1CdXAMZK2Yw7R9wVMhB3Efzkc7oAyTsG + LG4w7EG/kVBTGRrQB8QQySnEkc85GHwOi9lA/8LmJGxYBnmWAEL1AOsyYVsWg8jVIAkHfxrkLIP0 + ilAFWXOGQK2iC0hBlo7zND7oVskENydSP/2rmFVoLEc0gi/AKNFTOthRZ8/7dxsLf0frKtQhwFFm + +0gDEttowsn6IvcBO4CHIAOUBFi6wFjAkEwEJEDNKoVhBgUQJ4aZFGnDsC2LFODK6ZykIwg2WnIi + nBiZSV2RSP+Yg2CNpMgxDuZAwQMkJPxGUHpOSrAE4S+BsBBeM9vApwUrDhYqI1Fo6m+ghwFVg2nR + AGpybsQpRoZxfCKDk6ATYxspNcqAlO0C8wzCEM1RmkjwsMv5CUUe4kCyMEINICPChJIxc2YxJEgo + RTw5z8oJ8yUMiU84l0mP+GeZAbYZiwvawWK+DEPYQ7icMZkqDfgd8YlsLJkwIss04CSxIrHMmuA7 + SR2OpQF9nflHJ9YMqOMwQdZZZBGEDryLYo5pFHMFQFiOQVGUwHBOLiNhjxygKFeBFVIIMyY1zcAE + JgxjK5GnGWNsjruRTFlkbmI3xyEEyUyTaLTEMV8UPJnMZZwYShPWFDnk4MfEQpLlHmr7XBVTFhxu + dMYFKwVoZRK1NyMpAeMBMNOgNig9FhZQHlPSOaYhn2WSyTHtfY5pRCCeR8vcFJRfQcDeI9Ph7zVq + AeaohBwVkPN0QLYK+nAr50O0Yv5SuRssxGfWqCwK8AsoK6AKBQAJK1uwKoT2oFU6gaFR5J/wiTkO + Eo+DFGoPL6/AuQ24I8YKk0F4G5MZh8QG+lINynhYwq60cuHQM6AKdHBBcAC+QTBxyeKQEgKjI58d + yyHB2tEAcoSlK0LDGtsVeoU6b4/1woo5KM++aFjdk73hVUmsI/dXGWW8xfRmChJfpppGMhEqu0Kr + tIeSrJgOAqFhtgbM461j/RFBp7kzazxwMEqlgmTBrDiWzDmTogX3rnL6ZBZkwADYhc3FnYe3ub7i + 8gGhnaMIg0F+oBzPdJB5y+V8lZhLNKAUR4LO7GSz2jFTuCY0bc7XzBSSOYrKMAiZhGDAxMWxySfU + C0zqrGAhkgefMzRMFcZ1H2yCAggRJUB2vmLRgYhB4QHN4Y8CTZLP8uA3Sx25Wktj3QdSwQVGwA2P + gLE8s3ThSgh3EXMqp3lcJAQxyEf5HAdwdl45wgKjyRJ1YDJHdmOEQWkiRZMTc9VP1fNKlCUYTcyF + HtdWhqk+l+60qsqjs/wMVNVwWYFhSfSClkfI84SuKk8Fo4vsSZEXGQgBLtkMGMOj4PakBNy2qcIv + 9stI46hj9kHsEWQi25IWwsIolzqAEtcQCEmWDiw1sZLA40Dkk85BeigAYYucshGdMqsHEmedB6gA + Q8hHNDiLPq7uBQHgOKoZsWOy5sgtTPYsZVFAFVxgFKRSFk/AjOWEYRqWRYAJqTbl6p9rOfAaCzlH + dCNyEMfwUrYUdwDAYJI+kVzEshb0rmdFMaLHPqAngm1CRXZ34zKG3lcso8UYK8wrNtdZnt1RNWhP + aCORcAEP2zrWB2Rid1h7OZZAXNMaQZo9FBGGazXWZ5ZeJttiAO4fjPyhTaYi3AX8aRWdE9VYZ+Cc + K2mwlqOTWcumDCoSSDECC4UJkczNBkw9l5fI36xMU/b9YVXLUhHQpS+kyw7nyl2YXC5mwLIs7A2z + CVeseKgrogxEgoPNakIcZgmkpjRuDWByzPe0F6sAjuUzUGBOnWeq6a58QhktwFaka4zola1yRsWy + B2iKwA8pz6CaQGBzpc0qPRFWOq0k0woKzBUWQHueyYqVzFHBdM/0C5ruUSZ4l4NK+yYz24EE8pFx + wRVOxSTnx4vA/ROuRyhIcn+IsjA1yzHGURsSiMmbPvZI9jzKgvsGJE7J+qhwx7NZgdp0I7nHgzh6 + t4l0o61IoSkTAh7ZwznPQbNiIFnmE5cusBGUQ84TLBgCHAI0iLycIQ1hKBtgTcyLC0ukBQQekpzP + qTHmzBhdDiEmRrZHuigKpDd/NKFRFYM/Fzk0YS4aYSUEE9DkuC2RXIMjSiaH8iyAG8azy4xj8pEm + KYiOPHFzL11xTepGnfCjUIg37h9p/oZOeQFIVuPuC2zvAokR6jugKiDkHWG0YhGV54bJRlYb1sGS + nBMTA2MW0EqkBpvZyTGtY0mTWP6CpQpu5bDWRpyzgCdfjaZonMtudUe3ptGt0F3DMkFlx6i8lYXy + gzVxXhMwJ44AI6+nVbShYboyVQ5YBCHjg3t3mMBI1Y50zqemR/TJIkOseEDYqoCNqBL9kbsfoYQJ + IjJ5ZoWHiZOLxnIPMGEpzZUGqtNCmRFfLicjm3UkSlJPX3CfhMshoMMwceSkqSpX5DTEPK9dLv+x + RhRjegITMCGxdvYy86TmZk8ucg28UbjH0HutWcNBOdUw/6bDrhoXZBDKxUGuxMAlrF24txEQz2AS + dYqbpA7+NpqLqocRkJMbCzL0lmpyDZunxR2LfPwA1tNBahYPJFjub3KBfDhz4vlA63NwpY4OqZBJ + FXci8nYEdzwd1zjEHLO8SYBq/pHXM6CEECtZjAt1FuWGjSNjROV9Oxb9+Fdwtw6a6eN03f10c5n7 + QYP6c4N67oXiiKJrRM0xgDMVCcY96qvzaDxa9eTVw/L89cP772T6uuyqFXpwf1+UFb+7uZxMx9vT + idjUw6qdX06W/Hiha/mK4L7LiaSubsphva/FoqlvxXqoN73kZzj5fdJJu3LWt831UIv1tq8HeSeV + aOrFgNN7HcUOQL7whxcdR41h5xv8DfyEY9mVd4SXuO1fgI55upH+/D3Rb3rBYz/2TunDb59+4T0T + 9+JQJxoEJyqfDRJoGTPfcLOVu6PjleIK9syBJ85bb3fXw+FTnSG//zu+mcsOkfn55PwF0+iqg+Oq + djNrZ+3toU19uyu38xqqLcqmrw93+foOzSG2vdnW8zf8ZGvscz20X7WbXVMPkNUuFpjyrm6aalVX + b89lsGl135QSJodPb/4xgVvLqubLYL7qpMByeyfa7vAZ1/i++OLiAkYum+t6/PLlBEHzrt3NAR9C + dV9P7pE9Honi48V7b87W2/xy83BvvaX35fu4+/m6H9aLu+PljVxcN43Y3QJ2uztE3azt+DJ1PI0g + ZKWbIdksRf6wqK83a8xjLjKuasTZRvSrct7e8NcDernbO1vKmxU0EKt2X3cvcJkfcbtmfNfaXg9Z + VSL6cKtbb5dQ5eRiBmPlFd9mgKIbhtRBQ0W19cmgWGUelRmD5PC2MZtoOnn1fbsU320zWfze1sqv + EnclQ+lTDDa7HoZ2m+f4G21CU0zyS/ShXMrr3bKT48txuejqGvqtH74Inu66Fub4Bg/ET3yQTXKG + t7HvGdb4Epyv68+J7/a2ebFaz+f5y+7Du+B+Pa+Pz8mCVducd+LNbbnHTRyPN/FTji3L01t0iljC + eruJyN97Xk6+bTdnr5Kf+ML4VOjz37v/ji/Y+d4PydFsMGYTuacn4hV3MfdalUi6JE4sifTKbvKO + cYOMvGHZcPKc77RQadqNDOKkk+QbyPs2uFyZhyuBBH4qP/ddvfdmH3jenhotc+/kFa2PFnj46jyU + PuKt/DFAf++vTIf95+w27pHvZSi5iqAF6ZFv/cmlMPuHpzjD9vdX0ryju18Xx1tcXj404M4kvDt6 + 86MisgT/SxLc/SXVQRl2cg0Vnujq0XWnzj4JYrbLH7Hws42Dzz+EhpEV7+Hw3Q9/ewDDetd+1lBI + Ir62G6yYcJSFSCiOr7g/vXpwAP31Ov4iWPSJc8WTnUND/oJryq5Djjn5pObxM9xo+3r+2HD8dyh3 + Rl5HRumu6w9+SHNeB2LJ/31eiX3PdcLr8D9H/zyy/gdKwONHRL/MJF//9M0DdPgd3meMHO6x6W/9 + hnXxWeiGs8h9gEoO3BPaYdTn3g9UksHFBKLP6eUDdBHOxjRXyDzA7hORRz98Sgb4a33z4LctLj5z + xxn1yC2vz7wCQ56T8YZblecd4tm9zBHnbgRlb7Bqt98WV9yMXgWc0irs3bfxdXoqRdDwn+Kon2Ax + fst676zhcOOzdpgFthNjYI+jTI1MIvHzKeTYp9Y8R8P8vqnwquze1oO44vLoIUA2+W4/XaLexv3P + 2vRBJBgdpvZ7zxOoZsOPpVb6rJ55/aiYOr18dn48s+4/V6L87dD7scLij19F35flhxtjff5Zg86I + 8Noh3o+o4YYDruWxJOOWuGOFnR4aSHY4aTBeA61KUhg8xqo8SPPULk8E6dEP/1z4/LU881Xb7dqu + HGrxZd6YfSC/caP2syY9z2WA4+kUGw8rggw/Pt7r8yXe6SU4MXFF4VZPRdJ7Nj2F1BQNz4BVtU1T + 7rixee+S8Ya4Gv8zwyMQ0olP9cn/AQAA///cXW1z27gR/iuoO9dpZ0SK7y9p6o4sK3Ymjq1ast3c + lwwlUhbHlKgjKdvKH+v3/rLuLkCKkCienfiunc7YFAkSeMDF7mKBBZb/g22Ccx5+orh83dQC3VrV + 1YvpywlUkbU+XSacEDjxRaTbmQQLQmUS4CYUNg/0pyOc8s639/LJ5j5N75MI74rNL7jdM4lpm+c0 + UFbrieK6mqHZpmW4tmm7pr19ME9wj4yuGbqHfi1L3MH5Sk4GJYvyFXBE/BiV89lQW6jDts60wwVn + D6WtMXixN3m3KhSb5Yt38OvIdxbPNEPOFhPotlfPiomeC5oxTe7xd/fxiYLMPdfLBD5HrvBd3ce/ + tnGatlbf/eV9d65LxeZzRWymBgP4y2jQu+733vHN2P/+F/s4+Ce7joJEGceLiA2zeBph8s3o9FAP + C9W05Yr/sk6LaIcoR8eeo7oWz86kW1P2CzCzoqvQD/0ZfnTrp7/sw6zJYmFGB5clgIn0Dp4efmaD + 0ZgpTNgy6SpaNjDecjuJKqapxaz0pJqn5lPGkyxYhl/zeZBhX7JOamyONoSY5D7CPb7SFLnwSXC+ + EgrjCswqFGVpQE7BDY6Oy3tc92BhUoFNxZU79veL28ZKOC4fOlBuc0VP40dg8WW4X3Io7kDJ5UOv + KrkPhCz2i8UAJQWUSbe3BXbXSamI9xofnVO4e1fsMcMpfRNljOb3QXjgd4cHITHDKAAKyu8kEO7I + vULR47UjdRkJKQqeUXENumlArU3R70CGJPkwnpMdH8Zk9Y5uGM/AJJbGtu0xNxreipsd+B6TBIzK + o8ba8d1zlediFgUFevDSrIC6FKsMa8rdJHs5J8WSZ0RvRRLl+TrmtrBwq6DDZQb9Q1gGAuDppVEU + gFJcrVelWdToOzweUFVe2fFVNeS9X5Nd1mhQUX+Hd5SM9rZHj9EyDUNhV6iGD0NZPG6n8lULp4Au + dLRIVdtzEhPvK2btKV08RccE+Mmq+Q54/gSHw1WqxpO/4evEq52q7Fp9nKSyPtrlA3gj7jCnrhRj + Y1RpldIut1x+oHQGPdY6KYCxKEuTj5j7XctikAvK89K/KntkecHogO02dd616uKAcZaAzf1cSkoR + TJKqMy97KUqbV2qL+LDcCkw3MSPf5VpkeHp8marvu0g7+B9RKdVl6S++DNC5IhJ/Yr08j5AKZSbQ + KJG47GKh3RKA76MlnPBYh/SQzqotr6XbZZqSJ7R/9fGSaybxYB/SJwGYf2dJOkGHoEj3Vc34qbrS + O7phdRzP4ClUBYFpHMYs8iQAzPHooidhjiO4UV152C9WV4apdQxP38cxD+PcT4op4JydjPsSzlkW + bPJpAK11EhdIADbO1nlR3XdVz90iOx3DMTue1fCO1mFssDnXgH199elGwr6G9A6YLVO1SrJVz6qT + VLOcjuZZ+3D2Ybj8FwAb/UOCOkEdW0NxdanhNK/jato+itPScGGKBB2fXvV3Gi4J4BY7BzuqmNcg + Hb8O6blOx/PsfUj3MOS3BQD+/FmC+zlNF+wWurmUgZgs1hjdSoxwKmTNkUiquR1HayCp1/KyTwk6 + xcd3F1fyyz7FSZxWl5bUeo7vdjyzgVX8lrZbpWgdjIZXYwloBOnxbMPG0XS+hA7hflMDtcwtqKsD + j5oNTalrh1GRO2XWvFnGxYaN0lmB+/WrZFN1a7T0PLPjOw2U1FuUTPhAM8anny7PJMTTLJgVn7jB + sEWzt2ggd77f0fQGuddbFAx2SIA37I3P5TeMh0GNP03Vqsm50bF8r+MZDfyptyiZfJ6usPXOr4Zy + 60E6tF4NzKiB6TpAWU1N1qJT8giBBjJMFLCLeAHmWrh9E9WrcYcN6gSGiA1QLfokmyTPqL5OLv65 + o77AcnuuIbk1JL1jmvDvug1YLVolXyUPxP8Xn3b4P1kvH2pYtld/K6Nj+g2CprcokxVa9sNTCWUY + 3EfZ6brY1IB0SVPaDryU3cQWrdqjyEh7jK93tQeG4doWr/qSpjItv2MaTgNYiwaZpym+2fnV1elu + a8VLvCnGi3kdttaNg0j7WsdvEjOjRYXAuBtQLwey2uon6TqcJXUVoqtOjU1M0+tYXgPvGy0qZBEl + MYB9Hlx8lNA+R9kU+p6LeCLhWVoNT+tYVgNPGi0a5D5aItzZ4FKGO4P0dc5GOAaoU1Ovs2bHMlyA + bGhEo0WRPE43SM7b/heZnrdRFsCt6AAadG4mtJ/Z9IItuiSMcfx8+nEkc+c8YnfQh7PTOF9GGyas + 0Dp0nVt9C6S9oS8wWjTLchlil355eSp36pfBMgVYGK7l0JXXEes9HfQ9SN4GbWa0aJiHmMb0nz5e + yvKBs0lhmma1cWsFq9VobHUMA8wXvalFW9RN+lCgnXv1aSzbuVeQvmMDyng6KDe/yQI0WjTO4/ob + suztzc8yy95C+lZja6ovvZgJ9PS1Jnq26JvFMtygMF6efpGgFukyDDYY2O4Anm6bYKn4+2hmi5oJ + wk2EcL3TLwMZrwd3lnUoSZXqoNNMtwmsRc9EIartwamstQfLMAoegVHO0G2xzy6a6tQUjuWBEeg1 + CKTZonGKp3RNHcaVbJUZNzusAsN6abhg6HbHsxtY02xRNkvEupSRLtdNL2ZLHbxjGx3dbeh2zRZd + M82eUPz613ey+PWz9CkcFVn8EDUi13phGIFZegOXmltNs+xux46n14MvH25G7Ozqdsz6vdE5+9y7 + ZB8vR7XitdrYBF7KtDu26TUgtOiVVZHi4Hk4vpIHz8MoSYtydppPFNaBa+8FVqDTBNqiVaaky/o7 + qqyfLqdpFrLe9Jd1nMdFXYcCZI079aZBn9miWMBuQPEbjEey9A0gfY83NanjbUJq0SurhIym4cWO + 0TQMkmBZxNl2KBRH+QFQuwHTatEu+TLFGerR5dWdbH1COlgxD9EBHL9uLHXFfEuX5nmOG3wGRbkw + PV8ESSKvUQfVlmOw2Pd/UBSmKPVpf9mLWnchQYku41O0G8UTc8LaYVdSPlG+35fk2TAusnzLMl/j + S6q9v1js3rSlwNA0tip3uuToVJyb1YTx3Dzicbz5yqW5WfdS7BDxfRLXXDQmg9Pi3QJf+9hgT1H0 + kLPgPi2JzBRW8UIZnxWncKNiRouceHxWMJOy9QoFWCmqYbgynaPzLulO+Ix7GN/HRZAAuR6jrADp + W94DgYp1FmGI1iRUKJYy3CdnCCsw+DEQ9esEuPrhiIdOXaboywHSLNMMg+NldDpLkyR9qiZFJ+iL + OSFQMJUIlPW2oOwDgYLVBqBsSKDk50LGxvcVr46+MlrAlJeejTeg2/06W9OOBKIbLerTHdPXXROd + IEqcK1DFByQN8E1CxFDi5WOUFwrGpn3EidofpEwve2AxGOccByp6B0AMUz8SELvmQH/foccZVP0D + Vv3XyGG+nByvYaPHFPeUJXGxQTJhwMFAmYDsPYGUKBgMGq4xqjTkzRZKATayMk+z+Bt2Pj9Ks9sK + m33M2WVasICdBCG7w87kDgNRB+wCsceAzchHes6xv5upfiMqBtNplOckZMoszZRiHpVSmM7oKhbO + 4h+nWo+wuA8ZI3tjzG0hfKDH8ap0TH83lXQG1jSS/9epNImW34DhAyJSka4U6Noy6CG7htHV9K7u + +75t6G53GhTzOAK2SkP0ayUBaGnlab6pySIMv9C9B/UDnguDONko0QJ+QMfluKoI5Zc6TmUBkpT/ + MCH7VCXgtjRkA1Eldjff1KQWq8RGWCXWY6dYJTbAKuEYVVRJBGzHlX35DsFPBG3ekNzAlETpPBJr + k9BFCU0PJFuGCmm+TRyB2s9XYNnmymIdhkRjIHYAXJH/fZmugnuo1d/0HybgF0RiI0JinxEJufJP + f3w23L8CJQlvnwdphPaWBHmxlObwZLBANoqXWQoGijKH7iyhfpREF6wjoOWPi+ioBAI2IiB2XgJx + ue0R0HfLp8Hp8yI19i0AS5PzDDKq6B09y9YspztPn0C6wCSrSWde7x5XUYa7PeESA1L9OMucp08g + OyGryV7JL7jERvSVQ46KXxRA1N0+82d8pbqEXkd8d+5b0u0FkjZBCkFHuaVTTB3ldK5A7lzZQKXe + Ut5OkDZ/Charv2IXuaUTMhqOTnAhUs6uZgyn0r4A+HcJ3yuJ9GLpAxLlcY4rShS0TRcL/IaEwrML + W3WyTjdcEjm/GT8uisMKlQ2UvkAVYiaM1RNA5WLJ+c34FbmktTP/R3t2mxZNfQa6inFPUA4By+V5 + DYsNcW2eGCM2PzdLUyRCuSQlwU97TFJQ8eVGbI9GUfVRa7l+D1cGK+4zkc5mqwLjEeGKv2fFEUv5 + aASKN3jCRPHkop6Td/cZKB3xixt7c1wPCJfBavdhenL7mMHoGXwYrhVcbqkYOzUNefHit8yHl9vi + YWRpSWNHaDy5fdcr/KoKLnsAXpjSaAUGuUC07VDTQiKNonJJ7dyqj0hpeVY5KLd2181RIbSoYlsc + bqjn2+EpjRZe7W+NJftG8MHeWrRXFys2WfL9gm9TJN98x/eBlSXy9W1NMyHUMGK64s2aBB7EhVm/ + bYvQurwpLebjZ+zmzWhYi0oQL9+q0Oad/TvNs99Iv6849Us302/advQlJfQj4O9b0Re/U7UIaAUA + P3urgoMVeeh6QxiWc3vjNCiC/5Z0XUT3yDu/afussvgxmG6UVZrEU5xxHvIENqSEtyIsTqLkOCWw + pvUUOK9Bs683efRWEDRFSiPmIAZjBx2tkMIHrJTSIoVNTUpd3xu36Gg9wU9vTCL8ngXOWKA5nUR8 + cQK280pq5gM0OCKXcQLDTDCF16sQTzq45SKggRYUvUnXGcNAIc/q++5KhF+SGGjxjgw3XN1MdsYi + 3EZjgp4KI/1MpxHYFriOOkc79Gb8AZRQFcSpbg0HT9Ekyviogb4sgv7DEGydUF0lR/K6URGmRKwc + xe9mfYXcX7GGX+OwWjfqmhZGENdtXCh6OD9G/+GfyBP5gidMsg3bMnWjPW8WhXGGH+cq8x7+Ylhe + tlu3AKP+Qdmg25AWm5aFfHVtJ3Adx9AiI9I9LdTcqeF7+szXA3sW6FF7XYgOQVhyT1WlD2Q+0ge/ + tqt2+eQQtyz31+7yeRqgPwzZ8salu5S/RBYX+C5yuXJEJvGYABM2PQzAgHU0FgD7B2DHT4X1XVrs + i13fQ93YrwIT0aCAhgdN/I4xjGpLiHmiXUUvEgXzknjS3tPW62Id1cuihHQ2w3BiRkNaZcLLy5wH + NPIhKeSE6+5qF7NOJL7HQKPfhO85yOcA8yB8S9umA0ZcxNW66/JKFEsSLZpmus7yNAO1TvOvrQO0 + l7ZWbfMKn9FpajjSiwsQirUIRMWpSUWRg5SFa76NiHxQVVCq3Z0xr2mwA3lf3nZC2CrtXFucXg/5 + 1dxLlMSS/GsYBGuFd8EqoGaBX6kN4LpshklUPEUUualWNNfO1M3jeA8e56XjEKxpQmIGT07S9GE7 + 4VUqMHjbV8wmVMwk9Vz1XrfqhardInk6BSNXKA6lrIkcK+4DTVEwaP8P5X2+kbFhC0bj5kRRLcHQ + Cu6EKHLOF3Og8xP1TS/YZluPm3dok4eBIc6nmmKrNkbIVzHarq7xv5HBHExg/Blmqb6vM1N1bJf5 + qm54zFMxireveq73qDiq77lzDDVo3erGnH591fVdDGaq2pqDO0Iw9rjq+VCKC0h0qqsahrtlhmqY + nopx16uzR0O1nLmiq4YzxaNlYpxR1cHcOp1AbtsxOJ7rmomiWhhfFcrFmpjmI9bK6+ueisE6DZ2q + jS/t0MvQ679s40mwz43im6dbRqx9QPZ3ZENRjUNcKJaE/g8wIUUwUjE8s6Yatj51VYyfjzuGVMe1 + gYEM2ywv+A80t4oRyOHHtG1FxXgnqm32sDmR/fBI+5cNZqu+ESDXMDrwyCeQy1UdywHe1XVPHDGD + rnqaBffxs1eqAe/MjyKXo0FpPuXSXHGk6BDINSYyr8Uraosj5QNpwJj3quHxPI44cjxAslGaepaq + YZBgOlLIFhVFyNXNR1WzjQDz2IwfMSduraLHDTr6tjiK/VSebaqijp448lwefrIDbgOtDPweCR0J + j4E0WJobYNUxLDb/wVwONg6UubcHvIn77+Nivp7sa+Ewevw9uZ9XQ2b+W2BohibJWVycryf8W3D/ + ff4/pIQxak+/VLWkdDFqNGgm4HeXFC9+LAYaEzgNmNuDJ/DDLD4oVUu1gRuAYz0QDEN3+YnloaKE + FndBZDRPgZweCo8JDONqJnC46xGXgwbGaN86akfpHFjZwq3DGA1a1WnjHsaw356qPpbrQBUhDxTl + VSeo0DViStDN+DUeVcOPcmzPQTnza3glGPtgogdKWfWB8+AuvA6UY7kqfj0Fb4GaR2jT9FBg8T1t + 7Kps26YKmf8BAAD//8Sdb0/jOBDGv0oVnbRvICRtkjbVCgkt3GlPu8AtSHu6PVRBW6B7haL+WS2H + +ED3Ne6T3Txjx+PxpqUUpHsDTpM8Hk88juPkZ9s03Z5yXgeJFKgoKEnZYWuwKho5huzF8g18Ot0m + oNlsIz/omiBuUN3fRqiSh3I+tdgjN2O1Jf7LDCSuUCfL+hRcMRa+g0/zGEseNPmKYJ5yyhsz9ce8 + zBM1F22YZXSrdIyli6hY7TJuYj4GMpkubgOmUERmcZvzRwHyMrdpLgZZQeGddfgGV1LtKEqUHqs0 + kA8yKntexq2kpAa0E6NutCHSyVFC48aYJ4qKs7Sskm1uiOk+i/oV5x3kQ9WouZfig0KsdsP/bFtr + aua7ZlVXqd7lzSZX2cb6t1PTyfTHATq1z0VoEFyvMJXRp3//Mei6eTtfrf4Y481rgz9imgHrHE6/ + DQdmbGCTXu3dBfVJ2Rbbna2GRYLxDmb88e1Mg2n9GRa4B+JNTxr37hXbD23oaPi9D54hHk1e1nOt + HS/axeQDzEvA33HjaH6N/rhh+zGIROn7xsWwMRiOz+/ZVCyVQc+6C5RgQsdSnrEePzLNrn5QsOu2 + miVVDw9+P+3t753u9XoVB41lyC1Et/N1NqEHgIcIH63Nou4DL696XG2Mbi8n+I/zom40nF9GW5aA + pU28uaLt+aj/F3mhG+GNHm3zsAhvrZzAgY4kd1+f317h6GqqBvrVzK8AU6Iuz6qwFd0N6BBO0/4+ + pXk6BaTvzEbKOwZkxXZKCVjXaZvDJ+bUsqD0tf29pDQfk5kzvyGdtLfKTk5bC9paMhkD9vaD3WnR + ZVvmMBK/bFOzljTxCzkxpf4OVuxLEursFmRC3qTDUmqqS5w05s02dStSdoh2xQ0JRKhw2Bd1+YNL + SlGhb+lZG6mBS/YlJfsXLjWrUuPLyqiilVCwJI90SefncDnV7unN+Zgyw7v9EUWq5Pkdg3I8WQ9d + GbrLDs30B9V+VPZp8OsjKaNe4wyzej3df8mBPHA40F6EtyZ3aRJ1i4RufFtmeu3ulweyiez1at1P + oJelmgXoMmxnapp2Mb2MCsvcNLxeAczR45YRbvrCQJRFmPlkX44RZV/OUspOrOWLgUMWsV+mtRCy + L88csi/vUGSXQeZnANhYMhDS2Ndk2Fh7wPLGTjP3NU9+E0UGirVYOw3dabBiJ1Yod+4feR7Q1LDW + LcpA17LDTrft6/7xUVSXwsE6g6QIvWAQYZdBRxn++cORZzgTwL5eFnrVcsBOrVQ+PT46FbUfMV+t + nLWUsoV9nXKa+NLe9dc4r6/JRK+vaaFe0VTRBWxXZIXZDSRzJenIXRFVkQU217OVwVwtmOm67/Bc + EVTRBQDXc6qhb7ViUytaBlf0VDCdHHhqAtn6iszZ+ooWtRVFFUqAaUXTkLRarq3lHE8rgiqcQMz6 + 9Qi4rBbMO4F9DM2KnIqi430Rc1Ss1kvDcLdsrCgGYXP6SYUNj3N4iky/BkU2AKwoqtAB4qp8qPnW + QFu39Y5ylbZexc7hgReVQrFqzUJfIsuyiqKKHNCqIumjqlo0S7QoA6uiqQIHSKpoKh5Vi6bBta+o + VNFV8QPuVHQr6HSlpENPRVKF0P77E+/q16OlQQZBbTCAqcireAJCKvqaHw1kgya0okhFWMUVOFFP + eBhAolo70T5xqKhoqyADDCraQoKuFLU8qEiqKAPx6V054J6+GhOY2kQLfYqeijFgnaInTOdKUUt2 + Ss9HhRajm6LJ3GYgF7YDlt4UQRVZB/tew7KEztQZFDrGLKMp8rrf9/nIu5NWCKYWzMN+lAUxRVLF + 16En6JGWgWZ4A7C8pWiqAANRKap1OGUgr5tvA1WKth9dtzvnorwUp9Tyie60OahSclBhBmxS8qhh + JgN1bTyTk6KsguydH781ZGQgrGtG6vVeWyrQQEB6tc7hjyvlWr6cijNgjl756xjHlcq5CGcq2sAy + irADGVeKlXRXPKOnM3wFwg9ZZtJF6vQ/Hzcj3cUUlmz6mfJGXB2GHUy4Cl+EEk4W0z5fL/cJMbut + Kt/a0FhtqV6BenvKbkenKbM357ZefHVegqu5wraed5HW5q1eXLrnYGQblub1oafaUv+PWJhzjEcR + +Y6pqCzllnqU6U1FMS27sk8RIuuzWE9ZbdgNZfOalNGLa+Xa2NQaZairkjVM0JuVOFBtiV6Xc/Ia + RqFh/LIsZZBU0ZjY+XORJM1iTWRn05r2XBbpyQLWVLhNWJoX177NsKF1iufqIvoevd5h7+TkOOri + VS1t81vhroELvpjuzZmb/TfCa4Hh9B5Dya7rw70POvNiMRoP3vMrgu0Zhcanq+OT7b/LXz+OP5yn + p1/p3NHsZ/r9gmqQG7C+ms3uTN5kI78w+TDBonfUHTp7fGs/J919u2Onerie34x3/wMAAP//AwCA + PdXk25wAAA== headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 6e6359a2081a887f-LHR + Cache-Control: + - public, max-age=0, s-max-age=3600 Connection: - keep-alive Content-Encoding: - gzip Content-Type: - text/html; charset=utf-8 + Date: + - Thu, 03 Mar 2022 15:19:23 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Server: + - cloudflare Transfer-Encoding: - chunked + X-Content-Type-Options: + - nosniff age: - - '0' - cache-control: - - public, max-age=0, must-revalidate - date: - - Thu, 20 Jan 2022 16:06:30 GMT - etag: - - W/"ac63-455tmHsaZ+w5ZVk06wUCaTSKZkQ" - server: - - Vercel + - '104' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 strict-transport-security: - - max-age=63072000 + - max-age=31536000; includeSubDomains; preload x-frame-options: - sameorigin x-matched-path: @@ -339,9 +323,9 @@ interactions: x-powered-by: - Next.js x-vercel-cache: - - MISS + - HIT x-vercel-id: - - lhr1::iad1::w8p76-1642694790571-6233d034be3b + - lhr1::iad1::kxwrh-1646320763244-100b3e0b61ab status: code: 200 message: OK diff --git a/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_load.yaml b/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_load.yaml index 3356c920bec..967af1b4253 100644 --- a/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_load.yaml +++ b/tests/gamestonk_terminal/etf/cassettes/test_etf_controller/test_call_load.yaml @@ -8,17 +8,14 @@ interactions: - gzip, deflate Connection: - keep-alive - User-Agent: - - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, - like Gecko) Chrome/39.0.2171.95 Safari/537.36 method: GET - uri: https://query2.finance.yahoo.com/v8/finance/chart/ARKW?period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2&interval=1d&includePrePost=False&events=div%2Csplits + uri: https://query2.finance.yahoo.com/v8/finance/chart/ARKW?events=div%2Csplits&includePrePost=False&interval=1d&period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2 response: body: - string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"ARKW","exchangeName":"PCX","instrumentType":"ETF","firstTradeDate":1412083800,"regularMarketTime":1642694754,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":103.255,"chartPreviousClose":120.66,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1642689000,"start":1642669200,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1642712400,"start":1642689000,"gmtoffset":-18000},"post":{"timezone":"EST","end":1642726800,"start":1642712400,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639578600,1639665000,1639751400],"indicators":{"quote":[{"open":[119.62999725341797,123.26000213623047,116.5],"close":[121.55999755859375,117.88999938964844,121.55000305175781],"high":[122.19999694824219,123.47000122070312,122.33999633789062],"volume":[1503000,1292600,1459500],"low":[115.37000274658203,116.48999786376953,114.55000305175781]}],"adjclose":[{"adjclose":[118.27759552001953,114.70669555664062,118.26786804199219]}]}}],"error":null}}' + string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"ARKW","exchangeName":"PCX","instrumentType":"ETF","firstTradeDate":1412083800,"regularMarketTime":1646320709,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":83.82,"chartPreviousClose":120.66,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1646298000,"end":1646317800,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1646317800,"end":1646341200,"gmtoffset":-18000},"post":{"timezone":"EST","start":1646341200,"end":1646355600,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639578600,1639665000,1639751400],"indicators":{"quote":[{"high":[122.19999694824219,123.47000122070312,122.33999633789062],"volume":[1503000,1292600,1459500],"open":[119.62999725341797,123.26000213623047,116.5],"low":[115.37000274658203,116.48999786376953,114.55000305175781],"close":[121.55999755859375,117.88999938964844,121.55000305175781]}],"adjclose":[{"adjclose":[118.27759552001953,114.70669555664062,118.26786804199219]}]}}],"error":null}}' headers: Age: - - '1' + - '0' Connection: - keep-alive Expect-CT: @@ -36,11 +33,11 @@ interactions: cache-control: - public, max-age=10, stale-while-revalidate=20 content-length: - - '1157' + - '1155' content-type: - application/json;charset=utf-8 date: - - Thu, 20 Jan 2022 16:06:29 GMT + - Thu, 03 Mar 2022 15:19:22 GMT server: - ATS vary: @@ -48,13 +45,13 @@ interactions: x-envoy-decorator-operation: - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* x-envoy-upstream-service-time: - - '9' + - '11' x-request-id: - - c2c4d52d-f5cf-4008-b67b-0d61c63861ae + - 139f9f9a-0e46-494b-a8be-9b02dd971090 x-yahoo-request-id: - - dorr5ndguj246 + - 2lmld89h21n3q y-rid: - - dorr5ndguj246 + - 2lmld89h21n3q status: code: 200 message: OK @@ -67,271 +64,258 @@ interactions: - gzip, deflate Connection: - keep-alive - User-Agent: - - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:86.1) Gecko/20100101 Firefox/86.1 method: GET uri: https://stockanalysis.com/etf/ARKW/holdings/ response: body: string: !!binary | - H4sIAAAAAAAAA9xba5PbxpX9vr+iw63sSJXpYb8BjDRKbMeOsms5qbVKW7uplAoEQBISSHABcB5K - 8t/3nAY5Q44kR5poP8QuDUA0um/fvo9zTwPw01/89g/fvPzvP34rlsOqefaUR9Hk68XFpFpPcF3l - 5bOnTb1+K7qquZhsuqpo1+uqGCZi2VXzi8lyGDb9+XSab+qzfmiLt/k6b276uj8r2tVEFF3b921X - L+r1xWQyffa0L7p6Mzx7NN+ui6Fu14+uTsvT/rQ5rR//5epPzZ8vePjrX//05yf8cbbZ9stHfzlZ - DCtIz7vh5HxdXYnf5kP16PHZohpe1iv8Oq0uq/VwHru96U/+9vjJZd6J+UXJLt821Qp3+69vXuaL - H3L07x//Sf359A1uF10FUbseaD8tm4vmFxcnZT7k3+c3VXfy65N/ay5OftWcn5w8eXOW9zfr4mLo - thUu+q64ONmv/+rq6mzRtoumGvLFCkZYVB1NMB11+nVdQkr9q7J5Mj/b5B2m+6Etq7N63Vfd8HU1 - b7vq0ZvT+eMnf3v86Kpely3s0hZb6nV6Mhrt5PRAr9OT3718IV9+98eXqXt+8vjJ0+nOsjsLi1HV - yURQzVs3baBXXpqdquhS1kVOP0Rdx7vTN/00L/vZzdiJ2hdNDUUuilxutjOZJMoob51JvPWJ9ffc - nK/b9c2q3fYIoFutVrCLWMP6F5PLurratB1CCLE0UO7kqi6H5UVZXdZFJeMFYyWOKZZ592OFPtth - LlM2D/XQVM+++s//+C/x7cvvxPO2Kev1ohdSoE38UF0P4nfVuuriusTvMUW3robY96/iR8ao+GoX - pE+no7BD9cpq1BmDDzT8SjTteiGauh9EOxfL/aRwnIiqPPp7kz8WV/WwFCVmqpte5LN2O4gqL5Yi - 5o3I16Woh15sqq7AlHCFuKrqxXLAPKJei2FZUczZrWVGdbt21g79gaar/Fr263qzqYZzqU95Wa8g - TSJ5afrzJu8WVWy/rMuqvW2XmqLvkr2gIxEezf1cfy/Pp9Uwn+bd26vp3i7TWy03XYsVDTcXk3Zx - Hq19aNUv4cQPT/VP48Yjrbddc6DtP27w6PlPklivFtNZlXfyspezbdOcvdksPuLEm82hyKtq1tdD - 9eG+vPOagXow4CPeG8N5gHVh7PMi78qDMf12tcq7m9cxdl+Pq/rwwKjL3cDfxJW+3i/1+iOj/n8D - 83iuf5rIPFb7Hw+lO2jpl8D/AurVBY3w9+Blnl+y4xkOx3LG4QxI/KZ+0816gZJXv6v6i4k119Z8 - snQZu59RwGfMocO1Dp8+R+z+/hz5ZtNUcmi3xVJ+mknujzg7UipV1/i758g1YkeS0cmi3a4Py6+5 - h/yoCE2bl3stpq85FEog5opp0fdTW2WmUtrnZZVbX9ozNE5AOeDZ4aap7jmbTf2yqobPFUi6I9dy - MVLHdbujNrtmdMENcIz9jVvuU1bzqiP3Wberttw21S0Pujfzcrt+2083bXMzr5uml74oM1ekWWnz - Ii/8HNznkMTsxH9cErBwkxdvpZ3nTs91GmauzG3IKOdWq88ROO/guqu2eyuz+cznOjOZVWlVZfbB - Ild5vZb5LJvNVJnPihBCkvsHSyNl7KevEY7SpjNXZUVWaZW5eZE+WKb3zshZOc9DHuw8nSV6PtcP - lhZUGqRX3jhVBlUUmU50/mBpSaqctGGWFlkocgUKnM5nD5ZmEmelqqrC2bJ0WciLNH24L1zwVuok - V2li4F2jbZE9XFqWqCBDmFVqhnC22pi0enjUZakyUhf5PAkOGeHmSWbLB0vziFpZVNqmviq9SmZ6 - bh8eITaziTRpqVLvtKm8q4JVD5ZmdOrk3BSVTStklzL53BUPlkaNZFWWKiuULWYmtcbNHyzNZF7J - rJynNp+r4J2yNg8PljbmPqnoL/3X/c1q1ja/9L+9paRSzV3urCmVoXHdAxyU1TeJsSv98t+/+3FR - f7V99eq7r7Lp69m2bsoX+bqeV/3wxaT2/eKLy1zVZdlUV9jw/z3R0/FZy6wtb+5K3bOndawAx5v4 - jz5rWPdnfILDhw0HTwcm/yJ2/y0j3buYqIkYd9z8Fcsztr11v2nym3Ps+aonl3Vfz+qmHm7Ol1hB - fBY0HVU5qrdlfSkw2eR1tMWuYHfgnEPXtkNcIJdVdaJocpbrZSmvunwzGYfeNdZrUFq05juG8K+s - UpN9h76T7bq5ARcutj00HOSuZfLsx7f1RgytYP89oXk6ze/LX1XrLcT3lwtxvWrW/WjMnS2v7Fnb - LaZGKTVFj9tpOWhHx0gPwKBgm4ngZvnr9hrGE0oYh380Yte+hRWLbcdnO9+0TdvdmpZb7Wjvc6c2 - 11Bjkw/L3RAJnlQV+YYb+e26nBw2v2n5OOW4fec30FqY/YUTYakDTtrszinOdBanYHRdLnCELWja - vKtz2eQzkrLjnQq2GwiyTST4O4r2nouadtHunfeJdjyylFVBicykk3syP2AmSIh2Woihy9c9tkAr - 3h66+vrRmRaUJuMZ4h7v7Rnt4awXmTKukNYD061MMiW1RlnU3ktQgG90khiRmqBF8F4EQL+wmRbe - Bl1Il6EOJNIHkBnLU2J1n0kXgsDwxOlvQhKE0ZkXoGKJSHUqrE9xSHThTMJpRJKi0vkEPnFocLhp - tUgwgxX4kTpomAqtFCIHw3WmMAQaGO8wJhglXJKIoAMEZQIlLog0NeibwL0Wf9pkEqOEMVkmecvq - zMmgwjizswH9rMPqE6jpkyCdgiBWc2twK0gNNiS0g2UCFJCWzSA1Xup3L6A09NFgNzqV0B0W8dAI - BsHMmBfjsFOC4BSjE91gUMAaE6wpQYVyNhM2pWUspGC5kJ0Y2BfNWEQmvMNvIx0MpR0GY70GM9MU - JmTxnAoloSQEOAR46ptgOUjBG8IWkiumT6MKsGjAogMmlTCAF/AKlgpZMTWTMUEz/C2NMY2BZ2Fq - Hi+lc6qRMKbJEC6pBAlIcYRxTSqhESRYhAMCFxaCN9EZrvOwopI+DVDEG8SXkSksmaRaptAfPpO0 - EMwpHeIJS9FR3wx6IbwcbALzNZgQkg2NjzkKybV4TA7NXJAptEhs0sgUXku0emUQukudqMYgMryw - 8QjduMAk/khpGwS5oJUT5puGLNrICudACwUSwkIAAsON8mxQlwgFXyi4NrGSsQVlAzyjHdREM1IF - 0eRE9DgkJ9AR8hX6Wo0EwxD4EH2xECwTK0awRNeBciuBRalUN5oRl47zJUnW0CepGI9WUXEDDzKQ - 0ZPpIjMRFAPPp5zdpzJz2SXcMyptvErhShFdieMyWN8g++iyIE2yW55VBZgmTYEcMMIp+G2MXw/N - ArMIipmGZ5rFqww7QLgCt3gJAxqcENGB9oP5EEcIXea8pP1j4BmmI07e0OomCQgeJnMqAkzlkcsO - hqSzBYXg+G5fT7rFLH8U1CnsHU6R4ebxHXTfYlowGitwVt05zVgYAhGmXrH93Qun2MU4v+vi0QVN - 6OLRBe3vXnitIwR7WNH40RXBj1JiEzI/U9Q/RRfvdl1Utu+Cps/TWwOxEAHKI7sQrRLhB9CDEW1E - ZBNTxSBzPHFaqwjXJvU9jooJywvgCSydMfuQpjR2AjRjnYM0ZJBjkCtABl0GUMOCJWPYEfYTRg7D - CMAARHECMEncQA5rAC57eHobEYPR1CMgNghMY/SyZHhL/1lgC5MI6aAY3cBZJANUh+sBAgQCJhDS - eVyM5hFFg51Tlg5GuYYEB3EYBIAEwkpD8MviQsd0ImAq9mb1AKIgBtEd8ZeJDGlpA8ENKIjlQoDA - Ioh82C1TPSITXIxRKCSeuiQAR9QxjUkJrSwMwBPvYEfOwuqDXZlDGmmAjodEg2tDaAUessbYzAkH - cyYsLhFbgQpIHwNkxklDD+K3ijhJXwF64WhPFUeMpj4IvRALCEwGs6Iq6541FE2cHNZwQFhUO4eW - NCswDrUdNUViQvgFg5i8DoCA+isz5FQSVAR/xAVKNTSD+sQKhLFSNsadY9xlMjDuEuCTj+UCIO+Y - sGhg2gN+E4aaiqEBfQAMCTGFceRjDQaew2I20L+wOQEblkGdZQCBPcC6LNiWZBC1GiDh4E+DmmVQ - XpGqAGuuEFGr6AJCkKXjPI0PuFUyhZtTQj/9q1hVaCzHaAReAFEST+lARx0979+tLPydWFeAhyCO - ItonNCBjG124WJ/FMUAH4BBkAJIQli4wFzAlCwEBUJOlMM2gAPLEsJKibBj2JUlBXDkdi3QCgE0s - MRFOTFhJXZYS/rEGQY6kiDEO5gDhQSSk+I2k9FyUIAXhL4G0EF6z2sCnGRkHicoIFJr6G+hhANVA - WnSAmlwb4xQzwzg+JYIToFPmNkpqIgNKtgusM0hDdAc1kcBhF+sTSB7yQJIYgQPIBGlCyVg5qxgK - JJRiPDlP5oT1MgwZn3Auix7jnzQDaDOSC9rBYr1MQ9hDuFgxWSoN8B35iWosWTAS0jTESUpGYlk1 - gXeSOuypAX0d8Uen5AzgcVggeRZRBKkD74LMsYxirQgQ0jEoCgoM50QaCXvEBAVdRawQQlgxqWkM - TMSEYW6lxGnmGLujNSFSZhGbOMxxCkEw0wQaLXGMFxlPJmIZFwZqQk4RUw5+TEkkSffA7SMrpiw4 - 3OgYF2QK0Mqk1N6MoIQYDwgzDWiD0iOxgPJYko45DfmkSSbmtPcxp5GBuJ9Y1qag/BICLj0qHf5e - gQuwRqWoUQE1TwdUq6B3TbEeohfrl4rDYCHes0ZFUQi/AFoBVSgAkbC0GVkhtAes0glMjSz+hE/M - fpJkP0mmLuHlJTC3AXYkSYHFIL2NiYhDYAN8qQY0HpawS61c2I0MYIEOLggOgW+QTNyyOJSEwOyI - Z0c6JMgdDUKOYemy0JBju0wvwfMusV9YsgbF1WcN2T3RG16VjHXU/iJGGZtY3kxG4ItQ00gWQmWX - 6JVeQkkypp1AaBitAfN468g/EsBpHEyOBwwGVcoIFqyKI2WOlRQ9AIpj+WQVZMIgsDMbyZ2Ht7m/ - 4vYBqR2zCJNBfqAcz3IQccvFepWylmiEUjICdEQnG9VOIoRrhqaN9ZqVQrJGURkmIYsQDJhyc2zi - CXyBRZ0MFiJ58LFCw1Rh3PfBJiBAyCgBsPMFSQcyBsQDmsMfGbqkPsqD3yx15G4tHXkfQAUXmAEN - HgljeSZ14U4Ircg5Fcs8LlIkMcBH+ZgHcHbcOcICo8lS6sBijurGDIPSjBRNTIysn6rHnSgpGE3M - jR73VoalPlJ3WlXF2Uk/A1U13FZgWgK9oOWR8jxhqIpLwewielLETQZSgFs2A8TwINyekIBmmxb4 - xXEx0jjrWH2QewwyEW1JC2FjFKkOQol7CKQkqQOpJnYSuB0Y+YRzgB4IIGwRSzayU0b1AOLkeQgV - xBDqEQ1O0sfdvWAAOM5qxtgxUXPUFhZ7UlkQqIwbjIxQSvKEmLFcMExDWoQwIdSmkf1zLwdcI5Fz - jG5kDvIYXoqW4hMAIJikTyQ3seSC3vVkFGP02LvoSYA2oSC6u3EbQ+8r0mgx5grrio08y3M4WIP2 - DG0UEm7gYVtHfkAkdru9lyMF4p7WCMLsjkQY7tXIzyy9TLTFBHx+MOKHNhGK0Irwp1V0LFQjz8A5 - MmmglqOTyWXTGFQEkGwMLBATRjIfNmDpkV6ifpOZptH3u10tqSJCl76QLjqcO3dhIl2MAUta2BtW - E+5YcVMXjDIACQ42qglxWCUiNU3HRwNYHOs97UUWwLl8DBSYU8eVarornkCjBdCKcI0ZvbJFrKjY - 9iCaEsQPIc+ATSCxudMmS08ZVjpdSpYVEMwlNkCXPBMVCxmzguWe5Rcw3YMmeBeTSvsmItsOBOKR - ecEdTsEi58eLwOcn3I9QkOTzIcrC0iznGGdtCCAmPvSxe7DnUWZ8bkDglORHmdufzRLQphvJZzzI - o3erhG60BSE0jYCAW3Z3jmvQZAwEy3ji1gU2gnKoeYKEIcAhiAYRtzOEIUxlA6yJdXFjibKAxEOR - 87E0JrEy8tUVkZBH9Ee5yDKUN783oVEFkz+SHJowkkZYCcmEaHJ8LJG6BkdQJgd6FoAN49lFxDHx - SJNkjI64cHMrXXFP6kad8CNTyDc+P9L8DZ3iBpCoxqcvsL0LBEao7xBVASnvGEZLkqi4Niw2Iduw - DpbkmlgYmLMIrZTQYCM6OZZ1bGlS0l+gVMZHOeTayHMSeOLVaIrGuehWt3drOroVumtYJqjoGBUf - ZYF+kBPHPQFr4hhgxPV0mdjQsFyZIiYskpD5wWd3WMAI1Y5wzrumR/bJLIZYdhdhyww2okr0Rxy+ - DyUsEJnJMxkeFk4sGukewoRUmjsNsNNMmTG+XCxGNurIKEl7+oLPSbgdQnQYFo5YNFXhsliGWOe1 - i/Qfe0QxlicgAQsSubOXESc1H/ZEkmvgjczdD71XmhwOyqmG9TfdPVXjhgxCuTmITAxYQu7CZxsB - +QwkUYdxk6qdv43mpupuBtTkxgIMvaWa3MPGZfGJRTx+INbTndQoHpFg+XyTG+TdmQuPB1qfkyu1 - d0iBSqr4JCI+juATT8c9DmOOVd6kCNX4I+5nAAkhKWQ2btRJyg07J8wRFZ/bkfTjX8anddBM75fr - bpcbae4HDeqPDer5LBRHkK4xavYJHKFIMO/Br46zcW/Vg1cPi+PXD++/k+mrvCuWGMHn+yKPnwNf - TKZj83QiVtWwbMuLyYIfjnQtXxHcDjmQNG+qa1EP1aqX/Kyp6vjVST7Ul9Vxv3zWt812qAS/uR3k - jVSiqeYDTu9L2CCQz/zuRcdu/BXsjOAS1/35FdgXTsBhMfCjmkWX3zDYjt8T/UMveOzH3il9+O3T - T7xn4rM48ESD5ATzWaGA5knEGz5s5dPR8UpxB3vkwAPn1evNdth9AzXEN307o8zajm/3xtNoB4QB - 7JcXFd8D7xuxuxhN1a9oufhzlveV2NxIfebFqjzHL0PDJ2Ko1zfn+JWyK856dBEktVe7d4BdvV7Q - c/Hi/uxja7sdaGNJZ4hle1l157OFvFrC0ftxx5f9Mi/bK9ksRPRIVVJZ9Ilyvbo/6ErOt00zOX6r - NsbnLlqLdjVrZ+31rk91vckpFiGbN321a+U7S3SHLdurdVW+5geA45jt0H7TrjZNNUBWO5/Dz5uq - aYplVbw9lsGuxW1XSpjsvvn638mhLy4mFJivb0Tb7T4KHF/bn52dIbLyZluNn1odpE3ZtZsSOcP8 - jCm1S+fxyNTdX7z3urBexze6u7Z6Hd3xfrK92fZDPb/ZX452FZtr5FqMiQ/EmN2HE5w1hwGBJasa - 6ygPXbfzJ37dJSkfcd968DYo4i394cg5iDdzeDGDseI2dzVA0RVxhLG8V1Ptp49C7hRIiBK7V6zR - RNPJs+/bhfj9OiLkl7ZWfH86/v8Gn22w0Uiz3VJnkMToXCyHO8Md3MHgbvMFDDiJHxQM+UJuN4tO - jp8PyHlXVVhMffcx+nTTtbDdd7ghXvJGtN9RcI5jjwKTnwnwE4vj0nB93Rx85zC+Le/rstrfZ50o - 2uZ4EBvX+SUacdw34qcce+aHTfSg2OG4AIxtNxMRPzm+mDxvV0cv3T/x1frDPkg4VCl+1/Be5fBf - +AsFvjgFuzAr6NYkfCgqkhd8DHypVQ7WwsqDPaVe2lV85N6A0qzIuw7u86UgqLpdySAOBkm+wr3t - g8ulubsSYECH8uPY5XufRiA31odWiTg+eUanoAduPjtOy1tnHjsxfk3R37oxQmv/M/Qm3z1cypBz - d0bD0lHP/cGlMJd3d3GGS26vpHnHKHiV7Zu4bb/rwCe+cPro5I+KiBL8T0lwt5dUB/T24BoqfGIE - jB49jIGD1Ge/+HEQP4fZhcKHgmQE3tso+f0f/3AXI/Wm/TlGSCqSV3aFDSqOMhMp9iIv+DpgeecX - uvFV8pMxpA98Lj7ZZ7TvT3gs78AfD79gun8PDW1flfcNzH87ojUWCZSnblt98LulY9odRPg+bny/ - 57bsVfifvR+PvPRBxr3/Zuuncefbl9/dRRQ/xPz5BRSfdOrnfsXdyVGih6M8v4ugmOYHIEWMiKPv - gCfGHKuQPgajD4BLOJrTvED5Qkh/YkDSPZ9TRn6oru7cucbFz9OfRt3z1qsjZ8G+x4i+4nPk4wHJ - UVtElGPvAvdX0kn7PHvBNwXLgFO6DJfuefIq/VRAoT8+x38vYVl++nzrw2HX8HP0o0UmpMyYSxxl - yu16yk/eUL8/lWbt7fVly+yLvHtbDeIFNyl36bSKrf10gR0A2n+OHgkihS/gAX/peQJerfjd21If - Uai7bFP/BwAA///kHWtz2zbyr+B8k047Q0p8iZJc1x1ZUuzUD+kiObkk07mhRNjimCJZPmIrf+y+ - 3y+7XYAPgKJTJnZ6M7kPtkiQxIL7XuwCZLZXPP1q2ysh/fsywk/nyMUaolQscC8DhLyBRwrfIy8a - xH5jgXYomAlnV+BcLbxATHpY6OsPqhtUfEC4gZ8DE2sqdgaExPjAVo22j7Tk3YI83xfb/pmxGodx - FMZOSsmITb1XqpJPxX+PKrKHAYmFPyLLVLEJ40q8/FGXY1DxFDToAGMba9OWwfZQLXJaF26U+G0d - +r4T4eRuSSneQC75KpYabyJtvz9S4RTO0Ff7vI5ui2nO8qw12jneSmyLk4N5Ugqn+RhGj4/YEiKc - fJTWHuHJ3txflKo9kmwP4deWr2wf2Gw8TsiaLH2BE7P+Lf7aZLtSjQM+XyhmDVYxddx1nG1XSZVY - EdqOj0IfF1RXy6O6xRQV8g9ekC7yQBCCj89cZ5tHHLBdVKS7iv0OeEMXAe8xKLwGcv5GLxrYdLHx - 4CNK2PEHw44efuczzWyWWZqBZ2A/v5UCbnbw9qej7kaXILNuMD0k591w9viDDhDBZX+3mI5ej0eH - fNOE//ybTKjv7KhL5rG3pthwvZhITJBQJpTC2/V4SpAlnVC38wl48FUJMNKaqkhLoGlxYtVYAGVC - /dDTXvwuX1j5LOOyPeST+/wdLEBbiaeD42G/0x/uOx71R+Fo66t6Oadf5NQEGhhFx9VUP709kIWF - 3RhTlyUvj1W9Az7kj/jTf/GTLDV1Ijw8JCVQRpBVdFgk+KRsB5vZ57lUAXD9faSBAn+k3J4e5oMg - R39TVaKqx79BF/pQwbogcGwPofv55WPOWp4C8Ruyk2qvBWU+6J1+TLe/Ex9EETMWvRo+5azO8XDQ - 0XQ+DPKnndfzoAXVgJaAMEyJIokBdTXE3aKrov6RhSk9ONY6gIUf8f9nyIXd1UgCXTMGb6RkDeBe - BqqJhXbU98E/6mlae0OUP78BWbqHPxgTZtfh5x4E6ivN1DdfcInVRB/1LZZXws+QVdmw5Zdn5lbv - dXC5kY3/fbXT1/rs3yU0WCZh/4XmrW50+saAaLxNuFPvd2ysJSybsRDPcCxiMQ8Fi0UIP9H0QVPK - PhcZkUpMWdSEbB5TlUfFhXQdlkzEf8Qeco1zwETQ0HIR7B3C4EaXZLpYNlrZXLdKObJcHFdlsnI/ - jZjn1o+PMr94Kk90Qj/5Wl5u0vKreXaaL0DO3aYZhKLIOgcNdq+4VreQeXdlulvqsLCN+x1WuzAJ - BvQLep54uBVX4O737OZXoOfipi/qeQz4TPe7xV3VUuiTXa467Galvd/TI1iogFuH5IusUU2ZuZJi - Hg781rQqNMaYL1bRyVo58UHuaNU6xeqHmgWNmROFPoYhWx2/tDP75o3lq7lNDkIeqoE0VfTYGA1v - xaMyfA+mpg8aR8eXj5eJ6RvqpFjNEcYpQEqjGEe6ytK0ciLKJ1dpwB/EZLRPkyTz+AwCv1/F5PsN - qB632GKItxcxo5NEYZRFRdTYWEdyPGVDaat3mwLUhshy7024378fyubaFbtQY7bXDu7GGLpuHnJ1 - jKFJ+vi/ys52LJyQv9Axhu/0BrZv4nXVFO7S87vYfx9YzBLSwfx5H6cby1aNN3/CkXtRbSh1Fcmx - fFx3HSTqwxtxc8fcdNyIq2wrlWKxDcFL1g4eVpL5KTrP+EhT3RQvyym6QcYojovyG7lgh3eM9Tnd - mmqtDxdn3m7QCj8UwpM6K7+sYeCFPipv25SajLFmsWEHu4gP8r0o0hgPj6/CzlEXcQd/C9ZLeVqU - E+G2mmXjCzJKEopYKB4CJUPz0y522i0A8N0uGBz3GHyn1GVHlVJb+VXBR55VX4esaGY8e3XFFVf+ - 0BjamSt16ocrLAfJ29GhflGe6Ypm6YptGryFDSeHb7SDnya+A/CXi4uRBH9J4YIA1epVUA3dUgZ2 - fx+m2Q7m7SpdA8zTk+VYgnkKHl2ydoCiJ16KiCHLOEvS8rrdsQbVKGylb9qK1u/tj8NqN45PWxjF - +0tpDO/DcEve4E6SBNhhmwX5jqJJeUevYxsSBXpDRTfN/VH02o0C/LIMxvF6dn4tjeQ1tCsQR647 - AuieVYEeDmzFsKx9wHY7wKCM0Wgu5rOlBHgB7d7NjizpehOA9rzdCQMwzGoAfbOvaHrDm/fbDSB1 - Q+SD5WQ2rvGe78AlckYdP90IwHVdYEJF03qKaev74Actwd+nMYJ/u3wtg+dbBJbnVmcoML+pDC0N - RG6wD3fYFq4fMrgXszpc3wsFsBK3o5z3G15W19pBTTZhhNQ+m81lakM7UFsAqwlY1nVT0YwmsC31 - W/IHAv2HBPIEfZMKoWAyK4ADva8Y+rABYEuFhrIkC9J14KU7sghvUty5SIBrCS86GA4UY6A1wG2p - 1OKV/4BifHLxz5oYgyv2IEA1+qL2MEB72HqDLtVbKrEk8u+YFF+c16TYz4K7R+AODAOw3MDCekul - 5d6xNPDk/OpUgjqJnZv0nHuoJWRd0BmWog8NZdhkPfSWegtdH4A9Hy3PZDp7c0dQF0ZnIFhKQ7Eg - zBv2mjirpbpKKOJ5KmOZOuTC24Kr7lZE7QwFA2GalmJbTa/bUk1twhDjpbPZbFJnLC/Ai4RnKxNh - AANbVFgDE5VW05u31FiRzzTl/KKmKeeO7wSpF1emwqPSMEQ8AJv3FNtoEDGjpQqLEA/zSW0ItzSe - ZOlOACvqE13pDXRlaDaoMKOlCnM9jIQnrxaytt5Q8hbsE5l4SUB3JHcehWGIAmdYfUUfNNhqo6Va - A/ru2DT44p00jCm017wEgCw6a4YNkO0GyC0VW3iXooc4O1/KHuIM2vchi67RwFQMrYHtjJaqbUt9 - DyBfTi9eSZAvabwGB+HCWwnqHGAL6tw0wDts8opb6reAomt0NZU9o7EfZu6N70hgddE5sC3wiBqE - 3Wip2z5mn/CV31y/l1/5DbQ/iEAllWoPe4pmN3FXW9V2539C5XZ+8V5Wb3cQB38S4Qr07SlD8MA0 - o8GMGC1125pNBY2vZJkeh8E6jF0yWv+ReYmH7rc4BJHMYLPBojS+ekvd9nG9Q1K/Gb+Taf2Gxg5c - EimtCc63rkBIrwyaPAazpTq7pQHS+nR6JdP6FNqzhCxwGiR5BLwFCr0H3n9D8GO2VGtB4GL8c3U1 - kSOgKycIQaltaZDIiNc0wYFQejYEX1qD82+21Gh3HiP++asa9TGT5oZhLMx15Vc0yaJbSg8ccV1r - UG1mS9XmuDuKWnU0eTeV1eoIrgQiYFskPTiKim40vXtLzZbehxkLAWayq2pc1zSq1rFlyBY4T4Mm - yC0VG3XRkk8nsiGfBi51PgLOT7GoognzYuDZM0Dl2E2s11LLBfjyV/KrX2VNYC3p7ft9CPqNJsAt - 9dw2cJHel1cTmdzbMHCdHe46KsIWXtlGLdMEuFJ0QbeaL5m8nr57eb0gp7M3SzIeLc7I5eiKvLpa - CN2L5spWTPBSek1uotlSj0VpiBNJ8+VMnkiaUz9Mi4Q0n1MXBiHGekMUqP0BWC3VGX7gBf2k2Vgm - 7ATaF96tKE2iJjH7DQJstdRhfpSwJWfzhfzSF/CWcxon4WNQhw0Ww2qpuJLAYZH01agWSUP7nviK - QEF8jQafxGqprZIgvGdwZ29rcMN7cEru6CNgh6Lv281nKbtsdvT4kXx4fZWr4/sskQuqMsHvOTQl - sOVyLXHBGTzZz3MqWl5zsFMHtZx189LbmK/nK7PMEa/VMIvHNhuTl30QXt28McUsWy2lfeR75ZBW - qkngMD2EI3gtg4D8J8S5DYtXIyo5KmpMxK2KVzT4BErKYVsUp2GkAnViCHu6htHV9K4+HA57ht7v - riEW9ah6DwEa5jh8xwsS9X6zUyFYU73gI01S/BySmtDATVRHdR3P36l0Cz8qRBxYMIBZekZ7dRvC - /Qckxe+FpL8c/GsFcdfdAf8gQRCGEdadkCCMcSPmmB3ehJjDPhDZ6XjMhkTeYsw4zYdE3m52ZBTf - Ad8WQyILHBIZkQkOiUxxSBjl5EPKPwuCtbEsLYiIynF2kuOmyOc9hm2d3FN61wbbNL1hiM4zr0kX - s1VZTAFjgauyRQU7j/qumkTeHbRuM9dlKAZcO6Dwkl+DMHJuYVC/6E/G3zuEBH4ZQiKXCAnLcn74 - +4PR/xkQyeDVMDJdvmRG5fP4MBg+WrEfIISV4fPvZgCjxFmEOl1Ny9ladb1xgoD6oDdi6myRi7wg - Dh1gs413u2GLXhFF9yqINeCy+2TELApAwEUMEDkrAPHCpREDtI8bwmrmkz/Dj9keP58cUJWcZZBN - +boTiLx7mmV3N+E9yJarirKZCAKpRjTGNeBwinvzPZ1jzsJ7kByXCJJXsAsWjXGZI3MOFb9ag1B/ - reHpPb6SKJ+vKd854hnR1kLOVoig+zCu0ISchWynwtOJuoMxPae0nSBqfnC20c+At7hCE7IZzjdh - ZV1CZjcEZ2LeAfCvEj3ri3DUWvQAQ4mXYGWBSlW4fYtfKVL54/jBGtBYqyzccTHk3GY8XQ7nJVQy - Vcc51FzGyBihkhOAymWSc5vx1UKpE/Ca000bzEk2kzGTAZbS6BqWrQ8HmiYZS8cFFGU3a5UvO8BC - RRabqGmIjAY21ElzeQW2UJMNw+ZdgMh4Iv5EAzmCYZDrl2My5/sNlCHSMkTOOwTD6aS5VMI4yIKN - g5zDOL7aKrZG6Jew4hrEOQNOUIvbwkD1wBTQmDLhZiy4cVDSk3u2lujJaMwhotOQQySvwCYARIV9 - t4vx35kDSpCD/Ct48BHDYNo9o9/18mpdrsn8MLxD3XaL39NUVzQF3GzBbIRbbx2zKpc1jbF6KN09 - GVdinXBCLjhkCMMBMjkByGQEkMmMQybXFeTnMhJfgMIWRgJt6U2GSs6nDkOiw6onntMwoOV8iTDI - BYdRVmg8qv9ZJVgZW/2f7UZSxpFCxeAlIDkPmZwiZiuWDzQsLMBlA3lQ13zfTRgixgoy5ZvQgGqH - Jvx23ipMaxtd8bry/gMElsUigxS3oQRs88UIeVk6tvKDlTrI1x7UYscH//A2BinJf3HLkgTXK8Cp - E9VvZndWtxmE3YM3w7mKRZ9sVYM4Upd3n/8Wz+Fp1T0EpZYUdgKlH6uvtjCwjkFgkVT3HrJUFuF3 - DB2sf1vQYlXNxhKDWVaZWETPVr1ktKq9ruDgvkKcnSqeq08qVHtDIB/slWF+cbf5RhB884Ln6bJc - ACL0yEs763MXW8ZBQJi81PzZSALHWJP4bSnCSlLXrI6VH5HrZ8OhsDmTFzxXp817FtXIs0+kv1ac - xkVe9pvSjn2eFDMJ+Ptc+MWPv275XCM/eq6OnYiltEdz8Mp4hDVxUud/JV0X9BZ555vSJ4q9j856 - p0ah760xBTDnDWTOGp4LsWADwZsIb9SMFYss8RTnS68T+lwgWDk8myB0PPCxccYdWvj8HGv5jBQ2 - kZSZvmem6CJb4TfVVhS/ZYYf4kXf0Ke8qg7pHElkfgQHB6zGwndSnAjIIhcPFFzI4jBHCbrehVlM - cAu0h85RNzr+LwAAAP//zF1tb9w2Ev4rwuKAfvHSen9ZFAaM2G5zl9q52pcW7QWLfZHjvdjZxb44 - MYr8oPsb/WWdZ0iRHFlrr51cr0UqSyvx4ZCcGZGSnhkdelMokKEG4cN+nm/cTF0kTrpTrXvBaDKp - aY4BCsEKk9J/XZyQE7IBPP357+hjPTa56XTKOLxBnIJPpRagd/jfR5sAbOYLaeStHVLpISQczqb2 - ++giSZE9JsrwQfT28giCqPNOm3Kjj/gpi7M0ieKHyy7r6WxJcwpbdnsa3lUzbvtrWjy+79/hLSV/ - VN2ADIssHxV5Hod1XEdlOA2LSVyV0WUVjbLLUVQ/LAv3w2jaaI4V6YSnj5xo132drp+F65nl/W/U - 9WNp6n9af6w6P1Hn8k3N5gBtkbgyMKW5zFQ2IpUe0Qx8YqbbN7MPpENhszCwoRe3rwuaFcDNVK8g - eC3Rpe9V2BFnFDP4J8z655eXiAXb9ZudjnunRPBQLbr/0z1pUgR7FJ/zH/Myia1Qd9x+27skfg8Y - DqCheyaNdfZXVyTPe/ZA/viRNt7MLMmgOTLYbgjuraCeOBqPLgPdcLE3vCFT2Ihl3FdZsj1x8O5V - xe3kb2WC6UaTkPkN2mSzXM2XdOPjZxzW4qyL9pgYfvjT7ltF06fiPR3eEy5wlqYG3Jn0V/QnHTdd - Oq7XH2sOTOlBaxdtuch0uUbHOqzrOcQlXTmez9+7pzmNF6MOe8LjK6tM8r7m3XrtrciypVbzCc10 - jffoN5LIuLkn/NAioJE4ac5rHmkXMamLDmrEuqI+/Uj/m7Hrg/6zXvU1jXSXKBw+X3QboylGjptJ - 2M9UhhRJCukWolD/O4+DHD8E+pogVVUVBQkInUGlorgMSoU0LpUqi/K2n6uqLK4Qazp9E8VX/LdS - RVUgmr3Kwhz0JySfUWVFKAXVxLuRCpHvIIhVnJQKiXfs3m2s0vyqH6k4n2CbJgg0r3KUjniHSmd5 - rOsrCnBSUwTYJ1xIkiS3kKp8EZXMRo0jFhuNzrkx3PzdWFaj+9q41lQBp4jDRhM//ZlqaMTYpoWG - 0PAXUEKOqaiQnyNUcRZNCoUESqDHqbzISIHiLGkO9B8aboUUNPQnybK+Qkw1lSWHGE6oH7YcxyQO - MlXFI2hNwBsdXY1KFSpPc9LdKCrNFgUihdznpGgFXR5Tm/XWlMpDQqu4VFiYLceUgtYkUN5UC5qZ - LZcja0DSIxWXukxutro+qimDNR2mKkSWCN6iHCkrmVARJbcqzOIRymSB3qIkeIR8eczbKjNbQx4s - s0QZGUuz1aVK5Gyj09RXMRLS8ZbrC8ga0rAYQXTQsfUflMoxOIR5LxZMl/a/m62vNuP7Xnha3/6Z - 2q/FkMr/hhQ6wLzku9n6+81YJwP+/+v/NieMyIAvGlfLThdpQ8gzkb4X7HiRLZAGkzSNlLukK5CZ - ryKnmqqMtIE0tiTDiMG2x05awlHSiBdkMmHZp5IljCchhSnChDS8KFnLyQMj3UsE7yj2SZVTxM5A - OhAVMUsVSYzcrqqAm5OIVIagSrsDhx6yUpJvRjpGFSIrm9sn56yPqUm0AMKPJTllVZHm0VlqDuGk - hUL6PJwiN4+qk6SEwaKdGW5VWZaxQM0+iFqcCJMQqCloSVWyNEiLSx1D8iJ/Fxen2wQw4wL1AVcb - cUC634epUg9lXDQ/pG5Guk3eMuEXI1Sm6YSMSyHzMfoU7DQMEUYEiWqobqRqUpznk9xFAbE0brOv - kLuSmlVUKkZcJhKZBjeAKGSRqSq4fjQgqzKzz80gKci805JvcBVpR16h9UjTRX2QUtuzSiVhRQ60 - VNCNAiBlhhbqblQcjFKlUdXsFuyI6T4L/VJZiXpIjeLDCF8JIt0h/zG+Vmvmi7jRVdK7LI5ZZYPd - b6d6kuk/DCg7F0dwCOa5k5sdRr2D3/+r4zboL5Ka9N8Kn5sEzNVfgcNcL2/rqX5A8JxZ7WJMc1KW - xV8PiMAwWBkd/FiTS1rPbuqA45msgsVyjhAH02B8Z9+s3fOhs/rTBKwCNZt/2cy186HRwcvjnwNm - LaC/VXC2vsJ8XEc3xJMk2r8LxnUwNWGFxnfIlUbr3A1aMKdrqU7l9Rtc8GSyGEkJ/J6x0rRXHsYz - TmcrWkTeDdiDHhzNqVlrvB5b0vr6LljwV5uj62D2AcsRXscosSbZ126/OdRPYliu4fD0+OeL4dHh - xeFw2EQgoDX8teHw7v+HoHsHv/VoZBar3oB26LbwujlAjfiLcr1Br15f9vYM0ZwO8eKMjtezyXtq - zKCHd9h0zE9l+OjBEFB0JQ301ejDO1zdhHWiX3XsG4jSG3C0pL3eYkqX8D6dn9A+RzLC/sIcFDiA - UOQvqowO5tivyC3T/hXtRzTdyEM6uDZQOHGLE3vkBfbCBIU2dNwVgQinJu1zUUQn0X4Ih1/6mHxA - wjV1XpSncR7nYRhipkQyZDEqq0BUgRR82MhRf5JdcEMAPRNwkM72BriR0g56BEGIsDvVjQ0jXAHh - ECaI9xfeQdOiroAuOI+KXJyY3mca3vUI3U82Rrp2TdfglfmM/EVvwOEoeNjqhY4oSKNE9/paByFp - zsPklq1fPxMyrAslJvPNB/o9TahX+RnmtNW16ML5Igp7gyxXOfrQ/pfu6fQng19/Iwmpmz19/BtC - BjgFbMULQEv4pTid4pABUGUOXMBKYKIGUA9o4NgHRiwAB8yBACRcmgk4Ew7AgiU+GEj+Duy7ZSfD - 34dnkr8Pb3n+toLUr+CXHxz8VvK+XwHz91vdoSn8toLMrwDEfFeFY+VLzCwVmIabbxFzHxGMe4d4 - n24vkeNEIBvSvUUuxNAdnXm9LXn0EjWK5Bg2bHqLWwrcny5+9HDNetIDZI68D2hp8hawkoCvzgTg - 9Wwu8dpaoPnvFi0KRY9+f/ba61FNaZd4oWywIbY7PGFb5/90aMxW97GYsO5jGc66wxLm5CmPZKJL - zFTKZ/joDlNYFVjmvk6CYi7h4qKl44Zo7gCFFYE+7qskuOMPAhoGuYMTNgNeuINzpHAJGUnNttRw - ByrMBoRvry+Z7e0DMuFbKrXhfDtAYS3nx16THZHbx2Qut9BrTed2iMJOQNIW4yIZ2hK5zFsWY3ja - DluYDNjXDruTet3Cb0neELCd1xc29PrIRzesaonY0nvLrXaIwoqOXp47yC18aVlBS8kMa9rBC8MC - F9rhOyJ0C7J1s9J0aAcp7AokZwfpGM4tyNb9Q/OcHaSwLLCXHaRPXW6BSvvXBGaHKczr9Ni7fzhS - sgSMWg5ZU5MdorAtEI4dJLONW2htWzWcY4cnTesfr37xjItpxC1A2YmWTOwAhWW9OPXUs4Mg3AJv - dWZDE3bgwrRA/vVab5i/EjKUN3jL/3XTHmFNYPU6SEHpfRDXEnsdrrAp0HUdruTqtoBD6bAbxq4D - FtYEHq4HXLdIuD522Ha0lorrsIVZMb/WgTO5tgWYt3rXUGwdoDAqEGcdXsOalZD5PUjNnXWQwqaO - jzzvuoUPKytoTfkMK9bBCwM79eT1qK4SMW2LbAivDlMYGWisDtVxWFugUkzNZHWIvpV92B85vK0c - Vgnf8luWyepqkHexizNv1dJBTpXorVkbU1QtciosDsRTT3rDOm3BSZtICqexqTAzMEodmKOTPghX - Of+SCtsCVdShOZ7og2jMFnWAiQQ8+8kHNATQh6Wj2/RbWpjiWxxeUXJMTTrx9WmBVO1mCUH/IsRJ - PLbRnsLSPNEz881ygl8bggZ3dtMr3WS/bxqeX2cTd/hAfne2ohXasSV9ofXn7ULkHWl420TfmVGy - M6/Q63fLsmq1wRA9RDs6WHPfPEiY62zR12UC2qYk3U3Zyr8QLWNO2783YRjnO5LanqtnT2XrPda+ - DnV7Dtvsi3XvecQ627r0SYr4lfhgj7vD/yEnznMjlujzqPN7MoPri8f16Sy1xxq2ZUyfTbh6ipP5 - UlbZY23bzdtsI0o916fsQu56TPLGj2AmMhyeDs/PX+sH/nTML+kHmvDxq57svLXByHt4V1Iv7/BM - 3U6E+CUMlRxvZtfTl/ySYHZXxMlNdPH3k/N3s8PNmzcnh3hLMVud0F1pTP1mn9y/W60WzcsG/Rbp - 1Rwplmly9Pbzt+YT34Nv903AjKv1zfXBHwAAAP//AwALlka3Y6wAAA== + H4sIAAAAAAAAA9xbbY/bRpL+K306LJAFtkf93k3DY1w2m1xyl9kNNoEPd18MiqJeYkrUkhzNjHE/ + /p6nKc1IYzsZT3IfvICHFMnu6uqqp56qbtIv/+Uvf/vqp//+4WuxGjbNq5c8iqbcLi8n9XaC67qc + v3q5qYdSbMtNfTnZr+ubXdsNE1G126HeDpeTm/V8WF3O6/26qmW+mEwPfapV2f1Yo831sJCJt4f1 + 0NSvvvz7f/6X+Pqnb8S3bTNfb5e9kAL3xF/r20H8e72tu3JYt1vxHYbotvWQ2/6v+HFoq7fiy23Z + 3PXr/uV0FHaq3rzuq269Y+cTDb8UTbtdimbdD6JdiNVx0EXbiazKF782+B/FzXpYiTlGWje9KGft + 9SDqslqJPutUbudiPfRiV3cVhiyXtbip18vVgHHEeiuGVU0xFzRBs96+FV3dXE6qcttu11XZTMSq + qxeXk9Uw7PoX02kWWh7meVG1m2k9LKZl9/ZmelR+em/kXddi2OHuctIuX2STnE7997D0h4f6HGz9 + vtbXXXOi7W83+HoDBZ4kcb1ZTmd12cl9L2fXTXPx8275ESfe7U5F3tSzfj3UH27LJ28I/pMOH/He + GCIDrAtjv6jKbn7Sp7/ebMru7k1Tdsv6zTirD3fMujx0/Lc80zfHqd5+pNf/LzDPx/pskHmu9m+H + 0gO19CuQdAX11hWN8Gv0sij3bHiBw7mcsTsBid/Ub7rbLieiX7+r+8uJNbfWPFm6zM0vKOATxtDh + Voenj5Gbvz9Guds1tRza62oln2aSxz0uzpRK6hZ/jxy5BXYkU6as2uvtaY40H2y6wGO562o029bV + cK4x7jdtOT8qOn3DLtATsKymVd9Pq0rXrqrroNws1N5f4OZElNCuH+6a+hEeeKtf1fXwqQLn5VDK + rURFQInbdgyt4200wYNXL6fHB69eHhvUi7rDM7FtN+38uqn5u++q90ZeXW/f9tNd29wt1k3TS1/N + C1elYm7Lqqz84uLnngM8Ev9xSaDLXVm9lTNnTRkXvpwp6+a2oJx7rT5F4KKDy27a7q0sVVTVbLFY + 2Cp6Vflni9yU660sQhm1VaVZxEUIs/BsaTvETD99A8RKp0u9SJi0mWsbfXq2TO+dkbWKZh6100HN + lZrpZ0uLTiup4tzoCn+xWlgfn69bEVWQEGlqX/oF0FqVi/nzpSVlpIaIGFxpg1vEwj5fmg8hyKrW + Nvl67lWc6YV9vt20jlGWRtui1kbPop2Xun62NGtMkkWyi3KhKuNNZWK5eLY0E32USrs5lCxTOYNm + yT5bWkoa0qwPsYhpYcrazObx2dLGiGAN9wf/5/5uM2ubP/i/3NdyMi10AAjjDO4JqngGNyTZl03z + 9+UPP8p3xX9cNd+X+qefp29m1+tmflVu14u6H343qX2//N1lbtbzeVPflF39a6Kn4ypw1s7vXr2c + r/diPb+cvMljHNJDhyJo6Np2yB3ZpGpKZgb64aYrd4elZN0dH6zm8nD/pDVurpEJO9wtD1nqX8mU + k2ODvpPttrlDyVZd9y+27SAPdyavfny73omhFWx/zLsvp+Vj+Zt6ew3x/X4pbjfNth8rABQANzc3 + Fzf2ou2WU6OUmqLF/bDsdKgamKKQvdstCjWuhf/c3l5OlFDCOPxDgoMZ3iLVVdddBw2+apu24907 + 5r9NeTsukF84tbuFGrtyWB26SOTquip3l5MOtcN8cnr753a9fXx/XHVPUH3BGVdOhJUOOGlzOCec + 6UQOQV/ulzjCFjRt2a1L2ZQzFgbnBTWq4k0tdrkOPZQJ77moaZft0XlPtOOZpawKShQmTR7J/ICZ + ICHbaSmGrtz2qNQ3fDx069svLrSgNJnPEPfHoz2zPZz1olDGVRKZRhorY6Gk1hZ/3kvj1FdgViOS + CVoE70UobBS20MLboCvpCmlSlD5ImyxP0eq+kC4Ege5IPV+FGITRhRe6MFEknYT1CYeoK2cihxEx + Ia/4CJ843HB4aLWIGMEK/EgOGiahlQJy0F0XCl2ggfEOfYJRwsUogg4QVAgklCBSMmgb4V6LP20K + iV7CmKKQfGR14WRQYRzZ2YB21mH2EWr6GKRTEITcGazBoyC18vjhYJkABaTlbWmDl/rdFZSGProI + lU4SusMiHhrBIBgZ46IfCnoITugddYNOAXOMmFNUtnK2EDbRMhZSMF3Ijgb2xW1MohDe4bdBwQIR + Dp0xX4ORaQoTinxOQkkoCQEOAE++CZadFLwhbCU5Y/o0qwCLBkw6YFAJA3gBr2CqkJVDM44BWuBv + ZYxpDDwLU/O4l86pRsKYpgBckrQR1pSYsEa6hEaQYAEHABcWgjfRGK7zsKKSPgUo4g3wZWSCJWPS + MkF/+EzSQjCndMATpqKzvgX0ArwcbALzNRgQkg2NjzEqybl4DA7NXJAJWkQbG5lY8Wj12gC6Kx1V + Y4AML2w+QjdOMOYfibYByAWtHBlvGrJoIyuckxoAhBMhAMBwozwb1B5Q8JWCa6OVxBaUDfAMaj/M + G5MWgJ92InsckiN0hHyFthaJG8aF1pwSJoJpYsYAS3ad9EoJTEol3WgiLo3jxVg09EkS49EqKm7g + QQIZLRkushBBEXg+cXSP8sUVe7hnVNp4leBKkV2J4ypY3yD66LIgTTxMz6oKdR1NgRgwwin4bcSv + h2aBUQTFTMMzzeJVgVUIXIFHvIQBDU5AdKD9YD7gCNBlzEvaPwPPMBxx8oZWNzEAPAzmJAJM5RHL + DoakswWF4PjumE+65az8Iqg/wd7hT4hw88cH6r7ntGA0ZuCsenCasTAEEKZe8/67K6fYxDh/aOLR + BLfQxKMJ7r+78lpnCvawovGjK4IfpeRbiPxCUf+EJt4dmqji2AS3Pk1vFK4RCFAe0QW0SsAPpAcj + 2szIJoeKQeR48rRWma5N8j2OigHLC/AJLF0w+hCmNHYEmzHPQRoiyBHkCpRBl4HUMGFJDDvSfiRy + CCMQAxjFCdAkeQMxrEG4bOHpbSAGvalHADZITCN6mTK8pf8suIVBhHBQRDd4FsEA1eF6kACJgAGE + cB4no3lE0mDjxNRBlGtIcBCHTiBIMKw0JL8iT3QMJxKmYmtmDzAKMIjmwF8hCoSlDSQ3sCCmCwEC + kyDzYcVG9chMcDF6IZF46hJBjshjWBEKUisTA/jEO9iRozD7YA3kEEYapOMh0eDakFrBh8wxtnDC + wZyRySVzK1gB4WPAzDhp6EH+Vpkn6StQLxztqeLI0dQH0As5gcBkMCuysu6ZQ3GLg8MaDgyLbOdw + JxUV+iG3I6dIDAi/oBOD14EQkH9lgZiKQWXyBy6QqqEZ1CdXAMZK2Yw7R9wVMhB3Efzkc7oAyTsG + LG4w7EG/kVBTGRrQB8QQySnEkc85GHwOi9lA/8LmJGxYBnmWAEL1AOsyYVsWg8jVIAkHfxrkLIP0 + ilAFWXOGQK2iC0hBlo7zND7oVskENydSP/2rmFVoLEc0gi/AKNFTOthRZ8/7dxsLf0frKtQhwFFm + +0gDEttowsn6IvcBO4CHIAOUBFi6wFjAkEwEJEDNKoVhBgUQJ4aZFGnDsC2LFODK6ZykIwg2WnIi + nBiZSV2RSP+Yg2CNpMgxDuZAwQMkJPxGUHpOSrAE4S+BsBBeM9vApwUrDhYqI1Fo6m+ghwFVg2nR + AGpybsQpRoZxfCKDk6ATYxspNcqAlO0C8wzCEM1RmkjwsMv5CUUe4kCyMEINICPChJIxc2YxJEgo + RTw5z8oJ8yUMiU84l0mP+GeZAbYZiwvawWK+DEPYQ7icMZkqDfgd8YlsLJkwIss04CSxIrHMmuA7 + SR2OpQF9nflHJ9YMqOMwQdZZZBGEDryLYo5pFHMFQFiOQVGUwHBOLiNhjxygKFeBFVIIMyY1zcAE + JgxjK5GnGWNsjruRTFlkbmI3xyEEyUyTaLTEMV8UPJnMZZwYShPWFDnk4MfEQpLlHmr7XBVTFhxu + dMYFKwVoZRK1NyMpAeMBMNOgNig9FhZQHlPSOaYhn2WSyTHtfY5pRCCeR8vcFJRfQcDeI9Ph7zVq + AeaohBwVkPN0QLYK+nAr50O0Yv5SuRssxGfWqCwK8AsoK6AKBQAJK1uwKoT2oFU6gaFR5J/wiTkO + Eo+DFGoPL6/AuQ24I8YKk0F4G5MZh8QG+lINynhYwq60cuHQM6AKdHBBcAC+QTBxyeKQEgKjI58d + yyHB2tEAcoSlK0LDGtsVeoU6b4/1woo5KM++aFjdk73hVUmsI/dXGWW8xfRmChJfpppGMhEqu0Kr + tIeSrJgOAqFhtgbM461j/RFBp7kzazxwMEqlgmTBrDiWzDmTogX3rnL6ZBZkwADYhc3FnYe3ub7i + 8gGhnaMIg0F+oBzPdJB5y+V8lZhLNKAUR4LO7GSz2jFTuCY0bc7XzBSSOYrKMAiZhGDAxMWxySfU + C0zqrGAhkgefMzRMFcZ1H2yCAggRJUB2vmLRgYhB4QHN4Y8CTZLP8uA3Sx25Wktj3QdSwQVGwA2P + gLE8s3ThSgh3EXMqp3lcJAQxyEf5HAdwdl45wgKjyRJ1YDJHdmOEQWkiRZMTc9VP1fNKlCUYTcyF + HtdWhqk+l+60qsqjs/wMVNVwWYFhSfSClkfI84SuKk8Fo4vsSZEXGQgBLtkMGMOj4PakBNy2qcIv + 9stI46hj9kHsEWQi25IWwsIolzqAEtcQCEmWDiw1sZLA40Dkk85BeigAYYucshGdMqsHEmedB6gA + Q8hHNDiLPq7uBQHgOKoZsWOy5sgtTPYsZVFAFVxgFKRSFk/AjOWEYRqWRYAJqTbl6p9rOfAaCzlH + dCNyEMfwUrYUdwDAYJI+kVzEshb0rmdFMaLHPqAngm1CRXZ34zKG3lcso8UYK8wrNtdZnt1RNWhP + aCORcAEP2zrWB2Rid1h7OZZAXNMaQZo9FBGGazXWZ5ZeJttiAO4fjPyhTaYi3AX8aRWdE9VYZ+Cc + K2mwlqOTWcumDCoSSDECC4UJkczNBkw9l5fI36xMU/b9YVXLUhHQpS+kyw7nyl2YXC5mwLIs7A2z + CVeseKgrogxEgoPNakIcZgmkpjRuDWByzPe0F6sAjuUzUGBOnWeq6a58QhktwFaka4zola1yRsWy + B2iKwA8pz6CaQGBzpc0qPRFWOq0k0woKzBUWQHueyYqVzFHBdM/0C5ruUSZ4l4NK+yYz24EE8pFx + wRVOxSTnx4vA/ROuRyhIcn+IsjA1yzHGURsSiMmbPvZI9jzKgvsGJE7J+qhwx7NZgdp0I7nHgzh6 + t4l0o61IoSkTAh7ZwznPQbNiIFnmE5cusBGUQ84TLBgCHAI0iLycIQ1hKBtgTcyLC0ukBQQekpzP + qTHmzBhdDiEmRrZHuigKpDd/NKFRFYM/Fzk0YS4aYSUEE9DkuC2RXIMjSiaH8iyAG8azy4xj8pEm + KYiOPHFzL11xTepGnfCjUIg37h9p/oZOeQFIVuPuC2zvAokR6jugKiDkHWG0YhGV54bJRlYb1sGS + nBMTA2MW0EqkBpvZyTGtY0mTWP6CpQpu5bDWRpyzgCdfjaZonMtudUe3ptGt0F3DMkFlx6i8lYXy + gzVxXhMwJ44AI6+nVbShYboyVQ5YBCHjg3t3mMBI1Y50zqemR/TJIkOseEDYqoCNqBL9kbsfoYQJ + IjJ5ZoWHiZOLxnIPMGEpzZUGqtNCmRFfLicjm3UkSlJPX3CfhMshoMMwceSkqSpX5DTEPK9dLv+x + RhRjegITMCGxdvYy86TmZk8ucg28UbjH0HutWcNBOdUw/6bDrhoXZBDKxUGuxMAlrF24txEQz2AS + dYqbpA7+NpqLqocRkJMbCzL0lmpyDZunxR2LfPwA1tNBahYPJFjub3KBfDhz4vlA63NwpY4OqZBJ + FXci8nYEdzwd1zjEHLO8SYBq/pHXM6CEECtZjAt1FuWGjSNjROV9Oxb9+Fdwtw6a6eN03f10c5n7 + QYP6c4N67oXiiKJrRM0xgDMVCcY96qvzaDxa9eTVw/L89cP772T6uuyqFXpwf1+UFb+7uZxMx9vT + idjUw6qdX06W/Hiha/mK4L7LiaSubsphva/FoqlvxXqoN73kZzj5fdJJu3LWt831UIv1tq8HeSeV + aOrFgNN7HcUOQL7whxcdR41h5xv8DfyEY9mVd4SXuO1fgI55upH+/D3Rb3rBYz/2TunDb59+4T0T + 9+JQJxoEJyqfDRJoGTPfcLOVu6PjleIK9syBJ85bb3fXw+FTnSG//zu+mcsOkfn55PwF0+iqg+Oq + djNrZ+3toU19uyu38xqqLcqmrw93+foOzSG2vdnW8zf8ZGvscz20X7WbXVMPkNUuFpjyrm6aalVX + b89lsGl135QSJodPb/4xgVvLqubLYL7qpMByeyfa7vAZ1/i++OLiAkYum+t6/PLlBEHzrt3NAR9C + dV9P7pE9Honi48V7b87W2/xy83BvvaX35fu4+/m6H9aLu+PljVxcN43Y3QJ2uztE3azt+DJ1PI0g + ZKWbIdksRf6wqK83a8xjLjKuasTZRvSrct7e8NcDernbO1vKmxU0EKt2X3cvcJkfcbtmfNfaXg9Z + VSL6cKtbb5dQ5eRiBmPlFd9mgKIbhtRBQ0W19cmgWGUelRmD5PC2MZtoOnn1fbsU320zWfze1sqv + EnclQ+lTDDa7HoZ2m+f4G21CU0zyS/ShXMrr3bKT48txuejqGvqtH74Inu66Fub4Bg/ET3yQTXKG + t7HvGdb4Epyv68+J7/a2ebFaz+f5y+7Du+B+Pa+Pz8mCVducd+LNbbnHTRyPN/FTji3L01t0iljC + eruJyN97Xk6+bTdnr5Kf+ML4VOjz37v/ji/Y+d4PydFsMGYTuacn4hV3MfdalUi6JE4sifTKbvKO + cYOMvGHZcPKc77RQadqNDOKkk+QbyPs2uFyZhyuBBH4qP/ddvfdmH3jenhotc+/kFa2PFnj46jyU + PuKt/DFAf++vTIf95+w27pHvZSi5iqAF6ZFv/cmlMPuHpzjD9vdX0ryju18Xx1tcXj404M4kvDt6 + 86MisgT/SxLc/SXVQRl2cg0Vnujq0XWnzj4JYrbLH7Hws42Dzz+EhpEV7+Hw3Q9/ewDDetd+1lBI + Ir62G6yYcJSFSCiOr7g/vXpwAP31Ov4iWPSJc8WTnUND/oJryq5Djjn5pObxM9xo+3r+2HD8dyh3 + Rl5HRumu6w9+SHNeB2LJ/31eiX3PdcLr8D9H/zyy/gdKwONHRL/MJF//9M0DdPgd3meMHO6x6W/9 + hnXxWeiGs8h9gEoO3BPaYdTn3g9UksHFBKLP6eUDdBHOxjRXyDzA7hORRz98Sgb4a33z4LctLj5z + xxn1yC2vz7wCQ56T8YZblecd4tm9zBHnbgRlb7Bqt98WV9yMXgWc0irs3bfxdXoqRdDwn+Kon2Ax + fst676zhcOOzdpgFthNjYI+jTI1MIvHzKeTYp9Y8R8P8vqnwquze1oO44vLoIUA2+W4/XaLexv3P + 2vRBJBgdpvZ7zxOoZsOPpVb6rJ55/aiYOr18dn48s+4/V6L87dD7scLij19F35flhxtjff5Zg86I + 8Noh3o+o4YYDruWxJOOWuGOFnR4aSHY4aTBeA61KUhg8xqo8SPPULk8E6dEP/1z4/LU881Xb7dqu + HGrxZd6YfSC/caP2syY9z2WA4+kUGw8rggw/Pt7r8yXe6SU4MXFF4VZPRdJ7Nj2F1BQNz4BVtU1T + 7rixee+S8Ya4Gv8zwyMQ0olP9cn/AQAA///cXW1z27gR/iuoO9dpZ0SK7y9p6o4sK3Ymjq1ast3c + lwwlUhbHlKgjKdvKH+v3/rLuLkCKkCienfiunc7YFAkSeMDF7mKBBZb/g22Ccx5+orh83dQC3VrV + 1YvpywlUkbU+XSacEDjxRaTbmQQLQmUS4CYUNg/0pyOc8s639/LJ5j5N75MI74rNL7jdM4lpm+c0 + UFbrieK6mqHZpmW4tmm7pr19ME9wj4yuGbqHfi1L3MH5Sk4GJYvyFXBE/BiV89lQW6jDts60wwVn + D6WtMXixN3m3KhSb5Yt38OvIdxbPNEPOFhPotlfPiomeC5oxTe7xd/fxiYLMPdfLBD5HrvBd3ce/ + tnGatlbf/eV9d65LxeZzRWymBgP4y2jQu+733vHN2P/+F/s4+Ce7joJEGceLiA2zeBph8s3o9FAP + C9W05Yr/sk6LaIcoR8eeo7oWz86kW1P2CzCzoqvQD/0ZfnTrp7/sw6zJYmFGB5clgIn0Dp4efmaD + 0ZgpTNgy6SpaNjDecjuJKqapxaz0pJqn5lPGkyxYhl/zeZBhX7JOamyONoSY5D7CPb7SFLnwSXC+ + EgrjCswqFGVpQE7BDY6Oy3tc92BhUoFNxZU79veL28ZKOC4fOlBuc0VP40dg8WW4X3Io7kDJ5UOv + KrkPhCz2i8UAJQWUSbe3BXbXSamI9xofnVO4e1fsMcMpfRNljOb3QXjgd4cHITHDKAAKyu8kEO7I + vULR47UjdRkJKQqeUXENumlArU3R70CGJPkwnpMdH8Zk9Y5uGM/AJJbGtu0xNxreipsd+B6TBIzK + o8ba8d1zlediFgUFevDSrIC6FKsMa8rdJHs5J8WSZ0RvRRLl+TrmtrBwq6DDZQb9Q1gGAuDppVEU + gFJcrVelWdToOzweUFVe2fFVNeS9X5Nd1mhQUX+Hd5SM9rZHj9EyDUNhV6iGD0NZPG6n8lULp4Au + dLRIVdtzEhPvK2btKV08RccE+Mmq+Q54/gSHw1WqxpO/4evEq52q7Fp9nKSyPtrlA3gj7jCnrhRj + Y1RpldIut1x+oHQGPdY6KYCxKEuTj5j7XctikAvK89K/KntkecHogO02dd616uKAcZaAzf1cSkoR + TJKqMy97KUqbV2qL+LDcCkw3MSPf5VpkeHp8marvu0g7+B9RKdVl6S++DNC5IhJ/Yr08j5AKZSbQ + KJG47GKh3RKA76MlnPBYh/SQzqotr6XbZZqSJ7R/9fGSaybxYB/SJwGYf2dJOkGHoEj3Vc34qbrS + O7phdRzP4ClUBYFpHMYs8iQAzPHooidhjiO4UV152C9WV4apdQxP38cxD+PcT4op4JydjPsSzlkW + bPJpAK11EhdIADbO1nlR3XdVz90iOx3DMTue1fCO1mFssDnXgH199elGwr6G9A6YLVO1SrJVz6qT + VLOcjuZZ+3D2Ybj8FwAb/UOCOkEdW0NxdanhNK/jato+itPScGGKBB2fXvV3Gi4J4BY7BzuqmNcg + Hb8O6blOx/PsfUj3MOS3BQD+/FmC+zlNF+wWurmUgZgs1hjdSoxwKmTNkUiquR1HayCp1/KyTwk6 + xcd3F1fyyz7FSZxWl5bUeo7vdjyzgVX8lrZbpWgdjIZXYwloBOnxbMPG0XS+hA7hflMDtcwtqKsD + j5oNTalrh1GRO2XWvFnGxYaN0lmB+/WrZFN1a7T0PLPjOw2U1FuUTPhAM8anny7PJMTTLJgVn7jB + sEWzt2ggd77f0fQGuddbFAx2SIA37I3P5TeMh0GNP03Vqsm50bF8r+MZDfyptyiZfJ6usPXOr4Zy + 60E6tF4NzKiB6TpAWU1N1qJT8giBBjJMFLCLeAHmWrh9E9WrcYcN6gSGiA1QLfokmyTPqL5OLv65 + o77AcnuuIbk1JL1jmvDvug1YLVolXyUPxP8Xn3b4P1kvH2pYtld/K6Nj+g2CprcokxVa9sNTCWUY + 3EfZ6brY1IB0SVPaDryU3cQWrdqjyEh7jK93tQeG4doWr/qSpjItv2MaTgNYiwaZpym+2fnV1elu + a8VLvCnGi3kdttaNg0j7WsdvEjOjRYXAuBtQLwey2uon6TqcJXUVoqtOjU1M0+tYXgPvGy0qZBEl + MYB9Hlx8lNA+R9kU+p6LeCLhWVoNT+tYVgNPGi0a5D5aItzZ4FKGO4P0dc5GOAaoU1Ovs2bHMlyA + bGhEo0WRPE43SM7b/heZnrdRFsCt6AAadG4mtJ/Z9IItuiSMcfx8+nEkc+c8YnfQh7PTOF9GGyas + 0Dp0nVt9C6S9oS8wWjTLchlil355eSp36pfBMgVYGK7l0JXXEes9HfQ9SN4GbWa0aJiHmMb0nz5e + yvKBs0lhmma1cWsFq9VobHUMA8wXvalFW9RN+lCgnXv1aSzbuVeQvmMDyng6KDe/yQI0WjTO4/ob + suztzc8yy95C+lZja6ovvZgJ9PS1Jnq26JvFMtygMF6efpGgFukyDDYY2O4Anm6bYKn4+2hmi5oJ + wk2EcL3TLwMZrwd3lnUoSZXqoNNMtwmsRc9EIartwamstQfLMAoegVHO0G2xzy6a6tQUjuWBEeg1 + CKTZonGKp3RNHcaVbJUZNzusAsN6abhg6HbHsxtY02xRNkvEupSRLtdNL2ZLHbxjGx3dbeh2zRZd + M82eUPz613ey+PWz9CkcFVn8EDUi13phGIFZegOXmltNs+xux46n14MvH25G7Ozqdsz6vdE5+9y7 + ZB8vR7XitdrYBF7KtDu26TUgtOiVVZHi4Hk4vpIHz8MoSYtydppPFNaBa+8FVqDTBNqiVaaky/o7 + qqyfLqdpFrLe9Jd1nMdFXYcCZI079aZBn9miWMBuQPEbjEey9A0gfY83NanjbUJq0SurhIym4cWO + 0TQMkmBZxNl2KBRH+QFQuwHTatEu+TLFGerR5dWdbH1COlgxD9EBHL9uLHXFfEuX5nmOG3wGRbkw + PV8ESSKvUQfVlmOw2Pd/UBSmKPVpf9mLWnchQYku41O0G8UTc8LaYVdSPlG+35fk2TAusnzLMl/j + S6q9v1js3rSlwNA0tip3uuToVJyb1YTx3Dzicbz5yqW5WfdS7BDxfRLXXDQmg9Pi3QJf+9hgT1H0 + kLPgPi2JzBRW8UIZnxWncKNiRouceHxWMJOy9QoFWCmqYbgynaPzLulO+Ix7GN/HRZAAuR6jrADp + W94DgYp1FmGI1iRUKJYy3CdnCCsw+DEQ9esEuPrhiIdOXaboywHSLNMMg+NldDpLkyR9qiZFJ+iL + OSFQMJUIlPW2oOwDgYLVBqBsSKDk50LGxvcVr46+MlrAlJeejTeg2/06W9OOBKIbLerTHdPXXROd + IEqcK1DFByQN8E1CxFDi5WOUFwrGpn3EidofpEwve2AxGOccByp6B0AMUz8SELvmQH/foccZVP0D + Vv3XyGG+nByvYaPHFPeUJXGxQTJhwMFAmYDsPYGUKBgMGq4xqjTkzRZKATayMk+z+Bt2Pj9Ks9sK + m33M2WVasICdBCG7w87kDgNRB+wCsceAzchHes6xv5upfiMqBtNplOckZMoszZRiHpVSmM7oKhbO + 4h+nWo+wuA8ZI3tjzG0hfKDH8ap0TH83lXQG1jSS/9epNImW34DhAyJSka4U6Noy6CG7htHV9K7u + +75t6G53GhTzOAK2SkP0ayUBaGnlab6pySIMv9C9B/UDnguDONko0QJ+QMfluKoI5Zc6TmUBkpT/ + MCH7VCXgtjRkA1Eldjff1KQWq8RGWCXWY6dYJTbAKuEYVVRJBGzHlX35DsFPBG3ekNzAlETpPBJr + k9BFCU0PJFuGCmm+TRyB2s9XYNnmymIdhkRjIHYAXJH/fZmugnuo1d/0HybgF0RiI0JinxEJufJP + f3w23L8CJQlvnwdphPaWBHmxlObwZLBANoqXWQoGijKH7iyhfpREF6wjoOWPi+ioBAI2IiB2XgJx + ue0R0HfLp8Hp8yI19i0AS5PzDDKq6B09y9YspztPn0C6wCSrSWde7x5XUYa7PeESA1L9OMucp08g + OyGryV7JL7jERvSVQ46KXxRA1N0+82d8pbqEXkd8d+5b0u0FkjZBCkFHuaVTTB3ldK5A7lzZQKXe + Ut5OkDZ/Charv2IXuaUTMhqOTnAhUs6uZgyn0r4A+HcJ3yuJ9GLpAxLlcY4rShS0TRcL/IaEwrML + W3WyTjdcEjm/GT8uisMKlQ2UvkAVYiaM1RNA5WLJ+c34FbmktTP/R3t2mxZNfQa6inFPUA4By+V5 + DYsNcW2eGCM2PzdLUyRCuSQlwU97TFJQ8eVGbI9GUfVRa7l+D1cGK+4zkc5mqwLjEeGKv2fFEUv5 + aASKN3jCRPHkop6Td/cZKB3xixt7c1wPCJfBavdhenL7mMHoGXwYrhVcbqkYOzUNefHit8yHl9vi + YWRpSWNHaDy5fdcr/KoKLnsAXpjSaAUGuUC07VDTQiKNonJJ7dyqj0hpeVY5KLd2181RIbSoYlsc + bqjn2+EpjRZe7W+NJftG8MHeWrRXFys2WfL9gm9TJN98x/eBlSXy9W1NMyHUMGK64s2aBB7EhVm/ + bYvQurwpLebjZ+zmzWhYi0oQL9+q0Oad/TvNs99Iv6849Us302/advQlJfQj4O9b0Re/U7UIaAUA + P3urgoMVeeh6QxiWc3vjNCiC/5Z0XUT3yDu/afussvgxmG6UVZrEU5xxHvIENqSEtyIsTqLkOCWw + pvUUOK9Bs683efRWEDRFSiPmIAZjBx2tkMIHrJTSIoVNTUpd3xu36Gg9wU9vTCL8ngXOWKA5nUR8 + cQK280pq5gM0OCKXcQLDTDCF16sQTzq45SKggRYUvUnXGcNAIc/q++5KhF+SGGjxjgw3XN1MdsYi + 3EZjgp4KI/1MpxHYFriOOkc79Gb8AZRQFcSpbg0HT9Ekyviogb4sgv7DEGydUF0lR/K6URGmRKwc + xe9mfYXcX7GGX+OwWjfqmhZGENdtXCh6OD9G/+GfyBP5gidMsg3bMnWjPW8WhXGGH+cq8x7+Ylhe + tlu3AKP+Qdmg25AWm5aFfHVtJ3Adx9AiI9I9LdTcqeF7+szXA3sW6FF7XYgOQVhyT1WlD2Q+0ge/ + tqt2+eQQtyz31+7yeRqgPwzZ8salu5S/RBYX+C5yuXJEJvGYABM2PQzAgHU0FgD7B2DHT4X1XVrs + i13fQ93YrwIT0aCAhgdN/I4xjGpLiHmiXUUvEgXzknjS3tPW62Id1cuihHQ2w3BiRkNaZcLLy5wH + NPIhKeSE6+5qF7NOJL7HQKPfhO85yOcA8yB8S9umA0ZcxNW66/JKFEsSLZpmus7yNAO1TvOvrQO0 + l7ZWbfMKn9FpajjSiwsQirUIRMWpSUWRg5SFa76NiHxQVVCq3Z0xr2mwA3lf3nZC2CrtXFucXg/5 + 1dxLlMSS/GsYBGuFd8EqoGaBX6kN4LpshklUPEUUualWNNfO1M3jeA8e56XjEKxpQmIGT07S9GE7 + 4VUqMHjbV8wmVMwk9Vz1XrfqhardInk6BSNXKA6lrIkcK+4DTVEwaP8P5X2+kbFhC0bj5kRRLcHQ + Cu6EKHLOF3Og8xP1TS/YZluPm3dok4eBIc6nmmKrNkbIVzHarq7xv5HBHExg/Blmqb6vM1N1bJf5 + qm54zFMxireveq73qDiq77lzDDVo3erGnH591fVdDGaq2pqDO0Iw9rjq+VCKC0h0qqsahrtlhmqY + nopx16uzR0O1nLmiq4YzxaNlYpxR1cHcOp1AbtsxOJ7rmomiWhhfFcrFmpjmI9bK6+ueisE6DZ2q + jS/t0MvQ679s40mwz43im6dbRqx9QPZ3ZENRjUNcKJaE/g8wIUUwUjE8s6Yatj51VYyfjzuGVMe1 + gYEM2ywv+A80t4oRyOHHtG1FxXgnqm32sDmR/fBI+5cNZqu+ESDXMDrwyCeQy1UdywHe1XVPHDGD + rnqaBffxs1eqAe/MjyKXo0FpPuXSXHGk6BDINSYyr8Uraosj5QNpwJj3quHxPI44cjxAslGaepaq + YZBgOlLIFhVFyNXNR1WzjQDz2IwfMSduraLHDTr6tjiK/VSebaqijp448lwefrIDbgOtDPweCR0J + j4E0WJobYNUxLDb/wVwONg6UubcHvIn77+Nivp7sa+Ewevw9uZ9XQ2b+W2BohibJWVycryf8W3D/ + ff4/pIQxak+/VLWkdDFqNGgm4HeXFC9+LAYaEzgNmNuDJ/DDLD4oVUu1gRuAYz0QDEN3+YnloaKE + FndBZDRPgZweCo8JDONqJnC46xGXgwbGaN86akfpHFjZwq3DGA1a1WnjHsaw356qPpbrQBUhDxTl + VSeo0DViStDN+DUeVcOPcmzPQTnza3glGPtgogdKWfWB8+AuvA6UY7kqfj0Fb4GaR2jT9FBg8T1t + 7Kps26YKmf8BAAD//8Sdb0/jOBDGv0oVnbRvICRtkjbVCgkt3GlPu8AtSHu6PVRBW6B7haL+WS2H + +ED3Ne6T3Txjx+PxpqUUpHsDTpM8Hk88juPkZ9s03Z5yXgeJFKgoKEnZYWuwKho5huzF8g18Ot0m + oNlsIz/omiBuUN3fRqiSh3I+tdgjN2O1Jf7LDCSuUCfL+hRcMRa+g0/zGEseNPmKYJ5yyhsz9ce8 + zBM1F22YZXSrdIyli6hY7TJuYj4GMpkubgOmUERmcZvzRwHyMrdpLgZZQeGddfgGV1LtKEqUHqs0 + kA8yKntexq2kpAa0E6NutCHSyVFC48aYJ4qKs7Sskm1uiOk+i/oV5x3kQ9WouZfig0KsdsP/bFtr + aua7ZlVXqd7lzSZX2cb6t1PTyfTHATq1z0VoEFyvMJXRp3//Mei6eTtfrf4Y481rgz9imgHrHE6/ + DQdmbGCTXu3dBfVJ2Rbbna2GRYLxDmb88e1Mg2n9GRa4B+JNTxr37hXbD23oaPi9D54hHk1e1nOt + HS/axeQDzEvA33HjaH6N/rhh+zGIROn7xsWwMRiOz+/ZVCyVQc+6C5RgQsdSnrEePzLNrn5QsOu2 + miVVDw9+P+3t753u9XoVB41lyC1Et/N1NqEHgIcIH63Nou4DL696XG2Mbi8n+I/zom40nF9GW5aA + pU28uaLt+aj/F3mhG+GNHm3zsAhvrZzAgY4kd1+f317h6GqqBvrVzK8AU6Iuz6qwFd0N6BBO0/4+ + pXk6BaTvzEbKOwZkxXZKCVjXaZvDJ+bUsqD0tf29pDQfk5kzvyGdtLfKTk5bC9paMhkD9vaD3WnR + ZVvmMBK/bFOzljTxCzkxpf4OVuxLEursFmRC3qTDUmqqS5w05s02dStSdoh2xQ0JRKhw2Bd1+YNL + SlGhb+lZG6mBS/YlJfsXLjWrUuPLyqiilVCwJI90SefncDnV7unN+Zgyw7v9EUWq5Pkdg3I8WQ9d + GbrLDs30B9V+VPZp8OsjKaNe4wyzej3df8mBPHA40F6EtyZ3aRJ1i4RufFtmeu3ulweyiez1at1P + oJelmgXoMmxnapp2Mb2MCsvcNLxeAczR45YRbvrCQJRFmPlkX44RZV/OUspOrOWLgUMWsV+mtRCy + L88csi/vUGSXQeZnANhYMhDS2Ndk2Fh7wPLGTjP3NU9+E0UGirVYOw3dabBiJ1Yod+4feR7Q1LDW + LcpA17LDTrft6/7xUVSXwsE6g6QIvWAQYZdBRxn++cORZzgTwL5eFnrVcsBOrVQ+PT46FbUfMV+t + nLWUsoV9nXKa+NLe9dc4r6/JRK+vaaFe0VTRBWxXZIXZDSRzJenIXRFVkQU217OVwVwtmOm67/Bc + EVTRBQDXc6qhb7ViUytaBlf0VDCdHHhqAtn6iszZ+ooWtRVFFUqAaUXTkLRarq3lHE8rgiqcQMz6 + 9Qi4rBbMO4F9DM2KnIqi430Rc1Ss1kvDcLdsrCgGYXP6SYUNj3N4iky/BkU2AKwoqtAB4qp8qPnW + QFu39Y5ylbZexc7hgReVQrFqzUJfIsuyiqKKHNCqIumjqlo0S7QoA6uiqQIHSKpoKh5Vi6bBta+o + VNFV8QPuVHQr6HSlpENPRVKF0P77E+/q16OlQQZBbTCAqcireAJCKvqaHw1kgya0okhFWMUVOFFP + eBhAolo70T5xqKhoqyADDCraQoKuFLU8qEiqKAPx6V054J6+GhOY2kQLfYqeijFgnaInTOdKUUt2 + Ss9HhRajm6LJ3GYgF7YDlt4UQRVZB/tew7KEztQZFDrGLKMp8rrf9/nIu5NWCKYWzMN+lAUxRVLF + 16En6JGWgWZ4A7C8pWiqAANRKap1OGUgr5tvA1WKth9dtzvnorwUp9Tyie60OahSclBhBmxS8qhh + JgN1bTyTk6KsguydH781ZGQgrGtG6vVeWyrQQEB6tc7hjyvlWr6cijNgjl756xjHlcq5CGcq2sAy + irADGVeKlXRXPKOnM3wFwg9ZZtJF6vQ/Hzcj3cUUlmz6mfJGXB2GHUy4Cl+EEk4W0z5fL/cJMbut + Kt/a0FhtqV6BenvKbkenKbM357ZefHVegqu5wraed5HW5q1eXLrnYGQblub1oafaUv+PWJhzjEcR + +Y6pqCzllnqU6U1FMS27sk8RIuuzWE9ZbdgNZfOalNGLa+Xa2NQaZairkjVM0JuVOFBtiV6Xc/Ia + RqFh/LIsZZBU0ZjY+XORJM1iTWRn05r2XBbpyQLWVLhNWJoX177NsKF1iufqIvoevd5h7+TkOOri + VS1t81vhroELvpjuzZmb/TfCa4Hh9B5Dya7rw70POvNiMRoP3vMrgu0Zhcanq+OT7b/LXz+OP5yn + p1/p3NHsZ/r9gmqQG7C+ms3uTN5kI78w+TDBonfUHTp7fGs/J919u2Onerie34x3/wMAAP//AwCA + PdXk25wAAA== headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 6e63599fcb508898-LHR + Cache-Control: + - public, max-age=0, s-max-age=3600 Connection: - keep-alive Content-Encoding: - gzip Content-Type: - text/html; charset=utf-8 + Date: + - Thu, 03 Mar 2022 15:19:22 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Server: + - cloudflare Transfer-Encoding: - chunked + X-Content-Type-Options: + - nosniff age: - - '0' - cache-control: - - public, max-age=0, must-revalidate - date: - - Thu, 20 Jan 2022 16:06:30 GMT - etag: - - W/"ac63-455tmHsaZ+w5ZVk06wUCaTSKZkQ" - server: - - Vercel + - '104' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 strict-transport-security: - - max-age=63072000 + - max-age=31536000; includeSubDomains; preload x-frame-options: - sameorigin x-matched-path: @@ -339,9 +323,9 @@ interactions: x-powered-by: - Next.js x-vercel-cache: - - MISS + - HIT x-vercel-id: - - lhr1::iad1::6l2sk-1642694790141-c6b36beb8349 + - lhr1::iad1::hnkcb-1646320762895-4428714bc531 status: code: 200 message: OK diff --git a/tests/gamestonk_terminal/etf/test_etf_controller.py b/tests/gamestonk_terminal/etf/test_etf_controller.py index 043a342157e..9eadc48b1f3 100644 --- a/tests/gamestonk_terminal/etf/test_etf_controller.py +++ b/tests/gamestonk_terminal/etf/test_etf_controller.py @@ -432,7 +432,7 @@ def test_call_news(mocker): ) mock_news = mocker.Mock() mocker.patch( - target="gamestonk_terminal.etf.etf_controller.newsapi_view.news", + target="gamestonk_terminal.etf.etf_controller.newsapi_view.display_news", new=mock_news, ) diff --git a/tests/gamestonk_terminal/etf/txt/test_etf_controller/test_call_candle.txt b/tests/gamestonk_terminal/etf/txt/test_etf_controller/test_call_candle.txt index 741de460a1c..7092028a490 100644 --- a/tests/gamestonk_terminal/etf/txt/test_etf_controller/test_call_candle.txt +++ b/tests/gamestonk_terminal/etf/txt/test_etf_controller/test_call_candle.txt @@ -1,3 +1,3 @@ -Top company holdings found: COIN, TSLA, GBTC, ZM, ROKU +Top company holdings found: COIN, TSLA, GBTC, ROKU, SQ diff --git a/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_controller/test_print_help.txt b/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_controller/test_print_help.txt index 717f6171854..0728ac06eaa 100644 --- a/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_controller/test_print_help.txt +++ b/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_controller/test_print_help.txt @@ -1,6 +1,5 @@ -Degiro: - login connect to degiro's api +[cmds] login connect to degiro's api logout disconnect from degiro's api hold view holdings @@ -13,5 +12,5 @@ Degiro: companynews view news about a company with it's isin lastnews view latest news - topnews view top news preview + topnews view top news preview[/cmds] diff --git a/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_view/test_help_display.txt b/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_view/test_help_display.txt index 717f6171854..0728ac06eaa 100644 --- a/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_view/test_help_display.txt +++ b/tests/gamestonk_terminal/portfolio/brokers/degiro/txt/test_degiro_view/test_help_display.txt @@ -1,6 +1,5 @@ -Degiro: - login connect to degiro's api +[cmds] login connect to degiro's api logout disconnect from degiro's api hold view holdings @@ -13,5 +12,5 @@ Degiro: companynews view news about a company with it's isin lastnews view latest news - topnews view top news preview + topnews view top news preview[/cmds] diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_ba_controller/test_call_load.yaml b/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_ba_controller/test_call_load.yaml index 3aadf50a0a9..3584a962b84 100644 --- a/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_ba_controller/test_call_load.yaml +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_ba_controller/test_call_load.yaml @@ -13,38 +13,40 @@ interactions: response: body: string: !!binary | - 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 - 0d8NQz+snhxOu935/C/JNQWlixQAAA== + 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 headers: Age: - '0' @@ -67,11 +69,11 @@ interactions: content-encoding: - gzip content-length: - - '1789' + - '1933' content-type: - application/json;charset=utf-8 date: - - Tue, 22 Feb 2022 08:08:50 GMT + - Thu, 03 Mar 2022 17:19:57 GMT server: - ATS vary: @@ -79,13 +81,13 @@ interactions: x-envoy-decorator-operation: - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* x-envoy-upstream-service-time: - - '4' + - '3' x-request-id: - - 69a9eb2f-ee02-4875-b32f-54654da99cd5 + - e3e78e42-f3a9-44d8-b1b5-b492ebd49e8b x-yahoo-request-id: - - ftid9jdh196gi + - 5ospvq9h21u5t y-rid: - - ftid9jdh196gi + - 5ospvq9h21u5t status: code: 200 message: OK diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_finnhub_model/test_get_ipo_calendar.yaml b/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_finnhub_model/test_get_ipo_calendar.yaml new file mode 100644 index 00000000000..37d0bc86655 --- /dev/null +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/cassettes/test_finnhub_model/test_get_ipo_calendar.yaml @@ -0,0 +1,70 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.27.1 + method: GET + uri: https://finnhub.io/api/v1/calendar/ipo?from=MOCK_FROM&to=MOCK_TO&token=MOCK_TOKEN + response: + body: + string: !!binary | + H4sIAAAAAAAAA7SU207jMBRFf8U6zwE5EZdR3yITSqTSlKZFoBkeThPTWnXsjO2oIMS/jzLhqiai + BMhbju2ttawtP4AoNUPJVY4GBr8fIEfHYQABDfw9P9ijAXjA77IVqmU9H4fpSXhBhlIvUIIHCot6 + PJ+FJMz+VsIKJ7QiTJuyXq2KBTfJbbpCwy0MAtp8HpRGZPVBn+5TCh5Yh66yMGgW8npyXyy0bLLD + OXjgtEPZJF2irPhrHH30+oJPE0Yixc3yfot/v0XA/9VDYJqwDoHnuC8IDLHglvypKA2OSGRLbZwl + 0V3JjeAq47tZHR9+3moYRVcdVk9xrVb+OytVSfmikpZo1iTKqwz/445c3gLbHHkCbX5eKDfCrXKD + G/UGtNmyTVnPPwaE8XUavd72ZJokp1t3SuK2rh/0qMokZHFH1w/orpfa2XXtVoSdvcO/JEy3VoL2 + K/qooxL0y/QMS+FQbrRZWxIV3CyFWpJzNGvu7I89Puyc9Xl8dlOajYbXJGQX8ziNZ3EyJiyZTr6L + vA7/iPzm8R8AAAD//wMALKjsCwEGAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin + Access-Control-Allow-Methods: + - POST, GET, OPTIONS, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - Content-Length + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 6e62f07ee8f406b2-LHR + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Thu, 03 Mar 2022 14:07:37 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=LUavwMra4cuvWTjGI14fnmnQafbFQmlpCOojESb%2FyXVY52J8zBvzWcHtXCXwCsSxNRrbucJQRHtlAUHUCvCLMX3eVQxQx%2FAAKGK%2FR0FodmtwmznnB9doJVXllNql2%2B8DSxy3Q3kHHCau"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Ratelimit-Limit: + - '60' + X-Ratelimit-Remaining: + - '58' + X-Ratelimit-Reset: + - '1646316499' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/csv/test_finnhub_model/test_get_ipo_calendar.csv b/tests/gamestonk_terminal/stocks/behavioural_analysis/csv/test_finnhub_model/test_get_ipo_calendar.csv new file mode 100644 index 00000000000..6c7f9059181 --- /dev/null +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/csv/test_finnhub_model/test_get_ipo_calendar.csv @@ -0,0 +1,9 @@ +,Date,Exchange,Name,Number of Shares,Price,Status,symbol,Total Shares Value +0,2021-12-02,NASDAQ Global,UTA Acquisition Corp,20000000.0,10.00,priced,UTAAU,200000000.0 +1,2021-12-02,NASDAQ Global,ROC Energy Acquisition Corp.,18000000.0,10.00,priced,ROCAU,180000000.0 +2,2021-12-02,NASDAQ Global,Games & Esports Experience Acquisition Corp.,17500000.0,10.00,priced,GEEXU,175000000.0 +3,2021-12-01,,Spark Education Ltd,,,withdrawn,, +4,2021-12-01,NYSE,PROOF Acquisition Corp I,24000000.0,10.00,priced,PACIU,240000000.0 +5,2021-12-01,NASDAQ Global,Roth CH Acquisition V Co.,10000000.0,10.00,priced,ROCLU,100000000.0 +6,2021-12-01,NASDAQ Global,Capitalworks Emerging Markets Acquisition Corp,20000000.0,10.00,priced,CMCAU,200000000.0 +7,2021-12-01,NASDAQ Global,TLGY ACQUISITION CORP,20000000.0,10.00,priced,TLGYU,200000000.0 diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/test_ba_controller.py b/tests/gamestonk_terminal/stocks/behavioural_analysis/test_ba_controller.py index 1d9078b87b9..cd60e9e710a 100644 --- a/tests/gamestonk_terminal/stocks/behavioural_analysis/test_ba_controller.py +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/test_ba_controller.py @@ -389,16 +389,6 @@ def test_call_func_expect_queue(expected_queue, queue, func): export="csv", ), ), - ( - "call_stats", - ["--export=csv"], - "finnhub_view.display_sentiment_stats", - [], - dict( - ticker="MOCK_TICKER", - export="csv", - ), - ), ( "call_hist", [ @@ -515,7 +505,7 @@ def test_call_func( "call_queries", "call_rise", "call_headlines", - "call_stats", + "call_snews", "call_hist", "call_trend", "call_popular", @@ -543,7 +533,6 @@ def test_call_func_no_parser(func, mocker): "func", [ "call_hist", - "call_stats", "call_headlines", "call_sentiment", "call_infer", diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/test_finnhub_model.py b/tests/gamestonk_terminal/stocks/behavioural_analysis/test_finnhub_model.py new file mode 100644 index 00000000000..0c59287ace1 --- /dev/null +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/test_finnhub_model.py @@ -0,0 +1,40 @@ +# IMPORTATION STANDARD + +# IMPORTATION THIRDPARTY +import pytest +import requests + +# IMPORTATION INTERNAL +from gamestonk_terminal.stocks.discovery import finnhub_model + + +@pytest.fixture(scope="module") +def vcr_config(): + return { + "filter_query_parameters": [ + ("from", "MOCK_FROM"), + ("to", "MOCK_TO"), + ("token", "MOCK_TOKEN"), + ] + } + + +@pytest.mark.vcr +def test_get_ipo_calendar(recorder): + ipo_df = finnhub_model.get_ipo_calendar( + from_date="2021-12-01", + to_date="2021-12-02", + ) + recorder.capture(ipo_df) + + +@pytest.mark.vcr(record_mode="none") +def test_get_ipo_calendar_400(mocker): + mock_response = requests.Response() + mock_response.status_code = 400 + mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + ipo_df = finnhub_model.get_ipo_calendar( + from_date="2021-12-01", + to_date="2021-12-02", + ) + assert ipo_df.empty diff --git a/tests/gamestonk_terminal/stocks/behavioural_analysis/txt/test_ba_controller/test_print_help.txt b/tests/gamestonk_terminal/stocks/behavioural_analysis/txt/test_ba_controller/test_print_help.txt index 5fbd0cb9959..1d1bffed68d 100644 --- a/tests/gamestonk_terminal/stocks/behavioural_analysis/txt/test_ba_controller/test_print_help.txt +++ b/tests/gamestonk_terminal/stocks/behavioural_analysis/txt/test_ba_controller/test_print_help.txt @@ -6,7 +6,7 @@ Ticker: TSLA [Finbrain] headlines sentiment from 15+ major news headlines [Finnhub] - stats sentiment stats including comparison with sector + snews stock price displayed over sentiment of news headlines [Reddit] wsb show what WSB gang is up to in subreddit wallstreetbets watchlist show other users watchlist @@ -30,5 +30,4 @@ Ticker: TSLA [SentimentInvestor] trend most talked about tickers within the last hour hist plot historical RHI and AHI data by hour - diff --git a/tests/gamestonk_terminal/stocks/cassettes/test_stocks_controller/test_call_load.yaml b/tests/gamestonk_terminal/stocks/cassettes/test_stocks_controller/test_call_load.yaml index 52a284efa7a..a58443d4390 100644 --- a/tests/gamestonk_terminal/stocks/cassettes/test_stocks_controller/test_call_load.yaml +++ b/tests/gamestonk_terminal/stocks/cassettes/test_stocks_controller/test_call_load.yaml @@ -12,7 +12,7 @@ interactions: uri: https://query2.finance.yahoo.com/v8/finance/chart/TSLA?events=div%2Csplits&includePrePost=False&interval=1d&period1=MOCK_PERIOD_1&period2=MOCK_PERIOD_2 response: body: - string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"TSLA","exchangeName":"NMS","instrumentType":"EQUITY","firstTradeDate":1277818200,"regularMarketTime":1645218003,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":856.98,"chartPreviousClose":926.92,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1645520400,"end":1645540200,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1645540200,"end":1645563600,"gmtoffset":-18000},"post":{"timezone":"EST","start":1645563600,"end":1645578000,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639665000,1639751400],"indicators":{"quote":[{"high":[994.97998046875,960.6599731445312],"open":[994.5,914.77001953125],"low":[921.8499755859375,909.0399780273438],"close":[926.9199829101562,932.5700073242188],"volume":[27590500,33479100]}],"adjclose":[{"adjclose":[926.9199829101562,932.5700073242188]}]}}],"error":null}}' + string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"TSLA","exchangeName":"NMS","instrumentType":"EQUITY","firstTradeDate":1277818200,"regularMarketTime":1646320856,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":864.23,"chartPreviousClose":926.92,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1646317800,"start":1646298000,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1646341200,"start":1646317800,"gmtoffset":-18000},"post":{"timezone":"EST","end":1646355600,"start":1646341200,"gmtoffset":-18000}},"dataGranularity":"1d","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1639751400],"indicators":{"quote":[{"close":[932.5700073242188],"open":[914.77001953125],"high":[960.6599731445312],"volume":[33479100],"low":[909.0399780273438]}],"adjclose":[{"adjclose":[932.5700073242188]}]}}],"error":null}}' headers: Age: - '1' @@ -33,11 +33,11 @@ interactions: cache-control: - public, max-age=10, stale-while-revalidate=20 content-length: - - '1034' + - '938' content-type: - application/json;charset=utf-8 date: - - Tue, 22 Feb 2022 08:08:46 GMT + - Thu, 03 Mar 2022 15:20:57 GMT server: - ATS vary: @@ -45,13 +45,13 @@ interactions: x-envoy-decorator-operation: - finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/* x-envoy-upstream-service-time: - - '3' + - '5' x-request-id: - - c4c3b25c-c216-46ee-ab8a-e3f01ef7ba22 + - 880a3d97-4103-43fa-8585-bb77159343b2 x-yahoo-request-id: - - 5c4vh6hh196gf + - 8ap7j71h21n6q y-rid: - - 5c4vh6hh196gf + - 8ap7j71h21n6q status: code: 200 message: OK diff --git a/tests/gamestonk_terminal/stocks/test_stocks_controller.py b/tests/gamestonk_terminal/stocks/test_stocks_controller.py index 4b625746d16..8edd1e651e5 100644 --- a/tests/gamestonk_terminal/stocks/test_stocks_controller.py +++ b/tests/gamestonk_terminal/stocks/test_stocks_controller.py @@ -309,12 +309,12 @@ def test_call_func_expect_queue(expected_queue, func, queue): ( "call_news", [ - "--num=1", + "--limit=1", "--date=2022-01-07", "--oldest", "--sources=MOCK_SOURCE_1,MOCK_SOURCE_2", ], - "newsapi_view.news", + "newsapi_view.display_news", [], dict( term="MOCK_TICKER", diff --git a/website/content/stocks/behavioural_analysis/snews/_index.md b/website/content/stocks/behavioural_analysis/snews/_index.md new file mode 100755 index 00000000000..5222676f213 --- /dev/null +++ b/website/content/stocks/behavioural_analysis/snews/_index.md @@ -0,0 +1,14 @@ +```text +usage: snews [-h] [--export {csv,json,xlsx,png,jpg,pdf,svg}] +``` + +Display stock price and headlines sentiment using VADER model over time. [Source: Finnhub] + +``` +optional arguments: + -h, --help show this help message (default: False) + --export {csv,json,xlsx,png,jpg,pdf,svg} + Export raw data into csv, json, xlsx and figure into png, jpg, pdf, svg (default: ) +``` + +![snews](https://user-images.githubusercontent.com/25267873/156584514-33c2cd52-4763-43cd-8a53-4118b8615450.png) diff --git a/website/data/menu/main.yml b/website/data/menu/main.yml index ad4a52af629..1c59639587c 100755 --- a/website/data/menu/main.yml +++ b/website/data/menu/main.yml @@ -510,6 +510,8 @@ main: ref: "/common/behavioural_analysis/headlines" - name: stats ref: "/common/behavioural_analysis/stats" + - name: snews + ref: "/stocks/behavioural_analysis/snews" - name: wsb ref: "/common/behavioural_analysis/wsb" - name: watchlist