@botconnector/bccli 0.4.17 → 0.5.0
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/LICENSE +203 -21
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/branding.mjs +347 -0
- package/cli.mjs +128 -0
- package/core.mjs +260 -0
- package/credentials.mjs +52 -0
- package/gateway.mjs +2 -0
- package/legacy/LICENSE +21 -0
- package/legacy/package.json +77 -0
- package/legacy-compat.mjs +42 -0
- package/model-command.mjs +61 -0
- package/package.json +47 -51
- package/provider-cli.mjs +76 -0
- package/providers.mjs +179 -0
- package/proxy.mjs +242 -0
- package/startup-menu.mjs +121 -0
- /package/{README.en.md → legacy/README.en.md} +0 -0
- /package/{README.md → legacy/README.md} +0 -0
- /package/{dist → legacy/dist}/abort.d.ts +0 -0
- /package/{dist → legacy/dist}/acp-HWHF25KU.js +0 -0
- /package/{dist → legacy/dist}/acp.d.ts +0 -0
- /package/{dist → legacy/dist}/agent.d.ts +0 -0
- /package/{dist → legacy/dist}/agents.d.ts +0 -0
- /package/{dist → legacy/dist}/args-XA77XUMD.js +0 -0
- /package/{dist → legacy/dist}/args.d.ts +0 -0
- /package/{dist → legacy/dist}/budget.d.ts +0 -0
- /package/{dist → legacy/dist}/checkpoints.d.ts +0 -0
- /package/{dist → legacy/dist}/chunk-2IP5F3EK.js +0 -0
- /package/{dist → legacy/dist}/chunk-5CVHTYBQ.js +0 -0
- /package/{dist → legacy/dist}/chunk-6LO6YRDY.js +0 -0
- /package/{dist → legacy/dist}/chunk-6PJRWKVI.js +0 -0
- /package/{dist → legacy/dist}/chunk-7OTFZK4B.js +0 -0
- /package/{dist → legacy/dist}/chunk-7U7CMKKI.js +0 -0
- /package/{dist → legacy/dist}/chunk-A3NBWIEQ.js +0 -0
- /package/{dist → legacy/dist}/chunk-FY543EQW.js +0 -0
- /package/{dist → legacy/dist}/chunk-IDZLHEVL.js +0 -0
- /package/{dist → legacy/dist}/chunk-IF5RNXBI.js +0 -0
- /package/{dist → legacy/dist}/chunk-M5T4AM4I.js +0 -0
- /package/{dist → legacy/dist}/chunk-NGFWBVHD.js +0 -0
- /package/{dist → legacy/dist}/chunk-OCEQ2TRJ.js +0 -0
- /package/{dist → legacy/dist}/chunk-OK2USAXX.js +0 -0
- /package/{dist → legacy/dist}/chunk-PSO7R5AD.js +0 -0
- /package/{dist → legacy/dist}/chunk-RLSQAZBT.js +0 -0
- /package/{dist → legacy/dist}/chunk-VPFCIUC6.js +0 -0
- /package/{dist → legacy/dist}/chunk-XP5MTJN2.js +0 -0
- /package/{dist → legacy/dist}/chunk-YGBTNDPK.js +0 -0
- /package/{dist → legacy/dist}/chunk-YYTFJUO2.js +0 -0
- /package/{dist → legacy/dist}/chunk-ZXWRLN7E.js +0 -0
- /package/{dist → legacy/dist}/cli.d.ts +0 -0
- /package/{dist → legacy/dist}/cli.js +0 -0
- /package/{dist → legacy/dist}/clipboardImage.d.ts +0 -0
- /package/{dist → legacy/dist}/commands.d.ts +0 -0
- /package/{dist → legacy/dist}/completion-IRVEVW6H.js +0 -0
- /package/{dist → legacy/dist}/completion.d.ts +0 -0
- /package/{dist → legacy/dist}/config-OVWCUVY7.js +0 -0
- /package/{dist → legacy/dist}/config-S3CZUIBB.js +0 -0
- /package/{dist → legacy/dist}/config.d.ts +0 -0
- /package/{dist → legacy/dist}/context.d.ts +0 -0
- /package/{dist → legacy/dist}/contextWindow.d.ts +0 -0
- /package/{dist → legacy/dist}/diff.d.ts +0 -0
- /package/{dist → legacy/dist}/exit.d.ts +0 -0
- /package/{dist → legacy/dist}/extensions.d.ts +0 -0
- /package/{dist → legacy/dist}/ghBotCli-FYKJDJOD.js +0 -0
- /package/{dist → legacy/dist}/ghBotCli.d.ts +0 -0
- /package/{dist → legacy/dist}/ghBotDispatch.d.ts +0 -0
- /package/{dist → legacy/dist}/ghBotRunner.d.ts +0 -0
- /package/{dist → legacy/dist}/ghBotServe.d.ts +0 -0
- /package/{dist → legacy/dist}/ghBotWebhook.d.ts +0 -0
- /package/{dist → legacy/dist}/hooks.d.ts +0 -0
- /package/{dist → legacy/dist}/i18n/id.d.ts +0 -0
- /package/{dist → legacy/dist}/i18n.d.ts +0 -0
- /package/{dist → legacy/dist}/integrationCli-GY73S2K7.js +0 -0
- /package/{dist → legacy/dist}/integrationCli.d.ts +0 -0
- /package/{dist → legacy/dist}/keybinds.d.ts +0 -0
- /package/{dist → legacy/dist}/login-KSN63EM4.js +0 -0
- /package/{dist → legacy/dist}/login.d.ts +0 -0
- /package/{dist → legacy/dist}/lsp.d.ts +0 -0
- /package/{dist → legacy/dist}/mcp/catalog.d.ts +0 -0
- /package/{dist → legacy/dist}/mcp/config.d.ts +0 -0
- /package/{dist → legacy/dist}/mcp/manager.d.ts +0 -0
- /package/{dist → legacy/dist}/mcp/oauth.d.ts +0 -0
- /package/{dist → legacy/dist}/mcpCli-VWSCCDWT.js +0 -0
- /package/{dist → legacy/dist}/mcpCli.d.ts +0 -0
- /package/{dist → legacy/dist}/mcpServer/serve.d.ts +0 -0
- /package/{dist → legacy/dist}/mcpServer/server.d.ts +0 -0
- /package/{dist → legacy/dist}/models.d.ts +0 -0
- /package/{dist → legacy/dist}/modelsCli-4Q6KFWV2.js +0 -0
- /package/{dist → legacy/dist}/modelsCli.d.ts +0 -0
- /package/{dist → legacy/dist}/npmRunner-LU43GM3W.js +0 -0
- /package/{dist → legacy/dist}/npmRunner.d.ts +0 -0
- /package/{dist → legacy/dist}/oauthLogin-JWXQZTMZ.js +0 -0
- /package/{dist → legacy/dist}/oauthLogin.d.ts +0 -0
- /package/{dist → legacy/dist}/permissions.d.ts +0 -0
- /package/{dist → legacy/dist}/pluginSpec.d.ts +0 -0
- /package/{dist → legacy/dist}/plugins.d.ts +0 -0
- /package/{dist → legacy/dist}/pluginsCli-7XWDLJEL.js +0 -0
- /package/{dist → legacy/dist}/pluginsCli.d.ts +0 -0
- /package/{dist → legacy/dist}/prCli-FH7N26D4.js +0 -0
- /package/{dist → legacy/dist}/prCli.d.ts +0 -0
- /package/{dist → legacy/dist}/presets.d.ts +0 -0
- /package/{dist → legacy/dist}/print.d.ts +0 -0
- /package/{dist → legacy/dist}/provider.d.ts +0 -0
- /package/{dist → legacy/dist}/providerCli-YMG4G56R.js +0 -0
- /package/{dist → legacy/dist}/providerCli.d.ts +0 -0
- /package/{dist → legacy/dist}/providers.d.ts +0 -0
- /package/{dist → legacy/dist}/reasoning.d.ts +0 -0
- /package/{dist → legacy/dist}/repomap.d.ts +0 -0
- /package/{dist → legacy/dist}/sdk.d.ts +0 -0
- /package/{dist → legacy/dist}/sdk.js +0 -0
- /package/{dist → legacy/dist}/serve-HSFF6MGB.js +0 -0
- /package/{dist → legacy/dist}/serve-HUQNVOSP.js +0 -0
- /package/{dist → legacy/dist}/serve.d.ts +0 -0
- /package/{dist → legacy/dist}/serveHeartbeat.d.ts +0 -0
- /package/{dist → legacy/dist}/serveProtocol.d.ts +0 -0
- /package/{dist → legacy/dist}/session-YM36TGU7.js +0 -0
- /package/{dist → legacy/dist}/session.d.ts +0 -0
- /package/{dist → legacy/dist}/setup-3YB6EKYX.js +0 -0
- /package/{dist → legacy/dist}/setup.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/copy.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/diff.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/doctor.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/export.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/info.d.ts +0 -0
- /package/{dist → legacy/dist}/slash/memory.d.ts +0 -0
- /package/{dist → legacy/dist}/statsCli-I4TSDU3X.js +0 -0
- /package/{dist → legacy/dist}/statsCli.d.ts +0 -0
- /package/{dist → legacy/dist}/textToolCalls.d.ts +0 -0
- /package/{dist → legacy/dist}/thinking.d.ts +0 -0
- /package/{dist → legacy/dist}/tokenBudget.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/bash.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/diagnostics.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/edit.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/fetch.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/glob.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/globSafety.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/grep.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/ignore.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/index.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/memory.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/paths.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/plan.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/read.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/repomap.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/sandbox.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/shell.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/skill.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/task.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/todo.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/types.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/websearch.d.ts +0 -0
- /package/{dist → legacy/dist}/tools/write.d.ts +0 -0
- /package/{dist → legacy/dist}/transferCli-3B4LMOYI.js +0 -0
- /package/{dist → legacy/dist}/transferCli.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/App.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/DiffView.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/EditableText.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/LinePrompt.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/ListPicker.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/Markdown.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/McpMenu.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/ModelPicker.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/PermissionPrompt.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/PlanApproval.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/PromptInput.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/ProviderMenu.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/Spinner.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/StatusBar.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/TodoList.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/ToolBlock.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/complete.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/index.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/lineEdit.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/liveCap.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/markdownLayout.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/replay.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/stdinFilter.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/table.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/theme.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/thinkingMouse.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/transcript.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/tty.d.ts +0 -0
- /package/{dist → legacy/dist}/ui/vim.d.ts +0 -0
- /package/{dist → legacy/dist}/ui-TAZMRXRI.js +0 -0
- /package/{dist → legacy/dist}/update-5V425FIK.js +0 -0
- /package/{dist → legacy/dist}/update.d.ts +0 -0
- /package/{dist → legacy/dist}/verify.d.ts +0 -0
- /package/{dist → legacy/dist}/version.d.ts +0 -0
- /package/{dist → legacy/dist}/webBudget.d.ts +0 -0
- /package/{dist → legacy/dist}/worktree.d.ts +0 -0
package/startup-menu.mjs
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// In-terminal BCCLI first-run / provider-switch menu.
|
|
2
|
+
// This runs in the parent process BEFORE the coding agent is launched; real
|
|
3
|
+
// API keys never enter Qwen's process or any coding/MCP subprocess.
|
|
4
|
+
import { createInterface } from 'node:readline/promises'
|
|
5
|
+
import { PROVIDERS, isConfigured, resolveProvider, selectedProvider, selectedModel, saveSelectedModel, saveProviderKey, useProvider } from './providers.mjs'
|
|
6
|
+
import { hiddenApiKey } from './provider-cli.mjs'
|
|
7
|
+
import { DEFAULT_MODEL, discoverModels, selectModel } from './core.mjs'
|
|
8
|
+
|
|
9
|
+
export const PROVIDER_SWITCH_EXIT = 51
|
|
10
|
+
|
|
11
|
+
// Returning users go straight to chat with the selected provider and model.
|
|
12
|
+
// Eligibility is still verified against the live provider's available models.
|
|
13
|
+
export async function autoSelectStartup({
|
|
14
|
+
providerId = selectedProvider(),
|
|
15
|
+
configured = isConfigured,
|
|
16
|
+
remembered = selectedModel,
|
|
17
|
+
resolve = resolveProvider,
|
|
18
|
+
list = discoverModels,
|
|
19
|
+
defaultModel = DEFAULT_MODEL,
|
|
20
|
+
env = process.env,
|
|
21
|
+
} = {}) {
|
|
22
|
+
if (!configured(providerId)) return undefined
|
|
23
|
+
const requested = providerId === 'botconnector'
|
|
24
|
+
? (env.BOTCONNECTOR_MODEL_ID || remembered(providerId) || defaultModel)
|
|
25
|
+
: remembered(providerId)
|
|
26
|
+
if (!requested) return undefined
|
|
27
|
+
const profile = resolve(providerId)
|
|
28
|
+
const models = await list({ key: profile.key, endpoint: profile.endpoint })
|
|
29
|
+
if (!models.some(item => item.id === requested)) return undefined
|
|
30
|
+
return { providerId, model: selectModel(models, requested), key: profile.key, endpoint: profile.endpoint }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export async function terminalQuestion(label, { input = process.stdin, output = process.stdout } = {}) {
|
|
34
|
+
const rl = createInterface({ input, output, terminal: !!input.isTTY })
|
|
35
|
+
try { return (await rl.question(label)).trim() }
|
|
36
|
+
finally { rl.close() }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function selectedName(answer, choices, defaultValue) {
|
|
40
|
+
if (!answer) return defaultValue
|
|
41
|
+
const clean = answer.replace(/!$/, '').trim().toLowerCase()
|
|
42
|
+
if (/^[0-9]+$/.test(clean)) return choices[Number(clean) - 1]
|
|
43
|
+
return choices.includes(clean) ? clean : undefined
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function startupMenu({
|
|
47
|
+
ask = terminalQuestion,
|
|
48
|
+
askSecret = hiddenApiKey,
|
|
49
|
+
out = value => console.log(value),
|
|
50
|
+
currentProvider = selectedProvider,
|
|
51
|
+
configured = isConfigured,
|
|
52
|
+
saveKey = saveProviderKey,
|
|
53
|
+
use = useProvider,
|
|
54
|
+
remembered = selectedModel,
|
|
55
|
+
saveModel = saveSelectedModel,
|
|
56
|
+
resolve = resolveProvider,
|
|
57
|
+
list = discoverModels,
|
|
58
|
+
defaultModel = DEFAULT_MODEL,
|
|
59
|
+
} = {}) {
|
|
60
|
+
const ids = Object.keys(PROVIDERS)
|
|
61
|
+
const active = currentProvider()
|
|
62
|
+
out('')
|
|
63
|
+
out('BCCLI | Provider dan model')
|
|
64
|
+
out('Pilih provider. Masukkan tanda ! setelah angka untuk mengganti API key yang sudah tersimpan.')
|
|
65
|
+
ids.forEach((id, idx) => {
|
|
66
|
+
out(' ' + (idx + 1) + '. ' + PROVIDERS[id].name +
|
|
67
|
+
(configured(id) ? ' [key tersedia]' : ' [perlu API key]') +
|
|
68
|
+
(id === active ? ' [aktif]' : ''))
|
|
69
|
+
})
|
|
70
|
+
let providerId
|
|
71
|
+
let replace
|
|
72
|
+
for (;;) {
|
|
73
|
+
const value = await ask('Provider (angka/nama; Enter = aktif; Ctrl+C untuk batal): ')
|
|
74
|
+
providerId = selectedName(value, ids, active)
|
|
75
|
+
if (!providerId) { out('Pilihan provider tidak dikenal.'); continue }
|
|
76
|
+
replace = value.endsWith('!')
|
|
77
|
+
break
|
|
78
|
+
}
|
|
79
|
+
let pendingKey
|
|
80
|
+
if (replace || !configured(providerId)) {
|
|
81
|
+
out('Masukkan API key ' + PROVIDERS[providerId].name + ' (input tersembunyi).')
|
|
82
|
+
pendingKey = await askSecret()
|
|
83
|
+
if (!pendingKey) throw Error('Tidak ada API key; provider tidak diubah.')
|
|
84
|
+
}
|
|
85
|
+
if (!pendingKey && !configured(providerId)) throw Error('Provider ' + providerId + ' belum memiliki API key. Tidak ada permintaan AI.')
|
|
86
|
+
// Validate before saving so a bad replacement never destroys a working key.
|
|
87
|
+
const profile = pendingKey
|
|
88
|
+
? { id: providerId, key: pendingKey, endpoint: PROVIDERS[providerId].endpoint }
|
|
89
|
+
: resolve(providerId)
|
|
90
|
+
const models = await list({ key: profile.key, endpoint: profile.endpoint })
|
|
91
|
+
if (!models.length) throw Error('Tidak ada model untuk provider ini.')
|
|
92
|
+
const all = [...models].sort((a, b) => a.id.localeCompare(b.id))
|
|
93
|
+
const previous = remembered(providerId)
|
|
94
|
+
const preferred = all.some(m => m.id === previous) ? previous :
|
|
95
|
+
providerId === 'botconnector' && all.some(m => m.id === defaultModel) ? defaultModel : undefined
|
|
96
|
+
let filtered = all
|
|
97
|
+
for (;;) {
|
|
98
|
+
out('')
|
|
99
|
+
out('Model ' + PROVIDERS[providerId].name + ' (' + filtered.length + ' dari ' + all.length + ' model):')
|
|
100
|
+
filtered.slice(0, 14).forEach((m, i) => out(' ' + (i + 1) + '. ' + m.id + (m.id === preferred ? ' [default]' : '')))
|
|
101
|
+
if (filtered.length > 14) out(' ... ketik ?kata untuk mencari model.')
|
|
102
|
+
const value = await ask('Model (nomor/ID/?cari' + (preferred ? '/Enter = ' + preferred : '') + '): ')
|
|
103
|
+
if (value.startsWith('?')) {
|
|
104
|
+
const term = value.slice(1).trim().toLowerCase()
|
|
105
|
+
filtered = term ? all.filter(m => m.id.toLowerCase().includes(term) || m.name?.toLowerCase().includes(term)) : all
|
|
106
|
+
if (!filtered.length) { out('Tidak ada model yang cocok.'); filtered = all }
|
|
107
|
+
continue
|
|
108
|
+
}
|
|
109
|
+
const candidate = !value ? preferred : /^[0-9]+$/.test(value) ? filtered[Number(value) - 1]?.id : value
|
|
110
|
+
if (!candidate || !all.some(m => m.id === candidate)) { out('Pilih nomor atau ID model yang tampil.'); continue }
|
|
111
|
+
selectModel(all, candidate)
|
|
112
|
+
// Save only after authenticated model discovery and selection.
|
|
113
|
+
if (pendingKey) {
|
|
114
|
+
saveKey(providerId, pendingKey)
|
|
115
|
+
out('API key tersimpan terlindungi. Tidak ada permintaan chat AI.')
|
|
116
|
+
}
|
|
117
|
+
use(providerId)
|
|
118
|
+
saveModel(providerId, candidate)
|
|
119
|
+
return { providerId, model: candidate, key: profile.key, endpoint: profile.endpoint }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
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
|
|
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
|