Giter VIP home page Giter VIP logo

eth.build's Introduction

๐Ÿ›  ETH.Build

Enviornment Information: (reccomended) node version manager node: v14.17.5 yarn: 1.22.5


  yarn install --frozen-lockfile --ignore-engines 
  yarn start

image


๐Ÿ› ๏ธETH.Build An Educational Sandbox For Web3... And Much More.

๐Ÿ‘‰Drag-and-Drop Programming ๐ŸงฉOpen Source Building Blocks ๐ŸงVisually Understand How Ethereum Works


Hash Function Think of it like a fingerprint of any given input data. Input can be any size, output is always the same size (64 hex chars). Deterministic, you will always get the same hash for a specific input. One directional, given a hash it is impossible to guess the seed.

Key Pair Consists of a public key derived from a private key. Your address where you send value is derived from your public key. Can be used to sign a message and anyone can recover the signer's address. Anyone can generate an Ethereum account by just generating a random private key.

Look Ahead: Transactions Users can sign messages that go on-chain to send and receive value. No decimals! Amounts are integers, in Wei. 1 ETH is 10^18 Wei. You can generate accounts by just randomly generating private keys.

Side Quest: Encryption Asymmetric encryption with Ethereum key pairs. A small amount of data can be encrypted with a public key. The private key is used to decrypt the data. Not the best way to encrypt data!

Distributed Ledger Once we have key pairs and we can sign messages, our messages can be objects with to, from, value, etc. A ledger keeps track of everyone's balance and new transactions are added to it. Everyone keeps a copy of the same ledger. Need a 'nonce' to prevent replay attacks. Problems with network topology and consensus...

Byzantine Generals Coordination problem arises without a centralized authority. Network (communication) is public and untrusted. Generals prove their ability to wage war to other generals in messages. Proof of work!

Blockchain Proof of work is brute forcing a one-way hash function. Miners with special hardware work to secure blocks of transactions. Each block references the previous block to make a chain. Longest chain wins and your weird uncle shows up to help with security.

Transactions Send value by signing an object with the details like 'to', 'value', 'data'. 'From' address is cryptographically recovered from the signature. No decimals! Amounts are integers, in Wei. 1 ETH is 10^18 Wei. Miners are incentivized with a fee to package transactions into blocks. This fee is called the gas price and you 'bid' to get mined.

Smart Contracts Send 'machine code' as data in a transaction without a 'to' address. Deployed code has an address just like an "externally owned account" with a private key. Reading data is cheap and can come from any node on the network. Storage and execution are relatively expensive. All nodes have to run and store everything. Call a function on a contract by sending it a transaction with the function args in the data.

image

eth.build's People

Contributors

aragar199 avatar austintgriffith avatar bobface avatar changoman avatar christophsiegenthaler avatar dghelm avatar grahamtallen avatar iamonuwa avatar joaoaguiam avatar kenrogers avatar layer8crypto avatar rmbishop avatar sebastiantf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eth.build's Issues

"Save" fails

On Firefox. I loaded the one you built for SmokeSignal, then posted to SmokeSignal, then rearranged it a bit. Much to my dismay I couldn't seem to save it at all! Clicking save has no visual effect at all.

Console output upon clicking save:

1716578f597 0ms Starting document clone 2.3ee5998b.chunk.js:1:6701788
1716578f597 539ms Document cloned, using computed rendering 2.3ee5998b.chunk.js:1:6701788
1716578f597 539ms Starting DOM parsing 2.3ee5998b.chunk.js:1:6701788
1716578f597 595ms Added image data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22width%3A%2024px%3B%20height%3A%2024px%3B%20opacity%3A%200.95%3B%22%20viewBox%3D%220%200%2024%2024%22%20class%3D%22%22%20title%3D%22Scan%22%3E%3Cpath%20fill%3D%22%23 2.3ee5998b.chunk.js:1:6701788
1716578f597 660ms Starting renderer 2.3ee5998b.chunk.js:1:6701788
NS_ERROR_FAILURE 2.3ee5998b.chunk.js:1

Features

Both.a clear and a back might be helpful? I wanted to dive in, found select all then delete. A new could be useful. Ask for save.

Also a back/undo. I realize these are "features" its just 2 things I tried to do or look for and didn't find.

Everything else is incredible, thank you very much for this useful tool!! REALLY. THANK YOU!

iphone localstorage is weird

if you make changes on an iphone and reload, the changes are gone

