@anionex/dsh-computer-use 0.1.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.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +307 -0
  4. package/README.zh.md +307 -0
  5. package/assets/computer-use-fixture.png +0 -0
  6. package/assets/cursor.png +0 -0
  7. package/cordis.patch.yml +13 -0
  8. package/docs/interaction-policy.i18n.yaml +4 -0
  9. package/docs/interaction-policy.md +140 -0
  10. package/docs/interaction-policy.zh.md +140 -0
  11. package/lib/approval-policy.js +12 -0
  12. package/lib/approval-policy.js.map +1 -0
  13. package/lib/artifacts.js +79 -0
  14. package/lib/artifacts.js.map +1 -0
  15. package/lib/backend.js +3 -0
  16. package/lib/backend.js.map +1 -0
  17. package/lib/client.js +349 -0
  18. package/lib/client.js.map +1 -0
  19. package/lib/config.js +120 -0
  20. package/lib/config.js.map +1 -0
  21. package/lib/confirmations.js +99 -0
  22. package/lib/confirmations.js.map +1 -0
  23. package/lib/diff.js +58 -0
  24. package/lib/diff.js.map +1 -0
  25. package/lib/errors.js +22 -0
  26. package/lib/errors.js.map +1 -0
  27. package/lib/exposure.js +231 -0
  28. package/lib/exposure.js.map +1 -0
  29. package/lib/index.js +56 -0
  30. package/lib/index.js.map +1 -0
  31. package/lib/leases.js +259 -0
  32. package/lib/leases.js.map +1 -0
  33. package/lib/providers/macos.js +148 -0
  34. package/lib/providers/macos.js.map +1 -0
  35. package/lib/providers/native-helper.js +356 -0
  36. package/lib/providers/native-helper.js.map +1 -0
  37. package/lib/service.js +480 -0
  38. package/lib/service.js.map +1 -0
  39. package/lib/skill.js +119 -0
  40. package/lib/skill.js.map +1 -0
  41. package/lib/target-resolver.js +180 -0
  42. package/lib/target-resolver.js.map +1 -0
  43. package/lib/tools.js +493 -0
  44. package/lib/tools.js.map +1 -0
  45. package/lib/types/approval-policy.d.ts +13 -0
  46. package/lib/types/approval-policy.d.ts.map +1 -0
  47. package/lib/types/artifacts.d.ts +10 -0
  48. package/lib/types/artifacts.d.ts.map +1 -0
  49. package/lib/types/backend.d.ts +94 -0
  50. package/lib/types/backend.d.ts.map +1 -0
  51. package/lib/types/client/index.d.ts +78 -0
  52. package/lib/types/client/index.d.ts.map +1 -0
  53. package/lib/types/config.d.ts +75 -0
  54. package/lib/types/config.d.ts.map +1 -0
  55. package/lib/types/confirmations.d.ts +23 -0
  56. package/lib/types/confirmations.d.ts.map +1 -0
  57. package/lib/types/diff.d.ts +5 -0
  58. package/lib/types/diff.d.ts.map +1 -0
  59. package/lib/types/errors.d.ts +15 -0
  60. package/lib/types/errors.d.ts.map +1 -0
  61. package/lib/types/exposure.d.ts +30 -0
  62. package/lib/types/exposure.d.ts.map +1 -0
  63. package/lib/types/index.d.ts +21 -0
  64. package/lib/types/index.d.ts.map +1 -0
  65. package/lib/types/leases.d.ts +80 -0
  66. package/lib/types/leases.d.ts.map +1 -0
  67. package/lib/types/providers/macos.d.ts +15 -0
  68. package/lib/types/providers/macos.d.ts.map +1 -0
  69. package/lib/types/providers/native-helper.d.ts +36 -0
  70. package/lib/types/providers/native-helper.d.ts.map +1 -0
  71. package/lib/types/service.d.ts +52 -0
  72. package/lib/types/service.d.ts.map +1 -0
  73. package/lib/types/skill.d.ts +9 -0
  74. package/lib/types/skill.d.ts.map +1 -0
  75. package/lib/types/target-resolver.d.ts +38 -0
  76. package/lib/types/target-resolver.d.ts.map +1 -0
  77. package/lib/types/tools.d.ts +6 -0
  78. package/lib/types/tools.d.ts.map +1 -0
  79. package/lib/types/types.d.ts +246 -0
  80. package/lib/types/types.d.ts.map +1 -0
  81. package/lib/types/web.d.ts +32 -0
  82. package/lib/types/web.d.ts.map +1 -0
  83. package/lib/types.js +9 -0
  84. package/lib/types.js.map +1 -0
  85. package/lib/web.js +163 -0
  86. package/lib/web.js.map +1 -0
  87. package/native/macos/Sources/Fixture/main.swift +366 -0
  88. package/native/macos/Sources/Helper/CursorImage.swift +11 -0
  89. package/native/macos/Sources/Helper/CursorOverlay.swift +488 -0
  90. package/native/macos/Sources/Helper/TargetedPointer.swift +314 -0
  91. package/native/macos/Sources/Helper/main.swift +1140 -0
  92. package/native/macos/Sources/Monitor/main.swift +139 -0
  93. package/native/macos/bin/dsh-computer-use-helper +0 -0
  94. package/native/macos/manifest.json +14 -0
  95. package/package.json +128 -0
  96. package/scripts/build-client.mjs +24 -0
  97. package/scripts/build-native.mjs +158 -0
  98. package/scripts/check-native.mjs +92 -0
  99. package/scripts/model-e2e.mjs +291 -0
  100. package/scripts/session-transcript.mjs +117 -0
  101. package/scripts/validate.mjs +256 -0
  102. package/src/approval-policy.ts +16 -0
  103. package/src/artifacts.ts +93 -0
  104. package/src/backend.ts +103 -0
  105. package/src/client/index.tsx +539 -0
  106. package/src/config.ts +196 -0
  107. package/src/confirmations.ts +128 -0
  108. package/src/diff.ts +52 -0
  109. package/src/errors.ts +39 -0
  110. package/src/exposure.ts +236 -0
  111. package/src/index.ts +66 -0
  112. package/src/leases.ts +337 -0
  113. package/src/providers/macos.ts +185 -0
  114. package/src/providers/native-helper.ts +393 -0
  115. package/src/service.ts +583 -0
  116. package/src/skill.ts +123 -0
  117. package/src/target-resolver.ts +237 -0
  118. package/src/tools.ts +528 -0
  119. package/src/types.ts +299 -0
  120. package/src/web.ts +180 -0
