From 6ab293ff0521db7ef00a5ccd1dc7681e0e72d5c9 Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 1 May 2023 03:50:19 +0200 Subject: [PATCH] Evolution Milgram workflow & UX --- API/QRCODE.sh | 172 ++++++++++++++++++++++++++++++++++--- ASTROBOT/PLAYER.refresh.sh | 1 + _12345.sh | 2 +- tools/VOEUX.print.sh | 60 +++++++------ www/G1Milgram/index.html | 58 +++++++------ 5 files changed, 233 insertions(+), 60 deletions(-) diff --git a/API/QRCODE.sh b/API/QRCODE.sh index 99ffab2f..321b809a 100755 --- a/API/QRCODE.sh +++ b/API/QRCODE.sh @@ -12,13 +12,19 @@ MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized start=`date +%s` -echo "PORT=$1 THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 COOKIE=$10" -PORT=$1 THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 COOKIE=$10 +echo "PORT=$1 +THAT=$2 +AND=$3 +THIS=$4 +APPNAME=$5 +WHAT=$6 +OBJ=$7 +VAL=$8 +MOATS=$9 +COOKIE=$10" +PORT="$1" THAT="$2" AND="$3" THIS="$4" APPNAME="$5" WHAT="$6" OBJ="$7" VAL="$8" MOATS="$9" COOKIE="$10" ### transfer variables according to script -QRCODE=$THAT -TYPE=$WHAT - -echo "COOKIE : $COOKIE" +QRCODE="$THAT" HTTPCORS="HTTP/1.1 200 OK Access-Control-Allow-Origin: ${myASTROPORT} @@ -89,11 +95,10 @@ fi ################################################################################ ## QRCODE = PGP ENCRYPTED STRING -# /?qrcode=-----BEGIN%20PGP%20MESSAGE-----~~jA0ECQMC5iqIY7XLnGn_0koBJB5S2Sy1p%2FHr8CKFgWdZ9_j%2Fb2qdOznICGvqGCXY~7Flw6YtiabngvY6biq%2F0vpiFL8t8BSbMZe0GLBU90EMBrhzEiyPnh__bzQ%3D%3D~%3D9UIj~-----END%20PGP%20MESSAGE-----~ +# /?qrcode=-----BEGIN%20PGP%20MESSAGE-----~~jA0ECQMC5iq8 [ ......... ] _Q%3D%3D~%3D9UIj~-----END%20PGP%20MESSAGE-----~ # &pass=coucou&history/read/pay/login=(1|email)&g1pub=_DESTINATAIRE_ ################################################################################ if [[ ${QRCODE:0:5} == "~~~~~" ]]; then - echo ${QRCODE} PASS=$(urldecode ${THIS}) echo "## THIS IS A PGP ENCRYPTED QRCODE LOOK - PASS ${PASS} - $APPNAME" @@ -163,7 +168,7 @@ if [[ ${QRCODE:0:5} == "~~~~~" ]]; then || echo ${WHAT} > ${DESTFILE} cat ${DESTFILE} - echo "

OPERATION

$G1PUB
$CUR - ${WHAT}

${VAL}
$DES + ${WHAT}

OK

" >> ~/.zen/tmp/${MOATS}/disco + echo "

OPERATION

${G1PUB}
$CUR - ${WHAT}

${VAL}
$DES + ${WHAT}

OK

" >> ~/.zen/tmp/${MOATS}/disco fi fi @@ -190,7 +195,7 @@ if [[ ${QRCODE:0:5} == "~~~~~" ]]; then ## history & read # cp ~/.zen/tmp/${MOATS}/secret.key ~/.zen/tmp/ - qrencode -s 6 -o "${HOME}/.zen/tmp/${MOATS}/disco.qr.png" "$G1PUB" + qrencode -s 6 -o "${HOME}/.zen/tmp/${MOATS}/disco.qr.png" "${G1PUB}" QRURL=${myIPFS}/ipfs/$(ipfs add -q ~/.zen/tmp/${MOATS}/disco.qr.png) ONVADIRE="

~ ${CURCOINS} Ğ1

${G1PUB}

" echo "${ONVADIRE}" >> ~/.zen/tmp/${MOATS}/disco @@ -250,6 +255,153 @@ if [[ ${QRCODE:0:5} == "~~~~~" ]]; then fi +################################################################################ +## QRCODE = G1Milgram G1Missive PGP ENCRYPTED STRING +# /?qrcode=@@@@@BEGIN%20PGP%20MESSAGE@@@@@~~jA0ECQM............... +# &pass=YYYYMM&milgram=NEWLINE&email=DESTMAIL +################################################################################ +if [[ ${QRCODE:0:5} == "@@@@@" ]]; then + PASS=$(urldecode ${THIS}) + NEWLINE=$(urldecode ${WHAT}) + DESTMAIL=$(urldecode ${VAL,,}) # lowercase + + echo "## G1MISSIVE - PASS ${PASS} - $APPNAME" + + if [[ ${PASS} != "" ]]; then + + ## Recreate GPG aes file + urldecode ${QRCODE} | tr '_' '+' | tr '-' '\n' | tr '@' '-' > ~/.zen/tmp/${MOATS}/disco.aes + sed -i '$ d' ~/.zen/tmp/${MOATS}/disco.aes + # Decoding + echo "cat ~/.zen/tmp/${MOATS}/disco.aes | gpg -d --passphrase "${PASS}" --batch" + cat ~/.zen/tmp/${MOATS}/disco.aes | gpg -d --passphrase "${PASS}" --batch > ~/.zen/tmp/${MOATS}/decoded + + if [[ ! -s ~/.zen/tmp/${MOATS}/decoded ]]; then + ## COULD BE ONE MONTH OLDER + UPASS=$(date -d "1 month ago" +"%Y%m") + cat ~/.zen/tmp/${MOATS}/disco.aes | gpg -d --passphrase "${UPASS}" --batch > ~/.zen/tmp/${MOATS}/decoded + fi + + # cat ~/.zen/tmp/${MOATS}/disco + ## FORMAT IS "/?salt=${USALT}&pepper=${UPEPPER}" + ## MADE by tools/VOEUX.print.sh WITH SALT="EMAIL G1PUB" PEPPER="G1VoeuName" + DISCO=$(cat ~/.zen/tmp/${MOATS}/decoded | cut -d '?' -f2) + arr=(${DISCO//[=&]/ }) + s=$(urldecode ${arr[0]} | xargs) + salt=$(urldecode ${arr[1]} | xargs) + p=$(urldecode ${arr[2]} | xargs) + pepper=$(urldecode ${arr[3]} | xargs) + + echo "$HTTPCORS" > ~/.zen/tmp/${MOATS}/disco + + if [[ ${salt} != "" && ${pepper} != "" ]]; then + + echo "secret1=$salt" ## CONTAINS "EMAIL ORIGING1PUB" + player=$(echo $salt | cut -d ' ' -f 1) + ORIG1=$(echo $salt | cut -d ' ' -f 2) + + echo "secret2=$pepper" ## CONTAINS "G1VoeuName" + [[ ${pepper:0:2} != "G1" ]] && echo "NO GOOD KEY : $pepper" && exit 1 + VoeuName=$(echo $pepper | cut -c 3-) + + keyname="${player}_${VoeuName}" + echo "KeyName=$keyname" + + ISTHERE=$(ipfs key list -l | grep -w ${player} | cut -d ' ' -f1) + echo "G1MISSIVE : $ISTHERE" >> ~/.zen/tmp/${MOATS}/disco + + # Recreate G1 KEY + ${MY_PATH}/../tools/keygen -t duniter -o ~/.zen/tmp/${MOATS}/secret.key "$salt" "$pepper" + G1PUB=$(cat ~/.zen/tmp/${MOATS}/secret.key | grep 'pub:' | cut -d ' ' -f 2) + ## CHECK ORIG1 amount + echo "${MY_PATH}/../tools/jaklis/jaklis.py balance -p ${ORIG1}" + MCOINS=$(${MY_PATH}/../tools/COINScheck.sh ${ORIG1} | tail -n 1) + echo "MISSIVE : $MCOINS G1" >> ~/.zen/tmp/${MOATS}/disco + + #CONVERT TO IPNS KEY + QNS=$(${MY_PATH}/../tools/g1_to_ipfs.py ${G1PUB}) + ## RETRIEVE IPNS CONTENT + echo "http://127.0.0.1:8080/ipns/$QNS" + if [[ ! -s ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt ]]; then + + avanla=$(ps axf --sort=+utime | grep -w 'ipfs cat /ipns/$QNS' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) + [[ ! $avanla ]] && ipfs cat /ipns/$QNS > ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt & + + echo "
PLEASE RETRY IN 30 SECONDS GETTING MESSAGE FROM IPFS
" >> ~/.zen/tmp/${MOATS}/disco + ( + cat ~/.zen/tmp/${MOATS}/disco | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + echo "BLURP $PORT" && rm -Rf ~/.zen/tmp/${MOATS} + ) & + exit 0 + + fi + echo "

