qis 3.2.9__tar.gz → 3.2.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qis-3.2.9 → qis-3.2.10}/PKG-INFO +1 -1
- {qis-3.2.9 → qis-3.2.10}/pyproject.toml +1 -1
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/multi_portfolio_data.py +19 -6
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/portfolio_data.py +2 -2
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/strategy_benchmark_factsheet.py +5 -0
- {qis-3.2.9 → qis-3.2.10}/qis/settings.yaml +0 -1
- {qis-3.2.9 → qis-3.2.10}/LICENSE.txt +0 -0
- {qis-3.2.9 → qis-3.2.10}/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/best_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/bootstrap_analysis.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/boxplot_conditional_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/btc_asset_corr.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/constant_notional.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/constant_weight_portfolios.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/core/perf_bbg_prices.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/core/price_plots.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/core/us_election.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/credit_spreads.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/europe_futures.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/factsheets/multi_assets.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/factsheets/multi_strategy.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/factsheets/pyblogs_reports.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/factsheets/strategy.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/factsheets/strategy_benchmark.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/generate_option_rolls.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/interpolation_infrequent_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/leveraged_strategies.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/long_short.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/momentum_indices.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/ohlc_vol_analysis.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/overnight_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/perf_external_assets.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/readme_performances.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/risk_return_frontier.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/rolling_performance.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/seasonality.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/sharpe_vs_sortino.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/simulate_quant_strats.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/test_ewm.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/test_scatter.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/try_pybloqs.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/universe_corrs.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/vix_beta_to_equities_bonds.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/vix_conditional_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/vix_spy_by_year.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/vix_tenor_analysis.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/examples/vol_without_weekends.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/file_utils.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/local_path.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/auto_corr.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/corr_cov_matrix.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/ewm.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/ewm_convolution.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/ewm_factors.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/ewm_winsor_outliers.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/pca.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/plot_correlations.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/linear/ra_returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/stats/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/stats/bootstrap.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/stats/ohlc_vol.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/stats/rolling_stats.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/models/stats/test_bootstrap.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/cond_regression.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/config.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/desc_table.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/fx_ops.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/perf_stats.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/regime_classifier.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/returns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/perfstats/timeseries_bfill.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/bars.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/boxplot.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/contour.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/data_timeseries.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/desc_table.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/drawdowns.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/perf_table.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/prices.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/regime_class_table.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/regime_data.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/regime_pdf.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/regime_scatter.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/returns_heatmap.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/derived/returns_scatter.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/errorbar.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/heatmap.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/histogram.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/histplot2d.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/lineplot.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/pie.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/qqplot.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/reports/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/reports/econ_data_single.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/reports/gantt_data_history.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/reports/price_history.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/reports/utils.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/scatter.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/stackplot.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/table.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/time_series.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/plots/utils.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/backtester.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/ewm_portfolio_risk.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/brinson_attribution.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/config.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/multi_assets_factsheet.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/multi_strategy_factseet_pybloqs.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/multi_strategy_factsheet.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/strategy_benchmark_factsheet_pybloqs.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/strategy_factsheet.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/reports/strategy_signal_factsheet.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/signal_data.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/strats/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/strats/quant_strats_delta1.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/portfolio/strats/seasonal_strats.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/sql_engine.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/test_data.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/README.md +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/__init__.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/dates.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_agg.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_cut.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_freq.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_groups.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_melt.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_ops.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_str.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_to_scores.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/df_to_weights.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/generic.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/np_ops.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/ols.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/sampling.py +0 -0
- {qis-3.2.9 → qis-3.2.10}/qis/utils/struct_ops.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: qis
|
3
|
-
Version: 3.2.
|
3
|
+
Version: 3.2.10
|
4
4
|
Summary: Implementation of visualisation and reporting analytics for Quantitative Investment Strategies
|
5
5
|
License: LICENSE.txt
|
6
6
|
Keywords: quantitative,investing,portfolio optimization,systematic strategies,volatility
|
@@ -195,7 +195,8 @@ class MultiPortfolioData:
|
|
195
195
|
benchmark_idx: int = 1,
|
196
196
|
is_grouped: bool = False,
|
197
197
|
group_data: pd.Series = None,
|
198
|
-
group_order: List[str] = None
|
198
|
+
group_order: List[str] = None,
|
199
|
+
total_column: Optional[str] = 'Total'
|
199
200
|
) -> Union[pd.Series, pd.DataFrame]:
|
200
201
|
"""
|
201
202
|
compute Ex ante tracking error =
|
@@ -224,7 +225,7 @@ class MultiPortfolioData:
|
|
224
225
|
group_order = self.portfolio_datas[strategy_idx].group_order
|
225
226
|
group_dict = dfg.get_group_dict(group_data=group_data,
|
226
227
|
group_order=group_order,
|
227
|
-
total_column=
|
228
|
+
total_column=total_column)
|
228
229
|
tracking_error = {key: {} for key in group_dict.keys()}
|
229
230
|
for date, pd_covar in self.covar_dict.items():
|
230
231
|
w = weight_diffs.loc[date]
|
@@ -645,7 +646,7 @@ class MultiPortfolioData:
|
|
645
646
|
**kwargs)
|
646
647
|
if regime_benchmark is not None:
|
647
648
|
self.add_regime_shadows(ax=ax, regime_benchmark=regime_benchmark, index=diff.index, regime_params=regime_params)
|
648
|
-
|
649
|
+
|
649
650
|
def get_turnover(self,
|
650
651
|
time_period: TimePeriod = None,
|
651
652
|
turnover_rolling_period: Optional[int] = 12,
|
@@ -662,7 +663,7 @@ class MultiPortfolioData:
|
|
662
663
|
if time_period is not None:
|
663
664
|
turnover = time_period.locate(turnover)
|
664
665
|
return turnover
|
665
|
-
|
666
|
+
|
666
667
|
def plot_turnover(self,
|
667
668
|
regime_benchmark: str = None,
|
668
669
|
time_period: TimePeriod = None,
|
@@ -673,7 +674,7 @@ class MultiPortfolioData:
|
|
673
674
|
is_unit_based_traded_volume: bool = True,
|
674
675
|
ax: plt.Subplot = None,
|
675
676
|
**kwargs) -> None:
|
676
|
-
|
677
|
+
|
677
678
|
turnover = self.get_turnover(turnover_rolling_period=turnover_rolling_period,
|
678
679
|
freq_turnover=freq_turnover,
|
679
680
|
is_unit_based_traded_volume=is_unit_based_traded_volume,
|
@@ -1039,13 +1040,25 @@ class MultiPortfolioData:
|
|
1039
1040
|
regime_params: BenchmarkReturnsQuantileRegimeSpecs = REGIME_PARAMS,
|
1040
1041
|
time_period: TimePeriod = None,
|
1041
1042
|
title: Optional[str] = 'Tracking error',
|
1043
|
+
total_column: Optional[str] = 'Total',
|
1042
1044
|
var_format: str = '{:.2%}',
|
1045
|
+
tre_max_clip: Optional[float] = None,
|
1043
1046
|
ax: plt.Subplot = None,
|
1044
1047
|
**kwargs
|
1045
1048
|
) -> None:
|
1046
1049
|
tre = self.compute_tracking_error_implied_by_covar(strategy_idx=strategy_idx, benchmark_idx=benchmark_idx,
|
1047
1050
|
is_grouped=is_grouped, group_data=group_data,
|
1048
|
-
group_order=group_order
|
1051
|
+
group_order=group_order,
|
1052
|
+
total_column=total_column)
|
1053
|
+
if tre_max_clip is not None:
|
1054
|
+
if isinstance(tre, pd.DataFrame): # skip total_column from trimming
|
1055
|
+
tre_columns = tre.columns.to_list()
|
1056
|
+
if total_column in tre:
|
1057
|
+
tre_columns.remove(total_column)
|
1058
|
+
tre[tre_columns] = tre[tre_columns].clip(upper=tre_max_clip)
|
1059
|
+
else:
|
1060
|
+
tre = tre.clip(upper=tre_max_clip)
|
1061
|
+
|
1049
1062
|
if time_period is not None:
|
1050
1063
|
tre = time_period.locate(tre)
|
1051
1064
|
pts.plot_time_series(df=tre,
|
@@ -1504,13 +1504,13 @@ class PortfolioData:
|
|
1504
1504
|
freq = pd.infer_freq(turnover.index)
|
1505
1505
|
turnover_title = title or f"{turnover_rolling_period}-period rolling {freq}-freq Turnover"
|
1506
1506
|
qis.plot_time_series(df=turnover,
|
1507
|
-
var_format='{:,.
|
1507
|
+
var_format='{:,.1%}',
|
1508
1508
|
y_limits=(0.0, None),
|
1509
1509
|
legend_stats=qis.LegendStats.AVG_NONNAN_LAST,
|
1510
1510
|
title=turnover_title,
|
1511
1511
|
ax=ax,
|
1512
1512
|
**kwargs)
|
1513
|
-
if regime_benchmark is not None:
|
1513
|
+
if regime_benchmark is not None and self.benchmark_prices is not None:
|
1514
1514
|
self.add_regime_shadows(ax=ax, regime_benchmark=regime_benchmark, index=turnover.index,
|
1515
1515
|
regime_params=regime_params)
|
1516
1516
|
|
@@ -513,6 +513,7 @@ def weights_tracking_error_report_by_ac_subac(multi_portfolio_data: MultiPortfol
|
|
513
513
|
perf_params: PerfParams = PERF_PARAMS,
|
514
514
|
regime_params: BenchmarkReturnsQuantileRegimeSpecs = REGIME_PARAMS,
|
515
515
|
add_benchmarks_to_navs: bool = True,
|
516
|
+
tre_max_clip: Optional[float] = None,
|
516
517
|
figsize: Tuple[float, float] = (11.7, 8.3),
|
517
518
|
var_format: str = '{:.1%}',
|
518
519
|
add_titles: bool = True,
|
@@ -758,6 +759,7 @@ def weights_tracking_error_report_by_ac_subac(multi_portfolio_data: MultiPortfol
|
|
758
759
|
group_order=ac_group_order,
|
759
760
|
regime_benchmark=regime_benchmark,
|
760
761
|
regime_params=regime_params,
|
762
|
+
tre_max_clip=tre_max_clip,
|
761
763
|
title=title,
|
762
764
|
ax=ax,
|
763
765
|
time_period=time_period,
|
@@ -785,6 +787,9 @@ def weights_tracking_error_report_by_ac_subac(multi_portfolio_data: MultiPortfol
|
|
785
787
|
group_order=turnover_order,
|
786
788
|
add_total=False,
|
787
789
|
**kwargs)
|
790
|
+
if regime_benchmark is not None:
|
791
|
+
multi_portfolio_data.add_regime_shadows(ax=ax, regime_benchmark=regime_benchmark,
|
792
|
+
index=grouped_selection_return.index, regime_params=regime_params)
|
788
793
|
if not add_titles:
|
789
794
|
ax.title.set_visible(False)
|
790
795
|
return figs, dfs
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|