but if you save, somehow that becomes what is loaded?

something is strange with iphone and localstorage

Implement Quadratic Funding ETH.BUILD circuit

The objective of this ticket is to build a quadratic funding ETH.Build circuit. You basically need to follow this formula:

Screen Shot 2020-06-18 at 11 46 57 AM

which basically in plain english is

The amount received by the project is (proportional to) the square of the sum of the square roots of contributions received

The circuit would basically need to implement this formula.

String Functions

would be cool to have String Search (returns index of) and String Replace.

Fix saving and loading on the iPhone

Something is strange with iphone and localstorage.

Steps to reproduce:

  1. Grab an iphone.
  2. Open eth.build in Safari.
  3. Do any change like moving blocks around or adding new blocks.
  4. Reload.

Expected result: after reload nothing changes, last state saved and you see the same blocks with the same positioning, including changes you did in step 3.

Actual result: after reloading you land to the initial state of the app โ€“ it contains only default address blocks, all changes made in step 3 are gone.

Fix iPhone double click zooming

Fix iPhone double click zooming โ€“ disable this, so you can't double click on UI element and get stuck all zoomed in.

Steps to reproduce:

  1. Open Safari on iPhone
  2. Go to eth.build
  3. On the bottom left, open 'Components' tab and press 'Chain'.
  4. When component appears on canvas โ€“ click (or double-click) on the input.

Actual result โ€“ you are zoomed in and you can't zoom out.

Expected result โ€“ you are not zoomed in, everything stays the same size.

Ledger Values not showing up

I create an object with a different value but the ledger does not show the changes. It just shows 0 as the value.
image

Cannot listen to ipfs subscribe on the default provided channel

Screen Shot 2021-08-15 at 12 00 45 PM
See screenshot. the default provided channel cannot connect. If there is a better option for most people to have it working out of the box, we should set that one as the default.


index.js:67 Uncaught (in promise) Error: Couldn't listen on any of the servers
    at index.js:67
    at parallel.js:43
    at once.js:13
    at iteratorCallback (eachOf.js:65)
    at onlyOnce.js:13
    at parallel.js:40
    at index.js:59
    at f (once.js:24)```

'Copy' generates wierdly long link that doesn't work

Steps to reproduce:

  1. Open eth.build in any browser
  2. Press on 'Save'
  3. Press on 'Share'
  4. Observe the nice short link. If this link is copied and opened in other browser, it lands on the same eth.build canvas as the saved one.
  5. [back in the original eth.build tab] Press anywhere in space for the pop-up to dissapear.
  6. Press 'Save'
  7. Press 'Copy'

Actual Result โ€“ the. links in 'Copy' and 'Share' are different. More than that, the link in 'Copy' is superlong and contains a lot of weird data. When pasted into browser it takes couple seconds to process the link itself and then results in 494 Error โ€“ The request could not be satisfied.

Expected Result โ€“ links are the same. When link from 'Copy' is pasted to browser, it leads user to the original saved eth.build canvas.

Migrate eth.build backup feature to use IDX

Prize

1000 DAI (500 each from 3Box Labs and Eth.Build)

Description

Eth.Build currently uses 3Box to backup user sessions. This bounty is to work with Austin Griffith to replicate the backup functionality using IDX for identity and authentication and a storage solution like Ceramic, OrbitDB, Textile ThreadsDB or SkyDB.

Submission Requirements

  • Should replicate both the "save to 3Box" and "load from 3Box" functionality currently found on eth.build
  • Should be a fully functional demo and ready to merge into Eth.Build pending production-readiness of IDX
  • Must be open source & contributed to Eth.Build
  • Should ensure that saved data will be persisted (e..g, on a Textile Bucket or SkyDB network)
  • Submission should include some documentation of the design decisions and process to migrate, so others who will migrate from 3Box to IDX can use as a reference

Judging Criteria

For this prize, we will be evaluating submissions based on:

  • Functionality and implementation cleanliness
  • Proper use of IDX
  • Demo, tutorial or other supporting material that makes migration from 3Box to IDX easier for others

About IDX

IDXย is a new cross-ecosystem decentralized identity and user data management protocol that provides for a single, unified digital identity system that works with all Web3 platforms, blockchains, and storage technologies. IDX is built on Ceramic, a peer-to-peer dataweb for publishing, linking, and querying verifiable information on the open web.

IDX provides a flexible identity infrastructure for developers to use when building decentralized applications. It can be used to store profiles and metadata, link multiple blockchain and social accounts to a single identity, read and write user verifications, and manage data on IPFS, OrbitDB, Textile, SkyDB or any other platform. This decentralized, unified, and cross-platform identity infrastructure helps Web3 projects build faster and more simply. It is also the key to realizing the vision of giving users ultimate control and portability of their information across applications and networks by breaking down information silos and putting users at the center of the web.

With IDX, every user gets a cross-platform decentralized identifier (DID) and an identity index document to which developers can attach various pieces of data relevant to their experience. Since IDX identities are public and permissionless, any developer can openly discover, query, and import data from an identity into their application, creating a rich ecosystem of information around each user.

Resources

IDX Website: https://idx.xyz
IDX Docs: https://idx.xyz/docs
IDX and Ceramic Tutorials: https://blog.ceramic.network/tag/tutorials/

Ceramic website: https://www.ceramic.network
Dev Chat: chat.idx.xyz

Enrich Request node

Would be awesome to make the Request node more complete with these features:

  • Add headers string field
  • Support POST, PUT, DELETE methods
  • Add body for POST requests

Add Charts Display Components

Create blocks for different charts:
Line, Area, Column, Bar, Pie/Donut, Scatter. (Any additional ones would be nice to have).

They should be added to Display components folder.
Component should take in a data array and draw a graph depending on the Component type (Pie component draws Pie digram).

Create Wallet Component

Reference: Austin created Wallet module in this video: https://www.youtube.com/watch?v=E2cU3bpa0F0&feature=youtu.be
You can check the Wallet Module at eth.build working already.

What needs to be done:
Wallet Module needs to be redone into Component that would behave like Metamask Component.

Wallet Component has to have:
Inputs: Blockchain (optional) and Private Key(optional).
Outputs: Blockchain, Address, Balance, tx, Receipt, Contract; send() and sign() functions (Check Metamask module for example code here).

You can use https://www.npmjs.com/package/burner-provider package for your convenience.

add `chainId` in transaction object

Hi, I was trying to use eth.build on Polygon testnet (mumbai) via Alchemy

getting error only replay-protected (EIP-155) transactions allowed over RPC on "Send Tx"

First result in google reveals that chainId should be included in transaction

Gas price estimation failed due to network error

Hi Everyone,
Hoping I can get some guidance on this issue. I did a search and couldn't find anything explaining what happened and how to fix it. If this is not the correct place for the issue please let me know where to go so, here it is...

I have some ETH in my Metamask wallet and I am attempting to send it to any one of several exchanges and as soon as I hit the Max button or populate the amount with any number I get the following error in a red box and I'm not sure what to do.

"Gas price estimation failed due to network error."

I tried the different networks to see if is a differnt one than Ethereum Mainnet, but it's not.

Thanks in advance for any help!!

React destory and render issues

When you grab the background and move it quickly, things that are using react to render sometimes stay on the screen when they should be destroyed. This might be an issue in litegraph, but we need to be able to make sure we destory react elements one last time so they go away when they more off screen

Wallet will only handle one transaction

I can only get the wallet module to do one transaction. After that, clicking button connected to Sign input does not send transaction. I then have to open wallet module and click the button attached to transaction Sign input manually. Attaching my setup. Please advise if something I'm doing wrong... or take as a bug report.

eth.build.webloc.txt

Node properties appear in top left of main window under menu and can't be clicked

When i right-click a node then select properties; the results jump to lock to the top-left of the main browser window and thus under the menu overlay. How do i re-dock the properties dialog back to the node?

Tested on Chrome and Edge, Flushed cache and cookies on both. Clean entry screen, take one of your objects pre-displayed and right click the node then select properties. - issues apparent on both browsers.

Fantastic project btw....

features to help users play

Hi Austin,

This is an incredible tool you've built! I would love to use it and evangelize to others, but I am having some trouble getting past small roadblocks that are showing up. Thus, I want to request some aids for Q&A so people can support each other in learning and using it. Two feature ideas:

  1. A wiki, perhaps here on github, where people can add tips, Q&A, etc.

  2. Tie-in to a community help forum. This could be Discord or other forum solution.

Either of these would need a clear link out from eth.build itself, perhaps a little hovering ? in a corner somewhere.

Keep up the great work!

Add a dropdown input for choosing which blockchain to connect to

User story:

I want to use mainnet eth blockchain in my eth.build flow. But I currently have to find a link to paste into a text input block. This is confusing and too hard for me to know what link to use for different options.

proposed:

A new block, in the input tab called Chain. With a drop down that lets users choose between popular chains or insert a link to another one. Something like the select element in html

<select>
   <option>Ethereum Mainnet</option>
   <option>xdai POA Network</option>
   <option>etc etc</option>
   <option>other: opens insert text</option> 
</select>

Key Pair block generates public key that is too long

Unless I am using this incorrectly, I think the public key generated by the Key Pair block is too long. I am attaching a screen shot. I confirmed the address and private key are generated correctly using both python hdwallet and iancoleman.io/bip39 website. The public key has some of the correct key but something else is broken.

Untitled

I cannot connect to my local node

I'm running geth locally with a private blockchain, it's http enabled to localhost on port 8545 but when I use it it doesn't recognize me, or does it query the chain.

For example, I query to test the block number with the blockchain module associating the chain module with localhost and it answers null, but if I change to Ropsten or mainnet it does the query.

error ethbuild

Sign EIP712 typeddata

Would be handy to be to sign (and hash) typed data in eth.build.

Maybe a typedData input on the sign widget that can take the output of an object? Or a separate typedData widget?

What framework does eth.build use for the flow-based UI?

Hi,
I was going through the source code to find my answer but couldn't.
Is eth.build using any external framework for the foundation of all the nodes / blocks / connections etc. or was this developed from scratch?

Thanks,
Jonathan

Configuring IPFS

Hi
The app is great!!!
But I miss some doc about how to link pub/sub node to IPFS.
I guess we have to install a local IPFS node or to link to a public one.
In the meantime, I'm using the socket script you've provided.

Wallet Component does not seem to work properly, built off of 'transactions' example.

There also is an unclear distinction between the wallet component and wallet module.

Screen Shot 2021-09-02 at 9 59 33 PM

https://eth.build/wofCrGxhc3Rfbm9kZV9pZMONATXEgcSDxIVsaW5rxIvEjQEXwqXEh8SJc8OcAB3CisKixIzEjhLCpHR5cGXCq0NyxKp0by9IxINowqNwb3PCksSOw6rDjMK-wqRzaXplwpJ4HsKlZsSCZ3PCgMKlb3LEiXIMwqRtxIhlAMKmxJVwdXRzwpHCg8KkbmFtZcKlxZrFnMSoxKplwq3EhHLElWcsbnVtYmVywqTElMSWw4zDscKnb8WcxZvFncWfxaHFo2XCpGjEtcWpxKvCpsWtxa_CpcW5a8S6w4zDsMOMw7LCqnByb8SrcnRpZcWMwonEpMSZGcaJZcKvRGlzcMSCeS9BZGRyxp5zxLfEucS7BBDDjMOIxYDFgsWExI5AUMWIxYrFjMWOxZDFthHFlMWWxZjFp8aBxaDFosWkwqDGpADFuMSVa8OMw7XGlsaYxprGnMaewoTCq2Jsb2Nrxp1TxrwywqvGqmFjZWhvbMWRwqDCpcacdGxlwqfGrsawxrLCpXZhbHVlw5kqMHgzOGI0OGE2YThlN2I2YzFmOTA2NDU1M2M0ZWEyY2PImjJkM2QyOWZjxKPEpQEdxqTCrEluxoAvQsWcxLFuxrTEusONA3DDjQJOxrvFg8KSxrkyx4FhxYvFjcWPxZHHksWVxInHisizxZzFnseNxoTHkMSpxKvDv8eTxJbDgMW9xb_JksKSyZTHj8akw7_GjseUxZ7DjMO6yaFlyZbFqsKuxbLFtMW2LGJvx67Inm7JpcSWc8OAx5jGmcW2x5tzwoPHu8e9x7_CqGPElMeiIMWkx7Jpx7RlwqbItnTIuMKlY8W-bnQCxqDIrR7GpMKqxqfGqcarL1FSyLrEuwbCmlrJgsa9AcKQxI7CkMmHyYnHhMWRE8eIyY_FmcmRxoHChMaDyaLJl8WXyZrHlcO7xo5hxbVsyIHIg8iFyIfIiciLyI3Ij8iRyJPIlciXyJnIm8idyJ_IocijyKXIp8ipY8m8x5rGnXPCgsKmcXLHpcWDxI4YyaVnaHTDgsisxJkayLBXZWIzyLXHvWFux6vKpMONBGDEjsKkyqnCgsKhMMOMw5LCoTFCyq_Hg8mLxbbEp8mOxZfKtsaAc8KTyarCp2HGr8axc3PGpMaLdMWubmfKvsOMw7bJqsKsW8efx6FrY8aHxJVdzJrGjMyezKDDucmqypNoZceiyaPMoMO6yZ10zJDCkcq5x47HtmLLtcu3xoXKvMKmya_FtXLJuMaQwpHDjMO8y4HLg8KuODQxyJk2MDAxzZfNmsubyb7LncKCzJTMlsayy4XIhMiGyIjIisiMyI7IkMiSyJTIlsiYyJrInMieyKDIojPIpMimyKjIqsKoxpdvdsSMxbbCt8upzLtzOi8vZGFpLsS4YS5uZXR3xY9ry6zEjh_GpMKuVcacbHMvRsaYbSDLsGnLuQVayL_JgcWBxYPMgMyCwqDMhRrMiMmKx4VyGMq0zI7Hi8mTyrrFpceLzJrNh8W2zKDDvMy6zLzJqsKmxb7Mu8WozYXOvM2Jxo_Jp8O9zZzGm8udwoHCqMSJY2ltx71zEs6TASDGpMamxqjHqcasRMeuxIJyxrPEuMi7BkDIvzDKqcmEwr43zq_KscW2G860yZDPgc64yazEq8eSxo_DjMO9z4DJksaCzL_PuMqOz4jNism6z43Jv8edzKbHosekx6bHqMSCx6vHrcevxbbCr2XKlsW2IHRleHQgzLTGscqLyo3Cp8-hbM-jc8qCx75lw4s_Fg_CljNow6AIz5nKs8q8wq_ErsSwxLJLZXkgUM6Hcsu5AsOuzIPLv8yBw4pDU8KZwprMhcyHxYnJiMyJzrEOz7TMj8mfyarCrVvGl2nHvNCZIGvQu8yszYXMrsyfz7vDsMmqwqhn0JXFtmHQmcy3xo_JnM-EzJDMks64x6jFrtGbZdGd0LvMrcycxo3Pis2Mw77JqsaWdcefaWPRuHnRusydZ9CFw4DMk8yVx7nMmNKI0bzJpsKTx5bMocOMw7vQh8-Px5jRmtGrZdC6ecOZQsiDOGY4NzM3x6swOGM2N2HImTE3N2bIjmU2YjJm0qk0MMipyIYwNcinNM20OTbSpWYxMjDSusiIY2TTh820ONKmZs-ZI8iwyLLItE7Fs82Iy7kDwrbIvMKYz6zEvsmG0Y7KsMyKcgHRk8620IDJlceRyr7Rr8mex4zPt86705zFttCFwpHEjgHSmcec0I7Hqsesx67FkcKhI9Cgx7XCptObybDNice80KjCozAuMceex6DQi2XLo2Uyz5kkyLDOmGnOmi9Ub86gZc6iz6bGtsKw06HRhcyCwqrOrc-w06gL06vKt863zL_Fpsq307XUicq-07rPvtOzzL_Pg9Oy1LXNiNO4xI4C07xzz5DPks-Uz5bPmMahxI4iypzTmcWc1J7QmnTTnsKOyLwWz6zEjsOUNdSszrEC1K_PttCB06_RrtS51LHTrtGh0bvMntO4w4zDv9WD0InUksej1JTQjcep0JDUgdCT0JXQmXLQmNWR0J3FtsWlx7PHtcKkVNWR0KfHv82jMzRhQTNGMzU5QTlENjE0MjPIlc2U04o2NtaMQ0XSs820yJLSpETWi8-ZJdOYyrfItci3b8i51KTLusOYy7oQ06PDiNOlx4LOsMWRA9Wez7_JqtCCyZnVotGw0ZXTtMq8yaTRvcSOA9a7zpbPiMmyybTHtcu20ovVg8qB1IvKhMqG0oRryonVvcqM1IbKkMqSypR1ypYAz5knxqTCrcqez58vV9GrzKnLuQdExI7DoNWXAyTDjMOV1ZvFkRXWucq414HFqs-6x5TEjgXNj2VswqDVo8y917nPudKL17_YgdWDwoHUhcWl16d0zKnPmSbXotekyqDYjtep1q0HbMi_w7jVlwppPNe0xbbVlsyNz7XPv8y-1aXXutS3AQTYiNiC1r_XuNWgyrwA2IfEgsuDwqDYitiMwqXYlmjPmSHGpMKwy7DLstSecsu2c8eqxpzWq8u5BgTIv8Oa1KjGksyFw4zCutihctax2KTRlMWdwpnMo8yl1a7Mqc6HbtGgxarMm9KJ07DZm9GZ0bbRnnnZocaK0aLMoNG_zrjCpFvEsdmryo7Zrc-7w7_Mk1vXkWXZtMKt14nZtte8AQLPglvOhnRh2bTZo8Wv2aXOuMKlW2fEg9m92b_Vp9Gjx5TSjM64wqraj8SDUMWux6vaktO2cizagMmb2bnEh82D2p_Uidqi2pTajMy_xrtnbtGt2oED1aPClMmqwqvMnNmF2Ydp1qvMmm9iasy1dNWAAQXPgsWB2q9lZNKR1ajPisS72KvEjgfbhmnbiNuK14LSi8mqxobGiNWm0onXjs26y5zGnsKI1oPQqUN2NFfChcOYwqDYs9qmx6vDgMKk2oZhwqLIg8Kj2pBzw41Zw5jRp9qb2p1lw47DtGEJAM25xpjNvMWRw5k9zoBwzoLOhM-VxJXOjXQuxJVmddmE3JHEsnbLs2XWjcicyJdjzbTTjTfUltOGM2Y1Zs2X1pvIhtSW0qXSm9G20p_SodKj0qXSp9KpZdKr0q3Sr9Kx0rPStdyh0rjSutK80r7SpWLTgdOD04XTh9Kk04rTjGbTjtOQZtOS05TCosSx1oXWh9aJ1ovWjdaP1pHWk9aV1pc11pnWmzXWndafyKAx1qLWpNWKASjLr8uxy7NT0JVkIFR42YrCuMi8w7LUqNGHKdGK0YzZlBfXt8yR25LblNuL2pXEltuQ2ZvQisyozKrZoN6B2KoG25hz3a3asd6DAQnVo8mg2bDGh3No3oHbgwjMk8axx6tpcHTavdq_24HbnceZzZ3Gns2f0o7Ml3PCoNyDzbvNvXLNv8qR3IrOg86FzofOiW_Oi9yPzpByzpLdpirWp8i015rZidatBcOmy7rCiNay1rTRj9a2xbYE3b3Trcq7xarWvdqW3pTXh9uW14Tekt-Yya3XicmzybXXjc-Kybvbnt6oyoDbosqFyofXlcqK1b7Kjt-EybfXnNeez5kp2JPPntiV16jEttiYdsi8wo7XrzHYoNOm0ZDFkcuu2ZfTrNin35PPudiqCNit2IPgoIbJq8eR2LTLgtiA2LffpM-Oxp7Yi9-s2Lrft8-ZFNWN1qjWgdCbyqRkw4zCtNWXASzfjNOnzrEF35HfnOCgiNa-07LVpOCgh9m12pTVqcOx1azUkcyn0IzFg8en1bLUgNCSctCU0JbVuNCZ0JvVu9Cf36zWgNaC2bvCrMmzd8ebZsWuzoZ5z5kc4KCdyLTgoJ_VktatAsK8xI7DguCgpeCgp9mUBuCgrNiFyr3goK_PhdS62KjZrOCgtM-K0pTDucSOBsSODOCgt96G4KC61JbTvtWz4KC_4KGB1bfVueChhdCe15fKjeChidCb26Les86B3rbOhs6IzorOjM6O3r3ev8itLd-C1Y_frsqkyajDjQXKm86oxYTJhcyIwoHCqcqU0KRh3IrbicODz7FyB-Cho9ix35TTsN-X4KGk14PJpsKQ4KCtZcmu2qDXit-gybffoteP36fXk8qI36vXmN-t1qrfr8qVdAzPmc-ryrzCqtWOdNWQ4KCg1KRuyLzDvOChn-CgqOCggcW2COCip-ChqeChpd-W2K_goLHgoI7bm9KSybnCkOChs9Wu4KG14KC80I_goL7FkeChutCX4KGE0Jzgob7YjOCigduC2bvWhc2ly4nNqMuMzavLj82uy5LNscuVzbTLl823yKvdptWWyrzXo9-1Ycas2LvLuQEiw6zfvd-_1rXgoqQP35HgoI3Qgte7xbrDsuCgi-CjmdiE4KKo2IbfmhLYrdi44KCY2LvPmSvGpMKxQ29txLjOjcqWzpvXp9Ckzo7gpIcYyL_Dht22Q0LDjMON2ZHCktmU4KCc4KCE1LDelcy_zKTehtmezKveisaP4KGx0oDZp9Kd2angpYTagRLVo8KX0oDgpYHeiN6a36LgpYfRteClidG54KOc24zJptqXzL_NoNKPzJngpZnSiuCllM643ZB44KWT4KWbyarCqc2BxILNgyjfs8q8wqjck8u32YjgorbJptO5ARPdv27gpa7GpOClsdedY-CltNuXzrjGi92t4KW84KWw4KWy4KaA2rvgpbXJud-j3qfgoJVzwobYjMKm4KSsx7Xgo67Kg8WXxJzWq9ut26_Rq9ux27Pbtdu327nbtdqc0oTbvdu_3IHPmTLgoZbVj-ChmOCik8OI37vgo5DZlAngo5XgoLLgpJNr07Hgoafgo5rQgtqK4KWaybngpbcU4KOg4KC51bDgoLvgobfgo6XVteChguChvOCjqtW84KOs4KGY26Lgo7DLiM2ny4vNqsuOza3Lkc2wy5TNs821y5jIqs-ZNNei4KSlypbGmGzUns-UxbbgpIfChsu6YNmPwozUq-CggOCinOCinsSC4KKhZOCio9OoCs-04KCMzrjFvW5fxpzMtt-Z4KW2xI4V2IjCpjPNmm1z1YPCgsKoxJXVt9SLw40LwrjCpWV21bbEqNeUwqjJs3jgop7Fj8KkIzLgqJ_PmTPgopDgo4ngopLWrQHDgsu6y67gopjJhNaz4KKb4KKdz6LgoqDejuCns-CipA3gprTgo5vgoqngpYUBFeCiq-CkmWXgoq3gpr7EjhbgorDgorLaqd-f14zgpovGkOCmjcm94KaP15DgppffqNeU15bgppLfrsqT4KOBHM-ZMc6W1JvUnUbgpb_gpbTRgRzIvGbZj8Om3brgoIDfjnLGo-CkvNGx4KKw4KW-4KWz4KaK2KrgpbnZsGPHvWzekGvgqYHSjc2h0pDgpaHYqhTgqLzGhNui4KCP35oX4KKw4Ki_4KmJ4KiJ4Ke54KWry7bHq8KpYXJnxbPVtnPCkM-ZNd-0yp_gpITXpt-30YHCisi_wrzgoZ_gpIzfjeCipOChleCpqtim4KGk4Ka2xI7Em9i14KCS4Ke44Ki92LPfouCkneCglMm_4KCX4KK94KCZ2I9o0IXEoBzClsaSxKYAxI4TxZjRouCqvMOxxI4U4Kq_ARIAxazalMWx2qDgqrzDsuCqvuCpgQAA4Kq8w7Xgq4ACxI4Z4KuU4Kq8w7bgq5jEjhrgq4LalOCqvOChrgEc4KuIGgHgprxn4Kq8w7rEjh3gq6gCw7_gqrzDu-CrnwEe4KuczY3gq6Dgq4gfxZjPiOCqvMO9zpTgq4gg4Ku5w77gq4Dgq4gh4Kuq4KuD1arVi-CsiALgq6vCltO6xI4j4KuIJOCrvuCrj9WBxI7grJbEjiED2b7gorPgq4PXhcSOJeCsiAjgq7PEjtmMAeCsicSOJuCrnNe94Kyc4KuIJ-CsrgHgobDgq6bgq4go4KyK4Kuj25DgrJwBxI4o4Kui0ongrJEBCOCsvuCriCngrLMJxI4q4Ky34Kuy4K2CDMSO4KunxI4r4K2Axa_grYIS4KuT4K2S4Ky54K2B4KuA4K2S4KypMdyC4KaI4KW04K2CFMSOMuCriDHgrI_grKHgqLrEjjTgq4gzAOCspwEWxI7gra_EjjEB4K2xF-CttuCriDXgq5TCpmfGmHXcisKQwqbKlG5m25PCgMKn4KiUz6TgporQqsOZwpngrpHgrpHCmg

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.