" >> ~/.zen/tmp/${MOATS}/disco + cat ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt >> ~/.zen/tmp/${MOATS}/disco + + [[ ${NEWLINE} == "" || ${NEWLINE} == "undefined" ]] && echo "
NO NEW LINE
" >> ~/.zen/tmp/${MOATS}/disco + [[ ${DESTMAIL} == "" || ${DESTMAIL} == "undefined" ]] && echo "
Missing Destination EMAIL
" >> ~/.zen/tmp/${MOATS}/disco + + ## CHECK VALID EMAIL FORMAT + [[ "${DESTMAIL}" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] \ + && echo "
GOOD $DESTMAIL
" >> ~/.zen/tmp/${MOATS}/disco \ + && GOMAIL=1 + + if [[ $APPNAME == "milgram" && ${GOMAIL} == 1 ]]; then + + ## CREATE NEXT G1Missive ! + NEWIMAGIC=$(${MY_PATH}/../tools/VOEUX.print.sh "${DESTMAIL}" "${VoeuName}" "${MOATS}" "${ORIG1}" | tail -n 1) + + # Create Next G1 & IPNS KEY + DESTG1PUB=$(${MY_PATH}/../tools/keygen"${DESTMAIL} ${ORIG1}" "G1${VoeuName}") + ${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/newsecret.ipfs "${DESTMAIL} ${ORIG1}" "G1${VoeuName}" + + # INSTALL NEXT IPNS KEY ON NODE + IK=$(ipfs key list -l | grep -w "${DESTMAIL}_${VoeuName}" | cut -d ' ' -f 1 ) + [[ ! $IK ]] && ipfs key import ${DESTMAIL}_${VoeuName} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/newsecret.ipfs + + ## ADD NEWLINE TO MESSAGE + if [[ ${NEWLINE} != "" ]]; then + CLINE=$(echo "${NEWLINE}" | detox --inline) + echo "$CLINE" >> ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt ## NB: File could still being into "ipfs cat" process... TODO MAKE BETTER + fi + + echo "UPDATED" >> ~/.zen/tmp/${MOATS}/disco + cat ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt >> ~/.zen/tmp/${MOATS}/disco + echo "
" >> ~/.zen/tmp/${MOATS}/disco + + MILGRAM=$(ipfs add -q ~/.zen/tmp/coucou/${ORIG1}.${VoeuName}.missive.txt) + + ( + ipfs name publish -k ${DESTMAIL}_${VoeuName} /ipfs/${MILGRAM} + echo "${VoeuName} ${PASS} G1Milgram emitted ${DESTMAIL}" + ) & + + fi + + else + + echo "

