@getpara/react-common 2.0.0-alpha.66 → 2.0.0-alpha.68
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/README.md +13 -0
- package/dist/components/WalletSelect.js +0 -1
- package/dist/constants/externalWalletDefaults.d.ts +3 -0
- package/dist/constants/externalWalletDefaults.js +3 -0
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/types/externalWalletCommon.d.ts +7 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/openMobileUrl.d.ts +1 -0
- package/dist/utils/openMobileUrl.js +34 -0
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
https://www.npmjs.com/package/@getpara/react-common
|
|
2
|
+
|
|
3
|
+
`@getpara/react-common` is a package that contains shared React components and utilities used across Para's React SDK ecosystem
|
|
4
|
+
|
|
5
|
+
###Prerequisites
|
|
6
|
+
|
|
7
|
+
To use Para, you need an API key. This key authenticates your requests to Para services and is essential for integration.
|
|
8
|
+
|
|
9
|
+
Don't have an API key yet? Request access to the [Developer Portal](https://developer.getpara.com/) to create API keys, manage billing, teams, and more.
|
|
10
|
+
|
|
11
|
+
###Learn more
|
|
12
|
+
|
|
13
|
+
For more information on Para’s React SDK visit the [Para Docs](https://docs.getpara.com/v2/react/quickstart)
|
|
@@ -155,7 +155,6 @@ const SelectContainer = safeStyled.div`
|
|
|
155
155
|
`;
|
|
156
156
|
const WalletTypeIcon = safeStyled(WalletTypeIconBase)`
|
|
157
157
|
--border: 1px solid var(--cpsl-color-background-8);
|
|
158
|
-
--background: var(--cpsl-color-background-0);
|
|
159
158
|
--border-radius: 4px;
|
|
160
159
|
`;
|
|
161
160
|
const CopyButton = safeStyled(CpslButton)`
|
|
@@ -4,6 +4,7 @@ export declare const defaultCosmosExternalWallet: {
|
|
|
4
4
|
chains: any[];
|
|
5
5
|
chainId: any;
|
|
6
6
|
disconnect: () => Promise<void>;
|
|
7
|
+
disconnectStatus: string;
|
|
7
8
|
switchChain: () => Promise<void>;
|
|
8
9
|
connectParaEmbedded: () => Promise<{}>;
|
|
9
10
|
signMessage: () => Promise<{}>;
|
|
@@ -20,6 +21,7 @@ export declare const defaultEvmExternalWallet: {
|
|
|
20
21
|
avatar: any;
|
|
21
22
|
balance: any;
|
|
22
23
|
disconnect: () => Promise<void>;
|
|
24
|
+
disconnectStatus: string;
|
|
23
25
|
switchChain: () => Promise<void>;
|
|
24
26
|
connectParaEmbedded: () => Promise<{}>;
|
|
25
27
|
signMessage: () => Promise<{}>;
|
|
@@ -36,6 +38,7 @@ export declare const defaultEvmExternalWallet: {
|
|
|
36
38
|
export declare const defaultSolanaExternalWallet: {
|
|
37
39
|
wallets: any[];
|
|
38
40
|
disconnect: () => Promise<void>;
|
|
41
|
+
disconnectStatus: string;
|
|
39
42
|
signMessage: () => Promise<{}>;
|
|
40
43
|
signVerificationMessage: () => Promise<{}>;
|
|
41
44
|
requestInfo: () => Promise<ExternalWalletInfo>;
|
|
@@ -5,6 +5,7 @@ const defaultCosmosExternalWallet = {
|
|
|
5
5
|
chains: [],
|
|
6
6
|
chainId: void 0,
|
|
7
7
|
disconnect: () => Promise.resolve(),
|
|
8
|
+
disconnectStatus: "idle",
|
|
8
9
|
switchChain: () => Promise.resolve(),
|
|
9
10
|
connectParaEmbedded: () => Promise.resolve({}),
|
|
10
11
|
signMessage: () => Promise.resolve({}),
|
|
@@ -21,6 +22,7 @@ const defaultEvmExternalWallet = {
|
|
|
21
22
|
avatar: void 0,
|
|
22
23
|
balance: void 0,
|
|
23
24
|
disconnect: () => Promise.resolve(),
|
|
25
|
+
disconnectStatus: "idle",
|
|
24
26
|
switchChain: () => Promise.resolve(),
|
|
25
27
|
connectParaEmbedded: () => Promise.resolve({}),
|
|
26
28
|
signMessage: () => Promise.resolve({}),
|
|
@@ -35,6 +37,7 @@ const defaultEvmExternalWallet = {
|
|
|
35
37
|
const defaultSolanaExternalWallet = {
|
|
36
38
|
wallets: [],
|
|
37
39
|
disconnect: () => Promise.resolve(),
|
|
40
|
+
disconnectStatus: "idle",
|
|
38
41
|
signMessage: () => Promise.resolve({}),
|
|
39
42
|
signVerificationMessage: () => Promise.resolve({}),
|
|
40
43
|
requestInfo: () => Promise.resolve({}),
|
|
@@ -25,7 +25,7 @@ export declare function getNetworkName(str: TNetwork | string): string;
|
|
|
25
25
|
export declare function getNetworkIcon(str: TNetwork | string): IconType;
|
|
26
26
|
export declare function getAssetCode(str: TOnRampAsset | string): string;
|
|
27
27
|
export declare function getAssetName(str: TOnRampAsset | string): string;
|
|
28
|
-
export declare function getAssetIcon(str: TOnRampAsset | string): "alertCircle" | "alertTriangle" | "alignVerticalCenter" | "angelListBrand" | "angelList" | "appleBrand" | "apple" | "arbitrumBrand" | "arrowCircleBrokenDownLeft" | "arrowCircleDownFilled" | "arrowCircleDown" | "arrowNarrow" | "arrow" | "asterisk" | "backpack" | "backupKit" | "bank" | "baseBrand" | "beraBrand" | "brush" | "celoBrand" | "checkCircleFilled" | "checkCircle" | "checkSquare" | "check" | "chevronDown" | "chevronRight" | "chevronSelectorVertical" | "chevronUp" | "clock" | "close" | "clubhouseBrand" | "clubhouse" | "code" | "coinbase" | "copy07" | "copy" | "cosmosCircle" | "cosmos" | "cosmostation" | "creditCard02" | "creditCard" | "cube03" | "cubeOutline" | "cube" | "currencyDollar" | "decentBrand" | "decent" | "dell" | "discordBrand" | "discord" | "dot" | "dotsSquare" | "dots" | "downloadCloud" | "download" | "dribbbleBrand" | "dribbble" | "earth" | "edit02" | "emptyCircle" | "ethCircle" | "ethereum" | "eyeOff" | "eye" | "facebookBrand" | "facebook" | "farcasterBrand" | "farcaster" | "figmaBrand" | "figma" | "file" | "folder" | "githubBrand" | "github" | "globe" | "glow" | "googleBrand" | "google" | "gridDots" | "haha" | "helpCircle" | "heroAlertCircle" | "heroCheckmarkCapsule" | "heroCheckmark" | "heroEmail" | "heroExternalConnection" | "heroLock" | "heroPasskey" | "heroPhone" | "heroPlusCircleCapsule" | "heroPlusCircle" | "heroWallet" | "home" | "hp" | "image" | "infoCircle" | "instagramBrand" | "instagram" | "keplr" | "key" | "laptop" | "leap" | "lenovo" | "lg" | "lightning01" | "lightning" | "linkExternal" | "linkedinBrand" | "linkedin" | "lockKeyholeCircle" | "logOut" | "mail" | "menu" | "metamask" | "monitor" | "moonpayBrand" | "moreLoginOptions" | "motorola" | "nobleBrand" | "okx" | "optimismBrand" | "paraArrow" | "paraBlackBg" | "paraBrand" | "paraIconBrand" | "paraIconQr" | "paraIcon" | "paraLogo" | "paraRingsDark" | "paraRings" | "para" | "passcode" | "phantom" | "phone" | "pintrestBrand" | "pintrest" | "plusCircle" | "plus" | "polygonBrand" | "polygon" | "puzzlePiece" | "qrCode02" | "qrCode" | "rabby" | "rainbow" | "rampNetworkBrand" | "rampNetwork" | "redditBrand" | "reddit" | "refresh" | "safe" | "samsung" | "search" | "send" | "settings" | "share" | "shield" | "shuffle" | "signalBrand" | "signal" | "sliders" | "snapchatBrand" | "snapchat" | "solanaCircle" | "solana" | "solflare" | "spacingHeight" | "star04Filled" | "star05" | "stars01Filled" | "stars02" | "stars" | "stopSquare" | "stripeBrand" | "telegramBrand" | "telegram" | "tetherBrand" | "tikTokBrand" | "tikTok" | "trash" | "tumblrBrand" | "tumblr" | "twitterBrand" | "twitter" | "usdcBrand" | "user01" | "userCircle" | "userPlus" | "user" | "valora" | "wallet02" | "walletConnect" | "wallet" | "x" | "youtubeBrand" | "youtube" | "zerion" | "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BQ2" | "BQ3" | "BR" | "BS" | "BT" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CD2" | "CF" | "CH" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DS" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB2" | "GB" | "GD" | "GE" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GQ" | "GR" | "GT" | "GU" | "GW" | "GY" | "HK" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SE" | "SG" | "SI" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TC" | "TD" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "US" | "UY" | "UZ" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WS" | "YE" | "ZA" | "ZM" | "ZW";
|
|
28
|
+
export declare function getAssetIcon(str: TOnRampAsset | string): "alertCircle" | "alertTriangle" | "alignVerticalCenter" | "angelListBrand" | "angelList" | "appleBrand" | "apple" | "arbitrumBrand" | "arrowCircleBrokenDownLeft" | "arrowCircleDownFilled" | "arrowCircleDown" | "arrowNarrow" | "arrow" | "asterisk" | "backpack" | "backupKit" | "bank" | "baseBrand" | "beraBrand" | "brush" | "celoBrand" | "checkCircleFilled" | "checkCircle" | "checkSquare" | "check" | "chevronDown" | "chevronRight" | "chevronSelectorVertical" | "chevronUp" | "clock" | "close" | "clubhouseBrand" | "clubhouse" | "code" | "coinbase" | "copy07" | "copy" | "cosmosCircle" | "cosmos" | "cosmostation" | "creditCard02" | "creditCard" | "cube03" | "cubeOutline" | "cube" | "currencyDollar" | "decentBrand" | "decent" | "dell" | "discordBrand" | "discord" | "dot" | "dotsSquare" | "dots" | "downloadCloud" | "download" | "dribbbleBrand" | "dribbble" | "earth" | "edit02" | "emptyCircle" | "ethCircle" | "ethereum" | "eyeOff" | "eye" | "facebookBrand" | "facebook" | "farcasterBrand" | "farcaster" | "figmaBrand" | "figma" | "file" | "folder" | "githubBrand" | "github" | "globe" | "glow" | "googleBrand" | "google" | "gridDots" | "haha" | "helpCircle" | "heroAlertCircle" | "heroCheckmarkCapsule" | "heroCheckmark" | "heroEmail" | "heroExternalConnection" | "heroLock" | "heroPasskey" | "heroPhone" | "heroPlusCircleCapsule" | "heroPlusCircle" | "heroWallet" | "home" | "hp" | "image" | "infoCircle" | "instagramBrand" | "instagram" | "keplr" | "key" | "laptop" | "leap" | "lenovo" | "lg" | "lightning01" | "lightning" | "linkExternal" | "linkedinBrand" | "linkedin" | "lockKeyholeCircle" | "logOut" | "mail" | "menu" | "metamask" | "monitor" | "moonpayBrand" | "moreLoginOptions" | "motorola" | "nobleBrand" | "okx" | "optimismBrand" | "paraArrow" | "paraBlackBg" | "paraBrand" | "paraIconBrand" | "paraIconQr" | "paraIcon" | "paraLogo" | "paraRingsDark" | "paraRings" | "para" | "passcode" | "phantom" | "phone" | "pintrestBrand" | "pintrest" | "plusCircle" | "plus" | "polygonBrand" | "polygon" | "puzzlePiece" | "qrCode02" | "qrCode" | "rabby" | "rainbow" | "rampNetworkBrand" | "rampNetwork" | "redditBrand" | "reddit" | "refresh" | "safe" | "samsung" | "search" | "send" | "settings" | "share" | "shield" | "shuffle" | "signalBrand" | "signal" | "sliders" | "snapchatBrand" | "snapchat" | "solanaCircle" | "solana" | "solflare" | "spacingHeight" | "star04Filled" | "star05" | "stars01Filled" | "stars02" | "stars" | "stopSquare" | "stripeBrand" | "telegramBrand" | "telegram" | "tetherBrand" | "tikTokBrand" | "tikTok" | "trash" | "tumblrBrand" | "tumblr" | "twitterBrand" | "twitter" | "usdcBrand" | "user01" | "userCircle" | "userPlus" | "user" | "valora" | "wallet02" | "walletConnect" | "wallet" | "x" | "youtubeBrand" | "youtube" | "zap" | "zerion" | "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BQ2" | "BQ3" | "BR" | "BS" | "BT" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CD2" | "CF" | "CH" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DS" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB2" | "GB" | "GD" | "GE" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GQ" | "GR" | "GT" | "GU" | "GW" | "GY" | "HK" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SE" | "SG" | "SI" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TC" | "TD" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "US" | "UY" | "UZ" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WS" | "YE" | "ZA" | "ZM" | "ZW";
|
|
29
29
|
export declare const MOBILE_SIZE = 480;
|
|
30
30
|
export declare const NETWORK_NOT_SUPPORTED_ERROR = "network not supported";
|
|
31
31
|
export declare const EMAIL_REGEX: RegExp;
|
package/dist/constants/index.js
CHANGED
|
@@ -44,7 +44,7 @@ const ICON_TYPES = {
|
|
|
44
44
|
tetherBrand: { isCircular: true }
|
|
45
45
|
};
|
|
46
46
|
const WALLET_TYPES_METADATA = {
|
|
47
|
-
EVM: { name: "EVM", icon: "
|
|
47
|
+
EVM: { name: "EVM", icon: "ethCircle", isCircular: true },
|
|
48
48
|
SOLANA: { name: "Solana", icon: "solana" },
|
|
49
49
|
COSMOS: { name: "Cosmos", icon: "cosmos", isCircular: true, isDark: true }
|
|
50
50
|
};
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import ParaWeb, { AuthStateLogin, AuthStateVerify, ExternalWalletInfo, TExternalWallet, TWalletType, Wallet } from '@getpara/web-sdk';
|
|
2
|
+
export type DisconnectType = 'ACCOUNT_LINKING' | 'ACCOUNT_WIDGET';
|
|
3
|
+
export type MutationStatus = 'idle' | 'pending' | 'error' | 'success';
|
|
4
|
+
export type DisconnectBaseOptions = {
|
|
5
|
+
disconnectType?: DisconnectType;
|
|
6
|
+
};
|
|
2
7
|
export type WalletMetadata = {
|
|
3
8
|
id: string;
|
|
4
9
|
internalId: TExternalWallet;
|
|
@@ -94,7 +99,8 @@ export type ExternalWalletContextType<S extends SignResult = SignResult> = {
|
|
|
94
99
|
signMessage: (_: SignArgs) => Promise<S>;
|
|
95
100
|
signVerificationMessage: () => Promise<S>;
|
|
96
101
|
requestInfo: (_: string) => Promise<ExternalWalletInfo>;
|
|
97
|
-
disconnectBase: (_?: string) => Promise<void>;
|
|
102
|
+
disconnectBase: (_?: string, __?: DisconnectBaseOptions) => Promise<void>;
|
|
103
|
+
disconnectStatus: MutationStatus;
|
|
98
104
|
};
|
|
99
105
|
export type ExternalWalletProviderConfigBase = {
|
|
100
106
|
onSwitchWallet?: (args: {
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -103,6 +103,7 @@ export * from "./formatBiometricHints.js";
|
|
|
103
103
|
export * from "./getExternalWalletDisplayName.js";
|
|
104
104
|
export * from "./getExternalWalletIcon.js";
|
|
105
105
|
export * from "./safeStyled.js";
|
|
106
|
+
export * from "./openMobileUrl.js";
|
|
106
107
|
export {
|
|
107
108
|
NetworkAssetAddresses,
|
|
108
109
|
NetworkChainIds,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const openMobileUrl: (url?: string) => void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "../chunk-MMUBH76A.js";
|
|
3
|
+
import { isAndroid, isMobile, isTelegram } from "@getpara/web-sdk";
|
|
4
|
+
const openMobileUrl = (url) => {
|
|
5
|
+
if (typeof window === "undefined") {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
if (isMobile()) {
|
|
9
|
+
if (!url) return;
|
|
10
|
+
if (isTelegram()) {
|
|
11
|
+
let href = url;
|
|
12
|
+
if (isAndroid()) {
|
|
13
|
+
try {
|
|
14
|
+
const decoded = decodeURI(url);
|
|
15
|
+
href = decoded === url ? encodeURI(url) : url;
|
|
16
|
+
} catch (e) {
|
|
17
|
+
href = encodeURI(url);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
window.open(href, "_blank", "noreferrer noopener");
|
|
21
|
+
} else if (url.startsWith("http")) {
|
|
22
|
+
const link = document.createElement("a");
|
|
23
|
+
link.href = url;
|
|
24
|
+
link.target = "_blank";
|
|
25
|
+
link.rel = "noreferrer noopener";
|
|
26
|
+
link.click();
|
|
27
|
+
} else {
|
|
28
|
+
window.location.href = url;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
openMobileUrl
|
|
34
|
+
};
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpara/react-common",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.68",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@getpara/react-components": "2.0.0-alpha.
|
|
6
|
-
"@getpara/web-sdk": "2.0.0-alpha.
|
|
5
|
+
"@getpara/react-components": "2.0.0-alpha.68",
|
|
6
|
+
"@getpara/web-sdk": "2.0.0-alpha.68",
|
|
7
7
|
"@moonpay/moonpay-react": "^1.8.3",
|
|
8
8
|
"@ramp-network/ramp-instant-sdk": "^4.0.5",
|
|
9
9
|
"libphonenumber-js": "^1.11.7",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
],
|
|
41
41
|
"type": "module",
|
|
42
42
|
"types": "dist/index.d.ts",
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "98955203281606201609bb4674f5984acb63d3bf"
|
|
44
44
|
}
|