| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -77,9 +77,6 @@ static void DrawGame(void);         // Draw game (one frame) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void UnloadGame(void);       // Unload game | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void UpdateDrawFrame(void);  // Update and Draw (one frame) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Additional module functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void UpdateBall(void); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Program main entry point | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -165,13 +162,13 @@ void UpdateGame(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (!pause) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Player movement | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Player movement logic | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (IsKeyDown(KEY_LEFT)) player.position.x -= 5; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((player.position.x - player.size.x/2) <= 0) player.position.x = player.size.x/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (IsKeyDown(KEY_RIGHT)) player.position.x += 5; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((player.position.x + player.size.x/2) >= screenWidth) player.position.x = screenWidth - player.size.x/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Launch ball | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Ball launching logic | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (!ball.active) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (IsKeyPressed(KEY_SPACE)) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -181,7 +178,81 @@ void UpdateGame(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            UpdateBall(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Ball movement logic | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (ball.active) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                ball.position.x += ball.speed.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                ball.position.y += ball.speed.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                ball.position = (Vector2){ player.position.x, screenHeight*7/8 - 30 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Collision logic: ball vs walls  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (((ball.position.x + ball.radius) >= screenWidth) || ((ball.position.x - ball.radius) <= 0)) ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((ball.position.y - ball.radius) <= 0) ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((ball.position.y + ball.radius) >= screenHeight) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                ball.speed = (Vector2){ 0, 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                ball.active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                player.life--; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Collision logic: ball vs player | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (CheckCollisionCircleRec(ball.position, ball.radius, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                (Rectangle){ player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y})) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (ball.speed.y > 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.x = (ball.position.x - player.position.x)/(player.size.x/2)*5; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Collision logic: ball vs bricks | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            for (int i = 0; i < LINES_OF_BRICKS; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                for (int j = 0; j < BRICKS_PER_LINE; j++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    if (brick[i][j].active) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        // Hit below | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        if (((ball.position.y - ball.radius) <= (brick[i][j].position.y + brickSize.y/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ((ball.position.y - ball.radius) > (brick[i][j].position.y + brickSize.y/2 + ball.speed.y)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y < 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        // Hit above | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        else if (((ball.position.y + ball.radius) >= (brick[i][j].position.y - brickSize.y/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((ball.position.y + ball.radius) < (brick[i][j].position.y - brickSize.y/2 + ball.speed.y)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y > 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        // Hit left | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        else if (((ball.position.x + ball.radius) >= (brick[i][j].position.x - brickSize.x/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((ball.position.x + ball.radius) < (brick[i][j].position.x - brickSize.x/2 + ball.speed.x)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x > 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        // Hit right | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        else if (((ball.position.x - ball.radius) <= (brick[i][j].position.x + brickSize.x/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((ball.position.x - ball.radius) > (brick[i][j].position.x + brickSize.x/2 + ball.speed.x)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                                ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x < 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                            ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Game over logic | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (player.life <= 0) gameOver = true; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -260,90 +331,4 @@ void UpdateDrawFrame(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    UpdateGame(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    DrawGame(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Additional module functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void UpdateBall() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Update position | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (ball.active) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ball.position.x += ball.speed.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ball.position.y += ball.speed.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ball.position = (Vector2){ player.position.x, screenHeight*7/8 - 30 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Bounce in x | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (((ball.position.x + ball.radius) >= screenWidth) || ((ball.position.x - ball.radius) <= 0)) ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Bounce in y | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if ((ball.position.y - ball.radius) <= 0) ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Ball reaches bottom of the screen | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if ((ball.position.y + ball.radius) >= screenHeight) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ball.speed = (Vector2){ 0, 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ball.active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        player.life--; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Collision logic: ball vs player | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (CheckCollisionCircleRec(ball.position, ball.radius, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        (Rectangle){ player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y})) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (ball.speed.y > 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            ball.speed.x = (ball.position.x - player.position.x)/(player.size.x/2)*5; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Collision logic: ball vs bricks | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < LINES_OF_BRICKS; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        for (int j = 0; j < BRICKS_PER_LINE; j++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if (brick[i][j].active) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Hit below | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (((ball.position.y - ball.radius) <= (brick[i][j].position.y + brickSize.y/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ((ball.position.y - ball.radius) > (brick[i][j].position.y + brickSize.y/2 + ball.speed.y)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y < 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Hit above | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                else if (((ball.position.y + ball.radius) >= (brick[i][j].position.y - brickSize.y/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((ball.position.y + ball.radius) < (brick[i][j].position.y - brickSize.y/2 + ball.speed.y)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y > 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.y *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Hit left | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                else if (((ball.position.x + ball.radius) >= (brick[i][j].position.x - brickSize.x/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((ball.position.x + ball.radius) < (brick[i][j].position.x - brickSize.x/2 + ball.speed.x)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x > 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Hit right | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                else if (((ball.position.x - ball.radius) <= (brick[i][j].position.x + brickSize.x/2)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((ball.position.x - ball.radius) > (brick[i][j].position.x + brickSize.x/2 + ball.speed.x)) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                        ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x < 0)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    brick[i][j].active = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    ball.speed.x *= -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} |