@@ -0,0 +1,180 @@
1
+ /** Provider-independent, fail-closed element target resolution. */
2
+ import { ComputerUseError } from "./errors.js";
3
+ /** Fixed confidence values used by the deterministic resolver. */
4
+ export const TARGET_RESOLUTION_CONFIDENCE = {
5
+ exactLocator: 1,
6
+ nativeIdentifier: 1,
7
+ semantic: 0.9,
8
+ semanticThreshold: 0.9,
9
+ };
10
+ function normalizedText(value) {
11
+ const normalized = value?.normalize('NFKC').trim().replace(/\s+/gu, ' ');
12
+ return normalized === undefined || normalized.length === 0 ? undefined : normalized;
13
+ }
14
+ function accessibleName(element) {
15
+ return normalizedText(element.label ?? element.title);
16
+ }
17
+ function locatorKey(locator) {
18
+ return locator.join('.');
19
+ }
20
+ function sameLocator(left, right) {
21
+ return left.length === right.length && left.every((value, index) => value === right[index]);
22
+ }
23
+ function sameActions(left, right) {
24
+ return left.length === right.length && left.every((value, index) => value === right[index]);
25
+ }
26
+ function sameAncestorFingerprint(left, right) {
27
+ if (left.length !== right.length)
28
+ return false;
29
+ return left.every((entry, index) => {
30
+ const candidate = right[index];
31
+ return candidate !== undefined
32
+ && entry.role === candidate.role
33
+ && entry.subrole === candidate.subrole
34
+ && entry.accessibleName === candidate.accessibleName;
35
+ });
36
+ }
37
+ function sameStableFields(left, right) {
38
+ return left.role === right.role
39
+ && left.subrole === right.subrole
40
+ && left.accessibleName === right.accessibleName
41
+ && sameActions(left.availableActions, right.availableActions)
42
+ && sameAncestorFingerprint(left.ancestorFingerprint, right.ancestorFingerprint);
43
+ }
44
+ function sameSemanticIdentity(left, right) {
45
+ return left.accessibleName !== undefined && sameStableFields(left, right);
46
+ }
47
+ function sameExactIdentity(left, right) {
48
+ if (left.nativeIdentifier !== undefined || right.nativeIdentifier !== undefined) {
49
+ return left.nativeIdentifier === right.nativeIdentifier && sameStableFields(left, right);
50
+ }
51
+ if (!sameStableFields(left, right))
52
+ return false;
53
+ if (left.normalizedFrame === undefined || right.normalizedFrame === undefined) {
54
+ return left.normalizedFrame === right.normalizedFrame;
55
+ }
56
+ return sameRect(left.normalizedFrame, right.normalizedFrame);
57
+ }
58
+ function sameRect(left, right) {
59
+ return left.x === right.x && left.y === right.y && left.width === right.width && left.height === right.height;
60
+ }
61
+ function sameWindow(left, right) {
62
+ if (left === undefined || right === undefined)
63
+ return left === right;
64
+ return left.id === right.id && left.title === right.title && sameRect(left.frame, right.frame);
65
+ }
66
+ function failAmbiguous(mode, candidateCount) {
67
+ throw new ComputerUseError('COMPUTER_TARGET_AMBIGUOUS', `${mode} resolution found ${candidateCount} candidates in the selected process and window`);
68
+ }
69
+ function failLowConfidence(candidateCount, reason) {
70
+ throw new ComputerUseError('COMPUTER_TARGET_LOW_CONFIDENCE', `${reason}; candidateCount=${candidateCount}, confidence=0, required=${TARGET_RESOLUTION_CONFIDENCE.semanticThreshold}`);
71
+ }
72
+ /** Build the normalized descriptor stored behind one opaque handle. */
73
+ export function describeComputerTarget(element, observation) {
74
+ const byLocator = new Map(observation.elements.map(candidate => [locatorKey(candidate.locator), candidate]));
75
+ const ancestors = [];
76
+ for (let depth = 0; depth < element.locator.length; depth += 1) {
77
+ const ancestor = byLocator.get(locatorKey(element.locator.slice(0, depth)));
78
+ if (ancestor === undefined)
79
+ continue;
80
+ const name = accessibleName(ancestor);
81
+ ancestors.push({
82
+ role: ancestor.role,
83
+ ...(ancestor.subrole === undefined ? {} : { subrole: ancestor.subrole }),
84
+ ...(name === undefined ? {} : { accessibleName: name }),
85
+ });
86
+ }
87
+ const nativeIdentifier = normalizedText(element.nativeIdentifier);
88
+ const name = accessibleName(element);
89
+ const normalizedFrame = element.frame === undefined
90
+ ? undefined
91
+ : observation.window === undefined
92
+ ? { ...element.frame }
93
+ : {
94
+ x: element.frame.x - observation.window.frame.x,
95
+ y: element.frame.y - observation.window.frame.y,
96
+ width: element.frame.width,
97
+ height: element.frame.height,
98
+ };
99
+ return {
100
+ locator: [...element.locator],
101
+ ...(nativeIdentifier === undefined ? {} : { nativeIdentifier }),
102
+ role: element.role,
103
+ ...(element.subrole === undefined ? {} : { subrole: element.subrole }),
104
+ ...(name === undefined ? {} : { accessibleName: name }),
105
+ ancestorFingerprint: ancestors.slice(-4),
106
+ ...(normalizedFrame === undefined ? {} : { normalizedFrame }),
107
+ availableActions: [...new Set(element.actions)].sort(),
108
+ };
109
+ }
110
+ /** Resolve one descriptor against a fresh provider observation without guessing. */
111
+ export function resolveComputerTarget(original, fresh, expected, allowRebind) {
112
+ if (fresh.app.bundleId !== original.app.bundleId || fresh.app.pid !== original.app.pid) {
113
+ throw new ComputerUseError('COMPUTER_STALE_OBSERVATION', 'the selected application restarted or resolved to a different process');
114
+ }
115
+ if (!sameWindow(original.window, fresh.window)) {
116
+ throw new ComputerUseError('COMPUTER_STALE_OBSERVATION', 'the selected window changed after the referenced observation');
117
+ }
118
+ const descriptors = fresh.elements.map(element => ({ element, descriptor: describeComputerTarget(element, fresh) }));
119
+ const exact = descriptors.find(candidate => sameLocator(candidate.element.locator, expected.locator));
120
+ if (exact !== undefined && sameExactIdentity(expected, exact.descriptor)) {
121
+ return {
122
+ element: exact.element,
123
+ observation: fresh,
124
+ resolution: {
125
+ mode: 'exact-locator',
126
+ confidence: TARGET_RESOLUTION_CONFIDENCE.exactLocator,
127
+ candidateCount: 1,
128
+ targetChanged: false,
129
+ },
130
+ };
131
+ }
132
+ if (!allowRebind) {
133
+ throw new ComputerUseError('COMPUTER_STALE_OBSERVATION', 'the target locator no longer identifies the selected element and rebinding was not allowed');
134
+ }
135
+ if (fresh.truncated) {
136
+ failLowConfidence(0, 'target uniqueness cannot be established from a truncated fresh observation');
137
+ }
138
+ if (expected.nativeIdentifier !== undefined) {
139
+ const nativeMatches = descriptors.filter(candidate => candidate.descriptor.nativeIdentifier === expected.nativeIdentifier);
140
+ if (nativeMatches.length > 1)
141
+ failAmbiguous('native identifier', nativeMatches.length);
142
+ if (nativeMatches.length === 1) {
143
+ if (!sameStableFields(expected, nativeMatches[0].descriptor)) {
144
+ failLowConfidence(1, 'the native identifier resolved to an element with different stable semantics');
145
+ }
146
+ return {
147
+ element: nativeMatches[0].element,
148
+ observation: fresh,
149
+ resolution: {
150
+ mode: 'native-identifier',
151
+ confidence: TARGET_RESOLUTION_CONFIDENCE.nativeIdentifier,
152
+ candidateCount: 1,
153
+ targetChanged: true,
154
+ },
155
+ };
156
+ }
157
+ }
158
+ if (expected.accessibleName === undefined) {
159
+ failLowConfidence(0, 'the target has no native identifier or accessible name');
160
+ }
161
+ const semanticMatches = descriptors.filter(candidate => sameSemanticIdentity(expected, candidate.descriptor));
162
+ if (semanticMatches.length > 1)
163
+ failAmbiguous('semantic', semanticMatches.length);
164
+ if (semanticMatches.length === 0)
165
+ failLowConfidence(0, 'no candidate retained the target role, accessible name, actions, and ancestor fingerprint');
166
+ if (TARGET_RESOLUTION_CONFIDENCE.semantic < TARGET_RESOLUTION_CONFIDENCE.semanticThreshold) {
167
+ failLowConfidence(semanticMatches.length, 'the deterministic semantic score is below the configured threshold');
168
+ }
169
+ return {
170
+ element: semanticMatches[0].element,
171
+ observation: fresh,
172
+ resolution: {
173
+ mode: 'semantic-rebind',
174
+ confidence: TARGET_RESOLUTION_CONFIDENCE.semantic,
175
+ candidateCount: semanticMatches.length,
176
+ targetChanged: true,
177
+ },
178
+ };
179
+ }
180
+ //# sourceMappingURL=target-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-resolver.js","sourceRoot":"","sources":["../src/target-resolver.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAGnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,QAAQ,EAAE,GAAG;IACb,iBAAiB,EAAE,GAAG;CACd,CAAA;AA2BV,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,UAAU,GAAG,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACxE,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;AACrF,CAAC;AAED,SAAS,cAAc,CAAC,OAAuB;IAC7C,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,OAA0B;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB,EAAE,KAAwB;IACpE,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB,EAAE,KAAwB;IACpE,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAyC,EACzC,KAA0C;IAE1C,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAC9B,OAAO,SAAS,KAAK,SAAS;eACzB,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;eAC7B,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO;eACnC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA8B,EAAE,KAA+B;IACvF,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;WAC1B,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;WAC9B,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;WAC5C,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC;WAC1D,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;AACnF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA8B,EAAE,KAA+B;IAC3F,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA8B,EAAE,KAA+B;IACxF,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAChD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAA;IACvD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAkB,EAAE,KAAmB;IACvD,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAA;AAC/G,CAAC;AAED,SAAS,UAAU,CAAC,IAAkC,EAAE,KAAmC;IACzF,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,KAAK,KAAK,CAAA;IACpE,OAAO,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AAChG,CAAC;AAED,SAAS,aAAa,CAAC,IAAsC,EAAE,cAAsB;IACnF,MAAM,IAAI,gBAAgB,CACxB,2BAA2B,EAC3B,GAAG,IAAI,qBAAqB,cAAc,gDAAgD,CAC3F,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,cAAsB,EAAE,MAAc;IAC/D,MAAM,IAAI,gBAAgB,CACxB,gCAAgC,EAChC,GAAG,MAAM,oBAAoB,cAAc,4BAA4B,4BAA4B,CAAC,iBAAiB,EAAE,CACxH,CAAA;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB,CACpC,OAAuB,EACvB,WAA+B;IAE/B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IAC5G,MAAM,SAAS,GAA+B,EAAE,CAAA;IAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAQ;QACpC,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QACrC,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACjE,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;QACjD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;YACtB,CAAC,CAAC;gBACE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/C,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;gBAC1B,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;aAC7B,CAAA;IACP,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC/D,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACvD,mBAAmB,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;KACvD,CAAA;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CACnC,QAA4B,EAC5B,KAAyB,EACzB,QAAkC,EAClC,WAAoB;IAEpB,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACvF,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,uEAAuE,CAAC,CAAA;IACnI,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,8DAA8D,CAAC,CAAA;IAC1H,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACpH,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;IACrG,IAAI,KAAK,KAAK,SAAS,IAAI,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE;gBACV,IAAI,EAAE,eAAe;gBACrB,UAAU,EAAE,4BAA4B,CAAC,YAAY;gBACrD,cAAc,EAAE,CAAC;gBACjB,aAAa,EAAE,KAAK;aACrB;SACF,CAAA;IACH,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,4FAA4F,CAAC,CAAA;IACxJ,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,iBAAiB,CAAC,CAAC,EAAE,4EAA4E,CAAC,CAAA;IACpG,CAAC;IAED,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAA;QAC1H,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QACtF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9D,iBAAiB,CAAC,CAAC,EAAE,8EAA8E,CAAC,CAAA;YACtG,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,aAAa,CAAC,CAAC,CAAE,CAAC,OAAO;gBAClC,WAAW,EAAE,KAAK;gBAClB,UAAU,EAAE;oBACV,IAAI,EAAE,mBAAmB;oBACzB,UAAU,EAAE,4BAA4B,CAAC,gBAAgB;oBACzD,cAAc,EAAE,CAAC;oBACjB,aAAa,EAAE,IAAI;iBACpB;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,iBAAiB,CAAC,CAAC,EAAE,wDAAwD,CAAC,CAAA;IAChF,CAAC;IACD,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;IAC7G,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QAAE,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IACjF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,iBAAiB,CAAC,CAAC,EAAE,2FAA2F,CAAC,CAAA;IACnJ,IAAI,4BAA4B,CAAC,QAAQ,GAAG,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;QAC3F,iBAAiB,CAAC,eAAe,CAAC,MAAM,EAAE,oEAAoE,CAAC,CAAA;IACjH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,CAAC,CAAE,CAAC,OAAO;QACpC,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE;YACV,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE,4BAA4B,CAAC,QAAQ;YACjD,cAAc,EAAE,eAAe,CAAC,MAAM;YACtC,aAAa,EAAE,IAAI;SACpB;KACF,CAAA;AACH,CAAC"}