diff --git a/main.cpp b/main.cpp
index f9a590c..95fa242 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,8 @@
 #include "text.h"
 #include "svg.h"
 #include <curl/curl.h>
+#include <sstream>
+#include <string>
 
 using namespace std;
 
@@ -11,7 +13,6 @@ struct Input
 {
     vector<double> numbers;
     size_t bin_count{};
-    vector<string> colors;
 };
 
 Input input_data(istream& inp, bool prompt)
@@ -38,17 +39,50 @@ Input input_data(istream& inp, bool prompt)
     }
     inp >> in.bin_count;
 
-    in.colors.resize(in.bin_count);
-    cerr << "Enter colors: ";
-    for (size_t i = 0; i < in.bin_count; i++)
+    return in;
+}
+
+size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx)
+{
+    size_t data_size = item_count * item_size;
+    stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+    char* item = reinterpret_cast<char *>(items);
+    buffer->write(item, data_size);
+    return data_size;
+}
+
+Input download(const string& address)
+{
+    stringstream buffer;
+
+    CURL* curl = curl_easy_init();
+
+    if(curl)
     {
-        inp >> in.colors[i];
+        CURLcode res;
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
+        res = curl_easy_perform(curl);
+        curl_easy_cleanup(curl);
+        if (res != 0)
+        {
+            cerr << curl_easy_strerror(res) << endl;
+            exit(1);
+        }
     }
-    return in;
+
+    curl_easy_cleanup(curl);
+
+    return input_data(buffer, false);
 }
 
-int main(int argc, char* argv[])
+
+/*int main(int argc, char* argv[])
 {
+    curl_global_init(CURL_GLOBAL_ALL);
+    Input input;
+
     if (argc > 1)
     {
         CURL* curl = curl_easy_init();
@@ -70,11 +104,22 @@ int main(int argc, char* argv[])
         return 0;
     }
 
-    curl_global_init(CURL_GLOBAL_ALL);
-
     auto in = input_data(cin, true);
     auto bins = make_histogram(in.numbers, in.bin_count);
-    show_histogram_svg(bins, in.colors);
+    show_histogram_svg(bins);
+
+    return 0;
+} */
+
+int main(int argc, char* argv[]) {
+    Input input;
+    if (argc > 1) {
+        input = download(argv[1]);
+    } else {
+        input = input_data(cin, true);
+    }
 
+    const auto bins = make_histogram(input.numbers, input.bin_count);
+    show_histogram_svg(bins);
     return 0;
 }
diff --git a/svg.cpp b/svg.cpp
index 1ec5992..4fb4674 100644
--- a/svg.cpp
+++ b/svg.cpp
@@ -22,26 +22,12 @@ void svg_text(double left, double baseline, std::string text)
     std::cout << "<text x='" << left << "' y='"<< baseline <<"'>"<< text <<"</text>";
 }
 
-void svg_rect(double x, double y, double width, double height, std::string fill = "black", std::string stroke = "black")
+void svg_rect(double x, double y, double width, double height, std::string fill = "purple", std::string stroke = "black")
 {
     std::cout << "<rect x='" << x << "' y='" << y << "' width='" << width << "' height='" << height << "' fill='" << fill << "' stroke='" << stroke << "' />\n";
 }
 
-std::string check_color(const std::string& color)
-{
-    if (color.find(" ") == -1 || color.find('#') == 0)
-    {
-        return color;
-    }
-    else
-    {
-        return "black";
-    }
-}
-
-
-
-void show_histogram_svg(const std::vector<std::size_t>& bins, const std::vector<std::string>& colors)
+void show_histogram_svg(const std::vector<std::size_t>& bins)
 {
 
     const auto IMAGE_WIDTH = 400;
@@ -68,7 +54,7 @@ void show_histogram_svg(const std::vector<std::size_t>& bins, const std::vector<
         for (std::size_t j=0; j < bins.size(); j++) {
             const double bin_width= MAX_ASTERISK * (static_cast<double>(bins[j]) / maxbin);
             svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j]));
-            svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black");
+            svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT);
             top += BIN_HEIGHT;
         }
         svg_end();
@@ -77,9 +63,10 @@ void show_histogram_svg(const std::vector<std::size_t>& bins, const std::vector<
         for (std::size_t j=0; j < bins.size(); j++) {
             const double bin_width= MAX_ASTERISK * (static_cast<double>(bins[j]) / maxbin);
             svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j]));
-            svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black");
+            svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT);
             top += BIN_HEIGHT;
         }
         svg_end();
     }
 }
+
diff --git a/svg.h b/svg.h
index 92ce6c8..b29b7fd 100644
--- a/svg.h
+++ b/svg.h
@@ -1,5 +1,5 @@
 #ifndef SVG_H_INCLUDED
 #define SVG_H_INCLUDED
 #include <vector>
-void show_histogram_svg(const std::vector<std::size_t>& bins, const std::vector<std::string>& colors);
+void show_histogram_svg(const std::vector<std::size_t>& bins);
 #endif // SVG_H_INCLUDED