Mediascapes studio 2: all materials
text:
What | Mapping virtual datastreams in a spatio-temporal context
Why | Visualizing the hidden structure of a hyper-reality by showing the
connections and energy flows in a system-matrix.
The project looks at the interrelated and intertwined connections of physical and
virtual environments. It attempts to emphasize the fortified relationship human beings
have with animated objects that exist between both environments.The agent represents
the duality of our personality in the virtual environment.
Our immediate environment is a hyper-mixture of data, signs, artificial and natural
phenomenon of a enhanced media based culture. We are merged in this environment
so deeply yet we don’t exercise much control over it. The pervasive and invisible
forces of consumerism, political ideologies, social practices and cultural inertias control
the “Mediasphere” we inhabit.
First, we wish to visualize a possible hidden structure of this hyper-reality by
showing the connections and energy flows in a system-matrix that is based on input
from the participant. Then we hope to translate the data to a spatial condition that is
particular to the activities of the participant. Based on the inputs, the user can then
explore and map a spatial cartography of their current thoughts. This cartography then
becomes a one of a kind phenomenon tailored to the individual thoughts and patterns
created by the participant. This allows for a realization and comparison of the relevance
of your thoughts to the quantified data collected by the agent. With knowledge and
awareness about current events and collective thoughts on a global scale, we hope to
create and evolve new tools of empowerment.
By quantifying data referenced from the “Mediasphere” and “Blogosphere” in real
time, we hope to create a qualitative experience individual to the participant. The
Project looks at the role that information systems and data streams can play in the
creation of architectural effects and emergent design processes of discovery and selection.
Presentation:
Video:
Processing sketch(normal and 3D stereo version):


