Skip to content

Commit 4bdcef6

Browse files
Get running microsim
1 parent 735604c commit 4bdcef6

37 files changed

Lines changed: 112 additions & 67 deletions

docs/book/assumptions/growthfactors.ipynb

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/book/validation/hbai.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ Each of the variables above is either derived from other variables, or is a dire
4747
|----------|-------|-------|
4848
| `employment_income` | gov.obr.per_capita.employment_income | Uprated based on OBR per capita employment income projections |
4949
| `self_employment_income` | gov.obr.per_capita.mixed_income | Uprated based on OBR per capita mixed income projections |
50-
| `dividend_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
50+
| `dividend_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
5151
| `hbai_benefits` | Various | Different benefits use different uprating indices, mostly gov.obr.consumer_price_index |
5252
| `private_pension_income` | gov.obr.private_pension_index | Uprated based on OBR private pension index |
53-
| `savings_interest_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
54-
| `property_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
55-
| `maintenance_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
53+
| `savings_interest_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
54+
| `property_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
55+
| `maintenance_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
5656
| `student_payments` | Not uprated directly | Currently no specific uprating for student payments |
5757
| `free_school_meals` |gov.obr.consumer_price_index | Uprated based on CPI inflation |
5858
| `free_school_fruit_veg` | gov.obr.consumer_price_index | Uprated based on CPI inflation |
@@ -65,7 +65,7 @@ Each of the variables above is either derived from other variables, or is a dire
6565
| `employee_pension_contributions` | gov.obr.per_capita.employment_income | Uprated based on per capita employment income growth |
6666
| `personal_pension_contributions` | gov.obr.per_capita.employment_income | Uprated based on per capita employment income growth |
6767
| `maintenance_expenses` | gov.obr.consumer_price_index | Uprated based on CPI inflation |
68-
| `student_loan_repayments` | gov.obr.average_earnings | Uprated based on OBR average earnings projections |
68+
| `student_loan_repayments` | gov.economic_assumptions.indices.obr.average_earnings | Uprated based on OBR average earnings projections |
6969
| `rent` | gov.obr.rent | Uprated based on OBR rent projections |
7070
| `water_and_sewerage_charges` | gov.obr.consumer_price_index | Uprated based on CPI as proxy |
7171
| `mortgage_interest_repayment` | gov.obr.mortgage_interest | Uprated based on OBR mortgage interest projections |

policyengine_uk/data/uprating_growth_factors.csv

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ afcs_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,
33
alcohol_and_tobacco_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
44
attendance_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
55
bsp_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6-
capital_gains,gov.obr.non_labour_income,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
7-
capital_gains_before_response,gov.obr.non_labour_income,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
6+
capital_gains,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
7+
capital_gains_before_response,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
88
carers_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
99
child_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
1010
child_tax_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
@@ -14,15 +14,15 @@ communication_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023
1414
corporate_wealth,household.wealth.corporate_wealth,0,0.0,-0.109,0.004,0.03,0.031,0.035,0.035,0.035,0.0
1515
council_tax,gov.obr.council_tax,0,0.0,0.0,0.0,0.064,0.046,0.045,0.046,0.045,0.045
1616
diesel_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
17-
dividend_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
17+
dividend_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
1818
dla_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
1919
dla_sc_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2020
domestic_energy_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2121
education_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
22-
employee_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
23-
employer_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
24-
employment_income,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
25-
employment_income_before_lsr,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
22+
employee_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
23+
employer_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
24+
employment_income,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
25+
employment_income_before_lsr,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
2626
esa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2727
esa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2828
food_and_non_alcoholic_beverages_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
@@ -40,43 +40,43 @@ incapacity_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.0
4040
income_support_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4141
jsa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4242
jsa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
43-
lump_sum_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
43+
lump_sum_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
4444
main_residence_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
4545
maintenance_expenses,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
46-
maintenance_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
46+
maintenance_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
4747
maternity_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4848
miscellaneous_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
49-
miscellaneous_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
49+
miscellaneous_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
5050
mortgage_capital_repayment,gov.obr.house_prices,0,0.082,0.083,-0.01,0.027,0.024,0.025,0.026,0.023,0.024
5151
mortgage_interest_repayment,gov.obr.mortgage_interest,0,0.003,0.262,0.485,0.221,0.136,0.126,0.082,0.042,0.047
5252
net_financial_wealth,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5353
non_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
54-
other_investment_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
54+
other_investment_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
5555
other_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5656
owned_land,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5757
pension_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
58-
pension_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
59-
personal_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
58+
pension_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
59+
personal_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
6060
petrol_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6161
pip_dl_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6262
pip_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6363
private_pension_income,gov.obr.private_pension_index,0,0.05,0.05,0.05,0.033,0.042,0.03,0.03,0.029,0.028
64-
private_transfer_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
65-
property_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
64+
private_transfer_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
65+
property_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
6666
recreation_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6767
rent,gov.obr.rent,0,0.018,0.04,0.063,0.074,0.057,0.036,0.027,0.023,0.024
6868
restaurants_and_hotels_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6969
savings,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
70-
savings_interest_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
70+
savings_interest_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
7171
sda_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7272
self_employment_income,gov.obr.per_capita.mixed_income,0,0.06,0.063,0.024,0.048,0.047,0.031,0.031,0.036,0.038
7373
state_pension,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7474
state_pension_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7575
statutory_maternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7676
statutory_paternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7777
statutory_sick_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
78-
student_loan_repayments,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
79-
sublet_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
78+
student_loan_repayments,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
79+
sublet_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
8080
transport_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
8181
universal_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
8282
winter_fuel_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
description: Most recent September CPIH index value, updated for each uprating occurrence (2005=100)
22
values:
33
2005-01-01: 100
4+
2010-01-01: 114.48
45
metadata:
56
label: Benefit uprating index
67
uprating: gov.economic_assumptions.indices.obr.consumer_price_index

policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
Parameter,
44
)
55

6-
YEARS = list(range(2010, 2035))
6+
YEARS = list(range(2020, 2035))
77

88

99
def add_private_pension_uprating_factor(
1010
parameters: ParameterNode,
1111
) -> ParameterNode:
1212
values = {}
13-
rpi = parameters.gov.obr.rpi
14-
last_value = rpi(2008)
13+
rpi = parameters.gov.economic_assumptions.indices.obr.rpi
14+
last_value = rpi(YEARS[0] - 1)
1515
for year in YEARS:
1616
value = rpi(year - 1)
1717
rel_change = value / rpi(year - 2)
@@ -20,11 +20,13 @@ def add_private_pension_uprating_factor(
2020
last_value = new_index
2121
values[f"{year}-01-01"] = new_index
2222
new_parameter = Parameter(
23-
"gov.obr.private_pension_index",
23+
"gov.economic_assumptions.indices.obr.private_pension_index",
2424
data={
2525
"values": values,
2626
},
2727
)
2828

29-
parameters.gov.obr.add_child("private_pension_index", new_parameter)
29+
parameters.gov.economic_assumptions.indices.obr.add_child(
30+
"private_pension_index", new_parameter
31+
)
3032
return parameters

policyengine_uk/parameters/gov/economic_assumptions/create_economic_assumption_indices.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
)
66

77

8-
def create_economic_assumption_indices(parameters: ParameterNode) -> ParameterNode:
8+
def create_economic_assumption_indices(
9+
parameters: ParameterNode,
10+
) -> ParameterNode:
911
econ_assumptions: ParameterNode = parameters.gov.economic_assumptions
1012
yoy_growth: ParameterNode = econ_assumptions.yoy_growth
1113
indices = ParameterNode(
@@ -18,7 +20,9 @@ def create_economic_assumption_indices(parameters: ParameterNode) -> ParameterNo
1820
)
1921

2022
for descendant in yoy_growth.get_descendants():
21-
parent_node = parameters.get_child(descendant.parent.name.replace("yoy_growth", "indices"))
23+
parent_node = parameters.get_child(
24+
descendant.parent.name.replace("yoy_growth", "indices")
25+
)
2226
full_name = descendant.name
2327
child_name = full_name.split(".")[-1]
2428
if isinstance(descendant, ParameterNode):
@@ -32,9 +36,7 @@ def create_economic_assumption_indices(parameters: ParameterNode) -> ParameterNo
3236
)
3337
else:
3438
start_year = int(descendant.values_list[-1].instant_str[:4])
35-
values = {
36-
start_year: 1.0
37-
}
39+
values = {start_year: 1.0}
3840

