let msgMagicHashDigest,v_btc,r_btc,s_btc,sig,messageHash,btcPublicKey,ordAddress,provider,chainId,ethAddress,enableQG,tipCreator,introMsg,ethContractAddress,targetChainName,ethMsg,quark20Msg,targetChainId,targetChainRPC,targetChainExplorer,targetChainCurrencyName,targetChainCurrencySymbol,enableApp,enableRecursion,tipSatAmount,parcelHighLight,selfInscriptions,sid,ethContracAbi,childbatchTx,isHolder,serverUrl0,serverUrl1,selfSat,characterCount=0,word="";const quarkLogoInscription="a0f1089d6871763d1368f60aeb7ccb60614e34f8595a39d85957ba30f999693ei0",ownerOverride=!1,initGate=async()=>{serverUrl0="",serverUrl1="",document.body.style="overflow: hidden;margin: 0 !important;padding: 0 !important;background-color: black;";const e=document.createElement("div");e.setAttribute("id","atomView");const t=document.createElement("div");t.setAttribute("id","overlay0"),t.style="position: absolute;width: 100% !important;height: 100% !important;display: block;z-index: 9;";const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.setAttribute("viewBox","0 0 4096 4096");const r=document.createElementNS("http://www.w3.org/2000/svg","animateTransform");r.setAttribute("attributeType","xml"),r.setAttribute("attributeName","transform"),r.setAttribute("type","translate"),r.setAttribute("values","0,0; 0,5; 0,10; 0,5; 0,0"),r.setAttribute("keyTimes","0; 0.25; 0.5; 0.75; 1"),r.setAttribute("dur","7s"),r.setAttribute("repeatCount","indefinite"),r.setAttribute("calcMode","spline"),r.setAttribute("keySplines",".42 0 .58 1; .42 0 .58 1; .42 0 .58 1; .42 0 .58 1");const a=document.createElementNS("http://www.w3.org/2000/svg","g");a.setAttribute("transform","translate(520 500) scale(25 25)"),a.setAttribute("fill","#FEFFFE");const o=(e,t)=>{const n=document.createElementNS("http://www.w3.org/2000/svg","circle");n.setAttribute("cx",`${e}`),n.setAttribute("cy",`${t}`),n.setAttribute("r","2.5"),a.append(n)},i=10.7,s=6.8;o(70.7,66.8);for(let e=0;e<7;e++)o(20+10*e+i,26.8),o(30.7,30+10*e+s),o(90.7,30+10*e+s),o(20+10*e+i,96.8);const d=document.createElementNS("http://www.w3.org/2000/svg","g");d.setAttribute("transform","translate(520 500) scale(25 25)"),d.setAttribute("fill","#FEFFFE");const c=document.createElementNS("http://www.w3.org/2000/svg","circle");c.setAttribute("cx","80.7"),c.setAttribute("cy","66.8"),c.setAttribute("r","2.5"),d.append(c),c.append(r),n.append(a),n.append(d),t.append(n),e.append(t);const l=document.createElement("canvas");l.setAttribute("id","atomCanvas"),e.append(l),document.body.appendChild(e),document.getElementById("atomCanvas").width=window.innerWidth,document.getElementById("atomCanvas").height=window.innerHeight;const m=await fetch("/content/d94a775355aa322080db915da5eaee0b60fb5fd1464c170e67375e8487741a08i0"),u=document.createElement("script");u.innerHTML=decodeURIComponent(escape(atob(await m.text()))),document.body.appendChild(u),window.enableApp=window.fullScreen||window.innerWidth==screen.width||window.innerWidth>=1024&&screen.width>=1024,window.enableRecursion=window.innerWidth>=576&&screen.width>=576,maing(Math.floor(4*Math.random()),Math.floor(4*Math.random()),Math.floor(4*Math.random()),1337,Math.floor(4*Math.random()),Math.floor(40*Math.random())+10);const h=await fetch(`${serverUrl1}/r/sat/717782965662484/at/-1`).then((e=>e.json())),p=await fetch(`${serverUrl1}/content/${h.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text()))))));window.enableQG=p.enableQG;const y=!(!window.enableQG||!window.enableApp||!window.ethereum&&!window.XverseProviders);if(y){const e=y&&await fetch(`${serverUrl1}/content/a9f6a9b050af3de1a4ce714978c1f2231ba731f1f46731a16d0e411f89308566i0`),t=document.createElement("script");t.innerHTML=await e.text(),document.body.appendChild(t);const n="d1f5a0e378eae550610432866c4d5cbccff7b771840be8886c4e52a370d70b8fi0";childbatchTx="e07578a3b92b59a835cce149a849f4b547d98c66345f2dc20dfedf9c95e721e6";let r=!0,a=0,o=[];for(;n&&r;){const e=await fetch(`${serverUrl1}/r/children/${n}/inscriptions/${a}`).then((e=>e.json()));r=e.more,o=o.concat(e.children),a+=1}const i=y&&await fetch(`${serverUrl1}/r/sat/717782964480455/at/-1`).then((e=>e.json())),s=y&&await fetch(`${serverUrl1}/content/${i.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text())))))),d=await fetch(`${serverUrl1}/r/sat/980154123863903/at/-1`).then((e=>e.json())),c=await fetch(`${serverUrl1}/content/${d.id}`).then((e=>e.text()));enableQG=p.enableQG,tipCreator=p.tipCreator,ethContracAbi=s.ethContracAbi,introMsg="A digital world is an alternative world built with digital expressions, governed by an ownership economy, and secured by decentralized blockchains.>The Ordinal Theory provides an immutable foundation for building enduring digital expressions on Bitcoin.>To build on top of this foundation, we need additional ways to organize onchain apps with crosschain data.>>Quantum Gate presents a purely onchain approach to linking Bitcoin and Ethereum blockchains using their shared elliptic curve, SECP256K1.>By enabling access to Ethereum Smart Contracts within BTC ordinal inscriptions (like this),>Quantum Gate can bring more crosschain digital expressions for building the digital world."+(enableQG?">To explore this brave new world, mine your Quark20 ($Q)...>":""),ethContractAddress=p.evm[c].contractAddress,targetChainName=s.evm[c].chainName,ethMsg=`You are verified on Bitcoin. Verifying on ${targetChainName} via elliptic curve SECP256K1...`,quark20Msg=p.quark20Msg,targetChainId=s.evm[c].id,targetChainRPC=s.evm[c].rpc,targetChainExplorer=s.evm[c].explorer,targetChainCurrencyName=s.evm[c].currencyName,targetChainCurrencySymbol=s.evm[c].currencySymbol,enableApp=window.fullScreen||window.innerWidth==screen.width||window.innerWidth>=p.enableApp&&screen.width>=p.enableApp,enableRecursion=window.innerWidth>=p.enableRecursion&&screen.width>=p.enableRecursion,tipSatAmount=p.tipSatAmount,parcelHighLight=p.parcelHighLight,document.body.style="overflow: hidden;margin: 0 !important;padding: 0 !important;background-color: black;"}if(y&&(eth||xverse)){const e=await fetch("/content/10d92ec11b31ea21752ac46781d109bcf53bba04ae9b1044747057335c77ef9ci0"),t=document.createElement("script");t.innerHTML=await e.text(),document.body.appendChild(t);const n=await fetch("/content/d445cf76e59778e09e1cdaecd39bf741df91a32b83dea991efbbeb05d2258067i0"),r=document.createElement("script");r.innerHTML=await n.text(),document.body.appendChild(r);const a=await fetch("/content/49f52053c42a613dbf37b34d41d2c6684eb63ae22856549c6cab983c0f28e0adi0"),o=document.createElement("script");o.innerHTML=await a.text(),document.body.appendChild(o),enableApp&&setTimeout((()=>{setup()}),2e3)}},xverse=window.XverseProviders,tsk=(new Date).toJSON().slice(0,16),quantumMsg=`Unlocking Quark20 on ${tsk}`,setup=async()=>{let e;selfInscriptions=[];const t=async()=>{if(await n(),chainId!==targetChainId)await switchEthNetwork();else{const t=await provider.getSigner();e=t;if(ethers.formatEther(await provider.getBalance(e))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${targetChainName}</span>`);const n=`${Number(targetChainId).toString(16).toUpperCase()} ${quantumMsg} with ETH address ${e.address}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Sign a human-readable ETH message to verify:<br/>"${n}"</span></span>`;const r=await(async e=>{try{const t=ethAddress,n=function(e){for(var t="",n=0;n<e.length;n++)t+=e.charCodeAt(n).toString(16);return t}(e);return await eth.request({method:"personal_sign",params:[n,t]})}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on ETH...</p>',setTimeout((()=>{location.reload()}),5e3),null}})(n),a=ethers.verifyMessage(n,r),o=new ethers.Contract(ethContractAddress,ethContracAbi,e),i=await o.balanceOf(e.address);if(a.toLowerCase()===ethAddress.toLowerCase()){let t,a,s,d;try{t=ethers.formatEther(await o.maxEthSupply()),a=Number(await o.currentEpoch()),s=ethers.formatEther(await o.rewardsEthSig(a)),d=ethers.formatEther(await o.totalEthSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*s+d<=t){const t=await o.getRemainTimeLocked(e.address);if(Number(t)>86400){let e;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`;try{e=await o.mint(n,r)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),1e4)}e&&e.hash&&(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using ETH's elliptic curve SECP256K1 via ${targetChainName}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await e.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${e.hash} via ${targetChainName}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${targetChainName}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3))}else{let e=0;document.getElementById("info0").innerHTML="",word=quark20Msg,characterCount=0;const n=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),n),document.getElementById("overlay0").style.display="none",setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(i)} $Q.<br/> Please wait ${86400-Number(t)-e} seconds for the next Quark20 mint. Be patient...</span>`,e++}),1e3)}),Math.floor(word.length*n))}}}}},n=async()=>{document.getElementById("info0").innerHTML='<span style="color: white">Checking Quark20 on Ethereum via MetaMask...</span>';const e=await eth.request({method:"eth_requestAccounts"}).catch((e=>{document.getElementById("info0").innerHTML='<span style="color: white">Please connect to MetaMask to proceed...</span>',4001===e.code||(document.getElementById("btnEth").style.display="",console.error(e))}));ethAddress=e[0],document.getElementById("info0").innerHTML="Verifying Quark20 on Ethereum via MetaMask...",document.getElementById("btnEth").style.display="none",provider=new ethers.BrowserProvider(window.ethereum);const t=(await provider.getNetwork()).chainId;chainId=Number(t)},r=async()=>{document.getElementById("btnXverse").disable=!0,document.getElementById("btnXverse").style.display="none",document.getElementById("btnEth").style.display="none",document.getElementById("info0").innerHTML="<p>Connecting to Bitcoin via Xverse...</p>";const e=await xverse.BitcoinProvider.request("getAccounts",{purposes:["payment","ordinals"],message:"Quantum Gate"},xverse.BitcoinProvider);if(e.error&&(document.getElementById("btnXverse").style.display="",document.getElementById("info0").innerHTML="<p>Connect a BTC wallet to continue...</p>"),e.result){const t=e.result.find((e=>"ordinals"===e.purpose)),n=e.result.find((e=>"payment"===e.purpose));btcAddress=n?.address,ordAddress=t?.address,btcPublicKey=n?.publicKey,isHolder=await(async()=>{let e=0,t=60;for(;t>=e;){const n=await xverse.BitcoinProvider.request("ord_getInscriptions",{offset:e,limit:60});if(e+=60,n.result&&n.result.inscriptions.length>0){const e=n.result;t=e.total,selfInscriptions=selfInscriptions.concat(e.inscriptions)}}isHolder=!1;for(let e=0;e<selfInscriptions.length;e++){const t=selfInscriptions[e];if(t.inscriptionId.startsWith(childbatchTx)){const e=await fetch(`${serverUrl1}/r/inscription/${t.inscriptionId}`).then((e=>e.json()));selfSat=e.sat,isHolder=!0;break}}return isHolder})(),sid=Number(selfSat||"450000000000").toString(16).toUpperCase();const r=`${sid} ${quantumMsg} with BTC address ${btcAddress}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">BTC Address: ${btcAddress}<br/><br/><span style="color: white">Sign a human-readable BTC message to verify:<br/>"${r}"</span></span>`,document.getElementById("btnXverse").style.display="none";const a=await(async e=>{try{const t=await xverse.BitcoinProvider.request("signMessage",{address:btcAddress,message:e},xverse.BitcoinProvider);if(t.result)return t.result}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on BTC...</p>',setTimeout((()=>{location.reload()}),5e3),null}})(r);a&&a.address===btcAddress?selfSat&&isHolder?(document.getElementById("info0").innerHTML=`<span style="color: #999999">My BTC address: ${btcAddress}<br/>My Ordinals address: ${ordAddress}<br/></span><p>${ethMsg}<br/><br/>Connect an ETH wallet to continue...</p>`,document.getElementById("btnEth").style.display="",messageHash=a.messageHash,msgMagicHashDigest=ethers.hexlify(ethers.decodeBase64(a.messageHash)),sig=ethers.decodeBase64(a.signature),v_btc=Number(ethers.dataSlice(sig,0,1))-27&!1?27:28,r_btc=ethers.zeroPadValue(ethers.dataSlice(sig,1,33),32),s_btc=ethers.zeroPadValue(ethers.dataSlice(sig,33,65),32)):eth?(document.getElementById("btnEth").style.display="",document.getElementById("info0").innerHTML="</span><p>You do not own this BTC inscription. However, you can still mint some Quark20!</p>"):(tipRecipient=tipCreator,document.getElementById("btnXverseTip").style.display="",document.getElementById("info0").innerHTML+="</span><p>Quark20 is not available yet...<br/><br/>Would you tip the creator?</p>"):(document.getElementById("info0").innerHTML='<p style="color: red">invalid BTC signature</p>',setTimeout((()=>{location.reload()}),5e3))}},a=document.createElement("div");a.setAttribute("id","ordOsDiv0"),a.style="color: white; position: absolute;width: 100% !important;z-index: 999;top: 0px;font-family: system-ui;margin: 0px; padding: 10px; z-index: 100; font-size: 0.9em;line-height: 150%;",document.body.appendChild(a);const o=document.createElement("div");o.setAttribute("id","info0"),o.style.marginLeft="10px",o.style.marginBottom="20px",o.style.fontSize=".9em",a.appendChild(o),characterCount=0;if(setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),20),xverse||eth?enableQG?(document.getElementById("info0").innerHTML="",word=`${introMsg}>>Connect a ${xverse&&eth?"BTC":"ETH"} wallet to continue...>`):(document.getElementById("info0").innerHTML="",word=`${introMsg}`):(document.getElementById("info0").innerHTML="",word=">Xverse and MetaMask wallet required to continue>>"),xverse){const e=document.createElement("button");e.setAttribute("id","btnXverse"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=()=>r(),e.innerHTML="Connect Xverse",a.appendChild(e),setTimeout((()=>{e.style.display=""}),Math.floor(22*word.length))}if(xverse){const e=document.createElement("button");e.setAttribute("id","btnXverseTip"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=()=>(async()=>{document.getElementById("btnXverseTip").disabled=!0,"success"===(await xverse.BitcoinProvider.request("sendTransfer",{recipients:[{address:tipRecipient,amount:Number(tipSatAmount)}]})).status||setTimeout((()=>{location.reload()}),5e3)})(),e.innerHTML=`Tip ${tipSatAmount} sats`,a.appendChild(e)}if(eth){const r=document.createElement("button");r.setAttribute("id","btnEth"),r.style.padding="7px",r.style.color="#cccccc",r.style.cursor="pointer",r.style.fontSize=".9em",r.style.border="1px solid white",r.style.backgroundColor="transparent",r.style.marginLeft="10px",r.style.display="none",r.onclick=async()=>{xverse&&eth&&isHolder?(async()=>{if(await n(),chainId!==targetChainId)document.getElementById("btnEth").style.display="",await switchEthNetwork();else{const t=await provider.getSigner();if(e=t,ethers.formatEther(await provider.getBalance(e))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${targetChainName}</span>`);const n=new ethers.Contract(ethContractAddress,ethContracAbi,e),r=await n.balanceOf(e.address),a=Point.fromHex(`${btcPublicKey}`),o=ethers.computeAddress(`0x${a.toHex(!1)}`);let i,s,d,c;try{i=ethers.formatEther(await n.maxBtcSupply()),s=Number(await n.currentEpoch()),d=ethers.formatEther(await n.rewardsBtcSig(s)),c=ethers.formatEther(await n.totalBtcSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*d+c<=i){const e=await n.getRemainTimeLocked(o);if(Number(e)>86400){let e;if(document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`,r_btc&&s_btc){let t;try{const e=await n.recoverEthAddressFromVRS(msgMagicHashDigest,27,r_btc,s_btc),r=await n.recoverEthAddressFromVRS(msgMagicHashDigest,28,r_btc,s_btc);o===e?(v_btc=27,t=e):o===r&&(v_btc=28,t=r)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">oops</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}if(v_btc&&t===o)try{e=await n.claim(`${sid} ${quantumMsg} with BTC address ${btcAddress}`,o,msgMagicHashDigest,v_btc,r_btc,s_btc)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}else document.getElementById("info0").innerHTML='<p style="color: red">oops</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}e&&e.hash&&(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using BTC and ETH's elliptic curve SECP256K1 via ${targetChainName}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await e.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${e.hash} via ${targetChainName}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${targetChainName}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3))}else{let t=0;document.getElementById("info0").innerHTML="",word=quark20Msg,characterCount=0;const n=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),n),document.getElementById("overlay0").style.display="none",setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(r)} $Q.<br/> Please wait ${86400-Number(e)-t} seconds for the next Quark20 claim. Be patient...</span>`,t++}),1e3)}),Math.floor(word.length*n))}}else document.getElementById("info0").innerHTML=`<span style="color: white">${quark20Msg}<br/>You currently own <b>${ethers.formatEther(r)}</b> $Q.</span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3)}})():t()},r.innerHTML="Connect Metamask",a.appendChild(r),enableQG&&(xverse&&eth||setTimeout((()=>{r.style.display=""}),Math.floor(22*word.length)))}if(eth){const e=document.createElement("button");e.setAttribute("id","btnAddQuark"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=async()=>{addQuark20ToMM()},e.innerHTML="Add Quark20 ($Q) to MetaMask",a.appendChild(e)}},eth=window.ethereum,switchEthNetwork=async()=>{if(document.getElementById("btnEth").style.display="none",targetChainId>1)try{await eth.request({method:"wallet_addEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`,rpcUrls:[targetChainRPC],chainName:targetChainName,nativeCurrency:{name:targetChainCurrencyName,symbol:targetChainCurrencySymbol,decimals:18},blockExplorerUrls:[targetChainExplorer]}]}),setTimeout((()=>{location.reload()}),2e3)}catch(e){setTimeout((()=>{location.reload()}),2e3)}await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`}]}),setTimeout((()=>{location.reload()}),2e3)},addQuark20ToMM=async()=>{await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`}]});const e=ethContractAddress,t=`https://ordinals.com/content/${quarkLogoInscription}`;if(e)try{await ethereum.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:e,symbol:"T",decimals:18,image:t}}})}catch(e){setTimeout((()=>{location.reload()}),1e4)}};