@vforsh/argus-watcher 0.1.5 → 0.1.7

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.
Files changed (38) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/http/routes/postReload.d.ts.map +1 -1
  3. package/dist/http/routes/postReload.js +2 -1
  4. package/dist/http/routes/postReload.js.map +1 -1
  5. package/dist/http/server.d.ts +2 -0
  6. package/dist/http/server.d.ts.map +1 -1
  7. package/dist/http/server.js.map +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/sources/extension-frame-state.d.ts +28 -1
  12. package/dist/sources/extension-frame-state.d.ts.map +1 -1
  13. package/dist/sources/extension-frame-state.js +54 -2
  14. package/dist/sources/extension-frame-state.js.map +1 -1
  15. package/dist/sources/extension-source.d.ts.map +1 -1
  16. package/dist/sources/extension-source.js +47 -22
  17. package/dist/sources/extension-source.js.map +1 -1
  18. package/package.json +3 -2
  19. package/dist/buffer/AuthHeaderBuffer.d.ts +0 -18
  20. package/dist/buffer/AuthHeaderBuffer.d.ts.map +0 -1
  21. package/dist/buffer/AuthHeaderBuffer.js +0 -26
  22. package/dist/buffer/AuthHeaderBuffer.js.map +0 -1
  23. package/dist/cdp/dom/submit.d.ts +0 -15
  24. package/dist/cdp/dom/submit.d.ts.map +0 -1
  25. package/dist/cdp/dom/submit.js +0 -130
  26. package/dist/cdp/dom/submit.js.map +0 -1
  27. package/dist/http/routes/getAuthInspect.d.ts +0 -3
  28. package/dist/http/routes/getAuthInspect.d.ts.map +0 -1
  29. package/dist/http/routes/getAuthInspect.js +0 -21
  30. package/dist/http/routes/getAuthInspect.js.map +0 -1
  31. package/dist/http/routes/postCodeEdit.d.ts +0 -3
  32. package/dist/http/routes/postCodeEdit.d.ts.map +0 -1
  33. package/dist/http/routes/postCodeEdit.js +0 -32
  34. package/dist/http/routes/postCodeEdit.js.map +0 -1
  35. package/dist/http/routes/postDomSubmit.d.ts +0 -3
  36. package/dist/http/routes/postDomSubmit.d.ts.map +0 -1
  37. package/dist/http/routes/postDomSubmit.js +0 -49
  38. package/dist/http/routes/postDomSubmit.js.map +0 -1
