Skip to content

Instantly share code, notes, and snippets.

@julescarbon
Created November 4, 2015 19:06
Show Gist options
  • Save julescarbon/8f2ef6e1296c67e52d43 to your computer and use it in GitHub Desktop.
Save julescarbon/8f2ef6e1296c67e52d43 to your computer and use it in GitHub Desktop.
rhizome-logo.js
return {
init: q,
render: m,
openPresentation: p,
restoreOriginal: k,
getCompositionCanvas: g,
getLiquifyCanvas: h,
getLiquifyMaskCanvas: i,
getImageSaverCanvas: j,
setAspectRatio: c,
setResolution: b,
setMargin: d,
setCurrentContainer: e,
addRenderTarget: r,
removeRenderTarget: s,
clearRenderTargets: t,
getRenderTargets: u,
processAvatar: l
}
};
RhizomeLogo.Assets = {
SVG: {
r: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE2MHB4IiBoZWlnaHQ9IjE3MnB4IiB2aWV3Qm94PSIwIDAgMTYwIDE3MiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIC0zLjAwMDAwMCkiIGZpbGw9IiMwMDAwMDAiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTczLjE1MywzLjE0IEMxMjMuNDk1LDMuMTQgMTQzLjYzMSwyMS44MzkgMTQzLjYzMSw0NC44NSBDMTQzLjYzMSw3NC4wOTcgMTE4LjcsOTEuMTE3IDkzLjUzLDk1LjQzMiBMMTEzLjY2OCwxMjYuODM2IEMxMzMuNTY0LDE1Ny45OTggMTQ0LjExMSwxNjcuMTA3IDE1OS45MzIsMTcxLjQyMiBDMTU0LjQxOSwxNzMuMzQgMTQ4LjkwNiwxNzQuMjk5IDE0My4xNTIsMTc0LjI5OSBDMTI1LjQxNCwxNzQuMjk5IDEwNi4yMzYsMTY0LjcxMSA4OC40OTYsMTQwLjAyIEw1Ny4zMzMsOTYuNjMxIEw1MC4xNDIsOTYuNjMxIEw1MC4xNDIsMTU0LjE2MiBMNjkuNTU5LDE3MS40MjIgTDAuNTE5LDE3MS40MjIgTDE5LjkzNiwxNTQuMTYyIEwxOS45MzYsMjAuNCBMMC41MTksMy4xNCBMNzMuMTUzLDMuMTQgTDczLjE1MywzLjE0IFogTTYwLjIwOSwxMy4yMDkgTDUwLjE0MSwxMy4yMDkgTDUwLjE0MSw4Ni41NjIgTDY3LjQwMSw4Ni41NjIgQzk0LjczLDg2LjU2MiAxMTIuNzA5LDcyLjg5NyAxMTIuNzA5LDUyLjA0MyBDMTEyLjcwOCwzMi42MjYgOTYuMTY3LDEzLjIwOSA2MC4yMDksMTMuMjA5IEw2MC4yMDksMTMuMjA5IFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",
h: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE3NHB4IiBoZWlnaHQ9IjE2OXB4IiB2aWV3Qm94PSIwIDAgMTc0IDE2OSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE1OC4wMDAwMDAsIC0zLjAwMDAwMCkiIGZpbGw9IiMwMDAwMDAiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTMzMS4xMTcsMTcxLjQyMiBMMjYyLjA3OCwxNzEuNDIyIEwyODEuNDk1LDE1NC4xNjIgTDI4MS40OTUsOTIuMzE0IEwyMDguMTQsOTIuMzE0IEwyMDguMTQsMTU0LjE2MiBMMjI3LjU1NywxNzEuNDIyIEwxNTguNTIsMTcxLjQyMiBMMTc3LjkzNywxNTQuMTYyIEwxNzcuOTM3LDIwLjQgTDE1OC41MiwzLjE0IEwyMjcuNTU5LDMuMTQgTDIwOC4xNDIsMjAuNCBMMjA4LjE0Miw3OS4zNyBMMjgxLjQ5Nyw3OS4zNyBMMjgxLjQ5NywyMC40IEwyNjIuMDgsMy4xNCBMMzMwLjg3OCwzLjE0IEwzMTEuNzAyLDIwLjQgTDMxMS43MDIsMTU0LjE2MiBMMzMxLjExNywxNzEuNDIyIEwzMzEuMTE3LDE3MS40MjIgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==",
i: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjcwcHgiIGhlaWdodD0iMTY5cHgiIHZpZXdCb3g9IjAgMCA3MCAxNjkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjMuMiAoMTIwNDMpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPlNoYXBlPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+CiAgICAgICAgPGcgaWQ9ImxvZ28iIHNrZXRjaDp0eXBlPSJNU0xheWVyR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNDAuMDAwMDAwLCAtMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4KICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zOTAuMzExLDE1NC4xNjIgTDQwOS43MjgsMTcxLjQyMiBMMzQwLjY4OSwxNzEuNDIyIEwzNjAuMTA2LDE1NC4xNjIgTDM2MC4xMDYsMjAuNCBMMzQwLjY4OSwzLjE0IEw0MDkuNzI4LDMuMTQgTDM5MC4zMTEsMjAuNCBMMzkwLjMxMSwxNTQuMTYyIEwzOTAuMzExLDE1NC4xNjIgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==",
z: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjEzOHB4IiBoZWlnaHQ9IjE2OXB4IiB2aWV3Qm94PSIwIDAgMTM4IDE2OSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQxOS4wMDAwMDAsIC0zLjAwMDAwMCkiIGZpbGw9IiMwMDAwMDAiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQzMC4zMzUsMy4xNCBMNTU2LjkwNSwzLjE0IEw0NjIuOTM2LDE1OC40NzggTDUxNC4yMzUsMTU4LjQ3OCBMNTQ4LjI3NiwxMjAuMTIzIEw1NDguMjc2LDE3MS40MjIgTDQxOS4zMDYsMTcxLjQyMiBMNTE0LjQ3NCwxNi4wODUgTDQ2NC4zNzQsMTYuMDg1IEw0MzAuMzMzLDU0LjQ0IEw0MzAuMzMzLDMuMTQgTDQzMC4zMzUsMy4xNCBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",
o: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE2OHB4IiBoZWlnaHQ9IjE3NXB4IiB2aWV3Qm94PSIwIDAgMTY4IDE3NSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU2MC4wMDAwMDAsIDAuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+CiAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNTYwLjI3Niw4Ny4yOCBDNTYwLjI3Niw0NC44NSA1ODkuNTIxLDAuMjYzIDY0My42OTksMC4yNjMgQzY5Ny44NzUsMC4yNjMgNzI3LjExOSw0NC44NSA3MjcuMTE5LDg3LjI4IEM3MjcuMTE5LDEyOS43MTEgNjk3LjYzNSwxNzQuMjk5IDY0My42OTksMTc0LjI5OSBDNTg5Ljc2LDE3NC4yOTkgNTYwLjI3NiwxMjkuNzExIDU2MC4yNzYsODcuMjggTDU2MC4yNzYsODcuMjggWiBNNTk2Ljk1Myw3Ny45MzIgTDU5Ni45NTMsOTYuNjMxIEM1OTYuOTUzLDEyNi44MzYgNjA3Ljc0LDE2NC4yMzEgNjQzLjY5OSwxNjQuMjMxIEM2NzkuNjU0LDE2NC4yMzEgNjkwLjQ0MywxMjYuODM2IDY5MC40NDMsOTYuNjMxIEw2OTAuNDQzLDc3LjkzMiBDNjkwLjQ0Myw0Ny45NjggNjc5LjY1NCwxMC4zMzEgNjQzLjY5OSwxMC4zMzEgQzYwNy43NCwxMC4zMzIgNTk2Ljk1Myw0Ny45NjggNTk2Ljk1Myw3Ny45MzIgTDU5Ni45NTMsNzcuOTMyIFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",
m: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjIyNnB4IiBoZWlnaHQ9IjE3M3B4IiB2aWV3Qm94PSIwIDAgMjI2IDE3MyIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcyNC4wMDAwMDAsIC0zLjAwMDAwMCkiIGZpbGw9IiMwMDAwMDAiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTc0OS40MzQsMTQ5LjEyOCBMNzQ5LjQzNCwyMC40IEw3MzAuMDE2LDMuMTQgTDc4OC4yNjYsMy4xNCBMODQzLjE2MiwxMjAuNjAzIEw4OTcuNTc4LDMuMTQgTDk0OS41OTgsMy4xNCBMOTMwLjE4LDIwLjQgTDkzMC4xOCwxNTQuMTYyIEw5NDkuNTk4LDE3MS40MjIgTDg4MC41NTksMTcxLjQyMiBMODk5Ljk3NywxNTQuMTYyIEw4OTkuOTc3LDMyLjM4NSBMODM0LjI5MywxNzUuNzM2IEw3NjguMTMxLDMxLjQyNiBMNzY4LjEzMSwxNDkuMTI4IEw3OTMuMDYxLDE3MS40MjIgTDcyNC41LDE3MS40MjIgTDc0OS40MzQsMTQ5LjEyOCBMNzQ5LjQzNCwxNDkuMTI4IFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",
e: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjEzOXB4IiBoZWlnaHQ9IjE2OXB4IiB2aWV3Qm94PSIwIDAgMTM5IDE2OSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4yICgxMjA0MykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTk1OS4wMDAwMDAsIC0zLjAwMDAwMCkiIGZpbGw9IiMwMDAwMDAiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwOTcuNDgsMTcxLjQyMiBMOTU5LjE2MiwxNzEuNDIyIEw5NzguNTgsMTU0LjE2MiBMOTc4LjU4LDIwLjQgTDk1OS4xNjIsMy4xNCBMMTA5Ny40OCwzLjE0IEwxMDk3LjQ4LDU0LjQ0IEwxMDYyLjAwMSwxNC42NDYgTDEwMDguNzg0LDE0LjY0NiBMMTAwOC43ODQsNzUuNzc1IEwxMDM4Ljk4Nyw3NS43NzUgTDEwNjAuMDg1LDQ3LjcyOCBMMTA2MC4wODUsMTE5LjY0NSBMMTAzOC45ODcsOTEuNTk3IEwxMDA4Ljc4NCw5MS41OTcgTDEwMDguNzg0LDE1OS45MTYgTDEwNjIuMDAxLDE1OS45MTYgTDEwOTcuNDgsMTIwLjEyMyBMMTA5Ny40OCwxNzEuNDIyIEwxMDk3LjQ4LDE3MS40MjIgWiIgaWQ9IlNoYXBlIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="
},
IMG: {}
}, RhizomeLogo.Letters = function(a, b, c) {
this.container = new PIXI.Container;
for (var d = {}, e = ["r", "h", "i", "z", "o", "m", "e"], f = {
r: 0,
h: 0,
i: 7,
z: 0,
o: 0,
m: 0,
e: 7
}, g = 0, h = 0, i = (a - 2 * b) / e.length, j = 0, k = $rzm.map(e, function(a) {
return c[a]
}), l = 0; l < k.length; l++) {
var m = k[l];
j += m.width
}
j /= e.length;
for (var l = 0; l < e.length; l++) {
var n, o = e[l],
m = k[l],
p = m.width,
q = Math.round(p / j * i),
r = Math.round(q / (m.naturalWidth / m.naturalHeight)),
s = f[o],
t = Math.round(s / j * i);
if (d[o]) n = d[o];
else {
var u = $rzm("<canvas>").get(0),
v = new PIXI.BaseTexture(u),
w = new PIXI.Texture(v);
n = new PIXI.Sprite(w)
}
var u = n.texture.baseTexture.source;
u.width = q, u.height = r;
var x = u.getContext("2d");
x.drawImage(m, 0, 0, q, r), n.position.set(b + g + t, b + h), this.container.addChild(n), n.texture.width = q, n.texture.update(), g += n.texture.width + 2 * t
}
}, RhizomeLogo.Bitmap = function(a, b, c) {
this._margin = a, this._width = b, this._height = c, this.container = new PIXI.Container, this._sprite = null, this._$input = $rzm("<input>").prop({
type: "file",
accept: "image/*"
}).change($rzm.proxy(this.onFileChanged, this)), this.onFileChangedCallback = null
}, RhizomeLogo.Bitmap.prototype.processAvatar = function(a, b, c, d) {
var e = d / 100,
f = Math.round(4 * e) + 1,
g = ["json/avatar/1/" + f + ".json", "json/avatar/2/" + f + ".json", "json/avatar/3/" + f + ".json", "json/avatar/4/" + f + ".json", "json/avatar/5/" + f + ".json"];
this.process(g, a, b, c)
}, RhizomeLogo.Bitmap.prototype.processImage = function(a, b, c, d) {
var e = ["json/image/1.json", "json/image/2.json", "json/image/3.json", "json/image/4.json", "json/image/5.json"];
this.process(e, a, b, c, d)
}, RhizomeLogo.Bitmap.prototype.process = function(a, b, c, d, e) {
var f = [],
g = e || 0,
h = $rzm.proxy(function(b) {
this.updateImage(b, $rzm.proxy(function() {
d.uploadFromServer(a[g], 100)
}, this))
}, this);
d.setWorkerCompleteCallback($rzm.proxy(function() {
var d = $rzm("<canvas>").get(0);
RhizomeLogo.addRenderTarget(d, !0), RhizomeLogo.render(!0), RhizomeLogo.clearRenderTargets();
var i = $rzm("<img>").prop("src", d.toDataURL()).get(0);
f.push(i), g++, g === a.length || e ? c(f) : h(b)
}, this)), h(b)
}, RhizomeLogo.Bitmap.prototype["import"] = function() {
this._$input.click()
}, RhizomeLogo.Bitmap.prototype.updateImage = function(a, b) {
this._sprite && (this.container.removeChild(this._sprite), this._sprite.destroy(!0, !0)), this._sprite = PIXI.Sprite.fromImage(a), this.container.addChild(this._sprite), this._sprite.texture.baseTexture.on("loaded", $rzm.proxy(function() {
var a = this._sprite.width,
c = this._sprite.width / this._sprite.height,
d = (this._width || a) + 2 * this._margin,
e = (this._height || a / c) + 2 * this._margin;
this._sprite.position.x = (d - this._sprite.width) / 2, this._sprite.position.y = (e - this._sprite.height) / 2, RhizomeLogo.setMargin(this._margin), RhizomeLogo.setCurrentContainer(this.container), RhizomeLogo.setResolution(d), RhizomeLogo.setAspectRatio(c), b && b.call()
}, this))
}, RhizomeLogo.Bitmap.prototype.onFileChanged = function(a) {
var b = a.target.files[0];
if (b) {
var c = new FileReader;
c.onload = $rzm.proxy(function() {
this.updateImage(c.result), this.onFileChangedCallback && this.onFileChangedCallback()
}, this), c.readAsDataURL(b)
}
}, RhizomeLogo.Liquify = function(a, b, c) {
function d(a, b) {
z = a, A = z.getContext("2d"), f(z.width, z.height), texture = b, N = i()
}
function e(a) {
a = a || {}, D = Math.round(a.brush) || 40, E = a.smudge || 2, F = a.contrast || .9
}
function f() {
B = z.width, C = z.height
}
function g() {
return z
}
function h() {
return O
}
function i() {
var a = A.getImageData(0, 0, B, C);
return O = a.data
}
function j() {
var a = document.createElement("canvas");
a.width = B, a.height = C;
var b = a.getContext("2d");
return b.drawImage(z, 0, 0), a
}
function k(a) {
a && (texture.clear(), A.drawImage(a, 0, 0), texture.baseTexture.update(), q())
}
function l(a, b, c) {
G = a, H = b, I = c
}
function m(a) {
var b = a.clientX,
c = a.clientY,
d = z.getBoundingClientRect(),
e = d.width / B,
f = parseInt((b - d.left) / e),
g = parseInt((c - d.top) / e);
v(J, K, f, g, !0), J = f, K = g;
var h = f / B,
i = g / C;
return {
percentX: h,
percentY: i
}
}
function n(a, b, c, d, e) {
var f = B,
g = C,
h = parseInt(f * c),
i = parseInt(g * d),
j = parseInt(f * a),
k = parseInt(g * b);
return v(j, k, h, i, e), {
x: h,
y: i
}
}
function o(a, b, c) {
var d = B,
e = C,
f = parseInt(d * a),
g = parseInt(e * b);
return liquify(f, g, c), {
x: f,
y: g
}
}
function p(a, b) {
return ~~((1 - F) * a + F * b)
}
function q() {
currentCanvasData = A.getImageData(0, 0, B, C), N = currentCanvasData.data
}
function r(a, b, c, d, e, f, g) {
if (!g) return !1;
for (var h = {
left: 0,
top: 0,
right: e,
bottom: f,
width: e,
height: f
}, i = {
x: a,
y: b,
width: c,
height: d
}, j = new Uint8ClampedArray(c * d * 4), k = i.y * (4 * h.width) + 4 * i.x, l = 0, m = 0; m < i.height; m++) {
for (var n = 0; n < i.width; n++) {
var o = g[k],
p = g[k + 1],
q = g[k + 2],
r = g[k + 3];
j[l] = o, j[l + 1] = p, j[l + 2] = q, j[l + 3] = r, l += 4, k += 4
}
k += 4 * h.width - 4 * i.width
}
return {
width: c,
height: d,
data: j
}
}
function s(a, b, c, d, e, f, g, h, i) {
if (b) {
for (var j = {
left: 0,
top: 0,
right: g,
bottom: h,
width: g,
height: h
}, k = {
x: c,
y: d,
width: f,
height: e
}, l = k.y * (4 * j.width) + 4 * k.x, m = 0, n = 0; n < k.height; n++) {
for (var o = 0; o < k.width; o++) {
var p = a[m],
q = a[m + 1],
r = a[m + 2],
s = a[m + 3];
b[l] = p, b[l + 1] = q, b[l + 2] = r, b[l + 3] = s, m += 4, l += 4
}
l += 4 * j.width - 4 * k.width
}
return i(b)
}
}
function t(a) {
var b = z.getContext("2d").createImageData(B, C);
b.data.set(a), A.putImageData(b, 0, 0), q()
}
function u(a, b, c, d, e, f) {
var g = a - c,
h = b - d;
if (a -= parseInt(D / 2), b -= parseInt(D / 2), !(0 > a || 0 > b || a + D >= B || b + D >= C)) {
var i = r(a, b, D, D, B, C, e),
j = i.width,
k = i.height,
l = i.width / 2,
m = i.height / 2;
g = g > 0 ? ~~Math.min(l, g) : ~~Math.max(-l, g), h = h > 0 ? ~~Math.min(m, h) : ~~Math.max(-m, h);
for (var n = i.data, o = new Uint8ClampedArray(j * k * 4), q = 0, s = 0; k > s; s++)
for (var t = 0; j > t; t++) {
var u = l - t,
v = m - s,
w = Math.sqrt(u * u + v * v),
x = (j - w) / j,
y = (k - w) / k,
z = w > E / 2 ? -g * x * x * x : -g,
A = w > E / 2 ? -h * y * y * y : -h,
F = t + z,
G = s + A;
(0 > F || F > j) && (F = t), (0 > G || G > k) && (G = s);
var H = 4 * ~~F + ~~G * j * 4;
void 0 === n[H] && (H = q), o[q] = p(n[q], n[H]), o[q + 1] = p(n[q + 1], n[H + 1]), o[q + 2] = p(n[q + 2], n[H + 2]), o[q + 3] = p(n[q + 3], n[H + 3]), q += 4
}
return f(o, j, k, a, b)
}
}
function v(a, b, c, d, e) {
u(c, d, a, b, N, function(a, b, c, d, f) {
s(a, N, d, f, b, c, B, C, function(a) {
N = a, e && t(N)
})
})
}
function w(a) {
L = !0, M = performance.now(), G && G(D, E, F)
}
function x(a) {
if (L || a.shiftKey) {
L || w(a);
var b = performance.now();
if (!(1e3 / 30 > b - M)) {
M = b;
var c = m(a);
H && H(c)
}
}
}
function y(a) {
L = !1, I && I()
}
var z, A, B, C, D, E, F, G, H, I, J = 0,
K = 0,
L = !1,
M = 0,
N = null,
O = null;
e(c), d(a, b), $rzm(z).on("mousedown", w), $rzm(z).on("mousemove", x), $rzm(z).on("mouseup", y), $rzm(document).keyup(function(a) {
L && !a.shiftKey && y(a)
}), this.updateSize = f, this.updateCachedCanvas = q, this.updateSource = k, this.cacheCanvas = j, this.getCanvas = g, this.getOriginalCanvasRawData = h, this.updateOriginalCanvasRawData = i, this.applyRawData = t, this.config = e, this.addCallback = l, this.updatePercentageCoords = o, this.batchUpdatePercentageCoords = n
}, RhizomeLogo.LiquifyMask = function(a) {
function b(a, b) {
n.width = a, n.height = b
}
function c(a) {
r = Math.round(a) || 40
}
function d() {
return n
}
function e() {
var a = document.createElement("canvas");
a.width = n.width, a.height = n.height;
var b = a.getContext("2d");
return b.drawImage(n, 0, 0), a
}
function f(a, b) {
return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2))
}
function g(a, b) {
return Math.atan2(b.x - a.x, b.y - a.y)
}
function h(a, b, c) {
q || (q = {
x: a,
y: b
});
for (var d = {
x: a,
y: b
}, e = f(q, d), h = g(q, d), i = r / 2, j = 0; e > j; j += 5) {
a = q.x + Math.sin(h) * j, b = q.y + Math.cos(h) * j;
var k = o.createRadialGradient(a, b, 0, a, b, i);
k.addColorStop(0, "rgba(255,255,255,1)"), k.addColorStop(1, "rgba(255,255,255,0)"), o.fillStyle = k, o.fillRect(a - i, b - i, r, r)
}
q = c ? null : d
}
function i() {
q = null, p = !1, o.fillStyle = "black", o.fillRect(0, 0, n.width, n.height)
}
function j(a) {
a && (i(), o.drawImage(a, 0, 0))
}
function k(a) {
p = !0, q = null
}
function l(a) {
(p || a.shiftKey) && (p = !0, h(a.offsetX, a.offsetY))
}
function m(a) {
p = !1, h(a.offsetX, a.offsetY, !0)
}
var n = $rzm("<canvas>").get(0),
o = (RhizomeLogo.getCompositionCanvas(), n.getContext("2d"));
o.lineJoin = o.lineCap = "round";
var p, q, a = a || n,
r = 40;
i(), $rzm(a).on("mousedown", k), $rzm(a).on("mousemove", l), $rzm(a).on("mouseup", m), $rzm(document).keyup(function(a) {
p && !a.shiftKey && m(a)
}), this.resize = b, this.setSize = c, this.getCanvas = d, this.cacheCanvas = e, this.reset = i, this.updateSource = j, this.draw = h
}, ColorFilter.prototype = Object.create(PIXI.AbstractFilter.prototype), ColorFilter.prototype.constructor = ColorFilter, ColorFilter.prototype.applyFilter = function(a, b, c) {
var d = a.filterManager;
d.calculateMappedMatrix(b.frame, this.maskSprite, this.maskMatrix), this.uniforms.otherMatrix.value = this.maskMatrix.toArray(!0);
var e = this.getShader(a);
d.applyFilter(e, b, c)
}, RippleFilter.prototype = Object.create(PIXI.AbstractFilter.prototype), RippleFilter.prototype.constructor = RippleFilter, RippleFilter.prototype.setCustomTime = function(a) {
this.customTime = a
}, RippleFilter.prototype.applyFilter = function(a, b, c) {
var d = a.filterManager;
d.calculateMappedMatrix(b.frame, this.maskSprite, this.maskMatrix), this.uniforms.otherMatrix.value = this.maskMatrix.toArray(!0), this.uniforms.time.value = ($rzm.isNumeric(this.customTime) ? this.customTime : $rzm.now() - this.startTime) / 1e3, this.uniforms.aspectRatio.value = a.width / a.height;
var e = this.getShader(a);
d.applyFilter(e, b, c)
}, RhizomeLogo.Timeline = function(a, b, c, d) {
function e(c, d, e) {
return D.push(a.cacheCanvas()), D.length > C && D.shift(), E.push(b.cacheCanvas()), E.length > C && E.shift(), B = {
brush: c,
smudge: d,
contrast: e,
coords: []
}
}
function f(a) {
a.percentX = parseFloat(a.percentX.toFixed(3)), a.percentY = parseFloat(a.percentY.toFixed(3)), B.coords.push(a)
}
function g() {
return 0 === B.coords.length ? (D.pop(), void E.pop()) : void A.push(B)
}
function h() {
A.pop(), B = null, a.updateSource(D.pop()), b.updateSource(E.pop())
}
function j() {
F._i = 0, F._c = 0, F._l = 0, F._cl = 0, F.numCoords = 0, F.drawnCoords = 0, F.strokeScale = 0, F.progress = 0
}
function k(b, c) {
if (0 !== A.length) {
var d = F.progress,
e = $rzm.isNumeric(b) ? b : 100,
f = H.progressRenderWithRAF,
g = d > e || c || !f;
for (g && j(), F.progress = e, F._l = A.length, F.numCoords = 0, i = 0; i < F._l; i++) {
var h = A[i],
k = h.coords;
F.numCoords += k.length
}
var l = a.getCanvas(),
m = l.width;
switch (strokeScale = x ? m / x : 1, f) {
case !0:
g && RhizomeLogo.restoreOriginal(), o();
break;
case !1:
cancelAnimationFrame(z), n()
}
}
}
function l() {
return d
}
function m(a) {
d = a
}
function n() {
$rzm(".loader").addClass("show");
var c = {
props: F,
strokes: A,
strokeScale: strokeScale,
canvasWidth: a.getCanvas().width,
canvasHeight: a.getCanvas().height,
originalCanvasRawData: a.getOriginalCanvasRawData(),
maskStrokes: []
},
e = new Parallel(c);
e.spawn(function(a) {
var b, c, d, e = a.props,
f = a.strokes,
g = a.strokeScale,
h = a.canvasWidth,
i = a.canvasHeight,
j = a.originalCanvasRawData,
k = a.maskStrokes,
l = function(a, b) {
return ~~((1 - d) * a + d * b)
},
m = function(a, b, c, d, e, f, g) {
for (var h = {
left: 0,
top: 0,
right: e,
bottom: f,
width: e,
height: f
}, i = {
x: a,
y: b,
width: c,
height: d
}, j = new Uint8ClampedArray(c * d * 4), k = i.y * (4 * h.width) + 4 * i.x, l = 0, m = 0; m < i.height; m++) {
for (var n = 0; n < i.width; n++) {
var o = g[k],
p = g[k + 1],
q = g[k + 2],
r = g[k + 3];
j[l] = o, j[l + 1] = p, j[l + 2] = q, j[l + 3] = r, l += 4, k += 4
}
k += 4 * h.width - 4 * i.width
}
return {
width: c,
height: d,
data: j
}
},
n = function(a, b, c, d, e, f, g, h, i) {
for (var j = {
left: 0,
top: 0,
right: g,
bottom: h,
width: g,
height: h
}, k = {
x: c,
y: d,
width: f,
height: e
}, l = k.y * (4 * j.width) + 4 * k.x, m = 0, n = 0; n < k.height; n++) {
for (var o = 0; o < k.width; o++) {
var p = a[m],
q = a[m + 1],
r = a[m + 2],
s = a[m + 3];
b[l] = p, b[l + 1] = q, b[l + 2] = r, b[l + 3] = s, m += 4, l += 4
}
l += 4 * j.width - 4 * k.width
}
return i(b)
},
o = function(a, d, e, f, g, j) {
var k = a - e,
n = d - f;
if (a -= parseInt(b / 2), d -= parseInt(b / 2), !(0 > a || 0 > d || a + b >= h || d + b >= i)) {
var o = m(a, d, b, b, h, i, g),
p = o.width,
q = o.height,
r = o.width / 2,
s = o.height / 2;
k = k > 0 ? ~~Math.min(r, k) : ~~Math.max(-r, k), n = n > 0 ? ~~Math.min(s, n) : ~~Math.max(-s, n);
for (var t = o.data, u = new Uint8ClampedArray(p * q * 4), v = 0, w = 0; q > w; w++)
for (var x = 0; p > x; x++) {
var y = r - x,
z = s - w,
A = Math.sqrt(y * y + z * z),
B = (p - A) / p,
C = (q - A) / q,
D = A > c / 2 ? -k * B * B * B : -k,
E = A > c / 2 ? -n * C * C * C : -n,
F = x + D,
G = w + E;
(0 > F || F > p) && (F = x), (0 > G || G > q) && (G = w);
var H = 4 * ~~F + ~~G * p * 4;
void 0 === t[H] && (H = v), u[v] = l(t[v], t[H]), u[v + 1] = l(t[v + 1], t[H + 1]), u[v + 2] = l(t[v + 2], t[H + 2]), u[v + 3] = l(t[v + 3], t[H + 3]), v += 4
}
return j(u, p, q, a, d)
}
},
p = function(a, b, c, d) {
o(c, d, a, b, j, function(a, b, c, d, e) {
n(a, j, d, e, b, c, h, i, function(a) {
j = a
})
})
},
q = function(a, b, c, d) {
var e = h,
f = i,
g = parseInt(e * c),
j = parseInt(f * d),
k = parseInt(e * a),
l = parseInt(f * b);
return p(k, l, g, j), {
x: g,
y: j
}
};
for (e._i = 0; e._i < e._l; e._i++) {
var r = f[e._i];
b = Math.round(r.brush * g), c = r.smudge * g, d = r.contrast;
for (var s = r.coords, t = s.length, u = 0; t > u; u++) {
if (e.drawnCoords++, e.drawnCoords / e.numCoords * 100 > e.progress) return a;
var v = s[u],
w = lastPercentX = v.percentX,
x = lastPercentY = v.percentY;
u && (lastPercentX = s[u - 1].percentX, lastPercentY = s[u - 1].percentY);
var y = u === t - 1,
z = q(lastPercentX, lastPercentY, w, x);
k.push({
pos: z,
isLast: y,
strokeSize: b
})
}
}
return a
}).then(function(c) {
$rzm(".loader").removeClass("show"), RhizomeLogo.restoreOriginal(), F = c.props, a.applyRawData(c.originalCanvasRawData);
var e, f = c.maskStrokes,
g = f.length;
for (e = 0; g > e; e++) {
var h = f[e];
b.setSize(h.strokeSize), b.draw(h.pos.x, h.pos.y, h.isLast)
}
d()
})
}
function o() {
var c = A[F._i];
F._coords = c.coords, F._cl = F._coords.length;
var d = Math.round(c.brush * strokeScale),
e = c.smudge * strokeScale;
a.config({
brush: d,
smudge: e,
contrast: c.contrast
});
var f = F._coords[F._c],
g = lastPercentX = f.percentX,
h = lastPercentY = f.percentY;
F._c && (lastPercentX = F._coords[F._c - 1].percentX, lastPercentY = F._coords[F._c - 1].percentY);
var i = F._c === F._cl - 1,
j = a.batchUpdatePercentageCoords(lastPercentX, lastPercentY, g, h, !0);
b.setSize(d), b.draw(j.x, j.y, i), F.drawnCoords++, F.drawnCoords / F.numCoords * 100 >= F.progress || (F._c++, F._c >= F._cl && (F._c = 0, F._i++, F._i >= A.length) || (z = requestAnimationFrame(o)))
}
function p() {
var b = function(a) {
return Math.round(a)
},
d = {
width: a.getCanvas().width,
height: a.getCanvas().height,
strokes: A,
colors: [$rzm.map(c.uniforms.color1.value, b), $rzm.map(c.uniforms.color2.value, b), $rzm.map(c.uniforms.color3.value, b), $rzm.map(c.uniforms.color4.value, b), $rzm.map(c.uniforms.color5.value, b), $rzm.map(c.uniforms.color6.value, b), $rzm.map(c.uniforms.color7.value, b)]
};
return d
}
function q(a, b) {
w(!1), A = a.strokes, x = a.width, y = a.height;
var d = a.colors;
c.uniforms.color1.value = d[0], c.uniforms.color2.value = d[1], c.uniforms.color3.value = d[2], c.uniforms.color4.value = d[3], c.uniforms.color5.value = d[4], c.uniforms.color6.value = d[5], c.uniforms.color7.value = d[6];
var e = $rzm.isNumeric(b) ? b : 100;
k(e, !0)
}
function r(a) {
var b = a.target.files[0],
c = new FileReader;
c.onload = function(a) {
var b = a.target.result,
c = JSON.parse(b);
console.log(c), q(c)
}, c.readAsText(b)
}
function s() {
G.click()
}
function t(a, b) {
var c = a && "default" !== a ? a : "php/rhizome-for-client.json";
$rzm.getJSON(c, function(a) {
q(a, b)
})
}
function u() {
var a = JSON.stringify(p()),
b = new Blob([a], {
type: "application/json"
}),
c = URL.createObjectURL(b),
d = document.createElement("a");
d.download = "rhizome-logo-" + (new Date).getTime() + ".json", d.href = c, d.click()
}
function v() {
var a = confirm("Do you want to download a backup of the sequencer on the server?");
a && $rzm("<a>").prop({
download: "rhizome-logo-backup-" + $rzm.now() + ".json",
href: "php/rhizome-for-client.json"
}).get(0).click();
var b = confirm("Your sequence will overwrite the one on the server, proceed?");
b && $rzm.post("php/save.php", {
json: JSON.stringify(p())
}).done(function() {
alert("Successfully downloaded to server!")
}).fail(function() {
alert("Encountered an error while downloading to server.")
})
}
function w(a) {
A = [], B = null, D = [], E = [], RhizomeLogo.restoreOriginal(), a !== !1 && k(0)
}
var x, y, z, A = [],
B = null,
C = 10,
D = [],
E = [],
F = {
_i: 0,
_c: 0,
_l: 0,
_cl: 0,
numCoords: 0,
drawnCoords: 0,
strokeScale: 0,
progress: 0
},
G = $rzm("<input>").prop({
type: "file"
}),
H = this;
this.props = F, this.progressRenderWithRAF = window.isPresentation === !0, this.clearHistory = w, this.upload = s, this.uploadFromServer = t, this.download = u, this.downloadToServer = v, this.undoStroke = h, this.applyStrokes = k, this.setWorkerCompleteCallback = m, this.getWorkerCompleteCallback = l, G.change(r), a.addCallback(e, f, g)
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment