@eddyskywalker/dsh-chatgpt-subscription 0.2.18 → 0.2.20
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/lib/index.js +55 -12
- package/lib/types/host/routes.d.ts +2 -1
- package/lib/types/host/routes.d.ts.map +1 -1
- package/lib/types/host/search-provider-switcher.d.ts +12 -11
- package/lib/types/host/search-provider-switcher.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -3114,7 +3114,7 @@ function identityKey(credentials) {
|
|
|
3114
3114
|
//#endregion
|
|
3115
3115
|
//#region src/host/routes.ts
|
|
3116
3116
|
const MAX_BODY_BYTES = 64 * 1024;
|
|
3117
|
-
function registerRoutes(ctx, oauth, usage, preferences, proxyManager) {
|
|
3117
|
+
function registerRoutes(ctx, oauth, usage, preferences, proxyManager, searchSwitcher) {
|
|
3118
3118
|
const handler = async (request, response) => {
|
|
3119
3119
|
const url = new URL(request.url ?? "/", "http://dsh.local");
|
|
3120
3120
|
if (request.method === "GET" && url.pathname === `/api/dsh-chatgpt-subscription/status`) {
|
|
@@ -3126,7 +3126,8 @@ function registerRoutes(ctx, oauth, usage, preferences, proxyManager) {
|
|
|
3126
3126
|
quota: await usage.status(oauthStatus.authenticated),
|
|
3127
3127
|
preferences: preferences.status(),
|
|
3128
3128
|
detectedProxy: proxyManager?.getSystemProxy() ?? null,
|
|
3129
|
-
activeProxy: proxyManager?.resolveActiveProxyUrl() ?? null
|
|
3129
|
+
activeProxy: proxyManager?.resolveActiveProxyUrl() ?? null,
|
|
3130
|
+
switcher: searchSwitcher?.status() ?? null
|
|
3130
3131
|
}
|
|
3131
3132
|
});
|
|
3132
3133
|
return;
|
|
@@ -3783,13 +3784,41 @@ var SearchProviderSwitcher = class {
|
|
|
3783
3784
|
originalSearchProvider;
|
|
3784
3785
|
originalFetchProvider;
|
|
3785
3786
|
initialized = false;
|
|
3787
|
+
pending = Promise.resolve();
|
|
3788
|
+
disposed = false;
|
|
3789
|
+
dispose() {
|
|
3790
|
+
this.disposed = true;
|
|
3791
|
+
}
|
|
3792
|
+
state = "idle";
|
|
3786
3793
|
constructor(loader) {
|
|
3787
3794
|
this.loader = loader;
|
|
3788
3795
|
}
|
|
3789
|
-
|
|
3796
|
+
status() {
|
|
3797
|
+
const entry = this.findWebEntry();
|
|
3798
|
+
const config = entry ? currentConfig(entry) : {};
|
|
3799
|
+
return {
|
|
3800
|
+
state: this.state,
|
|
3801
|
+
configuredSearchProvider: providerId(config.searchProvider),
|
|
3802
|
+
configuredFetchProvider: providerId(config.fetchProvider)
|
|
3803
|
+
};
|
|
3804
|
+
}
|
|
3805
|
+
select(preference, options = {}) {
|
|
3806
|
+
const selection = { ...options };
|
|
3807
|
+
const task = this.pending.then(() => this.applySelection(preference, selection));
|
|
3808
|
+
this.pending = task.catch(() => void 0);
|
|
3809
|
+
return task;
|
|
3810
|
+
}
|
|
3811
|
+
async applySelection(preference, options) {
|
|
3812
|
+
if (this.disposed) return;
|
|
3790
3813
|
const entry = this.findWebEntry();
|
|
3791
|
-
if (entry === null)
|
|
3814
|
+
if (entry === null) {
|
|
3815
|
+
this.state = "missing";
|
|
3816
|
+
return;
|
|
3817
|
+
}
|
|
3818
|
+
await entry.fiber?.await();
|
|
3819
|
+
if (this.disposed) return;
|
|
3792
3820
|
const config = currentConfig(entry);
|
|
3821
|
+
const running = entry.fiber?.config;
|
|
3793
3822
|
if (!this.initialized) {
|
|
3794
3823
|
this.originalSearchProvider = typeof config.searchProvider === "string" && config.searchProvider !== "codex-subscription" ? config.searchProvider : void 0;
|
|
3795
3824
|
this.originalFetchProvider = typeof config.fetchProvider === "string" && config.fetchProvider !== "codex-subscription" ? config.fetchProvider : void 0;
|
|
@@ -3798,19 +3827,26 @@ var SearchProviderSwitcher = class {
|
|
|
3798
3827
|
const codexSelected = preference === SEARCH_PROVIDER_CODEX;
|
|
3799
3828
|
const nextSearch = codexSelected ? CODEX_SEARCH_PROVIDER_ID : this.originalSearchProvider;
|
|
3800
3829
|
const nextFetch = codexSelected || options.pluginFetch === true ? CODEX_FETCH_PROVIDER_ID : this.originalFetchProvider;
|
|
3801
|
-
|
|
3830
|
+
const configured = config.searchProvider === nextSearch && config.fetchProvider === nextFetch;
|
|
3831
|
+
const applied = running === void 0 || running.searchProvider === nextSearch && running.fetchProvider === nextFetch;
|
|
3832
|
+
if (configured && applied) return;
|
|
3802
3833
|
const nextConfig = { ...config };
|
|
3803
3834
|
if (nextSearch === void 0) delete nextConfig.searchProvider;
|
|
3804
3835
|
else nextConfig.searchProvider = nextSearch;
|
|
3805
3836
|
if (nextFetch === void 0) delete nextConfig.fetchProvider;
|
|
3806
3837
|
else nextConfig.fetchProvider = nextFetch;
|
|
3807
|
-
|
|
3838
|
+
this.state = "applying";
|
|
3839
|
+
try {
|
|
3840
|
+
if (configured && entry.fiber) await entry.fiber.update(nextConfig, true);
|
|
3841
|
+
else await entry.update({ config: nextConfig });
|
|
3842
|
+
this.state = "applied";
|
|
3843
|
+
} catch (error) {
|
|
3844
|
+
this.state = "failed";
|
|
3845
|
+
throw error;
|
|
3846
|
+
}
|
|
3808
3847
|
}
|
|
3809
3848
|
findWebEntry() {
|
|
3810
|
-
for (const entry of this.loader.entries())
|
|
3811
|
-
if (entry.options.id === "web") return entry;
|
|
3812
|
-
if (entry.options.name === "@deepseek-ai/dsh-web") return entry;
|
|
3813
|
-
}
|
|
3849
|
+
for (const entry of this.loader.entries()) if (entry.options.id === "web" || entry.options.name === "@deepseek-ai/dsh-web") return entry;
|
|
3814
3850
|
return null;
|
|
3815
3851
|
}
|
|
3816
3852
|
};
|
|
@@ -3818,6 +3854,10 @@ function currentConfig(entry) {
|
|
|
3818
3854
|
const config = entry.options.config;
|
|
3819
3855
|
return typeof config === "object" && config !== null && !Array.isArray(config) ? config : {};
|
|
3820
3856
|
}
|
|
3857
|
+
/** Never include paths, credentials, or arbitrary configuration in public diagnostics. */
|
|
3858
|
+
function providerId(value) {
|
|
3859
|
+
return typeof value === "string" && /^[a-zA-Z0-9_-]{1,80}$/.test(value) ? value : null;
|
|
3860
|
+
}
|
|
3821
3861
|
//#endregion
|
|
3822
3862
|
//#region src/host/antigravity/types.ts
|
|
3823
3863
|
const PROVIDER_NAME = "Antigravity";
|
|
@@ -6212,7 +6252,7 @@ function apply(ctx, pluginConfig = {}) {
|
|
|
6212
6252
|
ctx.logger.warn(`[dsh-chatgpt-subscription] Web provider selection could not be applied: ${error instanceof Error ? error.message : String(error)}`);
|
|
6213
6253
|
});
|
|
6214
6254
|
};
|
|
6215
|
-
const disposeRoutes = registerRoutes(ctx, oauth, usage, preferences, proxyManager);
|
|
6255
|
+
const disposeRoutes = registerRoutes(ctx, oauth, usage, preferences, proxyManager, searchSwitcher);
|
|
6216
6256
|
const disposeAdapter = ctx.llm.registerAdapter([PROVIDER_ID$1], adapter);
|
|
6217
6257
|
const disposeImageTool = ctx.tools.register(createCodexImageTool(oauth, ctx.attachments, { fetchFn: proxyFetch }));
|
|
6218
6258
|
ctx.inject(["web"], (ctx) => {
|
|
@@ -6221,10 +6261,13 @@ function apply(ctx, pluginConfig = {}) {
|
|
|
6221
6261
|
applyWebProviders();
|
|
6222
6262
|
});
|
|
6223
6263
|
const disposePreferenceWatch = preferences.watch((next) => applyWebProviders(next));
|
|
6264
|
+
const disposeReadyWatch = ctx.get("appReady")?.onReady(() => applyWebProviders());
|
|
6224
6265
|
const disposeProxyWatch = proxyManager.onSystemProxyDetected(() => {
|
|
6225
6266
|
applyWebProviders();
|
|
6226
6267
|
});
|
|
6227
6268
|
return () => {
|
|
6269
|
+
searchSwitcher.dispose();
|
|
6270
|
+
disposeReadyWatch?.();
|
|
6228
6271
|
disposeProxyWatch();
|
|
6229
6272
|
disposePreferenceWatch();
|
|
6230
6273
|
disposeImageTool();
|
|
@@ -6241,4 +6284,4 @@ function localWebServerBaseUrl(host, port) {
|
|
|
6241
6284
|
return `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}`;
|
|
6242
6285
|
}
|
|
6243
6286
|
//#endregion
|
|
6244
|
-
export { AntigravityAdapter, CodexChatGptAdapter, Config, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, SUBAGENT_MODEL_SELECTION_NAMESPACE, SUBAGENT_POLICY_EVENT, UsageService, WindowsDpapiTokenStore, apply, authorizedRoutesFor, beginWebLogin, clearCachedQuota, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, createSubagentAuthorization, credentialPath, delegationDenialReason, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, installSubagentModelAuthorization, loginAndSave, mapCodexUsage, modelSettingsPath, normalizeDelegationToolNames, parseAllowedRoutes, parseCodexUsage, parseResponsesStream, policyRoutesOf, refreshAntigravityToken, subagentModelSelectionPreference, unauthorizedRouteReason, validateAuthorizationScope, validateDelegationToolNames };
|
|
6287
|
+
export { AntigravityAdapter, CodexChatGptAdapter, Config, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, SUBAGENT_MODEL_SELECTION_NAMESPACE, SUBAGENT_POLICY_EVENT, SearchProviderSwitcher, UsageService, WindowsDpapiTokenStore, apply, authorizedRoutesFor, beginWebLogin, clearCachedQuota, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, createSubagentAuthorization, credentialPath, delegationDenialReason, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, installSubagentModelAuthorization, loginAndSave, mapCodexUsage, modelSettingsPath, normalizeDelegationToolNames, parseAllowedRoutes, parseCodexUsage, parseResponsesStream, policyRoutesOf, refreshAntigravityToken, subagentModelSelectionPreference, unauthorizedRouteReason, validateAuthorizationScope, validateDelegationToolNames };
|
|
@@ -2,6 +2,7 @@ import type { Context } from '@deepseek-ai/cordis';
|
|
|
2
2
|
import { OAuthService } from './oauth-service.ts';
|
|
3
3
|
import { type SubscriptionPreferenceStore } from './preferences.ts';
|
|
4
4
|
import type { ProxyManager } from './proxy-manager.ts';
|
|
5
|
+
import type { SearchProviderSwitcher } from './search-provider-switcher.ts';
|
|
5
6
|
import { UsageService } from './usage-service.ts';
|
|
6
|
-
export declare function registerRoutes(ctx: Context, oauth: OAuthService, usage: UsageService, preferences: SubscriptionPreferenceStore, proxyManager?: ProxyManager): () => void;
|
|
7
|
+
export declare function registerRoutes(ctx: Context, oauth: OAuthService, usage: UsageService, preferences: SubscriptionPreferenceStore, proxyManager?: ProxyManager, searchSwitcher?: SearchProviderSwitcher): () => void;
|
|
7
8
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/host/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAmB,KAAK,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAIpE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,2BAA2B,EACxC,YAAY,CAAC,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/host/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAmB,KAAK,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAIpE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,2BAA2B,EACxC,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,sBAAsB,GACtC,MAAM,IAAI,CAuKZ"}
|
|
@@ -3,27 +3,28 @@ import type { SearchProviderPreference } from '../shared/contracts.ts';
|
|
|
3
3
|
interface LoaderLike {
|
|
4
4
|
entries(): Iterable<Entry>;
|
|
5
5
|
}
|
|
6
|
-
/** What one selection asks for on top of the settings preference. */
|
|
7
6
|
export interface WebProviderSelectionOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Whether this plugin's fetch provider must serve the `web_fetch` tool.
|
|
10
|
-
*
|
|
11
|
-
* DSH's built-in provider resolves and pins every destination before it
|
|
12
|
-
* connects and routes through a proxy only when the process environment names
|
|
13
|
-
* one, so an OS-level proxy plus the fake-ip DNS that usually comes with it
|
|
14
|
-
* fails every fetch with `WEB_BLOCKED_URL`. Selecting this plugin's provider
|
|
15
|
-
* hands the origin's resolution to the configured proxy — the same
|
|
16
|
-
* proxied-hop semantics DSH applies to a URL it routes through a proxy.
|
|
17
|
-
*/
|
|
18
7
|
readonly pluginFetch?: boolean;
|
|
19
8
|
}
|
|
9
|
+
/** Configuration diagnostics, not proof that an in-flight tool uses this service. */
|
|
10
|
+
export interface SearchProviderSwitcherStatus {
|
|
11
|
+
readonly state: 'idle' | 'applying' | 'applied' | 'missing' | 'failed';
|
|
12
|
+
readonly configuredSearchProvider: string | null;
|
|
13
|
+
readonly configuredFetchProvider: string | null;
|
|
14
|
+
}
|
|
20
15
|
export declare class SearchProviderSwitcher {
|
|
21
16
|
private readonly loader;
|
|
22
17
|
private originalSearchProvider;
|
|
23
18
|
private originalFetchProvider;
|
|
24
19
|
private initialized;
|
|
20
|
+
private pending;
|
|
21
|
+
private disposed;
|
|
22
|
+
dispose(): void;
|
|
23
|
+
private state;
|
|
25
24
|
constructor(loader: LoaderLike);
|
|
25
|
+
status(): SearchProviderSwitcherStatus;
|
|
26
26
|
select(preference: SearchProviderPreference, options?: WebProviderSelectionOptions): Promise<void>;
|
|
27
|
+
private applySelection;
|
|
27
28
|
private findWebEntry;
|
|
28
29
|
}
|
|
29
30
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-provider-switcher.d.ts","sourceRoot":"","sources":["../../../src/host/search-provider-switcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAG9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAEtE,UAAU,UAAU;IAClB,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;CAC3B;AAED,
|
|
1
|
+
{"version":3,"file":"search-provider-switcher.d.ts","sourceRoot":"","sources":["../../../src/host/search-provider-switcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAG9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAEtE,UAAU,UAAU;IAClB,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,qFAAqF;AACrF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;IACtE,QAAQ,CAAC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD;AAED,qBAAa,sBAAsB;IAUrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATnC,OAAO,CAAC,sBAAsB,CAAoB;IAClD,OAAO,CAAC,qBAAqB,CAAoB;IACjD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,IAAI,IAAI;IACf,OAAO,CAAC,KAAK,CAAgD;gBAEhC,MAAM,EAAE,UAAU;IAE/C,MAAM,IAAI,4BAA4B;IAUtC,MAAM,CAAC,UAAU,EAAE,wBAAwB,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,IAAI,CAAC;YAOxF,cAAc;IA6C5B,OAAO,CAAC,YAAY;CAMrB"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export { CodexChatGptAdapter } from './host/adapter.ts';
|
|
|
27
27
|
export { createCodexImageTool } from './host/codex-images.ts';
|
|
28
28
|
export { createCodexSearchProvider } from './host/codex-search.ts';
|
|
29
29
|
export { createCodexFetchProvider } from './host/codex-fetch.ts';
|
|
30
|
+
export { SearchProviderSwitcher, type SearchProviderSwitcherStatus } from './host/search-provider-switcher.ts';
|
|
30
31
|
export { ResponsesClient, parseResponsesStream } from './host/responses-client.ts';
|
|
31
32
|
export { UsageService, mapCodexUsage, parseCodexUsage } from './host/usage-service.ts';
|
|
32
33
|
export { createPlatformTokenStore } from './host/platform-token-store.ts';
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAsCxC,yDAAyD;AACzD,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,SAAS,GAAG,YAAY,CAAA;CAC9C;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAI3B,CAAA;AAEF,eAAO,MAAM,MAAM,UAAqE,CAAA;AAExF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,GAAE,MAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAsCxC,yDAAyD;AACzD,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,SAAS,GAAG,YAAY,CAAA;CAC9C;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAI3B,CAAA;AAEF,eAAO,MAAM,MAAM,UAAqE,CAAA;AAExF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,GAAE,MAAW,GAAG,IAAI,CAsHnE;AAED,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EACL,kCAAkC,EAClC,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,iCAAiC,EACjC,4BAA4B,EAC5B,kBAAkB,EAClB,cAAc,EACd,gCAAgC,EAChC,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAC9G,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAClB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA"}
|