diff --git a/.env.example b/.env.example deleted file mode 100644 index a09dcaf..0000000 --- a/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -NODE_PORT=3000 -NODE_ENV=dev -DB_HOST=localhost -DB_NAME=briques_db -DB_USER=briques_llm -DB_PASSWORD=briques_password_2025 \ No newline at end of file diff --git a/.gitignore b/.gitignore index b630057..46423bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ dev-db/ database/ -**/.env \ No newline at end of file +**/.env +*.data diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1f09c23 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +DIR_SQL = PostgreSQL +DIR_BACK = back-end + +BIN = prepare_dev + +all: $(BIN) + +prepare_dev: + cp $(DIR_BACK)/.env.example $(DIR_BACK)/.env + cd $(DIR_SQL) && make + +clean: + rm -f $(DIR_BACK)/.env + cd $(DIR_SQL) && make clean + diff --git a/PostgreSQL/.csv/brands.csv b/PostgreSQL/.csv/brands.csv new file mode 100644 index 0000000..e6e70a0 --- /dev/null +++ b/PostgreSQL/.csv/brands.csv @@ -0,0 +1,663 @@ +brand +Klein LLC +DuBuque and Sons +Wisozk-Heidenreich +Fadel-Torp +Predovic-Aufderhar +Simonis Inc +Gleason and Sons +Hilll-Douglas +Leannon Inc +Hane Inc +Bechtelar-Mosciski +Hane-Kirlin +Oberbrunner-Sauer +Lakin Inc + +Daniel-Kris +Price-Gerhold + +Schultz Inc +Erdman and Sons +Blick-Howell +Leannon Group +Prosacco LLC +Corwin-Schimmel +Morar-Harber + +Kemmer and Sons + +Boehm-Balistreri +Schumm LLC +Olson-Schmitt +McCullough-Stoltenberg +Ferry LLC +Cruickshank and Sons +Goodwin-Mayert +Feest Inc +Koss-Flatley +Stark Inc +Ratke-Bode +Walker-Pacocha +Schumm-Jacobs +Botsford Inc +Baumbach LLC +Turcotte Group +Boyle-Brown +Kuvalis and Sons +Cartwright Inc + +Russel-Heller +Gleichner-Barton +Kreiger-Walsh +Murphy-Von +Morissette-Zulauf +Jacobs-Schaefer +Fay and Sons + +Reichel LLC + +Gutkowski LLC +Littel Inc +Towne-Harvey +Lang-Kirlin +VonRueden and Sons +Bogan-Tremblay +Bradtke-Monahan +Stiedemann-Kling +Champlin-Jacobs +Walsh-Blick +Hagenes-Paucek +Volkman and Sons +Abshire Inc +Senger-Johnston +Hand Group +Rolfson-Mayert +Volkman-Ondricka +Runolfsdottir-Walter +Schulist-Wolf +Reichel-Franecki +Effertz and Sons +Howe LLC +Rohan-Bartoletti +Pacocha-Emmerich +Nolan-Quitzon +Stiedemann Inc +Connelly-Leuschke +Cummings-Gibson +Weimann-Kub +Nitzsche-McDermott +Von Group +Dietrich LLC +Schamberger and Sons +Jones-Bogisich +Corwin Inc +Ziemann-Kohler +Ratke-Langosh +Price-Bosco +Schmeler-Dibbert +Monahan Inc +Kuvalis LLC + +Schamberger-Kautzer +Dickinson-Grady + +Parisian-Runte +Hirthe Inc +Tromp-Renner +Pfeffer LLC +Jaskolski and Sons +Koepp and Sons + +Maggio-Hickle +Casper-Carter +Herzog-Jaskolski +Lakin-Borer +Sanford-Maggio +Shields-Kihn +Wilderman-Wisozk +Nienow-Sanford +Stiedemann LLC +Fay-Weber +Cartwright-Wiegand +Veum Inc +Greenholt Group +Bergnaum and Sons +Steuber-Breitenberg +Rempel-Lynch +Baumbach Inc +Jast-Schiller +Streich LLC +Marquardt-Parisian +Labadie and Sons +Gulgowski LLC +Balistreri Group +Kiehn-Hirthe +Effertz-Gorczany +Goldner-Breitenberg +Upton-Beier +White LLC +Rowe Group +Wolf-Roberts +Hudson-Pacocha + +Mohr-Pacocha +Doyle LLC +Kihn-Kirlin +Dooley LLC +Vandervort-Feest + +Thiel-Gorczany +Reichel-Mertz +Medhurst Group +Feil and Sons +Runolfsdottir Group +Fritsch-Gerhold +Lang Group + +Ullrich LLC +Oberbrunner-Hirthe +Bosco-Lehner +Orn Group +Blick-Bruen +Green and Sons + +Sporer Group +Prohaska-Hauck +Reynolds Group +Block-Parisian +Schumm-Ortiz +Leffler-Murazik +Crist LLC +Marquardt Group +Gislason Inc + +Ondricka-Hintz +Walsh LLC +Koepp-Schamberger +Rath-Runolfsdottir +Bayer-Green +Reichert Group +Haag LLC +Haley-Donnelly +Russel Inc +Zulauf Inc +Hermiston and Sons + +Runolfsdottir Inc +Smitham-Ryan +Goyette LLC + +Cummerata Inc +Marks-Nikolaus +Turcotte Group +Walsh Group +Erdman LLC +Willms-Ortiz +Miller and Sons +Moore and Sons +Leffler-Dicki +Kautzer-Funk +Murazik-Sipes +Pollich Group +Volkman-Koepp +Prosacco LLC + +Trantow LLC +McClure-Stanton +Corwin-Prohaska +Carroll and Sons + +West-Hane +Ernser and Sons +Jacobson-Kohler +Orn-Lemke +Moen-Lemke +Hackett-Mosciski +Hane LLC +Wisoky-Jenkins +Grady Inc +Hagenes Group +Donnelly-Waelchi +Hermann LLC +Weber and Sons +Stamm LLC +Fay-Satterfield +Ondricka-Waelchi +Jacobson and Sons +Smitham LLC +Heidenreich-Robel +Langworth-Beier +Spinka-Emard +Funk LLC + +Mayer and Sons +McGlynn-Beer +Rippin-Steuber +Moen-Yundt +Vandervort-Breitenberg +Tromp and Sons +Pagac-Gislason + +Kulas-Stehr +Ryan LLC +Bogisich-Baumbach +Steuber Inc +Boyle-Ondricka +Thompson LLC +Wilkinson-Flatley +Powlowski-Hane +Schumm and Sons +Thiel and Sons +Nolan-Witting +Zboncak-Pagac +Harris-Thompson + +Hickle-Schaefer +Miller LLC +Lindgren Group +Reilly-Kautzer +Barton and Sons +Sawayn Inc +Schmitt-Runolfsson +Gibson-Donnelly +Marks LLC +Yost LLC +Paucek and Sons + +Rice-Krajcik +Pfannerstill LLC +Willms-Runolfsdottir +Grady Inc +Reichert-Schroeder +Kilback-Johnston + +Bauch-Brown +Aufderhar LLC +Emmerich-Schumm + + +Bednar-Luettgen +Conroy-Wilkinson +Langosh-Howe +Breitenberg-Gerhold +Considine-Miller +Langworth and Sons +Balistreri LLC +Parisian-Pollich +Jacobson Inc + +Ferry-Torphy +Effertz LLC +Trantow-Marvin +Borer and Sons +Pfeffer-Klein +Leannon-Grady +Smitham-Mohr +Mante-Padberg +Hills Inc +Zemlak Group +Kessler-Green +Terry-Reichert +Macejkovic and Sons + +Rice-Bayer +Romaguera-Wuckert +Dickinson-Greenfelder +VonRueden Group + +Krajcik and Sons +Romaguera-Pfannerstill +Heller-Hammes +Wisozk LLC +Auer-Beatty +Heller-Marks +Kertzmann and Sons +Schuppe LLC +Hammes-Schimmel +Raynor Inc +Balistreri Group +McKenzie and Sons +Ebert Group +Stanton and Sons +Kiehn-Rohan +Collier and Sons +Johns-Howe +Hilll-Emard +Douglas-Dietrich +Quitzon Inc +Olson-Schumm +Larkin-Ruecker +Feeney Group + +Gislason LLC +Lemke and Sons +Hackett Group +Moen Inc +Murphy-Gottlieb +Barrows and Sons +Dicki LLC +Pollich-Weimann +Stiedemann and Sons +Ledner-Stanton +Koepp-Carter +Rice Group + +White and Sons +Jakubowski Inc + +Morissette-Hickle +Kutch-Senger +Beier-Hand +Waters Inc +Lang-Sporer +Parisian Group +Kuhn-Christiansen +Krajcik Inc +Leuschke-Pacocha +Jacobson Inc +Shields Group +Hauck Group +Hilpert-Grimes +Pacocha-Harvey +Walsh-Krajcik +Quigley-Miller +Swaniawski LLC +Miller-Cole +Gleason Group +Dooley-Witting +Conroy LLC +Parker Group +Spinka Group +Kunde-Wunsch + +Corkery-Farrell +Von-Metz +Ondricka LLC +Stamm-Renner +Lubowitz-Lehner +Kshlerin-Larson +Streich-Reichert +Hackett-Medhurst +Kozey-Stroman +McDermott-Kuhic +Willms-Farrell +Konopelski-Romaguera +Collier LLC +Carroll-Flatley +Gerhold Group +Stracke Group + +Reynolds-Johns +Gottlieb-Haag +Cruickshank-Gusikowski +Baumbach and Sons +Dickinson-Ankunding +Schumm and Sons +Kulas-Simonis +Ziemann-Haag +Wunsch-Hilll +Klocko-Kassulke +Satterfield-DuBuque +Collier Inc +Herzog-Denesik +Gibson and Sons +Miller LLC +Hyatt LLC + +Walter Group +DuBuque Inc +Reichert Group +Hoppe Group +Beier-Zieme +Hammes Group +Abshire-Bradtke +Hegmann and Sons +Schneider LLC +MacGyver LLC +Larkin LLC +Gislason-Cummings +Hickle-Simonis +Stokes-Bahringer +Greenholt Inc +Kozey Inc +Berge-Shields +Sauer-Hilpert +Rau Inc +Christiansen-Ortiz +Windler-Schneider +Waters Inc +Bayer LLC +Stokes Inc + +Ward-Yost +Buckridge-Schowalter + +Frami and Sons +Ruecker Group +Bosco-Walter +Hoeger-Reynolds +Reilly-Stiedemann +Krajcik LLC +Terry-Hermann +Kuhn-Baumbach +Lebsack LLC +Hagenes-Gottlieb +Kirlin Group + +Klocko LLC +Harvey-Daugherty +Torp-Rowe +Franecki LLC +Padberg-Bechtelar +Kling Inc +Buckridge-Stamm +Kuphal and Sons + +Stamm-Reichert +Windler Group +Turner LLC +Lehner and Sons +Nader-Sipes + +Schuppe-Hettinger +Nicolas LLC +Metz and Sons +Trantow-Hahn +Predovic-Johnston + +Farrell and Sons +Heaney Inc +Moen-Kassulke +Keebler Inc +Blanda-Herman +Hand LLC +White LLC +Wintheiser Group +Hahn-Treutel +Donnelly and Sons +Homenick-Torp +Beahan-Toy +Moore-McDermott +Stark Group + +Muller Group +Prosacco-Bogisich +Connelly-Howell +Dietrich-Toy +Wolf and Sons +Conroy LLC +Toy Inc +Rippin Inc +Hickle Group +Anderson LLC +Ullrich Group +Kutch Group +Hudson Group +Sauer Group +Cruickshank-Harris +Schulist-Feest +Marquardt Group +Senger and Sons +Bogisich-Kessler +Jenkins-Zulauf +Gleichner-McCullough +Schamberger-Pfannerstill +Reichert-McClure +Kub-McCullough +Cummerata-Hoeger +Thiel Group +Little Inc +Ondricka-Jast +Dibbert LLC +Auer and Sons +Murray-Kutch +Dare-Streich +Schroeder Group +Gorczany Inc +Kuhic-Von +Wyman-Bins +Weber and Sons +VonRueden and Sons +Padberg-Gislason +Donnelly-Heaney +Hayes-Weissnat +Veum-Ankunding + + +Walsh Inc +Predovic-Reichert +Spencer Inc +Trantow-Murazik + +Vandervort Inc + +Brown LLC +Wiegand-Renner +Boehm-Durgan +Mayert Group +Cummerata and Sons +Nolan-Boyer +Pfannerstill Group +Rutherford Inc +Oberbrunner-Schumm +Oberbrunner LLC + + +Balistreri-Quitzon +Mante-Bednar +Friesen-Rempel +Schumm Inc +Pouros Inc +Zboncak-Purdy +Olson Inc +Emmerich and Sons +Schneider and Sons +Runte-Schoen +Streich-Douglas +Homenick-Simonis +Schiller and Sons +Spinka LLC +Senger Inc +Heller-Kling +Ebert-Haley +Weber and Sons +Block and Sons +Welch LLC +VonRueden-Sanford +Wyman and Sons + +Hayes-Roob +Crist LLC +Kerluke and Sons +Jakubowski Group +Sawayn-Bergnaum +Stanton Inc +Lindgren-Rau +Morissette-Haley +Daniel and Sons +Zboncak-Emard +Predovic-Mann +Kling Inc + +McClure LLC +Osinski-Bailey +Mueller Inc +McClure-Waters +Hahn-Schulist +Spencer and Sons +Williamson-Goodwin +Zemlak Inc +Watsica-Schamberger +Koelpin-Marquardt +Connelly and Sons +Bradtke Inc +Cronin Group +Donnelly Group +Schmitt Group +Hermann-King +Stamm-Littel +Shields Group +Rippin-Wiegand +Cremin Group +Balistreri-McCullough +Howe-Runolfsdottir + +Zemlak Group +Hudson-Thiel +Klein-Larson +Harvey Inc +Auer Group +Keebler-Hyatt +Schmitt-Ratke + +Price-Bins +Vandervort Group +Emard-Powlowski +Harvey Inc +Tillman Inc +Kris LLC +Fisher and Sons +Morissette LLC +Willms LLC +Strosin-Howe +Thompson Inc +Kihn Group +Donnelly and Sons +Labadie Group +Gerhold and Sons +Murray Inc +Kirlin-Lemke +Torphy-Lockman +Reinger Inc +Schuster-Jaskolski +Huels-Tromp +Wehner-Harber +Leuschke Inc + + +Volkman-Kertzmann +Gerlach-Toy +Casper-Ondricka + +Wolf Inc +Wisozk Group +Wuckert Inc +Effertz Group +Schuppe and Sons + +Rodriguez LLC +Goldner-Purdy +Welch Inc +Mann-Kling + +Heidenreich and Sons +Williamson-Barton +McDermott-Dickinson +Torp-Vandervort +Wisozk Group +Reichert and Sons +Kirlin-Greenholt +Volkman Inc +Braun-Greenholt +Schmeler-Beatty diff --git a/PostgreSQL/.csv/colors.csv b/PostgreSQL/.csv/colors.csv new file mode 100644 index 0000000..341a26d --- /dev/null +++ b/PostgreSQL/.csv/colors.csv @@ -0,0 +1,20 @@ + +Aquamarine +Blue +Crimson +Fuscia +Goldenrod +Green +Indigo +Khaki +Maroon +Mauv +Orange +Pink +Puce +Purple +Red +Teal +Turquoise +Violet +Yellow diff --git a/PostgreSQL/.csv/dates.csv b/PostgreSQL/.csv/dates.csv new file mode 100644 index 0000000..91e6109 --- /dev/null +++ b/PostgreSQL/.csv/dates.csv @@ -0,0 +1,944 @@ +date +01-15-2011 +01-02-1973 +06-02-2004 +08-01-2022 +01-11-2008 +01-10-1983 +09-06-2016 +09-01-2012 +01-15-1970 +09-14-1979 +12-15-1991 +05-20-1971 +08-10-1986 +12-07-2007 +05-09-2020 +05-12-2012 +10-03-2000 +04-14-1986 +09-04-1997 +10-17-1985 +07-31-1971 +09-09-1976 +06-17-1971 +06-01-1976 +08-31-2018 +12-26-1972 +08-14-1983 +04-11-1970 +07-12-2016 +06-02-2023 +03-27-2020 +05-16-1997 +11-18-1976 +03-03-1976 +03-03-1975 +12-20-1996 +03-05-1980 +11-14-2018 +12-03-2006 +05-08-2018 +12-15-2009 +06-21-1975 +03-15-1996 +08-22-2023 +12-29-1997 +11-18-1975 +06-01-2012 +05-09-2020 +06-21-1987 +08-18-1985 +06-11-2014 +05-29-1991 +03-17-2002 +11-10-2021 +04-21-1976 +06-28-1975 +06-11-1984 +03-22-2016 +04-30-2016 +05-06-2001 +10-08-1970 +06-21-1970 +09-12-1999 +06-24-2011 +04-07-1974 +08-22-1982 +04-17-1975 +10-16-2010 +02-11-1988 +05-12-2006 +09-11-2006 +04-01-1983 +03-19-2018 +06-13-1986 +10-25-2020 +12-17-2012 +06-10-2004 +04-18-2018 +01-29-2006 +07-10-1980 +02-27-1985 +08-06-1992 +12-12-1993 +06-06-1977 +06-07-1979 +08-29-2018 +01-15-2021 +06-07-2008 +03-12-2013 +04-22-1992 +08-13-2009 +11-11-1969 +03-04-1978 +03-06-2023 +06-01-2014 +03-02-1998 +11-26-1975 +05-14-1972 +02-29-1996 +04-06-2006 +09-27-1979 +09-22-2022 +06-15-1985 +09-14-1987 +01-19-2024 +08-12-1986 +06-01-1983 +03-06-2018 +06-09-2015 +02-14-2007 +04-30-2024 +03-03-1987 +12-02-1976 +02-28-1990 +10-16-1983 +10-17-1988 +07-29-2019 +10-21-1990 +06-29-1999 +12-11-1995 +07-31-2015 +10-18-2023 +01-21-1974 +09-04-1973 +12-27-2017 +09-21-1985 +07-16-1990 +03-09-1971 +02-19-1978 +11-19-1974 +09-27-1976 +12-13-1996 +06-16-1998 +12-24-1993 +04-02-1984 +01-25-1970 +06-07-2013 +07-05-2015 +04-02-2014 +09-20-1999 +12-23-1972 +04-11-1982 +06-29-1979 +04-03-1976 +10-18-1988 +01-31-2021 +04-04-1997 +01-15-2001 +02-25-1987 +06-05-2005 +06-17-1983 +01-31-1987 +08-03-1981 +12-08-2013 +11-23-2002 +03-23-1999 +02-08-1971 +12-29-1998 +10-15-1983 +04-06-2006 +02-28-1984 +06-06-2000 +05-18-2007 +09-05-2023 +03-18-2016 +03-02-1999 +04-26-1984 +10-09-1995 +08-16-2004 +08-08-2020 +10-19-2001 +04-13-1987 +01-19-2012 +09-29-2019 +08-10-2000 +04-06-2011 +05-22-2010 +11-04-1988 +04-02-2015 +04-05-2010 +10-05-1982 +12-30-1976 +05-27-1980 +08-15-1976 +01-05-1975 +01-02-1994 +09-23-2024 +11-12-2020 +11-22-2020 +08-27-1979 +12-29-1991 +08-20-2004 +03-04-1988 +02-25-2023 +10-31-1984 +05-05-2017 +12-22-2022 +07-31-1983 +11-30-1991 +04-08-1979 +02-14-2008 +07-27-2018 +07-22-1989 +06-17-1998 +09-28-1983 +02-01-2023 +06-11-1972 +02-28-1977 +05-07-2013 +06-25-1990 +11-13-1994 +12-28-1978 +11-13-1992 +03-23-2006 +10-12-1984 +09-09-1986 +12-14-2009 +11-09-2024 +04-30-1973 +06-14-1997 +03-14-2011 +09-13-2016 +10-27-1999 +10-20-1991 +10-09-1978 +07-30-1992 +08-28-1992 +03-07-2017 +05-14-2008 +02-21-1974 +03-15-2007 +12-13-2019 +11-09-1997 +12-11-1992 +08-16-1993 +11-20-1982 +01-20-2016 +04-29-2003 +07-14-1974 +04-01-1986 +03-12-1992 +06-14-2017 +04-22-2007 +01-28-2011 +08-19-1977 +04-23-2020 +05-31-1973 +08-17-1978 +04-26-1972 +12-02-2000 +11-29-1974 +01-30-1972 +02-11-2006 +11-05-2006 +10-02-2016 +05-04-1998 +12-20-2023 +05-09-2024 +06-12-1986 +03-17-1988 +02-02-2021 +01-25-1977 +09-11-1970 +09-25-1998 +09-19-1986 +11-01-1980 +03-25-1988 +08-01-1974 +10-10-1991 +07-09-1978 +04-01-1970 +07-07-1987 +03-23-1983 +07-04-2001 +09-08-1985 +02-22-1994 +01-25-2016 +01-09-2005 +09-13-2015 +01-30-2009 +08-17-1995 +02-14-1987 +04-19-2010 +09-11-1972 +12-13-1986 +02-28-2001 +01-02-2001 +06-25-1976 +03-09-1998 +10-08-2008 +03-28-1981 +07-21-1991 +02-03-2022 +01-25-1995 +11-02-2007 +02-20-1987 +08-05-1992 +10-22-2014 +02-23-1996 +11-07-2020 +12-28-1976 +04-11-2003 +12-07-1984 +01-11-1976 +04-23-1991 +04-19-1989 +09-16-1998 +09-11-1998 +06-04-1982 +09-09-1989 +01-09-1983 +03-25-1981 +11-03-2005 +02-06-1970 +10-13-2011 +11-04-1975 +03-12-2004 +03-09-1996 +05-10-1998 +08-16-1991 +07-27-1991 +05-09-1984 +11-20-1989 +12-23-1981 +07-20-1984 +11-24-1976 +08-18-2010 +02-03-1991 +06-13-1991 +11-27-1978 +10-23-2023 +06-06-1991 +11-25-2012 +02-28-1992 +02-02-1979 +07-27-1974 +05-10-1990 +05-14-2000 +07-15-1988 +12-25-1982 +06-28-2000 +09-11-1983 +07-28-1978 +04-23-2016 +11-27-2018 +06-22-2002 +08-27-2004 +02-06-1985 +07-23-2012 +10-25-1970 +10-16-2016 +06-15-1992 +04-27-2024 +11-28-1972 +08-27-1970 +03-19-2013 +08-31-1988 +08-07-1997 +03-24-1984 +11-10-1969 +03-04-1989 +04-23-2009 +02-16-2020 +12-18-1984 +08-25-1988 +02-08-1993 +08-19-1989 +09-02-1996 +01-21-2020 +01-27-1975 +12-08-1973 +02-22-1977 +04-28-2006 +11-24-2008 +03-23-1971 +09-26-2014 +07-17-2019 +05-09-2000 +07-10-2008 +08-27-1983 +09-20-1972 +12-09-1993 +03-26-2004 +06-13-1979 +06-02-1977 +03-20-2024 +06-29-2000 +09-19-1995 +10-06-2020 +04-18-1997 +11-16-1997 +10-28-1999 +07-20-2006 +01-20-2017 +12-27-2016 +07-05-2004 +05-19-2013 +12-03-1976 +06-21-2012 +06-23-2019 +01-14-2019 +09-21-2002 +03-13-2004 +07-28-1970 +06-24-1989 +11-21-2018 +11-06-2023 +04-21-1994 +10-12-2001 +07-24-2005 +10-01-1984 +10-17-1969 +04-02-1994 +10-19-2013 +02-12-2003 +01-16-2015 +10-03-2000 +06-15-1990 +02-01-2013 +09-15-1974 +02-27-2015 +08-11-2021 +01-17-1987 +09-02-2004 +02-15-1988 +01-24-1991 +10-17-2022 +12-19-2012 +09-01-2006 +06-04-1979 +01-21-1989 +11-14-1991 +09-03-2008 +07-13-2020 +07-22-2018 +05-06-1970 +03-21-1976 +04-25-1992 +06-15-2003 +08-31-2015 +07-19-1977 +10-30-2003 +06-10-2013 +10-05-2015 +09-23-2000 +12-27-1992 +11-18-1981 +07-10-1989 +09-19-2015 +12-31-1978 +07-20-2001 +10-16-1992 +02-23-1988 +03-10-2016 +11-15-1969 +07-16-2013 +09-12-1989 +09-06-1983 +05-13-1979 +11-14-1993 +04-15-1991 +02-22-1992 +09-19-2013 +09-15-1994 +08-18-1993 +09-11-1998 +03-02-2016 +07-18-2012 +01-25-2005 +06-14-1983 +11-03-1992 +11-27-1978 +08-13-1999 +03-21-1987 +06-12-2014 +07-19-1987 +03-15-2021 +10-27-1992 +12-11-1990 +12-04-2017 +07-29-1979 +10-24-1979 +09-05-1984 +03-08-2000 +11-01-1993 +05-22-2002 +11-19-1985 +01-29-2004 +05-02-2008 +03-20-1980 +05-10-1990 +10-26-1995 +01-21-2011 +03-07-1975 +07-13-2000 +12-05-1986 +06-12-1982 +09-21-1980 +08-06-2010 +07-30-1974 +12-14-1980 +03-22-1995 +04-15-1972 +05-09-1988 +08-25-2007 +01-18-1990 +11-14-1999 +01-17-1980 +07-24-1976 +07-08-1982 +05-14-1985 +10-10-2018 +03-03-1984 +12-08-1989 +09-19-2020 +07-06-1982 +06-25-2015 +01-25-2001 +03-07-1988 +11-17-1987 +10-29-1991 +03-31-2020 +11-08-2001 +04-25-2002 +12-26-1992 +01-28-2019 +07-03-1972 +01-04-2024 +02-07-2009 +09-28-2010 +08-04-2015 +06-18-2016 +11-23-2018 +05-26-2004 +10-14-2001 +08-10-1997 +01-16-1970 +10-19-2007 +10-14-2005 +05-14-2009 +09-22-2010 +05-11-1985 +11-21-1995 +09-21-2020 +07-03-1991 +01-11-1985 +02-06-1993 +09-03-2007 +05-19-1973 +04-02-1973 +07-18-2021 +05-06-1970 +06-30-1980 +12-26-1991 +05-20-1995 +05-12-1998 +03-02-1970 +09-03-2002 +08-19-1987 +01-03-2004 +09-30-2005 +12-30-1985 +12-20-1992 +04-04-2008 +01-08-1986 +01-28-2011 +10-10-2010 +12-21-2003 +04-02-2004 +07-07-1994 +07-05-1984 +10-08-1995 +11-27-1979 +10-31-2020 +03-01-2004 +06-27-1972 +08-15-1975 +01-10-1996 +12-08-2012 +01-14-2018 +10-09-1982 +03-19-1996 +01-20-1994 +09-17-1990 +12-16-1971 +08-25-1984 +08-18-2020 +02-04-1987 +05-11-1975 +05-14-1970 +12-02-1994 +10-11-1999 +04-29-2013 +08-09-2006 +12-06-2023 +07-20-2007 +06-21-1987 +10-22-1985 +05-27-1980 +01-15-2000 +08-04-2010 +03-08-2008 +11-14-1974 +04-06-1995 +09-30-2006 +12-10-1974 +10-21-2008 +01-24-1981 +09-17-1975 +10-15-2009 +07-01-2019 +01-11-1990 +11-03-2005 +06-27-2000 +01-14-2015 +09-11-2024 +04-30-1997 +10-07-2015 +04-01-1976 +12-08-1990 +01-14-2019 +12-27-1997 +07-12-1981 +05-25-2005 +04-03-1985 +09-30-1992 +04-17-1983 +01-17-2003 +09-29-2017 +06-02-1975 +01-19-2006 +07-07-1990 +01-30-1972 +11-07-1995 +02-07-1994 +09-28-2023 +01-24-1980 +03-19-1987 +09-08-2013 +11-05-2013 +05-20-2014 +01-16-2018 +03-25-2012 +08-27-1972 +05-17-1976 +05-20-2009 +04-30-2014 +08-25-2014 +02-17-2024 +07-30-1977 +09-18-2022 +07-24-1979 +10-06-2020 +11-15-1974 +01-25-2019 +05-19-1988 +11-14-1978 +04-06-2012 +11-18-1981 +01-06-1982 +05-08-1995 +07-12-2006 +03-01-1970 +12-05-1987 +01-14-2005 +09-25-1978 +05-09-1997 +09-11-1998 +02-03-1990 +05-28-1990 +03-26-1999 +02-17-2000 +07-19-2007 +02-29-1992 +11-07-2004 +04-24-2017 +03-15-2010 +11-21-2020 +10-22-2003 +02-03-1983 +02-26-1971 +09-19-1996 +08-10-1974 +10-25-2003 +12-04-2019 +07-12-2004 +05-29-1997 +12-18-1980 +06-25-1999 +10-13-1993 +06-01-1977 +09-14-1983 +01-14-1979 +07-20-2017 +01-14-1993 +09-29-2017 +01-25-1980 +09-01-1997 +09-30-1989 +01-20-1993 +12-16-1997 +11-14-1977 +08-21-2005 +11-18-2000 +12-21-1987 +04-23-1999 +12-10-1986 +08-01-1995 +03-19-1988 +08-25-1984 +09-10-2008 +09-15-1990 +08-05-2002 +02-17-2024 +02-17-1972 +01-09-1997 +09-14-2004 +10-13-2000 +08-25-2019 +06-13-1993 +09-29-1987 +06-07-2003 +02-14-1986 +10-01-1971 +08-01-1975 +03-17-2024 +03-16-2009 +07-28-1998 +02-01-1995 +02-25-2001 +05-30-1998 +11-10-1998 +02-11-1983 +04-08-1976 +03-08-1970 +02-10-2003 +11-27-2020 +03-25-2020 +07-17-2015 +05-31-1992 +11-21-1969 +05-31-2022 +06-09-1984 +06-15-2014 +07-23-1994 +01-29-1985 +10-26-2015 +04-21-2012 +07-07-1972 +02-12-2007 +10-23-1996 +05-20-1991 +07-06-2003 +12-06-1975 +06-13-2009 +09-17-2010 +11-02-2022 +03-07-1996 +11-03-1995 +02-15-1993 +08-23-1995 +11-14-1982 +02-13-1973 +12-29-1979 +03-29-2005 +09-30-1970 +02-27-1982 +09-14-2017 +05-22-2020 +09-09-1986 +08-31-2008 +04-07-1996 +05-09-1971 +01-07-1986 +08-01-1979 +01-04-2021 +02-25-1975 +01-27-1981 +04-13-2015 +12-10-1981 +11-30-1989 +10-13-2006 +06-27-1990 +06-01-1996 +09-18-1991 +07-16-2019 +03-31-2013 +04-02-1970 +02-09-1998 +07-26-1986 +04-07-1976 +08-13-1989 +12-30-2015 +04-04-2003 +08-26-1991 +03-06-1992 +01-27-1987 +02-04-1986 +01-20-1999 +04-13-1980 +08-26-1992 +06-05-2011 +07-12-1990 +03-29-1971 +09-11-2016 +05-16-1992 +09-17-2022 +09-05-2018 +12-06-1986 +11-10-1969 +06-09-2018 +12-04-1999 +01-15-1997 +03-17-2021 +01-04-1990 +12-04-1987 +08-06-2019 +03-17-2014 +11-16-1980 +01-26-2021 +08-14-2000 +05-13-1975 +10-05-2011 +11-17-2020 +10-01-1971 +10-05-1987 +11-06-1973 +04-23-1995 +12-16-1996 +12-20-1985 +08-15-1980 +07-21-1995 +05-06-1998 +06-25-1996 +08-01-1988 +10-22-1999 +12-31-2023 +03-06-1975 +10-19-2000 +11-07-1989 +07-17-1980 +02-25-2018 +05-02-1993 +03-12-2007 +12-27-1972 +06-29-2008 +04-04-2016 +06-18-2020 +10-21-1975 +11-05-2009 +01-04-2010 +12-19-1976 +05-03-1992 +08-11-1977 +01-28-1984 +06-01-2004 +04-07-1990 +04-23-1995 +07-20-2011 +01-26-2004 +10-20-1997 +04-04-1989 +02-27-2015 +02-26-2021 +11-30-2000 +06-23-2018 +10-05-2007 +10-19-1975 +07-08-2013 +09-30-2011 +08-27-1991 +03-04-1999 +03-17-2001 +09-18-1997 +12-13-2014 +04-15-2024 +11-26-2009 +10-22-2000 +01-24-2014 +10-30-1993 +09-22-2016 +11-06-1969 +07-28-1995 +12-26-1995 +10-23-2005 +02-20-1988 +09-12-1983 +08-01-2023 +02-20-1988 +09-19-2022 +04-01-1998 +04-10-1988 +10-30-1989 +12-06-1990 +09-28-2022 +06-28-1980 +03-20-1987 +05-21-1971 +12-18-1986 +06-15-1990 +07-08-1972 +12-26-1989 +03-08-1978 +06-29-1980 +02-27-2011 +08-15-2017 +08-22-2007 +08-19-1992 +10-05-2016 +09-18-2004 +11-15-1971 +02-13-2000 +01-31-1989 +03-22-1974 +06-26-2021 +07-19-1999 +02-11-2003 +08-12-2021 +08-08-2011 +12-15-2023 +05-18-2014 +10-28-2018 +11-14-1996 +12-03-2019 +09-11-2001 +08-28-2010 +06-16-2014 +01-13-2004 +04-07-1981 +02-14-2016 +01-03-2022 +06-06-2013 +02-09-2023 +04-11-1986 +03-21-1979 +12-25-1990 +02-17-2020 +09-18-2002 +09-23-2010 +11-21-1996 +01-31-1980 +01-27-2000 +01-27-1988 diff --git a/PostgreSQL/.csv/link_tool b/PostgreSQL/.csv/link_tool new file mode 100644 index 0000000..5e91e55 --- /dev/null +++ b/PostgreSQL/.csv/link_tool @@ -0,0 +1 @@ +https://mockaroo.com/ diff --git a/PostgreSQL/.csv/name_models.csv b/PostgreSQL/.csv/name_models.csv new file mode 100644 index 0000000..8ca5d1d --- /dev/null +++ b/PostgreSQL/.csv/name_models.csv @@ -0,0 +1,893 @@ +Ninjago: Book of Adventures +Gears +Town Mini-Figures +Castle 2 for 1 Bonus Offer +Space Mini-Figures +Space Mini-Figures +Space Mini-Figures +Space Mini-Figures +Castle Mini Figures +4.5V Samsonite Gears Motor Set +Legend of Chima: Corbeaux et Gorilles +Master Mechanic Set +Master Builder Set +Basic Building Set in Cardboard +Discovery Set +Special Offer +Basic Building Set in Cardboard +Pre-School Set +Basic Building Set +The Majestic Horse +Chain Links +Basic Building Set +Bulldozer Chain Links +Extra Large Tires & Hubs +Wheel Set +Digger Bucket Assembly +Basic Building Set +Doll Furniture +Ninjago: Build Your Own Adventure +Star Wars: Build Your Own Adventure: Galactic Missions +Nursery Furniture +Building Set +The Race to Build It Board Game +Doors and Fences +Living Room +Farm Animals +Basic Building Set +Propellers and Wheels +Pre-School Beginners Set +Playhouse +Jumbo Brick Pull Toy +Basic Building Set +Jumbo Bricks +Farm +Assorted Clear Bricks & Plates +Gates and Fences +Windows / Doors & Trees / Bushes +Lighting Device Pack +Hinges +Assorted Basic Bricks - Red +Assorted Basic Bricks - White +Assorted Basic Bricks - Blue +Assorted Basic Bricks - Yellow +Trees & Bushes +Basic Building Set +Large Wheels +Small Wheels +Assorted White Plates +Jumbo Brick School Set +Motor Wires +Five Large Base Plates - Green +Five Large Base Plates - White +Five Large Base Plates - Blue +Ducks +Two Garage Door Kits +Basic Building Set +Governor Set +Battery Box +Block Box +Pre-School Set +Pre-School Set +The Ultimate LEGO Book +Atlantis: Brickmaster +Pirates: Brickmaster +Ninjago: Brickmaster +Harry Potter: Characters of the Magical World +Pre-School Set +Roadway Base Plate +Basic Building Set with Train +Ambassador Set +Police Station +4.5V Replacement Motor +Legoville +Racer +Tub Boat +Star Wars Battle Bridge storage case +Super Set +Trees & Flowers +Guarded Inn +Jurassic World - PC DVD +Mosaic Set +Metroliner +Railroad Club Car +Harry Potter: Years 5-7 - PS Vita +1 x 2 Sand Red Bricks +Batman the Videogame - PSP +2 x 2 Sand Red Bricks +Marvel Super Heroes - PS4 +2 x 4 Sand Red Bricks +Jurassic World - Xbox One +Jurassic World - PS Vita‎ +Marvel Avengers - Xbox One +Marvel Avengers - PS4 +Marvel Avengers - PS Vita‎ +Marvel Super Heroes - Xbox One +Marvel Avengers - PC +Star Wars: The Force Awakens - 3DS +Star Wars: The Force Awakens - PS Vita +Star Wars: The Force Awakens Deluxe Edition - PS3 +Star Wars: The Force Awakens - PS3 +1 x 6 Sand Red Bricks +Harry Potter Collection - PS4 +Marvel Super Heroes 2 - Xbox One +Marvel Super Heroes 2 - PS4 +Marvel Super Heroes 2 - Nintendo Switch +The Incredibles - Nintendo Switch +The Incredibles - PS4 +DC Super-Villains - Nintendo Switch +DC Super-Villains - PS4 +The Incredibles - Xbox One +2 x 4 Sand Red Ridge Roof Tiles Steep Slope +Harry Potter Collection - Xbox One +Harry Potter Collection - Nintendo Switch +The LEGO Movie 2 Videogame - Nintendo Switch +The LEGO Movie 2 Videogame - PS4 +The LEGO Movie 2 Videogame - Xbox One +Jurassic World - Nintendo Switch +2 x 4 Roof Tile Sand Red +Assorted Blue Bricks +Assorted Yellow Bricks +Assorted Blue Plates +Assorted Yellow Plates +Open Freight Wagon +Caboose +Passenger Wagon +Tanker +Hopper Wagon +Darth Maul +Rebel Blockade Runner +Santa Fe Super Chief +Santa Fe Super Chief - Limited Edition +U.S.S. Constellation +Master Builder Set +Red Baron +Naboo Starfighter +Train Engine Shed +Lunar Lander +Ninjago Lloyd Backpack +Nexo Knights Backpack +Imperial Star Destroyer +Friends Backpack +Ninjago Green Lloyd Junior Backpack +Ninjago Prime Empire Junior Backpack +Mermaid Junior Backpack +Nexo Knights Shoulder Bag +Friends Juice Bar Shoulder Bag +Friend Pencil Case +Ninjago Lloyd Gym Bag +Star Wars The Dark Side Darth Vader Gym Bag +Star Wars Stormtrooper Gym Bag +Friends Pink Gym Bag +Ninjago Dragon Master Gym Bag +Ninjago Green Lloyd Gym Bag +Purple Gym Bag +Navy Gym Bag +Ninjago Kai Backpack Trolley +Ninjago Lloyd Backpack Trolley +Nexo Knights Backpack Trolley +Friends Funpark Backpack Trolley +Pizza To Go +Breezeway Cafe +Black Seas Barracuda +Main Street +American Flag +2x2 Electrical Plate +Windows and Doors +Pillars and Beams +City Police Backpack Trolley +Ninjago Urban Backpack Trolley +Friends Girls Rock Backpack Trolley +Friends Hearts Backpack Trolley +Brown Tiles +Light Gray Arches +Small Wheels and Axles +Large Wheels and Axles +Gray Fences +Star Wars Stormtrooper Pencil Case +Ninjago Lloyd Energy Pencil Case +Ninjago Green Lloyd Pencil Case +Purple Pencil Case +Parrot Pencil Case +Violet Pencil Case +Navy Pencil Case +Transparent Bricks +Ninjago Spinjitzu Jay Pencil Case +Ninjago Green Lloyd Pencil Case +Purple Pencil Case +Navy Pencil Case +Black Slopes 33 +Black Slopes 33 3 x 2 and 3 x 4 +Black Slopes 33 3 x 1 and 3 x 3 +White Plates 2 x n +Black Plates 2 x n +Red Plates 2 x n +Dark Green Plates 2 x n +Light Gray Plates 2 x n +Duplo Bib +Black Plates 1 x n +Red Plates 1 x n +Green Plates 1 x n +Light Gray Plates 1 x n +White Plates 1 x n +Castle Accessories +Mini-Fig Headgear +Santa Claus +Christmas Tree +Reindeer +Mr. Bunny +TECHNIC Beams +Ninjago Green Lloyd Backpack +Stars Backpack +Purple Backpack +Navy Backpack +Bushes +Cross Axles +Spider-Man Action Pack +TECHNIC Gear Wheels +TECHNIC Motor +Train Connection Wire +Snowman +Angel +Birthday Pack Heart +Ninjago Green Lloyd Backpack Trolley +Ninjago Golden Lloyd Backpack Trolley +Birthday Pack Daisy +Birthday Pack Star +90 Years of Play Metal Key Chain +Turkey +100 LEGO Stores North America +Universal Building Set +Ninjago Kai Lunch Bag +Ninjago Lloyd Lunch Bag +Ninjago Cole Lunch Bag +Ninjago Jay Lunch Bag +City Citizens Wallet +Ninjago Into the Unknown Wallet +Ninjago Kai Pencil Case +Ninjago Jay Pencil Case +Friends Hearts Pencil Case +Ninjago Into the Unknown Pencil Case +City Race Pencil Case +City Citizens Gym Bag +Snowflake +4.5V Battery Case +Number/Symbol Blocks +Foliferous Tree +Bush +Cypress Trees +2 x 2 Sand Red Roof Tiles +Jumper Bricks +Accessories Heart +Accessories Daisy +Accessories Star +Imagination Set 1 +Mosaic Set +NBA Basketball Teams +Cloud City +Wright Flyer +NHL Action Set with Stickers +Train Level Crossing +Train Level Crossing +Rebel Snowspeeder +4.5V Battery Case +TIE Fighter Collection +Motorized Hogwarts Express +Burlington Northern Santa Fe Locomotive +Y-wing Attack Starfighter +Holiday Decoration Kit +Universal Joints +Mosaic Set - Domestic Animals +Death Star II +Sandcrawler +Assorted Light Gray Bricks +Assorted Dark Gray Bricks +Assorted Brown Bricks +Assorted Light Gray Plates +Assorted Dark Gray Plates +Assorted Brown Plates +Letters Large +Hot Rod +Maersk Sealand Container Ship 2004 Edition +Maersk Sealand Container Ship 2005 Edition +Maersk Line Container Ship 2006 Edition +Maersk Line Container Ship 2010 Edition +LEGO Truck +High Speed Train Locomotive +High Speed Train Car +City Airport +Black Ridge Roof Tiles +Letter Bricks for Wall Board +Black Roof Tiles +Red Ridge Tiles +Red Roof Tiles +Elf Boy +Elf Girl +Brickmaster Welcome Kit +Mrs. Bunny +Chicken & Chicks +TTX Intermodal Double-Stack Car +Letter Bricks for Wall Board +Holiday Train +Imperial AT-ST +Boeing 787 Dreamliner +Motorized Walking AT-AT +Millennium Falcon +Letters +Eiffel Tower 1:300 +Cafe Corner +Hobby Train +Town Plan +Green Grocer +General Grievous +Volkswagen Beetle +Death Star +Taj Mahal +Market Street +Mosaic Set - Lion +Star Justice +Space Skulls +Medieval Market Village +Emerald Night +Republic Dropship with AT-OT +Grand Carousel +Fire Brigade +Tantive IV +Winter Toy Shop +Tree and Signs +Custom Car Garage +Basic Bricks +Takutanuva +Ultimate Dume +Voporak +Vezon & Kardas +Locomotive +4.5V Motor Set +Imperial Flagship +Basic Vehicles +Grand Emporium +Imperial Shuttle +Shuttle Adventure +Supplemental Pack for Shuttle Adventure Set 10213 +Tower Bridge +Winter Village Bakery +Diagon Alley +Pet Shop +Maersk Container Train +Imagination Basic Set 2 +Volkswagen T1 Camper Van +Mini Basic Bricks +Super Star Destroyer +Winter Village Post Office +Kingdoms Joust +Town Hall +R2-D2 +Sopwith Camel +B-wing Starfighter +Haunted House +Winter Village Cottage +Super Value Set +Mini Modulars +Red Baseplate +Shuttle Expedition +Palace Cinema +Horizon Express +Sydney Opera House +Winter Village Market +Ewok Village +The Tower of Orthanc +Red Five X-Wing Starfighter +Animals +Maersk Line Triple-E +MINI Cooper +Parisian Restaurant +Fairground Mixer +Adventurers Value Pack +Ferris Wheel +Ferrari F40 +Winter Toy Shop +Year Of The Snake +Figures and Furniture +Brick Bank +Volkswagen Beetle +Big Ben +Winter Holiday Train +Assembly Square +Taj Mahal +Carousel +London Bus +Winter Village Station +Downtown Diner +Playhouse Boxes +Roller Coaster +James Bond Aston Martin DB5 +Winter Village Fire Station +Corner Garage +Ford Mustang +NASA Apollo 11 Lunar Lander +Gingerbread House +Vestas Wind Turbine +Harley-Davidson Fat Boy +Bookshop +Vehicles +Fiat 500 +Old Trafford - Manchester United +Haunted House +ECTO-1 +Elf Club House +Colosseum +Crocodile Locomotive +Police Station +Volkswagen T2 Camper Van +Flower Bouquet +6 x 12 Base Bricks +Bonsai +adidas Originals Superstar +NASA Space Shuttle Discovery +Camp Nou - FC Barcelona +Compass Sensor for Mindstorms NXT +Bird of Paradise +Pickup Truck +Milk Delivery Truck - Tine +Queer Eye: The Fab 5 Loft +Friends - The Apartments +Titanic +Porsche 911 Turbo & 911 Targa +Boutique Hotel +Vespa 125 +Real Madrid – Santiago Bernabéu Stadium +Front-End Loader +Front-End Loader +Back to the Future Time Machine +TECHNIC I: Simple Machines Set +Optimus Prime +Loop Coaster +Chevrolet Camaro Z/28 1969 +Atari 2600 +Eiffel Tower +Holiday Main Street +Succulents +4.5V Motor Set with Rubber Tracks +Building Cards - 1030 +Orchid +Jazz Club +Wildflower Bouquet +Dried Flower Centerpiece +Tranquil Garden +Lord of the Rings: Rivendell +Land Rover Classic Defender 90 +Concorde +Imagination Set 3 +Eldorado Fortress +TECHNIC II Set {4.5v} +Corvette +PAC-MAN Arcade +Alpine Lodge +Natural History Museum +Dune Atreides Royal Ornithopter +Bouquet of Roses +Tiny Plants +McLaren MP4/4 & Ayrton Senna +Building Cards - 1032 +Kingfisher Bird +Medieval Town Square +The Lord of the Rings: Barad-dûr +Retro Radio +The Endurance +Lamborghini Countach 5000 Quattrovalvole +Bumblebee +Wreath +Teachers Resource Set +NASA Artemis Space Launch System +Pretty Pink Flower Bouquet +Mini Orchid +Lucky Bamboo +Flower Arrangement +Williams Racing FW14B & Nigel Mansell +Duplo Hooded Towel +Fountain Garden +Brick Tote Bag +Chrysanthemum +Plum Blossom +Poinsettia +ERBIE the Robo-Car +Manual Control Set 1 +Over the Moon with Pharrell Williams +Rainbow Fun +Farm Set +Fun Future +Universal Building Set +World Fun +Mission to Mars +Replacement 4.5V Motor +Harbor +Learn About Chinese Culture +Universal Building Set +Animal Train +Daily Routines: Bath Time +Daily Routines: Eating & Bedtime +Big Feelings & Emotions +Caring for Animals at the Farm +Mack at the Race +Elsa & Bruni in the Enchanted Forest +Caring for Bees & Beehives +Imagination Set 4 +Community People +Alphabet Truck +Universal Set for Boys and Girls from 1 1/2 Years +3in1 Space Shuttle Adventure +Buildable People with Big Emotions +Train Tunnel and Tracks Expansion Set +Train Bridge and Tracks Expansion Set +Interactive Adventure Train +Big Interactive Community Train +Peppa Pig Garden and Tree House +Peppa Pig Boat Trip +Peppa Pig Birthday House +Peppa Pig Supermarket +The LEGO Ninjago Movie Kai Backpack +Visit to the Vet Clinic +Cars and Trucks Brick Box +Community Vehicles +Industrial Elements +Educational LEGO Building Set +Train Set +Ninjago Foldable Backpack +Extra Track +Bridge and Crossing Tracks +Ships +Galaxy Explorer +Horse Stable +Basic Pack +Zoo Friends +Zoo Bus +Circus Show +My First Circus +Play House +Train Accessory Set +My First Train Set +Deluxe Train Set +Dusty and Chug +Canada Post Truck +Never Land Hideout +My First Garden +My First Construction Site +Garbage Truck +Building Set +Big Front Loader +Baby Calf +Farm Animals +Farm Tractor +Big Farm +Ambulance +School Bus +Truck +Imagination Set 5 +Community Buildings +Mickey Mouse and Friends +My First Police Set +Z-Blob Plush +Fire and Rescue Team +Beach Racing +Stena Line Ferry +Superman Rescue +The Joker Challenge +Batcave Adventure +My First Shop +Circus Transport +Mini Basic Pack +Creative Cars +Toddler Build and Play Cubes +Toddler Build and Pull Along +Creative Bucket +Creative Chest +Giant Tower +Number Train +A Fairy Tale +Peekaboo Jungle +Toddler Starter Building Set +Creative Suitcase +Creative Picnic +Toddler Build and Boat Fun +Treasure Attack +All-in-One-Gift-Set +All-in-One-Pink-Box-of-Fun +All-in-One-Box-of-Fun +Creative Animals +Creative Ice Cream +Creative Building Cube +Zoo Care +Big Royal Castle +Clubhouse Café +Deluxe Box of Fun +Forest: Ducks +Forest: Animals +Forest: Fishing Trip +Forest: Park +Mom and Baby +Ice Cream Truck +Café +Rally Car +Airport +Fire Boat +Fire Truck +Fire Station +Disney Princess Collection +Birthday Parade +Batman Adventure +Classic Race +Road Plates and Signs +Delivery Vehicle +Camping +My First Bus +Treasure Island +Rosie the Ambulance +Backyard Clinic +Spider-Man Web-Bike Workshop +Spider-Man Spider Truck Adventure +UNICEF Van +Single Disk Pack +My First Tractor +My First Playhouse +My First Farm +Creative Building Box +Town Vehicles +Large Creative Box +Basic Bricks Large +Community Workers +Dacta Buildings +House Accessories - 182 elements +XL Creative Brick Box +Monster Trucks +My First LEGO Princess +My First LEGO Set +Blue Suitcase +Vehicle Suitcase +Pink Suitcase +36 Little People + Accessories +My First LEGO Fire Station +Creative Bucket +Creative Chest +Creative Tower +Spider-Man: Spider-Car Pursuit +Digger +Construction +Princess Play Castle +Turtle Lair +Community Vehicles +Fire Emergency +Batman: Defend the Batcave +Race Car Rally +Pony Farm +Police – The Big Escape +Beach Trip +Pirate Treasure Hunt +Garbage Truck +Air Patrol +Creative Building Cube +Creative Suitcase +Road Work Truck +Supermarket Suitcase +Fire Suitcase +Family House +Spider-Man Hideout +Speedboat +Creative Bricks +Creative Supplement +Creative Supplement Bright +Creative Building Box +Medium Creative Brick Box +XXXL Box +Large Creative Brick Box +Sand Baseplate +Green Baseplate +Stunt Flyer +Gray Baseplate +Creative Building Set +Creative Builder Box +Creative Box +Creative Building Basket +Blue Creative Box +Red Creative Box +Green Creative Box +Orange Creative Box +4.5V Motor Set +Bricks 2 x 2 and 2 x 4 +Bricks and Gears +Creative Suitcase +Blue Baseplate +Bricks on a Roll +Bricks Bricks Bricks +Canada Post Mail Truck +Police Helicopter Chase +Iron Man vs. Loki +Snake Showdown +Batman & Superman vs. Lex Luthor +Lost Temple +4.5V Reversible Power Unit +Lightning McQueen Speed Launcher +Cruz Ramirez Race Simulator +Demolition Site +Police Truck Chase +Batman vs. Mr. Freeze +Shark Attack +Fire Patrol Suitcase +Thunder Hollow Crazy 8 Race +Florida 500 Race Final +Road Repair Truck +LEGO People Supplementary Set +Mountain Police Chase +The Joker Batcave Attack +Spider-Man vs. Scorpion Street Showdown +Bunchu Plush +Pteranodon Escape +Raptor Rescue Truck +T. Rex Breakout +Underminer Bank Heist +Advent Calendar 1999 +The Great Home Escape +City Central Airport +Woody & RC +Toy Story 4 RV Vacation +Supplementary Set +Carnival Thrill Coaster +Mickey & Friends Fire Truck & Station +"Mickey +Mickey and Friends Castle Defenders +Animal Mosaic Puzzle +Hulk vs. Rhino Truck Showdown +Spider-Man Webquarters Hangout +Bakey with Cakey Fun +Animal Mosaic Puzzle +Drill Spinner Vehicle +Spidey vs. Green Goblin +Team Spidey Web Spinner Headquarters +Crafting with Baby Box +Baby Animals +Savanna +Arctic +Jungle +Around the World +Horses +Horse Trailer +Little Plane +Police Patrol +Battery Box +Push Train +Backhoe Loader +Truck & Tracked Excavator +Big Construction Site +Tow Truck +My First Rocket +My First Cars and Trucks +Creative Chest +My First Truck +My First Garden +Creative Building Basket +Batwing Adventure +Mickey & Friends Beach House +Supplementary Pack +My First Caterpillar +Birthday Picnic +Preschool +Pizzeria +Family House +Family Pets +Shooting Gallery +Big Fair +Fun Family Fair +Batcave Challenge +Mickey Racer +Minnie Mouse Bow-tique +My First Carousel +My First Number Train +My First Bricks +My First Plane +My First Cakes +My First Bus +My First Bird +Creative Builder Box +Creative Box +Piston Cup Race +My First Puzzle Pets +My First Ladybug +My First Race Car +Bulk Bucket +My First Emotions +My First Celebration +My First Animal Brick Box +Large Playground Brick Box +Fun Creations +Farm Pony Stable +Farm Adventures +Farm Animals +Airport +Train Bridge and Tracks +Steam Train +Cargo Train +Spider-Man & Hulk Adventures +Gentle Giants Petting Zoo +T. rex Tower +Road Burner +Train Tracks +My First Tow Truck +My First Balancing Animals +My First Fun Puzzle +My First Car Creations +Creative Fun +Basic Figures +Spider-Man vs. Electro +Toy Story Train +My First Minnie Build +My First Mickey Build +Frozen Ice Castle +Police Bike +TECHNIC Control I +Fire Truck +Police Station +Fire Station +Baby Animals +Tropical Island +World Animals +Plane +Heart Box +Submarine Adventure +Brick Box +Deluxe Brick Box +Alphabet Truck +Fire Truck +Tow Truck +Batcave +TECHNIC Control II +Super Heroes Lab +Playroom +Bedroom +Pizza Stand +Bakery +Modular Playhouse +Bulldozer +Truck & Tracked Excavator +Wrecking Ball Demolition +Tower Crane & Construction +Creative Animals +Alphabet Town +Batman: Arkham Asylum Breakout +Dinosaur Nursery +T. rex and Triceratops Dinosaur Breakout +Spider-Man Headquarters +Johnny Thunder +Mickey & Minnie Birthday Train +Happy Childhood Moments +Space Shuttle Mission +Garbage Truck and Recycling +Family Camping Van Adventure +Race Cars +Parking Garage and Car Wash +Farm Animal Care +Farm Tractor & Animal Care +Super Sub +Horse Stable and Pony Care +"Barn +Unicorn +Number Train - Learn To Count +Animal Train +Amusement Park +Fire Helicopter & Police Car +Creative Birthday Party +Police Station & Helicopter +Race Buggy +Airplane & Airport +Spider-Man & Friends: Funfair Adventure +Bath Time Fun: Floating Red Panda +Bath Time Fun: Floating Animal Train +Bath Time Fun: Floating Animal Island +Police Motorcycle +Doctor Visit +Fire Truck +Fire Station & Helicopter +Res-Q Runner +Wild Animals of Africa +Wild Animals of the Ocean +Wild Animals of South America +Wild Animals of Asia +Wild Animals of the World diff --git a/PostgreSQL/.csv/names.csv b/PostgreSQL/.csv/names.csv new file mode 100644 index 0000000..6235472 --- /dev/null +++ b/PostgreSQL/.csv/names.csv @@ -0,0 +1,987 @@ +name +Tidcombe +MacKegg +Twelves +Fildes +Prin +Swinnard +Brithman +Matussow + +Golborn +Crookston +Hegge +Milesop +Urpeth +Mixter +Forty +Bromilow +Upchurch +Heinsius +Bassham +Geindre +Yelding +Brownlea +Wimpress +Moodey + +Clewlow +Tripp +Cromett +Lorait +Rohloff + +Holdin +Lickess + +Scohier +Letixier +Pegler + +Perazzo +Odeson +Pakeman +Harbison +Belli +Bruna +Hembry +Prandi +Humbatch +Stilgoe +Puttock +Klima +Matousek +Najera +Inkin +Suttle +Imrie +Edmett +Enston + +Redler +Aggs +Dugood +Aleksahkin +Fardo + +Tolomio +Sancraft +Lapere +Hardan +Esposito +Stoggell +Bernardotte +Ucceli +Swadlin +Pawlyn +Langstone +Worley +Pearlman +McGrill +Kubicki +MacVicar +Cruickshank +Quigley +Bloschke +Rickards +Soreau +Bidwell +De Mitri +Yitzhak +Kettlestring +Drover +Tyrie +Taggart +Lane +Mithon +Kittoe +Reggiani +Bassam +Baake +Garrity +Blundon +Treneer + +Antonoyev +Toor +Sockell +Cunningham +Bayldon +Worg +Inold +Briand +Jacobsohn +Ormes +Aitcheson +Meysham +Staton +Rosoni +Eliasen +Stubs +Outram + +Scotchmore +Flatt +Amos + +Elmes +Edeler +Kemster +Maskell +Braunthal +Penylton +Tidbold +Hooke +Domingues +Roget +Amdohr +Ivanishev +Mettetal +Spolton +Choak +Robbey +Grishankov +Braidwood +Sillis + +Pozzi +Novotni +Habbijam +Tunney +Drable +Ladds +Wyldes +Chapple +Guille +Hanretty +Dare +McTrusty +Pilipets + +Oakwell +Keyse +Benettini +Bresnahan +Eve +Opie +Somes +Gavaghan +Ollivier +Saterweyte +Benian +Cornils +Ager +Swatman +Grenfell +Hounson +Postlewhite +Esome + +Castellino +Impleton +Bestall +Rudland +Wyke +Peppard +Cherm +Pullin +Girhard +Lago +Grossman +Janusz +Fetters +Hold +Hellens +McDill +Andreini +Anglin +Solleme +Mibourne +Abelov +Gwillyam + +Scolli +Waslin +Heddon +Gross +McClory +Redwall +Lusted +Durrett +Warham + +Raeside +Conaboy +Fraschini +Spracklin +Ingarfill +Asey +Plank +Kinahan +Allcoat +Lace +Hazelton +Sinton +Bretherick +Thornhill +Dearlove +Brain +Mollatt +Tann +Greydon +Abley +Keattch +Capps +Varsey +Plessing +Bowkett +Hanstock +Bachelar +Wayland + +Raund +Howkins +Blampey +Hudleston +Barthelet +Lamont +Burley +Ackhurst +Stormes +Capelin +Mayhead +Gatty +Ryrie +Hollingshead +Phillippo +Giacometti +Jowsey +Cazereau +Seeman +Harnetty +Graysmark +Meere +Allerton +Bediss +Braunthal +Coot +Hulatt +Every + +Foley +Balle +Winwood +Hookes +Poolman +Orman +Adlington +Dadson +Marcham +Vigurs +Gostling +Filyukov +Vasler +Wastall +Camilletti +Maylam +Jeanenet +Ashall +Gratrix +Chesshire +Bridson + +Clines + +Thebe +Burg +Cumbers +Snalham +Carnelley +Raffles +Viggars +Brok +Geistmann +Scutter +Kelsall +Degenhardt +McKmurrie +Swetland +Bastock +Baunton +Drakers +Vearncomb +Malyan +Blodgetts +Wingeat +Dovey +McGinlay +Assur +Schukraft +Shelper +Coldman +Huggard +Corney +Springtorpe +Gotfrey +Cottingham +Gudger +Bridgnell +McCallum +Witts +Terrazzo +Mangin +Konzelmann +Marsy +Gillingwater +Glandfield +Brumwell +Rice + +Durram +Sandwith +Frankland +Carnson +Pacitti +Willoughway +Leonida +Fieller +Pallaske +Heeps + +Itzcovichch +Hutchin +Konrad +Castelow +Narbett +Folca +Clynman +Battista +Bradnam +Clayton +Newstead +Wetherill +Wyd +Leachman + +Clayal +Connah +Gretton +Ierland +Frogley +Lepard +Matyushonok +Kovelmann +Siely +Lefeaver +Rookledge +Wink +Derrell +Farbrother +Maddaford +Brayley +Stone Fewings +Hairon +Ree +Dohmer +Sandford +Darley +Kirkhouse +Srawley +Akhurst +De Coursey +Curnok +Grishagin +Pohlke +Coogan + +Larkkem + +Pargeter +Keaton +Brewerton +Outridge + +Breckin +Cawse +Diffley +Caile + +Ballston +Thatcher +Sydney +Jahn +Stokell +Calfe +Akker +Lethlay + +Walewski +Basill +Morrid +Ansett +Gotfrey +Olivazzi +Skippon +Masarrat +Bavage +Josum + +Eschalotte +Cawse +Larkby +Selland +Jagiello +Lintall + +Pimblott +Winspeare +Airton +Mithun +Crich +Banbrook +Skellon +Shemelt +Stithe +Jorger +Cuss +Jovovic +Perrinchief +Borzoni +Brittian +Jamblin +Shepherd +Flintoffe +Gavin +Fockes +Lumsdon +McBean +Santorini +Bather +Crack +Sedgman +Cardenas +Fere +Horsey +Hingeley +Fieldhouse +Janiak +Swannell +Esgate +Hadcock +Geindre +Cleland +Blissett +Livock +Borland +Kleis +Koles +Currey +Thorneywork +Lonsdale +Slack +Nibley +Stainfield +Ram +Kollasch +Delve +Ismirnioglou +Casserley +Hallbird +Enos +Figurski +Caldicott +Barff + + +Kennea +Meeus +Iacovini +Hollow +Latham +Skoggings +Simmens +Durbyn +Hillyatt +Ashdown +Varty +Cleobury +Valentine +Wolverson +Abramchik +Mettetal +Baytrop +Gallatly +Christie +Rous +Henmarsh +Nother +Scammonden +Beaten +Scrinage +Josselson +Pavlitschek +Debill +Bennellick +Piburn +Monini +Sacchetti +Cicchillo +Allington +Ilsley +Python +Laguerre +Siveyer +Hailwood +Axelbey +Clout +Burfitt +Pinsent +Bischoff +Budleigh +Sessuns +Rutty +Corry +Bartusek +Verlinden + +Lissett +Whimpenny +Kissock +Parlott + +Venditti +Pavey +Dessaur +Fieldsend +Gerge +Melin +Boland +Gergus +Cossar +Tift +Carlucci +Cockings + +Harty +Labbett +Deverick +Blurton +Strephan +Burles +Dwerryhouse +Weetch +Brierton +Colleton +Morsom +Jurries +Woakes +Ladbrook + +Harrild +McBain +Fobidge +Pellington +Palin +Dumbleton +Messum +Yves +Alvar +Haywood +Sucre +Gomersal +Shilito +Voller +Dougill +Bevis +Kemmons +Limpricht + + +Kleisle +Filip +Moneti +Gooderridge + +Culy +Vosper +Call +Freear +Kiebes + +Polack + +Marder +Lowin +Lewing +Daily +de Amaya +Matieu +Rowett +Manske +Ingleton +Oldknowe +Hartzenberg +Habron +Dodgshun +Roadknight + +Eltune +Gallear + +Stonestreet +Clewett +Confort +Agent + + +Gonnard +Malecky +Wyleman +McCarrison +Wasbrough +Shepland +Lieber +Stratten +Lantaph +Renfield +Vampouille +McSparran +Hargitt +Acland +Cunnell +Rosa +Cobbe +Yosselevitch +Dubble +Baudon +Vamplers +Milliken +Lundbeck +Kingcott +Issakov +Liebmann +Kattenhorn +Gaskins +Cornelius + +Finnes +Meegin +Joincey +Gherardelli +Gowanson +Canty + +Raywood +Heinsius +Wooles +Burde +Kisar +Allso +Sindall +Hurn +Doe +Ramsby +Gavriel +Clohissy +Vardey +Klimpt +Emberson +Isaacson +Lowther +Heyball +Woodruff +McDonell +Porcher +Silbermann +Cummins + +Harrower +Roland +Wadwell +Baulch +McComb +Metcalf +Dmitrovic +Mylan +Jeannin +Mossdale +Odhams + +Dignan +Heatly +Joye +Lorrimer +Damp + +Faucett +Stilgo +Aberhart +Duffield +Maydwell +Du Plantier +Gare +Braker +Spread +Diffley +Eborall +Maddy +Nano +Salzen +Keerl +Bazoge +Deathridge +Geillier +Thiolier +Ausher +Laidel +Deeth +Willatt +Hinkensen +De Lacey +Cuddehay +Longland +Marde +Dungay +Buxcy +Lapides +Janaszkiewicz +Rizzelli +Christley +Luff +Lappin +Colnet +Flather +Treker +Forlong +Speddin +Melsome +Groome +Going +Enders +Rosone +Elegood +Isakowicz + +Sieb +Sutch +Garvill +Rothera +Ceaplen +Hake +Babcock +Dautry +Beels +Bernardoux +Standen +Torricella +Gymblett +Storks +Dashkov + + +Hancell +Duhig +Scanlan +Hodjetts +Dunbar +Figger +Champion +Wikey +Priddie +Sausman +Durrand +Fridaye +Ellerby +Liebrecht +Kubu + +Munden +Daggett +Colenutt +Trazzi +Coldbreath +Abson +Prosek +Gorelli +Lambeth +Pennell +Turnell +Crowch +Fossey +Helmke +Concannon +Fawcitt +Cumbridge +Scadden +Pate +Fike +Magauran +Ramsden +Hilley +Temple +Gumly +Brizland +Laverenz +Caney +Lahy +Tedahl +Geraldi +Columbine +Starbuck +Kennedy +Imlock +Adlem +Gotobed +Garken + +Dawdary +Gregorace +Hogben +Paver +Branche +Hagan +McComish +Terlinden +Manson + +Remmers +Greatex +Jackes +Mildmott +Biasotti +Newlands +Dewett +Bruinemann +Guiett +Boden +Wombwell +McGirl +Pabel +McKechnie +Greenough +Greenhalf +Bunyan +Zink +Blazic +Whitebrook +McRorie +Devine + +Wolfenden +Dulwich +Calder +Bolley +Brouard +Hazeldine +Serjeant +Parman +Vela +Monteaux +Lune +Gaynes +Byneth +Fick +Shevlan +Herety +Vials +Featherbie +Whitwell +Petrik +Benditt +Willshaw +Brechin +Dwelley +Wicks +Anderl +Baldin +Webermann +Cheney +Kernar +Balazin + +Sidry +Beecham +Sollas +Casotti + +Pairpoint +Baggalley +Hastelow +Rebillard +Worsall +Falvey +Flanne +Storres +Jerrold + +Money +Klehyn + +Ridulfo +Fleay +Phuprate +Medlin +Outright +Bainbridge +Kitcat +Janek +Leech +Pavie +Hoolaghan +Matula +Haycock +Ungerechts +Omar +Davoren +Impey +Maffiotti +Pyrke +Beininck +Pizer +Melior +Yearnes +Rizzotto +Pincott +Shallcross +Marshal + +Rubinowitsch +Pickance +Shearn +Edgerton +Crayker +Roebuck +Birchenhead +Shadrach +Sandercock +Rispin +Portch +Ebbens +Dransfield +Walster + +Pilsbury +Lutzmann +Phillipson +Aldwick +Doyle +Starrs +Haugg +Lamplugh +Ketch +Arenson +Sasser + +Severwright +Killner +Kubicka +Stanton +Jelley +Dorward +Jessel +Borel +Sutterfield +Treverton + +Pero +Duffy diff --git a/PostgreSQL/.csv/row_numbers.csv b/PostgreSQL/.csv/row_numbers.csv new file mode 100644 index 0000000..8691d50 --- /dev/null +++ b/PostgreSQL/.csv/row_numbers.csv @@ -0,0 +1,953 @@ +row_number +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +31 +32 +33 +34 +36 +37 +38 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +110 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +183 +184 +185 +186 +187 +188 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +218 +219 +220 +221 +223 +224 +225 +226 +227 +228 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +243 +244 +246 +247 +248 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +288 +289 +290 +291 +292 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +332 +333 +334 +335 +336 +338 +339 +340 +341 +342 +343 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +373 +375 +376 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +527 +528 +529 +530 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +555 +556 +557 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +593 +594 +595 +596 +597 +598 +599 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +617 +618 +619 +620 +622 +623 +624 +625 +626 +627 +628 +629 +630 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +645 +646 +647 +649 +650 +651 +653 +654 +655 +656 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +709 +710 +711 +712 +713 +714 +715 +716 +717 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740 +741 +742 +743 +744 +745 +746 +747 +748 +749 +750 +751 +752 +753 +754 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796 +797 +798 +799 +800 +801 +802 +803 +804 +805 +806 +807 +808 +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819 +820 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884 +885 +886 +887 +888 +889 +890 +891 +892 +893 +894 +895 +896 +897 +898 +899 +900 +901 +902 +903 +904 +905 +906 +907 +909 +910 +911 +912 +913 +914 +915 +916 +918 +919 +920 +921 +922 +923 +924 +925 +926 +927 +928 +929 +930 +931 +932 +933 +934 +935 +936 +937 +938 +939 +940 +941 +942 +943 +944 +945 +946 +947 +948 +949 +950 +951 +952 +953 +954 +955 +956 +957 +958 +959 +960 +961 +962 +963 +964 +965 +966 +967 +968 +969 +970 +971 +972 +973 +974 +975 +976 +977 +978 +979 +980 +981 +982 +983 +984 +985 +986 +987 +988 +989 +990 +991 +992 +993 +994 +995 +996 +997 +998 +999 +1000 diff --git a/PostgreSQL/.csv/sentences.csv b/PostgreSQL/.csv/sentences.csv new file mode 100644 index 0000000..4550706 --- /dev/null +++ b/PostgreSQL/.csv/sentences.csv @@ -0,0 +1,1000 @@ +Sed sagittis. Nam congue, risus semper porta volutpat +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +n congue. Etiam justo. Etiam pretium iaculis justo. I +Sed sagittis. Nam congue, risus semper porta volutpat +In tempor, turpis nec euismod scelerisque, quam turpi +Vestibulum ante ipsum primis in faucibus orci luctus +Aliquam augue quam, sollicitudin vitae, consectetuer +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Donec posuere metus vitae ipsum. Aliquam non mauris. +Vestibulum quam sapien, varius ut, blandit non, inter +Suspendisse ornare consequat lectus. In est risus, au +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Aliquam quis turpis eget elit sodales scelerisque. Ma +Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum +Duis bibendum. Morbi non quam nec dui luctus rutrum. +Aenean lectus. Pellentesque eget nunc. Donec quis orc +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Curabitur gravida nisi at nibh. In hac habitasse plat +Etiam vel augue. Vestibulum rutrum rutrum neque. Aene +Etiam faucibus cursus urna. Ut tellus. Nulla ut erat +In hac habitasse platea dictumst. Maecenas ut massa q +Cras mi pede, malesuada in, imperdiet et, commodo vul +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Maecenas ut massa quis augue luctus tincidunt. Nulla +Donec diam neque, vestibulum eget, vulputate ut, ultr +Vestibulum ante ipsum primis in faucibus orci luctus +Aliquam non mauris. Morbi non lectus. Aliquam sit ame +Praesent blandit lacinia erat. Vestibulum sed magna a +Curabitur gravida nisi at nibh. In hac habitasse plat +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +In tempor, turpis nec euismod scelerisque, quam turpi +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Nullam sit amet turpis elementum ligula vehicula cons +Nunc rhoncus dui vel sem. Sed sagittis. Nam congue, r +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Cras non velit nec nisi vulputate nonummy. Maecenas t +Maecenas leo odio, condimentum id, luctus nec, molest +Aliquam augue quam, sollicitudin vitae, consectetuer +Integer ac neque. Duis bibendum. Morbi non quam nec d +Nam nulla. Integer pede justo, lacinia eget, tincidun +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Nunc purus. Phasellus in felis. Donec semper sapien a +Praesent blandit lacinia erat. Vestibulum sed magna a +Maecenas pulvinar lobortis est. Phasellus sit amet er +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Mauris lacinia sapien quis libero. Nullam sit amet tu +Aenean fermentum. Donec ut mauris eget massa tempor c +Integer aliquet, massa id lobortis convallis, tortor +Etiam justo. Etiam pretium iaculis justo. In hac habi +Donec odio justo, sollicitudin ut, suscipit a, feugia +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Quisque id justo sit amet sapien dignissim vestibulum +Maecenas leo odio, condimentum id, luctus nec, molest +Praesent blandit lacinia erat. Vestibulum sed magna a +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Maecenas leo odio, condimentum id, luctus nec, molest + +Vestibulum sed magna at nunc commodo placerat. Praese +Cras in purus eu magna vulputate luctus. Cum sociis n +Nulla mollis molestie lorem. Quisque ut erat. Curabit +In hac habitasse platea dictumst. Aliquam augue quam, +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Mauris sit amet eros. Suspendisse accumsan tortor qui +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Donec posuere metus vitae ipsum. Aliquam non mauris. +Nullam sit amet turpis elementum ligula vehicula cons +Donec quis orci eget orci vehicula condimentum. Curab +Vestibulum ante ipsum primis in faucibus orci luctus +Quisque porta volutpat erat. Quisque erat eros, viver +Aliquam quis turpis eget elit sodales scelerisque. Ma +Aenean fermentum. Donec ut mauris eget massa tempor c +Vestibulum ac est lacinia nisi venenatis tristique. F +Nam dui. Proin leo odio, porttitor id, consequat in, +Morbi non lectus. Aliquam sit amet diam in magna bibe +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Phasellus in felis. Donec semper sapien a libero. Nam +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +In hac habitasse platea dictumst. Morbi vestibulum, v +Nulla neque libero, convallis eget, eleifend luctus, +Pellentesque eget nunc. Donec quis orci eget orci veh +Nulla facilisi. Cras non velit nec nisi vulputate non +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Vestibulum quam sapien, varius ut, blandit non, inter +Vestibulum ante ipsum primis in faucibus orci luctus +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Morbi vestibulum, velit id pretium iaculis, diam erat +In hac habitasse platea dictumst. Aliquam augue quam, +Cum sociis natoque penatibus et magnis dis parturient +In congue. Etiam justo. Etiam pretium iaculis justo. +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +Duis consequat dui nec nisi volutpat eleifend. Donec +Integer pede justo, lacinia eget, tincidunt eget, tem +Fusce posuere felis sed lacus. Morbi sem mauris, laor +Vestibulum ante ipsum primis in faucibus orci luctus +Donec ut mauris eget massa tempor convallis. Nulla ne +Praesent id massa id nisl venenatis lacinia. Aenean s +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Donec odio justo, sollicitudin ut, suscipit a, feugia +Quisque porta volutpat erat. Quisque erat eros, viver +Quisque porta volutpat erat. Quisque erat eros, viver +Etiam justo. Etiam pretium iaculis justo. In hac habi +Maecenas leo odio, condimentum id, luctus nec, molest +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Mauris lacinia sapien quis libero. Nullam sit amet tu +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvin +Phasellus in felis. Donec semper sapien a libero. Nam +Suspendisse potenti. Cras in purus eu magna vulputate +Nullam sit amet turpis elementum ligula vehicula cons +Fusce lacus purus, aliquet at, feugiat non, pretium q +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Nullam orci pede, venenatis non, sodales sed, tincidu +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Aenean lectus. Pellentesque eget nunc. Donec quis orc + +Donec quis orci eget orci vehicula condimentum. Curab +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Aenean sit amet justo. Morbi ut odio. Cras mi pede, m +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Praesent blandit. Nam nulla. Integer pede justo, laci + +In eleifend quam a odio. In hac habitasse platea dict +Cum sociis natoque penatibus et magnis dis parturient +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Cum sociis natoque penatibus et magnis dis parturient +Nullam porttitor lacus at turpis. Donec posuere metus +Integer ac neque. Duis bibendum. Morbi non quam nec d +Vestibulum ante ipsum primis in faucibus orci luctus +Suspendisse potenti. In eleifend quam a odio. In hac +Nunc purus. Phasellus in felis. Donec semper sapien a +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +In eleifend quam a odio. In hac habitasse platea dict +Aenean lectus. Pellentesque eget nunc. Donec quis orc +Duis at velit eu est congue elementum. In hac habitas +Quisque porta volutpat erat. Quisque erat eros, viver +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum +Cras in purus eu magna vulputate luctus. Cum sociis n +Etiam faucibus cursus urna. Ut tellus. Nulla ut erat +Quisque erat eros, viverra eget, congue eget, semper +Vivamus in felis eu sapien cursus vestibulum. Proin e +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Cras in purus eu magna vulputate luctus. Cum sociis n +Suspendisse ornare consequat lectus. In est risus, au +Aenean sit amet justo. Morbi ut odio. Cras mi pede, m +Donec posuere metus vitae ipsum. Aliquam non mauris. +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Donec odio justo, sollicitudin ut, suscipit a, feugia +Pellentesque at nulla. Suspendisse potenti. Cras in p +Nullam porttitor lacus at turpis. Donec posuere metus + +Vivamus metus arcu, adipiscing molestie, hendrerit at +Proin interdum mauris non ligula pellentesque ultrice +Nulla ut erat id mauris vulputate elementum. Nullam v +Pellentesque at nulla. Suspendisse potenti. Cras in p +Duis at velit eu est congue elementum. In hac habitas +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvin + +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +In hac habitasse platea dictumst. Morbi vestibulum, v +Phasellus id sapien in sapien iaculis congue. Vivamus +Vestibulum sed magna at nunc commodo placerat. Praese +Aliquam quis turpis eget elit sodales scelerisque. Ma +Aenean lectus. Pellentesque eget nunc. Donec quis orc +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Vivamus metus arcu, adipiscing molestie, hendrerit at +Duis consequat dui nec nisi volutpat eleifend. Donec +Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum +In hac habitasse platea dictumst. Maecenas ut massa q +tiam pretium iaculis justo. In hac habitasse platea d +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Duis aliquam convallis nunc. Proin at turpis a pede p +Nunc purus. Phasellus in felis. Donec semper sapien a +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Integer non velit. Donec diam neque, vestibulum eget, +Integer ac neque. Duis bibendum. Morbi non quam nec d +Cras pellentesque volutpat dui. Maecenas tristique, e +Aenean auctor gravida sem. Praesent id massa id nisl +Morbi odio odio, elementum eu, interdum eu, tincidunt +Praesent blandit. Nam nulla. Integer pede justo, laci +Pellentesque viverra pede ac diam. Cras pellentesque +Phasellus id sapien in sapien iaculis congue. Vivamus +In hac habitasse platea dictumst. Maecenas ut massa q +Proin at turpis a pede posuere nonummy. Integer non v +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Donec ut mauris eget massa tempor convallis. Nulla ne +Pellentesque at nulla. Suspendisse potenti. Cras in p +Phasellus id sapien in sapien iaculis congue. Vivamus +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +In hac habitasse platea dictumst. Maecenas ut massa q +Nullam sit amet turpis elementum ligula vehicula cons +Maecenas leo odio, condimentum id, luctus nec, molest +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Vestibulum ac est lacinia nisi venenatis tristique. F +Suspendisse potenti. Nullam porttitor lacus at turpis +Pellentesque at nulla. Suspendisse potenti. Cras in p +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat + +Morbi vel lectus in quam fringilla rhoncus. Mauris en + +Nulla justo. Aliquam quis turpis eget elit sodales sc +Ut tellus. Nulla ut erat id mauris vulputate elementu +Praesent lectus. Vestibulum quam sapien, varius ut, b +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Fusce posuere felis sed lacus. Morbi sem mauris, laor +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Nam congue, risus semper porta volutpat, quam pede lo +Praesent blandit lacinia erat. Vestibulum sed magna a +Vestibulum sed magna at nunc commodo placerat. Praese +Curabitur convallis. Duis consequat dui nec nisi volu +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Pellentesque eget nunc. Donec quis orci eget orci veh +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Mauris sit amet eros. Suspendisse accumsan tortor qui +Cras pellentesque volutpat dui. Maecenas tristique, e +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Sed sagittis. Nam congue, risus semper porta volutpat +Donec ut dolor. Morbi vel lectus in quam fringilla rh +In hac habitasse platea dictumst. Morbi vestibulum, v +Aenean auctor gravida sem. Praesent id massa id nisl +Nunc nisl. Duis bibendum, felis sed interdum venenati +Nullam sit amet turpis elementum ligula vehicula cons +Curabitur in libero ut massa volutpat convallis. Morb + +Morbi odio odio, elementum eu, interdum eu, tincidunt +n congue. Etiam justo. Etiam pretium iaculis justo. I +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Nunc nisl. Duis bibendum, felis sed interdum venenati +Curabitur in libero ut massa volutpat convallis. Morb +Aenean fermentum. Donec ut mauris eget massa tempor c +Morbi vel lectus in quam fringilla rhoncus. Mauris en +In hac habitasse platea dictumst. Maecenas ut massa q +Nulla nisl. Nunc nisl. Duis bibendum, felis sed inter +Maecenas ut massa quis augue luctus tincidunt. Nulla + +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Vestibulum ante ipsum primis in faucibus orci luctus +Cum sociis natoque penatibus et magnis dis parturient +Suspendisse potenti. Cras in purus eu magna vulputate +Vestibulum ante ipsum primis in faucibus orci luctus +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Nullam molestie nibh in lectus. Pellentesque at nulla +Nullam porttitor lacus at turpis. Donec posuere metus +Suspendisse potenti. Nullam porttitor lacus at turpis +Nulla ut erat id mauris vulputate elementum. Nullam v +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +Nulla ac enim. In tempor, turpis nec euismod sceleris +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +In hac habitasse platea dictumst. Morbi vestibulum, v +Fusce congue, diam id ornare imperdiet, sapien urna p +Maecenas rhoncus aliquam lacus. Morbi quis tortor id + +Maecenas tristique, est et tempus semper, est quam ph +Donec quis orci eget orci vehicula condimentum. Curab +Aenean fermentum. Donec ut mauris eget massa tempor c +Cras non velit nec nisi vulputate nonummy. Maecenas t +Morbi odio odio, elementum eu, interdum eu, tincidunt +Ut tellus. Nulla ut erat id mauris vulputate elementu +Duis at velit eu est congue elementum. In hac habitas +Maecenas ut massa quis augue luctus tincidunt. Nulla +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Nullam sit amet turpis elementum ligula vehicula cons +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Mauris sit amet eros. Suspendisse accumsan tortor qui +Nunc rhoncus dui vel sem. Sed sagittis. Nam congue, r +Integer pede justo, lacinia eget, tincidunt eget, tem +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Integer non velit. Donec diam neque, vestibulum eget, +Donec diam neque, vestibulum eget, vulputate ut, ultr +Quisque porta volutpat erat. Quisque erat eros, viver +Donec ut mauris eget massa tempor convallis. Nulla ne +Vestibulum ante ipsum primis in faucibus orci luctus +Cum sociis natoque penatibus et magnis dis parturient +Donec dapibus. Duis at velit eu est congue elementum. +Curabitur in libero ut massa volutpat convallis. Morb + + +Curabitur in libero ut massa volutpat convallis. Morb +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Nulla facilisi. Cras non velit nec nisi vulputate non +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Quisque porta volutpat erat. Quisque erat eros, viver +Nulla facilisi. Cras non velit nec nisi vulputate non +Nulla ut erat id mauris vulputate elementum. Nullam v + +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Nullam orci pede, venenatis non, sodales sed, tincidu +Integer pede justo, lacinia eget, tincidunt eget, tem +Suspendisse potenti. Cras in purus eu magna vulputate +Nulla justo. Aliquam quis turpis eget elit sodales sc +Cras mi pede, malesuada in, imperdiet et, commodo vul +Aliquam augue quam, sollicitudin vitae, consectetuer +Donec semper sapien a libero. Nam dui. Proin leo odio +Nam congue, risus semper porta volutpat, quam pede lo + +Praesent blandit. Nam nulla. Integer pede justo, laci +Nulla justo. Aliquam quis turpis eget elit sodales sc +Maecenas tristique, est et tempus semper, est quam ph +Nulla ac enim. In tempor, turpis nec euismod sceleris +Integer pede justo, lacinia eget, tincidunt eget, tem +Cum sociis natoque penatibus et magnis dis parturient +Donec quis orci eget orci vehicula condimentum. Curab +Duis mattis egestas metus. Aenean fermentum. Donec ut +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Morbi odio odio, elementum eu, interdum eu, tincidunt +Integer pede justo, lacinia eget, tincidunt eget, tem +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Maecenas ut massa quis augue luctus tincidunt. Nulla +Maecenas leo odio, condimentum id, luctus nec, molest +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Sed accumsan felis. Ut at dolor quis odio consequat v +Aenean auctor gravida sem. Praesent id massa id nisl +Maecenas pulvinar lobortis est. Phasellus sit amet er +Donec quis orci eget orci vehicula condimentum. Curab +Proin leo odio, porttitor id, consequat in, consequat +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Nulla ac enim. In tempor, turpis nec euismod sceleris +Nullam sit amet turpis elementum ligula vehicula cons +Integer non velit. Donec diam neque, vestibulum eget, +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Vestibulum ante ipsum primis in faucibus orci luctus +Ut tellus. Nulla ut erat id mauris vulputate elementu +Vestibulum quam sapien, varius ut, blandit non, inter +Vestibulum ante ipsum primis in faucibus orci luctus +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Cum sociis natoque penatibus et magnis dis parturient +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Vestibulum sed magna at nunc commodo placerat. Praese +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Integer non velit. Donec diam neque, vestibulum eget, +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Suspendisse potenti. Nullam porttitor lacus at turpis +Aliquam augue quam, sollicitudin vitae, consectetuer +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Fusce posuere felis sed lacus. Morbi sem mauris, laor +Pellentesque viverra pede ac diam. Cras pellentesque +Cum sociis natoque penatibus et magnis dis parturient +Vestibulum ante ipsum primis in faucibus orci luctus +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Quisque id justo sit amet sapien dignissim vestibulum +Nullam sit amet turpis elementum ligula vehicula cons +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Aliquam erat volutpat. In congue. Etiam justo. Etiam +Cum sociis natoque penatibus et magnis dis parturient +Suspendisse potenti. In eleifend quam a odio. In hac +Morbi odio odio, elementum eu, interdum eu, tincidunt +Donec odio justo, sollicitudin ut, suscipit a, feugia +liquam erat volutpat. In congue. Etiam justo. Etiam p +Suspendisse potenti. Cras in purus eu magna vulputate +Nam nulla. Integer pede justo, lacinia eget, tincidun +Nulla neque libero, convallis eget, eleifend luctus, +Nulla neque libero, convallis eget, eleifend luctus, +In eleifend quam a odio. In hac habitasse platea dict +Cras mi pede, malesuada in, imperdiet et, commodo vul +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Duis mattis egestas metus. Aenean fermentum. Donec ut +Praesent lectus. Vestibulum quam sapien, varius ut, b +Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum +Proin interdum mauris non ligula pellentesque ultrice +Nulla nisl. Nunc nisl. Duis bibendum, felis sed inter +Pellentesque viverra pede ac diam. Cras pellentesque +Vestibulum sed magna at nunc commodo placerat. Praese +Donec semper sapien a libero. Nam dui. Proin leo odio +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Cras pellentesque volutpat dui. Maecenas tristique, e +Etiam justo. Etiam pretium iaculis justo. In hac habi +Curabitur gravida nisi at nibh. In hac habitasse plat +Vestibulum ante ipsum primis in faucibus orci luctus +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Integer pede justo, lacinia eget, tincidunt eget, tem +Vestibulum ante ipsum primis in faucibus orci luctus +Aliquam augue quam, sollicitudin vitae, consectetuer +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Fusce lacus purus, aliquet at, feugiat non, pretium q +Duis aliquam convallis nunc. Proin at turpis a pede p +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Nulla nisl. Nunc nisl. Duis bibendum, felis sed inter +Proin at turpis a pede posuere nonummy. Integer non v +Praesent blandit. Nam nulla. Integer pede justo, laci +Donec dapibus. Duis at velit eu est congue elementum. +Integer ac neque. Duis bibendum. Morbi non quam nec d +Donec dapibus. Duis at velit eu est congue elementum. +Vestibulum quam sapien, varius ut, blandit non, inter +Maecenas pulvinar lobortis est. Phasellus sit amet er +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Suspendisse ornare consequat lectus. In est risus, au +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Morbi vestibulum, velit id pretium iaculis, diam erat + +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Nulla ac enim. In tempor, turpis nec euismod sceleris +Praesent lectus. Vestibulum quam sapien, varius ut, b +Curabitur gravida nisi at nibh. In hac habitasse plat +Vestibulum ante ipsum primis in faucibus orci luctus +Suspendisse potenti. Cras in purus eu magna vulputate + +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Vestibulum quam sapien, varius ut, blandit non, inter +Cum sociis natoque penatibus et magnis dis parturient +Integer aliquet, massa id lobortis convallis, tortor +Duis aliquam convallis nunc. Proin at turpis a pede p +Nulla ac enim. In tempor, turpis nec euismod sceleris +Phasellus id sapien in sapien iaculis congue. Vivamus +Aliquam quis turpis eget elit sodales scelerisque. Ma +Duis consequat dui nec nisi volutpat eleifend. Donec +Vestibulum ac est lacinia nisi venenatis tristique. F +Suspendisse potenti. Nullam porttitor lacus at turpis +Duis mattis egestas metus. Aenean fermentum. Donec ut +Nunc purus. Phasellus in felis. Donec semper sapien a +Aliquam augue quam, sollicitudin vitae, consectetuer +Aenean fermentum. Donec ut mauris eget massa tempor c +Nulla facilisi. Cras non velit nec nisi vulputate non +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Nam congue, risus semper porta volutpat, quam pede lo +Praesent lectus. Vestibulum quam sapien, varius ut, b +Quisque id justo sit amet sapien dignissim vestibulum +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +n congue. Etiam justo. Etiam pretium iaculis justo. I +Nam nulla. Integer pede justo, lacinia eget, tincidun +Integer tincidunt ante vel ipsum. Praesent blandit la +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Phasellus id sapien in sapien iaculis congue. Vivamus +Praesent blandit. Nam nulla. Integer pede justo, laci +Aenean sit amet justo. Morbi ut odio. Cras mi pede, m +Aenean auctor gravida sem. Praesent id massa id nisl +Nulla ac enim. In tempor, turpis nec euismod sceleris +Morbi odio odio, elementum eu, interdum eu, tincidunt +Pellentesque at nulla. Suspendisse potenti. Cras in p +Suspendisse potenti. Cras in purus eu magna vulputate +Nulla justo. Aliquam quis turpis eget elit sodales sc +Donec quis orci eget orci vehicula condimentum. Curab +Duis mattis egestas metus. Aenean fermentum. Donec ut +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Donec diam neque, vestibulum eget, vulputate ut, ultr +Vivamus metus arcu, adipiscing molestie, hendrerit at +Donec posuere metus vitae ipsum. Aliquam non mauris. +Proin interdum mauris non ligula pellentesque ultrice +Curabitur convallis. Duis consequat dui nec nisi volu +In hac habitasse platea dictumst. Maecenas ut massa q +Morbi vestibulum, velit id pretium iaculis, diam erat +Proin at turpis a pede posuere nonummy. Integer non v +Fusce lacus purus, aliquet at, feugiat non, pretium q +Cras non velit nec nisi vulputate nonummy. Maecenas t +Pellentesque viverra pede ac diam. Cras pellentesque +Praesent blandit. Nam nulla. Integer pede justo, laci +Vestibulum ante ipsum primis in faucibus orci luctus +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Donec semper sapien a libero. Nam dui. Proin leo odio +Etiam justo. Etiam pretium iaculis justo. In hac habi +Duis bibendum. Morbi non quam nec dui luctus rutrum. + +Donec ut dolor. Morbi vel lectus in quam fringilla rh +In hac habitasse platea dictumst. Maecenas ut massa q +Maecenas tristique, est et tempus semper, est quam ph +In eleifend quam a odio. In hac habitasse platea dict +Donec quis orci eget orci vehicula condimentum. Curab +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Duis at velit eu est congue elementum. In hac habitas +Donec semper sapien a libero. Nam dui. Proin leo odio +Curabitur gravida nisi at nibh. In hac habitasse plat + +In hac habitasse platea dictumst. Aliquam augue quam, +Curabitur convallis. Duis consequat dui nec nisi volu + +Praesent blandit lacinia erat. Vestibulum sed magna a +Nam congue, risus semper porta volutpat, quam pede lo +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Duis bibendum, felis sed interdum venenatis, turpis e +Nunc purus. Phasellus in felis. Donec semper sapien a +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Vestibulum ante ipsum primis in faucibus orci luctus +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Aliquam quis turpis eget elit sodales scelerisque. Ma +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Vestibulum ante ipsum primis in faucibus orci luctus +In hac habitasse platea dictumst. Aliquam augue quam, +Vestibulum sed magna at nunc commodo placerat. Praese +Nulla ac enim. In tempor, turpis nec euismod sceleris +Nam congue, risus semper porta volutpat, quam pede lo +Donec dapibus. Duis at velit eu est congue elementum. +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +In hac habitasse platea dictumst. Aliquam augue quam, +Curabitur in libero ut massa volutpat convallis. Morb +Praesent lectus. Vestibulum quam sapien, varius ut, b +Donec quis orci eget orci vehicula condimentum. Curab +In hac habitasse platea dictumst. Maecenas ut massa q +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Duis at velit eu est congue elementum. In hac habitas +Duis bibendum, felis sed interdum venenatis, turpis e +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Duis aliquam convallis nunc. Proin at turpis a pede p +Proin at turpis a pede posuere nonummy. Integer non v +In hac habitasse platea dictumst. Etiam faucibus curs +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Morbi non lectus. Aliquam sit amet diam in magna bibe +Praesent blandit. Nam nulla. Integer pede justo, laci +Praesent blandit. Nam nulla. Integer pede justo, laci +Nulla justo. Aliquam quis turpis eget elit sodales sc +Vestibulum ante ipsum primis in faucibus orci luctus +Duis consequat dui nec nisi volutpat eleifend. Donec +Suspendisse potenti. Nullam porttitor lacus at turpis +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Suspendisse potenti. Cras in purus eu magna vulputate +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Pellentesque eget nunc. Donec quis orci eget orci veh +Proin interdum mauris non ligula pellentesque ultrice +Fusce posuere felis sed lacus. Morbi sem mauris, laor +Fusce lacus purus, aliquet at, feugiat non, pretium q +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +Duis consequat dui nec nisi volutpat eleifend. Donec +Morbi porttitor lorem id ligula. Suspendisse ornare c +Cras mi pede, malesuada in, imperdiet et, commodo vul +Cras pellentesque volutpat dui. Maecenas tristique, e +Phasellus id sapien in sapien iaculis congue. Vivamus +Nam congue, risus semper porta volutpat, quam pede lo +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Nulla justo. Aliquam quis turpis eget elit sodales sc +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Nunc nisl. Duis bibendum, felis sed interdum venenati +Etiam pretium iaculis justo. In hac habitasse platea +Proin risus. Praesent lectus. Vestibulum quam sapien, +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +Vestibulum ante ipsum primis in faucibus orci luctus +Phasellus sit amet erat. Nulla tempus. Vivamus in fel +Vivamus in felis eu sapien cursus vestibulum. Proin e +Donec diam neque, vestibulum eget, vulputate ut, ultr +Quisque id justo sit amet sapien dignissim vestibulum +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Nulla ut erat id mauris vulputate elementum. Nullam v +Quisque ut erat. Curabitur gravida nisi at nibh. In h +In tempor, turpis nec euismod scelerisque, quam turpi +Nam nulla. Integer pede justo, lacinia eget, tincidun +Phasellus id sapien in sapien iaculis congue. Vivamus +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Nulla nisl. Nunc nisl. Duis bibendum, felis sed inter +Morbi porttitor lorem id ligula. Suspendisse ornare c +Nulla ac enim. In tempor, turpis nec euismod sceleris +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Donec semper sapien a libero. Nam dui. Proin leo odio +Maecenas pulvinar lobortis est. Phasellus sit amet er +Donec odio justo, sollicitudin ut, suscipit a, feugia +Nulla justo. Aliquam quis turpis eget elit sodales sc +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Quisque id justo sit amet sapien dignissim vestibulum +In eleifend quam a odio. In hac habitasse platea dict +Quisque erat eros, viverra eget, congue eget, semper +Nulla ut erat id mauris vulputate elementum. Nullam v +Vestibulum ante ipsum primis in faucibus orci luctus +Aliquam quis turpis eget elit sodales scelerisque. Ma +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Maecenas ut massa quis augue luctus tincidunt. Nulla +Integer non velit. Donec diam neque, vestibulum eget, +Nullam molestie nibh in lectus. Pellentesque at nulla +Proin risus. Praesent lectus. Vestibulum quam sapien, +Etiam justo. Etiam pretium iaculis justo. In hac habi +Aliquam non mauris. Morbi non lectus. Aliquam sit ame +In eleifend quam a odio. In hac habitasse platea dict +Maecenas leo odio, condimentum id, luctus nec, molest +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Etiam faucibus cursus urna. Ut tellus. Nulla ut erat +Praesent blandit. Nam nulla. Integer pede justo, laci +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Proin at turpis a pede posuere nonummy. Integer non v +Nulla ac enim. In tempor, turpis nec euismod sceleris +Cras pellentesque volutpat dui. Maecenas tristique, e +Donec posuere metus vitae ipsum. Aliquam non mauris. +Mauris lacinia sapien quis libero. Nullam sit amet tu +Nullam orci pede, venenatis non, sodales sed, tincidu +Nulla facilisi. Cras non velit nec nisi vulputate non +Pellentesque eget nunc. Donec quis orci eget orci veh +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Praesent blandit. Nam nulla. Integer pede justo, laci +Donec dapibus. Duis at velit eu est congue elementum. +Nam nulla. Integer pede justo, lacinia eget, tincidun +In tempor, turpis nec euismod scelerisque, quam turpi +Ut at dolor quis odio consequat varius. Integer ac le +Nullam varius. Nulla facilisi. Cras non velit nec nis +In est risus, auctor sed, tristique in, tempus sit am + +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Integer tincidunt ante vel ipsum. Praesent blandit la +Suspendisse ornare consequat lectus. In est risus, au +In hac habitasse platea dictumst. Maecenas ut massa q +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Praesent lectus. Vestibulum quam sapien, varius ut, b +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Fusce lacus purus, aliquet at, feugiat non, pretium q +Duis mattis egestas metus. Aenean fermentum. Donec ut +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Vivamus vel nulla eget eros elementum pellentesque. Q +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Pellentesque at nulla. Suspendisse potenti. Cras in p +In eleifend quam a odio. In hac habitasse platea dict +Maecenas ut massa quis augue luctus tincidunt. Nulla +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Nullam porttitor lacus at turpis. Donec posuere metus +Praesent blandit. Nam nulla. Integer pede justo, laci +Maecenas leo odio, condimentum id, luctus nec, molest + +Morbi non lectus. Aliquam sit amet diam in magna bibe +Morbi quis tortor id nulla ultrices aliquet. Maecenas + +Vestibulum sed magna at nunc commodo placerat. Praese +Vestibulum ac est lacinia nisi venenatis tristique. F +Donec quis orci eget orci vehicula condimentum. Curab +Integer pede justo, lacinia eget, tincidunt eget, tem +Aliquam quis turpis eget elit sodales scelerisque. Ma +Nam congue, risus semper porta volutpat, quam pede lo + +In blandit ultrices enim. Lorem ipsum dolor sit amet, +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Aliquam quis turpis eget elit sodales scelerisque. Ma +Maecenas leo odio, condimentum id, luctus nec, molest +Cras in purus eu magna vulputate luctus. Cum sociis n +Nullam porttitor lacus at turpis. Donec posuere metus +Curabitur in libero ut massa volutpat convallis. Morb +In blandit ultrices enim. Lorem ipsum dolor sit amet, + +Nunc rhoncus dui vel sem. Sed sagittis. Nam congue, r +Maecenas rhoncus aliquam lacus. Morbi quis tortor id + + +Vestibulum rutrum rutrum neque. Aenean auctor gravida + +Vestibulum ante ipsum primis in faucibus orci luctus +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Phasellus id sapien in sapien iaculis congue. Vivamus +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Suspendisse ornare consequat lectus. In est risus, au +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Integer ac neque. Duis bibendum. Morbi non quam nec d +Pellentesque eget nunc. Donec quis orci eget orci veh +Pellentesque at nulla. Suspendisse potenti. Cras in p +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Maecenas ut massa quis augue luctus tincidunt. Nulla +Pellentesque viverra pede ac diam. Cras pellentesque +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Donec dapibus. Duis at velit eu est congue elementum. +In congue. Etiam justo. Etiam pretium iaculis justo. +Vivamus in felis eu sapien cursus vestibulum. Proin e +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Maecenas tincidunt lacus at velit. Vivamus vel nulla +tiam justo. Etiam pretium iaculis justo. In hac habit +Vivamus metus arcu, adipiscing molestie, hendrerit at +Quisque porta volutpat erat. Quisque erat eros, viver +Maecenas leo odio, condimentum id, luctus nec, molest + +Fusce congue, diam id ornare imperdiet, sapien urna p +Maecenas pulvinar lobortis est. Phasellus sit amet er +Praesent lectus. Vestibulum quam sapien, varius ut, b +Mauris sit amet eros. Suspendisse accumsan tortor qui +Morbi non lectus. Aliquam sit amet diam in magna bibe +Quisque porta volutpat erat. Quisque erat eros, viver +In hac habitasse platea dictumst. Aliquam augue quam, +In hac habitasse platea dictumst. Etiam faucibus curs +Mauris lacinia sapien quis libero. Nullam sit amet tu +Ut tellus. Nulla ut erat id mauris vulputate elementu +Praesent blandit lacinia erat. Vestibulum sed magna a +Nullam molestie nibh in lectus. Pellentesque at nulla +Nullam porttitor lacus at turpis. Donec posuere metus +Mauris sit amet eros. Suspendisse accumsan tortor qui +Suspendisse potenti. In eleifend quam a odio. In hac +Mauris lacinia sapien quis libero. Nullam sit amet tu +Morbi vel lectus in quam fringilla rhoncus. Mauris en + +Phasellus id sapien in sapien iaculis congue. Vivamus +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Morbi non lectus. Aliquam sit amet diam in magna bibe + +Aliquam sit amet diam in magna bibendum imperdiet. Nu +Vestibulum rutrum rutrum neque. Aenean auctor gravida +Sed sagittis. Nam congue, risus semper porta volutpat +Nulla facilisi. Cras non velit nec nisi vulputate non +In hac habitasse platea dictumst. Morbi vestibulum, v +Proin interdum mauris non ligula pellentesque ultrice +Vivamus in felis eu sapien cursus vestibulum. Proin e +Nulla facilisi. Cras non velit nec nisi vulputate non +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Donec odio justo, sollicitudin ut, suscipit a, feugia +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Vivamus vel nulla eget eros elementum pellentesque. Q +Etiam justo. Etiam pretium iaculis justo. In hac habi +Etiam pretium iaculis justo. In hac habitasse platea +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Aenean fermentum. Donec ut mauris eget massa tempor c +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Nulla ut erat id mauris vulputate elementum. Nullam v +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Praesent lectus. Vestibulum quam sapien, varius ut, b +Suspendisse potenti. In eleifend quam a odio. In hac +Vivamus vestibulum sagittis sapien. Cum sociis natoqu +Fusce congue, diam id ornare imperdiet, sapien urna p +Suspendisse accumsan tortor quis turpis. Sed ante. Vi + +tiam justo. Etiam pretium iaculis justo. In hac habit +In tempor, turpis nec euismod scelerisque, quam turpi +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Pellentesque viverra pede ac diam. Cras pellentesque +Quisque id justo sit amet sapien dignissim vestibulum +Nunc purus. Phasellus in felis. Donec semper sapien a +Donec ut mauris eget massa tempor convallis. Nulla ne +Proin at turpis a pede posuere nonummy. Integer non v +Mauris sit amet eros. Suspendisse accumsan tortor qui +Nullam sit amet turpis elementum ligula vehicula cons +Quisque erat eros, viverra eget, congue eget, semper +Nullam porttitor lacus at turpis. Donec posuere metus +Morbi odio odio, elementum eu, interdum eu, tincidunt +Vestibulum sed magna at nunc commodo placerat. Praese +Etiam justo. Etiam pretium iaculis justo. In hac habi +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Nunc purus. Phasellus in felis. Donec semper sapien a +Nullam porttitor lacus at turpis. Donec posuere metus +Nulla ac enim. In tempor, turpis nec euismod sceleris +Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum +Nulla ut erat id mauris vulputate elementum. Nullam v +Nullam orci pede, venenatis non, sodales sed, tincidu +In blandit ultrices enim. Lorem ipsum dolor sit amet, +Morbi odio odio, elementum eu, interdum eu, tincidunt +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Nulla justo. Aliquam quis turpis eget elit sodales sc +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Vivamus tortor. Duis mattis egestas metus. Aenean fer +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Vestibulum ante ipsum primis in faucibus orci luctus +In hac habitasse platea dictumst. Morbi vestibulum, v +Ut tellus. Nulla ut erat id mauris vulputate elementu +Aliquam quis turpis eget elit sodales scelerisque. Ma +Sed accumsan felis. Ut at dolor quis odio consequat v + +liquam erat volutpat. In congue. Etiam justo. Etiam p +In hac habitasse platea dictumst. Aliquam augue quam, +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Praesent id massa id nisl venenatis lacinia. Aenean s +Maecenas tincidunt lacus at velit. Vivamus vel nulla +In tempor, turpis nec euismod scelerisque, quam turpi +Vestibulum sed magna at nunc commodo placerat. Praese +Nunc purus. Phasellus in felis. Donec semper sapien a +Nulla nisl. Nunc nisl. Duis bibendum, felis sed inter +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Cras in purus eu magna vulputate luctus. Cum sociis n +Suspendisse ornare consequat lectus. In est risus, au +Vivamus vel nulla eget eros elementum pellentesque. Q +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvin +Mauris sit amet eros. Suspendisse accumsan tortor qui +Aliquam quis turpis eget elit sodales scelerisque. Ma +Duis aliquam convallis nunc. Proin at turpis a pede p +Vestibulum ante ipsum primis in faucibus orci luctus +In est risus, auctor sed, tristique in, tempus sit am +Nulla ut erat id mauris vulputate elementum. Nullam v + +Integer ac neque. Duis bibendum. Morbi non quam nec d +Duis at velit eu est congue elementum. In hac habitas +Aenean sit amet justo. Morbi ut odio. Cras mi pede, m + +Integer tincidunt ante vel ipsum. Praesent blandit la +Vestibulum quam sapien, varius ut, blandit non, inter +Aliquam sit amet diam in magna bibendum imperdiet. Nu + +Duis bibendum, felis sed interdum venenatis, turpis e +Donec diam neque, vestibulum eget, vulputate ut, ultr +Donec odio justo, sollicitudin ut, suscipit a, feugia +Praesent lectus. Vestibulum quam sapien, varius ut, b +Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvin +Nullam sit amet turpis elementum ligula vehicula cons +Nullam orci pede, venenatis non, sodales sed, tincidu +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Sed accumsan felis. Ut at dolor quis odio consequat v +Proin leo odio, porttitor id, consequat in, consequat +Nulla mollis molestie lorem. Quisque ut erat. Curabit +Morbi odio odio, elementum eu, interdum eu, tincidunt +Aliquam non mauris. Morbi non lectus. Aliquam sit ame +Aliquam augue quam, sollicitudin vitae, consectetuer +Duis at velit eu est congue elementum. In hac habitas +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Aliquam quis turpis eget elit sodales scelerisque. Ma +Vestibulum quam sapien, varius ut, blandit non, inter +Etiam vel augue. Vestibulum rutrum rutrum neque. Aene +Morbi porttitor lorem id ligula. Suspendisse ornare c +Quisque erat eros, viverra eget, congue eget, semper +In tempor, turpis nec euismod scelerisque, quam turpi +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Maecenas leo odio, condimentum id, luctus nec, molest +Suspendisse potenti. In eleifend quam a odio. In hac +Nullam molestie nibh in lectus. Pellentesque at nulla +Etiam pretium iaculis justo. In hac habitasse platea +Praesent lectus. Vestibulum quam sapien, varius ut, b +Integer ac neque. Duis bibendum. Morbi non quam nec d +Nullam sit amet turpis elementum ligula vehicula cons +Cras non velit nec nisi vulputate nonummy. Maecenas t +Quisque id justo sit amet sapien dignissim vestibulum +Phasellus id sapien in sapien iaculis congue. Vivamus + +Nullam porttitor lacus at turpis. Donec posuere metus +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +In hac habitasse platea dictumst. Morbi vestibulum, v +Vestibulum sed magna at nunc commodo placerat. Praese +Proin interdum mauris non ligula pellentesque ultrice +Aliquam augue quam, sollicitudin vitae, consectetuer +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Curabitur gravida nisi at nibh. In hac habitasse plat +Nulla neque libero, convallis eget, eleifend luctus, +Cum sociis natoque penatibus et magnis dis parturient +Vestibulum ante ipsum primis in faucibus orci luctus +Proin leo odio, porttitor id, consequat in, consequat +Aenean auctor gravida sem. Praesent id massa id nisl +Duis aliquam convallis nunc. Proin at turpis a pede p +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Aenean auctor gravida sem. Praesent id massa id nisl +Vivamus vestibulum sagittis sapien. Cum sociis natoqu +Pellentesque viverra pede ac diam. Cras pellentesque +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Donec diam neque, vestibulum eget, vulputate ut, ultr +Duis mattis egestas metus. Aenean fermentum. Donec ut +In est risus, auctor sed, tristique in, tempus sit am +Mauris sit amet eros. Suspendisse accumsan tortor qui +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Lorem ipsum dolor sit amet, consectetuer adipiscing e +In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Maecenas ut massa quis augue luctus tincidunt. Nulla +Morbi vestibulum, velit id pretium iaculis, diam erat +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +In hac habitasse platea dictumst. Etiam faucibus curs +Proin at turpis a pede posuere nonummy. Integer non v +Curabitur in libero ut massa volutpat convallis. Morb +Duis at velit eu est congue elementum. In hac habitas +Pellentesque at nulla. Suspendisse potenti. Cras in p +Cras in purus eu magna vulputate luctus. Cum sociis n +In hac habitasse platea dictumst. Maecenas ut massa q +Suspendisse potenti. In eleifend quam a odio. In hac +Morbi quis tortor id nulla ultrices aliquet. Maecenas +Nulla ut erat id mauris vulputate elementum. Nullam v +Curabitur convallis. Duis consequat dui nec nisi volu +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Duis bibendum, felis sed interdum venenatis, turpis e +Donec quis orci eget orci vehicula condimentum. Curab +Proin eu mi. Nulla ac enim. In tempor, turpis nec eui +Duis ac nibh. Fusce lacus purus, aliquet at, feugiat +Donec diam neque, vestibulum eget, vulputate ut, ultr +Aliquam non mauris. Morbi non lectus. Aliquam sit ame +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Pellentesque at nulla. Suspendisse potenti. Cras in p +Cras mi pede, malesuada in, imperdiet et, commodo vul +Maecenas tristique, est et tempus semper, est quam ph +Integer ac leo. Pellentesque ultrices mattis odio. Do +Integer aliquet, massa id lobortis convallis, tortor +In hac habitasse platea dictumst. Morbi vestibulum, v +Aliquam erat volutpat. In congue. Etiam justo. Etiam +Suspendisse accumsan tortor quis turpis. Sed ante. Vi +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Duis mattis egestas metus. Aenean fermentum. Donec ut +Etiam vel augue. Vestibulum rutrum rutrum neque. Aene +Maecenas pulvinar lobortis est. Phasellus sit amet er +Vivamus vestibulum sagittis sapien. Cum sociis natoqu +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Fusce lacus purus, aliquet at, feugiat non, pretium q +Quisque porta volutpat erat. Quisque erat eros, viver +Vestibulum ante ipsum primis in faucibus orci luctus +Donec diam neque, vestibulum eget, vulputate ut, ultr +Morbi a ipsum. Integer a nibh. In quis justo. Maecena +Donec dapibus. Duis at velit eu est congue elementum. +Nulla ut erat id mauris vulputate elementum. Nullam v +Maecenas leo odio, condimentum id, luctus nec, molest + +Vivamus vel nulla eget eros elementum pellentesque. Q +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Proin interdum mauris non ligula pellentesque ultrice +Donec posuere metus vitae ipsum. Aliquam non mauris. +Vivamus vel nulla eget eros elementum pellentesque. Q +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Fusce posuere felis sed lacus. Morbi sem mauris, laor +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Proin interdum mauris non ligula pellentesque ultrice +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Aliquam erat volutpat. In congue. Etiam justo. Etiam +In tempor, turpis nec euismod scelerisque, quam turpi +Integer ac neque. Duis bibendum. Morbi non quam nec d +Donec dapibus. Duis at velit eu est congue elementum. +In eleifend quam a odio. In hac habitasse platea dict +n congue. Etiam justo. Etiam pretium iaculis justo. I +Fusce congue, diam id ornare imperdiet, sapien urna p +Praesent blandit. Nam nulla. Integer pede justo, laci +In hac habitasse platea dictumst. Etiam faucibus curs + +Suspendisse ornare consequat lectus. In est risus, au +Suspendisse potenti. In eleifend quam a odio. In hac +Maecenas pulvinar lobortis est. Phasellus sit amet er +Maecenas pulvinar lobortis est. Phasellus sit amet er + +Aenean lectus. Pellentesque eget nunc. Donec quis orc +Praesent id massa id nisl venenatis lacinia. Aenean s +Duis at velit eu est congue elementum. In hac habitas + +Etiam pretium iaculis justo. In hac habitasse platea +Curabitur gravida nisi at nibh. In hac habitasse plat +Duis mattis egestas metus. Aenean fermentum. Donec ut +Nullam sit amet turpis elementum ligula vehicula cons +In hac habitasse platea dictumst. Maecenas ut massa q + +Morbi vel lectus in quam fringilla rhoncus. Mauris en +Quisque porta volutpat erat. Quisque erat eros, viver +Vestibulum ante ipsum primis in faucibus orci luctus +Vestibulum ante ipsum primis in faucibus orci luctus +In quis justo. Maecenas rhoncus aliquam lacus. Morbi +Fusce congue, diam id ornare imperdiet, sapien urna p +Praesent lectus. Vestibulum quam sapien, varius ut, b +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Duis mattis egestas metus. Aenean fermentum. Donec ut +Nam dui. Proin leo odio, porttitor id, consequat in, +Donec ut mauris eget massa tempor convallis. Nulla ne +Sed ante. Vivamus tortor. Duis mattis egestas metus. +Etiam vel augue. Vestibulum rutrum rutrum neque. Aene +Etiam pretium iaculis justo. In hac habitasse platea +Morbi ut odio. Cras mi pede, malesuada in, imperdiet +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Duis at velit eu est congue elementum. In hac habitas +Donec diam neque, vestibulum eget, vulputate ut, ultr +Lorem ipsum dolor sit amet, consectetuer adipiscing e + +Suspendisse potenti. In eleifend quam a odio. In hac +Sed sagittis. Nam congue, risus semper porta volutpat +Morbi vestibulum, velit id pretium iaculis, diam erat +Etiam vel augue. Vestibulum rutrum rutrum neque. Aene +Maecenas rhoncus aliquam lacus. Morbi quis tortor id +Suspendisse ornare consequat lectus. In est risus, au +Vivamus vel nulla eget eros elementum pellentesque. Q +In hac habitasse platea dictumst. Aliquam augue quam, +Quisque id justo sit amet sapien dignissim vestibulum +In tempor, turpis nec euismod scelerisque, quam turpi +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Lorem ipsum dolor sit amet, consectetuer adipiscing e +Donec diam neque, vestibulum eget, vulputate ut, ultr + +Donec ut dolor. Morbi vel lectus in quam fringilla rh +Maecenas tincidunt lacus at velit. Vivamus vel nulla +Fusce congue, diam id ornare imperdiet, sapien urna p +Praesent blandit lacinia erat. Vestibulum sed magna a +Duis bibendum. Morbi non quam nec dui luctus rutrum. +Mauris enim leo, rhoncus sed, vestibulum sit amet, cu +Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. +Vestibulum ante ipsum primis in faucibus orci luctus +Morbi non quam nec dui luctus rutrum. Nulla tellus. I +Praesent blandit. Nam nulla. Integer pede justo, laci +Nam nulla. Integer pede justo, lacinia eget, tincidun +Suspendisse potenti. In eleifend quam a odio. In hac +Donec diam neque, vestibulum eget, vulputate ut, ultr +Curabitur in libero ut massa volutpat convallis. Morb +Donec diam neque, vestibulum eget, vulputate ut, ultr +Vivamus vel nulla eget eros elementum pellentesque. Q +Praesent lectus. Vestibulum quam sapien, varius ut, b + +Nunc nisl. Duis bibendum, felis sed interdum venenati +Cras mi pede, malesuada in, imperdiet et, commodo vul + +Nulla tempus. Vivamus in felis eu sapien cursus vesti +Etiam justo. Etiam pretium iaculis justo. In hac habi +Cum sociis natoque penatibus et magnis dis parturient +Nunc purus. Phasellus in felis. Donec semper sapien a +Donec ut mauris eget massa tempor convallis. Nulla ne +Aenean auctor gravida sem. Praesent id massa id nisl +Aliquam non mauris. Morbi non lectus. Aliquam sit ame +Quisque ut erat. Curabitur gravida nisi at nibh. In h +Fusce posuere felis sed lacus. Morbi sem mauris, laor + + +Integer a nibh. In quis justo. Maecenas rhoncus aliqu +Integer non velit. Donec diam neque, vestibulum eget, +Quisque erat eros, viverra eget, congue eget, semper diff --git a/PostgreSQL/.csv/urls.csv b/PostgreSQL/.csv/urls.csv new file mode 100644 index 0000000..91eb29d --- /dev/null +++ b/PostgreSQL/.csv/urls.csv @@ -0,0 +1,1001 @@ +url + +https://bloglovin.com/in/blandit/ultrices/enim.jpg?sem=odio +https://cnbc.com/nunc/purus/phasellus/in/felis.html?bibendu +https://networkadvertising.org/ut/at/dolor/quis/odio.aspx?p +https://techcrunch.com/lacus/morbi/sem/mauris/laoreet/ut.as +https://admin.ch/habitasse/platea/dictumst/morbi.jpg?iaculi +http://1und1.de/sit/amet/diam.json?sem=accumsan&fusce=tellu +http://hatena.ne.jp/faucibus/orci/luctus/et/ultrices.js?ac= + +http://wikipedia.org/nisi/vulputate/nonummy.aspx?venenatis= +http://china.com.cn/nulla/justo.jsp?diam=mauris&vitae=sit&q +https://apple.com/porttitor/id/consequat/in.js?eget=tristiq +https://pcworld.com/nunc/rhoncus.aspx?morbi=pede&vel=justo& + +https://soup.io/non/interdum/in/ante.jpg?nibh=nunc&in=donec +http://nature.com/luctus/rutrum/nulla/tellus.png?tristique= +http://amazon.co.jp/luctus/et.json?praesent=donec&id=vitae& +http://topsy.com/pede/ac/diam/cras/pellentesque/volutpat.js +http://economist.com/neque/sapien.xml?id=fusce&consequat=po +https://xing.com/ante/vivamus/tortor/duis/mattis.aspx?orci= +http://people.com.cn/interdum/venenatis/turpis/enim/blandit +https://quantcast.com/dui.js?velit=quisque&donec=erat&diam= +http://wordpress.com/sed/justo/pellentesque/viverra/pede/ac +https://wordpress.org/suscipit/nulla/elit/ac.jpg?duis=posue +http://bbb.org/pellentesque/eget/nunc/donec/quis/orci.json? +http://goo.gl/magna/ac/consequat/metus/sapien/ut.xml?donec= +http://privacy.gov.au/elementum/nullam/varius/nulla/facilis +http://simplemachines.org/libero/nullam/sit/amet.xml?vestib +https://desdev.cn/mus/vivamus/vestibulum/sagittis/sapien.js + +https://merriam-webster.com/amet/justo/morbi/ut.html?nullam +http://icio.us/fermentum/justo.jpg?diam=libero&erat=convall +http://facebook.com/rutrum/neque/aenean/auctor/gravida.js?f + +https://ezinearticles.com/maecenas/ut/massa/quis/augue/luct +http://xrea.com/a/libero/nam/dui/proin.html?in=sit&eleifend +https://berkeley.edu/tellus/nulla/ut/erat/id.json?est=praes +https://discuz.net/erat/quisque/erat/eros/viverra/eget/cong +https://home.pl/odio/condimentum/id/luctus.jsp?velit=ipsum& +http://skyrock.com/ultrices/posuere/cubilia/curae/mauris/vi +http://howstuffworks.com/urna/ut/tellus/nulla.png?consectet +https://tripod.com/sagittis/sapien/cum/sociis/natoque/penat +http://state.gov/maecenas/leo/odio.xml?ut=sapien&dolor=dign +https://sogou.com/tortor/id/nulla/ultrices.png?aenean=non&s +http://bizjournals.com/eget/tempus.html?hac=a&habitasse=odi +http://vimeo.com/donec/semper/sapien/a/libero/nam/dui.json? +https://amazon.de/vestibulum.aspx?morbi=etiam&ut=pretium&od +https://w3.org/in/leo.png?varius=mollis +http://scientificamerican.com/nonummy.js?ut=quam&massa=pede +https://unc.edu/nullam/sit/amet/turpis/elementum.png?mattis +https://printfriendly.com/at/vulputate.png?lacus=eu&morbi=m +http://cdc.gov/erat/vestibulum/sed/magna.jpg?id=sit&loborti +https://opensource.org/aenean/fermentum/donec/ut.html?phase +http://soundcloud.com/convallis/tortor/risus/dapibus/augue/ +http://japanpost.jp/tempus/sit/amet/sem/fusce.json?orci=in& +https://e-recht24.de/suscipit/a/feugiat/et/eros.aspx?luctus + +https://delicious.com/nunc/rhoncus.jpg?nulla=a&integer=ipsu +https://drupal.org/sapien/varius/ut.jsp?augue=tempor&aliqua +http://unc.edu/felis/fusce/posuere/felis/sed.js?imperdiet=n +https://samsung.com/tincidunt/in/leo/maecenas/pulvinar/lobo +http://census.gov/condimentum/neque/sapien/placerat/ante/nu +http://uol.com.br/faucibus/orci/luctus/et/ultrices/posuere. +https://altervista.org/at/turpis/donec/posuere/metus/vitae/ +http://dion.ne.jp/ut/ultrices/vel/augue.json?a=nisl&odio=ut +http://marketwatch.com/amet/cursus/id.json?tortor=vulputate +https://flavors.me/hac/habitasse/platea/dictumst.xml?eros=v +http://wikispaces.com/posuere/nonummy/integer/non/velit/don +http://fotki.com/penatibus/et/magnis.jpg?nascetur=eu&ridicu +https://reddit.com/tristique/in/tempus/sit/amet/sem.html?eu +http://ihg.com/eros.png?rutrum=maecenas&nulla=rhoncus&nunc= +http://yahoo.com/suspendisse/potenti/cras/in.xml?amet=magna +http://bluehost.com/rhoncus.png?sapien=dapibus&placerat=dol + +http://unblog.fr/elit/sodales.json?tortor=nunc&id=purus&nul +https://tmall.com/est/phasellus/sit.aspx?ullamcorper=nec&au +https://posterous.com/nisl.html?et=vestibulum&eros=sed&vest +https://vimeo.com/luctus/rutrum/nulla/tellus.html?laoreet=c +https://sakura.ne.jp/arcu/adipiscing/molestie.html?volutpat +https://ucsd.edu/eleifend/donec/ut.json?tristique=augue&in= +http://yelp.com/sit/amet/eros/suspendisse/accumsan.html?orc +http://jugem.jp/fermentum/donec/ut/mauris/eget/massa/tempor +https://comcast.net/bibendum.json?quisque=pretium&erat=quis +http://elpais.com/quis.xml?condimentum=massa&curabitur=quis +https://dot.gov/cras/in/purus/eu/magna/vulputate/luctus.asp +https://nhs.uk/vulputate/vitae/nisl/aenean/lectus/pellentes +http://marriott.com/vestibulum/ante/ipsum.json?platea=non&d +https://dailymotion.com/eu/nibh/quisque/id/justo/sit.json?e +https://sun.com/nam/dui/proin/leo/odio/porttitor.aspx?enim= + +http://huffingtonpost.com/nec/nisi/volutpat/eleifend.aspx?l +http://abc.net.au/in/hac/habitasse/platea/dictumst/maecenas + +http://cargocollective.com/felis/sed/lacus/morbi.aspx?ferme +https://theglobeandmail.com/orci/luctus/et/ultrices/posuere +http://howstuffworks.com/eu/interdum.jpg?turpis=in&eget=fau +https://sina.com.cn/leo/maecenas/pulvinar/lobortis/est/phas +http://pinterest.com/neque/aenean/auctor/gravida/sem/praese + +https://baidu.com/elementum/pellentesque/quisque.jsp?et=dis +https://ebay.com/magnis/dis.json?luctus=interdum&et=in&ultr +http://goo.gl/sapien/urna.js?praesent=platea&blandit=dictum +http://pcworld.com/sem/duis/aliquam/convallis/nunc/proin/at +http://economist.com/non/interdum/in/ante/vestibulum/ante/i +https://cmu.edu/neque/sapien/placerat/ante/nulla/justo/aliq +http://google.nl/platea/dictumst/maecenas/ut/massa.xml?iacu +https://umich.edu/tincidunt/eu/felis/fusce/posuere/felis/se +http://dell.com/at/diam/nam/tristique/tortor/eu.json?accums +https://usda.gov/eros/elementum/pellentesque/quisque/porta. +http://mlb.com/quis.jsp?pede=parturient +http://spotify.com/adipiscing/molestie/hendrerit/at/vulputa +https://stumbleupon.com/gravida/sem/praesent.html?morbi=aen +http://gravatar.com/dapibus/at/diam.js?odio=nisl&condimentu +http://diigo.com/massa.jsp?pede=in&lobortis=purus&ligula=eu +http://comsenz.com/in/hac/habitasse/platea/dictumst/aliquam +https://live.com/eleifend/quam.html?luctus=rhoncus&ultricie +https://dailymail.co.uk/in/sagittis/dui.js?iaculis=in&justo +http://phoca.cz/sollicitudin/vitae/consectetuer/eget/rutrum +http://ucoz.ru/in/consequat/ut/nulla/sed.xml?nunc=egestas&r +https://gizmodo.com/sem/mauris/laoreet/ut/rhoncus/aliquet/p +http://mail.ru/fermentum/justo/nec/condimentum/neque/sapien +https://who.int/metus/aenean/fermentum/donec/ut/mauris/eget +https://huffingtonpost.com/in/faucibus/orci/luctus.jpg?amet +https://wufoo.com/erat/curabitur.html?bibendum=est&morbi=ri + +http://fda.gov/morbi/porttitor/lorem/id/ligula.aspx?pellent +http://phpbb.com/fusce/congue/diam/id/ornare/imperdiet.jsp? + +http://ameblo.jp/molestie/hendrerit/at/vulputate/vitae/nisl +https://walmart.com/amet/nunc/viverra/dapibus/nulla/suscipi +http://flickr.com/mi/integer/ac/neque/duis/bibendum/morbi.p +http://networkadvertising.org/est.png?odio=eget&elementum=e +http://msu.edu/suspendisse/ornare/consequat.xml?sagittis=ve +http://wikispaces.com/elementum/nullam/varius/nulla/facilis +https://dailymail.co.uk/curae/duis/faucibus/accumsan.xml?pr +https://goo.ne.jp/ante/ipsum/primis/in.js?hac=luctus&habita + +http://chicagotribune.com/aliquam/quis/turpis.jsp?maecenas= +http://google.co.uk/sapien/placerat/ante.jsp?magnis=a&dis=l +http://techcrunch.com/quam.aspx?nulla=congue&pede=etiam&ull +https://pen.io/risus/dapibus/augue.js?aliquet=ante&maecenas +https://msn.com/arcu/adipiscing/molestie/hendrerit/at.png?f +https://tumblr.com/arcu/libero/rutrum/ac/lobortis/vel/dapib +https://twitter.com/auctor.html?eu=fusce&sapien=consequat&c +https://xinhuanet.com/nisi/eu/orci/mauris/lacinia.aspx?ipsu +https://wiley.com/imperdiet.jsp?in=sed&hac=magna&habitasse= +https://github.io/mollis/molestie/lorem/quisque/ut/erat/cur +http://comsenz.com/nulla/ac/enim.aspx?posuere=vitae&cubilia +https://ehow.com/cras/pellentesque/volutpat/dui.xml?est=fus +http://nature.com/nisl/venenatis/lacinia/aenean/sit/amet/ju +https://army.mil/quis/turpis/sed/ante.xml?ante=natoque&viva +http://w3.org/hendrerit/at/vulputate/vitae/nisl.jsp?est=at& + +http://diigo.com/aenean/sit.html?molestie=dui&sed=vel&justo +https://slashdot.org/ac/diam/cras/pellentesque.aspx?quis=to +https://omniture.com/luctus/et/ultrices/posuere/cubilia/cur +https://nydailynews.com/elit/ac/nulla/sed/vel.xml?consequat +http://ifeng.com/vestibulum/ante/ipsum/primis/in/faucibus.j +http://dagondesign.com/suspendisse/accumsan/tortor/quis/tur +http://4shared.com/luctus/et/ultrices/posuere.jpg?lacinia=e + +https://elpais.com/non/mattis/pulvinar/nulla/pede/ullamcorp +http://pbs.org/justo.json?orci=porttitor&eget=id&orci=conse +https://parallels.com/ac/tellus/semper/interdum/mauris/ulla +https://freewebs.com/diam/vitae/quam/suspendisse/potenti/nu +http://spotify.com/pede/libero/quis.jsp?pretium=felis&iacul +https://homestead.com/tincidunt/ante/vel/ipsum.json?augue=f +https://feedburner.com/ut/ultrices/vel/augue.aspx?tellus=ul +http://auda.org.au/pellentesque/viverra/pede/ac.html?pede=i +http://wsj.com/consectetuer/eget/rutrum/at/lorem/integer.js +https://friendfeed.com/dictumst/etiam/faucibus/cursus.jpg?n +https://economist.com/et/ultrices/posuere/cubilia/curae.xml +https://digg.com/cursus.xml?semper=sagittis&porta=nam&volut +https://seesaa.net/sem.aspx?non=lorem&lectus=ipsum&aliquam= +http://va.gov/volutpat.aspx?consequat=rutrum&in=neque&conse +http://tmall.com/vestibulum/ac/est.html?sed=ut&vel=massa&en +https://washington.edu/tincidunt/eu/felis/fusce.jsp?turpis= +https://de.vu/lectus/vestibulum/quam/sapien/varius/ut/bland +http://sun.com/viverra/dapibus/nulla/suscipit/ligula/in/lac +http://noaa.gov/in/hac.aspx?mauris=in&non=tempor&ligula=tur +http://alibaba.com/ut/blandit.aspx?id=vel&luctus=ipsum&nec= +https://geocities.jp/tincidunt/eget/tempus/vel/pede.html?lu +http://feedburner.com/quis/orci/nullam.jsp?magnis=fusce&dis +https://t.co/penatibus/et.json?justo=magnis&sit=dis&amet=pa +https://businessinsider.com/imperdiet/sapien/urna.aspx?ac=c +http://posterous.com/justo/sollicitudin/ut/suscipit/a/feugi + + +http://chicagotribune.com/proin/interdum/mauris/non/ligula/ +http://epa.gov/mauris/sit/amet.js?mauris=vitae&eget=ipsum&m +http://clickbank.net/morbi/vestibulum/velit/id.aspx?eu=morb +https://nydailynews.com/erat/quisque/erat.xml?diam=nunc&neq +http://miibeian.gov.cn/pellentesque/ultrices/mattis.aspx?to + +http://rakuten.co.jp/arcu.aspx?imperdiet=ligula&nullam=in&o +http://fda.gov/dui.js?lorem=volutpat&id=sapien&ligula=arcu& +https://opensource.org/mauris/enim/leo.html?nulla=et&nisl=e +https://cdbaby.com/aliquet/maecenas/leo/odio/condimentum/id +https://tamu.edu/integer.html?sapien=quam&placerat=fringill +http://upenn.edu/eleifend/quam/a/odio/in.xml?rhoncus=lacus& +https://nyu.edu/ante/vel.xml?posuere=convallis&felis=nulla& +http://slashdot.org/sed/ante/vivamus.html?curabitur=nunc&gr +https://narod.ru/nam.jsp?ante=scelerisque&vivamus=quam&tort +https://unblog.fr/posuere/cubilia/curae.jpg?sit=luctus&amet +https://scientificamerican.com/consequat/metus.html?vestibu +http://admin.ch/primis/in/faucibus.jpg?mauris=in&sit=hac&am +https://bloomberg.com/aenean/auctor/gravida/sem/praesent.jp +http://myspace.com/et/ultrices/posuere/cubilia/curae.aspx?a +https://foxnews.com/vehicula/consequat/morbi/a/ipsum/intege +http://blogtalkradio.com/vestibulum/aliquet.jsp?quam=vestib +https://sakura.ne.jp/curae/duis/faucibus.xml?blandit=luctus +http://blogspot.com/nunc.json?fermentum=vel&justo=accumsan& +https://ezinearticles.com/diam/erat.png?sed=eget&accumsan=r + +http://phoca.cz/nunc/rhoncus/dui/vel/sem.aspx?magnis=ligula +http://fda.gov/porta/volutpat/quam/pede.png?porttitor=est&l +https://youku.com/leo/rhoncus/sed/vestibulum/sit.jsp?ante=p + +https://yale.edu/venenatis/turpis/enim/blandit/mi/in/portti +http://istockphoto.com/lobortis/vel/dapibus/at/diam.js?nisl +https://bizjournals.com/volutpat/in/congue/etiam/justo/etia +http://jugem.jp/vehicula/condimentum/curabitur/in/libero.ht +http://1688.com/proin/risus/praesent/lectus/vestibulum.js?d +http://ft.com/congue/vivamus.js?etiam=id&faucibus=sapien&cu +http://elegantthemes.com/sed/augue/aliquam/erat/volutpat.pn +http://loc.gov/justo.js?ultrices=fusce&phasellus=consequat& +http://phoca.cz/interdum/eu/tincidunt/in/leo/maecenas.png?c +https://eventbrite.com/odio/odio/elementum.html?commodo=ero +https://tripod.com/in/eleifend/quam/a.aspx?eget=metus&elit= +http://chron.com/adipiscing/lorem/vitae/mattis/nibh/ligula/ +http://icq.com/massa/id/nisl/venenatis/lacinia/aenean.js?eg +https://parallels.com/at/turpis/donec.jpg?lobortis=in&ligul +https://1und1.de/viverra/diam/vitae/quam/suspendisse/potent + +http://independent.co.uk/eget/eleifend/luctus/ultricies.jsp +https://bigcartel.com/vestibulum/sed/magna/at/nunc/commodo. +http://samsung.com/in/imperdiet/et/commodo/vulputate/justo. +http://tmall.com/parturient/montes/nascetur/ridiculus.png?p +http://digg.com/imperdiet/sapien/urna/pretium/nisl.jpg?nam= +http://sogou.com/cras/pellentesque/volutpat/dui/maecenas.js +http://va.gov/morbi/odio/odio/elementum/eu.js?mi=blandit&in + +http://drupal.org/non/velit/donec/diam/neque.jpg?vehicula=d +http://mtv.com/at/nunc/commodo/placerat.aspx?vehicula=morbi +http://cnbc.com/elementum/in.jsp?convallis=nulla&eget=ut&el +http://rediff.com/cum/sociis/natoque/penatibus/et/magnis.pn +http://naver.com/nulla/ac/enim/in/tempor/turpis/nec.jsp?rut +https://linkedin.com/maecenas/rhoncus.html?sem=ut&praesent= +https://timesonline.co.uk/pulvinar/sed/nisl.png?ut=pellente +http://washington.edu/ante/vel/ipsum/praesent/blandit/lacin +https://spotify.com/luctus/et/ultrices/posuere/cubilia/cura +https://berkeley.edu/vitae/nisl/aenean/lectus.html?eget=eti +https://hc360.com/mauris/enim/leo/rhoncus/sed/vestibulum/si +http://si.edu/velit/id/pretium/iaculis/diam/erat/fermentum. +http://clickbank.net/volutpat/quam.html?leo=amet&maecenas=e +http://icq.com/ultrices/enim/lorem/ipsum/dolor/sit.json?lec + +https://yellowbook.com/at/dolor/quis/odio/consequat/varius/ +https://jiathis.com/nunc/purus/phasellus.jsp?non=eleifend&l +http://boston.com/nec/nisi.html?ut=nulla&at=ac&dolor=enim&q +https://com.com/cras/pellentesque/volutpat/dui/maecenas.asp +http://wix.com/amet/erat.png?odio=magna&donec=vulputate&vit +https://noaa.gov/fusce/consequat.aspx?pede=at&venenatis=vel +https://msn.com/sagittis/nam/congue/risus/semper/porta.jpg? +http://baidu.com/mi/nulla/ac/enim/in.js?duis=lobortis&conse +http://indiatimes.com/malesuada/in/imperdiet/et.js?primis=e +https://statcounter.com/placerat/ante.html?accumsan=eu&odio +https://google.pl/augue.jsp?nam=cursus&congue=urna&risus=ut +http://youtu.be/libero/nullam/sit.png?adipiscing=purus&mole +https://list-manage.com/risus/auctor/sed/tristique/in.jpg?p +http://bloglines.com/erat/eros.xml?morbi=pede&vestibulum=po +https://hc360.com/in/felis/donec/semper/sapien/a.html?sapie +https://samsung.com/nullam/orci/pede/venenatis/non.png?in=j +http://xing.com/sagittis/dui/vel/nisl/duis/ac/nibh.json?pos +http://ovh.net/suscipit/a/feugiat/et.jpg?platea=sit&dictums +https://furl.net/erat/nulla/tempus/vivamus/in.xml?blandit=p +http://cocolog-nifty.com/cursus/id/turpis.jsp?ipsum=bibendu +http://netvibes.com/risus/auctor/sed/tristique/in/tempus/si +http://gmpg.org/dui/luctus/rutrum/nulla/tellus/in.json?aliq +https://woothemes.com/tempus.html?ante=est&vivamus=et&torto +http://google.it/vehicula/condimentum/curabitur.json?sit=qu + +http://earthlink.net/odio/porttitor.html?lorem=in&integer=b +https://weibo.com/in.png?id=vitae&mauris=nisl +https://hexun.com/lectus/suspendisse/potenti/in.xml?ut=vita +http://psu.edu/ipsum/ac.html?quis=integer&tortor=aliquet&id +http://exblog.jp/at.aspx?mollis=dictumst&molestie=morbi&lor +http://usnews.com/aliquam/lacus.aspx?aliquam=diam&non=vitae +http://ocn.ne.jp/eget/rutrum.js?lorem=curabitur&vitae=gravi +http://chicagotribune.com/lorem.jpg?et=in&ultrices=blandit +https://nasa.gov/dui/proin/leo/odio/porttitor/id.xml?et=et& +https://paginegialle.it/ultrices/posuere/cubilia.png?nec=eg +http://mlb.com/aliquam/lacus/morbi/quis/tortor/id.jpg?bland + +http://blinklist.com/a/ipsum/integer/a/nibh/in.jsp?varius=u +https://gravatar.com/tempus/vivamus/in/felis/eu/sapien.json +http://state.gov/mauris/lacinia.json?pellentesque=nibh&vive +http://nps.gov/lacinia/erat.html?mauris=metus&non=aenean&li +http://tinypic.com/pede/malesuada/in/imperdiet/et.aspx?done + +http://topsy.com/consequat/metus/sapien/ut.jpg?primis=id&in +http://tripadvisor.com/quam.json?donec=penatibus&posuere=et +http://ibm.com/nunc/proin/at/turpis.jpg?amet=consequat&eros +https://aol.com/magna/bibendum/imperdiet.aspx?viverra=quis& +https://artisteer.com/platea.html?mus=curabitur&etiam=conva +https://nhs.uk/sit.jsp?tortor=curabitur&quis=at&turpis=ipsu +https://devhub.com/quisque.json?erat=metus&nulla=aenean&tem +http://bluehost.com/eu/massa/donec/dapibus.jpg?laoreet=dolo +https://icq.com/odio/curabitur/convallis/duis.aspx?lacus=te +https://google.it/pellentesque/ultrices/phasellus/id/sapien +http://blogger.com/orci/luctus/et.js?at=ultrices&nulla=aliq +https://yahoo.com/cursus.xml?id=quis&mauris=augue&vulputate +http://sfgate.com/elementum/eu/interdum.js?proin=congue&ris +https://google.nl/est/quam/pharetra/magna.xml?nec=sapien&eu +https://smugmug.com/integer/tincidunt/ante/vel/ipsum/praese +https://aol.com/magna/bibendum/imperdiet.jsp?augue=et&vel=e +http://hp.com/tempus/vel.json?sem=parturient&sed=montes&sag +https://home.pl/nisl/nunc/nisl.aspx?felis=sapien&fusce=sapi +https://google.com/convallis.xml?nulla=eget&facilisi=semper +https://intel.com/hendrerit/at/vulputate/vitae/nisl/aenean. +http://seesaa.net/aliquet/massa/id.png?suscipit=primis&ligu +http://plala.or.jp/turpis/a/pede/posuere/nonummy/integer/no +http://howstuffworks.com/praesent/blandit/lacinia/erat/vest +http://dagondesign.com/non/quam.aspx?nec=sit&dui=amet&luctu +http://soup.io/habitasse.js?ac=sed&neque=lacus&duis=morbi&b +https://ibm.com/justo/sit/amet/sapien/dignissim/vestibulum/ +https://dion.ne.jp/justo/in/blandit.png?eget=augue&vulputat +https://merriam-webster.com/justo/etiam/pretium/iaculis.js? + +http://cpanel.net/odio/cras.jsp?gravida=dui&sem=maecenas&pr +http://sbwire.com/in/sagittis/dui/vel.html?pede=tincidunt&l +http://sbwire.com/tristique/in/tempus/sit/amet/sem/fusce.js +https://google.nl/elit/sodales/scelerisque/mauris/sit/amet/ +http://nba.com/odio/donec.html?dolor=in&sit=felis&amet=done +https://uol.com.br/venenatis.jpg?elit=cubilia&sodales=curae +https://pen.io/suspendisse/potenti/in/eleifend/quam/a/odio. +http://goo.gl/convallis/nunc.jpg?sagittis=primis&nam=in&con + +https://printfriendly.com/porttitor/lacus.jsp?cras=in&pelle +https://go.com/commodo/placerat/praesent/blandit/nam/nulla/ +http://statcounter.com/magnis/dis/parturient/montes/nascetu +https://dropbox.com/etiam/faucibus/cursus/urna/ut/tellus/nu +https://vkontakte.ru/mus/etiam/vel/augue.aspx?metus=pede&ar +https://hhs.gov/vestibulum/ante.html?blandit=sapien&non=iac +http://unicef.org/libero/non/mattis/pulvinar/nulla/pede.png +http://symantec.com/cubilia/curae/nulla/dapibus/dolor.js?el +https://geocities.jp/congue/risus/semper.jsp?malesuada=vest +http://xrea.com/libero/non/mattis/pulvinar/nulla/pede/ullam +http://google.com.hk/nulla.jpg?et=blandit&ultrices=non&posu +https://deviantart.com/libero.jsp?et=a&magnis=pede&dis=posu +https://mail.ru/nullam.png?vel=phasellus&est=in&donec=felis +http://ox.ac.uk/risus.html?pede=in&morbi=lectus&porttitor=p +http://godaddy.com/venenatis/lacinia/aenean.json?vestibulum +http://google.com.au/enim/sit/amet/nunc.html?sapien=dui&sap +http://nationalgeographic.com/aliquet/pulvinar/sed/nisl/nun +https://biglobe.ne.jp/aenean.json?erat=integer&volutpat=a&i +http://flavors.me/vestibulum/ante/ipsum/primis/in/faucibus. +http://wikispaces.com/in/faucibus/orci/luctus/et.html?eget= +http://surveymonkey.com/potenti.jpg?ut=iaculis&mauris=justo +https://163.com/metus/vitae.jsp?vitae=dictumst&mattis=maece +https://cocolog-nifty.com/nisl.aspx?tortor=vel&quis=est&tur +https://fotki.com/sapien/sapien/non.js?metus=nisl&arcu=nunc +http://youtube.com/magnis/dis/parturient/montes/nascetur/ri +http://dyndns.org/curabitur/convallis.jpg?morbi=cum&ut=soci +http://google.com.au/dui/luctus/rutrum/nulla/tellus.jsp?nul + +https://unblog.fr/mauris/morbi/non/lectus/aliquam/sit.aspx? +https://cargocollective.com/vitae/ipsum/aliquam.js?eu=sit&m +https://cdc.gov/magnis/dis/parturient.png?aliquam=vestibulu +http://smugmug.com/fusce.aspx?ultrices=sapien&posuere=iacul +https://google.pl/justo/aliquam/quis.jpg?ut=lacinia&odio=eg +http://blogger.com/pretium.json?scelerisque=ipsum&quam=prim +http://wikispaces.com/eget/semper/rutrum/nulla.png?ante=vel +http://dedecms.com/ut/tellus/nulla/ut/erat/id/mauris.aspx?m +http://buzzfeed.com/est/et/tempus/semper/est.aspx?nascetur= + +http://usnews.com/id/ligula/suspendisse/ornare.js?elementum +https://gnu.org/neque/sapien.json?non=amet&interdum=loborti +https://mozilla.com/justo/lacinia.html?nec=quam&molestie=ph +http://mozilla.com/nullam/varius/nulla/facilisi/cras/non/ve + +http://typepad.com/at/diam/nam.html?primis=diam&in=in&fauci +http://surveymonkey.com/quis/turpis/sed/ante/vivamus/tortor +https://dagondesign.com/morbi/non/quam/nec/dui/luctus.png?e +http://soup.io/donec/ut/mauris/eget/massa/tempor/convallis. + +http://cbc.ca/nunc.jpg?dolor=magna&vel=vulputate&est=luctus +https://shutterfly.com/aenean/sit.json?leo=ligula&maecenas= +https://diigo.com/nec/euismod/scelerisque/quam.jpg?morbi=at +http://seesaa.net/lorem.xml?adipiscing=quis&molestie=lectus +http://washington.edu/nulla/eget/eros/elementum/pellentesqu +http://youtube.com/dolor/morbi/vel/lectus/in/quam.jsp?sed=m +http://sakura.ne.jp/ac.jsp?pede=etiam&malesuada=vel&in=augu +https://businesswire.com/dis/parturient.jsp?non=arcu&lectus +https://sun.com/posuere/nonummy/integer/non/velit/donec.jso +http://nbcnews.com/turpis/donec.js?nisi=phasellus&venenatis +http://wiley.com/nunc/vestibulum/ante/ipsum.json?tempus=qua +http://cpanel.net/ligula/sit/amet.html?aliquam=interdum&sit +https://yellowpages.com/vel/est/donec/odio/justo/sollicitud +http://vk.com/posuere/cubilia/curae/donec/pharetra/magna/ve +http://livejournal.com/nulla.png?pede=consequat&justo=dui&l +http://jigsy.com/nec/molestie/sed/justo/pellentesque/viverr +https://wufoo.com/eget/eleifend/luctus/ultricies/eu/nibh.ht +http://reuters.com/amet/turpis/elementum/ligula/vehicula.as +http://rambler.ru/lorem/vitae/mattis/nibh/ligula/nec.png?in +https://netscape.com/nisi/nam/ultrices/libero/non.xml?lobor + +https://fotki.com/neque/sapien/placerat/ante.png?quisque=vi +https://businesswire.com/dui.jpg?diam=in&erat=imperdiet&fer +https://mapquest.com/rhoncus/dui/vel/sem/sed/sagittis/nam.a +https://sphinn.com/velit/vivamus/vel/nulla/eget.jpg?lacus=d +http://is.gd/lobortis/est.html?eget=in&vulputate=libero&ut= +http://wsj.com/dictumst/etiam/faucibus.xml?auctor=at&sed=ve +http://purevolume.com/cras/pellentesque/volutpat/dui/maecen +https://sitemeter.com/elit/ac.jpg?at=placerat&turpis=ante&a + +http://java.com/tellus.js?fusce=ante&posuere=vestibulum&fel + +http://sciencedirect.com/sapien/arcu/sed.xml?mauris=aenean& +https://cnn.com/ante/vivamus/tortor/duis/mattis.xml?mattis= +http://cdbaby.com/odio/condimentum/id/luctus/nec/molestie.a +https://ox.ac.uk/sagittis/nam/congue/risus/semper.aspx?quis +https://admin.ch/etiam/faucibus/cursus/urna.xml?posuere=nec +https://umn.edu/pede/morbi/porttitor.aspx?magna=pede&bibend +http://w3.org/adipiscing/elit/proin.jpg?phasellus=turpis&in +http://slate.com/luctus/et/ultrices/posuere/cubilia/curae/n +http://cpanel.net/parturient/montes/nascetur/ridiculus.js?n +http://csmonitor.com/nisl.html?velit=eros&id=suspendisse&pr +http://homestead.com/lacinia/eget/tincidunt.html?non=lacus& +https://blog.com/vel.json?interdum=ut&venenatis=suscipit&tu +https://adobe.com/erat/tortor/sollicitudin/mi.png?vestibulu +http://washington.edu/consequat/nulla/nisl.html?nulla=portt +https://bravesites.com/consequat/metus/sapien/ut/nunc/vesti +http://nymag.com/aliquet/at/feugiat/non/pretium/quis.jpg?ul +http://sina.com.cn/quisque/id/justo.js?aenean=primis&auctor +http://youtu.be/augue.json?quam=curae&turpis=mauris&adipisc +http://sogou.com/integer/aliquet/massa.js?blandit=aliquam&l +http://joomla.org/leo.png?donec=convallis&diam=morbi&neque= +http://github.com/sapien.png?in=volutpat +http://examiner.com/ut.png?lorem=aliquam&id=erat&ligula=vol +http://theglobeandmail.com/at/dolor/quis/odio.jsp?nec=tinci +http://nhs.uk/lobortis.html?maecenas=est&rhoncus=congue&ali +http://fema.gov/mauris/eget.xml?ut=nisi&nulla=volutpat&sed= +https://mail.ru/magnis/dis/parturient/montes/nascetur.jpg?e + +http://hubpages.com/orci/luctus/et/ultrices/posuere.png?dui +https://histats.com/nam/dui/proin/leo/odio.json?integer=sit +https://google.nl/at/ipsum.jpg?justo=ultrices&maecenas=posu +http://weibo.com/lacinia/eget.html?pede=etiam&posuere=vel&n +https://upenn.edu/eget/massa/tempor/convallis/nulla/neque/l +http://aol.com/nonummy.js?felis=pede&ut=ullamcorper&at=augu +https://nhs.uk/pretium/quis/lectus/suspendisse/potenti/in.j + +https://state.gov/iaculis.jsp?vestibulum=vitae&ante=ipsum&i +https://infoseek.co.jp/id/ligula/suspendisse/ornare/consequ +http://businessinsider.com/penatibus/et/magnis/dis/parturie +https://si.edu/cubilia/curae.json?proin=mauris&eu=vulputate +https://wikipedia.org/nam/congue/risus/semper/porta/volutpa +https://drupal.org/est/quam/pharetra.jpg?condimentum=sapien +https://ocn.ne.jp/mattis/odio.aspx?pretium=luctus&nisl=et&u +https://hp.com/ultrices.xml?turpis=in +https://aboutads.info/ut/odio.jsp?nec=at&condimentum=lorem& +https://twitpic.com/duis/ac/nibh/fusce/lacus/purus.png?eros +http://wsj.com/amet/consectetuer/adipiscing/elit/proin/risu +https://vinaora.com/et/tempus/semper/est/quam/pharetra.aspx +https://theguardian.com/praesent/id/massa/id/nisl/venenatis +http://weebly.com/convallis/morbi/odio/odio.json?suscipit=i +http://jugem.jp/eu/orci.xml?sociis=at&natoque=turpis&penati +http://dmoz.org/ipsum/integer/a/nibh/in/quis/justo.xml?enim +https://kickstarter.com/ac/neque/duis/bibendum/morbi.aspx?s +https://mtv.com/justo/sollicitudin/ut/suscipit/a/feugiat.xm +http://google.it/vestibulum/aliquet/ultrices.png?integer=al +http://narod.ru/eros/vestibulum/ac/est/lacinia/nisi/venenat +https://bing.com/ac/nulla/sed/vel/enim/sit/amet.html?nulla= +http://europa.eu/in/faucibus/orci/luctus/et/ultrices.aspx?b +http://baidu.com/lacinia/erat/vestibulum/sed/magna.js?cubil +http://furl.net/justo/eu/massa.js?cras=ante&in=ipsum&purus= +http://merriam-webster.com/eget/semper/rutrum/nulla/nunc.jp +https://unesco.org/non/interdum/in/ante/vestibulum.html?fel +http://privacy.gov.au/nulla/neque/libero.js?scelerisque=urn +https://linkedin.com/justo/maecenas/rhoncus.js?sit=cubilia& +https://exblog.jp/hac.json?nulla=non&nisl=interdum&nunc=in& +https://last.fm/consectetuer/eget/rutrum/at/lorem/integer.j +https://google.de/vel/augue.aspx?ultricies=cum&eu=sociis&ni +http://mashable.com/amet/diam/in.json?nulla=dolor&integer=s +http://buzzfeed.com/dis/parturient/montes/nascetur/ridiculu +http://prlog.org/eu/nibh/quisque/id.jpg?morbi=justo&odio=mo +http://sogou.com/nulla/ut/erat/id/mauris/vulputate/elementu +http://i2i.jp/cursus/urna/ut/tellus/nulla.jpg?vestibulum=se +http://businesswire.com/convallis/morbi/odio/odio/elementum + + +https://google.de/et/ultrices/posuere/cubilia/curae.js?adip +http://rediff.com/non.jsp?magna=lacinia&bibendum=aenean&imp +https://liveinternet.ru/aliquam/quis/turpis.js?orci=aliquet + +http://reference.com/gravida/sem/praesent/id/massa/id.aspx? +https://ovh.net/lacus/morbi/sem/mauris/laoreet/ut.html?cons + +http://hatena.ne.jp/sociis/natoque/penatibus.png?venenatis= +http://icio.us/luctus/ultricies/eu.js?duis=hac&consequat=ha +http://hibu.com/magnis/dis/parturient/montes/nascetur/ridic +http://nasa.gov/nulla.jpg?amet=consequat&turpis=nulla&eleme +https://csmonitor.com/nulla/tempus/vivamus/in/felis/eu/sapi +http://java.com/aliquam/erat/volutpat/in/congue/etiam/justo +https://sohu.com/turpis/adipiscing.js?ac=posuere&neque=metu + +http://cornell.edu/eu/est.png?ultrices=aenean&posuere=ferme +https://com.com/faucibus/accumsan/odio/curabitur/convallis/ +https://samsung.com/cubilia/curae/mauris/viverra.js?volutpa +http://printfriendly.com/vulputate.aspx?curae=quam&nulla=fr +http://walmart.com/felis.js?a=diam&libero=vitae&nam=quam&du +http://sphinn.com/tincidunt.jpg?ultrices=magnis&phasellus=d +http://bbc.co.uk/est/congue/elementum.png?dui=tortor&proin= +https://cbc.ca/luctus/et/ultrices/posuere/cubilia.xml?liber +https://youtu.be/turpis/integer/aliquet/massa.json?aliquam= +http://wikipedia.org/vestibulum.json?rutrum=et&nulla=magnis +http://answers.com/lobortis/sapien/sapien/non/mi/integer/ac +https://huffingtonpost.com/in.xml?fusce=eu&lacus=est&purus= +https://g.co/volutpat/dui/maecenas/tristique/est/et.png?et= +http://xrea.com/lacinia/eget/tincidunt/eget/tempus/vel/pede +http://phoca.cz/in/purus/eu.xml?quam=odio&suspendisse=portt +http://ftc.gov/libero/quis/orci/nullam/molestie/nibh/in.jsp +https://berkeley.edu/quam/pede/lobortis/ligula.aspx?nunc=li +http://wikipedia.org/curae.json?luctus=in&cum=felis&sociis= +https://zdnet.com/dis/parturient/montes/nascetur/ridiculus. +https://facebook.com/magna/vulputate/luctus.png?vel=pulvina +https://businessweek.com/vitae/ipsum/aliquam/non/mauris/mor +https://goo.ne.jp/diam.html?duis=sapien&aliquam=ut&convalli +http://w3.org/phasellus/id/sapien/in/sapien/iaculis/congue. +http://fema.gov/eleifend/pede/libero/quis/orci.png?velit=no +http://webmd.com/eget/orci/vehicula/condimentum/curabitur.h +https://ovh.net/bibendum/imperdiet/nullam/orci/pede/venenat +https://mapquest.com/in/est.js?suspendisse=ut&potenti=volut +http://slate.com/penatibus/et/magnis.json?in=massa&quam=vol + +https://shinystat.com/pede/justo/lacinia.jsp?sapien=cubilia +https://cloudflare.com/vel/pede/morbi/porttitor/lorem/id.pn +https://pinterest.com/consequat/metus/sapien/ut.aspx?quis=c +https://live.com/lacinia/aenean/sit/amet/justo.png?vestibul + +https://archive.org/vitae/ipsum/aliquam.jsp?augue=quis&vest +https://ovh.net/imperdiet/et/commodo.html?pede=ac&justo=leo +http://eepurl.com/convallis/tortor/risus/dapibus.js?nam=rid +https://utexas.edu/fusce/posuere/felis/sed/lacus/morbi/sem. +https://typepad.com/nulla/nunc/purus/phasellus/in.json?dict +http://google.fr/vel.aspx?eget=quis&rutrum=lectus&at=suspen +http://mac.com/fusce/lacus.aspx?orci=vivamus&luctus=tortor& +http://homestead.com/massa/id/lobortis.html?sit=quisque&ame +https://smh.com.au/mi/integer.jpg?mi=vel&nulla=nisl&ac=duis +http://free.fr/quis/tortor/id/nulla/ultrices.json?posuere=l +https://ft.com/nulla.json?in=mi +https://google.com.hk/suspendisse/potenti/cras/in.json?eu=u +https://g.co/dolor.html?amet=tincidunt&eros=eu&suspendisse= +http://irs.gov/nunc.jsp?augue=nibh&luctus=quisque&tincidunt +https://domainmarket.com/sapien/urna/pretium/nisl/ut/volutp + +https://bloomberg.com/lectus.html?libero=ipsum&convallis=pr +http://tinyurl.com/nam/nulla/integer/pede.html?dolor=in&mor + +https://google.cn/neque/vestibulum/eget/vulputate.xml?eleme +http://moonfruit.com/odio/porttitor/id/consequat/in/consequ +https://newyorker.com/tempus.js?pretium=eu&iaculis=nibh&dia +https://loc.gov/dui/vel/nisl/duis/ac/nibh.json?etiam=donec& +http://eventbrite.com/quis/odio/consequat/varius/integer/ac +https://google.ru/ultrices/enim/lorem/ipsum/dolor.png?pede= +https://merriam-webster.com/luctus/tincidunt/nulla/mollis/m +http://ucla.edu/convallis/nulla/neque/libero.json?vestibulu +https://skyrock.com/nec/molestie/sed/justo/pellentesque.js? +https://dropbox.com/lacinia/aenean/sit/amet/justo.html?dui= +https://accuweather.com/nec/molestie/sed/justo/pellentesque +http://dagondesign.com/laoreet/ut/rhoncus.js?mauris=lacinia +http://mayoclinic.com/ante/nulla.json?eget=ante&semper=vel& +http://foxnews.com/ligula/sit/amet/eleifend/pede/libero.asp +http://360.cn/consequat/in/consequat/ut.jsp?ultrices=pede&p +https://deliciousdays.com/ac/lobortis/vel/dapibus/at/diam.j +https://over-blog.com/consectetuer/eget/rutrum.jpg?diam=iac +http://about.com/et/ultrices/posuere/cubilia/curae.png?morb +https://rediff.com/lorem/integer/tincidunt/ante/vel/ipsum.j +http://wix.com/vestibulum/sit.json?placerat=curae&praesent= +http://redcross.org/vel/est/donec/odio.html?tellus=sed&semp + +http://dell.com/quis/libero/nullam/sit/amet/turpis/elementu +http://seesaa.net/luctus/et.html?vel=neque&pede=sapien&morb +https://jiathis.com/potenti/nullam/porttitor.xml?sem=erat&f +https://bravesites.com/sit/amet/justo.html?cursus=eros&id=v +https://prweb.com/luctus.png?nulla=turpis&suspendisse=adipi +https://abc.net.au/imperdiet/nullam/orci/pede/venenatis.xml +http://buzzfeed.com/in.jsp?nisl=auctor&venenatis=sed&lacini +http://hibu.com/ultrices.png?elementum=ut&eu=rhoncus&interd +http://spotify.com/quis/tortor/id/nulla.xml?sed=cras&interd +https://vk.com/donec/ut/dolor.jsp?turpis=ante&nec=ipsum&eui +http://pinterest.com/platea.html?metus=justo&aenean=pellent +https://smugmug.com/nulla/dapibus.js?orci=nulla&eget=nunc&o +http://state.gov/enim/leo/rhoncus.jsp?ante=morbi&ipsum=ut&p +https://zimbio.com/odio/in.html?magna=risus&at=dapibus&nunc +http://nsw.gov.au/ut/massa/quis/augue/luctus/tincidunt.png? +https://miibeian.gov.cn/aenean/fermentum.json?eleifend=pell +https://stumbleupon.com/convallis/nulla/neque/libero/conval +http://nyu.edu/eu/mi/nulla.js?congue=volutpat&vivamus=conva +http://jimdo.com/vulputate/luctus/cum/sociis.html?vestibulu +https://blogger.com/at/turpis/donec/posuere/metus/vitae/ips +https://over-blog.com/quam/turpis/adipiscing/lorem/vitae/ma +https://qq.com/est/donec.json?nisl=congue&ut=vivamus&volutp +https://google.cn/nibh/in/quis/justo/maecenas/rhoncus.aspx? +https://ft.com/hac.png?ac=augue&enim=luctus&in=tincidunt&te +https://sciencedaily.com/dapibus/augue/vel/accumsan.jpg?a=v +http://oracle.com/maecenas/tristique/est/et/tempus/semper.a +https://yelp.com/vivamus/vel/nulla/eget/eros/elementum.png? +http://redcross.org/consectetuer/eget/rutrum/at/lorem/integ +http://de.vu/iaculis/congue/vivamus/metus/arcu/adipiscing/m +https://vkontakte.ru/ut.html?tortor=erat&quis=id&turpis=mau +https://spotify.com/gravida/nisi/at/nibh/in.xml?diam=rutrum +https://etsy.com/in/faucibus.png?vel=habitasse&enim=platea +https://hatena.ne.jp/ullamcorper/purus/sit/amet/nulla.aspx? +https://liveinternet.ru/odio/condimentum/id/luctus/nec/mole +http://loc.gov/et/ultrices.aspx?metus=pede&sapien=libero&ut +https://barnesandnoble.com/sit/amet/justo/morbi/ut/odio/cra +http://chron.com/platea.js?semper=vitae&est=nisl&quam=aenea +https://amazon.co.jp/nulla/facilisi/cras/non/velit/nec.json +https://blogspot.com/morbi/non/quam/nec.jpg?adipiscing=non& +https://hc360.com/risus/praesent/lectus/vestibulum/quam/sap +http://odnoklassniki.ru/nulla/nisl/nunc/nisl/duis.json?quis +https://cyberchimps.com/elementum/in/hac/habitasse.aspx?ut= +http://csmonitor.com/odio/porttitor/id/consequat/in/consequ +http://mozilla.com/accumsan/odio/curabitur/convallis/duis/c +http://123-reg.co.uk/velit/nec/nisi/vulputate/nonummy.json? +http://opera.com/ultrices/posuere/cubilia.png?pulvinar=quis +https://artisteer.com/in.xml?sapien=leo&varius=rhoncus&ut=s +http://youtu.be/nam/ultrices/libero/non/mattis.json?porttit + +http://cpanel.net/convallis/nulla/neque/libero/convallis/eg +https://studiopress.com/mauris/ullamcorper/purus/sit/amet/n +https://blinklist.com/ante/vestibulum/ante/ipsum/primis.jsp +https://goo.gl/eu/mi/nulla.json?non=consectetuer&velit=adip + +http://multiply.com/ultrices/phasellus/id/sapien/in.js?maur +https://unicef.org/pellentesque/volutpat/dui.xml?ipsum=aene +https://simplemachines.org/interdum/in/ante/vestibulum.jsp? +http://dell.com/quam/a/odio/in.jpg?pellentesque=nullam&quis +https://arstechnica.com/nam.json?morbi=convallis&odio=nulla + +http://hatena.ne.jp/in/lacus/curabitur/at.png?ipsum=pellent +http://webs.com/in/imperdiet/et/commodo.xml?tortor=rutrum&r +http://yahoo.co.jp/convallis/morbi/odio/odio/elementum/eu/i +http://geocities.com/rhoncus/aliquet/pulvinar/sed.aspx?maec +http://samsung.com/blandit/ultrices/enim/lorem/ipsum/dolor. +https://friendfeed.com/orci/nullam/molestie/nibh.js?sed=sem +https://prnewswire.com/donec/diam/neque/vestibulum/eget/vul +http://cmu.edu/feugiat/non/pretium/quis.html?mi=purus&pede= +http://exblog.jp/diam/id/ornare/imperdiet/sapien/urna.json? +https://is.gd/sapien/sapien.json?ridiculus=platea&mus=dictu + +http://craigslist.org/hac/habitasse/platea/dictumst.jsp?mas +https://reverbnation.com/eget/nunc/donec/quis.json?eget=mae +http://fc2.com/nisi/eu/orci.aspx?cubilia=semper&curae=porta +https://indiegogo.com/proin/risus/praesent/lectus.png?liber +https://cisco.com/morbi/vestibulum.json?neque=ridiculus&dui +http://spotify.com/integer/ac/leo.aspx?sed=magna&augue=at&a +https://eventbrite.com/semper/interdum/mauris/ullamcorper.j +http://yellowbook.com/nulla/suspendisse/potenti/cras/in.xml +https://dot.gov/ligula/in.aspx?eget=aliquet&vulputate=ultri +http://clickbank.net/accumsan/tortor/quis.png?vestibulum=se +https://freewebs.com/id/massa/id/nisl/venenatis/lacinia/aen +http://rakuten.co.jp/sed/interdum/venenatis/turpis/enim.htm +http://networkadvertising.org/tortor.xml?blandit=turpis&ult +https://artisteer.com/non/pretium/quis.js?massa=faucibus&id +http://ucsd.edu/blandit/ultrices/enim/lorem/ipsum/dolor.png +http://linkedin.com/eu/mi.jsp?diam=primis&cras=in&pellentes +http://comsenz.com/vivamus/vel.jpg?vitae=quam&mattis=sapien +https://about.me/lorem/ipsum/dolor/sit/amet/consectetuer/ad +http://histats.com/nulla.json?accumsan=est&odio=lacinia&cur +https://dailymotion.com/consequat/nulla/nisl/nunc.js?eget=i +http://sciencedaily.com/mauris/lacinia/sapien/quis/libero/n +https://umn.edu/elit/ac/nulla/sed/vel/enim/sit.html?est=pla +https://yahoo.com/eget/vulputate/ut/ultrices/vel/augue.xml? +https://chronoengine.com/posuere/metus/vitae/ipsum/aliquam. +https://tuttocitta.it/montes/nascetur.html?eros=aenean&elem +https://symantec.com/sit/amet.jpg?est=vestibulum&lacinia=ve +https://wunderground.com/nulla/eget/eros.xml?ligula=nullam& + +http://businessinsider.com/posuere/cubilia/curae/nulla/dapi +http://bbc.co.uk/id/pretium/iaculis.html?sit=in&amet=leo&nu +https://homestead.com/orci.aspx?integer=in&pede=tempor&just +https://miibeian.gov.cn/malesuada/in/imperdiet.xml?ligula=i +https://youku.com/dapibus/at/diam/nam.aspx?molestie=aenean& +https://google.es/ac/leo/pellentesque.json?in=faucibus&puru +https://kickstarter.com/justo/sollicitudin/ut/suscipit/a/fe +http://skype.com/sollicitudin/ut/suscipit/a/feugiat.aspx?du +http://elegantthemes.com/posuere/cubilia/curae/mauris/viver +https://phpbb.com/volutpat/in.png?nisl=sed&duis=tristique&a +https://sina.com.cn/eleifend/donec/ut/dolor/morbi/vel.js?sa +https://tuttocitta.it/velit/eu/est/congue/elementum/in/hac. +http://tiny.cc/id/turpis.jpg?eget=vel&orci=sem&vehicula=sed +http://cnn.com/in/hac/habitasse/platea/dictumst.aspx?cubili +http://homestead.com/justo/etiam/pretium/iaculis.jpg?nulla= + +http://hp.com/sit/amet/diam/in/magna/bibendum/imperdiet.xml + +http://pen.io/mauris/lacinia/sapien/quis/libero/nullam.json +http://indiatimes.com/odio/odio/elementum/eu/interdum/eu.pn +http://weebly.com/curae/duis/faucibus/accumsan/odio/curabit +https://craigslist.org/leo/maecenas.jsp?nonummy=facilisi&in +http://howstuffworks.com/blandit.aspx?sapien=fusce&urna=pos +https://smugmug.com/sapien/non/mi/integer/ac/neque/duis.js? +http://vkontakte.ru/aenean/sit/amet/justo/morbi/ut.jpg?quam +http://printfriendly.com/vitae/consectetuer/eget/rutrum/at. +https://icq.com/lacinia/sapien/quis/libero/nullam/sit/amet. +http://ow.ly/purus/phasellus/in/felis/donec/semper/sapien.p +http://timesonline.co.uk/ipsum/primis/in.png?orci=leo&nulla +http://blogs.com/quisque.html?leo=a&odio=suscipit&porttitor +http://state.tx.us/aenean/lectus/pellentesque/eget.js?dolor +https://arizona.edu/mauris/laoreet/ut/rhoncus/aliquet.json? +https://comcast.net/sed.jpg?erat=odio&eros=justo&viverra=so +http://twitter.com/euismod/scelerisque/quam/turpis.jsp?id=s +https://dedecms.com/diam/erat/fermentum/justo/nec.xml?fauci +http://flickr.com/montes/nascetur/ridiculus/mus/etiam.png?n +http://mediafire.com/in/blandit/ultrices.jsp?magna=commodo& +http://moonfruit.com/consectetuer/adipiscing.aspx?rhoncus=v +http://gnu.org/ut/dolor.xml?eget=in&eros=libero&elementum=u +https://china.com.cn/est/et/tempus/semper/est/quam/pharetra +http://github.io/etiam/justo/etiam/pretium/iaculis/justo/in +http://tinypic.com/a/odio.png?ante=luctus&ipsum=cum +http://adobe.com/augue/vel/accumsan/tellus.html?libero=turp +https://springer.com/ante/ipsum/primis/in/faucibus/orci/luc +http://bizjournals.com/quis.aspx?consequat=pretium&dui=quis +http://squarespace.com/penatibus/et/magnis.js?semper=habita +https://alexa.com/ultrices/posuere/cubilia/curae/donec.json +http://cmu.edu/fusce/posuere.aspx?nulla=massa&justo=id&aliq +https://imdb.com/pellentesque/quisque/porta/volutpat/erat/q +http://vkontakte.ru/cursus/urna/ut/tellus.aspx?nisl=justo&d +http://about.me/vitae/ipsum.jpg?leo=semper&odio=sapien&port +https://dedecms.com/penatibus.aspx?quis=aliquam&turpis=non& +https://qq.com/quis/orci/eget/orci/vehicula/condimentum.js? +http://umich.edu/hac/habitasse/platea/dictumst.json?tortor= +http://oakley.com/mauris/morbi/non.xml?at=in&turpis=lectus& +https://hibu.com/in/lectus/pellentesque/at.js?pede=ultrices +http://cam.ac.uk/ligula/nec/sem/duis.xml?libero=non&quis=pr +https://reuters.com/vivamus/tortor/duis/mattis/egestas.png? +http://who.int/non.jsp?eu=ut&est=volutpat&congue=sapien&ele +https://sina.com.cn/dui/vel/nisl/duis/ac/nibh/fusce.html?eg + +http://freewebs.com/faucibus/accumsan/odio/curabitur/conval +https://de.vu/nulla/sed/accumsan.js?nam=donec&dui=vitae&pro +https://pen.io/vivamus/in/felis/eu/sapien.jpg?dolor=pede&si +https://dedecms.com/ut/massa/volutpat/convallis/morbi.xml?v +http://webs.com/ligula.aspx?quis=nisl&turpis=ut&sed=volutpa +https://patch.com/odio/porttitor.png?adipiscing=erat&lorem= +https://blog.com/integer/pede/justo/lacinia/eget/tincidunt. +https://zdnet.com/maecenas/tristique.jpg?sodales=nulla&scel +https://histats.com/duis/at/velit/eu/est.png?aenean=nulla&f +https://flickr.com/faucibus/cursus/urna/ut/tellus/nulla.htm +http://adobe.com/nam/dui/proin/leo/odio/porttitor.png?id=ne +http://xing.com/donec/dapibus/duis.jsp?mauris=platea&lacini +http://mapquest.com/scelerisque/quam/turpis/adipiscing.json +http://woothemes.com/amet/cursus/id/turpis/integer/aliquet. +https://barnesandnoble.com/ante/vestibulum.js?ante=tellus&i +http://tripod.com/condimentum/neque.jpg?pede=leo&venenatis= +https://wikia.com/lacus/curabitur/at/ipsum.js?varius=ipsum& +https://rediff.com/in/porttitor/pede/justo/eu/massa/donec.j +https://ca.gov/luctus/ultricies/eu/nibh.html?convallis=elem +https://fotki.com/adipiscing/lorem/vitae/mattis/nibh/ligula +http://google.com.hk/risus.js?augue=velit&vel=nec&accumsan= +http://youtu.be/curae/donec/pharetra.js?augue=aliquam&quam= +https://wiley.com/ornare/consequat/lectus.jsp?maecenas=non& +https://ask.com/pulvinar/nulla/pede/ullamcorper/augue/a/sus +https://amazon.co.jp/ut/massa/volutpat.aspx?justo=pede&in=p +https://nifty.com/ultrices/mattis/odio/donec.png?ultrices=s +https://timesonline.co.uk/nisi/volutpat/eleifend/donec.aspx +https://thetimes.co.uk/duis/aliquam/convallis/nunc/proin/at +http://paginegialle.it/in/sapien/iaculis/congue/vivamus/met +https://bluehost.com/at/dolor.xml?eget=velit&rutrum=donec&a +https://cocolog-nifty.com/in/hac/habitasse.jpg?dolor=tellus +https://istockphoto.com/eget/congue.js?justo=aliquet&pellen +https://trellian.com/diam/vitae/quam/suspendisse.xml?neque= +http://list-manage.com/amet/nulla/quisque.js?rhoncus=at&mau +https://princeton.edu/mauris/vulputate/elementum/nullam.png +http://squidoo.com/eu/sapien/cursus.xml?donec=venenatis&odi +http://i2i.jp/velit/id/pretium/iaculis/diam/erat/fermentum. +https://photobucket.com/tortor/duis/mattis/egestas/metus/ae +https://smh.com.au/elit.png?amet=est&justo=quam&morbi=phare +http://photobucket.com/non/mi/integer.jpg?morbi=sit&vel=ame +http://wordpress.com/lacus/morbi/quis/tortor.js?etiam=habit +http://patch.com/integer/tincidunt/ante/vel/ipsum.aspx?et=i +https://pcworld.com/orci.xml?cras=adipiscing&in=lorem&purus +http://reddit.com/ligula/suspendisse.js?vivamus=congue&tort + +https://moonfruit.com/dolor.png?porttitor=eu&pede=orci&just +http://hexun.com/morbi/quis/tortor/id/nulla/ultrices.png?vi +http://dropbox.com/ut/nulla/sed/accumsan/felis.jpg?iaculis= +http://tumblr.com/morbi/a.aspx?sagittis=mollis&sapien=moles +https://economist.com/ut/at/dolor/quis/odio/consequat/variu + +https://comsenz.com/montes/nascetur/ridiculus.jpg?amet=susp +https://bloglovin.com/auctor/sed/tristique/in/tempus/sit.js +http://auda.org.au/tellus/nulla.png?varius=nulla&integer=te +http://tumblr.com/nullam/orci/pede/venenatis/non/sodales/se +http://home.pl/amet/eros/suspendisse/accumsan/tortor.html?v +http://columbia.edu/etiam/faucibus/cursus/urna/ut/tellus.jp +https://creativecommons.org/nulla/facilisi.js?faucibus=at&o +http://webnode.com/etiam/faucibus/cursus.json?primis=habita +https://yelp.com/ligula/nec/sem/duis/aliquam/convallis/nunc +http://cbc.ca/dictumst/morbi/vestibulum/velit/id/pretium/ia +https://devhub.com/eleifend/donec/ut/dolor/morbi/vel/lectus +https://vk.com/vestibulum/ante/ipsum/primis/in.jpg?proin=ma +http://sogou.com/eget/orci/vehicula.png?nec=lobortis&nisi=l +http://printfriendly.com/nisi/vulputate.aspx?dolor=porttito + +http://indiatimes.com/curabitur/gravida/nisi.jsp?tincidunt= +https://ftc.gov/ipsum/praesent/blandit.xml?tristique=volutp +http://webs.com/mattis/odio.json?laoreet=fusce&ut=lacus&rho +http://sourceforge.net/faucibus/orci/luctus.aspx?erat=laore + +https://deviantart.com/a/nibh/in/quis.jsp?tempor=libero&con +http://google.com.au/faucibus.js?at=rhoncus&feugiat=aliquam +https://linkedin.com/nunc/proin/at/turpis/a/pede/posuere.jp +https://sitemeter.com/justo/morbi/ut/odio/cras/mi.json?pede +https://mtv.com/at/lorem.xml?nisi=ultricies&volutpat=eu&ele +https://youtube.com/ante/ipsum/primis.aspx?odio=aliquet&in= +https://about.me/blandit.xml?odio=odio&odio=in&elementum=ha +https://booking.com/fusce/consequat/nulla/nisl/nunc/nisl.xm +https://blogger.com/pretium/quis/lectus/suspendisse/potenti +http://angelfire.com/tortor/quis/turpis/sed.xml?lacus=quis& +https://addthis.com/in/hac/habitasse/platea/dictumst/morbi/ +http://mysql.com/ipsum/primis/in/faucibus/orci/luctus.aspx? +http://de.vu/nec/molestie/sed/justo/pellentesque.jpg?augue= +https://craigslist.org/nisl/duis/ac/nibh.aspx?libero=facili +https://icio.us/justo/lacinia/eget.aspx?velit=dapibus&eu=do +http://xrea.com/duis/faucibus/accumsan/odio/curabitur/conva + +http://liveinternet.ru/et/magnis.xml?sapien=lacus&dignissim +http://washingtonpost.com/rhoncus.xml?cursus=erat&urna=ferm +http://symantec.com/luctus/rutrum/nulla.json?porttitor=vita +https://gov.uk/sit/amet.jpg?maecenas=vel&pulvinar=accumsan& +https://cocolog-nifty.com/turpis/sed/ante.png?semper=velit& +https://zdnet.com/tortor.xml?vel=amet&est=erat&donec=nulla& +https://rakuten.co.jp/justo/in/blandit/ultrices.png?magna=q +https://europa.eu/congue/etiam/justo.aspx?potenti=amet&null +http://artisteer.com/a/nibh/in/quis.json?morbi=accumsan&qui +https://fema.gov/luctus.jpg?nullam=pulvinar&varius=sed&null +https://homestead.com/id/ligula/suspendisse/ornare/consequa +https://seesaa.net/eleifend/donec/ut/dolor/morbi.jpg?dictum +http://xinhuanet.com/fermentum.jpg?justo=vestibulum&sit=ali +http://columbia.edu/praesent.js?magnis=dictumst&dis=maecena + +https://arizona.edu/quis/augue/luctus/tincidunt/nulla/molli +http://buzzfeed.com/enim/in/tempor.js?ipsum=dapibus&dolor=d +https://instagram.com/in.js?eget=volutpat&nunc=eleifend&don +https://facebook.com/duis/bibendum/felis/sed/interdum/venen +https://prnewswire.com/est/risus/auctor/sed.js?erat=velit&e +http://delicious.com/lobortis/sapien/sapien/non/mi/integer/ +http://mediafire.com/placerat/ante/nulla/justo/aliquam.jpg? +https://woothemes.com/proin/interdum/mauris/non/ligula.jpg? +http://hp.com/in/quam/fringilla/rhoncus/mauris.aspx?sed=tem +http://nydailynews.com/id/pretium/iaculis/diam.js?dictumst= +https://is.gd/varius/nulla/facilisi.jpg?interdum=blandit&ve +https://cargocollective.com/nulla/mollis/molestie.js?justo= +https://github.io/maecenas/ut/massa/quis.png?eros=proin&sus + +https://buzzfeed.com/ut/rhoncus/aliquet/pulvinar/sed/nisl.j +http://i2i.jp/elementum.aspx?natoque=donec&penatibus=odio&e +https://naver.com/imperdiet/nullam/orci/pede.html?massa=ame +http://usatoday.com/aliquam/erat/volutpat/in/congue/etiam.j +http://rambler.ru/ultrices/vel/augue/vestibulum.jsp?nunc=co +http://unicef.org/orci/mauris.html?justo=tellus&pellentesqu +https://cargocollective.com/non/velit/nec.json?quisque=pede +https://newyorker.com/orci/luctus/et/ultrices/posuere/cubil +https://com.com/amet/turpis/elementum/ligula/vehicula/conse +http://cisco.com/quis/justo/maecenas/rhoncus/aliquam/lacus. +https://cmu.edu/elementum/ligula/vehicula/consequat/morbi/a +https://etsy.com/suspendisse/ornare/consequat/lectus/in.htm +https://hao123.com/nulla/sed/vel/enim.json?turpis=volutpat& +http://nsw.gov.au/quis/turpis/eget/elit/sodales/scelerisque +http://utexas.edu/aenean/fermentum/donec/ut/mauris/eget.js? +https://reference.com/ultrices.aspx?posuere=ante&metus=vest +http://vinaora.com/faucibus.json?adipiscing=posuere&lorem=n +http://yelp.com/interdum/mauris/non/ligula/pellentesque/ult +https://google.cn/amet/cursus/id.jpg?semper=ligula&rutrum=p +https://simplemachines.org/quisque/id.json?risus=ante&praes +https://cafepress.com/nulla/neque/libero.jpg?est=neque&laci +https://ebay.com/faucibus/accumsan/odio/curabitur/convallis +https://microsoft.com/eu/massa/donec/dapibus.js?nulla=cum&n +https://posterous.com/nibh/quisque/id.json?id=amet&sapien=j +https://diigo.com/lectus/in/est/risus/auctor.json?velit=ped +http://godaddy.com/integer/ac.png?nec=turpis&dui=elementum& +http://netvibes.com/enim/blandit/mi/in/porttitor/pede/justo +https://ebay.co.uk/at/velit/eu/est/congue/elementum/in.js?a +http://furl.net/felis/donec/semper/sapien/a.jpg?amet=duis&s +http://reverbnation.com/eu/mi/nulla/ac/enim/in/tempor.jpg?d +https://jimdo.com/ipsum.jsp?congue=pellentesque&eget=quisqu +http://123-reg.co.uk/lorem.jpg?erat=eget&nulla=eros&tempus= +https://ezinearticles.com/sed/interdum/venenatis.jpg?eget=a +http://hostgator.com/curae/nulla/dapibus/dolor/vel/est.js?e +http://smh.com.au/velit/eu/est/congue/elementum.jsp?donec=p +https://wikimedia.org/id/massa/id.jsp?at=augue&velit=aliqua +http://mapy.cz/lectus/aliquam.jsp?porttitor=turpis&id=donec +https://google.de/ultrices/vel/augue.aspx?neque=elementum&v +https://deviantart.com/erat/id/mauris/vulputate/elementum/n +https://dropbox.com/elementum/eu.html?eros=velit&suspendiss +https://desdev.cn/eu/interdum/eu.html?tellus=molestie&sempe +http://bbb.org/id/justo/sit/amet/sapien.html?phasellus=etia +https://is.gd/imperdiet/et/commodo/vulputate/justo.html?viv +https://ustream.tv/ut/volutpat/sapien.png?est=eget&phasellu +http://prweb.com/vulputate/ut.html?non=vulputate&pretium=lu + +https://ed.gov/vulputate/justo/in.html?orci=leo&mauris=rhon +http://fema.gov/dictumst/aliquam/augue/quam/sollicitudin/vi +https://g.co/bibendum/morbi/non/quam/nec/dui/luctus.html?at +http://independent.co.uk/vitae/mattis/nibh/ligula/nec/sem/d +http://washingtonpost.com/libero/ut/massa/volutpat/convalli +http://digg.com/praesent/lectus.jsp?donec=ut&ut=erat&dolor= +https://geocities.jp/mattis/pulvinar.js?volutpat=ultrices&c + +http://yelp.com/tincidunt/ante.html?condimentum=quam&id=sus + +http://craigslist.org/ultricies/eu/nibh/quisque/id/justo/si +http://google.cn/amet/turpis/elementum/ligula/vehicula/cons +https://soup.io/pretium/iaculis.aspx?aliquet=massa&ultrices +http://51.la/integer/ac/neque/duis.jpg?dui=id&vel=luctus&ni +http://paginegialle.it/amet/nulla/quisque/arcu/libero/rutru +https://joomla.org/lorem/ipsum/dolor.html?congue=nullam&viv +https://usgs.gov/odio/donec/vitae/nisi/nam.js?et=metus&ultr +https://blogs.com/eros/elementum/pellentesque.aspx?tincidun +http://wordpress.com/a/nibh/in/quis/justo/maecenas/rhoncus. +https://printfriendly.com/in/hac/habitasse/platea.aspx?sapi +https://sina.com.cn/enim/in/tempor/turpis/nec.jpg?morbi=tem +https://newyorker.com/congue/eget/semper/rutrum/nulla.xml?n +https://woothemes.com/sed/ante/vivamus/tortor.html?sit=at&a +http://umich.edu/odio/justo/sollicitudin.png?mi=porttitor&p +http://yellowpages.com/faucibus/accumsan/odio/curabitur/con +https://icq.com/rhoncus/dui/vel/sem/sed/sagittis.html?ante= +https://java.com/maecenas/tincidunt/lacus.jpg?sapien=mus&di +http://who.int/donec/semper/sapien/a.xml?ultrices=platea&en +http://bravesites.com/semper.json?ipsum=enim&dolor=lorem&si +http://google.co.uk/felis/eu/sapien/cursus/vestibulum/proin +https://narod.ru/felis/ut/at/dolor/quis/odio.json?nisl=nisi +https://sun.com/dapibus/dolor/vel/est/donec/odio/justo.png? +http://ning.com/platea/dictumst/aliquam.xml?donec=dolor&pha +https://icio.us/nunc/purus/phasellus/in/felis.js?aliquam=cr +http://bbb.org/ipsum/praesent/blandit/lacinia/erat/vestibul +https://dell.com/blandit/nam/nulla/integer/pede.aspx?nonumm +https://google.com.hk/porta/volutpat/erat/quisque/erat/eros +https://imgur.com/eu/massa/donec/dapibus.json?purus=quam&ph +https://noaa.gov/lacus/purus/aliquet/at.jsp?quam=turpis&nec +http://noaa.gov/consequat/ut/nulla/sed/accumsan.jsp?potenti +https://columbia.edu/pulvinar/lobortis/est.xml?pede=nam&mor +https://irs.gov/sodales/sed/tincidunt/eu/felis/fusce/posuer +http://domainmarket.com/id/turpis/integer/aliquet/massa/id. +http://squarespace.com/vel/accumsan/tellus/nisi/eu/orci/mau + +http://state.tx.us/risus/semper/porta/volutpat.jpg?diam=int +http://trellian.com/id/massa/id/nisl/venenatis.aspx?tristiq +http://sourceforge.net/cubilia/curae/duis/faucibus.aspx?in= +http://yandex.ru/in/sapien/iaculis.jsp?id=ultrices&justo=ph +http://163.com/turpis/donec/posuere.html?nec=nisi&euismod=a +http://senate.gov/vestibulum/rutrum/rutrum/neque/aenean.png +http://g.co/in/tempor/turpis/nec/euismod.aspx?turpis=et&a=u +https://sohu.com/accumsan/felis/ut.html?eleifend=ante&pede= + +https://usa.gov/sapien/arcu/sed/augue/aliquam/erat.js?cras= +http://narod.ru/consequat/nulla/nisl/nunc.html?feugiat=cons +https://exblog.jp/nisi.jpg?sit=et&amet=ultrices&lobortis=po +http://gizmodo.com/quam.xml?rhoncus=dapibus&mauris=duis&eni +http://bloomberg.com/elementum/pellentesque/quisque/porta/v +http://lulu.com/risus/semper/porta/volutpat/quam.jpg?lectus +http://dagondesign.com/molestie/nibh/in/lectus/pellentesque +http://diigo.com/turpis.jpg?vestibulum=nisl&aliquet=nunc&ul +https://mit.edu/turpis/donec.html?erat=eros&vestibulum=elem +https://ox.ac.uk/tristique/in/tempus/sit/amet/sem.xml?conse +http://spotify.com/amet.xml?arcu=habitasse&sed=platea&augue +https://craigslist.org/lobortis/sapien/sapien/non/mi/intege +https://nhs.uk/convallis/eget/eleifend/luctus.aspx?velit=cu +https://nyu.edu/donec/posuere/metus/vitae/ipsum.png?eu=orci +https://goo.gl/sit/amet/turpis/elementum.xml?proin=arcu&at= +http://shinystat.com/id/mauris/vulputate.json?elit=duis +https://vinaora.com/lorem/ipsum/dolor/sit/amet/consectetuer +https://discovery.com/ipsum/primis/in/faucibus/orci/luctus. +http://washington.edu/donec/dapibus/duis/at/velit/eu/est.pn +https://youtu.be/sit/amet/eleifend.html?fusce=aliquam&lacus +https://wikispaces.com/accumsan/felis/ut/at/dolor/quis.js?m +https://ocn.ne.jp/mattis.json?ut=rutrum&tellus=nulla&nulla= +http://163.com/mattis/odio/donec/vitae/nisi/nam/ultrices.js +https://bloglines.com/diam/vitae/quam/suspendisse/potenti/n +https://livejournal.com/augue/vestibulum/ante.html?vestibul +https://delicious.com/ipsum/integer/a/nibh.jpg?aliquam=dict +http://dell.com/parturient/montes/nascetur.png?at=interdum& +http://cbslocal.com/ridiculus/mus.aspx?sed=in&vestibulum=ha +https://goodreads.com/in/felis/donec/semper/sapien/a.jsp?du +http://weebly.com/tristique/in.aspx?a=ultrices&odio=posuere +https://usnews.com/nibh.aspx?sodales=quis&sed=turpis&tincid +https://dedecms.com/auctor/gravida.aspx?elementum=eget&ligu +http://vistaprint.com/aenean/auctor.aspx?elit=duis&sodales= +https://multiply.com/elementum/ligula/vehicula.xml?vulputat +https://opera.com/justo/pellentesque.aspx?vestibulum=at&ant +http://vinaora.com/aliquet/maecenas/leo.xml?id=sapien&justo +https://zimbio.com/mattis/nibh/ligula/nec.jsp?porttitor=mat +http://ehow.com/duis.jsp?mattis=pellentesque&nibh=at&ligula +https://webeden.co.uk/congue.html?nec=non&nisi=quam&vulputa +https://yolasite.com/leo/odio/porttitor/id.xml?ultrices=et& +https://taobao.com/leo/pellentesque/ultrices/mattis/odio/do diff --git a/PostgreSQL/.csv/words.csv b/PostgreSQL/.csv/words.csv new file mode 100644 index 0000000..7e26d23 --- /dev/null +++ b/PostgreSQL/.csv/words.csv @@ -0,0 +1,1001 @@ +word +morbi +nam + +duis +lacus +nulla +mauris +praesent +mattis +proin +tristique +pede + +bibendum +rutrum +quam +blandit +venenatis +id +egestas +felis +duis +fermentum +volutpat +donec +diam +et +elementum +a +volutpat +morbi +pretium +in +luctus +sollicitudin +nulla +dictumst +nec +mattis +in +in +sem +adipiscing +etiam + +imperdiet +velit +imperdiet +dictumst +arcu +nam +eu +a +fermentum +eu +elementum +ut +blandit +vel +sem +nec +ultrices +duis +curae +mauris +lacinia +nulla +vulputate +sit +justo +massa +odio +elementum +pede +eu +pellentesque +hac +justo +ac +vehicula +nibh +elementum +mauris +dolor +at +pretium +ante +morbi +pede +praesent +luctus +eget +consequat +et +laoreet +eget +sapien +convallis +odio +dui +ante +pede +amet +semper + +vestibulum +hac +velit +nibh +magna +pellentesque +ac +ante +justo +in +justo +integer +potenti +in +tristique +primis +duis +mi +pellentesque +nulla + +nulla +pharetra +vel +pede +a +vel +massa +ante +id +blandit +massa +morbi +sit +nibh +amet +id +sit + +eget +id +purus +augue +adipiscing +ipsum +commodo +rutrum +nibh +mauris +ultrices +pede +odio +rhoncus +vehicula +odio +elit +nunc +dolor +tellus +ultrices +imperdiet +quis +enim +quisque +porta +justo +ultrices +blandit +habitasse +cursus +consequat +vel +porta +purus +est +consequat +pede +facilisi +ut +venenatis + +dapibus +nisl +nisi +velit +sed +morbi +consequat +praesent +molestie +eget +consequat +lobortis +odio +viverra + +sed +nibh +dictumst +et +et +ut + +cras +ipsum + +porttitor +lorem +magnis +hac +nulla +tempus +in +ut +congue +et +sed +et +adipiscing + +lobortis +fusce +non +neque +aliquam +blandit +adipiscing +at +mauris +odio +donec +lorem +eleifend + +nascetur +erat +id +nisl +massa + +enim +velit +erat +pede +purus +donec +quis + +metus +sagittis +enim +nulla +non +mollis +eu +lacinia +rhoncus +magna +sem +orci +in +vulputate +ullamcorper +leo +venenatis +nullam +nisi +turpis +lectus + +nullam +cubilia +lobortis +cras +hendrerit +nulla + +vestibulum +eget +purus +eget +in +natoque +mollis +fusce +mi +nunc +id +purus +tellus +molestie +sit +ut +potenti +luctus +eget +pulvinar + +massa +amet +viverra +massa +aliquam +nisi +pellentesque +felis +in +ut +amet +mi +ridiculus +ante +ante + +id +orci +in +lobortis +mollis +pede +quam +erat +cubilia +in +orci +at +vitae +in + +aenean +in +phasellus +lectus +mauris +fusce +eleifend +sem +a +ridiculus +maecenas +ipsum +justo +id +lacus +id +cubilia +platea +pellentesque +et +dui +aliquam +morbi +aliquam +sagittis +quis +curabitur +etiam +vestibulum +orci + +nulla +sapien +nonummy +nec +cubilia +nulla +eget +id +et +diam +nisi + +lacus +lacus +neque +leo +purus + +nascetur +pretium +augue +morbi + +quis +elit +pede +nullam +interdum +sed +nisl +ac +sapien +mauris +quam +donec +in +luctus +ac +nunc +amet +turpis +porttitor +non +suspendisse +consequat +porta +semper +aliquet +id +sapien +in +in +adipiscing +lorem +lectus +sagittis + +molestie +ante +id +pellentesque +vel + +urna +eros +aliquam +sapien +est + +eget +aenean +integer +nec +pellentesque +felis +quam +tempus +sapien +natoque +praesent +nam +tortor +urna +dapibus +aliquam +hac +facilisi +orci +in +tempus +a +sapien + +volutpat +vel +lacinia +dolor +justo +quisque +faucibus +maecenas +odio +lobortis +hac +integer +dui +natoque +ut +aliquet +pellentesque +vivamus +quam +hac +eros +eros +in +eget +vel + +ridiculus +consequat +felis +iaculis + +magnis +dui +rutrum +ante +et +pretium +libero +eu +purus +amet +odio +nisl +in +quam +metus +maecenas +vestibulum +eget +nullam +tristique +pede +fringilla +hac +a +suscipit + +morbi +purus +dolor + +at +maecenas +in +mauris +a +in +turpis +ut +amet +pede +eu +amet +eu +eleifend + +eget +a +ipsum +in +quis +lacinia +ultrices +rhoncus +placerat +vitae +viverra +congue +amet +sodales +luctus +cursus +in +vulputate + +donec +lectus +nibh +iaculis +vel +magna +sit +vestibulum +habitasse +duis +et +in +vulputate +tellus +nam + +justo +ligula +justo +nulla +amet +morbi +accumsan +ullamcorper +purus +quis + +sollicitudin +rutrum + +nunc +nisl +dapibus +pretium +in +a +accumsan +pellentesque +luctus +id +quam +in +volutpat +faucibus +justo +duis +interdum + +vel +vel +pretium +egestas +curabitur +sit +mauris +neque +ut +quis +ipsum +justo +dui +luctus +leo +vulputate +in +vel +cum +congue +nec +mollis +luctus +at +in +mauris +diam +vel +nulla + +accumsan +at +sed +vulputate +id +et + +pede + +a +posuere +egestas +lorem +ultrices +eget +convallis +justo + +ipsum +libero +in +hac +nascetur +mauris +orci +integer +aenean +ligula +sodales +pharetra +dui +erat +amet +porttitor +ipsum + +velit +in +lacinia +at +suscipit +sapien +sagittis +donec +nullam +pellentesque +cum +vulputate +sit +rhoncus +in +erat +duis +rhoncus +amet +ut +quisque +velit +eleifend +potenti +ultricies +commodo +a +nec +turpis +at +quis +curabitur +massa +in + +ornare +etiam +cum +nulla +consequat +suscipit +accumsan +quam +vitae +amet +luctus +eros +leo +felis +ut +proin +ut +non +nisl +scelerisque +faucibus +vestibulum +eu +vitae +magnis +aliquet +blandit +nisi +sapien + +consequat +orci +at +non +auctor +congue +eu +tortor +nullam +neque +at +vivamus +ante +aliquam +convallis +at +pede +non +placerat +risus +sit + +sit +sapien +id +lectus +nam +vulputate +ultrices +quisque +amet +tortor +lacinia +nisl +in +nulla +vel + +eget +vulputate +pede +donec +dolor +egestas +congue +luctus +et +eros +vulputate +ac + + +ultrices +mattis +lectus +vitae +ante +sit +etiam +risus +morbi +nulla +eu +eros +proin +diam +felis + +nam +ullamcorper +eleifend +pellentesque +integer +molestie +fusce +et +dictumst +duis +in +molestie +nascetur +commodo +sapien + +id + +in +odio +venenatis +platea +justo +arcu +lacus +mattis +pede +curabitur +at + +nam +nulla +donec +accumsan +amet +ut +risus +pellentesque +tellus +lacus +penatibus +a +pharetra +magna +nulla +consectetuer +ipsum +ipsum +in +vulputate +suspendisse +morbi +convallis +libero +aliquam +id +eros +id +sit +curae +etiam +sed +accumsan +turpis +ante +vel +ut +pulvinar +leo +posuere +leo +eu +donec +quam + +pulvinar +amet +turpis +eu + +morbi +luctus +fusce +sollicitudin +habitasse +odio +ligula +nullam +nulla +ipsum +purus +lobortis +mi + +metus +sapien +arcu +quam +dui +ultricies +nulla +donec +ultrices +tempus +eget +vel +imperdiet +in +duis +quam + +quis +magnis +vitae +eros +sollicitudin +suscipit +dui +augue +a +ut +ut +turpis +arcu +primis +nibh +morbi +massa +ultrices +volutpat +dapibus +faucibus +sapien +morbi +nam +orci +in +erat +pede +curabitur +sapien +at +donec +tellus +porttitor +ut +aliquam +id +quis +adipiscing +interdum +cras +accumsan +a +lorem +dis +amet +vitae +nonummy +enim +nonummy +faucibus +mauris +primis +vulputate +risus +sit +convallis + + +odio +parturient + +at +eget +massa +convallis +nisi +sem +tincidunt +vitae +augue +ultrices +fusce +leo +in +dui +duis +pharetra +vulputate +nec +sociis +dolor +lacus +condimentum +magnis +quam +curae +nulla +integer diff --git a/PostgreSQL/data/.gitkeep b/PostgreSQL/.data/.gitkeep similarity index 100% rename from PostgreSQL/data/.gitkeep rename to PostgreSQL/.data/.gitkeep diff --git a/PostgreSQL/Dockerfile b/PostgreSQL/Dockerfile index 8ad7598..06a7396 100644 --- a/PostgreSQL/Dockerfile +++ b/PostgreSQL/Dockerfile @@ -3,5 +3,4 @@ FROM postgres:17 WORKDIR /db # postgresql will execute the files in that folder after build -COPY tables/tables.sql /docker-entrypoint-initdb.d/ - +COPY build/* /docker-entrypoint-initdb.d/ diff --git a/PostgreSQL/Makefile b/PostgreSQL/Makefile new file mode 100644 index 0000000..27db067 --- /dev/null +++ b/PostgreSQL/Makefile @@ -0,0 +1,30 @@ +DIR_SRC = src +DIR_BUILD = build + +BIN = 00_drop.sql 01_create.sql 02_insert.sql \ + 03_select.sql 04_update.sql + +all: $(BIN) + +generate_data: + python generate_data.py + rm .data/*.data + +00_drop.sql: + cp $(DIR_SRC)/drop.sql $(DIR_BUILD)/$@ + +01_create.sql: + cp $(DIR_SRC)/create.sql $(DIR_BUILD)/$@ + +02_insert.sql: + cp $(DIR_SRC)/insert.sql $(DIR_BUILD)/$@ + +03_select.sql: + cp $(DIR_SRC)/select.sql $(DIR_BUILD)/$@ + +04_update.sql: + cp $(DIR_SRC)/update.sql $(DIR_BUILD)/$@ + +clean: + rm -f $(DIR_BUILD)/* .data/*.data + diff --git a/PostgreSQL/tables/.gitkeep b/PostgreSQL/build/.gitkeep similarity index 100% rename from PostgreSQL/tables/.gitkeep rename to PostgreSQL/build/.gitkeep diff --git a/PostgreSQL/generate_data.py b/PostgreSQL/generate_data.py new file mode 100644 index 0000000..cfab552 --- /dev/null +++ b/PostgreSQL/generate_data.py @@ -0,0 +1,633 @@ +############################################################################### +# +# PYTHON SCRIPT TO RANDOMLY GENERATE DATA +# STEPS : +# 1 --> Generate a line of a table. +# 2 --> Generate an entire table. +# 3 --> Resolve the issues of dependencies and others. +# 4 --> Convert the created tables to the PostgreSQL code. +# Bonus --> Enjoy ! +# +############################################################################### + +import os +import random +import csv + +############################################################################### +# +# HERE IS ALL THE RAW DATA +# +# It is just csv files with for each a single column. +# +############################################################################### + +pathIntegers : str = ".csv/row_numbers.csv" +pathSentences : str = ".csv/sentences.csv" +pathUrls : str = ".csv/urls.csv" +pathWords : str = ".csv/words.csv" +pathNames : str = ".csv/names.csv" +pathNameModels : str = ".csv/name_models.csv" +pathDates : str = ".csv/dates.csv" +pathColors : str = ".csv/colors.csv" +pathBrands : str = ".csv/brands.csv" + +############################################################################### +# +# TO KNOW WHICH NUMBER IS USED FOR A PRIMARY KEY +# +############################################################################### + +def initialize_dict_primary_key(pathFile : str) -> dict: + """ + :param pathFile: merely is `pathIntegers`. + """ + d : dict = {} + + with open(pathFile, 'r') as toto: + csvList = list(csv.reader(toto)) + + for element in csvList[1:]: + d[int(element[0])] = 0 + + return d + +############################################################################### + +# id_truc = { X (int) : 1 or 0 } 1 for used, 0 for not. +idMembreDict : dict = initialize_dict_primary_key(pathIntegers) +idBoiteDict : dict = initialize_dict_primary_key(pathIntegers) +idCouleurDict : dict = initialize_dict_primary_key(pathIntegers) +idFilDict : dict = initialize_dict_primary_key(pathIntegers) +idFormeDict : dict = initialize_dict_primary_key(pathIntegers) +idIllustrDict : dict = initialize_dict_primary_key(pathIntegers) +idMarqueDict : dict = initialize_dict_primary_key(pathIntegers) +idMessageDict : dict = initialize_dict_primary_key(pathIntegers) +idModeleDict : dict = initialize_dict_primary_key(pathIntegers) +idMotifDict : dict = initialize_dict_primary_key(pathIntegers) +idPieceDict : dict = initialize_dict_primary_key(pathIntegers) +idPieceCompDict : dict = initialize_dict_primary_key(pathIntegers) +idTagDict : dict = initialize_dict_primary_key(pathIntegers) + +############################################################################### +# +# STEP 1 : GENERATE A LINE OF A TABLE +# +############################################################################### + +def give_used_key(idDict : dict) -> str: + """ + :param idDict: idTructDict. + :return: a key X that is used i.e idTrucDict[X] == 1 + """ + dictUsed : dict = { k: v for k, v in idDict.items() if v == 1 } + keysUsed : list = list(dictUsed.keys()) + length : int = len(keysUsed) + + # If the associated table has no instances yet. + if length == 0: + return '' + + randomKey : int = keysUsed[random.randrange(length)] + return str(randomKey) + +############################################################################### + +def give_not_used_key(idDict : dict) -> str: + """ + :param idDict: idTructDict. + :return: a key X that is not used i.e idTrucDict[X] == 0 + It updates the dict : 0 --> 1. + """ + dictNotUsed : dict = { k: v for k, v in idDict.items() if v == 0 } + keysNotUsed : list = list(dictNotUsed.keys()) + + # If the associated table has no instances yet. + if len(keysNotUsed) == 0: + return '' + + randomKey : int = random.choice(keysNotUsed) + idDict[randomKey] = 1 + return str(randomKey) + +############################################################################### +# +# USED FOR NOT PRIMARY KEY VARIABLES +# +############################################################################### + +def random_element(pathFile : str) -> str: + """ + :param pathFile: the relative path of the csv file to read. + :return: a random element from this file. + """ + with open(pathFile, 'r') as file: + csvList : list = list(csv.reader(file)) + random_index_line : int = random.randint(1, len(csvList) - 1) + return "" if ( csvList[random_index_line] == [] ) \ + else csvList[random_index_line][0] + +############################################################################### + +def construct_line(*args : tuple) -> str: + """ + :param *args: a tuple of elements. + example : [ "1", "'toto'", "'Lorem PIPsum'", "42" ]. + :return: a line to give to the sql. + example : "(1, 'toto', 'Lorem PIPsum', 42)". + """ + return "(" + ', '.join(list(args)) + ")" + +############################################################################### + +def generate_line_acheter(idMembre : str, idPiece : str, + quantite : str) -> str: + return construct_line(idMembre, idPiece, quantite) + +def generate_line_avoir_motif(idPiece : str, idMotif : str) -> str: + return construct_line(idPiece, idMotif) + +def generate_line_avoir_tag(idTag : str, idBoite : str) -> str: + return construct_line(idTag, idBoite) + +def generate_line_boites(idMarque : str) -> str: + idBoite : str = give_not_used_key(idBoiteDict) + titre : str = "\'" + random_element(pathWords) + "\'" + dateBoite : str = "\'" + random_element(pathDates) + "\'" + + return construct_line(idBoite, titre, dateBoite, idMarque) + +def generate_line_colorer(idPiece : str, idCouleur : str) -> str: + return construct_line(idPiece, idCouleur) + +def generate_line_construire(idBoite : str, idModele : str) -> str: + return construct_line(idBoite, idModele) + +def generate_line_contenir(idBoite : str, idPiece : str, + quantite : str) -> str: + return construct_line(idBoite, idPiece, quantite) + +def generate_line_couleurs() -> str: + idCouleur : str = give_not_used_key(idCouleurDict) + nomCouleur : str = "\'" + random_element(pathColors) + "\'" + + return construct_line(idCouleur, nomCouleur) + +def generate_line_enregistrer(idBoite : str, idMembre : str, + quantite : str) -> str: + return construct_line(idBoite, idMembre, quantite) + +def generate_line_etre(idPiece : str, idMarque : str) -> str: + return construct_line(idPiece, idMarque) + +def generate_line_etre_complexe(idPiece : str, idPieceComp : str) -> str: + return construct_line(idPiece, idPieceComp) + +def generate_line_etre_forme(idForme : str, idPiece : str) -> str: + return construct_line(idForme, idPiece) + +def generate_line_fils(idModele : str) -> str: + idFil : str = give_not_used_key(idFilDict) + + return construct_line(idFil, idModele) + +def generate_line_illustrations(idModele : str) -> str: + idIllustr : str = give_not_used_key(idIllustrDict) + urlIllustr : str = "\'" + random_element(pathUrls) + "\'" + + return construct_line(idIllustr, urlIllustr, idModele) + +def generate_line_marques() -> str: + idMarque : str = give_not_used_key(idMarqueDict) + nomMarque : str = "\'" + random_element(pathBrands) + "\'" + + return construct_line(idMarque, nomMarque) + +def generate_line_membres() -> str: + idMembre : str = give_not_used_key(idMembreDict) + nomMembre : str = "\'" + random_element(pathNames) + "\'" + + return construct_line(idMembre, nomMembre) + +def generate_line_messages(idMembre : str, idFil : str, + idMessage2 : str) -> str: + idMessage : str = give_not_used_key(idMessageDict) + contenu : str = "\'" + random_element(pathSentences) + "\'" + + # When the first message is declared. + if idMessage2 == '': + idMessage2 = idMessage + + return construct_line(idMessage, contenu, idMembre, idFil, \ + idMessage2) + +def generate_line_modeles(idMembre : str, idModeleEte : str) -> str: + idModele : str = give_not_used_key(idModeleDict) + nomModele : str = "\'" + random_element(pathNameModels) + "\'" + urlNotice : str = "\'" + random_element(pathUrls) + "\'" + + # When the first modele is declared. + if idModeleEte == '': + idModeleEte = idModele + + return construct_line(idModele, nomModele, urlNotice, idMembre, \ + idModeleEte) + +def generate_line_necessiter(idModele : str, idPiece : str, + quantite : str) -> str: + return construct_line(idModele, idPiece, quantite) + +def generate_line_noter(idModele : str, idMembre : str) -> str: + note : str = "\'" + random_element(pathSentences) + "\'" + + return construct_line(idModele, idMembre, note) + +def generate_line_perdre(idMembre : str, idBoite : str, + idPiece : str, quantite : str) -> str: + return construct_line(idMembre, idBoite, idPiece, quantite) + +def generate_line_tags() -> str: + idTag : str = give_not_used_key(idTagDict) + nomTag : str = "\'" + random_element(pathWords) + "\'" + + return construct_line(idTag, nomTag) + +def generate_line_varier(idModele_1 : str, idModele_et : str) -> str: + return construct_line(idModele_1, idModele_et) + +def generate_line_formes() -> str: + idForme : str = give_not_used_key(idFormeDict) + nomForme : str = "\'" + random_element(pathWords) + "\'" + + return construct_line(idForme, nomForme) + +def generate_line_motifs() -> str: + idMotif : str = give_not_used_key(idMotifDict) + nomMotif : str = "\'" + random_element(pathWords) + "\'" + + return construct_line(idMotif, nomMotif) + +def generate_line_pieces() -> str: + idPiece : str = give_not_used_key(idPieceDict) + + return construct_line(idPiece) + +def generate_line_pieces_complexes() -> str: + idPieceCo : str = give_not_used_key(idPieceCompDict) + + return construct_line(idPieceCo) + +############################################################################### +# +# STEP 2 : GENERATE AN ENTIRE TABLE +# +# It is temporarily stored in a file with the extension .data +# +############################################################################### + +def store_a_line_in_table(pathFile : str, funcGenerationLine) -> None: + """ + :param pathFile: the relative path where we want to store the table. + :param funcGenerationLine: the function generate_line_* for the table. + + Write the line of the table in a .data file. + """ + with open(pathFile, 'a+') as file: # w+ : if does not exist. + file.write(funcGenerationLine() + ",\n") + +############################################################################### + +def store_table(nbElements : int, nameTable : str, funcGenerationLine) -> None: + """ + :param nbElements: the number of instances we want to get. + :param nameTable: from `dictTables.keys()`. + :param funcGenerationLine: the function generate_line_* for the table. + """ + for i in range(nbElements): + store_a_line_in_table(give_path_file(nameTable), funcGenerationLine) + +############################################################################### + +def generate_table(nbElements : int, nameTable : str, funcGen) -> None: + for i in range(nbElements): + store_table(1, nameTable, funcGen) + +############################################################################### + +def generate_table_using_quantite(nbElements : int, nameTable : str, + funcGen) -> None: + # total : int = nbElements + # for i in range(nbElements): + # quantite : int = random.randint(0, int(total / 10)) if i < nbElements \ + # else total + # total = total - quantite + # funcGen_2 = lambda : funcGen( + # str(quantite) + # ) + + # store_table(1, nameTable, funcGen_2) + for i in range(nbElements): + quantite : int = random.randint(0, nbElements) + + funcGen_2 = lambda : funcGen( str(quantite) ) + store_table(1, nameTable, funcGen_2) + +############################################################################### +# +# STEP 3 : RESOLVE THE ISSUES OF DEPENDENCIES AND OTHERS +# +# Just edits the .data files. +# +############################################################################### + +def remove_duplicata(pathFile : str) -> None: + """ + :param pathFile: a .data file. + """ + lines_seen = set() # holds lines already seen. + + outfile = open("temp.data", "w") + for line in open(pathFile, "r"): + if line not in lines_seen: # not a duplicate. + outfile.write(line) + lines_seen.add(line) + outfile.close() + + os.rename("temp.data", pathFile) + +############################################################################### +# +# STEP 4 : CONVERSION TO PostgreSQL +# +############################################################################### + +def convert_table_to_sql(pathFile : str, nameTable : str) -> None: + """ + :param pathFile: the relative path to the .data file + which contains the table. + :param nameTable: the name of the table. + + Write the code in append mode to the file called `insert.sql`. + """ + fileSql = open("src/insert.sql", 'a') # append mode. + + fileSql.write("INSERT INTO " + nameTable + " VALUES\n") + + if os.path.exists(pathFile): + with open(pathFile, 'r') as fileData: + fileSql.writelines(fileData.readlines()) + + fileSql.close() + + # Replace last ',' by ';'. + with open("src/insert.sql", 'rb+') as fileSql: + fileSql.seek(-2, 2) + fileSql.truncate() + + with open("src/insert.sql", 'a') as fileSql: + fileSql.write(";\n") + fileSql.write("\n") + +############################################################################### + +tablesDict : dict = { + "membres" : generate_line_membres, + "couleurs" : generate_line_couleurs, + "marques" : generate_line_marques, + "tags" : generate_line_tags, + "formes" : generate_line_formes, + "motifs" : generate_line_motifs, + "pieces" : generate_line_pieces, + "pieces_complexes" : generate_line_pieces_complexes, + "modeles" : generate_line_modeles, + "boites" : generate_line_boites, + "fils" : generate_line_fils, + "messages" : generate_line_messages, + "illustrations" : generate_line_illustrations, + "acheter" : generate_line_acheter, + "avoir_motif" : generate_line_avoir_motif, + "avoir_tag" : generate_line_avoir_tag, + "colorer" : generate_line_colorer, + "construire" : generate_line_construire, + "contenir" : generate_line_contenir, + "enregistrer" : generate_line_enregistrer, + "etre" : generate_line_etre, + "etre_complexe" : generate_line_etre_complexe, + "etre_forme" : generate_line_etre_forme, + "necessiter" : generate_line_necessiter, + "noter" : generate_line_noter, + "perdre" : generate_line_perdre, + "varier" : generate_line_varier +} + +############################################################################### + +def give_path_file(nameTable : str) -> str: + repertory : str = ".data/" + return repertory + nameTable + ".data" + +############################################################################### + +if __name__ == '__main__': + ########################################################################### + # + # The tables that have no foreign keys. + # + ########################################################################### + + nbMembres : int = 101 + store_table(nbMembres, "membres", tablesDict["membres"]) + + nbCouleurs : int = 21 + store_table(nbCouleurs, "couleurs", tablesDict["couleurs"]) + + nbMarques : int = 10 + store_table(nbMarques, "marques", tablesDict["marques"]) + + nbTags : int = 69 + store_table(nbTags, "tags", tablesDict["tags"]) + + nbFormes : int = 69 + store_table(nbFormes, "formes", tablesDict["formes"]) + + nbMotifs : int = 100 + store_table(nbMotifs, "motifs", tablesDict["motifs"]) + + nbPieces : int = 750 + store_table(nbPieces, "pieces", tablesDict["pieces"]) + + nbPiecesComp : int = 250 + store_table(nbPiecesComp, "pieces_complexes", + tablesDict["pieces_complexes"]) + + ########################################################################### + # + # The tables that are needed for the verb tables. + # + ########################################################################### + + nbModeles : int = 10 + funcGen = lambda : tablesDict["modeles"]( + give_used_key(idMembreDict), + give_used_key(idModeleDict) + ) + generate_table(nbModeles, "modeles", funcGen) + + nbBoites : int = 20 + funcGen = lambda : tablesDict["boites"]( + give_used_key(idMarqueDict) + ) + generate_table(nbBoites, "boites", funcGen) + + nbFils : int = 100 + funcGen = lambda : tablesDict["fils"]( + give_used_key(idModeleDict) + ) + generate_table(nbFils, "fils", funcGen) + + nbMessages : int = 300 + funcGen = lambda : tablesDict["messages"]( + give_used_key(idMembreDict), + give_used_key(idFilDict), + give_used_key(idMessageDict) + ) + generate_table(nbMessages, "messages", funcGen) + + nbIllustrations : int = nbModeles + funcGen = lambda : tablesDict["illustrations"]( + give_used_key(idModeleDict) + ) + generate_table(nbIllustrations, "illustrations", funcGen) + + ########################################################################### + # + # The verb tables. + # + ########################################################################### + + nbAcheter : int = nbMembres if nbMembres < nbPieces else nbPieces + funcGen = lambda x: tablesDict["acheter"]( + give_used_key(idMembreDict), + give_used_key(idPieceDict), + x + ) + generate_table_using_quantite(nbAcheter, "acheter", funcGen) + + nbAvoirMotif : int = nbPieces if nbPieces < nbMotifs else nbMotifs + funcGen = lambda : tablesDict["avoir_motif"]( + give_used_key(idPieceDict), + give_used_key(idMotifDict) + ) + generate_table(nbAvoirMotif, "avoir_motif", funcGen) + + nbAvoirTag : int = nbTags if nbTags < nbBoites else nbBoites + funcGen = lambda : tablesDict["avoir_tag"]( + give_used_key(idTagDict), + give_used_key(idBoiteDict) + ) + generate_table(nbAvoirTag, "avoir_tag", funcGen) + + nbColorer : int = nbPieces if nbPieces < nbCouleurs else nbCouleurs + funcGen = lambda : tablesDict["colorer"]( + give_used_key(idPieceDict), + give_used_key(idCouleurDict) + ) + generate_table(nbColorer, "colorer", funcGen) + + nbConstruire : int = nbBoites if nbBoites < nbModeles else nbModeles + funcGen = lambda : tablesDict["construire"]( + give_used_key(idBoiteDict), + give_used_key(idModeleDict) + ) + generate_table(nbConstruire, "construire", funcGen) + + nbContenir : int = nbBoites if nbBoites < nbPieces else nbPieces + funcGen = lambda x: tablesDict["contenir"]( + give_used_key(idBoiteDict), + give_used_key(idPieceDict), + x + ) + generate_table_using_quantite(nbContenir, "contenir", funcGen) + + nbEnregistrer : int = nbBoites if nbBoites < nbMembres else nbMembres + funcGen = lambda x: tablesDict["enregistrer"]( + give_used_key(idBoiteDict), + give_used_key(idMembreDict), + x + ) + generate_table_using_quantite(nbEnregistrer, "enregistrer", funcGen) + + nbEtre : int = nbPieces - int(nbPieces / 4) + funcGen = lambda : tablesDict["etre"]( + give_used_key(idPieceDict), + give_used_key(idMarqueDict) + ) + generate_table(nbEtre, "etre", funcGen) + + nbEtreComp : int = nbPieces - nbEtre + funcGen = lambda : tablesDict["etre_complexe"]( + give_used_key(idPieceDict), + give_used_key(idPieceCompDict) + ) + generate_table(nbEtreComp, "etre_complexe", funcGen) + + nbEtreForme : int = nbPieces + funcGen = lambda : tablesDict["etre_forme"]( + give_used_key(idFormeDict), + give_used_key(idPieceDict) + ) + generate_table(nbEtreForme, "etre_forme", funcGen) + + nbNecessiter : int = nbModeles if nbModeles < nbPieces else nbPieces + funcGen = lambda x: tablesDict["necessiter"]( + give_used_key(idModeleDict), + give_used_key(idPieceDict), + x + ) + generate_table_using_quantite(nbNecessiter, "necessiter", funcGen) + + nbNoter : int = nbModeles if nbModeles < nbMembres else nbMembres + funcGen = lambda : tablesDict["noter"]( + give_used_key(idModeleDict), + give_used_key(idMembreDict) + ) + generate_table(nbNoter, "noter", funcGen) + + nbPerdre : int = nbPieces + funcGen = lambda x: tablesDict["perdre"]( + give_used_key(idMembreDict), + give_used_key(idBoiteDict), + give_used_key(idPieceDict), + x + ) + generate_table_using_quantite(nbPerdre, "perdre", funcGen) + + nbVarier : int = nbModeles + funcGen = lambda : tablesDict["varier"]( + give_used_key(idModeleDict), + give_used_key(idModeleDict) + ) + generate_table(nbVarier, "varier", funcGen) + + ########################################################################### + # + # To write `insert.sql`. + # + ########################################################################### + + # Remove duplicatas. + for nameTable in tablesDict: + remove_duplicata(give_path_file(nameTable)) + + # Writing in `insert.sql`. + fileSql = open("src/insert.sql", 'w+') + fileSql.write("TRUNCATE " + ', '.join(tablesDict) + ";\n") + fileSql.write("\n") + fileSql.close() + + with open("src/insert.sql", 'a') as fileSql: + for nameTable in tablesDict: + convert_table_to_sql(give_path_file(nameTable), nameTable) + +############################################################################### + diff --git a/PostgreSQL/tables/tables.sql b/PostgreSQL/src/create.sql similarity index 63% rename from PostgreSQL/tables/tables.sql rename to PostgreSQL/src/create.sql index e8aef88..4fd6891 100644 --- a/PostgreSQL/tables/tables.sql +++ b/PostgreSQL/src/create.sql @@ -4,32 +4,6 @@ -- CREATION Date : 24/10/24 -- ============================================================================ -DROP TABLE IF EXISTS acheter CASCADE; -DROP TABLE IF EXISTS avoir_motif CASCADE; -DROP TABLE IF EXISTS boites CASCADE; -DROP TABLE IF EXISTS colorer CASCADE; -DROP TABLE IF EXISTS construire CASCADE; -DROP TABLE IF EXISTS contenir CASCADE; -DROP TABLE IF EXISTS couleurs CASCADE; -DROP TABLE IF EXISTS enregistrer CASCADE; -DROP TABLE IF EXISTS etre CASCADE; -DROP TABLE IF EXISTS etre_complexe CASCADE; -DROP TABLE IF EXISTS etre_forme CASCADE; -DROP TABLE IF EXISTS fils CASCADE; -DROP TABLE IF EXISTS illustrations CASCADE; -DROP TABLE IF EXISTS marques CASCADE; -DROP TABLE IF EXISTS messages CASCADE; -DROP TABLE IF EXISTS modeles CASCADE; -DROP TABLE IF EXISTS necessiter CASCADE; -DROP TABLE IF EXISTS noter CASCADE; -DROP TABLE IF EXISTS perdre CASCADE; -DROP TABLE IF EXISTS varier CASCADE; -DROP TABLE IF EXISTS formes CASCADE; -DROP TABLE IF EXISTS membres CASCADE; -DROP TABLE IF EXISTS motifs CASCADE; -DROP TABLE IF EXISTS pieces CASCADE; -DROP TABLE IF EXISTS pieces_complexes CASCADE; - -- ============================================================================ -- Tables -- ============================================================================ @@ -38,80 +12,88 @@ CREATE TABLE acheter ( id_membre INTEGER NOT NULL, id_piece INTEGER NOT NULL, - quantite_acheter INTEGER , + quantite_acheter INTEGER , CONSTRAINT pk__acheter PRIMARY KEY (id_membre, id_piece) ); CREATE TABLE avoir_motif ( - id_piece INTEGER NOT NULL, - id_motif INTEGER NOT NULL, + id_piece INTEGER , + id_motif INTEGER , CONSTRAINT pk__avoir_motif PRIMARY KEY (id_piece, id_motif) ); +CREATE TABLE avoir_tag +( + id_tag INTEGER , + id_boite INTEGER , + CONSTRAINT pk__avoir_tag PRIMARY KEY (id_tag, id_boite) +); + CREATE TABLE boites ( - id_boite SERIAL NOT NULL, - titre_boite varchar(255) NOT NULL, - date_boite DATE , + id_boite INTEGER NOT NULL, + titre_boite varchar(255) NOT NULL, + date_boite DATE , + id_marque INTEGER , CONSTRAINT pk__boites PRIMARY KEY (id_boite) ); CREATE TABLE colorer ( id_piece INTEGER NOT NULL, - id_couleur INTEGER NOT NULL, + id_couleur INTEGER , CONSTRAINT pk__colorer PRIMARY KEY (id_piece, id_couleur) ); CREATE TABLE construire ( - id_boite INTEGER NOT NULL, - id_modele INTEGER NOT NULL, + id_boite INTEGER , + id_modele INTEGER , CONSTRAINT pk__construire PRIMARY KEY (id_boite, id_modele) ); CREATE TABLE contenir ( - id_boite INTEGER NOT NULL, - id_piece INTEGER NOT NULL, - quantite_contenir INTEGER NOT NULL, + id_boite INTEGER , + id_piece INTEGER , + quantite_contenir INTEGER NOT NULL, CONSTRAINT pk__contenir PRIMARY KEY (id_boite, id_piece) ); CREATE TABLE couleurs ( - id_couleur SERIAL NOT NULL, - nom_couleur VARCHAR(255) , + id_couleur INTEGER NOT NULL, + nom_couleur VARCHAR(255) , CONSTRAINT pk__couleurs PRIMARY KEY (id_couleur) ); CREATE TABLE enregistrer ( - id_boite INTEGER NOT NULL, - id_membre INTEGER NOT NULL, - quantite_enregistrer INTEGER NOT NULL, + id_boite INTEGER , + id_membre INTEGER , + quantite_enregistrer INTEGER NOT NULL, CONSTRAINT pk__enregistrer PRIMARY KEY (id_boite, id_membre) ); CREATE TABLE etre ( id_piece INTEGER NOT NULL, - id_marque INTEGER NOT NULL, + id_marque INTEGER , CONSTRAINT pk__etre PRIMARY KEY (id_piece, id_marque) ); CREATE TABLE etre_complexe ( - id_piece INTEGER NOT NULL, - id_piece_complexe INTEGER NOT NULL, + id_piece INTEGER NOT NULL, + id_piece_complexe INTEGER NOT NULL, CONSTRAINT pk__etre_complexe PRIMARY KEY (id_piece, id_piece_complexe) ); CREATE TABLE etre_forme ( - id_forme INTEGER NOT NULL, - id_piece INTEGER NOT NULL, + id_forme INTEGER NOT NULL, + id_piece INTEGER NOT NULL, CONSTRAINT pk__etre_forme PRIMARY KEY (id_forme, id_piece) ); @@ -124,102 +106,109 @@ CREATE TABLE fils CREATE TABLE illustrations ( - id_illustration SERIAL NOT NULL, - url_illustration VARCHAR(2048) , - id_modele INTEGER NOT NULL, + id_illustration INTEGER NOT NULL, + url_illustration VARCHAR(2048) , + id_modele INTEGER NOT NULL, CONSTRAINT pk__illustrations PRIMARY KEY (id_illustration) ); CREATE TABLE marques ( - id_marque SERIAL NOT NULL, - nom_marque VARCHAR(255) , + id_marque INTEGER NOT NULL, + nom_marque VARCHAR(255) , CONSTRAINT pk__marques PRIMARY KEY (id_marque) ); +CREATE TABLE membres +( + id_membre INTEGER NOT NULL, + nom_membre VARCHAR(255) NOT NULL, + CONSTRAINT pk__membres PRIMARY KEY (id_membre) +); + CREATE TABLE messages ( - id_message SERIAL NOT NULL, - contenu_message VARCHAR(255) , - id_membre SERIAL NOT NULL, - id_fil SERIAL NOT NULL, - id_message_2 SERIAL NOT NULL, + id_message INTEGER NOT NULL, + contenu_message VARCHAR(255) , + id_membre INTEGER NOT NULL, + id_fil INTEGER NOT NULL, + id_message_2 INTEGER NOT NULL, CONSTRAINT pk__messages PRIMARY KEY (id_message) ); CREATE TABLE modeles ( - id_modele SERIAL NOT NULL, - nom_modele VARCHAR(255) , - url_notice_modele VARCHAR(2048) , - id_membre INTEGER NOT NULL, - id_modele_2 INTEGER NOT NULL, + id_modele INTEGER NOT NULL, + nom_modele VARCHAR(255) , + url_notice_modele VARCHAR(2048) , + id_membre INTEGER NOT NULL, + id_modele_etendu INTEGER NOT NULL, CONSTRAINT pk__modeles PRIMARY KEY (id_modele) ); CREATE TABLE necessiter ( - id_modele INTEGER NOT NULL, + id_modele INTEGER , id_piece INTEGER NOT NULL, - quantite_necessiter INTEGER NOT NULL, + quantite_necessiter INTEGER NOT NULL, CONSTRAINT pk__necessiter PRIMARY KEY (id_modele, id_piece) ); CREATE TABLE noter ( - id_modele INTEGER NOT NULL, - id_membre INTEGER NOT NULL, - note_noter VARCHAR(255) NOT NULL, + id_modele INTEGER , + id_membre INTEGER , + note_noter VARCHAR(255) NOT NULL, CONSTRAINT pk__noter PRIMARY KEY (id_modele, id_membre) ); CREATE TABLE perdre ( - id_membre INTEGER NOT NULL, - id_boite INTEGER NOT NULL, + id_membre INTEGER , + id_boite INTEGER , id_piece INTEGER NOT NULL, - quantite_perdre INTEGER NOT NULL, + quantite_perdre INTEGER NOT NULL, CONSTRAINT pk__perdre PRIMARY KEY (id_membre, id_boite, id_piece) ); +CREATE TABLE tags +( + id_tag INTEGER NOT NULL, + nom_tag VARCHAR(255) , + CONSTRAINT pk__tags PRIMARY KEY (id_tag) +); + CREATE TABLE varier ( - id_modele INTEGER NOT NULL, - id_modele_2 INTEGER NOT NULL, - CONSTRAINT pk__varier PRIMARY KEY (id_modele, id_modele_2) + id_modele INTEGER , + id_modele_etendu INTEGER , + CONSTRAINT pk__varier PRIMARY KEY (id_modele, id_modele_etendu) ); CREATE TABLE formes ( - id_forme SERIAL NOT NULL, - nom_forme VARCHAR(255) NOT NULL, + id_forme INTEGER NOT NULL, + nom_forme VARCHAR(255) NOT NULL, CONSTRAINT pk__formes PRIMARY KEY (id_forme) ); -CREATE TABLE membres -( - id_membre SERIAL NOT NULL, - nom_membre VARCHAR(255) NOT NULL, - mdp_membre VARCHAR(255) NOT NULL, - CONSTRAINT pk__membres PRIMARY KEY (id_membre) -); CREATE TABLE motifs ( - id_motif SERIAL NOT NULL, - nom_motif VARCHAR(255) NOT NULL, + id_motif INTEGER NOT NULL, + nom_motif VARCHAR(255) NOT NULL, CONSTRAINT pk__motifs PRIMARY KEY (id_motif) ); CREATE TABLE pieces ( - id_piece SERIAL NOT NULL, + id_piece INTEGER NOT NULL, CONSTRAINT pk__pieces PRIMARY KEY (id_piece) ); CREATE TABLE pieces_complexes ( - id_piece_complexe SERIAL NOT NULL, + id_piece_complexe INTEGER NOT NULL, CONSTRAINT pk__pieces_complexes PRIMARY KEY (id_piece_complexe) ); @@ -243,6 +232,18 @@ ALTER TABLE avoir_motif ADD CONSTRAINT fk2__avoir_motif FOREIGN KEY (id_motif) REFERENCES motifs (id_motif); +ALTER TABLE avoir_tag + ADD CONSTRAINT fk1__avoir_tag FOREIGN KEY (id_tag) + REFERENCES tags (id_tag); + +ALTER TABLE avoir_tag + ADD CONSTRAINT fk2__avoir_tag FOREIGN KEY (id_boite) + REFERENCES boites (id_boite); + +ALTER TABLE boites + ADD CONSTRAINT fk1__boites FOREIGN KEY (id_marque) + REFERENCES marques (id_marque); + ALTER TABLE colorer ADD CONSTRAINT fk1__colorer FOREIGN KEY (id_piece) REFERENCES pieces (id_piece); @@ -260,7 +261,11 @@ ALTER TABLE construire REFERENCES modeles (id_modele); ALTER TABLE contenir - ADD CONSTRAINT fk2__contenir FOREIGN KEY (id_boite) + ADD CONSTRAINT fk1__contenir FOREIGN KEY (id_boite) + REFERENCES boites (id_boite); + +ALTER TABLE contenir + ADD CONSTRAINT fk2__contenir FOREIGN KEY (id_piece) REFERENCES pieces (id_piece); ALTER TABLE enregistrer @@ -275,6 +280,10 @@ ALTER TABLE etre ADD CONSTRAINT fk1__etre FOREIGN KEY (id_piece) REFERENCES pieces (id_piece); +ALTER TABLE etre + ADD CONSTRAINT fk2__etre FOREIGN KEY (id_marque) + REFERENCES marques (id_marque); + ALTER TABLE etre_complexe ADD CONSTRAINT fk1__etre_complexe FOREIGN KEY (id_piece) REFERENCES pieces (id_piece); @@ -300,13 +309,25 @@ ALTER TABLE illustrations REFERENCES modeles (id_modele); ALTER TABLE messages - ADD CONSTRAINT fk1__messages FOREIGN KEY (id_fil) + ADD CONSTRAINT fk1__messages FOREIGN KEY (id_membre) + REFERENCES membres (id_membre); + +ALTER TABLE messages + ADD CONSTRAINT fk2__messages FOREIGN KEY (id_fil) REFERENCES fils (id_fil); ALTER TABLE messages - ADD CONSTRAINT fk2__messages FOREIGN KEY (id_message_2) + ADD CONSTRAINT fk3__messages FOREIGN KEY (id_message_2) REFERENCES messages (id_message); +ALTER TABLE modeles + ADD CONSTRAINT fk1__modeles FOREIGN KEY (id_membre) + REFERENCES membres (id_membre); + +ALTER TABLE modeles + ADD CONSTRAINT fk2__modeles FOREIGN KEY (id_modele_etendu) + REFERENCES modeles (id_modele); + ALTER TABLE necessiter ADD CONSTRAINT fk1__necessiter FOREIGN KEY (id_modele) REFERENCES modeles (id_modele); @@ -340,7 +361,7 @@ ALTER TABLE varier REFERENCES modeles (id_modele); ALTER TABLE varier - ADD CONSTRAINT fk2__varier FOREIGN KEY (id_modele_2) + ADD CONSTRAINT fk2__varier FOREIGN KEY (id_modele_etendu) REFERENCES modeles (id_modele); -- ============================================================================ diff --git a/PostgreSQL/src/drop.sql b/PostgreSQL/src/drop.sql new file mode 100644 index 0000000..002c0d7 --- /dev/null +++ b/PostgreSQL/src/drop.sql @@ -0,0 +1,34 @@ +-- ============================================================================ +-- To drop the tables once created. +-- ============================================================================ + +DROP TABLE IF EXISTS acheter CASCADE; +DROP TABLE IF EXISTS avoir_motif CASCADE; +DROP TABLE IF EXISTS avoir_tag CASCADE; +DROP TABLE IF EXISTS boites CASCADE; +DROP TABLE IF EXISTS colorer CASCADE; +DROP TABLE IF EXISTS construire CASCADE; +DROP TABLE IF EXISTS contenir CASCADE; +DROP TABLE IF EXISTS couleurs CASCADE; +DROP TABLE IF EXISTS enregistrer CASCADE; +DROP TABLE IF EXISTS etre CASCADE; +DROP TABLE IF EXISTS etre_complexe CASCADE; +DROP TABLE IF EXISTS etre_forme CASCADE; +DROP TABLE IF EXISTS fils CASCADE; +DROP TABLE IF EXISTS illustrations CASCADE; +DROP TABLE IF EXISTS marques CASCADE; +DROP TABLE IF EXISTS membres CASCADE; +DROP TABLE IF EXISTS messages CASCADE; +DROP TABLE IF EXISTS modeles CASCADE; +DROP TABLE IF EXISTS necessiter CASCADE; +DROP TABLE IF EXISTS noter CASCADE; +DROP TABLE IF EXISTS perdre CASCADE; +DROP TABLE IF EXISTS tags CASCADE; +DROP TABLE IF EXISTS varier CASCADE; +DROP TABLE IF EXISTS formes CASCADE; +DROP TABLE IF EXISTS motifs CASCADE; +DROP TABLE IF EXISTS pieces CASCADE; +DROP TABLE IF EXISTS pieces_complexes CASCADE; + +-- ============================================================================ + diff --git a/PostgreSQL/src/insert.sql b/PostgreSQL/src/insert.sql new file mode 100644 index 0000000..3cfb354 --- /dev/null +++ b/PostgreSQL/src/insert.sql @@ -0,0 +1,4409 @@ +TRUNCATE membres, couleurs, marques, tags, formes, motifs, pieces, pieces_complexes, modeles, boites, fils, messages, illustrations, acheter, avoir_motif, avoir_tag, colorer, construire, contenir, enregistrer, etre, etre_complexe, etre_forme, necessiter, noter, perdre, varier; + +INSERT INTO membres VALUES +(283, 'Scrinage'), +(12, 'Raffles'), +(140, 'Salzen'), +(481, 'Doyle'), +(685, 'Marsy'), +(346, 'Fieller'), +(805, 'Morrid'), +(40, 'Jessel'), +(812, 'Hailwood'), +(741, 'Matyushonok'), +(206, 'McSparran'), +(579, 'Lambeth'), +(365, 'Calder'), +(638, 'Assur'), +(986, 'Lewing'), +(981, 'Clohissy'), +(686, 'Wombwell'), +(251, 'Roebuck'), +(879, 'Lane'), +(244, 'Dawdary'), +(729, 'Crowch'), +(299, ''), +(770, 'Brumwell'), +(653, 'Inold'), +(14, ''), +(910, 'Foley'), +(460, 'Huggard'), +(401, 'Kubicki'), +(641, 'Guiett'), +(823, 'Lace'), +(615, 'Clohissy'), +(383, ''), +(468, 'Blundon'), +(791, 'Fleay'), +(715, 'Bachelar'), +(976, 'Varsey'), +(913, 'Valentine'), +(382, 'Shemelt'), +(439, 'Bruna'), +(463, 'Shallcross'), +(557, 'Enders'), +(336, 'Cornelius'), +(52, 'Joincey'), +(386, 'Howkins'), +(168, 'Abson'), +(26, 'Renfield'), +(863, 'Rizzelli'), +(637, 'Rosa'), +(688, 'Milesop'), +(9, 'Porcher'), +(525, ''), +(274, 'Greatex'), +(325, 'Stone Fewings'), +(934, 'Wyke'), +(77, 'Harrild'), +(149, 'Geillier'), +(404, ''), +(237, 'Srawley'), +(181, 'Gergus'), +(134, 'Baldin'), +(281, 'MacVicar'), +(874, 'Babcock'), +(478, 'Shepland'), +(983, 'Greenough'), +(980, 'Quigley'), +(1000, 'Graysmark'), +(284, 'Edgerton'), +(712, 'Clewett'), +(193, 'Allerton'), +(56, 'Baldin'), +(438, 'Dugood'), +(81, 'Dare'), +(201, 'Luff'), +(580, 'Kelsall'), +(115, 'Springtorpe'), +(230, 'Warham'), +(137, 'Burg'), +(893, ''), +(577, 'Dulwich'), +(545, 'Haycock'), +(928, ''), +(695, 'Rothera'), +(303, 'Glandfield'), +(451, 'Laguerre'), +(1, 'Swatman'), +(239, 'Bassham'), +(18, 'Porcher'), +(550, 'Magauran'), +(442, 'Plessing'), +(609, 'Baytrop'), +(647, 'Christley'), +(720, 'Silbermann'), +(713, 'Dewett'), +(259, 'Durram'), +(384, ''), +(687, 'Metcalf'), +(398, 'Jorger'), +(123, 'Rosa'), +(198, 'Harrild'), +(381, 'Varty'), +(974, ''); + +INSERT INTO couleurs VALUES +(236, 'Orange'), +(914, 'Orange'), +(244, 'Goldenrod'), +(86, 'Crimson'), +(535, 'Yellow'), +(429, 'Crimson'), +(326, 'Violet'), +(276, 'Khaki'), +(268, 'Turquoise'), +(505, 'Puce'), +(55, 'Green'), +(272, 'Green'), +(76, 'Orange'), +(663, 'Red'), +(460, 'Crimson'), +(686, 'Blue'), +(765, 'Goldenrod'), +(296, 'Mauv'), +(426, 'Yellow'), +(899, 'Puce'), +(237, 'Yellow'); + +INSERT INTO marques VALUES +(869, 'Auer Group'), +(255, 'Kiehn-Hirthe'), +(367, 'Prosacco LLC'), +(955, 'Walsh-Blick'), +(765, ''), +(267, ''), +(953, 'Price-Bins'), +(577, ''), +(17, 'Schumm LLC'), +(623, 'Koss-Flatley'); + +INSERT INTO tags VALUES +(14, ''), +(667, 'et'), +(132, 'nam'), +(146, 'nibh'), +(472, 'praesent'), +(608, 'vulputate'), +(21, 'elementum'), +(537, 'non'), +(158, 'amet'), +(251, 'consectetuer'), +(485, 'pede'), +(151, 'hac'), +(320, 'mauris'), +(568, 'sit'), +(270, 'nisl'), +(546, 'sapien'), +(840, 'at'), +(872, 'lacus'), +(876, 'consequat'), +(964, 'massa'), +(349, 'mauris'), +(23, 'morbi'), +(629, 'pellentesque'), +(99, ''), +(357, 'porta'), +(910, 'vulputate'), +(743, ''), +(564, 'massa'), +(92, 'neque'), +(769, 'id'), +(920, 'cursus'), +(543, 'mauris'), +(263, 'sagittis'), +(24, 'mauris'), +(149, ''), +(504, 'sapien'), +(721, 'consequat'), +(148, 'luctus'), +(753, 'nunc'), +(266, 'odio'), +(107, 'sed'), +(781, 'nisi'), +(672, 'posuere'), +(465, 'lobortis'), +(136, 'felis'), +(252, 'in'), +(736, 'fusce'), +(904, 'tempus'), +(894, 'ante'), +(350, 'accumsan'), +(740, 'ac'), +(165, 'orci'), +(849, 'morbi'), +(926, 'commodo'), +(410, 'nibh'), +(258, 'ante'), +(194, 'pretium'), +(178, 'ante'), +(699, ''), +(184, 'ultrices'), +(690, 'mauris'), +(449, 'risus'), +(668, 'maecenas'), +(656, 'consequat'), +(683, 'sapien'), +(976, 'id'), +(487, 'quisque'), +(43, 'duis'), +(96, 'nisi'); + +INSERT INTO formes VALUES +(473, 'curabitur'), +(813, 'in'), +(476, 'massa'), +(596, 'leo'), +(905, 'convallis'), +(165, 'fusce'), +(551, 'convallis'), +(719, 'etiam'), +(768, 'leo'), +(791, 'erat'), +(81, ''), +(630, 'potenti'), +(593, 'tellus'), +(327, ''), +(82, ''), +(392, 'vulputate'), +(800, 'nulla'), +(509, 'sem'), +(751, 'dui'), +(347, ''), +(437, 'lacinia'), +(522, ''), +(668, 'condimentum'), +(831, 'a'), +(647, 'dolor'), +(577, 'in'), +(458, 'duis'), +(896, 'a'), +(951, 'turpis'), +(614, 'imperdiet'), +(108, 'facilisi'), +(93, 'in'), +(907, 'ultrices'), +(595, 'eget'), +(41, 'congue'), +(46, 'faucibus'), +(333, 'pede'), +(947, 'consequat'), +(435, 'at'), +(212, 'viverra'), +(723, 'mattis'), +(717, 'eget'), +(886, 'vestibulum'), +(474, 'posuere'), +(426, 'mollis'), +(675, 'molestie'), +(440, 'nec'), +(712, 'in'), +(935, 'mollis'), +(332, 'dictumst'), +(818, 'in'), +(938, 'quis'), +(734, 'eu'), +(547, 'sed'), +(227, ''), +(927, 'volutpat'), +(899, 'convallis'), +(545, 'morbi'), +(570, 'adipiscing'), +(105, 'orci'), +(215, 'sapien'), +(291, 'sapien'), +(67, 'et'), +(807, 'posuere'), +(450, 'molestie'), +(447, 'in'), +(706, 'nam'), +(348, 'cubilia'), +(219, 'vestibulum'); + +INSERT INTO motifs VALUES +(508, 'porttitor'), +(578, 'tortor'), +(459, 'mauris'), +(643, 'vel'), +(710, 'vitae'), +(202, 'orci'), +(758, 'rutrum'), +(50, 'vitae'), +(122, 'sed'), +(861, 'ultrices'), +(29, 'nam'), +(295, 'nibh'), +(47, 'aliquam'), +(602, 'tortor'), +(71, 'eros'), +(665, 'turpis'), +(696, 'ante'), +(212, 'vestibulum'), +(565, 'magnis'), +(618, 'hac'), +(369, 'primis'), +(170, 'vehicula'), +(68, 'aliquet'), +(228, 'etiam'), +(436, 'in'), +(318, 'volutpat'), +(63, 'in'), +(297, 'eget'), +(345, 'sapien'), +(605, 'aliquam'), +(765, 'natoque'), +(4, 'porta'), +(157, 'purus'), +(445, 'eu'), +(673, 'ac'), +(106, 'fermentum'), +(791, 'sed'), +(474, ''), +(788, 'orci'), +(226, 'eget'), +(879, 'eget'), +(468, 'nulla'), +(78, 'maecenas'), +(411, 'rutrum'), +(187, 'pellentesque'), +(446, 'morbi'), +(412, 'odio'), +(635, 'dapibus'), +(622, 'at'), +(482, 'eleifend'), +(196, 'nibh'), +(803, 'at'), +(859, 'dolor'), +(883, 'enim'), +(522, 'mollis'), +(905, 'fusce'), +(127, 'turpis'), +(498, 'tellus'), +(417, 'praesent'), +(996, 'nulla'), +(873, 'vel'), +(779, 'in'), +(551, 'nisl'), +(137, 'arcu'), +(246, 'in'), +(478, 'pulvinar'), +(214, 'ultrices'), +(962, 'fusce'), +(64, 'lobortis'), +(658, 'morbi'), +(613, 'ut'), +(420, 'lacus'), +(281, 'lacus'), +(857, 'tellus'), +(939, 'suspendisse'), +(230, 'blandit'), +(203, 'tempus'), +(193, 'praesent'), +(425, 'in'), +(96, 'fermentum'), +(906, 'volutpat'), +(128, 'amet'), +(14, 'curae'), +(984, 'nullam'), +(448, 'at'), +(699, 'nullam'), +(306, 'consequat'), +(440, 'eget'), +(60, 'vel'), +(218, 'leo'), +(49, 'habitasse'), +(388, 'proin'), +(514, 'aliquam'), +(715, 'ultrices'), +(590, 'id'), +(319, 'sed'), +(89, ''), +(829, 'fusce'), +(134, 'nec'), +(742, 'diam'); + +INSERT INTO pieces VALUES +(398), +(104), +(540), +(102), +(641), +(57), +(290), +(830), +(859), +(746), +(747), +(622), +(851), +(922), +(248), +(449), +(488), +(530), +(380), +(28), +(981), +(1000), +(997), +(809), +(213), +(133), +(447), +(311), +(120), +(258), +(936), +(833), +(77), +(967), +(442), +(161), +(219), +(971), +(720), +(503), +(933), +(825), +(386), +(688), +(877), +(70), +(880), +(938), +(865), +(566), +(564), +(426), +(624), +(27), +(228), +(46), +(686), +(792), +(594), +(477), +(730), +(876), +(583), +(153), +(789), +(307), +(273), +(841), +(870), +(633), +(314), +(326), +(320), +(339), +(630), +(931), +(221), +(289), +(50), +(544), +(387), +(14), +(218), +(980), +(79), +(637), +(808), +(656), +(903), +(410), +(363), +(455), +(569), +(301), +(995), +(911), +(820), +(9), +(86), +(660), +(495), +(923), +(762), +(779), +(40), +(883), +(117), +(43), +(254), +(251), +(838), +(761), +(188), +(672), +(873), +(158), +(393), +(462), +(651), +(722), +(956), +(56), +(510), +(541), +(676), +(45), +(795), +(131), +(225), +(574), +(42), +(437), +(770), +(325), +(456), +(775), +(946), +(317), +(126), +(340), +(114), +(227), +(904), +(829), +(99), +(67), +(335), +(358), +(82), +(788), +(565), +(758), +(728), +(987), +(860), +(528), +(831), +(319), +(506), +(602), +(826), +(650), +(975), +(235), +(823), +(793), +(149), +(516), +(220), +(486), +(524), +(468), +(186), +(794), +(81), +(421), +(983), +(643), +(557), +(479), +(525), +(899), +(197), +(429), +(855), +(266), +(298), +(783), +(55), +(847), +(712), +(815), +(678), +(807), +(464), +(128), +(89), +(54), +(721), +(666), +(674), +(461), +(925), +(98), +(576), +(316), +(816), +(595), +(23), +(407), +(798), +(309), +(240), +(662), +(906), +(415), +(280), +(87), +(791), +(774), +(482), +(563), +(613), +(329), +(422), +(824), +(361), +(977), +(605), +(29), +(501), +(349), +(334), +(772), +(446), +(354), +(95), +(766), +(717), +(205), +(509), +(966), +(167), +(874), +(261), +(62), +(515), +(810), +(944), +(952), +(498), +(647), +(441), +(878), +(604), +(943), +(961), +(538), +(312), +(665), +(571), +(822), +(427), +(852), +(680), +(993), +(3), +(702), +(157), +(709), +(527), +(279), +(491), +(403), +(324), +(588), +(929), +(543), +(611), +(692), +(281), +(518), +(196), +(579), +(869), +(844), +(673), +(972), +(719), +(53), +(163), +(1), +(36), +(492), +(773), +(675), +(659), +(846), +(8), +(160), +(328), +(640), +(75), +(974), +(790), +(166), +(119), +(137), +(550), +(140), +(598), +(440), +(333), +(431), +(811), +(369), +(327), +(181), +(934), +(786), +(769), +(947), +(679), +(404), +(252), +(318), +(704), +(868), +(272), +(207), +(274), +(144), +(300), +(263), +(385), +(497), +(912), +(535), +(562), +(735), +(238), +(116), +(996), +(10), +(801), +(796), +(724), +(499), +(914), +(891), +(25), +(976), +(646), +(861), +(80), +(924), +(849), +(645), +(949), +(443), +(121), +(434), +(754), +(138), +(230), +(439), +(508), +(209), +(94), +(388), +(466), +(250), +(848), +(710), +(511), +(890), +(553), +(71), +(474), +(999), +(703), +(58), +(350), +(840), +(232), +(343), +(122), +(357), +(191), +(714), +(212), +(78), +(180), +(866), +(548), +(336), +(969), +(73), +(362), +(593), +(88), +(458), +(255), +(738), +(465), +(470), +(963), +(168), +(142), +(607), +(342), +(920), +(945), +(118), +(236), +(400), +(940), +(950), +(299), +(185), +(401), +(101), +(800), +(223), +(129), +(536), +(368), +(292), +(988), +(664), +(444), +(162), +(143), +(360), +(414), +(968), +(61), +(392), +(610), +(760), +(776), +(797), +(430), +(38), +(939), +(96), +(276), +(716), +(742), +(44), +(247), +(33), +(31), +(764), +(618), +(69), +(699), +(732), +(194), +(367), +(416), +(438), +(894), +(517), +(418), +(183), +(308), +(306), +(875), +(187), +(978), +(751), +(806), +(500), +(701), +(636), +(460), +(283), +(150), +(156), +(376), +(264), +(942), +(842), +(591), +(2), +(837), +(17), +(148), +(629), +(24), +(994), +(502), +(123), +(572), +(476), +(970), +(154), +(485), +(520), +(269), +(568), +(155), +(750), +(90), +(152), +(262), +(97), +(628), +(532), +(834), +(818), +(384), +(100), +(85), +(905), +(533), +(110), +(231), +(170), +(959), +(285), +(63), +(542), +(472), +(370), +(106), +(739), +(424), +(749), +(139), +(879), +(177), +(13), +(740), +(445), +(112), +(582), +(753), +(559), +(359), +(537), +(259), +(125), +(489), +(365), +(190), +(4), +(612), +(226), +(885), +(432), +(315), +(587), +(172), +(780), +(243), +(857), +(130), +(985), +(146), +(37), +(872), +(813), +(275), +(425), +(288), +(853), +(778), +(670), +(514), +(741), +(545), +(103), +(937), +(478), +(379), +(671), +(757), +(397), +(399), +(297), +(989), +(930), +(549), +(321), +(882), +(234), +(681), +(267), +(919), +(127), +(771), +(814), +(176), +(668), +(700), +(799), +(233), +(926), +(208), +(134), +(921), +(413), +(690), +(423), +(805), +(286), +(603), +(284), +(165), +(888), +(84), +(585), +(669), +(216), +(546), +(552), +(763), +(193), +(619), +(304), +(463), +(420), +(159), +(192), +(200), +(395), +(561), +(759), +(706), +(863), +(22), +(141), +(206), +(450), +(92), +(845), +(570), +(768), +(567), +(682), +(21), +(529), +(909), +(932), +(49), +(973), +(960), +(412), +(521), +(214), +(998), +(341), +(383), +(265), +(419), +(626), +(294), +(338), +(785), +(534), +(51), +(115), +(884), +(606), +(271), +(473), +(752), +(375), +(729), +(113), +(83), +(151), +(355), +(164), +(452), +(346), +(480), +(147), +(705), +(378), +(402), +(835), +(201), +(635), +(303), +(555), +(484), +(20), +(436), +(457), +(389), +(302), +(817), +(828), +(915), +(132), +(268), +(581), +(512), +(178), +(203), +(246), +(310), +(72), +(74), +(32), +(596), +(539), +(580), +(677), +(655), +(523), +(707), +(907), +(614), +(964), +(986), +(661), +(48), +(777), +(277), +(390), +(145), +(902), +(18), +(597), +(260), +(711), +(64), +(941), +(765), +(654), +(627), +(979), +(19), +(578), +(745), +(417), +(202), +(958), +(513), +(713), +(685), +(330), +(962), +(586), +(210), +(850); + +INSERT INTO pieces_complexes VALUES +(860), +(768), +(195), +(767), +(786), +(778), +(568), +(707), +(913), +(650), +(213), +(785), +(845), +(246), +(699), +(629), +(42), +(565), +(4), +(793), +(948), +(116), +(45), +(64), +(231), +(418), +(584), +(444), +(456), +(690), +(799), +(278), +(144), +(863), +(839), +(980), +(282), +(764), +(131), +(186), +(672), +(345), +(771), +(914), +(81), +(731), +(750), +(193), +(487), +(656), +(262), +(302), +(984), +(314), +(941), +(661), +(56), +(156), +(709), +(892), +(326), +(961), +(590), +(890), +(618), +(867), +(543), +(121), +(886), +(703), +(674), +(824), +(712), +(243), +(796), +(678), +(673), +(241), +(501), +(846), +(954), +(873), +(921), +(615), +(772), +(636), +(122), +(889), +(37), +(555), +(777), +(853), +(510), +(464), +(588), +(602), +(350), +(296), +(448), +(428), +(52), +(17), +(205), +(93), +(43), +(343), +(485), +(552), +(654), +(426), +(955), +(594), +(802), +(196), +(779), +(758), +(770), +(154), +(339), +(611), +(711), +(560), +(387), +(498), +(517), +(907), +(127), +(931), +(260), +(532), +(622), +(463), +(346), +(561), +(297), +(562), +(319), +(436), +(226), +(816), +(75), +(747), +(239), +(388), +(624), +(825), +(548), +(283), +(65), +(237), +(663), +(455), +(936), +(947), +(667), +(878), +(598), +(732), +(385), +(841), +(546), +(403), +(838), +(442), +(162), +(270), +(550), +(159), +(78), +(883), +(530), +(570), +(803), +(733), +(31), +(830), +(538), +(899), +(417), +(120), +(452), +(114), +(782), +(409), +(406), +(875), +(258), +(12), +(518), +(384), +(8), +(466), +(911), +(998), +(963), +(179), +(850), +(86), +(479), +(305), +(87), +(83), +(90), +(104), +(398), +(177), +(759), +(261), +(250), +(329), +(704), +(432), +(443), +(833), +(352), +(92), +(181), +(285), +(918), +(57), +(402), +(579), +(952), +(692), +(483), +(167), +(638), +(338), +(662), +(232), +(379), +(172), +(637), +(887), +(353), +(564), +(411), +(85), +(939), +(513), +(533), +(905), +(198), +(776), +(61), +(847), +(415), +(910), +(303), +(787); + +INSERT INTO modeles VALUES +(261, 'Basic Building Set', 'http://admin.ch/primis/in/faucibus.jpg?mauris=in&sit=hac&am', 274, 261), +(544, 'Amusement Park', 'http://google.fr/vel.aspx?eget=quis&rutrum=lectus&at=suspen', 928, 261), +(430, 'Forest: Park', 'https://naver.com/imperdiet/nullam/orci/pede.html?massa=ame', 525, 544), +(615, 'Imperial AT-ST', 'http://buzzfeed.com/enim/in/tempor.js?ipsum=dapibus&dolor=d', 688, 544), +(412, 'Truck', 'http://craigslist.org/hac/habitasse/platea/dictumst.jsp?mas', 557, 615), +(415, 'Spider-Man: Spider-Car Pursuit', 'http://odnoklassniki.ru/nulla/nisl/nunc/nisl/duis.json?quis', 206, 261), +(368, 'Forest: Fishing Trip', 'https://youtu.be/turpis/integer/aliquet/massa.json?aliquam=', 729, 412), +(863, 'Fire Emergency', 'https://t.co/penatibus/et.json?justo=magnis&sit=dis&amet=pa', 140, 615), +(886, 'Assembly Square', 'http://artisteer.com/a/nibh/in/quis.json?morbi=accumsan&qui', 193, 415), +(654, 'Universal Joints', 'http://merriam-webster.com/eget/semper/rutrum/nulla/nunc.jp', 442, 615); + +INSERT INTO boites VALUES +(1000, 'justo', '02-13-2000', 17), +(427, 'vulputate', '12-03-1976', 17), +(953, 'porta', '02-27-2011', 255), +(171, 'id', '03-25-1988', 367), +(950, 'vel', '08-01-1975', 765), +(196, 'morbi', '10-26-1995', 765), +(840, 'purus', '11-26-2009', 255), +(664, 'sagittis', '03-17-2014', 955), +(37, 'nisl', '06-12-2014', 367), +(139, '', '08-27-1983', 367), +(521, 'lacinia', '10-05-1987', 623), +(146, 'mi', '12-25-1982', 255), +(995, 'natoque', '12-29-1991', 17), +(594, 'sodales', '01-14-2005', 765), +(151, 'curae', '03-19-2018', 765), +(299, 'curabitur', '03-25-1988', 623), +(357, 'leo', '11-20-1989', 623), +(314, 'tempus', '11-24-2008', 765), +(311, 'at', '03-21-1987', 623), +(206, 'pede', '02-14-2007', 955); + +INSERT INTO fils VALUES +(844, 261), +(92, 430), +(237, 544), +(598, 544), +(311, 654), +(137, 615), +(418, 886), +(961, 654), +(81, 863), +(63, 415), +(45, 261), +(482, 615), +(183, 615), +(532, 368), +(18, 412), +(399, 863), +(788, 615), +(190, 368), +(956, 368), +(688, 261), +(3, 544), +(153, 261), +(419, 415), +(985, 261), +(603, 654), +(365, 261), +(809, 615), +(292, 412), +(403, 430), +(174, 863), +(203, 886), +(575, 412), +(934, 886), +(436, 615), +(634, 654), +(223, 886), +(656, 886), +(226, 544), +(281, 412), +(771, 615), +(192, 615), +(805, 368), +(753, 615), +(636, 430), +(90, 412), +(283, 415), +(175, 261), +(385, 863), +(327, 654), +(288, 412), +(445, 412), +(225, 415), +(96, 412), +(989, 261), +(749, 261), +(658, 654), +(158, 430), +(528, 615), +(379, 863), +(839, 261), +(511, 368), +(880, 430), +(241, 412), +(559, 415), +(284, 415), +(597, 654), +(250, 368), +(833, 615), +(775, 430), +(637, 412), +(24, 415), +(338, 863), +(943, 415), +(685, 261), +(257, 412), +(299, 544), +(150, 415), +(258, 615), +(774, 615), +(231, 886), +(815, 430), +(214, 368), +(102, 368), +(944, 544), +(542, 654), +(983, 412), +(340, 544), +(195, 615), +(936, 412), +(402, 368), +(922, 430), +(930, 261), +(664, 261), +(168, 412), +(367, 415), +(359, 415), +(802, 886), +(201, 415), +(21, 412), +(362, 544); + +INSERT INTO messages VALUES +(199, 'Nulla mollis molestie lorem. Quisque ut erat. Curabit', 239, 771, 199), +(436, 'In hac habitasse platea dictumst. Maecenas ut massa q', 81, 634, 199), +(670, 'Duis bibendum. Morbi non quam nec dui luctus rutrum. ', 976, 956, 436), +(727, 'Quisque erat eros', 741, 195, 199), +(150, 'Vivamus vel nulla eget eros elementum pellentesque. Q', 791, 575, 670), +(637, 'Suspendisse accumsan tortor quis turpis. Sed ante. Vi', 741, 983, 150), +(32, 'Vestibulum ac est lacinia nisi venenatis tristique. F', 741, 223, 436), +(90, 'Praesent blandit. Nam nulla. Integer pede justo', 641, 598, 150), +(895, 'Nunc nisl. Duis bibendum', 986, 175, 199), +(285, 'Pellentesque viverra pede ac diam. Cras pellentesque ', 974, 833, 32), +(854, 'In tempor', 140, 203, 637), +(738, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 712, 379, 895), +(143, 'Proin eu mi. Nulla ac enim. In tempor', 401, 956, 637), +(330, 'Morbi a ipsum. Integer a nibh. In quis justo. Maecena', 438, 844, 895), +(585, 'Lorem ipsum dolor sit amet', 201, 365, 330), +(236, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 325, 81, 330), +(725, '', 398, 327, 727), +(357, 'Nulla ut erat id mauris vulputate elementum. Nullam v', 688, 201, 330), +(59, 'Duis ac nibh. Fusce lacus purus', 181, 956, 727), +(94, 'Suspendisse potenti. In eleifend quam a odio. In hac ', 123, 174, 59), +(589, 'In est risus', 615, 664, 637), +(152, 'In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p', 713, 96, 589), +(412, 'Mauris enim leo', 685, 367, 637), +(898, 'Vestibulum quam sapien', 14, 288, 285), +(942, 'Maecenas tristique', 251, 150, 670), +(970, 'Quisque erat eros', 695, 81, 589), +(777, 'Nunc purus. Phasellus in felis. Donec semper sapien a', 468, 192, 412), +(685, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 983, 257, 942), +(580, 'Maecenas pulvinar lobortis est. Phasellus sit amet er', 980, 359, 357), +(238, 'Aliquam quis turpis eget elit sodales scelerisque. Ma', 481, 403, 580), +(110, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 688, 637, 152), +(82, 'Aliquam quis turpis eget elit sodales scelerisque. Ma', 140, 359, 285), +(20, 'Integer pede justo', 729, 598, 637), +(459, 'Nullam orci pede', 910, 195, 285), +(37, 'Vivamus vel nulla eget eros elementum pellentesque. Q', 812, 385, 236), +(690, 'Quisque porta volutpat erat. Quisque erat eros', 381, 597, 285), +(483, 'In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p', 641, 922, 777), +(62, 'Aenean lectus. Pellentesque eget nunc. Donec quis orc', 468, 283, 199), +(400, 'Donec posuere metus vitae ipsum. Aliquam non mauris. ', 404, 81, 357), +(941, 'Aenean sit amet justo. Morbi ut odio. Cras mi pede', 193, 922, 898), +(746, 'Donec semper sapien a libero. Nam dui. Proin leo odio', 910, 21, 589), +(962, 'Donec diam neque', 346, 158, 357), +(814, 'Nulla mollis molestie lorem. Quisque ut erat. Curabit', 386, 956, 90), +(73, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 550, 225, 459), +(18, 'Mauris sit amet eros. Suspendisse accumsan tortor qui', 239, 362, 32), +(799, 'liquam erat volutpat. In congue. Etiam justo. Etiam p', 239, 340, 143), +(769, '', 137, 634, 670), +(440, 'Proin at turpis a pede posuere nonummy. Integer non v', 77, 21, 895), +(65, '', 609, 3, 285), +(789, 'Vestibulum sed magna at nunc commodo placerat. Praese', 934, 597, 199), +(649, 'Maecenas ut massa quis augue luctus tincidunt. Nulla ', 687, 284, 727), +(793, 'Duis at velit eu est congue elementum. In hac habitas', 577, 174, 854), +(865, 'Duis aliquam convallis nunc. Proin at turpis a pede p', 980, 685, 32), +(138, 'In hac habitasse platea dictumst. Morbi vestibulum', 545, 338, 238), +(53, '', 230, 603, 725), +(547, 'Vivamus in felis eu sapien cursus vestibulum. Proin e', 77, 637, 459), +(904, 'Integer ac neque. Duis bibendum. Morbi non quam nec d', 715, 445, 143), +(512, 'Vivamus in felis eu sapien cursus vestibulum. Proin e', 974, 359, 65), +(27, 'Aenean auctor gravida sem. Praesent id massa id nisl ', 149, 597, 941), +(947, 'Lorem ipsum dolor sit amet', 283, 658, 18), +(612, 'Vivamus metus arcu', 18, 362, 738), +(83, 'In hac habitasse platea dictumst. Aliquam augue quam', 81, 379, 330), +(861, 'Duis bibendum. Morbi non quam nec dui luctus rutrum. ', 383, 201, 440), +(960, 'Pellentesque viverra pede ac diam. Cras pellentesque ', 365, 774, 357), +(750, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 52, 802, 589), +(650, 'Suspendisse ornare consequat lectus. In est risus', 712, 299, 725), +(314, 'Donec dapibus. Duis at velit eu est congue elementum.', 325, 311, 412), +(874, 'Aliquam quis turpis eget elit sodales scelerisque. Ma', 451, 749, 585), +(487, 'Praesent blandit lacinia erat. Vestibulum sed magna a', 244, 225, 138), +(251, 'Nullam sit amet turpis elementum ligula vehicula cons', 638, 989, 874), +(617, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 140, 137, 777), +(179, 'Morbi odio odio', 1, 436, 589), +(252, 'In hac habitasse platea dictumst. Maecenas ut massa q', 913, 203, 874), +(813, 'Sed sagittis. Nam congue', 934, 880, 947), +(214, 'Maecenas ut massa quis augue luctus tincidunt. Nulla ', 893, 299, 110), +(658, 'Donec diam neque', 451, 559, 179), +(259, 'Fusce consequat. Nulla nisl. Nunc nisl. Duis bibendum', 259, 201, 65), +(386, 'In blandit ultrices enim. Lorem ipsum dolor sit amet', 1, 634, 330), +(759, 'Vestibulum rutrum rutrum neque. Aenean auctor gravida', 201, 299, 82), +(316, 'Proin at turpis a pede posuere nonummy. Integer non v', 26, 311, 813), +(458, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 237, 815, 727), +(601, 'Vestibulum quam sapien', 201, 403, 970), +(822, '', 9, 880, 386), +(702, 'Integer a nibh. In quis justo. Maecenas rhoncus aliqu', 976, 24, 547), +(369, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 198, 292, 82), +(534, 'Aenean lectus. Pellentesque eget nunc. Donec quis orc', 451, 299, 94), +(71, 'In hac habitasse platea dictumst. Maecenas ut massa q', 580, 944, 960), +(149, 'Praesent lectus. Vestibulum quam sapien', 299, 385, 861), +(632, 'Suspendisse potenti. Nullam porttitor lacus at turpis', 381, 511, 738), +(476, 'Pellentesque at nulla. Suspendisse potenti. Cras in p', 550, 575, 90), +(127, 'Integer pede justo', 386, 922, 685), +(996, 'Mauris lacinia sapien quis libero. Nullam sit amet tu', 56, 299, 412), +(831, 'Donec quis orci eget orci vehicula condimentum. Curab', 720, 292, 150), +(853, 'Vivamus in felis eu sapien cursus vestibulum. Proin e', 404, 815, 149), +(864, 'Vestibulum quam sapien', 715, 284, 746), +(26, 'Nulla tellus. In sagittis dui vel nisl. Duis ac nibh.', 384, 936, 483), +(307, 'Quisque id justo sit amet sapien dignissim vestibulum', 715, 190, 236), +(118, 'Sed ante. Vivamus tortor. Duis mattis egestas metus. ', 863, 327, 214), +(135, 'Duis at velit eu est congue elementum. In hac habitas', 365, 18, 831), +(925, 'Nunc nisl. Duis bibendum', 647, 985, 90), +(411, 'Proin eu mi. Nulla ac enim. In tempor', 615, 338, 82), +(273, 'Morbi odio odio', 468, 237, 725), +(434, 'Donec odio justo', 274, 281, 895), +(638, 'Integer ac neque. Duis bibendum. Morbi non quam nec d', 823, 598, 632), +(795, 'Duis at velit eu est congue elementum. In hac habitas', 56, 203, 725), +(862, 'In tempor', 198, 45, 400), +(284, 'Donec diam neque', 713, 399, 970), +(914, 'Nullam orci pede', 980, 559, 252), +(91, 'Nunc rhoncus dui vel sem. Sed sagittis. Nam congue', 123, 96, 18), +(642, 'Maecenas tincidunt lacus at velit. Vivamus vel nulla ', 134, 944, 637), +(518, 'Duis bibendum. Morbi non quam nec dui luctus rutrum. ', 695, 528, 369), +(44, 'Sed ante. Vivamus tortor. Duis mattis egestas metus. ', 381, 359, 369), +(162, '', 239, 175, 273), +(984, 'Nulla ut erat id mauris vulputate elementum. Nullam v', 383, 284, 94), +(317, 'Proin at turpis a pede posuere nonummy. Integer non v', 579, 983, 612), +(998, 'Nam congue', 812, 418, 580), +(198, 'Curabitur in libero ut massa volutpat convallis. Morb', 863, 223, 284), +(921, 'Maecenas leo odio', 545, 559, 512), +(14, '', 986, 174, 198), +(620, 'Nunc purus. Phasellus in felis. Donec semper sapien a', 647, 283, 831), +(705, 'Nullam molestie nibh in lectus. Pellentesque at nulla', 56, 922, 94), +(218, 'Pellentesque eget nunc. Donec quis orci eget orci veh', 381, 532, 898), +(816, '', 140, 749, 476), +(653, 'Etiam vel augue. Vestibulum rutrum rutrum neque. Aene', 244, 575, 904), +(104, 'Morbi odio odio', 712, 190, 750), +(451, 'Proin at turpis a pede posuere nonummy. Integer non v', 550, 225, 925), +(667, 'Maecenas pulvinar lobortis est. Phasellus sit amet er', 14, 559, 921), +(241, 'Donec dapibus. Duis at velit eu est congue elementum.', 812, 532, 62), +(662, 'Vestibulum sed magna at nunc commodo placerat. Praese', 981, 944, 110), +(270, 'Donec diam neque', 686, 241, 702), +(286, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 259, 175, 138), +(12, 'Nulla ac enim. In tempor', 983, 81, 518), +(137, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 976, 399, 690), +(891, 'In blandit ultrices enim. Lorem ipsum dolor sit amet', 695, 542, 904), +(897, 'Maecenas rhoncus aliquam lacus. Morbi quis tortor id ', 685, 257, 236), +(579, 'Quisque ut erat. Curabitur gravida nisi at nibh. In h', 976, 168, 236), +(112, 'Maecenas tristique', 976, 223, 162), +(829, 'Praesent lectus. Vestibulum quam sapien', 478, 257, 662), +(833, 'In tempor', 647, 634, 637), +(968, 'Quisque id justo sit amet sapien dignissim vestibulum', 823, 445, 314), +(937, 'Quisque id justo sit amet sapien dignissim vestibulum', 346, 775, 436), +(521, '', 439, 367, 702), +(407, 'Phasellus id sapien in sapien iaculis congue. Vivamus', 134, 258, 317), +(475, 'In tempor', 1, 961, 793), +(775, 'Integer pede justo', 550, 288, 897), +(397, 'Etiam faucibus cursus urna. Ut tellus. Nulla ut erat ', 14, 195, 667), +(340, 'Nulla ac enim. In tempor', 637, 419, 862), +(624, 'Lorem ipsum dolor sit amet', 980, 340, 865), +(773, 'Suspendisse potenti. Cras in purus eu magna vulputate', 259, 281, 397), +(693, 'Quisque id justo sit amet sapien dignissim vestibulum', 653, 956, 638), +(924, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 713, 379, 112), +(880, 'Integer ac neque. Duis bibendum. Morbi non quam nec d', 386, 257, 411), +(126, 'Nullam varius. Nulla facilisi. Cras non velit nec nis', 384, 809, 65), +(11, 'Aenean lectus. Pellentesque eget nunc. Donec quis orc', 26, 880, 865), +(486, 'Vestibulum rutrum rutrum neque. Aenean auctor gravida', 695, 528, 252), +(640, 'Mauris enim leo', 1, 24, 476), +(233, 'Morbi quis tortor id nulla ultrices aliquet. Maecenas', 259, 362, 412), +(283, 'Donec quis orci eget orci vehicula condimentum. Curab', 451, 511, 314), +(586, 'Maecenas tincidunt lacus at velit. Vivamus vel nulla ', 976, 96, 476), +(299, 'Proin interdum mauris non ligula pellentesque ultrice', 398, 511, 340), +(599, 'Nulla tellus. In sagittis dui vel nisl. Duis ac nibh.', 647, 528, 138), +(768, 'Nulla tellus. In sagittis dui vel nisl. Duis ac nibh.', 283, 482, 162), +(715, 'Suspendisse potenti. Cras in purus eu magna vulputate', 168, 637, 251), +(797, 'Integer ac neque. Duis bibendum. Morbi non quam nec d', 641, 656, 534), +(689, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 244, 542, 831), +(852, 'Maecenas leo odio', 193, 961, 612), +(22, 'Morbi vel lectus in quam fringilla rhoncus. Mauris en', 365, 542, 143), +(129, 'Donec dapibus. Duis at velit eu est congue elementum.', 695, 983, 233), +(772, 'Donec odio justo', 398, 338, 715), +(951, 'tiam pretium iaculis justo. In hac habitasse platea d', 383, 844, 486), +(766, 'Nulla tellus. In sagittis dui vel nisl. Duis ac nibh.', 545, 21, 620), +(449, 'Nunc rhoncus dui vel sem. Sed sagittis. Nam congue', 974, 63, 766), +(278, 'Morbi ut odio. Cras mi pede', 382, 231, 214), +(345, 'Suspendisse potenti. Cras in purus eu magna vulputate', 863, 174, 968), +(973, 'Integer a nibh. In quis justo. Maecenas rhoncus aliqu', 283, 749, 26), +(646, 'Fusce posuere felis sed lacus. Morbi sem mauris', 770, 21, 73), +(389, 'Nullam orci pede', 137, 775, 670), +(321, 'Duis mattis egestas metus. Aenean fermentum. Donec ut', 653, 367, 129), +(709, 'Nulla ac enim. In tempor', 137, 250, 451), +(873, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 56, 688, 853), +(172, 'Praesent blandit. Nam nulla. Integer pede justo', 983, 542, 670), +(456, 'Donec quis orci eget orci vehicula condimentum. Curab', 123, 511, 436), +(694, 'Duis at velit eu est congue elementum. In hac habitas', 438, 944, 412), +(224, 'n congue. Etiam justo. Etiam pretium iaculis justo. I', 244, 311, 476), +(399, 'Lorem ipsum dolor sit amet', 404, 190, 314), +(188, 'In tempor', 325, 223, 690), +(877, 'Cum sociis natoque penatibus et magnis dis parturient', 336, 150, 12), +(157, 'In hac habitasse platea dictumst. Maecenas ut massa q', 609, 542, 22), +(792, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 1, 603, 814), +(758, 'Etiam justo. Etiam pretium iaculis justo. In hac habi', 863, 90, 340), +(414, 'Quisque erat eros', 545, 102, 104), +(735, 'Maecenas rhoncus aliquam lacus. Morbi quis tortor id ', 986, 936, 137), +(957, 'Nulla nisl. Nunc nisl. Duis bibendum', 383, 168, 689), +(794, 'In sagittis dui vel nisl. Duis ac nibh. Fusce lacus p', 615, 365, 646), +(779, 'Ut tellus. Nulla ut erat id mauris vulputate elementu', 638, 359, 198), +(313, 'Curabitur in libero ut massa volutpat convallis. Morb', 26, 201, 814), +(564, 'In tempor', 181, 45, 149), +(183, 'Morbi ut odio. Cras mi pede', 18, 158, 149), +(602, 'Vivamus tortor. Duis mattis egestas metus. Aenean fer', 1, 90, 769), +(892, 'In hac habitasse platea dictumst. Aliquam augue quam', 577, 284, 586), +(827, 'n congue. Etiam justo. Etiam pretium iaculis justo. I', 398, 379, 833), +(645, 'Fusce posuere felis sed lacus. Morbi sem mauris', 149, 532, 637), +(961, 'Nunc purus. Phasellus in felis. Donec semper sapien a', 695, 532, 689), +(728, 'Donec diam neque', 615, 956, 861), +(798, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 230, 250, 746), +(265, 'Integer ac leo. Pellentesque ultrices mattis odio. Do', 976, 379, 579), +(156, 'Nam congue', 12, 379, 895), +(751, 'Morbi sem mauris', 438, 575, 110), +(260, 'Aliquam augue quam', 12, 985, 369), +(541, 'Duis at velit eu est congue elementum. In hac habitas', 647, 809, 951), +(928, 'Morbi vestibulum', 647, 956, 799), +(381, 'Nulla tellus. In sagittis dui vel nisl. Duis ac nibh.', 913, 183, 330), +(946, 'Vivamus vestibulum sagittis sapien. Cum sociis natoqu', 713, 192, 579), +(394, 'Cras pellentesque volutpat dui. Maecenas tristique', 741, 63, 750), +(734, 'Nullam orci pede', 193, 774, 83), +(45, 'Aliquam quis turpis eget elit sodales scelerisque. Ma', 284, 137, 632), +(997, 'Suspendisse ornare consequat lectus. In est risus', 442, 258, 646), +(310, 'Proin leo odio', 134, 288, 725), +(525, 'Etiam faucibus cursus urna. Ut tellus. Nulla ut erat ', 1000, 688, 285), +(100, 'Nulla mollis molestie lorem. Quisque ut erat. Curabit', 382, 379, 831), +(479, 'Maecenas pulvinar lobortis est. Phasellus sit amet er', 181, 636, 313), +(804, 'Praesent blandit. Nam nulla. Integer pede justo', 386, 482, 709), +(230, 'Cras pellentesque volutpat dui. Maecenas tristique', 615, 365, 456), +(114, 'Praesent blandit lacinia erat. Vestibulum sed magna a', 460, 445, 386), +(899, 'Suspendisse accumsan tortor quis turpis. Sed ante. Vi', 712, 634, 746), +(987, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 934, 168, 947), +(208, 'Nulla tempus. Vivamus in felis eu sapien cursus vesti', 168, 597, 899), +(332, 'Suspendisse accumsan tortor quis turpis. Sed ante. Vi', 134, 281, 777), +(539, 'In hac habitasse platea dictumst. Maecenas ut massa q', 281, 419, 897), +(57, 'Quisque erat eros', 438, 753, 411), +(116, 'In tempor', 720, 749, 137), +(485, 'Vivamus in felis eu sapien cursus vestibulum. Proin e', 791, 174, 316), +(353, 'In eleifend quam a odio. In hac habitasse platea dict', 281, 241, 862), +(197, 'Proin eu mi. Nulla ac enim. In tempor', 12, 257, 899), +(542, 'Cras pellentesque volutpat dui. Maecenas tristique', 201, 168, 414), +(134, 'Nunc purus. Phasellus in felis. Donec semper sapien a', 77, 598, 214), +(703, 'In tempor', 550, 805, 241), +(119, 'Nunc purus. Phasellus in felis. Donec semper sapien a', 791, 532, 853), +(893, 'Donec ut mauris eget massa tempor convallis. Nulla ne', 26, 402, 792), +(23, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 770, 203, 285), +(38, '', 715, 559, 37), +(86, 'Maecenas ut massa quis augue luctus tincidunt. Nulla ', 384, 402, 789), +(142, 'Cras non velit nec nisi vulputate nonummy. Maecenas t', 579, 96, 143), +(54, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 983, 436, 45), +(504, 'Donec diam neque', 18, 985, 580), +(613, 'Morbi non quam nec dui luctus rutrum. Nulla tellus. I', 712, 174, 773), +(990, 'Praesent lectus. Vestibulum quam sapien', 81, 399, 794), +(623, 'In blandit ultrices enim. Lorem ipsum dolor sit amet', 365, 664, 921), +(567, 'Aenean auctor gravida sem. Praesent id massa id nisl ', 983, 174, 316), +(625, 'Duis ac nibh. Fusce lacus purus', 384, 542, 861), +(423, 'Duis at velit eu est congue elementum. In hac habitas', 879, 237, 705), +(375, 'Duis aliquam convallis nunc. Proin at turpis a pede p', 879, 327, 705), +(776, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 381, 225, 658), +(556, 'tiam pretium iaculis justo. In hac habitasse platea d', 123, 839, 814), +(2, 'Suspendisse potenti. Nullam porttitor lacus at turpis', 193, 658, 149), +(133, 'Nullam porttitor lacus at turpis. Donec posuere metus', 325, 45, 310), +(303, 'Nulla justo. Aliquam quis turpis eget elit sodales sc', 442, 385, 734), +(378, '', 823, 603, 208), +(967, 'Nulla ac enim. In tempor', 874, 775, 861), +(545, 'Donec ut mauris eget massa tempor convallis. Nulla ne', 384, 24, 183), +(582, 'Pellentesque at nulla. Suspendisse potenti. Cras in p', 879, 96, 897), +(180, 'Donec diam neque', 638, 403, 892), +(455, 'Maecenas rhoncus aliquam lacus. Morbi quis tortor id ', 729, 809, 693), +(144, 'Donec ut mauris eget massa tempor convallis. Nulla ne', 823, 956, 133), +(682, 'Donec diam neque', 712, 299, 157), +(291, 'Integer ac leo. Pellentesque ultrices mattis odio. Do', 460, 597, 990), +(801, 'Suspendisse potenti. Cras in purus eu magna vulputate', 40, 299, 623), +(954, 'In hac habitasse platea dictumst. Aliquam augue quam', 893, 528, 316), +(594, 'Nulla facilisi. Cras non velit nec nisi vulputate non', 401, 511, 586), +(907, 'Suspendisse potenti. Cras in purus eu magna vulputate', 874, 989, 814), +(719, 'Aenean fermentum. Donec ut mauris eget massa tempor c', 274, 934, 224), +(847, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 398, 203, 646), +(743, 'Vivamus vel nulla eget eros elementum pellentesque. Q', 615, 226, 891), +(673, '', 81, 45, 865), +(117, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 741, 45, 987), +(978, '', 401, 327, 921), +(825, 'Maecenas rhoncus aliquam lacus. Morbi quis tortor id ', 641, 168, 286), +(356, 'Lorem ipsum dolor sit amet', 481, 153, 798), +(714, 'Cras in purus eu magna vulputate luctus. Cum sociis n', 805, 802, 795), +(147, 'Duis bibendum', 206, 18, 978), +(881, 'Nulla facilisi. Cras non velit nec nisi vulputate non', 976, 21, 150), +(253, 'In tempor', 986, 258, 414), +(832, 'Nullam orci pede', 381, 288, 321), +(966, '', 879, 21, 746), +(320, 'Donec posuere metus vitae ipsum. Aliquam non mauris. ', 637, 961, 83), +(655, 'Nullam sit amet turpis elementum ligula vehicula cons', 577, 809, 719), +(315, 'Etiam justo. Etiam pretium iaculis justo. In hac habi', 384, 419, 285), +(427, 'In eleifend quam a odio. In hac habitasse platea dict', 384, 880, 865), +(684, 'Praesent blandit. Nam nulla. Integer pede justo', 259, 379, 135), +(195, 'Cras mi pede', 77, 359, 801), +(783, 'In hac habitasse platea dictumst. Maecenas ut massa q', 928, 150, 594), +(163, 'Maecenas leo odio', 137, 445, 579), +(304, '', 77, 419, 251), +(420, 'Vestibulum ante ipsum primis in faucibus orci luctus ', 201, 922, 954), +(424, 'liquam erat volutpat. In congue. Etiam justo. Etiam p', 874, 936, 942), +(863, 'Aliquam sit amet diam in magna bibendum imperdiet. Nu', 713, 637, 456), +(289, 'Proin interdum mauris non ligula pellentesque ultrice', 230, 284, 966), +(460, 'Mauris enim leo', 615, 175, 54), +(323, 'Proin at turpis a pede posuere nonummy. Integer non v', 52, 511, 997), +(444, 'Morbi odio odio', 874, 656, 512); + +INSERT INTO illustrations VALUES +(430, 'https://soup.io/non/interdum/in/ante.jpg?nibh=nunc&in=donec', 261), +(302, 'http://chicagotribune.com/aliquam/quis/turpis.jsp?maecenas=', 544), +(863, 'https://friendfeed.com/orci/nullam/molestie/nibh.js?sed=sem', 886), +(209, 'http://indiatimes.com/curabitur/gravida/nisi.jsp?tincidunt=', 368), +(327, 'https://furl.net/erat/nulla/tempus/vivamus/in.xml?blandit=p', 544), +(872, 'http://webs.com/ligula.aspx?quis=nisl&turpis=ut&sed=volutpa', 412), +(725, 'https://instagram.com/in.js?eget=volutpat&nunc=eleifend&don', 654), +(307, 'http://psu.edu/ipsum/ac.html?quis=integer&tortor=aliquet&id', 261), +(380, 'http://redcross.org/vel/est/donec/odio.html?tellus=sed&semp', 261), +(428, 'http://cmu.edu/feugiat/non/pretium/quis.html?mi=purus&pede=', 412); + +INSERT INTO acheter VALUES +(26, 546, 58), +(336, 747, 81), +(609, 859, 42), +(463, 361, 79), +(805, 971, 38), +(439, 567, 77), +(460, 814, 47), +(741, 314, 36), +(729, 766, 62), +(615, 587, 87), +(26, 393, 87), +(579, 940, 60), +(198, 43, 92), +(720, 851, 91), +(577, 233, 95), +(687, 176, 69), +(980, 74, 92), +(383, 191, 34), +(928, 161, 41), +(259, 838, 14), +(647, 607, 27), +(381, 790, 13), +(438, 412, 37), +(481, 415, 68), +(381, 36, 47), +(181, 944, 33), +(303, 540, 17), +(741, 264, 41), +(557, 529, 43), +(1000, 262, 62), +(52, 612, 55), +(729, 799, 39), +(637, 668, 24), +(712, 944, 93), +(251, 300, 54), +(687, 240, 90), +(140, 327, 50), +(641, 861, 6), +(274, 367, 91), +(9, 156, 71), +(137, 482, 84), +(741, 515, 27), +(986, 924, 46), +(791, 50, 29), +(685, 909, 19), +(579, 822, 77), +(303, 24, 56), +(609, 668, 5), +(713, 369, 59), +(9, 740, 50), +(259, 122, 8), +(384, 612, 24), +(442, 929, 88), +(303, 247, 7), +(713, 334, 77), +(823, 167, 33), +(685, 841, 53), +(934, 728, 94), +(713, 751, 10), +(12, 95, 71), +(577, 548, 64), +(934, 82, 98), +(438, 894, 7), +(18, 314, 92), +(381, 480, 8), +(478, 38, 56), +(712, 271, 72), +(715, 902, 9), +(439, 999, 27), +(244, 800, 36), +(550, 46, 51), +(980, 308, 3), +(303, 321, 54), +(336, 964, 65), +(525, 151, 54), +(879, 442, 64), +(56, 817, 96), +(928, 513, 71), +(812, 874, 8), +(468, 946, 66), +(1, 307, 75), +(198, 150, 5), +(384, 921, 33), +(983, 131, 51), +(259, 25, 74), +(123, 431, 45), +(123, 92, 1), +(18, 662, 89), +(579, 838, 87), +(545, 920, 78), +(52, 166, 48), +(201, 161, 96), +(77, 112, 30), +(893, 22, 73), +(56, 902, 76), +(382, 964, 48), +(478, 70, 81), +(398, 170, 45), +(879, 464, 33), +(720, 848, 9); + +INSERT INTO avoir_motif VALUES +(872, 196), +(938, 578), +(94, 996), +(206, 551), +(328, 879), +(289, 758), +(13, 673), +(646, 551), +(604, 478), +(119, 193), +(27, 522), +(390, 29), +(197, 873), +(85, 157), +(85, 643), +(447, 791), +(595, 710), +(700, 508), +(427, 459), +(143, 68), +(426, 984), +(27, 448), +(306, 412), +(629, 60), +(672, 226), +(800, 49), +(232, 696), +(679, 212), +(168, 47), +(626, 522), +(330, 295), +(156, 715), +(559, 906), +(863, 939), +(528, 446), +(472, 318), +(585, 411), +(729, 122), +(979, 765), +(446, 196), +(932, 635), +(853, 474), +(141, 218), +(626, 658), +(660, 4), +(546, 425), +(430, 883), +(247, 829), +(866, 508), +(2, 281), +(680, 106), +(964, 996), +(660, 297), +(38, 779), +(761, 635), +(852, 50), +(303, 106), +(776, 445), +(719, 765), +(185, 788), +(8, 605), +(342, 196), +(618, 411), +(580, 319), +(153, 710), +(540, 228), +(50, 106), +(877, 613), +(949, 710), +(447, 425), +(570, 60), +(57, 425), +(509, 803), +(768, 613), +(539, 193), +(791, 412), +(993, 906), +(69, 905), +(383, 47), +(681, 228), +(713, 635), +(972, 318), +(314, 425), +(943, 128), +(444, 134), +(327, 137), +(266, 228), +(139, 60), +(627, 96), +(942, 425), +(1, 187), +(440, 306), +(10, 879), +(563, 551), +(786, 345), +(880, 226), +(751, 665), +(329, 696), +(543, 228), +(208, 498); + +INSERT INTO avoir_tag VALUES +(43, 206), +(24, 594), +(320, 299), +(158, 146), +(926, 427), +(270, 139), +(894, 594), +(537, 151), +(21, 840), +(672, 151), +(350, 299), +(149, 171), +(270, 151), +(485, 594), +(667, 314), +(24, 139), +(504, 995), +(683, 311), +(194, 1000), +(667, 311); + +INSERT INTO colorer VALUES +(568, 272), +(387, 899), +(357, 663), +(929, 276), +(668, 765), +(343, 236), +(193, 55), +(655, 686), +(518, 296), +(681, 899), +(297, 272), +(250, 505), +(860, 272), +(758, 326), +(914, 426), +(387, 76), +(14, 272), +(226, 296), +(571, 460), +(338, 914), +(950, 505); + +INSERT INTO construire VALUES +(1000, 368), +(840, 368), +(995, 544), +(139, 415), +(521, 863), +(171, 368), +(664, 654), +(171, 261), +(840, 430), +(427, 544); + +INSERT INTO contenir VALUES +(37, 774, 2), +(953, 197, 12), +(299, 875, 1), +(299, 13, 19), +(151, 123, 14), +(314, 422, 12), +(357, 474, 0), +(594, 359, 17), +(146, 938, 14), +(840, 422, 1), +(521, 562, 19), +(146, 3, 14), +(196, 724, 13), +(139, 998, 1), +(594, 793, 16), +(37, 541, 2), +(950, 157, 2), +(995, 761, 20), +(206, 963, 8), +(1000, 118, 12); + +INSERT INTO enregistrer VALUES +(196, 805, 8), +(357, 365, 13), +(953, 460, 13), +(146, 974, 20), +(314, 181, 18), +(311, 637, 8), +(840, 299, 0), +(146, 687, 6), +(314, 653, 6), +(594, 244, 11), +(427, 481, 13), +(950, 26, 9), +(37, 805, 18), +(664, 863, 4), +(299, 149, 10), +(1000, 12, 9), +(206, 26, 5), +(139, 720, 12), +(311, 468, 9); + +INSERT INTO etre VALUES +(449, 577), +(817, 367), +(942, 267), +(662, 17), +(20, 623), +(874, 577), +(225, 17), +(998, 623), +(557, 953), +(574, 955), +(527, 367), +(582, 267), +(906, 953), +(298, 955), +(873, 623), +(243, 577), +(516, 577), +(766, 955), +(534, 765), +(443, 367), +(979, 577), +(962, 267), +(141, 17), +(502, 367), +(525, 869), +(461, 623), +(829, 953), +(250, 765), +(110, 17), +(681, 267), +(280, 367), +(472, 367), +(327, 869), +(235, 869), +(407, 765), +(497, 765), +(101, 17), +(307, 955), +(576, 869), +(276, 765), +(597, 953), +(240, 869), +(811, 765), +(643, 577), +(309, 953), +(942, 255), +(357, 955), +(202, 623), +(137, 869), +(833, 955), +(218, 765), +(403, 17), +(582, 367), +(561, 765), +(460, 255), +(576, 623), +(268, 953), +(929, 17), +(945, 17), +(849, 577), +(738, 765), +(989, 953), +(112, 869), +(62, 577), +(597, 367), +(143, 955), +(799, 623), +(450, 953), +(84, 267), +(315, 869), +(349, 17), +(297, 953), +(403, 955), +(813, 869), +(974, 267), +(288, 267), +(196, 267), +(440, 869), +(61, 623), +(664, 255), +(143, 765), +(113, 267), +(729, 255), +(192, 17), +(79, 955), +(576, 955), +(515, 623), +(219, 367), +(94, 255), +(539, 869), +(688, 953), +(958, 267), +(996, 577), +(840, 955), +(605, 623), +(766, 367), +(857, 577), +(591, 623), +(367, 623), +(611, 17), +(235, 955), +(197, 267), +(859, 17), +(950, 765), +(431, 267), +(431, 623), +(390, 577), +(619, 869), +(14, 953), +(234, 255), +(233, 953), +(562, 869), +(172, 955), +(876, 869), +(383, 869), +(778, 255), +(128, 255), +(983, 869), +(1000, 255), +(666, 267), +(392, 255), +(243, 255), +(950, 267), +(472, 869), +(285, 267), +(777, 955), +(844, 955), +(308, 953), +(92, 367), +(510, 869), +(523, 17), +(420, 869), +(491, 955), +(654, 255), +(980, 255), +(379, 623), +(956, 955), +(622, 953), +(553, 255), +(376, 623), +(87, 955), +(795, 17), +(443, 953), +(317, 367), +(849, 267), +(143, 623), +(449, 623), +(645, 255), +(159, 765), +(742, 367), +(852, 367), +(266, 765), +(389, 255), +(49, 267), +(630, 255), +(988, 255), +(503, 623), +(506, 255), +(865, 367), +(430, 869), +(285, 367), +(543, 953), +(85, 955), +(281, 953), +(414, 765), +(58, 577), +(811, 17), +(500, 869), +(167, 623), +(325, 953), +(688, 955), +(301, 953), +(309, 765), +(90, 765), +(817, 17), +(995, 17), +(614, 17), +(983, 577), +(989, 17), +(302, 955), +(542, 953), +(555, 17), +(386, 869), +(134, 623), +(379, 367), +(449, 955), +(844, 623), +(226, 869), +(480, 255), +(482, 765), +(815, 953), +(442, 255), +(96, 17), +(302, 953), +(67, 953), +(495, 267), +(958, 255), +(705, 765), +(841, 267), +(588, 869), +(865, 267), +(500, 255), +(859, 577), +(227, 869), +(796, 577), +(425, 17), +(103, 955), +(261, 367), +(497, 955), +(506, 955), +(546, 17), +(216, 869), +(544, 17), +(9, 17), +(722, 953), +(262, 953), +(762, 267), +(334, 577), +(967, 953), +(799, 955), +(619, 765), +(624, 623), +(304, 869), +(835, 577), +(96, 869), +(974, 955), +(369, 255), +(461, 953), +(212, 267), +(840, 577), +(403, 267), +(62, 623), +(911, 955), +(8, 267), +(156, 955), +(707, 623), +(904, 953), +(614, 953), +(771, 765), +(54, 255), +(627, 623), +(206, 255), +(688, 623), +(670, 765), +(681, 367), +(521, 255), +(732, 267), +(700, 765), +(456, 17), +(940, 267), +(57, 267), +(629, 955), +(699, 267), +(86, 953), +(969, 267), +(962, 577), +(729, 367), +(421, 17), +(276, 623), +(339, 955), +(307, 869), +(190, 577), +(969, 955), +(773, 577), +(557, 623), +(943, 869), +(806, 577), +(985, 267), +(790, 953), +(144, 17), +(636, 577), +(485, 367), +(518, 267), +(491, 577), +(778, 765), +(500, 367), +(341, 955), +(447, 255), +(258, 267), +(747, 267), +(99, 367), +(905, 953), +(774, 367), +(677, 267), +(312, 255), +(869, 577), +(866, 577), +(543, 955), +(553, 765), +(877, 869), +(540, 869), +(559, 267), +(762, 955), +(480, 955), +(661, 17), +(533, 255), +(168, 869), +(963, 953), +(165, 955), +(877, 577), +(720, 765), +(98, 577), +(181, 267), +(365, 955), +(297, 255), +(742, 267), +(102, 955), +(180, 17), +(176, 765), +(704, 17), +(44, 17), +(831, 765), +(299, 765), +(252, 953), +(369, 869), +(148, 623), +(95, 367), +(835, 869), +(361, 955), +(210, 577), +(640, 765), +(279, 267), +(158, 765), +(559, 577), +(762, 255), +(513, 869), +(604, 765), +(774, 765), +(605, 869), +(370, 765), +(407, 255), +(651, 955), +(165, 367), +(863, 17), +(161, 255), +(605, 17), +(31, 765), +(36, 953), +(578, 623), +(568, 955), +(999, 17), +(143, 17), +(113, 17), +(523, 577), +(491, 255), +(911, 577), +(234, 267), +(234, 577), +(56, 953), +(474, 255), +(225, 955), +(227, 267), +(541, 577), +(891, 267), +(442, 623), +(267, 255), +(141, 765), +(349, 955), +(581, 869), +(254, 17), +(210, 623), +(310, 623), +(587, 765), +(542, 367), +(510, 267), +(884, 869), +(855, 623), +(393, 869), +(292, 255), +(866, 869), +(412, 955), +(775, 623), +(400, 267), +(972, 955), +(502, 267), +(596, 577), +(261, 623), +(264, 765), +(947, 955), +(591, 955), +(400, 869), +(98, 765), +(365, 367), +(914, 255), +(542, 255), +(114, 955), +(118, 367), +(614, 765), +(417, 623), +(201, 267), +(794, 623), +(603, 955), +(510, 955), +(164, 953), +(267, 17), +(200, 953), +(80, 953), +(38, 955), +(978, 17), +(739, 765), +(882, 255), +(869, 255), +(760, 623), +(122, 367), +(10, 955), +(970, 367), +(10, 623), +(354, 955), +(477, 17), +(279, 955), +(363, 953), +(643, 869), +(665, 577), +(641, 955), +(120, 765), +(148, 577), +(878, 267), +(24, 623), +(825, 367), +(54, 765), +(193, 623), +(915, 765), +(833, 17), +(86, 765), +(23, 267), +(380, 869), +(780, 367), +(646, 17), +(605, 367), +(939, 765), +(178, 955), +(24, 17), +(470, 267), +(492, 869), +(985, 953), +(791, 623), +(569, 953), +(873, 765), +(566, 367), +(178, 255), +(532, 367), +(555, 623), +(807, 955), +(64, 623), +(538, 17), +(707, 267), +(825, 623), +(210, 765), +(659, 869), +(740, 623), +(717, 955), +(437, 367), +(544, 765), +(468, 577), +(369, 577), +(540, 367), +(164, 17), +(762, 765), +(165, 577), +(937, 255), +(826, 367), +(877, 267), +(228, 17), +(894, 869), +(334, 255), +(87, 623), +(849, 623), +(77, 765), +(114, 267), +(10, 869), +(180, 367), +(402, 765), +(342, 953), +(847, 869), +(523, 953), +(73, 577), +(699, 367), +(675, 623), +(227, 255), +(528, 623), +(966, 267), +(722, 869), +(234, 869), +(772, 255), +(849, 367), +(326, 953), +(468, 953), +(759, 623), +(963, 955), +(148, 267), +(37, 869), +(307, 255), +(274, 255), +(963, 255), +(855, 953), +(524, 17), +(317, 577), +(840, 255), +(798, 623), +(772, 869), +(127, 955), +(123, 869), +(627, 953), +(314, 367), +(50, 17), +(754, 953), +(981, 367), +(920, 623), +(884, 267), +(49, 367), +(269, 869), +(705, 955), +(607, 869), +(849, 255), +(159, 577), +(368, 869), +(14, 267), +(512, 577), +(457, 955), +(655, 367), +(157, 255), +(582, 953), +(950, 577), +(350, 17), +(321, 17), +(549, 955), +(671, 367), +(447, 623), +(227, 955), +(899, 255), +(176, 953), +(288, 765), +(4, 955), +(339, 953), +(3, 367), +(465, 765), +(704, 623), +(739, 955), +(933, 267), +(45, 765); + +INSERT INTO etre_complexe VALUES +(776, 131), +(809, 283), +(236, 131), +(780, 731), +(668, 963), +(801, 353), +(988, 345), +(192, 90), +(997, 778), +(786, 731), +(484, 954), +(712, 543), +(934, 297), +(762, 771), +(794, 350), +(232, 833), +(650, 116), +(443, 846), +(937, 513), +(524, 241), +(58, 517), +(587, 258), +(563, 415), +(612, 793), +(250, 778), +(248, 786), +(664, 867), +(720, 767), +(416, 487), +(500, 890), +(523, 181), +(340, 452), +(460, 816), +(788, 782), +(635, 867), +(552, 759), +(338, 538), +(662, 672), +(386, 246), +(78, 463), +(571, 796), +(869, 319), +(979, 260), +(63, 120), +(315, 52), +(225, 936), +(31, 448), +(31, 52), +(148, 778), +(144, 611), +(650, 379), +(606, 952), +(24, 418), +(327, 674), +(368, 464), +(272, 731), +(457, 483), +(193, 156), +(986, 825), +(511, 799), +(846, 345), +(865, 45), +(515, 193), +(532, 121), +(21, 116), +(443, 564), +(527, 31), +(585, 618), +(330, 428), +(690, 579), +(456, 764), +(654, 661), +(42, 260), +(83, 565), +(852, 87), +(187, 345), +(468, 732), +(309, 415), +(261, 707), +(753, 343), +(311, 90), +(474, 456), +(427, 731), +(753, 518), +(393, 403), +(424, 767), +(232, 550), +(417, 878), +(750, 562), +(423, 562), +(178, 776), +(143, 213), +(156, 455), +(877, 561), +(820, 637), +(72, 733), +(964, 564), +(645, 712), +(50, 747), +(188, 120), +(349, 353), +(419, 878), +(682, 636), +(426, 873), +(860, 860), +(751, 181), +(1, 673), +(191, 838), +(436, 92), +(427, 510), +(284, 483), +(134, 443), +(561, 452), +(548, 561), +(262, 548), +(838, 887), +(202, 418), +(336, 552), +(963, 772), +(143, 314), +(140, 776), +(388, 104), +(655, 261), +(514, 532), +(44, 195), +(969, 314), +(799, 961), +(940, 768), +(633, 771), +(607, 198), +(796, 64), +(80, 196), +(95, 598), +(298, 579), +(230, 205), +(794, 690), +(13, 711), +(103, 963), +(31, 45), +(402, 415), +(656, 501), +(563, 656), +(557, 796), +(275, 485), +(399, 961), +(181, 712), +(61, 179), +(19, 602), +(795, 918), +(413, 911), +(62, 261), +(33, 850), +(326, 172), +(46, 250), +(146, 662), +(150, 825), +(314, 305), +(717, 565), +(950, 692), +(465, 863), +(605, 114), +(958, 618), +(455, 678), +(760, 156), +(300, 562), +(308, 127), +(193, 167), +(904, 963), +(150, 954), +(498, 824), +(153, 415), +(999, 546), +(112, 131), +(50, 31), +(732, 771), +(250, 12), +(206, 770), +(19, 455), +(543, 345), +(792, 910), +(845, 699), +(688, 824), +(147, 205), +(509, 889), +(246, 954), +(246, 637), +(122, 561); + +INSERT INTO etre_forme VALUES +(348, 196), +(545, 674), +(67, 341), +(896, 25), +(734, 234), +(947, 761), +(647, 823), +(712, 571), +(108, 349), +(593, 805), +(545, 44), +(719, 692), +(474, 833), +(81, 206), +(717, 37), +(831, 225), +(440, 87), +(440, 598), +(675, 768), +(476, 113), +(333, 636), +(447, 468), +(595, 668), +(577, 915), +(668, 126), +(93, 788), +(473, 923), +(332, 100), +(291, 587), +(668, 877), +(675, 309), +(791, 330), +(215, 956), +(800, 498), +(474, 760), +(522, 53), +(614, 859), +(791, 209), +(593, 506), +(734, 159), +(800, 387), +(595, 969), +(706, 906), +(896, 397), +(46, 426), +(905, 933), +(675, 533), +(751, 56), +(81, 532), +(734, 117), +(719, 857), +(93, 294), +(332, 413), +(458, 500), +(227, 868), +(596, 400), +(818, 259), +(476, 180), +(734, 92), +(706, 121), +(647, 491), +(886, 72), +(165, 580), +(81, 759), +(81, 796), +(93, 923), +(437, 247), +(647, 765), +(333, 225), +(93, 403), +(426, 419), +(947, 870), +(734, 42), +(813, 678), +(717, 512), +(291, 477), +(46, 141), +(734, 24), +(647, 486), +(522, 801), +(522, 315), +(333, 824), +(392, 436), +(81, 358), +(476, 302), +(215, 127), +(577, 166), +(751, 795), +(595, 449), +(935, 410), +(435, 444), +(951, 722), +(41, 473), +(630, 326), +(545, 773), +(473, 479), +(570, 879), +(227, 611), +(614, 486), +(675, 730), +(813, 671), +(896, 69), +(348, 679), +(327, 429), +(332, 997), +(595, 746), +(791, 117), +(593, 831), +(522, 692), +(712, 341), +(905, 148), +(712, 517), +(807, 570), +(717, 397), +(437, 868), +(437, 116), +(807, 70), +(82, 51), +(522, 936), +(440, 530), +(67, 838), +(435, 80), +(577, 306), +(647, 212), +(935, 844), +(450, 165), +(831, 234), +(905, 724), +(905, 719), +(450, 250), +(219, 495), +(93, 656), +(93, 134), +(614, 548), +(473, 159), +(896, 426), +(719, 969), +(927, 50), +(907, 764), +(675, 238), +(675, 546), +(723, 80), +(219, 868), +(647, 979), +(647, 395), +(450, 212), +(668, 714), +(347, 18), +(935, 420), +(476, 336), +(450, 619), +(347, 618), +(227, 823), +(896, 806), +(67, 464), +(215, 998), +(947, 786), +(46, 70), +(800, 962), +(593, 861), +(938, 640), +(813, 148), +(907, 150), +(734, 86), +(67, 125), +(81, 659), +(67, 682), +(907, 768), +(450, 557), +(813, 840), +(509, 20), +(899, 975), +(426, 320), +(813, 626), +(509, 466), +(545, 329), +(800, 805), +(938, 210), +(348, 141), +(165, 233), +(392, 783), +(593, 401), +(327, 23), +(751, 263), +(712, 97), +(333, 151), +(831, 853), +(899, 403), +(227, 395), +(630, 778), +(437, 145), +(818, 444), +(719, 528), +(435, 952), +(668, 78), +(831, 938), +(82, 996), +(807, 719), +(807, 177), +(577, 872), +(46, 995), +(647, 134), +(219, 367), +(791, 686), +(522, 865), +(547, 214), +(886, 170), +(473, 869), +(886, 145), +(675, 849), +(712, 857), +(593, 118), +(347, 370), +(712, 988), +(82, 350), +(570, 98), +(437, 387), +(593, 370), +(215, 721), +(719, 626), +(668, 607), +(435, 176), +(712, 645), +(570, 979), +(332, 212), +(831, 539), +(392, 17), +(706, 231), +(905, 61), +(899, 306), +(886, 50), +(675, 543), +(595, 800), +(547, 27), +(67, 665), +(327, 688), +(886, 310), +(723, 637), +(474, 822), +(719, 958), +(447, 144), +(723, 277), +(509, 399), +(447, 790), +(473, 942), +(595, 419), +(593, 933), +(719, 764), +(291, 932), +(93, 363), +(440, 602), +(813, 233), +(435, 472), +(165, 482), +(905, 789), +(291, 603), +(332, 799), +(706, 846), +(791, 974), +(951, 18), +(450, 218), +(348, 661), +(212, 327), +(212, 476), +(440, 392), +(813, 69), +(227, 137), +(165, 57), +(551, 227), +(630, 272), +(614, 106), +(105, 595), +(545, 946), +(947, 208), +(706, 498), +(333, 61), +(291, 934), +(332, 814), +(570, 585), +(800, 447), +(82, 185), +(458, 760), +(927, 365), +(332, 700), +(327, 713), +(458, 142), +(215, 335), +(82, 144), +(886, 525), +(215, 200), +(522, 587), +(392, 838), +(927, 325), +(717, 261), +(614, 587), +(426, 386), +(81, 923), +(596, 86), +(447, 355), +(476, 133), +(596, 597), +(81, 754), +(935, 986), +(647, 90), +(807, 598), +(938, 541), +(108, 218), +(545, 972), +(332, 549), +(93, 159), +(886, 806), +(907, 613), +(522, 678), +(675, 923), +(458, 793), +(570, 162), +(547, 533), +(82, 148), +(907, 532), +(647, 79), +(595, 101), +(886, 261), +(545, 264), +(813, 933), +(717, 71), +(596, 922), +(227, 936), +(675, 302), +(332, 72), +(67, 569), +(522, 367), +(450, 785), +(93, 702), +(82, 310), +(474, 790), +(165, 418), +(831, 82), +(595, 813), +(547, 995), +(951, 509), +(392, 326), +(426, 859), +(437, 630), +(347, 3), +(818, 829), +(81, 770), +(551, 167), +(907, 745), +(67, 506), +(332, 162), +(545, 757), +(333, 938), +(440, 14), +(596, 973), +(81, 167), +(474, 149), +(647, 809), +(333, 546), +(630, 164), +(426, 271), +(647, 580), +(348, 479), +(105, 460), +(927, 786), +(93, 145), +(551, 985), +(595, 574), +(614, 680), +(614, 796), +(938, 729), +(800, 820), +(551, 56), +(212, 833), +(347, 739), +(332, 46), +(630, 3), +(935, 363), +(595, 816), +(800, 714), +(212, 754), +(723, 941), +(348, 338), +(440, 818), +(219, 187), +(165, 627), +(476, 450), +(333, 425), +(332, 530), +(899, 604), +(219, 154), +(473, 666), +(938, 574), +(458, 882), +(907, 688), +(938, 22), +(896, 778), +(67, 250), +(93, 312), +(450, 326), +(927, 164), +(813, 28), +(734, 669), +(447, 656), +(614, 740), +(593, 645), +(593, 946), +(215, 769), +(593, 921), +(547, 582), +(212, 840), +(938, 393), +(41, 979), +(719, 673), +(327, 772), +(593, 974), +(219, 760), +(593, 530), +(82, 721), +(614, 143), +(291, 537), +(905, 48), +(927, 874), +(813, 468), +(348, 814), +(215, 919), +(593, 334), +(476, 120), +(435, 424), +(347, 25), +(509, 227), +(458, 536), +(647, 228), +(706, 266), +(706, 852), +(212, 659), +(67, 537), +(215, 27), +(712, 127), +(630, 966), +(41, 835), +(547, 645), +(899, 275), +(522, 703), +(768, 143), +(447, 114), +(593, 656), +(647, 328), +(719, 379), +(476, 88), +(947, 85), +(165, 410), +(348, 637), +(440, 966), +(212, 987), +(474, 872), +(332, 550), +(333, 884), +(347, 51), +(67, 463), +(105, 566), +(927, 823), +(938, 703), +(719, 246), +(426, 401), +(886, 544), +(447, 850), +(347, 302), +(647, 682), +(896, 640), +(474, 358), +(717, 489), +(215, 753), +(41, 513), +(886, 967), +(215, 214), +(813, 673), +(813, 263), +(723, 163), +(723, 317), +(647, 359), +(751, 82), +(447, 777), +(791, 503), +(81, 795), +(82, 826), +(927, 267), +(332, 399), +(614, 318), +(712, 147), +(474, 704), +(426, 530), +(938, 326), +(706, 564), +(791, 488), +(440, 847), +(333, 974), +(509, 813), +(831, 85), +(327, 231), +(227, 94), +(905, 121), +(668, 566), +(67, 865), +(647, 607), +(333, 741), +(807, 506), +(41, 891), +(630, 741), +(476, 506), +(595, 825), +(347, 72), +(570, 925), +(723, 379), +(450, 633), +(392, 132), +(227, 760), +(219, 679), +(332, 566), +(927, 261), +(596, 180), +(751, 426), +(614, 311), +(82, 678), +(219, 603), +(896, 515), +(630, 445), +(907, 572), +(212, 264), +(437, 502), +(551, 840), +(327, 205), +(327, 520), +(768, 641), +(327, 974), +(545, 472), +(165, 979), +(82, 393), +(476, 446), +(938, 458), +(108, 950), +(791, 280), +(473, 809), +(82, 806), +(807, 61), +(935, 479), +(899, 546), +(105, 830), +(593, 361), +(668, 100), +(105, 166), +(327, 976), +(927, 709), +(291, 119), +(577, 612), +(719, 441), +(668, 793), +(905, 181), +(907, 314), +(509, 61), +(577, 100), +(570, 959), +(818, 686), +(46, 328), +(675, 920), +(522, 685), +(447, 393), +(647, 74), +(426, 656), +(212, 316), +(723, 654), +(227, 899), +(476, 64), +(800, 154), +(547, 341), +(907, 627), +(435, 976), +(219, 540), +(896, 805), +(675, 474), +(577, 857), +(938, 346), +(791, 578), +(93, 461), +(476, 919), +(630, 512), +(458, 113), +(333, 132), +(831, 306), +(751, 103), +(509, 131), +(450, 960), +(768, 661), +(476, 911), +(947, 260), +(332, 470), +(791, 873), +(67, 225), +(522, 18), +(547, 122), +(896, 790), +(675, 853), +(831, 906), +(108, 919), +(596, 538), +(734, 533), +(768, 762), +(165, 162), +(46, 219), +(905, 133), +(212, 706), +(347, 419), +(545, 75), +(551, 100), +(327, 208), +(570, 200), +(219, 521), +(41, 768), +(807, 775), +(938, 62), +(595, 99), +(886, 555), +(734, 304), +(938, 922), +(522, 735), +(630, 791), +(440, 846), +(212, 963), +(215, 212), +(392, 565), +(647, 690), +(476, 980), +(437, 602), +(437, 645), +(935, 419), +(614, 62), +(458, 77), +(474, 960), +(509, 548), +(522, 618), +(899, 440), +(938, 395), +(570, 709), +(551, 436), +(791, 393), +(41, 1), +(437, 329), +(41, 280), +(458, 271), +(896, 421), +(348, 761), +(435, 419), +(547, 486), +(435, 564), +(614, 932), +(723, 579), +(791, 791), +(348, 515), +(291, 824), +(458, 501), +(614, 643), +(768, 303), +(227, 997), +(927, 263), +(348, 327), +(947, 206), +(291, 340), +(476, 932), +(577, 420), +(333, 796), +(813, 188), +(458, 981), +(547, 33), +(227, 497), +(440, 367), +(886, 814), +(46, 149), +(348, 376), +(831, 739), +(935, 21), +(938, 944), +(551, 709), +(570, 419), +(768, 541), +(570, 704), +(212, 449), +(509, 336), +(813, 622), +(768, 89), +(333, 240), +(333, 309), +(938, 218), +(768, 357), +(938, 230), +(647, 735), +(348, 818), +(105, 57), +(392, 929), +(474, 51), +(473, 732), +(476, 946), +(800, 564), +(570, 268), +(105, 464), +(67, 84), +(545, 711), +(426, 792), +(712, 728), +(473, 148), +(392, 434), +(813, 273), +(719, 699), +(426, 149), +(105, 664), +(426, 690), +(67, 412), +(447, 855), +(105, 383), +(46, 460), +(547, 96), +(46, 269), +(474, 714), +(327, 346), +(896, 339), +(807, 544), +(712, 830), +(46, 223), +(450, 523), +(108, 415), +(165, 4), +(333, 911), +(435, 153), +(108, 869), +(426, 498), +(630, 988), +(347, 613), +(791, 457), +(440, 419), +(458, 582), +(570, 247), +(291, 662), +(896, 602), +(717, 774), +(596, 604), +(593, 870), +(927, 421), +(426, 742), +(82, 794); + +INSERT INTO necessiter VALUES +(886, 542, 10), +(863, 102, 9), +(412, 233, 3), +(654, 809, 1), +(615, 452, 6), +(863, 793, 1), +(430, 635, 0), +(368, 502, 0), +(368, 860, 10), +(261, 818, 7); + +INSERT INTO noter VALUES +(430, 386, 'Vestibulum ante ipsum primis in faucibus orci luctus '), +(430, 460, 'Aenean fermentum. Donec ut mauris eget massa tempor c'), +(886, 874, 'Mauris sit amet eros. Suspendisse accumsan tortor qui'), +(412, 805, 'Cum sociis natoque penatibus et magnis dis parturient'), +(368, 346, 'In hac habitasse platea dictumst. Morbi vestibulum'), +(544, 303, 'Maecenas rhoncus aliquam lacus. Morbi quis tortor id '), +(415, 56, 'Morbi ut odio. Cras mi pede'), +(886, 206, 'In hac habitasse platea dictumst. Maecenas ut massa q'), +(544, 299, 'Cras non velit nec nisi vulputate nonummy. Maecenas t'), +(261, 715, 'Suspendisse ornare consequat lectus. In est risus'); + +INSERT INTO perdre VALUES +(641, 840, 754, 726), +(641, 995, 416, 306), +(545, 311, 474, 43), +(687, 299, 851, 600), +(398, 146, 681, 164), +(981, 427, 596, 176), +(928, 171, 218, 522), +(715, 171, 739, 330), +(823, 357, 238, 50), +(137, 196, 717, 16), +(346, 314, 668, 640), +(791, 427, 532, 279), +(237, 206, 354, 61), +(14, 37, 603, 481), +(741, 995, 710, 429), +(383, 664, 164, 180), +(168, 594, 1000, 117), +(12, 1000, 857, 736), +(1000, 139, 514, 388), +(244, 427, 308, 527), +(299, 950, 627, 25), +(244, 311, 350, 681), +(244, 146, 791, 474), +(52, 357, 943, 284), +(986, 594, 909, 118), +(580, 171, 763, 602), +(468, 427, 159, 109), +(26, 664, 986, 112), +(193, 1000, 570, 178), +(9, 953, 530, 449), +(198, 146, 311, 571), +(193, 1000, 369, 671), +(637, 840, 265, 406), +(451, 1000, 826, 154), +(193, 840, 308, 540), +(525, 311, 699, 387), +(577, 664, 219, 736), +(404, 206, 145, 565), +(976, 299, 499, 604), +(638, 146, 945, 437), +(168, 171, 773, 687), +(712, 206, 69, 460), +(910, 953, 458, 593), +(442, 840, 22, 93), +(81, 427, 328, 291), +(647, 37, 542, 746), +(980, 664, 994, 133), +(9, 311, 236, 496), +(468, 196, 412, 37), +(438, 427, 564, 668), +(346, 206, 306, 96), +(715, 139, 1, 1), +(381, 146, 688, 744), +(638, 953, 595, 25), +(874, 953, 764, 50), +(14, 151, 359, 704), +(206, 206, 513, 240), +(244, 357, 932, 99), +(12, 1000, 699, 338), +(439, 995, 97, 691), +(438, 995, 826, 674), +(812, 311, 646, 261), +(928, 311, 512, 545), +(14, 314, 470, 332), +(398, 953, 148, 61), +(14, 995, 571, 250), +(9, 206, 834, 49), +(805, 950, 283, 445), +(637, 314, 252, 547), +(281, 953, 943, 86), +(981, 664, 19, 665), +(251, 995, 431, 187), +(980, 206, 125, 124), +(729, 594, 682, 653), +(325, 664, 80, 225), +(384, 357, 354, 140), +(281, 664, 777, 372), +(910, 521, 221, 323), +(451, 146, 857, 268), +(386, 171, 430, 578), +(303, 1000, 677, 308), +(168, 950, 677, 508), +(812, 171, 645, 370), +(713, 311, 661, 72), +(56, 37, 22, 702), +(18, 196, 882, 72), +(401, 521, 317, 572), +(115, 594, 826, 698), +(115, 357, 716, 635), +(741, 950, 72, 512), +(980, 171, 32, 96), +(382, 37, 837, 122), +(715, 953, 771, 119), +(460, 311, 545, 507), +(181, 206, 793, 673), +(893, 664, 298, 485), +(638, 995, 666, 43), +(577, 664, 94, 676), +(823, 196, 355, 316), +(336, 311, 193, 434), +(647, 151, 967, 72), +(149, 1000, 304, 75), +(81, 311, 700, 303), +(382, 357, 861, 307), +(383, 950, 311, 662), +(577, 521, 201, 246), +(303, 171, 307, 121), +(863, 594, 84, 627), +(579, 357, 931, 318), +(442, 357, 930, 244), +(686, 953, 25, 434), +(115, 196, 79, 557), +(980, 664, 290, 541), +(404, 950, 888, 594), +(283, 314, 931, 255), +(974, 151, 879, 214), +(686, 37, 436, 404), +(115, 664, 434, 135), +(12, 196, 216, 134), +(81, 1000, 24, 40), +(934, 171, 920, 167), +(893, 594, 450, 610), +(451, 995, 890, 485), +(712, 146, 50, 709), +(557, 146, 888, 669), +(615, 521, 973, 510), +(687, 521, 675, 125), +(26, 37, 452, 735), +(299, 314, 444, 309), +(913, 427, 814, 300), +(863, 357, 626, 659), +(149, 664, 857, 150), +(81, 311, 183, 172), +(386, 1000, 749, 214), +(695, 594, 480, 63), +(637, 206, 681, 599), +(77, 196, 796, 100), +(934, 171, 915, 81), +(52, 950, 146, 108), +(481, 953, 164, 85), +(9, 299, 443, 231), +(770, 314, 495, 93), +(18, 37, 333, 147), +(981, 37, 994, 368), +(986, 664, 999, 290), +(381, 146, 546, 199), +(638, 146, 775, 721), +(439, 840, 424, 397), +(1, 594, 314, 639), +(879, 953, 375, 171), +(14, 995, 497, 305), +(81, 664, 208, 165), +(123, 357, 712, 698), +(193, 171, 259, 319), +(981, 357, 407, 77), +(12, 953, 31, 571), +(525, 171, 206, 232), +(729, 314, 368, 703), +(230, 196, 340, 651), +(609, 664, 673, 63), +(983, 171, 816, 139), +(398, 139, 811, 346), +(879, 37, 4, 299), +(550, 139, 511, 659), +(193, 664, 641, 131), +(137, 37, 463, 237), +(686, 953, 798, 70), +(981, 521, 849, 639), +(398, 950, 289, 732), +(653, 521, 959, 311), +(281, 151, 543, 564), +(687, 206, 235, 119), +(879, 427, 971, 732), +(638, 594, 837, 221), +(346, 1000, 791, 371), +(713, 206, 367, 287), +(259, 314, 869, 671), +(874, 664, 466, 573), +(251, 206, 328, 491), +(381, 37, 72, 271), +(974, 594, 213, 492), +(713, 311, 907, 277), +(928, 1000, 668, 25), +(439, 206, 794, 14), +(237, 196, 20, 66), +(812, 139, 145, 484), +(715, 521, 50, 714), +(913, 311, 963, 528), +(863, 311, 384, 276), +(181, 1000, 383, 164), +(770, 521, 248, 201), +(609, 427, 618, 467), +(398, 299, 591, 184), +(460, 146, 952, 462), +(729, 311, 243, 426), +(442, 521, 161, 717), +(18, 151, 570, 142), +(688, 171, 161, 655), +(637, 594, 407, 268), +(986, 1000, 201, 68), +(980, 151, 230, 420), +(383, 171, 139, 497), +(579, 311, 264, 139), +(579, 314, 853, 425), +(986, 146, 363, 58), +(615, 357, 572, 496), +(791, 151, 42, 460), +(481, 950, 271, 305), +(140, 151, 728, 520), +(384, 311, 69, 77), +(805, 206, 545, 535), +(525, 139, 885, 223), +(976, 314, 398, 234), +(251, 37, 817, 202), +(550, 427, 740, 143), +(976, 953, 383, 700), +(299, 1000, 515, 656), +(237, 311, 651, 117), +(193, 314, 430, 222), +(874, 995, 987, 187), +(653, 357, 254, 468), +(525, 146, 808, 81), +(928, 299, 361, 155), +(384, 311, 630, 464), +(9, 146, 474, 276), +(460, 995, 61, 380), +(986, 950, 549, 101), +(404, 206, 163, 519), +(346, 314, 445, 288), +(52, 196, 668, 504), +(687, 314, 121, 164), +(193, 427, 100, 197), +(686, 840, 225, 55), +(463, 139, 414, 719), +(382, 139, 791, 601), +(303, 311, 717, 543), +(712, 146, 417, 577), +(460, 146, 909, 481), +(910, 594, 550, 368), +(579, 314, 456, 229), +(115, 594, 262, 528), +(451, 171, 980, 628), +(580, 950, 360, 422), +(934, 151, 103, 676), +(274, 953, 902, 78), +(823, 950, 298, 237), +(688, 950, 10, 749), +(239, 146, 576, 533), +(181, 427, 114, 86), +(398, 427, 234, 158), +(695, 594, 974, 406), +(442, 299, 431, 595), +(812, 206, 520, 670), +(974, 206, 544, 14), +(9, 664, 410, 390), +(14, 950, 841, 386), +(580, 521, 764, 277), +(686, 594, 437, 81), +(468, 37, 565, 586), +(52, 171, 272, 706), +(274, 206, 855, 290), +(478, 594, 570, 277), +(641, 146, 941, 57), +(720, 146, 156, 549), +(386, 146, 923, 660), +(346, 1000, 846, 117), +(382, 664, 362, 417), +(137, 664, 566, 434), +(26, 664, 919, 677), +(442, 594, 506, 235), +(398, 950, 530, 21), +(863, 357, 407, 39), +(1000, 427, 909, 718), +(299, 171, 100, 390), +(26, 950, 940, 698), +(934, 664, 399, 475), +(451, 151, 346, 51), +(325, 427, 578, 173), +(928, 206, 86, 406), +(140, 357, 117, 358), +(557, 196, 793, 304), +(251, 139, 17, 702), +(928, 206, 37, 424), +(687, 357, 414, 496), +(550, 171, 36, 371), +(237, 139, 629, 507), +(404, 950, 233, 388), +(303, 357, 926, 379), +(647, 840, 441, 575), +(580, 196, 429, 624), +(274, 311, 153, 226), +(879, 139, 2, 507), +(149, 357, 909, 371), +(14, 521, 92, 391), +(976, 171, 941, 163), +(284, 299, 319, 743), +(230, 299, 943, 115), +(688, 299, 246, 704), +(976, 206, 279, 143), +(206, 427, 907, 714), +(609, 594, 911, 292), +(637, 196, 268, 160), +(580, 427, 416, 7), +(695, 206, 655, 74), +(468, 594, 463, 28), +(686, 950, 122, 670), +(206, 171, 268, 199), +(438, 664, 813, 265), +(913, 840, 626, 646), +(713, 594, 27, 254), +(325, 206, 194, 345), +(893, 357, 947, 320), +(442, 594, 158, 612), +(123, 151, 205, 72), +(398, 995, 128, 618), +(579, 146, 809, 295), +(382, 950, 259, 437), +(381, 521, 252, 350), +(239, 1000, 655, 576), +(741, 37, 972, 183), +(580, 311, 888, 86), +(615, 37, 713, 727), +(404, 146, 170, 28), +(201, 950, 235, 659), +(1, 357, 484, 566), +(638, 950, 441, 749), +(9, 664, 611, 551), +(283, 171, 197, 618), +(638, 299, 10, 568), +(299, 314, 825, 164), +(451, 314, 339, 92), +(812, 171, 826, 357), +(81, 151, 678, 237), +(81, 357, 472, 619), +(451, 953, 968, 648), +(281, 171, 51, 375), +(980, 146, 510, 29), +(181, 664, 606, 101), +(641, 146, 324, 339), +(193, 196, 158, 329), +(149, 521, 303, 651), +(686, 151, 155, 516), +(401, 594, 516, 363), +(384, 953, 13, 327), +(874, 594, 495, 643), +(181, 206, 923, 627), +(18, 427, 809, 266), +(438, 840, 820, 457), +(18, 146, 749, 460), +(791, 206, 747, 359), +(12, 139, 387, 439), +(18, 521, 468, 191), +(386, 357, 261, 0), +(791, 146, 252, 74), +(637, 139, 129, 30), +(198, 950, 513, 135), +(365, 427, 185, 529), +(713, 196, 703, 564), +(404, 995, 576, 159), +(398, 311, 368, 622), +(609, 594, 805, 10), +(579, 151, 576, 688), +(438, 357, 72, 37), +(983, 953, 768, 706), +(695, 171, 212, 519), +(637, 427, 8, 81), +(980, 206, 680, 48), +(720, 171, 650, 613), +(720, 37, 651, 386), +(713, 357, 1, 23), +(237, 139, 380, 232), +(463, 664, 477, 668), +(365, 357, 138, 104), +(460, 521, 869, 263), +(168, 357, 981, 411), +(863, 206, 563, 281), +(934, 139, 808, 541), +(874, 299, 216, 412), +(712, 1000, 852, 349), +(695, 37, 1, 591), +(577, 995, 384, 676), +(303, 196, 386, 746), +(382, 146, 849, 617), +(976, 427, 167, 208), +(712, 594, 133, 588), +(303, 427, 298, 558), +(478, 594, 114, 37), +(383, 594, 309, 643), +(77, 311, 49, 198), +(550, 37, 771, 13), +(14, 357, 926, 34), +(398, 521, 480, 627), +(134, 146, 144, 202), +(244, 950, 641, 382), +(980, 840, 993, 606), +(685, 953, 914, 484), +(230, 299, 985, 558), +(303, 196, 614, 211), +(638, 594, 741, 167), +(983, 146, 410, 610), +(893, 521, 104, 359), +(986, 840, 977, 561), +(913, 953, 789, 76), +(206, 299, 829, 209), +(863, 311, 668, 490), +(874, 664, 911, 212), +(729, 196, 677, 93), +(557, 427, 771, 47), +(12, 664, 163, 556), +(637, 950, 934, 325), +(712, 594, 219, 62), +(230, 196, 304, 387), +(913, 206, 499, 611), +(398, 299, 22, 548), +(910, 427, 482, 319), +(974, 139, 998, 86), +(913, 1000, 700, 122), +(56, 196, 207, 693), +(115, 427, 120, 633), +(579, 206, 167, 143), +(615, 521, 216, 2), +(974, 521, 285, 195), +(641, 1000, 581, 677), +(579, 357, 164, 645), +(823, 151, 457, 170), +(56, 146, 206, 402), +(52, 206, 478, 1), +(439, 357, 250, 277), +(382, 171, 674, 741), +(181, 1000, 919, 438), +(40, 146, 214, 506), +(381, 151, 855, 646), +(284, 299, 532, 474), +(468, 995, 773, 713), +(40, 314, 830, 735), +(874, 664, 279, 186), +(550, 664, 290, 308), +(720, 196, 424, 699), +(134, 151, 67, 223), +(77, 427, 868, 729), +(974, 995, 38, 576), +(863, 427, 772, 172), +(577, 206, 580, 388), +(383, 594, 611, 431), +(557, 521, 61, 37), +(981, 139, 878, 462), +(123, 953, 662, 62), +(478, 151, 390, 193), +(577, 311, 934, 593), +(438, 953, 844, 615), +(386, 357, 800, 30), +(115, 314, 971, 432), +(181, 196, 503, 195), +(983, 171, 27, 208), +(879, 37, 712, 69), +(303, 427, 20, 366), +(791, 427, 788, 597), +(653, 594, 746, 683), +(251, 139, 312, 489), +(893, 1000, 705, 192), +(401, 314, 238, 216), +(1000, 171, 116, 309), +(647, 840, 306, 483), +(986, 37, 771, 383), +(647, 299, 525, 310), +(609, 953, 358, 477), +(140, 299, 770, 385), +(259, 314, 959, 15), +(140, 521, 468, 246), +(579, 594, 383, 611), +(259, 299, 265, 282), +(201, 995, 412, 701), +(382, 299, 863, 222), +(805, 314, 338, 495), +(615, 139, 81, 690), +(463, 314, 45, 711), +(791, 37, 36, 523), +(741, 206, 797, 67), +(365, 995, 74, 95), +(712, 196, 98, 83), +(346, 1000, 728, 93), +(879, 594, 416, 636), +(580, 1000, 925, 566), +(976, 37, 472, 26), +(545, 427, 235, 128), +(18, 357, 945, 182), +(910, 995, 216, 166), +(481, 196, 568, 482), +(791, 206, 835, 280), +(346, 427, 292, 608), +(550, 196, 565, 348), +(812, 206, 813, 330), +(14, 206, 602, 335), +(641, 594, 888, 492), +(451, 427, 875, 624), +(577, 357, 811, 602), +(791, 171, 81, 193), +(18, 146, 446, 670), +(9, 314, 379, 315), +(685, 37, 142, 345), +(237, 37, 395, 28), +(545, 139, 142, 424), +(976, 1000, 1000, 443), +(863, 139, 534, 484), +(336, 299, 972, 318), +(974, 299, 9, 646), +(550, 995, 719, 345), +(791, 357, 668, 686), +(77, 840, 966, 315), +(115, 357, 656, 416), +(863, 995, 29, 281), +(863, 299, 544, 233), +(1000, 1000, 310, 678), +(404, 196, 288, 311), +(451, 1000, 586, 716), +(382, 151, 354, 409), +(442, 171, 417, 63), +(181, 1000, 101, 4), +(525, 427, 555, 106), +(579, 196, 88, 495), +(641, 146, 738, 702), +(365, 840, 924, 604), +(346, 37, 46, 564), +(770, 357, 888, 647), +(910, 171, 678, 281), +(198, 664, 997, 97), +(283, 427, 480, 667), +(81, 206, 460, 457), +(134, 427, 582, 448), +(281, 139, 125, 706), +(40, 594, 706, 646), +(550, 37, 306, 428), +(303, 146, 276, 648), +(134, 357, 690, 52), +(123, 840, 170, 557), +(381, 664, 942, 710), +(274, 146, 914, 394), +(115, 206, 523, 280), +(134, 146, 645, 3), +(18, 139, 501, 26), +(81, 151, 8, 185), +(1000, 594, 309, 231), +(140, 840, 468, 448), +(439, 840, 742, 437), +(244, 311, 100, 92), +(123, 995, 462, 474), +(451, 521, 999, 12), +(181, 37, 929, 163), +(638, 995, 829, 425), +(123, 299, 974, 145), +(712, 995, 369, 629), +(791, 139, 190, 186), +(913, 151, 603, 209), +(481, 299, 191, 45), +(741, 521, 449, 352), +(983, 953, 339, 345), +(401, 995, 88, 427), +(545, 357, 258, 5), +(281, 995, 859, 165), +(805, 1000, 417, 100), +(686, 37, 424, 61), +(251, 664, 478, 224), +(615, 146, 593, 286), +(986, 171, 595, 687), +(879, 357, 316, 546), +(451, 139, 125, 127), +(251, 299, 716, 54), +(525, 950, 203, 495), +(283, 196, 292, 58), +(56, 521, 807, 16), +(438, 299, 410, 547), +(577, 311, 747, 514), +(863, 311, 815, 209), +(303, 299, 757, 394), +(52, 139, 885, 12), +(383, 594, 624, 393), +(478, 139, 549, 185), +(695, 594, 971, 681), +(712, 139, 860, 722), +(791, 206, 216, 226), +(9, 311, 79, 405), +(770, 664, 717, 185), +(439, 357, 474, 659), +(206, 995, 300, 249), +(686, 151, 538, 250), +(251, 357, 515, 565), +(478, 206, 346, 658), +(206, 664, 920, 257), +(550, 664, 235, 347), +(1, 206, 22, 628), +(398, 840, 479, 515), +(686, 594, 281, 706), +(525, 357, 952, 95), +(688, 311, 960, 194), +(741, 206, 713, 104), +(346, 146, 863, 218), +(525, 357, 868, 138), +(770, 206, 974, 453), +(283, 311, 562, 579), +(686, 664, 395, 41), +(928, 594, 815, 38), +(284, 171, 355, 699), +(976, 151, 303, 170), +(550, 37, 343, 79), +(580, 357, 857, 570), +(201, 206, 306, 361), +(687, 840, 580, 147), +(712, 427, 728, 137), +(382, 196, 865, 176), +(478, 427, 788, 603), +(468, 521, 613, 208), +(230, 196, 129, 192), +(140, 146, 74, 140), +(713, 995, 524, 67), +(812, 171, 238, 317), +(720, 1000, 565, 630), +(609, 840, 857, 567), +(52, 314, 246, 681), +(56, 357, 308, 502), +(26, 950, 593, 673), +(336, 995, 445, 305), +(688, 299, 424, 598), +(638, 427, 911, 13), +(384, 995, 773, 463), +(980, 206, 289, 331), +(442, 953, 398, 448), +(557, 840, 269, 178), +(463, 950, 741, 705), +(336, 521, 274, 364), +(986, 206, 478, 616), +(874, 950, 23, 364), +(687, 151, 330, 407), +(52, 953, 970, 36), +(1000, 206, 783, 143), +(259, 196, 128, 146), +(40, 196, 719, 352), +(879, 151, 841, 282), +(259, 171, 699, 649), +(647, 664, 574, 568), +(382, 995, 884, 499), +(281, 146, 96, 428), +(893, 151, 967, 209), +(26, 139, 95, 47), +(823, 664, 640, 404), +(77, 594, 779, 79), +(346, 311, 595, 356), +(52, 357, 163, 597), +(12, 171, 61, 221), +(770, 594, 514, 376), +(460, 950, 410, 730), +(741, 521, 594, 458), +(239, 594, 710, 460), +(913, 299, 818, 504), +(251, 299, 399, 46), +(77, 146, 640, 37), +(198, 521, 607, 275), +(653, 146, 535, 177), +(181, 594, 604, 247), +(823, 314, 791, 190), +(609, 314, 214, 219), +(713, 196, 985, 501), +(206, 953, 701, 556), +(647, 953, 915, 146), +(281, 664, 795, 54), +(181, 594, 942, 53), +(181, 146, 78, 700), +(1000, 594, 597, 559), +(638, 314, 318, 47), +(206, 311, 246, 217), +(230, 196, 686, 494), +(398, 840, 457, 125), +(1000, 840, 131, 307), +(1000, 1000, 333, 44), +(478, 664, 416, 466), +(251, 840, 655, 238), +(381, 953, 186, 327), +(386, 521, 570, 405), +(879, 171, 911, 603), +(460, 950, 809, 252), +(712, 206, 390, 243), +(468, 357, 932, 102), +(980, 206, 914, 53), +(934, 664, 343, 119), +(647, 950, 424, 653), +(140, 950, 466, 348), +(615, 1000, 329, 539), +(615, 995, 248, 651), +(812, 206, 45, 690), +(550, 311, 491, 699), +(404, 950, 289, 167), +(893, 139, 996, 686), +(81, 840, 294, 63), +(18, 1000, 212, 47), +(874, 953, 863, 99), +(14, 299, 367, 69), +(386, 521, 192, 57), +(283, 146, 515, 114), +(550, 953, 751, 245), +(365, 139, 583, 46), +(976, 314, 168, 129), +(303, 206, 437, 38), +(685, 311, 521, 697), +(206, 146, 875, 440), +(577, 521, 367, 648), +(550, 1000, 147, 581), +(805, 151, 386, 206), +(274, 995, 749, 603), +(438, 299, 724, 375), +(40, 953, 676, 170), +(463, 151, 845, 657), +(720, 151, 961, 40), +(653, 196, 645, 428), +(398, 427, 227, 713), +(805, 664, 629, 282), +(695, 594, 670, 363), +(812, 995, 946, 83), +(244, 1000, 604, 694), +(974, 953, 24, 305), +(386, 196, 230, 621), +(638, 995, 794, 391), +(438, 427, 668, 503), +(325, 1000, 666, 595), +(259, 594, 188, 714), +(77, 206, 779, 609), +(688, 840, 861, 662), +(720, 427, 975, 400), +(823, 171, 700, 25), +(893, 995, 542, 488), +(641, 357, 778, 671), +(336, 953, 233, 123), +(928, 139, 569, 325), +(550, 1000, 317, 146), +(874, 950, 419, 35), +(81, 206, 147, 714), +(928, 664, 709, 447), +(284, 146, 903, 152), +(382, 357, 530, 659), +(383, 357, 851, 160), +(805, 171, 252, 226), +(52, 357, 765, 673), +(77, 427, 414, 268), +(653, 146, 853, 380), +(442, 664, 646, 24), +(863, 146, 587, 105), +(791, 521, 647, 533), +(259, 146, 302, 139), +(637, 146, 524, 507), +(823, 427, 859, 584), +(557, 171, 447, 610); + +INSERT INTO varier VALUES +(412, 368), +(415, 886), +(415, 412), +(886, 863), +(368, 544), +(544, 368), +(412, 654), +(544, 412), +(863, 886), +(886, 886); + diff --git a/PostgreSQL/src/select.sql b/PostgreSQL/src/select.sql new file mode 100644 index 0000000..2e65d9b --- /dev/null +++ b/PostgreSQL/src/select.sql @@ -0,0 +1,74 @@ +-- ============================================================================ +-- Some requests for the statistics and to consult the database. +-- ============================================================================ + +-- ============================================================================ +-- CONSULTATION +-- ============================================================================ + +-- Liste des boîtes parues depuis 5 ans. +SELECT boites.titre_boite +FROM boites +WHERE DATE_PART('year', AGE(NOW(), boites.date_boite) < 5; + +--Liste des modèles proposés par des fans. + +SELECT id_modeles +FROM modeles +WHERE id_membre NOT NULL; + +-- Liste des pièces qui apparaissent dans des boîtes de différentes marques. + +SELECT id_piece +FROM ( -- couple (piece,marque) d'ou vient les pieces + SELECT DISTINCT id_piece, id_marque FROM contenir + NATURAL JOIN boites + NATURAL JOIN marques +) +GROUP BY id_piece +WHERE COUNT(*) > 1; +-- ============================================================================ + + +-- ============================================================================ +-- STATISTIQUES +-- ============================================================================ + +-- Nombre de piece par boite +CREATE OR REPLACE VIEW nb_piece_par_boite AS +( + SELECT id_boite, SUM(quantite_contenir) as nb_piece + FROM contenir + GROUP BY id_boite +); + +-- Le nombre moyen de pièces par boîte. +SELECT AVG(nb_piece) +FROM nb_piece_par_boite +; + +-- nombre de modele proposés par membre +CREATE OR REPLACE VIEW nb_modele_par_boite AS +( + SELECT id_membre, COUNT(*) as nb_boite + FROM modeles + GROUP BY id_membre +); + +-- La liste des membres qui ont proposé le plus de modèles. +SELECT id_membre, nb_boite +FROM nb_modele_par_boite +ORDER BY nb_boite +DESC +LIMIT 5 +; + +-- La liste des modèles, classés par note moyenne descendante. +SELECT id_modele, AVG(note_noter) as note_moyenne +FROM noter +GROUP BY id_modele +ORDER BY note_moyenne +DESC +; + +-- ============================================================================ diff --git a/PostgreSQL/src/update.sql b/PostgreSQL/src/update.sql new file mode 100644 index 0000000..3f0efbd --- /dev/null +++ b/PostgreSQL/src/update.sql @@ -0,0 +1,351 @@ +-- ============================================================================ +-- Those are the requests to update the database. +-- ============================================================================ + +-- Verifying functions. + +CREATE OR REPLACE FUNCTION is_existing_piece( + toadd_id_piece INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE EXCEPTION 'The % piece does not exist.', toadd_id_piece; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_marque( + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS( + SELECT 1 FROM marques + WHERE id_marque = toadd_id_marque + ) + THEN + RAISE NOTICE 'The % marque does not exist.', toadd_id_marque; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_note( + toadd_id_modele INT, + toadd_id_membre INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS( + SELECT 1 FROM noter + WHERE id_modele = toadd_id_modele + AND id_membre = toadd_id_membre + ) + THEN + RAISE NOTICE 'The notes does not exist.'; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_membre( + toadd_id_membre INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % membre does not exist.', toadd_id_membre; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove a piece. + +CREATE OR REPLACE FUNCTION add_piece( + toadd_id_piece INT, + toadd_id_couleur INT, + toadd_id_forme INT, + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + INSERT INTO pieces VALUES (toadd_id_piece); + INSERT INTO etre VALUES (toadd_id_piece, toadd_id_marque); + INSERT INTO colorer VALUES (toadd_id_piece, toadd_id_couleur); + INSERT INTO etre_forme VALUES (toadd_id_forme, toadd_id_piece); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_piece( + torem_id_piece INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece does not exist. + SELECT is_existing_piece(torem_id_piece); + + -- If the piece is complex. + IF EXISTS(SELECT 1 FROM etre_complexe WHERE id_piece = torem_id_piece) THEN + DELETE FROM piece_complexe WHERE id_piece_complexe IN ( + SELECT id_piece_complexe + FROM etre_complexe + WHERE id_piece = torem_id_piece + ); + + DELETE FROM etre_complexe WHERE id_piece = torem_id_piece; + END IF; + + DELETE FROM colorer WHERE id_piece = torem_id_piece; + DELETE FROM avoir_motif WHERE id_piece = torem_id_piece; + DELETE FROM etre_forme WHERE id_piece = torem_id_piece; + DELETE FROM necessiter WHERE id_piece = torem_id_piece; + DELETE FROM acheter WHERE id_piece = torem_id_piece; + DELETE FROM perdre WHERE id_piece = torem_id_piece; + DELETE FROM contenir WHERE id_piece = torem_id_piece; + DELETE FROM etre WHERE id_piece = torem_id_piece; + DELETE FROM pieces WHERE id_piece = torem_id_piece; + + RAISE NOTICE '% piece sucessfully removed.', torem_id_piece; + +END; $$ +LANGUAGE plpgsql; + +-- To add a complex piece. + +CREATE OR REPLACE FUNCTION add_piece_comp( + toadd_id_piece INT, + toadd_id_piece_comp INT, + toadd_id_couleur INT, + toadd_id_forme INT, + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece is already complex. + IF EXISTS( + SELECT 1 FROM etre_complexe + WHERE id_piece_complexe = toadd_id_piece_comp + ) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + -- If the piece is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + INSERT INTO pieces VALUES (toadd_id_piece); + INSERT INTO piece_complexes VALUES (toadd_id_piece_comp); + INSERT INTO etre VALUES (toadd_id_piece, toadd_id_marque); + INSERT INTO etre_complexe VALUES (toadd_id_piece, toadd_id_piece_comp); + INSERT INTO colorer VALUES (toadd_id_piece, toadd_id_couleur); + INSERT INTO etre_forme VALUES (toadd_id_forme, toadd_id_piece); + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove a member. + +CREATE OR REPLACE FUNCTION add_membre( + toadd_id_membre INT, + toadd_nom_membre TEXT +) RETURNS VOID AS $$ +BEGIN + -- If the member is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % member is already in the db.', toadd_id_membre; + RETURN; + END IF; + + INSERT INTO membres VALUES (toadd_id_membre, toadd_nom_membre); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_membre( + torem_id_membre INT +) RETURNS VOID AS $$ +BEGIN + -- If the membre does not exist. + SELECT is_existing_membre(torem_id_membre); + + DELETE FROM acheter WHERE id_membre = torem_id_membre; + DELETE FROM enregister WHERE id_membre = torem_id_membre; + DELETE FROM messages WHERE id_membre = torem_id_membre; + DELETE FROM modeles WHERE id_membre = torem_id_membre; + DELETE FROM noter WHERE id_membre = torem_id_membre; + DELETE FROM perdre WHERE id_membre = torem_id_membre; + DELETE FROM membres WHERE id_membre = torem_id_membre; + + RAISE NOTICE '% membre sucessfully removed.', torem_id_membre; + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove messages. + +CREATE OR REPLACE FUNCTION add_message( + toadd_id_message INT, + toadd_contenu TEXT, + toadd_id_membre INT, + toadd_id_fil INT, + toadd_id_message_2 INT DEFAULT NULL +) RETURNS VOID AS $$ +BEGIN + -- If the message is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM messages WHERE id_message = toadd_id_message) THEN + RAISE NOTICE 'The % message is already in the db.', toadd_id_message; + RETURN; + END IF; + + -- To verify if the member exists. + IF NOT EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % membre does not exist.', toadd_id_membre; + RETURN; + END IF; + + -- To verify if the fil exists. + IF NOT EXISTS(SELECT 1 FROM fils WHERE id_fil = toadd_id_fil) THEN + RAISE NOTICE 'The % fil does not exist.', toadd_id_fil; + RETURN; + END IF; + + INSERT INTO messages VALUES ( + toadd_id_message, + toadd_contenu, + toadd_id_membre, + toadd_id_fil, + toadd_id_message_2 + ); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_message( + torem_id_message INT +) RETURNS VOID AS $$ +BEGIN + + -- If the message does not exist. + IF NOT EXISTS( + SELECT 1 FROM messages + WHERE id_messages = torem_id_messages + ) + THEN + RAISE NOTICE 'The % message does not exist.', torem_id_message; + RETURN; + END IF; + + DELETE FROM messages WHERE id_message = torem_id_message; + + RAISE NOTICE '% message sucessfully removed.', torem_id_message; + +END; $$ +LANGUAGE plpgsql; + +-- To change the name of a brand. + +CREATE OR REPLACE FUNCTION change_brand_name( + toadd_id_marque INT, + toadd_nom_marque TEXT +) RETURNS VOID AS $$ +BEGIN + + -- If the marque does not exist. + SELECT is_existing_marque(toadd_id_marque); + + UPDATE marques + SET nom_marque = toadd_nom_marque + WHERE id_marque = toadd_id_marque; + + RAISE NOTICE '% marque sucessfully changed.', toadd_id_marque; + +END; $$ +LANGUAGE plpgsql; + + +-- To change a notes. + +CREATE OR REPLACE FUNCTION change_note( + toadd_id_modele INT, + toadd_id_membre INT, + toadd_note TEXT +) RETURNS VOID AS $$ +BEGIN + + -- If the notes do not exist. + SELECT is_existing_note(toadd_id_modele, toadd_id_membre); + + UPDATE noter + SET note_noter = toadd_note + WHERE id_modele = toadd_id_modele + AND id_membre = toadd_id_membre; + + RAISE NOTICE 'Notes sucessfully changed'; + +END; $$ +LANGUAGE plpgsql; + +-- To add the pieces of a set to a member possession. + +CREATE OR REPLACE FUNCTION add_pieces_to_member( + toadd_id_membre INT, + toadd_id_boite INT +) RETURNS VOID AS $$ +DECLARE + var_id_piece INT; + var_quantite INT; +BEGIN + -- If the membre does not exist. + SELECT is_existing_piece(torem_id_membre); + + -- If the piece does not exist. + SELECT is_existing_piece(torem_id_piece); + + FOR var_id_piece, var_quantite IN + SELECT id_piece, quantite + FROM contenir + WHERE id_boite = toadd_id_boite + LOOP + + IF EXISTS(SELECT 1 FROM acheter + WHERE id_membre = toadd_id_membre + AND id_piece = toadd_id_piece) + THEN + + UPDATE acheter + SET quantite = quantite + var_quantite + WHERE id_membre = toadd_id_membre AND id_piece = toadd_id_piece; + + ELSE + + INSERT INTO acheter VALUES ( + toadd_id_membre, + var_id_piece, + var_quantite + ); + + END IF; + + END LOOP; + + RAISE NOTICE 'Pieces sucessfully added.'; + +END; $$ +LANGUAGE plpgsql; + +-- ============================================================================ + diff --git a/README.md b/README.md index b545aa5..d3a6780 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,25 @@ On aime les briques +## Sujet + +* [Projet: Travail et modalités de rendu Fichier](https://moodle.bordeaux-inp.fr/mod/resource/view.php?id=48191) +* [Sujet : Briques Fichier](https://moodle.bordeaux-inp.fr/mod/resource/view.php?id=132493) + +## Generating data + +``` +cd PostgreSQL/ +make generate_data +``` + ## Dev To run postgresql server + adminer in dev environnement (assuming you're running the backend manually with node), run : ``` +cd free-briques/ +make docker compose -f docker-compose.dev.yml up ``` diff --git a/back-end/Dockerfile.back b/back-end/Dockerfile.back index b98e101..3d3934e 100644 --- a/back-end/Dockerfile.back +++ b/back-end/Dockerfile.back @@ -6,11 +6,12 @@ WORKDIR /usr/src/back # Copy sources COPY . . -COPY .env.production .env # install deps, and pm2 to run the app RUN npm install -RUN npm install -g pm2 +# RUN npm install -g pm2 + +COPY .env.production .env # Compilation des fichiers TypeScript RUN npm run build @@ -23,4 +24,5 @@ RUN chmod -R u=rwx,g=,o= ./ EXPOSE 3000 # Start app -CMD ["pm2", "start", "dist/app.js", "--no-daemon"] +CMD ["npm", "run", "startonly"] +# CMD ["pm2", "start", "dist/app.js", "--no-daemon"] diff --git a/back-end/package.json b/back-end/package.json index f6c9560..84de437 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -4,8 +4,8 @@ "main": "dist/app.js", "scripts": { "startonly": "node dist/app.js", - "start": "tsc && node dist/app.js", - "build": "tsc && cp -r src/templates dist", + "start": "npm run build && node dist/app.js", + "build": "tsc && cp -r src/templates dist && cp -r src/static dist", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], diff --git a/back-end/src/app.ts b/back-end/src/app.ts index b9d635b..edd06a4 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -12,7 +12,7 @@ const app = express(); const port = process.env.PORT ?? 3000; -const log_format = (process.env.NODE_ENV === "dev") ? "dev": "combined"; +const log_format = (process.env.NODE_ENV === "dev") ? "dev" : "combined"; console.log("=== LOG CONFIG ==="); console.log(`log format: ${log_format}`); console.log("=== END LOG CONFIG ==="); @@ -30,5 +30,5 @@ app.use(morgan(log_format)); app.use(routes); app.listen(port, () => { - return console.log(`Briques is listening at http://localhost:${port}`); + return console.log(`Briques is listening at http://localhost:${port}`); }); diff --git a/back-end/src/controllers/auth.controller.ts b/back-end/src/controllers/auth.controller.ts index 0bb776b..af1249d 100644 --- a/back-end/src/controllers/auth.controller.ts +++ b/back-end/src/controllers/auth.controller.ts @@ -3,69 +3,69 @@ import bcrypt from 'bcrypt'; import { SignJWT } from 'jose'; import { JWT_ISSUER, JWT_AUDIENCE, JWT_SECRET, JWT_EXPIRATION, JWT_SECRET_KEY } from '../config/auth.config'; import { Member, User } from '../types/member'; -import { getMember, createMember, userAdapter } from './member.controller'; +import memberService from '../services/member.service'; import { Either, eitherLeft, eitherRight } from '../utils/utils'; const register = (req: Request, res: Response) => { - if (!req || !req.body || !req.body.name || !req.body.password) { - res.status(400).send(); - return; + if (!req || !req.body || !req.body.name || !req.body.password) { + res.status(400).send(); + return; + } + const name: string = req.body.name; + bcrypt.genSalt(10, (err, salt) => { + if (err) { + res.status(500).send(); + return; } - const name: string = req.body.name; - bcrypt.genSalt(10, (err, salt) => { - if (err) { - res.status(500).send(); - return; - } - bcrypt.hash(req.body.password, salt, async (err, hash) => { - if (err) { - res.status(500).send(); - return; - } - const member: Either = await createMember(name, hash); - if (member.hasRight) { - res.status(401).send(member.right); - return; - } - const token = await new SignJWT({ name }) - .setProtectedHeader({ alg: 'HS256' }) - .setAudience(JWT_AUDIENCE) - .setIssuer(JWT_ISSUER) - .setExpirationTime(JWT_EXPIRATION) - .sign(JWT_SECRET_KEY); - res.status(200).send({ member: userAdapter(member.left), token: token}); - }); + bcrypt.hash(req.body.password, salt, async (err, hash) => { + if (err) { + res.status(500).send(); + return; + } + const member: Either = await memberService.createMember(name, hash); + if (member.hasRight) { + res.status(401).send(member.right); + return; + } + const token = await new SignJWT({ name }) + .setProtectedHeader({ alg: 'HS256' }) + .setAudience(JWT_AUDIENCE) + .setIssuer(JWT_ISSUER) + .setExpirationTime(JWT_EXPIRATION) + .sign(JWT_SECRET_KEY); + res.status(200).send({ member: memberService.userAdapter(member.left), token: token }); }); + }); }; const login = async (req: Request, res: Response) => { - if (!req || !req.body || !req.body.name || !req.body.password) { - res.status(400).send(); - return; + if (!req || !req.body || !req.body.name || !req.body.password) { + res.status(400).send(); + return; + } + const name: string = req.body.name; + const member: Either = await memberService.getMember(name); + if (member.hasRight) { + res.send(member.right).send(); + return; + } + bcrypt.compare(req.body.password, member.left.password, async (err, r) => { + if (err) { + res.status(500).send(); + return; } - const name: string = req.body.name; - const member: Either = await getMember(name); - if (member.hasRight) { - res.send(member.right).send(); - return; + if (!r) { + res.status(401).send(); + return; } - bcrypt.compare(req.body.password, member.left.password, async (err, r) => { - if (err) { - res.status(500).send(); - return; - } - if (!r) { - res.status(401).send(); - return; - } - const token = await new SignJWT({ name }) - .setProtectedHeader({ alg: 'HS256' }) - .setAudience(JWT_AUDIENCE) - .setIssuer(JWT_ISSUER) - .setExpirationTime(JWT_EXPIRATION) - .sign(JWT_SECRET_KEY); - res.status(200).send({ member: userAdapter(member.left), token: token}); - }); + const token = await new SignJWT({ name }) + .setProtectedHeader({ alg: 'HS256' }) + .setAudience(JWT_AUDIENCE) + .setIssuer(JWT_ISSUER) + .setExpirationTime(JWT_EXPIRATION) + .sign(JWT_SECRET_KEY); + res.status(200).send({ member: memberService.userAdapter(member.left), token: token }); + }); }; export { register, login }; diff --git a/back-end/src/controllers/box.controller.ts b/back-end/src/controllers/box.controller.ts new file mode 100644 index 0000000..aaa2b91 --- /dev/null +++ b/back-end/src/controllers/box.controller.ts @@ -0,0 +1,55 @@ +import { RequestHandler } from "express"; +import boxService from "../services/box.service"; + +const boxByTitle: RequestHandler<{ title: string; }> = async (req, res) => { + const boxEither = await boxService.getBox(req.params.title); + + if (boxEither.hasRight) { + res.sendStatus(404); + return; + } + + const box = boxEither.left; + + res.render('box.ejs', { box }); +}; + +const allBoxes: RequestHandler = async (_req, res) => { + const boxes = await boxService.getAllBoxes(); + res.render('boxes.ejs', { boxes }); +}; + +const allBoxesFromDate: RequestHandler<{ date: string; }> = async (req, res) => { + const date = new Date(req.params.date); + // If the input isn't a date + if (isNaN(date.getTime())) { + res.sendStatus(400); + return; + } + + const boxes = await boxService.getAllBoxesFromDate(date); + res.render('boxes.ejs', { boxes }); +}; + +const boxById: RequestHandler<{ id: string; }> = async (req, res) => { + const id = parseInt(req.params.id); + const boxEither = await boxService.getBox(id); + + if (boxEither.hasRight) { + res.sendStatus(404); + return; + } + + const box = boxEither.left; + + res.render('box.ejs', { box }); +}; + +const boxController = { + boxByTitle, + allBoxes, + allBoxesFromDate, + boxById, +}; + +export default boxController; diff --git a/back-end/src/controllers/marque.controller.ts b/back-end/src/controllers/marque.controller.ts index 1ccabea..d7916e6 100644 --- a/back-end/src/controllers/marque.controller.ts +++ b/back-end/src/controllers/marque.controller.ts @@ -1,57 +1,25 @@ import { Request, Response } from 'express'; -import { new_client } from '../db/db_client'; import { Marque } from '../types/marque'; -import { Either, eitherLeft, eitherRight } from '../utils/utils'; - -const getMarque = async (idOrName: number | string): Promise> => { - const client = new_client(); - await client.connect(); - let res; - if (typeof idOrName !== 'number') { - res = await client.query("SELECT * FROM marques WHERE nom_marque=$1;", [`${idOrName}`]); - } else { - res = await client.query("SELECT * FROM marques WHERE id_marque=$1;", [idOrName]); - } - if (res.rows.length === 0) { - await client.end(); - return eitherRight("Does not exist."); - } - const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque }; - await client.end(); - - return eitherLeft(marque); -} - -const createMarque = async (name: string): Promise> => { - const gettingMarque = await getMarque(name); - if (!gettingMarque.hasRight) { - return eitherRight("Already in database."); - } - const client = new_client(); - await client.connect(); - const res = await client.query("INSERT INTO marques (nom_membre) VALUES ($1) RETURNING *;", [`${name}`]); - if (res.rows.length === 0) { - await client.end(); - return eitherRight("Something went wrong"); - } - const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque }; - await client.end(); - return eitherLeft(marque); -}; +import marqueService from '../services/marque.service'; +import { Either } from '../utils/utils'; const register = async (req: Request, res: Response) => { - if (!req || !req.body || !req.body.name) { - res.status(400).send(); - return; - } - const name: string = req.body.name; - const marque: Either = await createMarque(name); - if (marque.hasRight) { - res.status(403).send(marque.right); - return; - } + if (!req || !req.body || !req.body.name) { + res.status(400).send(); + return; + } + const name: string = req.body.name; + const marque: Either = await marqueService.createMarque(name); + if (marque.hasRight) { + res.status(403).send(marque.right); + return; + } - res.status(200).send(marque); + res.status(200).send(marque); } -export { register }; +const marqueController = { + register +}; + +export default marqueController; diff --git a/back-end/src/controllers/member.controller.ts b/back-end/src/controllers/member.controller.ts index 5b89c25..b47db29 100644 --- a/back-end/src/controllers/member.controller.ts +++ b/back-end/src/controllers/member.controller.ts @@ -1,48 +1,42 @@ -import { new_client } from '../db/db_client'; -import { Member, User } from '../types/member'; -import { Either, eitherLeft, eitherRight } from '../utils/utils'; +import { RequestHandler } from "express"; +import memberService from "../services/member.service"; -const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" }); -const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" }); +const memberByName: RequestHandler<{ name: string; }> = async (req, res) => { + const memberEither = await memberService.getMember(req.params.name); -const getMember = async (idOrName: number | string): Promise> => { - const client = new_client(); - await client.connect(); - let res; - if (typeof idOrName !== 'number') { - res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]); - } else { - res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]); - } - if (res.rows.length === 0) { - await client.end(); - return eitherRight("Does not exist."); - } - const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre }; - await client.end(); + if (memberEither.hasRight) { + res.sendStatus(404); + return; + } - return eitherLeft(member); -} + const member = memberEither.left; -const createMember = async (name: string, passwd: string): Promise> => { - const gettingMember = await getMember(name); - if (!gettingMember.hasRight) { - return eitherRight("Already in database."); - } - const client = new_client(); - await client.connect(); - const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]); - if (res.rows.length === 0) { - await client.end(); - return eitherRight("Something went wrong"); - } - const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre }; - await client.end(); - return eitherLeft(member); -} + res.render('member.ejs', { member }); +}; -function userAdapter(member: Member): User { - return { id_member: member.id_member, name: member.name }; -} +const allMembers: RequestHandler = async (_req, res) => { + const members = await memberService.getAllMembers(); + res.render('members.ejs', { members }); +}; -export { getDefaultUser, getDefaultMember, getMember, createMember, userAdapter }; +const memberById: RequestHandler<{ id: string; }> = async (req, res) => { + const id = parseInt(req.params.id); + const memberEither = await memberService.getMember(id); + + if (memberEither.hasRight) { + res.sendStatus(404); + return; + } + + const member = memberEither.left; + + res.render('member.ejs', { member }); +}; + +const memberController = { + memberByName, + memberById, + allMembers, +}; + +export default memberController; diff --git a/back-end/src/controllers/model.controller.ts b/back-end/src/controllers/model.controller.ts new file mode 100644 index 0000000..17b2ffb --- /dev/null +++ b/back-end/src/controllers/model.controller.ts @@ -0,0 +1,42 @@ +import { RequestHandler } from "express"; +import modelService from "../services/model.service"; + +const modelByName: RequestHandler<{ name: string; }> = async (req, res) => { + const modelEither = await modelService.getModel(req.params.name); + + if (modelEither.hasRight) { + res.sendStatus(404); + return; + } + + const model = modelEither.left; + + res.render('model.ejs', { model }); +}; + +const allModels: RequestHandler = async (_req, res) => { + const models = await modelService.getAllModels(); + res.render('models.ejs', { models }); +}; + +const modelById: RequestHandler<{ id: string; }> = async (req, res) => { + const id = parseInt(req.params.id); + const modelEither = await modelService.getModel(id); + + if (modelEither.hasRight) { + res.sendStatus(404); + return; + } + + const model = modelEither.left; + + res.render('model.ejs', { model }); +}; + +const modelController = { + modelByName, + allModels, + modelById, +}; + +export default modelController; diff --git a/back-end/src/middlewares/auth.middleware.ts b/back-end/src/middlewares/auth.middleware.ts index 2639a78..8a46680 100644 --- a/back-end/src/middlewares/auth.middleware.ts +++ b/back-end/src/middlewares/auth.middleware.ts @@ -1,48 +1,48 @@ import { Request, Response } from 'express'; import { jwtVerify } from 'jose'; import { JWT_SECRET_KEY } from '../config/auth.config'; -import { getMember } from '../controllers/member.controller'; +import memberService from '../services/member.service'; import { Member } from '../types/member'; import { Either } from '../utils/utils'; const extractBearerToken = (headerValue: string) => { - const matches = headerValue.match(/(bearer)\s+(\S+)/i); - return matches && matches[2]; + const matches = headerValue.match(/(bearer)\s+(\S+)/i); + return matches && matches[2]; } const getUsername = async (req: Request, res: Response, next: () => void) => { - const token = req.headers.authorization && extractBearerToken(req.headers.authorization); + const token = req.headers.authorization && extractBearerToken(req.headers.authorization); - if (!token) { - next(); - return; - } - try { - const { payload } = await jwtVerify(token, JWT_SECRET_KEY); - const name: string = payload.name as string; - const member: Either = await getMember(name); - - if (!member.hasRight) { - res.locals.user = { - id_member: member.left.id_member, - name: member.left.name - } - - next() - } else { - res.status(401).send(member.right) - } - } catch (e) { - res.status(401).send(); + if (!token) { + next(); + return; + } + try { + const { payload } = await jwtVerify(token, JWT_SECRET_KEY); + const name: string = payload.name as string; + const member: Either = await memberService.getMember(name); + + if (!member.hasRight) { + res.locals.user = { + id_member: member.left.id_member, + name: member.left.name + } + + next() + } else { + res.status(401).send(member.right) } + } catch (e) { + res.status(401).send(); + } } function verifyAuthentication(req: Request, res: Response, next: () => void) { - if (!res.locals.user) { - res.status(401).send(); - return; - } - next(); + if (!res.locals.user) { + res.status(401).send(); + return; + } + next(); } export { getUsername, verifyAuthentication }; diff --git a/back-end/src/routes/box.route.ts b/back-end/src/routes/box.route.ts new file mode 100644 index 0000000..2df615e --- /dev/null +++ b/back-end/src/routes/box.route.ts @@ -0,0 +1,14 @@ +import express from 'express'; +import boxController from '../controllers/box.controller'; + +const boxRouter = express.Router(); + +boxRouter.get("/", boxController.allBoxes); + +boxRouter.get("/from/:date", boxController.allBoxesFromDate); + +boxRouter.get("/:title", boxController.boxByTitle); + +boxRouter.get("/byid/:id", boxController.boxById); + +export default boxRouter; diff --git a/back-end/src/routes/index.ts b/back-end/src/routes/index.ts index 8f50368..3fd044b 100644 --- a/back-end/src/routes/index.ts +++ b/back-end/src/routes/index.ts @@ -1,24 +1,28 @@ import express from 'express'; +import path from 'path'; import db from '../db'; import { getUsername, verifyAuthentication } from '../middlewares/auth.middleware' import authRoute from './auth.route' import marquesRoute from './marque.route' import piecesRoute from './piece.route' +import memberRouter from './member.route' +import modelRouter from './model.route'; +import boxRouter from './box.route'; const routes = express.Router(); -routes.get('/', async (_req, res) => { - const message = await db.example_request(); - res.send(message); -}); - -routes.get("/message", async (_req, res) => { - const message = await db.example_request(); - res.render('index.ejs', { message }); -}); +routes.use("/static", express.static(path.join(__dirname, '../static'))); routes.use("/auth", authRoute); routes.use("/marques", getUsername, verifyAuthentication, marquesRoute); routes.use("/pieces", getUsername, verifyAuthentication, piecesRoute); +routes.use("/membres", memberRouter); +routes.use("/models", modelRouter); +routes.use("/boxes", boxRouter); + +// 404 fallback +routes.get("*", (_req, res) => { + res.render('notfound.ejs'); +}); export default routes; diff --git a/back-end/src/routes/marque.route.ts b/back-end/src/routes/marque.route.ts index b0619e5..4967d8f 100644 --- a/back-end/src/routes/marque.route.ts +++ b/back-end/src/routes/marque.route.ts @@ -1,8 +1,8 @@ import express from 'express'; -import { register } from '../controllers/marque.controller'; +import marqueController from '../controllers/marque.controller'; const router = express.Router(); -router.post('/register', register); +router.post('/register', marqueController.register); export default router; diff --git a/back-end/src/routes/member.route.ts b/back-end/src/routes/member.route.ts new file mode 100644 index 0000000..f5d52ab --- /dev/null +++ b/back-end/src/routes/member.route.ts @@ -0,0 +1,12 @@ +import express from 'express'; +import memberController from '../controllers/member.controller'; + +const router = express.Router(); + +router.get("/", memberController.allMembers); + +router.get("/:name", memberController.memberByName); + +router.get("/byid/:id", memberController.memberById); + +export default router; diff --git a/back-end/src/routes/model.route.ts b/back-end/src/routes/model.route.ts new file mode 100644 index 0000000..fa200b0 --- /dev/null +++ b/back-end/src/routes/model.route.ts @@ -0,0 +1,12 @@ +import express from 'express'; +import modelController from '../controllers/model.controller'; + +const modelRouter = express.Router(); + +modelRouter.get("/", modelController.allModels); + +modelRouter.get("/:name", modelController.modelByName); + +modelRouter.get("/byid/:id", modelController.modelById); + +export default modelRouter; diff --git a/back-end/src/services/box.service.ts b/back-end/src/services/box.service.ts new file mode 100644 index 0000000..48db42b --- /dev/null +++ b/back-end/src/services/box.service.ts @@ -0,0 +1,68 @@ +import { new_client } from '../db/db_client'; +import { Box } from '../types/box'; +import { Either, eitherLeft, eitherRight } from '../utils/utils'; + +type DBBox = { + id_boite: number; + titre_boite: string; + date_boite: string; +}; + +function db2box(data: DBBox): Box { + const box: Box = { + id: data.id_boite, + title: data.titre_boite, + date: new Date(data.date_boite), + }; + + return box; +} + +const getBox = async (idOrTitle: number | string): Promise> => { + const client = new_client(); + await client.connect(); + let res; + if (typeof idOrTitle !== 'number') { + res = await client.query("SELECT * FROM boites WHERE titre_boite=$1;", [`${idOrTitle}`]); + } else { + res = await client.query("SELECT * FROM boites WHERE id_boite=$1;", [idOrTitle]); + } + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Does not exist."); + } + const box = db2box(res.rows[0]); + await client.end(); + + return eitherLeft(box); +} + +const getAllBoxes = async () => { + const client = new_client(); + await client.connect(); + const res = await client.query("SELECT * FROM boites"); + await client.end(); + return res.rows.map(db2box); +} + +const getAllBoxesFromDate = async (date: Date) => { + const client = new_client(); + await client.connect(); + + const YYYY = date.getFullYear(); + const MM = date.getMonth() + 1; + const DD = date.getDate(); + const dateString = `${YYYY}-${MM}-${DD}`; + + const res = await client.query("SELECT * FROM boites WHERE date_boite > $1", [dateString]); + await client.end(); + return res.rows.map(db2box); +} + +const boxService = { + getBox, + getAllBoxes, + getAllBoxesFromDate, +}; + +export default boxService; diff --git a/back-end/src/services/marque.service.ts b/back-end/src/services/marque.service.ts new file mode 100644 index 0000000..9381364 --- /dev/null +++ b/back-end/src/services/marque.service.ts @@ -0,0 +1,47 @@ +import { Request, Response } from 'express'; +import { new_client } from '../db/db_client'; +import { Marque } from '../types/marque'; +import { Either, eitherLeft, eitherRight } from '../utils/utils'; + +const getMarque = async (idOrName: number | string): Promise> => { + const client = new_client(); + await client.connect(); + let res; + if (typeof idOrName !== 'number') { + res = await client.query("SELECT * FROM marques WHERE nom_marque=$1;", [`${idOrName}`]); + } else { + res = await client.query("SELECT * FROM marques WHERE id_marque=$1;", [idOrName]); + } + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Does not exist."); + } + const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque }; + await client.end(); + + return eitherLeft(marque); +} + +const createMarque = async (name: string): Promise> => { + const gettingMarque = await getMarque(name); + if (!gettingMarque.hasRight) { + return eitherRight("Already in database."); + } + const client = new_client(); + await client.connect(); + const res = await client.query("INSERT INTO marques (nom_membre) VALUES ($1) RETURNING *;", [`${name}`]); + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Something went wrong"); + } + const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque }; + await client.end(); + return eitherLeft(marque); +}; + +const marqueService = { + getMarque, + createMarque +}; + +export default marqueService; diff --git a/back-end/src/services/member.service.ts b/back-end/src/services/member.service.ts new file mode 100644 index 0000000..f564c2d --- /dev/null +++ b/back-end/src/services/member.service.ts @@ -0,0 +1,80 @@ +import { new_client } from '../db/db_client'; +import { Member, User } from '../types/member'; +import { Either, eitherLeft, eitherRight } from '../utils/utils'; + +type DBMembre = { + id_membre: number; + nom_membre: string; + mdp_membre: string; +}; + +function db2member(data: DBMembre) { + const member: Member = { + id_member: data.id_membre, + name: data.nom_membre, + password: data.mdp_membre, + }; + return member; +} + +const getMember = async (idOrName: number | string): Promise> => { + const client = new_client(); + await client.connect(); + let res; + if (typeof idOrName !== 'number') { + res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]); + } else { + res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]); + } + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Does not exist."); + } + const member = db2member(res.rows[0]); + await client.end(); + + return eitherLeft(member); +} + +const getAllMembers = async () => { + const client = new_client(); + await client.connect(); + const res = await client.query("SELECT * FROM membres"); + await client.end(); + return res.rows.map(db2member); +} + +const createMember = async (name: string, passwd: string): Promise> => { + const gettingMember = await getMember(name); + if (!gettingMember.hasRight) { + return eitherRight("Already in database."); + } + const client = new_client(); + await client.connect(); + const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]); + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Something went wrong"); + } + const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre }; + await client.end(); + return eitherLeft(member); +} + +const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" }); +const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" }); + +function userAdapter(member: Member): User { + return { id_member: member.id_member, name: member.name }; +} + +const memberService = { + getMember, + createMember, + getDefaultUser, + getDefaultMember, + userAdapter, + getAllMembers, +}; + +export default memberService; diff --git a/back-end/src/services/model.service.ts b/back-end/src/services/model.service.ts new file mode 100644 index 0000000..881ddd0 --- /dev/null +++ b/back-end/src/services/model.service.ts @@ -0,0 +1,81 @@ +import { new_client } from '../db/db_client'; +import { Model } from '../types/model'; +import { Either, eitherLeft, eitherRight } from '../utils/utils'; + +type DBModel = { + id_modele: number; + nom_modele: string; + url_notice_modele: string; + id_membre: number; + id_modele_2: number; +}; + +function db2Model(data: DBModel) { + const model: Model = { + id: data.id_modele, + name: data.nom_modele, + url: data.url_notice_modele, + creator: data.id_membre, + inheritFrom: data.id_modele_2, + }; + + return model; +} + +const getModel = async (idOrName: number | string): Promise> => { + const client = new_client(); + await client.connect(); + let res; + if (typeof idOrName !== 'number') { + res = await client.query("SELECT * FROM modeles WHERE nom_modele=$1;", [`${idOrName}`]); + } else { + res = await client.query("SELECT * FROM modeles WHERE id_modele=$1;", [idOrName]); + } + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Does not exist."); + } + const model = db2Model(res.rows[0]); + await client.end(); + + return eitherLeft(model); +} + +const getAllModels = async () => { + const client = new_client(); + await client.connect(); + const res = await client.query("SELECT * FROM modeles"); + await client.end(); + return res.rows.map(db2Model); +} + +const createModel = async (name: string, url: string, creator: number, inheritFrom: number): Promise> => { + const gettingModel = await getModel(name); + if (!gettingModel.hasRight) { + return eitherRight("Already in database."); + } + const client = new_client(); + await client.connect(); + const res = await client.query( + "INSERT INTO modeles \ + (nom_modele, url_notice_modele, id_membre, id_modele_2) \ + VALUES ($1, $2, $3, $4) \ + RETURNING *;", + [`${name}`, `${url}`, `${creator}`, `${inheritFrom}`]); + + if (res.rows.length === 0) { + await client.end(); + return eitherRight("Something went wrong"); + } + const model: Model = db2Model(res.rows[0]); + await client.end(); + return eitherLeft(model); +} + +const modelService = { + getModel, + getAllModels, + createModel, +}; + +export default modelService; diff --git a/back-end/src/static/css/colors.css b/back-end/src/static/css/colors.css new file mode 100644 index 0000000..3afd1f7 --- /dev/null +++ b/back-end/src/static/css/colors.css @@ -0,0 +1,7 @@ +:root { + --fg: #161925; + --bg: #FDFFFC; + --blue: #235789; + --red: #C1292E; + --yellow: #F1D302; +} diff --git a/back-end/src/static/css/header.css b/back-end/src/static/css/header.css new file mode 100644 index 0000000..0910001 --- /dev/null +++ b/back-end/src/static/css/header.css @@ -0,0 +1,22 @@ +.header nav ul { + display: flex; + list-style: none; +} + +.header { + background-color: var(--fg); + color: var(--bg); +} + +.header a { + color: var(--bg); +} + +.header li { + padding: 2rem 1rem; +} + +.header li:hover { + background-color: var(--bg); + color: var(--fg); +} diff --git a/back-end/src/static/css/reset.css b/back-end/src/static/css/reset.css new file mode 100644 index 0000000..b3330a1 --- /dev/null +++ b/back-end/src/static/css/reset.css @@ -0,0 +1,15 @@ +* { + margin: 0; + padding: 0; + outline: 0; + border: 0; + font-family: sans-serif; +} + +pre, code { + font-family: monospace; +} + +hr { + border-bottom: 2px solid var(--fg); +} diff --git a/back-end/src/templates/box.ejs b/back-end/src/templates/box.ejs new file mode 100644 index 0000000..c4744d1 --- /dev/null +++ b/back-end/src/templates/box.ejs @@ -0,0 +1,25 @@ + + + + + + + + <%= box.title %> + + + <%- include('partials/links.ejs') %> + + + + <%- include('partials/header.ejs') %> +

+ <%= box.title %> +

+
+		id          : <%= box.id %>
+		date        : <%= box.date %>
+	
+ + + diff --git a/back-end/src/templates/boxes.ejs b/back-end/src/templates/boxes.ejs new file mode 100644 index 0000000..c1ef28f --- /dev/null +++ b/back-end/src/templates/boxes.ejs @@ -0,0 +1,39 @@ + + + + + + + Liste des boîtes + + + <%- include('partials/links.ejs') %> + + + <%- include('partials/header.ejs') %> + +

+ Liste des boîtes +

+ +
+ + + +
+ +
+ + + + + + diff --git a/back-end/src/templates/index.ejs b/back-end/src/templates/index.ejs index f875856..7c6d12f 100644 --- a/back-end/src/templates/index.ejs +++ b/back-end/src/templates/index.ejs @@ -1,13 +1,21 @@ + Leohl !dworl + + <%- include('partials/links.ejs') %> + <%- include('partials/header.ejs') %>

Naisu

-

<%= message %>

-

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sapiente quod dicta molestiae harum veniam iste, nostrum nemo earum commodi fugit modi, ratione obcaecati, beatae ullam. Debitis ducimus dignissimos rem at.

+

+ <%= message %> +

+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sapiente quod dicta molestiae harum veniam iste, nostrum + nemo earum commodi fugit modi, ratione obcaecati, beatae ullam. Debitis ducimus dignissimos rem at.

+ diff --git a/back-end/src/templates/member.ejs b/back-end/src/templates/member.ejs new file mode 100644 index 0000000..a5a8ad0 --- /dev/null +++ b/back-end/src/templates/member.ejs @@ -0,0 +1,23 @@ + + + + + + + + <%= member.name %> + + + <%- include('partials/links.ejs') %> + + + + <%- include('partials/header.ejs') %> +

+ <%= member.name %> +

+

id: <%= member.id_member%> +

+ + + diff --git a/back-end/src/templates/members.ejs b/back-end/src/templates/members.ejs new file mode 100644 index 0000000..b8f26d3 --- /dev/null +++ b/back-end/src/templates/members.ejs @@ -0,0 +1,31 @@ + + + + + + + Liste des membres + + + <%- include('partials/links.ejs') %> + + + <%- include('partials/header.ejs') %> + +

+ Liste des membres +

+ + + + + + diff --git a/back-end/src/templates/model.ejs b/back-end/src/templates/model.ejs new file mode 100644 index 0000000..81e1d2b --- /dev/null +++ b/back-end/src/templates/model.ejs @@ -0,0 +1,27 @@ + + + + + + + <%= model.name %> + + + <%- include('partials/links.ejs') %> + + + <%- include('partials/header.ejs') %> + +

+ <%= model.name %> +

+ +
+		id          : <%= model.id %>
+		url         : <%= model.url %>
+		creator     : <%= model.creator %>
+		inheritFrom : <%= model.inheritFrom %>
+	
+ + + diff --git a/back-end/src/templates/models.ejs b/back-end/src/templates/models.ejs new file mode 100644 index 0000000..81b3445 --- /dev/null +++ b/back-end/src/templates/models.ejs @@ -0,0 +1,31 @@ + + + + + + + Liste des modeles + + + <%- include('partials/links.ejs') %> + + + <%- include('partials/header.ejs') %> + +

+ Liste des modeles +

+ + + + + + diff --git a/back-end/src/templates/notfound.ejs b/back-end/src/templates/notfound.ejs new file mode 100644 index 0000000..d0314d5 --- /dev/null +++ b/back-end/src/templates/notfound.ejs @@ -0,0 +1,19 @@ + + + + + + + 404 -- Not Found + + + <%- include('partials/links.ejs') %> + + + <%- include('partials/header.ejs') %> + +

+ ¯\_(ツ)_/¯ +

+ + diff --git a/back-end/src/templates/partials/header.ejs b/back-end/src/templates/partials/header.ejs new file mode 100644 index 0000000..df7c757 --- /dev/null +++ b/back-end/src/templates/partials/header.ejs @@ -0,0 +1,23 @@ +
+ +
diff --git a/back-end/src/templates/partials/links.ejs b/back-end/src/templates/partials/links.ejs new file mode 100644 index 0000000..e29f138 --- /dev/null +++ b/back-end/src/templates/partials/links.ejs @@ -0,0 +1,3 @@ + + + diff --git a/back-end/src/types/box.ts b/back-end/src/types/box.ts new file mode 100644 index 0000000..32012fb --- /dev/null +++ b/back-end/src/types/box.ts @@ -0,0 +1,7 @@ +type Box = { + id: number; + title: string; + date: Date; +}; + +export { Box }; diff --git a/back-end/src/types/marque.ts b/back-end/src/types/marque.ts index f234aae..bd896ad 100644 --- a/back-end/src/types/marque.ts +++ b/back-end/src/types/marque.ts @@ -1,6 +1,6 @@ type Marque = { - id_marque: number, - name: string + id_marque: number, + name: string }; export { Marque }; diff --git a/back-end/src/types/member.ts b/back-end/src/types/member.ts index 92b2319..53b898b 100644 --- a/back-end/src/types/member.ts +++ b/back-end/src/types/member.ts @@ -1,6 +1,6 @@ type User = { - id_member: number, - name: string + id_member: number, + name: string } type Member = User & { password: string }; diff --git a/back-end/src/types/model.ts b/back-end/src/types/model.ts new file mode 100644 index 0000000..c7e5d7a --- /dev/null +++ b/back-end/src/types/model.ts @@ -0,0 +1,9 @@ +type Model = { + id: number; + name: string; + url: string; + creator: number; + inheritFrom: number; +}; + +export { Model }; diff --git a/back-end/src/utils/utils.ts b/back-end/src/utils/utils.ts index 3fa852e..2a66b0b 100644 --- a/back-end/src/utils/utils.ts +++ b/back-end/src/utils/utils.ts @@ -1,7 +1,7 @@ type Either = { - hasRight: boolean, - left: T, - right: U + hasRight: boolean, + left: T, + right: U }; type Error = { @@ -12,11 +12,11 @@ type Error = { type Result = Error | T; function eitherLeft(left: T): Either { - return { hasRight: false, left: left, right: undefined }; + return { hasRight: false, left: left, right: undefined }; } function eitherRight(right: U): Either { - return { hasRight: true, left: undefined, right: right }; + return { hasRight: true, left: undefined, right: right }; } function eitherFormatError(either: Either): Result { diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 8692a29..f4a270e 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -2,10 +2,10 @@ services: database: hostname: database container_name: briques_postgres + env_file: back-end/.env build: context: ./PostgreSQL dockerfile: Dockerfile - restart: always environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER} @@ -17,6 +17,5 @@ services: adminer: image: adminer - restart: always ports: - 8080:8080 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a91d176..ada642e 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -6,6 +6,7 @@ services: context: ./PostgreSQL dockerfile: Dockerfile restart: always + env_file: back-end/.env.production environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER}