@monaco-neovim-wasm/lib 0.1.15 → 0.1.17

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.
@@ -1,137 +1,137 @@
1
- import * as y from "monaco-editor";
1
+ import * as b from "monaco-editor";
2
2
  class ie {
3
3
  buffer;
4
4
  ctrl;
5
5
  data;
6
6
  capacity;
7
- constructor(t = x) {
7
+ constructor(t = O) {
8
8
  this.capacity = Math.max(8 * 1024, t | 0), this.buffer = new SharedArrayBuffer(8 + this.capacity), this.ctrl = new Int32Array(this.buffer, 0, 2), this.data = new Uint8Array(this.buffer, 8), Atomics.store(this.ctrl, 0, 0), Atomics.store(this.ctrl, 1, 0);
9
9
  }
10
10
  push(t) {
11
11
  let e;
12
12
  if (t instanceof Uint8Array ? e = t : t instanceof ArrayBuffer || t instanceof SharedArrayBuffer ? e = new Uint8Array(t) : e = new Uint8Array(t), !e.byteLength) return !0;
13
- const i = Atomics.load(this.ctrl, 0), s = Atomics.load(this.ctrl, 1), n = s >= i ? s - i : this.capacity - (i - s), o = this.capacity - n - 1;
14
- if (e.byteLength > o) return !1;
15
- const c = this.capacity - s;
16
- return e.byteLength <= c ? (this.data.set(e, s), Atomics.store(this.ctrl, 1, (s + e.byteLength) % this.capacity)) : (this.data.set(e.subarray(0, c), s), this.data.set(e.subarray(c), 0), Atomics.store(this.ctrl, 1, e.byteLength - c)), Atomics.notify(this.ctrl, 1), !0;
13
+ const i = Atomics.load(this.ctrl, 0), s = Atomics.load(this.ctrl, 1), n = s >= i ? s - i : this.capacity - (i - s), r = this.capacity - n - 1;
14
+ if (e.byteLength > r) return !1;
15
+ const l = this.capacity - s;
16
+ return e.byteLength <= l ? (this.data.set(e, s), Atomics.store(this.ctrl, 1, (s + e.byteLength) % this.capacity)) : (this.data.set(e.subarray(0, l), s), this.data.set(e.subarray(l), 0), Atomics.store(this.ctrl, 1, e.byteLength - l)), Atomics.notify(this.ctrl, 1), !0;
17
17
  }
18
18
  }
19
- const x = 262144;
20
- function ne(l = x) {
21
- return new ie(l);
19
+ const O = 262144;
20
+ function ne(o = O) {
21
+ return new ie(o);
22
22
  }
23
- function U(l) {
23
+ function U(o) {
24
24
  const t = [];
25
- return T(l, t), new Uint8Array(t);
25
+ return K(o, t), new Uint8Array(t);
26
26
  }
27
- function T(l, t) {
28
- if (l == null) {
27
+ function K(o, t) {
28
+ if (o == null) {
29
29
  t.push(192);
30
30
  return;
31
31
  }
32
- if (typeof l == "boolean") {
33
- t.push(l ? 195 : 194);
32
+ if (typeof o == "boolean") {
33
+ t.push(o ? 195 : 194);
34
34
  return;
35
35
  }
36
- if (typeof l == "number") {
37
- se(l, t);
36
+ if (typeof o == "number") {
37
+ se(o, t);
38
38
  return;
39
39
  }
40
- if (typeof l == "string") {
41
- oe(l, t);
40
+ if (typeof o == "string") {
41
+ re(o, t);
42
42
  return;
43
43
  }
44
- if (typeof l == "bigint") {
45
- j(l, t);
44
+ if (typeof o == "bigint") {
45
+ G(o, t);
46
46
  return;
47
47
  }
48
- if (Array.isArray(l)) {
49
- ce(l, t);
48
+ if (Array.isArray(o)) {
49
+ le(o, t);
50
50
  return;
51
51
  }
52
- if (l instanceof Uint8Array) {
53
- le(l, t);
52
+ if (o instanceof Uint8Array) {
53
+ oe(o, t);
54
54
  return;
55
55
  }
56
- if (ge(l)) {
57
- ae(l, t);
56
+ if (ue(o)) {
57
+ ce(o, t);
58
58
  return;
59
59
  }
60
- if (typeof l == "object") {
61
- re(l, t);
60
+ if (typeof o == "object") {
61
+ ae(o, t);
62
62
  return;
63
63
  }
64
64
  throw new Error("Unsupported type in msgpack encode");
65
65
  }
66
- function se(l, t) {
67
- if (!Number.isFinite(l)) throw new Error("Cannot encode non-finite number");
68
- if (Number.isInteger(l)) {
69
- if (l >= 0 && l <= 127) {
70
- t.push(l);
66
+ function se(o, t) {
67
+ if (!Number.isFinite(o)) throw new Error("Cannot encode non-finite number");
68
+ if (Number.isInteger(o)) {
69
+ if (o >= 0 && o <= 127) {
70
+ t.push(o);
71
71
  return;
72
72
  }
73
- if (l < 0 && l >= -32) {
74
- t.push(224 | l + 32);
73
+ if (o < 0 && o >= -32) {
74
+ t.push(224 | o + 32);
75
75
  return;
76
76
  }
77
- if (l >= -128 && l <= 127) {
78
- t.push(208, l + 256 & 255);
77
+ if (o >= -128 && o <= 127) {
78
+ t.push(208, o + 256 & 255);
79
79
  return;
80
80
  }
81
- if (l >= -32768 && l <= 32767) {
82
- t.push(209, l >> 8 & 255, l & 255);
81
+ if (o >= -32768 && o <= 32767) {
82
+ t.push(209, o >> 8 & 255, o & 255);
83
83
  return;
84
84
  }
85
- if (l >= -2147483648 && l <= 2147483647) {
86
- t.push(210, l >> 24 & 255, l >> 16 & 255, l >> 8 & 255, l & 255);
85
+ if (o >= -2147483648 && o <= 2147483647) {
86
+ t.push(210, o >> 24 & 255, o >> 16 & 255, o >> 8 & 255, o & 255);
87
87
  return;
88
88
  }
89
- j(BigInt(l), t);
89
+ G(BigInt(o), t);
90
90
  return;
91
91
  }
92
92
  const e = new ArrayBuffer(8);
93
- new DataView(e).setFloat64(0, l), t.push(203, ...new Uint8Array(e));
93
+ new DataView(e).setFloat64(0, o), t.push(203, ...new Uint8Array(e));
94
94
  }
95
- function j(l, t) {
95
+ function G(o, t) {
96
96
  const e = new ArrayBuffer(8);
97
- new DataView(e).setBigInt64(0, BigInt(l)), t.push(211, ...new Uint8Array(e));
97
+ new DataView(e).setBigInt64(0, BigInt(o)), t.push(211, ...new Uint8Array(e));
98
98
  }
99
- function oe(l, t) {
100
- const i = new TextEncoder().encode(l), s = i.length;
99
+ function re(o, t) {
100
+ const i = new TextEncoder().encode(o), s = i.length;
101
101
  s <= 31 ? t.push(160 | s) : s <= 255 ? t.push(217, s) : s <= 65535 ? t.push(218, s >> 8 & 255, s & 255) : t.push(219, s >> 24 & 255, s >> 16 & 255, s >> 8 & 255, s & 255), t.push(...i);
102
102
  }
103
- function le(l, t) {
104
- const e = l.length;
105
- e <= 255 ? t.push(196, e) : e <= 65535 ? t.push(197, e >> 8 & 255, e & 255) : t.push(198, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, e & 255), t.push(...l);
103
+ function oe(o, t) {
104
+ const e = o.length;
105
+ e <= 255 ? t.push(196, e) : e <= 65535 ? t.push(197, e >> 8 & 255, e & 255) : t.push(198, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, e & 255), t.push(...o);
106
106
  }
107
- function ce(l, t) {
108
- const e = l.length;
107
+ function le(o, t) {
108
+ const e = o.length;
109
109
  e <= 15 ? t.push(144 | e) : e <= 65535 ? t.push(220, e >> 8 & 255, e & 255) : t.push(221, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, e & 255);
110
- for (const i of l)
111
- T(i, t);
110
+ for (const i of o)
111
+ K(i, t);
112
112
  }
113
- function re(l, t) {
114
- const e = Object.keys(l), i = e.length;
113
+ function ae(o, t) {
114
+ const e = Object.keys(o), i = e.length;
115
115
  i <= 15 ? t.push(128 | i) : i <= 65535 ? t.push(222, i >> 8 & 255, i & 255) : t.push(223, i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, i & 255);
116
116
  for (const s of e)
117
- T(s, t), T(l[s], t);
117
+ K(s, t), K(o[s], t);
118
118
  }
119
- function ae(l, t) {
120
- const e = l.data.length;
121
- e === 1 ? t.push(212, l.type) : e === 2 ? t.push(213, l.type) : e === 4 ? t.push(214, l.type) : e === 8 ? t.push(215, l.type) : e === 16 ? t.push(216, l.type) : t.push(199, e, l.type);
119
+ function ce(o, t) {
120
+ const e = o.data.length;
121
+ e === 1 ? t.push(212, o.type) : e === 2 ? t.push(213, o.type) : e === 4 ? t.push(214, o.type) : e === 8 ? t.push(215, o.type) : e === 16 ? t.push(216, o.type) : t.push(199, e, o.type);
122
122
  for (let i = 0; i < e; i += 1)
123
- t.push(l.data[i]);
123
+ t.push(o.data[i]);
124
124
  }
125
- function ge(l) {
126
- return !!(l && typeof l == "object" && typeof l.type == "number" && l.data instanceof Uint8Array);
125
+ function ue(o) {
126
+ return !!(o && typeof o == "object" && typeof o.type == "number" && o.data instanceof Uint8Array);
127
127
  }
128
- function de() {
128
+ function he() {
129
129
  return typeof SharedArrayBuffer < "u" && typeof crossOriginIsolated < "u" && crossOriginIsolated;
130
130
  }
131
- function Ie(l) {
132
- return l.byteOffset === 0 && l.byteLength === l.buffer.byteLength ? l : l.slice();
131
+ function de(o) {
132
+ return o.byteOffset === 0 && o.byteLength === o.buffer.byteLength ? o : o.slice();
133
133
  }
134
- class he {
134
+ class fe {
135
135
  init;
136
136
  worker = null;
137
137
  sharedInput = null;
@@ -150,7 +150,7 @@ class he {
150
150
  worker: t.worker ?? null,
151
151
  workerUrl: t.workerUrl ?? null,
152
152
  createWorker: t.createWorker ?? null,
153
- sharedInputBytes: t.sharedInputBytes ?? x,
153
+ sharedInputBytes: t.sharedInputBytes ?? O,
154
154
  inputMode: t.inputMode ?? "shared",
155
155
  rpcTimeoutMs: t.rpcTimeoutMs ?? 8e3,
156
156
  maxQueuedBytes: t.maxQueuedBytes ?? 4 * 1024 * 1024,
@@ -168,45 +168,45 @@ class he {
168
168
  return this.workerExitCode;
169
169
  }
170
170
  async start(t) {
171
- const { cols: e, rows: i, wasmPath: s, runtimePath: n, env: o, files: c } = t;
172
- if (this.inputMode = t.inputMode ?? this.init.inputMode, this.inputMode === "shared" && !de())
171
+ const { cols: e, rows: i, wasmPath: s, runtimePath: n, env: r, files: l } = t;
172
+ if (this.inputMode = t.inputMode ?? this.init.inputMode, this.inputMode === "shared" && !he())
173
173
  throw new Error('SharedArrayBuffer is required for inputMode="shared"; serve with COOP/COEP so crossOriginIsolated is true, or use inputMode="message" with the asyncify worker.');
174
- const a = this.worker;
175
- if (this.stop({ terminate: !this.init.reuseWorker, silent: !0 }), this.sharedInput = this.inputMode === "shared" ? ne(this.init.sharedInputBytes) : null, this.workerExited = !1, this.workerExitCode = null, this.workerFatalError = null, this.reqId = 1, this.pending.clear(), this.init.worker ? this.worker = this.init.worker : this.init.createWorker ? this.worker = this.init.createWorker() : this.init.reuseWorker && a ? this.worker = a : this.worker = this.init.workerUrl ? new Worker(this.init.workerUrl, { type: "module" }) : null, !this.worker) throw new Error("worker/workerUrl is required");
176
- this.worker.onmessage = (h) => this.handleWorkerMessage(h.data);
177
- const g = (h) => {
174
+ const c = this.worker;
175
+ if (this.stop({ terminate: !this.init.reuseWorker, silent: !0 }), this.sharedInput = this.inputMode === "shared" ? ne(this.init.sharedInputBytes) : null, this.workerExited = !1, this.workerExitCode = null, this.workerFatalError = null, this.reqId = 1, this.pending.clear(), this.init.worker ? this.worker = this.init.worker : this.init.createWorker ? this.worker = this.init.createWorker() : this.init.reuseWorker && c ? this.worker = c : this.worker = this.init.workerUrl ? new Worker(this.init.workerUrl, { type: "module" }) : null, !this.worker) throw new Error("worker/workerUrl is required");
176
+ this.worker.onmessage = (f) => this.handleWorkerMessage(f.data);
177
+ const u = (f) => {
178
178
  if (!this.workerExited) {
179
- if (this.workerFatalError = h, this.workerExited = !0, this.workerExitCode = 1, this.pending.size) {
180
- const u = new Error(h);
181
- this.pending.forEach((m) => m.reject(u)), this.pending.clear();
179
+ if (this.workerFatalError = f, this.workerExited = !0, this.workerExitCode = 1, this.pending.size) {
180
+ const p = new Error(f);
181
+ this.pending.forEach((m) => m.reject(p)), this.pending.clear();
182
182
  }
183
183
  try {
184
- this.init.handlers.onStartError?.(h);
184
+ this.init.handlers.onStartError?.(f);
185
185
  } catch {
186
186
  }
187
187
  }
188
188
  };
189
- this.worker.onerror = (h) => {
190
- const u = h?.message ? `worker error: ${h.message}` : "worker error", m = h?.error?.stack;
191
- g(m ? `${u}
192
- ${m}` : u);
189
+ this.worker.onerror = (f) => {
190
+ const p = f?.message ? `worker error: ${f.message}` : "worker error", m = f?.error?.stack;
191
+ u(m ? `${p}
192
+ ${m}` : p);
193
193
  }, this.worker.onmessageerror = () => {
194
- g("worker messageerror");
194
+ u("worker messageerror");
195
195
  };
196
- const I = {
196
+ const d = {
197
197
  type: "start",
198
198
  cols: Number(e) || 80,
199
199
  rows: Number(i) || 24,
200
200
  wasmPath: String(s ?? ""),
201
201
  runtimePath: String(n ?? ""),
202
202
  inputBuffer: this.sharedInput?.buffer ?? null,
203
- env: o ?? void 0,
204
- files: c ?? void 0
203
+ env: r ?? void 0,
204
+ files: l ?? void 0
205
205
  };
206
206
  try {
207
- this.worker.postMessage(I, []);
207
+ this.worker.postMessage(d, []);
208
208
  } catch {
209
- this.worker.postMessage(I);
209
+ this.worker.postMessage(d);
210
210
  }
211
211
  }
212
212
  stop(t = {}) {
@@ -241,14 +241,14 @@ ${m}` : u);
241
241
  return;
242
242
  }
243
243
  if (this.workerExited) {
244
- const c = this.workerExitCode, a = this.workerFatalError ? `: ${this.workerFatalError}` : "";
245
- s(new Error(c != null ? `nvim exited (${c})${a}` : `nvim exited${a}`));
244
+ const l = this.workerExitCode, c = this.workerFatalError ? `: ${this.workerFatalError}` : "";
245
+ s(new Error(l != null ? `nvim exited (${l})${c}` : `nvim exited${c}`));
246
246
  return;
247
247
  }
248
248
  const n = this.reqId++;
249
249
  this.pending.set(n, { resolve: i, reject: s, ts: Date.now(), method: t });
250
- const o = U([0, n, t, e]);
251
- this.postInput(o), setTimeout(() => {
250
+ const r = U([0, n, t, e]);
251
+ this.postInput(r), setTimeout(() => {
252
252
  this.pending.has(n) && (this.pending.delete(n), s(new Error(this.workerExited ? this.workerExitCode != null ? `nvim exited (${this.workerExitCode})${this.workerFatalError ? `: ${this.workerFatalError}` : ""}` : `nvim exited${this.workerFatalError ? `: ${this.workerFatalError}` : ""}` : `rpc timeout: ${t}`)));
253
253
  }, this.init.rpcTimeoutMs);
254
254
  });
@@ -265,8 +265,8 @@ ${m}` : u);
265
265
  return;
266
266
  } catch {
267
267
  if (this.workerExited) {
268
- const n = this.workerExitCode, o = this.workerFatalError ? `: ${this.workerFatalError}` : "";
269
- throw new Error(n != null ? `nvim exited (${n})${o}` : `nvim exited${o}`);
268
+ const n = this.workerExitCode, r = this.workerFatalError ? `: ${this.workerFatalError}` : "";
269
+ throw new Error(n != null ? `nvim exited (${n})${r}` : `nvim exited${r}`);
270
270
  }
271
271
  await new Promise((n) => setTimeout(n, 300));
272
272
  }
@@ -281,9 +281,9 @@ ${m}` : u);
281
281
  handleWorkerMessage(t) {
282
282
  const e = t?.type;
283
283
  if (e === "rpc-response") {
284
- const { msgid: i, error: s, result: n } = t, o = this.pending.get(i);
285
- if (!o) return;
286
- this.pending.delete(i), s ? o.reject(new Error(String(s))) : o.resolve(n);
284
+ const { msgid: i, error: s, result: n } = t, r = this.pending.get(i);
285
+ if (!r) return;
286
+ this.pending.delete(i), s ? r.reject(new Error(String(s))) : r.resolve(n);
287
287
  return;
288
288
  }
289
289
  if (e === "rpc-notify") {
@@ -337,8 +337,8 @@ ${m}` : u);
337
337
  if (e === "exit") {
338
338
  const i = t, s = i.code, n = i.lastStderr;
339
339
  if (this.workerExited = !0, this.workerExitCode = s, this.pending.size) {
340
- const o = n ? `: ${n.trim()}` : "", c = new Error(`nvim exited (${s})${o}`);
341
- this.pending.forEach((a) => a.reject(c)), this.pending.clear();
340
+ const r = n ? `: ${n.trim()}` : "", l = new Error(`nvim exited (${s})${r}`);
341
+ this.pending.forEach((c) => c.reject(l)), this.pending.clear();
342
342
  }
343
343
  try {
344
344
  this.init.handlers.onExit?.(s, n);
@@ -348,7 +348,7 @@ ${m}` : u);
348
348
  }
349
349
  postInput(t) {
350
350
  if (!t || !t.buffer) return;
351
- const e = Ie(t);
351
+ const e = de(t);
352
352
  if (!(!this.worker || this.workerExited)) {
353
353
  if (this.inputMode === "shared") {
354
354
  if (!this.sharedInput || this.inputQueueHead >= this.inputQueue.length && this.sharedInput.push(e))
@@ -388,19 +388,19 @@ ${m}` : u);
388
388
  }
389
389
  } else {
390
390
  let e = 0, i = 0;
391
- for (let o = this.inputQueueHead; o < this.inputQueue.length; o += 1) {
392
- const c = this.inputQueue[o];
393
- if (c?.byteLength) {
394
- if (i > 0 && e + c.byteLength > 262144) break;
395
- e += c.byteLength, i += 1;
391
+ for (let r = this.inputQueueHead; r < this.inputQueue.length; r += 1) {
392
+ const l = this.inputQueue[r];
393
+ if (l?.byteLength) {
394
+ if (i > 0 && e + l.byteLength > 262144) break;
395
+ e += l.byteLength, i += 1;
396
396
  }
397
397
  }
398
398
  if (i <= 0 || e <= 0) return;
399
399
  const s = new Uint8Array(e);
400
400
  let n = 0;
401
- for (let o = 0; o < i; o += 1) {
402
- const c = this.inputQueue[this.inputQueueHead + o];
403
- s.set(c, n), n += c.byteLength;
401
+ for (let r = 0; r < i; r += 1) {
402
+ const l = this.inputQueue[this.inputQueueHead + r];
403
+ s.set(l, n), n += l.byteLength;
404
404
  }
405
405
  this.inputQueueHead += i, this.inputQueuedBytes -= e, this.postStdin(s);
406
406
  }
@@ -418,7 +418,7 @@ ${m}` : u);
418
418
  }
419
419
  }
420
420
  }
421
- const ue = `if !exists('g:monaco_neovim_wasm_chan')
421
+ const pe = `if !exists('g:monaco_neovim_wasm_chan')
422
422
  finish
423
423
  endif
424
424
 
@@ -582,7 +582,7 @@ onoremap <silent> <C-f> <Cmd>call <SID>scroll('down', 'page')<CR>
582
582
  nnoremap <silent> <C-b> <Cmd>call <SID>scroll('up', 'page')<CR>
583
583
  xnoremap <silent> <C-b> <Cmd>call <SID>scroll('up', 'page')<CR>
584
584
  onoremap <silent> <C-b> <Cmd>call <SID>scroll('up', 'page')<CR>
585
- `, Ce = `if !exists('g:monaco_neovim_wasm_chan')
585
+ `, ge = `if !exists('g:monaco_neovim_wasm_chan')
586
586
  finish
587
587
  endif
588
588
 
@@ -633,7 +633,7 @@ cnoreabbrev <expr> q <SID>abbr('q', 'MonacoQuit')
633
633
  cnoreabbrev <expr> quit <SID>abbr('quit', 'MonacoQuit')
634
634
  cnoreabbrev <expr> wq <SID>abbr('wq', 'MonacoWq')
635
635
  cnoreabbrev <expr> x <SID>abbr('x', 'MonacoWq')
636
- `, pe = [
636
+ `, ye = [
637
637
  "-- Monaco + Neovim (WASM)",
638
638
  "-- Click into the editor, press i, and start typing.",
639
639
  "",
@@ -643,20 +643,20 @@ cnoreabbrev <expr> x <SID>abbr('x', 'MonacoWq')
643
643
  "",
644
644
  "print(greet('monaco'))"
645
645
  ];
646
- function J(l) {
646
+ function H(o) {
647
647
  try {
648
648
  if (typeof document > "u") return !1;
649
649
  const t = document.body;
650
650
  if (!t) return !1;
651
651
  const e = document.createElement("textarea");
652
- e.value = String(l ?? ""), e.setAttribute("readonly", ""), e.style.position = "fixed", e.style.left = "0", e.style.top = "0", e.style.width = "1px", e.style.height = "1px", e.style.opacity = "0", e.style.pointerEvents = "none", t.appendChild(e), e.focus(), e.select(), e.setSelectionRange(0, e.value.length);
652
+ e.value = String(o ?? ""), e.setAttribute("readonly", ""), e.style.position = "fixed", e.style.left = "0", e.style.top = "0", e.style.width = "1px", e.style.height = "1px", e.style.opacity = "0", e.style.pointerEvents = "none", t.appendChild(e), e.focus(), e.select(), e.setSelectionRange(0, e.value.length);
653
653
  const i = !!document.execCommand?.("copy");
654
654
  return t.removeChild(e), i;
655
655
  } catch {
656
656
  return !1;
657
657
  }
658
658
  }
659
- const be = `
659
+ const ve = `
660
660
  local api, fn = vim.api, vim.fn
661
661
 
662
662
  -- virtcol2col() returns a column (1-indexed) for the given virtual column.
@@ -801,7 +801,7 @@ end
801
801
 
802
802
  local tail = (api.nvim_get_mode().mode or ""):sub(-1)
803
803
  return { tail = tail, ranges = get_selections(...) }
804
- `, ye = `
804
+ `, be = `
805
805
  local api, fn = vim.api, vim.fn
806
806
 
807
807
  local function get_visible_range(s, e)
@@ -890,7 +890,7 @@ end
890
890
 
891
891
  return run(...)
892
892
  `;
893
- class fe {
893
+ class _e {
894
894
  editor;
895
895
  opts;
896
896
  session = null;
@@ -1033,7 +1033,7 @@ class fe {
1033
1033
  const e = String(t ?? "");
1034
1034
  if (!e) return;
1035
1035
  const i = typeof performance < "u" && performance.now ? performance.now() : Date.now();
1036
- e.length > 1 && e === this.lastImeCommitText && i - this.lastImeCommitAt < 60 || (this.lastImeCommitText = e, this.lastImeCommitAt = i, this.sendInput(_(e, !0)));
1036
+ e.length > 1 && e === this.lastImeCommitText && i - this.lastImeCommitAt < 60 || (this.lastImeCommitText = e, this.lastImeCommitAt = i, this.sendInput(z(e, !0)));
1037
1037
  }
1038
1038
  armIgnoreNextInputEvent(t, e = 80) {
1039
1039
  this.ignoreNextInputEvent = !0, this.ignoreNextInputEventTarget = t ?? null;
@@ -1057,22 +1057,22 @@ class fe {
1057
1057
  })(), s = (() => {
1058
1058
  try {
1059
1059
  if (typeof location > "u" || !location?.search) return !1;
1060
- const c = new URLSearchParams(location.search);
1061
- return c.has("monaco-neovim-wasm-debug") || c.has("mnw_debug");
1060
+ const l = new URLSearchParams(location.search);
1061
+ return l.has("monaco-neovim-wasm-debug") || l.has("mnw_debug");
1062
1062
  } catch {
1063
1063
  return !1;
1064
1064
  }
1065
- })(), o = i || s ? !0 : !!e.debug;
1065
+ })(), r = i || s ? !0 : !!e.debug;
1066
1066
  this.opts = {
1067
1067
  worker: e.worker ?? null,
1068
- workerUrl: e.workerUrl ?? new URL("data:video/mp2t;base64,aW1wb3J0IHsKICBXQVNJLAogIHdhc2ksCiAgRGlyZWN0b3J5LAogIEZpbGUsCiAgUHJlb3BlbkRpcmVjdG9yeSwKICBGZCwKICBJbm9kZSwKfSBmcm9tICJAYmpvcm4zL2Jyb3dzZXJfd2FzaV9zaGltIjsKaW1wb3J0IHsgZ3VuemlwU3luYyB9IGZyb20gImZmbGF0ZSI7CmltcG9ydCB7IERlY29kZXIgfSBmcm9tICIuL21zZ3BhY2siOwp0eXBlIFN0YXJ0TWVzc2FnZSA9IHsKICB0eXBlOiAic3RhcnQiOwogIGNvbHM/OiBudW1iZXI7CiAgcm93cz86IG51bWJlcjsKICB3YXNtUGF0aDogc3RyaW5nOwogIHJ1bnRpbWVQYXRoOiBzdHJpbmc7CiAgaW5wdXRCdWZmZXI/OiBTaGFyZWRBcnJheUJ1ZmZlciB8IG51bGw7CiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7CiAgZmlsZXM/OiBBcnJheTx7IHBhdGg6IHN0cmluZzsgZGF0YTogVWludDhBcnJheSB8IEFycmF5QnVmZmVyIHwgQXJyYXlMaWtlPG51bWJlcj4gfCB7IHR5cGU6ICJCdWZmZXIiOyBkYXRhOiBudW1iZXJbXSB9IH0+IHwgbnVsbDsKfTsKCnR5cGUgU3RvcE1lc3NhZ2UgPSB7IHR5cGU6ICJzdG9wIiB9OwoKdHlwZSBJbmJvdW5kTWVzc2FnZSA9IFN0YXJ0TWVzc2FnZSB8IFN0b3BNZXNzYWdlOwoKdHlwZSBEaXJOb2RlID0gRGlyZWN0b3J5ICYgeyBjb250ZW50czogTWFwPHN0cmluZywgYW55PiB9OwoKbGV0IHJwY0RlY29kZXI6IERlY29kZXIgfCBudWxsID0gbnVsbDsKbGV0IGFjdGl2ZVdhc2k6IFdBU0kgfCBudWxsID0gbnVsbDsKbGV0IGlucHV0RmQ6IFJpbmdGZCB8IG51bGwgPSBudWxsOwpjb25zdCBzdGRlcnJEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CmxldCBsYXN0U3RkZXJyID0gIiI7CmxldCBmYXRhbFNlbnQgPSBmYWxzZTsKbGV0IGNhY2hlZFdhc206IHsgdXJsOiBzdHJpbmc7IGJ5dGVzOiBVaW50OEFycmF5IH0gfCBudWxsID0gbnVsbDsKbGV0IGNhY2hlZFJ1bnRpbWU6IHsgdXJsOiBzdHJpbmc7IGVudHJpZXM6IFRhckVudHJ5W10gfSB8IG51bGwgPSBudWxsOwoKc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIChldikgPT4gewogIGlmIChmYXRhbFNlbnQpIHJldHVybjsKICBmYXRhbFNlbnQgPSB0cnVlOwogIGNvbnN0IG1zZyA9IGV2Lm1lc3NhZ2UgfHwgU3RyaW5nKGV2LmVycm9yIHx8ICJ3b3JrZXIgZXJyb3IiKTsKICBjb25zdCBzdGFjayA9IChldi5lcnJvciBhcyB7IHN0YWNrPzogc3RyaW5nIH0pPy5zdGFjazsKICB0cnkgewogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAic3RhcnQtZXJyb3IiLCBtZXNzYWdlOiBzdGFjayA/IGAke21zZ31cbiR7c3RhY2t9YCA6IG1zZyB9KTsKICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogImV4aXQiLCBjb2RlOiAxLCBsYXN0U3RkZXJyIH0pOwogIH0gY2F0Y2ggKF8pIHsKICB9Cn0pOwoKc2VsZi5hZGRFdmVudExpc3RlbmVyKCJ1bmhhbmRsZWRyZWplY3Rpb24iLCAoZXYpID0+IHsKICBpZiAoZmF0YWxTZW50KSByZXR1cm47CiAgZmF0YWxTZW50ID0gdHJ1ZTsKICBjb25zdCByZWFzb24gPSBldi5yZWFzb247CiAgY29uc3QgbXNnID0gKHJlYXNvbiAmJiAocmVhc29uLm1lc3NhZ2UgfHwgU3RyaW5nKHJlYXNvbikpKSB8fCAidW5oYW5kbGVkIHJlamVjdGlvbiI7CiAgY29uc3Qgc3RhY2sgPSAocmVhc29uIGFzIHsgc3RhY2s/OiBzdHJpbmcgfSk/LnN0YWNrOwogIHRyeSB7CiAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bXNnfVxuJHtzdGFja31gIDogbXNnIH0pOwogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiZXhpdCIsIGNvZGU6IDEsIGxhc3RTdGRlcnIgfSk7CiAgfSBjYXRjaCAoXykgewogIH0KfSk7CgpzZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50PEluYm91bmRNZXNzYWdlPikgPT4gewogIGNvbnN0IHsgdHlwZSB9ID0gZXZlbnQuZGF0YSB8fCB7fTsKICBpZiAodHlwZSA9PT0gInN0YXJ0IikgewogICAgc3RhcnROdmltKGV2ZW50LmRhdGEgYXMgU3RhcnRNZXNzYWdlKS5jYXRjaCgoZXJyKSA9PiB7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInN0YXJ0LWVycm9yIiwgbWVzc2FnZTogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpIH0pOwogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJleGl0IiwgY29kZTogMSB9KTsKICAgIH0pOwogIH0gZWxzZSBpZiAodHlwZSA9PT0gInN0b3AiKSB7CiAgICB0cnkgewogICAgICBhY3RpdmVXYXNpPy53YXNpSW1wb3J0Py5wcm9jX2V4aXQ/LigwKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgIH0KICAgIGlucHV0RmQgPSBudWxsOwogIH0KfTsKCmNsYXNzIFJpbmdGZCBleHRlbmRzIEZkIHsKICBwcml2YXRlIHJlYWRvbmx5IGN0cmw6IEludDMyQXJyYXk7CiAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBVaW50OEFycmF5OwogIHByaXZhdGUgcmVhZG9ubHkgY2FwYWNpdHk6IG51bWJlcjsKCiAgY29uc3RydWN0b3IoYnVmZmVyOiBTaGFyZWRBcnJheUJ1ZmZlcikgewogICAgc3VwZXIoKTsKICAgIHRoaXMuY3RybCA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgMCwgMik7CiAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheShidWZmZXIsIDgpOwogICAgdGhpcy5jYXBhY2l0eSA9IHRoaXMuZGF0YS5sZW5ndGg7CiAgfQoKICBmZF9mZHN0YXRfZ2V0KCkgewogICAgY29uc3QgZmRzdGF0ID0gbmV3IHdhc2kuRmRzdGF0KHdhc2kuRklMRVRZUEVfUkVHVUxBUl9GSUxFLCAwKTsKICAgIGZkc3RhdC5mc19yaWdodHNfYmFzZSA9IEJpZ0ludCh3YXNpLlJJR0hUU19GRF9SRUFEIHwgd2FzaS5SSUdIVFNfRkRfV1JJVEUpOwogICAgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX1NVQ0NFU1MsIGZkc3RhdCB9OwogIH0KCiAgZmRfY2xvc2UoKSB7IHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7IH0KCiAgZmRfcmVhZChzaXplOiBudW1iZXIpIHsKICAgIGNvbnN0IG1heCA9IE1hdGgubWluKE1hdGgubWF4KDAsIE51bWJlcihzaXplKSB8fCAwKSwgdGhpcy5jYXBhY2l0eSk7CiAgICBpZiAobWF4ID09PSAwKSByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fQUdBSU4sIGRhdGE6IG5ldyBVaW50OEFycmF5KCkgfTsKICAgIGxldCBoZWFkID0gQXRvbWljcy5sb2FkKHRoaXMuY3RybCwgMCk7CiAgICBjb25zdCB0YWlsID0gQXRvbWljcy5sb2FkKHRoaXMuY3RybCwgMSk7CiAgICBpZiAoaGVhZCA9PT0gdGFpbCkgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0FHQUlOLCBkYXRhOiBuZXcgVWludDhBcnJheSgpIH07CiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShtYXgpOwogICAgbGV0IHdyaXR0ZW4gPSAwOwogICAgd2hpbGUgKGhlYWQgIT09IHRhaWwgJiYgd3JpdHRlbiA8IG1heCkgewogICAgICBvdXRbd3JpdHRlbisrXSA9IHRoaXMuZGF0YVtoZWFkXTsKICAgICAgaGVhZCA9IChoZWFkICsgMSkgJSB0aGlzLmNhcGFjaXR5OwogICAgfQogICAgQXRvbWljcy5zdG9yZSh0aGlzLmN0cmwsIDAsIGhlYWQpOwogICAgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX1NVQ0NFU1MsIGRhdGE6IG91dC5zbGljZSgwLCB3cml0dGVuKSB9OwogIH0KCiAgZmRfd3JpdGUoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBud3JpdHRlbjogMCB9OyB9CiAgZmRfc2VlaygpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIG9mZnNldDogMG4gfTsgfQogIGZkX3RlbGwoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBvZmZzZXQ6IDBuIH07IH0KICBmZF9wcmVhZCgpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIGRhdGE6IG5ldyBVaW50OEFycmF5KCkgfTsgfQogIGZkX3B3cml0ZSgpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIG53cml0dGVuOiAwIH07IH0KfQoKY2xhc3MgU2lua0ZkIGV4dGVuZHMgRmQgewogIHByaXZhdGUgcmVhZG9ubHkgb25Xcml0ZTogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IHZvaWQ7CgogIGNvbnN0cnVjdG9yKG9uV3JpdGU6IChkYXRhOiBVaW50OEFycmF5KSA9PiB2b2lkKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5vbldyaXRlID0gb25Xcml0ZTsKICB9CgogIGZkX2Zkc3RhdF9nZXQoKSB7CiAgICBjb25zdCBmZHN0YXQgPSBuZXcgd2FzaS5GZHN0YXQod2FzaS5GSUxFVFlQRV9SRUdVTEFSX0ZJTEUsIDApOwogICAgZmRzdGF0LmZzX3JpZ2h0c19iYXNlID0gQmlnSW50KHdhc2kuUklHSFRTX0ZEX1dSSVRFKTsKICAgIHJldHVybiB7IHJldDogd2FzaS5FUlJOT19TVUNDRVNTLCBmZHN0YXQgfTsKICB9CgogIGZkX3dyaXRlKGRhdGE6IFVpbnQ4QXJyYXkpIHsKICAgIHRoaXMub25Xcml0ZShuZXcgVWludDhBcnJheShkYXRhKSk7CiAgICByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fU1VDQ0VTUywgbndyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0aCB9OwogIH0KCiAgZmRfY2xvc2UoKSB7IHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7IH0KfQoKYXN5bmMgZnVuY3Rpb24gc3RhcnROdmltKHsgY29scywgcm93cywgd2FzbVBhdGgsIHJ1bnRpbWVQYXRoLCBpbnB1dEJ1ZmZlciwgZW52OiBleHRyYUVudiwgZmlsZXMgfTogU3RhcnRNZXNzYWdlKSB7CiAgbGV0IGV4aXRDb2RlID0gMTsKICB0cnkgewogICAgaWYgKCFpbnB1dEJ1ZmZlcikgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6ICJpbnB1dCBidWZmZXIgbWlzc2luZyIgfSk7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogImV4aXQiLCBjb2RlOiAxIH0pOwogICAgICByZXR1cm47CiAgICB9CgogICAgcnBjRGVjb2RlciA9IG51bGw7CiAgICBpbnB1dEZkID0gbmV3IFJpbmdGZChpbnB1dEJ1ZmZlcik7CgogICAgY29uc3Qgd2FzbUJ5dGVzID0gYXdhaXQgZ2V0Q2FjaGVkV2FzbUJ5dGVzKHdhc21QYXRoKTsKICAgIGNvbnN0IHVudGFycmVkID0gYXdhaXQgZ2V0Q2FjaGVkUnVudGltZUVudHJpZXMocnVudGltZVBhdGgpOwogICAgY29uc3QgZnNSb290ID0gYnVpbGRGcyh1bnRhcnJlZCwgKCkgPT4ge30pOwogICAgaWYgKGZpbGVzICYmIEFycmF5LmlzQXJyYXkoZmlsZXMpICYmIGZpbGVzLmxlbmd0aCkgYXBwbHlFeHRyYUZpbGVzKGZzUm9vdCwgZmlsZXMpOwoKICAgIGNvbnN0IHN0ZGluRmQgPSBpbnB1dEZkITsKICAgIGNvbnN0IHN0ZG91dEZkID0gbmV3IFNpbmtGZChoYW5kbGVTdGRvdXQpOwogICAgY29uc3Qgc3RkZXJyRmQgPSBuZXcgU2lua0ZkKChkYXRhKSA9PiB7CiAgICAgIGNvbnN0IG1zZyA9IHN0ZGVyckRlY29kZXIuZGVjb2RlKGRhdGEpOwogICAgICBpZiAobXNnKSB7CiAgICAgICAgbGFzdFN0ZGVyciA9IChsYXN0U3RkZXJyICsgbXNnKS5zbGljZSgtODE5Mik7CiAgICAgIH0KICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAic3RkZXJyIiwgbWVzc2FnZTogbXNnIH0pOwogICAgfSk7CgogICAgY29uc3QgcHJlb3BlbiA9IG5ldyBSb290ZWRQcmVvcGVuRGlyZWN0b3J5KCJudmltIiwgZnNSb290LmNvbnRlbnRzKTsKICAgIGNvbnN0IHRtcERpciA9IGZzUm9vdC5jb250ZW50cy5nZXQoInRtcCIpIGFzIERpcmVjdG9yeSB8IHVuZGVmaW5lZDsKICAgIGNvbnN0IHRtcCA9IHRtcERpcj8uY29udGVudHMgfHwgbmV3IE1hcCgpOwogICAgY29uc3QgcHJlb3BlblRtcCA9IG5ldyBSb290ZWRQcmVvcGVuRGlyZWN0b3J5KCJ0bXAiLCB0bXApOwoKICAgIGNvbnN0IGFyZ3MgPSBbIm52aW0iLCAiLS1oZWFkbGVzcyIsICItLWVtYmVkIiwgIi11IiwgIk5PUkMiLCAiLS1ub3BsdWdpbiIsICItaSIsICJOT05FIiwgIi1uIl07CiAgICBjb25zdCBlbnYgPSBbCiAgICAgICJWSU1SVU5USU1FPS9udmltL3J1bnRpbWUiLAogICAgICAiSE9NRT0vbnZpbS9ob21lIiwKICAgICAgIlBXRD0vbnZpbSIsCiAgICAgICJYREdfQ09ORklHX0hPTUU9L252aW0vaG9tZS8uY29uZmlnIiwKICAgICAgIlhER19EQVRBX0hPTUU9L252aW0vaG9tZS8ubG9jYWwvc2hhcmUiLAogICAgICAiWERHX1NUQVRFX0hPTUU9L252aW0vaG9tZS8ubG9jYWwvc3RhdGUiLAogICAgICAiUEFUSD0vdXNyL2JpbjovYmluIiwKICAgICAgIlRNUERJUj0vbnZpbS90bXAiLAogICAgICBgQ09MVU1OUz0ke2NvbHMgfHwgMTIwfWAsCiAgICAgIGBMSU5FUz0ke3Jvd3MgfHwgNDB9YCwKICAgIF07CiAgICBpZiAoZXh0cmFFbnYgJiYgdHlwZW9mIGV4dHJhRW52ID09PSAib2JqZWN0IikgewogICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhleHRyYUVudikpIHsKICAgICAgICBpZiAoIWspIGNvbnRpbnVlOwogICAgICAgIGVudi5wdXNoKGAke2t9PSR7U3RyaW5nKHYgPz8gIiIpfWApOwogICAgICB9CiAgICB9CiAgICBhY3RpdmVXYXNpID0gbmV3IFdBU0koYXJncywgZW52LCBbc3RkaW5GZCwgc3Rkb3V0RmQsIHN0ZGVyckZkLCBwcmVvcGVuLCBwcmVvcGVuVG1wXSwgeyBkZWJ1ZzogZmFsc2UgfSk7CiAgICBhY3RpdmVXYXNpLmZkc1swXSA9IHN0ZGluRmQ7CiAgICBhY3RpdmVXYXNpLmZkc1sxXSA9IHN0ZG91dEZkOwogICAgYWN0aXZlV2FzaS5mZHNbMl0gPSBzdGRlcnJGZDsKICAgIGFjdGl2ZVdhc2kuZmRzWzNdID0gcHJlb3BlbjsKICAgIGFjdGl2ZVdhc2kuZmRzWzRdID0gcHJlb3BlblRtcDsKICAgIChhY3RpdmVXYXNpIGFzIHVua25vd24gYXMgeyBwcmVvcGVuczogUmVjb3JkPHN0cmluZywgUHJlb3BlbkRpcmVjdG9yeT4gfSkucHJlb3BlbnMgPSB7ICIvbnZpbSI6IHByZW9wZW4sICIvdG1wIjogcHJlb3BlblRtcCB9OwoKICAgIGNvbnN0IGVudkltcG9ydHMgPSBtYWtlRW52KCgpID0+IGFjdGl2ZVdhc2k/Lndhc2lJbXBvcnQ/LnByb2NfZXhpdD8uKDEpKTsKICAgIGNvbnN0IHdhc21JbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21CeXRlcywgewogICAgICB3YXNpX3NuYXBzaG90X3ByZXZpZXcxOiBhY3RpdmVXYXNpLndhc2lJbXBvcnQsCiAgICAgIGVudjogZW52SW1wb3J0cywKICAgIH0pOwogICAgY29uc3QgaW5zdGFuY2VTb3VyY2UgPSB3YXNtSW5zdGFuY2UgYXMgdW5rbm93biBhcyBXZWJBc3NlbWJseS5XZWJBc3NlbWJseUluc3RhbnRpYXRlZFNvdXJjZTsKICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VTb3VyY2UuaW5zdGFuY2UKICAgICAgPz8gKHdhc21JbnN0YW5jZSBhcyB1bmtub3duIGFzIHsgaW5zdGFuY2U6IFdlYkFzc2VtYmx5Lkluc3RhbmNlIH0pLmluc3RhbmNlOwogICAgZXhpdENvZGUgPSBhY3RpdmVXYXNpLnN0YXJ0KGluc3RhbmNlIGFzIGFueSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zdCBtZXNzYWdlID0gKGVyciBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSk/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycik7CiAgICBjb25zdCBzdGFjayA9IChlcnIgYXMgeyBzdGFjaz86IHN0cmluZyB9KT8uc3RhY2s7CiAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bWVzc2FnZX1cbiR7c3RhY2t9YCA6IG1lc3NhZ2UgfSk7CiAgfQoKICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJleGl0IiwgY29kZTogZXhpdENvZGUsIGxhc3RTdGRlcnIgfSk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGdldENhY2hlZFdhc21CeXRlcyh1cmw6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4gewogIGlmIChjYWNoZWRXYXNtICYmIGNhY2hlZFdhc20udXJsID09PSB1cmwgJiYgY2FjaGVkV2FzbS5ieXRlcz8uYnl0ZUxlbmd0aCkgcmV0dXJuIGNhY2hlZFdhc20uYnl0ZXM7CiAgY29uc3QgYnl0ZXMgPSBhd2FpdCBmZXRjaEJ5dGVzKHVybCk7CiAgY2FjaGVkV2FzbSA9IHsgdXJsLCBieXRlcyB9OwogIHJldHVybiBieXRlczsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkUnVudGltZUVudHJpZXModXJsOiBzdHJpbmcpOiBQcm9taXNlPFRhckVudHJ5W10+IHsKICBpZiAoY2FjaGVkUnVudGltZSAmJiBjYWNoZWRSdW50aW1lLnVybCA9PT0gdXJsICYmIGNhY2hlZFJ1bnRpbWUuZW50cmllcz8ubGVuZ3RoKSByZXR1cm4gY2FjaGVkUnVudGltZS5lbnRyaWVzOwogIGNvbnN0IGFyY2hpdmUgPSBhd2FpdCBmZXRjaEJ5dGVzKHVybCk7CiAgbGV0IHJ1bnRpbWVCeXRlczogVWludDhBcnJheTsKICBpZiAobG9va3NMaWtlR3ppcChhcmNoaXZlKSkgewogICAgdHJ5IHsKICAgICAgcnVudGltZUJ5dGVzID0gZ3VuemlwU3luYyhhcmNoaXZlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBndW56aXAgcnVudGltZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlID8/IGV9YCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHJ1bnRpbWVCeXRlcyA9IGFyY2hpdmU7CiAgfQogIGxldCBlbnRyaWVzOiBUYXJFbnRyeVtdOwogIHRyeSB7CiAgICBlbnRyaWVzID0gdW50YXIocnVudGltZUJ5dGVzKTsKICB9IGNhdGNoIChlKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoYHVudGFyIHJ1bnRpbWUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKT8ubWVzc2FnZSA/PyBlfWApOwogIH0KICBjYWNoZWRSdW50aW1lID0geyB1cmwsIGVudHJpZXMgfTsKICByZXR1cm4gZW50cmllczsKfQoKZnVuY3Rpb24gYXBwbHlFeHRyYUZpbGVzKGZzUm9vdDogRGlyTm9kZSwgZmlsZXM6IEFycmF5PHsgcGF0aDogc3RyaW5nOyBkYXRhOiBhbnkgfT4pIHsKICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHsKICAgIGNvbnN0IHJhd1BhdGggPSBTdHJpbmcoZmlsZT8ucGF0aCA/PyAiIik7CiAgICBjb25zdCBjbGVhbiA9IHJhd1BhdGgucmVwbGFjZSgvXlwvKy8sICIiKS5yZXBsYWNlKC9eXC5cLysvLCAiIik7CiAgICBpZiAoIWNsZWFuIHx8IGNsZWFuLmVuZHNXaXRoKCIvIikpIGNvbnRpbnVlOwogICAgY29uc3QgZGF0YSA9IHRvVTgoZmlsZT8uZGF0YSk7CiAgICBpZiAoIWRhdGEpIGNvbnRpbnVlOwogICAgY29uc3QgcGFydHMgPSBjbGVhbi5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTsKICAgIGlmICghcGFydHMubGVuZ3RoKSBjb250aW51ZTsKICAgIGxldCBkaXI6IERpck5vZGUgPSBmc1Jvb3Q7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkgKz0gMSkgewogICAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07CiAgICAgIGlmICghZGlyLmNvbnRlbnRzLmhhcyhwYXJ0KSkgZGlyLmNvbnRlbnRzLnNldChwYXJ0LCBuZXcgRGlyZWN0b3J5KG5ldyBNYXAoKSkpOwogICAgICBkaXIgPSBkaXIuY29udGVudHMuZ2V0KHBhcnQpIGFzIERpck5vZGU7CiAgICB9CiAgICBjb25zdCBsZWFmID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07CiAgICBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBGaWxlKGRhdGEsIHsgcmVhZG9ubHk6IGZhbHNlIH0pKTsKICB9Cn0KCmZ1bmN0aW9uIHRvVTgoZGF0YTogYW55KTogVWludDhBcnJheSB8IG51bGwgewogIGlmICghZGF0YSkgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7CiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gZGF0YTsKICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpOwogIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgaWYgKGRhdGEgJiYgZGF0YS50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KGRhdGEuZGF0YSkpIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmRhdGEpOwogIHRyeSB7CiAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFN0cmluZyhkYXRhKSk7CiAgfSBjYXRjaCAoXykgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpmdW5jdGlvbiBoYW5kbGVTdGRvdXQoY2h1bms6IFVpbnQ4QXJyYXkpIHsKICBpZiAoIXJwY0RlY29kZXIpIHsKICAgIHJwY0RlY29kZXIgPSBuZXcgRGVjb2RlcihoYW5kbGVNZXNzYWdlKTsKICB9CiAgdHJ5IHsKICAgIHJwY0RlY29kZXIucHVzaChjaHVuayk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICB2b2lkIGVycjsKICAgIHJwY0RlY29kZXIgPSBuZXcgRGVjb2RlcihoYW5kbGVNZXNzYWdlKTsKICB9Cn0KCmZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UobXNnOiB1bmtub3duKSB7CiAgaWYgKCFBcnJheS5pc0FycmF5KG1zZykgfHwgbXNnLmxlbmd0aCA8IDEpIHJldHVybjsKICBjb25zdCBraW5kID0gbXNnWzBdOwogIGlmIChraW5kID09PSAwKSB7CiAgICBjb25zdCBbLCBtc2dpZCwgbWV0aG9kLCBwYXJhbXNdID0gbXNnOwogICAgaWYgKG1ldGhvZCA9PT0gIndhc20tY2xpcGJvYXJkLXBhc3RlIikgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJjbGlwYm9hcmQtcGFzdGUiLCBtc2dpZCB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInJwYy1yZXF1ZXN0IiwgbXNnaWQsIG1ldGhvZCwgcGFyYW1zIH0pOwogICAgfQogIH0gZWxzZSBpZiAoa2luZCA9PT0gMSkgewogICAgY29uc3QgWywgbXNnaWQsIGVycm9yLCByZXN1bHRdID0gbXNnOwogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAicnBjLXJlc3BvbnNlIiwgbXNnaWQsIGVycm9yLCByZXN1bHQgfSk7CiAgfSBlbHNlIGlmIChraW5kID09PSAyKSB7CiAgICBjb25zdCBbLCBtZXRob2QsIHBhcmFtc10gPSBtc2c7CiAgICBpZiAobWV0aG9kID09PSAid2FzbS1jbGlwYm9hcmQtY29weSIpIHsKICAgICAgY29uc3QgbGluZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcz8uWzBdKSA/IHBhcmFtc1swXSA6IFtdOwogICAgICBjb25zdCByZWd0eXBlID0gdHlwZW9mIHBhcmFtcz8uWzFdID09PSAic3RyaW5nIiA/IHBhcmFtc1sxXSA6ICJ2IjsKICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiY2xpcGJvYXJkLWNvcHkiLCBsaW5lcywgcmVndHlwZSB9KTsKICAgIH0gZWxzZSBpZiAoCiAgICAgIG1ldGhvZCA9PT0gIm52aW1fYnVmX2xpbmVzX2V2ZW50IgogICAgICB8fCBtZXRob2QgPT09ICJudmltX2J1Zl9kZXRhY2hfZXZlbnQiCiAgICAgIHx8IG1ldGhvZCA9PT0gInJlZHJhdyIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2N1cnNvciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX21vZGUiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm1vbmFjb19jdXJzb3JNb3ZlIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fc2Nyb2xsIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fcmV2ZWFsIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fbW92ZUN1cnNvciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX3Njcm9sbG9mZiIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2hvc3RfY29tbWFuZCIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2J1Zl9lbnRlciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2J1Zl9kZWxldGUiCiAgICApIHsKICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAicnBjLW5vdGlmeSIsIG1ldGhvZCwgcGFyYW1zIH0pOwogICAgfQogIH0KfQoKYXN5bmMgZnVuY3Rpb24gZmV0Y2hCeXRlcyh1cmw6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4gewogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCk7CiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgZmV0Y2ggJHt1cmx9IGZhaWxlZCAoJHtyZXMuc3RhdHVzfSlgKTsKICBjb25zdCBjdCA9IChyZXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpOwogIGlmIChjdC5pbmNsdWRlcygidGV4dC9odG1sIikpIHRocm93IG5ldyBFcnJvcihgZmV0Y2ggJHt1cmx9IHJldHVybmVkIEhUTUwgKGxpa2VseSB3cm9uZyBwYXRoIG9yIGRldiBzZXJ2ZXIgZmFsbGJhY2spYCk7CiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpKTsKICBpZiAoIWRhdGEuYnl0ZUxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGBmZXRjaCAke3VybH0gcmV0dXJuZWQgZW1wdHkgYm9keWApOwogIHJldHVybiBkYXRhOwp9Cgp0eXBlIFRhckVudHJ5ID0geyBuYW1lOiBzdHJpbmc7IHR5cGU6ICJkaXIiIHwgImZpbGUiOyBkYXRhOiBVaW50OEFycmF5IH07CgpmdW5jdGlvbiBsb29rc0xpa2VHemlwKGRhdGE6IFVpbnQ4QXJyYXkpIHsKICByZXR1cm4gZGF0YSAmJiBkYXRhLmxlbmd0aCA+PSAyICYmIGRhdGFbMF0gPT09IDB4MWYgJiYgZGF0YVsxXSA9PT0gMHg4YjsKfQoKZnVuY3Rpb24gdW50YXIoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBUYXJFbnRyeVtdIHsKICBjb25zdCBmaWxlczogVGFyRW50cnlbXSA9IFtdOwogIGNvbnN0IGRhdGEgPSBieXRlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBieXRlcyA6IG5ldyBVaW50OEFycmF5KGJ5dGVzKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgbGV0IHNhZmV0eSA9IDA7CgogIHdoaWxlIChvZmZzZXQgKyA1MTIgPD0gZGF0YS5sZW5ndGgpIHsKICAgIGlmIChzYWZldHkrKyA+IDEwMF8wMDApIHRocm93IG5ldyBFcnJvcigidW50YXIgc2FmZXR5IGJyZWFrIik7CiAgICBjb25zdCBuYW1lID0gZGVjb2RlVGFyU3RyaW5nKGRlY29kZXIsIGRhdGEsIG9mZnNldCwgMTAwKTsKICAgIGNvbnN0IHNpemVUZXh0ID0gZGVjb2RlVGFyU3RyaW5nKGRlY29kZXIsIGRhdGEsIG9mZnNldCArIDEyNCwgMTIpOwogICAgY29uc3QgdHlwZWZsYWcgPSBkYXRhW29mZnNldCArIDE1Nl07CiAgICBjb25zdCBwcmVmaXggPSBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlciwgZGF0YSwgb2Zmc2V0ICsgMzQ1LCAxNTUpOwogICAgaWYgKCFuYW1lICYmICFwcmVmaXgpIGJyZWFrOwogICAgY29uc3Qgc2l6ZVJhdyA9IHNpemVUZXh0LnRyaW0oKSB8fCAiMCI7CiAgICBjb25zdCBzaXplID0gcGFyc2VJbnQoc2l6ZVJhdywgOCk7CiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzaXplKSB8fCBzaXplIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRhciBzaXplOiAke3NpemVSYXd9YCk7CiAgICBjb25zdCBmdWxsTmFtZSA9IHByZWZpeCA/IGAke3ByZWZpeH0vJHtuYW1lfWAgOiBuYW1lOwogICAgY29uc3QgYm9keVN0YXJ0ID0gb2Zmc2V0ICsgNTEyOwogICAgY29uc3QgYm9keUVuZCA9IGJvZHlTdGFydCArIHNpemU7CiAgICBjb25zdCBwYXlsb2FkID0gZGF0YS5zbGljZShib2R5U3RhcnQsIGJvZHlFbmQpOwogICAgZmlsZXMucHVzaCh7IG5hbWU6IGZ1bGxOYW1lLCB0eXBlOiB0eXBlZmxhZyA9PT0gNTMgPyAiZGlyIiA6ICJmaWxlIiwgZGF0YTogcGF5bG9hZCB9KTsKICAgIGNvbnN0IGJsb2NrcyA9IE1hdGguY2VpbChzaXplIC8gNTEyKTsKICAgIGNvbnN0IG5leHQgPSBib2R5U3RhcnQgKyBibG9ja3MgKiA1MTI7CiAgICBpZiAobmV4dCA8PSBvZmZzZXQpIHRocm93IG5ldyBFcnJvcigidGFyIHBhcnNlIGRpZCBub3QgYWR2YW5jZSIpOwogICAgb2Zmc2V0ID0gbmV4dDsKICB9CiAgcmV0dXJuIGZpbGVzOwp9CgpmdW5jdGlvbiBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlcjogVGV4dERlY29kZXIsIGRhdGE6IFVpbnQ4QXJyYXksIHN0YXJ0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHsKICBsZXQgZW5kID0gc3RhcnQ7CiAgY29uc3QgbWF4ID0gc3RhcnQgKyBsZW5ndGg7CiAgd2hpbGUgKGVuZCA8IG1heCAmJiBkYXRhW2VuZF0gIT09IDApIGVuZCArPSAxOwogIHJldHVybiBkZWNvZGVyLmRlY29kZShkYXRhLnN1YmFycmF5KHN0YXJ0LCBlbmQpKS50cmltKCk7Cn0KCmZ1bmN0aW9uIGJ1aWxkRnMoZW50cmllczogVGFyRW50cnlbXSwgb25Qcm9ncmVzcz86IChjb3VudDogbnVtYmVyKSA9PiB2b2lkKSB7CiAgY29uc3Qgcm9vdCA9IG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSBhcyBEaXJOb2RlOwogIGxldCBjb3VudCA9IDA7CiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICBjb25zdCBjbGVhbiA9IGVudHJ5Lm5hbWUucmVwbGFjZSgvXlwuXC8/LywgIiIpOwogICAgaWYgKCFjbGVhbikgY29udGludWU7CiAgICBjb25zdCBwYXJ0cyA9IGNsZWFuLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwogICAgaWYgKCFwYXJ0cy5sZW5ndGgpIGNvbnRpbnVlOwogICAgY291bnQgKz0gMTsKICAgIGlmIChvblByb2dyZXNzICYmIGNvdW50ICUgNTAwID09PSAwKSBvblByb2dyZXNzKGNvdW50KTsKCiAgICBsZXQgZGlyOiBEaXJOb2RlID0gcm9vdDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSArPSAxKSB7CiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaWYgKCFkaXIuY29udGVudHMuaGFzKHBhcnQpKSBkaXIuY29udGVudHMuc2V0KHBhcnQsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICAgIGRpciA9IGRpci5jb250ZW50cy5nZXQocGFydCkgYXMgRGlyTm9kZTsKICAgIH0KCiAgICBjb25zdCBsZWFmID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07CiAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpciIpIHsKICAgICAgaWYgKCFkaXIuY29udGVudHMuaGFzKGxlYWYpKSBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICB9IGVsc2UgewogICAgICBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBGaWxlKGVudHJ5LmRhdGEsIHsgcmVhZG9ubHk6IHRydWUgfSkpOwogICAgfQogIH0KCiAgZW5zdXJlRGlyKHJvb3QsICJob21lIik7CiAgZW5zdXJlRGlyKHJvb3QsICJ0bXAiKTsKICBlbnN1cmVEaXIocm9vdCwgImhvbWUvLmNvbmZpZyIpOwogIGVuc3VyZURpcihyb290LCAiaG9tZS8ubG9jYWwvc2hhcmUiKTsKICBlbnN1cmVEaXIocm9vdCwgImhvbWUvLmxvY2FsL3N0YXRlIik7CgogIHJldHVybiByb290Owp9CgpmdW5jdGlvbiBlbnN1cmVEaXIocm9vdDogRGlyTm9kZSwgcGF0aDogc3RyaW5nKSB7CiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwogIGxldCBub2RlOiBEaXJOb2RlID0gcm9vdDsKICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHsKICAgIGlmICghbm9kZS5jb250ZW50cy5oYXMocCkpIG5vZGUuY29udGVudHMuc2V0KHAsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICBub2RlID0gbm9kZS5jb250ZW50cy5nZXQocCkgYXMgRGlyTm9kZTsKICB9Cn0KCmZ1bmN0aW9uIG1ha2VFbnYocHJvY0V4aXQ/OiAoY29kZTogbnVtYmVyKSA9PiB2b2lkKSB7CiAgY29uc3Qgd2FzbUFueSA9IFdlYkFzc2VtYmx5IGFzIGFueTsKICBjb25zdCBjTG9uZ2ptcCA9IG5ldyB3YXNtQW55LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl0sIHJlc3VsdHM6IFtdIH0pIGFzIGFueTsKICByZXR1cm4gewogICAgZmxvY2s6ICgpID0+IDAsCiAgICBnZXRwaWQ6ICgpID0+IDEsCiAgICB1dl9yYW5kb206ICgpID0+IC0zOCwKICAgIHV2X3d0ZjhfdG9fdXRmMTY6ICgpID0+IHt9LAogICAgdXZfdXRmMTZfbGVuZ3RoX2FzX3d0Zjg6ICgpID0+IDAsCiAgICB1dl91dGYxNl90b193dGY4OiAoKSA9PiAtMzgsCiAgICB1dl93dGY4X2xlbmd0aF9hc191dGYxNjogKCkgPT4gMCwKICAgIF9fd2FzbV9sb25nam1wOiAocHRyOiBudW1iZXIpID0+IHsKICAgICAgaWYgKHByb2NFeGl0KSBwcm9jRXhpdCgxKTsKICAgICAgdGhyb3cgbmV3IHdhc21BbnkuRXhjZXB0aW9uKGNMb25nam1wLCBbcHRyID8/IDBdKTsKICAgIH0sCiAgICBfX3dhc21fc2V0am1wOiAoKSA9PiAwLAogICAgX193YXNtX3NldGptcF90ZXN0OiAoKSA9PiAwLAogICAgdG1wZmlsZTogKCkgPT4gMCwKICAgIGNsb2NrOiAoKSA9PiAwLAogICAgc3lzdGVtOiAoKSA9PiAtMSwKICAgIHRtcG5hbTogKCkgPT4gMCwKICAgIF9fY19sb25nam1wOiBjTG9uZ2ptcCwKICB9IGFzIFdlYkFzc2VtYmx5Lk1vZHVsZUltcG9ydHM7Cn0KCmNsYXNzIFJvb3RlZFByZW9wZW5EaXJlY3RvcnkgZXh0ZW5kcyBQcmVvcGVuRGlyZWN0b3J5IHsKICAjc3RyaXAocGF0aDogc3RyaW5nKSB7IHJldHVybiBwYXRoLnJlcGxhY2UoL15cLysvLCAiIik7IH0KICBwYXRoX29wZW4oCiAgICBkaXJmbGFnczogbnVtYmVyLAogICAgcGF0aF9zdHI6IHN0cmluZywKICAgIG9mbGFnczogbnVtYmVyLAogICAgZnNfcmlnaHRzX2Jhc2U6IGJpZ2ludCwKICAgIGZzX3JpZ2h0c19pbmhlcml0aW5nOiBiaWdpbnQsCiAgICBmZF9mbGFnczogbnVtYmVyLAogICkgewogICAgcmV0dXJuIHN1cGVyLnBhdGhfb3BlbihkaXJmbGFncywgdGhpcy4jc3RyaXAocGF0aF9zdHIpLCBvZmxhZ3MsIGZzX3JpZ2h0c19iYXNlLCBmc19yaWdodHNfaW5oZXJpdGluZywgZmRfZmxhZ3MpOwogIH0KICBwYXRoX2ZpbGVzdGF0X2dldChmbGFnczogbnVtYmVyLCBwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX2ZpbGVzdGF0X2dldChmbGFncywgdGhpcy4jc3RyaXAocGF0aF9zdHIpKTsgfQogIHBhdGhfY3JlYXRlX2RpcmVjdG9yeShwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX2NyZWF0ZV9kaXJlY3RvcnkodGhpcy4jc3RyaXAocGF0aF9zdHIpKTsgfQogIHBhdGhfdW5saW5rX2ZpbGUocGF0aF9zdHI6IHN0cmluZykgeyByZXR1cm4gc3VwZXIucGF0aF91bmxpbmtfZmlsZSh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9yZW1vdmVfZGlyZWN0b3J5KHBhdGhfc3RyOiBzdHJpbmcpIHsgcmV0dXJuIHN1cGVyLnBhdGhfcmVtb3ZlX2RpcmVjdG9yeSh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9saW5rKHBhdGhfc3RyOiBzdHJpbmcsIGlub2RlOiBJbm9kZSwgYWxsb3dfZGlyOiBib29sZWFuKSB7IHJldHVybiBzdXBlci5wYXRoX2xpbmsodGhpcy4jc3RyaXAocGF0aF9zdHIpLCBpbm9kZSwgYWxsb3dfZGlyKTsgfQogIHBhdGhfcmVhZGxpbmsocGF0aF9zdHI6IHN0cmluZykgeyByZXR1cm4gc3VwZXIucGF0aF9yZWFkbGluayh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9zeW1saW5rKG9sZF9wYXRoOiBzdHJpbmcsIG5ld19wYXRoOiBzdHJpbmcpIHsKICAgIGNvbnN0IHRhcmdldCA9IChQcmVvcGVuRGlyZWN0b3J5LnByb3RvdHlwZSBhcyB1bmtub3duIGFzIHsgcGF0aF9zeW1saW5rPzogKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKSA9PiBudW1iZXIgfSkucGF0aF9zeW1saW5rOwogICAgaWYgKCF0YXJnZXQpIHJldHVybiB3YXNpLkVSUk5PX05PVFNVUDsKICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCB0aGlzLiNzdHJpcChvbGRfcGF0aCksIHRoaXMuI3N0cmlwKG5ld19wYXRoKSk7CiAgfQp9Cg==", import.meta.url),
1068
+ workerUrl: e.workerUrl ?? new URL("./nvimWorker.worker.js", import.meta.url),
1069
1069
  reuseWorker: e.reuseWorker ?? !1,
1070
1070
  wasmPath: e.wasmPath ?? "",
1071
1071
  runtimePath: e.runtimePath ?? "",
1072
1072
  inputMode: e.inputMode ?? "shared",
1073
1073
  env: e.env,
1074
1074
  files: e.files,
1075
- sharedInputBytes: e.sharedInputBytes ?? x,
1075
+ sharedInputBytes: e.sharedInputBytes ?? O,
1076
1076
  cols: e.cols ?? 120,
1077
1077
  rows: e.rows ?? 40,
1078
1078
  minCols: e.minCols ?? 20,
@@ -1098,7 +1098,7 @@ class fe {
1098
1098
  onHostCommand: e.onHostCommand,
1099
1099
  status: e.status ?? (() => {
1100
1100
  }),
1101
- seedLines: e.seedLines ?? pe,
1101
+ seedLines: e.seedLines ?? ye,
1102
1102
  seedName: e.seedName ?? "monaco-demo.lua",
1103
1103
  seedFiletype: e.seedFiletype ?? "lua",
1104
1104
  uiAttach: e.uiAttach ?? !0,
@@ -1128,11 +1128,11 @@ class fe {
1128
1128
  onPopupmenu: e.onPopupmenu,
1129
1129
  cmdlineContainer: e.cmdlineContainer,
1130
1130
  insertSyncDebounceMs: Number.isFinite(e.insertSyncDebounceMs) ? Math.max(0, Number(e.insertSyncDebounceMs)) : 20,
1131
- debug: o,
1131
+ debug: r,
1132
1132
  debugLog: e.debugLog,
1133
1133
  shouldHandleKey: e.shouldHandleKey ?? (() => !0),
1134
- translateKey: e.translateKey ?? Ze
1135
- }, this.ctrlKeysNormal = this.opts.ctrlKeysForNormalMode ? new Set(this.opts.ctrlKeysForNormalMode.map((c) => String(c).toLowerCase())) : null, this.ctrlKeysInsert = this.opts.ctrlKeysForInsertMode ? new Set(this.opts.ctrlKeysForInsertMode.map((c) => String(c).toLowerCase())) : null, this.altKeysNormal = this.opts.altKeysForNormalMode ? new Set(this.opts.altKeysForNormalMode.map((c) => String(c).toLowerCase())) : null, this.altKeysInsert = this.opts.altKeysForInsertMode ? new Set(this.opts.altKeysForInsertMode.map((c) => String(c).toLowerCase())) : null, this.metaKeysNormal = this.opts.metaKeysForNormalMode ? new Set(this.opts.metaKeysForNormalMode.map((c) => String(c).toLowerCase())) : null, this.metaKeysInsert = this.opts.metaKeysForInsertMode ? new Set(this.opts.metaKeysForInsertMode.map((c) => String(c).toLowerCase())) : null, this.opts.debug && (this.opts.status?.("[monaco-neovim-wasm] debug enabled"), this.debugLog("debug enabled"));
1134
+ translateKey: e.translateKey ?? Ce
1135
+ }, this.ctrlKeysNormal = this.opts.ctrlKeysForNormalMode ? new Set(this.opts.ctrlKeysForNormalMode.map((l) => String(l).toLowerCase())) : null, this.ctrlKeysInsert = this.opts.ctrlKeysForInsertMode ? new Set(this.opts.ctrlKeysForInsertMode.map((l) => String(l).toLowerCase())) : null, this.altKeysNormal = this.opts.altKeysForNormalMode ? new Set(this.opts.altKeysForNormalMode.map((l) => String(l).toLowerCase())) : null, this.altKeysInsert = this.opts.altKeysForInsertMode ? new Set(this.opts.altKeysForInsertMode.map((l) => String(l).toLowerCase())) : null, this.metaKeysNormal = this.opts.metaKeysForNormalMode ? new Set(this.opts.metaKeysForNormalMode.map((l) => String(l).toLowerCase())) : null, this.metaKeysInsert = this.opts.metaKeysForInsertMode ? new Set(this.opts.metaKeysForInsertMode.map((l) => String(l).toLowerCase())) : null, this.opts.debug && (this.opts.status?.("[monaco-neovim-wasm] debug enabled"), this.debugLog("debug enabled"));
1136
1136
  }
1137
1137
  async start(t) {
1138
1138
  this.stop(!0), this.nextSeedLines = t ?? null;
@@ -1144,8 +1144,8 @@ class fe {
1144
1144
  this.notifyChain = this.notifyChain.then(() => this.handleNotify(s, n)).catch(() => {
1145
1145
  });
1146
1146
  },
1147
- onRequest: (s, n, o) => {
1148
- this.handleRequest(s, n, o);
1147
+ onRequest: (s, n, r) => {
1148
+ this.handleRequest(s, n, r);
1149
1149
  },
1150
1150
  onClipboardCopy: (s, n) => {
1151
1151
  this.handleClipboardCopy(s);
@@ -1168,8 +1168,8 @@ class fe {
1168
1168
  this.opts.status(`start failed: ${s ?? "unknown"}`, !0);
1169
1169
  },
1170
1170
  onExit: (s, n) => {
1171
- const o = n ? `: ${n.trim()}` : "";
1172
- this.opts.status(`nvim exited (${s})${o}`, s !== 0);
1171
+ const r = n ? `: ${n.trim()}` : "";
1172
+ this.opts.status(`nvim exited (${s})${r}`, s !== 0);
1173
1173
  try {
1174
1174
  this.opts.onExit?.(s, n);
1175
1175
  } catch {
@@ -1183,7 +1183,7 @@ class fe {
1183
1183
  this.opts.status(s, !0);
1184
1184
  }
1185
1185
  };
1186
- if (!this.session || !this.opts.reuseWorker ? this.session = new he({
1186
+ if (!this.session || !this.opts.reuseWorker ? this.session = new fe({
1187
1187
  worker: this.opts.worker,
1188
1188
  workerUrl: this.opts.workerUrl,
1189
1189
  inputMode: this.opts.inputMode,
@@ -1200,12 +1200,12 @@ class fe {
1200
1200
  runtimePath: this.opts.runtimePath,
1201
1201
  inputMode: this.opts.inputMode,
1202
1202
  env: this.opts.env,
1203
- files: Re(Xe(
1203
+ files: Me(Ie(
1204
1204
  this.opts.files,
1205
1205
  this.opts.wrappedLineMotions || this.opts.scrollMotions || this.opts.hostCommands ? [
1206
- { path: "home/.config/nvim/monaco-neovim-wasm/motion.vim", data: ue },
1206
+ { path: "home/.config/nvim/monaco-neovim-wasm/motion.vim", data: pe },
1207
1207
  { path: "home/.config/nvim/monaco-neovim-wasm/scrolling.vim", data: me },
1208
- { path: "home/.config/nvim/monaco-neovim-wasm/host-commands.vim", data: Ce }
1208
+ { path: "home/.config/nvim/monaco-neovim-wasm/host-commands.vim", data: ge }
1209
1209
  ] : []
1210
1210
  ))
1211
1211
  }), this.opts.status("starting..."), this.primeSent = !1, setTimeout(() => {
@@ -1235,7 +1235,7 @@ class fe {
1235
1235
  this.sendNotify("nvim_input", [String(t ?? "")]);
1236
1236
  }
1237
1237
  type(t, e = !0) {
1238
- const i = _(String(t ?? ""), e);
1238
+ const i = z(String(t ?? ""), e);
1239
1239
  i && this.sendNotify("nvim_input", [i]);
1240
1240
  }
1241
1241
  paste(t) {
@@ -1245,14 +1245,14 @@ class fe {
1245
1245
  const i = String(t ?? ""), s = Array.isArray(e) ? e : [];
1246
1246
  if (this.execLuaAvailable !== !1)
1247
1247
  try {
1248
- const o = await this.rpcCall("nvim_exec_lua", [i, s]);
1249
- return this.execLuaAvailable = !0, o;
1250
- } catch (o) {
1251
- const c = o?.message || String(o);
1252
- if (c.includes("Invalid method") && c.includes("nvim_exec_lua"))
1248
+ const r = await this.rpcCall("nvim_exec_lua", [i, s]);
1249
+ return this.execLuaAvailable = !0, r;
1250
+ } catch (r) {
1251
+ const l = r?.message || String(r);
1252
+ if (l.includes("Invalid method") && l.includes("nvim_exec_lua"))
1253
1253
  this.execLuaAvailable = !1;
1254
1254
  else
1255
- throw o;
1255
+ throw r;
1256
1256
  }
1257
1257
  const n = `(function(...)
1258
1258
  ${i}
@@ -1273,7 +1273,7 @@ end)(unpack(_A))`;
1273
1273
  }
1274
1274
  attachEditorListeners() {
1275
1275
  this.disposeEditorListeners();
1276
- const t = y.editor.EditorOption;
1276
+ const t = b.editor.EditorOption;
1277
1277
  try {
1278
1278
  const e = this.editor.getOption(t.fontInfo);
1279
1279
  this.initialCursorWidth = this.editor.getOption(t.cursorWidth) || 0, this.typicalFullWidth = e?.typicalFullwidthCharacterWidth || 2;
@@ -1367,10 +1367,10 @@ end)(unpack(_A))`;
1367
1367
  const t = this.editor.getModel();
1368
1368
  if (!t) return;
1369
1369
  try {
1370
- const i = t.uri, s = i?.scheme ?? "", n = i?.authority ?? "", o = i?.path ?? "";
1370
+ const i = t.uri, s = i?.scheme ?? "", n = i?.authority ?? "", r = i?.path ?? "";
1371
1371
  if (s === "nvim" && n === "buf") {
1372
- const c = /^\/(\d+)$/.exec(o), a = c ? Number(c[1]) : NaN;
1373
- Number.isFinite(a) && a > 0 && (this.bufHandle = a);
1372
+ const l = /^\/(\d+)$/.exec(r), c = l ? Number(l[1]) : NaN;
1373
+ Number.isFinite(c) && c > 0 && (this.bufHandle = c);
1374
1374
  }
1375
1375
  } catch {
1376
1376
  }
@@ -1386,8 +1386,8 @@ end)(unpack(_A))`;
1386
1386
  }
1387
1387
  computeGridSize() {
1388
1388
  try {
1389
- const t = this.editor.getLayoutInfo(), e = Math.max(0, Number(t?.contentWidth ?? t?.width ?? 0) || 0), i = Math.max(0, Number(t?.contentHeight ?? t?.height ?? 0) || 0), s = this.editor.getOption(y.editor.EditorOption.fontInfo), n = Math.max(1, Number(s?.typicalHalfwidthCharacterWidth ?? s?.maxDigitWidth ?? 0) || 0), o = Math.max(1, Number(s?.lineHeight ?? 0) || 0), c = Math.max(this.opts.minCols, Math.floor(e / n)), a = Math.max(this.opts.minRows, Math.floor(i / o));
1390
- if (Number.isFinite(c) && Number.isFinite(a) && c > 0 && a > 0) return { cols: c, rows: a };
1389
+ const t = this.editor.getLayoutInfo(), e = Math.max(0, Number(t?.contentWidth ?? t?.width ?? 0) || 0), i = Math.max(0, Number(t?.contentHeight ?? t?.height ?? 0) || 0), s = this.editor.getOption(b.editor.EditorOption.fontInfo), n = Math.max(1, Number(s?.typicalHalfwidthCharacterWidth ?? s?.maxDigitWidth ?? 0) || 0), r = Math.max(1, Number(s?.lineHeight ?? 0) || 0), l = Math.max(this.opts.minCols, Math.floor(e / n)), c = Math.max(this.opts.minRows, Math.floor(i / r));
1390
+ if (Number.isFinite(l) && Number.isFinite(c) && l > 0 && c > 0) return { cols: l, rows: c };
1391
1391
  } catch {
1392
1392
  }
1393
1393
  return { cols: this.opts.cols, rows: this.opts.rows };
@@ -1410,7 +1410,7 @@ end)(unpack(_A))`;
1410
1410
  const e = document.createElement("div");
1411
1411
  e.style.position = "absolute", e.style.display = "none", e.style.pointerEvents = "none", e.style.zIndex = "40", e.style.whiteSpace = "pre", e.style.padding = "0 1px", e.style.background = "rgba(0, 0, 0, 0.15)", e.style.borderBottom = "1px solid rgba(255, 255, 255, 0.6)", e.style.borderRadius = "2px";
1412
1412
  try {
1413
- const i = this.editor.getOption(y.editor.EditorOption.fontInfo);
1413
+ const i = this.editor.getOption(b.editor.EditorOption.fontInfo);
1414
1414
  i?.fontFamily && (e.style.fontFamily = i.fontFamily), i?.fontSize && (e.style.fontSize = `${i.fontSize}px`), i?.lineHeight && (e.style.lineHeight = `${i.lineHeight}px`);
1415
1415
  } catch {
1416
1416
  }
@@ -1429,11 +1429,11 @@ end)(unpack(_A))`;
1429
1429
  if (!t || this.cmdlineVisible) return;
1430
1430
  const e = this.editor.getModel();
1431
1431
  if (!e) return;
1432
- const i = this.editor.getSelection(), n = (i && !i.isEmpty() ? i.getStartPosition() : null) ?? this.editor.getPosition() ?? this.lastCursorPos ?? new y.Position(1, 1), o = String(t).split(/\r?\n/);
1433
- let c = n.lineNumber, a = n.column;
1434
- o.length <= 1 ? a += Array.from(o[0] ?? "").length : (c += o.length - 1, a = 1 + Array.from(o[o.length - 1] ?? "").length);
1435
- const g = e.validatePosition(new y.Position(c, a)), I = this.editor.getPosition() ?? this.lastCursorPos ?? n;
1436
- this.optimisticCursorPrevPos = I, this.optimisticCursorPos = g, this.optimisticCursorUntil = (typeof performance < "u" && performance.now ? performance.now() : Date.now()) + 120, this.lastCursorPos = g, !this.compositionActive && (this.suppressCursorSync = !0, this.editor.setPosition(g), this.suppressCursorSync = !1);
1432
+ const i = this.editor.getSelection(), n = (i && !i.isEmpty() ? i.getStartPosition() : null) ?? this.editor.getPosition() ?? this.lastCursorPos ?? new b.Position(1, 1), r = String(t).split(/\r?\n/);
1433
+ let l = n.lineNumber, c = n.column;
1434
+ r.length <= 1 ? c += Array.from(r[0] ?? "").length : (l += r.length - 1, c = 1 + Array.from(r[r.length - 1] ?? "").length);
1435
+ const u = e.validatePosition(new b.Position(l, c)), d = this.editor.getPosition() ?? this.lastCursorPos ?? n;
1436
+ this.optimisticCursorPrevPos = d, this.optimisticCursorPos = u, this.optimisticCursorUntil = (typeof performance < "u" && performance.now ? performance.now() : Date.now()) + 120, this.lastCursorPos = u, !this.compositionActive && (this.suppressCursorSync = !0, this.editor.setPosition(u), this.suppressCursorSync = !1);
1437
1437
  }
1438
1438
  positionPreedit() {
1439
1439
  if (!this.preeditEl || !this.preeditVisible) return;
@@ -1560,14 +1560,14 @@ end)(unpack(_A))`;
1560
1560
  await this.rpcCall("nvim_ui_attach", [this.uiCols || this.opts.cols, this.uiRows || this.opts.rows, this.opts.uiAttachOptions]);
1561
1561
  } catch {
1562
1562
  }
1563
- for (const o of this.opts.startupCommands)
1564
- o && this.sendNotify("nvim_command", [o]);
1563
+ for (const r of this.opts.startupCommands)
1564
+ r && this.sendNotify("nvim_command", [r]);
1565
1565
  if (this.opts.startupLua)
1566
1566
  try {
1567
1567
  await this.execLua(this.opts.startupLua, []);
1568
1568
  } catch {
1569
1569
  }
1570
- const t = await this.rpcCall("nvim_get_current_buf", []), e = F(t) ?? 1;
1570
+ const t = await this.rpcCall("nvim_get_current_buf", []), e = B(t) ?? 1;
1571
1571
  if (this.bufHandle = e, await this.rpcCall("nvim_buf_attach", [e, !0, {}]) !== !0) throw new Error("nvim_buf_attach failed");
1572
1572
  this.ensureActiveState(), this.opts.syncTabstop && this.syncTabstopFromMonaco();
1573
1573
  const s = await this.rpcCall("nvim_buf_get_lines", [e, 0, -1, !1]);
@@ -1575,13 +1575,13 @@ end)(unpack(_A))`;
1575
1575
  const n = await this.seedBuffer(e, this.nextSeedLines);
1576
1576
  this.nextSeedLines = null, n && n.length && this.applyBuffer(n);
1577
1577
  try {
1578
- const o = this.ensureActiveState();
1579
- if (o) {
1580
- const c = await this.rpcCall("nvim_buf_get_name", [e]);
1581
- o.name = typeof c == "string" ? c : "", o.name && this.buffersByName.set(o.name, e);
1578
+ const r = this.ensureActiveState();
1579
+ if (r) {
1580
+ const l = await this.rpcCall("nvim_buf_get_name", [e]);
1581
+ r.name = typeof l == "string" ? l : "", r.name && this.buffersByName.set(r.name, e);
1582
1582
  try {
1583
- const a = await this.rpcCall("nvim_buf_get_option", [e, "filetype"]);
1584
- o.filetype = typeof a == "string" ? a : "";
1583
+ const c = await this.rpcCall("nvim_buf_get_option", [e, "filetype"]);
1584
+ r.filetype = typeof c == "string" ? c : "";
1585
1585
  } catch {
1586
1586
  }
1587
1587
  }
@@ -1602,18 +1602,18 @@ end)(unpack(_A))`;
1602
1602
  if (i?.writeText) {
1603
1603
  i.writeText(e).catch(() => {
1604
1604
  navigator.clipboard?.writeText ? navigator.clipboard.writeText(e).catch(() => {
1605
- J(e);
1606
- }) : J(e);
1605
+ H(e);
1606
+ }) : H(e);
1607
1607
  });
1608
1608
  return;
1609
1609
  }
1610
1610
  if (navigator.clipboard?.writeText) {
1611
1611
  navigator.clipboard.writeText(e).catch(() => {
1612
- J(e);
1612
+ H(e);
1613
1613
  });
1614
1614
  return;
1615
1615
  }
1616
- J(e);
1616
+ H(e);
1617
1617
  }
1618
1618
  }
1619
1619
  handleRequest(t, e, i) {
@@ -1663,33 +1663,33 @@ end)(unpack(_A))`;
1663
1663
  if (t === "monaco_cursor") {
1664
1664
  const [i, s] = e;
1665
1665
  try {
1666
- const o = this.ignoreInsertExitCursor, c = this.nowMs();
1667
- if (o && c < o.untilMs && !this.delegateInsertToMonaco && Number(i) === o.line && Number(s) === o.col0 && o.col0 > 0) {
1666
+ const r = this.ignoreInsertExitCursor, l = this.nowMs();
1667
+ if (r && l < r.untilMs && !this.delegateInsertToMonaco && Number(i) === r.line && Number(s) === r.col0 && r.col0 > 0) {
1668
1668
  this.debugLog(`nvim->monaco cursor: ignore stale post-exit insert cursor ln=${Number(i)} col0=${Number(s)}`);
1669
1669
  return;
1670
1670
  }
1671
- o && c >= o.untilMs && (this.ignoreInsertExitCursor = null);
1671
+ r && l >= r.untilMs && (this.ignoreInsertExitCursor = null);
1672
1672
  } catch {
1673
1673
  }
1674
- const n = P(this.editor, Number(i), Number(s));
1674
+ const n = Q(this.editor, Number(i), Number(s));
1675
1675
  if (this.debugLog(`nvim->monaco cursor: ln=${Number(i)} col0=${Number(s)} -> line=${n.line} col=${n.col} delegateInsert=${this.delegateInsertToMonaco} exitingInsert=${this.exitingInsertMode} mode=${JSON.stringify(this.lastMode)}`), this.delegateInsertToMonaco && !this.exitingInsertMode) {
1676
- const o = this.editor.getModel(), c = o ? o.validatePosition(new y.Position(n.line, n.col)) : new y.Position(n.line, n.col);
1677
- this.lastCursorPos = c;
1676
+ const r = this.editor.getModel(), l = r ? r.validatePosition(new b.Position(n.line, n.col)) : new b.Position(n.line, n.col);
1677
+ this.lastCursorPos = l;
1678
1678
  return;
1679
1679
  }
1680
- this.updateCursor(n.line, n.col), H(this.lastMode) && this.scheduleVisualSelectionRefresh();
1680
+ this.updateCursor(n.line, n.col), k(this.lastMode) && this.scheduleVisualSelectionRefresh();
1681
1681
  return;
1682
1682
  }
1683
1683
  if (t === "monaco_mode") {
1684
1684
  let i = "", s;
1685
- const n = e?.[0], o = e?.[1];
1685
+ const n = e?.[0], r = e?.[1];
1686
1686
  if (typeof n == "string")
1687
1687
  i = String(n);
1688
1688
  else if (n && typeof n == "object") {
1689
- const c = n;
1690
- typeof c.mode == "string" && (i = String(c.mode)), typeof c.blocking == "boolean" && (s = !!c.blocking);
1689
+ const l = n;
1690
+ typeof l.mode == "string" && (i = String(l.mode)), typeof l.blocking == "boolean" && (s = !!l.blocking);
1691
1691
  }
1692
- typeof o == "boolean" && (s = !!o), this.hostAutocmdInstalled || (this.hostAutocmdInstalled = !0), this.debugLog(`nvim->monaco mode: ${JSON.stringify(this.lastMode)} -> ${JSON.stringify(i)} blocking=${s}`), this.applyNvimMode(i, s);
1692
+ typeof r == "boolean" && (s = !!r), this.hostAutocmdInstalled || (this.hostAutocmdInstalled = !0), this.debugLog(`nvim->monaco mode: ${JSON.stringify(this.lastMode)} -> ${JSON.stringify(i)} blocking=${s}`), this.applyNvimMode(i, s);
1693
1693
  return;
1694
1694
  }
1695
1695
  if (t === "monaco_recording") {
@@ -1698,49 +1698,49 @@ end)(unpack(_A))`;
1698
1698
  return;
1699
1699
  }
1700
1700
  if (t === "nvim_buf_lines_event") {
1701
- const [i, s, n, o, c] = e, a = F(i);
1702
- if (!a) return;
1703
- const g = this.bufHandle != null && a === this.bufHandle ? this.ensureActiveState() : this.buffers.get(a) ?? null;
1704
- if (!g || this.bufHandle != null && a === this.bufHandle && this.delegateInsertToMonaco && !this.exitingInsertMode && this.nowMs() < this.ignoreActiveBufLinesEventsUntil)
1701
+ const [i, s, n, r, l] = e, c = B(i);
1702
+ if (!c) return;
1703
+ const u = this.bufHandle != null && c === this.bufHandle ? this.ensureActiveState() : this.buffers.get(c) ?? null;
1704
+ if (!u || this.bufHandle != null && c === this.bufHandle && this.delegateInsertToMonaco && !this.exitingInsertMode && this.nowMs() < this.ignoreActiveBufLinesEventsUntil)
1705
1705
  return;
1706
- if (this.bufHandle != null && a === this.bufHandle && this.compositionActive) {
1706
+ if (this.bufHandle != null && c === this.bufHandle && this.compositionActive) {
1707
1707
  this.pendingResyncAfterComposition = !0;
1708
1708
  return;
1709
1709
  }
1710
- const I = g.model, h = Number(n), u = Number(o), m = Array.isArray(c) ? c.map((f) => String(f ?? "")) : null;
1711
- if (I && Number.isInteger(h) && Number.isInteger(u) && h >= 0 && u >= h && m)
1710
+ const d = u.model, f = Number(n), p = Number(r), m = Array.isArray(l) ? l.map((_) => String(_ ?? "")) : null;
1711
+ if (d && Number.isInteger(f) && Number.isInteger(p) && f >= 0 && p >= f && m)
1712
1712
  try {
1713
- const f = this.bufHandle != null && a === this.bufHandle && this.editor.getModel() === I;
1714
- if (f && this.delegateInsertToMonaco) {
1715
- const G = this.computeLinePatch(I, h, u, m);
1716
- let A = !1;
1713
+ const _ = this.bufHandle != null && c === this.bufHandle && this.editor.getModel() === d;
1714
+ if (_ && this.delegateInsertToMonaco) {
1715
+ const w = this.computeLinePatch(d, f, p, m);
1716
+ let x = !1;
1717
1717
  try {
1718
- A = I.getValueInRange(G.range) === G.text;
1718
+ x = d.getValueInRange(w.range) === w.text;
1719
1719
  } catch {
1720
1720
  }
1721
- if (!A) {
1722
- if (g.pendingFullSync || g.pendingBufEdits.length) {
1721
+ if (!x) {
1722
+ if (u.pendingFullSync || u.pendingBufEdits.length) {
1723
1723
  this.scheduleResync();
1724
1724
  return;
1725
1725
  }
1726
- this.applyLinePatchToModel(I, h, u, m);
1726
+ this.applyLinePatchToModel(d, f, p, m);
1727
1727
  try {
1728
- g.shadowLines = I.getLinesContent();
1728
+ u.shadowLines = d.getLinesContent();
1729
1729
  } catch {
1730
1730
  }
1731
1731
  }
1732
- } else f ? this.applyLinePatch(I, h, u, m) : this.applyLinePatchToModel(I, h, u, m);
1732
+ } else _ ? this.applyLinePatch(d, f, p, m) : this.applyLinePatchToModel(d, f, p, m);
1733
1733
  } catch {
1734
1734
  }
1735
1735
  else
1736
1736
  try {
1737
- const f = await this.rpcCall("nvim_buf_get_lines", [a, 0, -1, !1]), G = Array.isArray(f) ? f : [""];
1738
- this.bufHandle != null && a === this.bufHandle && this.editor.getModel() === I ? this.applyBuffer(G) : this.setModelText(I, G);
1737
+ const _ = await this.rpcCall("nvim_buf_get_lines", [c, 0, -1, !1]), w = Array.isArray(_) ? _ : [""];
1738
+ this.bufHandle != null && c === this.bufHandle && this.editor.getModel() === d ? this.applyBuffer(w) : this.setModelText(d, w);
1739
1739
  } catch {
1740
1740
  }
1741
- this.bufHandle != null && a === this.bufHandle && H(this.lastMode) && this.scheduleVisualSelectionRefresh();
1741
+ this.bufHandle != null && c === this.bufHandle && k(this.lastMode) && this.scheduleVisualSelectionRefresh();
1742
1742
  } else if (t === "nvim_buf_detach_event") {
1743
- const i = F(e?.[0]);
1743
+ const i = B(e?.[0]);
1744
1744
  if (i && this.buffers.has(i)) {
1745
1745
  const s = this.buffers.get(i);
1746
1746
  if (s.name && this.buffersByName.delete(s.name), s.createdModel)
@@ -1760,18 +1760,18 @@ end)(unpack(_A))`;
1760
1760
  if (!this.pendingRedrawEvents.length) return;
1761
1761
  let e = -1;
1762
1762
  for (let n = 0; n < this.pendingRedrawEvents.length; n += 1) {
1763
- const o = this.pendingRedrawEvents[n];
1764
- (Array.isArray(o) ? o[0] : null) === "flush" && (e = n);
1763
+ const r = this.pendingRedrawEvents[n];
1764
+ (Array.isArray(r) ? r[0] : null) === "flush" && (e = n);
1765
1765
  }
1766
1766
  if (e < 0) return;
1767
1767
  const i = this.pendingRedrawEvents.slice(0, e + 1);
1768
1768
  this.pendingRedrawEvents = this.pendingRedrawEvents.slice(e + 1);
1769
1769
  let s = 0;
1770
1770
  for (let n = 0; n < i.length; n += 1) {
1771
- const o = i[n];
1772
- if ((Array.isArray(o) ? o[0] : null) === "flush") {
1773
- const a = i.slice(s, n + 1);
1774
- s = n + 1, this.processRedrawFrame(a);
1771
+ const r = i[n];
1772
+ if ((Array.isArray(r) ? r[0] : null) === "flush") {
1773
+ const c = i.slice(s, n + 1);
1774
+ s = n + 1, this.processRedrawFrame(c);
1775
1775
  }
1776
1776
  }
1777
1777
  s < i.length && this.pendingRedrawEvents.unshift(...i.slice(s));
@@ -1809,10 +1809,10 @@ end)(unpack(_A))`;
1809
1809
  return;
1810
1810
  }
1811
1811
  if (t === "cmdline_show") {
1812
- const i = e[0], s = Math.max(0, Number(e[1] ?? 0) || 0), n = typeof e[2] == "string" ? e[2] : "", o = typeof e[3] == "string" ? e[3] : "", c = Math.max(0, Number(e[4] ?? 0) || 0), a = o || n || "", g = " ".repeat(c), I = z(i), h = `${g}${a}${I}`, u = E(`${g}${a}`), m = E(I);
1813
- this.cmdlineCursorOffsetBytes = u, this.cmdlineCursorContentBytes = m;
1814
- const b = s <= m ? this.cmdlineCursorOffsetBytes + s : s;
1815
- this.stagedCmdlineText = h, this.stagedCmdlineCursorByte = b, this.stagedSearchRefresh = !0;
1812
+ const i = e[0], s = Math.max(0, Number(e[1] ?? 0) || 0), n = typeof e[2] == "string" ? e[2] : "", r = typeof e[3] == "string" ? e[3] : "", l = Math.max(0, Number(e[4] ?? 0) || 0), c = r || n || "", u = " ".repeat(l), d = $(i), f = `${u}${c}${d}`, p = W(`${u}${c}`), m = W(d);
1813
+ this.cmdlineCursorOffsetBytes = p, this.cmdlineCursorContentBytes = m;
1814
+ const v = s <= m ? this.cmdlineCursorOffsetBytes + s : s;
1815
+ this.stagedCmdlineText = f, this.stagedCmdlineCursorByte = v, this.stagedSearchRefresh = !0;
1816
1816
  return;
1817
1817
  }
1818
1818
  if (t === "cmdline_pos") {
@@ -1827,26 +1827,26 @@ end)(unpack(_A))`;
1827
1827
  if (t === "msg_show") {
1828
1828
  const i = typeof e[0] == "string" ? e[0] : "";
1829
1829
  if (i === "return_prompt") return;
1830
- const s = e[1], n = !!e[2], o = !!e[4], c = z(s);
1831
- if (i === "empty" && !c) {
1830
+ const s = e[1], n = !!e[2], r = !!e[4], l = $(s);
1831
+ if (i === "empty" && !l) {
1832
1832
  this.stagedMessageText = null;
1833
1833
  return;
1834
1834
  }
1835
- if (!c) return;
1836
- const a = this.stagedMessageText !== void 0 ? this.stagedMessageText ?? "" : this.messageEl?.textContent ?? "";
1837
- if (o && a) {
1838
- this.stagedMessageText = `${a}${c}`;
1835
+ if (!l) return;
1836
+ const c = this.stagedMessageText !== void 0 ? this.stagedMessageText ?? "" : this.messageEl?.textContent ?? "";
1837
+ if (r && c) {
1838
+ this.stagedMessageText = `${c}${l}`;
1839
1839
  return;
1840
1840
  }
1841
1841
  if (n) {
1842
- this.stagedMessageText = c;
1842
+ this.stagedMessageText = l;
1843
1843
  return;
1844
1844
  }
1845
- this.stagedMessageText = c;
1845
+ this.stagedMessageText = l;
1846
1846
  return;
1847
1847
  }
1848
1848
  if (t === "msg_showmode" || t === "msg_showcmd" || t === "msg_ruler") {
1849
- const i = e[0], s = z(i);
1849
+ const i = e[0], s = $(i);
1850
1850
  this.stagedMessageText = s || null;
1851
1851
  return;
1852
1852
  }
@@ -1855,7 +1855,7 @@ end)(unpack(_A))`;
1855
1855
  return;
1856
1856
  }
1857
1857
  if (t === "popupmenu_show") {
1858
- const i = e[0], s = Number(e[1] ?? -1), n = We(i);
1858
+ const i = e[0], s = Number(e[1] ?? -1), n = Te(i);
1859
1859
  this.stagedPopupItems = n, this.stagedPopupSelected = Number.isFinite(s) ? s : -1;
1860
1860
  return;
1861
1861
  }
@@ -1871,24 +1871,24 @@ end)(unpack(_A))`;
1871
1871
  }
1872
1872
  }
1873
1873
  computeLinePatch(t, e, i, s) {
1874
- const n = t.getLineCount(), o = Math.min(e, n), c = Math.min(i, n), a = new y.Position(n, t.getLineMaxColumn(n)), I = c >= n && s.length === 0 && o > 0 ? new y.Position(o, t.getLineMaxColumn(o)) : o < n ? new y.Position(o + 1, 1) : a, h = c < n ? new y.Position(c + 1, 1) : a;
1875
- let u = s.join(`
1874
+ const n = t.getLineCount(), r = Math.min(e, n), l = Math.min(i, n), c = new b.Position(n, t.getLineMaxColumn(n)), d = l >= n && s.length === 0 && r > 0 ? new b.Position(r, t.getLineMaxColumn(r)) : r < n ? new b.Position(r + 1, 1) : c, f = l < n ? new b.Position(l + 1, 1) : c;
1875
+ let p = s.join(`
1876
1876
  `);
1877
- return e >= n && i >= n && s.length > 0 && (u = `
1878
- ${u}`), i < n && s.length > 0 && (u += `
1879
- `), { range: new y.Range(I.lineNumber, I.column, h.lineNumber, h.column), text: u };
1877
+ return e >= n && i >= n && s.length > 0 && (p = `
1878
+ ${p}`), i < n && s.length > 0 && (p += `
1879
+ `), { range: new b.Range(d.lineNumber, d.column, f.lineNumber, f.column), text: p };
1880
1880
  }
1881
1881
  applyLinePatch(t, e, i, s) {
1882
- const n = this.lastCursorPos ?? this.editor.getPosition() ?? new y.Position(1, 1), o = this.computeLinePatch(t, e, i, s);
1882
+ const n = this.lastCursorPos ?? this.editor.getPosition() ?? new b.Position(1, 1), r = this.computeLinePatch(t, e, i, s);
1883
1883
  try {
1884
- if (t.getValueInRange(o.range) === o.text) return;
1884
+ if (t.getValueInRange(r.range) === r.text) return;
1885
1885
  } catch {
1886
1886
  }
1887
- if (this.suppressCursorSync = !0, this.applyingFromNvim = !0, t.applyEdits([{ range: o.range, text: o.text }]), this.applyingFromNvim = !1, n && this.editor.setPosition(n), this.suppressCursorSync = !1, this.delegateInsertToMonaco) {
1888
- const c = this.getActiveState();
1889
- if (c && c.model === t)
1887
+ if (this.suppressCursorSync = !0, this.applyingFromNvim = !0, t.applyEdits([{ range: r.range, text: r.text }]), this.applyingFromNvim = !1, n && this.editor.setPosition(n), this.suppressCursorSync = !1, this.delegateInsertToMonaco) {
1888
+ const l = this.getActiveState();
1889
+ if (l && l.model === t)
1890
1890
  try {
1891
- c.shadowLines = t.getLinesContent();
1891
+ l.shadowLines = t.getLinesContent();
1892
1892
  } catch {
1893
1893
  }
1894
1894
  }
@@ -1962,7 +1962,7 @@ ${u}`), i < n && s.length > 0 && (u += `
1962
1962
  this.cmdlineEl.textContent = this.cmdlineTextRaw, this.cmdlineCursorByte = null;
1963
1963
  return;
1964
1964
  }
1965
- const e = this.cmdlineTextRaw, i = Math.max(0, Math.min(Number(t) || 0, E(e))), s = Math.max(0, Math.min(e.length, K(e, i)));
1965
+ const e = this.cmdlineTextRaw, i = Math.max(0, Math.min(Number(t) || 0, W(e))), s = Math.max(0, Math.min(e.length, L(e, i)));
1966
1966
  this.cmdlineCursorByte = i, this.cmdlineEl.textContent = `${e.slice(0, s)}▏${e.slice(s)}`;
1967
1967
  }
1968
1968
  setMessage(t) {
@@ -1996,10 +1996,10 @@ ${u}`), i < n && s.length > 0 && (u += `
1996
1996
  for (let i = 0; i < t.length; i += 1) {
1997
1997
  const s = t[i], n = document.createElement("div");
1998
1998
  n.style.padding = "2px 10px", n.style.display = "flex", n.style.gap = "10px", n.style.justifyContent = "space-between", n.style.background = i === e ? "rgba(255,255,255,0.12)" : "transparent";
1999
- const o = document.createElement("span");
2000
- o.textContent = s.word ?? "";
2001
- const c = document.createElement("span");
2002
- c.style.opacity = "0.7", c.textContent = s.menu ?? s.kind ?? "", n.appendChild(o), n.appendChild(c), this.popupEl.appendChild(n);
1999
+ const r = document.createElement("span");
2000
+ r.textContent = s.word ?? "";
2001
+ const l = document.createElement("span");
2002
+ l.style.opacity = "0.7", l.textContent = s.menu ?? s.kind ?? "", n.appendChild(r), n.appendChild(l), this.popupEl.appendChild(n);
2003
2003
  }
2004
2004
  this.popupEl.style.display = "block";
2005
2005
  }
@@ -2027,10 +2027,10 @@ ${u}`), i < n && s.length > 0 && (u += `
2027
2027
  } catch {
2028
2028
  }
2029
2029
  if (i === "wrappedLine" && (e === "down" || e === "up")) {
2030
- const c = e === "down" ? "cursorDown" : "cursorUp";
2031
- for (let a = 0; a < s; a += 1)
2030
+ const l = e === "down" ? "cursorDown" : "cursorUp";
2031
+ for (let c = 0; c < s; c += 1)
2032
2032
  try {
2033
- this.editor.trigger("monaco-neovim-wasm", c, null);
2033
+ this.editor.trigger("monaco-neovim-wasm", l, null);
2034
2034
  } catch {
2035
2035
  }
2036
2036
  return !0;
@@ -2038,8 +2038,8 @@ ${u}`), i < n && s.length > 0 && (u += `
2038
2038
  return !1;
2039
2039
  };
2040
2040
  this.suppressCursorSync = !0, n();
2041
- const o = this.editor.getPosition();
2042
- o && (this.lastCursorPos = o, this.applyScrolloff(o)), this.suppressCursorSync = !1, this.requestSearchHighlightRefresh();
2041
+ const r = this.editor.getPosition();
2042
+ r && (this.lastCursorPos = r, this.applyScrolloff(r)), this.suppressCursorSync = !1, this.requestSearchHighlightRefresh();
2043
2043
  }
2044
2044
  getScrolloffLines() {
2045
2045
  return this.opts.scrolloff != null ? Math.max(0, Math.floor(this.opts.scrolloff)) : this.opts.syncScrolloff ? Math.max(0, Math.floor(this.nvimScrolloff)) : 0;
@@ -2050,89 +2050,89 @@ ${u}`), i < n && s.length > 0 && (u += `
2050
2050
  if (e <= 0) return !1;
2051
2051
  const i = t ?? this.editor.getPosition();
2052
2052
  if (!i) return !1;
2053
- const s = Math.max(1, Number(this.editor.getOption(y.editor.EditorOption.lineHeight)) || 0), n = e * s;
2053
+ const s = Math.max(1, Number(this.editor.getOption(b.editor.EditorOption.lineHeight)) || 0), n = e * s;
2054
2054
  if (n <= 0) return !1;
2055
- let o = 0;
2055
+ let r = 0;
2056
2056
  try {
2057
- const b = this.editor.getLayoutInfo();
2058
- o = Math.max(0, Number(b?.contentHeight ?? b?.height ?? 0) || 0);
2057
+ const v = this.editor.getLayoutInfo();
2058
+ r = Math.max(0, Number(v?.contentHeight ?? v?.height ?? 0) || 0);
2059
2059
  } catch {
2060
2060
  }
2061
- if (o <= 0) return !1;
2062
- const c = () => {
2061
+ if (r <= 0) return !1;
2062
+ const l = () => {
2063
2063
  try {
2064
2064
  this.editor.revealPositionInCenterIfOutsideViewport(i);
2065
2065
  } catch {
2066
2066
  }
2067
2067
  };
2068
- let a = null;
2068
+ let c = null;
2069
2069
  try {
2070
- a = this.editor.getScrolledVisiblePosition(i);
2070
+ c = this.editor.getScrolledVisiblePosition(i);
2071
2071
  } catch {
2072
2072
  }
2073
- if (!a) {
2074
- c();
2073
+ if (!c) {
2074
+ l();
2075
2075
  try {
2076
- a = this.editor.getScrolledVisiblePosition(i);
2076
+ c = this.editor.getScrolledVisiblePosition(i);
2077
2077
  } catch {
2078
2078
  }
2079
2079
  }
2080
- if (!a || !Number.isFinite(a.top) || !Number.isFinite(a.height)) return !1;
2081
- const g = this.editor.getScrollTop(), I = a.top, h = a.top + a.height, u = Math.max(0, o - n);
2080
+ if (!c || !Number.isFinite(c.top) || !Number.isFinite(c.height)) return !1;
2081
+ const u = this.editor.getScrollTop(), d = c.top, f = c.top + c.height, p = Math.max(0, r - n);
2082
2082
  let m = 0;
2083
- if (I < n ? m = I - n : h > u && (m = h - u), !m) return !1;
2083
+ if (d < n ? m = d - n : f > p && (m = f - p), !m) return !1;
2084
2084
  try {
2085
- this.editor.setScrollTop(Math.max(0, g + m));
2085
+ this.editor.setScrollTop(Math.max(0, u + m));
2086
2086
  } catch {
2087
2087
  }
2088
2088
  return !0;
2089
2089
  }
2090
2090
  applyMonacoScroll(t) {
2091
- const e = typeof t.by == "string" ? t.by : "", i = typeof t.direction == "string" ? t.direction : "", s = Math.max(1, Number(t.value ?? 1) || 1), n = !!t.moveCursor, o = typeof t.cursorBy == "string" ? t.cursorBy : "wrappedLine", c = Math.max(3, this.uiRows || this.opts.rows), a = this.editor.getOption(y.editor.EditorOption.fontInfo), g = Math.max(1, Number(a?.lineHeight ?? 0) || 0), I = Math.max(1, c - 2), h = Math.max(1, Math.floor(I / 2));
2092
- let u = s;
2093
- if (e === "page") u = I * s;
2094
- else if (e === "halfPage") u = h * s;
2095
- else if (e === "line") u = s;
2091
+ const e = typeof t.by == "string" ? t.by : "", i = typeof t.direction == "string" ? t.direction : "", s = Math.max(1, Number(t.value ?? 1) || 1), n = !!t.moveCursor, r = typeof t.cursorBy == "string" ? t.cursorBy : "wrappedLine", l = Math.max(3, this.uiRows || this.opts.rows), c = this.editor.getOption(b.editor.EditorOption.fontInfo), u = Math.max(1, Number(c?.lineHeight ?? 0) || 0), d = Math.max(1, l - 2), f = Math.max(1, Math.floor(d / 2));
2092
+ let p = s;
2093
+ if (e === "page") p = d * s;
2094
+ else if (e === "halfPage") p = f * s;
2095
+ else if (e === "line") p = s;
2096
2096
  else return !1;
2097
2097
  const m = i === "up" ? -1 : i === "down" ? 1 : 0;
2098
2098
  if (!m) return !1;
2099
2099
  this.suppressCursorSync = !0;
2100
2100
  try {
2101
- const f = this.editor.getScrollTop(), G = Math.max(0, f + m * u * g);
2102
- this.editor.setScrollTop(G);
2101
+ const _ = this.editor.getScrollTop(), w = Math.max(0, _ + m * p * u);
2102
+ this.editor.setScrollTop(w);
2103
2103
  } catch {
2104
2104
  }
2105
- let b = !1;
2105
+ let v = !1;
2106
2106
  if (n)
2107
2107
  try {
2108
2108
  this.applyMonacoCursorMove({
2109
2109
  to: m > 0 ? "down" : "up",
2110
- by: o,
2111
- value: u
2112
- }), b = !0;
2110
+ by: r,
2111
+ value: p
2112
+ }), v = !0;
2113
2113
  } catch {
2114
2114
  }
2115
- return this.suppressCursorSync = !1, b;
2115
+ return this.suppressCursorSync = !1, v;
2116
2116
  }
2117
2117
  applyMonacoReveal(t) {
2118
2118
  const e = typeof t.direction == "string" ? t.direction : "", i = !!t.resetCursor, s = this.editor.getPosition();
2119
2119
  if (!s) return !1;
2120
- const n = s.lineNumber, o = Math.max(1, this.uiRows || this.opts.rows), c = this.editor.getOption(y.editor.EditorOption.fontInfo), a = Math.max(1, Number(c?.lineHeight ?? 0) || 0);
2120
+ const n = s.lineNumber, r = Math.max(1, this.uiRows || this.opts.rows), l = this.editor.getOption(b.editor.EditorOption.fontInfo), c = Math.max(1, Number(l?.lineHeight ?? 0) || 0);
2121
2121
  this.suppressCursorSync = !0;
2122
2122
  try {
2123
2123
  if (e === "top") {
2124
- const g = this.editor.getTopForLineNumber(n);
2125
- this.editor.setScrollTop(g);
2124
+ const u = this.editor.getTopForLineNumber(n);
2125
+ this.editor.setScrollTop(u);
2126
2126
  } else if (e === "center")
2127
2127
  this.editor.revealLineInCenter(n);
2128
2128
  else if (e === "bottom") {
2129
- const g = this.editor.getTopForLineNumber(n), I = Math.max(0, g - (o - 1) * a);
2130
- this.editor.setScrollTop(I);
2129
+ const u = this.editor.getTopForLineNumber(n), d = Math.max(0, u - (r - 1) * c);
2130
+ this.editor.setScrollTop(d);
2131
2131
  }
2132
2132
  if (i) {
2133
- const g = this.editor.getModel();
2134
- if (g) {
2135
- const I = g.getLineContent(n) ?? "", h = /\S/.exec(I), u = h ? h.index + 1 : 1, m = g.validatePosition(new y.Position(n, u));
2133
+ const u = this.editor.getModel();
2134
+ if (u) {
2135
+ const d = u.getLineContent(n) ?? "", f = /\S/.exec(d), p = f ? f.index + 1 : 1, m = u.validatePosition(new b.Position(n, p));
2136
2136
  this.editor.setPosition(m), this.lastCursorPos = m;
2137
2137
  }
2138
2138
  }
@@ -2146,30 +2146,30 @@ ${u}`), i < n && s.length > 0 && (u += `
2146
2146
  const i = this.editor.getModel();
2147
2147
  if (!i) return;
2148
2148
  const s = Math.max(1, Number(t.value ?? 1) || 1);
2149
- let n = 1, o = i.getLineCount();
2149
+ let n = 1, r = i.getLineCount();
2150
2150
  try {
2151
- const u = this.editor.getVisibleRanges();
2152
- u && u.length && (n = Math.min(...u.map((m) => m.startLineNumber)), o = Math.max(...u.map((m) => m.endLineNumber)));
2151
+ const p = this.editor.getVisibleRanges();
2152
+ p && p.length && (n = Math.min(...p.map((m) => m.startLineNumber)), r = Math.max(...p.map((m) => m.endLineNumber)));
2153
2153
  } catch {
2154
2154
  }
2155
- n = Math.max(1, Math.min(n, i.getLineCount())), o = Math.max(1, Math.min(o, i.getLineCount())), o < n && (o = n);
2156
- let c = n;
2155
+ n = Math.max(1, Math.min(n, i.getLineCount())), r = Math.max(1, Math.min(r, i.getLineCount())), r < n && (r = n);
2156
+ let l = n;
2157
2157
  if (e === "top")
2158
- c = n + (s - 1);
2158
+ l = n + (s - 1);
2159
2159
  else if (e === "middle")
2160
- c = Math.floor((n + o) / 2);
2160
+ l = Math.floor((n + r) / 2);
2161
2161
  else if (e === "bottom")
2162
- c = o - (s - 1);
2162
+ l = r - (s - 1);
2163
2163
  else
2164
2164
  return;
2165
- c = Math.max(n, Math.min(o, c));
2166
- const a = i.getLineContent(c) ?? "", g = /\S/.exec(a), I = g ? g.index + 1 : 1, h = i.validatePosition(new y.Position(c, I));
2165
+ l = Math.max(n, Math.min(r, l));
2166
+ const c = i.getLineContent(l) ?? "", u = /\S/.exec(c), d = u ? u.index + 1 : 1, f = i.validatePosition(new b.Position(l, d));
2167
2167
  this.suppressCursorSync = !0;
2168
2168
  try {
2169
- this.editor.setPosition(h);
2169
+ this.editor.setPosition(f);
2170
2170
  } catch {
2171
2171
  }
2172
- this.lastCursorPos = h, this.suppressCursorSync = !1;
2172
+ this.lastCursorPos = f, this.suppressCursorSync = !1;
2173
2173
  }
2174
2174
  syncTabstopFromMonaco() {
2175
2175
  const t = this.editor.getModel();
@@ -2194,100 +2194,100 @@ ${u}`), i < n && s.length > 0 && (u += `
2194
2194
  initTextInputListeners() {
2195
2195
  const t = this.editor.getDomNode();
2196
2196
  if (!t) return;
2197
- const e = t.ownerDocument || document, i = e.defaultView || window, s = (r) => {
2197
+ const e = t.ownerDocument || document, i = e.defaultView || window, s = (a) => {
2198
2198
  try {
2199
- r.stopImmediatePropagation?.();
2199
+ a.stopImmediatePropagation?.();
2200
2200
  } catch {
2201
2201
  }
2202
2202
  try {
2203
- r.stopPropagation();
2203
+ a.stopPropagation();
2204
2204
  } catch {
2205
2205
  }
2206
- }, n = (r) => {
2206
+ }, n = (a) => {
2207
2207
  try {
2208
2208
  if (typeof this.editor.hasTextFocus == "function" ? !!this.editor.hasTextFocus() : !1) return !0;
2209
- const C = r.target;
2210
- if (C && t.contains(C)) return !0;
2211
- const p = e.activeElement;
2212
- return !!(p && t.contains(p));
2209
+ const g = a.target;
2210
+ if (g && t.contains(g)) return !0;
2211
+ const y = e.activeElement;
2212
+ return !!(y && t.contains(y));
2213
2213
  } catch {
2214
2214
  return !1;
2215
2215
  }
2216
- }, o = (r) => {
2216
+ }, r = (a) => {
2217
2217
  try {
2218
- const d = r;
2219
- return !d || typeof d.tagName != "string" ? null : d;
2218
+ const h = a;
2219
+ return !h || typeof h.tagName != "string" ? null : h;
2220
2220
  } catch {
2221
2221
  return null;
2222
2222
  }
2223
- }, c = (r) => {
2224
- if (!n(r) || this.compositionActive || r.isComposing || r.getModifierState?.("AltGraph")) return;
2225
- const d = this.delegateInsertToMonaco && !this.exitingInsertMode;
2226
- if (d) {
2227
- if (r.key === "Escape") {
2228
- if (!this.opts.shouldHandleKey(r)) return;
2229
- s(r);
2223
+ }, l = (a) => {
2224
+ if (!n(a) || this.compositionActive || a.isComposing || a.getModifierState?.("AltGraph")) return;
2225
+ const h = this.delegateInsertToMonaco && !this.exitingInsertMode;
2226
+ if (h) {
2227
+ if (a.key === "Escape") {
2228
+ if (!this.opts.shouldHandleKey(a)) return;
2229
+ s(a);
2230
2230
  try {
2231
- r.preventDefault();
2231
+ a.preventDefault();
2232
2232
  } catch {
2233
2233
  }
2234
- if (this.compositionActive || r.isComposing) {
2234
+ if (this.compositionActive || a.isComposing) {
2235
2235
  this.pendingEscAfterComposition = !0;
2236
2236
  return;
2237
2237
  }
2238
2238
  this.exitDelegatedInsertMode("<Esc>");
2239
2239
  return;
2240
2240
  }
2241
- const Z = r.key;
2242
- (Z === "ArrowLeft" || Z === "ArrowRight" || Z === "ArrowUp" || Z === "ArrowDown" || Z === "Home" || Z === "End" || Z === "PageUp" || Z === "PageDown" || Z === "Tab" || Z === "Enter") && (this.delegatedInsertReplayPossible = !1);
2243
- }
2244
- if (!d && (r.key === "Backspace" || r.key === "Delete" || r.key === "Escape")) {
2245
- if (!this.opts.shouldHandleKey(r)) return;
2246
- const Z = this.opts.translateKey(r);
2247
- if (!Z) return;
2248
- s(r);
2241
+ const C = a.key;
2242
+ (C === "ArrowLeft" || C === "ArrowRight" || C === "ArrowUp" || C === "ArrowDown" || C === "Home" || C === "End" || C === "PageUp" || C === "PageDown" || C === "Tab" || C === "Enter") && (this.delegatedInsertReplayPossible = !1);
2243
+ }
2244
+ if (!h && (a.key === "Backspace" || a.key === "Delete" || a.key === "Escape")) {
2245
+ if (!this.opts.shouldHandleKey(a)) return;
2246
+ const C = this.opts.translateKey(a);
2247
+ if (!C) return;
2248
+ s(a);
2249
2249
  try {
2250
- r.preventDefault();
2250
+ a.preventDefault();
2251
2251
  } catch {
2252
2252
  }
2253
- if (this.exitingInsertMode && Z === "<Esc>") return;
2254
- this.exitingInsertMode ? this.pendingKeysAfterExit += Z : this.sendInput(Z);
2253
+ if (this.exitingInsertMode && C === "<Esc>") return;
2254
+ this.exitingInsertMode ? this.pendingKeysAfterExit += C : this.sendInput(C);
2255
2255
  return;
2256
2256
  }
2257
- if (S(this.lastMode) && !this.delegateInsertToMonaco && !this.exitingInsertMode && !r.ctrlKey && !r.metaKey && typeof r.key == "string" && r.key.length === 1) {
2258
- const Z = /^[\x20-\x7E]$/.test(r.key);
2259
- if (!!!(r.altKey && Z)) {
2260
- if (!this.opts.shouldHandleKey(r)) return;
2261
- s(r);
2257
+ if (A(this.lastMode) && !this.delegateInsertToMonaco && !this.exitingInsertMode && !a.ctrlKey && !a.metaKey && typeof a.key == "string" && a.key.length === 1) {
2258
+ const C = /^[\x20-\x7E]$/.test(a.key);
2259
+ if (!!!(a.altKey && C)) {
2260
+ if (!this.opts.shouldHandleKey(a)) return;
2261
+ s(a);
2262
2262
  return;
2263
2263
  }
2264
2264
  }
2265
- if (!r.ctrlKey && !r.altKey && !r.metaKey) return;
2266
- const C = this.modifiedKeyName(r);
2267
- if (!C || !this.opts.shouldHandleKey(r)) return;
2268
- if (this.hasExplicitModAllowlist(d)) {
2269
- if (!this.shouldForwardModifiedKeys(r, d)) return;
2270
- } else if (d || !r.ctrlKey || r.altKey || r.metaKey || C !== "f" && C !== "b" && C !== "d" && C !== "u" && C !== "e" && C !== "y" && C !== "v") return;
2271
- const p = this.opts.translateKey(r);
2272
- if (p) {
2273
- s(r);
2265
+ if (!a.ctrlKey && !a.altKey && !a.metaKey) return;
2266
+ const g = this.modifiedKeyName(a);
2267
+ if (!g || !this.opts.shouldHandleKey(a)) return;
2268
+ if (this.hasExplicitModAllowlist(h)) {
2269
+ if (!this.shouldForwardModifiedKeys(a, h)) return;
2270
+ } else if (h || !a.ctrlKey || a.altKey || a.metaKey || g !== "f" && g !== "b" && g !== "d" && g !== "u" && g !== "e" && g !== "y" && g !== "v") return;
2271
+ const y = this.opts.translateKey(a);
2272
+ if (y) {
2273
+ s(a);
2274
2274
  try {
2275
- r.preventDefault();
2275
+ a.preventDefault();
2276
2276
  } catch {
2277
2277
  }
2278
- this.exitingInsertMode ? (this.debugLog(`keydown(capture) buffer: key=${JSON.stringify(r.key)} code=${JSON.stringify(r.code)} mods=${r.ctrlKey ? "C" : ""}${r.altKey ? "A" : ""}${r.metaKey ? "D" : ""}${r.shiftKey ? "S" : ""} -> ${p}`), this.pendingKeysAfterExit += p) : d && (p === "<C-[>" || p === "<C-c>") ? (this.debugLog(`keydown(capture) exit insert: key=${JSON.stringify(r.key)} code=${JSON.stringify(r.code)} mods=${r.ctrlKey ? "C" : ""}${r.altKey ? "A" : ""}${r.metaKey ? "D" : ""}${r.shiftKey ? "S" : ""} -> ${p}`), this.exitDelegatedInsertMode(p)) : (d && this.flushPendingMonacoSync(), this.debugLog(`keydown(capture) send: key=${JSON.stringify(r.key)} code=${JSON.stringify(r.code)} mods=${r.ctrlKey ? "C" : ""}${r.altKey ? "A" : ""}${r.metaKey ? "D" : ""}${r.shiftKey ? "S" : ""} -> ${p}`), this.sendInput(p));
2278
+ this.exitingInsertMode ? (this.debugLog(`keydown(capture) buffer: key=${JSON.stringify(a.key)} code=${JSON.stringify(a.code)} mods=${a.ctrlKey ? "C" : ""}${a.altKey ? "A" : ""}${a.metaKey ? "D" : ""}${a.shiftKey ? "S" : ""} -> ${y}`), this.pendingKeysAfterExit += y) : h && (y === "<C-[>" || y === "<C-c>") ? (this.debugLog(`keydown(capture) exit insert: key=${JSON.stringify(a.key)} code=${JSON.stringify(a.code)} mods=${a.ctrlKey ? "C" : ""}${a.altKey ? "A" : ""}${a.metaKey ? "D" : ""}${a.shiftKey ? "S" : ""} -> ${y}`), this.exitDelegatedInsertMode(y)) : (h && this.flushPendingMonacoSync(), this.debugLog(`keydown(capture) send: key=${JSON.stringify(a.key)} code=${JSON.stringify(a.code)} mods=${a.ctrlKey ? "C" : ""}${a.altKey ? "A" : ""}${a.metaKey ? "D" : ""}${a.shiftKey ? "S" : ""} -> ${y}`), this.sendInput(y));
2279
2279
  }
2280
- }, a = (r) => {
2281
- if (n(r)) {
2280
+ }, c = (a) => {
2281
+ if (n(a)) {
2282
2282
  if (this.compositionActive = !0, this.debugLog(`compositionstart delegateInsert=${this.delegateInsertToMonaco} mode=${JSON.stringify(this.lastMode)}`), this.delegateInsertToMonaco) {
2283
2283
  this.setPreedit(null);
2284
2284
  return;
2285
2285
  }
2286
2286
  this.setPreedit("");
2287
2287
  }
2288
- }, g = (r) => {
2289
- if (!n(r)) return;
2290
- if (this.compositionActive = !1, this.setPreedit(null), this.debugLog(`compositionend delegateInsert=${this.delegateInsertToMonaco} mode=${JSON.stringify(this.lastMode)} data=${JSON.stringify(r.data ?? "")}`), this.delegateInsertToMonaco) {
2288
+ }, u = (a) => {
2289
+ if (!n(a)) return;
2290
+ if (this.compositionActive = !1, this.setPreedit(null), this.debugLog(`compositionend delegateInsert=${this.delegateInsertToMonaco} mode=${JSON.stringify(this.lastMode)} data=${JSON.stringify(a.data ?? "")}`), this.delegateInsertToMonaco) {
2291
2291
  if (this.pendingEscAfterComposition) {
2292
2292
  this.pendingEscAfterComposition = !1, this.exitDelegatedInsertMode("<Esc>");
2293
2293
  return;
@@ -2295,185 +2295,185 @@ ${u}`), i < n && s.length > 0 && (u += `
2295
2295
  this.exitingInsertMode || this.scheduleCursorSyncToNvim();
2296
2296
  return;
2297
2297
  }
2298
- const d = o(r.target);
2299
- if (Y(this.lastMode) && !S(this.lastMode)) {
2300
- const C = typeof r.data == "string" ? r.data : "", p = !C && d && d.tagName === "TEXTAREA" && d.value ? String(d.value) : !C && d?.textContent ? String(d.textContent) : "", Z = C || p;
2301
- Z && this.sendImeText(Z);
2298
+ const h = r(a.target);
2299
+ if (P(this.lastMode) && !A(this.lastMode)) {
2300
+ const g = typeof a.data == "string" ? a.data : "", y = !g && h && h.tagName === "TEXTAREA" && h.value ? String(h.value) : !g && h?.textContent ? String(h.textContent) : "", C = g || y;
2301
+ C && this.sendImeText(C);
2302
2302
  }
2303
- if (S(this.lastMode)) {
2304
- const C = typeof r.data == "string" ? r.data : "", p = !C && d && d.tagName === "TEXTAREA" && d.value ? String(d.value) : !C && d?.textContent ? String(d.textContent) : "", Z = C || p;
2305
- Z && this.sendImeText(Z);
2303
+ if (A(this.lastMode)) {
2304
+ const g = typeof a.data == "string" ? a.data : "", y = !g && h && h.tagName === "TEXTAREA" && h.value ? String(h.value) : !g && h?.textContent ? String(h.textContent) : "", C = g || y;
2305
+ C && this.sendImeText(C);
2306
2306
  }
2307
2307
  try {
2308
- d && d.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2308
+ h && h.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2309
2309
  } catch {
2310
2310
  }
2311
2311
  this.pendingResyncAfterComposition && (this.pendingResyncAfterComposition = !1, this.scheduleResync());
2312
- }, I = (r) => {
2313
- if (!n(r) || (this.compositionActive || (this.compositionActive = !0), this.delegateInsertToMonaco)) return;
2314
- const d = o(r.target), C = typeof r.data == "string" ? r.data : d && d.tagName === "TEXTAREA" && d.value ? String(d.value) : d?.textContent ? String(d.textContent) : "";
2315
- this.setPreedit(C || "");
2316
- }, h = (r) => {
2317
- if (!n(r) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2318
- const d = o(r.target);
2319
- s(r);
2320
- try {
2321
- r.preventDefault?.();
2322
- } catch {
2323
- }
2324
- if (Y(this.lastMode) && !this.compositionActive) {
2325
- const C = r, p = typeof C.inputType == "string" ? String(C.inputType) : "", Z = !!C.isComposing, R = typeof C.data == "string" ? C.data : "";
2326
- if (!Z && !p.includes("Composition")) {
2327
- if (p === "insertText" || p === "insertReplacementText" || p === "insertFromDrop") {
2328
- R && (this.armIgnoreNextInputEvent(C.target, 120), this.sendImeText(R));
2312
+ }, d = (a) => {
2313
+ if (!n(a) || (this.compositionActive || (this.compositionActive = !0), this.delegateInsertToMonaco)) return;
2314
+ const h = r(a.target), g = typeof a.data == "string" ? a.data : h && h.tagName === "TEXTAREA" && h.value ? String(h.value) : h?.textContent ? String(h.textContent) : "";
2315
+ this.setPreedit(g || "");
2316
+ }, f = (a) => {
2317
+ if (!n(a) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2318
+ const h = r(a.target);
2319
+ s(a);
2320
+ try {
2321
+ a.preventDefault?.();
2322
+ } catch {
2323
+ }
2324
+ if (P(this.lastMode) && !this.compositionActive) {
2325
+ const g = a, y = typeof g.inputType == "string" ? String(g.inputType) : "", C = !!g.isComposing, M = typeof g.data == "string" ? g.data : "";
2326
+ if (!C && !y.includes("Composition")) {
2327
+ if (y === "insertText" || y === "insertReplacementText" || y === "insertFromDrop") {
2328
+ M && (this.armIgnoreNextInputEvent(g.target, 120), this.sendImeText(M));
2329
2329
  try {
2330
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2330
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2331
2331
  } catch {
2332
2332
  }
2333
2333
  return;
2334
2334
  }
2335
- if (p === "insertLineBreak" || p === "insertParagraph") {
2336
- this.armIgnoreNextInputEvent(C.target, 120), this.sendInput("<CR>");
2335
+ if (y === "insertLineBreak" || y === "insertParagraph") {
2336
+ this.armIgnoreNextInputEvent(g.target, 120), this.sendInput("<CR>");
2337
2337
  try {
2338
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2338
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2339
2339
  } catch {
2340
2340
  }
2341
2341
  return;
2342
2342
  }
2343
- if (p === "deleteContentBackward") {
2344
- this.armIgnoreNextInputEvent(C.target, 120), this.sendInput("<BS>");
2343
+ if (y === "deleteContentBackward") {
2344
+ this.armIgnoreNextInputEvent(g.target, 120), this.sendInput("<BS>");
2345
2345
  try {
2346
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2346
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2347
2347
  } catch {
2348
2348
  }
2349
2349
  return;
2350
2350
  }
2351
- if (p === "deleteContentForward") {
2352
- this.armIgnoreNextInputEvent(C.target, 120), this.sendInput("<Del>");
2351
+ if (y === "deleteContentForward") {
2352
+ this.armIgnoreNextInputEvent(g.target, 120), this.sendInput("<Del>");
2353
2353
  try {
2354
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2354
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2355
2355
  } catch {
2356
2356
  }
2357
2357
  return;
2358
2358
  }
2359
2359
  }
2360
2360
  }
2361
- if (S(this.lastMode) && !this.compositionActive) {
2362
- const C = r, p = typeof C.data == "string" ? C.data : "", Z = typeof C.inputType == "string" ? String(C.inputType) : "";
2363
- !C.isComposing && !Z.includes("Composition") && p && this.sendImeText(p);
2361
+ if (A(this.lastMode) && !this.compositionActive) {
2362
+ const g = a, y = typeof g.data == "string" ? g.data : "", C = typeof g.inputType == "string" ? String(g.inputType) : "";
2363
+ !g.isComposing && !C.includes("Composition") && y && this.sendImeText(y);
2364
2364
  }
2365
- }, u = (r) => {
2366
- if (!n(r) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2367
- const d = o(r.target);
2368
- s(r);
2369
- const C = r;
2370
- if (this.shouldIgnoreNextInputEvent(C.target)) {
2365
+ }, p = (a) => {
2366
+ if (!n(a) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2367
+ const h = r(a.target);
2368
+ s(a);
2369
+ const g = a;
2370
+ if (this.shouldIgnoreNextInputEvent(g.target)) {
2371
2371
  this.clearIgnoreNextInputEvent();
2372
2372
  try {
2373
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2373
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2374
2374
  } catch {
2375
2375
  }
2376
2376
  return;
2377
2377
  }
2378
2378
  if (!this.compositionActive) {
2379
- if (Y(this.lastMode) && !S(this.lastMode)) {
2380
- const p = typeof C.data == "string" ? C.data : "", Z = !p && d?.tagName === "TEXTAREA" && d.value ? String(d.value) : !p && d?.textContent ? String(d.textContent) : "", R = p || Z;
2381
- R && (this.armIgnoreNextInputEvent(C.target, 120), this.sendImeText(R));
2379
+ if (P(this.lastMode) && !A(this.lastMode)) {
2380
+ const y = typeof g.data == "string" ? g.data : "", C = !y && h?.tagName === "TEXTAREA" && h.value ? String(h.value) : !y && h?.textContent ? String(h.textContent) : "", M = y || C;
2381
+ M && (this.armIgnoreNextInputEvent(g.target, 120), this.sendImeText(M));
2382
2382
  }
2383
- if (S(this.lastMode)) {
2384
- const p = typeof C.data == "string" ? C.data : "", Z = !p && d?.tagName === "TEXTAREA" && d.value ? String(d.value) : !p && d?.textContent ? String(d.textContent) : "", R = p || Z;
2385
- R && this.sendImeText(R);
2383
+ if (A(this.lastMode)) {
2384
+ const y = typeof g.data == "string" ? g.data : "", C = !y && h?.tagName === "TEXTAREA" && h.value ? String(h.value) : !y && h?.textContent ? String(h.textContent) : "", M = y || C;
2385
+ M && this.sendImeText(M);
2386
2386
  }
2387
2387
  try {
2388
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2388
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2389
2389
  } catch {
2390
2390
  }
2391
2391
  }
2392
- }, m = (r) => {
2393
- if (!n(r) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2394
- const d = o(r.target);
2395
- s(r);
2396
- const C = r.clipboardData?.getData("text/plain") ?? "";
2397
- C && (r.preventDefault(), this.armIgnoreNextInputEvent(r.target, 150), this.pasteText(C));
2392
+ }, m = (a) => {
2393
+ if (!n(a) || this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2394
+ const h = r(a.target);
2395
+ s(a);
2396
+ const g = a.clipboardData?.getData("text/plain") ?? "";
2397
+ g && (a.preventDefault(), this.armIgnoreNextInputEvent(a.target, 150), this.pasteText(g));
2398
2398
  try {
2399
- d?.tagName === "TEXTAREA" ? d.value = "" : d && (d.textContent = "");
2399
+ h?.tagName === "TEXTAREA" ? h.value = "" : h && (h.textContent = "");
2400
2400
  } catch {
2401
2401
  }
2402
2402
  };
2403
- let b = !1, f = "left", G = null, A = "", B = null;
2404
- const w = (r) => `${r.shiftKey ? "S" : ""}${r.ctrlKey ? "C" : ""}${r.altKey ? "A" : ""}${r.metaKey ? "D" : ""}`, v = (r) => r.button === 1 ? "middle" : r.button === 2 ? "right" : "left", N = (r) => {
2403
+ let v = !1, _ = "left", w = null, x = "", S = null;
2404
+ const N = (a) => `${a.shiftKey ? "S" : ""}${a.ctrlKey ? "C" : ""}${a.altKey ? "A" : ""}${a.metaKey ? "D" : ""}`, D = (a) => a.button === 1 ? "middle" : a.button === 2 ? "right" : "left", R = (a) => {
2405
2405
  try {
2406
- const p = this.editor.getTargetAtClientPoint?.(r.clientX, r.clientY)?.position;
2407
- return p ? new y.Position(p.lineNumber, p.column) : null;
2406
+ const y = this.editor.getTargetAtClientPoint?.(a.clientX, a.clientY)?.position;
2407
+ return y ? new b.Position(y.lineNumber, y.column) : null;
2408
2408
  } catch {
2409
2409
  return null;
2410
2410
  }
2411
- }, V = () => {
2412
- B = null, b && G && (this.ignoreSelectionSyncUntil = this.nowMs() + 200, this.sendNvimMouse(f, "drag", A, G));
2413
- }, $ = (r) => {
2414
- if (!n(r) || this.delegateInsertToMonaco && !this.exitingInsertMode || this.compositionActive || r.isComposing || r.button !== 0 && r.button !== 1 && r.button !== 2) return;
2415
- const d = N(r);
2416
- if (d) {
2417
- s(r);
2411
+ }, E = () => {
2412
+ S = null, v && w && (this.ignoreSelectionSyncUntil = this.nowMs() + 200, this.sendNvimMouse(_, "drag", x, w));
2413
+ }, Y = (a) => {
2414
+ if (!n(a) || this.delegateInsertToMonaco && !this.exitingInsertMode || this.compositionActive || a.isComposing || a.button !== 0 && a.button !== 1 && a.button !== 2) return;
2415
+ const h = R(a);
2416
+ if (h) {
2417
+ s(a);
2418
2418
  try {
2419
- r.preventDefault();
2419
+ a.preventDefault();
2420
2420
  } catch {
2421
2421
  }
2422
2422
  try {
2423
2423
  this.editor.focus();
2424
2424
  } catch {
2425
2425
  }
2426
- b = !0, f = v(r), A = w(r), G = d, B && (clearTimeout(B), B = null), this.ignoreSelectionSyncUntil = this.nowMs() + 250, this.sendNvimMouse(f, "press", A, d);
2426
+ v = !0, _ = D(a), x = N(a), w = h, S && (clearTimeout(S), S = null), this.ignoreSelectionSyncUntil = this.nowMs() + 250, this.sendNvimMouse(_, "press", x, h);
2427
2427
  }
2428
- }, q = (r) => {
2429
- if (!b || !n(r) || this.delegateInsertToMonaco && !this.exitingInsertMode || this.compositionActive || r.isComposing) return;
2430
- const d = N(r);
2431
- if (d) {
2432
- s(r);
2428
+ }, Z = (a) => {
2429
+ if (!v || !n(a) || this.delegateInsertToMonaco && !this.exitingInsertMode || this.compositionActive || a.isComposing) return;
2430
+ const h = R(a);
2431
+ if (h) {
2432
+ s(a);
2433
2433
  try {
2434
- r.preventDefault();
2434
+ a.preventDefault();
2435
2435
  } catch {
2436
2436
  }
2437
- A = w(r), G = d, !B && (B = window.setTimeout(V, 16));
2438
- }
2439
- }, ee = (r) => {
2440
- if (!b) return;
2441
- b = !1;
2442
- const d = n(r);
2443
- if (d && this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2444
- const C = N(r) ?? G;
2445
- if (C) {
2446
- if (d) {
2447
- s(r);
2437
+ x = N(a), w = h, !S && (S = window.setTimeout(E, 16));
2438
+ }
2439
+ }, ee = (a) => {
2440
+ if (!v) return;
2441
+ v = !1;
2442
+ const h = n(a);
2443
+ if (h && this.delegateInsertToMonaco && !this.exitingInsertMode) return;
2444
+ const g = R(a) ?? w;
2445
+ if (g) {
2446
+ if (h) {
2447
+ s(a);
2448
2448
  try {
2449
- r.preventDefault();
2449
+ a.preventDefault();
2450
2450
  } catch {
2451
2451
  }
2452
2452
  }
2453
- B && (clearTimeout(B), B = null), A = w(r), G = C, this.ignoreSelectionSyncUntil = this.nowMs() + 250, this.sendNvimMouse(f, "release", A, C);
2453
+ S && (clearTimeout(S), S = null), x = N(a), w = g, this.ignoreSelectionSyncUntil = this.nowMs() + 250, this.sendNvimMouse(_, "release", x, g);
2454
2454
  }
2455
- }, te = (r) => {
2456
- if (n(r) && !(this.delegateInsertToMonaco && !this.exitingInsertMode)) {
2457
- s(r);
2455
+ }, te = (a) => {
2456
+ if (n(a) && !(this.delegateInsertToMonaco && !this.exitingInsertMode)) {
2457
+ s(a);
2458
2458
  try {
2459
- r.preventDefault();
2459
+ a.preventDefault();
2460
2460
  } catch {
2461
2461
  }
2462
2462
  }
2463
2463
  };
2464
2464
  this.disposables.push(
2465
2465
  // Capture phase to ensure we see events even if Monaco stops propagation.
2466
- X(i, "keydown", c, !0),
2467
- X(i, "beforeinput", h, !0),
2468
- X(i, "input", u, !0),
2469
- X(i, "paste", m, !0),
2470
- X(i, "mousedown", $, !0),
2471
- X(i, "mousemove", q, !0),
2472
- X(i, "mouseup", ee, !0),
2473
- X(i, "contextmenu", te, !0),
2474
- X(i, "compositionstart", a, !0),
2475
- X(i, "compositionupdate", I, !0),
2476
- X(i, "compositionend", g, !0)
2466
+ I(i, "keydown", l, !0),
2467
+ I(i, "beforeinput", f, !0),
2468
+ I(i, "input", p, !0),
2469
+ I(i, "paste", m, !0),
2470
+ I(i, "mousedown", Y, !0),
2471
+ I(i, "mousemove", Z, !0),
2472
+ I(i, "mouseup", ee, !0),
2473
+ I(i, "contextmenu", te, !0),
2474
+ I(i, "compositionstart", c, !0),
2475
+ I(i, "compositionupdate", d, !0),
2476
+ I(i, "compositionend", u, !0)
2477
2477
  );
2478
2478
  }
2479
2479
  scheduleResync() {
@@ -2495,7 +2495,7 @@ ${u}`), i < n && s.length > 0 && (u += `
2495
2495
  const i = (t && t.length ? t : [""]).join(`
2496
2496
  `);
2497
2497
  if (e.getValue() === i) return;
2498
- const s = this.lastCursorPos ?? this.editor.getPosition() ?? new y.Position(1, 1);
2498
+ const s = this.lastCursorPos ?? this.editor.getPosition() ?? new b.Position(1, 1);
2499
2499
  if (this.suppressCursorSync = !0, this.applyingFromNvim = !0, e.setValue(i), this.applyingFromNvim = !1, s && this.editor.setPosition(s), this.suppressCursorSync = !1, this.delegateInsertToMonaco) {
2500
2500
  const n = this.getActiveState();
2501
2501
  if (n && n.model === e)
@@ -2569,35 +2569,35 @@ ${u}`), i < n && s.length > 0 && (u += `
2569
2569
  let s = 0, n = 0;
2570
2570
  if (i && t !== i)
2571
2571
  try {
2572
- const I = i.getBoundingClientRect(), h = t.getBoundingClientRect();
2573
- s = Number.isFinite(h.left - I.left) ? h.left - I.left : 0, n = Number.isFinite(h.top - I.top) ? h.top - I.top : 0;
2572
+ const d = i.getBoundingClientRect(), f = t.getBoundingClientRect();
2573
+ s = Number.isFinite(f.left - d.left) ? f.left - d.left : 0, n = Number.isFinite(f.top - d.top) ? f.top - d.top : 0;
2574
2574
  } catch {
2575
2575
  }
2576
- const o = Array.isArray(this.visualVirtualRawRanges) ? this.visualVirtualRawRanges : [];
2577
- if (o.length === 0) {
2576
+ const r = Array.isArray(this.visualVirtualRawRanges) ? this.visualVirtualRawRanges : [];
2577
+ if (r.length === 0) {
2578
2578
  try {
2579
2579
  t.replaceChildren();
2580
2580
  } catch {
2581
2581
  }
2582
2582
  return;
2583
2583
  }
2584
- const c = this.editor.getOption(y.editor.EditorOption.fontInfo), a = Math.max(1, Number(c?.typicalHalfwidthCharacterWidth ?? c?.maxDigitWidth ?? 0) || 0), g = document.createDocumentFragment();
2585
- for (const I of o) {
2586
- const h = Number(I?.start?.line), u = Number(I?.start_vcol), m = Number(I?.end_vcol), b = Number(I?.disp);
2587
- if (!Number.isFinite(h) || !Number.isFinite(u) || !Number.isFinite(m) || !Number.isFinite(b)) continue;
2588
- const f = h + 1;
2589
- if (f < 1 || f > e.getLineCount()) continue;
2590
- const G = Math.min(u, m), A = Math.max(u, m), B = this.editor.getScrolledVisiblePosition(new y.Position(f, 1));
2591
- if (!B) continue;
2592
- const w = A - G + 1;
2593
- if (w <= 0) continue;
2594
- const v = B.left + Math.max(0, G - 1) * a, N = w * a;
2595
- if (!Number.isFinite(N) || N <= 0) continue;
2596
- const V = document.createElement("div");
2597
- V.className = "monaco-neovim-visual-virtual", V.style.left = `${Math.max(0, v - s)}px`, V.style.top = `${Math.max(0, B.top - n)}px`, V.style.width = `${N}px`, V.style.height = `${Math.max(0, B.height)}px`, g.appendChild(V);
2584
+ const l = this.editor.getOption(b.editor.EditorOption.fontInfo), c = Math.max(1, Number(l?.typicalHalfwidthCharacterWidth ?? l?.maxDigitWidth ?? 0) || 0), u = document.createDocumentFragment();
2585
+ for (const d of r) {
2586
+ const f = Number(d?.start?.line), p = Number(d?.start_vcol), m = Number(d?.end_vcol), v = Number(d?.disp);
2587
+ if (!Number.isFinite(f) || !Number.isFinite(p) || !Number.isFinite(m) || !Number.isFinite(v)) continue;
2588
+ const _ = f + 1;
2589
+ if (_ < 1 || _ > e.getLineCount()) continue;
2590
+ const w = Math.min(p, m), x = Math.max(p, m), S = this.editor.getScrolledVisiblePosition(new b.Position(_, 1));
2591
+ if (!S) continue;
2592
+ const N = x - w + 1;
2593
+ if (N <= 0) continue;
2594
+ const D = S.left + Math.max(0, w - 1) * c, R = N * c;
2595
+ if (!Number.isFinite(R) || R <= 0) continue;
2596
+ const E = document.createElement("div");
2597
+ E.className = "monaco-neovim-visual-virtual", E.style.left = `${Math.max(0, D - s)}px`, E.style.top = `${Math.max(0, S.top - n)}px`, E.style.width = `${R}px`, E.style.height = `${Math.max(0, S.height)}px`, u.appendChild(E);
2598
2598
  }
2599
2599
  try {
2600
- t.replaceChildren(g);
2600
+ t.replaceChildren(u);
2601
2601
  } catch {
2602
2602
  }
2603
2603
  }
@@ -2651,11 +2651,11 @@ ${u}`), i < n && s.length > 0 && (u += `
2651
2651
  let e = 1, i = t.getLineCount();
2652
2652
  try {
2653
2653
  const n = this.editor.getVisibleRanges();
2654
- n && n.length && (e = Math.min(...n.map((o) => o.startLineNumber)), i = Math.max(...n.map((o) => o.endLineNumber)));
2654
+ n && n.length && (e = Math.min(...n.map((r) => r.startLineNumber)), i = Math.max(...n.map((r) => r.endLineNumber)));
2655
2655
  } catch {
2656
2656
  }
2657
2657
  e = Math.max(1, Math.min(e, t.getLineCount())), i = Math.max(1, Math.min(i, t.getLineCount()));
2658
- const s = await this.execLua(ye, [e, i]);
2658
+ const s = await this.execLua(be, [e, i]);
2659
2659
  this.applySearchHighlights(s, t);
2660
2660
  } catch {
2661
2661
  }
@@ -2672,63 +2672,63 @@ ${u}`), i < n && s.length > 0 && (u += `
2672
2672
  this.clearSearchHighlights();
2673
2673
  return;
2674
2674
  }
2675
- const n = Array.isArray(i.matches) ? i.matches : [], o = i.current && typeof i.current == "object" ? i.current : null, c = o && Number.isFinite(Number(o.l)) ? `${Number(o.l)}:${Number(o.s)}:${Number(o.e)}` : null, a = [], g = 2e3, I = /* @__PURE__ */ new Map(), h = (u) => {
2676
- if (I.has(u)) return I.get(u);
2677
- const m = e.getLineContent(u) ?? "";
2678
- return I.set(u, m), m;
2675
+ const n = Array.isArray(i.matches) ? i.matches : [], r = i.current && typeof i.current == "object" ? i.current : null, l = r && Number.isFinite(Number(r.l)) ? `${Number(r.l)}:${Number(r.s)}:${Number(r.e)}` : null, c = [], u = 2e3, d = /* @__PURE__ */ new Map(), f = (p) => {
2676
+ if (d.has(p)) return d.get(p);
2677
+ const m = e.getLineContent(p) ?? "";
2678
+ return d.set(p, m), m;
2679
2679
  };
2680
- for (let u = 0; u < n.length && a.length < g; u += 1) {
2681
- const m = n[u], b = Number(m?.l), f = Number(m?.s), G = Number(m?.e);
2682
- if (!Number.isFinite(b) || !Number.isFinite(f) || !Number.isFinite(G)) continue;
2683
- const A = b + 1;
2684
- if (A < 1 || A > e.getLineCount()) continue;
2685
- const B = h(A), w = K(B, Math.max(0, f)) + 1, v = K(B, Math.max(0, G)) + 1;
2686
- if (v <= w) continue;
2687
- const N = `${b}:${f}:${G}`, V = c && N === c ? "monaco-neovim-search-current" : "monaco-neovim-search-match";
2688
- a.push({
2689
- range: new y.Range(A, w, A, v),
2690
- options: { inlineClassName: V }
2680
+ for (let p = 0; p < n.length && c.length < u; p += 1) {
2681
+ const m = n[p], v = Number(m?.l), _ = Number(m?.s), w = Number(m?.e);
2682
+ if (!Number.isFinite(v) || !Number.isFinite(_) || !Number.isFinite(w)) continue;
2683
+ const x = v + 1;
2684
+ if (x < 1 || x > e.getLineCount()) continue;
2685
+ const S = f(x), N = L(S, Math.max(0, _)) + 1, D = L(S, Math.max(0, w)) + 1;
2686
+ if (D <= N) continue;
2687
+ const R = `${v}:${_}:${w}`, E = l && R === l ? "monaco-neovim-search-current" : "monaco-neovim-search-match";
2688
+ c.push({
2689
+ range: new b.Range(x, N, x, D),
2690
+ options: { inlineClassName: E }
2691
2691
  });
2692
2692
  }
2693
2693
  this.ensureSearchStyle();
2694
2694
  try {
2695
- this.searchDecorationIds = this.editor.deltaDecorations(this.searchDecorationIds, a);
2695
+ this.searchDecorationIds = this.editor.deltaDecorations(this.searchDecorationIds, c);
2696
2696
  } catch {
2697
2697
  this.searchDecorationIds = [];
2698
2698
  }
2699
2699
  }
2700
2700
  applyVisualDecorations(t, e, i = [], s = "") {
2701
2701
  this.ensureVisualStyle();
2702
- const n = typeof s == "string" && s ? s : we(e), o = n === "V", c = n === "", a = [];
2703
- if (o) {
2704
- let g = 1 / 0, I = -1 / 0;
2705
- for (const h of t) {
2706
- const u = h.getStartPosition(), m = h.getEndPosition();
2707
- g = Math.min(g, u.lineNumber, m.lineNumber), I = Math.max(I, u.lineNumber, m.lineNumber);
2708
- }
2709
- Number.isFinite(g) && Number.isFinite(I) && I >= g && a.push({
2710
- range: new y.Range(g, 1, I, 1),
2702
+ const n = typeof s == "string" && s ? s : Ne(e), r = n === "V", l = n === "", c = [];
2703
+ if (r) {
2704
+ let u = 1 / 0, d = -1 / 0;
2705
+ for (const f of t) {
2706
+ const p = f.getStartPosition(), m = f.getEndPosition();
2707
+ u = Math.min(u, p.lineNumber, m.lineNumber), d = Math.max(d, p.lineNumber, m.lineNumber);
2708
+ }
2709
+ Number.isFinite(u) && Number.isFinite(d) && d >= u && c.push({
2710
+ range: new b.Range(u, 1, d, 1),
2711
2711
  options: { isWholeLine: !0, className: "monaco-neovim-visual-line" }
2712
2712
  });
2713
- } else if (!c)
2714
- for (const g of t) {
2715
- const I = g.getStartPosition(), h = g.getEndPosition();
2716
- a.push({
2717
- range: y.Range.fromPositions(I, h),
2713
+ } else if (!l)
2714
+ for (const u of t) {
2715
+ const d = u.getStartPosition(), f = u.getEndPosition();
2716
+ c.push({
2717
+ range: b.Range.fromPositions(d, f),
2718
2718
  options: { className: "monaco-neovim-visual-inline" }
2719
2719
  });
2720
2720
  }
2721
- c ? (this.visualVirtualRawRanges = Array.isArray(i) ? i : [], this.visualVirtualActive = !0, this.renderVisualVirtualOverlay()) : this.clearVisualVirtualOverlay();
2721
+ l ? (this.visualVirtualRawRanges = Array.isArray(i) ? i : [], this.visualVirtualActive = !0, this.renderVisualVirtualOverlay()) : this.clearVisualVirtualOverlay();
2722
2722
  try {
2723
- this.visualDecorationIds = this.editor.deltaDecorations(this.visualDecorationIds, a), this.visualSelectionActive = a.length > 0 || c;
2723
+ this.visualDecorationIds = this.editor.deltaDecorations(this.visualDecorationIds, c), this.visualSelectionActive = c.length > 0 || l;
2724
2724
  } catch {
2725
2725
  this.visualDecorationIds = [], this.visualSelectionActive = !1;
2726
2726
  }
2727
2727
  if (this.visualSelectionActive && !this.compositionActive) {
2728
- const g = this.editor.getPosition();
2729
- if (g)
2728
+ const u = this.editor.getPosition();
2729
+ if (u)
2730
2730
  try {
2731
- this.suppressCursorSync = !0, this.editor.setSelection(new y.Selection(g.lineNumber, g.column, g.lineNumber, g.column));
2731
+ this.suppressCursorSync = !0, this.editor.setSelection(new b.Selection(u.lineNumber, u.column, u.lineNumber, u.column));
2732
2732
  } catch {
2733
2733
  } finally {
2734
2734
  this.suppressCursorSync = !1;
@@ -2736,45 +2736,45 @@ ${u}`), i < n && s.length > 0 && (u += `
2736
2736
  }
2737
2737
  }
2738
2738
  applyNvimMode(t, e) {
2739
- const i = typeof t == "string" ? t : "", s = e == null ? this.nvimBlocking : !!e, n = !!(i && i !== this.lastMode), o = s !== this.nvimBlocking;
2740
- if (!n && !o) return;
2741
- const c = this.lastMode;
2742
- n && (this.lastMode = i, S(i) && (this.ignoreNextInputEvent = !1), this.setMonacoHighlightsSuppressed(H(i))), this.nvimBlocking = s;
2743
- const a = Y(this.lastMode) && !this.recordingRegister && !this.nvimBlocking;
2744
- if (a !== this.delegateInsertToMonaco) {
2745
- this.delegateInsertToMonaco = a, this.setEditorReadOnly(!a);
2746
- const g = this.ensureActiveState();
2747
- if (a) {
2739
+ const i = typeof t == "string" ? t : "", s = e == null ? this.nvimBlocking : !!e, n = !!(i && i !== this.lastMode), r = s !== this.nvimBlocking;
2740
+ if (!n && !r) return;
2741
+ const l = this.lastMode;
2742
+ n && (this.lastMode = i, A(i) && (this.ignoreNextInputEvent = !1), this.setMonacoHighlightsSuppressed(k(i))), this.nvimBlocking = s;
2743
+ const c = P(this.lastMode) && !this.recordingRegister && !this.nvimBlocking;
2744
+ if (c !== this.delegateInsertToMonaco) {
2745
+ this.delegateInsertToMonaco = c, this.setEditorReadOnly(!c);
2746
+ const u = this.ensureActiveState();
2747
+ if (c) {
2748
2748
  this.setPreedit(null), this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !0;
2749
2749
  {
2750
- const I = this.recentNormalKeys, h = I.slice(-1), u = I.slice(-2), m = /* @__PURE__ */ new Set(["i", "a", "I", "A", "o", "O", "s", "S", "C", "R"]);
2751
- if (u === "cc")
2750
+ const d = this.recentNormalKeys, f = d.slice(-1), p = d.slice(-2), m = /* @__PURE__ */ new Set(["i", "a", "I", "A", "o", "O", "s", "S", "C", "R"]);
2751
+ if (p === "cc")
2752
2752
  this.lastDelegatedInsertPrefix = "cc";
2753
- else if (m.has(h))
2754
- this.lastDelegatedInsertPrefix = h;
2753
+ else if (m.has(f))
2754
+ this.lastDelegatedInsertPrefix = f;
2755
2755
  else {
2756
- const b = I.lastIndexOf("c");
2757
- if (b >= 0) {
2758
- let f = b;
2759
- for (; f > 0 && /\d/.test(I[f - 1] ?? ""); ) f -= 1;
2760
- this.lastDelegatedInsertPrefix = I.slice(f);
2756
+ const v = d.lastIndexOf("c");
2757
+ if (v >= 0) {
2758
+ let _ = v;
2759
+ for (; _ > 0 && /\d/.test(d[_ - 1] ?? ""); ) _ -= 1;
2760
+ this.lastDelegatedInsertPrefix = d.slice(_);
2761
2761
  } else
2762
2762
  this.lastDelegatedInsertPrefix = null;
2763
2763
  }
2764
2764
  }
2765
- g && (g.shadowLines = this.editor.getModel()?.getLinesContent() ?? null, g.pendingBufEdits = [], g.pendingFullSync = !1, g.pendingCursorSync = !1);
2765
+ u && (u.shadowLines = this.editor.getModel()?.getLinesContent() ?? null, u.pendingBufEdits = [], u.pendingFullSync = !1, u.pendingCursorSync = !1);
2766
2766
  } else
2767
- g && ((g.pendingBufEdits.length || g.pendingCursorSync || g.pendingFullSync) && this.flushPendingMonacoSync(), g.shadowLines = null, g.pendingBufEdits = [], g.pendingFullSync = !1, g.pendingCursorSync = !1), this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1;
2767
+ u && ((u.pendingBufEdits.length || u.pendingCursorSync || u.pendingFullSync) && this.flushPendingMonacoSync(), u.shadowLines = null, u.pendingBufEdits = [], u.pendingFullSync = !1, u.pendingCursorSync = !1), this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1;
2768
2768
  }
2769
- if (this.exitingInsertMode && !Y(this.lastMode)) {
2769
+ if (this.exitingInsertMode && !P(this.lastMode)) {
2770
2770
  this.exitInsertTimer && (clearTimeout(this.exitInsertTimer), this.exitInsertTimer = null), this.exitingInsertMode = !1;
2771
- const g = this.pendingKeysAfterExit;
2772
- this.pendingKeysAfterExit = "", g && this.sendInput(g);
2771
+ const u = this.pendingKeysAfterExit;
2772
+ this.pendingKeysAfterExit = "", u && this.sendInput(u);
2773
2773
  }
2774
- if (n && (this.applyCursorStyle(i), this.opts.onModeChange && this.opts.onModeChange(i), this.updateVisualSelection(i)), n && H(c) && !H(i))
2774
+ if (n && (this.applyCursorStyle(i), this.opts.onModeChange && this.opts.onModeChange(i), this.updateVisualSelection(i)), n && k(l) && !k(i))
2775
2775
  try {
2776
- const g = this.editor.getPosition() ?? this.lastCursorPos;
2777
- g && !this.compositionActive && (this.suppressCursorSync = !0, this.editor.setSelection(new y.Selection(g.lineNumber, g.column, g.lineNumber, g.column)), this.suppressCursorSync = !1);
2776
+ const u = this.editor.getPosition() ?? this.lastCursorPos;
2777
+ u && !this.compositionActive && (this.suppressCursorSync = !0, this.editor.setSelection(new b.Selection(u.lineNumber, u.column, u.lineNumber, u.column)), this.suppressCursorSync = !1);
2778
2778
  } catch {
2779
2779
  this.suppressCursorSync = !1;
2780
2780
  }
@@ -2815,7 +2815,7 @@ ${u}`), i < n && s.length > 0 && (u += `
2815
2815
  try {
2816
2816
  const e = this.editor.getModel(), i = this.editor.getPosition();
2817
2817
  if (e && i) {
2818
- const s = e.getLineContent(i.lineNumber) ?? "", n = W(s, Math.max(0, i.column - 1));
2818
+ const s = e.getLineContent(i.lineNumber) ?? "", n = T(s, Math.max(0, i.column - 1));
2819
2819
  this.ignoreInsertExitCursor = { line: i.lineNumber, col0: n, untilMs: this.nowMs() + 400 }, this.debugLog(`exitDelegatedInsertMode: sync cursor before exit: line=${i.lineNumber} col=${i.column} (byteCol0=${n})`), await this.rpcCall("nvim_win_set_cursor", [0, [i.lineNumber, n]]);
2820
2820
  }
2821
2821
  } catch {
@@ -2927,7 +2927,7 @@ vim.opt.ei = ei
2927
2927
  }
2928
2928
  return;
2929
2929
  }
2930
- if (S(this.lastMode) && !this.compositionActive && !e.isComposing && !e.getModifierState?.("AltGraph") && !e.ctrlKey && !e.metaKey && typeof e.key == "string" && e.key.length === 1) {
2930
+ if (A(this.lastMode) && !this.compositionActive && !e.isComposing && !e.getModifierState?.("AltGraph") && !e.ctrlKey && !e.metaKey && typeof e.key == "string" && e.key.length === 1) {
2931
2931
  const s = /^[\x20-\x7E]$/.test(e.key);
2932
2932
  if (!!!(e.altKey && s))
2933
2933
  return this.opts.shouldHandleKey(e), void 0;
@@ -2938,7 +2938,7 @@ vim.opt.ei = ei
2938
2938
  this.compositionActive = !0;
2939
2939
  return;
2940
2940
  }
2941
- if (this.compositionActive || e.isComposing || !this.opts.shouldHandleKey(e) || this.hasExplicitModAllowlist(!1) && !this.shouldForwardModifiedKeys(e, !1) || Y(this.lastMode) && !this.delegateInsertToMonaco && !this.exitingInsertMode && !e.ctrlKey && !e.metaKey && !e.altKey && (e.key === "Dead" || typeof e.key == "string" && e.key.length === 1))
2941
+ if (this.compositionActive || e.isComposing || !this.opts.shouldHandleKey(e) || this.hasExplicitModAllowlist(!1) && !this.shouldForwardModifiedKeys(e, !1) || P(this.lastMode) && !this.delegateInsertToMonaco && !this.exitingInsertMode && !e.ctrlKey && !e.metaKey && !e.altKey && (e.key === "Dead" || typeof e.key == "string" && e.key.length === 1))
2942
2942
  return;
2943
2943
  const i = this.opts.translateKey(e);
2944
2944
  if (i) {
@@ -2950,19 +2950,19 @@ vim.opt.ei = ei
2950
2950
  }
2951
2951
  this.lastDelegatedDotRepeat && (/* @__PURE__ */ new Set(["c", "d", "y", "p", "x", "s", "r", "~", "J", ":"])).has(i) && (this.lastDelegatedDotRepeat = null);
2952
2952
  }
2953
- !Y(this.lastMode) && i.length === 1 && !i.startsWith("<") && (this.recentNormalKeys = (this.recentNormalKeys + i).slice(-16)), this.sendInput(i);
2953
+ !P(this.lastMode) && i.length === 1 && !i.startsWith("<") && (this.recentNormalKeys = (this.recentNormalKeys + i).slice(-16)), this.sendInput(i);
2954
2954
  }
2955
2955
  }
2956
2956
  handleMouse(t) {
2957
2957
  if (this.delegateInsertToMonaco || !this.bufHandle || !t.target?.position) return;
2958
- const { lineNumber: e, column: i } = t.target.position, s = this.editor.getModel(), n = Math.max(0, i - 1), o = s ? s.getLineContent(e) ?? "" : "", c = s ? W(o, n) : n;
2959
- this.sendNotify("nvim_win_set_cursor", [0, [e, c]]);
2958
+ const { lineNumber: e, column: i } = t.target.position, s = this.editor.getModel(), n = Math.max(0, i - 1), r = s ? s.getLineContent(e) ?? "" : "", l = s ? T(r, n) : n;
2959
+ this.sendNotify("nvim_win_set_cursor", [0, [e, l]]);
2960
2960
  }
2961
2961
  async sendNvimMouse(t, e, i, s) {
2962
2962
  if (!this.session || !this.session.isRunning() || !this.bufHandle) return;
2963
2963
  const n = this.editor.getModel();
2964
2964
  if (!n) return;
2965
- const o = Math.max(1, Number(s.lineNumber) || 1), c = Math.max(0, Number(s.column) - 1 || 0), a = n.getLineContent(o) ?? "", g = W(a, c), I = String(i ?? ""), h = String(t ?? "left"), u = String(e ?? "press"), m = `
2965
+ const r = Math.max(1, Number(s.lineNumber) || 1), l = Math.max(0, Number(s.column) - 1 || 0), c = n.getLineContent(r) ?? "", u = T(c, l), d = String(i ?? ""), f = String(t ?? "left"), p = String(e ?? "press"), m = `
2966
2966
  local api, fn = vim.api, vim.fn
2967
2967
  local button, action, mods, lnum, col0 = ...
2968
2968
  pcall(api.nvim_win_set_cursor, 0, { lnum, col0 })
@@ -2971,7 +2971,7 @@ local col = (fn.wincol() or 1) - 1
2971
2971
  pcall(api.nvim_input_mouse, button, action, mods, 0, row, col)
2972
2972
  `;
2973
2973
  try {
2974
- await this.execLua(m, [h, u, I, o, g]);
2974
+ await this.execLua(m, [f, p, d, r, u]);
2975
2975
  } catch {
2976
2976
  }
2977
2977
  }
@@ -2980,10 +2980,10 @@ pcall(api.nvim_input_mouse, button, action, mods, 0, row, col)
2980
2980
  const e = t.selection;
2981
2981
  if (e && t.source === "mouse") {
2982
2982
  if (e.isEmpty()) {
2983
- H(this.lastMode) && this.sendInput("<Esc>");
2983
+ k(this.lastMode) && this.sendInput("<Esc>");
2984
2984
  return;
2985
2985
  }
2986
- this.pendingSelection = new y.Selection(
2986
+ this.pendingSelection = new b.Selection(
2987
2987
  e.selectionStartLineNumber,
2988
2988
  e.selectionStartColumn,
2989
2989
  e.positionLineNumber,
@@ -3000,7 +3000,7 @@ pcall(api.nvim_input_mouse, button, action, mods, 0, row, col)
3000
3000
  if (this.delegateInsertToMonaco || !this.session || !this.session.isRunning() || !this.bufHandle) return;
3001
3001
  const e = this.editor.getModel();
3002
3002
  if (!e) return;
3003
- const i = t.selectionStartLineNumber, s = Math.max(0, t.selectionStartColumn - 1), n = t.positionLineNumber, o = Math.max(0, t.positionColumn - 1), c = e.getLineContent(i) ?? "", a = e.getLineContent(n) ?? "", g = W(c, s), I = W(a, o);
3003
+ const i = t.selectionStartLineNumber, s = Math.max(0, t.selectionStartColumn - 1), n = t.positionLineNumber, r = Math.max(0, t.positionColumn - 1), l = e.getLineContent(i) ?? "", c = e.getLineContent(n) ?? "", u = T(l, s), d = T(c, r);
3004
3004
  await this.execLua(`
3005
3005
  local api = vim.api
3006
3006
  local fn = vim.fn
@@ -3013,7 +3013,7 @@ end
3013
3013
  api.nvim_win_set_cursor(0, { a_line, a_col0 })
3014
3014
  api.nvim_feedkeys("v", "n", false)
3015
3015
  api.nvim_win_set_cursor(0, { b_line, b_col0 })
3016
- `, [i, g, n, I]);
3016
+ `, [i, u, n, d]);
3017
3017
  }
3018
3018
  sendInput(t) {
3019
3019
  this.sendNotify("nvim_input", [t]);
@@ -3086,20 +3086,20 @@ api.nvim_win_set_cursor(0, { b_line, b_col0 })
3086
3086
  i.pendingFullSync = !0, i.pendingCursorSync = !0, i.shadowLines = e.getLinesContent(), this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1, this.scheduleFlushPendingMonacoSync();
3087
3087
  return;
3088
3088
  }
3089
- const s = t.changes[0], n = s.range, o = n.startLineNumber - 1, c = n.endLineNumber - 1;
3090
- if (o < 0 || c < 0) return;
3091
- if (i.shadowLines[o] == null || i.shadowLines[c] == null) {
3089
+ const s = t.changes[0], n = s.range, r = n.startLineNumber - 1, l = n.endLineNumber - 1;
3090
+ if (r < 0 || l < 0) return;
3091
+ if (i.shadowLines[r] == null || i.shadowLines[l] == null) {
3092
3092
  i.pendingFullSync = !0, i.pendingCursorSync = !0, i.shadowLines = e.getLinesContent(), this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1, this.scheduleFlushPendingMonacoSync();
3093
3093
  return;
3094
3094
  }
3095
- const a = i.shadowLines[o] ?? "", g = i.shadowLines[c] ?? "", I = Math.max(0, n.startColumn - 1), h = Math.max(0, n.endColumn - 1), u = W(a, I), m = W(g, h), b = String(s.text ?? ""), f = b.length ? b.split(/\r?\n/) : [];
3095
+ const c = i.shadowLines[r] ?? "", u = i.shadowLines[l] ?? "", d = Math.max(0, n.startColumn - 1), f = Math.max(0, n.endColumn - 1), p = T(c, d), m = T(u, f), v = String(s.text ?? ""), _ = v.length ? v.split(/\r?\n/) : [];
3096
3096
  try {
3097
- const G = Math.max(0, Number(s.rangeLength ?? 0) || 0);
3098
- o === c && !b.includes(`
3099
- `) ? (G > 0 && (this.dotRepeatBackspaces += G, this.dotRepeatKeys += "<BS>".repeat(G)), b && (this.dotRepeatKeys += _(b, !0)), this.dotRepeatKeys.length > 2e4 && (this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1)) : (this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1);
3097
+ const w = Math.max(0, Number(s.rangeLength ?? 0) || 0);
3098
+ r === l && !v.includes(`
3099
+ `) ? (w > 0 && (this.dotRepeatBackspaces += w, this.dotRepeatKeys += "<BS>".repeat(w)), v && (this.dotRepeatKeys += z(v, !0)), this.dotRepeatKeys.length > 2e4 && (this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1)) : (this.dotRepeatKeys = "", this.dotRepeatBackspaces = 0, this.delegatedInsertReplayPossible = !1);
3100
3100
  } catch {
3101
3101
  }
3102
- i.pendingBufEdits.push({ startRow: o, startColByte: u, endRow: c, endColByte: m, lines: f }), Ne(i.shadowLines, o, I, c, h, b), i.pendingCursorSync = !0, this.scheduleFlushPendingMonacoSync();
3102
+ i.pendingBufEdits.push({ startRow: r, startColByte: p, endRow: l, endColByte: m, lines: _ }), Re(i.shadowLines, r, d, l, f, v), i.pendingCursorSync = !0, this.scheduleFlushPendingMonacoSync();
3103
3103
  }
3104
3104
  scheduleCursorSyncToNvim() {
3105
3105
  if (!this.delegateInsertToMonaco || this.exitingInsertMode) return;
@@ -3134,8 +3134,8 @@ api.nvim_win_set_cursor(0, { b_line, b_col0 })
3134
3134
  if (!this.session || !this.session.isRunning() || !this.bufHandle || !t && !this.delegateInsertToMonaco) return;
3135
3135
  const e = this.editor.getModel(), i = this.editor.getPosition();
3136
3136
  if (!e || !i) return;
3137
- const s = i.lineNumber, n = e.getLineContent(s) ?? "", o = W(n, Math.max(0, i.column - 1));
3138
- this.sendNotify("nvim_win_set_cursor", [0, [s, o]]);
3137
+ const s = i.lineNumber, n = e.getLineContent(s) ?? "", r = T(n, Math.max(0, i.column - 1));
3138
+ this.sendNotify("nvim_win_set_cursor", [0, [s, r]]);
3139
3139
  }
3140
3140
  scheduleVisualSelectionRefresh() {
3141
3141
  this.visualSelectionRefreshTimer || (this.visualSelectionRefreshTimer = window.setTimeout(() => {
@@ -3148,7 +3148,7 @@ api.nvim_win_set_cursor(0, { b_line, b_col0 })
3148
3148
  const t = await this.rpcCall("nvim_get_api_info", []), e = Array.isArray(t) ? Number(t[0]) : NaN;
3149
3149
  if (!Number.isFinite(e) || e <= 0) return;
3150
3150
  this.nvimChannelId = e;
3151
- const i = this.opts.wrappedLineMotions ? "true" : "false", s = this.opts.scrollMotions ? "true" : "false", n = this.opts.syncScrolloff && this.opts.scrolloff == null ? "true" : "false", o = this.opts.hostCommands ? "true" : "false", a = `
3151
+ const i = this.opts.wrappedLineMotions ? "true" : "false", s = this.opts.scrollMotions ? "true" : "false", n = this.opts.syncScrolloff && this.opts.scrolloff == null ? "true" : "false", r = this.opts.hostCommands ? "true" : "false", c = `
3152
3152
  local chan = ...
3153
3153
  local api = vim.api
3154
3154
  vim.g.monaco_neovim_wasm_chan = chan
@@ -3207,7 +3207,7 @@ end
3207
3207
  if ${s} then
3208
3208
  pcall(vim.cmd, "silent! source $HOME/.config/nvim/monaco-neovim-wasm/scrolling.vim")
3209
3209
  end
3210
- if ${o} then
3210
+ if ${r} then
3211
3211
  pcall(vim.cmd, "silent! source $HOME/.config/nvim/monaco-neovim-wasm/host-commands.vim")
3212
3212
  end
3213
3213
 
@@ -3263,7 +3263,7 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3263
3263
  filetype = (vim.bo[api.nvim_get_current_buf()] and vim.bo[api.nvim_get_current_buf()].filetype) or "",
3264
3264
  })
3265
3265
  `;
3266
- await this.execLua(a, [e]), this.hostAutocmdInstalled = !0;
3266
+ await this.execLua(c, [e]), this.hostAutocmdInstalled = !0;
3267
3267
  } catch {
3268
3268
  }
3269
3269
  }
@@ -3294,42 +3294,42 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3294
3294
  return;
3295
3295
  }
3296
3296
  try {
3297
- const o = await s.readFile(n);
3298
- if (o == null) return;
3299
- const c = o instanceof Uint8Array ? new TextDecoder().decode(o) : String(o);
3300
- await this.openText({ path: n, text: c }), this.opts.status(`opened: ${n}`);
3301
- } catch (o) {
3302
- this.opts.status(`edit failed: ${o?.message ?? o}`, !0);
3297
+ const r = await s.readFile(n);
3298
+ if (r == null) return;
3299
+ const l = r instanceof Uint8Array ? new TextDecoder().decode(r) : String(r);
3300
+ await this.openText({ path: n, text: l }), this.opts.status(`opened: ${n}`);
3301
+ } catch (r) {
3302
+ this.opts.status(`edit failed: ${r?.message ?? r}`, !0);
3303
3303
  }
3304
3304
  return;
3305
3305
  }
3306
3306
  if (e === "write" || e === "wq") {
3307
- const n = this.editor.getModel(), o = n ? n.getValue() : "";
3308
- let c = typeof i.path == "string" ? String(i.path) : "";
3309
- if (!c)
3307
+ const n = this.editor.getModel(), r = n ? n.getValue() : "";
3308
+ let l = typeof i.path == "string" ? String(i.path) : "";
3309
+ if (!l)
3310
3310
  try {
3311
- const a = await this.rpcCall("nvim_buf_get_name", [0]);
3312
- typeof a == "string" && (c = a);
3311
+ const c = await this.rpcCall("nvim_buf_get_name", [0]);
3312
+ typeof c == "string" && (l = c);
3313
3313
  } catch {
3314
3314
  }
3315
- if (c || (c = this.opts.seedName), !s.writeFile) {
3315
+ if (l || (l = this.opts.seedName), !s.writeFile) {
3316
3316
  this.opts.status("write: fileSystem.writeFile not set", !0);
3317
3317
  return;
3318
3318
  }
3319
3319
  try {
3320
- await s.writeFile(c, o);
3320
+ await s.writeFile(l, r);
3321
3321
  try {
3322
- await this.rpcCall("nvim_buf_set_name", [0, c]);
3322
+ await this.rpcCall("nvim_buf_set_name", [0, l]);
3323
3323
  } catch {
3324
3324
  }
3325
3325
  try {
3326
3326
  await this.rpcCall("nvim_buf_set_option", [0, "modified", !1]);
3327
3327
  } catch {
3328
3328
  }
3329
- const a = this.getActiveState();
3330
- a && (a.name && a.name !== c && this.buffersByName.delete(a.name), a.name = c, this.buffersByName.set(c, a.id)), this.opts.status(`written: ${c}`), e === "wq" && this.opts.status("wq requested (provide onHostCommand to close the editor)");
3331
- } catch (a) {
3332
- this.opts.status(`write failed: ${a?.message ?? a}`, !0);
3329
+ const c = this.getActiveState();
3330
+ c && (c.name && c.name !== l && this.buffersByName.delete(c.name), c.name = l, this.buffersByName.set(l, c.id)), this.opts.status(`written: ${l}`), e === "wq" && this.opts.status("wq requested (provide onHostCommand to close the editor)");
3331
+ } catch (c) {
3332
+ this.opts.status(`write failed: ${c?.message ?? c}`, !0);
3333
3333
  }
3334
3334
  return;
3335
3335
  }
@@ -3350,19 +3350,19 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3350
3350
  await this.rpcCall("nvim_buf_attach", [e, !1, {}]);
3351
3351
  } catch {
3352
3352
  }
3353
- let c = [""];
3353
+ let l = [""];
3354
3354
  try {
3355
- const u = await this.rpcCall("nvim_buf_get_lines", [e, 0, -1, !1]);
3356
- Array.isArray(u) && (c = u.map((m) => String(m ?? "")));
3355
+ const p = await this.rpcCall("nvim_buf_get_lines", [e, 0, -1, !1]);
3356
+ Array.isArray(p) && (l = p.map((m) => String(m ?? "")));
3357
3357
  } catch {
3358
3358
  }
3359
- const a = y.Uri.from({ scheme: "nvim", authority: "buf", path: `/${e}` }), g = c.join(`
3360
- `), I = s && y.languages.getLanguages().some((u) => u.id === s), h = y.editor.createModel(g, I ? s : void 0, a);
3359
+ const c = b.Uri.from({ scheme: "nvim", authority: "buf", path: `/${e}` }), u = l.join(`
3360
+ `), d = s && b.languages.getLanguages().some((p) => p.id === s), f = b.editor.createModel(u, d ? s : void 0, c);
3361
3361
  n = {
3362
3362
  id: e,
3363
3363
  name: i || "",
3364
3364
  filetype: s || "",
3365
- model: h,
3365
+ model: f,
3366
3366
  createdModel: !0,
3367
3367
  shadowLines: null,
3368
3368
  pendingBufEdits: [],
@@ -3405,8 +3405,8 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3405
3405
  let n = this.buffersByName.get(s) ?? null;
3406
3406
  if (!n)
3407
3407
  try {
3408
- const o = await this.rpcCall("nvim_create_buf", [!0, !1]);
3409
- n = F(o) ?? Number(o);
3408
+ const r = await this.rpcCall("nvim_create_buf", [!0, !1]);
3409
+ n = B(r) ?? Number(r);
3410
3410
  } catch {
3411
3411
  n = null;
3412
3412
  }
@@ -3441,8 +3441,8 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3441
3441
  doClipboardPaste(t) {
3442
3442
  const e = (n) => {
3443
3443
  this.lastClipboardText = n == null ? "" : String(n);
3444
- const o = (n || "").split(/\r?\n/);
3445
- this.sendRpcResponse(t, null, [o, "v"]);
3444
+ const r = (n || "").split(/\r?\n/);
3445
+ this.sendRpcResponse(t, null, [r, "v"]);
3446
3446
  }, i = () => {
3447
3447
  try {
3448
3448
  return typeof navigator < "u" && navigator?.webdriver || typeof window > "u" || typeof window.prompt != "function" ? null : window.prompt("Paste text");
@@ -3472,10 +3472,10 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3472
3472
  });
3473
3473
  }
3474
3474
  updateCursor(t, e) {
3475
- const i = this.editor.getModel(), s = Math.max(1, Number(t) || 1), n = Math.max(1, Number(e) || 1), o = i ? i.validatePosition(new y.Position(s, n)) : new y.Position(s, n);
3476
- if (this.debugLog(`updateCursor: line=${o.lineNumber} col=${o.column} (from line=${s} col=${n}) visual=${this.visualSelectionActive} mode=${JSON.stringify(this.lastMode)}`), this.lastCursorPos = o, this.compositionActive) return;
3477
- const c = this.editor.getPosition();
3478
- c && c.lineNumber === o.lineNumber && c.column === o.column || (this.suppressCursorSync = !0, this.editor.setPosition(this.lastCursorPos), this.visualSelectionActive && this.editor.setSelection(new y.Selection(o.lineNumber, o.column, o.lineNumber, o.column)), this.applyScrolloff(this.lastCursorPos) || this.editor.revealPositionInCenterIfOutsideViewport(this.lastCursorPos), this.suppressCursorSync = !1), this.requestSearchHighlightRefresh();
3475
+ const i = this.editor.getModel(), s = Math.max(1, Number(t) || 1), n = Math.max(1, Number(e) || 1), r = i ? i.validatePosition(new b.Position(s, n)) : new b.Position(s, n);
3476
+ if (this.debugLog(`updateCursor: line=${r.lineNumber} col=${r.column} (from line=${s} col=${n}) visual=${this.visualSelectionActive} mode=${JSON.stringify(this.lastMode)}`), this.lastCursorPos = r, this.compositionActive) return;
3477
+ const l = this.editor.getPosition();
3478
+ l && l.lineNumber === r.lineNumber && l.column === r.column || (this.suppressCursorSync = !0, this.editor.setPosition(this.lastCursorPos), this.visualSelectionActive && this.editor.setSelection(new b.Selection(r.lineNumber, r.column, r.lineNumber, r.column)), this.applyScrolloff(this.lastCursorPos) || this.editor.revealPositionInCenterIfOutsideViewport(this.lastCursorPos), this.suppressCursorSync = !1), this.requestSearchHighlightRefresh();
3479
3479
  }
3480
3480
  requestSearchHighlightRefresh() {
3481
3481
  if (this.opts.searchHighlights) {
@@ -3508,12 +3508,12 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3508
3508
  try {
3509
3509
  const e = await this.rpcCall("nvim_win_get_cursor", [0]);
3510
3510
  if (Array.isArray(e) && e.length >= 2) {
3511
- const i = Number(e[0]), s = Number(e[1]), n = P(this.editor, i, s), o = new y.Position(n.line, n.col), c = typeof performance < "u" && performance.now ? performance.now() : Date.now();
3512
- if (this.optimisticCursorPos && this.optimisticCursorUntil > c) {
3513
- const a = this.optimisticCursorPrevPos;
3514
- a && o.lineNumber === a.lineNumber && o.column === a.column || o.lineNumber < this.optimisticCursorPos.lineNumber || o.lineNumber === this.optimisticCursorPos.lineNumber && o.column < this.optimisticCursorPos.column || (this.optimisticCursorPos = null, this.optimisticCursorPrevPos = null, this.optimisticCursorUntil = 0, this.updateCursor(o.lineNumber, o.column));
3511
+ const i = Number(e[0]), s = Number(e[1]), n = Q(this.editor, i, s), r = new b.Position(n.line, n.col), l = typeof performance < "u" && performance.now ? performance.now() : Date.now();
3512
+ if (this.optimisticCursorPos && this.optimisticCursorUntil > l) {
3513
+ const c = this.optimisticCursorPrevPos;
3514
+ c && r.lineNumber === c.lineNumber && r.column === c.column || r.lineNumber < this.optimisticCursorPos.lineNumber || r.lineNumber === this.optimisticCursorPos.lineNumber && r.column < this.optimisticCursorPos.column || (this.optimisticCursorPos = null, this.optimisticCursorPrevPos = null, this.optimisticCursorUntil = 0, this.updateCursor(r.lineNumber, r.column));
3515
3515
  } else
3516
- this.optimisticCursorPos = null, this.optimisticCursorPrevPos = null, this.optimisticCursorUntil = 0, this.updateCursor(o.lineNumber, o.column);
3516
+ this.optimisticCursorPos = null, this.optimisticCursorPrevPos = null, this.optimisticCursorUntil = 0, this.updateCursor(r.lineNumber, r.column);
3517
3517
  }
3518
3518
  if (!this.lastMode)
3519
3519
  try {
@@ -3531,24 +3531,24 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3531
3531
  }
3532
3532
  }
3533
3533
  applyCursorStyle(t) {
3534
- const e = typeof t == "string" ? t : "", i = e.startsWith("i") || e.startsWith("R"), s = i ? "line" : "block", n = i ? "blink" : "solid", o = i ? this.initialCursorWidth || 1 : this.typicalFullWidth;
3535
- s === this.lastCursorStyle && n === this.lastCursorBlink && o === this.lastCursorWidth || (this.editor.updateOptions({ cursorStyle: s, cursorBlinking: n, cursorWidth: o }), this.lastCursorStyle = s, this.lastCursorBlink = n, this.lastCursorWidth = o);
3534
+ const e = typeof t == "string" ? t : "", i = e.startsWith("i") || e.startsWith("R"), s = i ? "line" : "block", n = i ? "blink" : "solid", r = i ? this.initialCursorWidth || 1 : this.typicalFullWidth;
3535
+ s === this.lastCursorStyle && n === this.lastCursorBlink && r === this.lastCursorWidth || (this.editor.updateOptions({ cursorStyle: s, cursorBlinking: n, cursorWidth: r }), this.lastCursorStyle = s, this.lastCursorBlink = n, this.lastCursorWidth = r);
3536
3536
  }
3537
3537
  async updateVisualSelection(t) {
3538
- const e = H(t), i = ++this.visualSelectionToken;
3538
+ const e = k(t), i = ++this.visualSelectionToken;
3539
3539
  if (!e) {
3540
3540
  this.clearVisualDecorations();
3541
3541
  return;
3542
3542
  }
3543
3543
  try {
3544
- const { selections: s, raw: n, tail: o } = await this.fetchVisualRanges();
3544
+ const { selections: s, raw: n, tail: r } = await this.fetchVisualRanges();
3545
3545
  if (i !== this.visualSelectionToken || !s.length) return;
3546
- this.applyVisualDecorations(s, t, n, o);
3546
+ this.applyVisualDecorations(s, t, n, r);
3547
3547
  } catch {
3548
3548
  }
3549
3549
  }
3550
3550
  async fetchVisualRanges() {
3551
- const t = await this.execLua(be, []);
3551
+ const t = await this.execLua(ve, []);
3552
3552
  let e = [], i = "";
3553
3553
  if (Array.isArray(t))
3554
3554
  e = t;
@@ -3556,12 +3556,12 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3556
3556
  const n = t;
3557
3557
  i = typeof n.tail == "string" ? n.tail : "", e = Array.isArray(n.ranges) ? n.ranges : [];
3558
3558
  }
3559
- return { selections: e.map(Ae(this.editor)).filter((n) => !!n), raw: e, tail: i };
3559
+ return { selections: e.map(xe(this.editor)).filter((n) => !!n), raw: e, tail: i };
3560
3560
  }
3561
3561
  async syncVisualSelectionColor() {
3562
3562
  try {
3563
- const e = await this.fetchVisualBg() || "#3e4451", i = L(e, 0.45), s = L(e, 0.3);
3564
- y.editor.defineTheme(this.opts.visualThemeName, {
3563
+ const e = await this.fetchVisualBg() || "#3e4451", i = J(e, 0.45), s = J(e, 0.3);
3564
+ b.editor.defineTheme(this.opts.visualThemeName, {
3565
3565
  base: "vs-dark",
3566
3566
  inherit: !0,
3567
3567
  rules: [],
@@ -3574,7 +3574,7 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3574
3574
  }
3575
3575
  }
3576
3576
  setMonacoHighlightsSuppressed(t) {
3577
- const e = y.editor.EditorOption, i = !!t;
3577
+ const e = b.editor.EditorOption, i = !!t;
3578
3578
  if (i !== this.monacoHighlightsSuppressed) {
3579
3579
  if (i) {
3580
3580
  try {
@@ -3604,19 +3604,19 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3604
3604
  }
3605
3605
  async fetchVisualBg() {
3606
3606
  try {
3607
- const t = await this.rpcCall("nvim_get_hl", [0, { name: "Visual", link: !1 }]), e = Q(t);
3607
+ const t = await this.rpcCall("nvim_get_hl", [0, { name: "Visual", link: !1 }]), e = X(t);
3608
3608
  if (e) return e;
3609
3609
  } catch {
3610
3610
  }
3611
3611
  try {
3612
- const t = await this.rpcCall("nvim_get_hl_by_name", ["Visual", !0]), e = Q(t);
3612
+ const t = await this.rpcCall("nvim_get_hl_by_name", ["Visual", !0]), e = X(t);
3613
3613
  if (e) return e;
3614
3614
  } catch {
3615
3615
  }
3616
3616
  return null;
3617
3617
  }
3618
3618
  async seedBuffer(t, e) {
3619
- const i = F(t);
3619
+ const i = B(t);
3620
3620
  if (!i || i <= 0) return null;
3621
3621
  const s = e ?? this.opts.seedLines;
3622
3622
  if (!s || !s.length) return null;
@@ -3627,105 +3627,105 @@ vim.rpcnotify(chan, "monaco_buf_enter", {
3627
3627
  }
3628
3628
  }
3629
3629
  }
3630
- function Se(l, t = {}) {
3631
- return new fe(l, t);
3630
+ function Ae(o, t = {}) {
3631
+ return new _e(o, t);
3632
3632
  }
3633
- function k(l, t, e) {
3634
- return Math.min(Math.max(l, t), e);
3633
+ function F(o, t, e) {
3634
+ return Math.min(Math.max(o, t), e);
3635
3635
  }
3636
- function E(l) {
3636
+ function W(o) {
3637
3637
  try {
3638
- return new TextEncoder().encode(String(l ?? "")).length;
3638
+ return new TextEncoder().encode(String(o ?? "")).length;
3639
3639
  } catch {
3640
- return String(l ?? "").length;
3640
+ return String(o ?? "").length;
3641
3641
  }
3642
3642
  }
3643
- function P(l, t, e) {
3644
- const i = Math.max(1, Number(t) || 1), s = Math.max(1, (Number(e) || 0) + 1), n = l.getModel();
3643
+ function Q(o, t, e) {
3644
+ const i = Math.max(1, Number(t) || 1), s = Math.max(1, (Number(e) || 0) + 1), n = o.getModel();
3645
3645
  if (!n)
3646
3646
  return { line: i, col: s };
3647
- const o = n.getLineCount(), c = k(i, 1, o), a = n.getLineContent(c) ?? "", g = n.getLineMaxColumn(c), I = Math.max(0, Number(e) || 0), h = K(a, I), u = k(h + 1, 1, g);
3648
- return { line: c, col: u };
3647
+ const r = n.getLineCount(), l = F(i, 1, r), c = n.getLineContent(l) ?? "", u = n.getLineMaxColumn(l), d = Math.max(0, Number(e) || 0), f = L(c, d), p = F(f + 1, 1, u);
3648
+ return { line: l, col: p };
3649
3649
  }
3650
- function _(l, t = !0) {
3651
- const e = String(l ?? "");
3650
+ function z(o, t = !0) {
3651
+ const e = String(o ?? "");
3652
3652
  if (!e) return "";
3653
3653
  const i = e.replace(/\r\n/g, `
3654
3654
  `).replace(/\r/g, `
3655
3655
  `).replace(/</g, "<lt>");
3656
3656
  return t ? i.replace(/\n/g, "<CR>") : i;
3657
3657
  }
3658
- function Ze(l) {
3659
- const t = l.key;
3658
+ function Ce(o) {
3659
+ const t = o.key;
3660
3660
  if (!t || t === "Dead" || t === "Unidentified") return null;
3661
- const e = !!l.getModifierState?.("AltGraph"), i = l.ctrlKey && !e, s = l.altKey && !e, n = l.metaKey && !e, o = l.shiftKey, c = (h) => h === "<" ? "lt" : h, a = (h) => h === "<" ? "<lt>" : h, g = (h, u = !1) => {
3661
+ const e = !!o.getModifierState?.("AltGraph"), i = o.ctrlKey && !e, s = o.altKey && !e, n = o.metaKey && !e, r = o.shiftKey, l = (f) => f === "<" ? "lt" : f, c = (f) => f === "<" ? "<lt>" : f, u = (f, p = !1) => {
3662
3662
  const m = [];
3663
- i && m.push("C-"), u && o && m.push("S-"), s && m.push("A-"), n && m.push("D-");
3664
- const b = c(h);
3665
- return m.length ? `<${m.join("")}${b}>` : `<${b}>`;
3663
+ i && m.push("C-"), p && r && m.push("S-"), s && m.push("A-"), n && m.push("D-");
3664
+ const v = l(f);
3665
+ return m.length ? `<${m.join("")}${v}>` : `<${v}>`;
3666
3666
  };
3667
- if (typeof l.code == "string" && l.code.startsWith("Numpad") || typeof KeyboardEvent?.DOM_KEY_LOCATION_NUMPAD == "number" && l.location === KeyboardEvent.DOM_KEY_LOCATION_NUMPAD) {
3668
- switch (l.code) {
3667
+ if (typeof o.code == "string" && o.code.startsWith("Numpad") || typeof KeyboardEvent?.DOM_KEY_LOCATION_NUMPAD == "number" && o.location === KeyboardEvent.DOM_KEY_LOCATION_NUMPAD) {
3668
+ switch (o.code) {
3669
3669
  case "NumpadEnter":
3670
- return g("kEnter", !0);
3670
+ return u("kEnter", !0);
3671
3671
  case "NumpadAdd":
3672
- return g("kPlus", !0);
3672
+ return u("kPlus", !0);
3673
3673
  case "NumpadSubtract":
3674
- return g("kMinus", !0);
3674
+ return u("kMinus", !0);
3675
3675
  case "NumpadMultiply":
3676
- return g("kMultiply", !0);
3676
+ return u("kMultiply", !0);
3677
3677
  case "NumpadDivide":
3678
- return g("kDivide", !0);
3678
+ return u("kDivide", !0);
3679
3679
  case "NumpadDecimal":
3680
- return g("kPoint", !0);
3680
+ return u("kPoint", !0);
3681
3681
  }
3682
- if (/^\d$/.test(t)) return g(`k${t}`, !0);
3682
+ if (/^\d$/.test(t)) return u(`k${t}`, !0);
3683
3683
  }
3684
3684
  switch (t) {
3685
3685
  case "Backspace":
3686
- return g("BS", !0);
3686
+ return u("BS", !0);
3687
3687
  case "Enter":
3688
- return g("CR", !0);
3688
+ return u("CR", !0);
3689
3689
  case "Escape":
3690
- return g("Esc", !0);
3690
+ return u("Esc", !0);
3691
3691
  case "Tab":
3692
- return o && !i && !s && !n ? "<S-Tab>" : g("Tab", !0);
3692
+ return r && !i && !s && !n ? "<S-Tab>" : u("Tab", !0);
3693
3693
  case "ArrowUp":
3694
- return g("Up", !0);
3694
+ return u("Up", !0);
3695
3695
  case "ArrowDown":
3696
- return g("Down", !0);
3696
+ return u("Down", !0);
3697
3697
  case "ArrowLeft":
3698
- return g("Left", !0);
3698
+ return u("Left", !0);
3699
3699
  case "ArrowRight":
3700
- return g("Right", !0);
3700
+ return u("Right", !0);
3701
3701
  case "Delete":
3702
- return g("Del", !0);
3702
+ return u("Del", !0);
3703
3703
  case "Home":
3704
- return g("Home", !0);
3704
+ return u("Home", !0);
3705
3705
  case "End":
3706
- return g("End", !0);
3706
+ return u("End", !0);
3707
3707
  case "PageUp":
3708
- return g("PageUp", !0);
3708
+ return u("PageUp", !0);
3709
3709
  case "PageDown":
3710
- return g("PageDown", !0);
3710
+ return u("PageDown", !0);
3711
3711
  case "Insert":
3712
- return g("Insert", !0);
3712
+ return u("Insert", !0);
3713
3713
  }
3714
- if (/^F\d{1,2}$/.test(t)) return g(t, !0);
3714
+ if (/^F\d{1,2}$/.test(t)) return u(t, !0);
3715
3715
  if (t.length === 1) {
3716
- if (!i && !s && !n) return a(t);
3716
+ if (!i && !s && !n) return c(t);
3717
3717
  if (t === " " && i && !s && !n) return "<Nul>";
3718
- const h = /^[A-Za-z]$/.test(t) ? t.toLowerCase() : t, u = c(h);
3719
- return `<${(i ? "C-" : "") + (s ? "A-" : "") + (n ? "D-" : "")}${u}>`;
3718
+ const f = /^[A-Za-z]$/.test(t) ? t.toLowerCase() : t, p = l(f);
3719
+ return `<${(i ? "C-" : "") + (s ? "A-" : "") + (n ? "D-" : "")}${p}>`;
3720
3720
  }
3721
3721
  return null;
3722
3722
  }
3723
- function Ge(l) {
3724
- if (!l || l.length === 0) return null;
3725
- const t = l[0];
3726
- if (l.length === 1)
3723
+ function we(o) {
3724
+ if (!o || o.length === 0) return null;
3725
+ const t = o[0];
3726
+ if (o.length === 1)
3727
3727
  return t <= 127 ? t : t - 256;
3728
- const e = new DataView(l.buffer, l.byteOffset, l.byteLength);
3728
+ const e = new DataView(o.buffer, o.byteOffset, o.byteLength);
3729
3729
  switch (t) {
3730
3730
  case 204:
3731
3731
  return e.getUint8(1);
@@ -3747,78 +3747,78 @@ function Ge(l) {
3747
3747
  return t;
3748
3748
  }
3749
3749
  }
3750
- function Be(l) {
3751
- return l instanceof Uint8Array ? l : l instanceof ArrayBuffer ? new Uint8Array(l) : Array.isArray(l) ? new Uint8Array(l) : Number.isInteger(l) ? new Uint8Array([l & 255]) : l && l.type === "Buffer" && Array.isArray(l.data) ? new Uint8Array(l.data) : null;
3750
+ function Se(o) {
3751
+ return o instanceof Uint8Array ? o : o instanceof ArrayBuffer ? new Uint8Array(o) : Array.isArray(o) ? new Uint8Array(o) : Number.isInteger(o) ? new Uint8Array([o & 255]) : o && o.type === "Buffer" && Array.isArray(o.data) ? new Uint8Array(o.data) : null;
3752
3752
  }
3753
- function F(l) {
3754
- if (l && typeof l == "object" && typeof l.type == "number") {
3755
- const e = Be(l.data);
3753
+ function B(o) {
3754
+ if (o && typeof o == "object" && typeof o.type == "number") {
3755
+ const e = Se(o.data);
3756
3756
  if (e) {
3757
- const i = Ge(e);
3757
+ const i = we(e);
3758
3758
  if (i != null && i > 0) return i;
3759
3759
  }
3760
3760
  }
3761
- const t = Number(l);
3761
+ const t = Number(o);
3762
3762
  return Number.isInteger(t) && t > 0 ? t : null;
3763
3763
  }
3764
- function K(l, t) {
3764
+ function L(o, t) {
3765
3765
  let e = 0, i = 0;
3766
3766
  const s = Math.max(0, Number(t) || 0);
3767
3767
  for (; e < s; ) {
3768
- if (i >= l.length)
3768
+ if (i >= o.length)
3769
3769
  return i + (s - e);
3770
- const n = l.codePointAt(i), o = D(n ?? 0);
3771
- if (e + o > s) return i;
3772
- e += o, i += o === 4 ? 2 : 1;
3770
+ const n = o.codePointAt(i), r = q(n ?? 0);
3771
+ if (e + r > s) return i;
3772
+ e += r, i += r === 4 ? 2 : 1;
3773
3773
  }
3774
3774
  return i;
3775
3775
  }
3776
- function W(l, t) {
3776
+ function T(o, t) {
3777
3777
  const e = Math.max(0, Number(t) || 0);
3778
3778
  let i = 0, s = 0;
3779
- for (; s < e && s < l.length; ) {
3780
- const n = l.codePointAt(s), o = D(n ?? 0);
3781
- i += o, s += o === 4 ? 2 : 1;
3779
+ for (; s < e && s < o.length; ) {
3780
+ const n = o.codePointAt(s), r = q(n ?? 0);
3781
+ i += r, s += r === 4 ? 2 : 1;
3782
3782
  }
3783
3783
  return i;
3784
3784
  }
3785
- function D(l) {
3786
- return l == null ? 0 : l <= 127 ? 1 : l <= 2047 ? 2 : l >= 55296 && l <= 57343 ? 4 : l < 65535 ? 3 : 4;
3785
+ function q(o) {
3786
+ return o == null ? 0 : o <= 127 ? 1 : o <= 2047 ? 2 : o >= 55296 && o <= 57343 ? 4 : o < 65535 ? 3 : 4;
3787
3787
  }
3788
- function Ae(l) {
3788
+ function xe(o) {
3789
3789
  return (t) => {
3790
3790
  if (!t || !t.start || !t.end) return null;
3791
- const e = O(l, t.start, !1), i = O(l, t.end, !!t.inclusive);
3792
- return !e || !i ? null : new y.Selection(e.lineNumber, e.column, i.lineNumber, i.column);
3791
+ const e = j(o, t.start, !1), i = j(o, t.end, !!t.inclusive);
3792
+ return !e || !i ? null : new b.Selection(e.lineNumber, e.column, i.lineNumber, i.column);
3793
3793
  };
3794
3794
  }
3795
- function O(l, t, e) {
3795
+ function j(o, t, e) {
3796
3796
  if (!t || typeof t.line != "number" || typeof t.col != "number") return null;
3797
- const i = l.getModel(), s = k(t.line + 1, 1, i?.getLineCount() || 1 / 0);
3797
+ const i = o.getModel(), s = F(t.line + 1, 1, i?.getLineCount() || 1 / 0);
3798
3798
  if (!i) {
3799
- const I = Math.max(1, t.col + 1);
3800
- return { lineNumber: s, column: I + (e ? 1 : 0) };
3799
+ const d = Math.max(1, t.col + 1);
3800
+ return { lineNumber: s, column: d + (e ? 1 : 0) };
3801
3801
  }
3802
- const n = i.getLineContent(s) ?? "", o = Math.max(0, Number(t.col) || 0);
3803
- let c = o;
3802
+ const n = i.getLineContent(s) ?? "", r = Math.max(0, Number(t.col) || 0);
3803
+ let l = r;
3804
3804
  if (e) {
3805
- const I = K(n, o);
3806
- if (I < n.length) {
3807
- const h = n.codePointAt(I);
3808
- c = o + D(h ?? 0);
3805
+ const d = L(n, r);
3806
+ if (d < n.length) {
3807
+ const f = n.codePointAt(d);
3808
+ l = r + q(f ?? 0);
3809
3809
  }
3810
3810
  }
3811
- const a = K(n, c) + 1, g = i.getLineMaxColumn(s);
3812
- return { lineNumber: s, column: k(a, 1, g) };
3811
+ const c = L(n, l) + 1, u = i.getLineMaxColumn(s);
3812
+ return { lineNumber: s, column: F(c, 1, u) };
3813
3813
  }
3814
- function H(l) {
3815
- const t = typeof l == "string" ? l : "";
3814
+ function k(o) {
3815
+ const t = typeof o == "string" ? o : "";
3816
3816
  return t.includes("v") || t.includes("V") || t.includes("") || t.includes("s") || t.includes("S") || t.includes("");
3817
3817
  }
3818
- function Re(l) {
3819
- if (!l || !Array.isArray(l) || l.length === 0) return;
3818
+ function Me(o) {
3819
+ if (!o || !Array.isArray(o) || o.length === 0) return;
3820
3820
  const t = new TextEncoder(), e = [];
3821
- for (const i of l) {
3821
+ for (const i of o) {
3822
3822
  if (!i) continue;
3823
3823
  const s = String(i.path ?? "");
3824
3824
  if (!s) continue;
@@ -3827,71 +3827,71 @@ function Re(l) {
3827
3827
  }
3828
3828
  return e.length ? e : void 0;
3829
3829
  }
3830
- function Xe(l, t) {
3831
- const e = Array.isArray(t) ? t.filter(Boolean) : [], i = Array.isArray(l) ? l.filter(Boolean) : [], s = [...e, ...i];
3830
+ function Ie(o, t) {
3831
+ const e = Array.isArray(t) ? t.filter(Boolean) : [], i = Array.isArray(o) ? o.filter(Boolean) : [], s = [...e, ...i];
3832
3832
  return s.length ? s : void 0;
3833
3833
  }
3834
- function L(l, t) {
3835
- const e = l.replace("#", "");
3836
- if (e.length !== 6) return l;
3837
- const i = Math.round(k(t, 0, 1) * 255);
3834
+ function J(o, t) {
3835
+ const e = o.replace("#", "");
3836
+ if (e.length !== 6) return o;
3837
+ const i = Math.round(F(t, 0, 1) * 255);
3838
3838
  return `#${e}${i.toString(16).padStart(2, "0")}`;
3839
3839
  }
3840
- function Q(l) {
3841
- if (!l || typeof l != "object") return null;
3842
- const t = l, e = t.background ?? t.bg;
3843
- return typeof e == "number" && e >= 0 ? Ve(e) : typeof t.background == "string" && t.background.startsWith("#") ? t.background : typeof t.bg == "string" && t.bg.startsWith("#") ? t.bg : null;
3840
+ function X(o) {
3841
+ if (!o || typeof o != "object") return null;
3842
+ const t = o, e = t.background ?? t.bg;
3843
+ return typeof e == "number" && e >= 0 ? Ee(e) : typeof t.background == "string" && t.background.startsWith("#") ? t.background : typeof t.bg == "string" && t.bg.startsWith("#") ? t.bg : null;
3844
3844
  }
3845
- function Ve(l) {
3846
- return `#${Number(l >>> 0).toString(16).padStart(6, "0").slice(-6)}`;
3845
+ function Ee(o) {
3846
+ return `#${Number(o >>> 0).toString(16).padStart(6, "0").slice(-6)}`;
3847
3847
  }
3848
- function X(l, t, e, i) {
3849
- return l.addEventListener(t, e, i), { dispose: () => l.removeEventListener(t, e, i) };
3848
+ function I(o, t, e, i) {
3849
+ return o.addEventListener(t, e, i), { dispose: () => o.removeEventListener(t, e, i) };
3850
3850
  }
3851
- function Y(l) {
3852
- return (typeof l == "string" ? l : "").startsWith("i");
3851
+ function P(o) {
3852
+ return (typeof o == "string" ? o : "").startsWith("i");
3853
3853
  }
3854
- function we(l) {
3855
- const t = typeof l == "string" ? l : "";
3854
+ function Ne(o) {
3855
+ const t = typeof o == "string" ? o : "";
3856
3856
  return t.length ? t[t.length - 1] : "";
3857
3857
  }
3858
- function S(l) {
3859
- const t = typeof l == "string" ? l : "";
3858
+ function A(o) {
3859
+ const t = typeof o == "string" ? o : "";
3860
3860
  return t === "c" || t.startsWith("c");
3861
3861
  }
3862
- function Ne(l, t, e, i, s, n) {
3863
- const o = l[t] ?? "", c = l[i] ?? "", a = o.slice(0, Math.max(0, e)), g = c.slice(Math.max(0, s)), h = String(n ?? "").split(/\r?\n/);
3864
- let u;
3865
- if (h.length <= 1)
3866
- u = [`${a}${h[0] ?? ""}${g}`];
3862
+ function Re(o, t, e, i, s, n) {
3863
+ const r = o[t] ?? "", l = o[i] ?? "", c = r.slice(0, Math.max(0, e)), u = l.slice(Math.max(0, s)), f = String(n ?? "").split(/\r?\n/);
3864
+ let p;
3865
+ if (f.length <= 1)
3866
+ p = [`${c}${f[0] ?? ""}${u}`];
3867
3867
  else {
3868
- const m = `${a}${h[0] ?? ""}`, b = `${h[h.length - 1] ?? ""}${g}`, f = h.slice(1, -1);
3869
- u = [m, ...f, b];
3868
+ const m = `${c}${f[0] ?? ""}`, v = `${f[f.length - 1] ?? ""}${u}`, _ = f.slice(1, -1);
3869
+ p = [m, ..._, v];
3870
3870
  }
3871
- l.splice(t, Math.max(0, i - t + 1), ...u);
3871
+ o.splice(t, Math.max(0, i - t + 1), ...p);
3872
3872
  }
3873
- function z(l) {
3874
- if (!l) return "";
3875
- if (typeof l == "string") return l;
3876
- if (!Array.isArray(l)) return "";
3873
+ function $(o) {
3874
+ if (!o) return "";
3875
+ if (typeof o == "string") return o;
3876
+ if (!Array.isArray(o)) return "";
3877
3877
  let t = "";
3878
- for (const e of l) {
3878
+ for (const e of o) {
3879
3879
  if (typeof e == "string") {
3880
3880
  t += e;
3881
3881
  continue;
3882
3882
  }
3883
3883
  if (Array.isArray(e)) {
3884
- typeof e[1] == "string" ? t += e[1] : typeof e[0] == "string" ? t += e[0] : t += z(e);
3884
+ typeof e[1] == "string" ? t += e[1] : typeof e[0] == "string" ? t += e[0] : t += $(e);
3885
3885
  continue;
3886
3886
  }
3887
3887
  e && typeof e == "object" && typeof e.text == "string" && (t += e.text);
3888
3888
  }
3889
3889
  return t;
3890
3890
  }
3891
- function We(l) {
3892
- if (!Array.isArray(l)) return [];
3891
+ function Te(o) {
3892
+ if (!Array.isArray(o)) return [];
3893
3893
  const t = [];
3894
- for (const e of l) {
3894
+ for (const e of o) {
3895
3895
  if (Array.isArray(e)) {
3896
3896
  t.push({
3897
3897
  word: String(e[0] ?? ""),
@@ -3908,12 +3908,12 @@ function We(l) {
3908
3908
  }
3909
3909
  return t.filter((e) => e.word.length > 0);
3910
3910
  }
3911
- const He = new URL("data:video/mp2t;base64,aW1wb3J0IHsKICBXQVNJLAogIHdhc2ksCiAgRGlyZWN0b3J5LAogIEZpbGUsCiAgUHJlb3BlbkRpcmVjdG9yeSwKICBGZCwKICBJbm9kZSwKfSBmcm9tICJAYmpvcm4zL2Jyb3dzZXJfd2FzaV9zaGltIjsKaW1wb3J0IHsgZ3VuemlwU3luYyB9IGZyb20gImZmbGF0ZSI7CmltcG9ydCB7IERlY29kZXIgfSBmcm9tICIuL21zZ3BhY2siOwp0eXBlIFN0YXJ0TWVzc2FnZSA9IHsKICB0eXBlOiAic3RhcnQiOwogIGNvbHM/OiBudW1iZXI7CiAgcm93cz86IG51bWJlcjsKICB3YXNtUGF0aDogc3RyaW5nOwogIHJ1bnRpbWVQYXRoOiBzdHJpbmc7CiAgaW5wdXRCdWZmZXI/OiBTaGFyZWRBcnJheUJ1ZmZlciB8IG51bGw7CiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7CiAgZmlsZXM/OiBBcnJheTx7IHBhdGg6IHN0cmluZzsgZGF0YTogVWludDhBcnJheSB8IEFycmF5QnVmZmVyIHwgQXJyYXlMaWtlPG51bWJlcj4gfCB7IHR5cGU6ICJCdWZmZXIiOyBkYXRhOiBudW1iZXJbXSB9IH0+IHwgbnVsbDsKfTsKCnR5cGUgU3RvcE1lc3NhZ2UgPSB7IHR5cGU6ICJzdG9wIiB9OwoKdHlwZSBJbmJvdW5kTWVzc2FnZSA9IFN0YXJ0TWVzc2FnZSB8IFN0b3BNZXNzYWdlOwoKdHlwZSBEaXJOb2RlID0gRGlyZWN0b3J5ICYgeyBjb250ZW50czogTWFwPHN0cmluZywgYW55PiB9OwoKbGV0IHJwY0RlY29kZXI6IERlY29kZXIgfCBudWxsID0gbnVsbDsKbGV0IGFjdGl2ZVdhc2k6IFdBU0kgfCBudWxsID0gbnVsbDsKbGV0IGlucHV0RmQ6IFJpbmdGZCB8IG51bGwgPSBudWxsOwpjb25zdCBzdGRlcnJEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CmxldCBsYXN0U3RkZXJyID0gIiI7CmxldCBmYXRhbFNlbnQgPSBmYWxzZTsKbGV0IGNhY2hlZFdhc206IHsgdXJsOiBzdHJpbmc7IGJ5dGVzOiBVaW50OEFycmF5IH0gfCBudWxsID0gbnVsbDsKbGV0IGNhY2hlZFJ1bnRpbWU6IHsgdXJsOiBzdHJpbmc7IGVudHJpZXM6IFRhckVudHJ5W10gfSB8IG51bGwgPSBudWxsOwoKc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIChldikgPT4gewogIGlmIChmYXRhbFNlbnQpIHJldHVybjsKICBmYXRhbFNlbnQgPSB0cnVlOwogIGNvbnN0IG1zZyA9IGV2Lm1lc3NhZ2UgfHwgU3RyaW5nKGV2LmVycm9yIHx8ICJ3b3JrZXIgZXJyb3IiKTsKICBjb25zdCBzdGFjayA9IChldi5lcnJvciBhcyB7IHN0YWNrPzogc3RyaW5nIH0pPy5zdGFjazsKICB0cnkgewogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAic3RhcnQtZXJyb3IiLCBtZXNzYWdlOiBzdGFjayA/IGAke21zZ31cbiR7c3RhY2t9YCA6IG1zZyB9KTsKICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogImV4aXQiLCBjb2RlOiAxLCBsYXN0U3RkZXJyIH0pOwogIH0gY2F0Y2ggKF8pIHsKICB9Cn0pOwoKc2VsZi5hZGRFdmVudExpc3RlbmVyKCJ1bmhhbmRsZWRyZWplY3Rpb24iLCAoZXYpID0+IHsKICBpZiAoZmF0YWxTZW50KSByZXR1cm47CiAgZmF0YWxTZW50ID0gdHJ1ZTsKICBjb25zdCByZWFzb24gPSBldi5yZWFzb247CiAgY29uc3QgbXNnID0gKHJlYXNvbiAmJiAocmVhc29uLm1lc3NhZ2UgfHwgU3RyaW5nKHJlYXNvbikpKSB8fCAidW5oYW5kbGVkIHJlamVjdGlvbiI7CiAgY29uc3Qgc3RhY2sgPSAocmVhc29uIGFzIHsgc3RhY2s/OiBzdHJpbmcgfSk/LnN0YWNrOwogIHRyeSB7CiAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bXNnfVxuJHtzdGFja31gIDogbXNnIH0pOwogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiZXhpdCIsIGNvZGU6IDEsIGxhc3RTdGRlcnIgfSk7CiAgfSBjYXRjaCAoXykgewogIH0KfSk7CgpzZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50PEluYm91bmRNZXNzYWdlPikgPT4gewogIGNvbnN0IHsgdHlwZSB9ID0gZXZlbnQuZGF0YSB8fCB7fTsKICBpZiAodHlwZSA9PT0gInN0YXJ0IikgewogICAgc3RhcnROdmltKGV2ZW50LmRhdGEgYXMgU3RhcnRNZXNzYWdlKS5jYXRjaCgoZXJyKSA9PiB7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInN0YXJ0LWVycm9yIiwgbWVzc2FnZTogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpIH0pOwogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJleGl0IiwgY29kZTogMSB9KTsKICAgIH0pOwogIH0gZWxzZSBpZiAodHlwZSA9PT0gInN0b3AiKSB7CiAgICB0cnkgewogICAgICBhY3RpdmVXYXNpPy53YXNpSW1wb3J0Py5wcm9jX2V4aXQ/LigwKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgIH0KICAgIGlucHV0RmQgPSBudWxsOwogIH0KfTsKCmNsYXNzIFJpbmdGZCBleHRlbmRzIEZkIHsKICBwcml2YXRlIHJlYWRvbmx5IGN0cmw6IEludDMyQXJyYXk7CiAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBVaW50OEFycmF5OwogIHByaXZhdGUgcmVhZG9ubHkgY2FwYWNpdHk6IG51bWJlcjsKCiAgY29uc3RydWN0b3IoYnVmZmVyOiBTaGFyZWRBcnJheUJ1ZmZlcikgewogICAgc3VwZXIoKTsKICAgIHRoaXMuY3RybCA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgMCwgMik7CiAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheShidWZmZXIsIDgpOwogICAgdGhpcy5jYXBhY2l0eSA9IHRoaXMuZGF0YS5sZW5ndGg7CiAgfQoKICBmZF9mZHN0YXRfZ2V0KCkgewogICAgY29uc3QgZmRzdGF0ID0gbmV3IHdhc2kuRmRzdGF0KHdhc2kuRklMRVRZUEVfUkVHVUxBUl9GSUxFLCAwKTsKICAgIGZkc3RhdC5mc19yaWdodHNfYmFzZSA9IEJpZ0ludCh3YXNpLlJJR0hUU19GRF9SRUFEIHwgd2FzaS5SSUdIVFNfRkRfV1JJVEUpOwogICAgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX1NVQ0NFU1MsIGZkc3RhdCB9OwogIH0KCiAgZmRfY2xvc2UoKSB7IHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7IH0KCiAgZmRfcmVhZChzaXplOiBudW1iZXIpIHsKICAgIGNvbnN0IG1heCA9IE1hdGgubWluKE1hdGgubWF4KDAsIE51bWJlcihzaXplKSB8fCAwKSwgdGhpcy5jYXBhY2l0eSk7CiAgICBpZiAobWF4ID09PSAwKSByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fQUdBSU4sIGRhdGE6IG5ldyBVaW50OEFycmF5KCkgfTsKICAgIGxldCBoZWFkID0gQXRvbWljcy5sb2FkKHRoaXMuY3RybCwgMCk7CiAgICBjb25zdCB0YWlsID0gQXRvbWljcy5sb2FkKHRoaXMuY3RybCwgMSk7CiAgICBpZiAoaGVhZCA9PT0gdGFpbCkgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0FHQUlOLCBkYXRhOiBuZXcgVWludDhBcnJheSgpIH07CiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShtYXgpOwogICAgbGV0IHdyaXR0ZW4gPSAwOwogICAgd2hpbGUgKGhlYWQgIT09IHRhaWwgJiYgd3JpdHRlbiA8IG1heCkgewogICAgICBvdXRbd3JpdHRlbisrXSA9IHRoaXMuZGF0YVtoZWFkXTsKICAgICAgaGVhZCA9IChoZWFkICsgMSkgJSB0aGlzLmNhcGFjaXR5OwogICAgfQogICAgQXRvbWljcy5zdG9yZSh0aGlzLmN0cmwsIDAsIGhlYWQpOwogICAgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX1NVQ0NFU1MsIGRhdGE6IG91dC5zbGljZSgwLCB3cml0dGVuKSB9OwogIH0KCiAgZmRfd3JpdGUoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBud3JpdHRlbjogMCB9OyB9CiAgZmRfc2VlaygpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIG9mZnNldDogMG4gfTsgfQogIGZkX3RlbGwoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBvZmZzZXQ6IDBuIH07IH0KICBmZF9wcmVhZCgpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIGRhdGE6IG5ldyBVaW50OEFycmF5KCkgfTsgfQogIGZkX3B3cml0ZSgpIHsgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0JBREYsIG53cml0dGVuOiAwIH07IH0KfQoKY2xhc3MgU2lua0ZkIGV4dGVuZHMgRmQgewogIHByaXZhdGUgcmVhZG9ubHkgb25Xcml0ZTogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IHZvaWQ7CgogIGNvbnN0cnVjdG9yKG9uV3JpdGU6IChkYXRhOiBVaW50OEFycmF5KSA9PiB2b2lkKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5vbldyaXRlID0gb25Xcml0ZTsKICB9CgogIGZkX2Zkc3RhdF9nZXQoKSB7CiAgICBjb25zdCBmZHN0YXQgPSBuZXcgd2FzaS5GZHN0YXQod2FzaS5GSUxFVFlQRV9SRUdVTEFSX0ZJTEUsIDApOwogICAgZmRzdGF0LmZzX3JpZ2h0c19iYXNlID0gQmlnSW50KHdhc2kuUklHSFRTX0ZEX1dSSVRFKTsKICAgIHJldHVybiB7IHJldDogd2FzaS5FUlJOT19TVUNDRVNTLCBmZHN0YXQgfTsKICB9CgogIGZkX3dyaXRlKGRhdGE6IFVpbnQ4QXJyYXkpIHsKICAgIHRoaXMub25Xcml0ZShuZXcgVWludDhBcnJheShkYXRhKSk7CiAgICByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fU1VDQ0VTUywgbndyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0aCB9OwogIH0KCiAgZmRfY2xvc2UoKSB7IHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7IH0KfQoKYXN5bmMgZnVuY3Rpb24gc3RhcnROdmltKHsgY29scywgcm93cywgd2FzbVBhdGgsIHJ1bnRpbWVQYXRoLCBpbnB1dEJ1ZmZlciwgZW52OiBleHRyYUVudiwgZmlsZXMgfTogU3RhcnRNZXNzYWdlKSB7CiAgbGV0IGV4aXRDb2RlID0gMTsKICB0cnkgewogICAgaWYgKCFpbnB1dEJ1ZmZlcikgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6ICJpbnB1dCBidWZmZXIgbWlzc2luZyIgfSk7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogImV4aXQiLCBjb2RlOiAxIH0pOwogICAgICByZXR1cm47CiAgICB9CgogICAgcnBjRGVjb2RlciA9IG51bGw7CiAgICBpbnB1dEZkID0gbmV3IFJpbmdGZChpbnB1dEJ1ZmZlcik7CgogICAgY29uc3Qgd2FzbUJ5dGVzID0gYXdhaXQgZ2V0Q2FjaGVkV2FzbUJ5dGVzKHdhc21QYXRoKTsKICAgIGNvbnN0IHVudGFycmVkID0gYXdhaXQgZ2V0Q2FjaGVkUnVudGltZUVudHJpZXMocnVudGltZVBhdGgpOwogICAgY29uc3QgZnNSb290ID0gYnVpbGRGcyh1bnRhcnJlZCwgKCkgPT4ge30pOwogICAgaWYgKGZpbGVzICYmIEFycmF5LmlzQXJyYXkoZmlsZXMpICYmIGZpbGVzLmxlbmd0aCkgYXBwbHlFeHRyYUZpbGVzKGZzUm9vdCwgZmlsZXMpOwoKICAgIGNvbnN0IHN0ZGluRmQgPSBpbnB1dEZkITsKICAgIGNvbnN0IHN0ZG91dEZkID0gbmV3IFNpbmtGZChoYW5kbGVTdGRvdXQpOwogICAgY29uc3Qgc3RkZXJyRmQgPSBuZXcgU2lua0ZkKChkYXRhKSA9PiB7CiAgICAgIGNvbnN0IG1zZyA9IHN0ZGVyckRlY29kZXIuZGVjb2RlKGRhdGEpOwogICAgICBpZiAobXNnKSB7CiAgICAgICAgbGFzdFN0ZGVyciA9IChsYXN0U3RkZXJyICsgbXNnKS5zbGljZSgtODE5Mik7CiAgICAgIH0KICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAic3RkZXJyIiwgbWVzc2FnZTogbXNnIH0pOwogICAgfSk7CgogICAgY29uc3QgcHJlb3BlbiA9IG5ldyBSb290ZWRQcmVvcGVuRGlyZWN0b3J5KCJudmltIiwgZnNSb290LmNvbnRlbnRzKTsKICAgIGNvbnN0IHRtcERpciA9IGZzUm9vdC5jb250ZW50cy5nZXQoInRtcCIpIGFzIERpcmVjdG9yeSB8IHVuZGVmaW5lZDsKICAgIGNvbnN0IHRtcCA9IHRtcERpcj8uY29udGVudHMgfHwgbmV3IE1hcCgpOwogICAgY29uc3QgcHJlb3BlblRtcCA9IG5ldyBSb290ZWRQcmVvcGVuRGlyZWN0b3J5KCJ0bXAiLCB0bXApOwoKICAgIGNvbnN0IGFyZ3MgPSBbIm52aW0iLCAiLS1oZWFkbGVzcyIsICItLWVtYmVkIiwgIi11IiwgIk5PUkMiLCAiLS1ub3BsdWdpbiIsICItaSIsICJOT05FIiwgIi1uIl07CiAgICBjb25zdCBlbnYgPSBbCiAgICAgICJWSU1SVU5USU1FPS9udmltL3J1bnRpbWUiLAogICAgICAiSE9NRT0vbnZpbS9ob21lIiwKICAgICAgIlBXRD0vbnZpbSIsCiAgICAgICJYREdfQ09ORklHX0hPTUU9L252aW0vaG9tZS8uY29uZmlnIiwKICAgICAgIlhER19EQVRBX0hPTUU9L252aW0vaG9tZS8ubG9jYWwvc2hhcmUiLAogICAgICAiWERHX1NUQVRFX0hPTUU9L252aW0vaG9tZS8ubG9jYWwvc3RhdGUiLAogICAgICAiUEFUSD0vdXNyL2JpbjovYmluIiwKICAgICAgIlRNUERJUj0vbnZpbS90bXAiLAogICAgICBgQ09MVU1OUz0ke2NvbHMgfHwgMTIwfWAsCiAgICAgIGBMSU5FUz0ke3Jvd3MgfHwgNDB9YCwKICAgIF07CiAgICBpZiAoZXh0cmFFbnYgJiYgdHlwZW9mIGV4dHJhRW52ID09PSAib2JqZWN0IikgewogICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhleHRyYUVudikpIHsKICAgICAgICBpZiAoIWspIGNvbnRpbnVlOwogICAgICAgIGVudi5wdXNoKGAke2t9PSR7U3RyaW5nKHYgPz8gIiIpfWApOwogICAgICB9CiAgICB9CiAgICBhY3RpdmVXYXNpID0gbmV3IFdBU0koYXJncywgZW52LCBbc3RkaW5GZCwgc3Rkb3V0RmQsIHN0ZGVyckZkLCBwcmVvcGVuLCBwcmVvcGVuVG1wXSwgeyBkZWJ1ZzogZmFsc2UgfSk7CiAgICBhY3RpdmVXYXNpLmZkc1swXSA9IHN0ZGluRmQ7CiAgICBhY3RpdmVXYXNpLmZkc1sxXSA9IHN0ZG91dEZkOwogICAgYWN0aXZlV2FzaS5mZHNbMl0gPSBzdGRlcnJGZDsKICAgIGFjdGl2ZVdhc2kuZmRzWzNdID0gcHJlb3BlbjsKICAgIGFjdGl2ZVdhc2kuZmRzWzRdID0gcHJlb3BlblRtcDsKICAgIChhY3RpdmVXYXNpIGFzIHVua25vd24gYXMgeyBwcmVvcGVuczogUmVjb3JkPHN0cmluZywgUHJlb3BlbkRpcmVjdG9yeT4gfSkucHJlb3BlbnMgPSB7ICIvbnZpbSI6IHByZW9wZW4sICIvdG1wIjogcHJlb3BlblRtcCB9OwoKICAgIGNvbnN0IGVudkltcG9ydHMgPSBtYWtlRW52KCgpID0+IGFjdGl2ZVdhc2k/Lndhc2lJbXBvcnQ/LnByb2NfZXhpdD8uKDEpKTsKICAgIGNvbnN0IHdhc21JbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21CeXRlcywgewogICAgICB3YXNpX3NuYXBzaG90X3ByZXZpZXcxOiBhY3RpdmVXYXNpLndhc2lJbXBvcnQsCiAgICAgIGVudjogZW52SW1wb3J0cywKICAgIH0pOwogICAgY29uc3QgaW5zdGFuY2VTb3VyY2UgPSB3YXNtSW5zdGFuY2UgYXMgdW5rbm93biBhcyBXZWJBc3NlbWJseS5XZWJBc3NlbWJseUluc3RhbnRpYXRlZFNvdXJjZTsKICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VTb3VyY2UuaW5zdGFuY2UKICAgICAgPz8gKHdhc21JbnN0YW5jZSBhcyB1bmtub3duIGFzIHsgaW5zdGFuY2U6IFdlYkFzc2VtYmx5Lkluc3RhbmNlIH0pLmluc3RhbmNlOwogICAgZXhpdENvZGUgPSBhY3RpdmVXYXNpLnN0YXJ0KGluc3RhbmNlIGFzIGFueSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zdCBtZXNzYWdlID0gKGVyciBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSk/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycik7CiAgICBjb25zdCBzdGFjayA9IChlcnIgYXMgeyBzdGFjaz86IHN0cmluZyB9KT8uc3RhY2s7CiAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bWVzc2FnZX1cbiR7c3RhY2t9YCA6IG1lc3NhZ2UgfSk7CiAgfQoKICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJleGl0IiwgY29kZTogZXhpdENvZGUsIGxhc3RTdGRlcnIgfSk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGdldENhY2hlZFdhc21CeXRlcyh1cmw6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4gewogIGlmIChjYWNoZWRXYXNtICYmIGNhY2hlZFdhc20udXJsID09PSB1cmwgJiYgY2FjaGVkV2FzbS5ieXRlcz8uYnl0ZUxlbmd0aCkgcmV0dXJuIGNhY2hlZFdhc20uYnl0ZXM7CiAgY29uc3QgYnl0ZXMgPSBhd2FpdCBmZXRjaEJ5dGVzKHVybCk7CiAgY2FjaGVkV2FzbSA9IHsgdXJsLCBieXRlcyB9OwogIHJldHVybiBieXRlczsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkUnVudGltZUVudHJpZXModXJsOiBzdHJpbmcpOiBQcm9taXNlPFRhckVudHJ5W10+IHsKICBpZiAoY2FjaGVkUnVudGltZSAmJiBjYWNoZWRSdW50aW1lLnVybCA9PT0gdXJsICYmIGNhY2hlZFJ1bnRpbWUuZW50cmllcz8ubGVuZ3RoKSByZXR1cm4gY2FjaGVkUnVudGltZS5lbnRyaWVzOwogIGNvbnN0IGFyY2hpdmUgPSBhd2FpdCBmZXRjaEJ5dGVzKHVybCk7CiAgbGV0IHJ1bnRpbWVCeXRlczogVWludDhBcnJheTsKICBpZiAobG9va3NMaWtlR3ppcChhcmNoaXZlKSkgewogICAgdHJ5IHsKICAgICAgcnVudGltZUJ5dGVzID0gZ3VuemlwU3luYyhhcmNoaXZlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBndW56aXAgcnVudGltZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlID8/IGV9YCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHJ1bnRpbWVCeXRlcyA9IGFyY2hpdmU7CiAgfQogIGxldCBlbnRyaWVzOiBUYXJFbnRyeVtdOwogIHRyeSB7CiAgICBlbnRyaWVzID0gdW50YXIocnVudGltZUJ5dGVzKTsKICB9IGNhdGNoIChlKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoYHVudGFyIHJ1bnRpbWUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKT8ubWVzc2FnZSA/PyBlfWApOwogIH0KICBjYWNoZWRSdW50aW1lID0geyB1cmwsIGVudHJpZXMgfTsKICByZXR1cm4gZW50cmllczsKfQoKZnVuY3Rpb24gYXBwbHlFeHRyYUZpbGVzKGZzUm9vdDogRGlyTm9kZSwgZmlsZXM6IEFycmF5PHsgcGF0aDogc3RyaW5nOyBkYXRhOiBhbnkgfT4pIHsKICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHsKICAgIGNvbnN0IHJhd1BhdGggPSBTdHJpbmcoZmlsZT8ucGF0aCA/PyAiIik7CiAgICBjb25zdCBjbGVhbiA9IHJhd1BhdGgucmVwbGFjZSgvXlwvKy8sICIiKS5yZXBsYWNlKC9eXC5cLysvLCAiIik7CiAgICBpZiAoIWNsZWFuIHx8IGNsZWFuLmVuZHNXaXRoKCIvIikpIGNvbnRpbnVlOwogICAgY29uc3QgZGF0YSA9IHRvVTgoZmlsZT8uZGF0YSk7CiAgICBpZiAoIWRhdGEpIGNvbnRpbnVlOwogICAgY29uc3QgcGFydHMgPSBjbGVhbi5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTsKICAgIGlmICghcGFydHMubGVuZ3RoKSBjb250aW51ZTsKICAgIGxldCBkaXI6IERpck5vZGUgPSBmc1Jvb3Q7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkgKz0gMSkgewogICAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07CiAgICAgIGlmICghZGlyLmNvbnRlbnRzLmhhcyhwYXJ0KSkgZGlyLmNvbnRlbnRzLnNldChwYXJ0LCBuZXcgRGlyZWN0b3J5KG5ldyBNYXAoKSkpOwogICAgICBkaXIgPSBkaXIuY29udGVudHMuZ2V0KHBhcnQpIGFzIERpck5vZGU7CiAgICB9CiAgICBjb25zdCBsZWFmID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07CiAgICBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBGaWxlKGRhdGEsIHsgcmVhZG9ubHk6IGZhbHNlIH0pKTsKICB9Cn0KCmZ1bmN0aW9uIHRvVTgoZGF0YTogYW55KTogVWludDhBcnJheSB8IG51bGwgewogIGlmICghZGF0YSkgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7CiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gZGF0YTsKICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpOwogIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgaWYgKGRhdGEgJiYgZGF0YS50eXBlID09PSAiQnVmZmVyIiAmJiBBcnJheS5pc0FycmF5KGRhdGEuZGF0YSkpIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmRhdGEpOwogIHRyeSB7CiAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFN0cmluZyhkYXRhKSk7CiAgfSBjYXRjaCAoXykgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpmdW5jdGlvbiBoYW5kbGVTdGRvdXQoY2h1bms6IFVpbnQ4QXJyYXkpIHsKICBpZiAoIXJwY0RlY29kZXIpIHsKICAgIHJwY0RlY29kZXIgPSBuZXcgRGVjb2RlcihoYW5kbGVNZXNzYWdlKTsKICB9CiAgdHJ5IHsKICAgIHJwY0RlY29kZXIucHVzaChjaHVuayk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICB2b2lkIGVycjsKICAgIHJwY0RlY29kZXIgPSBuZXcgRGVjb2RlcihoYW5kbGVNZXNzYWdlKTsKICB9Cn0KCmZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UobXNnOiB1bmtub3duKSB7CiAgaWYgKCFBcnJheS5pc0FycmF5KG1zZykgfHwgbXNnLmxlbmd0aCA8IDEpIHJldHVybjsKICBjb25zdCBraW5kID0gbXNnWzBdOwogIGlmIChraW5kID09PSAwKSB7CiAgICBjb25zdCBbLCBtc2dpZCwgbWV0aG9kLCBwYXJhbXNdID0gbXNnOwogICAgaWYgKG1ldGhvZCA9PT0gIndhc20tY2xpcGJvYXJkLXBhc3RlIikgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJjbGlwYm9hcmQtcGFzdGUiLCBtc2dpZCB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInJwYy1yZXF1ZXN0IiwgbXNnaWQsIG1ldGhvZCwgcGFyYW1zIH0pOwogICAgfQogIH0gZWxzZSBpZiAoa2luZCA9PT0gMSkgewogICAgY29uc3QgWywgbXNnaWQsIGVycm9yLCByZXN1bHRdID0gbXNnOwogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAicnBjLXJlc3BvbnNlIiwgbXNnaWQsIGVycm9yLCByZXN1bHQgfSk7CiAgfSBlbHNlIGlmIChraW5kID09PSAyKSB7CiAgICBjb25zdCBbLCBtZXRob2QsIHBhcmFtc10gPSBtc2c7CiAgICBpZiAobWV0aG9kID09PSAid2FzbS1jbGlwYm9hcmQtY29weSIpIHsKICAgICAgY29uc3QgbGluZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcz8uWzBdKSA/IHBhcmFtc1swXSA6IFtdOwogICAgICBjb25zdCByZWd0eXBlID0gdHlwZW9mIHBhcmFtcz8uWzFdID09PSAic3RyaW5nIiA/IHBhcmFtc1sxXSA6ICJ2IjsKICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiY2xpcGJvYXJkLWNvcHkiLCBsaW5lcywgcmVndHlwZSB9KTsKICAgIH0gZWxzZSBpZiAoCiAgICAgIG1ldGhvZCA9PT0gIm52aW1fYnVmX2xpbmVzX2V2ZW50IgogICAgICB8fCBtZXRob2QgPT09ICJudmltX2J1Zl9kZXRhY2hfZXZlbnQiCiAgICAgIHx8IG1ldGhvZCA9PT0gInJlZHJhdyIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2N1cnNvciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX21vZGUiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm1vbmFjb19jdXJzb3JNb3ZlIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fc2Nyb2xsIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fcmV2ZWFsIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fbW92ZUN1cnNvciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX3Njcm9sbG9mZiIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2hvc3RfY29tbWFuZCIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2J1Zl9lbnRlciIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2J1Zl9kZWxldGUiCiAgICApIHsKICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAicnBjLW5vdGlmeSIsIG1ldGhvZCwgcGFyYW1zIH0pOwogICAgfQogIH0KfQoKYXN5bmMgZnVuY3Rpb24gZmV0Y2hCeXRlcyh1cmw6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4gewogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCk7CiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgZmV0Y2ggJHt1cmx9IGZhaWxlZCAoJHtyZXMuc3RhdHVzfSlgKTsKICBjb25zdCBjdCA9IChyZXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpOwogIGlmIChjdC5pbmNsdWRlcygidGV4dC9odG1sIikpIHRocm93IG5ldyBFcnJvcihgZmV0Y2ggJHt1cmx9IHJldHVybmVkIEhUTUwgKGxpa2VseSB3cm9uZyBwYXRoIG9yIGRldiBzZXJ2ZXIgZmFsbGJhY2spYCk7CiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpKTsKICBpZiAoIWRhdGEuYnl0ZUxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGBmZXRjaCAke3VybH0gcmV0dXJuZWQgZW1wdHkgYm9keWApOwogIHJldHVybiBkYXRhOwp9Cgp0eXBlIFRhckVudHJ5ID0geyBuYW1lOiBzdHJpbmc7IHR5cGU6ICJkaXIiIHwgImZpbGUiOyBkYXRhOiBVaW50OEFycmF5IH07CgpmdW5jdGlvbiBsb29rc0xpa2VHemlwKGRhdGE6IFVpbnQ4QXJyYXkpIHsKICByZXR1cm4gZGF0YSAmJiBkYXRhLmxlbmd0aCA+PSAyICYmIGRhdGFbMF0gPT09IDB4MWYgJiYgZGF0YVsxXSA9PT0gMHg4YjsKfQoKZnVuY3Rpb24gdW50YXIoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBUYXJFbnRyeVtdIHsKICBjb25zdCBmaWxlczogVGFyRW50cnlbXSA9IFtdOwogIGNvbnN0IGRhdGEgPSBieXRlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBieXRlcyA6IG5ldyBVaW50OEFycmF5KGJ5dGVzKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgbGV0IHNhZmV0eSA9IDA7CgogIHdoaWxlIChvZmZzZXQgKyA1MTIgPD0gZGF0YS5sZW5ndGgpIHsKICAgIGlmIChzYWZldHkrKyA+IDEwMF8wMDApIHRocm93IG5ldyBFcnJvcigidW50YXIgc2FmZXR5IGJyZWFrIik7CiAgICBjb25zdCBuYW1lID0gZGVjb2RlVGFyU3RyaW5nKGRlY29kZXIsIGRhdGEsIG9mZnNldCwgMTAwKTsKICAgIGNvbnN0IHNpemVUZXh0ID0gZGVjb2RlVGFyU3RyaW5nKGRlY29kZXIsIGRhdGEsIG9mZnNldCArIDEyNCwgMTIpOwogICAgY29uc3QgdHlwZWZsYWcgPSBkYXRhW29mZnNldCArIDE1Nl07CiAgICBjb25zdCBwcmVmaXggPSBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlciwgZGF0YSwgb2Zmc2V0ICsgMzQ1LCAxNTUpOwogICAgaWYgKCFuYW1lICYmICFwcmVmaXgpIGJyZWFrOwogICAgY29uc3Qgc2l6ZVJhdyA9IHNpemVUZXh0LnRyaW0oKSB8fCAiMCI7CiAgICBjb25zdCBzaXplID0gcGFyc2VJbnQoc2l6ZVJhdywgOCk7CiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzaXplKSB8fCBzaXplIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRhciBzaXplOiAke3NpemVSYXd9YCk7CiAgICBjb25zdCBmdWxsTmFtZSA9IHByZWZpeCA/IGAke3ByZWZpeH0vJHtuYW1lfWAgOiBuYW1lOwogICAgY29uc3QgYm9keVN0YXJ0ID0gb2Zmc2V0ICsgNTEyOwogICAgY29uc3QgYm9keUVuZCA9IGJvZHlTdGFydCArIHNpemU7CiAgICBjb25zdCBwYXlsb2FkID0gZGF0YS5zbGljZShib2R5U3RhcnQsIGJvZHlFbmQpOwogICAgZmlsZXMucHVzaCh7IG5hbWU6IGZ1bGxOYW1lLCB0eXBlOiB0eXBlZmxhZyA9PT0gNTMgPyAiZGlyIiA6ICJmaWxlIiwgZGF0YTogcGF5bG9hZCB9KTsKICAgIGNvbnN0IGJsb2NrcyA9IE1hdGguY2VpbChzaXplIC8gNTEyKTsKICAgIGNvbnN0IG5leHQgPSBib2R5U3RhcnQgKyBibG9ja3MgKiA1MTI7CiAgICBpZiAobmV4dCA8PSBvZmZzZXQpIHRocm93IG5ldyBFcnJvcigidGFyIHBhcnNlIGRpZCBub3QgYWR2YW5jZSIpOwogICAgb2Zmc2V0ID0gbmV4dDsKICB9CiAgcmV0dXJuIGZpbGVzOwp9CgpmdW5jdGlvbiBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlcjogVGV4dERlY29kZXIsIGRhdGE6IFVpbnQ4QXJyYXksIHN0YXJ0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHsKICBsZXQgZW5kID0gc3RhcnQ7CiAgY29uc3QgbWF4ID0gc3RhcnQgKyBsZW5ndGg7CiAgd2hpbGUgKGVuZCA8IG1heCAmJiBkYXRhW2VuZF0gIT09IDApIGVuZCArPSAxOwogIHJldHVybiBkZWNvZGVyLmRlY29kZShkYXRhLnN1YmFycmF5KHN0YXJ0LCBlbmQpKS50cmltKCk7Cn0KCmZ1bmN0aW9uIGJ1aWxkRnMoZW50cmllczogVGFyRW50cnlbXSwgb25Qcm9ncmVzcz86IChjb3VudDogbnVtYmVyKSA9PiB2b2lkKSB7CiAgY29uc3Qgcm9vdCA9IG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSBhcyBEaXJOb2RlOwogIGxldCBjb3VudCA9IDA7CiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICBjb25zdCBjbGVhbiA9IGVudHJ5Lm5hbWUucmVwbGFjZSgvXlwuXC8/LywgIiIpOwogICAgaWYgKCFjbGVhbikgY29udGludWU7CiAgICBjb25zdCBwYXJ0cyA9IGNsZWFuLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwogICAgaWYgKCFwYXJ0cy5sZW5ndGgpIGNvbnRpbnVlOwogICAgY291bnQgKz0gMTsKICAgIGlmIChvblByb2dyZXNzICYmIGNvdW50ICUgNTAwID09PSAwKSBvblByb2dyZXNzKGNvdW50KTsKCiAgICBsZXQgZGlyOiBEaXJOb2RlID0gcm9vdDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSArPSAxKSB7CiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaWYgKCFkaXIuY29udGVudHMuaGFzKHBhcnQpKSBkaXIuY29udGVudHMuc2V0KHBhcnQsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICAgIGRpciA9IGRpci5jb250ZW50cy5nZXQocGFydCkgYXMgRGlyTm9kZTsKICAgIH0KCiAgICBjb25zdCBsZWFmID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07CiAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpciIpIHsKICAgICAgaWYgKCFkaXIuY29udGVudHMuaGFzKGxlYWYpKSBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICB9IGVsc2UgewogICAgICBkaXIuY29udGVudHMuc2V0KGxlYWYsIG5ldyBGaWxlKGVudHJ5LmRhdGEsIHsgcmVhZG9ubHk6IHRydWUgfSkpOwogICAgfQogIH0KCiAgZW5zdXJlRGlyKHJvb3QsICJob21lIik7CiAgZW5zdXJlRGlyKHJvb3QsICJ0bXAiKTsKICBlbnN1cmVEaXIocm9vdCwgImhvbWUvLmNvbmZpZyIpOwogIGVuc3VyZURpcihyb290LCAiaG9tZS8ubG9jYWwvc2hhcmUiKTsKICBlbnN1cmVEaXIocm9vdCwgImhvbWUvLmxvY2FsL3N0YXRlIik7CgogIHJldHVybiByb290Owp9CgpmdW5jdGlvbiBlbnN1cmVEaXIocm9vdDogRGlyTm9kZSwgcGF0aDogc3RyaW5nKSB7CiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwogIGxldCBub2RlOiBEaXJOb2RlID0gcm9vdDsKICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHsKICAgIGlmICghbm9kZS5jb250ZW50cy5oYXMocCkpIG5vZGUuY29udGVudHMuc2V0KHAsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICBub2RlID0gbm9kZS5jb250ZW50cy5nZXQocCkgYXMgRGlyTm9kZTsKICB9Cn0KCmZ1bmN0aW9uIG1ha2VFbnYocHJvY0V4aXQ/OiAoY29kZTogbnVtYmVyKSA9PiB2b2lkKSB7CiAgY29uc3Qgd2FzbUFueSA9IFdlYkFzc2VtYmx5IGFzIGFueTsKICBjb25zdCBjTG9uZ2ptcCA9IG5ldyB3YXNtQW55LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl0sIHJlc3VsdHM6IFtdIH0pIGFzIGFueTsKICByZXR1cm4gewogICAgZmxvY2s6ICgpID0+IDAsCiAgICBnZXRwaWQ6ICgpID0+IDEsCiAgICB1dl9yYW5kb206ICgpID0+IC0zOCwKICAgIHV2X3d0ZjhfdG9fdXRmMTY6ICgpID0+IHt9LAogICAgdXZfdXRmMTZfbGVuZ3RoX2FzX3d0Zjg6ICgpID0+IDAsCiAgICB1dl91dGYxNl90b193dGY4OiAoKSA9PiAtMzgsCiAgICB1dl93dGY4X2xlbmd0aF9hc191dGYxNjogKCkgPT4gMCwKICAgIF9fd2FzbV9sb25nam1wOiAocHRyOiBudW1iZXIpID0+IHsKICAgICAgaWYgKHByb2NFeGl0KSBwcm9jRXhpdCgxKTsKICAgICAgdGhyb3cgbmV3IHdhc21BbnkuRXhjZXB0aW9uKGNMb25nam1wLCBbcHRyID8/IDBdKTsKICAgIH0sCiAgICBfX3dhc21fc2V0am1wOiAoKSA9PiAwLAogICAgX193YXNtX3NldGptcF90ZXN0OiAoKSA9PiAwLAogICAgdG1wZmlsZTogKCkgPT4gMCwKICAgIGNsb2NrOiAoKSA9PiAwLAogICAgc3lzdGVtOiAoKSA9PiAtMSwKICAgIHRtcG5hbTogKCkgPT4gMCwKICAgIF9fY19sb25nam1wOiBjTG9uZ2ptcCwKICB9IGFzIFdlYkFzc2VtYmx5Lk1vZHVsZUltcG9ydHM7Cn0KCmNsYXNzIFJvb3RlZFByZW9wZW5EaXJlY3RvcnkgZXh0ZW5kcyBQcmVvcGVuRGlyZWN0b3J5IHsKICAjc3RyaXAocGF0aDogc3RyaW5nKSB7IHJldHVybiBwYXRoLnJlcGxhY2UoL15cLysvLCAiIik7IH0KICBwYXRoX29wZW4oCiAgICBkaXJmbGFnczogbnVtYmVyLAogICAgcGF0aF9zdHI6IHN0cmluZywKICAgIG9mbGFnczogbnVtYmVyLAogICAgZnNfcmlnaHRzX2Jhc2U6IGJpZ2ludCwKICAgIGZzX3JpZ2h0c19pbmhlcml0aW5nOiBiaWdpbnQsCiAgICBmZF9mbGFnczogbnVtYmVyLAogICkgewogICAgcmV0dXJuIHN1cGVyLnBhdGhfb3BlbihkaXJmbGFncywgdGhpcy4jc3RyaXAocGF0aF9zdHIpLCBvZmxhZ3MsIGZzX3JpZ2h0c19iYXNlLCBmc19yaWdodHNfaW5oZXJpdGluZywgZmRfZmxhZ3MpOwogIH0KICBwYXRoX2ZpbGVzdGF0X2dldChmbGFnczogbnVtYmVyLCBwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX2ZpbGVzdGF0X2dldChmbGFncywgdGhpcy4jc3RyaXAocGF0aF9zdHIpKTsgfQogIHBhdGhfY3JlYXRlX2RpcmVjdG9yeShwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX2NyZWF0ZV9kaXJlY3RvcnkodGhpcy4jc3RyaXAocGF0aF9zdHIpKTsgfQogIHBhdGhfdW5saW5rX2ZpbGUocGF0aF9zdHI6IHN0cmluZykgeyByZXR1cm4gc3VwZXIucGF0aF91bmxpbmtfZmlsZSh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9yZW1vdmVfZGlyZWN0b3J5KHBhdGhfc3RyOiBzdHJpbmcpIHsgcmV0dXJuIHN1cGVyLnBhdGhfcmVtb3ZlX2RpcmVjdG9yeSh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9saW5rKHBhdGhfc3RyOiBzdHJpbmcsIGlub2RlOiBJbm9kZSwgYWxsb3dfZGlyOiBib29sZWFuKSB7IHJldHVybiBzdXBlci5wYXRoX2xpbmsodGhpcy4jc3RyaXAocGF0aF9zdHIpLCBpbm9kZSwgYWxsb3dfZGlyKTsgfQogIHBhdGhfcmVhZGxpbmsocGF0aF9zdHI6IHN0cmluZykgeyByZXR1cm4gc3VwZXIucGF0aF9yZWFkbGluayh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9zeW1saW5rKG9sZF9wYXRoOiBzdHJpbmcsIG5ld19wYXRoOiBzdHJpbmcpIHsKICAgIGNvbnN0IHRhcmdldCA9IChQcmVvcGVuRGlyZWN0b3J5LnByb3RvdHlwZSBhcyB1bmtub3duIGFzIHsgcGF0aF9zeW1saW5rPzogKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKSA9PiBudW1iZXIgfSkucGF0aF9zeW1saW5rOwogICAgaWYgKCF0YXJnZXQpIHJldHVybiB3YXNpLkVSUk5PX05PVFNVUDsKICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCB0aGlzLiNzdHJpcChvbGRfcGF0aCksIHRoaXMuI3N0cmlwKG5ld19wYXRoKSk7CiAgfQp9Cg==", import.meta.url), Ye = new URL("data:video/mp2t;base64,aW1wb3J0IHsKICBXQVNJLAogIHdhc2ksCiAgV0FTSVByb2NFeGl0LAogIERpcmVjdG9yeSwKICBGaWxlLAogIFByZW9wZW5EaXJlY3RvcnksCiAgRmQsCiAgSW5vZGUsCn0gZnJvbSAiQGJqb3JuMy9icm93c2VyX3dhc2lfc2hpbSI7CmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICJmZmxhdGUiOwppbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSAiLi9tc2dwYWNrIjsKCnR5cGUgU3RhcnRNZXNzYWdlID0gewogIHR5cGU6ICJzdGFydCI7CiAgY29scz86IG51bWJlcjsKICByb3dzPzogbnVtYmVyOwogIHdhc21QYXRoOiBzdHJpbmc7CiAgcnVudGltZVBhdGg6IHN0cmluZzsKICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbDsKICBmaWxlcz86IEFycmF5PHsgcGF0aDogc3RyaW5nOyBkYXRhOiBVaW50OEFycmF5IHwgQXJyYXlCdWZmZXIgfCBBcnJheUxpa2U8bnVtYmVyPiB8IHsgdHlwZTogIkJ1ZmZlciI7IGRhdGE6IG51bWJlcltdIH0gfT4gfCBudWxsOwp9OwoKdHlwZSBTdG9wTWVzc2FnZSA9IHsgdHlwZTogInN0b3AiIH07CnR5cGUgU3RkaW5NZXNzYWdlID0geyB0eXBlOiAic3RkaW4iOyBjaHVuaz86IFVpbnQ4QXJyYXkgfCBBcnJheUJ1ZmZlciB8IEFycmF5TGlrZTxudW1iZXI+IHwgeyB0eXBlOiAiQnVmZmVyIjsgZGF0YTogbnVtYmVyW10gfSB9OwoKdHlwZSBJbmJvdW5kTWVzc2FnZSA9IFN0YXJ0TWVzc2FnZSB8IFN0b3BNZXNzYWdlIHwgU3RkaW5NZXNzYWdlOwoKdHlwZSBEaXJOb2RlID0gRGlyZWN0b3J5ICYgeyBjb250ZW50czogTWFwPHN0cmluZywgYW55PiB9OwoKbGV0IHJwY0RlY29kZXI6IERlY29kZXIgfCBudWxsID0gbnVsbDsKbGV0IGFjdGl2ZVdhc2k6IFdBU0kgfCBudWxsID0gbnVsbDsKbGV0IHN0ZGluRmQ6IE1lc3NhZ2VJbnB1dEZkIHwgbnVsbCA9IG51bGw7CmxldCB3YXNtRXhwb3J0czogYW55ID0gbnVsbDsKbGV0IHBlbmRpbmdBc3luYzogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsOwpsZXQgcGVuZGluZ1BvbGxPbmVvZmY6IHsgaW5fcHRyOiBudW1iZXI7IG5zdWJzY3JpcHRpb25zOiBudW1iZXI7IGNsb2NrRGVhZGxpbmVzOiBBcnJheTxiaWdpbnQgfCBudWxsPiB9IHwgbnVsbCA9IG51bGw7CmxldCBzdGRpbldhaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7CgpsZXQgYXN5bmNpZnlEYXRhUHRyID0gMDsKbGV0IGFzeW5jaWZ5U3RhY2tTdGFydCA9IDA7CmxldCBhc3luY2lmeVN0YWNrRW5kID0gMDsKCmNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTsKbGV0IGxhc3RTdGRlcnIgPSAiIjsKbGV0IGZhdGFsU2VudCA9IGZhbHNlOwpsZXQgY2FjaGVkV2FzbTogeyB1cmw6IHN0cmluZzsgYnl0ZXM6IFVpbnQ4QXJyYXkgfSB8IG51bGwgPSBudWxsOwpsZXQgY2FjaGVkUnVudGltZTogeyB1cmw6IHN0cmluZzsgZW50cmllczogVGFyRW50cnlbXSB9IHwgbnVsbCA9IG51bGw7CmNvbnN0IHBlbmRpbmdTdGRpbjogVWludDhBcnJheVtdID0gW107CgpzZWxmLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKGV2KSA9PiB7CiAgaWYgKGZhdGFsU2VudCkgcmV0dXJuOwogIGZhdGFsU2VudCA9IHRydWU7CiAgY29uc3QgbXNnID0gZXYubWVzc2FnZSB8fCBTdHJpbmcoKGV2IGFzIGFueSkuZXJyb3IgfHwgIndvcmtlciBlcnJvciIpOwogIGNvbnN0IHN0YWNrID0gKGV2IGFzIGFueSkuZXJyb3I/LnN0YWNrOwogIHRyeSB7CiAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bXNnfVxuJHtzdGFja31gIDogbXNnIH0pOwogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiZXhpdCIsIGNvZGU6IDEsIGxhc3RTdGRlcnIgfSk7CiAgfSBjYXRjaCAoXykgewogIH0KfSk7CgpzZWxmLmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsIChldikgPT4gewogIGlmIChmYXRhbFNlbnQpIHJldHVybjsKICBmYXRhbFNlbnQgPSB0cnVlOwogIGNvbnN0IHJlYXNvbjogYW55ID0gKGV2IGFzIGFueSkucmVhc29uOwogIGNvbnN0IG1zZyA9IChyZWFzb24gJiYgKHJlYXNvbi5tZXNzYWdlIHx8IFN0cmluZyhyZWFzb24pKSkgfHwgInVuaGFuZGxlZCByZWplY3Rpb24iOwogIGNvbnN0IHN0YWNrID0gcmVhc29uPy5zdGFjazsKICB0cnkgewogICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAic3RhcnQtZXJyb3IiLCBtZXNzYWdlOiBzdGFjayA/IGAke21zZ31cbiR7c3RhY2t9YCA6IG1zZyB9KTsKICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogImV4aXQiLCBjb2RlOiAxLCBsYXN0U3RkZXJyIH0pOwogIH0gY2F0Y2ggKF8pIHsKICB9Cn0pOwoKc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudDxJbmJvdW5kTWVzc2FnZT4pID0+IHsKICBjb25zdCB7IHR5cGUgfSA9IGV2ZW50LmRhdGEgfHwgKHt9IGFzIGFueSk7CiAgaWYgKHR5cGUgPT09ICJzdGFydCIpIHsKICAgIHN0YXJ0TnZpbShldmVudC5kYXRhIGFzIFN0YXJ0TWVzc2FnZSkuY2F0Y2goKGVycikgPT4gewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSB9KTsKICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlOiAiZXhpdCIsIGNvZGU6IDEgfSk7CiAgICB9KTsKICB9IGVsc2UgaWYgKHR5cGUgPT09ICJzdGRpbiIpIHsKICAgIGNvbnN0IGNodW5rID0gdG9VOCgoZXZlbnQuZGF0YSBhcyBTdGRpbk1lc3NhZ2UpPy5jaHVuayk7CiAgICBpZiAoIWNodW5rPy5ieXRlTGVuZ3RoKSByZXR1cm47CiAgICBpZiAoc3RkaW5GZCkgewogICAgICBzdGRpbkZkLnB1c2goY2h1bmspOwogICAgfSBlbHNlIHsKICAgICAgcGVuZGluZ1N0ZGluLnB1c2goY2h1bmspOwogICAgfQogIH0gZWxzZSBpZiAodHlwZSA9PT0gInN0b3AiKSB7CiAgICB0cnkgewogICAgICBzdGRpbkZkPy5jbG9zZSgpOwogICAgfSBjYXRjaCAoXykgewogICAgfQogICAgdHJ5IHsKICAgICAgYWN0aXZlV2FzaT8ud2FzaUltcG9ydD8ucHJvY19leGl0Py4oMCk7CiAgICB9IGNhdGNoIChfKSB7CiAgICB9CiAgICBzdGRpbkZkID0gbnVsbDsKICB9Cn07CgpjbGFzcyBNZXNzYWdlSW5wdXRGZCBleHRlbmRzIEZkIHsKICBwcml2YXRlIGNodW5rczogVWludDhBcnJheVtdID0gW107CiAgdG90YWwgPSAwOwogIHByaXZhdGUgd2FpdGVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTsKICBjbG9zZWQgPSBmYWxzZTsKCiAgZmRfZmRzdGF0X2dldCgpIHsKICAgIGNvbnN0IGZkc3RhdCA9IG5ldyB3YXNpLkZkc3RhdCh3YXNpLkZJTEVUWVBFX1JFR1VMQVJfRklMRSwgMCk7CiAgICBmZHN0YXQuZnNfcmlnaHRzX2Jhc2UgPSBCaWdJbnQod2FzaS5SSUdIVFNfRkRfUkVBRCB8IHdhc2kuUklHSFRTX0ZEX1dSSVRFKTsKICAgIHJldHVybiB7IHJldDogd2FzaS5FUlJOT19TVUNDRVNTLCBmZHN0YXQgfTsKICB9CgogIGZkX2Nsb3NlKCkgewogICAgdGhpcy5jbG9zZSgpOwogICAgcmV0dXJuIHdhc2kuRVJSTk9fU1VDQ0VTUzsKICB9CgogIGNsb3NlKCkgewogICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47CiAgICB0aGlzLmNsb3NlZCA9IHRydWU7CiAgICBjb25zdCB3YWl0ZXJzID0gdGhpcy53YWl0ZXJzOwogICAgdGhpcy53YWl0ZXJzID0gW107CiAgICBmb3IgKGNvbnN0IHcgb2Ygd2FpdGVycykgdygpOwogIH0KCiAgcHVzaChjaHVuazogVWludDhBcnJheSkgewogICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47CiAgICBpZiAoIWNodW5rPy5ieXRlTGVuZ3RoKSByZXR1cm47CiAgICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTsKICAgIHRoaXMudG90YWwgKz0gY2h1bmsuYnl0ZUxlbmd0aDsKICAgIGNvbnN0IHdhaXRlcnMgPSB0aGlzLndhaXRlcnM7CiAgICB0aGlzLndhaXRlcnMgPSBbXTsKICAgIGZvciAoY29uc3QgdyBvZiB3YWl0ZXJzKSB3KCk7CiAgfQoKICB3YWl0Rm9yRGF0YSgpIHsKICAgIGlmICh0aGlzLmNsb3NlZCB8fCB0aGlzLnRvdGFsID4gMCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB0aGlzLndhaXRlcnMucHVzaChyZXNvbHZlKSk7CiAgfQoKICBmZF9yZWFkKHNpemU6IG51bWJlcikgewogICAgaWYgKHRoaXMuY2xvc2VkICYmIHRoaXMudG90YWwgPT09IDApIHJldHVybiB7IHJldDogd2FzaS5FUlJOT19TVUNDRVNTLCBkYXRhOiBuZXcgVWludDhBcnJheSgpIH07CiAgICBjb25zdCBtYXggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBOdW1iZXIoc2l6ZSkgfHwgMCksIHRoaXMudG90YWwpOwogICAgaWYgKG1heCA9PT0gMCkgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX0FHQUlOLCBkYXRhOiBuZXcgVWludDhBcnJheSgpIH07CiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShtYXgpOwogICAgbGV0IHdyaXR0ZW4gPSAwOwogICAgd2hpbGUgKHdyaXR0ZW4gPCBtYXggJiYgdGhpcy5jaHVua3MubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5jaHVua3NbMF07CiAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihmaXJzdC5ieXRlTGVuZ3RoLCBtYXggLSB3cml0dGVuKTsKICAgICAgb3V0LnNldChmaXJzdC5zdWJhcnJheSgwLCB0YWtlKSwgd3JpdHRlbik7CiAgICAgIHdyaXR0ZW4gKz0gdGFrZTsKICAgICAgaWYgKHRha2UgPT09IGZpcnN0LmJ5dGVMZW5ndGgpIHRoaXMuY2h1bmtzLnNoaWZ0KCk7CiAgICAgIGVsc2UgdGhpcy5jaHVua3NbMF0gPSBmaXJzdC5zdWJhcnJheSh0YWtlKTsKICAgIH0KICAgIHRoaXMudG90YWwgLT0gd3JpdHRlbjsKICAgIHJldHVybiB7IHJldDogd2FzaS5FUlJOT19TVUNDRVNTLCBkYXRhOiBvdXQgfTsKICB9CgogIGZkX3dyaXRlKCkgeyByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fQkFERiwgbndyaXR0ZW46IDAgfTsgfQogIGZkX3NlZWsoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBvZmZzZXQ6IDBuIH07IH0KICBmZF90ZWxsKCkgeyByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fQkFERiwgb2Zmc2V0OiAwbiB9OyB9CiAgZmRfcHJlYWQoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBkYXRhOiBuZXcgVWludDhBcnJheSgpIH07IH0KICBmZF9wd3JpdGUoKSB7IHJldHVybiB7IHJldDogd2FzaS5FUlJOT19CQURGLCBud3JpdHRlbjogMCB9OyB9Cn0KCmNsYXNzIFNpbmtGZCBleHRlbmRzIEZkIHsKICBwcml2YXRlIHJlYWRvbmx5IG9uV3JpdGU6IChkYXRhOiBVaW50OEFycmF5KSA9PiB2b2lkOwoKICBjb25zdHJ1Y3RvcihvbldyaXRlOiAoZGF0YTogVWludDhBcnJheSkgPT4gdm9pZCkgewogICAgc3VwZXIoKTsKICAgIHRoaXMub25Xcml0ZSA9IG9uV3JpdGU7CiAgfQoKICBmZF9mZHN0YXRfZ2V0KCkgewogICAgY29uc3QgZmRzdGF0ID0gbmV3IHdhc2kuRmRzdGF0KHdhc2kuRklMRVRZUEVfUkVHVUxBUl9GSUxFLCAwKTsKICAgIGZkc3RhdC5mc19yaWdodHNfYmFzZSA9IEJpZ0ludCh3YXNpLlJJR0hUU19GRF9XUklURSk7CiAgICByZXR1cm4geyByZXQ6IHdhc2kuRVJSTk9fU1VDQ0VTUywgZmRzdGF0IH07CiAgfQoKICBmZF93cml0ZShkYXRhOiBVaW50OEFycmF5KSB7CiAgICB0aGlzLm9uV3JpdGUobmV3IFVpbnQ4QXJyYXkoZGF0YSkpOwogICAgcmV0dXJuIHsgcmV0OiB3YXNpLkVSUk5PX1NVQ0NFU1MsIG53cml0dGVuOiBkYXRhLmJ5dGVMZW5ndGggfTsKICB9CgogIGZkX2Nsb3NlKCkgeyByZXR1cm4gd2FzaS5FUlJOT19TVUNDRVNTOyB9Cn0KCmFzeW5jIGZ1bmN0aW9uIHN0YXJ0TnZpbSh7IGNvbHMsIHJvd3MsIHdhc21QYXRoLCBydW50aW1lUGF0aCwgZW52OiBleHRyYUVudiwgZmlsZXMgfTogU3RhcnRNZXNzYWdlKSB7CiAgbGV0IGV4aXRDb2RlID0gMTsKICB0cnkgewogICAgcnBjRGVjb2RlciA9IG51bGw7CiAgICBzdGRpbldhaXRQcm9taXNlID0gbnVsbDsKICAgIHBlbmRpbmdBc3luYyA9IG51bGw7CiAgICBwZW5kaW5nUG9sbE9uZW9mZiA9IG51bGw7CiAgICB3YXNtRXhwb3J0cyA9IG51bGw7CgogICAgc3RkaW5GZCA9IG5ldyBNZXNzYWdlSW5wdXRGZCgpOwogICAgd2hpbGUgKHBlbmRpbmdTdGRpbi5sZW5ndGgpIHN0ZGluRmQucHVzaChwZW5kaW5nU3RkaW4uc2hpZnQoKSEpOwoKICAgIGNvbnN0IHdhc21CeXRlcyA9IGF3YWl0IGdldENhY2hlZFdhc21CeXRlcyh3YXNtUGF0aCk7CiAgICBjb25zdCB1bnRhcnJlZCA9IGF3YWl0IGdldENhY2hlZFJ1bnRpbWVFbnRyaWVzKHJ1bnRpbWVQYXRoKTsKICAgIGNvbnN0IGZzUm9vdCA9IGJ1aWxkRnModW50YXJyZWQsICgpID0+IHt9KTsKICAgIGlmIChmaWxlcyAmJiBBcnJheS5pc0FycmF5KGZpbGVzKSAmJiBmaWxlcy5sZW5ndGgpIGFwcGx5RXh0cmFGaWxlcyhmc1Jvb3QsIGZpbGVzKTsKCiAgICBjb25zdCBzdGRvdXRGZCA9IG5ldyBTaW5rRmQoaGFuZGxlU3Rkb3V0KTsKICAgIGNvbnN0IHN0ZGVyckZkID0gbmV3IFNpbmtGZCgoZGF0YSkgPT4gewogICAgICBjb25zdCBtc2cgPSBzdGRlcnJEZWNvZGVyLmRlY29kZShkYXRhKTsKICAgICAgaWYgKG1zZykgbGFzdFN0ZGVyciA9IChsYXN0U3RkZXJyICsgbXNnKS5zbGljZSgtODE5Mik7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInN0ZGVyciIsIG1lc3NhZ2U6IG1zZyB9KTsKICAgIH0pOwoKICAgIGNvbnN0IHByZW9wZW4gPSBuZXcgUm9vdGVkUHJlb3BlbkRpcmVjdG9yeSgibnZpbSIsIGZzUm9vdC5jb250ZW50cyk7CiAgICBjb25zdCB0bXBEaXIgPSBmc1Jvb3QuY29udGVudHMuZ2V0KCJ0bXAiKSBhcyBEaXJlY3RvcnkgfCB1bmRlZmluZWQ7CiAgICBjb25zdCB0bXAgPSB0bXBEaXI/LmNvbnRlbnRzIHx8IG5ldyBNYXAoKTsKICAgIGNvbnN0IHByZW9wZW5UbXAgPSBuZXcgUm9vdGVkUHJlb3BlbkRpcmVjdG9yeSgidG1wIiwgdG1wKTsKCiAgICBjb25zdCBhcmdzID0gWyJudmltIiwgIi0taGVhZGxlc3MiLCAiLS1lbWJlZCIsICItdSIsICJOT1JDIiwgIi0tbm9wbHVnaW4iLCAiLWkiLCAiTk9ORSIsICItbiJdOwogICAgY29uc3QgZW52ID0gWwogICAgICAiVklNUlVOVElNRT0vbnZpbS9ydW50aW1lIiwKICAgICAgIkhPTUU9L252aW0vaG9tZSIsCiAgICAgICJQV0Q9L252aW0iLAogICAgICAiWERHX0NPTkZJR19IT01FPS9udmltL2hvbWUvLmNvbmZpZyIsCiAgICAgICJYREdfREFUQV9IT01FPS9udmltL2hvbWUvLmxvY2FsL3NoYXJlIiwKICAgICAgIlhER19TVEFURV9IT01FPS9udmltL2hvbWUvLmxvY2FsL3N0YXRlIiwKICAgICAgIlBBVEg9L3Vzci9iaW46L2JpbiIsCiAgICAgICJUTVBESVI9L252aW0vdG1wIiwKICAgICAgYENPTFVNTlM9JHtjb2xzIHx8IDEyMH1gLAogICAgICBgTElORVM9JHtyb3dzIHx8IDQwfWAsCiAgICBdOwogICAgaWYgKGV4dHJhRW52ICYmIHR5cGVvZiBleHRyYUVudiA9PT0gIm9iamVjdCIpIHsKICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZXh0cmFFbnYpKSB7CiAgICAgICAgaWYgKCFrKSBjb250aW51ZTsKICAgICAgICBlbnYucHVzaChgJHtrfT0ke1N0cmluZyh2ID8/ICIiKX1gKTsKICAgICAgfQogICAgfQoKICAgIGFjdGl2ZVdhc2kgPSBuZXcgV0FTSShhcmdzLCBlbnYsIFtzdGRpbkZkLCBzdGRvdXRGZCwgc3RkZXJyRmQsIHByZW9wZW4sIHByZW9wZW5UbXBdLCB7IGRlYnVnOiBmYWxzZSB9KTsKICAgIGFjdGl2ZVdhc2kuZmRzWzBdID0gc3RkaW5GZDsKICAgIGFjdGl2ZVdhc2kuZmRzWzFdID0gc3Rkb3V0RmQ7CiAgICBhY3RpdmVXYXNpLmZkc1syXSA9IHN0ZGVyckZkOwogICAgYWN0aXZlV2FzaS5mZHNbM10gPSBwcmVvcGVuOwogICAgYWN0aXZlV2FzaS5mZHNbNF0gPSBwcmVvcGVuVG1wOwogICAgKGFjdGl2ZVdhc2kgYXMgdW5rbm93biBhcyB7IHByZW9wZW5zOiBSZWNvcmQ8c3RyaW5nLCBQcmVvcGVuRGlyZWN0b3J5PiB9KS5wcmVvcGVucyA9IHsgIi9udmltIjogcHJlb3BlbiwgIi90bXAiOiBwcmVvcGVuVG1wIH07CgogICAgY29uc3QgZW52SW1wb3J0cyA9IG1ha2VFbnYoKCkgPT4gYWN0aXZlV2FzaT8ud2FzaUltcG9ydD8ucHJvY19leGl0Py4oMSkpOwogICAgY29uc3Qgd2FzaUltcG9ydHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmFjdGl2ZVdhc2kud2FzaUltcG9ydCB9OwoKICAgIC8vIEtlZXAgZmRfcmVhZCBub24tYmxvY2tpbmcgKEVSUk5PX0FHQUlOKSBhbmQgb25seSBhc3luY2lmeSBwb2xsX29uZW9mZi4KICAgIHdhc2lJbXBvcnRzLmZkX3JlYWQgPSBhY3RpdmVXYXNpLndhc2lJbXBvcnQuZmRfcmVhZDsKICAgIHdhc2lJbXBvcnRzLnBvbGxfb25lb2ZmID0gKGluX3B0cjogbnVtYmVyLCBvdXRfcHRyOiBudW1iZXIsIG5zdWJzY3JpcHRpb25zOiBudW1iZXIsIG5ldmVudHNfcHRyOiBudW1iZXIpID0+ICgKICAgICAgcG9sbE9uZW9mZkFzeW5jaWZpZWQoaW5fcHRyLCBvdXRfcHRyLCBuc3Vic2NyaXB0aW9ucywgbmV2ZW50c19wdHIpCiAgICApOwoKICAgIGNvbnN0IHdhc21JbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21CeXRlcywgewogICAgICB3YXNpX3NuYXBzaG90X3ByZXZpZXcxOiB3YXNpSW1wb3J0cywKICAgICAgZW52OiBlbnZJbXBvcnRzLAogICAgfSk7CiAgICBjb25zdCBpbnN0YW5jZVNvdXJjZSA9IHdhc21JbnN0YW5jZSBhcyB1bmtub3duIGFzIFdlYkFzc2VtYmx5LldlYkFzc2VtYmx5SW5zdGFudGlhdGVkU291cmNlOwogICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZVNvdXJjZS5pbnN0YW5jZQogICAgICA/PyAod2FzbUluc3RhbmNlIGFzIHVua25vd24gYXMgeyBpbnN0YW5jZTogV2ViQXNzZW1ibHkuSW5zdGFuY2UgfSkuaW5zdGFuY2U7CgogICAgd2FzbUV4cG9ydHMgPSAoaW5zdGFuY2UgYXMgYW55KS5leHBvcnRzOwogICAgaW5pdEFzeW5jaWZ5KHdhc21FeHBvcnRzKTsKICAgIChhY3RpdmVXYXNpIGFzIGFueSkuaW5zdCA9IGluc3RhbmNlOwoKICAgIGV4aXRDb2RlID0gYXdhaXQgcnVuQXN5bmNpZmllZFN0YXJ0KHdhc21FeHBvcnRzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIGlmIChlcnIgaW5zdGFuY2VvZiBXQVNJUHJvY0V4aXQpIHsKICAgICAgZXhpdENvZGUgPSBlcnIuY29kZTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTsKICAgICAgY29uc3Qgc3RhY2sgPSAoZXJyIGFzIHsgc3RhY2s/OiBzdHJpbmcgfSk/LnN0YWNrOwogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJzdGFydC1lcnJvciIsIG1lc3NhZ2U6IHN0YWNrID8gYCR7bWVzc2FnZX1cbiR7c3RhY2t9YCA6IG1lc3NhZ2UgfSk7CiAgICB9CiAgfQoKICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJleGl0IiwgY29kZTogZXhpdENvZGUsIGxhc3RTdGRlcnIgfSk7Cn0KCmZ1bmN0aW9uIHBvbGxPbmVvZmZBc3luY2lmaWVkKGluX3B0cjogbnVtYmVyLCBvdXRfcHRyOiBudW1iZXIsIG5zdWJzY3JpcHRpb25zOiBudW1iZXIsIG5ldmVudHNfcHRyOiBudW1iZXIpOiBudW1iZXIgewogIGlmICghd2FzbUV4cG9ydHM/Lm1lbW9yeSkgcmV0dXJuIHdhc2kuRVJSTk9fRkFVTFQ7CiAgY29uc3QgbnMgPSBOdW1iZXIobnN1YnNjcmlwdGlvbnMpID4+PiAwOwogIGlmIChucyA9PT0gMCkgcmV0dXJuIHdhc2kuRVJSTk9fSU5WQUw7CgogIGNvbnN0IHN0YXRlID0gd2FzbUV4cG9ydHM/LmFzeW5jaWZ5X2dldF9zdGF0ZT8uKCkgPz8gMDsKICBpZiAoc3RhdGUgPT09IDAgJiYgcGVuZGluZ1BvbGxPbmVvZmYpIHBlbmRpbmdQb2xsT25lb2ZmID0gbnVsbDsKCiAgY29uc3QgYnVmZmVyID0gbmV3IERhdGFWaWV3KHdhc21FeHBvcnRzLm1lbW9yeS5idWZmZXIpOwogIGNvbnN0IHN1YlNpemUgPSA0ODsKICBjb25zdCBldmVudFNpemUgPSAzMjsKCiAgY29uc3Qgbm93TnMgPSAoKSA9PiBCaWdJbnQoTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAqIDFlNikpOwogIGNvbnN0IG5vd1JlYWxOcyA9ICgpID0+IEJpZ0ludChEYXRlLm5vdygpKSAqIDEwMDAwMDBuOwoKICBsZXQgbmVlZFN0ZGluID0gZmFsc2U7CiAgbGV0IG5leHREZWx0YU5zOiBiaWdpbnQgfCBudWxsID0gbnVsbDsKICBjb25zdCByZWFkeTogQXJyYXk8eyB1c2VyZGF0YTogYmlnaW50OyBldmVudHR5cGU6IG51bWJlciB9PiA9IFtdOwogIGNvbnN0IGNsb2NrRGVhZGxpbmVzOiBBcnJheTxiaWdpbnQgfCBudWxsPiA9IG5ldyBBcnJheShucykuZmlsbChudWxsKTsKCiAgY29uc3QgdXNlUGVuZGluZyA9IHN0YXRlID09PSAyCiAgICAmJiBwZW5kaW5nUG9sbE9uZW9mZgogICAgJiYgcGVuZGluZ1BvbGxPbmVvZmYuaW5fcHRyID09PSAoaW5fcHRyID4+PiAwKQogICAgJiYgcGVuZGluZ1BvbGxPbmVvZmYubnN1YnNjcmlwdGlvbnMgPT09IG5zOwoKICBmb3IgKGxldCBpID0gMDsgaSA8IG5zOyBpICs9IDEpIHsKICAgIGNvbnN0IGJhc2UgPSAoaW5fcHRyICsgaSAqIHN1YlNpemUpID4+PiAwOwogICAgY29uc3QgdXNlcmRhdGEgPSBidWZmZXIuZ2V0QmlnVWludDY0KGJhc2UsIHRydWUpOwogICAgY29uc3QgZXZlbnR0eXBlID0gYnVmZmVyLmdldFVpbnQ4KGJhc2UgKyA4KTsKCiAgICBpZiAoZXZlbnR0eXBlID09PSB3YXNpLkVWRU5UVFlQRV9GRF9SRUFEIHx8IGV2ZW50dHlwZSA9PT0gd2FzaS5FVkVOVFRZUEVfRkRfV1JJVEUpIHsKICAgICAgY29uc3QgZmQgPSBidWZmZXIuZ2V0VWludDMyKGJhc2UgKyAxNiwgdHJ1ZSk7CgogICAgICBpZiAoZXZlbnR0eXBlID09PSB3YXNpLkVWRU5UVFlQRV9GRF9XUklURSkgewogICAgICAgIHJlYWR5LnB1c2goeyB1c2VyZGF0YSwgZXZlbnR0eXBlIH0pOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZiAoZmQgPT09IDApIHsKICAgICAgICBjb25zdCBzdGRpblJlYWR5ID0gQm9vbGVhbihzdGRpbkZkICYmIChzdGRpbkZkLnRvdGFsID4gMCB8fCBzdGRpbkZkLmNsb3NlZCkpOwogICAgICAgIGlmIChzdGRpblJlYWR5KSByZWFkeS5wdXNoKHsgdXNlcmRhdGEsIGV2ZW50dHlwZSB9KTsKICAgICAgICBlbHNlIG5lZWRTdGRpbiA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIC8vIEZvciBub24tc3RkaW4gZmRzLCBhc3N1bWUgcmVhZGFiaWxpdHkuIE5lb3ZpbStsaWJ1diB1c2VzIHBvbGxfb25lb2ZmCiAgICAgIC8vIGZvciB2YXJpb3VzIGludGVybmFsIGhhbmRsZXM7IHJldHVybmluZyBOT1RTVVAgY2FuIHN0YWxsIHRoZSBsb29wLgogICAgICByZWFkeS5wdXNoKHsgdXNlcmRhdGEsIGV2ZW50dHlwZSB9KTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgaWYgKGV2ZW50dHlwZSA9PT0gd2FzaS5FVkVOVFRZUEVfQ0xPQ0spIHsKICAgICAgY29uc3QgY2xvY2tpZCA9IGJ1ZmZlci5nZXRVaW50MzIoYmFzZSArIDE2LCB0cnVlKTsKICAgICAgY29uc3QgdGltZW91dCA9IGJ1ZmZlci5nZXRCaWdVaW50NjQoYmFzZSArIDI0LCB0cnVlKTsKICAgICAgY29uc3QgZmxhZ3MgPSBidWZmZXIuZ2V0VWludDE2KGJhc2UgKyAzNiwgdHJ1ZSk7CiAgICAgIGNvbnN0IGdldE5vdyA9IGNsb2NraWQgPT09IHdhc2kuQ0xPQ0tJRF9NT05PVE9OSUMKICAgICAgICA/IG5vd05zCiAgICAgICAgOiAoY2xvY2tpZCA9PT0gd2FzaS5DTE9DS0lEX1JFQUxUSU1FID8gbm93UmVhbE5zIDogbnVsbCk7CiAgICAgIGlmICghZ2V0Tm93KSByZXR1cm4gd2FzaS5FUlJOT19JTlZBTDsKCiAgICAgIGNvbnN0IG5vdyA9IGdldE5vdygpOwogICAgICBjb25zdCBpc0FicyA9IChmbGFncyAmIHdhc2kuU1VCQ0xPQ0tGTEFHU19TVUJTQ1JJUFRJT05fQ0xPQ0tfQUJTVElNRSkgIT09IDA7CiAgICAgIGNvbnN0IGVuZFRpbWUgPSB1c2VQZW5kaW5nICYmIHBlbmRpbmdQb2xsT25lb2ZmPy5jbG9ja0RlYWRsaW5lcz8uW2ldICE9IG51bGwKICAgICAgICA/IEJpZ0ludChwZW5kaW5nUG9sbE9uZW9mZiEuY2xvY2tEZWFkbGluZXNbaV0hKQogICAgICAgIDogKGlzQWJzID8gdGltZW91dCA6IChub3cgKyB0aW1lb3V0KSk7CiAgICAgIGNsb2NrRGVhZGxpbmVzW2ldID0gZW5kVGltZTsKICAgICAgaWYgKGVuZFRpbWUgPD0gbm93KSB7CiAgICAgICAgcmVhZHkucHVzaCh7IHVzZXJkYXRhLCBldmVudHR5cGUgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgZGVsdGEgPSBlbmRUaW1lIC0gbm93OwogICAgICAgIGlmIChuZXh0RGVsdGFOcyA9PT0gbnVsbCB8fCBkZWx0YSA8IG5leHREZWx0YU5zKSBuZXh0RGVsdGFOcyA9IGRlbHRhOwogICAgICB9CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIHJldHVybiB3YXNpLkVSUk5PX05PVFNVUDsKICB9CgogIGlmIChyZWFkeS5sZW5ndGggPiAwKSB7CiAgICBpZiAoc3RhdGUgPT09IDIpIHN0b3BSZXdpbmRJZk5lZWRlZCgpOwogICAgcGVuZGluZ1BvbGxPbmVvZmYgPSBudWxsOwogICAgY29uc3Qgb3V0ID0gbmV3IERhdGFWaWV3KHdhc21FeHBvcnRzLm1lbW9yeS5idWZmZXIpOwogICAgY29uc3QgY291bnQgPSBNYXRoLm1pbihyZWFkeS5sZW5ndGgsIG5zKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkgewogICAgICBjb25zdCBldiA9IHJlYWR5W2ldOwogICAgICBjb25zdCBldmVudCA9IG5ldyAod2FzaSBhcyBhbnkpLkV2ZW50KGV2LnVzZXJkYXRhLCB3YXNpLkVSUk5PX1NVQ0NFU1MsIGV2LmV2ZW50dHlwZSk7CiAgICAgIGV2ZW50LndyaXRlX2J5dGVzKG91dCBhcyBhbnksIChvdXRfcHRyICsgaSAqIGV2ZW50U2l6ZSkgPj4+IDApOwogICAgfQogICAgaWYgKHR5cGVvZiBuZXZlbnRzX3B0ciA9PT0gIm51bWJlciIpIG91dC5zZXRVaW50MzIobmV2ZW50c19wdHIsIGNvdW50LCB0cnVlKTsKICAgIHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7CiAgfQoKICBjb25zdCB3YWl0czogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTsKICBjb25zdCBjYW5XYWtlT25TdGRpbiA9IEJvb2xlYW4oc3RkaW5GZCAmJiAhc3RkaW5GZC5jbG9zZWQgJiYgc3RkaW5GZC50b3RhbCA9PT0gMCk7CiAgaWYgKChuZWVkU3RkaW4gfHwgY2FuV2FrZU9uU3RkaW4pICYmIHN0ZGluRmQgJiYgIXN0ZGluRmQuY2xvc2VkKSB3YWl0cy5wdXNoKGdldFN0ZGluV2FpdFByb21pc2UoKSk7CiAgaWYgKG5leHREZWx0YU5zICE9PSBudWxsKSB7CiAgICBjb25zdCBtYXhXYWl0TXMgPSA1MDsKICAgIGNvbnN0IHJhdyA9IE51bWJlcihuZXh0RGVsdGFOcyAvIDEwMDAwMDBuKTsKICAgIGNvbnN0IG1zID0gTnVtYmVyLmlzRmluaXRlKHJhdykgJiYgcmF3ID4gMCA/IHJhdyA6IDA7CiAgICB3YWl0cy5wdXNoKG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIE1hdGgubWluKG1zLCBtYXhXYWl0TXMpKSkpOwogIH0KCiAgaWYgKHdhaXRzLmxlbmd0aCA9PT0gMCkgewogICAgaWYgKHR5cGVvZiBuZXZlbnRzX3B0ciA9PT0gIm51bWJlciIpIGJ1ZmZlci5zZXRVaW50MzIobmV2ZW50c19wdHIsIDAsIHRydWUpOwogICAgcmV0dXJuIHdhc2kuRVJSTk9fU1VDQ0VTUzsKICB9CgogIGlmIChzdGF0ZSA9PT0gMikgc3RvcFJld2luZElmTmVlZGVkKCk7CiAgaWYgKHN0YXRlID09PSAwIHx8IHN0YXRlID09PSAyKSB7CiAgICBwZW5kaW5nUG9sbE9uZW9mZiA9IHsgaW5fcHRyOiAoaW5fcHRyID4+PiAwKSwgbnN1YnNjcmlwdGlvbnM6IG5zLCBjbG9ja0RlYWRsaW5lcyB9OwogICAgc3RhcnRVbndpbmQod2FpdHMubGVuZ3RoID09PSAxID8gd2FpdHNbMF0gOiBQcm9taXNlLnJhY2Uod2FpdHMpKTsKICAgIGlmICh0eXBlb2YgbmV2ZW50c19wdHIgPT09ICJudW1iZXIiKSBuZXcgRGF0YVZpZXcod2FzbUV4cG9ydHMubWVtb3J5LmJ1ZmZlcikuc2V0VWludDMyKG5ldmVudHNfcHRyLCAwLCB0cnVlKTsKICAgIHJldHVybiB3YXNpLkVSUk5PX1NVQ0NFU1M7CiAgfQoKICBpZiAodHlwZW9mIG5ldmVudHNfcHRyID09PSAibnVtYmVyIikgYnVmZmVyLnNldFVpbnQzMihuZXZlbnRzX3B0ciwgMCwgdHJ1ZSk7CiAgcmV0dXJuIHdhc2kuRVJSTk9fU1VDQ0VTUzsKfQoKZnVuY3Rpb24gZ2V0U3RkaW5XYWl0UHJvbWlzZSgpOiBQcm9taXNlPHZvaWQ+IHsKICBpZiAoIXN0ZGluRmQgfHwgc3RkaW5GZC5jbG9zZWQgfHwgc3RkaW5GZC50b3RhbCA+IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICBpZiAoIXN0ZGluV2FpdFByb21pc2UpIHsKICAgIHN0ZGluV2FpdFByb21pc2UgPSBzdGRpbkZkLndhaXRGb3JEYXRhKCkuZmluYWxseSgoKSA9PiB7IHN0ZGluV2FpdFByb21pc2UgPSBudWxsOyB9KTsKICB9CiAgcmV0dXJuIHN0ZGluV2FpdFByb21pc2U7Cn0KCmZ1bmN0aW9uIGluaXRBc3luY2lmeShleHBvcnRzOiBhbnkpIHsKICBpZiAoIWV4cG9ydHM/Lm1lbW9yeSkgdGhyb3cgbmV3IEVycm9yKCJhc3luY2lmeTogbWlzc2luZyBleHBvcnRlZCBtZW1vcnkiKTsKICBpZiAodHlwZW9mIGV4cG9ydHMuYXN5bmNpZnlfc3RhcnRfdW53aW5kICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgRXJyb3IoImFzeW5jaWZ5OiBtaXNzaW5nIGV4cG9ydHMiKTsKCiAgaWYgKAogICAgdHlwZW9mIGV4cG9ydHMubnZpbV9hc3luY2lmeV9nZXRfZGF0YV9wdHIgPT09ICJmdW5jdGlvbiIKICAgICYmIHR5cGVvZiBleHBvcnRzLm52aW1fYXN5bmNpZnlfZ2V0X3N0YWNrX3N0YXJ0ID09PSAiZnVuY3Rpb24iCiAgICAmJiB0eXBlb2YgZXhwb3J0cy5udmltX2FzeW5jaWZ5X2dldF9zdGFja19lbmQgPT09ICJmdW5jdGlvbiIKICApIHsKICAgIGFzeW5jaWZ5RGF0YVB0ciA9IGV4cG9ydHMubnZpbV9hc3luY2lmeV9nZXRfZGF0YV9wdHIoKSA+Pj4gMDsKICAgIGFzeW5jaWZ5U3RhY2tTdGFydCA9IGV4cG9ydHMubnZpbV9hc3luY2lmeV9nZXRfc3RhY2tfc3RhcnQoKSA+Pj4gMDsKICAgIGFzeW5jaWZ5U3RhY2tFbmQgPSBleHBvcnRzLm52aW1fYXN5bmNpZnlfZ2V0X3N0YWNrX2VuZCgpID4+PiAwOwogICAgcmVzZXRBc3luY2lmeURhdGEoKTsKICAgIHJldHVybjsKICB9CgogIGNvbnN0IHN0YWNrU2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CiAgY29uc3QgcGFnZVNpemUgPSA2NTUzNjsKICBjb25zdCBleHRyYSA9IHN0YWNrU2l6ZSArIDY0OwogIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGV4dHJhIC8gcGFnZVNpemUpOwogIGV4cG9ydHMubWVtb3J5Lmdyb3cocGFnZXMpOwoKICBjb25zdCBlbmQgPSBleHBvcnRzLm1lbW9yeS5idWZmZXIuYnl0ZUxlbmd0aCA+Pj4gMDsKICBhc3luY2lmeVN0YWNrRW5kID0gZW5kOwogIGNvbnN0IHJhd1N0YWNrU3RhcnQgPSAoZW5kIC0gc3RhY2tTaXplKSA+Pj4gMDsKICBhc3luY2lmeURhdGFQdHIgPSAoKHJhd1N0YWNrU3RhcnQgLSA4KSAmIH4weDcpID4+PiAwOwogIGFzeW5jaWZ5U3RhY2tTdGFydCA9IChhc3luY2lmeURhdGFQdHIgKyA4KSA+Pj4gMDsKICByZXNldEFzeW5jaWZ5RGF0YSgpOwp9CgpmdW5jdGlvbiByZXNldEFzeW5jaWZ5RGF0YSgpIHsKICBpZiAoIXdhc21FeHBvcnRzPy5tZW1vcnkpIHJldHVybjsKICBpZiAoIWFzeW5jaWZ5RGF0YVB0ciB8fCAhYXN5bmNpZnlTdGFja1N0YXJ0IHx8ICFhc3luY2lmeVN0YWNrRW5kKSByZXR1cm47CiAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh3YXNtRXhwb3J0cy5tZW1vcnkuYnVmZmVyKTsKICB2aWV3LnNldEludDMyKGFzeW5jaWZ5RGF0YVB0ciwgYXN5bmNpZnlTdGFja1N0YXJ0LCB0cnVlKTsKICB2aWV3LnNldEludDMyKGFzeW5jaWZ5RGF0YVB0ciArIDQsIGFzeW5jaWZ5U3RhY2tFbmQsIHRydWUpOwp9CgpmdW5jdGlvbiBzdGFydFVud2luZChwcm9taXNlOiBQcm9taXNlPHZvaWQ+KSB7CiAgaWYgKCF3YXNtRXhwb3J0cyB8fCAhYXN5bmNpZnlEYXRhUHRyKSB0aHJvdyBuZXcgRXJyb3IoImFzeW5jaWZ5OiBub3QgaW5pdGlhbGl6ZWQiKTsKICBpZiAocGVuZGluZ0FzeW5jKSB0aHJvdyBuZXcgRXJyb3IoImFzeW5jaWZ5OiBvdmVybGFwcGluZyBhc3luYyBvcGVyYXRpb24iKTsKICByZXNldEFzeW5jaWZ5RGF0YSgpOwogIHBlbmRpbmdBc3luYyA9IHByb21pc2U7CiAgd2FzbUV4cG9ydHMuYXN5bmNpZnlfc3RhcnRfdW53aW5kKGFzeW5jaWZ5RGF0YVB0cik7Cn0KCmZ1bmN0aW9uIHN0b3BSZXdpbmRJZk5lZWRlZCgpIHsKICBpZiAoIXdhc21FeHBvcnRzPy5hc3luY2lmeV9nZXRfc3RhdGUgfHwgIXdhc21FeHBvcnRzPy5hc3luY2lmeV9zdG9wX3Jld2luZCkgcmV0dXJuOwogIGlmICh3YXNtRXhwb3J0cy5hc3luY2lmeV9nZXRfc3RhdGUoKSA9PT0gMikgewogICAgd2FzbUV4cG9ydHMuYXN5bmNpZnlfc3RvcF9yZXdpbmQoKTsKICAgIHJlc2V0QXN5bmNpZnlEYXRhKCk7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW5Bc3luY2lmaWVkU3RhcnQoZXhwb3J0czogYW55KTogUHJvbWlzZTxudW1iZXI+IHsKICB3aGlsZSAodHJ1ZSkgewogICAgdHJ5IHsKICAgICAgZXhwb3J0cy5fc3RhcnQoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgV0FTSVByb2NFeGl0KSByZXR1cm4gZXJyLmNvZGU7CiAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICBjb25zdCBzdGF0ZSA9IGV4cG9ydHMuYXN5bmNpZnlfZ2V0X3N0YXRlKCk7CiAgICBpZiAoc3RhdGUgPT09IDApIHJldHVybiAwOwogICAgaWYgKHN0YXRlID09PSAyKSB7CiAgICAgIGV4cG9ydHMuYXN5bmNpZnlfc3RvcF9yZXdpbmQoKTsKICAgICAgcmVzZXRBc3luY2lmeURhdGEoKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoc3RhdGUgIT09IDEpIHRocm93IG5ldyBFcnJvcihgYXN5bmNpZnk6IHVuZXhwZWN0ZWQgc3RhdGUgJHtzdGF0ZX1gKTsKCiAgICBleHBvcnRzLmFzeW5jaWZ5X3N0b3BfdW53aW5kKCk7CiAgICBjb25zdCB3YWl0ID0gcGVuZGluZ0FzeW5jOwogICAgcGVuZGluZ0FzeW5jID0gbnVsbDsKICAgIGlmICghd2FpdCkgdGhyb3cgbmV3IEVycm9yKCJhc3luY2lmeTogbWlzc2luZyBwZW5kaW5nIHByb21pc2UiKTsKICAgIGF3YWl0IHdhaXQ7CiAgICBleHBvcnRzLmFzeW5jaWZ5X3N0YXJ0X3Jld2luZChhc3luY2lmeURhdGFQdHIpOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVkV2FzbUJ5dGVzKHVybDogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PiB7CiAgaWYgKGNhY2hlZFdhc20gJiYgY2FjaGVkV2FzbS51cmwgPT09IHVybCAmJiBjYWNoZWRXYXNtLmJ5dGVzPy5ieXRlTGVuZ3RoKSByZXR1cm4gY2FjaGVkV2FzbS5ieXRlczsKICBjb25zdCBieXRlcyA9IGF3YWl0IGZldGNoQnl0ZXModXJsKTsKICBjYWNoZWRXYXNtID0geyB1cmwsIGJ5dGVzIH07CiAgcmV0dXJuIGJ5dGVzOwp9Cgphc3luYyBmdW5jdGlvbiBnZXRDYWNoZWRSdW50aW1lRW50cmllcyh1cmw6IHN0cmluZyk6IFByb21pc2U8VGFyRW50cnlbXT4gewogIGlmIChjYWNoZWRSdW50aW1lICYmIGNhY2hlZFJ1bnRpbWUudXJsID09PSB1cmwgJiYgY2FjaGVkUnVudGltZS5lbnRyaWVzPy5sZW5ndGgpIHJldHVybiBjYWNoZWRSdW50aW1lLmVudHJpZXM7CiAgY29uc3QgYXJjaGl2ZSA9IGF3YWl0IGZldGNoQnl0ZXModXJsKTsKICBsZXQgcnVudGltZUJ5dGVzOiBVaW50OEFycmF5OwogIGlmIChsb29rc0xpa2VHemlwKGFyY2hpdmUpKSB7CiAgICB0cnkgewogICAgICBydW50aW1lQnl0ZXMgPSBndW56aXBTeW5jKGFyY2hpdmUpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGd1bnppcCBydW50aW1lIGZhaWxlZDogJHsoZSBhcyBFcnJvcik/Lm1lc3NhZ2UgPz8gZX1gKTsKICAgIH0KICB9IGVsc2UgewogICAgcnVudGltZUJ5dGVzID0gYXJjaGl2ZTsKICB9CiAgbGV0IGVudHJpZXM6IFRhckVudHJ5W107CiAgdHJ5IHsKICAgIGVudHJpZXMgPSB1bnRhcihydW50aW1lQnl0ZXMpOwogIH0gY2F0Y2ggKGUpIHsKICAgIHRocm93IG5ldyBFcnJvcihgdW50YXIgcnVudGltZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlID8/IGV9YCk7CiAgfQogIGNhY2hlZFJ1bnRpbWUgPSB7IHVybCwgZW50cmllcyB9OwogIHJldHVybiBlbnRyaWVzOwp9CgpmdW5jdGlvbiBhcHBseUV4dHJhRmlsZXMoZnNSb290OiBEaXJOb2RlLCBmaWxlczogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IGRhdGE6IGFueSB9PikgewogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgcmF3UGF0aCA9IFN0cmluZyhmaWxlPy5wYXRoID8/ICIiKTsKICAgIGNvbnN0IGNsZWFuID0gcmF3UGF0aC5yZXBsYWNlKC9eXC8rLywgIiIpLnJlcGxhY2UoL15cLlwvKy8sICIiKTsKICAgIGlmICghY2xlYW4gfHwgY2xlYW4uZW5kc1dpdGgoIi8iKSkgY29udGludWU7CiAgICBjb25zdCBkYXRhID0gdG9VOChmaWxlPy5kYXRhKTsKICAgIGlmICghZGF0YSkgY29udGludWU7CiAgICBjb25zdCBwYXJ0cyA9IGNsZWFuLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pOwogICAgaWYgKCFwYXJ0cy5sZW5ndGgpIGNvbnRpbnVlOwogICAgbGV0IGRpcjogRGlyTm9kZSA9IGZzUm9vdDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSArPSAxKSB7CiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaWYgKCFkaXIuY29udGVudHMuaGFzKHBhcnQpKSBkaXIuY29udGVudHMuc2V0KHBhcnQsIG5ldyBEaXJlY3RvcnkobmV3IE1hcCgpKSk7CiAgICAgIGRpciA9IGRpci5jb250ZW50cy5nZXQocGFydCkgYXMgRGlyTm9kZTsKICAgIH0KICAgIGNvbnN0IGxlYWYgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgIGRpci5jb250ZW50cy5zZXQobGVhZiwgbmV3IEZpbGUoZGF0YSwgeyByZWFkb25seTogZmFsc2UgfSkpOwogIH0KfQoKZnVuY3Rpb24gdG9VOChkYXRhOiBhbnkpOiBVaW50OEFycmF5IHwgbnVsbCB7CiAgaWYgKCFkYXRhKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKTsKICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBkYXRhOwogIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKICBpZiAoZGF0YSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKICBpZiAoZGF0YSAmJiBkYXRhLnR5cGUgPT09ICJCdWZmZXIiICYmIEFycmF5LmlzQXJyYXkoZGF0YS5kYXRhKSkgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuZGF0YSk7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoU3RyaW5nKGRhdGEpKTsKICB9IGNhdGNoIChfKSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmZ1bmN0aW9uIGhhbmRsZVN0ZG91dChjaHVuazogVWludDhBcnJheSkgewogIGlmICghcnBjRGVjb2RlcikgewogICAgcnBjRGVjb2RlciA9IG5ldyBEZWNvZGVyKGhhbmRsZU1lc3NhZ2UpOwogIH0KICB0cnkgewogICAgcnBjRGVjb2Rlci5wdXNoKGNodW5rKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHZvaWQgZXJyOwogICAgcnBjRGVjb2RlciA9IG5ldyBEZWNvZGVyKGhhbmRsZU1lc3NhZ2UpOwogIH0KfQoKZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShtc2c6IHVua25vd24pIHsKICBpZiAoIUFycmF5LmlzQXJyYXkobXNnKSB8fCBtc2cubGVuZ3RoIDwgMSkgcmV0dXJuOwogIGNvbnN0IGtpbmQgPSBtc2dbMF07CiAgaWYgKGtpbmQgPT09IDApIHsKICAgIGNvbnN0IFssIG1zZ2lkLCBtZXRob2QsIHBhcmFtc10gPSBtc2cgYXMgYW55OwogICAgaWYgKG1ldGhvZCA9PT0gIndhc20tY2xpcGJvYXJkLXBhc3RlIikgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJjbGlwYm9hcmQtcGFzdGUiLCBtc2dpZCB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInJwYy1yZXF1ZXN0IiwgbXNnaWQsIG1ldGhvZCwgcGFyYW1zIH0pOwogICAgfQogIH0gZWxzZSBpZiAoa2luZCA9PT0gMSkgewogICAgY29uc3QgWywgbXNnaWQsIGVycm9yLCByZXN1bHRdID0gbXNnIGFzIGFueTsKICAgIHBvc3RNZXNzYWdlKHsgdHlwZTogInJwYy1yZXNwb25zZSIsIG1zZ2lkLCBlcnJvciwgcmVzdWx0IH0pOwogIH0gZWxzZSBpZiAoa2luZCA9PT0gMikgewogICAgY29uc3QgWywgbWV0aG9kLCBwYXJhbXNdID0gbXNnIGFzIGFueTsKICAgIGlmIChtZXRob2QgPT09ICJ3YXNtLWNsaXBib2FyZC1jb3B5IikgewogICAgICBjb25zdCBsaW5lcyA9IEFycmF5LmlzQXJyYXkoKHBhcmFtcyBhcyBhbnkpPy5bMF0pID8gKHBhcmFtcyBhcyBhbnkpWzBdIDogW107CiAgICAgIGNvbnN0IHJlZ3R5cGUgPSB0eXBlb2YgKHBhcmFtcyBhcyBhbnkpPy5bMV0gPT09ICJzdHJpbmciID8gKHBhcmFtcyBhcyBhbnkpWzFdIDogInYiOwogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJjbGlwYm9hcmQtY29weSIsIGxpbmVzLCByZWd0eXBlIH0pOwogICAgfSBlbHNlIGlmICgKICAgICAgbWV0aG9kID09PSAibnZpbV9idWZfbGluZXNfZXZlbnQiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm52aW1fYnVmX2RldGFjaF9ldmVudCIKICAgICAgfHwgbWV0aG9kID09PSAicmVkcmF3IgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fY3Vyc29yIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fbW9kZSIKICAgICAgfHwgbWV0aG9kID09PSAibW9uYWNvX2N1cnNvck1vdmUiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm1vbmFjb19zY3JvbGwiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm1vbmFjb19yZXZlYWwiCiAgICAgIHx8IG1ldGhvZCA9PT0gIm1vbmFjb19tb3ZlQ3Vyc29yIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fc2Nyb2xsb2ZmIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29faG9zdF9jb21tYW5kIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fYnVmX2VudGVyIgogICAgICB8fCBtZXRob2QgPT09ICJtb25hY29fYnVmX2RlbGV0ZSIKICAgICkgewogICAgICBwb3N0TWVzc2FnZSh7IHR5cGU6ICJycGMtbm90aWZ5IiwgbWV0aG9kLCBwYXJhbXMgfSk7CiAgICB9CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBmZXRjaEJ5dGVzKHVybDogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PiB7CiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsKTsKICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGBmZXRjaCAke3VybH0gZmFpbGVkICgke3Jlcy5zdGF0dXN9KWApOwogIGNvbnN0IGN0ID0gKHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgaWYgKGN0LmluY2x1ZGVzKCJ0ZXh0L2h0bWwiKSkgdGhyb3cgbmV3IEVycm9yKGBmZXRjaCAke3VybH0gcmV0dXJuZWQgSFRNTCAobGlrZWx5IHdyb25nIHBhdGggb3IgZGV2IHNlcnZlciBmYWxsYmFjaylgKTsKICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpOwogIGlmICghZGF0YS5ieXRlTGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYGZldGNoICR7dXJsfSByZXR1cm5lZCBlbXB0eSBib2R5YCk7CiAgcmV0dXJuIGRhdGE7Cn0KCnR5cGUgVGFyRW50cnkgPSB7IG5hbWU6IHN0cmluZzsgdHlwZTogImRpciIgfCAiZmlsZSI7IGRhdGE6IFVpbnQ4QXJyYXkgfTsKCmZ1bmN0aW9uIGxvb2tzTGlrZUd6aXAoZGF0YTogVWludDhBcnJheSkgewogIHJldHVybiBkYXRhICYmIGRhdGEubGVuZ3RoID49IDIgJiYgZGF0YVswXSA9PT0gMHgxZiAmJiBkYXRhWzFdID09PSAweDhiOwp9CgpmdW5jdGlvbiB1bnRhcihieXRlczogVWludDhBcnJheSk6IFRhckVudHJ5W10gewogIGNvbnN0IGZpbGVzOiBUYXJFbnRyeVtdID0gW107CiAgY29uc3QgZGF0YSA9IGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ5dGVzIDogbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpOwogIGxldCBvZmZzZXQgPSAwOwogIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTsKICBsZXQgc2FmZXR5ID0gMDsKCiAgd2hpbGUgKG9mZnNldCArIDUxMiA8PSBkYXRhLmxlbmd0aCkgewogICAgaWYgKHNhZmV0eSsrID4gMTAwXzAwMCkgdGhyb3cgbmV3IEVycm9yKCJ1bnRhciBzYWZldHkgYnJlYWsiKTsKICAgIGNvbnN0IG5hbWUgPSBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlciwgZGF0YSwgb2Zmc2V0LCAxMDApOwogICAgY29uc3Qgc2l6ZVRleHQgPSBkZWNvZGVUYXJTdHJpbmcoZGVjb2RlciwgZGF0YSwgb2Zmc2V0ICsgMTI0LCAxMik7CiAgICBjb25zdCB0eXBlZmxhZyA9IGRhdGFbb2Zmc2V0ICsgMTU2XTsKICAgIGNvbnN0IHByZWZpeCA9IGRlY29kZVRhclN0cmluZyhkZWNvZGVyLCBkYXRhLCBvZmZzZXQgKyAzNDUsIDE1NSk7CiAgICBpZiAoIW5hbWUgJiYgIXByZWZpeCkgYnJlYWs7CiAgICBjb25zdCBzaXplUmF3ID0gc2l6ZVRleHQudHJpbSgpIHx8ICIwIjsKICAgIGNvbnN0IHNpemUgPSBwYXJzZUludChzaXplUmF3LCA4KTsKICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNpemUpIHx8IHNpemUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdGFyIHNpemU6ICR7c2l6ZVJhd31gKTsKICAgIGNvbnN0IGZ1bGxOYW1lID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7CiAgICBjb25zdCBib2R5U3RhcnQgPSBvZmZzZXQgKyA1MTI7CiAgICBjb25zdCBib2R5RW5kID0gYm9keVN0YXJ0ICsgc2l6ZTsKICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhLnNsaWNlKGJvZHlTdGFydCwgYm9keUVuZCk7CiAgICBmaWxlcy5wdXNoKHsgbmFtZTogZnVsbE5hbWUsIHR5cGU6IHR5cGVmbGFnID09PSA1MyA/ICJkaXIiIDogImZpbGUiLCBkYXRhOiBwYXlsb2FkIH0pOwogICAgY29uc3QgYmxvY2tzID0gTWF0aC5jZWlsKHNpemUgLyA1MTIpOwogICAgY29uc3QgbmV4dCA9IGJvZHlTdGFydCArIGJsb2NrcyAqIDUxMjsKICAgIGlmIChuZXh0IDw9IG9mZnNldCkgdGhyb3cgbmV3IEVycm9yKCJ0YXIgcGFyc2UgZGlkIG5vdCBhZHZhbmNlIik7CiAgICBvZmZzZXQgPSBuZXh0OwogIH0KICByZXR1cm4gZmlsZXM7Cn0KCmZ1bmN0aW9uIGRlY29kZVRhclN0cmluZyhkZWNvZGVyOiBUZXh0RGVjb2RlciwgZGF0YTogVWludDhBcnJheSwgc3RhcnQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgewogIGxldCBlbmQgPSBzdGFydDsKICBjb25zdCBtYXggPSBzdGFydCArIGxlbmd0aDsKICB3aGlsZSAoZW5kIDwgbWF4ICYmIGRhdGFbZW5kXSAhPT0gMCkgZW5kICs9IDE7CiAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGRhdGEuc3ViYXJyYXkoc3RhcnQsIGVuZCkpLnRyaW0oKTsKfQoKZnVuY3Rpb24gYnVpbGRGcyhlbnRyaWVzOiBUYXJFbnRyeVtdLCBvblByb2dyZXNzPzogKGNvdW50OiBudW1iZXIpID0+IHZvaWQpIHsKICBjb25zdCByb290ID0gbmV3IERpcmVjdG9yeShuZXcgTWFwKCkpIGFzIERpck5vZGU7CiAgbGV0IGNvdW50ID0gMDsKICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgIGNvbnN0IGNsZWFuID0gZW50cnkubmFtZS5yZXBsYWNlKC9eXC5cLz8vLCAiIik7CiAgICBpZiAoIWNsZWFuKSBjb250aW51ZTsKICAgIGNvbnN0IHBhcnRzID0gY2xlYW4uc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7CiAgICBpZiAoIXBhcnRzLmxlbmd0aCkgY29udGludWU7CiAgICBjb3VudCArPSAxOwogICAgaWYgKG9uUHJvZ3Jlc3MgJiYgY291bnQgJSA1MDAgPT09IDApIG9uUHJvZ3Jlc3MoY291bnQpOwoKICAgIGxldCBkaXI6IERpck5vZGUgPSByb290OwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpICs9IDEpIHsKICAgICAgY29uc3QgcGFydCA9IHBhcnRzW2ldOwogICAgICBpZiAoIWRpci5jb250ZW50cy5oYXMocGFydCkpIGRpci5jb250ZW50cy5zZXQocGFydCwgbmV3IERpcmVjdG9yeShuZXcgTWFwKCkpKTsKICAgICAgZGlyID0gZGlyLmNvbnRlbnRzLmdldChwYXJ0KSBhcyBEaXJOb2RlOwogICAgfQoKICAgIGNvbnN0IGxlYWYgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKICAgIGlmIChlbnRyeS50eXBlID09PSAiZGlyIikgewogICAgICBpZiAoIWRpci5jb250ZW50cy5oYXMobGVhZikpIGRpci5jb250ZW50cy5zZXQobGVhZiwgbmV3IERpcmVjdG9yeShuZXcgTWFwKCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIGRpci5jb250ZW50cy5zZXQobGVhZiwgbmV3IEZpbGUoZW50cnkuZGF0YSwgeyByZWFkb25seTogdHJ1ZSB9KSk7CiAgICB9CiAgfQoKICBlbnN1cmVEaXIocm9vdCwgImhvbWUiKTsKICBlbnN1cmVEaXIocm9vdCwgInRtcCIpOwogIGVuc3VyZURpcihyb290LCAiaG9tZS8uY29uZmlnIik7CiAgZW5zdXJlRGlyKHJvb3QsICJob21lLy5sb2NhbC9zaGFyZSIpOwogIGVuc3VyZURpcihyb290LCAiaG9tZS8ubG9jYWwvc3RhdGUiKTsKCiAgcmV0dXJuIHJvb3Q7Cn0KCmZ1bmN0aW9uIGVuc3VyZURpcihyb290OiBEaXJOb2RlLCBwYXRoOiBzdHJpbmcpIHsKICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7CiAgbGV0IG5vZGU6IERpck5vZGUgPSByb290OwogIGZvciAoY29uc3QgcCBvZiBwYXJ0cykgewogICAgaWYgKCFub2RlLmNvbnRlbnRzLmhhcyhwKSkgbm9kZS5jb250ZW50cy5zZXQocCwgbmV3IERpcmVjdG9yeShuZXcgTWFwKCkpKTsKICAgIG5vZGUgPSBub2RlLmNvbnRlbnRzLmdldChwKSBhcyBEaXJOb2RlOwogIH0KfQoKZnVuY3Rpb24gbWFrZUVudihwcm9jRXhpdD86IChjb2RlOiBudW1iZXIpID0+IHZvaWQpIHsKICBjb25zdCB3YXNtQW55ID0gV2ViQXNzZW1ibHkgYXMgYW55OwogIGNvbnN0IGNMb25nam1wID0gbmV3IHdhc21BbnkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXSwgcmVzdWx0czogW10gfSkgYXMgYW55OwogIHJldHVybiB7CiAgICBmbG9jazogKCkgPT4gMCwKICAgIGdldHBpZDogKCkgPT4gMSwKICAgIHV2X3JhbmRvbTogKCkgPT4gLTM4LAogICAgdXZfd3RmOF90b191dGYxNjogKCkgPT4ge30sCiAgICB1dl91dGYxNl9sZW5ndGhfYXNfd3RmODogKCkgPT4gMCwKICAgIHV2X3V0ZjE2X3RvX3d0Zjg6ICgpID0+IC0zOCwKICAgIHV2X3d0ZjhfbGVuZ3RoX2FzX3V0ZjE2OiAoKSA9PiAwLAogICAgX193YXNtX2xvbmdqbXA6IChwdHI6IG51bWJlcikgPT4gewogICAgICBpZiAocHJvY0V4aXQpIHByb2NFeGl0KDEpOwogICAgICB0aHJvdyBuZXcgd2FzbUFueS5FeGNlcHRpb24oY0xvbmdqbXAsIFtwdHIgPz8gMF0pOwogICAgfSwKICAgIF9fd2FzbV9zZXRqbXA6ICgpID0+IDAsCiAgICBfX3dhc21fc2V0am1wX3Rlc3Q6ICgpID0+IDAsCiAgICB0bXBmaWxlOiAoKSA9PiAwLAogICAgY2xvY2s6ICgpID0+IDAsCiAgICBzeXN0ZW06ICgpID0+IC0xLAogICAgdG1wbmFtOiAoKSA9PiAwLAogICAgX19jX2xvbmdqbXA6IGNMb25nam1wLAogIH0gYXMgV2ViQXNzZW1ibHkuTW9kdWxlSW1wb3J0czsKfQoKY2xhc3MgUm9vdGVkUHJlb3BlbkRpcmVjdG9yeSBleHRlbmRzIFByZW9wZW5EaXJlY3RvcnkgewogICNzdHJpcChwYXRoOiBzdHJpbmcpIHsgcmV0dXJuIHBhdGgucmVwbGFjZSgvXlwvKy8sICIiKTsgfQogIHBhdGhfb3BlbigKICAgIGRpcmZsYWdzOiBudW1iZXIsCiAgICBwYXRoX3N0cjogc3RyaW5nLAogICAgb2ZsYWdzOiBudW1iZXIsCiAgICBmc19yaWdodHNfYmFzZTogYmlnaW50LAogICAgZnNfcmlnaHRzX2luaGVyaXRpbmc6IGJpZ2ludCwKICAgIGZkX2ZsYWdzOiBudW1iZXIsCiAgKSB7CiAgICByZXR1cm4gc3VwZXIucGF0aF9vcGVuKGRpcmZsYWdzLCB0aGlzLiNzdHJpcChwYXRoX3N0ciksIG9mbGFncywgZnNfcmlnaHRzX2Jhc2UsIGZzX3JpZ2h0c19pbmhlcml0aW5nLCBmZF9mbGFncyk7CiAgfQogIHBhdGhfZmlsZXN0YXRfZ2V0KGZsYWdzOiBudW1iZXIsIHBhdGhfc3RyOiBzdHJpbmcpIHsgcmV0dXJuIHN1cGVyLnBhdGhfZmlsZXN0YXRfZ2V0KGZsYWdzLCB0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF9jcmVhdGVfZGlyZWN0b3J5KHBhdGhfc3RyOiBzdHJpbmcpIHsgcmV0dXJuIHN1cGVyLnBhdGhfY3JlYXRlX2RpcmVjdG9yeSh0aGlzLiNzdHJpcChwYXRoX3N0cikpOyB9CiAgcGF0aF91bmxpbmtfZmlsZShwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX3VubGlua19maWxlKHRoaXMuI3N0cmlwKHBhdGhfc3RyKSk7IH0KICBwYXRoX3JlbW92ZV9kaXJlY3RvcnkocGF0aF9zdHI6IHN0cmluZykgeyByZXR1cm4gc3VwZXIucGF0aF9yZW1vdmVfZGlyZWN0b3J5KHRoaXMuI3N0cmlwKHBhdGhfc3RyKSk7IH0KICBwYXRoX2xpbmsocGF0aF9zdHI6IHN0cmluZywgaW5vZGU6IElub2RlLCBhbGxvd19kaXI6IGJvb2xlYW4pIHsgcmV0dXJuIHN1cGVyLnBhdGhfbGluayh0aGlzLiNzdHJpcChwYXRoX3N0ciksIGlub2RlLCBhbGxvd19kaXIpOyB9CiAgcGF0aF9yZWFkbGluayhwYXRoX3N0cjogc3RyaW5nKSB7IHJldHVybiBzdXBlci5wYXRoX3JlYWRsaW5rKHRoaXMuI3N0cmlwKHBhdGhfc3RyKSk7IH0KICBwYXRoX3N5bWxpbmsob2xkX3BhdGg6IHN0cmluZywgbmV3X3BhdGg6IHN0cmluZykgewogICAgY29uc3QgdGFyZ2V0ID0gKFByZW9wZW5EaXJlY3RvcnkucHJvdG90eXBlIGFzIHVua25vd24gYXMgeyBwYXRoX3N5bWxpbms/OiAob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpID0+IG51bWJlciB9KS5wYXRoX3N5bWxpbms7CiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIHdhc2kuRVJSTk9fTk9UU1VQOwogICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIHRoaXMuI3N0cmlwKG9sZF9wYXRoKSwgdGhpcy4jc3RyaXAobmV3X3BhdGgpKTsKICB9Cn0KCg==", import.meta.url);
3911
+ const ke = new URL("./nvimWorker.worker.js", import.meta.url), Pe = new URL("./nvimWorkerAsyncify.worker.js", import.meta.url);
3912
3912
  export {
3913
- fe as MonacoNeovimClient,
3914
- he as NeovimWasmSession,
3915
- Se as createMonacoNeovim,
3916
- He as defaultWorkerUrl,
3917
- Ye as defaultWorkerUrlAsyncify,
3918
- de as isSharedArrayBufferAvailable
3913
+ _e as MonacoNeovimClient,
3914
+ fe as NeovimWasmSession,
3915
+ Ae as createMonacoNeovim,
3916
+ ke as defaultWorkerUrl,
3917
+ Pe as defaultWorkerUrlAsyncify,
3918
+ he as isSharedArrayBufferAvailable
3919
3919
  };