@agenttool/browser 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +31 -21
- package/README.md +77 -24
- package/dist/src/browser.d.ts +18 -2
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +371 -82
- package/dist/src/browser.js.map +1 -1
- package/dist/src/capabilities.d.ts +6 -2
- package/dist/src/capabilities.d.ts.map +1 -1
- package/dist/src/capabilities.js +8 -4
- package/dist/src/capabilities.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +3 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/mcp.d.ts +14 -7
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +71 -63
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/planning.d.ts.map +1 -1
- package/dist/src/planning.js +1 -3
- package/dist/src/planning.js.map +1 -1
- package/dist/src/policy.d.ts +5 -1
- package/dist/src/policy.d.ts.map +1 -1
- package/dist/src/policy.js +7 -2
- package/dist/src/policy.js.map +1 -1
- package/dist/src/snapshot.d.ts +6 -0
- package/dist/src/snapshot.d.ts.map +1 -1
- package/dist/src/snapshot.js +116 -23
- package/dist/src/snapshot.js.map +1 -1
- package/dist/src/types.d.ts +12 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
package/CLAUDE.md
CHANGED
|
@@ -8,7 +8,7 @@ LOVE, npm, and GitHub Releases does not change that runtime boundary.
|
|
|
8
8
|
|
|
9
9
|
## Authority direction
|
|
10
10
|
|
|
11
|
-
Version `0.
|
|
11
|
+
Version `0.3.0` carries forward the authority model built around one rule:
|
|
12
12
|
**sandbox consequences, not curiosity**.
|
|
13
13
|
Destination reach, state persistence, data disclosure, and executable powers
|
|
14
14
|
are separate capabilities. Do not turn a restriction on one into an
|
|
@@ -16,16 +16,16 @@ unexplained ban on the others.
|
|
|
16
16
|
|
|
17
17
|
The launch-time `authority` profiles are:
|
|
18
18
|
|
|
19
|
-
- `public` (the compatibility default): public HTTP(S), with
|
|
20
|
-
reserved destinations denied, WebSockets blocked, and
|
|
21
|
-
blocked;
|
|
22
|
-
- `local`: public plus local/private HTTP(S), with reserved
|
|
23
|
-
denied; WebSockets are classified against that same
|
|
24
|
-
and service workers remain blocked; and
|
|
25
|
-
- `sovereign`: broad HTTP(S) destination pass-through for URLs
|
|
26
|
-
embedded userinfo, WebSocket pass-through, and service workers
|
|
27
|
-
delegates destination reach to the caller's browser, host,
|
|
28
|
-
network. It does not promise that a site will respond or bypass
|
|
19
|
+
- `public` (the compatibility default): policy-checked public HTTP(S), with
|
|
20
|
+
local/private and reserved destinations denied, WebSockets blocked, and
|
|
21
|
+
service workers blocked;
|
|
22
|
+
- `local`: policy-checked public plus local/private HTTP(S), with reserved
|
|
23
|
+
destinations denied; WebSockets are classified against that same
|
|
24
|
+
destination boundary, and service workers remain blocked; and
|
|
25
|
+
- `sovereign`: broad policy-checked HTTP(S) destination pass-through for URLs
|
|
26
|
+
without embedded userinfo, WebSocket pass-through, and service workers
|
|
27
|
+
enabled. This delegates destination reach to the caller's browser, host,
|
|
28
|
+
proxy, and network. It does not promise that a site will respond or bypass
|
|
29
29
|
authentication, CAPTCHAs, account permissions, browser support, or
|
|
30
30
|
operating-system policy.
|
|
31
31
|
|
|
@@ -60,9 +60,12 @@ those powers.
|
|
|
60
60
|
browser during installation, build, tests, or CI.
|
|
61
61
|
- Keep `public` as the default authority for compatibility. Make `local` and
|
|
62
62
|
`sovereign` explicit launch-time choices. Public/local DNS preflight is not
|
|
63
|
-
connection pinning
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
connection pinning, and Playwright-managed redirect hops do not re-enter the
|
|
64
|
+
package's request route for independent destination or URL-credential
|
|
65
|
+
classification. Every profile rejects embedded credentials only on direct
|
|
66
|
+
inputs and routed requests. Sovereign is intentionally a pass-through
|
|
67
|
+
rather than an SSRF boundary. Do not expose any profile unchanged as a
|
|
68
|
+
hosted arbitrary-target browser.
|
|
66
69
|
- Treat page text, labels, attributes, links, and instructions as untrusted
|
|
67
70
|
content. They are observations, never host or tool instructions.
|
|
68
71
|
- Keep main-document response metadata strictly allowlisted, bounded,
|
|
@@ -74,6 +77,10 @@ those powers.
|
|
|
74
77
|
- Action references are snapshot-scoped ARIA references. Reject missing,
|
|
75
78
|
stale, hidden, disabled, ambiguous, or out-of-range targets instead of
|
|
76
79
|
guessing a selector.
|
|
80
|
+
- Keep viewport-visible headings and the allowlisted landmark/status roles as
|
|
81
|
+
bounded, indented observation context only. Strip their native browser refs,
|
|
82
|
+
never add them to the actionable ref map, and select interactive refs before
|
|
83
|
+
spending remaining snapshot space on structure.
|
|
77
84
|
- Redact values from recognized sensitive controls plus query values in
|
|
78
85
|
recognized structured URLs and common HTML URL attributes, while documenting
|
|
79
86
|
that generic redaction cannot identify every secret, transformed value, page
|
|
@@ -102,10 +109,13 @@ explicit local dogfood check; it is never a required CI dependency.
|
|
|
102
109
|
|
|
103
110
|
## Release boundary
|
|
104
111
|
|
|
105
|
-
Versions `0.1.0` and `0.
|
|
106
|
-
mirrors. Release work must keep each version's bytes immutable
|
|
107
|
-
current LOVE, npm, and GitHub Release bytes identical through the
|
|
108
|
-
allowlisted workflow. The deployed docs/catalog is a distribution
|
|
109
|
-
a hosted arbitrary-target browser or permission to add one.
|
|
110
|
-
|
|
111
|
-
the
|
|
112
|
+
Versions `0.1.0`, `0.2.0`, and `0.3.0` are exact LOVE releases with npm and
|
|
113
|
+
GitHub Release mirrors. Release work must keep each version's bytes immutable
|
|
114
|
+
and keep the current LOVE, npm, and GitHub Release bytes identical through the
|
|
115
|
+
protected allowlisted workflow. The deployed docs/catalog is a distribution
|
|
116
|
+
surface, not a hosted arbitrary-target browser or permission to add one.
|
|
117
|
+
Retained observations, structural accessibility context, race hardening, and
|
|
118
|
+
the `agent-browser-capabilities/0.3` contract belong to the exact `0.3.0`
|
|
119
|
+
artifact, not the immutable `0.1.0` or `0.2.0` bytes. Any source change after
|
|
120
|
+
`0.3.0`, especially a machine-readable capability contract change, requires a
|
|
121
|
+
new package version before publication.
|
package/README.md
CHANGED
|
@@ -2,23 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
A small local browser surface for agents.
|
|
4
4
|
|
|
5
|
-
`0.
|
|
5
|
+
`0.3.0` is distributed as an exact LOVE package and mirrored to npm. It remains
|
|
6
6
|
a local runtime: the docs deployment publishes package bytes and documentation,
|
|
7
7
|
not a hosted browser-control service.
|
|
8
8
|
|
|
9
|
+
Version `0.3.0` adds collaboration-safe retained observations, structural
|
|
10
|
+
accessibility context, stricter navigation/action/close race handling, and an
|
|
11
|
+
explicit capability declaration for browser-managed redirect hops. The exact
|
|
12
|
+
`0.1.0` and `0.2.0` artifacts remain immutable.
|
|
13
|
+
|
|
9
14
|
```bash
|
|
10
|
-
npm install --save-exact @agenttool/browser@0.
|
|
15
|
+
npm install --save-exact @agenttool/browser@0.3.0
|
|
11
16
|
```
|
|
12
17
|
|
|
13
18
|
Registry-neutral exact artifact:
|
|
14
19
|
|
|
15
20
|
```bash
|
|
16
21
|
npm install --save-exact \
|
|
17
|
-
https://docs.agenttool.dev/packages/v1/@agenttool/browser/0.
|
|
22
|
+
https://docs.agenttool.dev/packages/v1/@agenttool/browser/0.3.0/agenttool-browser-0.3.0.tgz
|
|
18
23
|
```
|
|
19
24
|
|
|
20
25
|
The sibling
|
|
21
|
-
[LOVE manifest](https://docs.agenttool.dev/packages/v1/@agenttool/browser/0.
|
|
26
|
+
[LOVE manifest](https://docs.agenttool.dev/packages/v1/@agenttool/browser/0.3.0/manifest.json)
|
|
22
27
|
names the artifact size and SHA-256. A URL install does not compare those
|
|
23
28
|
values automatically; verify them first when that boundary matters.
|
|
24
29
|
|
|
@@ -34,7 +39,11 @@ The core exposes the essential loop: inspect `capabilities`, create a
|
|
|
34
39
|
zero-effect `plan`, then `open`, `observe`, `act`, `extract`, `screenshot`,
|
|
35
40
|
inspect `tabs`, and `close`. `observe` produces a bounded semantic view with
|
|
36
41
|
snapshot-scoped ARIA references, so actions target observed accessible elements
|
|
37
|
-
rather than invented selectors.
|
|
42
|
+
rather than invented selectors. The same snapshot retains a separately bounded,
|
|
43
|
+
viewport-visible context of headings and the `main`, `navigation`, `form`,
|
|
44
|
+
`region`, `dialog`, `alert`, and `status` roles. Context lines keep their
|
|
45
|
+
relative indentation but carry no ref, never enter the actionable `refs` array,
|
|
46
|
+
and use only character space left after interactive refs have been selected.
|
|
38
47
|
|
|
39
48
|
This package uses `playwright-core` with a Chrome-family browser already
|
|
40
49
|
installed on the machine. It has no postinstall script and does not download a
|
|
@@ -153,13 +162,45 @@ try {
|
|
|
153
162
|
The same instance provides `act`, `extract`, `screenshot`, and `tabs`.
|
|
154
163
|
`open` creates a new tab and returns its first `Observation`; `observe` reads
|
|
155
164
|
the active or selected tab again. Every reference-targeted action carries both
|
|
156
|
-
the observed `ref` and its `snapshotId`.
|
|
157
|
-
snapshot
|
|
165
|
+
the observed `ref` and its `snapshotId`. Read-only observations retain a
|
|
166
|
+
bounded recent snapshot history within the current frame documents, so one
|
|
167
|
+
observer does not immediately stale a peer's references. Any frame navigation
|
|
168
|
+
invalidates every retained snapshot for that tab. Once an action reaches
|
|
169
|
+
browser dispatch, it also invalidates every retained snapshot for that tab
|
|
170
|
+
whether it succeeds or fails; validation and navigation-preflight rejections
|
|
171
|
+
do not dispatch an action. Observe again before choosing another referenced
|
|
172
|
+
action.
|
|
158
173
|
Each `act` call contains exactly one action and is attempted once. The package
|
|
159
174
|
does not automatically retry uncertain clicks, submissions, typing, keypresses,
|
|
160
175
|
or navigation. The closed action set covers navigate, click, type, press,
|
|
161
176
|
select, scroll, bounded wait, back, forward, reload, new tab, and close tab;
|
|
162
177
|
there is no raw script or DevTools action.
|
|
178
|
+
Before constructing an observation, Browser makes a bounded, best-effort check
|
|
179
|
+
that the top-level window viewport has stopped moving. It samples browser
|
|
180
|
+
geometry against a one-second monotonic deadline and gives each geometry
|
|
181
|
+
request only the remaining budget. The loop stops scheduling probes after
|
|
182
|
+
that deadline; host or runtime scheduling can still delay its return beyond
|
|
183
|
+
one wall-clock second. This reduces refs issued during queued wheel or smooth
|
|
184
|
+
scrolling, but does not promise that the DOM, network, animation, or a nested
|
|
185
|
+
scroller is stable. A failed geometry probe does not turn an already completed
|
|
186
|
+
action into a reported action failure. Before a ref-targeted action is
|
|
187
|
+
dispatched, its element must still intersect the current viewport or the ref
|
|
188
|
+
is rejected as stale. Read-only ref extraction remains available for a
|
|
189
|
+
retained element that is still present and visible even if it has moved
|
|
190
|
+
outside the window viewport.
|
|
191
|
+
If the request boundary denies a main-frame request attributed to the action's
|
|
192
|
+
tab before its Playwright promise settles, the action returns that policy error
|
|
193
|
+
rather than a clean success even if Chromium displays its internal error page.
|
|
194
|
+
The same conservative result applies when an immediate popup denial arrives
|
|
195
|
+
before Playwright exposes a frame or registered tab, but it is reported as
|
|
196
|
+
`action_failed` with session-wide attribution uncertainty rather than falsely
|
|
197
|
+
claiming that the current action created that request. A denial attributed to
|
|
198
|
+
another registered tab, or to a known subframe, is enforced on the request but
|
|
199
|
+
is not reported as the current action's result. Browser does not wait for
|
|
200
|
+
open-ended network quiescence: scripted navigation scheduled to begin after
|
|
201
|
+
the action promise settles is later page behavior and cannot retroactively
|
|
202
|
+
revise the completed result. This detection does not retry the action or undo
|
|
203
|
+
effects that happened before the denial.
|
|
163
204
|
|
|
164
205
|
Snapshot and extraction limits bound returned results, not the size of the
|
|
165
206
|
remote DOM that Chrome and Playwright must first process. An extremely large
|
|
@@ -216,27 +257,29 @@ and cannot alter the same underlying facts or widen authority.
|
|
|
216
257
|
|
|
217
258
|
## Authority profiles
|
|
218
259
|
|
|
219
|
-
Version `0.2.0`
|
|
220
|
-
`
|
|
260
|
+
Version `0.2.0` introduced the three named launch-time profiles retained by
|
|
261
|
+
`0.3.0`:
|
|
221
262
|
|
|
222
|
-
| Profile | HTTP(S)
|
|
263
|
+
| Profile | Policy-checked HTTP(S) requests | WebSockets | Service workers |
|
|
223
264
|
|---|---|---|---|
|
|
224
265
|
| `public` (default) | Public only | Blocked | Blocked |
|
|
225
266
|
| `local` | Public plus local/private; reserved denied | Classified by the same boundary | Blocked |
|
|
226
|
-
| `sovereign` | Broad pass-through, including local/private/reserved;
|
|
267
|
+
| `sovereign` | Broad pass-through, including local/private/reserved; embedded userinfo rejected at the policy check | Passed through | Enabled |
|
|
227
268
|
|
|
228
269
|
Sovereign means AgentTool does not apply destination-class blocking to valid
|
|
229
|
-
HTTP(S) requests or WebSockets;
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
270
|
+
policy-checked HTTP(S) requests or WebSockets; embedded userinfo is rejected
|
|
271
|
+
when a URL crosses that policy boundary. Chromium-managed `Location` hops do
|
|
272
|
+
not cross it again. The browser, operating system, DNS/proxy configuration,
|
|
273
|
+
network, and destination still determine what is reachable. Sovereign does
|
|
274
|
+
not bypass authentication, CAPTCHAs, account permissions, site policy,
|
|
275
|
+
browser support, or host controls.
|
|
233
276
|
|
|
234
277
|
This profile deliberately allows a page and its service worker to reach
|
|
235
278
|
destinations available to the host, including local services. In a persistent
|
|
236
279
|
profile, service-worker and site state can outlive the process. Sovereign is
|
|
237
280
|
therefore broad local process authority, not an isolation or SSRF claim.
|
|
238
281
|
|
|
239
|
-
Destination authority does not imply every other browser power. In `0.
|
|
282
|
+
Destination authority does not imply every other browser power. In `0.3.0`,
|
|
240
283
|
file upload, automatic download, arbitrary JavaScript evaluation, credential
|
|
241
284
|
injection/lookup, ambient profile import, shell execution, and extension
|
|
242
285
|
installation remain unsupported and are reported as such by `capabilities()`.
|
|
@@ -301,7 +344,7 @@ Do this only for a caller-controlled development network. Tool calls cannot
|
|
|
301
344
|
widen either profile or network authority after launch. Reserved destinations
|
|
302
345
|
remain blocked even with this opt-in.
|
|
303
346
|
|
|
304
|
-
Version `0.
|
|
347
|
+
Version `0.3.0` retains `allowPublicWeb` / `allowLocalNetwork`,
|
|
305
348
|
`--public-web` / `--local-network`, and their environment variables as a
|
|
306
349
|
deprecated `0.1.0` compatibility surface. Do not combine the `authority` form
|
|
307
350
|
with any legacy authority option in one launch; mixed configuration is
|
|
@@ -348,7 +391,7 @@ unrecognized carriers such as `srcset`, meta refresh, CSS `url()`, or malformed
|
|
|
348
391
|
markup, browser storage, canvas/image content, or screenshot pixels. It cannot
|
|
349
392
|
undo data already submitted to a site.
|
|
350
393
|
|
|
351
|
-
The published `0.
|
|
394
|
+
The published `0.3.0` package intentionally has no:
|
|
352
395
|
|
|
353
396
|
- arbitrary JavaScript evaluation;
|
|
354
397
|
- file-upload operation;
|
|
@@ -363,15 +406,25 @@ model-visible state, or advisory plans.
|
|
|
363
406
|
|
|
364
407
|
## Network limitation
|
|
365
408
|
|
|
366
|
-
The `0.
|
|
367
|
-
|
|
409
|
+
The `0.3.0` `public` and `local` profiles preserve the `0.2.0` and historical
|
|
410
|
+
`0.1.0` destination checks before navigation, including DNS answers.
|
|
368
411
|
Playwright then owns the browser connection. The package cannot pin the
|
|
369
412
|
checked DNS answer to the later socket or verify the connected peer address,
|
|
370
413
|
and ambient proxies or browser routing can change the path.
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
414
|
+
Playwright-managed HTTP redirect hops do not re-enter the request route used
|
|
415
|
+
by this package, so `public` and `local` cannot independently classify each
|
|
416
|
+
`Location` target before Chromium follows it. A `route.fetch` with automatic
|
|
417
|
+
redirects disabled still hands a fulfilled redirect back to Chromium without
|
|
418
|
+
causing the next hop to re-enter that route, and it would also replace normal
|
|
419
|
+
browser response handling with a buffered API fetch.
|
|
420
|
+
|
|
421
|
+
AgentTool rejects embedded URL credentials only when a URL crosses its policy
|
|
422
|
+
check boundary: direct inputs and routed requests. Chromium-managed
|
|
423
|
+
`Location` hops are not independently rechecked; they may change destination
|
|
424
|
+
class or contain userinfo before the package can observe the committed page.
|
|
425
|
+
Do not treat this as credential-disclosure or SSRF isolation, and do not
|
|
426
|
+
expose it unchanged as a hosted arbitrary-target browser. `local` is an
|
|
427
|
+
explicit widening of local process authority, not a sandbox.
|
|
375
428
|
|
|
376
429
|
The public/local check is an HTTP(S) browser-request boundary, not generic
|
|
377
430
|
process egress isolation. `public` blocks WebSockets; `local` classifies them
|
package/dist/src/browser.d.ts
CHANGED
|
@@ -11,9 +11,12 @@ export declare class AgentBrowser {
|
|
|
11
11
|
private readonly browser;
|
|
12
12
|
private readonly states;
|
|
13
13
|
private readonly pageStates;
|
|
14
|
+
private readonly requestPolicyDenials;
|
|
14
15
|
private activeTabId;
|
|
15
16
|
private nextTabNumber;
|
|
17
|
+
private requestPolicyDenialSequence;
|
|
16
18
|
private closed;
|
|
19
|
+
private closePromise;
|
|
17
20
|
private operationTail;
|
|
18
21
|
private constructor();
|
|
19
22
|
static launch(options?: AgentBrowserOptions): Promise<AgentBrowser>;
|
|
@@ -43,18 +46,31 @@ export declare class AgentBrowser {
|
|
|
43
46
|
tabs(): Promise<TabSummary[]>;
|
|
44
47
|
private tabsUnlocked;
|
|
45
48
|
close(): Promise<void>;
|
|
46
|
-
private closeUnlocked;
|
|
47
49
|
private installRequestPolicy;
|
|
48
50
|
private refreshPages;
|
|
49
51
|
private registerPage;
|
|
50
|
-
private
|
|
52
|
+
private watchPageEvents;
|
|
51
53
|
private queueMainDocumentResponse;
|
|
52
54
|
private clearMainDocumentResponse;
|
|
53
55
|
private awaitStableResponseCapture;
|
|
54
56
|
private readMainDocumentResponse;
|
|
55
57
|
private getState;
|
|
56
58
|
private invalidate;
|
|
59
|
+
private rememberSnapshot;
|
|
60
|
+
private assertObservationCurrent;
|
|
57
61
|
private resolveRef;
|
|
62
|
+
private assertResolvedRefCurrent;
|
|
63
|
+
/**
|
|
64
|
+
* Playwright's wheel dispatch and a page's own smooth scrolling can outlive
|
|
65
|
+
* the action promise. Sample top-level viewport geometry before issuing refs
|
|
66
|
+
* so the observation is less likely to describe an in-flight window scroll.
|
|
67
|
+
* This is deliberately best-effort: a probe failure must not turn an already
|
|
68
|
+
* executed action into a reported action failure.
|
|
69
|
+
*/
|
|
70
|
+
private awaitWindowViewportSettled;
|
|
71
|
+
private recordMainFrameRequestPolicyDenial;
|
|
72
|
+
private recordRequestPolicyDenial;
|
|
73
|
+
private requestPolicyDenialAfter;
|
|
58
74
|
private newTab;
|
|
59
75
|
private closeTab;
|
|
60
76
|
private actionResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EAKrB,MAAM,aAAa,CAAC;AAWrB,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAIlB,KAAK,aAAa,EAKlB,KAAK,YAAY,EACjB,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,cAAc,EAKnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,aAAa,CAQzD,CAAC;AAsEH,qBAAa,YAAY;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAiD;IACtF,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,2BAA2B,CAAK;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO;WAiBM,MAAM,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgE7E,+EAA+E;IACzE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAI/B,YAAY;IA+BpB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;YAInD,eAAe;IA6MvB,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAKvD,mFAAmF;IACnF,YAAY,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAI9C;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAM7D;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAiC1D,WAAW;IAoGnB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;YAI5C,eAAe;IAwGvB,UAAU,CAAC,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAI1D,kBAAkB;IAwD1B,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAIrB,YAAY;IAqB1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAaR,oBAAoB;IA0ClC,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,yBAAyB;YAOnB,0BAA0B;YAe1B,wBAAwB;IAwDtC,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,wBAAwB;YAiBlB,UAAU;IAgExB,OAAO,CAAC,wBAAwB;IAahC;;;;;;OAMG;YACW,0BAA0B;IA+CxC,OAAO,CAAC,kCAAkC;IA2D1C,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,wBAAwB;YAmBlB,MAAM;YAgCN,QAAQ;IA4BtB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,QAAQ;CAoBjB"}
|