${PASS} ${UPASS} TOO OLD

" >> ~/.zen/tmp/${MOATS}/disco + echo "
" >> ~/.zen/tmp/${MOATS}/disco + + fi + + else + + echo "
DATA MISSING" >> ~/.zen/tmp/${MOATS}/disco + + fi + + ( + cat ~/.zen/tmp/${MOATS}/disco | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + echo "BLURP $PORT" && rm -Rf ~/.zen/tmp/${MOATS} + ) & + + exit 0 + +fi + + + ################################################################################ ## QRCODE = G1* : MODE G1VOEU : RETURN WISHNS - IPNS App link - or direct tw tag selected json # ~/?qrcode=G1Tag&tw=_IPNS_PLAYER_(&json) diff --git a/ASTROBOT/PLAYER.refresh.sh b/ASTROBOT/PLAYER.refresh.sh index 7db06ee0..3f50daaf 100755 --- a/ASTROBOT/PLAYER.refresh.sh +++ b/ASTROBOT/PLAYER.refresh.sh @@ -27,6 +27,7 @@ for PLAYER in ${PLAYERONE[@]}; do # CLEAN LOST ACCOUNT [[ ! -s ~/.zen/game/players/${PLAYER}/secret.dunikey ]] \ && rm -Rf ~/.zen/game/players/${PLAYER} \ + && mv ~/.zen/game/players/${PLAYER} ~/.zen/game/players/.${PLAYER} 2>/dev/null \ && echo "LOST ${PLAYER} IS OUT" \ && continue diff --git a/_12345.sh b/_12345.sh index d5bb1530..9c6520d8 100755 --- a/_12345.sh +++ b/_12345.sh @@ -136,7 +136,7 @@ while true; do if [[ -d ~/.zen/tmp/swarm/${znod} ]]; then echo "COMPLETING MY SWARM DATA WITH ZNOD=${znod}" - mkdir ~/.zen/tmp/swarm/${znod} + mkdir -p ~/.zen/tmp/swarm/${znod} ipfs --timeout 180s get -o ~/.zen/tmp/swarm/${znod} /ipns/${znod} else echo "____________ KNOW ${znod}" diff --git a/tools/VOEUX.print.sh b/tools/VOEUX.print.sh index ea2f784e..7695951e 100755 --- a/tools/VOEUX.print.sh +++ b/tools/VOEUX.print.sh @@ -10,22 +10,22 @@ MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized PLAYER=$1 VoeuName=$2 MOATS=$3 +G1PUB=$4 UPASS=$(date '+%Y%m') # YYYYMM + [[ ${PLAYER} == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null) [[ ${PLAYER} == "" ]] && echo "PLAYER manquant" && exit 1 -PSEUDO=$(cat ~/.zen/game/players/${PLAYER}/.pseudo 2>/dev/null) + [[ ${G1PUB} == "" ]] && G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub 2>/dev/null) [[ ${G1PUB} == "" ]] && echo "G1PUB manquant" && exit 1 -ASTRONAUTENS=$(ipfs key list -l | grep -w "${G1PUB}" | cut -d ' ' -f 1) -[[ ${ASTRONAUTENS} == "" ]] && echo "ASTRONAUTE manquant" && exit 1 ############################################################ G1Voeu.sh use ############################################################ PRINT G1Milgram (once a month) if [[ ${G1PUB} != "" && ${VoeuName} != "" && -d ~/.zen/tmp/${MOATS} ]]; then ################################################################# - ## MAKING SPECIAL amrzqr => G1Milgram TICKET + ## MAKING SPECIAL amrzqr => G1Milgram TICKET = G1Missive ## LE QRCODE CORRESPOND A LA CLEF DERIVE "${PLAYER} ${G1PUB} :: G1${VoeuName}" avec PASS=YYYYMM SECRET1="${PLAYER} ${G1PUB}" SECRET2="G1${VoeuName}" @@ -47,7 +47,7 @@ ASTRONAUTENS=$(ipfs key list -l | grep -w "${G1PUB}" | cut -d ' ' -f 1) -l H \ -p ~/.zen/tmp/${MOATS}/result.png -c - convert -gravity northwest -pointsize 25 -fill black -draw "text 5,5 \"${PLAYER} - ${UPASS} \"" ~/.zen/tmp/${MOATS}/result_qrcode.png ~/.zen/tmp/${MOATS}/layer1.png + convert -gravity northwest -pointsize 25 -fill black -draw "text 5,5 \"${PLAYER} - ${UPASS} -\"" ~/.zen/tmp/${MOATS}/result_qrcode.png ~/.zen/tmp/${MOATS}/layer1.png convert -gravity southeast -pointsize 25 -fill black -draw "text 5,5 \"${VoeuName}\"" ~/.zen/tmp/${MOATS}/layer1.png ~/.zen/tmp/${MOATS}/START.png IMAGIC=$(ipfs add -Hq ~/.zen/tmp/${MOATS}/START.png | tail -n 1) @@ -93,7 +93,8 @@ select zwish in "${vlist[@]}"; do ;; *) echo "IMPRESSION ${voeu}" - TITLE=$(echo ${zwish} | cut -d ':' -f1) ## Get Voeu title + + VoeuName=$(echo ${zwish} | cut -d ':' -f1) ## Get VoeuName voeu=$(echo ${zwish} | cut -d ':' -f2) ## Get G1PUB part VOEUXNS=$(ipfs key list -l | grep -w ${voeu} | cut -d ' ' -f1) @@ -106,43 +107,52 @@ select zwish in "${vlist[@]}"; do "TW") echo "Changer de Gateway $myIPFS ?" read GW && [[ ! $GW ]] && GW="$myIPFS" - qrencode -s 12 -o "$HOME/.zen/game/world/${TITLE}/${voeu}/QR.WISHLINK.png" "$GW/ipns/$VOEUXNS" - convert $HOME/.zen/game/world/${TITLE}/${voeu}/QR.WISHLINK.png -resize 600 ~/.zen/tmp/${MOATS}/START.png - echo " QR code ${TITLE} : $GW/ipns/$VOEUXNS" + qrencode -s 12 -o "$HOME/.zen/game/world/${VoeuName}/${voeu}/QR.WISHLINK.png" "$GW/ipns/$VOEUXNS" + convert $HOME/.zen/game/world/${VoeuName}/${voeu}/QR.WISHLINK.png -resize 600 ~/.zen/tmp/${MOATS}/START.png + echo " QR code ${VoeuName} : $GW/ipns/$VOEUXNS" break ;; "Ğ1") - qrencode -s 12 -o "$HOME/.zen/game/world/${TITLE}/${voeu}/G1PUB.png" "${voeu}" - convert $HOME/.zen/game/world/${TITLE}/${voeu}/G1PUB.png -resize 600 ~/.zen/tmp/${MOATS}/START.png + qrencode -s 12 -o "$HOME/.zen/game/world/${VoeuName}/${voeu}/G1PUB.png" "${voeu}" + convert $HOME/.zen/game/world/${VoeuName}/${voeu}/G1PUB.png -resize 600 ~/.zen/tmp/${MOATS}/START.png break ;; "Ğ1Milgram") - GW="https://qo-op.com" + + GW="(•‿‿•) SCAN https://astroport.com/scan" # CREATE G1Milgram - IMAGIC=$(${MY_PATH}/VOEUX.print.sh "${PLAYER}" "${TITLE}" "${MOATS}" | tail -n 1) + IMAGIC=$(${MY_PATH}/VOEUX.print.sh "${PLAYER}" "${VoeuName}" "${MOATS}" | tail -n 1) ## EXTRACT TEXT FROM TIDDLER tiddlywiki --load ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html --output ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu \ - --render '.' "${PLAYER}.${TITLE}.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' "${TITLE}" + --render '.' "${PLAYER}.${VoeuName}.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' "${VoeuName}" - cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.${TITLE}.json | jq -r '.[].text' > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.html - - MILGRAM=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.html) + # cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.${VoeuName}.json | jq -r '.[].text' | html2text > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt + ## COULD USE TEXT FROM TIDDLER (TODO) + echo "POUVEZ-VOUS REALISER CE SOUHAIT? Sinon relayez cette missive. SVP." > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt + MILGRAM=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt) xdg-open http://ipfs.localhost:8080/ipfs/${IMAGIC} - # ${TITLE} key - IK=$(ipfs key list -l | grep -w "${PLAYER}_${TITLE}" | cut -d ' ' -f 1 ) - [[ $IK ]] && ipfs key rm ${PLAYER}_${TITLE} - ipfs key import ${PLAYER}_${TITLE} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${TITLE}.ipfskey - IK=$(ipfs key list -l | grep -w "${PLAYER}_${TITLE}" | cut -d ' ' -f 1 ) + # ${VoeuName} key + IK=$(ipfs key list -l | grep -w "${PLAYER}_${VoeuName}" | cut -d ' ' -f 1 ) + [[ $IK ]] && ipfs key rm ${PLAYER}_${VoeuName} + ipfs key import ${PLAYER}_${VoeuName} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${VoeuName}.ipfskey + IK=$(ipfs key list -l | grep -w "${PLAYER}_${VoeuName}" | cut -d ' ' -f 1 ) xdg-open http://ipfs.localhost:8080/ipfs/${MILGRAM} + + echo "$GW" > ~/.zen/tmp/${MOATS}/intro.txt + + ## SEND BY EMAIL ############# + mpack -a -s "♥Box : ${UPASS} Missive ... (•‿‿•)" -d ~/.zen/tmp/${MOATS}/intro.txt ~/.zen/tmp/${MOATS}/START.png ${PLAYER} & + ( - ipfs name publish -k ${PLAYER}_${TITLE} /ipfs/${MILGRAM} - echo "${TITLE} ${UPASS} G1Milgram emitted ${PLAYER}" + ipfs name publish -k ${PLAYER}_${VoeuName} /ipfs/${MILGRAM} + echo "${VoeuName} ${UPASS} G1Milgram emitted ${PLAYER}" + xdg-open http://ipfs.localhost:8080/ipns/${IK} ) & break @@ -155,7 +165,7 @@ select zwish in "${vlist[@]}"; do esac done - convert -gravity northwest -pointsize 40 -fill black -draw "text 50,2 \"${TITLE} ($typ)\"" ~/.zen/tmp/${MOATS}/START.png ~/.zen/tmp/${MOATS}/g1voeu1.png + convert -gravity northeast -pointsize 30 -fill black -draw "text 50,2 \"${VoeuName} ($typ)\"" ~/.zen/tmp/${MOATS}/START.png ~/.zen/tmp/${MOATS}/g1voeu1.png convert -gravity southeast -pointsize 30 -fill black -draw "text 100,2 \"${GW}\"" ~/.zen/tmp/${MOATS}/g1voeu1.png ~/.zen/tmp/${MOATS}/g1voeu.png #~ echo "~/.zen/tmp/${MOATS}/g1voeu.png READY ?" diff --git a/www/G1Milgram/index.html b/www/G1Milgram/index.html index 585f9b0a..8a8347e2 100644 --- a/www/G1Milgram/index.html +++ b/www/G1Milgram/index.html @@ -2,8 +2,8 @@ - - ♥Box - G1Missive - + + - G1Missive - @@ -17,7 +17,7 @@