@monesto/cli 0.0.1 → 0.0.2
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.
- package/README.md +10 -17
- package/dist/cli.js +22 -49
- package/dist/cli.js.map +1 -1
- package/dist/domain/allocation.js +2 -1
- package/dist/domain/allocation.js.map +1 -1
- package/dist/services/parser.js +82 -0
- package/dist/services/parser.js.map +1 -0
- package/dist/services/rates.js +17 -6
- package/dist/services/rates.js.map +1 -1
- package/dist/ui/prompts.js +1 -1
- package/dist/ui/prompts.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
CLI для расчёта чистого месячного дохода, аванса и зарплаты по рабочим дням (с учётом производственного календаря РФ) и распределения по активам: золото, USD, рубли.
|
|
4
4
|
|
|
5
|
+
**npm:** https://www.npmjs.com/package/@monesto/cli
|
|
6
|
+
|
|
5
7
|
## Установка
|
|
6
8
|
|
|
7
9
|
```bash
|
|
@@ -28,14 +30,14 @@ npx @monesto/cli calculate [опции]
|
|
|
28
30
|
|
|
29
31
|
### Опции
|
|
30
32
|
|
|
31
|
-
| Опция
|
|
32
|
-
|
|
33
|
-
| `--money <number>`
|
|
34
|
-
| `--tax <значение>`
|
|
35
|
-
| `--currency <code>` | Базовая валюта дохода (по умолчанию `rub`).
|
|
36
|
-
| `--gold <значение>` | Доля в золото: процент (`10%`) или сумма в RUB (`50000`).
|
|
37
|
-
| `--usd <значение>`
|
|
38
|
-
| `--rub <значение>`
|
|
33
|
+
| Опция | Описание |
|
|
34
|
+
| ------------------- | ------------------------------------------------------------------- |
|
|
35
|
+
| `--money <number>` | Месячный доход до налога (RUB). |
|
|
36
|
+
| `--tax <значение>` | Налог: процент от гросса (`13%`) или фиксированная сумма (`31200`). |
|
|
37
|
+
| `--currency <code>` | Базовая валюта дохода (по умолчанию `rub`). |
|
|
38
|
+
| `--gold <значение>` | Доля в золото: процент (`10%`) или сумма в RUB (`50000`). |
|
|
39
|
+
| `--usd <значение>` | Доля в USD: процент (`10%`) или сумма в USD (`250`). |
|
|
40
|
+
| `--rub <значение>` | Доля в рублях: процент (`10%`) или сумма в RUB (`50000`). |
|
|
39
41
|
|
|
40
42
|
Если опции не указаны, недостающие параметры можно ввести интерактивно.
|
|
41
43
|
|
|
@@ -46,15 +48,6 @@ npx @monesto/cli calculate [опции]
|
|
|
46
48
|
|
|
47
49
|
Расчёт использует производственный календарь (выходные и нерабочие праздничные дни РФ).
|
|
48
50
|
|
|
49
|
-
### Конфигурация (monesto.json)
|
|
50
|
-
|
|
51
|
-
При первом запуске можно ввести доход, налог и распределение по активам. Эти значения сохраняются в `monesto.json` в каталоге конфигурации:
|
|
52
|
-
|
|
53
|
-
- **macOS / Linux:** `~/.config/monesto/monesto.json` (или `$XDG_CONFIG_HOME/monesto/monesto.json`)
|
|
54
|
-
- **Windows:** `%APPDATA%\monesto\monesto.json`
|
|
55
|
-
|
|
56
|
-
При следующих запусках сохранённые значения подставляются автоматически; флаги в командной строке имеют приоритет над конфигом.
|
|
57
|
-
|
|
58
51
|
### Примеры
|
|
59
52
|
|
|
60
53
|
Оклад 240 000 ₽, налог 13%, аванс и зарплата за март 2026:
|
package/dist/cli.js
CHANGED
|
@@ -3,52 +3,34 @@ import { allocateAssets } from './domain/allocation.js';
|
|
|
3
3
|
import { splitNetIncomeByWorkdays } from './domain/salarySplit.js';
|
|
4
4
|
import { calculateNetIncome } from './domain/tax.js';
|
|
5
5
|
import { getGoldPricePerGramRub, getUsdToRubRate } from './services/rates.js';
|
|
6
|
-
import { loadConfig, saveConfig } from './services/config.js';
|
|
7
6
|
import { askMissingParameters } from './ui/prompts.js';
|
|
8
7
|
import { renderAllocationTable, renderSummary } from './ui/table.js';
|
|
9
|
-
function
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
gold: saved.gold,
|
|
16
|
-
usd: saved.usd,
|
|
17
|
-
rub: saved.rub
|
|
18
|
-
};
|
|
19
|
-
if (args.money != null) {
|
|
20
|
-
const value = Number(args.money);
|
|
21
|
-
if (Number.isFinite(value)) {
|
|
22
|
-
config.money = value;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (args.tax != null) {
|
|
26
|
-
config.tax = args.tax;
|
|
27
|
-
}
|
|
28
|
-
if (args.currency != null) {
|
|
29
|
-
config.currency = args.currency;
|
|
30
|
-
}
|
|
31
|
-
if (args.imprestDate != null) {
|
|
32
|
-
const value = Number(args.imprestDate);
|
|
33
|
-
if (Number.isFinite(value)) {
|
|
34
|
-
config.imprestDate = value;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (args.gold != null) {
|
|
38
|
-
config.gold = args.gold;
|
|
8
|
+
function optionsToParams(options) {
|
|
9
|
+
const params = {};
|
|
10
|
+
if (options.money != null) {
|
|
11
|
+
const n = Number(options.money);
|
|
12
|
+
if (Number.isFinite(n))
|
|
13
|
+
params.money = n;
|
|
39
14
|
}
|
|
40
|
-
if (
|
|
41
|
-
|
|
15
|
+
if (options.tax != null)
|
|
16
|
+
params.tax = options.tax;
|
|
17
|
+
if (options.currency != null)
|
|
18
|
+
params.currency = options.currency;
|
|
19
|
+
if (options.imprestDate != null) {
|
|
20
|
+
const n = Number(options.imprestDate);
|
|
21
|
+
if (Number.isFinite(n))
|
|
22
|
+
params.imprestDate = n;
|
|
42
23
|
}
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
24
|
+
if (options.gold != null)
|
|
25
|
+
params.gold = options.gold;
|
|
26
|
+
if (options.usd != null)
|
|
27
|
+
params.usd = options.usd;
|
|
28
|
+
if (options.rub != null)
|
|
29
|
+
params.rub = options.rub;
|
|
30
|
+
return params;
|
|
47
31
|
}
|
|
48
32
|
async function handleCalculate(options) {
|
|
49
|
-
const
|
|
50
|
-
const merged = mergeConfig(saved, options);
|
|
51
|
-
const completed = await askMissingParameters(merged);
|
|
33
|
+
const completed = await askMissingParameters(optionsToParams(options));
|
|
52
34
|
if (completed.money == null) {
|
|
53
35
|
console.error('Не указан месячный доход (--money).');
|
|
54
36
|
process.exit(1);
|
|
@@ -86,15 +68,6 @@ async function handleCalculate(options) {
|
|
|
86
68
|
}
|
|
87
69
|
renderSummary(gross, taxResult, split);
|
|
88
70
|
renderAllocationTable(allocation, taxResult.netIncome);
|
|
89
|
-
await saveConfig({
|
|
90
|
-
money: gross,
|
|
91
|
-
tax: taxInput,
|
|
92
|
-
currency: completed.currency ?? 'rub',
|
|
93
|
-
imprestDate: completed.imprestDate ?? 25,
|
|
94
|
-
gold: completed.gold,
|
|
95
|
-
usd: completed.usd,
|
|
96
|
-
rub: completed.rub
|
|
97
|
-
});
|
|
98
71
|
}
|
|
99
72
|
export async function main(argv) {
|
|
100
73
|
const program = new Command();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,8 @@ function computeFromInput(label, netIncomeRub, rawInput, rates) {
|
|
|
38
38
|
}
|
|
39
39
|
return {
|
|
40
40
|
asset: 'usd',
|
|
41
|
-
|
|
41
|
+
// Если сумма в долларах меньше 50 000, то добавляем 200 рублей комиссии
|
|
42
|
+
amountRub: amountRub < 50000 ? amountRub + 200 : amountRub,
|
|
42
43
|
details: {
|
|
43
44
|
usdAmount,
|
|
44
45
|
percentOfNet
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"allocation.js","sourceRoot":"","sources":["../../src/domain/allocation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAyBhD,SAAS,gBAAgB,CACvB,KAA6B,EAC7B,YAAoB,EACpB,QAAqC,EACrC,KAAsB;IAEtB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAuC,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,SAAiB,CAAC;QACtB,IAAI,YAAgC,CAAC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAS,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YAChD,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,MAAM;YACb,SAAS;YACT,OAAO,EAAE;gBACP,WAAW;gBACX,YAAY;aACb;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,IAAI,SAAiB,CAAC;QACtB,IAAI,SAAiB,CAAC;QACtB,IAAI,YAAgC,CAAC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAS,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YAChD,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;YACvC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QACzC,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,SAAS;
|
|
1
|
+
{"version":3,"file":"allocation.js","sourceRoot":"","sources":["../../src/domain/allocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { parse, HTMLElement } from 'node-html-parser';
|
|
2
|
+
const URL_OFFICES_CURRENCY = 'https://www.bystrobank.ru/sitecurrency/web/currency_converter.php';
|
|
3
|
+
/** Куки для выбора города (Саратов) при запросе курсов. */
|
|
4
|
+
const CURRENCY_COOKIES = 'city=saratov;';
|
|
5
|
+
/** Индекс колонки USD в таблице #officesCurrency (0 — Офис, 1 — USD, 2 — EUR, …). */
|
|
6
|
+
const USD_COLUMN_INDEX = 1;
|
|
7
|
+
/** В ячейке USD два span.money: первый — покупка, второй — продажа. */
|
|
8
|
+
const BUY_SPAN_INDEX = 0;
|
|
9
|
+
const SELL_SPAN_INDEX = 1;
|
|
10
|
+
function parseMoneySpan(td) {
|
|
11
|
+
const spans = td.querySelectorAll('span.money');
|
|
12
|
+
return spans.map((span) => parseFloat(span.textContent?.trim().replace(',', '.') ?? '0'));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Парсинг таблицы #officesCurrency: первая строка tbody, колонка USD,
|
|
16
|
+
* два span.money — покупка и продажа.
|
|
17
|
+
*/
|
|
18
|
+
export function parseUsdColumnFromTable(html) {
|
|
19
|
+
const document = parse(html);
|
|
20
|
+
const table = document.querySelector('table#officesCurrency');
|
|
21
|
+
if (!table)
|
|
22
|
+
return null;
|
|
23
|
+
const firstRow = table.querySelector('tbody tr');
|
|
24
|
+
if (!firstRow)
|
|
25
|
+
return null;
|
|
26
|
+
const cells = firstRow.querySelectorAll('td');
|
|
27
|
+
const usdCell = cells[USD_COLUMN_INDEX];
|
|
28
|
+
if (!usdCell)
|
|
29
|
+
return null;
|
|
30
|
+
const values = parseMoneySpan(usdCell);
|
|
31
|
+
if (values.length < 2)
|
|
32
|
+
return null;
|
|
33
|
+
const buy = values[BUY_SPAN_INDEX];
|
|
34
|
+
const sell = values[SELL_SPAN_INDEX];
|
|
35
|
+
if (!Number.isFinite(buy) || !Number.isFinite(sell))
|
|
36
|
+
return null;
|
|
37
|
+
return { buy, sell };
|
|
38
|
+
}
|
|
39
|
+
export class Parser {
|
|
40
|
+
/**
|
|
41
|
+
* Курс USD: возвращает курс покупки (первый span.money в колонке USD).
|
|
42
|
+
*/
|
|
43
|
+
static async getUsdCourse() {
|
|
44
|
+
const response = await fetch('https://www.bystrobank.ru/sitecurrency/web/currency_converter.php', {
|
|
45
|
+
headers: {
|
|
46
|
+
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
|
47
|
+
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
|
|
48
|
+
'cache-control': 'max-age=0',
|
|
49
|
+
'if-none-match': 'XML_Output_abbhgQoPEBQAAF0scegAAAB8',
|
|
50
|
+
'sec-ch-ua': '"Chromium";v="145", "Not:A-Brand";v="99"',
|
|
51
|
+
'sec-ch-ua-mobile': '?0',
|
|
52
|
+
'sec-ch-ua-platform': '"macOS"',
|
|
53
|
+
'sec-fetch-dest': 'document',
|
|
54
|
+
'sec-fetch-mode': 'navigate',
|
|
55
|
+
'sec-fetch-site': 'same-origin',
|
|
56
|
+
'sec-fetch-user': '?1',
|
|
57
|
+
'upgrade-insecure-requests': '1',
|
|
58
|
+
cookie: 'guest=aa_L5woPEBQAAP-9gJ8AAACg; _ym_uid=1773128680443116950; _ym_d=1773128680; l=Izhevsk; o=%D0%98%D0%B6%D0%B5%D0%B2%D1%81%D0%BA%3B(3412)%2090-80-90%3B%C2%AB%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%BE%D1%84%D0%B8%D1%81%20(%D0%98%D0%B6%D0%B5%D0%B2%D1%81%D0%BA)%C2%BB%3Bizh; _ym_isad=1; city=saratov; cityName=%D0%A1%D0%B0%D1%80%D0%B0%D1%82%D0%BE%D0%B2',
|
|
59
|
+
Referer: 'https://www.bystrobank.ru/geoeditor/web/citySelection.php'
|
|
60
|
+
},
|
|
61
|
+
body: null,
|
|
62
|
+
method: 'GET'
|
|
63
|
+
});
|
|
64
|
+
const html = await response.text();
|
|
65
|
+
const rates = parseUsdColumnFromTable(html);
|
|
66
|
+
if (!rates)
|
|
67
|
+
throw new Error('Не удалось распарсить курс USD из таблицы #officesCurrency');
|
|
68
|
+
return rates.buy + rates.buy * 0.035; // 3.5% комиссия банка
|
|
69
|
+
}
|
|
70
|
+
/** Покупка и продажа USD из первой строки таблицы. */
|
|
71
|
+
static async getUsdBuyAndSell() {
|
|
72
|
+
const response = await fetch(URL_OFFICES_CURRENCY, {
|
|
73
|
+
headers: { Cookie: CURRENCY_COOKIES }
|
|
74
|
+
});
|
|
75
|
+
const html = await response.text();
|
|
76
|
+
const rates = parseUsdColumnFromTable(html);
|
|
77
|
+
if (!rates)
|
|
78
|
+
throw new Error('Не удалось распарсить курс USD из таблицы #officesCurrency');
|
|
79
|
+
return rates;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/services/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/services/rates.js
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
import { Parser } from './parser.js';
|
|
2
|
+
const FALLBACK_USD_RUB = 95;
|
|
3
|
+
const FALLBACK_GOLD_PER_GRAM_RUB = 13232.09;
|
|
1
4
|
export async function getUsdToRubRate() {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
try {
|
|
6
|
+
const usd = await Parser.getUsdCourse();
|
|
7
|
+
return usd;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return FALLBACK_USD_RUB;
|
|
11
|
+
}
|
|
5
12
|
}
|
|
6
13
|
export async function getGoldPricePerGramRub() {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
try {
|
|
15
|
+
// TODO: подключить парсер золота по аналогии с USD, когда будет URL/разметка
|
|
16
|
+
return FALLBACK_GOLD_PER_GRAM_RUB;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return FALLBACK_GOLD_PER_GRAM_RUB;
|
|
20
|
+
}
|
|
10
21
|
}
|
|
11
22
|
//# sourceMappingURL=rates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rates.js","sourceRoot":"","sources":["../../src/services/rates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,
|
|
1
|
+
{"version":3,"file":"rates.js","sourceRoot":"","sources":["../../src/services/rates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,0BAA0B,GAAG,QAAQ,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,IAAI,CAAC;QACH,6EAA6E;QAC7E,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,0BAA0B,CAAC;IACpC,CAAC;AACH,CAAC"}
|
package/dist/ui/prompts.js
CHANGED
|
@@ -36,7 +36,7 @@ export async function askMissingParameters(existing) {
|
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
if (questions.length === 0) {
|
|
39
|
-
return existing;
|
|
39
|
+
return { ...existing, currency: existing.currency ?? 'rub', imprestDate: existing.imprestDate ?? 25 };
|
|
40
40
|
}
|
|
41
41
|
const answers = await prompts(questions);
|
|
42
42
|
const merged = {
|
package/dist/ui/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monesto/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "CLI для расчёта чистого дохода, аванса и зарплаты по рабочим дням и распределения по активам (золото, USD, рубли)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"cli-table3": "^0.6.5",
|
|
39
39
|
"commander": "^12.1.0",
|
|
40
|
+
"node-html-parser": "^7.1.0",
|
|
40
41
|
"prompts": "^2.4.2"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
@@ -48,4 +49,3 @@
|
|
|
48
49
|
"vitest": "^3.2.0"
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
|