@@ -1,130 +0,0 @@
1
- import { scrollIntoView } from '../mouse.js';
2
- import { getDomRootId, resolveSelectorMatches, waitForSelectorMatches } from './selector.js';
3
- const SUBMIT_DECLARATION = `function(strategy) {
4
- var target = this;
5
-
6
- function isForm(el) {
7
- return typeof HTMLFormElement !== 'undefined' && el instanceof HTMLFormElement;
8
- }
9
-
10
- function resolveForm(el) {
11
- if (!el) {
12
- return null;
13
- }
14
- if (isForm(el)) {
15
- return el;
16
- }
17
- if (el.form) {
18
- return el.form;
19
- }
20
- if (typeof el.closest === 'function') {
21
- return el.closest('form');
22
- }
23
- return null;
24
- }
25
-
26
- function resolveSubmitter(el, form) {
27
- if (!el || !form || isForm(el)) {
28
- return undefined;
29
- }
30
- if (
31
- typeof HTMLElement !== 'undefined'
32
- && el instanceof HTMLElement
33
- && el.form === form
34
- && (
35
- (typeof HTMLButtonElement !== 'undefined' && el instanceof HTMLButtonElement)
36
- || (
37
- typeof HTMLInputElement !== 'undefined'
38
- && el instanceof HTMLInputElement
39
- && (el.type === 'submit' || el.type === 'image')
40
- )
41
- )
42
- ) {
43
- return el;
44
- }
45
- return undefined;
46
- }
47
-
48
- function submitElement(el, submitter) {
49
- if (!el) {
50
- return false;
51
- }
52
- if (typeof el.requestSubmit === 'function') {
53
- try {
54
- if (submitter !== undefined) {
55
- el.requestSubmit(submitter);
56
- } else {
57
- el.requestSubmit();
58
- }
59
- } catch (_) {
60
- el.requestSubmit();
61
- }
62
- return true;
63
- }
64
- if (typeof el.submit === 'function') {
65
- el.submit();
66
- return true;
67
- }
68
- var event = new Event('submit', { bubbles: true, cancelable: true });
69
- el.dispatchEvent(event);
70
- return true;
71
- }
72
-
73
- var nearestForm = resolveForm(target);
74
- var submitter = resolveSubmitter(target, nearestForm);
75
-
76
- if (strategy === 'form') {
77
- return submitElement(nearestForm, submitter);
78
- }
79
-
80
- if (strategy === 'self') {
81
- return submitElement(target);
82
- }
83
-
84
- if (submitElement(nearestForm, submitter)) {
85
- return true;
86
- }
87
-
88
- return submitElement(target);
89
- }`;
90
- const submitResolvedNode = async (session, nodeId, strategy) => {
91
- await scrollIntoView(session, nodeId);
92
- const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
93
- const objectId = resolved.object?.objectId;
94
- if (!objectId) {
95
- return false;
96
- }
97
- const result = (await session.sendAndWait('Runtime.callFunctionOn', {
98
- objectId,
99
- functionDeclaration: SUBMIT_DECLARATION,
100
- arguments: [{ value: strategy }],
101
- awaitPromise: false,
102
- returnByValue: true,
103
- }));
104
- return result.result?.value === true;
105
- };
106
- export const submitResolvedNodes = async (session, nodeIds, strategy) => {
107
- if (nodeIds.length === 0) {
108
- return 0;
109
- }
110
- let submittedCount = 0;
111
- for (const nodeId of nodeIds) {
112
- const ok = await submitResolvedNode(session, nodeId, strategy);
113
- if (ok) {
114
- submittedCount += 1;
115
- }
116
- }
117
- return submittedCount;
118
- };
119
- export const submitElements = async (session, options) => {
120
- await session.sendAndWait('DOM.enable');
121
- const all = options.all ?? false;
122
- const waitMs = options.wait ?? 0;
123
- const strategy = options.strategy ?? 'auto';
124
- const result = waitMs > 0
125
- ? await waitForSelectorMatches(session, options.selector, all, options.text, waitMs)
126
- : await resolveSelectorMatches(session, await getDomRootId(session), options.selector, all, options.text);
127
- const submittedCount = await submitResolvedNodes(session, result.nodeIds, strategy);
128
- return { allNodeIds: result.allNodeIds, submittedCount };
129
- };
130
- //# sourceMappingURL=submit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/cdp/dom/submit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAe5F,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsFzB,CAAA;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAC/B,OAAyB,EACzB,MAAc,EACd,QAAkC,EACf,EAAE;IACrB,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAuC,CAAA;IACjH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE;QACnE,QAAQ;QACR,mBAAmB,EAAE,kBAAkB;QACvC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAChC,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,IAAI;KACnB,CAAC,CAAqC,CAAA;IAEvC,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACvC,OAAyB,EACzB,OAAiB,EACjB,QAAkC,EAChB,EAAE;IACpB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAA;IACT,CAAC;IAED,IAAI,cAAc,GAAG,CAAC,CAAA;IACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAI,EAAE,EAAE,CAAC;YACR,cAAc,IAAI,CAAC,CAAA;QACpB,CAAC;IACF,CAAC;IAED,OAAO,cAAc,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAyB,EAAE,OAA8B,EAAiC,EAAE;IAChI,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAA;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;IAC3C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACpF,CAAC,CAAC,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1G,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACnF,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,CAAA;AACzD,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { RouteHandler } from './types.js';
2
- export declare const handle: RouteHandler;
3
- //# sourceMappingURL=getAuthInspect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getAuthInspect.d.ts","sourceRoot":"","sources":["../../../src/http/routes/getAuthInspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,eAAO,MAAM,MAAM,EAAE,YAiBpB,CAAA"}
@@ -1,21 +0,0 @@
1
- import { emitRequest } from './types.js';
2
- import { inspectAuthState } from '../../cdp/auth.js';
3
- import { clampNumber, normalizeQueryValue, respondError, respondJson } from '../httpUtils.js';
4
- export const handle = async (_req, res, url, ctx) => {
5
- const origin = normalizeQueryValue(url.searchParams.get('origin'));
6
- const includeValues = url.searchParams.get('includeValues') === 'true';
7
- const sinceTs = clampNumber(url.searchParams.get('sinceTs'), undefined);
8
- emitRequest(ctx, res, 'auth/inspect', { origin, includeValues, sinceTs });
9
- try {
10
- const response = await inspectAuthState(ctx.cdpSession, ctx.netBuffer, ctx.authHeaderBuffer, {
11
- origin: origin ?? undefined,
12
- includeValues,
13
- sinceTs,
14
- });
15
- respondJson(res, response);
16
- }
17
- catch (error) {
18
- respondError(res, error);
19
- }
20
- };
21
- //# sourceMappingURL=getAuthInspect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getAuthInspect.js","sourceRoot":"","sources":["../../../src/http/routes/getAuthInspect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7F,MAAM,CAAC,MAAM,MAAM,GAAiB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClE,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,MAAM,CAAA;IACtE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;IAEvE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAA;IAEzE,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAwB,MAAM,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,gBAAgB,EAAE;YACjH,MAAM,EAAE,MAAM,IAAI,SAAS;YAC3B,aAAa;YACb,OAAO;SACP,CAAC,CAAA;QACF,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC;AACF,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { RouteHandler } from './types.js';
2
- export declare const handle: RouteHandler;
3
- //# sourceMappingURL=postCodeEdit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postCodeEdit.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postCodeEdit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9C,eAAO,MAAM,MAAM,EAAE,YA8BpB,CAAA"}
@@ -1,32 +0,0 @@
1
- import { emitRequest } from './types.js';
2
- import { readJsonBody, respondError, respondInvalidBody, respondJson } from '../httpUtils.js';
3
- export const handle = async (req, res, _url, ctx) => {
4
- const payload = await readJsonBody(req, res);
5
- if (!payload) {
6
- return;
7
- }
8
- if (typeof payload.url !== 'string' || payload.url.trim() === '') {
9
- return respondInvalidBody(res, 'url must be a non-empty string');
10
- }
11
- if (typeof payload.oldString !== 'string' || payload.oldString === '') {
12
- return respondInvalidBody(res, 'oldString must be a non-empty string');
13
- }
14
- if (typeof payload.newString !== 'string') {
15
- return respondInvalidBody(res, 'newString must be a string');
16
- }
17
- emitRequest(ctx, res, 'code/edit');
18
- try {
19
- const response = await ctx.runtimeEditor.edit({
20
- url: payload.url,
21
- oldString: payload.oldString,
22
- newString: payload.newString,
23
- dryRun: payload.dryRun ?? false,
24
- replaceAll: payload.replaceAll ?? false,
25
- });
26
- respondJson(res, response);
27
- }
28
- catch (error) {
29
- respondError(res, error);
30
- }
31
- };
32
- //# sourceMappingURL=postCodeEdit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postCodeEdit.js","sourceRoot":"","sources":["../../../src/http/routes/postCodeEdit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7F,MAAM,CAAC,MAAM,MAAM,GAAiB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAkB,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAM;IACP,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClE,OAAO,kBAAkB,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;QACvE,OAAO,kBAAkB,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAA;IACvE,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,kBAAkB,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAA;IAC7D,CAAC;IAED,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;IAElC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAqB,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;YAC/D,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;SACvC,CAAC,CAAA;QACF,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC;AACF,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { RouteHandler } from './types.js';
2
- export declare const handle: RouteHandler;
3
- //# sourceMappingURL=postDomSubmit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postDomSubmit.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postDomSubmit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,eAAO,MAAM,MAAM,EAAE,YAuDpB,CAAA"}
@@ -1,49 +0,0 @@
1
- import { emitRequest } from './types.js';
2
- import { submitElements } from '../../cdp/dom.js';
3
- import { respondJson, respondInvalidBody, respondError, readJsonBody } from '../httpUtils.js';
4
- export const handle = async (req, res, _url, ctx) => {
5
- const payload = await readJsonBody(req, res);
6
- if (!payload) {
7
- return;
8
- }
9
- if (!payload.selector || typeof payload.selector !== 'string') {
10
- return respondInvalidBody(res, 'selector is required');
11
- }
12
- const all = payload.all ?? false;
13
- if (typeof all !== 'boolean') {
14
- return respondInvalidBody(res, 'all must be a boolean');
15
- }
16
- const waitMs = payload.wait ?? 0;
17
- if (typeof waitMs !== 'number' || !Number.isFinite(waitMs) || waitMs < 0) {
18
- return respondInvalidBody(res, 'wait must be a non-negative number (ms)');
19
- }
20
- const strategy = payload.strategy ?? 'auto';
21
- if (strategy !== 'auto' && strategy !== 'form' && strategy !== 'self') {
22
- return respondInvalidBody(res, 'strategy must be one of: auto, form, self');
23
- }
24
- emitRequest(ctx, res, 'dom/submit');
25
- try {
26
- const { allNodeIds, submittedCount } = await submitElements(ctx.cdpSession, {
27
- selector: payload.selector,
28
- all,
29
- text: payload.text,
30
- wait: waitMs,
31
- strategy,
32
- });
33
- if (!all && allNodeIds.length > 1) {
34
- return respondJson(res, {
35
- ok: false,
36
- error: {
37
- message: `Selector matched ${allNodeIds.length} elements; pass all=true to submit all matches`,
38
- code: 'multiple_matches',
39
- },
40
- }, 400);
41
- }
42
- const response = { ok: true, matches: allNodeIds.length, submitted: submittedCount };
43
- respondJson(res, response);
44
- }
45
- catch (error) {
46
- respondError(res, error);
47
- }
48
- };
49
- //# sourceMappingURL=postDomSubmit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postDomSubmit.js","sourceRoot":"","sources":["../../../src/http/routes/postDomSubmit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE7F,MAAM,CAAC,MAAM,MAAM,GAAiB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAmB,GAAG,EAAE,GAAG,CAAC,CAAA;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAM;IACP,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,kBAAkB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAA;IAChC,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,kBAAkB,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;IAC3C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACvE,OAAO,kBAAkB,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAA;IAC5E,CAAC;IAED,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAA;IAEnC,IAAI,CAAC;QACJ,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE;YAC3E,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,MAAM;YACZ,QAAQ;SACR,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,WAAW,CACjB,GAAG,EACH;gBACC,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACN,OAAO,EAAE,oBAAoB,UAAU,CAAC,MAAM,gDAAgD;oBAC9F,IAAI,EAAE,kBAAkB;iBACxB;aACD,EACD,GAAG,CACH,CAAA;QACF,CAAC;QAED,MAAM,QAAQ,GAAsB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAA;QACvG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC;AACF,CAAC,CAAA"}