arnaucube
arnaucube/arnaucube.comPublic Self-hosted repository
arnaucube.com/index.html
index.htmlRaw
  1<!doctype html>
  2
  3<html lang="en">
  4
  5<head>
  6  <meta charset="utf-8">
  7  <meta name="viewport" content="width=device-width, initial-scale=1">
  8
  9  <title>arnaucube</title>
 10  <meta name="description" content="arnaucube, arnaucube software developer">
 11  <meta name="keyword" content="arnaucube, arnaucode, arnau, cube, software, developer, portfolio, computer, science, electronics, telecomunications, engineer">
 12  <link rel="icon" type="image/png" href="img/logoArnauCubeFavicon.png">
 13
 14  <style>
 15    :root {
 16      --bg: #ffffff;
 17      --text: #1d3557;
 18      --muted: #58708e;
 19      --link: #4d9aa1;
 20      --code: #4d9aa1;
 21      --card: #ffffff;
 22    }
 23    body.dark-theme {
 24      --bg: #0f0f10;
 25      --text: #e9e9ea;
 26      --muted: #a9a9ad;
 27      --link: #4d9aa1;
 28      --code: #4d9aa1;
 29      --card: #0f0f10;
 30    }
 31    body {
 32      overflow-x: hidden;
 33      background: var(--bg);
 34      color: var(--text);
 35      font-family: "Avenir Next", "Montserrat", "Helvetica Neue", "Segoe UI", Arial, sans-serif;
 36      font-size:100%;
 37      margin: 0;
 38    }
 39
 40    a,
 41    a:hover,
 42    a:focus,
 43    a:active {
 44      color: var(--link);
 45      text-decoration:none;
 46    }
 47    ul{
 48      margin-top:0px;
 49    }
 50    li{
 51      margin-top: 5px;
 52    }
 53    code {
 54      font-size: 130%!important;
 55      color: var(--code)!important;
 56    }
 57    .recentwork{
 58      color: var(--link)!important;
 59      text-decoration: underline;
 60    }
 61    .gray{
 62      color: var(--muted);
 63    }
 64    h3 {
 65      margin-bottom: 2px;
 66    }
 67    h4 {
 68      margin-bottom: 2px;
 69    }
 70    .recent-work-box{
 71      background: transparent;
 72      border-radius: 0;
 73      padding-left: 20px;
 74      padding-right: 20px;
 75      padding-bottom: 10px;
 76      margin: 10px;
 77    }
 78    .main {
 79      margin: 0 auto;
 80      max-width: 760px;
 81      padding: 20px;
 82    }
 83    .theme-toggle {
 84      /*position: sticky;*/
 85      top: 12px;
 86      float: right;
 87      z-index: 2;
 88      background: var(--card);
 89      color: var(--text);
 90      border: 1px solid var(--muted);
 91      border-radius: 999px;
 92      width: 30px;
 93      height: 30px;
 94      font-size: 16px;
 95      line-height: 1;
 96      padding: 0;
 97      cursor: pointer;
 98    }
 99    @media only screen and (min-width: 450px) {
100      .tresd{
101        z-index: -2;
102        position: absolute;
103        left:30%!important;
104        top:25%;
105      }
106    }
107    @media only screen and (max-width: 450px) {
108      .tresd{
109        z-index: -2;
110        position: absolute;
111        left:0%;
112        top:25%;
113      }
114    }
115
116      
117    * {
118      box-sizing: border-box;
119    }
120    .column {
121      width: 100%;
122      padding: 0;
123      margin: 0;
124      float: none;
125    }
126    @media only screen and (max-width: 700px) {
127      .main {
128        padding: 14px;
129      }
130    }
131  </style>
132</head>
133
134<body>
135  <div class="main">
136  <button id="theme-toggle" class="theme-toggle" type="button" aria-label="Toggle theme">&#9728;</button>
137
138  <!-- <div id="tresd" style="z-index: -2; position: absolute; top:25%;"></div> -->
139  <!-- <div id="tresd" style="z-index: -2; position: absolute; left:0%;top:25%;"></div> -->
140  <div id="tresd" class="tresd"></div>
141
142  <div style="margin-top: 0;">
143    <div class="row">
144      <div class="column">
145
146    <div style="float:left;">
147        <img src="img/logoArnauCube_transparent.png" style="max-width: 100px;margin-top:30px;" \>
148      </div>
149      <br>
150      <div style="display:inline-block;max-width:500px; margin-left:10%;">
151      <!-- <div style="float:right; max-width:500px;"> -->
152      <p><b>arnaucube</b> - cryptography engineer</p>
153        <span  style="font-size:110%;">
154          <a href="/blog">blog</a>
155          <span style="margin: 10px;">|</span>
156          <a href="/blog/notes.html">notes</a>
157          <span style="margin: 10px;">|</span>
158          <a href="https://github.com/arnaucube" target="_blank">github</a>
159          <span style="font-style:italic;">(<a href="https://git.arnaucube.com/arnaucube?sort=moststars" target="_blank">git-mirror</a>)</span>
160          <span style="margin: 10px;">|</span>
161          <a href="https://twitter.com/arnaucube" target="_blank">twitter</a>
162        </span>
163      </div>
164
165      <br><br>
166      <div style="margin:30px;">
167        Some of the projects I've enjoyed working on over these past years:<br>
168        <ul>
169          <li>
170            <i>Folding schemes</i> implementations such as Nova, HyperNova, ProtoGalaxy, CycleFold in the
171        <a href="https://github.com/privacy-ethereum/sonobe" target="_blank">Sonobe</a> library
172          </li>
173          <li>
174            <i>Commitment schemes</i> such as
175        <a href="https://github.com/arnaucube/kzg-commitments-study" target="_blank">KZG10</a>,
176        <a href="https://github.com/arnaucube/fri-commitment" target="_blank">FRI</a>,
177        <a href="https://github.com/arnaucube/ipa-rs" target="_blank">IPA</a>
178          </li>
179          <li>
180            Elliptic curve <i>signature schemes</i> such as
181        <a href="https://github.com/arnaucube/ring-signatures-rs" target="_blank">bLSAG ring signatures</a>
182        and <a href="https://github.com/aragonzkresearch/ark-ec-blind-signatures" target="_blank">blind signatures</a>
183          </li>
184          <li>
185            other <i>cryptographic primitives</i> such as
186<a href="https://github.com/arnaucube/go-snark-study" target="_blank">go-snark</a> lib,
187<a href="https://github.com/vocdoni/arbo" target="_blank">arbo</a> (CPU-parallelized MerkleTree),
188            <a href="https://github.com/arnaucube/babyjubjub-rs" target="_blank">BabyJubJub</a> elliptic curve, <a href="https://github.com/arnaucube/poseidon-rs" target="_blank">Poseidon</a> hash
189          </li>
190          <li>
191            zk <i>circuits</i> such as <a
192          href="https://github.com/vocdoni/keccak256-circom"
193          target="_blank">keccak256-circom</a>,
194<a href="https://github.com/vocdoni/zk-franchise-proof-circuit/tree/9d25884142f0018746326d5f8c3ac714fe844edd" target="_blank">census-proof</a>
195          </li>
196          <li>
197            some voting system <i>designs &#38; implementations</i> <a
198  href="https://github.com/aragonzkresearch/research/blob/main/ovote/ovote.pdf"
199  target="_blank">OVOTE</a> and <a
200href="https://github.com/aragonzkresearch/research/blob/main/blind-ovote/blind-ovote.pdf"
201target="_blank">Blind-OVOTE</a>.
202          </li>
203          <li>
204            <i>FHE (full-homomorphic encryption)</i> schemes such as CKKS, BFV, TFHE at <a href="https://github.com/arnaucube/fhe-study" target="_blank">fhe-study</a>.
205          </li>
206        </ul>
207        <!--
208        Interested on implementing cryptographic primitives (both rust libraries and zk circuits).
209Examples of things I've enjoyed working on these past years:
210
211- Rust libraries: various folding schemes implementations (Nova, HyperNova, ProtoGalaxy, CycleFold) (which included also implementing circuits), various commitment schemes (KZG, IPA, FRI), various signature schemes.
212- zk circuits: various elliptic curve signature schemes, keccak256 hash function in circom.
213
214Maybe a common denominator from all the above would be: deep rabbit hole to dive into, requiring math understanding together with coding knowledge; ie. take a paper - study it - implement it.
215        -->
216      </div>
217
218      <br>
219    </div>
220
221      <!-- <br><br><br> -->
222      <!-- <hr style="width:70%;"> -->
223      <!-- <br><br> -->
224
225      <div class="column" style="font-size:100%;">
226      <h2>Recent <b>Work</b>:</h2>
227
228      <div class="recent-work-box">
229        <h4 class="gray">2023 - now</h4>
230        <!-- 2023 -->
231        <h3 style="display:inline;"><a href="https://research.0xparc.org" target="_blank" class="recentwork">0xPARC Research</a> -</h3>
232        <i style="display:inline;">Applied cryptography research</i>
233        <br>
234        Research and implementations of folding schemes.
235        <ul>
236          <li>
237            <span class="gray">privacy-ethereum/</span><a href="https://github.com/privacy-ethereum/sonobe" target="_blank">sonobe</a>: folding schemes modular library. Implemented Nova, CycleFold, HyperNova and part of ProtoGalaxy. Also designed the onchain verification approach which allowed Sonobe to be the first folding schemes library to achieve verifying folding proofs in Ethereum.
238            <ul><li><a href="https://github.com/privacy-ethereum/sonobe" target="_blank">sonobe</a>, <a href="https://privacy-ethereum.github.io/sonobe-docs" target="_blank">sonobe-docs</a></li></ul>
239          </li>
240          <li>
241            <a href="https://github.com/arnaucube/protogalaxy-poc" target="_blank">protogalaxy-poc</a>: ProtoGalaxy folding scheme proof of concept implementation
242          </li>
243          <li>
244            <span class="gray">privacy-scaling-explorations/</span><a href="https://github.com/privacy-scaling-explorations/multifolding-poc" target="_blank">multifolding-poc</a>: HyperNova folding scheme proof of concept implementation 
245          </li>
246      </div>
247
248      <!-- <hr style="width:40%;margin-left:0;margin-bottom:30px;margin-top:20px;"> -->
249
250      <div class="recent-work-box">
251        <h4 class="gray">2022 - 2023</h4>
252        <!-- 2022 - 2023 -->
253        <h3 style="display:inline;"><a href="https://vocdoni.io" target="_blank" class="recentwork">Vocdoni</a> & <a href="https://research.aragon.org/about/" target="_blank" class="recentwork">Aragon-ZK-Research</a> -</h3>
254      <i style="display:inline;">Decentralized governance & voting tooling.</i>
255        <br>
256        Design and implementation of voting schemes using zkSNARKs and other cryptographic schemes.
257        <!-- Design and implementation of <a href="https://docs.vocdoni.io/architecture/protocol/anonymous-voting/zk-census-proof.html#implementation-spec" target="_blank">anonymous voting solutions</a> using zkSNARKs. -->
258        <!-- Introduced <a href="https://github.com/vocdoni/protocol/discussions/23" target="_blank">some</a> design <a href="https://github.com/vocdoni/zk-franchise-proof-circuit/commit/2efeecc12669279dcf493bd9c782ba80b3c87dc8" target="_blank">optimizations</a> in the circuits which reduced the number of constraints. -->
259        <!-- <br>Also, contributed to <span class="gray">vocdoni/</span><a href="https://github.com/vocdoni/vocdoni-node/commits?author=arnaucube" target="_blank">vocdoni-node</a> adding zk related code. -->
260        <!-- <br> -->
261        <!-- Other stuff implemented: -->
262        <br>
263        <ul>
264          <li>
265            <span class="gray">vocdoni/</span><a href="https://github.com/vocdoni/keccak256-circom" target="_blank">keccak256-circom</a>: ethereum sha3 (keccak256) hash function implemented in Circom
266          </li>
267          <li>
268            <span class="gray">vocdoni/</span><a href="https://github.com/vocdoni/zk-franchise-proof-circuit" target="_blank">zk-census-proof</a>: anonymous census proof circuit used in Vocdoni's Blockchain
269            <ul>
270              <li>
271                <span class="gray">aragonzkresearch/</span><a href="https://github.com/aragonzkresearch/ark-anon-vote" target="_blank">ark-anon-vote</a>: (similar design, implemented in arkworks) onchain anonymous voting snark circuit.
272              </li>
273            </ul>
274          </li>
275          <li>
276            <span class="gray">vocdoni/</span><a href="https://github.com/vocdoni/arbo" target="_blank">arbo</a>: optimized MerkleTree which parallelizes by CPUs for faster computation, compatible with circomlib implementation
277          </li>
278            <li>
279              <span class="gray">aragonzkresearch/</span><a href="https://github.com/aragonzkresearch/ark-ec-blind-signatures" target="_blank">ark-ec-blind-signatures</a>: Blind signatures over elliptic curve implementation (native & r1cs constraints)
280            </li>
281          </ul>
282          <span style="">OVOTE</span>: Offchain Voting with Onchain Trustless Execution (kind of a validity-Rollup for voting)
283          <ul>
284            <li>
285              <a href="https://research.aragon.org/docs/ovote" target="_blank">OVOTE technical document</a>
286            </li>
287            <li>
288              <a href="https://forum.aragon.org/t/we-present-ovote-offchain-voting-with-onchain-trustless-execution/3603" target="_blank">Forum post</a> with a high level explanation.
289            </li>
290            <li>
291              <span class="gray">aragonzkresearch/</span><a href="https://github.com/aragonzkresearch/ovote" target="_blank">ovote</a>: implementation of the OVOTE circuits, smart contracts & libs
292            </li>
293            <li>
294              <span class="gray">aragonzkresearch/</span><a href="https://github.com/aragonzkresearch/ovote-node" target="_blank">ovote-node</a>: OVOTE backend node implemented in Go
295            </li>
296          </ul>
297          <span style="">Blind-OVOTE</span>: (OVOTE with Blind Signatures) L2 validity rollup combined with blind signatures over elliptic curves inside zkSNARK, to provide offchain anonymous voting with onchain binding execution on Ethereum
298          <ul>
299            <li>
300              <a href="https://research.aragon.org/docs/blind-ovote" target="_blank">Blind-OVOTE technical document</a>
301            </li>
302            <li>
303              <a href="https://forum.aragon.org/t/blind-ovote-ovote-with-blind-signatures-for-voter-anonymity/3881" target="_blank">Forum post</a> with a high level explanation.
304            </li>
305            <li>
306              <span class="gray">aragonzkresearch/</span><a href="https://github.com/aragonzkresearch/blind-ovote" target="_blank">blind-ovote</a>: Blind-OVOTE implementation in arkworks.
307            </li>
308          </ul>
309      </div>
310      <!-- <hr> -->
311      <!-- <hr style="width:40%;margin-left:0;margin-bottom:30px;margin-top:20px;"> -->
312      <div class="recent-work-box">
313        <h4 class="gray">2018 - 2022</h4>
314          <!-- 2021 - 2022 -->
315        <h3 style="display:inline;"><a href="https://hermez.io" target="_blank" class="recentwork">Hermez zkRollup</a> -</h3>
316        <i style="display:inline;"> Decentralized zkRollup on Ethereum.</i><br>
317        Main task has been to implement the Hermez node,
318          used to <a href="https://cointelegraph.com/news/hermes-network-launches-zk-rollups-on-ethereum-mainnet-to-process-cheap-payments"
319                     target="_blank">launch the mainnet</a> of the zkRollup network (1.0):
320             <br><span style="margin-left:30px;"></span>  <span class="gray">hermeznetwork/</span><a href="https://github.com/arnaucube/hermez-node" target="_blank">hermez-node</a>
321          <br>My focus has been mainly in the TxSelector, TxProcessor (managing
322          the rollup state tree) and BatchBuilder (generating the data
323          structure compatible with the zkSNARK circuits to do the proof generation).
324        <!-- </div> -->
325        <!-- <hr> -->
326        <!-- <hr style="width:40%;margin-left:0;margin-bottom:30px;margin-top:20px;"> -->
327        <!-- <div class="recent-work-box"> -->
328          <!-- 2018 - 2021 -->
329          <br><br>
330        <h3 style="display:inline;"><a href="https://iden3.io" target="_blank" class="recentwork">iden3</a> -</h3>
331        <i style="display:inline;"> Scalable decentralized identity system with privacy by using zero knowledge proofs.</i><br>
332        Design and specify the core protocol, develop the core libraries, servers, zk circom circuits and zkSNARK Groth16 Go prover.
333        <ul>
334          <li>
335            <span class="gray">iden3/</span><a href="https://github.com/iden3/go-iden3-crypto" target="_blank">go-iden3-crypto</a>: cryptographic primitives (SNARK-friendly) used in iden3 </li>
336          <li>
337            <span class="gray">iden3/</span><a href="https://github.com/iden3/go-iden3-core" target="_blank">go-iden3-core</a>: core implementation of the iden3 system
338          </li>
339          <li>
340            <span class="gray">iden3/</span><a href="https://github.com/iden3/go-circom-prover-verifier" target="_blank">go-circom-prover-verifier</a>: implementation of the Groth16 zkSNARK Prover and Verifier compatible with Circom 
341          </li>
342          <li>
343            <span class="gray">iden3/</span><a href="https://github.com/iden3/circuits" target="_blank">circuits</a>: zkSNARK circuits used by the iden3 core protocol
344          </li>
345        </ul>
346
347</div>
348
349<div style="font-size:80%;">
350      <h2>Some other <b>free time</b> side projects:</h2>
351      <ul>
352        <li>
353          <a href="https://github.com/arnaucube/go-snark-study" target="_blank">go-snark-study</a>: <code>Go</code> zkSNARK implementation from scratch (compiler, setup, prover, verifier)
354        </li>
355        <li>
356          <a href="https://github.com/arnaucube/go-bellman-verifier" target="_blank">go-bellman-verifier</a>: <code>Go</code> Groth16 zkSNARK bellman proof verifier using cloudflare/bn256 Pairing
357        </li>
358        <li>
359          <a href="https://github.com/arnaucube/babyjubjub-rs" target="_blank">babyjubjub-rs</a>: BabyJubJub elliptic curve implementation in <code>Rust</code>
360        </li>
361        <li>
362          <a href="https://github.com/arnaucube/kzg-commitments-study" target="_blank">kzg-commitments</a>: Kate-Zaverucha-Goldberg (KZG10) Polynomial Commitments in <code>Go</code>
363        </li>
364        <li>
365          <a href="https://github.com/arnaucube/fri-commitment" target="_blank">fri-commitment</a>: FRI polynomial commitment in <code>Rust</code>
366        </li>
367        <li>
368          <a href="https://github.com/arnaucube/ipa-rs" target="_blank">ipa-rs</a>: modified Inner Product Argument (IPA) version from Halo paper in <code>Rust</code> using arkworks.
369        </li>
370        <li>
371          <a href="https://github.com/arnaucube/ring-signatures-rs" target="_blank">ring-signatures-rs</a>: bLSAG ring signatures implementation in <code>Rust</code>
372        </li>
373        <li>
374          <a href="https://github.com/arnaucube/poseidon-rs" target="_blank">poseidon-rs</a>: Poseidon hash implementation in <code>Rust</code>
375        </li>
376        <li>
377          <a href="https://github.com/arnaucube/go-blindsecp256k1" target="_blank">go-blindsecp256k1</a>: Blind signatures over secp256k1 elliptic curve in <code>Go</code> <i>(with the <a href="https://github.com/arnaucube/blindsecp256k1-js" target="_blank">compatible typescript implementation</a>)</i>
378        </li>
379      <!-- </ul> -->
380      <!-- Other: -->
381      <!-- <ul> -->
382        <!-- <li> -->
383        <!--   <a href="https://github.com/arnaucube/evm-rs" target="_blank">evm-rs</a>: Ethereum Virtual Machine in <code>Rust</code> -->
384        <!-- </li> -->
385        <!-- <li> -->
386        <!--   <a href="https://github.com/arnaucube/go-dht" target="_blank">go-dht</a>: Kademlia DHT implementation in <code>Go</code> -->
387        <!-- </li> -->
388        <li>
389          <a href="https://github.com/arnaucube/merkletree-rs" target="_blank">merkletree-rs</a>: Sparse MerkleTree implementation in <code>Rust</code> (also a <code>Go</code> impl <a href="https://github.com/arnaucube/go-merkletree" target="_blank">go-merkletree</a>)
390        </li>
391        <li>
392          <a href="https://github.com/arnaucube/shamirsecretsharing" target="_blank">shamirsecretsharing</a>: Shamir's Secret Sharing <code>Rust</code> & <code>Go</code> implementation + <code>WASM</code> lib
393        </li>
394        <!-- <li> -->
395        <!--   <a href="https://github.com/arnaucube/cryptofun" target="_blank">cryptofun</a>: Crypto algorithms from scratch, in order to get familiar with them from inside. For example: ECC, Paillier, RSA, Homomorphic computation, ElGamal, Schnorr, ECDSA, BN128, ... -->
396        <!-- </li> -->
397        <li>
398          <a href="https://github.com/arnaucube/evm-rs" target="_blank">evm-rs</a>: partial implementation of the Ethereum Virtual Machine (EVM) in <code>Rust</code>
399        </li>
400        <li>
401          <a href="https://kvartalo.github.io/website/" target="_blank">kvartalo</a>: a local social cryptocurrency for neigbourhoods, that we used in a Barcelona neighbourhood as experiment during few months. Build on top of Ethereum blockchain & Tendermint Core
402        </li>
403        <li>
404          <a href="https://github.com/arnaucube/chip8-rs" target="_blank">chip8-rs</a>: CHIP-8 virtual machine emulator written in <code>Rust</code> (also a <code>Go</code> impl <a href="https://github.com/arnaucube/go-chip8" target="_blank">go-chip8</a>)
405        </li>
406        <li>
407          <a href="https://github.com/arnaucube/fft-rs" target="_blank">fft-rs</a>: Fast Fourier Transform (FFT) implementation in <code>Rust</code>
408        </li>
409        <li>
410          <a href="https://github.com/arnaucube/miksi-core" target="_blank">miksi</a>: Ethereum zk-coin-mixer where all the computation & constructions are done offchain and then proved inside a zkSNARK to the smart-contract. <i><a href="https://arnaucube.github.io/miksi-app/" target="_blank">(live demo on testnet)</a></i>
411        </li>
412        <li>
413          <a href="https://github.com/arnaucube/eth-kzg-ceremony-alt" target="_blank">eth-kzg-ceremony-alt</a>: Alternative implementation of the contributor-client for the Ethereum KZG Trusted Setup Ceremony
414        </li>
415      </ul>
416
417      More projects directly in github: <a href="https://github.com/arnaucube?tab=repositories" target="_blank">https://github.com/arnaucube</a> <i>(Mirror of all the repos at: <a href="https://git.arnaucube.com/arnaucube?sort=moststars" target="_blank">https://git.arnaucube.com</a>)</i>.
418      </div>
419
420      <br><br><br>
421      <p style="padding:0;margin:0;font-size:120%;">
422        <a href="blog/index.html">blog</a>
423        <span style="margin: 10px;">|</span>
424        <a href="https://github.com/arnaucube" target="_blank">github</a>
425        <span style="font-style:italic;">(<a href="https://git.arnaucube.com/arnaucube?sort=moststars" target="_blank">git-mirror</a>)</span>
426        <span style="margin: 10px;">|</span>
427        <a href="https://twitter.com/arnaucube" target="_blank">twitter</a>
428      </p>
429      <br><br>
430      <img src="img/email.png" />
431
432
433    
434      
435      <!-- <hr> -->
436      <!-- <br> -->
437    </div>
438
439    </div>
440  </div>
441  </div>
442
443
444  <!-- threejs -->
445  <script src="js/three.min.js"></script>
446  <script src="js/Detector.js"></script>
447  <script src="js/tresd.min.js"></script>
448  <!-- <script src="js/tresd.js"></script> -->
449  <script>
450    const toggleButton = document.getElementById("theme-toggle");
451    let savedTheme = localStorage.getItem("theme");
452    if (savedTheme === "dark") {
453      savedTheme = "dark-theme";
454    }
455    if (savedTheme !== "dark-theme") {
456      savedTheme = "light-theme";
457    }
458    document.body.classList.remove("light-theme", "dark-theme");
459    document.body.classList.add(savedTheme);
460    toggleButton.innerHTML = savedTheme === "dark-theme" ? "&#9790;" : "&#9728;";
461
462    toggleButton.addEventListener("click", function () {
463      const currentTheme = localStorage.getItem("theme") === "dark-theme" ? "dark-theme" : "light-theme";
464      const nextTheme = currentTheme === "dark-theme" ? "light-theme" : "dark-theme";
465      document.body.classList.remove("light-theme", "dark-theme");
466      document.body.classList.add(nextTheme);
467      localStorage.setItem("theme", nextTheme);
468      toggleButton.innerHTML = nextTheme === "dark-theme" ? "&#9790;" : "&#9728;";
469    });
470
471    tresd = "cube";
472    init();
473    animate();
474  </script>
475</body>
476
477</html>