diff --git a/apps/BosGenaDrop/widget/GenaDrop/Alert.jsx b/apps/BosGenaDrop/widget/GenaDrop/Alert.jsx
new file mode 100644
index 00000000..877ad360
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/Alert.jsx
@@ -0,0 +1,29 @@
+const Toast = styled.div`
+  position: fixed;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  align-conten: center;
+  top: 90px;
+  right: 25px;
+  background-color: red;
+  color: #fff;
+  padding: 16px;
+  border-radius: 8px;
+  z-index: 10000;
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  &>p{
+    margin:0px;
+    padding: 0px;
+  }
+`;
+
+return (
+  <>
+    <Toast>
+      <p>
+        {props.toastMessage || "Make sure all required fields are popuplated!"}
+      </p>
+    </Toast>
+  </>
+);
diff --git a/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter.jsx b/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter.jsx
new file mode 100644
index 00000000..970b836f
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter.jsx
@@ -0,0 +1,1062 @@
+const auroraCOntract = "0xe53bC42B6b25a1d548B73636777a0599Fd27fE5c";
+const auroraSoulCOntract = "0xe1D36964Eb49E38BB3f7410401BC95F0E9f1F6D3";
+const polygonContract = "0x436AEceaEeC57b38a17Ebe71154832fB0fAFF878";
+const polygonSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const celoContract = "0xC291846A587cf00a7CC4AF0bc4EEdbC9c3340C36";
+const celoSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const avaxContract = "0x43dBdfcAADD0Ea7aD037e8d35FDD7c353B5B435b";
+const avaxSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const arbitrumContract = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const arbitrumSoulContract = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const nearContract = "nft.genadrop.near";
+const ownerId = "minorityprogrammers.near"; // attribution
+const mintSingle = [
+  "function mint(address to, uint256 id, uint256 amount, string memory uri, bytes memory data) public {}",
+  "function safeMint(address to, string memory uri) public {}",
+];
+State.init({
+  title: "",
+  description: "",
+  recipient: "",
+  isSoulBound: false,
+  showAlert: false,
+  toastMessage: "",
+  selectIsOpen: false,
+});
+let accountId = context.accountId;
+const contractAddresses = {
+  137: [
+    polygonContract,
+    "Polygon",
+    "https://polygonscan.com/tx/",
+    polygonSoulContract,
+  ],
+  1313161554: [
+    auroraCOntract,
+    "Aurora",
+    "https://explorer.aurora.dev/tx/",
+    auroraSoulCOntract,
+  ],
+  42220: [
+    celoContract,
+    "Celo",
+    "https://explorer.celo.org/mainnet/tx/",
+    celoSoulContract,
+  ],
+  43114: [
+    avaxContract,
+    "Avalanche",
+    "https://snowtrace.io/tx/",
+    avaxSoulContract,
+  ],
+  42161: [arbitrumContract, "Arbitrum", "https://arbiscan.io/tx/"],
+  0: [nearContract, "Near"],
+};
+const chains = [
+  {
+    id: "137",
+    name: "Polygon",
+    url: "https://ipfs.near.social/ipfs/bafkreie5h5oq6suoingcwuzj32m3apv56rl56wpwpaxmevlk5vndlypxze",
+  },
+  {
+    id: "1313161554",
+    name: "Aurora",
+    url: "https://ipfs.near.social/ipfs/bafkreiajqik4gjbmkh7z2gylpjzrsuht7simjecpxuoqn6icqfbioswzuy",
+  },
+  {
+    id: "42220",
+    name: "Celo",
+    url: "https://ipfs.near.social/ipfs/bafkreifu6ufsdf2ivrs5febt7l25wdys6odzfelgjauzod7owrfug56cxe",
+  },
+  {
+    id: "43114",
+    name: "Avax",
+    url: "https://ipfs.near.social/ipfs/bafkreifhu5fytsjcmjluarfnu6kcdhaqz4rgdrbbzf6dlsmggqb7oi3w4e",
+  },
+  {
+    id: "42161",
+    name: "Arbitrum",
+    url: "https://ipfs.near.social/ipfs/bafkreiffax4lnya337rz5ph75faondeqmpy6xj37yprwvxbru4qc5emsiq",
+  },
+  {
+    id: "0",
+    name: "Near",
+    url: "https://ipfs.near.social/ipfs/bafkreigv55ubnx3tfhbf56toihekuxvgzfqn5c3ndbfjcg3e4uvaeuy5cm",
+  },
+];
+
+const handleMint = () => {
+  console.log("it's here", state.title && state.description && state.image.cid);
+  if (!state.image.cid) {
+    return;
+  }
+  if (!state.title) {
+    console.log("Please Enter title");
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a title for the NFT",
+    });
+
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else if (!state.description) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a description for the NFT",
+    });
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else {
+    if (state.selectedChain == "0") {
+      const gas = 200000000000000;
+      const deposit = 10000000000000000000000;
+      const metadata = {
+        name: state.title,
+        description: state.description,
+        properties: [],
+        image: `ipfs://${state.image.cid}`,
+      };
+      asyncFetch("https://ipfs.near.social/add", {
+        method: "POST",
+        headers: {
+          Accept: "application/json",
+        },
+        body: metadata,
+      }).then((res) => {
+        const cid = res.body.cid;
+        const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+        console.log("in the promise", res, Id);
+        Near.call([
+          {
+            contractName: nearContract,
+            methodName: "nft_mint",
+            args: {
+              token_id: `${Date.now()}`,
+              metadata: {
+                title: state.title,
+                description: state.description,
+                media: `https://ipfs.io/ipfs/${state.image.cid}`,
+                reference: `ipfs://${cid}`,
+              },
+              receiver_id: state.recipient || accountId,
+            },
+            gas: gas,
+            deposit: deposit,
+          },
+        ]);
+      });
+      return;
+    }
+    console.log("passed checks");
+    let networkId = Ethers.provider()._network.chainId;
+
+    const CA = state.isSoulBound
+      ? contractAddresses[state.selectedChain][3]
+      : contractAddresses[state.selectedChain][0];
+
+    console.log("CONTRACT ADD", CA);
+
+    const contract = new ethers.Contract(
+      CA,
+      mintSingle,
+      Ethers.provider().getSigner()
+    );
+    const metadata = {
+      name: state.title,
+      description: state.description,
+      properties: [],
+      image: `ipfs://${state.image.cid}`,
+    };
+    asyncFetch("https://ipfs.near.social/add", {
+      method: "POST",
+      headers: {
+        Accept: "application/json",
+      },
+      body: metadata,
+    }).then((res) => {
+      const cid = res.body.cid;
+      const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+      console.log("in the promse", res, Id);
+      const recipient = Ethers.send("eth_requestAccounts", []);
+      state.isSoulBound
+        ? contract
+            .safeMint(state.recipient || recipient[0], `ipfs://${cid}`)
+            .then((transactionHash) => transactionHash.wait())
+            .then((ricit) => {
+              console.log("receipt::", ricit);
+              State.update({
+                link: `${
+                  contractAddresses[state.selectedChain][2] +
+                  ricit.transactionHash
+                }`,
+              });
+            })
+        : contract
+            .mint(state.recipient || recipient[0], Id, 1, `ipfs://${cid}`, "0x")
+            .then((transactionHash) => transactionHash.wait())
+            .then((ricit) => {
+              console.log("receipt::", ricit);
+              State.update({
+                link: `${
+                  contractAddresses[state.selectedChain][2] +
+                  ricit.transactionHash
+                }`,
+              });
+            });
+    });
+  }
+};
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+  console.log("accounts:", accounts, state.sender);
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+    Ethers.provider()
+      .getNetwork()
+      .then((data) => {
+        State.update({
+          selectedChain: data.chainId,
+        });
+      });
+  }
+
+  console.log("in between", state.sender);
+
+  State.update({
+    selectedChain: "0",
+  });
+}
+
+//select tag
+const handleSelectClick = () => {
+  State.update({
+    selectIsOpen: !state.selectIsOpen,
+  });
+};
+
+const handleOutsideClick = (e) => {
+  if (!e.target.closest(".select-replica__select")) {
+    State.update({
+      selectIsOpen: false,
+    });
+  }
+};
+
+const onChangeTitle = (title) => {
+  console.log("go daddy", state.recipient);
+  State.update({
+    title,
+  });
+};
+
+const data = Social.keys("*/profile", "final");
+
+if (!data) {
+  return "Loading";
+}
+
+const accounts = Object.entries(data);
+
+const allWidgets = [];
+
+for (let i = 0; i < accounts.length; ++i) {
+  const accountId = accounts[i][0];
+  allWidgets.push(accountId);
+}
+
+// const onChangeRecipient = (recipient) => {
+//   state.selectedChain === "0"
+//     ? State.update({
+//         recipient: recipient[0],
+//       })
+//     : State.update({
+//         recipient,
+//       });
+// };
+const onChangeRecipient = (recipient) => {
+  State.update({
+    customRecipient: true,
+  });
+
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: recipient[0],
+    });
+  } else {
+    State.update({
+      recipient,
+    });
+  }
+};
+const handleChainChange = (chain_id) => {
+  try {
+    Ethers.send("wallet_switchEthereumChain", [
+      { chainId: `0x${Number(chain_id).toString(16)}` },
+    ]);
+
+    State.update({
+      selectedChain: chain_id,
+    });
+    console.log(state.selectedChain);
+  } catch (err) {
+    console.log(err);
+  }
+};
+
+const onChangeDesc = (description) => {
+  console.log("Log ciritcal critics:", state.selectedChain, state.title);
+  State.update({
+    description,
+  });
+};
+
+const handleToggle = () => {
+  State.update({
+    isSoulBound: !state.isSoulBound,
+  });
+};
+
+const Heading = styled.p`
+  margin: 3rem auto 0px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+const SubHeading = styled.p`
+  margin: 0 auto 3px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 1.4rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const ImageUploadCard = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  align-items: center;
+  width: 80%;
+  border: 2px dashed #0d99ff;
+  border-radius: 1rem;
+  box-shadow: 4px 4px 20px 6px rgba(0, 0, 0, 0.2);
+  margin: 60px auto;
+  padding: 5rem 1.5rem;
+  text-align: center;
+`;
+
+const Main = styled.div`
+  display: grid;
+  gap: 3rem;
+  align-content: center;
+  grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
+  justify-content: center;
+  margin-top: 5px;
+  width: 100%;
+  padding: 1rem;
+  .button {
+    padding: 0.75em 2em;
+    border-radius: 0.7em;
+    border: 1px solid #0d99ff;
+    transition: all 0.3s;
+    cursor: pointer;
+    color: #fff;
+    background: #0d99ff;
+    &:hover {
+      color: #0d99ff;
+      background: #fff;
+    }
+    @media screen and (max-width: 540px) {
+      padding: 0.5em 2em;
+    }
+  }
+`;
+
+const Text = styled.p`
+  font-size: 0.9rem;
+  color: #525c76;
+  line-height: 1rem;
+  margin: 3px;
+`;
+
+const Elipse = styled.div`
+  background-color: #dff3f9;
+  height: 100px;
+  width: 100px;
+  object-fit: contain;
+  border-radius: 50%;
+`;
+
+const Card = styled.div`
+  padding: 1em;
+  border: 1px solid #e5e8eb;
+  gap: 2em;
+  margin: 10px auto;
+  border-radius: 0.7em;
+  & input {
+    display: block;
+    padding: 0.5em;
+    width: 100%;
+    border: 1px solid #e5e8eb;
+    border-radius: 10px;
+    outline: none;
+    background: #f4f5f6;
+    color: #525c76;
+    :focus {
+      box-shadow: none;
+      border: 1px solid #0d99ff;
+    }
+    &::placeholder {
+      color: palevioletred;
+    }
+  }
+  .soulbound {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+`;
+
+const ImageCard = styled.div`
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  height: 100%;
+  max-height: 100%;
+  width: 90%;
+  max-width: 500px;
+  border-radius: 1rem;
+  & > img {
+    object-fit: cover;
+    width: 100%;
+    height: 100%;
+  }
+`;
+
+const Input = styled.input`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+  ::placeholder {
+    color: palevioletred;
+  }
+`;
+
+const TextArea = styled.textarea`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+`;
+
+const SelectTag = styled.select`
+  height: fit-content;
+  width: 300px;
+`;
+
+const ChainIcon = styled.option`
+  display: flex;
+  height: 130px;
+  padding: 1rem auto;
+  & > img {
+    height: 100px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectReplicaContainer = styled.div`
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  z-index: 1;
+  & .select-replica__select {
+    position: relative;
+  }
+
+  & .select-replica__selected {
+    cursor: pointer;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border: 1px solid #ccc;
+    gap: 10px;
+    border-radius: 4px;
+    background-color: #fff;
+    max-width: 200px;
+    & > img {
+      height: 100%;
+      width: 100px;
+      object-fit: contain;
+    }
+  }
+
+  & .select-replica__options {
+    position: absolute;
+    top: 110%;
+    left: 0;
+    width: 100%;
+    /* height: fit-content; */
+    overflow-y: auto;
+    border: 1px solid #ccc;
+    border-top: none;
+    border-radius: 0 0 4px 4px;
+    background-color: #fff;
+    margin: auto;
+    max-height: 300px;
+    max-width: 200px;
+    display: none;
+  }
+
+  & .select-replica__options.open {
+    display: block;
+  }
+
+  & .select-replica__option {
+    display: flex;
+    justify-content: center;
+    max-width: 200px;
+    align-items: center;
+    cursor: pointer;
+    background-color: #fff;
+    padding: 3px;
+    border-bottom: 1px solid gray;
+  }
+
+  & .select-replica__option.selected {
+    background-color: #f0f0f0;
+  }
+
+  & .select-replica__option img {
+    height: 60px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectGroup = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  justify-content: center;
+  gap: 1rem;
+  margin: 2rem auto;
+`;
+
+const ToggleButton = styled.div`
+  /* The switch - the box around the slider */
+  .switch {
+    position: relative;
+    display: inline-block;
+    width: 60px;
+    height: 34px;
+  }
+
+  /* Hide default HTML checkbox */
+  .switch input {
+    opacity: 0;
+    width: 0;
+    height: 0;
+  }
+
+  /* The slider */
+  .slider {
+    position: absolute;
+    cursor: pointer;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: #ccc;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  .slider:before {
+    position: absolute;
+    content: "";
+    height: 26px;
+    width: 26px;
+    left: 4px;
+    bottom: 4px;
+    background-color: white;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  input:checked + .slider {
+    background-color: #2196f3;
+  }
+
+  input:focus + .slider {
+    box-shadow: 0 0 1px #2196f3;
+  }
+
+  input:checked + .slider:before {
+    -webkit-transform: translateX(26px);
+    -ms-transform: translateX(26px);
+    transform: translateX(26px);
+  }
+
+  /* Rounded sliders */
+  .slider.round {
+    border-radius: 34px;
+  }
+
+  .slider.round:before {
+    border-radius: 50%;
+  }
+`;
+
+if (!(state.sender || accountId)) {
+  console.log("Please login here now");
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in or connect a wallet",
+  });
+}
+
+console.log(
+  "Here 🤔 " +
+    state.selectedChain +
+    " " +
+    chains
+      .filter((chain) => {
+        return state.selectedChain.toString() == chain.id;
+      })
+      .map((c) => c.url)
+);
+
+return (
+  <div className="container vh-100 d-flex flex-column justify-content-between">
+    <div>
+      {state.showAlert && (
+        <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+      )}
+      <Heading className="text-center fs-2 fw-bold">
+        Mint NFT on Multiple chains
+      </Heading>
+
+      <Main
+        className="container-fluid"
+        onLoad={State.update({ chains: chains })}
+      >
+        {!state.image.cid ? (
+          <div className="flex-grow-1">
+            <SubHeading>
+              Upload an image to create an NFT any of our supported blockchains
+              super fast!
+            </SubHeading>
+            <ImageUploadCard className="flex-grow-1">
+              <Elipse />
+              {accountId || Ethers.provider() ? (
+                <>
+                  <IpfsImageUpload
+                    image={state.image}
+                    className="btn text-decoration-none link-primary pe-auto"
+                  />
+                  <div>
+                    <Text>
+                      We support .jpg, .jpeg, .png, .webp, .gif files and deploy
+                      to Near, Polygon, Celo, Aurora, Avalanche, and Arbitrum
+                    </Text>
+                    <Text>Max file size: 20mb</Text>
+                  </div>
+                </>
+              ) : (
+                <Card>
+                  {state.sender && Ethers.provider() ? (
+                    <SelectGroup className="form-group">
+                      <label htmlFor="chainSelect">Select Chain</label>
+                      <SelectReplicaContainer>
+                        <div
+                          className={`select-replica__select ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                          onClick={handleSelectClick}
+                        >
+                          <div className="select-replica__selected">
+                            {state.chains.filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            ) ? (
+                              <img
+                                src={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.url)}
+                                alt={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.name)}
+                              />
+                            ) : (
+                              "Select an option"
+                            )}
+                            <span>▼</span>
+                          </div>
+                          <div
+                            className={`select-replica__options ${
+                              state.selectIsOpen ? "open" : ""
+                            }`}
+                          >
+                            {state.chains.map((chain) =>
+                              chain.id !== state.selectedChain.toString() ? (
+                                <div
+                                  key={chain.id}
+                                  className={`select-replica__option ${
+                                    selectedOption === chain.name
+                                      ? "selected"
+                                      : ""
+                                  }`}
+                                  onClick={() => handleChainChange(chain.id)}
+                                >
+                                  <img src={chain.url} alt={chain.name} />
+                                </div>
+                              ) : (
+                                ""
+                              )
+                            )}
+                          </div>
+                        </div>
+                      </SelectReplicaContainer>
+                      {state.link && (
+                        <a href={`${state.link}`} target="_blank">
+                          View Transaction
+                        </a>
+                      )}
+                    </SelectGroup>
+                  ) : accountId ? (
+                    <SelectGroup>
+                      <label htmlFor="chainSelect">Select Chain</label>
+                      <SelectReplicaContainer>
+                        <div
+                          className={`select-replica__select ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                          onClick={handleSelectClick}
+                        >
+                          <div className="select-replica__selected">
+                            {state.chains.filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            ) ? (
+                              <img
+                                src={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.url)}
+                                alt={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.name)}
+                              />
+                            ) : (
+                              "Select an option"
+                            )}
+                            <span>▼</span>
+                          </div>
+                          <div
+                            className={`select-replica__options ${
+                              state.selectIsOpen ? "open" : ""
+                            }`}
+                          >
+                            {state.chains.map((chain) =>
+                              chain.id !== state.selectedChain.toString() ? (
+                                <div
+                                  key={chain.id}
+                                  className={`select-replica__option ${
+                                    selectedOption === chain.name
+                                      ? "selected"
+                                      : ""
+                                  }`}
+                                  onClick={() => handleChainChange(chain.id)}
+                                >
+                                  <img src={chain.url} alt={chain.name} />
+                                </div>
+                              ) : (
+                                ""
+                              )
+                            )}
+                          </div>
+                        </div>
+                      </SelectReplicaContainer>
+                      <div>
+                        <Web3Connect
+                          className="btn mt-3"
+                          connectLabel="Connect with Ethereum Wallet"
+                        />
+                      </div>
+                    </SelectGroup>
+                  ) : (
+                    <Web3Connect
+                      className="btn mt-3"
+                      connectLabel="Connect with Wallet"
+                    />
+                  )}
+                </Card>
+              )}
+            </ImageUploadCard>
+          </div>
+        ) : (
+          <>
+            <Card className="d-flex flex-column align-items-center w-100">
+              <div>
+                <IpfsImageUpload
+                  image={state.image}
+                  className="btn btn-outline-primary border-0 rounded-3"
+                />
+              </div>
+              <ImageCard>
+                <img
+                  src={`https://ipfs.io/ipfs/` + state.image.cid}
+                  alt="uploaded image"
+                  width="100%"
+                  height="100%"
+                  className="rounded-3"
+                />
+              </ImageCard>
+            </Card>
+            <div>
+              <Card>
+                {state.sender && Ethers.provider() ? (
+                  <SelectGroup className="form-group">
+                    <label htmlFor="chainSelect">Select Chain</label>
+                    <SelectReplicaContainer>
+                      <div
+                        className={`select-replica__select ${
+                          state.selectIsOpen ? "open" : ""
+                        }`}
+                        onClick={handleSelectClick}
+                      >
+                        <div className="select-replica__selected">
+                          {state.chains.filter(
+                            (chain) =>
+                              chain.id === state.selectedChain.toString()
+                          ) ? (
+                            <img
+                              src={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.url)}
+                              alt={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.name)}
+                            />
+                          ) : (
+                            "Select an option"
+                          )}
+                          <span>▼</span>
+                        </div>
+                        <div
+                          className={`select-replica__options ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                        >
+                          {state.chains.map((chain) =>
+                            chain.id !== state.selectedChain.toString() ? (
+                              <div
+                                key={chain.id}
+                                className={`select-replica__option ${
+                                  selectedOption === chain.name
+                                    ? "selected"
+                                    : ""
+                                }`}
+                                onClick={() => handleChainChange(chain.id)}
+                              >
+                                <img src={chain.url} alt={chain.name} />
+                              </div>
+                            ) : (
+                              ""
+                            )
+                          )}
+                        </div>
+                      </div>
+                    </SelectReplicaContainer>
+                    {state.link && (
+                      <a href={`${state.link}`} target="_blank">
+                        View Transaction
+                      </a>
+                    )}
+                  </SelectGroup>
+                ) : accountId ? (
+                  <SelectGroup>
+                    <label htmlFor="chainSelect">Select Chain</label>
+                    <SelectReplicaContainer>
+                      <div
+                        className={`select-replica__select ${
+                          state.selectIsOpen ? "open" : ""
+                        }`}
+                        onClick={handleSelectClick}
+                      >
+                        <div className="select-replica__selected">
+                          {state.chains.filter(
+                            (chain) =>
+                              chain.id === state.selectedChain.toString()
+                          ) ? (
+                            <img
+                              src={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.url)}
+                              alt={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.name)}
+                            />
+                          ) : (
+                            "Select an option"
+                          )}
+                          <span>▼</span>
+                        </div>
+                        <div
+                          className={`select-replica__options ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                        >
+                          {state.chains.map((chain) =>
+                            chain.id !== state.selectedChain.toString() ? (
+                              <div
+                                key={chain.id}
+                                className={`select-replica__option ${
+                                  selectedOption === chain.name
+                                    ? "selected"
+                                    : ""
+                                }`}
+                                onClick={() => handleChainChange(chain.id)}
+                              >
+                                <img src={chain.url} alt={chain.name} />
+                              </div>
+                            ) : (
+                              ""
+                            )
+                          )}
+                        </div>
+                      </div>
+                    </SelectReplicaContainer>
+                    <div>
+                      <Web3Connect
+                        className="btn mt-3"
+                        connectLabel="Connect with Ethereum Wallet"
+                      />
+                    </div>
+                  </SelectGroup>
+                ) : (
+                  <Web3Connect
+                    className="btn mt-3"
+                    connectLabel="Connect with Wallet"
+                  />
+                )}
+              </Card>
+              <Card>
+                <div className="soulbound">
+                  <p>SoulBound: {state.isSoulBound ? "Enabled" : "Disabled"}</p>
+                  <ToggleButton>
+                    <label className="switch">
+                      <input type="checkbox" onChange={handleToggle} />
+                      <span className="slider round"></span>
+                    </label>
+                  </ToggleButton>
+                </div>
+              </Card>
+              <Card>
+                <Card>
+                  Title:
+                  <Input
+                    type="text"
+                    value={state.title || ""}
+                    onChange={(e) => onChangeTitle(e.target.value)}
+                  />
+                </Card>
+                <Card>
+                  Description:
+                  <TextArea
+                    type="text"
+                    value={state.description || ""}
+                    onChange={(e) => onChangeDesc(e.target.value)}
+                  />
+                </Card>
+                <Card>
+                  Mint To:
+                  {state.selectedChain !== "0" ? (
+                    <Input
+                      type="text"
+                      placeholder={
+                        state.selectedChain == "0" ? accountId : state.sender
+                      }
+                      value={state.recipient}
+                      onChange={(e) => onChangeRecipient(e.target.value)}
+                    />
+                  ) : (
+                    <Typeahead
+                      id="async-example"
+                      className="type-ahead"
+                      isLoading={isLoading}
+                      labelKey="search"
+                      minLength={1}
+                      options={allWidgets}
+                      onChange={(value) => onChangeRecipient(value)}
+                      placeholder={
+                        state.selectedChain == "0" ? accountId : state.sender
+                      }
+                    />
+                  )}
+                </Card>
+              </Card>
+              <button
+                type="button"
+                className="btn btn-primary d-flex flex-column align-items-center mx-auto"
+                onClick={handleMint}
+              >
+                Mint to {contractAddresses[state.selectedChain][1]}
+              </button>
+            </div>
+          </>
+        )}
+      </Main>
+    </div>
+    <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+  </div>
+);
diff --git a/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter2.jsx b/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter2.jsx
new file mode 100644
index 00000000..5c199702
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/MultiChainMinter2.jsx
@@ -0,0 +1,972 @@
+const OWNER_ID = "minorityprogrammers.near";
+let accountId = context.accountId;
+
+const DEFAULT_NFT_TITLE = "My awesome NFT";
+const DEFAULT_NFT_DESCRIPTION = "I've just created an NFT using GenaDrop";
+
+State.init({
+  title: DEFAULT_NFT_TITLE,
+  description: DEFAULT_NFT_DESCRIPTION,
+  recipient: "",
+  isSoulBound: false,
+  showAlert: false,
+  toastMessage: "",
+  selectIsOpen: false,
+  selectedChain: "0",
+  customRecipient: false,
+  mintedNfts: [],
+});
+
+if (state.sdk.initialized) {
+  setTimeout(() => {
+    State.update({ mintedNfts: state.sdk.getMintedNfts() });
+  }, 1000);
+}
+
+const handleMint = () => {
+  if (!state.image.cid) {
+    return;
+  }
+
+  if (!state.title) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a title for the NFT",
+    });
+
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else if (!state.description) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a description for the NFT",
+    });
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else {
+    try {
+      state.sdk.mint(
+        state.recipient,
+        state.title,
+        state.description,
+        state.selectedChain,
+        state.image.cid,
+        state.isSoulBound
+      );
+    } catch (error) {
+      console.log(error);
+    }
+  }
+};
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+    Ethers.provider()
+      .getNetwork()
+      .then((data) => {
+        State.update({
+          selectedChain: data.chainId,
+        });
+      });
+  }
+}
+
+const handleSelectClick = () => {
+  State.update({
+    selectIsOpen: !state.selectIsOpen,
+  });
+};
+
+const handleOutsideClick = (e) => {
+  if (!!state.selectIsOpen) {
+    State.update({
+      selectIsOpen: false,
+    });
+  }
+};
+
+const onChangeTitle = (title) => {
+  State.update({
+    title,
+  });
+};
+
+const onChangeRecipient = (recipient) => {
+  State.update({
+    customRecipient: true,
+  });
+
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: recipient[0],
+    });
+  } else {
+    State.update({
+      recipient,
+    });
+  }
+};
+
+const handleChainChange = (chain_id) => {
+  try {
+    Ethers.send("wallet_switchEthereumChain", [
+      { chainId: `0x${Number(chain_id).toString(16)}` },
+    ]);
+
+    State.update({
+      selectedChain: chain_id,
+    });
+  } catch (err) {
+    console.log(err);
+  }
+};
+
+const onChangeDesc = (description) => {
+  State.update({
+    description,
+  });
+};
+
+const handleToggle = () => {
+  State.update({
+    isSoulBound: !state.isSoulBound,
+  });
+};
+
+const Heading = styled.p`
+  margin: 0;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const ImageUploadCard = styled.div`
+  display: flex;
+  cursor: pointer;
+  flex-flow: column nowrap;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  height: 100%;
+  max-width: 350px;
+  max-height: 350px;
+  border: 4px dashed rgba(0, 0, 0, 0.1);
+  border-radius: 1rem;
+  margin: 30px auto;
+  padding: 1.5rem;
+  text-align: center;
+  background: #fff;
+  transition: all 0.2s;
+
+  &:hover {
+    max-width: 400px;
+    max-height: 400px;
+    transform: scale(1.01);
+    transition: all 0.2s;
+  }
+`;
+
+const NFTCard = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  max-width: 350px;
+  min-height: 350px;
+  border: 4px solid rgba(0, 0, 0, 0.05);
+  border-radius: 1rem;
+  margin: 30px auto;
+  padding: 1rem;
+  text-align: center;
+  background: #fff;
+  transition: all 0.2s;
+
+  .body {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    flex-grow: 1;
+    padding: 1rem;
+    box-sizing: border-box;
+
+    p {
+      margin: 0;
+      padding: 0;
+    }
+
+    input {
+      font-weight: bold;
+      font-size: 1.5rem;
+    }
+
+    input,
+    textarea {
+      position: relative;
+      text-align: center;
+      text-overflow: ellipsis;
+      max-width: 300px;
+      background-color: transparent;
+      border: 0;
+      color: #000;
+    }
+  }
+
+  & > div {
+    position: relative;
+    width: 100%;
+
+    img {
+      width: 100%;
+      border-radius: 0.8rem;
+    }
+    .replace-btn {
+      position: absolute;
+      bottom: 0;
+      right: 0;
+
+      img {
+        display: none !important;
+      }
+    }
+  }
+
+  .mint-btn {
+    width: 100%;
+    height: 60px;
+    cursor: pointer;
+    border: 0;
+    border-radius: 10px;
+    background-color: #0fbf41;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 0.7);
+
+    &:disabled {
+      background-color: #66c480;
+      color: rgba(0, 0, 0, 0.3);
+      cursor: not-allowed;
+    }
+  }
+`;
+
+const Editable = styled.div`
+  position: relative;
+  width: 100%;
+
+  &.editable {
+    &:hover {
+      &::after {
+        opacity: 0.6;
+      }
+    }
+
+    &::after {
+      opacity: 0;
+      position: absolute;
+      content: "✏️";
+      width: 20px;
+      height: 20px;
+      top: 0;
+      bottom: 0;
+      right: 0;
+      margin: auto;
+      transform: rotate(90deg);
+    }
+  }
+`;
+
+const SendToInput = styled.div`
+  position: relative;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 10px;
+  margin-top: 2rem;
+  width: 110%;
+
+  input {
+    width: 100%;
+    color: #000;
+    &:placeholder {
+      color: #000;
+    }
+  }
+
+  label {
+    position: absolute;
+    top: -10px;
+    left: -10px;
+    background-color: #fff;
+    padding: 5px;
+    border-radius: 10px;
+    font-size: 0.8em;
+  }
+`;
+
+const Main = styled.div`
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  margin-top: 5px;
+  width: 100%;
+  min-height: 100vh;
+  padding: 1rem 1rem 0;
+  box-sizing: border-box;
+  .button {
+    padding: 0.75em 2em;
+    border-radius: 0.7em;
+    border: 1px solid #0d99ff;
+    transition: all 0.3s;
+    cursor: pointer;
+    color: #fff;
+    background: #0d99ff;
+    &:hover {
+      color: #0d99ff;
+      background: #fff;
+    }
+    @media screen and (max-width: 540px) {
+      padding: 0.5em 2em;
+    }
+  }
+`;
+
+const Text = styled.p`
+  font-size: 0.9rem;
+  color: #525c76;
+  line-height: 1rem;
+  margin: 3px;
+`;
+
+const Elipse = styled.div`
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: 4px solid rgba(0, 0, 0, 0.1);
+  background: #fff;
+  height: 100px;
+  width: 100px;
+  border-radius: 20px;
+`;
+
+const Card = styled.div`
+  padding: 1em;
+  border: 1px solid #e5e8eb;
+  gap: 2em;
+  margin: 10px auto;
+  border-radius: 0.7em;
+  & input {
+    display: block;
+    padding: 0.5em;
+    width: 100%;
+    border: 1px solid #e5e8eb;
+    border-radius: 10px;
+    outline: none;
+    background: #f4f5f6;
+    color: #525c76;
+    :focus {
+      box-shadow: none;
+      border: 1px solid #0d99ff;
+    }
+    &::placeholder {
+      color: palevioletred;
+    }
+  }
+  .soulbound {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+`;
+
+const ImageCard = styled.div`
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  height: 100%;
+  max-height: 100%;
+  width: 90%;
+  max-width: 500px;
+  border-radius: 1rem;
+  & > img {
+    object-fit: cover;
+    width: 100%;
+    height: 100%;
+  }
+`;
+
+const Input = styled.input`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+  ::placeholder {
+    color: palevioletred;
+  }
+`;
+
+const TextArea = styled.textarea`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+`;
+
+const SelectTag = styled.select`
+  height: fit-content;
+  width: 300px;
+`;
+
+const ChainIcon = styled.option`
+  display: flex;
+  height: 130px;
+  padding: 1rem auto;
+  & > img {
+    height: 100px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectReplicaContainer = styled.div`
+  position: relative;
+  display: inline-block;
+  z-index: 1;
+  user-select: none;
+
+  & .select-replica__select {
+    position: relative;
+  }
+
+  & .select-replica__selected {
+    cursor: pointer;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border: 4px solid rgba(0, 0, 0, 0.05);
+    gap: 10px;
+    border-radius: 10px;
+    background-color: #fff;
+    width: 350px;
+    padding: 0 15px 0 10px;
+    min-height: 70px;
+
+    & > img {
+      height: 100%;
+      width: 80px;
+      object-fit: contain;
+    }
+
+    & > span {
+      opacity: 0.6;
+    }
+  }
+
+  & .select-replica__options {
+    position: absolute;
+    opacity: 0;
+    top: 110%;
+    left: 0;
+    width: 100%;
+    left: 0;
+    right: 0;
+    margin: auto;
+    overflow-y: auto;
+    border-radius: 10px;
+    background-color: #fff;
+    max-height: 300px;
+    box-shadow: 0 10px 20px 10px rgba(0, 0, 0, 0.05);
+    pointer-events: none;
+    transform: translateY(100px);
+    transition: all 0.2s;
+  }
+
+  & .select-replica__options.open {
+    transition: all 0.2s;
+    transform: translateY(0);
+    opacity: 1;
+    pointer-events: all;
+  }
+
+  & .select-replica__option {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    background-color: #fff;
+    padding: 0;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+  }
+
+  & .select-replica__option.selected {
+    background-color: #f0f0f0;
+  }
+
+  & .select-replica__option img {
+    height: 80px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectGroup = styled.div`
+  display: flex;
+  justify-content: center;
+  margin: 2rem auto;
+  align-items: center;
+`;
+
+const ToggleButton = styled.div`
+  /* The switch - the box around the slider */
+  .switch {
+    position: relative;
+    display: inline-block;
+    width: 60px;
+    height: 34px;
+  }
+
+  /* Hide default HTML checkbox */
+  .switch input {
+    opacity: 0;
+    width: 0;
+    height: 0;
+  }
+
+  /* The slider */
+  .slider {
+    position: absolute;
+    cursor: pointer;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: #ccc;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  .slider:before {
+    position: absolute;
+    content: "";
+    height: 26px;
+    width: 26px;
+    left: 4px;
+    bottom: 4px;
+    background-color: white;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  input:checked + .slider {
+    background-color: #2196f3;
+  }
+
+  input:focus + .slider {
+    box-shadow: 0 0 1px #2196f3;
+  }
+
+  input:checked + .slider:before {
+    -webkit-transform: translateX(26px);
+    -ms-transform: translateX(26px);
+    transform: translateX(26px);
+  }
+
+  /* Rounded sliders */
+  .slider.round {
+    border-radius: 34px;
+  }
+
+  .slider.round:before {
+    border-radius: 50%;
+  }
+`;
+
+const HeaderBox = styled.div`
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  .connect-wallet {
+    background: rgba(0, 0, 0, 1);
+    border-radius: 10px;
+    font-weight: bold;
+    color: #fff;
+    box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.1);
+    height: 60px;
+  }
+`;
+
+const HistoryBox = styled.div`
+  display: flex;
+  flex-direction: column;
+  max-width: 750px;
+  margin: 0 auto;
+`;
+
+const HistoryNFTBox = styled.div`
+  display: flex;
+  width: 100%;
+  max-width: 800px;
+  background-color: #fff;
+  border-radius: 10px;
+  margin-top: 20px;
+  box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.02);
+  box-sizing: border-box;
+  padding: 0.7rem;
+
+  img {
+    background-color: rgba(0, 0, 0, 0.05);
+    height: 100px;
+    border-radius: 0.5rem;
+  }
+
+  .details {
+    padding: 0 1rem;
+    box-sizing: border-box;
+    border-right: 1px solid rgba(0, 0, 0, 0.05);
+
+    h1 {
+      font-size: 1.3rem;
+    }
+
+    .description {
+      font-size: 0.8rem;
+      margin-bottom: 0;
+      padding: 0;
+      opacity: 0.8;
+    }
+
+    .author {
+      margin: 0;
+      padding: 0;
+      font-weight: bold;
+      font-size: 0.8rem;
+    }
+  }
+
+  .tx-details {
+    padding: 0 1rem;
+    box-sizing: border-box;
+
+    p {
+      margin: 0;
+      padding: 0;
+    }
+
+    .title {
+      font-weight: bold;
+      font-size: 0.8rem;
+    }
+
+    .info {
+      font-size: 0.7rem;
+    }
+  }
+`;
+
+if (!(state.sender || accountId)) {
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in or connect a wallet",
+  });
+} else {
+  State.update({
+    showAlert: false,
+    toastMessage: "",
+  });
+}
+
+if (!state.customRecipient) {
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: accountId,
+    });
+  } else {
+    State.update({
+      recipient: state.sender,
+    });
+  }
+}
+
+return (
+  <div
+    style={{
+      background: "#fafafa",
+      width: "100%",
+    }}
+  >
+    <div style={{ display: "none" }}>
+      <Widget
+        src="bos.genadrop.near/widget/GenaDrop.SDK"
+        props={{
+          onLoad: (sdk) => State.update({ sdk: sdk }),
+          onRefresh: (sdk) => State.update({ sdk: sdk }),
+          loaded: !!state.sdk,
+        }}
+      />
+    </div>
+    {!!state.sdk ? (
+      <div>
+        {state.showAlert && (
+          <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+        )}
+
+        <Main className="container-fluid">
+          <div className="flex-grow-1">
+            <HeaderBox>
+              <Heading
+                style={{
+                  "text-align": "left",
+                }}
+                className="fs-2 fw-bold"
+              >
+                NFT Minter
+              </Heading>
+              <Web3Connect
+                className="connect-wallet"
+                connectLabel="Connect wallet"
+                disconnectLabel="Disconnect"
+              />
+            </HeaderBox>
+
+            <div
+              style={{
+                "text-align": "center",
+              }}
+            >
+              <SelectGroup className="form-group">
+                <SelectReplicaContainer>
+                  <div
+                    className={`select-replica__select ${
+                      state.selectIsOpen ? "open" : ""
+                    }`}
+                    onClick={handleSelectClick}
+                  >
+                    <div className="select-replica__selected">
+                      {state.sdk.chains.filter(
+                        (chain) => chain.id === state.selectedChain.toString()
+                      ) ? (
+                        <img
+                          src={state.sdk.chains
+                            .filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            )
+                            .map((c) => c.url)}
+                          alt={state.sdk.chains
+                            .filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            )
+                            .map((c) => c.name)}
+                        />
+                      ) : (
+                        "Select an option"
+                      )}
+                      <span>▼</span>
+                    </div>
+                    <div
+                      className={`select-replica__options ${
+                        state.selectIsOpen ? "open" : ""
+                      }`}
+                    >
+                      {state.sdk.chains.map((chain) =>
+                        chain.id !== state.selectedChain.toString() ? (
+                          <div
+                            key={chain.id}
+                            className={`select-replica__option ${
+                              selectedOption === chain.name ? "selected" : ""
+                            }`}
+                            onClick={() => handleChainChange(chain.id)}
+                          >
+                            <img src={chain.url} alt={chain.name} />
+                          </div>
+                        ) : (
+                          ""
+                        )
+                      )}
+                    </div>
+                  </div>
+                </SelectReplicaContainer>
+                {state.sdk.lastMintlink && (
+                  <a href={`${state.sdk.lastMintLink}`} target="_blank">
+                    View Transaction
+                  </a>
+                )}
+              </SelectGroup>
+            </div>
+
+            {!state.image.cid ? (
+              <>
+                <ImageUploadCard className="flex-grow-1">
+                  <Elipse>
+                    <span
+                      style={{
+                        opacity: ".2",
+                        "font-weight": "bold",
+                      }}
+                    >
+                      NFT
+                    </span>
+                  </Elipse>
+                  <>
+                    <IpfsImageUpload
+                      image={state.image}
+                      className="btn text-decoration-none link-primary pe-auto"
+                    />
+                    <div>
+                      <Text>jpg, jpeg, png, webp, gif</Text>
+                      <Text>
+                        <strong>Max. 20MB</strong>
+                      </Text>
+                    </div>
+                  </>
+                </ImageUploadCard>
+
+                {state.mintedNfts.length > 0 ? (
+                  <>
+                    <HeaderBox
+                      style={{
+                        "margin-top": "4rem",
+                      }}
+                    >
+                      <Heading
+                        style={{
+                          "text-align": "left",
+                        }}
+                        className="fs-2 fw-bold"
+                      >
+                        History
+                      </Heading>
+                    </HeaderBox>
+                    <HistoryBox>
+                      {state.mintedNfts.map((nft) => (
+                        <HistoryNFTBox>
+                          {!!nft.image && <img src={nft.image} alt="NFT" />}
+                          <div className="details">
+                            <h1>{nft.title}</h1>
+                            <p className="description">{nft.description}</p>
+                            {!!nft.account && (
+                              <p className="author">{nft.account}</p>
+                            )}
+                          </div>
+                          <div className="tx-details">
+                            <p className="title">Sent to</p>
+                            <p className="info">{nft.recipient}</p>
+                            {!!nft.network && nft.network != "0" && (
+                              <a
+                                target="_blank"
+                                href={nft.link}
+                                className="title"
+                              >
+                                View transaction on{" "}
+                                {state.sdk.contractAddresses[nft.network][1]}
+                              </a>
+                            )}
+                          </div>
+                        </HistoryNFTBox>
+                      ))}
+                    </HistoryBox>
+                  </>
+                ) : (
+                  <></>
+                )}
+              </>
+            ) : (
+              <>
+                <NFTCard>
+                  <div>
+                    <img
+                      src={`https://ipfs.near.social/ipfs/` + state.image.cid}
+                      alt="Uploaded Image"
+                    />
+                    <div className="replace-btn">
+                      <IpfsImageUpload
+                        image={state.image}
+                        className="btn text-decoration-none link-primary pe-auto"
+                      />
+                    </div>
+                  </div>
+                  <div className="body">
+                    <Editable
+                      className={
+                        state.title == DEFAULT_NFT_TITLE ? "editable" : ""
+                      }
+                    >
+                      <Input
+                        type="text"
+                        className="input-title"
+                        value={state.title || ""}
+                        onChange={(e) => onChangeTitle(e.target.value)}
+                      />
+                    </Editable>
+                    <Editable
+                      className={
+                        state.description == DEFAULT_NFT_DESCRIPTION
+                          ? "editable"
+                          : ""
+                      }
+                    >
+                      <TextArea
+                        type="text"
+                        value={state.description || ""}
+                        onChange={(e) => onChangeDesc(e.target.value)}
+                      />
+                    </Editable>
+                    <SendToInput>
+                      <label>Send to</label>
+                      <Input
+                        type="text"
+                        placeholder={
+                          state.selectedChain == "0" ? accountId : state.sender
+                        }
+                        onChange={(e) => onChangeRecipient(e.target.value)}
+                      />
+                    </SendToInput>
+                  </div>
+
+                  <button
+                    type="button"
+                    disabled={
+                      !state.title ||
+                      !state.recipient ||
+                      !(state.sender || accountId)
+                    }
+                    className="mint-btn"
+                    onClick={handleMint}
+                  >
+                    Mint to{" "}
+                    {state.sdk.contractAddresses[state.selectedChain][1]}
+                  </button>
+                </NFTCard>
+              </>
+            )}
+          </div>
+        </Main>
+        <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+      </div>
+    ) : (
+      "Loading..."
+    )}
+  </div>
+);
diff --git a/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Index.jsx b/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Index.jsx
new file mode 100644
index 00000000..8bce83d2
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Index.jsx
@@ -0,0 +1,651 @@
+// add nft transfers here
+// NEED TO FIX SCIENTIFIC NOTION ON PRICE //  ADD ERROR CHECKING for nft contract but preview is enough
+const image = props.image;
+const onChange = props.onChange;
+const amount = "10000000000000000000000"; // 0.01 NEAR // amount to list at, by default its for other marketplaces
+const accountId = context.accountId ?? props.accountId; // add check for context it
+const ownerId = "minorityprogrammers.near"; // attribution
+const chainState = props.chainState;
+const nft = props.nft ?? {
+  contractId: props.contractId,
+  tokenId: props.tokenId,
+}; // just in case need to pass in a NFT
+const NEAR_NOMINATION_EXP = 24;
+const newContractId = props.contractId
+  ? props?.contractId?.includes("genadrop")
+    ? "nft.genadrop.near"
+    : props.contractId
+  : "nft.genadrop.near";
+const contractId = newContractId; // default nft contract - genadrop-contract.nftgen.near
+const tokenId = props.tokenId ?? "1679119560198"; // maybe condtional check if props is eempty // default nft
+const fewfarmarket = "market.fewandfar.near";
+const tradeportmarket = "market.tradeport.near";
+
+const fnfMsg = JSON.stringify({
+  sale_conditions: {
+    near: amount,
+  },
+});
+// need to find custom market link to work with
+
+const nftMetadata = Near.view(contractId, "nft_metadata"); // get the contract name
+const tokenInfo = Near.view(contractId, "nft_token", {
+  token_id: tokenId,
+});
+
+initState({
+  contractId: contractId,
+  tokenId: tokenId,
+  amount: amount,
+  msg: msg,
+  fnfMsg: fnfMsg,
+  trpMsg: trpMsg,
+  mintbaseMarketId: null,
+  chainState: chainState,
+  marketLinks: [],
+  custom: false,
+  customMarketLink: defaultCustomMarket,
+  isOpen: false,
+  validMarketLink: true,
+  explorerText: "",
+  error: false,
+  loadingListing: false,
+  nftMetadata: nftMetadata,
+  tokenInfo: tokenInfo,
+  receiverId: default_receiver,
+  validReceiver: true,
+  transfer: false, // add checkbox for transfer that shows
+  url: image.url,
+  nft: image.nft ?? {}, // from santiago
+  showAlert: false,
+});
+function ownsNFT() {
+  const ownsNFT = context.accountId === state.tokenInfo.owner_id;
+  State.update({
+    ownsNFT: ownsNFT,
+  });
+}
+ownsNFT();
+
+const getSender = () => {
+  return !state.sender
+    ? ""
+    : state.sender.substring(0, 6) +
+        "..." +
+        state.sender.substring(state.sender.length - 4, state.sender.length);
+};
+
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+  }
+}
+
+const tradeportLink = `https://www.tradeport.xyz/near/collection/${
+  state.contractId.includes("genadrop")
+    ? "genadrop-contract.nftgen.near"
+    : state.contractId
+}?tab=items&tokenId=${state.tokenId}`;
+
+//Few and Far Link
+const fewfarlink = `https://fewfar.com/${
+  state.contractId.includes("genadrop")
+    ? "genadrop-single-nft-c40d654de"
+    : state.contractId
+}/${state.tokenId}`;
+
+const parasLink = `https://paras.id/token/${state.contractId}::${state.tokenId}`;
+
+const defaultCustomMarket = "apollo42.near";
+const mintbasemarket = "simple.market.mintbase1.near";
+const default_receiver = "minorityprogrammers.near"; // default reciver nft for transfers
+const trpMsg = JSON.stringify({
+  price: amount,
+  market_type: "sale",
+  ft_token_id: "near",
+});
+
+function fetchMintbaseURL() {
+  asyncFetch("https://graph.mintbase.xyz/mainnet", {
+    method: "POST",
+    headers: {
+      "mb-api-key": "omni-site",
+      "Content-Type": "application/json",
+      "x-hasura-role": "anonymous",
+    },
+    body: JSON.stringify({
+      query: `
+        query MyQuery {
+        nft_listings(where: {token_id: {_eq: "${tokenId}"}}) {
+      	metadata_id
+      }
+    }
+      `,
+    }),
+  }).then((data) => {
+    if (data.body.data.nft_listings?.length) {
+      State.update({
+        mintbaseMarketId: data.body.data.nft_listings[0].metadata_id,
+      });
+    }
+  });
+}
+
+fetchMintbaseURL();
+
+const mintBaseLink = `https://www.mintbase.xyz/meta/${state.mintbaseMarketId}`;
+
+const marketLinks = {
+  tradeport: {
+    link: tradeportLink,
+  },
+  fewandfar: {
+    link: fewfarlink,
+  },
+  mintbase: {
+    link: mintBaseLink,
+  },
+  paras: {
+    link: parasLink,
+  },
+};
+
+function updateTradeportLink() {
+  // Function body goes here
+  updatedLink =
+    "https://www.tradeport.xyz/near/collection/" +
+    state.contractId +
+    "/" +
+    state.tokenId;
+  State.update({
+    tradeportLink: updatedLink,
+  });
+}
+function cleanupAmount(amount) {
+  return amount.replace(/,/g, "").trim();
+}
+function trimLeadingZeroes(value) {
+  value = value.replace(/^0+/, "");
+  if (value === "") {
+    return "0";
+  }
+  return value;
+}
+function parseNearAmount(amt) {
+  if (!amt) {
+    return null;
+  }
+  amt = cleanupAmount(amt);
+  const split = amt.split(".");
+  const wholePart = split[0];
+  const fracPart = split[1] || "";
+  if (split.length > 2 || fracPart.length > NEAR_NOMINATION_EXP) {
+    throw new Error(`Cannot parse '${amt}' as NEAR amount`);
+  }
+  return trimLeadingZeroes(
+    wholePart + fracPart.padEnd(NEAR_NOMINATION_EXP, "0")
+  );
+}
+/*ON CHANGE FUNCTIONS - NEED TO FINISH NOT CONCATENATING*/
+const onChangeNearAmount = (amount) => {
+  amount = parseNearAmount(amount);
+  const msgConcat = JSON.stringify({
+    price: amount,
+    market_type: "sale",
+    ft_token_id: "near",
+  });
+  const fnfMsg = JSON.stringify({
+    sale_conditions: {
+      near: amount,
+    },
+  });
+  // console.log(bigIntNumber);
+  State.update({
+    amount,
+    msg: msgConcat,
+    fnfMsg: fnfMsg,
+    trpMsg: msgConcat,
+  });
+};
+
+const onChangeEVMAmount = (amount) => {
+  State.update({
+    amount,
+  });
+};
+
+const onChangeMsg = (msg) => {
+  // currently done in the amount
+  State.update({
+    msg: msg,
+  });
+};
+
+const onChangeReceiver = (receiverId) => {
+  const validReceiverLink = isNearAddress(receiverId[0]); // add error message or change button based on this
+  State.update({
+    receiverId: receiverId[0],
+    validReceiver: validReceiverLink,
+  });
+  console.log(`receiver: ${state.receiverId[0]}`);
+};
+
+const onChangeContract = (contractId) => {
+  const nftMetadata = Near.view(contractId, "nft_metadata"); // get the contract name
+  State.update({
+    contractId,
+    nftMetadata,
+  });
+  onChangeToken(state.tokenId);
+  ownsNFT();
+  updateTradeportLink();
+};
+
+const onChangeToken = (tokenId) => {
+  const tokenInfo = Near.view(state.contractId, "nft_token", {
+    token_id: tokenId,
+  });
+  State.update({
+    tokenId,
+    tokenInfo,
+  });
+  ownsNFT();
+  updateTradeportLink();
+};
+
+const onChangeCustomMarket = (customMarketLink) => {
+  const validMarketLink = isNearAddress(customMarketLink);
+  State.update({
+    customMarketLink,
+    validMarketLink,
+  });
+};
+/* HELPER FUNCTION */
+function isNearAddress(address) {
+  if (typeof address !== "string") {
+    return false;
+  }
+  if (!address.endsWith(".near")) {
+    return false;
+  }
+  const parts = address.split(".");
+  if (parts.length !== 2) {
+    return false;
+  }
+  if (parts[0].length < 2 || parts[0].length > 32) {
+    return false;
+  }
+  if (!/^[a-z0-9_-]+$/i.test(parts[0])) {
+    return false;
+  }
+  return true;
+}
+
+const currentChainProps = {
+  aurora: {
+    img: "https://s2.coinmarketcap.com/static/img/coins/200x200/14803.png",
+    id: "1313161554",
+    chain: "Aurora",
+    explorer: "https://aurorascan.dev/",
+    explorerTx: "https://aurorascan.dev/",
+    livePrice: "ethereum",
+    contract: "0xe93097f7C3bF7A0E0F1261c5bD88F86D878667B5",
+    subgraph:
+      "https://api.thegraph.com/subgraphs/name/prometheo/aurora-mainnet",
+  },
+  arbitrum: {
+    img: "https://assets.coingecko.com/coins/images/16547/large/photo_2023-03-29_21.47.00.jpeg?1680097630",
+    id: "42161",
+    contract: "0x27E52A81975F5Fb836e79007E3c478C6c0E6E9FB",
+    chain: "Arbitrum",
+    explorer: "https://arbiscan.io/",
+    explorerTx: "https://arbiscan.io/",
+    livePrice: "ethereum",
+    subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/arbitrum",
+  },
+  celo: {
+    img: "https://assets.coingecko.com/coins/images/11090/large/InjXBNx9_400x400.jpg?1674707499",
+    id: "42220",
+    livePrice: "celo",
+    contract: "0x5616BCcc278F7CE8B003f5a48f3754DDcfA4db5a",
+    explorer: "https://explorer.celo.org/address/",
+    explorerTx: "https://explorer.celo.org/",
+    chain: "Celo",
+    subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/celo-mainnet",
+  },
+  polygon: {
+    img: "https://altcoinsbox.com/wp-content/uploads/2023/03/matic-logo.webp",
+    id: "137",
+    chain: "Polygon",
+    livePrice: "matic-network",
+    contract: "0x57Eb0aaAf69E22D8adAe897535bF57c7958e3b1b",
+    explorer: "https://polygonscan.com/address/",
+    explorerTx: "https://polygonscan.com/",
+    subgraph:
+      "https://api.thegraph.com/subgraphs/name/prometheo/polygon-mainnet",
+  },
+};
+
+const listAbi = [
+  "function createMarketplaceItem(address nftContract, uint256 tokenId, uint256 price, string calldata category, address seller) public payable {}",
+  "function nftSale(uint256 price, uint256 tokenId, address seller, address nftContract) public payable {}",
+];
+
+const evmList = () => {
+  if (state.amount > 10000000) return;
+
+  State.update({
+    loadingListing: true,
+  });
+
+  const contract = new ethers.Contract(
+    currentChainProps[props.chainState].contract,
+    listAbi,
+    Ethers.provider().getSigner()
+  );
+  console.log("Formed thee", contract);
+  const nftContract = contractId.split(tokenId)[0];
+
+  contract
+    .createMarketplaceItem(
+      nftContract,
+      tokenId,
+      (Number(state.amount) * 1e18).toString(),
+      "General",
+      state.sender
+    )
+    .then((transactionHash) => transactionHash.wait())
+    .then((ricit) => {
+      State.update({
+        isOpen: true,
+        message: true,
+        error: false,
+        loadingListing: false,
+        explorerText: `${currentChainProps[props.chainState].explorerTx}/tx/${
+          ricit.transactionHash
+        }`,
+      });
+    })
+    .catch((err) => {
+      State.update({
+        isOpen: false,
+        loadingListing: false,
+        error: true,
+        text: err.reason,
+      });
+    });
+};
+
+const closeModal = () => State.update({ isOpen: false });
+
+const list = () => {
+  if (!accountId) {
+    console.log("Sign in to list");
+    return;
+  }
+  State.update({
+    loadingListing: true,
+  });
+
+  console.log(state.trpMsg);
+  // need to buffer serialize arguments, add helper functions with state arguments
+  const gas = 100000000000000; // 100 tGas
+  //   const deposit = 1; // exactly 1 yocto
+  const deposit = 10000000000000000000000; // 0.01 near
+  Near.call(
+    [
+      state.tradeport
+        ? {
+            contractName: tradeportmarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.tradeport
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: tradeportmarket,
+              msg: state.trpMsg,
+            },
+            gas: gas,
+            deposit: deposit,
+          }
+        : null,
+      state.fewfar
+        ? {
+            contractName: fewfarmarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.fewfar
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: fewfarmarket,
+              msg: state.fnfMsg,
+            },
+            gas: gas,
+            deposit: deposit,
+          }
+        : null,
+      state.mintbase
+        ? {
+            contractName: mintbasemarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.mintbase
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: mintbasemarket,
+              msg: state.msg, // need to change mesg to conform with mitnbase market // "{\"price\":\"3900000000000000000000000\",\"autotransfer\":true}"
+            },
+            gas: gas,
+            deposit: deposit, // may take this out
+          }
+        : null,
+      state.custom
+        ? {
+            contractName: state.customMarketLink,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.custom
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: state.customMarketLink,
+              msg: state.msg, // need to add the variables and buffer seerailize
+            },
+            gas: gas,
+            deposit: deposit, // may take this out
+          }
+        : null,
+    ].filter((entry) => entry !== null)
+  );
+  State.update({
+    loadingListing: false,
+  });
+};
+const transfer = () => {
+  if (!accountId) {
+    return;
+  }
+  // need to buffer serialize arguments, add helper functions with state arguments
+  const gas = 100000000000000; // 100 tGas
+  //   const deposit = 1; // exactly 1 yocto
+  const deposit = 1; // 0.01 near // maybe less
+  Near.call([
+    {
+      contractName: state.contractId,
+      methodName: "nft_transfer",
+      args: {
+        receiver_id: state.receiverId,
+        token_id: state.tokenId,
+      },
+      gas: gas ?? 200000000000000,
+      deposit: deposit ?? 10000000000000000000000,
+    },
+  ]);
+};
+const selectFewFar = () => {
+  State.update({
+    fewfar: !state.fewfar,
+  });
+};
+const selectTradeport = () => {
+  State.update({
+    tradeport: !state.tradeport,
+  });
+};
+const selectMintbase = () => {
+  State.update({
+    mintbase: !state.mintbase,
+  });
+};
+if (!accountId) {
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in to Near wallet to list",
+  });
+}
+const selectCustom = () => {
+  State.update({
+    custom: !state.custom,
+  });
+}; // need better helper function for checking whether valid NEAR address
+
+const Heading = styled.h1`
+  margin: 3px auto 3px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const Popup = styled.div`
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.5);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  backdrop-filter: blur(5px); /* Apply background blur */
+`;
+
+return (
+  <div className="container">
+    {state.showAlert && (
+      <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+    )}
+    <Heading className="text-center fs-2 fw-bold my-4">
+      {" "}
+      🛍️ List NFT {props.chainState === "near" && "to Multiple Marketplaces"}
+    </Heading>
+    {!props.tokenId && !props.contractId && (
+      <div>
+        <div
+          className="p-2 rounded mt-3"
+          style={{
+            background: "#fdfdfd",
+            border: "solid 1px #dee2e6",
+            borderBottomLeftRadius: ".375rem",
+            borderBottomRightRadius: ".375rem",
+            minHeight: "9em",
+          }}
+        >
+          <div>
+            <div className="mt-2">
+              <Widget
+                src="bos.genadrop.near/widget/GenaDrop.NFTSelector"
+                props={{
+                  onChange: ({ contractId, tokenId }) => {
+                    State.update({
+                      contractId: contractId,
+                      tokenId: tokenId,
+                    });
+                    onChangeToken(tokenId);
+                    onChangeContract(contractId);
+                  },
+                }}
+              />
+            </div>
+          </div>
+        </div>
+      </div>
+    )}
+    {state.tokenId !== "1679119560198" && (
+      <>
+        <Widget
+          src="bos.genadrop.near/widget/GenaDrop.MultiListing.Input"
+          props={{
+            state,
+            onChangeContract,
+            onChangeToken,
+            selectTradeport,
+            selectFewFar,
+            loadingListing: state.loadingListing,
+            selectCustom,
+            selectMintbase,
+            marketLinks,
+            chainState,
+            onChangeCustomMarket,
+            onChangeNearAmount,
+            onChangeEVMAmount,
+            list,
+            evmList,
+            onChangeReceiver,
+          }}
+        />
+      </>
+    )}
+    {state.isOpen && (
+      <Popup>
+        <Widget
+          src="bos.genadrop.near/widget/GenaDrop.SuccessModal"
+          props={{ closeModal, externalLink: state.explorerText }}
+        />
+      </Popup>
+    )}
+    <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+  </div>
+);
diff --git a/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Input.jsx b/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Input.jsx
new file mode 100644
index 00000000..0bd72195
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/MultiListing/Input.jsx
@@ -0,0 +1,658 @@
+const marketPlaceImage = {
+    mintbase:
+      "data:image/png;base64,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",
+    tradeport:
+      "data:image/png;base64,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",
+    fewandfar: "https://production.cdn.fewfar.com/static/images/logo.svg",
+  };
+  
+  const currentChainProps = {
+    near: {
+      img: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU",
+      livePrice: "near",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/near-mainnet",
+      chain: "near",
+      id: "1112",
+      explorer: "https://explorer.near.org/?query=",
+      logoUrl:
+        "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU",
+    },
+    aurora: {
+      img: "https://s2.coinmarketcap.com/static/img/coins/200x200/14803.png",
+      id: "1313161554",
+      chain: "Aurora",
+      explorer: "https://aurorascan.dev/",
+      livePrice: "ethereum",
+      contract: "0xe93097f7C3bF7A0E0F1261c5bD88F86D878667B5",
+      subgraph:
+        "https://api.thegraph.com/subgraphs/name/prometheo/aurora-mainnet",
+    },
+    arbitrum: {
+      img: "https://assets.coingecko.com/coins/images/16547/large/photo_2023-03-29_21.47.00.jpeg?1680097630",
+      id: "42161",
+      contract: "0x27E52A81975F5Fb836e79007E3c478C6c0E6E9FB",
+      chain: "Arbitrum",
+      explorer: "https://arbiscan.io/",
+  
+      livePrice: "ethereum",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/arbitrum",
+    },
+    celo: {
+      img: "https://assets.coingecko.com/coins/images/11090/large/InjXBNx9_400x400.jpg?1674707499",
+      id: "42220",
+      livePrice: "celo",
+      contract: "0x5616BCcc278F7CE8B003f5a48f3754DDcfA4db5a",
+      explorer: "https://explorer.celo.org/address/",
+      chain: "Celo",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/celo-mainnet",
+    },
+    polygon: {
+      img: "https://altcoinsbox.com/wp-content/uploads/2023/03/matic-logo.webp",
+      id: "137",
+      chain: "Polygon",
+      livePrice: "matic-network",
+      contract: "0x57Eb0aaAf69E22D8adAe897535bF57c7958e3b1b",
+      explorer: "https://polygonscan.com/address/",
+      subgraph:
+        "https://api.thegraph.com/subgraphs/name/prometheo/polygon-mainnet",
+    },
+    aptos: {
+      img: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqBinSwbRdx76qY4A3qvVkM9g_mKoGCBDT0sqTT02TgRvKquV2Vlc8fSRmLyuhBS3-CaA&usqp=CAU",
+    },
+    sui: {
+      img: "https://blog.sui.io/content/images/2023/04/Sui_Droplet_Logo_Blue-3.png",
+    },
+  };
+  
+  const chains = ["polygon", "aurora", "arbitrum", "celo"];
+  
+  const chainState = chains.find((data) => data.includes(props.state.chainState));
+  
+  if (chainState) {
+    let response = fetch(currentChainProps[props.state.chainState]?.subgraph, {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json",
+      },
+      body: JSON.stringify({
+        query: `
+              query MyQuery {
+               nfts(where: {tokenID: "${props.state.tokenId}"}) {
+                  category
+                  chain
+                  createdAtTimestamp
+                  id
+                  isSold
+                  isListed
+                  price
+                  tokenID
+                  owner {
+                      id
+                  }
+                  tokenIPFSPath
+                  transactions {
+                    price
+                  }
+                  }
+              }
+          `,
+      }),
+    });
+    const collectionData = response.body.data.nfts;
+    if (collectionData) {
+      const nftBody = collectionData.map((data) => {
+        const fetchIPFSData = fetch(
+          data.tokenIPFSPath.replace("ipfs://", "https://ipfs.io/ipfs/")
+        );
+  
+        if (fetchIPFSData.ok) {
+          const nft = fetchIPFSData.body;
+          let nftObject = {};
+          nftObject.contract_id = data.id;
+          nftObject.sold = data.isSold;
+          nftObject.isListed = data.isListed;
+          nftObject.owner = data.owner.id;
+          nftObject.price = data.price;
+          nftObject.token_id = data.tokenID;
+          nftObject.name = nft?.name;
+          nftObject.description = nft?.description;
+          nftObject.attributes = nft?.properties;
+          nftObject.image = nft?.image.replace(
+            "ipfs://",
+            "https://ipfs.io/ipfs/"
+          );
+          return nftObject;
+        }
+      });
+      State.update({
+        title: nftBody[0].name,
+        imageUrl: nftBody[0].image,
+        owner: nftBody[0]?.owner,
+        description: nftBody[0]?.description,
+        price: nftBody[0].price,
+      });
+    }
+  }
+  
+  const Label = styled.p`
+    font-size: 1.1rem;
+    color: #04111D;
+    font-weight: 600;
+    font-family: "SF Pro Display",sans-serif;
+    line-height: 1.02;
+    white-space: nowrap;
+    margin: unset;
+  `;
+  
+  const GrayLabel = styled.p`
+    color: #6C757D;
+    font-size: 14px;
+  `;
+  const SecondaryText = styled.h3`
+    font-size: 1.1rem;
+    color:#0f1d40;
+    font-weight: 600;
+    font-family: "SF Pro Display",sans-serif;
+    line-height: 1.02;
+    white-space: nowrap;
+    padding-bottom: 3px;
+  `;
+  const Card = styled.div`
+    overflow: hidden;
+  `;
+  const BorderedShadowedCard = styled.div`
+    display: flex;
+     flex-flow: column nowrap;
+     -ms-flex-flow:column nowrap;
+     background-color: "#f0f0f0";
+     margin: 0 auto;
+     border: 1.41429px solid rgba(28,27,28,.1);
+     padding: 1rem;
+     width: 100%;
+     height: fit-content;
+     background-color:#fff;
+     & img{
+       border-radius: inherit;
+     }
+  `;
+  const Main = styled.div`
+      display: grid;
+    gap: 3rem;
+    align-content:center;
+    grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
+    justify-content: center;
+    // background: linear-gradient(180deg,#e4f1fb,hsla(0,0%,85.1%,0));
+    margin-top: 20px;
+    width:100%;
+    padding: 1rem;
+  `;
+  
+  const ImgCard = styled.div`
+    height:fit-content;
+    display:flex;
+    align-items:center;
+    justify-content:center;
+    max-height:500px;
+    width:100%;
+    max-width: 500px;
+    border-radius: inherit;
+    overflow:hidden;
+    aspect-ratio: 1/1;
+    margin: 0 auto;
+    &>img{
+    object-fit: cover;
+    width: 100%;
+    }
+    object-fit:cover;
+  `;
+  
+  const TopSellCard = styled.div`
+    background-color: #E2E4E8;
+    padding: 1rem;
+    width:100%;
+  `;
+  
+  const Text = styled.p`
+    font-size: 14px;
+    margin: unset;
+  `;
+  
+  const GrayCard = styled.div`
+    background-color: #E2E4E8;
+    cusor: not-allowed;
+  `;
+  
+  const ChainCard = styled.div`
+    display: flex;
+    background-color: #EFF3F9;
+    align-items:center;
+    gap: 1rem;
+    cursor: pointer;
+    max-width: 320px;
+    width: 80%;
+    margin: 1rem auto;
+    height: 60px;
+    & img{
+      width: 20px;
+      height: 20px;
+      object-fit: contain;
+      margin-right: 5px;
+    }
+  `;
+  
+  const ChainCardMarket = styled.div`
+    display: flex;
+    background-color: #EFF3F9;
+    align-items:center;
+    gap: 0.5rem;
+    cursor: pointer;
+    width: 140px;
+    margin: 1rem;
+    height: 60px;
+    & img{
+      width: 20px;
+      height: 20px;
+      object-fit: contain;
+      margin-right: 5px;
+    }
+  `;
+  
+  const PriceInput = styled.div`
+    display: flex;
+    padding: .2rem;
+    &>input{
+      border:none;
+      outline: none;
+      background: none;
+      width:70px;
+      padding: 0 .2rem;
+      &:focus, &:active{
+        border:none;
+        box-shadow: none;
+      }
+    }
+    &>img{
+      width: 20px;
+      object-fit: contain;
+      margin: 0 .5rem;
+    }
+  `;
+  
+  const Markets = styled.div`
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      justify-content: center;
+      flex-wrap: wrap;
+  `;
+  
+  const MarketOption = styled.div`
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  `;
+  
+  const BlueSub = styled.div`
+   color: #0d99ff;
+   font-size: .8rem;
+  `;
+  
+  const loadingAnimation = styled.keyframes`
+    0% { content: "Loading"; }
+    25% { content: "Loading."; }
+    50% { content: "Loading.."; }
+    75% { content: "Loading..."; }
+  `;
+  
+  const ListButton = styled.button`
+    padding: 10px 15px;
+    font-size: 14px;
+    margin-top: 20px;
+    background-color: #007bff;
+    color: #fff;
+    width:  120px;
+    border-radius: 16px;
+    border: none;
+    cursor: pointer;
+    transition: background-color 0.3s ease;
+  
+    &:hover {
+      background-color: #0056b3;
+    }
+    &.loading {
+      background: #0056b5;
+      cursor: not-allowed;
+    }
+    &.loading::before {
+      content: "Loading";
+      animation: ${loadingAnimation} 1s infinite;
+      display: inline-block;
+    }
+  `;
+  
+  const ListedMarkets = styled.ul`
+     list-style-type: none;
+     display: flex;
+     flex-direction: column;
+     gap: 10px;
+     li {
+      background: #EFF3F9;
+      padding: 7px 10px;
+      border-radius: 12px;
+      margin-right: 20px;
+     }
+    img {
+      width: 20px;
+      height: 20px;
+      margin-right: 4px;
+    }
+  `;
+  
+  State.init({
+    amount: 0,
+  });
+  
+  const getUsdValue = (price) => {
+    const res = fetch(
+      `https://api.coingecko.com/api/v3/simple/price?ids=${
+        currentChainProps[props.state.chainState].livePrice
+      }&vs_currencies=usd`
+    );
+    if (res.ok) {
+      const multiplyBy = Object.values(res?.body)[0]?.usd;
+      const value = multiplyBy * price.toFixed(2);
+      return value.toFixed(4) !== "NaN" ? `$${value.toFixed(2)}` : 0;
+    }
+  };
+  
+  const keywordsToCheck = ["tradeport", "mintbase", "fewandfar", "paras"];
+  
+  const matchedKeyWords = (inputString) => {
+    return keywordsToCheck.find((keyword) => inputString.includes(keyword));
+  };
+  
+  const getSender = () => {
+    return !state.sender
+      ? ""
+      : state.sender.substring(0, 6) +
+          "..." +
+          state.sender.substring(state.sender.length - 4, state.sender.length);
+  };
+  
+  if (state.sender === undefined) {
+    const accounts = Ethers.send("eth_requestAccounts", []);
+    if (accounts.length) {
+      State.update({ sender: accounts[0] });
+    }
+  }
+  
+  return (
+    <>
+      <div className="container-fluid">
+        <Main>
+          <BorderedShadowedCard className="shadow-sm rounded-4">
+            <div>
+              <SecondaryText>
+                {state.title
+                  ? state.title
+                  : props.state.tokenInfo.metadata.title || "NFT Name"}
+              </SecondaryText>
+            </div>
+            <ImgCard className="shadow-sm">
+              {state.imageUrl ? (
+                <img src={state.imageUrl} alt="nft_image" />
+              ) : (
+                <Widget
+                  src="mob.near/widget/NftImage"
+                  props={{
+                    nft: {
+                      tokenId: props.state.tokenId,
+                      contractId: props.state.contractId,
+                    },
+                    className: "col-lg-12",
+                  }}
+                />
+              )}
+            </ImgCard>
+            <div className="d-flex justify-content-between mt-3">
+              <span>
+                <BlueSub>Contract ID</BlueSub>
+                <SecondaryText>
+                  {props.state.contractId.length > 6
+                    ? `${props.state.contractId?.slice(
+                        0,
+                        6
+                      )}...${props.state.contractId?.slice(
+                        props.state.contractId.length - 4
+                      )}`
+                    : props.state.contractId || "Sample Contract"}
+                </SecondaryText>
+              </span>
+              <span>
+                <BlueSub>Collection Name</BlueSub>
+                <SecondaryText className="font-weight-bold">
+                  {props.state.nftMetadata.name || "- - - - - -"}
+                </SecondaryText>
+              </span>
+            </div>
+            <div className="card rounded-4 shadow-sm p-3 my-3">
+              <SecondaryText>Description</SecondaryText>
+              <p>
+                {props.state.tokenInfo.metadata.description ?? state.description}
+              </p>
+            </div>
+            <p>
+              <a href={props.state.tokenInfo.media} target="_blank">
+                {props.state.tokenInfo.media}
+              </a>
+            </p>
+            <div className="col-lg-12">
+              {Object.keys(props.state.tokenInfo.approved_account_ids || {})
+                .length > 0 && <h3> Listed Markets</h3>}
+              <div>
+                <ListedMarkets>
+                  {typeof props.state.tokenInfo.approved_account_ids ===
+                    "object" &&
+                    Object.keys(props.state.tokenInfo.approved_account_ids).map(
+                      (key) => (
+                        <li>
+                          <img
+                            src={marketPlaceImage[matchedKeyWords(key)]}
+                            alt=""
+                          />
+                          <a
+                            href={props.marketLinks[matchedKeyWords(key)].link}
+                            target="_blank"
+                            rel="noopener noreferrer"
+                          >
+                            View on {matchedKeyWords(key)}
+                          </a>
+                        </li>
+                      )
+                    )}
+                </ListedMarkets>
+              </div>
+            </div>
+          </BorderedShadowedCard>
+          <div className="">
+            <Card className="card rounded-4 shadow-sm border">
+              <TopSellCard className="d-flex align-items-center">
+                <Label>List Method</Label>
+              </TopSellCard>
+              <div className="p-3">
+                <GrayLabel>
+                  Choose how you want to list you NFT for sale
+                </GrayLabel>
+  
+                <div className="d-flex justify-content-between">
+                  <div
+                    className="card rounded-4 shadow-sm p-3"
+                    role="button"
+                    style={{ borderColor: "#0D99FF" }}
+                  >
+                    <Label className="text-center">SET PRICE</Label>
+                    <Text>Sell the NFT at a fixed price</Text>
+                  </div>
+                </div>
+              </div>
+            </Card>
+            <div className="">
+              <input
+                type="hidden"
+                placeholder={props.state.contractId}
+                onChange={(e) => props.onChangeContract(e.target.value)}
+              />
+            </div>
+            <div className="">
+              <input
+                type="hidden"
+                placeholder={props.state.tokenId}
+                onChange={(e) => props.onChangeToken(e.target.value)}
+              />
+            </div>
+            <div className="rounded-4 mt-3 border shadow-sm">
+              <div className="p-3">
+                <div className="d-flex align-items-center justify-content-between">
+                  <Label>List Price</Label>
+                  <div className="d-flex align-items-center gap-3">
+                    <span>{getUsdValue(props.state.amount / 1e24 || 0)}</span>
+                    <PriceInput className="border rounded">
+                      <img
+                        src={
+                          currentChainProps[props.state.chainState || "near"].img
+                        }
+                      />
+                      <input
+                        type="number"
+                        placeholder={props.state.amount / 1e24}
+                        onChange={(e) => {
+                          props.chainState && props.chainState !== "near"
+                            ? props.onChangeEVMAmount(e.target.value)
+                            : props.onChangeAmount(e.target.value);
+                        }}
+                      />
+                    </PriceInput>
+                  </div>
+                </div>
+              </div>
+              {!state.title && (
+                <>
+                  <hr className="m-auto" />
+                  <GrayLabel className="mt-3 mx-3 mb-0">
+                    Select any of the NEAR marketplace where you want your NFTs to
+                    be listed on
+                  </GrayLabel>
+                  <div className="p-3">
+                    <MarketOption>
+                      <Markets>
+                        <ChainCardMarket
+                          className={`${
+                            props.state.mintbase ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectMintbase}
+                          onChange={props.selectMintbase}
+                        >
+                          <img src={marketPlaceImage.mintbase} />
+                          Mintbase
+                        </ChainCardMarket>
+                        <ChainCardMarket
+                          className={`${
+                            props.state.fewfar ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectFewFar}
+                          onChange={props.selectFewFar}
+                        >
+                          <img src={marketPlaceImage.fewandfar} />
+                          Few & Far
+                        </ChainCardMarket>
+  
+                        <ChainCardMarket
+                          className={`${
+                            props.state.tradeport ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectTradeport}
+                          onChange={props.selectTradeport}
+                        >
+                          <label
+                            className="form-check-label"
+                            htmlFor="myCheckbox"
+                          >
+                            <img src={marketPlaceImage.tradeport} />
+                            Tradeport
+                          </label>
+                        </ChainCardMarket>
+                      </Markets>
+                    </MarketOption>
+                    <div className="">
+                      <ChainCard
+                        onClick={props.selectCustom}
+                        className={`form-check rounded-4 p-3 ${
+                          props.state.custom ? "border border-primary" : ""
+                        }`}
+                      >
+                        <label className="form-check-label" htmlFor="myCheckbox">
+                          Custom Marketplace
+                        </label>
+                      </ChainCard>
+                      {props.state.custom && (
+                        <div className="">
+                          Custom Marketplace
+                          <input
+                            type="text"
+                            placeholder={props.state.customMarketLink}
+                            onChange={(e) =>
+                              props.onChangeCustomMarket(e.target.value)
+                            }
+                          />
+                        </div>
+                      )}
+                    </div>
+                    <GrayLabel>
+                      * You will pay some gas in Ⓝ to deposit NEAR to marketplace
+                      address then list your NFT
+                    </GrayLabel>
+                  </div>
+                  {props.state.custom && !props.state.validMarketLink && (
+                    <div className="alert alert-danger">
+                      <i className="bi bi-x"></i> Not a Valid NEAR Contract for
+                      your custom Marketplace
+                    </div>
+                  )}
+                </>
+              )}
+            </div>
+            <div className="d-flex flex-column align-items-center text-center">
+              {props.state.ownsNFT || state.owner === state.sender ? (
+                <ListButton
+                  type="button"
+                  className="btn btn-primary mt-3"
+                  disabled={props.loadingListing}
+                  className={props.loadingListing ? "loading" : ""}
+                  onClick={
+                    props.chainState && props.chainState !== "near"
+                      ? props.evmList
+                      : props.list
+                  }
+                >
+                  {!props.loadingListing && "List"}
+                </ListButton>
+              ) : (
+                <button type="button" className="btn btn-secondary mt-3">
+                  You Can Only List An NFT You Own
+                </button>
+              )}
+            </div>
+            {props.state.error && (
+              <div className="bg-danger p-2 mt-4 rounded">
+                <p className="text-center text-white pt-2">
+                  Something went wrong when Listing this NFT
+                </p>
+              </div>
+            )}
+          </div>
+        </Main>
+      </div>
+    </>
+  );
+  
\ No newline at end of file
diff --git a/apps/BosGenaDrop/widget/GenaDrop/NearLogo.jsx b/apps/BosGenaDrop/widget/GenaDrop/NearLogo.jsx
new file mode 100644
index 00000000..f93cc37c
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/NearLogo.jsx
@@ -0,0 +1,9 @@
+return (
+  <div>
+    <img
+      style={{ width: props.width || "inherit" }}
+      src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU"
+      alt=""
+    />
+  </div>
+);
diff --git a/apps/BosGenaDrop/widget/GenaDrop/SDK.jsx b/apps/BosGenaDrop/widget/GenaDrop/SDK.jsx
new file mode 100644
index 00000000..6a06f9a1
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/SDK.jsx
@@ -0,0 +1,293 @@
+let { onLoad, onRefresh, loaded } = props;
+
+const OWNER_ID = "minorityprogrammers.near"; // attribution
+
+const AURORA_CONTRACT = "0xe53bC42B6b25a1d548B73636777a0599Fd27fE5c";
+const AURORA_SOUL_CONTRACT = "0xe1D36964Eb49E38BB3f7410401BC95F0E9f1F6D3";
+const POLYGON_CONTRACT = "0x436AEceaEeC57b38a17Ebe71154832fB0fAFF878";
+const POLYGON_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const CELO_CONTRACT = "0xC291846A587cf00a7CC4AF0bc4EEdbC9c3340C36";
+const CELO_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const AVAX_CONTRACT = "0x43dBdfcAADD0Ea7aD037e8d35FDD7c353B5B435b";
+const AVAX_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const ARBITRUM_CONTRACT = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const ARBITRUM_SOUL_CONTRACT = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const NEAR_CONTRACT = "nft.genadrop.near";
+const MINT_SINGLE = [
+  "function mint(address to, uint256 id, uint256 amount, string memory uri, bytes memory data) public {}",
+  "function safeMint(address to, string memory uri) public {}",
+];
+
+const CONTRACT_ADDRESSES = {
+  137: [
+    POLYGON_CONTRACT,
+    "Polygon",
+    "https://polygonscan.com/tx/",
+    POLYGON_SOUL_CONTRACT,
+  ],
+  1313161554: [
+    AURORA_CONTRACT,
+    "Aurora",
+    "https://explorer.aurora.dev/tx/",
+    AURORA_SOUL_CONTRACT,
+  ],
+  42220: [
+    CELO_CONTRACT,
+    "Celo",
+    "https://explorer.celo.org/mainnet/tx/",
+    CELO_SOUL_CONTRACT,
+  ],
+  43114: [
+    AVAX_CONTRACT,
+    "Avalanche",
+    "https://snowtrace.io/tx/",
+    AVAX_SOUL_CONTRACT,
+  ],
+  42161: [ARBITRUM_CONTRACT, "Arbitrum", "https://arbiscan.io/tx/"],
+  0: [NEAR_CONTRACT, "Near"],
+};
+
+const CHAINS = [
+  {
+    id: "137",
+    name: "Polygon",
+    url: "https://ipfs.near.social/ipfs/bafkreie5h5oq6suoingcwuzj32m3apv56rl56wpwpaxmevlk5vndlypxze",
+  },
+  {
+    id: "1313161554",
+    name: "Aurora",
+    url: "https://ipfs.near.social/ipfs/bafkreiajqik4gjbmkh7z2gylpjzrsuht7simjecpxuoqn6icqfbioswzuy",
+  },
+  {
+    id: "42220",
+    name: "Celo",
+    url: "https://ipfs.near.social/ipfs/bafkreifu6ufsdf2ivrs5febt7l25wdys6odzfelgjauzod7owrfug56cxe",
+  },
+  {
+    id: "43114",
+    name: "Avax",
+    url: "https://ipfs.near.social/ipfs/bafkreifhu5fytsjcmjluarfnu6kcdhaqz4rgdrbbzf6dlsmggqb7oi3w4e",
+  },
+  {
+    id: "42161",
+    name: "Arbitrum",
+    url: "https://ipfs.near.social/ipfs/bafkreiffax4lnya337rz5ph75faondeqmpy6xj37yprwvxbru4qc5emsiq",
+  },
+  {
+    id: "0",
+    name: "Near",
+    url: "https://ipfs.near.social/ipfs/bafkreigv55ubnx3tfhbf56toihekuxvgzfqn5c3ndbfjcg3e4uvaeuy5cm",
+  },
+];
+
+const NEAR_SOCIAL_IPFS_URL = "https://ipfs.near.social";
+const NEAR_SOCIAL_ADD_ENDPOINT = `${NEAR_SOCIAL_IPFS_URL}/add`;
+const GENADROP_NEAR_CONTRACT = "nft.genadrop.near";
+const NEAR_NETWORK_CHAIN_ID = "0";
+const MINTED_NFTS_STORAGE_KEY = "GenaDropSDK.mintedNfts";
+
+let accountId = context.accountId;
+
+let GenaDropSDK = {
+  initialized: false,
+  network: null,
+  isSoulBound: false,
+  lastMintLink: "",
+  chains: CHAINS,
+  contractAddresses: CONTRACT_ADDRESSES,
+  mintedNfts: [],
+  init: () => {
+    Storage.get(MINTED_NFTS_STORAGE_KEY);
+    GenaDropSDK.initialized = true;
+    GenaDropSDK.refresh();
+  },
+  mint: (
+    recipient,
+    title,
+    description,
+    network,
+    imageCid,
+    isSoulBound,
+    props
+  ) => {
+    if (NEAR_NETWORK_CHAIN_ID == network) {
+      GenaDropSDK.mintOnNear(recipient, title, description, imageCid, props);
+    } else {
+      GenaDropSDK.defaultMint(
+        recipient,
+        title,
+        description,
+        network,
+        imageCid,
+        isSoulBound,
+        props
+      );
+    }
+  },
+  defaultMint: (
+    recipient,
+    title,
+    description,
+    network,
+    imageCid,
+    isSoulBound,
+    props
+  ) => {
+    const CA = isSoulBound
+      ? GenaDropSDK.contractAddresses[network][3]
+      : GenaDropSDK.contractAddresses[network][0];
+
+    console.log("CONTRACT ADD", CA);
+
+    const contract = new ethers.Contract(
+      CA,
+      MINT_SINGLE,
+      Ethers.provider().getSigner()
+    );
+
+    GenaDropSDK.uploadToIPFS(title, description, imageCid, props).then(
+      (res) => {
+        const cid = res.body.cid;
+        const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+
+        console.log(`ipfs://${cid}`);
+
+        const recipient =
+          recipient || Ethers.send("eth_requestAccounts", [])[0];
+
+        isSoulBound
+          ? contract
+              .safeMint(recipient, `ipfs://${cid}`)
+              .then((transactionHash) => transactionHash.wait())
+              .then((ricit) => {
+                GenaDropSDK.lastMintLink = `${
+                  GenaDropSDK.contractAddresses[network][2] +
+                  ricit.transactionHash
+                }`;
+
+                GenaDropSDK.logNft({
+                  account: accountId,
+                  recipient: recipient,
+                  title: title,
+                  description: description,
+                  image: GenaDropSDK.getIpfsURL(imageCid),
+                  tx: ricit.transactionHash,
+                  link:
+                    GenaDropSDK.contractAddresses[network][2] +
+                    ricit.transactionHash,
+                  network: network,
+                });
+
+                GenaDropSDK.refresh();
+              })
+          : contract
+              .mint(recipient, Id, 1, `ipfs://${cid}`, "0x")
+              .then((transactionHash) => transactionHash.wait())
+              .then((ricit) => {
+                GenaDropSDK.lastMintLink = `${
+                  GenaDropSDK.contractAddresses[network][2] +
+                  ricit.transactionHash
+                }`;
+
+                GenaDropSDK.logNft({
+                  account: accountId,
+                  recipient: recipient,
+                  title: title,
+                  description: description,
+                  image: GenaDropSDK.getIpfsURL(imageCid),
+                  tx: ricit.transactionHash,
+                  link:
+                    GenaDropSDK.contractAddresses[network][2] +
+                    ricit.transactionHash,
+                  network: network,
+                });
+
+                GenaDropSDK.refresh();
+              });
+      }
+    );
+  },
+  mintOnNear: (recipient, title, description, imageCid, props) => {
+    GenaDropSDK.uploadToIPFS(title, description, imageCid, props).then(
+      (res) => {
+        const CID = res.body.cid;
+
+        GenaDropSDK.callContract("nft_mint", {
+          token_id: `${Date.now()}`,
+          metadata: {
+            title: title,
+            description: description,
+            media: GenaDropSDK.getIpfsURL(imageCid),
+            reference: `ipfs://${CID}`,
+          },
+          receiver_id: recipient || accountId,
+        });
+
+        GenaDropSDK.logNft({
+          account: accountId,
+          recipient: recipient,
+          title: title,
+          description: description,
+          image: GenaDropSDK.getIpfsURL(imageCid),
+          tx: ricit.transactionHash,
+          link: "",
+          network: network,
+        });
+      }
+    );
+  },
+  uploadToIPFS: (title, description, imageCid, props) => {
+    const metadata = {
+      name: title,
+      description: description,
+      properties: props || [],
+      image: `ipfs://${imageCid}`,
+    };
+
+    return asyncFetch(NEAR_SOCIAL_ADD_ENDPOINT, {
+      method: "POST",
+      headers: {
+        Accept: "application/json",
+      },
+      body: metadata,
+    });
+  },
+  callContract: (method, args, gas, deposit) => {
+    Near.call([
+      {
+        contractName: GENADROP_NEAR_CONTRACT,
+        methodName: method,
+        args: args || {},
+        gas: gas || 200000000000000,
+        deposit: deposit || 10000000000000000000000,
+      },
+    ]);
+  },
+  refresh: () => {
+    if (onRefresh) {
+      onRefresh(GenaDropSDK);
+    }
+  },
+  logNft: (log) => {
+    let mintedNfts = Storage.get(MINTED_NFTS_STORAGE_KEY) ?? [];
+    mintedNfts.push(log);
+
+    console.log(mintedNfts);
+
+    GenaDropSDK.mintedNfts = mintedNfts;
+    Storage.set(MINTED_NFTS_STORAGE_KEY, mintedNfts);
+
+    GenaDropSDK.refresh();
+  },
+  getMintedNfts: () => {
+    return Storage.get(MINTED_NFTS_STORAGE_KEY);
+  },
+  getIpfsURL: (cid) => {
+    return `https://ipfs.near.social/ipfs/${cid}`;
+  },
+};
+
+if (onLoad && !loaded) {
+  GenaDropSDK.init();
+  onLoad(GenaDropSDK);
+}
diff --git a/apps/BosGenaDrop/widget/GenaDrop/SuccessModal.jsx b/apps/BosGenaDrop/widget/GenaDrop/SuccessModal.jsx
new file mode 100644
index 00000000..bcc3a5c1
--- /dev/null
+++ b/apps/BosGenaDrop/widget/GenaDrop/SuccessModal.jsx
@@ -0,0 +1,51 @@
+const PopupContainer = styled.div`
+  display: flex;
+  flex-direction: column;
+  width: 350px;
+  height: 300px;
+  border-radius: 16px;
+  padding-top: 30px;
+  background: #fff;
+  align-items: center;
+  img {
+    width: 70px;
+  }
+  h1 {
+    font-size: 25px;
+    margin-top: 10px;
+    font-weight: 600;
+  }
+`;
+
+const PopupButtons = styled.div`
+  margin-top: 30px;
+  a:first-child {
+    border: 1.5px solid #0d6efd;
+    cursor: pointer;
+    margin-right: 10px;
+    transition: 0.3s ease-in-out;
+    padding: 7.5px;
+    border-radius: 8px;
+  }
+  a:hover {
+    opacity: 0.5;
+  }
+  button {
+    width: 120px;
+  }
+`;
+
+return (
+  <PopupContainer>
+    <img src="https://cdn-icons-png.flaticon.com/128/5709/5709755.png" alt="" />
+    <h1>{props.modalText ?? "Successfully Listed"}</h1>
+    <PopupButtons>
+      <a target="_blank" href={props.externalLink}>
+        View on Explorer
+      </a>
+      <a href="#/bos.genadrop.near/widget/GenaDrop.Explore">
+        <button onClick={props.closeModal}>Close</button>
+      </a>
+    </PopupButtons>
+  </PopupContainer>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/Alert.jsx b/build/BosGenaDrop/src/GenaDrop/Alert.jsx
new file mode 100644
index 00000000..877ad360
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/Alert.jsx
@@ -0,0 +1,29 @@
+const Toast = styled.div`
+  position: fixed;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  align-conten: center;
+  top: 90px;
+  right: 25px;
+  background-color: red;
+  color: #fff;
+  padding: 16px;
+  border-radius: 8px;
+  z-index: 10000;
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  &>p{
+    margin:0px;
+    padding: 0px;
+  }
+`;
+
+return (
+  <>
+    <Toast>
+      <p>
+        {props.toastMessage || "Make sure all required fields are popuplated!"}
+      </p>
+    </Toast>
+  </>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/Create.jsx b/build/BosGenaDrop/src/GenaDrop/Create.jsx
new file mode 100644
index 00000000..7800bf22
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/Create.jsx
@@ -0,0 +1,195 @@
+const aiIcon = (
+  <svg
+    width="42"
+    height="60"
+    viewBox="0 0 42 60"
+    fill="none"
+    xmlns="http://www.w3.org/2000/svg"
+  >
+    <path
+      d="M8.17197 15.8541C7.38827 15.855 6.63693 16.1667 6.08277 16.7209C5.52862 17.275 5.2169 18.0264 5.21601 18.8101V19.8894H2.37321C1.74553 19.8903 1.14369 20.1394 0.699056 20.5825C0.254426 21.0255 0.00312218 21.6265 0 22.2542V32.1862C0 32.3681 0.0722522 32.5425 0.200862 32.6711C0.329471 32.7997 0.503902 32.872 0.685783 32.872H1.4746V38.1218C1.47612 39.1766 1.85365 40.1963 2.53938 40.9979C3.22511 41.7994 4.17413 42.3302 5.21601 42.4949V43.1283C5.2169 43.912 5.52862 44.6634 6.08277 45.2175C6.63693 45.7717 7.38827 46.0834 8.17197 46.0843H11.5907V52.4303H4.22787C3.59799 52.4312 2.99419 52.682 2.54895 53.1275C2.10371 53.5731 1.85341 54.177 1.85297 54.8069V56.9183C1.85386 57.5479 2.10436 58.1515 2.54955 58.5967C2.99473 59.0418 3.59828 59.2923 4.22787 59.2932H37.7721C38.4017 59.2923 39.0053 59.0418 39.4505 58.5967C39.8956 58.1515 40.1461 57.5479 40.147 56.9183V54.8069C40.1466 54.177 39.8963 53.5731 39.451 53.1275C39.0058 52.682 38.402 52.4312 37.7721 52.4303H30.4093V46.0843H33.828C34.6117 46.0834 35.3631 45.7717 35.9172 45.2175C36.4714 44.6634 36.7831 43.912 36.784 43.1283V42.4949C37.8257 42.3301 38.7745 41.7993 39.46 40.9977C40.1454 40.1962 40.5226 39.1765 40.5237 38.1218V32.872H41.3142C41.4961 32.872 41.6705 32.7997 41.7991 32.6711C41.9277 32.5425 42 32.3681 42 32.1862V22.2626C41.9969 21.635 41.7456 21.034 41.3009 20.591C40.8563 20.1479 40.2545 19.8987 39.6268 19.8979H36.784V18.8185C36.7831 18.0348 36.4714 17.2835 35.9172 16.7293C35.3631 16.1752 34.6117 15.8634 33.828 15.8625H26.5648V12.5248H29.9228C30.9833 12.5239 32.0002 12.1022 32.7501 11.3523C33.5 10.6024 33.9217 9.58555 33.9226 8.525V3.99985C33.9217 2.9393 33.5 1.92244 32.7501 1.17252C32.0002 0.422597 30.9833 0.000894601 29.9228 0H12.0755C11.0151 0.00134088 9.99852 0.423189 9.2487 1.17301C8.49887 1.92284 8.07703 2.93944 8.07569 3.99985V8.53006C8.07837 9.5896 8.5008 10.6049 9.25048 11.3536C10.0002 12.1024 11.016 12.5235 12.0755 12.5248H15.4403V15.849L8.17197 15.8541ZM35.4124 32.1862V39.2315H6.58757V23.016H35.4124V32.1862ZM1.37663 22.2626C1.37708 21.9973 1.48281 21.7429 1.67061 21.5554C1.8584 21.368 2.11292 21.2627 2.37828 21.2627H5.22107V31.4987H1.37663V22.2626ZM2.85293 38.1218V32.872H5.21769V41.098C4.5448 40.9421 3.94443 40.5632 3.51418 40.0228C3.08392 39.4825 2.84909 38.8125 2.84786 38.1218H2.85293ZM12.9674 46.0843H15.6835V52.4303H12.9623L12.9674 46.0843ZM24.9601 46.0843V52.4303H17.05V46.0843H24.9601ZM38.7856 54.8069V56.9183C38.783 57.1833 38.6766 57.4367 38.4894 57.6243C38.3022 57.8118 38.0489 57.9186 37.784 57.9217H4.22787C3.96259 57.919 3.70891 57.8125 3.52132 57.6249C3.33373 57.4373 3.22717 57.1836 3.22453 56.9183V54.8069C3.22717 54.5416 3.33373 54.288 3.52132 54.1004C3.70891 53.9128 3.96259 53.8062 4.22787 53.8036H37.7721C38.0379 53.804 38.2927 53.9099 38.4805 54.0981C38.6683 54.2862 38.7738 54.5411 38.7738 54.8069H38.7856ZM29.0478 52.4303H26.3216V46.0843H29.036L29.0478 52.4303ZM35.4243 43.1283C35.4238 43.5483 35.2567 43.9508 34.9596 44.2476C34.6625 44.5444 34.2598 44.711 33.8399 44.711H8.17197C7.75205 44.711 7.34931 44.5444 7.05223 44.2476C6.75514 43.9508 6.58802 43.5483 6.58757 43.1283V40.6048H35.4124V43.1283H35.4243ZM39.164 38.1218C39.163 38.8118 38.9289 39.4813 38.4996 40.0215C38.0704 40.5618 37.4711 40.9411 36.7992 41.098V32.872H39.164V38.1218ZM39.6386 21.2627C39.9037 21.2631 40.1578 21.3686 40.3452 21.556C40.5326 21.7435 40.6381 21.9976 40.6386 22.2626V31.4987H36.784V21.2627H39.6386ZM35.4124 18.8101V21.6461H6.58757V18.8101C6.58802 18.39 6.75509 17.9873 7.05212 17.6902C7.34916 17.3932 7.7519 17.2261 8.17197 17.2257H33.828C34.2481 17.2261 34.6508 17.3932 34.9479 17.6902C35.2449 17.9873 35.412 18.39 35.4124 18.8101ZM9.44894 8.53006V3.99985C9.45118 3.30423 9.72873 2.63779 10.2209 2.14623C10.7131 1.65467 11.3799 1.37797 12.0755 1.37664H29.9228C30.6196 1.37753 31.2876 1.65473 31.7803 2.14743C32.273 2.64014 32.5502 3.30812 32.5511 4.00491V8.53514C32.5488 9.23104 32.271 9.89774 31.7785 10.3893C31.2859 10.881 30.6187 11.1574 29.9228 11.1583H12.0755C11.379 11.157 10.7115 10.8796 10.2191 10.387C9.7268 9.8943 9.44984 9.22656 9.44894 8.53006ZM16.8135 12.5248H25.1932V15.849H16.8135V12.5248Z"
+      fill="#C3C6DB"
+    ></path>
+    <path
+      d="M15.4372 7.92523C16.3561 7.92523 17.101 7.18032 17.101 6.26144C17.101 5.34255 16.3561 4.59766 15.4372 4.59766C14.5183 4.59766 13.7734 5.34255 13.7734 6.26144C13.7734 7.18032 14.5183 7.92523 15.4372 7.92523Z"
+      fill="#C3C6DB"
+    ></path>
+    <path
+      d="M26.5661 7.92523C27.485 7.92523 28.2299 7.18032 28.2299 6.26144C28.2299 5.34255 27.485 4.59766 26.5661 4.59766C25.6472 4.59766 24.9023 5.34255 24.9023 6.26144C24.9023 7.18032 25.6472 7.92523 26.5661 7.92523Z"
+      fill="#C3C6DB"
+    ></path>
+    <path
+      d="M17.5605 32.3932L16.4402 35.7859H15L18.6647 25H20.3449L24.0255 35.7859H22.5371L21.3851 32.3932H17.5605ZM21.097 31.3051L20.0408 28.2005C19.8008 27.4965 19.6409 26.8565 19.4808 26.2324H19.4487C19.2888 26.8724 19.1127 27.5286 18.9047 28.1846L17.8484 31.3051H21.097Z"
+      fill="#C3C6DB"
+    ></path>
+    <path d="M26.9984 25V35.7859H25.6055V25H26.9984Z" fill="#C3C6DB"></path>
+  </svg>
+);
+
+const artIcon = (
+  <svg
+    width="75"
+    height="75"
+    viewBox="0 0 75 75"
+    fill="none"
+    xmlns="http://www.w3.org/2000/svg"
+  >
+    <path
+      d="M63.2812 14.0625H11.7188C10.4243 14.0625 9.375 15.1118 9.375 16.4062V58.5938C9.375 59.8882 10.4243 60.9375 11.7188 60.9375H63.2812C64.5757 60.9375 65.625 59.8882 65.625 58.5938V16.4062C65.625 15.1118 64.5757 14.0625 63.2812 14.0625Z"
+      stroke="#C3C6DB"
+      stroke-width="4"
+      stroke-linecap="round"
+      stroke-linejoin="round"
+    ></path>
+    <path
+      d="M9.375 49.2207L24.1113 34.4844C24.3294 34.2629 24.5894 34.0871 24.8761 33.967C25.1627 33.847 25.4704 33.7852 25.7812 33.7852C26.0921 33.7852 26.3998 33.847 26.6864 33.967C26.9731 34.0871 27.2331 34.2629 27.4512 34.4844L40.5176 47.5508C40.7357 47.7722 40.9956 47.9481 41.2823 48.0681C41.569 48.1882 41.8767 48.25 42.1875 48.25C42.4983 48.25 42.806 48.1882 43.0927 48.0681C43.3794 47.9481 43.6393 47.7722 43.8574 47.5508L49.8926 41.5156C50.1107 41.2942 50.3706 41.1183 50.6573 40.9983C50.944 40.8782 51.2517 40.8164 51.5625 40.8164C51.8733 40.8164 52.181 40.8782 52.4677 40.9983C52.7544 41.1183 53.0143 41.2942 53.2324 41.5156L65.625 53.9082"
+      stroke="#C3C6DB"
+      stroke-width="4"
+      stroke-linecap="round"
+      stroke-linejoin="round"
+    ></path>
+    <path
+      d="M45.7031 33.9844C48.292 33.9844 50.3906 31.8857 50.3906 29.2969C50.3906 26.708 48.292 24.6094 45.7031 24.6094C43.1143 24.6094 41.0156 26.708 41.0156 29.2969C41.0156 31.8857 43.1143 33.9844 45.7031 33.9844Z"
+      fill="#C3C6DB"
+    ></path>
+  </svg>
+);
+const options = [
+  {
+    name: "AI",
+    icon: aiIcon,
+    description: "Create Digital art with AI",
+    link: "#/bos.genadrop.near/widget/GenaDrop.Ai-Minter",
+  },
+  {
+    name: "Digital Art",
+    icon: artIcon,
+    description: "Upload an image and mint",
+    link: "#/bos.genadrop.near/widget/GenaDrop.MultiChainMinter",
+  },
+];
+const Title = styled.h1`
+  font-weight: 700;
+  font-size: 4rem;
+  text-align: center;
+  color: #0f1d40;
+  margin-bottom: 0.25em;
+  @media screen and (max-width: 480px) {
+    font-size: 2rem;
+  }
+`;
+const Desc = styled.p`
+  font-size: 1.25rem;
+  color: #000;
+  margin-bottom: 3.2em;
+  text-align: center;
+  max-width: 900px;
+  @media screen and (max-width: 480px) {
+    font-size: 15px;
+  }
+`;
+const Header = styled.div`
+  margin-top: 2rem;
+  display: flex;
+  flex-flow: column nowrap;
+  justify-content: center;
+  align-items: center;
+`;
+
+const CreateOptions = styled.div`
+  display: grid;
+  grid-gap: 27px 29px;
+  gap: 27px 29px;
+  grid-template-columns: repeat(2, 1fr);
+  grid-template-rows: repeat(2, 1fr);
+  justify-content: space-between;
+  align-items: center;
+  margin: 0 auto;
+  width: 90%;
+  .Create_card {
+    background: #fff;
+    text-decoration: none;
+    border: 1px solid #e5e8eb;
+    box-shadow: 26px 18px 18px rgba(93, 134, 194, 0.05);
+    border-radius: 20px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 3.5rem 1rem;
+    width: 100%;
+    max-width: 500px;
+    cursor: pointer;
+    text-align: center;
+    @media screen and (max-width: 480px) {
+      padding: 1.25rem 1rem;
+      max-height: 180px;
+    }
+    .Create_icon {
+      background: #f3f6fc;
+      border-radius: 50%;
+      padding: 15px;
+      margin-bottom: 10px;
+      display: flex;
+      width: 6.5rem;
+      height: 6.5rem;
+      @media screen and (max-width: 480px) {
+        width: 57px;
+        height: 57px;
+        padding: 8px;
+      }
+      svg {
+        height: 100%;
+        width: 100%;
+      }
+    }
+    .Create_cardTitle {
+      font-weight: 600;
+      color: #0d99ff;
+      @media screen and (max-width: 480px) {
+        font-size: 0.75rem;
+      }
+    }
+    .Create_cardDescription {
+      font-size: 0.875rem;
+      color: #263238;
+      @media screen and (max-width: 480px) {
+        font-size: 0.5rem;
+      }
+    }
+    :hover {
+      border-color: #0d99ff;
+      box-shadow: 26px 18px 18px rgb(93 134 194/16%);
+      .Create_icon {
+        background: #0d99ff;
+        path {
+          stroke: #fff;
+        }
+      }
+    }
+  }
+`;
+return (
+  <>
+    <Header>
+      <Title>Create</Title>
+      <Desc>
+        Create all types of NFTs, automatically indexed in our marketplace. AI
+        Create Digital art with AI Digital Art Upload an image and mint
+      </Desc>
+      <CreateOptions>
+        {options.map((opt) => (
+          <a
+            href={opt.link}
+            className="Create_card"
+            onClick={handleCreateClick}
+          >
+            <div className="Create_icon">{opt.icon}</div>
+            <div className="Create_cardTitle">{opt.name}</div>
+            <div className="Create_cardDescription">{opt.description}</div>
+          </a>
+        ))}
+      </CreateOptions>
+    </Header>
+  </>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/Footer.jsx b/build/BosGenaDrop/src/GenaDrop/Footer.jsx
new file mode 100644
index 00000000..d6ea3f38
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/Footer.jsx
@@ -0,0 +1,376 @@
+const FooterWrapper = styled.div`
+background: #0082e0;
+position: sticky;
+bottom: 0;
+width: 100%;
+& *{
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+  scroll-behavior: smooth;
+  font-family: "SF Pro Display",sans-serif;
+  color: #fff;
+  line-height: 1.5em;
+}
+  & .footer_top{
+  background: #0082e0;
+  padding: 2em;
+}
+& .footer_top, & .footer_wrapper {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+& .footer_wrapper {
+  max-width: 1440px;
+  margin: 0 auto;
+  @media screen and (max-width: 900px){
+    flex-direction: column;
+    grid-gap: 1em;
+    gap: 1em;
+    align-items: flex-start;
+  }
+}
+& .footer_socialIcons, & .footer_topLeft{
+  display: flex;
+  justify-content: center;
+  grid-gap: 1em;
+  gap: 1em;
+}
+
+& .footer_topLeft{
+  width: auto;
+  flex-direction: column;
+  align-items: flex-start;
+  @media screen and (max-width: 900px) {
+  width: 100%;
+  align-items: center;
+  flex-direction: row;
+  justify-content: space-between;
+  flex-wrap: wrap;
+  }
+}
+
+& a {
+  text-decoration: none;
+  color: unset;
+  cursor: pointer;
+}
+
+& .footer_socialIcons{
+  align-items: center;
+  width: 100%;
+}
+
+& .footer_socialIcons .footer_icon{
+  transition: all .3s;
+  border-radius: .25em;
+  background: #62bdff;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: .5em;
+  height: 3rem;
+  width: 3rem;
+  &:hover{
+    cursor: pointer;
+    -webkit-transform: scale(1.1);
+    transform: scale(1.1);
+    background: #0d99ff;
+  }
+}
+
+& .footer_icon img {
+  width: 2rem;
+  @media screen and (max-width: 900px){
+  width: 1.4em;
+  }
+}
+
+& .footer_topRight {
+  display: flex;
+  align-items: flex-start;
+  justify-content: center;
+  grid-gap: 4em;
+  gap: 4em;
+  @media screen and (max-width: 1200px){
+  grid-gap: 2em;
+  gap: 2em;
+  }
+}
+
+& .footer_links {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: flex-start;
+  grid-gap: 1em;
+  gap: 1em;
+}
+
+& .footer_links .footer_title {
+  font-weight: 700;
+  color: #fff;
+}
+
+& .footer_bottom {
+  width: 100%;
+  background: #0082e0);
+  padding: 1em;
+  border-top: .5px solid hsla(0,0%,100%,.1);
+  @media screen and (max-width: 900px){
+    padding: 2em 1em;
+  }
+}
+
+& .footer_orgs, & .footer_termsAndPolicy {
+  display: flex;
+  align-items: center;
+  grid-gap: .5em;
+  gap: .5em;
+}
+
+& .footer_termsAndPolicy {
+  justify-content: flex-start;
+  flex-wrap: wrap;
+  font-size: .85rem;
+  margin-top: .5em;
+}
+
+& .footer_orgs a img {
+  max-height: 22px;
+}
+`;
+
+const date = new Date();
+
+return (
+  <FooterWrapper>
+    <div className="footer_container">
+      <div className="footer_top">
+        <div className="footer_wrapper">
+          <div className="footer_topLeft">
+            <a href="https://bos.genadrop.io/">
+              <img
+                src="https://www.genadrop.com/static/media/genadrop-logo-light.49d7ff0c.svg"
+                alt=""
+              />
+            </a>
+            <div className="footer_socialIcons">
+              <a
+                className="footer_icon"
+                href="https://www.genadrop.com/links"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/icon-links.2346e662.svg"
+                  alt="Minority Programmers Linktree"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://discord.gg/4vdtmQqz6d"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/icon-discord.25ea2ba7.svg"
+                  alt="Minority Programmers Discord"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://twitter.com/genadrop"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/icon-twitter.6988fc91.svg"
+                  alt="Minority Programmers Twitter"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://t.me/+4BDhz2QLaa05NzEx"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/telegram.7a8e67e2.svg"
+                  alt="Minority Programmers Telegram"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://linkedin.com/company/genadrop"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/icon-linkedin.d3d020a3.svg"
+                  alt="Minority Programmers Linkedin"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://youtube.com/c/minorityprogrammers"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/icon-youtube.06181a68.svg"
+                  alt="Minority Programmers Youtube"
+                />
+              </a>
+              <a
+                className="footer_icon"
+                href="https://www.instagram.com/genadrop"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                <img
+                  src="https://www.genadrop.com/static/media/ig-logo.33b2d649.svg"
+                  alt="Minority Programmers Instagram"
+                />
+              </a>
+            </div>
+          </div>
+          <div className="footer_topRight">
+            <div className="footer_links">
+              <div className="footer_title">App</div>
+              <a href="/create">Create</a>
+              <a href="/marketplace">Marketplace</a>
+            </div>
+            <div className="footer_links">
+              <div className="footer_title">Quick Links</div>
+              <a href="https://twitter.com/genadrop">Twitter</a>
+              <a href="https://t.me/+4BDhz2QLaa05NzEx">Telegram</a>
+            </div>
+            <div className="footer_links">
+              <div className="footer_title">Support</div>
+              <a href="https://www.genadrop.com/docs">Docs</a>
+              <a href="https://linktr.ee/MinorityProgrammers">Contact Us</a>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div className="footer_bottom">
+        <div className="footer_wrapper">
+          <div>
+            <div>This Project is in Public Beta</div>
+            <div className="footer_termsAndPolicy">
+              {date.getFullYear()} Genadrop |
+              <a
+                href="https://docs.google.com/document/d/16tRGt3sCIauMNDCwq5A99zYUxwU8S5bpGhI0eaJzwAw/edit?usp=sharing"
+                target="_blank"
+                rel="noreferrer"
+              >
+                Privacy Policy |
+              </a>
+              <a
+                href="https://docs.google.com/document/d/1Ofbw5j9l3MnOFSa2cALcnJJI6iQz86SdiNmQAp1f6AE/edit?usp=sharing"
+                target="_blank"
+                rel="noreferrer"
+              >
+                Terms of Use |
+              </a>
+              <div className="footer_orgs">
+                Powered by
+                <a
+                  href="https://www.pinata.cloud/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-pinata.82742150.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://www.algorand.com/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-algorand.00f44532.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://celo.org/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-celo.65cda9b7.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://polygon.technology/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-polygon.be02dcd1.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://www.avax.network/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-avalanche.15996dd1.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://near.org/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-near.40954533.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://aurora.dev/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/footer-icon-aurora.90725a23.svg"
+                    alt=""
+                  />
+                </a>
+                <a
+                  href="https://arbitrum.io/"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                >
+                  <img
+                    src="https://www.genadrop.com/static/media/arbitrum.c20bd781.svg"
+                    alt=""
+                  />
+                </a>
+              </div>
+            </div>
+          </div>
+          <a
+            className="footer_build"
+            href="https://www.minorityprogrammers.com/"
+            target="_blank"
+            rel="noopener noreferrer"
+          >
+            Built with ❤️ by the Minority Programmers Association
+          </a>
+        </div>
+      </div>
+    </div>
+  </FooterWrapper>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/Home/Index.jsx b/build/BosGenaDrop/src/GenaDrop/Home/Index.jsx
index 5b3bd008..77815b36 100644
--- a/build/BosGenaDrop/src/GenaDrop/Home/Index.jsx
+++ b/build/BosGenaDrop/src/GenaDrop/Home/Index.jsx
@@ -7,7 +7,7 @@ const Hero = styled.div`
   gap: .5em;
   margin-bottom: 3em;
   padding: 9em 2em;
-  background: linear-gradient(255.93deg,#eff3f9 -39.69%,#eff3f9 5.2%,rgba(205,237,255,.65) 49.41%,#fff 91.12%);
+  background: linear-gradient(255.93deg,#eff3f9 -39.69%,#eff3f9 5.2%,rgba(205,237,255,.65) 49.41%,#fff 91.11%);
 }
 `;
 const MainHeading = styled.h1`
diff --git a/build/BosGenaDrop/src/GenaDrop/Home/PartnerForm.jsx b/build/BosGenaDrop/src/GenaDrop/Home/PartnerForm.jsx
new file mode 100644
index 00000000..7ad8eb15
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/Home/PartnerForm.jsx
@@ -0,0 +1,13 @@
+const url =
+  "https://docs.google.com/forms/d/e/1FAIpQLSexslat5Sca-I0M0Tmrq0HFNo8Z4JXDKfeMUIJ7kcaWoQvzBA/viewform";
+return (
+  <>
+    <iframe
+      src={url}
+      style={{ width: "100%", height: "calc(100vh - 120px)" }}
+      frameborder="0"
+      marginheight="0"
+      marginwidth="0"
+    />
+  </>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/Home/PartnersCarousel.jsx b/build/BosGenaDrop/src/GenaDrop/Home/PartnersCarousel.jsx
new file mode 100644
index 00000000..f8749d4f
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/Home/PartnersCarousel.jsx
@@ -0,0 +1,245 @@
+const partnersList = [
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://proofofvibes.vercel.app/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://app.proofofvibes.com/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "http://twitter.com/AuroraNftClub/",
+    imageSrc: "/static/media/auroranft.d651860a.png",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://proofofvibes.vercel.app/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://app.proofofvibes.com/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "http://twitter.com/AuroraNftClub/",
+    imageSrc: "/static/media/auroranft.d651860a.png",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://app.proofofvibes.com/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "http://twitter.com/AuroraNftClub/",
+    imageSrc: "/static/media/auroranft.d651860a.png",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://proofofvibes.vercel.app/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+  {
+    website: "https://www.herdrop.com/",
+    imageSrc: "/static/media/herdao.18aa16e7.png",
+  },
+  {
+    website: "https://app.proofofvibes.com/",
+    imageSrc: "/static/media/proofofvibes.3ec1baec.svg",
+  },
+  {
+    website: "https://www.bluntdao.com/",
+    imageSrc: "/static/media/bluntdao.6154b86b.svg",
+  },
+  {
+    website: "http://twitter.com/AuroraNftClub/",
+    imageSrc: "/static/media/auroranft.d651860a.png",
+  },
+  {
+    website: "https://www.onboarddao.com/",
+    imageSrc: "/static/media/onboarddao.3a02aa23.svg",
+  },
+];
+
+const displayedPartnersList = partnersList.map((partner, index) => (
+  <li
+    className="splide__slide splide__slide--clone"
+    id={`splide01-clone${index + 1 > 9 ? index + 1 : "0" + index + 1}`}
+    role="group"
+    aria-roledescription="slide"
+    aria-label={`${index + 1} of ${partnersList.length}`}
+    style={{ marginRight: "2rem" }}
+    aria-hidden="true"
+  >
+    <div>
+      <a
+        href={partner.website}
+        target="_blank"
+        rel="noreferrer"
+        className="MediaBar_slide"
+        tabindex="-1"
+      >
+        <img
+          src={`https://www.genadrop.io${partner.imageSrc}`}
+          alt={partner.website}
+        />
+      </a>
+    </div>
+  </li>
+));
+const Partners = styled.div`
+  .Partners_wrapper {
+    width: 100%;
+  }
+  .Partners_container * {
+    transition: max-width 0.3s;
+  }
+  .splide.is-initialized,
+  .splide.is-rendered {
+    visibility: visible;
+    overflow: hidden;
+    transform: translate3d(0, 0, 0);
+  }
+  .splide__list {
+    -webkit-backface-visibility: hidden;
+    backface-visibility: hidden;
+    display: -ms-flexbox;
+    display: flex;
+    justify-content: center;
+    position: 0 -200px;
+    height: 100%;
+    width: 100%;
+    margin: 0 !important;
+    padding: 0 !important;
+    animation: moveSlideshow 80s linear infinite;
+    transform: translate3d(0, 0, 0);
+    &:hover {
+      animation-play-state: paused;
+    }
+  }
+  li {
+    list-style: none;
+  }
+  .MediaBar_slide {
+    display: flex;
+    position: relative;
+    width: -webkit-fit-content;
+    width: -moz-fit-content;
+    width: fit-content;
+    z-index: 2;
+  }
+  a {
+    text-decoration: none;
+    color: unset;
+    cursor: pointer;
+  }
+
+  .MediaBar_slide img {
+    height: 4rem;
+    width: auto;
+    aspect-ratio: 3/2;
+    object-fit: contain;
+    filter: gray;
+    -webkit-filter: grayscale(1);
+    filter: grayscale(1);
+    transition: all 0.3s;
+  }
+  .MediaBar_slide img:hover {
+    filter: none;
+    -webkit-filter: grayscale(0);
+    filter: grayscale(0);
+  }
+  @keyframes moveSlideshow {
+    100% {
+      transform: translateX(-66.6666%);
+    }
+  }
+`;
+return (
+  <Partners>
+    <div className="Partners_wrapper">
+      <div
+        className="splide is-initialized splide--loop splide--ltr splide--draggable is-active"
+        id="splide01"
+        role="region"
+        aria-roledescription="carousel"
+      >
+        <div
+          className="splide__track splide__track--loop splide__track--ltr splide__track--draggable"
+          id="splide01-track"
+          style={{ paddingLeft: "0px", paddingRight: "0px" }}
+          aria-live="off"
+          aria-relevant="additions"
+        >
+          <ul className="splide__list" id="splide01-list" role="presentation">
+            {displayedPartnersList}
+          </ul>
+        </div>
+      </div>
+    </div>
+  </Partners>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/MultiChainMinter.jsx b/build/BosGenaDrop/src/GenaDrop/MultiChainMinter.jsx
new file mode 100644
index 00000000..970b836f
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/MultiChainMinter.jsx
@@ -0,0 +1,1062 @@
+const auroraCOntract = "0xe53bC42B6b25a1d548B73636777a0599Fd27fE5c";
+const auroraSoulCOntract = "0xe1D36964Eb49E38BB3f7410401BC95F0E9f1F6D3";
+const polygonContract = "0x436AEceaEeC57b38a17Ebe71154832fB0fAFF878";
+const polygonSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const celoContract = "0xC291846A587cf00a7CC4AF0bc4EEdbC9c3340C36";
+const celoSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const avaxContract = "0x43dBdfcAADD0Ea7aD037e8d35FDD7c353B5B435b";
+const avaxSoulContract = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const arbitrumContract = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const arbitrumSoulContract = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const nearContract = "nft.genadrop.near";
+const ownerId = "minorityprogrammers.near"; // attribution
+const mintSingle = [
+  "function mint(address to, uint256 id, uint256 amount, string memory uri, bytes memory data) public {}",
+  "function safeMint(address to, string memory uri) public {}",
+];
+State.init({
+  title: "",
+  description: "",
+  recipient: "",
+  isSoulBound: false,
+  showAlert: false,
+  toastMessage: "",
+  selectIsOpen: false,
+});
+let accountId = context.accountId;
+const contractAddresses = {
+  137: [
+    polygonContract,
+    "Polygon",
+    "https://polygonscan.com/tx/",
+    polygonSoulContract,
+  ],
+  1313161554: [
+    auroraCOntract,
+    "Aurora",
+    "https://explorer.aurora.dev/tx/",
+    auroraSoulCOntract,
+  ],
+  42220: [
+    celoContract,
+    "Celo",
+    "https://explorer.celo.org/mainnet/tx/",
+    celoSoulContract,
+  ],
+  43114: [
+    avaxContract,
+    "Avalanche",
+    "https://snowtrace.io/tx/",
+    avaxSoulContract,
+  ],
+  42161: [arbitrumContract, "Arbitrum", "https://arbiscan.io/tx/"],
+  0: [nearContract, "Near"],
+};
+const chains = [
+  {
+    id: "137",
+    name: "Polygon",
+    url: "https://ipfs.near.social/ipfs/bafkreie5h5oq6suoingcwuzj32m3apv56rl56wpwpaxmevlk5vndlypxze",
+  },
+  {
+    id: "1313161554",
+    name: "Aurora",
+    url: "https://ipfs.near.social/ipfs/bafkreiajqik4gjbmkh7z2gylpjzrsuht7simjecpxuoqn6icqfbioswzuy",
+  },
+  {
+    id: "42220",
+    name: "Celo",
+    url: "https://ipfs.near.social/ipfs/bafkreifu6ufsdf2ivrs5febt7l25wdys6odzfelgjauzod7owrfug56cxe",
+  },
+  {
+    id: "43114",
+    name: "Avax",
+    url: "https://ipfs.near.social/ipfs/bafkreifhu5fytsjcmjluarfnu6kcdhaqz4rgdrbbzf6dlsmggqb7oi3w4e",
+  },
+  {
+    id: "42161",
+    name: "Arbitrum",
+    url: "https://ipfs.near.social/ipfs/bafkreiffax4lnya337rz5ph75faondeqmpy6xj37yprwvxbru4qc5emsiq",
+  },
+  {
+    id: "0",
+    name: "Near",
+    url: "https://ipfs.near.social/ipfs/bafkreigv55ubnx3tfhbf56toihekuxvgzfqn5c3ndbfjcg3e4uvaeuy5cm",
+  },
+];
+
+const handleMint = () => {
+  console.log("it's here", state.title && state.description && state.image.cid);
+  if (!state.image.cid) {
+    return;
+  }
+  if (!state.title) {
+    console.log("Please Enter title");
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a title for the NFT",
+    });
+
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else if (!state.description) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a description for the NFT",
+    });
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else {
+    if (state.selectedChain == "0") {
+      const gas = 200000000000000;
+      const deposit = 10000000000000000000000;
+      const metadata = {
+        name: state.title,
+        description: state.description,
+        properties: [],
+        image: `ipfs://${state.image.cid}`,
+      };
+      asyncFetch("https://ipfs.near.social/add", {
+        method: "POST",
+        headers: {
+          Accept: "application/json",
+        },
+        body: metadata,
+      }).then((res) => {
+        const cid = res.body.cid;
+        const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+        console.log("in the promise", res, Id);
+        Near.call([
+          {
+            contractName: nearContract,
+            methodName: "nft_mint",
+            args: {
+              token_id: `${Date.now()}`,
+              metadata: {
+                title: state.title,
+                description: state.description,
+                media: `https://ipfs.io/ipfs/${state.image.cid}`,
+                reference: `ipfs://${cid}`,
+              },
+              receiver_id: state.recipient || accountId,
+            },
+            gas: gas,
+            deposit: deposit,
+          },
+        ]);
+      });
+      return;
+    }
+    console.log("passed checks");
+    let networkId = Ethers.provider()._network.chainId;
+
+    const CA = state.isSoulBound
+      ? contractAddresses[state.selectedChain][3]
+      : contractAddresses[state.selectedChain][0];
+
+    console.log("CONTRACT ADD", CA);
+
+    const contract = new ethers.Contract(
+      CA,
+      mintSingle,
+      Ethers.provider().getSigner()
+    );
+    const metadata = {
+      name: state.title,
+      description: state.description,
+      properties: [],
+      image: `ipfs://${state.image.cid}`,
+    };
+    asyncFetch("https://ipfs.near.social/add", {
+      method: "POST",
+      headers: {
+        Accept: "application/json",
+      },
+      body: metadata,
+    }).then((res) => {
+      const cid = res.body.cid;
+      const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+      console.log("in the promse", res, Id);
+      const recipient = Ethers.send("eth_requestAccounts", []);
+      state.isSoulBound
+        ? contract
+            .safeMint(state.recipient || recipient[0], `ipfs://${cid}`)
+            .then((transactionHash) => transactionHash.wait())
+            .then((ricit) => {
+              console.log("receipt::", ricit);
+              State.update({
+                link: `${
+                  contractAddresses[state.selectedChain][2] +
+                  ricit.transactionHash
+                }`,
+              });
+            })
+        : contract
+            .mint(state.recipient || recipient[0], Id, 1, `ipfs://${cid}`, "0x")
+            .then((transactionHash) => transactionHash.wait())
+            .then((ricit) => {
+              console.log("receipt::", ricit);
+              State.update({
+                link: `${
+                  contractAddresses[state.selectedChain][2] +
+                  ricit.transactionHash
+                }`,
+              });
+            });
+    });
+  }
+};
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+  console.log("accounts:", accounts, state.sender);
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+    Ethers.provider()
+      .getNetwork()
+      .then((data) => {
+        State.update({
+          selectedChain: data.chainId,
+        });
+      });
+  }
+
+  console.log("in between", state.sender);
+
+  State.update({
+    selectedChain: "0",
+  });
+}
+
+//select tag
+const handleSelectClick = () => {
+  State.update({
+    selectIsOpen: !state.selectIsOpen,
+  });
+};
+
+const handleOutsideClick = (e) => {
+  if (!e.target.closest(".select-replica__select")) {
+    State.update({
+      selectIsOpen: false,
+    });
+  }
+};
+
+const onChangeTitle = (title) => {
+  console.log("go daddy", state.recipient);
+  State.update({
+    title,
+  });
+};
+
+const data = Social.keys("*/profile", "final");
+
+if (!data) {
+  return "Loading";
+}
+
+const accounts = Object.entries(data);
+
+const allWidgets = [];
+
+for (let i = 0; i < accounts.length; ++i) {
+  const accountId = accounts[i][0];
+  allWidgets.push(accountId);
+}
+
+// const onChangeRecipient = (recipient) => {
+//   state.selectedChain === "0"
+//     ? State.update({
+//         recipient: recipient[0],
+//       })
+//     : State.update({
+//         recipient,
+//       });
+// };
+const onChangeRecipient = (recipient) => {
+  State.update({
+    customRecipient: true,
+  });
+
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: recipient[0],
+    });
+  } else {
+    State.update({
+      recipient,
+    });
+  }
+};
+const handleChainChange = (chain_id) => {
+  try {
+    Ethers.send("wallet_switchEthereumChain", [
+      { chainId: `0x${Number(chain_id).toString(16)}` },
+    ]);
+
+    State.update({
+      selectedChain: chain_id,
+    });
+    console.log(state.selectedChain);
+  } catch (err) {
+    console.log(err);
+  }
+};
+
+const onChangeDesc = (description) => {
+  console.log("Log ciritcal critics:", state.selectedChain, state.title);
+  State.update({
+    description,
+  });
+};
+
+const handleToggle = () => {
+  State.update({
+    isSoulBound: !state.isSoulBound,
+  });
+};
+
+const Heading = styled.p`
+  margin: 3rem auto 0px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+const SubHeading = styled.p`
+  margin: 0 auto 3px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 1.4rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const ImageUploadCard = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  align-items: center;
+  width: 80%;
+  border: 2px dashed #0d99ff;
+  border-radius: 1rem;
+  box-shadow: 4px 4px 20px 6px rgba(0, 0, 0, 0.2);
+  margin: 60px auto;
+  padding: 5rem 1.5rem;
+  text-align: center;
+`;
+
+const Main = styled.div`
+  display: grid;
+  gap: 3rem;
+  align-content: center;
+  grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
+  justify-content: center;
+  margin-top: 5px;
+  width: 100%;
+  padding: 1rem;
+  .button {
+    padding: 0.75em 2em;
+    border-radius: 0.7em;
+    border: 1px solid #0d99ff;
+    transition: all 0.3s;
+    cursor: pointer;
+    color: #fff;
+    background: #0d99ff;
+    &:hover {
+      color: #0d99ff;
+      background: #fff;
+    }
+    @media screen and (max-width: 540px) {
+      padding: 0.5em 2em;
+    }
+  }
+`;
+
+const Text = styled.p`
+  font-size: 0.9rem;
+  color: #525c76;
+  line-height: 1rem;
+  margin: 3px;
+`;
+
+const Elipse = styled.div`
+  background-color: #dff3f9;
+  height: 100px;
+  width: 100px;
+  object-fit: contain;
+  border-radius: 50%;
+`;
+
+const Card = styled.div`
+  padding: 1em;
+  border: 1px solid #e5e8eb;
+  gap: 2em;
+  margin: 10px auto;
+  border-radius: 0.7em;
+  & input {
+    display: block;
+    padding: 0.5em;
+    width: 100%;
+    border: 1px solid #e5e8eb;
+    border-radius: 10px;
+    outline: none;
+    background: #f4f5f6;
+    color: #525c76;
+    :focus {
+      box-shadow: none;
+      border: 1px solid #0d99ff;
+    }
+    &::placeholder {
+      color: palevioletred;
+    }
+  }
+  .soulbound {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+`;
+
+const ImageCard = styled.div`
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  height: 100%;
+  max-height: 100%;
+  width: 90%;
+  max-width: 500px;
+  border-radius: 1rem;
+  & > img {
+    object-fit: cover;
+    width: 100%;
+    height: 100%;
+  }
+`;
+
+const Input = styled.input`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+  ::placeholder {
+    color: palevioletred;
+  }
+`;
+
+const TextArea = styled.textarea`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+`;
+
+const SelectTag = styled.select`
+  height: fit-content;
+  width: 300px;
+`;
+
+const ChainIcon = styled.option`
+  display: flex;
+  height: 130px;
+  padding: 1rem auto;
+  & > img {
+    height: 100px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectReplicaContainer = styled.div`
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  z-index: 1;
+  & .select-replica__select {
+    position: relative;
+  }
+
+  & .select-replica__selected {
+    cursor: pointer;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border: 1px solid #ccc;
+    gap: 10px;
+    border-radius: 4px;
+    background-color: #fff;
+    max-width: 200px;
+    & > img {
+      height: 100%;
+      width: 100px;
+      object-fit: contain;
+    }
+  }
+
+  & .select-replica__options {
+    position: absolute;
+    top: 110%;
+    left: 0;
+    width: 100%;
+    /* height: fit-content; */
+    overflow-y: auto;
+    border: 1px solid #ccc;
+    border-top: none;
+    border-radius: 0 0 4px 4px;
+    background-color: #fff;
+    margin: auto;
+    max-height: 300px;
+    max-width: 200px;
+    display: none;
+  }
+
+  & .select-replica__options.open {
+    display: block;
+  }
+
+  & .select-replica__option {
+    display: flex;
+    justify-content: center;
+    max-width: 200px;
+    align-items: center;
+    cursor: pointer;
+    background-color: #fff;
+    padding: 3px;
+    border-bottom: 1px solid gray;
+  }
+
+  & .select-replica__option.selected {
+    background-color: #f0f0f0;
+  }
+
+  & .select-replica__option img {
+    height: 60px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectGroup = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  justify-content: center;
+  gap: 1rem;
+  margin: 2rem auto;
+`;
+
+const ToggleButton = styled.div`
+  /* The switch - the box around the slider */
+  .switch {
+    position: relative;
+    display: inline-block;
+    width: 60px;
+    height: 34px;
+  }
+
+  /* Hide default HTML checkbox */
+  .switch input {
+    opacity: 0;
+    width: 0;
+    height: 0;
+  }
+
+  /* The slider */
+  .slider {
+    position: absolute;
+    cursor: pointer;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: #ccc;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  .slider:before {
+    position: absolute;
+    content: "";
+    height: 26px;
+    width: 26px;
+    left: 4px;
+    bottom: 4px;
+    background-color: white;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  input:checked + .slider {
+    background-color: #2196f3;
+  }
+
+  input:focus + .slider {
+    box-shadow: 0 0 1px #2196f3;
+  }
+
+  input:checked + .slider:before {
+    -webkit-transform: translateX(26px);
+    -ms-transform: translateX(26px);
+    transform: translateX(26px);
+  }
+
+  /* Rounded sliders */
+  .slider.round {
+    border-radius: 34px;
+  }
+
+  .slider.round:before {
+    border-radius: 50%;
+  }
+`;
+
+if (!(state.sender || accountId)) {
+  console.log("Please login here now");
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in or connect a wallet",
+  });
+}
+
+console.log(
+  "Here 🤔 " +
+    state.selectedChain +
+    " " +
+    chains
+      .filter((chain) => {
+        return state.selectedChain.toString() == chain.id;
+      })
+      .map((c) => c.url)
+);
+
+return (
+  <div className="container vh-100 d-flex flex-column justify-content-between">
+    <div>
+      {state.showAlert && (
+        <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+      )}
+      <Heading className="text-center fs-2 fw-bold">
+        Mint NFT on Multiple chains
+      </Heading>
+
+      <Main
+        className="container-fluid"
+        onLoad={State.update({ chains: chains })}
+      >
+        {!state.image.cid ? (
+          <div className="flex-grow-1">
+            <SubHeading>
+              Upload an image to create an NFT any of our supported blockchains
+              super fast!
+            </SubHeading>
+            <ImageUploadCard className="flex-grow-1">
+              <Elipse />
+              {accountId || Ethers.provider() ? (
+                <>
+                  <IpfsImageUpload
+                    image={state.image}
+                    className="btn text-decoration-none link-primary pe-auto"
+                  />
+                  <div>
+                    <Text>
+                      We support .jpg, .jpeg, .png, .webp, .gif files and deploy
+                      to Near, Polygon, Celo, Aurora, Avalanche, and Arbitrum
+                    </Text>
+                    <Text>Max file size: 20mb</Text>
+                  </div>
+                </>
+              ) : (
+                <Card>
+                  {state.sender && Ethers.provider() ? (
+                    <SelectGroup className="form-group">
+                      <label htmlFor="chainSelect">Select Chain</label>
+                      <SelectReplicaContainer>
+                        <div
+                          className={`select-replica__select ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                          onClick={handleSelectClick}
+                        >
+                          <div className="select-replica__selected">
+                            {state.chains.filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            ) ? (
+                              <img
+                                src={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.url)}
+                                alt={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.name)}
+                              />
+                            ) : (
+                              "Select an option"
+                            )}
+                            <span>▼</span>
+                          </div>
+                          <div
+                            className={`select-replica__options ${
+                              state.selectIsOpen ? "open" : ""
+                            }`}
+                          >
+                            {state.chains.map((chain) =>
+                              chain.id !== state.selectedChain.toString() ? (
+                                <div
+                                  key={chain.id}
+                                  className={`select-replica__option ${
+                                    selectedOption === chain.name
+                                      ? "selected"
+                                      : ""
+                                  }`}
+                                  onClick={() => handleChainChange(chain.id)}
+                                >
+                                  <img src={chain.url} alt={chain.name} />
+                                </div>
+                              ) : (
+                                ""
+                              )
+                            )}
+                          </div>
+                        </div>
+                      </SelectReplicaContainer>
+                      {state.link && (
+                        <a href={`${state.link}`} target="_blank">
+                          View Transaction
+                        </a>
+                      )}
+                    </SelectGroup>
+                  ) : accountId ? (
+                    <SelectGroup>
+                      <label htmlFor="chainSelect">Select Chain</label>
+                      <SelectReplicaContainer>
+                        <div
+                          className={`select-replica__select ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                          onClick={handleSelectClick}
+                        >
+                          <div className="select-replica__selected">
+                            {state.chains.filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            ) ? (
+                              <img
+                                src={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.url)}
+                                alt={state.chains
+                                  .filter(
+                                    (chain) =>
+                                      chain.id ===
+                                      state.selectedChain.toString()
+                                  )
+                                  .map((c) => c.name)}
+                              />
+                            ) : (
+                              "Select an option"
+                            )}
+                            <span>▼</span>
+                          </div>
+                          <div
+                            className={`select-replica__options ${
+                              state.selectIsOpen ? "open" : ""
+                            }`}
+                          >
+                            {state.chains.map((chain) =>
+                              chain.id !== state.selectedChain.toString() ? (
+                                <div
+                                  key={chain.id}
+                                  className={`select-replica__option ${
+                                    selectedOption === chain.name
+                                      ? "selected"
+                                      : ""
+                                  }`}
+                                  onClick={() => handleChainChange(chain.id)}
+                                >
+                                  <img src={chain.url} alt={chain.name} />
+                                </div>
+                              ) : (
+                                ""
+                              )
+                            )}
+                          </div>
+                        </div>
+                      </SelectReplicaContainer>
+                      <div>
+                        <Web3Connect
+                          className="btn mt-3"
+                          connectLabel="Connect with Ethereum Wallet"
+                        />
+                      </div>
+                    </SelectGroup>
+                  ) : (
+                    <Web3Connect
+                      className="btn mt-3"
+                      connectLabel="Connect with Wallet"
+                    />
+                  )}
+                </Card>
+              )}
+            </ImageUploadCard>
+          </div>
+        ) : (
+          <>
+            <Card className="d-flex flex-column align-items-center w-100">
+              <div>
+                <IpfsImageUpload
+                  image={state.image}
+                  className="btn btn-outline-primary border-0 rounded-3"
+                />
+              </div>
+              <ImageCard>
+                <img
+                  src={`https://ipfs.io/ipfs/` + state.image.cid}
+                  alt="uploaded image"
+                  width="100%"
+                  height="100%"
+                  className="rounded-3"
+                />
+              </ImageCard>
+            </Card>
+            <div>
+              <Card>
+                {state.sender && Ethers.provider() ? (
+                  <SelectGroup className="form-group">
+                    <label htmlFor="chainSelect">Select Chain</label>
+                    <SelectReplicaContainer>
+                      <div
+                        className={`select-replica__select ${
+                          state.selectIsOpen ? "open" : ""
+                        }`}
+                        onClick={handleSelectClick}
+                      >
+                        <div className="select-replica__selected">
+                          {state.chains.filter(
+                            (chain) =>
+                              chain.id === state.selectedChain.toString()
+                          ) ? (
+                            <img
+                              src={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.url)}
+                              alt={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.name)}
+                            />
+                          ) : (
+                            "Select an option"
+                          )}
+                          <span>▼</span>
+                        </div>
+                        <div
+                          className={`select-replica__options ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                        >
+                          {state.chains.map((chain) =>
+                            chain.id !== state.selectedChain.toString() ? (
+                              <div
+                                key={chain.id}
+                                className={`select-replica__option ${
+                                  selectedOption === chain.name
+                                    ? "selected"
+                                    : ""
+                                }`}
+                                onClick={() => handleChainChange(chain.id)}
+                              >
+                                <img src={chain.url} alt={chain.name} />
+                              </div>
+                            ) : (
+                              ""
+                            )
+                          )}
+                        </div>
+                      </div>
+                    </SelectReplicaContainer>
+                    {state.link && (
+                      <a href={`${state.link}`} target="_blank">
+                        View Transaction
+                      </a>
+                    )}
+                  </SelectGroup>
+                ) : accountId ? (
+                  <SelectGroup>
+                    <label htmlFor="chainSelect">Select Chain</label>
+                    <SelectReplicaContainer>
+                      <div
+                        className={`select-replica__select ${
+                          state.selectIsOpen ? "open" : ""
+                        }`}
+                        onClick={handleSelectClick}
+                      >
+                        <div className="select-replica__selected">
+                          {state.chains.filter(
+                            (chain) =>
+                              chain.id === state.selectedChain.toString()
+                          ) ? (
+                            <img
+                              src={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.url)}
+                              alt={state.chains
+                                .filter(
+                                  (chain) =>
+                                    chain.id === state.selectedChain.toString()
+                                )
+                                .map((c) => c.name)}
+                            />
+                          ) : (
+                            "Select an option"
+                          )}
+                          <span>▼</span>
+                        </div>
+                        <div
+                          className={`select-replica__options ${
+                            state.selectIsOpen ? "open" : ""
+                          }`}
+                        >
+                          {state.chains.map((chain) =>
+                            chain.id !== state.selectedChain.toString() ? (
+                              <div
+                                key={chain.id}
+                                className={`select-replica__option ${
+                                  selectedOption === chain.name
+                                    ? "selected"
+                                    : ""
+                                }`}
+                                onClick={() => handleChainChange(chain.id)}
+                              >
+                                <img src={chain.url} alt={chain.name} />
+                              </div>
+                            ) : (
+                              ""
+                            )
+                          )}
+                        </div>
+                      </div>
+                    </SelectReplicaContainer>
+                    <div>
+                      <Web3Connect
+                        className="btn mt-3"
+                        connectLabel="Connect with Ethereum Wallet"
+                      />
+                    </div>
+                  </SelectGroup>
+                ) : (
+                  <Web3Connect
+                    className="btn mt-3"
+                    connectLabel="Connect with Wallet"
+                  />
+                )}
+              </Card>
+              <Card>
+                <div className="soulbound">
+                  <p>SoulBound: {state.isSoulBound ? "Enabled" : "Disabled"}</p>
+                  <ToggleButton>
+                    <label className="switch">
+                      <input type="checkbox" onChange={handleToggle} />
+                      <span className="slider round"></span>
+                    </label>
+                  </ToggleButton>
+                </div>
+              </Card>
+              <Card>
+                <Card>
+                  Title:
+                  <Input
+                    type="text"
+                    value={state.title || ""}
+                    onChange={(e) => onChangeTitle(e.target.value)}
+                  />
+                </Card>
+                <Card>
+                  Description:
+                  <TextArea
+                    type="text"
+                    value={state.description || ""}
+                    onChange={(e) => onChangeDesc(e.target.value)}
+                  />
+                </Card>
+                <Card>
+                  Mint To:
+                  {state.selectedChain !== "0" ? (
+                    <Input
+                      type="text"
+                      placeholder={
+                        state.selectedChain == "0" ? accountId : state.sender
+                      }
+                      value={state.recipient}
+                      onChange={(e) => onChangeRecipient(e.target.value)}
+                    />
+                  ) : (
+                    <Typeahead
+                      id="async-example"
+                      className="type-ahead"
+                      isLoading={isLoading}
+                      labelKey="search"
+                      minLength={1}
+                      options={allWidgets}
+                      onChange={(value) => onChangeRecipient(value)}
+                      placeholder={
+                        state.selectedChain == "0" ? accountId : state.sender
+                      }
+                    />
+                  )}
+                </Card>
+              </Card>
+              <button
+                type="button"
+                className="btn btn-primary d-flex flex-column align-items-center mx-auto"
+                onClick={handleMint}
+              >
+                Mint to {contractAddresses[state.selectedChain][1]}
+              </button>
+            </div>
+          </>
+        )}
+      </Main>
+    </div>
+    <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+  </div>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/MultiChainMinter2.jsx b/build/BosGenaDrop/src/GenaDrop/MultiChainMinter2.jsx
new file mode 100644
index 00000000..5c199702
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/MultiChainMinter2.jsx
@@ -0,0 +1,972 @@
+const OWNER_ID = "minorityprogrammers.near";
+let accountId = context.accountId;
+
+const DEFAULT_NFT_TITLE = "My awesome NFT";
+const DEFAULT_NFT_DESCRIPTION = "I've just created an NFT using GenaDrop";
+
+State.init({
+  title: DEFAULT_NFT_TITLE,
+  description: DEFAULT_NFT_DESCRIPTION,
+  recipient: "",
+  isSoulBound: false,
+  showAlert: false,
+  toastMessage: "",
+  selectIsOpen: false,
+  selectedChain: "0",
+  customRecipient: false,
+  mintedNfts: [],
+});
+
+if (state.sdk.initialized) {
+  setTimeout(() => {
+    State.update({ mintedNfts: state.sdk.getMintedNfts() });
+  }, 1000);
+}
+
+const handleMint = () => {
+  if (!state.image.cid) {
+    return;
+  }
+
+  if (!state.title) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a title for the NFT",
+    });
+
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else if (!state.description) {
+    State.update({
+      showAlert: true,
+      toastMessage: "Please enter a description for the NFT",
+    });
+    setTimeout(() => {
+      State.update({
+        showAlert: false,
+      });
+    }, 3000);
+  } else {
+    try {
+      state.sdk.mint(
+        state.recipient,
+        state.title,
+        state.description,
+        state.selectedChain,
+        state.image.cid,
+        state.isSoulBound
+      );
+    } catch (error) {
+      console.log(error);
+    }
+  }
+};
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+    Ethers.provider()
+      .getNetwork()
+      .then((data) => {
+        State.update({
+          selectedChain: data.chainId,
+        });
+      });
+  }
+}
+
+const handleSelectClick = () => {
+  State.update({
+    selectIsOpen: !state.selectIsOpen,
+  });
+};
+
+const handleOutsideClick = (e) => {
+  if (!!state.selectIsOpen) {
+    State.update({
+      selectIsOpen: false,
+    });
+  }
+};
+
+const onChangeTitle = (title) => {
+  State.update({
+    title,
+  });
+};
+
+const onChangeRecipient = (recipient) => {
+  State.update({
+    customRecipient: true,
+  });
+
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: recipient[0],
+    });
+  } else {
+    State.update({
+      recipient,
+    });
+  }
+};
+
+const handleChainChange = (chain_id) => {
+  try {
+    Ethers.send("wallet_switchEthereumChain", [
+      { chainId: `0x${Number(chain_id).toString(16)}` },
+    ]);
+
+    State.update({
+      selectedChain: chain_id,
+    });
+  } catch (err) {
+    console.log(err);
+  }
+};
+
+const onChangeDesc = (description) => {
+  State.update({
+    description,
+  });
+};
+
+const handleToggle = () => {
+  State.update({
+    isSoulBound: !state.isSoulBound,
+  });
+};
+
+const Heading = styled.p`
+  margin: 0;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const ImageUploadCard = styled.div`
+  display: flex;
+  cursor: pointer;
+  flex-flow: column nowrap;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  height: 100%;
+  max-width: 350px;
+  max-height: 350px;
+  border: 4px dashed rgba(0, 0, 0, 0.1);
+  border-radius: 1rem;
+  margin: 30px auto;
+  padding: 1.5rem;
+  text-align: center;
+  background: #fff;
+  transition: all 0.2s;
+
+  &:hover {
+    max-width: 400px;
+    max-height: 400px;
+    transform: scale(1.01);
+    transition: all 0.2s;
+  }
+`;
+
+const NFTCard = styled.div`
+  display: flex;
+  flex-flow: column nowrap;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  max-width: 350px;
+  min-height: 350px;
+  border: 4px solid rgba(0, 0, 0, 0.05);
+  border-radius: 1rem;
+  margin: 30px auto;
+  padding: 1rem;
+  text-align: center;
+  background: #fff;
+  transition: all 0.2s;
+
+  .body {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    flex-grow: 1;
+    padding: 1rem;
+    box-sizing: border-box;
+
+    p {
+      margin: 0;
+      padding: 0;
+    }
+
+    input {
+      font-weight: bold;
+      font-size: 1.5rem;
+    }
+
+    input,
+    textarea {
+      position: relative;
+      text-align: center;
+      text-overflow: ellipsis;
+      max-width: 300px;
+      background-color: transparent;
+      border: 0;
+      color: #000;
+    }
+  }
+
+  & > div {
+    position: relative;
+    width: 100%;
+
+    img {
+      width: 100%;
+      border-radius: 0.8rem;
+    }
+    .replace-btn {
+      position: absolute;
+      bottom: 0;
+      right: 0;
+
+      img {
+        display: none !important;
+      }
+    }
+  }
+
+  .mint-btn {
+    width: 100%;
+    height: 60px;
+    cursor: pointer;
+    border: 0;
+    border-radius: 10px;
+    background-color: #0fbf41;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 0.7);
+
+    &:disabled {
+      background-color: #66c480;
+      color: rgba(0, 0, 0, 0.3);
+      cursor: not-allowed;
+    }
+  }
+`;
+
+const Editable = styled.div`
+  position: relative;
+  width: 100%;
+
+  &.editable {
+    &:hover {
+      &::after {
+        opacity: 0.6;
+      }
+    }
+
+    &::after {
+      opacity: 0;
+      position: absolute;
+      content: "✏️";
+      width: 20px;
+      height: 20px;
+      top: 0;
+      bottom: 0;
+      right: 0;
+      margin: auto;
+      transform: rotate(90deg);
+    }
+  }
+`;
+
+const SendToInput = styled.div`
+  position: relative;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 10px;
+  margin-top: 2rem;
+  width: 110%;
+
+  input {
+    width: 100%;
+    color: #000;
+    &:placeholder {
+      color: #000;
+    }
+  }
+
+  label {
+    position: absolute;
+    top: -10px;
+    left: -10px;
+    background-color: #fff;
+    padding: 5px;
+    border-radius: 10px;
+    font-size: 0.8em;
+  }
+`;
+
+const Main = styled.div`
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  margin-top: 5px;
+  width: 100%;
+  min-height: 100vh;
+  padding: 1rem 1rem 0;
+  box-sizing: border-box;
+  .button {
+    padding: 0.75em 2em;
+    border-radius: 0.7em;
+    border: 1px solid #0d99ff;
+    transition: all 0.3s;
+    cursor: pointer;
+    color: #fff;
+    background: #0d99ff;
+    &:hover {
+      color: #0d99ff;
+      background: #fff;
+    }
+    @media screen and (max-width: 540px) {
+      padding: 0.5em 2em;
+    }
+  }
+`;
+
+const Text = styled.p`
+  font-size: 0.9rem;
+  color: #525c76;
+  line-height: 1rem;
+  margin: 3px;
+`;
+
+const Elipse = styled.div`
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: 4px solid rgba(0, 0, 0, 0.1);
+  background: #fff;
+  height: 100px;
+  width: 100px;
+  border-radius: 20px;
+`;
+
+const Card = styled.div`
+  padding: 1em;
+  border: 1px solid #e5e8eb;
+  gap: 2em;
+  margin: 10px auto;
+  border-radius: 0.7em;
+  & input {
+    display: block;
+    padding: 0.5em;
+    width: 100%;
+    border: 1px solid #e5e8eb;
+    border-radius: 10px;
+    outline: none;
+    background: #f4f5f6;
+    color: #525c76;
+    :focus {
+      box-shadow: none;
+      border: 1px solid #0d99ff;
+    }
+    &::placeholder {
+      color: palevioletred;
+    }
+  }
+  .soulbound {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+`;
+
+const ImageCard = styled.div`
+  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+  height: 100%;
+  max-height: 100%;
+  width: 90%;
+  max-width: 500px;
+  border-radius: 1rem;
+  & > img {
+    object-fit: cover;
+    width: 100%;
+    height: 100%;
+  }
+`;
+
+const Input = styled.input`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+  ::placeholder {
+    color: palevioletred;
+  }
+`;
+
+const TextArea = styled.textarea`
+  display: block;
+  padding: 0.5em;
+  width: 100%;
+  border: 1px solid #e5e8eb;
+  border-radius: 10px;
+  outline: none;
+  background: #f4f5f6;
+  color: #525c76;
+  :focus {
+    border: 1px solid #0d99ff;
+  }
+`;
+
+const SelectTag = styled.select`
+  height: fit-content;
+  width: 300px;
+`;
+
+const ChainIcon = styled.option`
+  display: flex;
+  height: 130px;
+  padding: 1rem auto;
+  & > img {
+    height: 100px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectReplicaContainer = styled.div`
+  position: relative;
+  display: inline-block;
+  z-index: 1;
+  user-select: none;
+
+  & .select-replica__select {
+    position: relative;
+  }
+
+  & .select-replica__selected {
+    cursor: pointer;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border: 4px solid rgba(0, 0, 0, 0.05);
+    gap: 10px;
+    border-radius: 10px;
+    background-color: #fff;
+    width: 350px;
+    padding: 0 15px 0 10px;
+    min-height: 70px;
+
+    & > img {
+      height: 100%;
+      width: 80px;
+      object-fit: contain;
+    }
+
+    & > span {
+      opacity: 0.6;
+    }
+  }
+
+  & .select-replica__options {
+    position: absolute;
+    opacity: 0;
+    top: 110%;
+    left: 0;
+    width: 100%;
+    left: 0;
+    right: 0;
+    margin: auto;
+    overflow-y: auto;
+    border-radius: 10px;
+    background-color: #fff;
+    max-height: 300px;
+    box-shadow: 0 10px 20px 10px rgba(0, 0, 0, 0.05);
+    pointer-events: none;
+    transform: translateY(100px);
+    transition: all 0.2s;
+  }
+
+  & .select-replica__options.open {
+    transition: all 0.2s;
+    transform: translateY(0);
+    opacity: 1;
+    pointer-events: all;
+  }
+
+  & .select-replica__option {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    background-color: #fff;
+    padding: 0;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+  }
+
+  & .select-replica__option.selected {
+    background-color: #f0f0f0;
+  }
+
+  & .select-replica__option img {
+    height: 80px;
+    width: 100px;
+    object-fit: contain;
+  }
+`;
+
+const SelectGroup = styled.div`
+  display: flex;
+  justify-content: center;
+  margin: 2rem auto;
+  align-items: center;
+`;
+
+const ToggleButton = styled.div`
+  /* The switch - the box around the slider */
+  .switch {
+    position: relative;
+    display: inline-block;
+    width: 60px;
+    height: 34px;
+  }
+
+  /* Hide default HTML checkbox */
+  .switch input {
+    opacity: 0;
+    width: 0;
+    height: 0;
+  }
+
+  /* The slider */
+  .slider {
+    position: absolute;
+    cursor: pointer;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: #ccc;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  .slider:before {
+    position: absolute;
+    content: "";
+    height: 26px;
+    width: 26px;
+    left: 4px;
+    bottom: 4px;
+    background-color: white;
+    -webkit-transition: 0.4s;
+    transition: 0.4s;
+  }
+
+  input:checked + .slider {
+    background-color: #2196f3;
+  }
+
+  input:focus + .slider {
+    box-shadow: 0 0 1px #2196f3;
+  }
+
+  input:checked + .slider:before {
+    -webkit-transform: translateX(26px);
+    -ms-transform: translateX(26px);
+    transform: translateX(26px);
+  }
+
+  /* Rounded sliders */
+  .slider.round {
+    border-radius: 34px;
+  }
+
+  .slider.round:before {
+    border-radius: 50%;
+  }
+`;
+
+const HeaderBox = styled.div`
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  .connect-wallet {
+    background: rgba(0, 0, 0, 1);
+    border-radius: 10px;
+    font-weight: bold;
+    color: #fff;
+    box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.1);
+    height: 60px;
+  }
+`;
+
+const HistoryBox = styled.div`
+  display: flex;
+  flex-direction: column;
+  max-width: 750px;
+  margin: 0 auto;
+`;
+
+const HistoryNFTBox = styled.div`
+  display: flex;
+  width: 100%;
+  max-width: 800px;
+  background-color: #fff;
+  border-radius: 10px;
+  margin-top: 20px;
+  box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.02);
+  box-sizing: border-box;
+  padding: 0.7rem;
+
+  img {
+    background-color: rgba(0, 0, 0, 0.05);
+    height: 100px;
+    border-radius: 0.5rem;
+  }
+
+  .details {
+    padding: 0 1rem;
+    box-sizing: border-box;
+    border-right: 1px solid rgba(0, 0, 0, 0.05);
+
+    h1 {
+      font-size: 1.3rem;
+    }
+
+    .description {
+      font-size: 0.8rem;
+      margin-bottom: 0;
+      padding: 0;
+      opacity: 0.8;
+    }
+
+    .author {
+      margin: 0;
+      padding: 0;
+      font-weight: bold;
+      font-size: 0.8rem;
+    }
+  }
+
+  .tx-details {
+    padding: 0 1rem;
+    box-sizing: border-box;
+
+    p {
+      margin: 0;
+      padding: 0;
+    }
+
+    .title {
+      font-weight: bold;
+      font-size: 0.8rem;
+    }
+
+    .info {
+      font-size: 0.7rem;
+    }
+  }
+`;
+
+if (!(state.sender || accountId)) {
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in or connect a wallet",
+  });
+} else {
+  State.update({
+    showAlert: false,
+    toastMessage: "",
+  });
+}
+
+if (!state.customRecipient) {
+  if (state.selectedChain == "0") {
+    State.update({
+      recipient: accountId,
+    });
+  } else {
+    State.update({
+      recipient: state.sender,
+    });
+  }
+}
+
+return (
+  <div
+    style={{
+      background: "#fafafa",
+      width: "100%",
+    }}
+  >
+    <div style={{ display: "none" }}>
+      <Widget
+        src="bos.genadrop.near/widget/GenaDrop.SDK"
+        props={{
+          onLoad: (sdk) => State.update({ sdk: sdk }),
+          onRefresh: (sdk) => State.update({ sdk: sdk }),
+          loaded: !!state.sdk,
+        }}
+      />
+    </div>
+    {!!state.sdk ? (
+      <div>
+        {state.showAlert && (
+          <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+        )}
+
+        <Main className="container-fluid">
+          <div className="flex-grow-1">
+            <HeaderBox>
+              <Heading
+                style={{
+                  "text-align": "left",
+                }}
+                className="fs-2 fw-bold"
+              >
+                NFT Minter
+              </Heading>
+              <Web3Connect
+                className="connect-wallet"
+                connectLabel="Connect wallet"
+                disconnectLabel="Disconnect"
+              />
+            </HeaderBox>
+
+            <div
+              style={{
+                "text-align": "center",
+              }}
+            >
+              <SelectGroup className="form-group">
+                <SelectReplicaContainer>
+                  <div
+                    className={`select-replica__select ${
+                      state.selectIsOpen ? "open" : ""
+                    }`}
+                    onClick={handleSelectClick}
+                  >
+                    <div className="select-replica__selected">
+                      {state.sdk.chains.filter(
+                        (chain) => chain.id === state.selectedChain.toString()
+                      ) ? (
+                        <img
+                          src={state.sdk.chains
+                            .filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            )
+                            .map((c) => c.url)}
+                          alt={state.sdk.chains
+                            .filter(
+                              (chain) =>
+                                chain.id === state.selectedChain.toString()
+                            )
+                            .map((c) => c.name)}
+                        />
+                      ) : (
+                        "Select an option"
+                      )}
+                      <span>▼</span>
+                    </div>
+                    <div
+                      className={`select-replica__options ${
+                        state.selectIsOpen ? "open" : ""
+                      }`}
+                    >
+                      {state.sdk.chains.map((chain) =>
+                        chain.id !== state.selectedChain.toString() ? (
+                          <div
+                            key={chain.id}
+                            className={`select-replica__option ${
+                              selectedOption === chain.name ? "selected" : ""
+                            }`}
+                            onClick={() => handleChainChange(chain.id)}
+                          >
+                            <img src={chain.url} alt={chain.name} />
+                          </div>
+                        ) : (
+                          ""
+                        )
+                      )}
+                    </div>
+                  </div>
+                </SelectReplicaContainer>
+                {state.sdk.lastMintlink && (
+                  <a href={`${state.sdk.lastMintLink}`} target="_blank">
+                    View Transaction
+                  </a>
+                )}
+              </SelectGroup>
+            </div>
+
+            {!state.image.cid ? (
+              <>
+                <ImageUploadCard className="flex-grow-1">
+                  <Elipse>
+                    <span
+                      style={{
+                        opacity: ".2",
+                        "font-weight": "bold",
+                      }}
+                    >
+                      NFT
+                    </span>
+                  </Elipse>
+                  <>
+                    <IpfsImageUpload
+                      image={state.image}
+                      className="btn text-decoration-none link-primary pe-auto"
+                    />
+                    <div>
+                      <Text>jpg, jpeg, png, webp, gif</Text>
+                      <Text>
+                        <strong>Max. 20MB</strong>
+                      </Text>
+                    </div>
+                  </>
+                </ImageUploadCard>
+
+                {state.mintedNfts.length > 0 ? (
+                  <>
+                    <HeaderBox
+                      style={{
+                        "margin-top": "4rem",
+                      }}
+                    >
+                      <Heading
+                        style={{
+                          "text-align": "left",
+                        }}
+                        className="fs-2 fw-bold"
+                      >
+                        History
+                      </Heading>
+                    </HeaderBox>
+                    <HistoryBox>
+                      {state.mintedNfts.map((nft) => (
+                        <HistoryNFTBox>
+                          {!!nft.image && <img src={nft.image} alt="NFT" />}
+                          <div className="details">
+                            <h1>{nft.title}</h1>
+                            <p className="description">{nft.description}</p>
+                            {!!nft.account && (
+                              <p className="author">{nft.account}</p>
+                            )}
+                          </div>
+                          <div className="tx-details">
+                            <p className="title">Sent to</p>
+                            <p className="info">{nft.recipient}</p>
+                            {!!nft.network && nft.network != "0" && (
+                              <a
+                                target="_blank"
+                                href={nft.link}
+                                className="title"
+                              >
+                                View transaction on{" "}
+                                {state.sdk.contractAddresses[nft.network][1]}
+                              </a>
+                            )}
+                          </div>
+                        </HistoryNFTBox>
+                      ))}
+                    </HistoryBox>
+                  </>
+                ) : (
+                  <></>
+                )}
+              </>
+            ) : (
+              <>
+                <NFTCard>
+                  <div>
+                    <img
+                      src={`https://ipfs.near.social/ipfs/` + state.image.cid}
+                      alt="Uploaded Image"
+                    />
+                    <div className="replace-btn">
+                      <IpfsImageUpload
+                        image={state.image}
+                        className="btn text-decoration-none link-primary pe-auto"
+                      />
+                    </div>
+                  </div>
+                  <div className="body">
+                    <Editable
+                      className={
+                        state.title == DEFAULT_NFT_TITLE ? "editable" : ""
+                      }
+                    >
+                      <Input
+                        type="text"
+                        className="input-title"
+                        value={state.title || ""}
+                        onChange={(e) => onChangeTitle(e.target.value)}
+                      />
+                    </Editable>
+                    <Editable
+                      className={
+                        state.description == DEFAULT_NFT_DESCRIPTION
+                          ? "editable"
+                          : ""
+                      }
+                    >
+                      <TextArea
+                        type="text"
+                        value={state.description || ""}
+                        onChange={(e) => onChangeDesc(e.target.value)}
+                      />
+                    </Editable>
+                    <SendToInput>
+                      <label>Send to</label>
+                      <Input
+                        type="text"
+                        placeholder={
+                          state.selectedChain == "0" ? accountId : state.sender
+                        }
+                        onChange={(e) => onChangeRecipient(e.target.value)}
+                      />
+                    </SendToInput>
+                  </div>
+
+                  <button
+                    type="button"
+                    disabled={
+                      !state.title ||
+                      !state.recipient ||
+                      !(state.sender || accountId)
+                    }
+                    className="mint-btn"
+                    onClick={handleMint}
+                  >
+                    Mint to{" "}
+                    {state.sdk.contractAddresses[state.selectedChain][1]}
+                  </button>
+                </NFTCard>
+              </>
+            )}
+          </div>
+        </Main>
+        <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+      </div>
+    ) : (
+      "Loading..."
+    )}
+  </div>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/MultiListing/Index.jsx b/build/BosGenaDrop/src/GenaDrop/MultiListing/Index.jsx
new file mode 100644
index 00000000..8bce83d2
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/MultiListing/Index.jsx
@@ -0,0 +1,651 @@
+// add nft transfers here
+// NEED TO FIX SCIENTIFIC NOTION ON PRICE //  ADD ERROR CHECKING for nft contract but preview is enough
+const image = props.image;
+const onChange = props.onChange;
+const amount = "10000000000000000000000"; // 0.01 NEAR // amount to list at, by default its for other marketplaces
+const accountId = context.accountId ?? props.accountId; // add check for context it
+const ownerId = "minorityprogrammers.near"; // attribution
+const chainState = props.chainState;
+const nft = props.nft ?? {
+  contractId: props.contractId,
+  tokenId: props.tokenId,
+}; // just in case need to pass in a NFT
+const NEAR_NOMINATION_EXP = 24;
+const newContractId = props.contractId
+  ? props?.contractId?.includes("genadrop")
+    ? "nft.genadrop.near"
+    : props.contractId
+  : "nft.genadrop.near";
+const contractId = newContractId; // default nft contract - genadrop-contract.nftgen.near
+const tokenId = props.tokenId ?? "1679119560198"; // maybe condtional check if props is eempty // default nft
+const fewfarmarket = "market.fewandfar.near";
+const tradeportmarket = "market.tradeport.near";
+
+const fnfMsg = JSON.stringify({
+  sale_conditions: {
+    near: amount,
+  },
+});
+// need to find custom market link to work with
+
+const nftMetadata = Near.view(contractId, "nft_metadata"); // get the contract name
+const tokenInfo = Near.view(contractId, "nft_token", {
+  token_id: tokenId,
+});
+
+initState({
+  contractId: contractId,
+  tokenId: tokenId,
+  amount: amount,
+  msg: msg,
+  fnfMsg: fnfMsg,
+  trpMsg: trpMsg,
+  mintbaseMarketId: null,
+  chainState: chainState,
+  marketLinks: [],
+  custom: false,
+  customMarketLink: defaultCustomMarket,
+  isOpen: false,
+  validMarketLink: true,
+  explorerText: "",
+  error: false,
+  loadingListing: false,
+  nftMetadata: nftMetadata,
+  tokenInfo: tokenInfo,
+  receiverId: default_receiver,
+  validReceiver: true,
+  transfer: false, // add checkbox for transfer that shows
+  url: image.url,
+  nft: image.nft ?? {}, // from santiago
+  showAlert: false,
+});
+function ownsNFT() {
+  const ownsNFT = context.accountId === state.tokenInfo.owner_id;
+  State.update({
+    ownsNFT: ownsNFT,
+  });
+}
+ownsNFT();
+
+const getSender = () => {
+  return !state.sender
+    ? ""
+    : state.sender.substring(0, 6) +
+        "..." +
+        state.sender.substring(state.sender.length - 4, state.sender.length);
+};
+
+if (state.sender === undefined) {
+  const accounts = Ethers.send("eth_requestAccounts", []);
+  if (accounts.length) {
+    State.update({ sender: accounts[0] });
+  }
+}
+
+const tradeportLink = `https://www.tradeport.xyz/near/collection/${
+  state.contractId.includes("genadrop")
+    ? "genadrop-contract.nftgen.near"
+    : state.contractId
+}?tab=items&tokenId=${state.tokenId}`;
+
+//Few and Far Link
+const fewfarlink = `https://fewfar.com/${
+  state.contractId.includes("genadrop")
+    ? "genadrop-single-nft-c40d654de"
+    : state.contractId
+}/${state.tokenId}`;
+
+const parasLink = `https://paras.id/token/${state.contractId}::${state.tokenId}`;
+
+const defaultCustomMarket = "apollo42.near";
+const mintbasemarket = "simple.market.mintbase1.near";
+const default_receiver = "minorityprogrammers.near"; // default reciver nft for transfers
+const trpMsg = JSON.stringify({
+  price: amount,
+  market_type: "sale",
+  ft_token_id: "near",
+});
+
+function fetchMintbaseURL() {
+  asyncFetch("https://graph.mintbase.xyz/mainnet", {
+    method: "POST",
+    headers: {
+      "mb-api-key": "omni-site",
+      "Content-Type": "application/json",
+      "x-hasura-role": "anonymous",
+    },
+    body: JSON.stringify({
+      query: `
+        query MyQuery {
+        nft_listings(where: {token_id: {_eq: "${tokenId}"}}) {
+      	metadata_id
+      }
+    }
+      `,
+    }),
+  }).then((data) => {
+    if (data.body.data.nft_listings?.length) {
+      State.update({
+        mintbaseMarketId: data.body.data.nft_listings[0].metadata_id,
+      });
+    }
+  });
+}
+
+fetchMintbaseURL();
+
+const mintBaseLink = `https://www.mintbase.xyz/meta/${state.mintbaseMarketId}`;
+
+const marketLinks = {
+  tradeport: {
+    link: tradeportLink,
+  },
+  fewandfar: {
+    link: fewfarlink,
+  },
+  mintbase: {
+    link: mintBaseLink,
+  },
+  paras: {
+    link: parasLink,
+  },
+};
+
+function updateTradeportLink() {
+  // Function body goes here
+  updatedLink =
+    "https://www.tradeport.xyz/near/collection/" +
+    state.contractId +
+    "/" +
+    state.tokenId;
+  State.update({
+    tradeportLink: updatedLink,
+  });
+}
+function cleanupAmount(amount) {
+  return amount.replace(/,/g, "").trim();
+}
+function trimLeadingZeroes(value) {
+  value = value.replace(/^0+/, "");
+  if (value === "") {
+    return "0";
+  }
+  return value;
+}
+function parseNearAmount(amt) {
+  if (!amt) {
+    return null;
+  }
+  amt = cleanupAmount(amt);
+  const split = amt.split(".");
+  const wholePart = split[0];
+  const fracPart = split[1] || "";
+  if (split.length > 2 || fracPart.length > NEAR_NOMINATION_EXP) {
+    throw new Error(`Cannot parse '${amt}' as NEAR amount`);
+  }
+  return trimLeadingZeroes(
+    wholePart + fracPart.padEnd(NEAR_NOMINATION_EXP, "0")
+  );
+}
+/*ON CHANGE FUNCTIONS - NEED TO FINISH NOT CONCATENATING*/
+const onChangeNearAmount = (amount) => {
+  amount = parseNearAmount(amount);
+  const msgConcat = JSON.stringify({
+    price: amount,
+    market_type: "sale",
+    ft_token_id: "near",
+  });
+  const fnfMsg = JSON.stringify({
+    sale_conditions: {
+      near: amount,
+    },
+  });
+  // console.log(bigIntNumber);
+  State.update({
+    amount,
+    msg: msgConcat,
+    fnfMsg: fnfMsg,
+    trpMsg: msgConcat,
+  });
+};
+
+const onChangeEVMAmount = (amount) => {
+  State.update({
+    amount,
+  });
+};
+
+const onChangeMsg = (msg) => {
+  // currently done in the amount
+  State.update({
+    msg: msg,
+  });
+};
+
+const onChangeReceiver = (receiverId) => {
+  const validReceiverLink = isNearAddress(receiverId[0]); // add error message or change button based on this
+  State.update({
+    receiverId: receiverId[0],
+    validReceiver: validReceiverLink,
+  });
+  console.log(`receiver: ${state.receiverId[0]}`);
+};
+
+const onChangeContract = (contractId) => {
+  const nftMetadata = Near.view(contractId, "nft_metadata"); // get the contract name
+  State.update({
+    contractId,
+    nftMetadata,
+  });
+  onChangeToken(state.tokenId);
+  ownsNFT();
+  updateTradeportLink();
+};
+
+const onChangeToken = (tokenId) => {
+  const tokenInfo = Near.view(state.contractId, "nft_token", {
+    token_id: tokenId,
+  });
+  State.update({
+    tokenId,
+    tokenInfo,
+  });
+  ownsNFT();
+  updateTradeportLink();
+};
+
+const onChangeCustomMarket = (customMarketLink) => {
+  const validMarketLink = isNearAddress(customMarketLink);
+  State.update({
+    customMarketLink,
+    validMarketLink,
+  });
+};
+/* HELPER FUNCTION */
+function isNearAddress(address) {
+  if (typeof address !== "string") {
+    return false;
+  }
+  if (!address.endsWith(".near")) {
+    return false;
+  }
+  const parts = address.split(".");
+  if (parts.length !== 2) {
+    return false;
+  }
+  if (parts[0].length < 2 || parts[0].length > 32) {
+    return false;
+  }
+  if (!/^[a-z0-9_-]+$/i.test(parts[0])) {
+    return false;
+  }
+  return true;
+}
+
+const currentChainProps = {
+  aurora: {
+    img: "https://s2.coinmarketcap.com/static/img/coins/200x200/14803.png",
+    id: "1313161554",
+    chain: "Aurora",
+    explorer: "https://aurorascan.dev/",
+    explorerTx: "https://aurorascan.dev/",
+    livePrice: "ethereum",
+    contract: "0xe93097f7C3bF7A0E0F1261c5bD88F86D878667B5",
+    subgraph:
+      "https://api.thegraph.com/subgraphs/name/prometheo/aurora-mainnet",
+  },
+  arbitrum: {
+    img: "https://assets.coingecko.com/coins/images/16547/large/photo_2023-03-29_21.47.00.jpeg?1680097630",
+    id: "42161",
+    contract: "0x27E52A81975F5Fb836e79007E3c478C6c0E6E9FB",
+    chain: "Arbitrum",
+    explorer: "https://arbiscan.io/",
+    explorerTx: "https://arbiscan.io/",
+    livePrice: "ethereum",
+    subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/arbitrum",
+  },
+  celo: {
+    img: "https://assets.coingecko.com/coins/images/11090/large/InjXBNx9_400x400.jpg?1674707499",
+    id: "42220",
+    livePrice: "celo",
+    contract: "0x5616BCcc278F7CE8B003f5a48f3754DDcfA4db5a",
+    explorer: "https://explorer.celo.org/address/",
+    explorerTx: "https://explorer.celo.org/",
+    chain: "Celo",
+    subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/celo-mainnet",
+  },
+  polygon: {
+    img: "https://altcoinsbox.com/wp-content/uploads/2023/03/matic-logo.webp",
+    id: "137",
+    chain: "Polygon",
+    livePrice: "matic-network",
+    contract: "0x57Eb0aaAf69E22D8adAe897535bF57c7958e3b1b",
+    explorer: "https://polygonscan.com/address/",
+    explorerTx: "https://polygonscan.com/",
+    subgraph:
+      "https://api.thegraph.com/subgraphs/name/prometheo/polygon-mainnet",
+  },
+};
+
+const listAbi = [
+  "function createMarketplaceItem(address nftContract, uint256 tokenId, uint256 price, string calldata category, address seller) public payable {}",
+  "function nftSale(uint256 price, uint256 tokenId, address seller, address nftContract) public payable {}",
+];
+
+const evmList = () => {
+  if (state.amount > 10000000) return;
+
+  State.update({
+    loadingListing: true,
+  });
+
+  const contract = new ethers.Contract(
+    currentChainProps[props.chainState].contract,
+    listAbi,
+    Ethers.provider().getSigner()
+  );
+  console.log("Formed thee", contract);
+  const nftContract = contractId.split(tokenId)[0];
+
+  contract
+    .createMarketplaceItem(
+      nftContract,
+      tokenId,
+      (Number(state.amount) * 1e18).toString(),
+      "General",
+      state.sender
+    )
+    .then((transactionHash) => transactionHash.wait())
+    .then((ricit) => {
+      State.update({
+        isOpen: true,
+        message: true,
+        error: false,
+        loadingListing: false,
+        explorerText: `${currentChainProps[props.chainState].explorerTx}/tx/${
+          ricit.transactionHash
+        }`,
+      });
+    })
+    .catch((err) => {
+      State.update({
+        isOpen: false,
+        loadingListing: false,
+        error: true,
+        text: err.reason,
+      });
+    });
+};
+
+const closeModal = () => State.update({ isOpen: false });
+
+const list = () => {
+  if (!accountId) {
+    console.log("Sign in to list");
+    return;
+  }
+  State.update({
+    loadingListing: true,
+  });
+
+  console.log(state.trpMsg);
+  // need to buffer serialize arguments, add helper functions with state arguments
+  const gas = 100000000000000; // 100 tGas
+  //   const deposit = 1; // exactly 1 yocto
+  const deposit = 10000000000000000000000; // 0.01 near
+  Near.call(
+    [
+      state.tradeport
+        ? {
+            contractName: tradeportmarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.tradeport
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: tradeportmarket,
+              msg: state.trpMsg,
+            },
+            gas: gas,
+            deposit: deposit,
+          }
+        : null,
+      state.fewfar
+        ? {
+            contractName: fewfarmarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.fewfar
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: fewfarmarket,
+              msg: state.fnfMsg,
+            },
+            gas: gas,
+            deposit: deposit,
+          }
+        : null,
+      state.mintbase
+        ? {
+            contractName: mintbasemarket,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.mintbase
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: mintbasemarket,
+              msg: state.msg, // need to change mesg to conform with mitnbase market // "{\"price\":\"3900000000000000000000000\",\"autotransfer\":true}"
+            },
+            gas: gas,
+            deposit: deposit, // may take this out
+          }
+        : null,
+      state.custom
+        ? {
+            contractName: state.customMarketLink,
+            methodName: "storage_deposit",
+            args: {
+              receiver_id: context.accountId,
+            },
+            gas,
+            deposit: deposit,
+          }
+        : null,
+      state.custom
+        ? {
+            contractName: state.contractId,
+            // need to wrap first with near_deposit
+            methodName: "nft_approve",
+            args: {
+              token_id: state.tokenId,
+              account_id: state.customMarketLink,
+              msg: state.msg, // need to add the variables and buffer seerailize
+            },
+            gas: gas,
+            deposit: deposit, // may take this out
+          }
+        : null,
+    ].filter((entry) => entry !== null)
+  );
+  State.update({
+    loadingListing: false,
+  });
+};
+const transfer = () => {
+  if (!accountId) {
+    return;
+  }
+  // need to buffer serialize arguments, add helper functions with state arguments
+  const gas = 100000000000000; // 100 tGas
+  //   const deposit = 1; // exactly 1 yocto
+  const deposit = 1; // 0.01 near // maybe less
+  Near.call([
+    {
+      contractName: state.contractId,
+      methodName: "nft_transfer",
+      args: {
+        receiver_id: state.receiverId,
+        token_id: state.tokenId,
+      },
+      gas: gas ?? 200000000000000,
+      deposit: deposit ?? 10000000000000000000000,
+    },
+  ]);
+};
+const selectFewFar = () => {
+  State.update({
+    fewfar: !state.fewfar,
+  });
+};
+const selectTradeport = () => {
+  State.update({
+    tradeport: !state.tradeport,
+  });
+};
+const selectMintbase = () => {
+  State.update({
+    mintbase: !state.mintbase,
+  });
+};
+if (!accountId) {
+  State.update({
+    showAlert: true,
+    toastMessage: "Please Sign in to Near wallet to list",
+  });
+}
+const selectCustom = () => {
+  State.update({
+    custom: !state.custom,
+  });
+}; // need better helper function for checking whether valid NEAR address
+
+const Heading = styled.h1`
+  margin: 3px auto 3px auto;
+  font-size: 1em;
+  color: #0f1d40;
+  line-height: 2.1rem;
+  width: 60%;
+  text-align: center;
+  font-family: "SF Pro Display", sans-serif;
+`;
+
+const Popup = styled.div`
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.5);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  backdrop-filter: blur(5px); /* Apply background blur */
+`;
+
+return (
+  <div className="container">
+    {state.showAlert && (
+      <Widget src="bos.genadrop.near/widget/GenaDrop.Alert" props={state} />
+    )}
+    <Heading className="text-center fs-2 fw-bold my-4">
+      {" "}
+      🛍️ List NFT {props.chainState === "near" && "to Multiple Marketplaces"}
+    </Heading>
+    {!props.tokenId && !props.contractId && (
+      <div>
+        <div
+          className="p-2 rounded mt-3"
+          style={{
+            background: "#fdfdfd",
+            border: "solid 1px #dee2e6",
+            borderBottomLeftRadius: ".375rem",
+            borderBottomRightRadius: ".375rem",
+            minHeight: "9em",
+          }}
+        >
+          <div>
+            <div className="mt-2">
+              <Widget
+                src="bos.genadrop.near/widget/GenaDrop.NFTSelector"
+                props={{
+                  onChange: ({ contractId, tokenId }) => {
+                    State.update({
+                      contractId: contractId,
+                      tokenId: tokenId,
+                    });
+                    onChangeToken(tokenId);
+                    onChangeContract(contractId);
+                  },
+                }}
+              />
+            </div>
+          </div>
+        </div>
+      </div>
+    )}
+    {state.tokenId !== "1679119560198" && (
+      <>
+        <Widget
+          src="bos.genadrop.near/widget/GenaDrop.MultiListing.Input"
+          props={{
+            state,
+            onChangeContract,
+            onChangeToken,
+            selectTradeport,
+            selectFewFar,
+            loadingListing: state.loadingListing,
+            selectCustom,
+            selectMintbase,
+            marketLinks,
+            chainState,
+            onChangeCustomMarket,
+            onChangeNearAmount,
+            onChangeEVMAmount,
+            list,
+            evmList,
+            onChangeReceiver,
+          }}
+        />
+      </>
+    )}
+    {state.isOpen && (
+      <Popup>
+        <Widget
+          src="bos.genadrop.near/widget/GenaDrop.SuccessModal"
+          props={{ closeModal, externalLink: state.explorerText }}
+        />
+      </Popup>
+    )}
+    <Widget src="bos.genadrop.near/widget/GenaDrop.Footer" />
+  </div>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/MultiListing/Input.jsx b/build/BosGenaDrop/src/GenaDrop/MultiListing/Input.jsx
new file mode 100644
index 00000000..0bd72195
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/MultiListing/Input.jsx
@@ -0,0 +1,658 @@
+const marketPlaceImage = {
+    mintbase:
+      "data:image/png;base64,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",
+    tradeport:
+      "data:image/png;base64,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",
+    fewandfar: "https://production.cdn.fewfar.com/static/images/logo.svg",
+  };
+  
+  const currentChainProps = {
+    near: {
+      img: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU",
+      livePrice: "near",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/near-mainnet",
+      chain: "near",
+      id: "1112",
+      explorer: "https://explorer.near.org/?query=",
+      logoUrl:
+        "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU",
+    },
+    aurora: {
+      img: "https://s2.coinmarketcap.com/static/img/coins/200x200/14803.png",
+      id: "1313161554",
+      chain: "Aurora",
+      explorer: "https://aurorascan.dev/",
+      livePrice: "ethereum",
+      contract: "0xe93097f7C3bF7A0E0F1261c5bD88F86D878667B5",
+      subgraph:
+        "https://api.thegraph.com/subgraphs/name/prometheo/aurora-mainnet",
+    },
+    arbitrum: {
+      img: "https://assets.coingecko.com/coins/images/16547/large/photo_2023-03-29_21.47.00.jpeg?1680097630",
+      id: "42161",
+      contract: "0x27E52A81975F5Fb836e79007E3c478C6c0E6E9FB",
+      chain: "Arbitrum",
+      explorer: "https://arbiscan.io/",
+  
+      livePrice: "ethereum",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/arbitrum",
+    },
+    celo: {
+      img: "https://assets.coingecko.com/coins/images/11090/large/InjXBNx9_400x400.jpg?1674707499",
+      id: "42220",
+      livePrice: "celo",
+      contract: "0x5616BCcc278F7CE8B003f5a48f3754DDcfA4db5a",
+      explorer: "https://explorer.celo.org/address/",
+      chain: "Celo",
+      subgraph: "https://api.thegraph.com/subgraphs/name/prometheo/celo-mainnet",
+    },
+    polygon: {
+      img: "https://altcoinsbox.com/wp-content/uploads/2023/03/matic-logo.webp",
+      id: "137",
+      chain: "Polygon",
+      livePrice: "matic-network",
+      contract: "0x57Eb0aaAf69E22D8adAe897535bF57c7958e3b1b",
+      explorer: "https://polygonscan.com/address/",
+      subgraph:
+        "https://api.thegraph.com/subgraphs/name/prometheo/polygon-mainnet",
+    },
+    aptos: {
+      img: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQqBinSwbRdx76qY4A3qvVkM9g_mKoGCBDT0sqTT02TgRvKquV2Vlc8fSRmLyuhBS3-CaA&usqp=CAU",
+    },
+    sui: {
+      img: "https://blog.sui.io/content/images/2023/04/Sui_Droplet_Logo_Blue-3.png",
+    },
+  };
+  
+  const chains = ["polygon", "aurora", "arbitrum", "celo"];
+  
+  const chainState = chains.find((data) => data.includes(props.state.chainState));
+  
+  if (chainState) {
+    let response = fetch(currentChainProps[props.state.chainState]?.subgraph, {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json",
+      },
+      body: JSON.stringify({
+        query: `
+              query MyQuery {
+               nfts(where: {tokenID: "${props.state.tokenId}"}) {
+                  category
+                  chain
+                  createdAtTimestamp
+                  id
+                  isSold
+                  isListed
+                  price
+                  tokenID
+                  owner {
+                      id
+                  }
+                  tokenIPFSPath
+                  transactions {
+                    price
+                  }
+                  }
+              }
+          `,
+      }),
+    });
+    const collectionData = response.body.data.nfts;
+    if (collectionData) {
+      const nftBody = collectionData.map((data) => {
+        const fetchIPFSData = fetch(
+          data.tokenIPFSPath.replace("ipfs://", "https://ipfs.io/ipfs/")
+        );
+  
+        if (fetchIPFSData.ok) {
+          const nft = fetchIPFSData.body;
+          let nftObject = {};
+          nftObject.contract_id = data.id;
+          nftObject.sold = data.isSold;
+          nftObject.isListed = data.isListed;
+          nftObject.owner = data.owner.id;
+          nftObject.price = data.price;
+          nftObject.token_id = data.tokenID;
+          nftObject.name = nft?.name;
+          nftObject.description = nft?.description;
+          nftObject.attributes = nft?.properties;
+          nftObject.image = nft?.image.replace(
+            "ipfs://",
+            "https://ipfs.io/ipfs/"
+          );
+          return nftObject;
+        }
+      });
+      State.update({
+        title: nftBody[0].name,
+        imageUrl: nftBody[0].image,
+        owner: nftBody[0]?.owner,
+        description: nftBody[0]?.description,
+        price: nftBody[0].price,
+      });
+    }
+  }
+  
+  const Label = styled.p`
+    font-size: 1.1rem;
+    color: #04111D;
+    font-weight: 600;
+    font-family: "SF Pro Display",sans-serif;
+    line-height: 1.02;
+    white-space: nowrap;
+    margin: unset;
+  `;
+  
+  const GrayLabel = styled.p`
+    color: #6C757D;
+    font-size: 14px;
+  `;
+  const SecondaryText = styled.h3`
+    font-size: 1.1rem;
+    color:#0f1d40;
+    font-weight: 600;
+    font-family: "SF Pro Display",sans-serif;
+    line-height: 1.02;
+    white-space: nowrap;
+    padding-bottom: 3px;
+  `;
+  const Card = styled.div`
+    overflow: hidden;
+  `;
+  const BorderedShadowedCard = styled.div`
+    display: flex;
+     flex-flow: column nowrap;
+     -ms-flex-flow:column nowrap;
+     background-color: "#f0f0f0";
+     margin: 0 auto;
+     border: 1.41429px solid rgba(28,27,28,.1);
+     padding: 1rem;
+     width: 100%;
+     height: fit-content;
+     background-color:#fff;
+     & img{
+       border-radius: inherit;
+     }
+  `;
+  const Main = styled.div`
+      display: grid;
+    gap: 3rem;
+    align-content:center;
+    grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
+    justify-content: center;
+    // background: linear-gradient(180deg,#e4f1fb,hsla(0,0%,85.1%,0));
+    margin-top: 20px;
+    width:100%;
+    padding: 1rem;
+  `;
+  
+  const ImgCard = styled.div`
+    height:fit-content;
+    display:flex;
+    align-items:center;
+    justify-content:center;
+    max-height:500px;
+    width:100%;
+    max-width: 500px;
+    border-radius: inherit;
+    overflow:hidden;
+    aspect-ratio: 1/1;
+    margin: 0 auto;
+    &>img{
+    object-fit: cover;
+    width: 100%;
+    }
+    object-fit:cover;
+  `;
+  
+  const TopSellCard = styled.div`
+    background-color: #E2E4E8;
+    padding: 1rem;
+    width:100%;
+  `;
+  
+  const Text = styled.p`
+    font-size: 14px;
+    margin: unset;
+  `;
+  
+  const GrayCard = styled.div`
+    background-color: #E2E4E8;
+    cusor: not-allowed;
+  `;
+  
+  const ChainCard = styled.div`
+    display: flex;
+    background-color: #EFF3F9;
+    align-items:center;
+    gap: 1rem;
+    cursor: pointer;
+    max-width: 320px;
+    width: 80%;
+    margin: 1rem auto;
+    height: 60px;
+    & img{
+      width: 20px;
+      height: 20px;
+      object-fit: contain;
+      margin-right: 5px;
+    }
+  `;
+  
+  const ChainCardMarket = styled.div`
+    display: flex;
+    background-color: #EFF3F9;
+    align-items:center;
+    gap: 0.5rem;
+    cursor: pointer;
+    width: 140px;
+    margin: 1rem;
+    height: 60px;
+    & img{
+      width: 20px;
+      height: 20px;
+      object-fit: contain;
+      margin-right: 5px;
+    }
+  `;
+  
+  const PriceInput = styled.div`
+    display: flex;
+    padding: .2rem;
+    &>input{
+      border:none;
+      outline: none;
+      background: none;
+      width:70px;
+      padding: 0 .2rem;
+      &:focus, &:active{
+        border:none;
+        box-shadow: none;
+      }
+    }
+    &>img{
+      width: 20px;
+      object-fit: contain;
+      margin: 0 .5rem;
+    }
+  `;
+  
+  const Markets = styled.div`
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      justify-content: center;
+      flex-wrap: wrap;
+  `;
+  
+  const MarketOption = styled.div`
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  `;
+  
+  const BlueSub = styled.div`
+   color: #0d99ff;
+   font-size: .8rem;
+  `;
+  
+  const loadingAnimation = styled.keyframes`
+    0% { content: "Loading"; }
+    25% { content: "Loading."; }
+    50% { content: "Loading.."; }
+    75% { content: "Loading..."; }
+  `;
+  
+  const ListButton = styled.button`
+    padding: 10px 15px;
+    font-size: 14px;
+    margin-top: 20px;
+    background-color: #007bff;
+    color: #fff;
+    width:  120px;
+    border-radius: 16px;
+    border: none;
+    cursor: pointer;
+    transition: background-color 0.3s ease;
+  
+    &:hover {
+      background-color: #0056b3;
+    }
+    &.loading {
+      background: #0056b5;
+      cursor: not-allowed;
+    }
+    &.loading::before {
+      content: "Loading";
+      animation: ${loadingAnimation} 1s infinite;
+      display: inline-block;
+    }
+  `;
+  
+  const ListedMarkets = styled.ul`
+     list-style-type: none;
+     display: flex;
+     flex-direction: column;
+     gap: 10px;
+     li {
+      background: #EFF3F9;
+      padding: 7px 10px;
+      border-radius: 12px;
+      margin-right: 20px;
+     }
+    img {
+      width: 20px;
+      height: 20px;
+      margin-right: 4px;
+    }
+  `;
+  
+  State.init({
+    amount: 0,
+  });
+  
+  const getUsdValue = (price) => {
+    const res = fetch(
+      `https://api.coingecko.com/api/v3/simple/price?ids=${
+        currentChainProps[props.state.chainState].livePrice
+      }&vs_currencies=usd`
+    );
+    if (res.ok) {
+      const multiplyBy = Object.values(res?.body)[0]?.usd;
+      const value = multiplyBy * price.toFixed(2);
+      return value.toFixed(4) !== "NaN" ? `$${value.toFixed(2)}` : 0;
+    }
+  };
+  
+  const keywordsToCheck = ["tradeport", "mintbase", "fewandfar", "paras"];
+  
+  const matchedKeyWords = (inputString) => {
+    return keywordsToCheck.find((keyword) => inputString.includes(keyword));
+  };
+  
+  const getSender = () => {
+    return !state.sender
+      ? ""
+      : state.sender.substring(0, 6) +
+          "..." +
+          state.sender.substring(state.sender.length - 4, state.sender.length);
+  };
+  
+  if (state.sender === undefined) {
+    const accounts = Ethers.send("eth_requestAccounts", []);
+    if (accounts.length) {
+      State.update({ sender: accounts[0] });
+    }
+  }
+  
+  return (
+    <>
+      <div className="container-fluid">
+        <Main>
+          <BorderedShadowedCard className="shadow-sm rounded-4">
+            <div>
+              <SecondaryText>
+                {state.title
+                  ? state.title
+                  : props.state.tokenInfo.metadata.title || "NFT Name"}
+              </SecondaryText>
+            </div>
+            <ImgCard className="shadow-sm">
+              {state.imageUrl ? (
+                <img src={state.imageUrl} alt="nft_image" />
+              ) : (
+                <Widget
+                  src="mob.near/widget/NftImage"
+                  props={{
+                    nft: {
+                      tokenId: props.state.tokenId,
+                      contractId: props.state.contractId,
+                    },
+                    className: "col-lg-12",
+                  }}
+                />
+              )}
+            </ImgCard>
+            <div className="d-flex justify-content-between mt-3">
+              <span>
+                <BlueSub>Contract ID</BlueSub>
+                <SecondaryText>
+                  {props.state.contractId.length > 6
+                    ? `${props.state.contractId?.slice(
+                        0,
+                        6
+                      )}...${props.state.contractId?.slice(
+                        props.state.contractId.length - 4
+                      )}`
+                    : props.state.contractId || "Sample Contract"}
+                </SecondaryText>
+              </span>
+              <span>
+                <BlueSub>Collection Name</BlueSub>
+                <SecondaryText className="font-weight-bold">
+                  {props.state.nftMetadata.name || "- - - - - -"}
+                </SecondaryText>
+              </span>
+            </div>
+            <div className="card rounded-4 shadow-sm p-3 my-3">
+              <SecondaryText>Description</SecondaryText>
+              <p>
+                {props.state.tokenInfo.metadata.description ?? state.description}
+              </p>
+            </div>
+            <p>
+              <a href={props.state.tokenInfo.media} target="_blank">
+                {props.state.tokenInfo.media}
+              </a>
+            </p>
+            <div className="col-lg-12">
+              {Object.keys(props.state.tokenInfo.approved_account_ids || {})
+                .length > 0 && <h3> Listed Markets</h3>}
+              <div>
+                <ListedMarkets>
+                  {typeof props.state.tokenInfo.approved_account_ids ===
+                    "object" &&
+                    Object.keys(props.state.tokenInfo.approved_account_ids).map(
+                      (key) => (
+                        <li>
+                          <img
+                            src={marketPlaceImage[matchedKeyWords(key)]}
+                            alt=""
+                          />
+                          <a
+                            href={props.marketLinks[matchedKeyWords(key)].link}
+                            target="_blank"
+                            rel="noopener noreferrer"
+                          >
+                            View on {matchedKeyWords(key)}
+                          </a>
+                        </li>
+                      )
+                    )}
+                </ListedMarkets>
+              </div>
+            </div>
+          </BorderedShadowedCard>
+          <div className="">
+            <Card className="card rounded-4 shadow-sm border">
+              <TopSellCard className="d-flex align-items-center">
+                <Label>List Method</Label>
+              </TopSellCard>
+              <div className="p-3">
+                <GrayLabel>
+                  Choose how you want to list you NFT for sale
+                </GrayLabel>
+  
+                <div className="d-flex justify-content-between">
+                  <div
+                    className="card rounded-4 shadow-sm p-3"
+                    role="button"
+                    style={{ borderColor: "#0D99FF" }}
+                  >
+                    <Label className="text-center">SET PRICE</Label>
+                    <Text>Sell the NFT at a fixed price</Text>
+                  </div>
+                </div>
+              </div>
+            </Card>
+            <div className="">
+              <input
+                type="hidden"
+                placeholder={props.state.contractId}
+                onChange={(e) => props.onChangeContract(e.target.value)}
+              />
+            </div>
+            <div className="">
+              <input
+                type="hidden"
+                placeholder={props.state.tokenId}
+                onChange={(e) => props.onChangeToken(e.target.value)}
+              />
+            </div>
+            <div className="rounded-4 mt-3 border shadow-sm">
+              <div className="p-3">
+                <div className="d-flex align-items-center justify-content-between">
+                  <Label>List Price</Label>
+                  <div className="d-flex align-items-center gap-3">
+                    <span>{getUsdValue(props.state.amount / 1e24 || 0)}</span>
+                    <PriceInput className="border rounded">
+                      <img
+                        src={
+                          currentChainProps[props.state.chainState || "near"].img
+                        }
+                      />
+                      <input
+                        type="number"
+                        placeholder={props.state.amount / 1e24}
+                        onChange={(e) => {
+                          props.chainState && props.chainState !== "near"
+                            ? props.onChangeEVMAmount(e.target.value)
+                            : props.onChangeAmount(e.target.value);
+                        }}
+                      />
+                    </PriceInput>
+                  </div>
+                </div>
+              </div>
+              {!state.title && (
+                <>
+                  <hr className="m-auto" />
+                  <GrayLabel className="mt-3 mx-3 mb-0">
+                    Select any of the NEAR marketplace where you want your NFTs to
+                    be listed on
+                  </GrayLabel>
+                  <div className="p-3">
+                    <MarketOption>
+                      <Markets>
+                        <ChainCardMarket
+                          className={`${
+                            props.state.mintbase ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectMintbase}
+                          onChange={props.selectMintbase}
+                        >
+                          <img src={marketPlaceImage.mintbase} />
+                          Mintbase
+                        </ChainCardMarket>
+                        <ChainCardMarket
+                          className={`${
+                            props.state.fewfar ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectFewFar}
+                          onChange={props.selectFewFar}
+                        >
+                          <img src={marketPlaceImage.fewandfar} />
+                          Few & Far
+                        </ChainCardMarket>
+  
+                        <ChainCardMarket
+                          className={`${
+                            props.state.tradeport ? "border border-primary" : ""
+                          } rounded-3 p-2`}
+                          onClick={props.selectTradeport}
+                          onChange={props.selectTradeport}
+                        >
+                          <label
+                            className="form-check-label"
+                            htmlFor="myCheckbox"
+                          >
+                            <img src={marketPlaceImage.tradeport} />
+                            Tradeport
+                          </label>
+                        </ChainCardMarket>
+                      </Markets>
+                    </MarketOption>
+                    <div className="">
+                      <ChainCard
+                        onClick={props.selectCustom}
+                        className={`form-check rounded-4 p-3 ${
+                          props.state.custom ? "border border-primary" : ""
+                        }`}
+                      >
+                        <label className="form-check-label" htmlFor="myCheckbox">
+                          Custom Marketplace
+                        </label>
+                      </ChainCard>
+                      {props.state.custom && (
+                        <div className="">
+                          Custom Marketplace
+                          <input
+                            type="text"
+                            placeholder={props.state.customMarketLink}
+                            onChange={(e) =>
+                              props.onChangeCustomMarket(e.target.value)
+                            }
+                          />
+                        </div>
+                      )}
+                    </div>
+                    <GrayLabel>
+                      * You will pay some gas in Ⓝ to deposit NEAR to marketplace
+                      address then list your NFT
+                    </GrayLabel>
+                  </div>
+                  {props.state.custom && !props.state.validMarketLink && (
+                    <div className="alert alert-danger">
+                      <i className="bi bi-x"></i> Not a Valid NEAR Contract for
+                      your custom Marketplace
+                    </div>
+                  )}
+                </>
+              )}
+            </div>
+            <div className="d-flex flex-column align-items-center text-center">
+              {props.state.ownsNFT || state.owner === state.sender ? (
+                <ListButton
+                  type="button"
+                  className="btn btn-primary mt-3"
+                  disabled={props.loadingListing}
+                  className={props.loadingListing ? "loading" : ""}
+                  onClick={
+                    props.chainState && props.chainState !== "near"
+                      ? props.evmList
+                      : props.list
+                  }
+                >
+                  {!props.loadingListing && "List"}
+                </ListButton>
+              ) : (
+                <button type="button" className="btn btn-secondary mt-3">
+                  You Can Only List An NFT You Own
+                </button>
+              )}
+            </div>
+            {props.state.error && (
+              <div className="bg-danger p-2 mt-4 rounded">
+                <p className="text-center text-white pt-2">
+                  Something went wrong when Listing this NFT
+                </p>
+              </div>
+            )}
+          </div>
+        </Main>
+      </div>
+    </>
+  );
+  
\ No newline at end of file
diff --git a/build/BosGenaDrop/src/GenaDrop/NearLogo.jsx b/build/BosGenaDrop/src/GenaDrop/NearLogo.jsx
new file mode 100644
index 00000000..f93cc37c
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/NearLogo.jsx
@@ -0,0 +1,9 @@
+return (
+  <div>
+    <img
+      style={{ width: props.width || "inherit" }}
+      src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrJuxjGxj4QmyreE6ix4ygqm5pK9Nn_rdc8Ndw6lmJcd0SSnm2zBIc2xJ_My1V0WmK2zg&usqp=CAU"
+      alt=""
+    />
+  </div>
+);
diff --git a/build/BosGenaDrop/src/GenaDrop/SDK.jsx b/build/BosGenaDrop/src/GenaDrop/SDK.jsx
new file mode 100644
index 00000000..6a06f9a1
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/SDK.jsx
@@ -0,0 +1,293 @@
+let { onLoad, onRefresh, loaded } = props;
+
+const OWNER_ID = "minorityprogrammers.near"; // attribution
+
+const AURORA_CONTRACT = "0xe53bC42B6b25a1d548B73636777a0599Fd27fE5c";
+const AURORA_SOUL_CONTRACT = "0xe1D36964Eb49E38BB3f7410401BC95F0E9f1F6D3";
+const POLYGON_CONTRACT = "0x436AEceaEeC57b38a17Ebe71154832fB0fAFF878";
+const POLYGON_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const CELO_CONTRACT = "0xC291846A587cf00a7CC4AF0bc4EEdbC9c3340C36";
+const CELO_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const AVAX_CONTRACT = "0x43dBdfcAADD0Ea7aD037e8d35FDD7c353B5B435b";
+const AVAX_SOUL_CONTRACT = "0xd91cC6DE129D13F4384FB0bC07a1a99D4F858e72";
+const ARBITRUM_CONTRACT = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const ARBITRUM_SOUL_CONTRACT = "0x959a2945185Ec975561Ac0d0b23F03Ed1b267925";
+const NEAR_CONTRACT = "nft.genadrop.near";
+const MINT_SINGLE = [
+  "function mint(address to, uint256 id, uint256 amount, string memory uri, bytes memory data) public {}",
+  "function safeMint(address to, string memory uri) public {}",
+];
+
+const CONTRACT_ADDRESSES = {
+  137: [
+    POLYGON_CONTRACT,
+    "Polygon",
+    "https://polygonscan.com/tx/",
+    POLYGON_SOUL_CONTRACT,
+  ],
+  1313161554: [
+    AURORA_CONTRACT,
+    "Aurora",
+    "https://explorer.aurora.dev/tx/",
+    AURORA_SOUL_CONTRACT,
+  ],
+  42220: [
+    CELO_CONTRACT,
+    "Celo",
+    "https://explorer.celo.org/mainnet/tx/",
+    CELO_SOUL_CONTRACT,
+  ],
+  43114: [
+    AVAX_CONTRACT,
+    "Avalanche",
+    "https://snowtrace.io/tx/",
+    AVAX_SOUL_CONTRACT,
+  ],
+  42161: [ARBITRUM_CONTRACT, "Arbitrum", "https://arbiscan.io/tx/"],
+  0: [NEAR_CONTRACT, "Near"],
+};
+
+const CHAINS = [
+  {
+    id: "137",
+    name: "Polygon",
+    url: "https://ipfs.near.social/ipfs/bafkreie5h5oq6suoingcwuzj32m3apv56rl56wpwpaxmevlk5vndlypxze",
+  },
+  {
+    id: "1313161554",
+    name: "Aurora",
+    url: "https://ipfs.near.social/ipfs/bafkreiajqik4gjbmkh7z2gylpjzrsuht7simjecpxuoqn6icqfbioswzuy",
+  },
+  {
+    id: "42220",
+    name: "Celo",
+    url: "https://ipfs.near.social/ipfs/bafkreifu6ufsdf2ivrs5febt7l25wdys6odzfelgjauzod7owrfug56cxe",
+  },
+  {
+    id: "43114",
+    name: "Avax",
+    url: "https://ipfs.near.social/ipfs/bafkreifhu5fytsjcmjluarfnu6kcdhaqz4rgdrbbzf6dlsmggqb7oi3w4e",
+  },
+  {
+    id: "42161",
+    name: "Arbitrum",
+    url: "https://ipfs.near.social/ipfs/bafkreiffax4lnya337rz5ph75faondeqmpy6xj37yprwvxbru4qc5emsiq",
+  },
+  {
+    id: "0",
+    name: "Near",
+    url: "https://ipfs.near.social/ipfs/bafkreigv55ubnx3tfhbf56toihekuxvgzfqn5c3ndbfjcg3e4uvaeuy5cm",
+  },
+];
+
+const NEAR_SOCIAL_IPFS_URL = "https://ipfs.near.social";
+const NEAR_SOCIAL_ADD_ENDPOINT = `${NEAR_SOCIAL_IPFS_URL}/add`;
+const GENADROP_NEAR_CONTRACT = "nft.genadrop.near";
+const NEAR_NETWORK_CHAIN_ID = "0";
+const MINTED_NFTS_STORAGE_KEY = "GenaDropSDK.mintedNfts";
+
+let accountId = context.accountId;
+
+let GenaDropSDK = {
+  initialized: false,
+  network: null,
+  isSoulBound: false,
+  lastMintLink: "",
+  chains: CHAINS,
+  contractAddresses: CONTRACT_ADDRESSES,
+  mintedNfts: [],
+  init: () => {
+    Storage.get(MINTED_NFTS_STORAGE_KEY);
+    GenaDropSDK.initialized = true;
+    GenaDropSDK.refresh();
+  },
+  mint: (
+    recipient,
+    title,
+    description,
+    network,
+    imageCid,
+    isSoulBound,
+    props
+  ) => {
+    if (NEAR_NETWORK_CHAIN_ID == network) {
+      GenaDropSDK.mintOnNear(recipient, title, description, imageCid, props);
+    } else {
+      GenaDropSDK.defaultMint(
+        recipient,
+        title,
+        description,
+        network,
+        imageCid,
+        isSoulBound,
+        props
+      );
+    }
+  },
+  defaultMint: (
+    recipient,
+    title,
+    description,
+    network,
+    imageCid,
+    isSoulBound,
+    props
+  ) => {
+    const CA = isSoulBound
+      ? GenaDropSDK.contractAddresses[network][3]
+      : GenaDropSDK.contractAddresses[network][0];
+
+    console.log("CONTRACT ADD", CA);
+
+    const contract = new ethers.Contract(
+      CA,
+      MINT_SINGLE,
+      Ethers.provider().getSigner()
+    );
+
+    GenaDropSDK.uploadToIPFS(title, description, imageCid, props).then(
+      (res) => {
+        const cid = res.body.cid;
+        const Id = Math.floor(Math.random() * (9999999 - 100000 + 1) + 100000);
+
+        console.log(`ipfs://${cid}`);
+
+        const recipient =
+          recipient || Ethers.send("eth_requestAccounts", [])[0];
+
+        isSoulBound
+          ? contract
+              .safeMint(recipient, `ipfs://${cid}`)
+              .then((transactionHash) => transactionHash.wait())
+              .then((ricit) => {
+                GenaDropSDK.lastMintLink = `${
+                  GenaDropSDK.contractAddresses[network][2] +
+                  ricit.transactionHash
+                }`;
+
+                GenaDropSDK.logNft({
+                  account: accountId,
+                  recipient: recipient,
+                  title: title,
+                  description: description,
+                  image: GenaDropSDK.getIpfsURL(imageCid),
+                  tx: ricit.transactionHash,
+                  link:
+                    GenaDropSDK.contractAddresses[network][2] +
+                    ricit.transactionHash,
+                  network: network,
+                });
+
+                GenaDropSDK.refresh();
+              })
+          : contract
+              .mint(recipient, Id, 1, `ipfs://${cid}`, "0x")
+              .then((transactionHash) => transactionHash.wait())
+              .then((ricit) => {
+                GenaDropSDK.lastMintLink = `${
+                  GenaDropSDK.contractAddresses[network][2] +
+                  ricit.transactionHash
+                }`;
+
+                GenaDropSDK.logNft({
+                  account: accountId,
+                  recipient: recipient,
+                  title: title,
+                  description: description,
+                  image: GenaDropSDK.getIpfsURL(imageCid),
+                  tx: ricit.transactionHash,
+                  link:
+                    GenaDropSDK.contractAddresses[network][2] +
+                    ricit.transactionHash,
+                  network: network,
+                });
+
+                GenaDropSDK.refresh();
+              });
+      }
+    );
+  },
+  mintOnNear: (recipient, title, description, imageCid, props) => {
+    GenaDropSDK.uploadToIPFS(title, description, imageCid, props).then(
+      (res) => {
+        const CID = res.body.cid;
+
+        GenaDropSDK.callContract("nft_mint", {
+          token_id: `${Date.now()}`,
+          metadata: {
+            title: title,
+            description: description,
+            media: GenaDropSDK.getIpfsURL(imageCid),
+            reference: `ipfs://${CID}`,
+          },
+          receiver_id: recipient || accountId,
+        });
+
+        GenaDropSDK.logNft({
+          account: accountId,
+          recipient: recipient,
+          title: title,
+          description: description,
+          image: GenaDropSDK.getIpfsURL(imageCid),
+          tx: ricit.transactionHash,
+          link: "",
+          network: network,
+        });
+      }
+    );
+  },
+  uploadToIPFS: (title, description, imageCid, props) => {
+    const metadata = {
+      name: title,
+      description: description,
+      properties: props || [],
+      image: `ipfs://${imageCid}`,
+    };
+
+    return asyncFetch(NEAR_SOCIAL_ADD_ENDPOINT, {
+      method: "POST",
+      headers: {
+        Accept: "application/json",
+      },
+      body: metadata,
+    });
+  },
+  callContract: (method, args, gas, deposit) => {
+    Near.call([
+      {
+        contractName: GENADROP_NEAR_CONTRACT,
+        methodName: method,
+        args: args || {},
+        gas: gas || 200000000000000,
+        deposit: deposit || 10000000000000000000000,
+      },
+    ]);
+  },
+  refresh: () => {
+    if (onRefresh) {
+      onRefresh(GenaDropSDK);
+    }
+  },
+  logNft: (log) => {
+    let mintedNfts = Storage.get(MINTED_NFTS_STORAGE_KEY) ?? [];
+    mintedNfts.push(log);
+
+    console.log(mintedNfts);
+
+    GenaDropSDK.mintedNfts = mintedNfts;
+    Storage.set(MINTED_NFTS_STORAGE_KEY, mintedNfts);
+
+    GenaDropSDK.refresh();
+  },
+  getMintedNfts: () => {
+    return Storage.get(MINTED_NFTS_STORAGE_KEY);
+  },
+  getIpfsURL: (cid) => {
+    return `https://ipfs.near.social/ipfs/${cid}`;
+  },
+};
+
+if (onLoad && !loaded) {
+  GenaDropSDK.init();
+  onLoad(GenaDropSDK);
+}
diff --git a/build/BosGenaDrop/src/GenaDrop/SuccessModal.jsx b/build/BosGenaDrop/src/GenaDrop/SuccessModal.jsx
new file mode 100644
index 00000000..bcc3a5c1
--- /dev/null
+++ b/build/BosGenaDrop/src/GenaDrop/SuccessModal.jsx
@@ -0,0 +1,51 @@
+const PopupContainer = styled.div`
+  display: flex;
+  flex-direction: column;
+  width: 350px;
+  height: 300px;
+  border-radius: 16px;
+  padding-top: 30px;
+  background: #fff;
+  align-items: center;
+  img {
+    width: 70px;
+  }
+  h1 {
+    font-size: 25px;
+    margin-top: 10px;
+    font-weight: 600;
+  }
+`;
+
+const PopupButtons = styled.div`
+  margin-top: 30px;
+  a:first-child {
+    border: 1.5px solid #0d6efd;
+    cursor: pointer;
+    margin-right: 10px;
+    transition: 0.3s ease-in-out;
+    padding: 7.5px;
+    border-radius: 8px;
+  }
+  a:hover {
+    opacity: 0.5;
+  }
+  button {
+    width: 120px;
+  }
+`;
+
+return (
+  <PopupContainer>
+    <img src="https://cdn-icons-png.flaticon.com/128/5709/5709755.png" alt="" />
+    <h1>{props.modalText ?? "Successfully Listed"}</h1>
+    <PopupButtons>
+      <a target="_blank" href={props.externalLink}>
+        View on Explorer
+      </a>
+      <a href="#/bos.genadrop.near/widget/GenaDrop.Explore">
+        <button onClick={props.closeModal}>Close</button>
+      </a>
+    </PopupButtons>
+  </PopupContainer>
+);