Processing code for visualization:
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
int creatureNum=9;
Creature[] creature = new Creature[creatureNum];
PFont font;
Food[] food = new Food[1000];
int foodNum;
int foodCounter;
int counter=-1;
int convercounter;
PGraphics ff;
Ripple ripple;
PImage maskForCircle;
Ring[] rings = new Ring[5];
//String xyzSendmessage;
void setup() {
myTwitter = new Twitter(“yourTwitterUserName”, “yourTwitterPassword”);
twitterQuery();//create food inside!!!!!!!!!!!!!!!!!!
//talking to max/msp
oscP5 = new OscP5(this,7400);
myRemoteLocation = new NetAddress(“127.0.0.1″,7400);
//myRemoteLocation = new NetAddress(“10.0.1.125″,7400);
for (int i=0; i<creatureNum;i++) {
creature[i] = new Creature();
}
size(850,850,P3D);
//size(screen.width,screen.height,P3D);
ff= createGraphics(width,height,P3D);
ff.smooth();
ff.fill(255, 100);
font = createFont("arial",100,true);
ff.textFont(font);
ff.textAlign(CENTER);
ripple = new Ripple();
frameRate(30);
maskForCircle = loadImage("mask.png");
for (int i=0; i<rings.length; i++) {
// PVector tmp = new PVector(width/2,height/2,-500+i*200);
PVector tmp = new PVector(width/2,height/2,0);
rings[i] = new Ring(tmp, i*200);
}
}
void draw() {
pushMatrix();
counter++;
if (counter ==500) {
counter=0;
twitterQuery();
}
ff.beginDraw();
ff.background(5,60,255);
//background(0);
//display food
// xyzSendmessage= "";
foodCounter=0;
for (int i=0;i<food.length; i++) {
if (food[i]!= null && !food[i].consumed) {
food[i].display();
// String xyzMessage = "X "+(int)food[i].pos.x+",Y "+(int)food[i].pos.y+",Z "+(int)food[i].pos.z+" ";
// xyzSendmessage += xyzMessage;
foodCounter++;
}
}
// if (counter%100==0) {
//send(xyzSendmessage);
////send("0000");
////println("sent: "+xyzSendmessage);
//}
// ff.fill(50);
// ff.rect(0,height-20,width,20);
// ff.fill(255,200,0);
// ff.textSize(12);
// ff.text("There is "+foodCounter+" pieces of food left.",width/2, height-6);
//
//display creature
for (int i=0; i<creatureNum; i++) {
creature[i].move();
//eat!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for (int j =0; j<foodNum; j++) {
float d = PVector.dist(food[j].pos,creature[i].initia);
if (d<50) {
food[j].consumed =true;
creature[i].life++;
hit(food[j].pos.x,food[j].pos.y);
creature[i].speedUp();
creature[i].updateMemory(food[j].message);
}
}
for(int g=i+1; g<creatureNum; g++ ) {
float dd = PVector.dist(creature[g].initia,creature[i].initia);
if (dd<50) {
creature[i].talk();
creature[g].talk();
if(creature[i].talking!=null &&creature[g].talking!=null) {
String conversation=creature[i].talking+ creature[g].talking;
if (!conversation.equals("") &&!conversation.equals(" "))send(conversation);
}
}
}
}
ff.endDraw();
//Pixel processing for ripple effect
loadPixels();
ff.loadPixels();
for (int loc = 0; loc < width * height; loc++) {
pixels[loc] = ripple.col[loc];
}
updatePixels();
ripple.newframe();
popMatrix();
for (int i =0; i<rings.length; i++) {
rings[i].move();
rings[i].display();
}
pushMatrix();
image(maskForCircle,0,0);
popMatrix();
}
void cameraLight() {
//camera(width/2,height/2,850, 450,0,-30, 0,0,-0.5);
/*
// Orange point light on the right
pointLight(255, 255, 255, // Color
200, -150, 0); // Position
// Blue directional light from the left
directionalLight(0, 102, 255, // Color
1, 0, 0); // The x-, y-, z-axis direction
// Yellow spotlight from the front
spotLight(255, 255, 109, // Color
0, 40, 200, // Position
0, -0.5, -0.5, // Direction
PI / 2, 2); // Angle, concentration
*/
}
void send(String _conversation) {
char[] Letters=_conversation.toCharArray();;
String sending ="S ";
convercounter++;
for(int h=0; h<_conversation.length(); h++ ) {
int newTone = int(Letters[h]);
if(h==0) {sending += newTone;
}else { sending += " "+ newTone;}
}
OscMessage talkMessage = new OscMessage("T "+_conversation);
oscP5.send(talkMessage, myRemoteLocation);
OscMessage myMessage = new OscMessage(sending);
oscP5.send(myMessage, myRemoteLocation);
println("Sent: "+sending);
}
class Creature {
int partNum=18;
Leg[] leg = new Leg[partNum];
PVector Target = new PVector();
PVector initia = new PVector();
float speed;
int life,memoryCounter;
String[] memory= new String[2000];
String talking;
Creature() {
float x = random(width);
float y = random(height);
float z = random(-300,300);
float r = random(0.1,1);
PVector initia = new PVector(x,y,z);
for (int g=0; g9.8 && randomNumber 9.9) {
int iWantFood = (int)random(foodNum);
if (food[iWantFood]!= null && !food[iWantFood].consumed)
Target.set(food[iWantFood].pos.x,food[iWantFood].pos.y,food[iWantFood].pos.z);
}
speed +=0.05;//Actually the speed is decresing…by vel = 100/speed
initia.x += (Target.x-initia.x)/speed;
initia.y += (Target.y-initia.y)/speed;
initia.z += (Target.z-initia.z)/speed;
float dForBreath = PVector.dist(Target,initia);
for (int g=0; g21) speed -=10;
}
void updateMemory(String _update) {
String[] newBits = split (_update, ‘ ‘);
for (int i =0; i1998) memoryCounter=0;
}
}
void talk() {
talking =”";
int loopNum = (int)random(6);
for (int i=0; i9.5) {
speed = 5*noise(b)/random(0.1,5);
//if (random(10)>7)
} else {
speed = noise(b)*5;
}
vel.add(random(-0.05,0.05),random(-0.05,0.05),random(-0.05,0.05));
vel.normalize();
vel.mult(speed);
pos.add(vel);
//boundary
if (pos.x>width+50) pos.x=-50;
if (pos.xheight+50) pos.y =-50;
if (pos.y500) pos.z =-500;
if (pos.z<-500) pos.z =500;
//Fish wave the body according to its speed
c += 0.1*speed;
BoWa=sin(c)*PI/15;
}
void drawBody() {
for (g=0;g<letters.length; g++) {
ff.translate(3,0);
//ff.translate(textWidth(letters[g]),0);
ff.rotate(BoWa/30);
ff.fill(255,160);
ff.textSize(6);
ff.text(letters[g],0,0);
ff.stroke(255,50);
}
}
}
//every leg is a strand of three lines
class Leg {
int jointsNum = 10;
int counter,life;
PVector[][] joints = new PVector[jointsNum][3];
PVector initia,driver,target,ankle;
float driverAngle,randomness,rotation,angle,O,Oangle;
float speed =100;
float[] armLength= new float[3];
Leg(float xin, float yin, float zin, float _randomness, int _partNum, int _counter) {
for (int i=0; i<jointsNum; i++) {
for (int g= 0; g<3;g++) {
joints[i][g] = new PVector(0,0,0);
}
}
for (int g= 0; g<3;g++) {
armLength[g] = random(9,12);
}
counter= _counter;
angle = counter*TWO_PI/_partNum;
initia = new PVector(xin,yin,zin);
//driver = new PVector(xin,yin,zin);
//target = new PVector(xin,yin,zin);
//rotation = _rotation;
randomness = _randomness;
}
void drawLeg(PVector _initia, float _speed, float _breath) {
//pushMatrix();
//rotate(rotation);
//driver.add(noise(-0.5,0.5),noise(-0.5,0.5),noise(-0.5,0.5));
speed = _speed;
initia= _initia.get();
//O–;
//if (O0) {
Oangle+=0.1;
O=8*cos(Oangle)+2;
//Problem!!! where are 3D postions of these points???
initia.add(O*cos(angle),O*sin(angle),0);
}
//driverAngle += noise(randomness);
//driver.add(5*cos(driverAngle),5*sin(driverAngle),0);
for (int g= 0; g<3;g++) {
joints[0][g]=initia.get();
}
for (int g= 0; g<3;g++) {
ff.noFill();
//stroke(255, 102, 180);
//strokeWeight(1);
/*
line(initia.x, initia.y, initia.z,
joints[0][g].x,joints[0][g].y,joints[0][g].z);
line(joints[0][g].x,joints[0][g].y,joints[0][g].z,
joints[0][g].x,joints[0][g].y+20,joints[0][g].z);
*/
//stroke(0, 0, 0);
ff.pushMatrix();
ff.stroke(255,50);
ff.point(initia.x, initia.y, initia.z);
//point(joints[0][g].x,joints[0][g].y,joints[0][g].z);
ff.stroke(255,80);
ff.strokeWeight(1);
ff.line(initia.x, initia.y, initia.z, joints[0][g].x,joints[0][g].y,joints[0][g].z);
/*
translate(initia.x, initia.y, initia.z);
rotateZ(angle);
bezier(0, 0, 30,
-10, -30, 30,
O*cos(angle)+10,O*sin(angle)+30,0,
O*cos(angle),O*sin(angle),0);
*/
/*
bezier(initia.x, initia.y, initia.z,
initia.x+100, initia.y+100, initia.z,
joints[0][g].x-100,joints[0][g].y-30,joints[0][g].z,
joints[0][g].x,joints[0][g].y,joints[0][g].z);
*/
ff.popMatrix();
ff.beginShape();
ff.noFill();
ff.stroke(255,50);
ff.strokeWeight(2);
//point(joints[0].x,joints[0].y,joints[0].z);
ff.curveVertex(joints[0][g].x,joints[0][g].y,joints[0][g].z);
//vertex(joints[0].x,joints[0].y,joints[0].z);
for (int i=1; i0.2)
ff.curveVertex(joints[i][g].x+random(-i*0.3,i*0.3),joints[i][g].y+random(-i*0.3,i*0.3),joints[i][g].z);
}
ff.endShape();
}
}
}
class Ring {
PVector startPoint;
float diameter,v;
Ring(PVector _startPoint, float _diameter) {
startPoint = _startPoint;
diameter = _diameter;
}
void move() {
v = 5*diameter*diameter/1000;
diameter+=v;
if (diameter>1500) diameter=10;
// startPoint.z+=20;
// if (startPoint.z>500) startPoint.z =-500;
}
void display() {
stroke(255,100);
noFill();
strokeWeight(12*diameter/1000);
// translate(startPoint.x,startPoint.y,startPoint.z);
ellipse(startPoint.x,startPoint.y,diameter,diameter);
fill(255);
}
}
class Ripple {
int i, a, b;
int oldind, newind, mapind;
short ripplemap[]; // the height map
int col[]; // the actual pixels
int riprad;
int rwidth, rheight;
int ttexture[];
int ssize;
Ripple() {
// constructor
riprad = 3;
rwidth = width >> 1;
rheight = height >> 1;
ssize = width * (height + 2) * 2;
ripplemap = new short[ssize];
col = new int[width * height];
ttexture = new int[width * height];
oldind = width;
newind = width * (height + 3);
}
void newframe() {
// update the height map and the image
i = oldind;
oldind = newind;
newind = i;
i = 0;
mapind = oldind;
for (int y = 0; y < height; y++) {
for (int x = 0; x > 1);
data -= ripplemap[newind + i];
data -= data >> 5;
if (x == 0 || y == 0) // avoid the wraparound effect
ripplemap[newind + i] = 0;
else
ripplemap[newind + i] = data;
// where data = 0 then still, where data > 0 then wave
data = (short)(1024 – data);
// offsets
a = ((x – rwidth) * data / 1024) + rwidth;
b = ((y – rheight) * data / 1024) + rheight;
//bounds check
if (a >= width)
a = width – 1;
if (a = height)
b = height-1;
if (b < 0)
b=0;
col[i] = ff.pixels[a + (b * width)];
mapind++;
i++;
}
}
}
}
void mouseDragged() {
hit(mouseX,mouseY);
foodNum++;
food[foodNum-1] =new Food("New food!!!"," ", mouseX, mouseY,random(-500,500));
}
void hit(float _foodX, float _foodY) {
int foodX =(int)_foodX;
int foodY = (int)_foodY;
for (int j = foodY – ripple.riprad; j < foodY + ripple.riprad; j++) {
for (int k = foodX – ripple.riprad; k = 0 && j = 0 && k < width) {
ripple.ripplemap[ripple.oldind + (j * width) + k] += 512;
}
}
}
// OscMessage myMessage = new OscMessage("A 1000");
// oscP5.send(myMessage, myRemoteLocation);
}
Twitter myTwitter;
String preMessage;
void twitterQuery() {
try {
Query query = new Query("Food for love");
query.setRpp(100);
QueryResult result = myTwitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
foodNum = tweets.size();
for (int i = 0; i < tweets.size(); i++) {
Tweet t = (Tweet) tweets.get(i);
String user = t.getFromUser();
String msg = t.getText();
Date d = t.getCreatedAt();
//delete some part of the content
String ddd = " "+d;
ddd = ddd.substring(5,20)+ " 2010";
String tempMsg= user + " at " + ddd ;
if (counter!=-1 && i==0) {
if (!preMessage.equals(msg)) {
foodNum++;
food[foodNum-1] = new Food(tempMsg,msg,random(width),random(height),random(-500,500));
preMessage = msg;
println("New food added, yeah, thank you!!!!!!!!!!!!!!!!!!!!!!!");
}
}
if (counter==-1) {
food[i] = new Food(tempMsg,msg,random(width),random(height),random(-500,500));
if (i==0) preMessage = msg;
};
}
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
};
}
———-begin_max5_patcher———-
8634.3oc6ck+aiijc9m6EX+efvYARxrdEp6iDf.zy0hA4XC1YP9kEAMjsncq
LxhNxx8r8rHye6gjUQJRaRwhT0iGdpYPa6R9PO9Uuq5Ue0q9a+1ey6t5lj+Z
7SWE8OE8Whd269aoux6xesrW4cEuv6t5g0+0a2s9o7evqtM4gGh2e7pqseyO
s9v90ODm+8V+7wjOFu6wObLI8eaOtKt7G6X7e8X9Oy2m779MQ+mqOb5Ow1M4
emja9e9CXNs1uxsI6RNXDPzJM85SeTdcDdEJ5+t3m9tj8Gua8s4BBs5K9z1e
17hnUnhW+w0Gu8ia2e+GNDe6QyedR12NBqx9nDSy9Dq9avg6uwIIY+yOrc+t
3i43EtpnTBTu+v106tpxuPxyGK9MP4u5+2u82j84zOcs+mZ1r893mN1vbyGW
mbax96uN5Ou9t0w6tN582r8PyyS7KXdpXJASVI4LIhel4EJOapPjOgvQnULN
iy0WGQVXSN6i+oTf60X9yadL8gMd6mhijLDpIvlfKeUinb7yOFadZu5pVQ1y
orSwFscrL6SZc1GyL.7FNg8NN8T7tTwOBGQZTeTpaGitY896u55SedXXFVXT
BkZiFIw6fFc3f1yObSbyFpJT6.y1LmEVb4xvDgzXe5cLg3cEos2E861hi9Wv
HTzwOFuOUkJd2SwsnWo7tsWIlkEdI0FjplQVeOD+zSquugv1nUpnTDqYGTXE
w+nDKWkRY8+yJhN2BHQlGfz4vHp2wHoAbTzbeQb4LBiFpabEztwYZjwUEdI4
EWR.zKtERXR5aTm3BkuM8JfLiSp4kO761kj9mpYfPzNPj9qs9BUj3HiyZIYw
nHsa693z0IDcVW2hyEdavdhJPq7erHMsCzhNhnUqQ3Hq3mAm3RuamYB7yohk
TV.mKUIr28Ew4KOLh1H1P7N1PL1XRTtMVZdR74O1vaQwg4avQs7vFxplSOx6
4VKrfiTN6.myDeWhAM9N1luiPhlcA3aUkA2rJiP6cUFxrUko0reRVuwrbplP
HYGqEafnjtZzJzBnziah2s9yYgzaFlXP.SXpAfjlrCEckc3XpMcyyGOlruYv
f5LXz3CMtZJwl0il8wtTNFgb5RsnWkpt1Zpud2cBlZ7xpnLS4BW.U2oX0TzV
74hfXcTk.EOeU3bwLZgTmas3.Gqt.UTrkSr5zkN0r0k2WXfRT0SyRI+NNr0u
wlWmBIWNpLzUY6y647L680MgYbac2EKFOy1bXTsCSDPRigwoFUJKhMiRi4rA
wnYkDrYfBCRPrBcJSFwypfXsATewujhQ7lAoyDo+os2uOUJGXTMLyTszbzhQ
lQ5Suj9Mm1yqaWuKNJ4SwG9Cq2sKZ8COta6wm2D27R3upQXAuhq4Xk7LXizZ
iI4l8jv+asEBJr43Gii1D+3wOF8OThN+iQI2k+MdHYyy6VeL8gMJ4oa2tK8q
SNsKYYVq2l7797+brF230Ainblw4kYIqZYwJVmy.5sqObXa7gn6ND++9b79a
+bz1mJfv3MQ274n0a1r831j8Q+z1T.e89jTP9PzOs9Sw2kb3glAVRS.qdv.K
0rdVMxtk0lJlPmEHaqYZ76vQMWZVBp+YX3.HUjMFMGcXnYTVFsmhJgz+LTOd
Xataf74sU5K0ZEwL0n70t+t49Z7TTIR+O40M9U9jzfkyLe7UTkTk5zVottwu
JWDfXUDD9jMGwH3vbjSYf9KMN0wHclWUGq.rGNdLSOlLs7ZNVPjJZyvEanog
5RPLCYw0b8oRHLSRE8LF+roy32BXAi+AoJK.TUtvsroBpyJU41foeeKvjDdK
dkhrXfoa+7s6ZKVhZDznHJCO4V.084bPkdDhifDyOnpcFoxnPdtB3Jj4bEvW
LLI7KhHMWYUF97H0.qWn8npgjKFeQoVJMadQgpZghpqflRWFjzkxAcSdJnDG
c4PR2VRIhJARsAgdCElmpfAkpQPNFeFE05b1VZPssTuULsX.4Qlvq5PdNYY0
ZA0+1hBo2HPgZY+Z57zsYcwj+IgZFsUM8N5MRCjaXIwbxHz3kT3aLrbz.KMb
jyp5rjcxPfJsOtI.NFYZpCK8H3DBT3jQGRabFsXhgCLw4rnxbz.K9m2r91SJ
IOdH4XR1Se4a6+N6ea0O8wsGalaAzJkC+t6t+v5M405DaevysYp9gSOwI6K+
oIU9oQqjLMhj8EDZZ93zW9qU4cgTTRUFlKThreGFu32lSR+xW7K2zbCQZsrM
ocZn5P1GasFxt9t0rlNzAUaakMBfr3YlDvzFfaormETJvGqENwXwO+N.zmCU
HvtVFKCYYKoEyzJgzvPECkHDyUBo0JSVdJN9GiZ4TFhAfsr1dDiooZIVBmO0
jzXpQ+Wu+e88qVu8tlW0i2ojNlvLkzUX15D0Rncdb2i6V+4eo49tfCavz0tR
aA2rBszLlq8tUXIeaeZ8mJdF969OxkeCDjS82z2zzoLBRKxRNx7JW8OeEPz3
A1ZYgwlFckDKWP6ASKm7HhrKrZfUJ1zGPrc7hkR9TDXKQgzr7a6AKegq3v.Q
wQJls5MmYOeIftmuE1RywDNOClfADSJTSlgPxYNDvX8kbHf0LK8vJq2qaOyi
Pe4.0xQBB689dCFQq5C01p.m6M0k1AHNPmey4H9zVLl8IGiSeCZFfnCZaj3L
69GYRQC68CMl+q30Cq+w3LjHRfx6RRMCGHGRP4Rxaq.3r8LQLZAbb6bpUkgX
fb5DQxpqEXV0qxZUQ6XRKqbm6eu0rp0JixlSM0j5otzvVF7ce820LNI7UlMY
mqr00OfdmQIydl7aJamTLb6CoKpIyyz4Q1TLn3mLcweKFqWJDVu1rHswJW3F
uduSCa2O82X1t3w01sXgJKZS21WRy4Zh5cuhFhoPZbBYZVQS6OWxKZkZDy77
b74RcQOWn457EmeQsWKwbc9heYsML7rc9hbIOWB8Jc5+IzyxmM1k46fM8Oac
zi5uKIYS5GNDsK4SwQeWzmSdNZ6wnlSL4bGOuW135c8yWBEaYFNHiE9m0jJu
C3OF8vSM1LA5w9GNLrxFY1v+Cpz+0Ws1ad7AK5T.Oo+k1tK9SwGdZapQVk2g
2cU0ddiYKyolar.KY8TUEyLVOsK41eLdS07qd2Uahuqm+cx136S+JHCIup7g
W7itc+iGheJd+w0GsOA0dyW+7tienk4i5+.EWcWM+caFqe2U2eX6lj8YBR8e
2rWu3sLqZO4O27ZRe9Ox90O1zu9wjjc2r9vm19z1aLm54SyKop3qSyjc8w3i
aMBEAc52b6COdXqokofp9qb5VVq5reMKl5eiyWy0W1Bzp85ULfz09FmYASmy
vo0ysnkksBdKsPu1KCaGFQs5k+cmb7X+xqgARwsBoBHgTB9sKjhZCQOsCZfn
kZJpDggVjPZ8PlsehLZu4L4Fm2t.s0Bn80YZzdDz4Nzd+gjzj99kn+3e7O1J
BqbBgu1uXsx1k.c.qoCFqIiJVeyy2cW7gbrNKVZq9INsIh8h4JCAsYjpnMFo
AU0lLtNhODudSjrJwFauIDBgG4Bv0tEbudqaWtdjeY+z+00k87.q2zbs6jBZ
g4R17GuMzqtC2FuUtrjv17byK9nqO8uXuuq9sJNdnYxxUi7yM6J2BNr7dtyk
m1dro81Vo8z+jbmQFzYT3GOjodc2dUcE8HzfOU3s94q.ZmA0IvZq0Fp+ICzb
6LytEamplQ0JLqMzLp0FidmM9mNVDsMXHGsvRz3bAC+heIp8JSHge4IV8apI
JH0kTlmS4Ybd0eJZL0+q5D0mZ+EqpAOkZ+UJJXFIMZqRc4he1OPKSdOk77ga
Kfeaw2hdwSxl3mNtceYsR+Kktxd4O3G2tYyKpJoYSz27Xx18Gsxn8bk3jVWu
Eegqhelp3LT94tJ+hgJ9TEKuZRlcOff0kilGOXZ+7fQQizCVVg.c6IKq1KWz
iFQZNxEl4r7Qf9n0j.27ilbnOY1mEJI+Az9blOB1mLM7SZv9.Hc9AfOOe.PN
+.HmkO.TWk+4I9S5ioMdPNsLdfoH0JIixoYqDAW6U.8AzYCD1E5Ulp0U7JmO
Zd7fo7yCFGwFmGLp6tDzK6j2ZJmgKT9K9FYOJUNz2a9P56W5JW9v5ioKf5lm
OZVoPM1b3BmE5lsCMRVhV+F2uK4l06r7Ko7Ms96WaxRiLvn7oe734iBbh9Xo
pZfnOAh9DH5SfnOAh9DH5SfnOAh9TRzmu8a+1YIQePuAI5SJVmESYNRzG5aN
h9HBD8IPzm.QeBD8IPzm.QeBD8IPzm.QeBD8IPzGeRzmE+NHGnJyRipLAtkM
sTtXwS5k2r7Q5MLIxlxMEOvJg2x7E4MKCedyyMqEN24lTtKFH5yXSzGGtnmu
Th9fBczm.QeV5D8AsREX5y3goAp9Dn5SfpO+ZgpOey27MyRp9PdCR0mTrdt1
Se3u4n5COP0m.UeBT8IP0m.UeBT8IP0m.UeBT8IP0m.Ue7IUeBLkIvTl.SYB
zwHzSeB8zmPO8IzSeB8zmPO8IzSeB8zm.Ued0hYYPS0mhqyv.UeBT8Y4R0GV
nm9DX5SfoOAl9DX5i2Y5yW+0e8rjoOr2fL8IEqmqL8Q9lioOr.SeBL8Ivzm.
SeBL8Ivzm.SeBL8Ivzm.SeBL8Ivzm.SeBL8IzSbB744WOjv5WM8dsPS8IPXj
.EeBM0mPS8Ivzm4ESe.+16BiCM0m.SeV5L8AGX5S316JPzm.QeBD8w2D84q9
puJPzmQhnOoX8rinOr2pD8gFH5SfnOAh9DH5SfnOAh9DH5SfnOAh9DH5SfnO
9jnOAZiDt6wB7rJvljPK8IzReBszmPK8IzReBszmPK8IzReBD84UE3D7auK4
Rni9XJAmshPW.Oeb4uSfmOKQd9vCD8IPzm.QeBD8IPzGOSzmu7K+xvc20HQz
mTrNb2cMVD8gDH5SfnOAh9DH5SfnOAh9DH5SfnOAh9DH5SfnOgN5Sni9DnlU
fxEAlJEXpzRgoRgN5Sni9DX3SfaVgN5SfnOKTh9.9c2EYAzPeHlpKgkjKinO
N82IPzmkGQeHSaC8QgB77wy774sHjF34SfmOKNd9792+9YIOevuA44SJVOW4
4C6MGOevAd9D34SfmOAd9D34SfmOAd9D34SfmOAd9D34Sng9DZnO8mMRU2jx
7QuUnYkcuJGoGrEemIIPTo.QkBDUJzPeBMzmPC8IzPeBMzmesxym3edy5a+k
lXziTbhQO6u+v5M2lrK4.tfsIZEihYYDMgQ0DrHmxIRFGm53rJqbp76RrUno
NSUp8S2TsArazNRlWQGIs3isv7GRyz6A4cpP8EMCaxNIBUKze5EKDuwlcjYc
8Zk7zNjeFRPQ5MInvCFkpWCjZ0D+LHRK09nk5dza7RYpSgjlWSvzUE8JRikh
VaeHUtyeeJoe1M2mqvVnqqDo+m75F+JLDTP6iYJY0EAIhqTW23WgKOSM9T8N
KFPiZ3bm5oWuXBcnybFidJuC590eMcBDZ5zISSGiEpb.iICp5dSUmwGAU8zo
t74LkTO6z0aCwpxmoZ05VCXzuhT.J.Jh24.LHg+vSmSAjc2.BNE7nJt.xD7D
0B6sLzvoSWBdE3UHAOes9EBEP0akJe0aJ6g3XNs9k1PoeeynDCdm.ZhwqMw6
4CfGKcINj5RHkoO5sbzkZAkDi.Joy0kLqQXliR294a20b53D8HfTljwYjkMR
IGA+S7kCRcH8udbzOD88MAV3yX.lk5R9+FzYVrn1kxVy+9BSnfNXj5E7N+DT
IooNSSW5P5+v3z+wxFl8h5zWTmNnQH7Ld5aA5Hry2W2sLh1D9SfKSHdFnk8R
rqJPv5MPzgNjvbxFn7JDZrFG7mO3PoNz2m7P9Yt7zQENqDK2l7rgDtjl.Np2
ANxqAtYpBzoCXy1CG+3l0etG3Fw23FWr7vsG9biFiXuiMnkmw3MM6nB4argw
VdXywO1H3n8M1PWfNw+y+PSPix6PCYAp1jjz3d+5argHVdXyls62GeXUS3iv
63yBzc72822XQT49FavKP2w2kbnwsPw2XyBza720Xk28tA0rEXZak8Ou+w02
9iQO07+2XlONrZeW92E.vDS43x13Wtu2fmKXyde9gahaz.TelHaY8PmN1D7N
bToQ1yTTaGYuKdaWf.RTPBIJ1RDRzPBIR0BDRvHDnXBYIplHfDRDhkHjvAER
Vj9WYPBI7Eo+UJjPBaI5eUS.ERVjtWwPBIzEo6UPCBSWhtWUflqFYI5dUAZF
83kn6UEnq6CuDcup.M6UzRz8pBzrWQKR2qPl8pdQ5cExjWUKRmqPl6pZQ5aE
xTWkKQWqR1HT3UFaQAI7QnvqKKHQLFEdcgokLF0ccgAI3QntqKLHgLB0ccgA
IzQntqKL2qpQntqKLHQNB0ccgAIhQntqKLHgOB0ccgAIrQntqKLHgNB0ccgA
IjQntqKLHAOB0ccgAInQntqKKHgqgutqKLDQAecWWXHhD95ttvPDA70ccVhH
mmSwH+9+Mh7cmNX3SU+zknBRMGUcNi6cVWyP.v3+n6RND0xwEgQ78Att3F2w
bdqQjYzw9r0Ki37Kv0lNWDmV3YeN.ily6f8Bjg5cGU9uEjd2gjGd5yObSxtF
QAue7PJ5mArJsh0YR6opMH5O8X79uO448a9pTY3PxtrqwGTi9hoNbvP9Se+W
8CaeH9GVOvfgrp3GFffgT+GLbyioxe71OEGIYHTzs6eXcyFcd+jnaQKSue.2
YiQbLU2d5wTo7PxS2l7XKcIU2N642jlnw8GxzOq8DbSxgMwGp0fv3kMbYtTv
j3peUW8PYaeCFiL8IshqCZTMrbSxCq2tuxsINFipcAr8xtllloQj79TVYGft
3qpIPOr9vOV6gAa66ym9P+5kymlnqKPRtPInYxgjwQZU0u5x5gZOtde7IknO
s9T26d8yGS9X7tG+vwjG+P8erZsXlSQjZYJOqMYWuCYKzHrVT8q5Zd9z0md1
rKgtBqvJRpRiTshJR+eRWlNOjro1sndKW3f4R6odAdpVHJWPkDNSWswd+BD2
71W+xaxNC7xFOew7vquDMv0u7BZqc4Sp2Y5anWy+x9LuNum+KE4WXCLJpbz4
zb7tbytL4lRjdVtoZfwalIgKT4nQUtYWlbWh29Rtew8jPaWkWz9J09ATER2T
FT8U7DTUFNJLGacBlUNZTE7WZj1WAW6a41QuFuTYerzGd4DcahGeVqtJoCcV
Wl20.E1ocoxWS6uThZ6xISzaA258RKMRrtbjm755lBACU6JVxYutJrHO5roY
MlMvS3M1MwF2WwNM9RtDKzJyZ+XXiFi2TUXH2LAk8UUgZPbg1jOotbznZaJz
C11L+hjUPYki7jf6ThEDR+kaqoYtlBmSJGMp.NevwtQ4ovojrxQdRvcyYHp2
BN1dC.JwlUhR3xxgdRzcK7MF2eQ2TGaay8GyDjxgiJpKXCE0SWsd90Up8IIe
nmRZxMu47d6Zo.lU1RnPMwOUlRo3ET2Mu4B7zjPE2sEU8xmhQKeOGm36c1GE
yzZrIZHkIJGNphdVC+7xDchV4YQm63h.HSjNqaH6TsjZtagH3SkEuvorclHC
dNwMviMMhmqAhlHKCJEJ2kLS0H0XtMDunbnmPV2l3o8O6DhzHyHqrSLtOMi8
jVKxcgum95IzZBOkx8rvyT0EpyoyzSfWyMqevf21Gk7gdpXURfpHb5hiM0QQ
PqUSXpuhv5VQgGPM3kBMnEgm4TvsrKa19onagXLhlqjPkzSCGcIGcIRNV6cI
2MWird6cwVsPs4LTKLsIzWLha1UDSUtxG4mcEwMOlroIPJwQDu2p41h.kcrj
yp5IKGbyG4IUEgaBtruBt0Sh0WtUcvitxYJ2Q7oXaQ3tIdpoQ7XZ28PLEhmi
womn87hwc2nYJVygiYFKFZlwZQd46vLS8pyG5o0i3XZNSzxkH8.Y6WZ6bkIx
pYuhRM7Tlvm9qhnt4nG0+JhJMEyUaHPLVRwkC8jRgahd+q.QoBrofXoKYQWN
zOhNR6tn2OElBX1rjILmjuvi7gdRzcD0o8esRJS0+oFcc6RmxG5IQ2QuHSTA
0vtoTf6c3CMmZ1oYKvR0kCGWImeYRdwFH5QA2oDJX8eS3rXrzjedgpszeIni
cJWi9u29VLVRDlE7qKG4E4V6VFbn9mCh13jlWvJAChy8FsDzJnjbECXIWCkj
KUvJ44sIefDcBvft.JIWH.Vx4fI4PahxfRx4PahRgRxY.ahpIfI4PaghgRxo
PagBlWQJvVnJvBEQ.1BUAV3eLvVnJvR4BCrEpzQ+43AmrHMWxsY4lOxOBNGJ
AuHWQfDbgFJAuHUQnPbDXBNAVAGCkfKDvJ3DvDbfMNoPI3bfMNUPI3LXMNcj
e4CQvA13zQRZiFd0JvlxzxNMbLi.M.IWwfUxcrBQW.lqqK4ZeI44bIjp5Rz0
8+zHPTDyQOlYt4UMRd9vwr1VWf1BTXti01Z.RdQBKPI4tVaqgH5DfAcATRdQ
NKfI4f4VT.ryEMXgh3PahRgRxY.ah5XssFhjCsEJFJImBsEJXdEo.agp.KTD
AXKTEXg+w.agp.KYQLvVnJvhgh.1BUAVLTDzVnPECUCsAJTgPUPaeBUDTEzl
mPE.UBr0o.7EDAVIK.e8PfI4XnWODXRNA50CAljSgd8PPI4BEzqGBLIWB85g
.SxEPudHvjbNzqGBLImA85g.SxoPudHvjbBzqGBLIGC85g.SxQPudHnjbtF3
0CAlfq.d8PfI3RfWODXBt.30CAkfq.iGtHfY4mBLd3hflkePwCWMzj7CJZ3p
fliePwBWEvT7ywDyG.0PnvR+IAXT7iBK8mDfQpRBvzeBLdagAl9SfwTNLrze
R.F2DQ.abBFaPQvZbxgh+sZXsM4PQMQErllbnXlnBVKSETmcEo.5SzmiA74W
7wGmylliONhLPP2J419lf+DbNT4XIg0Kta2vArg1o6YHSOY6z.O0VJ.RpsBJ
FUQpwdq8BSfQp4RPkZLPRMFTMDDLRMiCoTqgQnofZLp.RnoPJzRXDZhDRgV.
jPCpkHGFgFCpgHPQEA0NDnXhfZF5VuvahZEdt0dqYSSy2l6zzMcZ5wgb2ZbN
Syzpzo.VzoYZU510ayzLspbJopoo+.l6XS3cYCykqzDUZJ1oq5BYtjGQl0qi
701mkK5b+OmioxUTtDyjkxNgqAP1Y92XBiEqjovNldR1wPf6T+6kRKVkJqD0
IXGKf.1I926ujuRjJ4hSRNABPG6+fpb9JTpp9I0EIDPN.opPOAvWWcfGOtr5
NOtrxAbeAHLMsdywk0dte82wk0H4xNk792yTIl5tVH4VJW6aIWzcs.G.o737
pmQYKmq8sn2YnH8PZcPjpftky09Vx6LPjt+k7lPTUwbALJ5cFFROf6REykQd
gjyYfH4cFER2+tTKAgqh4LXLQ6LJjlLfs4VUEyYvXg1YXH8.1maaoqrRNEDK
TR2ghFRph3pXNEDKTRm8bBU+CEklZdULm.hEJoyfnp9uzBLkUEywfXgR5LHp
RN.9bfph4XPrPIcFCUMfVAm4xdoPxQvXg1YLT0PtglnUwbDLVncFCUwFvFdi
pf4ZXLP6LDpZ.M5cgnBjqfw9ryHnp9GAEwoUPbELlmcF.UM31QtUvkfXch6z
uhr+zVRZRMGUO0bjeE7NcqHI8uw0qJkzJYl6YAuSuJRZ+2FHdUDuHwbOK3c5
UQz6v9ZyEeQgfWjWtmE7N8pH5+sy.VUEwKRK2yBdmdUD8eGCQrpHNEDiyNSJ
Wz6P9JMtJfSAw1ryTx6+0itRJqh2DPLM6LgbQuconr2gjn54i6W4tyzwE81G
thiph2XPLL6LnY+uP2UTYU7FAhcYmwLEC3LrQqh2HPrK6LjIu2KUVYH2lUt0
fXV1Y.Sd+2OEykpiUrUvDurSwt2gKkJZEzVAhQYmAK4CkX0VwVBShrc5DT1+
ixqhW0nTBS1IcG0o2VkZstpWPIL52cFlWNfJRfIUgbELof2YhUxATQBhnJlq
8sGbpSrdhNM2ea4usc5vi1e8Ar8BTznOatUnk9hj8NdmPOM2HdNMa26aH77U
sPMG1BAubv3JxnAKxUF3MQtaROz66447E0ZEYLgOQxLZvxrF.Xt6r358MuNt
hlAVwmHYFMbYlC.N2YR989h3UxqnZPX7IRlQCWlw.fycW3z9hyJUUOcH9DIy
nAKy1SYgek4t2wtdeOAiHUTNnPDFzIgFcABMDAB6bET5dizXdE0CFDQBcRnQ
CWnoPDKT1MIz5MTSzUzOXPDMzMoFcARMDwCUc23l5MVyHUzP3PDQzMoFcARM
DwD0ce+h2arlKpngHfHpnaRMZ3RMGh3hcuqV3du7PKe3K.aHhL5nXit.wFjE
I14Jtv8dYhXS0boEs9.9jI1ngK1BeGej5VqNRLMUkwsCaPu8WPw4ZvDB6zo4
Lef+j5t0D38+nfWUps002ihsSmVQNatqIfGtlf.KmLUA7vUEvTgmkatSGwQY
+Wys4f2oU1ylTdUvxG4Ewl3zNpQjShJLwsyz5z3ok3j8Eo2AcUFKJMIOHlBQ
JG4msTvshfqmlyhqash.9zbBqcp0ev6eiZxzZrvHCSEpMzOZpRmcMMjcMuv0
jQt8nqImhtRlFMUpaV+7AhoJTdYGr9BxG4GwV6rX2yJVpL6KCBUROHzqFpvl
OQwkiFSMk9yMNK7yLth0jxQ9wam6hcOKpor1jQ1AWA8pgVh+oIpFFwrSehxQ
9Yhh5b.89EyzN0XJpnxbBFxG4GqFmbfRml7PXtEVZZ5JIo9EbJh9.t0k4xhD
hy2CaIubnm5dcXfjblvnrhPUk77g9Qgvw6eg9WyvBQ0zgDpMbLCpNQqm1skJ
gICk8gBcNyfknSi7jf6VqQcxvU2Zyu8OQOLRmCkxBN4aNRDRuw3MrawyvSzx
mwtwHO7.VipY+BDl.sVR+lOZbEb4kI3o938tjSc24aO2ROCybzlM+M0bPUNb
T8ugnSTlDt025jyZmXH1k5Dy1Hs8nSLja8rxIhkoT2ts.nxAtUhJSdjXa41x
F4IA2s6fj92gyrjESpjlSuptbjmDb2tlClnNDIyMuT8uOfY1SKocKkOMvORM
BHo1jJdlfhpJ0dpZQJfjZaygCJwFJUjBaMfDanzQJbX.iXSfRIw1xIkBVUw1
Wg8HP4FAw.TpwtUJJ4.t14L0xWab+gOMZzka7EH2Rpmka21tLLiN.xtYJfko
SNg4li.W9vQcwoL7PSIUnJZJBxxgdB0cSzmnyRFF6lKu9en14hb8WthTgAj4
i7DeUj.I3LoUvy0HJEb+QJD2bWKlJRW41k3Cen20IRidgnHaOpuTHb75tWNM
slaGuaj5e6no3DdKy2eKI2zh.pOx1mFz1twj2VdkzMUY4zr7JraM4db+aM.V
jjSM8sCqCCpu10Cif2Mwwv8FW4j7sqlaNI.EtnId6hzh3XEN5eoi3ljivHtx
T.bYkwiuviuHgmR49V3kZmTYTCgu21FfA0b5vY4twUdiEWX2ttGvCnM5Ijls
mzrDcrfKJG5GQ2sKChW8DNVN.c71aTMQanti2B18m94kJoByDu8lNLenmDcB
ThdgRpPX6CJrxg945Uys7lGPuez1ENDTpwZyX7kO7URd1Kj9o+efBLF0a
———–end_max5_patcher———–
Max to maya patch:


