From c3b69b3294a817218a24a623dba8616ea2576b70 Mon Sep 17 00:00:00 2001 From: benfry Date: Sun, 8 Apr 2012 18:10:01 +0000 Subject: [PATCH] wrapping up the synthesis moves --- ...ollage.pde => Synthesis_01_collage_01.pde} | 0 .../_01_collage/_01_collage/_01_collage.pde | 26 - .../_02_waves/_01_waves/_01_waves.pde | 23 - .../_02_waves/_02_waves/_02_waves.pde | 27 - .../_02_waves/_03_waves/_03_waves.pde | 70 -- .../_02_waves/_04_waves/_04_waves.pde | 34 - .../_02_waves/_05_waves/_05_waves.pde | 37 - .../_03_grids/_01_grids/_01_grids.pde | 20 - .../_03_grids/_02_grids/_02_grids.pde | 30 - .../_03_grids/_03_grids/_03_grids.pde | 30 - .../_03_grids/_04_grids/_04_grids.pde | 36 - .../_03_grids/_05_grids/_05_grids.pde | 42 -- .../_04_mandelbrot/_04_mandelbrot.pde | 47 -- .../Synthesis/_05_tennis/_05_tennis.pde | 103 --- .../Synthesis/_06_cursor/_06_cursor.pde | 304 -------- .../_06_cursor/data/NewsGothicBT-Bold-48.vlw | Bin 179002 -> 0 bytes .../Synthesis/_07_typing/_07_typing.pde | 229 ------ .../_07_typing/data/TheSerif-Plain-128.vlw | Bin 1131851 -> 0 bytes .../_07_typing/data/TheSerif-Plain-96.vlw | Bin 641509 -> 0 bytes .../Synthesis/_08_clock/_08_clock.pde | 190 ----- .../Synthesis/_09_centipede/_09_centipede.pde | 90 --- .../_10_chronodraw/_10_chronodraw.pde | 236 ------ .../_11_amoebaAbstract/_11_amoebaAbstract.pde | 175 ----- .../Synthesis/_12_robot/_12_robot.pde | 88 --- .../Synthesis/_12_robot/data/battalpha.gif | Bin 516 -> 0 bytes .../Synthesis/_12_robot/data/batteat.gif | Bin 163 -> 0 bytes .../Synthesis/_12_robot/data/batteatalpha.gif | Bin 754 -> 0 bytes .../Synthesis/_12_robot/data/headalpha.gif | Bin 1616 -> 0 bytes .../Synthesis/_13_withoutTitle/Module.pde | 18 - .../Synthesis/_13_withoutTitle/ModuleA.pde | 33 - .../Synthesis/_13_withoutTitle/ModuleB.pde | 27 - .../_13_withoutTitle/_13_withoutTitle.pde | 78 -- .../Synthesis/_13_withoutTitle/data/Thumbs.db | Bin 11776 -> 0 bytes .../_13_withoutTitle/data/down_down.gif | Bin 63 -> 0 bytes .../_13_withoutTitle/data/down_hi.gif | Bin 63 -> 0 bytes .../_13_withoutTitle/data/down_lo.gif | Bin 63 -> 0 bytes .../_13_withoutTitle/data/up_down.gif | Bin 62 -> 0 bytes .../Synthesis/_13_withoutTitle/data/up_hi.gif | Bin 62 -> 0 bytes .../Synthesis/_13_withoutTitle/data/up_lo.gif | Bin 62 -> 0 bytes .../Synthesis/_14_pond/_14_pond.pde | 671 ------------------ .../Synthesis/_15_tree/Branch.pde | 69 -- .../Synthesis/_15_tree/Segment.pde | 156 ---- .../Synthesis/_15_tree/_15_tree.pde | 102 --- .../Synthesis/_15_tree/data/treeData.txt | 391 ---------- .../Synthesis/_16_sodaprocessing/Button.pde | 35 - .../Synthesis/_16_sodaprocessing/Control.pde | 48 -- .../Synthesis/_16_sodaprocessing/Mass.pde | 79 --- .../Synthesis/_16_sodaprocessing/Slider.pde | 48 -- .../Synthesis/_16_sodaprocessing/Spring.pde | 81 --- .../_16_sodaprocessing/_16_sodaprocessing.pde | 329 --------- 50 files changed, 4002 deletions(-) rename java/examples/Books/Processing Handbook/Synthesis/Synthesis_01_collage_01/{_01_collage.pde => Synthesis_01_collage_01.pde} (100%) delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_01_collage/_01_collage/_01_collage.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_02_waves/_01_waves/_01_waves.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_02_waves/_02_waves/_02_waves.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_02_waves/_03_waves/_03_waves.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_02_waves/_04_waves/_04_waves.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_02_waves/_05_waves/_05_waves.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_03_grids/_01_grids/_01_grids.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_03_grids/_02_grids/_02_grids.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_03_grids/_03_grids/_03_grids.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_03_grids/_04_grids/_04_grids.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_03_grids/_05_grids/_05_grids.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_04_mandelbrot/_04_mandelbrot.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_05_tennis/_05_tennis.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_06_cursor/_06_cursor.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_06_cursor/data/NewsGothicBT-Bold-48.vlw delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_07_typing/_07_typing.pde delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_07_typing/data/TheSerif-Plain-128.vlw delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_07_typing/data/TheSerif-Plain-96.vlw delete mode 100644 java/examples/Books/Processing Handbook/Synthesis/_08_clock/_08_clock.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_09_centipede/_09_centipede.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_10_chronodraw/_10_chronodraw.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_11_amoebaAbstract/_11_amoebaAbstract.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_12_robot/_12_robot.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_12_robot/data/battalpha.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_12_robot/data/batteat.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_12_robot/data/batteatalpha.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_12_robot/data/headalpha.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/Module.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/ModuleA.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/ModuleB.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/_13_withoutTitle.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/Thumbs.db delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/down_down.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/down_hi.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/down_lo.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/up_down.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/up_hi.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_13_withoutTitle/data/up_lo.gif delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_14_pond/_14_pond.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_15_tree/Branch.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_15_tree/Segment.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_15_tree/_15_tree.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_15_tree/data/treeData.txt delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/Button.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/Control.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/Mass.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/Slider.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/Spring.pde delete mode 100755 java/examples/Books/Processing Handbook/Synthesis/_16_sodaprocessing/_16_sodaprocessing.pde diff --git a/java/examples/Books/Processing Handbook/Synthesis/Synthesis_01_collage_01/_01_collage.pde b/java/examples/Books/Processing Handbook/Synthesis/Synthesis_01_collage_01/Synthesis_01_collage_01.pde similarity index 100% rename from java/examples/Books/Processing Handbook/Synthesis/Synthesis_01_collage_01/_01_collage.pde rename to java/examples/Books/Processing Handbook/Synthesis/Synthesis_01_collage_01/Synthesis_01_collage_01.pde diff --git a/java/examples/Books/Processing Handbook/Synthesis/_01_collage/_01_collage/_01_collage.pde b/java/examples/Books/Processing Handbook/Synthesis/_01_collage/_01_collage/_01_collage.pde deleted file mode 100644 index a1fa62960..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_01_collage/_01_collage/_01_collage.pde +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Synthesis 1: Form and Code, - * Collage Engine by Casey Reas (www.processing.org) - * p. 150 - * - * Step 1, working with one image. -*/ - -// Load the image -PImage nyt01 = loadImage("nyt_01.jpg"); - -float x, y; // Image position -float r; // Image rotation - -size(400, 300); -background(255); -tint(255, 204); - -x = random(width); // Set random x-coordinate -y = random(height); // Set random y-coordinate -r = random(0, TWO_PI); // Set random rotation -pushMatrix(); -translate(x, y); -rotate(r); -image(nyt01, -nyt01.width/2, -nyt01.height/2); -popMatrix(); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_01_waves/_01_waves.pde b/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_01_waves/_01_waves.pde deleted file mode 100644 index 31d2dd90f..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_01_waves/_01_waves.pde +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Riley Waves by Casey Reas (www.processing.org) - * p. 151 - * - * Step 1, creating the basic form. -*/ - - -size(400, 400); -background(255); -float angle = 0.0; -float magnitude = 24.0; - -beginShape(TRIANGLE_STRIP); -for(int x=0; x<=width; x=x+8) { - float y = 50 + (sin(angle)* magnitude); - angle += PI/48.0; - float y2 = 70 + (sin(angle+PI/6)* magnitude); - vertex(x, y); - vertex(x, y2); -} -endShape(); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_02_waves/_02_waves.pde b/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_02_waves/_02_waves.pde deleted file mode 100644 index b923a3b55..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_02_waves/_02_waves.pde +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Riley Waves by Casey Reas (www.processing.org) - * p. 151 - * - * Step 2, the basic form is drawn many times inside a for structure. -*/ - - -size(400, 400); -background(255); -float angle = 0.0; -int magnitude = 18; - -for(int i =- magnitude; i < height+magnitude; i = i+24) { - - beginShape(TRIANGLE_STRIP); - for(int x = 0; x <= width; x = x+8) { - float y = i + (sin(angle)* magnitude); - angle += PI/24.0; - float y2 = i+10 + (sin(angle+PI/12) * magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - -} diff --git a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_03_waves/_03_waves.pde b/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_03_waves/_03_waves.pde deleted file mode 100644 index 5932fa877..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_03_waves/_03_waves.pde +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Riley Waves by Casey Reas (www.processing.org) - * p. 151 - * - * Step 3, values are modified to create a new pattern. -*/ - - -size(1200, 280); -background(255); -smooth(); -noStroke(); -float angle = 0.0; -float angle2 = 0.0; -int magnitude = 8; - -for(int i = -magnitude; i < height+magnitude; i = i+18) { - - angle2 = angle; - - fill(0); - beginShape(TRIANGLE_STRIP); - for(int x=0; x<=width; x=x+8) { - float y = i + (sin(angle)* magnitude); - angle += PI/24.0; - float y2 = i+4 + (sin(angle+PI/12)* magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - - fill(204); - beginShape(TRIANGLE_STRIP); - for(int x=0; x<=width; x=x+8) { - float y = i+4 + (sin(angle2+PI/12)* magnitude); - angle2 += PI/24.0; - float y2 = i+8 + (sin(angle2+PI/12)* magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - - /* - fill(0); - beginShape(TRIANGLE_STRIP); - for(int x=0; x<=width; x=x+8) { - float y = i + (sin(angle)* magnitude); - angle += PI/16.0; - float y2 = i+4 + (sin(angle+PI/24)* magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - - fill(204); - beginShape(TRIANGLE_STRIP); - for(int x=0; x<=width; x=x+8) { - float y = i+4 + (sin(angle2+PI/24)* magnitude); - angle2 += PI/16.0; - float y2 = i+8 + (sin(angle2+PI/24)* magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - */ -} - - -// save("Synthesis-2--1.tif"); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_04_waves/_04_waves.pde b/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_04_waves/_04_waves.pde deleted file mode 100644 index fb80ac2bd..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_04_waves/_04_waves.pde +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Riley Waves by Casey Reas (www.processing.org) - * p. 151 - * - * Step 3, values are modified to create a new pattern. -*/ - - -size(1200, 280); -background(255); -smooth(); -noStroke(); -fill(0); -float angle = 0.0; -int magnitude = 16; - -for(int i = -magnitude; i < width+magnitude; i = i+16) { - - fill(float(i)/width * 255); - - beginShape(TRIANGLE_STRIP); - for(int y = 0; y <= height; y = y+6) { - float x = i + (sin(angle)* magnitude); - angle += PI/22.0; - float x2 = i+8 + (sin(angle+PI/22)* magnitude); - vertex(x, y); - vertex(x2, y); - } - endShape(); - -} - -// saveFrame("Synthesis-2--2.tif"); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_05_waves/_05_waves.pde b/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_05_waves/_05_waves.pde deleted file mode 100644 index 423453ad9..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_02_waves/_05_waves/_05_waves.pde +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Riley Waves by Casey Reas (www.processing.org) - * p. 151 - * - * Step 3, values are modified to create a new pattern. -*/ - - -size(1200, 280); -background(255); -smooth(); -noStroke(); -//fill(0); -float angle = PI; -float angle2 = PI; -int magnitude = 3; - -for(int i = -magnitude; i < height+magnitude; i = i+12) { - - angle2 = angle; - - fill(0); - beginShape(TRIANGLE_STRIP); - for(int x = 0; x <= width; x = x+8) { - float y = i + (sin(angle)* magnitude); - angle += PI/24.0; - float y2 = i+4 + (sin(angle+PI/12)* magnitude); - vertex(x, y); - vertex(x, y2); - } - endShape(); - -} - - -// save("Synthesis-2--3.tif"); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_01_grids/_01_grids.pde b/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_01_grids/_01_grids.pde deleted file mode 100644 index fe719e4f3..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_01_grids/_01_grids.pde +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Wilson Grids by Casey Reas (www.processing.org) - * p. 152 - * - * Step 1, basic embedded for structure. -*/ - - -size(600, 600); -background(255); -int sqNum = 12; -int sqSize = width/sqNum; -int halfSize = sqSize/2; - -for (int y = halfSize; y < width; y = y+sqSize) { - for (int x = halfSize; x < height; x = x+sqSize) { - rect(x-halfSize+2, y-halfSize+2, sqSize-4, sqSize-4); - } -} diff --git a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_02_grids/_02_grids.pde b/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_02_grids/_02_grids.pde deleted file mode 100644 index 8f5b4a361..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_02_grids/_02_grids.pde +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Wilson Grids by Casey Reas (www.processing.org) - * p. 152 - * - * Step 2, textures inside the grid by adding a third for structure. -*/ - - -size(600, 600); -background(255); -int numSquares = 12; -int gap = 4; -int sqSize = (width-gap*2)/numSquares; -int halfSize = sqSize/2; -int offset = halfSize+gap; -int ydiv = sqSize/12; - -for(int y = 0; y < numSquares; y++) { - for(int x = 0; x < numSquares; x++) { - float xp = offset + (x*sqSize); - float yp = offset + (y*sqSize); - for(int i=0; i<=sqSize-gap*2; i=i+ydiv) { - float yy = i*halfSize+gap+i; - line(xp-halfSize+gap, yp-halfSize+gap+i, xp+halfSize-gap, yp-halfSize+gap+i); - } - } - -} - diff --git a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_03_grids/_03_grids.pde b/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_03_grids/_03_grids.pde deleted file mode 100644 index 9d4d5f670..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_03_grids/_03_grids/_03_grids.pde +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Synthesis 1: Form and Code - * Wilson Grids by Casey Reas (www.processing.org) - * p. 152 - * - * Step 3, changing the size of each grid element. -*/ - - -size(600, 600); -background(0); -stroke(255, 204); -int numSquares = 6; -int gap = 8; -int sqSize = (width-gap*2)/numSquares; - -for (float y=0; y 2 ) { - co = 1 - k/float(accuracy); - break; // NOTE: This is new syntax!!! - } - } - stroke(color(255*co, 255*co, 255*co)); - point(i, j); - } -} - - -// save("Synthesis-04--" + zoom + ".tif"); diff --git a/java/examples/Books/Processing Handbook/Synthesis/_05_tennis/_05_tennis.pde b/java/examples/Books/Processing Handbook/Synthesis/_05_tennis/_05_tennis.pde deleted file mode 100644 index 4dc267f43..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_05_tennis/_05_tennis.pde +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Synthesis 2: Input and Response - * Tennis by Casey Reas (www.processing.org) - * p. 256 - * - * Only the right paddle works. As a challenge, try to - * add code to activate the left paddle. You can make decide to make - * it a one-player or two-player game. As an additional challenge, - * have the program keep score. - */ - - -int ballX; -int ballY; -int ballDir = 1; -int ballSize = 10; // Radius -float ballAngle = 0.0; // Direction - -// Global variables for the paddle -int paddleWidth = 20; -int paddleHeight = 40; - -int wallGap = 50; - -int netSegment; - -void setup() { - size(640, 480); - noStroke(); - ballY = height/2; - ballX = 0; - noCursor(); - netSegment = height/32; -} - -void draw() { - background(0); - - stroke(255); - // Draw Net - for(int i=0; i width+ballSize*2) { - ballX = -ballSize; - ballY = int(random(0, height-ballSize)); - ballAngle = 0; - println(ballX + ":" + ballY + ":" + ballAngle); - } - - if(ballX < -ballSize*2) { - ballX = width; - ballY = int(random(0, height-ballSize)); - ballAngle = 0; - println(ballX + ":" + ballY + ":" + ballAngle); - } - - // Constrain paddle to screen - float paddleY = constrain(mouseY, 0, height-paddleHeight); - - // Test to see if the ball is touching the paddle - float py = width-wallGap-ballSize; - if(ballX >= py && ( ballY+ballSize >= paddleY && ballY <= paddleY + paddleHeight)) { - - ballDir *= -1; - if(mouseY != pmouseY) { - ballAngle = (mouseY-pmouseY)/2.0; - ballAngle = constrain(ballAngle, -5, 5); - } - } - - // If ball hits back wall, reverse direction - if(ballX < 0) { - ballDir *= -1; - } - - // If the ball is touching top or bottom edge, reverse direction - if((ballY > height-ballSize) || (ballY < 0)) { - ballAngle = ballAngle * -1; - } - - // Draw ball - fill(255); - rect(ballX, ballY, ballSize, ballSize); - - // Draw the paddle - fill(153); - rect(width-wallGap, paddleY, paddleWidth, paddleHeight); - - // Draw the paddle - rect(wallGap, height-paddleY-paddleHeight, paddleWidth, paddleHeight); -} - - -void keyPressed() { - //saveFrame("pong-####.tif"); -} diff --git a/java/examples/Books/Processing Handbook/Synthesis/_06_cursor/_06_cursor.pde b/java/examples/Books/Processing Handbook/Synthesis/_06_cursor/_06_cursor.pde deleted file mode 100755 index ef52995ee..000000000 --- a/java/examples/Books/Processing Handbook/Synthesis/_06_cursor/_06_cursor.pde +++ /dev/null @@ -1,304 +0,0 @@ -/** - * Synthesis 2: Input and Response - * Cursor by Peter Cho (www.typotopo.com) - * p. 257 - * - * There are four modes, each is a different - * way to use the input from the mouse to control - * the cursor(s). Click on a number to select that - * mode. - */ - - -PFont fontA; -int gx, gy; -int mode, nextmode; -int nummodes; -boolean forapplet = false; - -float mx, my, lastmx, lastmy; -float lastrot, lastsc; - -float bgx, bgy; - - -float p_x, p_y; -float p_fx, p_fy; -float p_v2, p_vx, p_vy; -float p_a2, p_ax, p_ay; -float p_mass, p_drag; - - -void setup() -{ - size(600, 600); - gx = width; - gy = height; - size(gx, gy); - colorMode(RGB, 1.0); - strokeWeight(1.3); - loop(); - smooth(); - strokeJoin(ROUND); - - init_particle(0.6, 0.9, width/2, height/2); - - fontA = loadFont("NewsGothicBT-Bold-48.vlw"); - nummodes = 4; - mode = 1; - - bgx = 0; - bgy = 0; - mx = gx/2; - my = gy/2; - - noCursor(); - - if (forapplet) { - cursor(CROSS); - } -} - - -void init_particle(float _mass, float _drag, float ox, float oy) -{ - p_x = ox; - p_y = oy; - p_v2 = 0.0f; - p_vx = 0.0f; - p_vy = 0.0f; - p_a2 = 0.0f; - p_ax = 0.0f; - p_ay = 0.0f; - p_mass = _mass; - p_drag = _drag; -} - -void iterate_particle(float fkx, float fky) -{ - // iterate for a single force acting on the particle - p_fx = fkx; - p_fy = fky; - p_a2 = p_fx*p_fx + p_fy*p_fy; - if (p_a2 < 0.0000001) return; - p_ax = p_fx/p_mass; - p_ay = p_fy/p_mass; - p_vx += p_ax; - p_vy += p_ay; - p_v2 = p_vx*p_vx + p_vy*p_vy; - if (p_v2 < 0.0000001) return; - p_vx *= (1.0 - p_drag); - p_vy *= (1.0 - p_drag); - p_x += p_vx; - p_y += p_vy; -} - -void drawCursor(float x, float y, float myscale, float myrot) { - // draw generic arrow cursor - if (forapplet) y -= gy/2; - pushMatrix(); - translate(x, y); - rotate(myrot); - scale(myscale, myscale); - beginShape(POLYGON); - vertex(7, 21); - vertex(4, 13); - vertex(1, 16); - vertex(0, 16); - vertex(0, 0); // tip of cursor shape - vertex(1, 0); - vertex(12, 11); - vertex(12, 12); - vertex(7, 12); - vertex(10, 20); - vertex(9, 21); - vertex(7, 21); - endShape(); - popMatrix(); -} - -void blurdot(float x, float y, float sc) { - ellipse(x, y, sc*5, sc*5); - ellipse(x, y, sc*23, sc*23); - ellipse(x, y, sc*57, sc*57); - ellipse(x, y, sc*93, sc*93); -} - -void drawBlurCursor(float x, float y, float myscale, float dotval) { - // draw generic arrow cursor - if (forapplet) y -= gy/2; - pushMatrix(); - translate(x, y); - scale(myscale, myscale); - float dotval2 = .5 + (1-dotval)*5; - dotval = .5 + (1-dotval)*9; - blurdot(7, 21, dotval2); - blurdot(1, 16, dotval); - blurdot(0, 8, dotval2); // midpt - blurdot(0, 0, dotval); // tip of cursor shape - blurdot(1, 0, dotval2); - blurdot(6, 6, dotval); // midpt - blurdot(12, 12, dotval2); - blurdot(10, 20, dotval); - popMatrix(); -} - - -int n = 1; -void keyPressed() { - if (key == '1') { - mode = 1; - } else if (key == '2') { - mode = 2; - } else if (key == '3') { - mode = 3; - } else if (key == '4') { - mode = 4; - } - - // saveFrame("cursor--" + mode + "-" + n + ".tif"); - n++; -} - -boolean isInside(float x, float y, float rx, float ry, float rw, float rh) { - return (x >= rx && x <= rx+rw && y >= ry && y <= ry+rh); -} - -void scrollbg(float x, float y) { - // scroll the bg - float amt = 30; - if (x < gx*.5) { - bgx += amt*(gx*.5 - x)*(gx*.5 - x)/(gx*gx); - } else if (x > gx - gx*.5) { - bgx -= amt*(x - (gx-gx*.5))*(x - (gx-gx*.5))/(gx*gx); - } - bgx = bgx % gx; - if (bgx < 0) bgx += gx; - - if (y < gy*.5) { - bgy += amt*(gy*.5 - y)*(gy*.5 - y)/(gy*gy); - } else if (y > gy - gy*.5) { - bgy -= amt*(y - (gy-gy*.5))*(y - (gy-gy*.5))/(gy*gy); - } - bgy = bgy % gy; - if (bgy < 0) bgy += gy; -} - -void draw() -{ - lastmx = mx; - lastmy = my; - - mx = mouseX; - my = mouseY; - - if (mode == 3) { - mx = mx*.01 + lastmx*.99; - my = my*.01 + lastmy*.99; - - } else if (mode == 4) { - mx = mx*.25 + lastmx*.75; - my = my*.25 + lastmy*.75; - - } else { - mx = mx*.5 + lastmx*.5; - my = my*.5 + lastmy*.5; - } - - iterate_particle(.15*(-p_x+mx), .15*(-p_y+my)); - scrollbg(p_x, p_y); - - background(.8,.8,.8); - // Set the font and its size (in units of pixels) - textFont(fontA, 24); - - float x, y; - int w=95, h=75; - for (int i=0; i>?G9n@}xse$}L_|b; zTFhip6jc;Or6`J`ilV59h&UKyq!1}7Duc*iE5;ZxGK^G=F(S6c7-M|rHF{jnde+)! zpYy(%Jem>YTIo`q_VH@3q(dIr}6@GLdwk96RI zJf8J(!L65Tv0Q&ZE|d$NNEh56mFw5!LYW~gxID}a0)w}f+#eG>;#ndW^0_)q)BjJN za2w@9o|emn@{IHM$ITBpr+GU6gwd8oG=H~W7|q`i!t`?ay97pA{OxifOu$atWPX>6 z%k1wK8p3f}oX*WPjcZc#sIRmbf3vR1icxSa}e@gJko4?y; zfxXOH1jf5{8p3qi-z)G!a@&N4{4SLXGJw6zepg`BHPk7*%ec(8n;+%;cN#1Yb$?p! z;6=H7Zm{R??-M`bK-wV(*z4I2fguOlZy4-yf4}*?PJqv8JB{|Y$rG|M?H>?7;y}54 zZm`FHJ58hWz0@Ko+p)Z;!wT2k*h(k*DP!72Izbz9_d>@Q_1%pBwCQe@6U> z17V^}0e>bJ+&?Cl$LH_CY5R;;D-Zv;(Q4JD{YHcCf{sG?9_Bw`e#GVR38?OX+`(Im z_D>oO?H%cf!#pT{l#A;@&^+(|l)yz@mkJK9!hoOH& z7(bH>?wDMt4=6*FD`@WiIRW7JbjEVWjaDnne_m)v1KthZF<_7Hg!w(4G3{S48p^tu zzmtMP{Qe$dxqq<+&CBzY(7=nlp?{3!{w4Ffz6QF=Q!FvVlVg3d4qpTqt%Y7w&$kYn+Uo~Fj!R0*6GlIjrMfy>m zD8D+n;Qlqa(0z%7wHcT%;ASm*>ABFw%x{f!s>DJic23BM#`LVtoIm(Q2jTw$Km<-Z$g` zBVBO+mR#%PLL4X;l)IP99f3X1pds#(TyX!kT)!q4>Y2--ZNU9yxex~~$m97lx!~@~ zg}x8%9Z%3aE&q<;y`JIea(x0f%7y$POwc^Oe^+3n#q}=A)YI87Fyg>fOv}F~IOIFd z1HyqDkPB_W+XKqQ)A{cUjC6Qf@bt9Y7Z~p~*1HYjhx-rYLONV_d1UWCFdFJK$`gDZ z-+w4D!oY=cL*4k9TyPKNLR=^t$ie*qK9c`Po+x9KN3pCQ2@YY^D(gYPBYxKtaa#V0 z;QyFhs7J610K0o4z(TbD_&v0zLfashhY8r-eeyA>F@Y*B_Cx z_Wt&{$)Oz~4{^QzPmKm$hBy&E>ImG|a=~AV_Mg3n_MZz4>2^859_9;^!#l)#LiqmP z|BD(lmm4zLugkM2_g@MQaiCs<2H4xfe%H=e`{@%ymL;D}z zLz@uVYPmd2z#iuRDDbL?2H0tn0;7yw4zSbyCxMY~q#fl9*lBMCM!KPoP`6{+{~Xbv zm*V`rdk^h@c@OOyp&{Lf4`If6_+Q13IM9w70Y~lqe=E|&Uy=)MN-oI#x?DxM|6Op1 z1MLVj!0!GJ0lch{Z@~U;X9Px=uFK=R|DW%n&Ax~Be+dn7c$k3wJj^w;GEz0)8UXmEhVmC$z}K2K*H z-y6Xf(+OU2Kl{sa125`2@)qU&XMaWfc(17MpBpR>xX*PW@a3NlEpQGJ@w$ZMb z240j2;`ciEGl9i@j<^=0;eEz5$h#cs9cX_@F0?_Er`6rh@je%#Azv{KVY=Ms0;B8^ zCen;BJ-*)%cp)0f5n(AF1{9E!w*#K{K;&b>>_J2yQ-!<6U!{=MXk21u& zhnqG8fr~UxXP?jzCeq>cT0pqpKsr(Wz#}j4TUu5j?3Hq%ERlY|7T+q=MU(}~ z02g3$tB?+~Ba|!Z5@@Ig;#NVQf%dsvF87(h;#T3^{!FcHB0w5&und~neEM)ztq-!3pJ1M;t@M3{1-e-cA7bk8P@~~0C_=bh3 z^q^wy3N#Ya2%i=7oYu`oyns{H9OHt%p=i8wCMd_XP0(qJqL83RIih+{eI^vr1Rbj4 zsGAdxbBacS%GOvSKCNbJ6oCZwMkE6t3Hob=wYo{Qb9YH73%ViUD!p5fECiH^mhXa0 zuoZ4DNEO1MCqh?-3}4_Q<;(KtpLKNxwjG=*EZ=A5&Og z>k&g|kGfgmIII4{0#%?s^G@Sti9Z&Odl8i?Ly+Ri>Im!omM}KWM~EsAs`F$OHbT5Z z@w|u-RUnH;lcaH-Q1FuQy)^}`2;LA^1v;KDx<*4977kH-;#7H|AIZB7NP(y{anOz< zc`AH(t(xv+aqWhrm5gy86W)1retD<*l5wLU-Op3uLnD5nXl+RQsyH-m76uv;>sgKq zakDTIG^D5?b8M;=3mAGu=)2+=Znjd(l9i8roAsK&Wc%|h1gVs*#NxiO`ymXp%Da0Pwq{sDf-j=f|3l$Lj~BvUc4ly< zGBfy9K~t@jDtatqJ&K+LZsur)6i6!YXoi4lc6UBQC#{0i=BK#h&Z5sOypmK)8aiNW z@)*fI8`38)b$)FK{EU)&S0yXi669s6TP8)^6S$HmV7spV8vqB5Btlc#Y0$3IxT~Zk9a%@Ycl} zc)Z_eSjkA5zK#onp-CG&{aEVTqf=BOMGj6y1YD@R$RtDaW<6^dRd$aFSllfGnjxgxX= zFcR3T>MI6S>I`XG^;apZeTp?CAR44*kC~E`LiYH30Y0KM?p@;DZ{Aa&rPo7FPX)FW zQnR%%fN7L!61jJ*VxZg+^cMis<*WWaM{CXQ4L&bmhL}Z(nmyMXu_am6&%)BNb63nI zvpJ_8q3WN^(v>8eE|1Jr=7z7gycc)hV)3b_b8BVj%cQ;*0wV6ocd(m(>IiwqE>cUW{{*x)=?=L>dstw zw+r}F4L?xdZFQ7Cue#LNY*daHtLVOy(sA$AuH8G*431lYB=ws0q#i{))M=A3PJi40 zcBs!Zy}igP{+%xMr-P7urSLYgR79`zlK5;%!Uiy`1AOmM;>JBsxr0Ub(e8&GH=SyL-aR5%_tPGi?OPX=J^RVOR?aO?kdsR0Z>p zrnk12lI6!H$cg*-@uiDd12bF%C8r}#0rWYs2z|NRJW?LnI|6P>`m}aYHR6!?6ILMN zE%#^>{=XnKbUl^eZ4%~5|h zj>9uZUN)-z^xOtv3~E#sth88;lW-P5htpYR&M z6^4{(``SW+_Cbdtf$N0#K%k%SCcxIwGyt9^9)okv`idX0_YDyo^Te_n!81}FmnPcM zplNF-j~3omh2y-a;qZVgIv!)*mBq^BGGby`HEH3p49@}0vW?3;dKb|ZVFYUWMhE4n0>er{Z|T_ieUiL0XJ zbL%`}dRi|}wrwI|JvtH616Is1BSIvsYo{N*%6@{p_lQJLs6b7+`Dt8`FuRPHi(=>0 z8Brh7Vc&}VFe2JwghQLQ-nWw=qmR)M**?cXdk!mgO z)J=UHw5ai*L35LF?}`Y!l=a>leR%1B-lUibCOfW_^-7pgD=^=WD1rDI1T&MOxJ}8; zFBnvHgOD0x_GIK3%m%S)jO~_8O z;wyCti}zy4VwVy`uN)+YzuVKFZD)kjz3Wa^7Cp!)bk#^li@$)a{?qi{zw?utV5LqLY6fEVMh&NoS%l0r9=jf*}^~5I-Tj1bzes6u(@+RYuFtgV6kyc3*!wQ?ATBz8H5CN2zQz z+UFasAeIiQ-*59Ayf%$G!k;I>Kj^;fDPzA=^v!gwDV5fpr8*i(>R6K}t)Xuveg_r% z{056Yk?v94HH@j^QRy1>553e!q>$7AoCq!k!{kRg+PyAmTM@As*Fmef;m-&g(rV@nZC-dzYz4(Q6M3 z`_?rem{+_q?8}uNraU*h{&*bQXS?Q%H|sZrcfa*1Gkc=|OxcDJu90A7!rf|!dDl@B z`?Q>q8kn+5F4!bF&k$PU00d?tzA9j=sy>B3=$%PuIM9o>GyC%P5i@FlUw(=8R})aV z;^uM(``D1Ix11jG*BJ2W3?>{{*E1xbH)0$d)3B$`ZLd#C8@jAa(Oa#TW_aDZk2QR? zYG*fGJA+iwu}RIiH#})-_=H$MTVGJsERv0yvZ08PV6k5&c3GdY+w=!<^;`D)29E9! zjI#MHvaTH^&u`iTxA#;^y&cqq&?Ejdy_A{lIecz+S<c8R}osAoc zQg*UR9*@#Qkfu#v6<()_e9k(eQY{rXLkNQ=X^)GOoy6eX8V&OEgnyraN{jUPhP)o08JTZmU-#I>0be^gzv(@les7&~zL&VW*Zo zvgMbfc9Gs&o27cu{u@tbWQ}61@6@Ucn?VB%D?>PR#3FHjc&>IW7BB{sXwi#Yk;2gd z0xVFrSR_>xPP3Almr)zImj#id=;Gp7V>P8&>t2g(m5yZw5y5%iL>*D|RgZ{HD2BEk z~k12;C@y_*OL|LtH zsI3u2yHs26$fpfqy|I9$G1fqz|I(@@MgtttHQS`p4B@hYCBD{>gBW!<*!?P@x^Rq z?)B|9$5Y*(F)K;-UD>>jDgu@98@md2h>p{zj8T*1K@O#!IoNl$pni9IUDDLSF}co( zY4M~s*lv7G>6K!OZa#8rw98Y6{Yv6ayFWb7DBjy@KwI}dks%CXu~(Y|Sud3r;Uq$J zueMR+oys$d@3`Xc0l()t6qvbT#h*_~$E2PNH8|ST|CZCLi_(XSN!ZDLW;p3mG1;Jc zaQ(f)0 zYcNMMMuSc$en(Pj>($*!H>@GEbu}DfCcrcd+nKB6X-?J5cL;t=!ztVjCJ9?n0bgEg z`$}Z5*}09_=pnPpaF5-*95KDI^aTm)+59KGhfA8-E1jh=(r&qt#|0I5Aa6ljW}eyt z{q!TnXJb~|=Tu=OjH`??R@jUsBktHvXSpPN*Re@L>vOoI4WzO>5YB2iw~}6c_Bwv~ zwE7R3oG(yVe#?zs(&_yjrKH)*=Yoi@V9r(CZrp0%gTp|Xvh1|wCB`>+B34B@v3x<| z3~odBgPHmHxuLMLB?S6$f&P#p1FkUsctQmfuIFd_16{0(?0ejA&w38xijxn?F|r>o zu-gW!Z=!0W9DB&#U1V3&Dy?|Sck))UXEv7+?h(J%`Ruud=z#*-XFawQ@J%pHqb-t7 z?q)EBX@I1jEu^XlPLjP?1f?;>e^XRjoRd$hieO0DeG84J#Xje-O}POZI_F{$tYu;z zM4SpE;uS7Q;4I-xjwlq_PqcoT6dc$%SC6~VaTr;0^zi0t3B2oOcxo~w_h z%9Zle!z*o(j%w&MV?;xI_odgjRWBJuxDPjLLRYdH2ebf_x}IQKGbZR-Vk z(x<@LAaY9m(ie9qP~L2mwR~Tvr2NK|VpC?jSPc5H$~LnTpB`%1X*QeLaQlJmq(r3D=X``aEZOmswGLl`}T~5_OF%ux+dYUYA6yT?05>RRcI3bDQ|A zj+u=#$eP;{;!QXPnW7Z|+r->q4S%j%A2Y!gYGOOBSgrWljJZ{#$|nm4j|fa2Yfeg= zF8GTmCuSq&z#DJil>tHC!>xhsD0u(Gpp-8q<7Bk&)PZ z<(qq*St|+wd{@Au`OeSp8t~80_nnjCjNdz|@4cDIW2$=AAI|Mwis$(!xg;=I9 zt#@`jBatWVh1TN<`{rU+JzbV>?D2s}F*?a6UHVMT2ebk-a72G}2F)B8nohrBu<88$ z-2oebmRl}7(Y-QY9awVmr3t5x_Eo29Yp)BxJ-6Cr!n5)Chzk!MsutdS-G#roxHbqm z(0D8~@TVP)%${Fdbp@Q^GHB6}7aDVh$w3>hE>H)RtNuu>{@!!)L7utP{fIpuB=heH z^!brod&`xKOw?S?%-uBKH_F_#oZ@G=N_%l6*H?IqQWLH&R0qF)Pu*4dFM4Dd zv^;&U%QfdJGd2<9O&u8Q@Yk-1cq3-(dRKdjk?HXg&zCT-J`ULo$g|C*x(;?X_a7)_ zSZfE#Gnceq;H%&iqU;E0?zl6=+$~axT$P~_9b1nj_AN)eK;(H!<=#g1a23-KF_oxc zA4g)e%->>6VveSNIesPVPfj_9Jhy9Xvubi0`kJC{L`(^z+Z&^#2N1U=MzP}NIx1z# zHx255SndPEOhYaaA0L(FadF%EyTjAv`SR>&|AoDaGeQAsJo>~n0h2rbxT9bSQKBgx z-&)ROYxJqyi%{0nT9M`lyZ5Za3vbx6{|f8h=*E2HEA)krpU!EMWYaB#UTKecTQC5e zJzX8wI<+7ot5Ua0Jzo_IJ6yVgfJ3<3QAK)d=2aw6(aY9-tcJ3>; zz1186vuI2hw25Iz|6-xol^+V=r9jx(R(9fPD)`kx3sjdOvZ&*#_#>| z=nj!}xRU*P3BKx^BB4ikIup#yOa}#fRea_iv0 z0kb7rEZ_yzdqzChP^U~35o9C&PVwFKI4}Z7**Ys4Or{&r2^=@p^#Ygcqfn7J4<;$W zGE!xEJ2`$7V(zeWN=Wx&hoBd4CZ)RXAM(E*~+`}u5P zhrl)^-vp)qTEaLg&zodL8yaR}_Ua(w9`IXHSEo=HFiHQGtSgbPXIo39&9@~)fz#f- z9S`xG=D-la?#w zBVjedEqB%z*jC5yOI(bGcm&h%m!8)E*VkMqN!;%yB&hOj2NR&^*#yw{r zGl-F#H(6RsW}6NjHusqR=Fd2v}bpsuk-FJr9i30 z-|`xd+QoBd#^DS6APt2knp)LCn&#i4O?4hk29&8I2q^%CnWigkle4vYV=2vo_C`)g z$Fnd^$z^Oz>Az8`wM~k$)uG(3E77&LQnkfuiSJS37-jU%Wji%E>$OhBXZ4&`_Aixj zFoGil^*uCk{F&Wi4a!auL&qa^HB=b%vO#0no}Mtn%HnZ#N1t~%B`D1-p#AWrbL@`I z;8j#~Q`N!~0wb(}msk$3swsluYAatvHG^t|Q`LCIXm`a9xSC^7B5hknrPA#em3TWRn6NUY z7eS4w%&A`*JAr9Q8Of zt)*pq{Z;hk2%u`eC*4jJ0mhZMN)^Enb5(?uDj?^s@tN5HYFy(C*&JcnJ{SYyWE&BI z;$3?GA`1R#yonlwo2rDW36D$YZB52B_}{wYHaH@)>%1S!z4(Mdked# z`ISY2ubH~}5F~8hcIq!CBUs?t&?UHxz=3$`om)n*7AnSrx{T081RF&ZlqEN8jH1Mn z*6WtRl*)|K@jYZPMgqR%MN%LX$0 z`F5vZJc*kYgKE(f;SsYhnuh5=;;Y~3Oh}Y{t|$hCwGj=QN$!H!yPF9+;M`HJE5>de zlxUN^3|ad$3WfW5lDYyS1I%oxVS0Efs;mbQw%R2bta4T(tMGzgDx%t*F};UmbwA_H zAhjFPw1!b-`=R`(nM_2WdyFh+NEpLSlH~1Fxx*xRrySF{u`d6G`0-~KT9GcR3;r2| zU~v9kI{);n+jf(|Lcr%7a0AH(0_jtqu{djpUGjS^1K*yO7P73}DwLj2!}VFCXO9*n z_DJT>Agf_kKQesu9r;mLF-Dy`iqPm*+d{mOD%Vj9Gq?Q6ZQ0gPnH{>_;W>;VD9?`f zU)qzk5h2yef7$Zk68I~^}bj5L5Bf4Hg>IHGM#B;^# z!=)9~Qum1(s(xRt_D>c`i~aq}hOa2V(z3S8)8@zN9S#=^p49C7-1Crsc=^pe6rqN}8w#!H7>D1KgH%ok&v!vmxhC#ICFGoFP*qFm05xd!*g&-V_%!S{!{>T3kIA}qpex^w}wbhcd-%VdBkkiICe|d8$S+wV&OTi#5jb^?) zBmr%(GK~l`3L}zT_7Vee^mw2p+ie(X#1~C%87*nL;U>EbX1Ypth_WR-S#hd=qMXjX zywiapmzP>3PDTsa9xjaMC&~{|2KiF_arr*I?c7-MmsI0_Ty^3@rzWa%7S$(=mcUP? zG-Pw3yLzU1R{TwzU$u#_G1>Du#tl0*tJ9yfi1AQ4URQU-`n%4(p=-6QZ}izN^NV%Y zR4^oEMs!UMbpmNwmI+Sov&3z>HZ0%VyuNctCz-1X*QSzg1Ql;$5*Upf>{KaAaYm`K zL3j(KcKT&*s7SJJsvl_hc_}U@*^ZGM=@@-xwZ^1XGzV=dIF}6C#Nh+JNQ#Eb>>5o& zE`@9P4%(fP1!$jqMbqXXKrT2sTKqReGD zgXW9*0{%IPx2mN^8b(NS!;wC@O97cB=!2C&Iwawkk#1s6(irT0-DPY>LJbnbaDrZr ztBiyiB+d-VKJ^$$VHwoe+L&_YNl6#|vfdO5%A}GdtRA{Mtsv!}2tuq#T5fGpc1ILR zK46jxTt!-K_UEQ*lCAv9zj&&o!Xk+&3$dOvXQPP0YN;B@R5novxiN~v}! zS-Jeu9#}KToGFAjHP~X4xxtuZux~yBm+jQabGbGHgO8AN9PzK1Zs#cC(Kha*dIU8Q{Cbe?t76EkopoiCYkVuk}<ka*O}mOKMbD?6`=(49zAp;;j~sb4zHF{})l zKS_^L?B*X8>oVsnAP*E7G;6y3Tla}z6Iwn5E+-C194A0{DnNnZBK-JbSm!4?s~I%y zvhkRk8}VifA#j&qr~Ys;)w)q&;8HgCeRC^sk>My1GyGmdEwUm5x54P=<*eaF26nes zfo2=2Vz>f~cFJE#9;$L7hfxI)PFn`A04fo-ciQf?Dh8iN@*Vrt4Ble*Xn@6%6yyfV z%r`8=V24)>l3pW(q*sIZa$yEG>h%jV=>En@qvxWCeu63FIDh%`{&SRcn+H{t2|M<| zkeBhD{xv8QRyfr%(eDTgp<(&nTtuNAgH5OEBFY0Lh3rO@r(AKqUoA6b8$_rS;{43= zZ@r$~D73Qu)ZVh2quAyaW;dcpZ8XCZ%{7h(^_1qSW;ZXBY@;8WXA2ZN_yneLk-{Gl z;ip@%7Dv2pSgz%-wMpsPuiTg(v4zA zl*aR(PHB7_1(cHsbGm`SWs+nl;0R=tjSEurSHKZ9lS!IpB7De?GPo`%##5XfjzaSf z-@IJpeCO`|cXG(wyZ)}K{abs7qo{}5;$W7>B?+#6-?}3kUdAFZf}^_YKmxFT8Rr>B z&EzPCNv?j4cb|*g+#%~RJ8rladeF~?n6Y+~Y_~GQ9%bsPc-!wzla-Z``vhZy#ddZ* zNNl@zZcSz#`78Bp1lad#0_A3JzRmV?_BdXj+D(cPpnZ1si3fQscX!N;X~{`$VO-Cr z`OI_|xXdb<=D0e0tr~)D3iZ{1T&UhqZ6sEZv{q~f=oE+^?0XYrS;5>~pX5G$Sld~Vg+;(s7X_jN-a1Kk)h>qhW;HH;V)R)Ub>Z{HW z>a%7mRWQB6XvH#j#raDE#z zYk_1rcjyzrOCmhKe~|>y(EWDjH6<9{)Bh$_9k6^(7+j4W7-s;`)$W2_+LUCW3iVSo z-wE#ws!fKKHF{zF@L2-VpMX|(!@ju^iljzA{D?`AX~0??@itQD>)raz_r%t=+Wef` z9;V;!waP@A$U%d}q9y)EBjPwl|YH?FMZWtbnF%%C773RPS=Xg<7+t zH<`KGsWR%6=V&7%o*TN1!MIrvkG(WtQHeuN97-|{4HR5 zz+~l%TI-g#Bn_rVS4LDy>L=j#_Ae{-Fjpx^2FfbkJkly|i|c>x#Bkg1o$VA_Y2{-- z`Sofye`!l8S#rQqlulVUTD!JSGM&kiHw~W{ zeEFi)y71>&`E2OI134{0_EQ{|wt0cPF3SXDch=~IsL2@^c?(jLRTqZmyx26J%G}h$ zo9#MnBynWP4A3AOMexVKbu56zhzyp-yZ|NIH=nT+nqBNN%x~SsFMY6<|B?;lrZEat zf6C?~-idr@5OOP^nqrvwYRbYgHnOhX2JUIQoDZ$E@hi_ySl1|)ff%So6#WxYk!w?|4zn>^-k1yY?2XPh{*Te-uBOpcf5KBaU<7z6c$ zkrh5DjOplMyNDP%D05-U4?Z*U{v@H&zV9Cdm`(f44^7VoWT1R=C6uux5Rd-bttw7U zv^Am_$V^YHs-j$CI;M|#^v+?gKxS=^i47dP0ZY25#alaLLT&@V+Y4w#=2pHAG6KwB z3&ox^Uh#2)a+Et=L^cnEuO^lByeT6s>zarHv>#R)d58b>NI1;)a=}F%&t1&AJg3Oq z&L~NjGL%7$6v`Gw0tbiW*ix~q`)RHKHLUq$?NzA_-GSc?hPk_p%ghDPk1J;EED7Oo zlVt0(V(!=vCS(^a`j&>)o5pz1eurt^@OUdd$<^SC0I6_E(iFkROC7{p@kQ+ zDtG$Bwq!zPi%s7l$LWl6l9-1l_#n$zW%k0VRN9GIk`>|v<8D^k$k1x@?zmGsfWWE_-P)SS;qYkzCfSY zcO_C1IC*10!KmQD95%~mV6Iioy>HI803-g!(5ncK_AzjA;0Txj1?QX&my1Au{y z*QA%)MujNBn%wMEK@nkcUpkN_I4rJY)s@MWy&Q}nt5p_Zb_Sw<-6WN=kqO@A$qVC^ zyN;o>>LS*lP(3WU;T%j)_y(BoXBJ0h?VyH4YN?vK zF%_+CuwMuAx5#VB<=bN0>mubPLcDeh_X%Py1NM^*y?iLdeC2}Q9Tv2@Q-aF-HT zu{gimLX?i|@?~oESQD(toiA}kK=lQa8>;A_2CNCzF^%T1*@Wo|f+ z2Y1IY!3Vc1VJ=Go4|J7-FZ)5!ifReIc1U^qVqU)g_9;*+Kf*jKY2j4hmBIxE zxtnoO+n7FII-@jg5jJx?y_kG{ZkkSFvY~!yl%#=u_o(>UQYS)*`^iR!5<7jo!-b^H z(n5Y+IugZdK4lwCFgn@tX8#UztUixh8ppCiGWrs2v>=C~bxGWP8C7WPyn$-t6)u zQ5_raMmtThYso5h8_!)xCR({JG{26mDQ(F}-UJ?4i7tysw$bUyc7|+St}?78YPG-DqOv*DWCh>qUSZ`sdKYR7+pm@=8%}!C0<;fR04^pV=|NVu)za{^1U!#&N z+@IQ=nbuT)0;ys?R5?^tjdJG1h(dpyxvzvfXWyb9&0CryMVZc`46K=Nk?E=>6U{qG zimKxId1Z3?2x$u@iRN2OgyF0J1VTJHnRQh%qNDOM-9?%8KZgvAk9^v`J)Z9%bGDea zjaBi;I5wXjD8yVD{5&$S-t+m9fy1}NQ!VqV?8`zD+(M2oP^q85kE~C$)H9t@&KlEF zsaLYkxW?EwX`s!XzR)3CCIVhZ1?59j?h5N>!O|4dS_wCAS&Df{7tt;UudoDd;%&({N6cia8?oWrXMb;U?i%Mj<+(~BWDJdHuWhHGf^#fp2*N&oz4tIRTs!d%1FB33%Hg0uMW&GGIDI}5givC zaNC~+uL82e>P8+TUk^4K)BOG8JL*Zbxw~@rQiMVrC+Vhb!i6}_*&YXzIO3QFZ(77@ zqe;n?Y>IJOxXFQ8;%M9tub0ymIf)_YyCmiAyK_Ez_^r7ShB)|6mOOUOcc)9Y6qZ!% z@1L2kyuN)v>b^};IK`642Ssxz@%;F)D|<%fD${)(oK3Oxp5i-@U*&8@j)?8y1NRCB zV42q;{4&wu==m!A>tgcc@?=rRIBBPh_YPmbedjc0Si}p5{#=|*h7u?Dhl=geyVn(; z&F(K?8H82$5CUuOT!ELdTlNEQZET&&7DM0^Sur-%>?vDxmR>4_&U_m9sd36Cl-_0O zEE!g&@b{C6qfJReyTx+E%8cRIUF?^fUp>=eD*-5XL^G}W*(CL;FG=Cam|ArN;n+HDojRGmXLvyRp| zr9W;++UXmT^ZT3668`mp9Tig8>xwCfY)V~w_ zk55@fl)^V#pK$?Vx#e-SkrXd*PHJ)s)86+KseOCKt`m^odX`&W*Gr zb&TmeWj9ZQ=a#MhrMEYglC@`9q0cAw=MN2qx3`iOR?ZAr*^Z!CvX1q=;G0JrBVA%P z0&BVQWOlwX^Wd!Ym`qE!Qzm!~_(@<(9evZ4xsjfg-ky;7&DQeLiXX`@$X3^ylCMji zw=ei|=(W4A7UhtsO;M+la{lS^V-wChroe03rj56WHgy;lG>Bz=r=fyW63YsI1PFD+ zj_G5IBaOFM<;h#D^Y6nl1h!2CPF@)wip%N-u~dhL3TfcdOtx%IURz;Nt(1jpTR28p zIt_Qo>nkhcQj$v!`>RTluSw3`<>0@m96~)3!`2whGXN3q8ZiawCU$b$6R=|D-Wi{t zpX$TEm-XEf+j4DaZhr2~?dTWw>$6mhd6VCrt0bpXc5_sl5aB_=^1Nq@ACKAQ#8z@D zU!rTJdb#R{xY15uuFF7`McY+yfGM-uw*QqpD0^Xkc7816vBb`MDVEv5sY3Q>cKZLxIvaQ!A#y20O8a-P1wDY-@%(j z`3pmcje+Fj)yydB6IDte6i(83r0<(@3dzluGy-LSue?eZM&-v$qnhY;nbzQJC?Zi0gZ}< zQObcCJ$u+YTGm2R(%EjE{sTr-E_Ik(PUZKDQ~Eq>*rm_Zdnvi4&-9jjCSAX!lUbI-t2Ppy zyF*_es!H}54e<+x=lt0hR_jjQ8Jd{+UI1X{-4h2M&!x@qRer-b=Lk{9;hpIbg7jW5$k?QlC z?>Te7KIfLj5jm+RkHp%7Oy1HEGM;zKSaY}-LS%V!Lc@pWq7!*Q!lD6o1ECTLXqSSz zf|4O^gW#DO%4$tM_V=!sBBL5*}4j7UsJ`5 z#B&fYSu4QfThs&#wl$OpUYlPw&83+mp^`jVL?92TV0t(vC}@|&++eP(=YVy2go zVY!gX^#xkT#SV`T9{RR&Q?BsD-7AUS0Kj5TSVNDrngR}ML zygB9TrZ%}iPPy;b7;Uf-uxk~|HxXK7!n(uikYSmA)1e`R+F17Z#Soa%Vr;ZeSfR4m z9&5_F^d7J_No9*_w^^f_7@+S*NGDG;SMOb5ICg(kSL0oXEp1pfKIM(}Pb4SZ2#fbx z$bjy`NO^v`|1eu#KD}N_KVB^NW_ddE&(=E=<;ujJZ83JukdL ze@~-jJ^f}^Ru0qawQR_`PvLwCkwU^xl%k2>d|4*b=SHpvowDqHD4!QBgq5xUKqzA} zqr~Zuz$iGg5&}vrdhIaY?2~^6?8fG%P7&1lZJqk6$Epal?Jl;0p0boRXbU3kf{DZqWZanHHE zg^fh~Jx)B?Ag3#6u&aEPLga6HVXp0dsJ3>un~DtF)AoUVxt#pm9!cy6PUi=W!CwVC zs4M1;w7kUrC@UQC*-Q>_;IuJc+$~%ISc=2w7skZA%OzM2HBJFFob5JC@*1NJtbfjm4 zfaKE-E<2~Fq-t`wOT!5E%r^CQGj3mMwol*JalTlFICQGT8dvFOEVk9-4AFR+t~ApFfq_$vn>MY~0Co^3eVA(9y*e{A?fr)p z^(E~dG=*euh3q5EdYcCzL7;Zbp;m-b!a%$QW;k2HpgIEd zYY&bXi-$?nYrU;B7}F@?3AN-kd?QBUVKbxbyKDnwGZ@m;YJH1(dRSuIT;du@`gpi5 z<=DZq(#$fp)Y^CUgW&K}pY#3!6X zlXVHcd5lD!0>YOb*>@tEENv}Mfj@&6!QO!{zW{P+nR^wVK3iZDRhnvWYhFp>0HVu;{xy zq>OUnks4lmIuI1wmPB(OzUw`>-?u}Ex-=ONG!=3?3R=JNN$b_H_;;gY&ao04Z>MpW zV$lZsLMx(M3W@F%*Nun65PB?}nl${@$sDVZ5LC;YLSS&#Zo$NABsgvM>y#|F&;;d; z%o1rW*bL2FYqH8^MMzDUKhlBK$lDbQS@(Q;O061s8?&EUpz>r+tC18a9rBw#ci%lt zlxyJBA6g<~cHMjTpUw59Dxm)ViM| zM4Gl03E^POs-+{yNmoZgJkDt3-W6DR#?3QO$}1du72fd%RTk3J)U5|DJ#KoZg-Ff0 z6n&G{Nv)x#Oz@JfsED-YWYGjbeMf5)i4yHnh;5-?;S0$sEk^q|V6!4Cs|O-RU%