@daimo/pay 0.3.4 → 0.3.6

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 (23) hide show
  1. package/build/index.es.js +53 -41
  2. package/build/index.es.js.map +1 -1
  3. package/build/packages/paykit/packages/connectkit/src/assets/chains.d.ts +14 -14
  4. package/build/packages/paykit/packages/connectkit/src/components/Common/Alert/types.d.ts +0 -1
  5. package/build/packages/paykit/packages/connectkit/src/components/Common/ChainSelectList/index.d.ts +1 -1
  6. package/build/packages/paykit/packages/connectkit/src/components/Common/CopyToClipboard/CopyToClipboardIcon.d.ts +2 -2
  7. package/build/packages/paykit/packages/connectkit/src/components/Common/OptionsList/index.d.ts +2 -3
  8. package/build/packages/paykit/packages/connectkit/src/components/Common/OrderHeader/index.d.ts +1 -1
  9. package/build/packages/paykit/packages/connectkit/src/components/Common/Portal/index.d.ts +0 -1
  10. package/build/packages/paykit/packages/connectkit/src/components/Common/ScrollArea/index.d.ts +3 -3
  11. package/build/packages/paykit/packages/connectkit/src/components/Common/Tooltip/types.d.ts +0 -1
  12. package/build/packages/paykit/packages/connectkit/src/components/ConnectModal/index.d.ts +0 -1
  13. package/build/packages/paykit/packages/connectkit/src/components/Spinners/CircleSpinner/index.d.ts +4 -4
  14. package/build/packages/paykit/packages/connectkit/src/components/Spinners/SquircleSpinner/index.d.ts +1 -1
  15. package/build/packages/paykit/packages/connectkit/src/components/contexts/web3/index.d.ts +1 -1
  16. package/build/packages/paykit/packages/connectkit/src/hooks/useConnect.d.ts +11 -11
  17. package/build/packages/paykit/packages/connectkit/src/hooks/useDaimoPayStatus.d.ts +1 -7
  18. package/build/packages/paykit/packages/connectkit/src/hooks/useFitText.d.ts +0 -1
  19. package/build/packages/paykit/packages/connectkit/src/hooks/useLockBodyScroll.d.ts +0 -1
  20. package/build/packages/paykit/packages/connectkit/src/utils/getPaymentInfo.d.ts +1 -2
  21. package/build/packages/paykit/packages/connectkit/src/utils/index.d.ts +6 -7
  22. package/build/packages/paykit/packages/connectkit/src/wallets/walletConfigs.d.ts +0 -1
  23. package/package.json +3 -3
package/build/index.es.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { http, useConfig, useAccountEffect, useConnectors as useConnectors$1, useAccount, useWriteContract, useSendTransaction, useSwitchChain, useConnect as useConnect$1, createConfig, useEnsAddress, useEnsName, useEnsAvatar, useDisconnect, useBalance, useChainId, WagmiContext } from 'wagmi';
2
- import { mainnet, base as base$1, polygon, optimism, arbitrum, linea, sepolia } from 'wagmi/chains';
2
+ import { mainnet, base as base$1, polygon, optimism, arbitrum, linea, sepolia, baseSepolia } from 'wagmi/chains';
3
3
  import { safe, injected, coinbaseWallet, walletConnect } from '@wagmi/connectors';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
  import { detect } from 'detect-browser';
6
6
  import React, { useEffect, useState, useCallback, useRef, useLayoutEffect, useMemo, createContext, createElement } from 'react';
7
7
  import { Buffer } from 'buffer';
8
- import { readDaimoPayOrderID, assert, assertNotNull, DaimoPayOrderMode, DaimoPayOrderStatusDest, capitalize, ExternalPaymentOptions, getAddressContraction, getDisplayPrice, writeDaimoPayOrderID, DaimoPayOrderStatusSource } from '@daimo/common';
8
+ import { readDaimoPayOrderID, assert, assertNotNull, DaimoPayOrderMode, DaimoPayOrderStatusDest, capitalize, ExternalPaymentOptions, getAddressContraction, getDisplayPrice, writeDaimoPayOrderID, DaimoPayIntentStatus, DaimoPayOrderStatusSource } from '@daimo/common';
9
9
  import styled$1, { css, keyframes, ThemeProvider } from 'styled-components';
10
- import { erc20Abi, getChainName, ethereum, arbitrum as arbitrum$1, base as base$2, optimism as optimism$1, polygon as polygon$1, ethereumSepolia, baseSepolia, getChainExplorerTxUrl } from '@daimo/contract';
10
+ import { erc20Abi, getChainName, ethereum, arbitrum as arbitrum$1, base as base$2, optimism as optimism$1, polygon as polygon$1, ethereumSepolia, baseSepolia as baseSepolia$1, getChainExplorerTxUrl } from '@daimo/contract';
11
11
  import { zeroAddress, parseUnits } from 'viem';