———-begin_max5_patcher———-
11881.3oc6880jiiibmO2NB+cfWc9IucWC9O.2Y2Mlc8XG1WbquKhw2CWr8F
cvRhcUZFUhxTrpta637m8ijInDkJRJPJBR.MZhcqpgJIJjIRjHyDY9K+O+a+
ad2cOj703c2E7aC9KAu6c+m4ux6JeshW4cUuv6t64nutXcztx23cKRd943MY
28d8eLK9qYk+ge2GJ9ufeJdyxUadL3O+O9+Ln38FsY4tfrjf+bz2h1+gVsr7
ij7vO+ArZ+qt4kmWsYcbV4WDt5U+bxlrcq9OhKeQx8nZu6jWxpd66e4sQYKd
JeB7oz3EY.ow3Eer.EKr3WDpr7Wn6QA+05eIahdt7K4t+X5pn02U9W9+8292
T767e89wiCsHZcAG5+azSIIA6hiRW7TPZ7tWVmsKnQVjz5rHImA7Fd4uvrYk
Ect+K3eYS9Sne7Pt04gBBsfqgwkxWT4bIl8mRWs7w3fcaeJNmiDbfs8GZjwf
rNigTJTITk+ByQyDe4eM9KZlx43IgVmkfKUEwEj4kk7iweNJeKigrE6qoF15
vv34ks7SYQoYA+uKlemimHmHQErHbR3Iah+RNY8VVxx30QeK+6swsKsHXP5G
S.20Q3zRcqTPEKW7Vl.7fx911X3Sb2CQad7t4fIwQMykPVmKIgyb3fENB57x
kd3krrjMMpH4b6ZLmjwHToNToZO0ZJMO5K+OGmklTLiZjlCs9xeXXoNBIGNu
k6rK+7Qa4WwUvpuxwW8oVe0WAK6RAxEV8Oy4HMxiv1mGoJO4PRK+k1ePehGI
suVDLhB6ofyZmalTVxiOtNtQdAcLOEA17fLWOxpbKGu.0HsSWhvQT8nlrBmJ
x543c6hdL9sB0MpVTzKKGw2yC4Xkb.mLJIfEQLvJx644lRq5jOXIw4dxejSC
+QQJ83Rvlc9Sa5DSC1U3TViLIVyLIz3oST.Gmxvv4FXC1GMw7meSibFh0OsP
vgHY.ZX.IGizvL+atvH9zr6R.mpvgMYNo1GbyLH5zvfj.mgIB8K0y0M12tRP
jRIHlTL65me44GhSalYbPH5oB91hj0IovrAcuRh3J06a7egqSHFDFsS4iYoq
1sHZc4eDceXyrWRmJwfvJA151z8C0nRr2aWuCZkSy6UfX6VpqK1hBN0SP0p3
cc1hbZXK4B5JfunbI9RKFF7e622Duhgm.+HQkVSJjJGvzf1XO+tlYOnIHbMX
2m6.QhnkXZQ41OhlxRUOJ39nm6.Z2FWZaPZbw2wWRRetQConLqeKQgPn+UrR
woPyt64iddwoZZuh3y+HqVG+Zb5tUIapOce2cG9d4R9AkfR3hYDEWY09u3b1
5iqSV7KwKqSCuKW15y86wjrMdygOQ467nebxac0lsow6h2jEkom+G8cWbume
pE99wugOGsHt8Odyrz2c2ioqVlroXhb7ms30q9JyURpuS7il8kukMQaa5imk
jr9gnzWWsa0CfEOGVUxEei1r54nr3rUvjhfN7IW871zRMH0eb4xs4Olm1sHM
Y85ieZve50l9SKiec0h3urZY1SfMWn5ygCYTTcgoi1dc7enysYceMjuYmF9n
+Ri5k5ZGWG5mZamGGzfy.cTMb0jlnmpScUu6f9J8+78Cl4dhCNmlN.4yw3+4
U6xRR+VqrXzjyhYRL3.c4tE3l9Nx8my4Bjavd2kydWjE7gzfhSJ99Ol9wMsw
jIgSubrBAL4RI3Pg6xjOuBBbqJHHpoW5UnUPP7dEDGjf2lr9a+zKoEmMh6VR
VN4LbJjFQZIYL3OuWquvbtsXx41xPsxYoyysOuhCV6JN3yEmkAFI55JN5h49
7W+4fMwY2msX684ljuL3GhVtL257c4ZpuGcO9dLgG7CaSRyBj4tvz1Z.tCk2
3gsFvNyZf.txGAX5AQQLbQnHZO6++tnjNoMl7ze.IERtO8AjMjvA9yAjPf.J
suqUgX1jyfC4pZpnULeVCMuUMzX9LvXCqcuvdsocKS.u+Zk6NCVV.APVaGGv
p8UwVZ6hsxYfwR8HCKNNQRaOspOiMA8zoMPkIV0VlSc9jKcL4AkzTqRPsyAt
jSkC0kyDHdvq9Y+ERppyhh4aahG0B+45UaZMDhkyyh2PKLscIujtnZpTIdDb
xbdY7trUa1GV3+xg8gm9NeZ0xkmDA1xklUK2lrZSldV1m0aKR.Ew9zAIfhPY
Y3JfxII.JxyI.hzyI.koyehatGtHpLd8Bf4Jgby4egOWd8B.12kfvlN+aRTy
E1BarNHJxy2BSbzigMVDpIKNbgs.leLrv2Eg3t4lXtwDfuuBfcyU.rwq.Mcj
8ER.U+gBZQm4S6hdMd4mx+9xc68SQYYoqd3kLv6yixDpylvPMmnPs91ebcxC
Qq04c09.nb2Hl+QsFYlJdxzkmfSQsupf7Dj5K4IXiLJh0SSPEDrOEqLbNg3a
oI3szD7VZBdKMAuklf2RSvaoI3szD7VZBdKMAuklf2RSvaoI3szD7VZBdKMA
uklf2RSvaoI3szD7VZB1VRxAoInPbKMA84zDbVuWpa2L3uttaVG81w897Sv6
yPDuOGc79rjx2SSM+OOAY2RU1a4p7upSVb4s5k3WwUrxsjTyVIo1t1gPZh86
NXDlFn+.jjlNOswmcAoQKW8xtFS+Lr8aybLDvDf.MaalPqPEJcbZ5YcgRnR.
cPIPmIILzoAIzR3yMWQFlf4RNAGRB3nhzBqwMKszeBDiW9bx0WfFHtf4gyGf
q2dargnFs9z.m.MbwCXIq8aiMst4fHs9lipvlJYdvliTc+k70ZoBai4Rg0Z+
.bFoVLVEgtW6GXavywOWKa.OhAYezOk.MRQhD58QroJslCQPJDAGsC4zBkw6
aZMaxi4VZMeKsl28VMQmtYiO5o9B5bIDJjQy5roSha9JvbfrjKKWOJGU7eG8
NJ7LbQxKfrAoE15PRFixyzuf7EGAYwLjchZzBG4hWq8LbqiPivfImh6bbVRu
JLc5SSEBXkgNOjC827H7yoIOu6aO+Px51YurQWQ4YSvaDoV+AWRMMEAmAd6Q
9F7FdWW4p8.4cjykkAJXqNjTZbSyyhFcZvIDQeYy1nE+RP6o6CgN4BnTf6Rn
jCIRkgLYG6v9PN4sGzeD2EO4GnyTfoQjvZGnWvp8q7TKMeBFG7u0NmEMD41S
5FOCPCQk1UPuJS1mDv1s3vfiJCn9BrjA9ZnvCp6KJa9ru+RLmhO8lSAd2RkT
uOc0aTc5Q9MQakuOnzX+7pCNqsrbvqzvZsWohtapmUaW3fKg2SmGdOlBkHpt
0fBtpw7PCcYp44rLcbwY0Q6.u1Z2RacwcndlENShp.mli0M.Ru0mLNddDUIU
clTeRTs6RE.yvVoVAvfI.Gt06YsTA57XmShZ2QANQNO6T4DXKJW1RKv0K7d5
2zNeUMCPRhFtjPszBJ8F+86PbclNXQ.NJwUJWWbcnJBXnYRQ.SGdJ40JmkRl
GNK3qDQHtN0vNCX5BVmzezvqWMrjYRCKAA1ScEqGXlzvpugJJx8UDzsSQm.y
aOUvzWjrNIsJIZTRT9Izuuw+E9TB9B7oJKcUYJVB4KR3EDY.3vOJzWroRuvc
qNk++65PyhXFTXCQdgn7aQ+tLgvp2BiTmhhjqkHWkFus.Ih10dFtPszMdcVW
LfhHPBEfuj3vwtpCF7hh7qa.va3kvYYmEogD.KETFHtOjkelnzBH5zw4hz50
eZYTVTMVZcdZw6PGxebcp+c2U8g9K6+XG+AyeK+R72N8t9Jd4WiV+hdlS4Px
wgpEroiW3a+wha+wVc+EC3oRZ+oxCG7bk19SEKDnA+bYs+bYBx.en7NXrB0P
mphtVt3C8oJ6fAHkC8opZ+oNjGW3393vn977p+BGpuOSpwu2nJHN+z+REk3i
djSMp5HrCp5.08iP5DQJuyz3ZYtABKhW8ZbQss0porB4LjsghpjquwJrYjMN
vd.yi4HySw8c6jPZ.1bRvUaaGTeu46vMGXI3tYiTD2CnYf4pn6QX+1MicPRP
Y9pfqtW.2OR.605TcTnFpHDMltHfF5h.SwKBgkTCp7v8Pb7HtNVMB99Q1coi
ZNHQQby8OTy0hURrt39GT+HAWbUPNAafrLIXtVLGE0Cw8PMF0+WEFNITTvGE
4fLFUquxe7HptDFzfjBx9ZhMWIfiB3fXyQbPL0UMqOreqBXOFvr7dawbT2aE
FeVXnvyI.WE8bITy2FKcTRnGmGP8bwnxJ.22WDvNpAUlGqMhi1szMOTatZ.O
6ANhxYWGjfKtUnGMV.ruuUfx8aP8F6nAbpOKAgdNl.6n6iMWUj2uGPdCSi8F
LM9Hrh33belZcTWjCUJRQpwMEXZ7IoQb8toWzxl3ApV.nUx3gLmTn.OvbD.m
K72z7wlLn4LK4wGWG2HePLZ.UKCfsFLCEZLR0BUyxnK5+u+bbVZRPM475jLy
5K86YE.Vy.WelYf16jt6nrcoxYMikyJh04SXcG+kA0+r.OeaQ1sd0xlw7XEZ
z1hnKHobORfNhFTQAEkpQ2D73ux+yqx9zyQ4Gs90fWHzh7uje.2qpS8R6qnT
ipfUJJwh2VZESlXPqLLgHfwBN.UPGwij1+vDDbaPBL.O9x4amR6ndtjMZ6Tz
3DClEJlNXOukSSpkHm050zso1TRFEiq5VsYn93kvYGC7MfoUj8qAK1jqtoQ9
E157q8Wdp1hLJ2I4Wks0bSjvPV27cF.by4pj0bN47zSRzP2FpYFgfZc8tBMh
qqQO9v40PttYSxVXSzP6eDttil.UZ1byl5nubfGOa4PZkIfNX8FEDYVNhZav
tjW1rjzn691uGKPgRIPnaBEnopGKPnfEiZ2GfjigoP8sIKXzy4VWV3WGcYgY
.x5If5SscblhY8NFd0q5.SkkrIub8YbPibHzcDn9Kj0+ckwIocdKc56F.5JJ
WB.7G1Pd6mWmDMGnWyww14sLPhUpTQBVK.RN3AaY9ad9s0Sp30e++UtFTdqb
GQ3jKdQo51FCHdYJ5Era0iaxEeld4qiCu9a4fJqHew3vAEz9UJr0B49TIgs6
yayOf3+pcFz3ClKmsoQ.Qnm.gl2XD3VKhYLdjbZYbqeL+2+WKdD6YKkHBAN+
+QPghBiI0XDw2aiEp3+ikQK5XsvTvPue.EOEvKCJvoY7peN0nWZoEssR6SuU
JDHRtDh7.nMYSPExZ0hsw4PfzQSnLo4IlnvQK3Ao4oYrvQqcSo4kLjzQKoeg
40rQgxVWbUnujfKtJH52dAWjDLu9kDNZE.JXdOILmmJbK43rVxwAALG2b9wM
AALW.P.NehCXNTj+7KLb4m+obKX42BVtsBVNzsGfbmxWCVN0wBVt1ySMDsdK
X4VvEefqdKX4sz.bzBfxaAKumAKGqAHB5sfk2gBNvLEBgbKX48OX4.lGS.L6
9VvxsdvxgJnPeMX2BV99SR0Z2vjesDrbWMRydez9uBBL00P3AuBBR6UPnx8+
Kr3J3ZitFt7N1sfk6yAKui7leDqARnZ+js5I1Tl07Kiy+lhiNzlYNxD2PqeO
.ULCtps5D1N2C.SWAYP3VF9MAXzy41cA7qi6B37Q8F2ZPuISeGNFoy.PMDW6
1g7tS+z2kqEaQVvGRC9RR5ye+GS+3lgz1rrU.JUvM0.sPVndd8udG6ye8mC1
Dmce1hs2WVnl+Pzxk45o1UuhM+gR.UPpXpVCahZz61KmsikAcUdMbjPTF2L3
5U2JaZk3Wl7ikmb2dzolA8IxZwgGJkG2TL+L8sIjcB.OlBbDrSz3llg6slUU
vn3dcw0MbfiIWd8rG6xPjiFsCi8Q0Mi8ZOfDb2j.BMFu+bSDWz7PMI7c9e3s
fz3QAoASFO32gqqDdoCDjlGxcq9w3lw1.r0CQSUADCdwHvSUHZP59KL.bMHn
cNq5a.ZL3obK7L+5H7LUVM1nCU+oh8X4B9AEqJ69sA+Tg6U6GG74jTXaXwK8
v2Bx88s3eEET1SaCxRBxdJNnrGTGmFTHZ+sBdU9aHeacvts46AhCVsq3yEu7
3ryq3nq8MuZRa8Q8Q2q4ykCFJs+JXvqNH0WJRHC2JrDPb0ZMgz3SuevR.2En
POl03jExASkzzfcYQos5kHmYnahiGuUnT0BklwoRpyEiAN2JwXP.WCAkrGpc
MJDL1JFCcFAqViDNePYnL9ddHGqjW.yChLKEtQJ5awfSuHLs+l1XqroOv2RM
qTROvQMNmScpvsRZUXEMOBqJ.dPoTpqKr1Mek29I234gyJ0.dntQC5xpAd44
GZuPE3GKy9TAOeQx5jzJ2bTRDWodei+K7ozqgVb1D6OKc0tEQfOEn6CGdVXK
gapTGHcprGov96cR6qpfMrVUYql95fR26MAiWc8KE97LWR6LW4jybwDfqFF5
823dGJtYh4QwMKTCsNDe19sy3yECO49bQgx2iJB8aetX1ov8nPvEoGxqC20m
KRq1wxlI6X0lYwz.dmmtoUeViCkLFDvw.Abk69bPnNGuc5OFuJCWndQ.95Qh
yc+myEbB9qCI0srrXLGPieB0OyctnsaKxXt14rgid38MDhQE.rDxkt6o58U.
t0L+jOC33JG3tfsADreJ9tMMtT98ML6VY0hIWdlo8sppgZQudDnaWuAYN7gs
TggDR1ypFwy0lEajY3nNnCqnSVbu1pBrDMtoe+H3mAj02LHWV7U+LFobvmN8
4fekZCPH2axA+AcSaSeo7fQf5XcyhywuosNyCme2Gf+CxqlUaVjFW7liWVj0
Mp1AdHR3jmgLXr16Z.G50oHyaY6yNOcetMUjiRP9LkkDjyYixhKMy3oj0w6Z
m0plbVKARjA3ldHDgixXqDVK+uBFq1D4bo05ILV6bVwzKzhBAO9.++HH17wa
ujv9PHyPhcAE4an3ZOlZD7jybUfia53QbUDTsrGWu2INrPchabFk1mXBZtDy
k.VSoCZAkb0EysYHnaJ.lCj.9c48Ac6DA7AHdimdzHUoqrCAyqEuOMlb0VKZ
WhmL4R7gfQwhp5QfbcIxOHc53o+zUAT66xPdsn14eB8mIY+w3Y3zRvbZlj38
1sPNIyqqyYQyTb6Bg.avkgWwI0CFol7r5IDN3igb9r5wDT0ocrjGM8WQRntJ
Lz2vpiik7cmzTXjvJYMUHVm2OdPVSo5PsHelTKBIOJG470px4DuX1Q7Rpq7D
oGHd0t8LnYpTnx20qykVgmWdIcr0clx3wPHYPXBpeWeIXD9Zq.SxkIv0xruq
fJLYjtvXBaxuvXsGqJ80TbMbgwi0hAY5WLBAiXusXb5hg.MCoRA3rlFH4tJf
yvmVsdUVbvhWReMFGrMY829oWRKtPURIXddHo3p+mt+y+EE6udzanH7bm7Vv
BE7dJd8xaBO9ep3JvO409Gy++AeXwSA3fOrbUALnjrYW.O+Q9kU6xBP4+ins
woE+4xY4+VNiMfD7gcOmjjUrB8G27353.J5snO5QQETz1t5oOzUJcKmR2caX
PCkSI8znB1dssL8gaUpQE5vqipnj0JuULC7VcmCUccvaaGRnmsj6kfYdeAp1
j191ckY5khqN1Fh+EDMLOzCa8A2lf71yvc8VIOCg2VcCRhOIonEU3h2uVgjX
MGHT3yHRL23tNCevPRrH2VQdwcZ.HnHTHdmNpjKpfN68oiPf27g6eJVEhW4F
Cxwb7PYIRAtjXH5zkRrejcwuYjwHPMev3ua9WBpfb3PBKo.Db53QDnVJzrgx
Q1cM0XbGt.AJFV6gRJKIFF.6qbnE8TNxtjF23kzA27tDJP.kqqeK99Q1kzLW
4D+RUNA2ySEgBGzaSRy3FVFev.4sdcRCc9UhmHkCojAOzMampjAJihiGQgqI
QAFHexH3HFo3vH6tdaLtgyFb+oq5DRNnaUWtZbaqakENAhxRXWJDKYsnb4H6
tpg60p1vHM8g+vslVQnEibjSDG9lz8mHxpsy63QS89vxb5wvNP.Zvse2P8wH
Ph8Epj6G4HMmfFYClQaTY4oJDgDnMw9QNBswTiCowBUSCowT8x3zAQZZhgQU
U49S0H6tcCatHIYvmNnPzBxQnzNUH1OxcHN7kRbPxVpnh8ibEcIXz3rgSnS2
wiFwfRtPyEJG4LKpnvKbQkCERRHVrejqnD8hOe.RGFcYNe7HtBJk.Z46rbjc
UvZ7Y9jAS1ZhQhH56Ec+H61OkT1ueDQjk9UvzolbHd+HGgzvxKjzzAqghI6G
4Jjl3RIsP80XP1OxUZPVikcZvMNd7HcnpzLA6GpJlnW6CGj6TUVsI0UeAGJd
Hr6bnwEtfhkPUOnT6GY2EMyOoe3QNUU6zPAn6rbjUoLy6SiX7vIM3DOETklb
49QNh3nvhlkxg6wPyCJGYWQUj80uPY0Omeu9Eq69q42MyvczfCgBWe3flPwV
WAi4wObvN+RA2cogPDz.BsbjcMgw7C73CUfjocP.5afLlX+HGoIwRFtJF3jf
paITSn12vSi8DhpFtmPfuO.xKUejccbW0Km7Fj.o1JZsSdD1T4jmwWwKdvN4
QYrZtKPARy9tKf6WCYdfmqAQPCtWLJnFQX86ECK6kFxgspo8XU2krzqgV2Zj
onOfq2qIfr+o9H6RZDyaQ0Dzvy+mRgPIzfLqOxxDG1bGCFb1hTEiZ3N8TB09
QVNxsg8akaXWxt.7ygRpQbRJw5DG07UtgGVZ8ZEjSiZRsbjkEKQ8yeU7krmC
BxfTuNZ8fLThbR8YO2fHtPdXsy3BknI5LNj464vC1EG88iH.nOqhTw1eOmwZ
KICNzW53lnHpZQQobjqjjVvZ7kkkVPc2DBmkWNxxTm4AXGMXe3JHmhvH.HhU
HNb+HKSbla8EhO78b.4.n9UnfuejkINy80AM3PWpIGNroauT5DrqqGgbFM7r
ORBY5odoKrV37pFAPqWHD9xxQti5FzHkTng.Jjd7nJJO7.evtTtozc3klEE5
NbT8QVkxLOQ5nWXnjzXGP8QNxULLVYIglxr98BYtWDBzktnoabQvgjjI3Lei
MViL7hE.t+NJjnYHx9QVlzLm1F9gF5S3I5iDE6GZ2XaNAG2WQMbnfx1eLA19
xjz9rvMvC8j5zB.TRh.irY12w19XGJ8RsCkqK1RZMrEa+HnBnqXDcdld0enf
I.+q61E8Z7xOkOOiWj8onrrzUO7RFThk0YB4z1midYc1mZqFiKK12BnC4HZp
0RR9tGWm7Pz5R9db59hDdespdz22aer0+qmTgwG8U2X0GWwSz+VKQ.TZsRtU
S5cUtwMBnCMWkwsTesMV70554gHao5h6txhGBYcLZKTCL.B1sMe8IlzDEyOC
E2xZeK8cil4D5tododYwa63F20t.vcZYq2HI+4UqieMNcmdW59Jc9tCeufRj
pZ7FpU2viJ+86dHW.dwuDu7Mxk85ojrMdyIefi9wIu0Ua1lFuKdS1dcLMukn
wcbW9NpGSWsLYSwD43OawqW8UVrnAHV9Qy9x2xlnsM8wyRRV+PTZAzA8..Fc
GVSxkai1r54nr3rUvjhfN7IW871zUPwie3Ei2Dk+XdZ2hzj0qO9oA+oWa5Os
L90UKh+xpkYOAvgGp9bn0ZNeLZFN+Kax+yEcYHn0MUBIeKC9bZxyAeK5ojjf
cwQoKdJHeoOeEZ299lyen+PntbxaaNTc5K.VVAlEC9v3TMjn+bxqwZccuOHZ
cVwYRYEqI+6uDktL+P8MYC.IerDOUpQvLgFzzoNZWd5Hl5qQ4yf7ceAKWsKK
Zyh313m7omehzIUpplPpCxO+GfFO1a3noQKW8xtAfhW1pIjA8FKpfL67ytfQ
pREsAbTwQJADdWngdGHvivNHvCG.UEM9efwg9LNyyZiuplA.jB5L5Dtz666D
enCHPalZ6DBnpeoTkO21INSadSplqdKlFwo76lbb6Bsx4QnUmUDD3J18VPau
K0AhYhypu7Bky2EZxRd7w0sZSJVYEbjSB00Lo0H8zL6A59vSLr0KFjeNmWDh
XFOhhzMtCu.Z4eb2WVkSIsxK6Pbhd4hSvc9x0N0buLr3+N+VtIFaFkXqrmRn
C0.V5DXyX2apNoMabEzJHDPUFwv3VBYqKtcsKaA+6acsaFfGastPIwC5V8c2
W25NlEbxj2W23fKKD3Nf4tbecqaUJnqttKiDh9ACBIxUsNkouCmlycgn0oDd
tRkyAK7rvom4FBUSfN8zbcfguaC1X1wIHbnF3JwdfAaL4Um10P8senAAV+P6
5.ivDalhCBgP0VtguVCwDal5nmDLH+VjTodbHma0j.1z6lAVEp6ieg9teFQa
Vl7bm2r2zydIDceUEt3dPt0YYucaS.kaEaBHDHJNjPkaXTPWMDu3rzjNEwDy
fHFbdCQpwmHeuYO05cwQky.yUpKKegObYbceyFTkk1.qE.Oj3By4UazoQMzv
VYNgyk4hHcRTx76dcLCOOWZT94GPOqB9kmbqQcoF7OzJKlLGmt.hmJ00dHin
y.ykoitO026SiFX88LH7hzgjCI8dquUVx56pzMLLz+s9VMCagwPs1Qfn8bEa
8sBOCLWnGiQXR+25aQns1.CBfG155rVeSDsxblozAjffdLqtN77Wqu4pYx5a
rF9KA6tuBr99286a0BQzbb7B4MYU4Uo42zY4raMWk48leGrKKJs05ViHl7br
Aq357AFpMVreVTK+lVYoyPmmOjnyaIeH8M5zRfVUCPTyig.4eXnqufTd8s11
g2QjYJBm3P.x1IbgWyZa+nKzbIyFBtGAvCh+Z7JEe8koM5NsDUe65duYwmyB
C9zaggnJzz7qRKLDSe.SwhPcE3fuZsvnD4MmE00BFXaAl50mCRPcvaoyDuUJ
z3jA95zFiSsqaBkZEfSGBkeajQIt5ckYkgHT2OLfKev+sx.hRDsceXlgBwBh
uNCt8PWOHQcpc44BP54CoAnfbeVPAsykoyEWVf030LXXm2o+9.G9uCGf99Ol
9wVuPWxzadmteWv.jkvkYxFbOksK8N8gomAlMy0WBx0fNBPCQ65Hvgy.WFJa
Endi8dcDEZHNiNBwzqHlCmy445HNWQGimgKDQq7UiyoNbzJ5T5cax5u8SknR
WvGV7TPxlfOjT9ynuVHNGf0h1eXWTfJ+mOEn5TDGymbQbXgfCdiSTROUOxOF
mO+h+mWsKKI8asxdmgRJBCJnwXna8onWm1YfmdC3jfvpDJpHe9BqAlqni3cL
GxsLOxJtyjtnL6T.2XMlYDxchzEsSEj6xUPtHq37nujj9rFKU+ScavEeF.5k
RVoD3kZT+yCONpvvf+OaVkA1Ef6AOe5OhRBAyTBE2EFfi.+6Dpm+5OGrIN69
rEaueW7lkA+Pzxko4KRAEgQ4d78XBO3G1ljlkexwIP5PsEfvQG0fYmE5PgFK
CXIFAxASSLF9809+NI521dTIlKiE3bl2GThz3hu9JsIsZy.cFvpUHx6PVCAQ
A5Ws5QDnoWQBDuXgzuTjTxWZUL1vPSzyjcExCSptJ64U+r+ZCpvs9xl3yTaV
qzNEQgNnWBpyWDTv4L7VYPyvsJ.tKoAtMeFtpMJ1VhihsUq5Bm9pkBbIiGBn
5Tn0i5RsV9SQCoos1lSu62ZJya3lCt2MRTrxNimFypKvrspgNRyaTM3Ns8dp
QWZSEcaypgNRKNbvcIuBOF36ExkBz9QVkxLWjjLNRjUzI0gnL1ERZLHPvB.J
jNYjt7YIPy4TZ6NMJw39SMYvxpUDCnWt9H6RZFqho3JbGFowQJnc2qK5O49Q
thv5HcxPEgZ+8gl2JlG7pVAboyKx+TPfTg2Oxt8OaiaM3pAupI3PCKlAJU.B
sbjiHPJwii1SN3v6wizWbglITNxtqnglR1E.m9vZ2uUhmPiuSPgxonXjUIMg
nW6CGDoUb8cEjFzJPDUUy2QifNWkHjuejcWQUFS1CtUvKEk1zfgNviTQ2OxU
HMwHQZrohzLVyZSLgdoYECPleEgRU1lzLVyZQCVIfLnUMPDTengjillCMjhd
QZCSECHBR.Xsnn0LUMxtt2p5Eogt.smZTeq9HGYulPMRVwnucriGoWQ0js0W
QEluhJtvUTJBUizJGYURiSM1aBxv8ArbeHSq8Dw2OxQHMA8hIMHgPzVoRscP
l3F64Ne3jFHBpaRvUDJx1qZLk4A9bvdJY4vaZrVRN1Io.t4DfatDvL12Lp2S
.gdNAHjtIAXrdHVnmS.TluS.D2j.L9TZlatGfZ74.LGUDxXS.YB2bEvbBf6l
D.2XBf5jDfxXBf5lD.y3ajlpbSQHiMkf4nmCf6EAfcuU.ouKBY9lXG8jXiCW
J0QOGvbi4bzShY8xiLGbSLoWdj4dD.y3rCP3ldjILVMJyMiJAW0KBv8DgDFa
JgxQsF0X+ATbO2bZkaFaTE1y0BQL1TBhiR.byug.puuD3l1SSLVOJwMskfXt
GMtoZHJpWq.9brEoC1VBbHUm+b.7lDB4Q2ICIbnhEC0k7D21YQAQYegOrRIf
7qC.unJNAQY8h6nGpmGN4I3koasNEAwRDY+PW4xcg6mdXBtUziDpdEICpawi
GRfdWOVDh2OzxDu4tf4lghSPl.gSKuFP60Z.1qseyMchgX9R.5BKbFATMtBb
39Q1kzH8plfFVdYBY.lPmpaH19Q1cuuwQvav98HkkmJIgFUkPg1OxtTF25Tl
.y.ZgdDkY8ZKw30LwfUUTUan5sZbnehb7HIFdQMWnXjc0xGZeML5JVap0vHn
8pz7FjFFchXJP.HGBlBWNxtRqlGh8AabgnbYhCV.hAcmkibjZ7RQFoJjMb+.
6tSi2q0rgYNObfGWp6CNp8irKoYbXlvCV4IQSZUXHPomHmLpRVkOMxpXy2Ex
tvRvWB.JU0w9bgybbHlboGGJw0KBeo0qmRyKPV4v0v.JUzMnUs9Ft0M7Da+C
y0mDL0Glim.Ogz.bwTSZbyyapAaAFCBhEzda4PApUNxtgdsWEt7vnLMsnKbY
c0L0YgKW8GJHR3ec2tnWiW9o7YR7hrOEkkkt5gWx.L1oNQlO6+bzKqy9TavH
TId974HfIb7q13a+w0IODstjuFmtGGf1ikQG8881Ga8+5IfHzQe0MBvPU7D8
u0q3.kVCdmzjdWnF1QMs48uXifEVKXrTiXeKWVYCSyfDV2.D1PHqiABrZ.Uk
FJDwMQwzyPwsr1eBm.0Im.fxdvHGHTrGyIZW.3Nsr0ajj+7p0wuFmtSuObOZ
Wc2guWJBLtBQfuWMvVJpiwU28PtH7heId4ajL64yIYa7lCejxU6i9wIu0Ua1
lFuKdS1dMIMusnwccW9tpGSWsLYSwD43OawqW8UVrvA8p8il8kukMQaa5imk
jr9gnzWWsa0CPCq5v5RtrazlUOGkEmsBlTDzgO4pm2ltBPIvCuX7ln7GyS6V
jlrd8wOM3O8ZS+okwutZQ7WVsL6InkYgpOGZE3wFQfGs.KicHTGkifauC5fA
JlOiu9mfh9yJh4xzrxPuGd88WDck.XnAi4WH5pgcELLxAa4OzJX3devJ7X8I
sJKqvy.iUaZD1GfFUCP27V4sSe25P2Ec8Dda2nZrLzlnZLVfb+d0w91NGGZ6
bcqib5MMf.lFPg9KLFE5wcoiyBwwEmRYZ+6hOC8APnO2pa36gNb6kZFv4crp
7vbcdQYYXd2VP.s4.LnalqUS.RH6JY5uaR.lK.4p0Zgumtg8XE.44D.O7Bu2
ebXUGmqZfabciR2rJX3SPFB4HohqqR.TOm.vyIAb659r208QFuq6Sn6KiTW3
59dNII6olHXr8usOw9lsQYCaXptsOAjfQkqBJBfv4LYeuqOCdJ2touecbSec
EfycAOG8sngzMhG38ffNie7JBbG6P1FzV7Mm63B2MaKbx4ZRvRZpNAE7RtlZ
54Z5pAEZmKtJW6b8ic4jGHREo71IYvcP3+sicbqsUPwz2YUk5v6FdkvaaUtc
5a43Rl9dIQdemAtvNxfOjrM3wzjW1t62i+3G+9sY0FTX0Rw7BFA1QmyMJGsI
I84p+RvGxozf+W+o+GwesLsH9v1zfODuK3i28O7a+teLYwKEACeWPzlkA+TN
WI+Qr66hdXUZvhmR1lF8c+X7teIKY6280Od2auujBWSWj7BXjDoE4.1Ln+BZ
9ZTnyQhzMhF+6Rsd8SaiS+b9p4ebQgM4CYQ6vRemW20LzhogSko.N6y3TO8l
G2EuNmlJtdwhroqSl7LzqzglrAgBWdlvmy.FZqdwfmdSjH5KLOT3+ooAFKrS
dZ.8YBLC47ce5y3lLlO49tfUx58EuYz2kym2EkFeD7gmy+AJ3CKeMfD7gEEo
bwu7PwK7K6fe8Tb4uxJ+4yOT7t18xqEuuswkexcqKFrbab4qsK.ceQZajTLZ
wS4+rYErFYDBFO8lgPHX3DNbMuo7PyP5wIb3YHqw06THfiUt7YbyPZyP.ieg
L+1WSaFl8ab5tQ04E52Y8iahrgXyKZdouS.Bem.bSzgh62osmv5k8rcyXIig
nZ2T523Suvt51WyO.FycTRPZNIv7cknMRsNAIP8eAodrJPukhUNWJV0VtHkd
TDfN519aA3AP8KUj5NmrJCSqBqyMBCxIq65LMkFc1y.K71lK51KJktXFvG0g
Kqghr0zBrcTYpU9N+Ft5tWVrHmG94WVu9aAYoQa187prr3kAKixZTV7PjZsW
ZwAQbjHgBtAGxMJw3FLyYazl3C4U2CIoKiSWjrNIUOcfjUSvz4sFt97n9EXI
6UFR1EGfB8hbLEvTbcgGEV+K9gGqMEQ2yUEyNx6gY6QSwzjW1rTmIemvif2z
wgJQyyN8boJN2YBMhQl02vYPuEKtAjFGRRghLFsZTWYApwS5PkIyZQem0LVI
BaygJnsH8NqFMJyZhQy5SosyOs4TJzX3CA.Bfrez3LsklLsOo8OXB2FvZTBD
TQdHd+nwYZGZjjMp2ba8DUVJjHA35pbznLsOoBBLrOmav7VvJ2RxD.19Pk6G
MkyaxkMsI5qB4nQBMf+KJQTLAcZ2uJnCc+J.aVZBrbz3rRvLSBp2yagTCNhP
liSQ6GMJy6S5Rgl0XpMXZGpJkKTPlLDB.+a4nQYZqLR83oDmAGghvkJZT.lb
EBIv6Ii.SspnPLZrVJLZyLs2alUBIv7gYOXVfhMVSakYRPzgNsw5osbb41gH
izyza6BjZLtFtE4PEd+nobZKG5zlBbaPMS4nwQ8nQFgg5uEuZX2FP2RJjctG
ORFB0KDogQ.7Hqo8xQSn1IY3EqcRbj1I8IDP56ffzn7zgjJ3JG.JYxnoE.aj
bYuIYUHuF9Nqj55m5nQ.DQo.YgxQSnhsSI7dqXiU+PE8HIflHJHTHmLBR8xJ
FCcrrkTZzwOpgHzBKLLMX0fT6GNNqSF4ygR1+ItdlVgDYvluxgiyD2LNNu+B
X0aQHZws5sHjKTWtY7a5Pm1jv5amIikG0Ril1x9G0kJcorJXbEzJcxPMN1Us
YXzzRwMxeoSZCvlrZH03XNnWBvAwxQiiPjz3oc+DhzVtnKwVwgQixzlgrzwb
vD0VGkwv1R1GSqMuGeoagYR2396dJtlXREYLdxIm1z5LqAuaR3.Dj51oCJYF
O6zMcdqF57V6VDb8DimaQbowxI39IfSj0TCVNbb0CZXbi3CMtQ5HOhG4HO9l
HYYTmOzDGQ0Q3ppysA0YjZrrB3DvtwvdNoQB3PyDRGcTPbubzHwuQFyu627F
hIMGoOfWsezTpP4zVzp4ZTp7nGcj+8vHFjb4BNd+nQhn31RJB1mVEBC.R0Oc
jntDFarhDLwnEJRuUDQ.RhvgjYWeI+GMR22UHb4o8ckKzAKiB6jp2A2dblbF
sgVJmmImQpIkDWmygm7ImYaingW11HL6vnIbZyF3rlJzWVnX+nwQQrYmli6e
bkga0TgqPlfpQSWzv4CMX3ZID3dd3imDhQr5dOokr5AOQR2OZbttDyrRs+W7
fr7zWkNYipMZb30FogC2ekHx5gpp9nozDB1f08wqJYvpQiyz1n8ijdeRLmWN
QwbHEgfLuobzTlhPpglhPfrsNuIHilrM0HYaZu0jnSJHcBYIYgsmPVEuP9u9
+CKiertA
———–end_max5_patcher———–
Extracting datastreams from Yahoo (processing code)
import controlP5.*;
ControlP5 controlP5;
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
String textValue = “”;
Textfield myTextfield;
int ballSizeTarget;
int ballNumbers;
int numBalls = 12;
float spring = 0.05;
float gravity = 0.03;
float friction = -0.9;
Ball[] balls = new Ball[numBalls];
boolean display;
PFont font =createFont(“Arial-Bold”,12);
void setup(){
size(600,400);
frameRate(25);
controlP5 = new ControlP5(this);
myTextfield = controlP5.addTextfield(“”,10,height-30,width-20,20);
myTextfield.setFocus(true);
// int n = numberSearchYahoo(“processing”);
// println(n);
noStroke();
smooth();
textFont(font);
//talking to max/msp
oscP5 = new OscP5(this,7401);
myRemoteLocation = new NetAddress(“10.0.1.125″,7401);
}
void draw() {
background(0);
if (display) {
for (int i = 0; i < balls.length; i++) {
balls[i].collide();
balls[i].move();
balls[i].display();
}
}
fill(200);
text(ballSizeTarget+” items found!”, 10, height-40);
}
void initiateVisualization(int _num) {
display =true;
numBalls = _num;
if (numBalls<=1) {
numBalls =1;
balls = new Ball[numBalls];
balls[0] = new Ball(random(width), random(-height,0), 10, 0, balls);
} else {
balls = new Ball[numBalls];
for (int i = 0; i < numBalls; i++) {
balls[i] = new Ball(random(width), random(-height,0), random(20, 40), i, balls);
}
}
}
void send (int _sendNum) {
OscMessage talkMessage = new OscMessage(“T “+_sendNum);
oscP5.send(talkMessage, myRemoteLocation);
println(“Sent: “+_sendNum);
}
void controlEvent(ControlEvent theEvent) {
println(“controlEvent: accessing a string from controller ‘”+theEvent.controller().name()+”‘: “+theEvent.controller().stringValue());
background(0);
text(“In searching…”, 20, height-50);
ballSizeTarget = numberSearchYahoo(theEvent.controller().stringValue());
println (ballSizeTarget+” items found!”);
send(ballSizeTarget);
ballNumbers = min((int)map(ballSizeTarget,0,1000000000,0,300),300);
if (ballSizeTarget!=0)initiateVisualization(ballNumbers);
}
int numberSearchYahoo(String _query) {
String QUERY = “http://search.yahoo.com/search?p=”+_query;
String[] results = null;
int newNumber=0;
try
{
URL url= new URL(QUERY);
URLConnection connection = url.openConnection();
// Google rejects pure API requests, so we change the header of the request
// to make it believe it is requested by a real browser…
connection.setRequestProperty(“User-Agent”,
“I am a real browser like Mozilla or MSIE” );
results = loadStrings(connection.getInputStream());
}
catch (Exception e) // MalformedURL, IO
{
e.printStackTrace();
}
if (results != null)
{
//println(results[0]);
//println(results[1]);
String originalText = (String)results[1];
//println(originalText);
int start = originalText.indexOf(“resultCount”);
int end = originalText.indexOf(“ results for
”);
String nnn = originalText.substring(start+13,end);
//println(start+” “+end);
//println(nnn);
//int fff=Integer.parseInt(nnn);
String newString =””;
for (int i=0; i<nnn.length();i++) {
char temChar =nnn.charAt(i);
if (temChar!= ‘,’) newString += temChar;
}
newNumber = int(newString);
//println(newNumber);
//println(results[2]);
}
return newNumber;
}
About this entry
You’re currently reading “Mediascapes studio 2: all materials,” an entry on Shaocong Zhou
- Published:
- April 26, 2010 / 2:09 pm
- Category:
- projects
- Tags:







No comments yet
Jump to comment form | comment rss [?] | trackback uri [?]