3941
for year in range(start_year + 1, 2030):
4042
yoy_growth = descendant(year)
@@ -43,7 +45,7 @@ def create_economic_assumption_indices(parameters: ParameterNode) -> ParameterNo
4345
5,
4446
)
4547
values[year] = indices_value
46-
48+
4749
mirror_parameter = Parameter(
4850
name=descendant.name.replace("yoy_growth", "indices"),
4951
data={
@@ -59,5 +61,6 @@ def create_economic_assumption_indices(parameters: ParameterNode) -> ParameterNo
5961
mirror_parameter,
6062
)
6163

62-
print(parameters.gov.economic_assumptions.indices)
64+
print(indices)
65+
6366
return parameters

policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,34 @@
11
obr:
2+
rpi:
3+
description: Retail price index year-on-year growth.
4+
values:
5+
2009-01-01: 0.018
6+
2010-01-01: 0.008
7+
2011-01-01: 0.016
8+
2012-01-01: 0.007
9+
2013-01-01: 0.047
10+
2014-01-01: 0.006
11+
2015-01-01: 0.020
12+
2016-01-01: 0.024
13+
2017-01-01: 0.032
14+
2018-01-01: 0.026
15+
2019-01-01: 0.022
16+
2020-01-01: 0.003
17+
2021-01-01: 0.059
18+
2022-01-01: 0.064
19+
2023-01-01: 0.069
20+
2024-01-01: 0.047
21+
2025-01-01: 0.037
22+
2026-01-01: 0.022
23+
2027-01-01: 0.021
24+
2028-01-01: 0.023
25+
2029-01-01: 0.025
26+
metadata:
27+
unit: /1
28+
label: retail price index growth
29+
reference:
30+
- title: OBR EFO March 2025
31+
href: https://obr.uk/efo/economic-and-fiscal-outlook-march-2025/
232
average_earnings:
333
description: Average earnings year-on-year growth.
434
values:

policyengine_uk/parameters/gov/hmrc/fuel_duty/petrol_and_diesel.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ metadata:
3030
unit: currency-GBP
3131
name: fuel_duty_rate
3232
label: Fuel duty rate (petrol and diesel)
33-
uprating: gov.ons.rpi
33+
uprating: gov.economic_assumptions.indices.obr.rpi
3434
reference:
3535
- title: Hydrocarbon Oil Duties Act 1979 s. 6
3636
href: https://www.legislation.gov.uk/ukpga/1979/5/section/6

policyengine_uk/parameters/household/wealth/national_balance_sheet.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
description: ONS National Balance Sheet statistics on wealth
22
household:
33
metadata:
4-
uprating: gov.obr.non_labor_income
4+
uprating: gov.economic_assumptions.indices.obr.per_capita.gdp
55
financial_net_worth:
66
values:
77
2019-01-01: 4_556_770_000_000

policyengine_uk/system.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
backdate_parameters,
1313
convert_to_fiscal_year_parameters,
1414
)
15-
from policyengine_uk.parameters.gov.economic_assumptions.create_economic_assumption_indices import create_economic_assumption_indices
15+
from policyengine_uk.parameters.gov.economic_assumptions.create_economic_assumption_indices import (
16+
create_economic_assumption_indices,
17+
)
1618
from policyengine_core.reforms import Reform
1719
from policyengine_uk.reforms import create_structural_reforms_from_parameters
1820

@@ -56,6 +58,7 @@ class CountryTaxBenefitSystem(TaxBenefitSystem):
5658
def process_parameters(self, reform=None):
5759
self.parameters = create_economic_assumption_indices(self.parameters)
5860
self.parameters = add_triple_lock(self.parameters)
61+
self.parameters = add_private_pension_uprating_factor(self.parameters)
5962
self.parameters.add_child("baseline", self.parameters.clone())
6063
if reform:
6164
self.apply_reform_set(reform)

0 commit comments

Comments
 (0)