12
12
  import { createTRPCClient, httpBatchLink } from '@trpc/client';
13
13
  import { motion, AnimatePresence, MotionConfig } from 'framer-motion';
@@ -71,6 +71,7 @@ const REQUIRED_CHAINS = [
71
71
  arbitrum,
72
72
  linea,
73
73
  sepolia,
74
+ baseSepolia,
74
75
  ];
75
76
  const defaultConfig = ({ appName = "Daimo Pay", appIcon, appDescription, appUrl, walletConnectProjectId, coinbaseWalletPreference, chains = REQUIRED_CHAINS, client, ...props }) => {
76
77
  globalAppName = appName;
@@ -899,7 +900,7 @@ const trpc = createTRPCClient({
899
900
  ],
900
901
  });
901
902
 
902
- function getPaymentInfo() {
903
+ function getPaymentInfo(log) {
903
904
  // Wallet state.
904
905
  const { address: senderAddr } = useAccount();
905
906
  const { writeContractAsync } = useWriteContract();
@@ -917,7 +918,7 @@ function getPaymentInfo() {
917
918
  platform: detectPlatform(window.navigator.userAgent),
918
919
  refundAddress: senderAddr,
919
920
  });
920
- console.log(`[CHECKOUT] Hydrated order: ${JSON.stringify(hydratedOrder)}, checking out with ${tokenAmount.token.token}`);
921
+ log(`[CHECKOUT] Hydrated order: ${JSON.stringify(hydratedOrder)}, checking out with ${tokenAmount.token.token}`);
921
922
  const txHash = await (async () => {
922
923
  try {
923
924
  if (tokenAmount.token.token === zeroAddress) {
@@ -978,7 +979,7 @@ function getPaymentInfo() {
978
979
  setDaimoPayOrder(order);
979
980
  }, [daimoPayOrder?.id]);
980
981
  const setChosenUsd = (usdAmount) => {
981
- console.log(`[CHECKOUT] Setting chosen USD amount to ${usdAmount}`);
982
+ log(`[CHECKOUT] Setting chosen USD amount to ${usdAmount}`);
982
983
  assert(!!daimoPayOrder);
983
984
  const token = daimoPayOrder.destFinalCallTokenAmount.token;
984
985
  const tokenAmount = parseUnits((usdAmount / token.usd).toString(), token.decimals);
@@ -1004,7 +1005,7 @@ function getPaymentInfo() {
1004
1005
  console.error(`[CHECKOUT] No order found for ${payId}`);
1005
1006
  return;
1006
1007
  }
1007
- console.log(`[CHECKOUT] Parsed order: ${JSON.stringify(order)}`);
1008
+ log(`[CHECKOUT] Parsed order: ${JSON.stringify(order)}`);
1008
1009
  setDaimoPayOrder(order);
1009
1010
  }, [daimoPayOrder]);
1010
1011
  return {
@@ -2163,7 +2164,7 @@ const ResetContainer = styled(motion.div) `
2163
2164
  `;
2164
2165
 
2165
2166
  var name = "@daimo/pay";
2166
- var version = "0.3.4";
2167
+ var version = "0.3.6";
2167
2168
  var author = "Daimo";
2168
2169
  var homepage = "https://pay.daimo.com";
2169
2170
  var license = "BSD-2-Clause license";
@@ -2202,8 +2203,8 @@ var keywords = [
2202
2203
  "crypto"
2203
2204
  ];
2204
2205
  var dependencies = {
2205
- "@daimo/common": "0.3.1",
2206
- "@daimo/contract": "0.3.1",
2206
+ "@daimo/common": "0.3.6",
2207
+ "@daimo/contract": "0.3.6",
2207
2208
  "@trpc/client": "^11.0.0-next-beta.318",
2208
2209
  "@trpc/server": "^11.0.0-next-beta.318",
2209
2210
  buffer: "^6.0.3",
@@ -6608,6 +6609,7 @@ const ScrollAreaContainer = styled.div `
6608
6609
 
6609
6610
  const ArrowDown = () => (jsx("svg", { width: "11", height: "12", viewBox: "0 0 11 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M5.49438 1L5.49438 11M5.49438 11L9.5 7M5.49438 11L1.5 7", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) }));
6610
6611
  const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) => {
6612
+ const { log } = useContext();
6611
6613
  const ref = useRef(null);
6612
6614
  const moreRef = useRef(null);
6613
6615
  const isMobile = useIsMobile();
@@ -6621,7 +6623,7 @@ const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) =>
6621
6623
  moreRef.current.classList.remove("hide");
6622
6624
  }
6623
6625
  }
6624
- console.log(`[SCROLL AREA]: ${el.scrollHeight}, ${el.clientHeight}`);
6626
+ log(`[SCROLL AREA]: ${el.scrollHeight}, ${el.clientHeight}`);
6625
6627
  const handleScroll = (e) => {
6626
6628
  const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth, } = e.target;
6627
6629
  if (moreRef.current) {
@@ -6902,7 +6904,7 @@ const chainToLogo = {
6902
6904
  [optimism$1.chainId]: jsx(Optimism, {}),
6903
6905
  [polygon$1.chainId]: jsx(Polygon, {}),
6904
6906
  [ethereumSepolia.chainId]: jsx(Ethereum, {}),
6905
- [baseSepolia.chainId]: jsx(Base, {}),
6907
+ [baseSepolia$1.chainId]: jsx(Base, {}),
6906
6908
  };
6907
6909
  var ChainIcons = {
6908
6910
  UnknownChain,
@@ -6958,6 +6960,7 @@ const InputField = styled(motion.input) `
6958
6960
  line-height: inherit;
6959
6961
  font-size: inherit;
6960
6962
  font-weight: inherit;
6963
+ color: inherit;
6961
6964
  border: none;
6962
6965
  padding: 0;
6963
6966
  &:focus {
@@ -10037,8 +10040,10 @@ const Confirmation = () => {
10037
10040
  }, [refreshOrder]);
10038
10041
  const { done, txURL, currency } = (() => {
10039
10042
  if (daimoPayOrder && daimoPayOrder.mode === DaimoPayOrderMode.HYDRATED) {
10040
- if (daimoPayOrder.destStatus === DaimoPayOrderStatusDest.CLAIMED ||
10041
- daimoPayOrder.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED) {
10043
+ if (daimoPayOrder.destStatus ===
10044
+ DaimoPayOrderStatusDest.FAST_FINISH_SUBMITTED || // Frontends are optimistic, assume submits will be successful
10045
+ daimoPayOrder.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED ||
10046
+ daimoPayOrder.destStatus === DaimoPayOrderStatusDest.CLAIM_SUCCESSFUL) {
10042
10047
  const txHash = daimoPayOrder.destFastFinishTxHash ?? daimoPayOrder.destClaimTxHash;
10043
10048
  const chainId = daimoPayOrder.destFinalCallTokenAmount.token.chainId;
10044
10049
  const currency = `${capitalize(getChainName(chainId))} ${daimoPayOrder.destFinalCallTokenAmount.token.symbol}`;
@@ -10130,7 +10135,7 @@ var PayState;
10130
10135
  PayState["RequestSuccessful"] = "Payment Successful";
10131
10136
  })(PayState || (PayState = {}));
10132
10137
  const PayWithToken = () => {
10133
- const { triggerResize, paymentInfo, setRoute } = useContext();
10138
+ const { triggerResize, paymentInfo, setRoute, log } = useContext();
10134
10139
  const { selectedTokenOption, payWithToken } = paymentInfo;
10135
10140
  const [payState, setPayState] = useState(PayState.RequestingPayment);
10136
10141
  const walletChainId = useChainId();
@@ -10159,7 +10164,7 @@ const PayWithToken = () => {
10159
10164
  setPayState(PayState.SwitchingChain);
10160
10165
  const switchChain = await trySwitchingChain(option);
10161
10166
  if (!switchChain) {
10162
- console.log("Switching chain failed");
10167
+ console.error("Switching chain failed");
10163
10168
  setPayState(PayState.RequestCancelled);
10164
10169
  return;
10165
10170
  }
@@ -10175,7 +10180,7 @@ const PayWithToken = () => {
10175
10180
  if (e?.name === "ConnectorChainMismatchError") {
10176
10181
  // Workaround for Rainbow wallet bug -- user is able to switch chain without
10177
10182
  // the wallet updating the chain ID for wagmi.
10178
- console.log("Chain mismatch detected, attempting to switch and retry");
10183
+ log("Chain mismatch detected, attempting to switch and retry");
10179
10184
  const switchSuccessful = await trySwitchingChain(option, true);
10180
10185
  if (switchSuccessful) {
10181
10186
  try {
@@ -10433,10 +10438,10 @@ const OptionsContainer = styled.div `
10433
10438
  `;
10434
10439
 
10435
10440
  const OptionsList = ({ options, isLoading, requiredSkeletons, }) => {
10436
- const { triggerResize } = useContext();
10441
+ const { triggerResize, log } = useContext();
10437
10442
  const optionsLength = options.length;
10438
10443
  useEffect(() => {
10439
- console.log(`[OPTIONS RESIZE]: ${optionsLength}, triggering resize`);
10444
+ log(`[OPTIONS RESIZE]: ${optionsLength}, triggering resize`);
10440
10445
  if (optionsLength > 0) {
10441
10446
  triggerResize();
10442
10447
  }
@@ -10648,6 +10653,7 @@ const SelectToken = () => {
10648
10653
  useEffect(() => {
10649
10654
  if (!payerAddress || !daimoPayOrder)
10650
10655
  return;
10656
+ setPaymentOptions(null);
10651
10657
  setIsLoadingOptions(true);
10652
10658
  const destChainId = daimoPayOrder.destFinalCallTokenAmount.token.chainId;
10653
10659
  trpc.getWalletPaymentOptions
@@ -10665,7 +10671,7 @@ const SelectToken = () => {
10665
10671
  justifyContent: "center",
10666
10672
  paddingTop: 16,
10667
10673
  paddingBottom: 16,
10668
- }, children: [jsx(ModalH1, { children: "Insufficient balance. Please select an alternative payment method." }), jsx(Button, { onClick: () => setRoute(ROUTES.SELECT_METHOD), children: "Select another method" })] })), jsx(OptionsList, { requiredSkeletons: 4, isLoading: isLoadingOptions, options: paymentOptions?.map((option) => {
10674
+ }, children: [jsx(ModalH1, { children: "Insufficient balance. Please select an alternative payment method." }), jsx(Button, { onClick: () => setRoute(ROUTES.SELECT_METHOD), children: "Select Another Method" })] })), jsx(OptionsList, { requiredSkeletons: 4, isLoading: isLoadingOptions, options: paymentOptions?.map((option) => {
10669
10675
  const capitalizedChainName = capitalize(getChainName(option.required.token.chainId));
10670
10676
  const title = `${getDisplayPrice(option.required)} ${option.required.token.symbol} on ${capitalizedChainName}`;
10671
10677
  const subtitle = `Balance: ${getDisplayPrice(option.balance)} ${option.balance.token.symbol}`;
@@ -10687,6 +10693,7 @@ const SelectToken = () => {
10687
10693
  const WaitingOther = () => {
10688
10694
  const { triggerResize, paymentInfo, setRoute } = useContext();
10689
10695
  const { selectedExternalOption, payWithExternal, paymentWaitingMessage, daimoPayOrder, } = paymentInfo;
10696
+ const [externalURL, setExternalURL] = useState(null);
10690
10697
  useEffect(() => {
10691
10698
  const checkForSourcePayment = async () => {
10692
10699
  if (!daimoPayOrder)
@@ -10701,6 +10708,20 @@ const WaitingOther = () => {
10701
10708
  const interval = setInterval(checkForSourcePayment, 1000);
10702
10709
  return () => clearInterval(interval);
10703
10710
  }, [daimoPayOrder?.id]);
10711
+ useEffect(() => {
10712
+ if (!selectedExternalOption)
10713
+ return;
10714
+ payWithExternal(selectedExternalOption.id).then((url) => {
10715
+ setExternalURL(url);
10716
+ setTimeout(() => {
10717
+ window.open(url, "_blank");
10718
+ });
10719
+ });
10720
+ }, [selectedExternalOption]);
10721
+ const waitingMessageLength = paymentWaitingMessage?.length;
10722
+ useEffect(() => {
10723
+ triggerResize();
10724
+ }, [waitingMessageLength, externalURL]);
10704
10725
  if (!selectedExternalOption) {
10705
10726
  return jsx(PageContent, {});
10706
10727
  }
@@ -10712,23 +10733,10 @@ const WaitingOther = () => {
10712
10733
  return (jsx(SquircleSpinner, { logo: jsx("img", { src: selectedExternalOption.logoURI }), connecting: true }));
10713
10734
  }
10714
10735
  })();
10715
- useEffect(() => {
10716
- if (!selectedExternalOption)
10717
- return;
10718
- // Note: Safari doesn't support window.open in an async function.
10719
- // We need to trigger this in the main thread:
10720
- // https://stackoverflow.com/a/39387533
10721
- const windowOpen = window.open("about:blank", "_blank");
10722
- payWithExternal(selectedExternalOption.id).then((url) => {
10723
- if (windowOpen)
10724
- windowOpen.location.href = url;
10725
- });
10726
- }, [selectedExternalOption]);
10727
- const waitingMessageLength = paymentWaitingMessage?.length;
10728
- useEffect(() => {
10729
- triggerResize();
10730
- }, [waitingMessageLength]);
10731
- return (jsxs(PageContent, { children: [jsx(LoadingContainer, { children: jsx(AnimationContainer, { "$circle": selectedExternalOption.logoShape === "circle", children: jsx(AnimatePresence, { children: optionSpinner }) }) }), jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [jsx(ModalH1, { children: "Waiting for Payment" }), paymentWaitingMessage && (jsx(ModalBody, { style: { marginTop: 12 }, children: paymentWaitingMessage }))] })] }));
10736
+ return (jsxs(PageContent, { children: [jsx(LoadingContainer, { children: jsx(AnimationContainer, { "$circle": selectedExternalOption.logoShape === "circle", children: jsx(AnimatePresence, { children: optionSpinner }) }) }), jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [jsx(ModalH1, { children: "Waiting for Payment" }), paymentWaitingMessage && (jsx(ModalBody, { style: { marginTop: 12, marginBottom: 12 }, children: paymentWaitingMessage })), jsx(Button, { icon: jsx(ExternalLinkIcon, {}), onClick: () => {
10737
+ if (externalURL)
10738
+ window.open(externalURL, "_blank");
10739
+ }, children: "Open in New Tab" })] })] }));
10732
10740
  };
10733
10741
  const LoadingContainer = styled(motion.div) `
10734
10742
  display: flex;
@@ -10819,7 +10827,9 @@ const ConnectModal = ({ mode = "auto", theme = "auto", customTheme = customTheme
10819
10827
  context.setOpen(false);
10820
10828
  }
10821
10829
  useEffect(() => {
10822
- if (context.route === ROUTES.CONNECT || context.route === ROUTES.CONNECTORS || context.route === ROUTES.MOBILECONNECTORS) {
10830
+ if (context.route === ROUTES.CONNECT ||
10831
+ context.route === ROUTES.CONNECTORS ||
10832
+ context.route === ROUTES.MOBILECONNECTORS) {
10823
10833
  if (isConnected) {
10824
10834
  context.setRoute(ROUTES.SELECT_TOKEN);
10825
10835
  }
@@ -10962,7 +10972,7 @@ const DaimoPayProvider = ({ children, theme = "auto", mode = "auto", customTheme
10962
10972
  }
10963
10973
  }, [injectedConnector]);
10964
10974
  const log = debugMode ? console.log : () => { };
10965
- const paymentInfo = getPaymentInfo();
10975
+ const paymentInfo = getPaymentInfo(log);
10966
10976
  const loadPayment = async (payId) => {
10967
10977
  await paymentInfo.setPayId(payId);
10968
10978
  const daimoPayOrder = paymentInfo.daimoPayOrder;
@@ -11374,9 +11384,11 @@ function useDaimoPayStatus() {
11374
11384
  const order = paymentInfo.daimoPayOrder;
11375
11385
  const paymentId = writeDaimoPayOrderID(order.id);
11376
11386
  if (order.mode === DaimoPayOrderMode.HYDRATED) {
11377
- if (order.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED || order.destStatus === DaimoPayOrderStatusDest.CLAIMED) {
11387
+ if (order.intentStatus != DaimoPayIntentStatus.PENDING) {
11378
11388
  return {
11379
- status: "payment_completed",
11389
+ status: order.intentStatus === DaimoPayIntentStatus.SUCCESSFUL
11390
+ ? "payment_completed"
11391
+ : "payment_bounced",
11380
11392
  paymentId,
11381
11393
  };
11382
11394
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,7 +7,7 @@ export declare const Optimism: ({ testnet, ...props }: Logo) => import("react/js
7
7
  export declare const Arbitrum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
8
8
  export declare const Telos: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const Base: ({ testnet, ...props }: {
10
- testnet?: boolean | undefined;
10
+ testnet?: boolean;
11
11
  }) => import("react/jsx-runtime").JSX.Element;
12
12
  export declare const chainToLogo: {
13
13
  [x: number]: import("react/jsx-runtime").JSX.Element;
@@ -15,30 +15,30 @@ export declare const chainToLogo: {
15
15
  declare const _default: {
16
16
  UnknownChain: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
17
17
  Base: ({ testnet, ...props }: {
18
- testnet?: boolean | undefined;
18
+ testnet?: boolean;
19
19
  }) => import("react/jsx-runtime").JSX.Element;
20
20
  Ethereum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
21
21
  Polygon: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
22
22
  Optimism: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
23
23
  Arbitrum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
24
24
  Aurora: ({ testnet, ...props }: {
25
- testnet?: boolean | undefined;
25
+ testnet?: boolean;
26
26
  }) => import("react/jsx-runtime").JSX.Element;
27
27
  Avalanche: ({ testnet, ...props }: {
28
- testnet?: boolean | undefined;
28
+ testnet?: boolean;
29
29
  }) => import("react/jsx-runtime").JSX.Element;
30
30
  Celo: ({ testnet, ...props }: {
31
- testnet?: boolean | undefined;
31
+ testnet?: boolean;
32
32
  }) => import("react/jsx-runtime").JSX.Element;
33
33
  Telos: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
34
34
  Gnosis: ({ testnet, ...props }: {
35
- testnet?: boolean | undefined;
35
+ testnet?: boolean;
36
36
  }) => import("react/jsx-runtime").JSX.Element;
37
37
  Evmos: ({ testnet, ...props }: {
38
- testnet?: boolean | undefined;
38
+ testnet?: boolean;
39
39
  }) => import("react/jsx-runtime").JSX.Element;
40
40
  BinanceSmartChain: ({ testnet, ...props }: {
41
- testnet?: boolean | undefined;
41
+ testnet?: boolean;
42
42
  }) => import("react/jsx-runtime").JSX.Element;
43
43
  Foundry: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
44
44
  Sepolia: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
@@ -46,22 +46,22 @@ declare const _default: {
46
46
  zkSync: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
47
47
  Flare: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
48
48
  Canto: ({ testnet, ...props }: {
49
- testnet?: boolean | undefined;
49
+ testnet?: boolean;
50
50
  }) => import("react/jsx-runtime").JSX.Element;
51
51
  Fantom: ({ testnet, ...props }: {
52
- testnet?: boolean | undefined;
52
+ testnet?: boolean;
53
53
  }) => import("react/jsx-runtime").JSX.Element;
54
54
  Filecoin: ({ testnet, ...props }: {
55
- testnet?: boolean | undefined;
55
+ testnet?: boolean;
56
56
  }) => import("react/jsx-runtime").JSX.Element;
57
57
  Metis: ({ testnet, ...props }: {
58
- testnet?: boolean | undefined;
58
+ testnet?: boolean;
59
59
  }) => import("react/jsx-runtime").JSX.Element;
60
60
  IoTeX: ({ testnet, ...props }: {
61
- testnet?: boolean | undefined;
61
+ testnet?: boolean;
62
62
  }) => import("react/jsx-runtime").JSX.Element;
63
63
  Zora: ({ testnet, ...props }: {
64
- testnet?: boolean | undefined;
64
+ testnet?: boolean;
65
65
  }) => import("react/jsx-runtime").JSX.Element;
66
66
  };
67
67
  export default _default;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type AlertProps = {
3
2
  children?: React.ReactNode;
4
3
  icon?: React.ReactNode;
@@ -1,4 +1,4 @@
1
1
  declare const ChainSelectList: ({ variant, }: {
2
- variant?: "primary" | "secondary" | undefined;
2
+ variant?: "primary" | "secondary";
3
3
  }) => import("react/jsx-runtime").JSX.Element;
4
4
  export default ChainSelectList;
@@ -1,5 +1,5 @@
1
1
  declare const CopyToClipboardIcon: ({ copied, small, }: {
2
- copied?: boolean | undefined;
3
- small?: boolean | undefined;
2
+ copied?: boolean;
3
+ small?: boolean;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default CopyToClipboardIcon;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface Option {
3
2
  id: string;
4
3
  title: string;
@@ -8,7 +7,7 @@ interface Option {
8
7
  }
9
8
  declare const OptionsList: ({ options, isLoading, requiredSkeletons, }: {
10
9
  options: Option[];
11
- isLoading?: boolean | undefined;
12
- requiredSkeletons?: number | undefined;
10
+ isLoading?: boolean;
11
+ requiredSkeletons?: number;
13
12
  }) => import("react/jsx-runtime").JSX.Element;
14
13
  export default OptionsList;
@@ -1,3 +1,3 @@
1
1
  export declare const OrderHeader: ({ minified }: {
2
- minified?: boolean | undefined;
2
+ minified?: boolean;
3
3
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,2 @@
1
- /// <reference types="react" />
2
1
  declare const Portal: (props: any) => import("react").ReactPortal | null;
3
2
  export default Portal;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  export declare const ScrollArea: ({ children, height, backgroundColor, mobileDirection, }: {
3
3
  children: React.ReactNode;
4
- height?: number | undefined;
5
- backgroundColor?: string | undefined;
6
- mobileDirection?: "horizontal" | "vertical" | undefined;
4
+ height?: number;
5
+ backgroundColor?: string;
6
+ mobileDirection?: "horizontal" | "vertical";
7
7
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type TooltipSizeProps = "small" | "large";
3
2
  export type TooltipProps = {
4
3
  message?: string | React.ReactNode;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { CustomTheme, Languages, Mode, Theme } from "../../types";
3
2
  declare const ConnectModal: React.FC<{
4
3
  mode?: Mode;
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  declare const CircleSpinner: ({ logo, smallLogo, connecting, unavailable, countdown, }: {
3
3
  logo?: React.ReactNode;
4
- smallLogo?: boolean | undefined;
5
- connecting?: boolean | undefined;
6
- unavailable?: boolean | undefined;
7
- countdown?: boolean | undefined;
4
+ smallLogo?: boolean;
5
+ connecting?: boolean;
6
+ unavailable?: boolean;
7
+ countdown?: boolean;
8
8
  }) => import("react/jsx-runtime").JSX.Element;
9
9
  export default CircleSpinner;
@@ -1,5 +1,5 @@
1
1
  declare const SquircleSpinner: ({ logo, connecting, }: {
2
2
  logo?: React.ReactNode;
3
- connecting?: boolean | undefined;
3
+ connecting?: boolean;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default SquircleSpinner;
@@ -18,7 +18,7 @@ type Web3Context = {
18
18
  };
19
19
  declare const Web3Context: React.Context<Web3Context>;
20
20
  export declare const Web3ContextProvider: ({ enabled, children, }: {
21
- enabled?: boolean | undefined;
21
+ enabled?: boolean;
22
22
  children: React.ReactNode;
23
23
  }) => import("react/jsx-runtime").JSX.Element;
24
24
  export declare const useWeb3: () => Web3Context;
@@ -20,12 +20,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
20
20
  submittedAt: number;
21
21
  connect: ({ connector, chainId, mutation, }: {
22
22
  connector: CreateConnectorFn | Connector;
23
- chainId?: number | undefined;
23
+ chainId?: number;
24
24
  mutation?: UseConnectParameters["mutation"];
25
25
  }) => void;
26
26
  connectAsync: ({ connector, chainId, mutation, }: {
27
27
  connector: CreateConnectorFn | Connector;
28
- chainId?: number | undefined;
28
+ chainId?: number;
29
29
  mutation?: UseConnectParameters["mutation"];
30
30
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
31
31
  connectors: readonly Connector[];
@@ -33,7 +33,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
33
33
  data: undefined;
34
34
  variables: {
35
35
  chainId?: number | undefined;
36
- connector: CreateConnectorFn | Connector;
36
+ connector: Connector | CreateConnectorFn;
37
37
  };
38
38
  error: null;
39
39
  isError: false;
@@ -49,12 +49,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
49
49
  submittedAt: number;
50
50
  connect: ({ connector, chainId, mutation, }: {
51
51
  connector: CreateConnectorFn | Connector;
52
- chainId?: number | undefined;
52
+ chainId?: number;
53
53
  mutation?: UseConnectParameters["mutation"];
54
54
  }) => void;
55
55
  connectAsync: ({ connector, chainId, mutation, }: {
56
56
  connector: CreateConnectorFn | Connector;
57
- chainId?: number | undefined;
57
+ chainId?: number;
58
58
  mutation?: UseConnectParameters["mutation"];
59
59
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
60
60
  connectors: readonly Connector[];
@@ -62,7 +62,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
62
62
  data: undefined;
63
63
  variables: {
64
64
  chainId?: number | undefined;
65
- connector: CreateConnectorFn | Connector;
65
+ connector: Connector | CreateConnectorFn;
66
66
  };
67
67
  error: import("@wagmi/core").ConnectErrorType;
68
68
  isError: true;
@@ -78,12 +78,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
78
78
  submittedAt: number;
79
79
  connect: ({ connector, chainId, mutation, }: {
80
80
  connector: CreateConnectorFn | Connector;
81
- chainId?: number | undefined;
81
+ chainId?: number;
82
82
  mutation?: UseConnectParameters["mutation"];
83
83
  }) => void;
84
84
  connectAsync: ({ connector, chainId, mutation, }: {
85
85
  connector: CreateConnectorFn | Connector;
86
- chainId?: number | undefined;
86
+ chainId?: number;
87
87
  mutation?: UseConnectParameters["mutation"];
88
88
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
89
89
  connectors: readonly Connector[];
@@ -91,7 +91,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
91
91
  data: import("wagmi/query").ConnectData<import("wagmi").Config>;
92
92
  variables: {
93
93
  chainId?: number | undefined;
94
- connector: CreateConnectorFn | Connector;
94
+ connector: Connector | CreateConnectorFn;
95
95
  };
96
96
  error: null;
97
97
  isError: false;
@@ -107,12 +107,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
107
107
  submittedAt: number;
108
108
  connect: ({ connector, chainId, mutation, }: {
109
109
  connector: CreateConnectorFn | Connector;
110
- chainId?: number | undefined;
110
+ chainId?: number;
111
111
  mutation?: UseConnectParameters["mutation"];
112
112
  }) => void;
113
113
  connectAsync: ({ connector, chainId, mutation, }: {
114
114
  connector: CreateConnectorFn | Connector;
115
- chainId?: number | undefined;
115
+ chainId?: number;
116
116
  mutation?: UseConnectParameters["mutation"];
117
117
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
118
118
  connectors: readonly Connector[];
@@ -1,10 +1,4 @@
1
1
  export declare function useDaimoPayStatus(): {
2
- status: "payment_completed";
3
- paymentId: string;
4
- } | {
5
- status: "payment_started";
6
- paymentId: string;
7
- } | {
8
- status: "payment_pending";
2
+ status: string;
9
3
  paymentId: string;
10
4
  } | undefined;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type TLogLevel = "debug" | "info" | "warn" | "error" | "none";
3
2
  export type TOptions = {
4
3
  logLevel?: TLogLevel;
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export default function useLockBodyScroll(initialLocked: boolean): (boolean | import("react").Dispatch<import("react").SetStateAction<boolean>>)[];
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { DaimoPayOrder, DaimoPayTokenAmount, ExternalPaymentOptionMetadata, ExternalPaymentOptions } from "@daimo/common";
3
2
  import { trpc } from "./trpc";
4
3
  export type SourcePayment = Parameters<typeof trpc.processSourcePayment.mutate>[0];
@@ -16,7 +15,7 @@ export interface PaymentInfo {
16
15
  payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;
17
16
  refreshOrder: () => Promise<void>;
18
17
  }
19
- export declare function getPaymentInfo(): {
18
+ export declare function getPaymentInfo(log: (...args: any[]) => void): {
20
19
  setPayId: (payId: string | null) => Promise<void>;
21
20
  daimoPayOrder: DaimoPayOrder | null;
22
21
  paymentWaitingMessage: string | null;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import React from "react";
3
2
  declare const truncateEthAddress: (address?: string, separator?: string) => string;
4
3
  declare const truncateENSAddress: (ensName: string, maxLength: number) => string;
@@ -9,10 +8,10 @@ declare const isAndroid: () => boolean;
9
8
  declare const isMobile: () => boolean;
10
9
  type ReactChildArray = ReturnType<typeof React.Children.toArray>;
11
10
  declare function flattenChildren(children: React.ReactNode): ReactChildArray;
12
- export declare const isWalletConnectConnector: (connectorId?: string) => boolean;
13
- export declare const isMetaMaskConnector: (connectorId?: string) => boolean;
14
- export declare const isCoinbaseWalletConnector: (connectorId?: string) => boolean;
15
- export declare const isLedgerConnector: (connectorId?: string) => boolean;
16
- export declare const isSafeConnector: (connectorId?: string) => boolean;
17
- export declare const isInjectedConnector: (connectorId?: string) => boolean;
11
+ export declare const isWalletConnectConnector: (connectorId?: string) => connectorId is "walletConnect";
12
+ export declare const isMetaMaskConnector: (connectorId?: string) => connectorId is "metaMaskSDK";
13
+ export declare const isCoinbaseWalletConnector: (connectorId?: string) => connectorId is "coinbaseWalletSDK";
14
+ export declare const isLedgerConnector: (connectorId?: string) => connectorId is "ledger";
15
+ export declare const isSafeConnector: (connectorId?: string) => connectorId is "safe";
16
+ export declare const isInjectedConnector: (connectorId?: string) => connectorId is "injected";
18
17
  export { detectBrowser, detectOS, flattenChildren, isAndroid, isMobile, nFormatter, truncateENSAddress, truncateEthAddress };
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  /**
3
2
  * EIP-6963: Multi Injected Provider Discovery
4
3
  * https://eips.ethereum.org/EIPS/eip-6963
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@daimo/pay",
3
3
  "private": false,
4
- "version": "0.3.4",
4
+ "version": "0.3.6",
5
5
  "author": "Daimo",
6
6
  "homepage": "https://pay.daimo.com",
7
7
  "license": "BSD-2-Clause license",
@@ -40,8 +40,8 @@
40
40
  "crypto"
41
41
  ],
42
42
  "dependencies": {
43
- "@daimo/common": "0.3.1",
44
- "@daimo/contract": "0.3.1",
43
+ "@daimo/common": "0.3.6",
44
+ "@daimo/contract": "0.3.6",
45
45
  "@trpc/client": "^11.0.0-next-beta.318",
46
46
  "@trpc/server": "^11.0.0-next-beta.318",
47
47
  "buffer": "^6.0.3",