From 252dd7d899b7a0deea1537cc5d2d48b825afffb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Thu, 13 Dec 2018 21:25:24 +0100 Subject: [PATCH 1/1] Initial commit published for NUR --- .gitignore | 2 + LICENSE | 24 + config/README.md | 1 + config/nixRoot | 1 + config/overlays.nix | 1 + default.nix | 11 + fetch_version | 173 + lib/node-env.nix | 542 + libs.nix | 78 + modules/default.nix | 13 + modules/myids.nix | 22 + .../private/buildbot/common/build_helpers.py | 256 + modules/private/buildbot/common/master.cfg | 69 + modules/private/buildbot/default.nix | 198 + .../buildbot/projects/caldance/__init__.py | 190 + .../projects/cryptoportfolio/__init__.py | 169 + .../buildbot/projects/test/__init__.py | 188 + modules/private/certificates.nix | 52 + modules/private/databases/default.nix | 63 + modules/private/databases/mariadb.nix | 149 + .../private/databases/openldap/default.nix | 154 + .../private/databases/openldap/immae.schema | 167 + modules/private/databases/postgresql.nix | 220 + modules/private/databases/redis.nix | 57 + modules/private/default.nix | 65 + modules/private/dns.nix | 132 + modules/private/ftp.nix | 118 + modules/private/gitolite/default.nix | 63 + .../private/gitolite/gitolite_ldap_groups.sh | 15 + modules/private/irc.nix | 54 + modules/private/mail.nix | 13 + modules/private/mpd.nix | 56 + modules/private/pub/default.nix | 52 + modules/private/pub/restrict | 64 + modules/private/pub/tmux.restrict.conf | 43 + modules/private/ssh/default.nix | 40 + modules/private/ssh/ldap_authorized_keys.sh | 152 + modules/private/system.nix | 30 + modules/private/system/eldiron.nix | 63 + modules/private/tasks/default.nix | 327 + modules/private/tasks/www/index.php | 157 + modules/private/websites/aten/builder.nix | 102 + modules/private/websites/aten/integration.nix | 32 + modules/private/websites/aten/production.nix | 34 + .../capitaines/mastodon_static/index.html | 29 + .../capitaines/mastodon_static/oops.png | Bin 0 -> 120305 bytes .../websites/capitaines/production.nix | 44 + modules/private/websites/chloe/builder.nix | 102 + .../private/websites/chloe/config/chmod.php | 4 + .../private/websites/chloe/config/connect.php | 15 + .../private/websites/chloe/config/ldap.php | 9 + .../private/websites/chloe/integration.nix | 36 + modules/private/websites/chloe/production.nix | 38 + modules/private/websites/commons/adminer.nix | 21 + .../websites/connexionswing/builder.nix | 163 + .../websites/connexionswing/integration.nix | 36 + .../websites/connexionswing/production.nix | 38 + modules/private/websites/default.nix | 265 + .../websites/denisejerome/production.nix | 31 + .../private/websites/emilia/moodle/pause.html | 48 + .../private/websites/emilia/production.nix | 66 + modules/private/websites/florian/app.nix | 36 + .../private/websites/florian/builder_app.nix | 152 + .../private/websites/florian/integration.nix | 34 + .../private/websites/florian/production.nix | 34 + modules/private/websites/immae/production.nix | 64 + modules/private/websites/immae/release.nix | 39 + modules/private/websites/immae/temp.nix | 36 + modules/private/websites/leila/production.nix | 82 + .../websites/ludivinecassal/builder.nix | 155 + .../websites/ludivinecassal/integration.nix | 32 + .../websites/ludivinecassal/production.nix | 33 + .../private/websites/nassime/production.nix | 34 + .../websites/naturaloutil/production.nix | 96 + .../private/websites/papa/surveillance.nix | 49 + .../private/websites/piedsjaloux/builder.nix | 144 + .../websites/piedsjaloux/integration.nix | 32 + .../websites/piedsjaloux/production.nix | 34 + .../private/websites/tools/cloud/default.nix | 188 + .../private/websites/tools/dav/davical.nix | 139 + .../private/websites/tools/dav/default.nix | 53 + modules/private/websites/tools/db/default.nix | 21 + .../websites/tools/diaspora/default.nix | 181 + .../private/websites/tools/ether/default.nix | 175 + .../private/websites/tools/git/default.nix | 45 + modules/private/websites/tools/git/gitweb.nix | 64 + .../private/websites/tools/git/mantisbt.nix | 96 + .../websites/tools/mastodon/default.nix | 128 + .../websites/tools/mgoblin/default.nix | 122 + .../websites/tools/peertube/default.nix | 179 + .../private/websites/tools/tools/adminer.nix | 47 + .../private/websites/tools/tools/default.nix | 302 + .../private/websites/tools/tools/dokuwiki.nix | 61 + .../private/websites/tools/tools/kanboard.nix | 86 + modules/private/websites/tools/tools/ldap.nix | 74 + .../private/websites/tools/tools/rainloop.nix | 59 + .../private/websites/tools/tools/rompr.nix | 77 + .../websites/tools/tools/roundcubemail.nix | 121 + .../private/websites/tools/tools/shaarli.nix | 65 + .../private/websites/tools/tools/ttrss.nix | 131 + .../private/websites/tools/tools/wallabag.nix | 148 + modules/private/websites/tools/tools/ympd.nix | 40 + .../private/websites/tools/tools/yourls.nix | 93 + modules/secrets.nix | 61 + modules/webapps/diaspora.nix | 171 + modules/webapps/etherpad-lite.nix | 158 + modules/webapps/mastodon.nix | 223 + modules/webapps/mediagoblin.nix | 237 + modules/webapps/peertube.nix | 105 + modules/webapps/webstats/default.nix | 81 + modules/webapps/webstats/goaccess.conf | 99 + modules/websites/default.nix | 199 + modules/websites/httpd-service-builder.nix | 746 + modules/websites/nosslVhost/index.html | 11 + nix_path_env | 11 + nixops/.gitignore | 1 + nixops/Makefile | 54 + nixops/custom_nixops.nix | 2 + nixops/eldiron.nix | 9 + nixops/migrate_hetzner.md | 20 + nixops/scripts/nixops_wrap | 36 + nixops/scripts/pull_deployment | 34 + nixops/scripts/pull_environment | 13 + nixops/scripts/push_deployment | 14 + nixops/scripts/push_environment | 13 + nixops/scripts/setup | 163 + nixops/ssh/config | 5 + nixops/state/.gitkeep | 0 overlays/bitlbee/bitlbee_long_nicks.patch | 56 + overlays/bitlbee/default.nix | 5 + overlays/bundix/default.nix | 7 + overlays/databases/mysql/default.nix | 12 + overlays/databases/postgresql/default.nix | 11 + .../postgresql_run_socket_path.patch | 12 + overlays/default.nix | 31 + overlays/dwm/default.nix | 7 + overlays/dwm/dwm_config.h | 98 + overlays/elinks/default.nix | 14 + overlays/elinks/elinks.json | 15 + overlays/environments/default.nix | 3 + overlays/environments/immae-eu.nix | 116 + overlays/gitweb/default.nix | 7 + overlays/gitweb/theme/git-favicon.png | Bin 0 -> 1125 bytes overlays/gitweb/theme/git-logo.png | Bin 0 -> 2412 bytes overlays/gitweb/theme/gitweb.css | 783 + overlays/gitweb/theme/gitweb.js | 27 + overlays/goaccess/default.nix | 13 + overlays/kanboard/default.nix | 18 + overlays/ldapvi/default.nix | 3 + overlays/ldapvi/ldapvi.json | 14 + overlays/lesspipe/default.nix | 5 + overlays/neomutt/default.nix | 8 + overlays/nixops/default.nix | 7 + overlays/pass/default.nix | 8 + overlays/pass/pass-fix-pass-init.patch | 42 + overlays/pass/pass.json | 14 + overlays/pelican/default.nix | 6 + overlays/pelican/pelican.json | 15 + overlays/profanity/default.nix | 9 + overlays/python-packages/buildbot.nix | 8 + overlays/python-packages/default.nix | 28 + overlays/sc-im/default.nix | 9 + overlays/shaarli/default.nix | 10 + overlays/shaarli/shaarli_ldap.patch | 420 + overlays/slrn/default.nix | 11 + overlays/taskwarrior/default.nix | 13 + overlays/vit/default.nix | 8 + overlays/vit/vit.json | 15 + overlays/weboob/default.nix | 15 + overlays/weechat/default.nix | 14 + overlays/ympd/default.nix | 5 + overlays/ympd/ympd-password-env.patch | 23 + overlays/ympd/ympd.json | 15 + pkgs/bitlbee-mastodon/default.nix | 28 + pkgs/boinctui/default.nix | 20 + pkgs/cnagios/cnagios.json | 15 + pkgs/cnagios/default.nix | 22 + pkgs/composer-env/default.nix | 280 + pkgs/crypto/cardano/daedalus.json | 15 + pkgs/crypto/cardano/default.nix | 29 + pkgs/crypto/iota-cli-app/default.nix | 20 + pkgs/crypto/iota-cli-app/iota-cli-app.json | 15 + pkgs/crypto/iota-cli-app/node-packages.nix | 1814 +++ pkgs/crypto/sia/default.nix | 19 + pkgs/default.nix | 51 + pkgs/duply/default.nix | 40 + pkgs/flrn/default.nix | 13 + pkgs/flrn/flrn.json | 15 + pkgs/genius/default.nix | 19 + pkgs/mpd_0_21/default.nix | 152 + pkgs/mtop/default.nix | 24 + pkgs/mutt-ics/default.nix | 5 + pkgs/mutt-ics/mutt-ics.json | 15 + pkgs/muttprint/0.73-4.diff.gz | Bin 0 -> 16525 bytes pkgs/muttprint/default.nix | 44 + pkgs/muttprint/regex.patch | 11 + pkgs/muttprint/two_edge.patch | 19 + pkgs/nagios-cli/default.nix | 2 + pkgs/nagios-cli/nagios-cli.json | 15 + pkgs/nagnu/default.nix | 12 + pkgs/nagnu/nagnu.json | 15 + pkgs/note/default.nix | 18 + pkgs/notmuch/notmuch-python/default.nix | 16 + pkgs/notmuch/notmuch-vim/default.nix | 11 + pkgs/pg_activity/default.nix | 5 + pkgs/pg_activity/pg_activity.json | 15 + pkgs/pgloader/default.nix | 19 + pkgs/pgloader/pgloader.json | 15 + pkgs/private/default.nix | 12 + .../webapps/apache-default/default.nix | 21 + .../www/googleb6d69446ff4ca3e5.html | 1 + .../webapps/apache-default/www/index.htm | 9 + .../apache-default/www/maintenance_immae.html | 58 + .../webapps/apache-default/www/nossl.html | 11 + pkgs/private/webapps/aten/aten.json | 14 + pkgs/private/webapps/aten/default.nix | 57 + pkgs/private/webapps/aten/php-packages.nix | 740 + pkgs/private/webapps/aten/yarn-packages.nix | 7871 ++++++++++ pkgs/private/webapps/chloe/chloe.json | 14 + pkgs/private/webapps/chloe/default.nix | 19 + .../connexionswing/connexionswing.json | 14 + .../webapps/connexionswing/default.nix | 27 + .../webapps/connexionswing/php-packages.nix | 597 + pkgs/private/webapps/default.nix | 11 + .../webapps/ludivinecassal/default.nix | 35 + .../ludivinecassal/ludivinecassal.json | 14 + .../webapps/ludivinecassal/php-packages.nix | 868 ++ pkgs/private/webapps/piedsjaloux/default.nix | 27 + .../webapps/piedsjaloux/php-packages.nix | 1009 ++ .../webapps/piedsjaloux/piedsjaloux.json | 14 + .../private/webapps/tellesflorian/default.nix | 25 + .../webapps/tellesflorian/php-packages.nix | 389 + .../webapps/tellesflorian/tellesflorian.json | 14 + pkgs/pure-ftpd/default.nix | 29 + pkgs/python-packages/apprise/apprise.json | 15 + pkgs/python-packages/apprise/default.nix | 11 + .../buildbot/plugins/buildslist/bower.nix | 9 + .../plugins/buildslist/buildslist.json | 14 + .../buildbot/plugins/buildslist/default.nix | 45 + .../plugins/buildslist/yarn-packages.nix | 5459 +++++++ .../buildbot/plugins/default.nix | 7 + pkgs/python-packages/default.nix | 6 + pkgs/python-packages/wokkel.nix | 11 + pkgs/slang_1/default.nix | 25 + pkgs/telegram-cli/default.nix | 16 + pkgs/telegram-cli/telegram-cli.json | 15 + pkgs/telegram-cli/telegram-cli.patch | 90 + pkgs/telegram-history-dump/default.nix | 9 + .../telegram-history-dump.json | 15 + pkgs/telegramircd/default.nix | 16 + pkgs/telegramircd/telegramircd.json | 15 + pkgs/telethon_sync/default.nix | 23 + pkgs/terminal-velocity/default.nix | 33 + pkgs/terminal-velocity/fix_build.patch | 21 + pkgs/terminal-velocity/python3_support.patch | 215 + pkgs/terminal-velocity/sort_found_notes.patch | 73 + pkgs/tiv/default.nix | 19 + pkgs/tiv/tiv_builder.sh | 8 + pkgs/unicode/default.nix | 48 + pkgs/webapps/adminer/default.nix | 14 + pkgs/webapps/apache-theme/default.nix | 88 + pkgs/webapps/apache-theme/theme/.htaccess | 9 + pkgs/webapps/apache-theme/theme/footer.html | 31 + pkgs/webapps/apache-theme/theme/header.html | 3 + .../apache-theme/theme/icons/archive.png | Bin 0 -> 551 bytes .../apache-theme/theme/icons/audio.png | Bin 0 -> 554 bytes .../apache-theme/theme/icons/authors.png | Bin 0 -> 492 bytes pkgs/webapps/apache-theme/theme/icons/bin.png | Bin 0 -> 551 bytes .../apache-theme/theme/icons/blank.png | Bin 0 -> 227 bytes pkgs/webapps/apache-theme/theme/icons/bmp.png | Bin 0 -> 663 bytes pkgs/webapps/apache-theme/theme/icons/c.png | Bin 0 -> 554 bytes .../webapps/apache-theme/theme/icons/calc.png | Bin 0 -> 506 bytes pkgs/webapps/apache-theme/theme/icons/cd.png | Bin 0 -> 757 bytes .../apache-theme/theme/icons/copying.png | Bin 0 -> 699 bytes pkgs/webapps/apache-theme/theme/icons/cpp.png | Bin 0 -> 599 bytes pkgs/webapps/apache-theme/theme/icons/css.png | Bin 0 -> 592 bytes pkgs/webapps/apache-theme/theme/icons/deb.png | Bin 0 -> 671 bytes .../apache-theme/theme/icons/default.png | Bin 0 -> 311 bytes .../webapps/apache-theme/theme/icons/diff.png | Bin 0 -> 586 bytes pkgs/webapps/apache-theme/theme/icons/doc.png | Bin 0 -> 535 bytes .../webapps/apache-theme/theme/icons/draw.png | Bin 0 -> 679 bytes pkgs/webapps/apache-theme/theme/icons/eps.png | Bin 0 -> 619 bytes pkgs/webapps/apache-theme/theme/icons/exe.png | Bin 0 -> 846 bytes .../apache-theme/theme/icons/folder-home.png | Bin 0 -> 618 bytes .../apache-theme/theme/icons/folder-open.png | Bin 0 -> 431 bytes .../apache-theme/theme/icons/folder-page.png | Bin 0 -> 591 bytes .../theme/icons/folder-parent-old.png | Bin 0 -> 494 bytes .../theme/icons/folder-parent.png | Bin 0 -> 621 bytes .../apache-theme/theme/icons/folder.png | Bin 0 -> 395 bytes pkgs/webapps/apache-theme/theme/icons/gif.png | Bin 0 -> 655 bytes .../webapps/apache-theme/theme/icons/gzip.png | Bin 0 -> 551 bytes pkgs/webapps/apache-theme/theme/icons/h.png | Bin 0 -> 504 bytes pkgs/webapps/apache-theme/theme/icons/hpp.png | Bin 0 -> 530 bytes .../webapps/apache-theme/theme/icons/html.png | Bin 0 -> 770 bytes pkgs/webapps/apache-theme/theme/icons/ico.png | Bin 0 -> 792 bytes .../apache-theme/theme/icons/image.png | Bin 0 -> 671 bytes .../apache-theme/theme/icons/install.png | Bin 0 -> 788 bytes .../webapps/apache-theme/theme/icons/java.png | Bin 0 -> 658 bytes pkgs/webapps/apache-theme/theme/icons/jpg.png | Bin 0 -> 675 bytes pkgs/webapps/apache-theme/theme/icons/js.png | Bin 0 -> 540 bytes .../webapps/apache-theme/theme/icons/json.png | Bin 0 -> 540 bytes pkgs/webapps/apache-theme/theme/icons/log.png | Bin 0 -> 423 bytes .../apache-theme/theme/icons/makefile.png | Bin 0 -> 614 bytes .../apache-theme/theme/icons/markdown.png | Bin 0 -> 627 bytes .../apache-theme/theme/icons/package.png | Bin 0 -> 614 bytes pkgs/webapps/apache-theme/theme/icons/pdf.png | Bin 0 -> 799 bytes pkgs/webapps/apache-theme/theme/icons/php.png | Bin 0 -> 757 bytes .../apache-theme/theme/icons/playlist.png | Bin 0 -> 610 bytes pkgs/webapps/apache-theme/theme/icons/png.png | Bin 0 -> 679 bytes .../webapps/apache-theme/theme/icons/pres.png | Bin 0 -> 629 bytes pkgs/webapps/apache-theme/theme/icons/ps.png | Bin 0 -> 817 bytes pkgs/webapps/apache-theme/theme/icons/psd.png | Bin 0 -> 622 bytes pkgs/webapps/apache-theme/theme/icons/py.png | Bin 0 -> 743 bytes pkgs/webapps/apache-theme/theme/icons/rar.png | Bin 0 -> 621 bytes pkgs/webapps/apache-theme/theme/icons/rb.png | Bin 0 -> 781 bytes .../apache-theme/theme/icons/readme.png | Bin 0 -> 384 bytes pkgs/webapps/apache-theme/theme/icons/rpm.png | Bin 0 -> 660 bytes pkgs/webapps/apache-theme/theme/icons/rss.png | Bin 0 -> 660 bytes pkgs/webapps/apache-theme/theme/icons/rtf.png | Bin 0 -> 627 bytes .../apache-theme/theme/icons/script.png | Bin 0 -> 613 bytes .../apache-theme/theme/icons/source.png | Bin 0 -> 586 bytes pkgs/webapps/apache-theme/theme/icons/sql.png | Bin 0 -> 510 bytes pkgs/webapps/apache-theme/theme/icons/tar.png | Bin 0 -> 406 bytes pkgs/webapps/apache-theme/theme/icons/tex.png | Bin 0 -> 677 bytes .../webapps/apache-theme/theme/icons/text.png | Bin 0 -> 463 bytes .../webapps/apache-theme/theme/icons/tiff.png | Bin 0 -> 654 bytes .../apache-theme/theme/icons/unknown.png | Bin 0 -> 556 bytes .../webapps/apache-theme/theme/icons/vcal.png | Bin 0 -> 556 bytes .../apache-theme/theme/icons/video.png | Bin 0 -> 739 bytes pkgs/webapps/apache-theme/theme/icons/xml.png | Bin 0 -> 585 bytes pkgs/webapps/apache-theme/theme/icons/zip.png | Bin 0 -> 617 bytes pkgs/webapps/apache-theme/theme/style.css | 160 + pkgs/webapps/awl/default.nix | 16 + ...79ebf9250e5f339675319902458c40ed1755.patch | 26 + pkgs/webapps/davical/default.nix | 20 + pkgs/webapps/default.nix | 114 + pkgs/webapps/diaspora/default.nix | 73 + pkgs/webapps/diaspora/diaspora.json | 15 + pkgs/webapps/diaspora/gemset.nix | 3047 ++++ pkgs/webapps/diaspora/gemset_ldap.nix | 3056 ++++ pkgs/webapps/diaspora/ldap.patch | 256 + pkgs/webapps/dokuwiki/default.nix | 43 + pkgs/webapps/dokuwiki/dokuwiki.json | 15 + pkgs/webapps/dokuwiki/plugins/farmer.nix | 25 + pkgs/webapps/dokuwiki/plugins/todo.nix | 18 + pkgs/webapps/etherpad-lite/default.nix | 61 + pkgs/webapps/etherpad-lite/etherpad-lite.json | 15 + .../etherpad-lite/libreoffice_patch.diff | 11 + .../node-packages.json | 1 + .../ep_aa_file_menu_toolbar/node-packages.nix | 25 + .../modules/ep_adminpads/node-packages.json | 1 + .../modules/ep_adminpads/node-packages.nix | 26 + .../modules/ep_align/node-packages.json | 1 + .../modules/ep_align/node-packages.nix | 25 + .../modules/ep_bookmark/node-packages.json | 1 + .../modules/ep_bookmark/node-packages.nix | 25 + .../ep_clear_formatting/node-packages.json | 1 + .../ep_clear_formatting/node-packages.nix | 24 + .../modules/ep_colors/node-packages.json | 1 + .../modules/ep_colors/node-packages.nix | 24 + .../node-packages.json | 1 + .../node-packages.nix | 25 + .../modules/ep_cursortrace/node-packages.json | 1 + .../modules/ep_cursortrace/node-packages.nix | 25 + .../modules/ep_embedmedia/node-packages.json | 1 + .../modules/ep_embedmedia/node-packages.nix | 25 + .../modules/ep_font_family/node-packages.json | 1 + .../modules/ep_font_family/node-packages.nix | 26 + .../modules/ep_font_size/node-packages.json | 1 + .../modules/ep_font_size/node-packages.nix | 24 + .../modules/ep_headings2/node-packages.json | 1 + .../modules/ep_headings2/node-packages.nix | 25 + .../modules/ep_ldapauth/node-packages.json | 1 + .../modules/ep_ldapauth/node-packages.nix | 388 + .../modules/ep_line_height/node-packages.json | 1 + .../modules/ep_line_height/node-packages.nix | 24 + .../modules/ep_markdown/node-packages.json | 1 + .../modules/ep_markdown/node-packages.nix | 26 + .../ep_previewimages/node-packages.json | 1 + .../ep_previewimages/node-packages.nix | 25 + .../modules/ep_ruler/node-packages.json | 1 + .../modules/ep_ruler/node-packages.nix | 27 + .../modules/ep_scrollto/node-packages.json | 1 + .../modules/ep_scrollto/node-packages.nix | 25 + .../ep_set_title_on_pad/node-packages.json | 1 + .../ep_set_title_on_pad/node-packages.nix | 25 + .../node-packages.json | 1 + .../node-packages.nix | 24 + .../ep_timesliderdiff/node-packages.json | 1 + .../ep_timesliderdiff/node-packages.nix | 25 + pkgs/webapps/etherpad-lite/node-packages.nix | 3288 +++++ pkgs/webapps/infcloud/default.nix | 18 + pkgs/webapps/infcloud/infcloud_config.js | 1446 ++ pkgs/webapps/mantisbt_2/bug_report.php.diff | 20 + .../mantisbt_2/bug_report_page.php.diff | 53 + pkgs/webapps/mantisbt_2/bugnote_add.php.diff | 20 + .../mantisbt_2/bugnote_add_inc.php.diff | 52 + pkgs/webapps/mantisbt_2/default.nix | 41 + .../mantisbt_2/plugins/slack/default.nix | 18 + .../source-integration/Source.API.php.diff | 12 + .../plugins/source-integration/default.nix | 21 + pkgs/webapps/mastodon/default.nix | 86 + pkgs/webapps/mastodon/gemset.nix | 2867 ++++ pkgs/webapps/mastodon/mastodon.json | 15 + pkgs/webapps/mastodon/yarn-packages.nix | 11876 ++++++++++++++++ pkgs/webapps/mediagoblin/bower-packages.nix | 8 + pkgs/webapps/mediagoblin/default.nix | 169 + pkgs/webapps/mediagoblin/ldap_fix.py | 93 + pkgs/webapps/mediagoblin/mediagoblin.json | 14 + .../plugins/basicsearch/default.nix | 18 + pkgs/webapps/mediagoblin/tempita.json | 15 + pkgs/webapps/nextcloud/apps/audioplayer.nix | 7 + pkgs/webapps/nextcloud/apps/bookmarks.nix | 7 + pkgs/webapps/nextcloud/apps/calendar.nix | 7 + pkgs/webapps/nextcloud/apps/carnet.nix | 7 + pkgs/webapps/nextcloud/apps/contacts.nix | 7 + pkgs/webapps/nextcloud/apps/deck.nix | 7 + .../webapps/nextcloud/apps/files_markdown.nix | 7 + pkgs/webapps/nextcloud/apps/flowupload.nix | 7 + pkgs/webapps/nextcloud/apps/gpxedit.nix | 15 + pkgs/webapps/nextcloud/apps/gpxpod.nix | 15 + pkgs/webapps/nextcloud/apps/keeweb.nix | 20 + pkgs/webapps/nextcloud/apps/music.nix | 7 + pkgs/webapps/nextcloud/apps/notes.nix | 7 + pkgs/webapps/nextcloud/apps/ocsms.nix | 13 + pkgs/webapps/nextcloud/apps/passman.nix | 7 + pkgs/webapps/nextcloud/apps/spreed.nix | 7 + pkgs/webapps/nextcloud/apps/tasks.nix | 7 + pkgs/webapps/nextcloud/default.nix | 63 + pkgs/webapps/peertube/default.nix | 123 + pkgs/webapps/peertube/ldap.patch | 542 + pkgs/webapps/peertube/ldap_yarn.patch | 278 + pkgs/webapps/peertube/peertube.json | 15 + pkgs/webapps/peertube/sendmail.patch | 121 + pkgs/webapps/peertube/yarn-packages.nix | 11552 +++++++++++++++ pkgs/webapps/peertube/yarn_fix_bluebird.patch | 53 + .../peertube/yarn_fix_bluebird_ldap.patch | 53 + pkgs/webapps/phpldapadmin/default.nix | 24 + .../phpldapadmin/ldap-align-button.patch | 11 + .../phpldapadmin/ldap-disable-mcrypt.patch | 36 + pkgs/webapps/phpldapadmin/ldap-php5_5.patch | 88 + pkgs/webapps/phpldapadmin/ldap-php7_2.patch | 30 + .../phpldapadmin/ldap-sort-in-templates.patch | 12 + pkgs/webapps/rompr/default.nix | 8 + pkgs/webapps/rompr/rompr.json | 15 + pkgs/webapps/roundcubemail/default.nix | 61 + .../plugins/automatic_addressbook/default.nix | 7 + .../roundcubemail/plugins/carddav/default.nix | 7 + .../plugins/contextmenu/default.nix | 7 + .../plugins/contextmenu_folder/default.nix | 7 + .../plugins/html5_notifier/default.nix | 7 + .../plugins/ident_switch/default.nix | 7 + .../plugins/message_highlight/default.nix | 7 + .../plugins/thunderbird_labels/default.nix | 7 + pkgs/webapps/spip/default.nix | 32 + pkgs/webapps/spip/spip_ldap_patch.patch | 60 + pkgs/webapps/spip/spip_mes_options.php | 18 + pkgs/webapps/taskwarrior-web/Gemfile.lock | 139 + pkgs/webapps/taskwarrior-web/default.nix | 22 + pkgs/webapps/taskwarrior-web/fixes.patch | 56 + pkgs/webapps/taskwarrior-web/gemset.nix | 567 + .../taskwarrior-web/taskwarrior-web.json | 15 + pkgs/webapps/taskwarrior-web/thin.patch | 23 + pkgs/webapps/ttrss/default.nix | 30 + .../ttrss/plugins/af_feedmod/af_feedmod.json | 15 + .../ttrss/plugins/af_feedmod/default.nix | 9 + .../plugins/af_feedmod/type_replace.patch | 12 + .../ttrss/plugins/auth_ldap/auth-ldap.json | 15 + .../ttrss/plugins/auth_ldap/default.nix | 8 + .../ttrss/plugins/feediron/default.nix | 9 + .../ttrss/plugins/feediron/feediron.json | 15 + .../plugins/feediron/json_reformat.patch | 18 + .../ttrss/plugins/ff_instagram/default.nix | 8 + .../plugins/ff_instagram/ff_instagram.json | 15 + .../ttrss/plugins/tumblr_gdpr_ua/default.nix | 8 + .../tumblr_gdpr_ua/tumblr_gdpr_ua.json | 15 + pkgs/webapps/ttrss/tt-rss.json | 14 + pkgs/webapps/wallabag/default.nix | 54 + pkgs/webapps/wallabag/ldap.patch | 698 + pkgs/webapps/yourls/default.nix | 26 + pkgs/webapps/yourls/plugins/ldap/default.nix | 8 + pkgs/webapps/yourls/plugins/ldap/ldap.json | 15 + pkgs/webapps/yourls/yourls.json | 15 + scripts/make-env | 11 + scripts/nix_infos | 10 + 485 files changed, 77940 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 config/README.md create mode 120000 config/nixRoot create mode 100644 config/overlays.nix create mode 100644 default.nix create mode 100755 fetch_version create mode 100644 lib/node-env.nix create mode 100644 libs.nix create mode 100644 modules/default.nix create mode 100644 modules/myids.nix create mode 100644 modules/private/buildbot/common/build_helpers.py create mode 100644 modules/private/buildbot/common/master.cfg create mode 100644 modules/private/buildbot/default.nix create mode 100644 modules/private/buildbot/projects/caldance/__init__.py create mode 100644 modules/private/buildbot/projects/cryptoportfolio/__init__.py create mode 100644 modules/private/buildbot/projects/test/__init__.py create mode 100644 modules/private/certificates.nix create mode 100644 modules/private/databases/default.nix create mode 100644 modules/private/databases/mariadb.nix create mode 100644 modules/private/databases/openldap/default.nix create mode 100644 modules/private/databases/openldap/immae.schema create mode 100644 modules/private/databases/postgresql.nix create mode 100644 modules/private/databases/redis.nix create mode 100644 modules/private/default.nix create mode 100644 modules/private/dns.nix create mode 100644 modules/private/ftp.nix create mode 100644 modules/private/gitolite/default.nix create mode 100755 modules/private/gitolite/gitolite_ldap_groups.sh create mode 100644 modules/private/irc.nix create mode 100644 modules/private/mail.nix create mode 100644 modules/private/mpd.nix create mode 100644 modules/private/pub/default.nix create mode 100644 modules/private/pub/restrict create mode 100644 modules/private/pub/tmux.restrict.conf create mode 100644 modules/private/ssh/default.nix create mode 100755 modules/private/ssh/ldap_authorized_keys.sh create mode 100644 modules/private/system.nix create mode 100644 modules/private/system/eldiron.nix create mode 100644 modules/private/tasks/default.nix create mode 100644 modules/private/tasks/www/index.php create mode 100644 modules/private/websites/aten/builder.nix create mode 100644 modules/private/websites/aten/integration.nix create mode 100644 modules/private/websites/aten/production.nix create mode 100644 modules/private/websites/capitaines/mastodon_static/index.html create mode 100644 modules/private/websites/capitaines/mastodon_static/oops.png create mode 100644 modules/private/websites/capitaines/production.nix create mode 100644 modules/private/websites/chloe/builder.nix create mode 100644 modules/private/websites/chloe/config/chmod.php create mode 100644 modules/private/websites/chloe/config/connect.php create mode 100644 modules/private/websites/chloe/config/ldap.php create mode 100644 modules/private/websites/chloe/integration.nix create mode 100644 modules/private/websites/chloe/production.nix create mode 100644 modules/private/websites/commons/adminer.nix create mode 100644 modules/private/websites/connexionswing/builder.nix create mode 100644 modules/private/websites/connexionswing/integration.nix create mode 100644 modules/private/websites/connexionswing/production.nix create mode 100644 modules/private/websites/default.nix create mode 100644 modules/private/websites/denisejerome/production.nix create mode 100644 modules/private/websites/emilia/moodle/pause.html create mode 100644 modules/private/websites/emilia/production.nix create mode 100644 modules/private/websites/florian/app.nix create mode 100644 modules/private/websites/florian/builder_app.nix create mode 100644 modules/private/websites/florian/integration.nix create mode 100644 modules/private/websites/florian/production.nix create mode 100644 modules/private/websites/immae/production.nix create mode 100644 modules/private/websites/immae/release.nix create mode 100644 modules/private/websites/immae/temp.nix create mode 100644 modules/private/websites/leila/production.nix create mode 100644 modules/private/websites/ludivinecassal/builder.nix create mode 100644 modules/private/websites/ludivinecassal/integration.nix create mode 100644 modules/private/websites/ludivinecassal/production.nix create mode 100644 modules/private/websites/nassime/production.nix create mode 100644 modules/private/websites/naturaloutil/production.nix create mode 100644 modules/private/websites/papa/surveillance.nix create mode 100644 modules/private/websites/piedsjaloux/builder.nix create mode 100644 modules/private/websites/piedsjaloux/integration.nix create mode 100644 modules/private/websites/piedsjaloux/production.nix create mode 100644 modules/private/websites/tools/cloud/default.nix create mode 100644 modules/private/websites/tools/dav/davical.nix create mode 100644 modules/private/websites/tools/dav/default.nix create mode 100644 modules/private/websites/tools/db/default.nix create mode 100644 modules/private/websites/tools/diaspora/default.nix create mode 100644 modules/private/websites/tools/ether/default.nix create mode 100644 modules/private/websites/tools/git/default.nix create mode 100644 modules/private/websites/tools/git/gitweb.nix create mode 100644 modules/private/websites/tools/git/mantisbt.nix create mode 100644 modules/private/websites/tools/mastodon/default.nix create mode 100644 modules/private/websites/tools/mgoblin/default.nix create mode 100644 modules/private/websites/tools/peertube/default.nix create mode 100644 modules/private/websites/tools/tools/adminer.nix create mode 100644 modules/private/websites/tools/tools/default.nix create mode 100644 modules/private/websites/tools/tools/dokuwiki.nix create mode 100644 modules/private/websites/tools/tools/kanboard.nix create mode 100644 modules/private/websites/tools/tools/ldap.nix create mode 100644 modules/private/websites/tools/tools/rainloop.nix create mode 100644 modules/private/websites/tools/tools/rompr.nix create mode 100644 modules/private/websites/tools/tools/roundcubemail.nix create mode 100644 modules/private/websites/tools/tools/shaarli.nix create mode 100644 modules/private/websites/tools/tools/ttrss.nix create mode 100644 modules/private/websites/tools/tools/wallabag.nix create mode 100644 modules/private/websites/tools/tools/ympd.nix create mode 100644 modules/private/websites/tools/tools/yourls.nix create mode 100644 modules/secrets.nix create mode 100644 modules/webapps/diaspora.nix create mode 100644 modules/webapps/etherpad-lite.nix create mode 100644 modules/webapps/mastodon.nix create mode 100644 modules/webapps/mediagoblin.nix create mode 100644 modules/webapps/peertube.nix create mode 100644 modules/webapps/webstats/default.nix create mode 100644 modules/webapps/webstats/goaccess.conf create mode 100644 modules/websites/default.nix create mode 100644 modules/websites/httpd-service-builder.nix create mode 100644 modules/websites/nosslVhost/index.html create mode 100644 nix_path_env create mode 100644 nixops/.gitignore create mode 100644 nixops/Makefile create mode 100644 nixops/custom_nixops.nix create mode 100644 nixops/eldiron.nix create mode 100644 nixops/migrate_hetzner.md create mode 100755 nixops/scripts/nixops_wrap create mode 100755 nixops/scripts/pull_deployment create mode 100755 nixops/scripts/pull_environment create mode 100755 nixops/scripts/push_deployment create mode 100755 nixops/scripts/push_environment create mode 100755 nixops/scripts/setup create mode 100644 nixops/ssh/config create mode 100644 nixops/state/.gitkeep create mode 100644 overlays/bitlbee/bitlbee_long_nicks.patch create mode 100644 overlays/bitlbee/default.nix create mode 100644 overlays/bundix/default.nix create mode 100644 overlays/databases/mysql/default.nix create mode 100644 overlays/databases/postgresql/default.nix create mode 100644 overlays/databases/postgresql/postgresql_run_socket_path.patch create mode 100644 overlays/default.nix create mode 100644 overlays/dwm/default.nix create mode 100644 overlays/dwm/dwm_config.h create mode 100644 overlays/elinks/default.nix create mode 100644 overlays/elinks/elinks.json create mode 100644 overlays/environments/default.nix create mode 100644 overlays/environments/immae-eu.nix create mode 100644 overlays/gitweb/default.nix create mode 100644 overlays/gitweb/theme/git-favicon.png create mode 100644 overlays/gitweb/theme/git-logo.png create mode 100644 overlays/gitweb/theme/gitweb.css create mode 100644 overlays/gitweb/theme/gitweb.js create mode 100644 overlays/goaccess/default.nix create mode 100644 overlays/kanboard/default.nix create mode 100644 overlays/ldapvi/default.nix create mode 100644 overlays/ldapvi/ldapvi.json create mode 100644 overlays/lesspipe/default.nix create mode 100644 overlays/neomutt/default.nix create mode 100644 overlays/nixops/default.nix create mode 100644 overlays/pass/default.nix create mode 100644 overlays/pass/pass-fix-pass-init.patch create mode 100644 overlays/pass/pass.json create mode 100644 overlays/pelican/default.nix create mode 100644 overlays/pelican/pelican.json create mode 100644 overlays/profanity/default.nix create mode 100644 overlays/python-packages/buildbot.nix create mode 100644 overlays/python-packages/default.nix create mode 100644 overlays/sc-im/default.nix create mode 100644 overlays/shaarli/default.nix create mode 100644 overlays/shaarli/shaarli_ldap.patch create mode 100644 overlays/slrn/default.nix create mode 100644 overlays/taskwarrior/default.nix create mode 100644 overlays/vit/default.nix create mode 100644 overlays/vit/vit.json create mode 100644 overlays/weboob/default.nix create mode 100644 overlays/weechat/default.nix create mode 100644 overlays/ympd/default.nix create mode 100644 overlays/ympd/ympd-password-env.patch create mode 100644 overlays/ympd/ympd.json create mode 100644 pkgs/bitlbee-mastodon/default.nix create mode 100644 pkgs/boinctui/default.nix create mode 100644 pkgs/cnagios/cnagios.json create mode 100644 pkgs/cnagios/default.nix create mode 100644 pkgs/composer-env/default.nix create mode 100644 pkgs/crypto/cardano/daedalus.json create mode 100644 pkgs/crypto/cardano/default.nix create mode 100644 pkgs/crypto/iota-cli-app/default.nix create mode 100644 pkgs/crypto/iota-cli-app/iota-cli-app.json create mode 100644 pkgs/crypto/iota-cli-app/node-packages.nix create mode 100644 pkgs/crypto/sia/default.nix create mode 100644 pkgs/default.nix create mode 100644 pkgs/duply/default.nix create mode 100644 pkgs/flrn/default.nix create mode 100644 pkgs/flrn/flrn.json create mode 100644 pkgs/genius/default.nix create mode 100644 pkgs/mpd_0_21/default.nix create mode 100644 pkgs/mtop/default.nix create mode 100644 pkgs/mutt-ics/default.nix create mode 100644 pkgs/mutt-ics/mutt-ics.json create mode 100644 pkgs/muttprint/0.73-4.diff.gz create mode 100644 pkgs/muttprint/default.nix create mode 100644 pkgs/muttprint/regex.patch create mode 100644 pkgs/muttprint/two_edge.patch create mode 100644 pkgs/nagios-cli/default.nix create mode 100644 pkgs/nagios-cli/nagios-cli.json create mode 100644 pkgs/nagnu/default.nix create mode 100644 pkgs/nagnu/nagnu.json create mode 100644 pkgs/note/default.nix create mode 100644 pkgs/notmuch/notmuch-python/default.nix create mode 100644 pkgs/notmuch/notmuch-vim/default.nix create mode 100644 pkgs/pg_activity/default.nix create mode 100644 pkgs/pg_activity/pg_activity.json create mode 100644 pkgs/pgloader/default.nix create mode 100644 pkgs/pgloader/pgloader.json create mode 100644 pkgs/private/default.nix create mode 100644 pkgs/private/webapps/apache-default/default.nix create mode 100644 pkgs/private/webapps/apache-default/www/googleb6d69446ff4ca3e5.html create mode 100644 pkgs/private/webapps/apache-default/www/index.htm create mode 100644 pkgs/private/webapps/apache-default/www/maintenance_immae.html create mode 100644 pkgs/private/webapps/apache-default/www/nossl.html create mode 100644 pkgs/private/webapps/aten/aten.json create mode 100644 pkgs/private/webapps/aten/default.nix create mode 100644 pkgs/private/webapps/aten/php-packages.nix create mode 100644 pkgs/private/webapps/aten/yarn-packages.nix create mode 100644 pkgs/private/webapps/chloe/chloe.json create mode 100644 pkgs/private/webapps/chloe/default.nix create mode 100644 pkgs/private/webapps/connexionswing/connexionswing.json create mode 100644 pkgs/private/webapps/connexionswing/default.nix create mode 100644 pkgs/private/webapps/connexionswing/php-packages.nix create mode 100644 pkgs/private/webapps/default.nix create mode 100644 pkgs/private/webapps/ludivinecassal/default.nix create mode 100644 pkgs/private/webapps/ludivinecassal/ludivinecassal.json create mode 100644 pkgs/private/webapps/ludivinecassal/php-packages.nix create mode 100644 pkgs/private/webapps/piedsjaloux/default.nix create mode 100644 pkgs/private/webapps/piedsjaloux/php-packages.nix create mode 100644 pkgs/private/webapps/piedsjaloux/piedsjaloux.json create mode 100644 pkgs/private/webapps/tellesflorian/default.nix create mode 100644 pkgs/private/webapps/tellesflorian/php-packages.nix create mode 100644 pkgs/private/webapps/tellesflorian/tellesflorian.json create mode 100644 pkgs/pure-ftpd/default.nix create mode 100644 pkgs/python-packages/apprise/apprise.json create mode 100644 pkgs/python-packages/apprise/default.nix create mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/bower.nix create mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/buildslist.json create mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/default.nix create mode 100644 pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix create mode 100644 pkgs/python-packages/buildbot/plugins/default.nix create mode 100644 pkgs/python-packages/default.nix create mode 100644 pkgs/python-packages/wokkel.nix create mode 100644 pkgs/slang_1/default.nix create mode 100644 pkgs/telegram-cli/default.nix create mode 100644 pkgs/telegram-cli/telegram-cli.json create mode 100644 pkgs/telegram-cli/telegram-cli.patch create mode 100644 pkgs/telegram-history-dump/default.nix create mode 100644 pkgs/telegram-history-dump/telegram-history-dump.json create mode 100644 pkgs/telegramircd/default.nix create mode 100644 pkgs/telegramircd/telegramircd.json create mode 100644 pkgs/telethon_sync/default.nix create mode 100644 pkgs/terminal-velocity/default.nix create mode 100644 pkgs/terminal-velocity/fix_build.patch create mode 100644 pkgs/terminal-velocity/python3_support.patch create mode 100644 pkgs/terminal-velocity/sort_found_notes.patch create mode 100644 pkgs/tiv/default.nix create mode 100644 pkgs/tiv/tiv_builder.sh create mode 100644 pkgs/unicode/default.nix create mode 100644 pkgs/webapps/adminer/default.nix create mode 100644 pkgs/webapps/apache-theme/default.nix create mode 100644 pkgs/webapps/apache-theme/theme/.htaccess create mode 100644 pkgs/webapps/apache-theme/theme/footer.html create mode 100644 pkgs/webapps/apache-theme/theme/header.html create mode 100644 pkgs/webapps/apache-theme/theme/icons/archive.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/audio.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/authors.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/bin.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/blank.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/bmp.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/c.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/calc.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/cd.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/copying.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/cpp.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/css.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/deb.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/default.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/diff.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/doc.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/draw.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/eps.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/exe.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-home.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-open.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-page.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder-parent.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/folder.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/gif.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/gzip.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/h.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/hpp.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/html.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/ico.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/image.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/install.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/java.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/jpg.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/js.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/json.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/log.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/makefile.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/markdown.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/package.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/pdf.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/php.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/playlist.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/png.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/pres.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/ps.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/psd.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/py.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/rar.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/rb.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/readme.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/rpm.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/rss.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/rtf.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/script.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/source.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/sql.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/tar.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/tex.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/text.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/tiff.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/unknown.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/vcal.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/video.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/xml.png create mode 100644 pkgs/webapps/apache-theme/theme/icons/zip.png create mode 100644 pkgs/webapps/apache-theme/theme/style.css create mode 100644 pkgs/webapps/awl/default.nix create mode 100644 pkgs/webapps/davical/davical_19eb79ebf9250e5f339675319902458c40ed1755.patch create mode 100644 pkgs/webapps/davical/default.nix create mode 100644 pkgs/webapps/default.nix create mode 100644 pkgs/webapps/diaspora/default.nix create mode 100644 pkgs/webapps/diaspora/diaspora.json create mode 100644 pkgs/webapps/diaspora/gemset.nix create mode 100644 pkgs/webapps/diaspora/gemset_ldap.nix create mode 100644 pkgs/webapps/diaspora/ldap.patch create mode 100644 pkgs/webapps/dokuwiki/default.nix create mode 100644 pkgs/webapps/dokuwiki/dokuwiki.json create mode 100644 pkgs/webapps/dokuwiki/plugins/farmer.nix create mode 100644 pkgs/webapps/dokuwiki/plugins/todo.nix create mode 100644 pkgs/webapps/etherpad-lite/default.nix create mode 100644 pkgs/webapps/etherpad-lite/etherpad-lite.json create mode 100644 pkgs/webapps/etherpad-lite/libreoffice_patch.diff create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_aa_file_menu_toolbar/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_adminpads/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_adminpads/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_align/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_align/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_bookmark/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_bookmark/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_clear_formatting/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_clear_formatting/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_colors/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_colors/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_copy_paste_select_all/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_cursortrace/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_cursortrace/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_embedmedia/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_embedmedia/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_family/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_family/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_size/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_font_size/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_headings2/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_headings2/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ldapauth/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ldapauth/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_line_height/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_line_height/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_markdown/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_markdown/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_previewimages/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_previewimages/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ruler/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_ruler/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_scrollto/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_scrollto/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_set_title_on_pad/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_set_title_on_pad/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_subscript_and_superscript/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_timesliderdiff/node-packages.json create mode 100644 pkgs/webapps/etherpad-lite/modules/ep_timesliderdiff/node-packages.nix create mode 100644 pkgs/webapps/etherpad-lite/node-packages.nix create mode 100644 pkgs/webapps/infcloud/default.nix create mode 100644 pkgs/webapps/infcloud/infcloud_config.js create mode 100644 pkgs/webapps/mantisbt_2/bug_report.php.diff create mode 100644 pkgs/webapps/mantisbt_2/bug_report_page.php.diff create mode 100644 pkgs/webapps/mantisbt_2/bugnote_add.php.diff create mode 100644 pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff create mode 100644 pkgs/webapps/mantisbt_2/default.nix create mode 100644 pkgs/webapps/mantisbt_2/plugins/slack/default.nix create mode 100644 pkgs/webapps/mantisbt_2/plugins/source-integration/Source.API.php.diff create mode 100644 pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix create mode 100644 pkgs/webapps/mastodon/default.nix create mode 100644 pkgs/webapps/mastodon/gemset.nix create mode 100644 pkgs/webapps/mastodon/mastodon.json create mode 100644 pkgs/webapps/mastodon/yarn-packages.nix create mode 100644 pkgs/webapps/mediagoblin/bower-packages.nix create mode 100644 pkgs/webapps/mediagoblin/default.nix create mode 100644 pkgs/webapps/mediagoblin/ldap_fix.py create mode 100644 pkgs/webapps/mediagoblin/mediagoblin.json create mode 100644 pkgs/webapps/mediagoblin/plugins/basicsearch/default.nix create mode 100644 pkgs/webapps/mediagoblin/tempita.json create mode 100644 pkgs/webapps/nextcloud/apps/audioplayer.nix create mode 100644 pkgs/webapps/nextcloud/apps/bookmarks.nix create mode 100644 pkgs/webapps/nextcloud/apps/calendar.nix create mode 100644 pkgs/webapps/nextcloud/apps/carnet.nix create mode 100644 pkgs/webapps/nextcloud/apps/contacts.nix create mode 100644 pkgs/webapps/nextcloud/apps/deck.nix create mode 100644 pkgs/webapps/nextcloud/apps/files_markdown.nix create mode 100644 pkgs/webapps/nextcloud/apps/flowupload.nix create mode 100644 pkgs/webapps/nextcloud/apps/gpxedit.nix create mode 100644 pkgs/webapps/nextcloud/apps/gpxpod.nix create mode 100644 pkgs/webapps/nextcloud/apps/keeweb.nix create mode 100644 pkgs/webapps/nextcloud/apps/music.nix create mode 100644 pkgs/webapps/nextcloud/apps/notes.nix create mode 100644 pkgs/webapps/nextcloud/apps/ocsms.nix create mode 100644 pkgs/webapps/nextcloud/apps/passman.nix create mode 100644 pkgs/webapps/nextcloud/apps/spreed.nix create mode 100644 pkgs/webapps/nextcloud/apps/tasks.nix create mode 100644 pkgs/webapps/nextcloud/default.nix create mode 100644 pkgs/webapps/peertube/default.nix create mode 100644 pkgs/webapps/peertube/ldap.patch create mode 100644 pkgs/webapps/peertube/ldap_yarn.patch create mode 100644 pkgs/webapps/peertube/peertube.json create mode 100644 pkgs/webapps/peertube/sendmail.patch create mode 100644 pkgs/webapps/peertube/yarn-packages.nix create mode 100644 pkgs/webapps/peertube/yarn_fix_bluebird.patch create mode 100644 pkgs/webapps/peertube/yarn_fix_bluebird_ldap.patch create mode 100644 pkgs/webapps/phpldapadmin/default.nix create mode 100644 pkgs/webapps/phpldapadmin/ldap-align-button.patch create mode 100644 pkgs/webapps/phpldapadmin/ldap-disable-mcrypt.patch create mode 100644 pkgs/webapps/phpldapadmin/ldap-php5_5.patch create mode 100644 pkgs/webapps/phpldapadmin/ldap-php7_2.patch create mode 100644 pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch create mode 100644 pkgs/webapps/rompr/default.nix create mode 100644 pkgs/webapps/rompr/rompr.json create mode 100644 pkgs/webapps/roundcubemail/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/carddav/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix create mode 100644 pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix create mode 100644 pkgs/webapps/spip/default.nix create mode 100644 pkgs/webapps/spip/spip_ldap_patch.patch create mode 100644 pkgs/webapps/spip/spip_mes_options.php create mode 100644 pkgs/webapps/taskwarrior-web/Gemfile.lock create mode 100644 pkgs/webapps/taskwarrior-web/default.nix create mode 100644 pkgs/webapps/taskwarrior-web/fixes.patch create mode 100644 pkgs/webapps/taskwarrior-web/gemset.nix create mode 100644 pkgs/webapps/taskwarrior-web/taskwarrior-web.json create mode 100644 pkgs/webapps/taskwarrior-web/thin.patch create mode 100644 pkgs/webapps/ttrss/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json create mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch create mode 100644 pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json create mode 100644 pkgs/webapps/ttrss/plugins/auth_ldap/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/feediron/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/feediron/feediron.json create mode 100644 pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch create mode 100644 pkgs/webapps/ttrss/plugins/ff_instagram/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json create mode 100644 pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix create mode 100644 pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json create mode 100644 pkgs/webapps/ttrss/tt-rss.json create mode 100644 pkgs/webapps/wallabag/default.nix create mode 100644 pkgs/webapps/wallabag/ldap.patch create mode 100644 pkgs/webapps/yourls/default.nix create mode 100644 pkgs/webapps/yourls/plugins/ldap/default.nix create mode 100644 pkgs/webapps/yourls/plugins/ldap/ldap.json create mode 100644 pkgs/webapps/yourls/yourls.json create mode 100755 scripts/make-env create mode 100755 scripts/nix_infos diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..feb036e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/result* +/versions_log diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..243190cd --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2011-2019 Ismaël Bouya http://www.normalesup.org/~bouya/ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +Feel like tipping/donating? https://www.immae.eu/licenses_and_tipping diff --git a/config/README.md b/config/README.md new file mode 100644 index 00000000..542f31e6 --- /dev/null +++ b/config/README.md @@ -0,0 +1 @@ +Link this directory to ~/.config/nixpkgs diff --git a/config/nixRoot b/config/nixRoot new file mode 120000 index 00000000..a96aa0ea --- /dev/null +++ b/config/nixRoot @@ -0,0 +1 @@ +.. \ No newline at end of file diff --git a/config/overlays.nix b/config/overlays.nix new file mode 100644 index 00000000..1040d596 --- /dev/null +++ b/config/overlays.nix @@ -0,0 +1 @@ +builtins.attrValues (import ./nixRoot/overlays) diff --git a/default.nix b/default.nix new file mode 100644 index 00000000..c7f515bf --- /dev/null +++ b/default.nix @@ -0,0 +1,11 @@ +{ pkgs ? import {} }: +let + pkgs_ = pkgs; + mypkgs = import ./pkgs { pkgs = pkgs_; }; +in +{ + lib = import ./libs.nix { pkgs = pkgs_; }; + modules = import ./modules; + overlays = import ./overlays; + pkgs = mypkgs; +} // mypkgs diff --git a/fetch_version b/fetch_version new file mode 100755 index 00000000..a0325f63 --- /dev/null +++ b/fetch_version @@ -0,0 +1,173 @@ +#!/bin/bash + +usage() { + echo "$0 file.json" + echo "$0 [-n|--name name] [-b|--branch branch_or_rev] [-f|--file out_file] [-h|--help] (-u|--url) url" + exit +} + +branch="master" +while [[ $# -gt 0 ]]; do + a="$1" + shift + case "$a" in + *.json) + file=$a + content=$(cat $a) + name="$(echo "$content" | jq -r ".meta.name")" + url="$(echo "$content" | jq -r ".meta.url")" + branch="$(echo "$content" | jq -r ".meta.branch")" + ;; + -n|--name) + name=$1 + shift + ;; + -u|--url) + url=$1 + shift + ;; + -b|--branch) + branch=$1 + shift + ;; + -f|--file) + file=$1 + shift + ;; + -h|--help) + usage + ;; + esac +done +if [ -z "$url" ]; then + usage +fi +if [ -z "$name" ]; then + name=$(echo "$url" | cut -d"/" -f5) +fi +if [ -z "$file" ]; then + file=$name.json +fi + +# function fetch_ledger () { +# pushd $HOME/projets/ledger >/dev/null 2>/dev/null +# git fetch origin +# tag="$(git describe origin/next | sed -e "s/^v//")" +# rev="$(git show-ref -s refs/remotes/origin/next)" +# sha="$(nix-prefetch-url --unpack file://<(git archive --format=tar.gz HEAD) 2>/dev/null)" +# popd >/dev/null 2>/dev/null +# } + +# awk_describe='BEGIN { +# FS = "[ /^]+" +# while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) { +# if (!sha) +# sha = substr($0, 1, 7) +# tag = $3 +# } +# while ("curl -s " ARGV[1] "/releases/tag/" tag | getline) +# if ($3 ~ "commits") +# com = $2 +# printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha +# }' + +function get_ref () { + case "$1" in + refs/*) + echo "$1" + ;; + *) + echo "refs/heads/$1" + ;; + esac +} + +function get_name () { + branch="$1" + rev="$2" + minirev=${rev:0:7} + + case "$branch" in + refs/tags/*) + b="${branch#refs/tags/}" + echo "${b//\//-}" + ;; + refs/heads/*) + b=${branch#refs/heads/} + echo "$minirev-${b//\//-}" + ;; + refs/*) + b=${branch#refs/} + echo "$minirev-${b//\//-}" + ;; + *) + echo "$minirev-${branch//\//-}" + ;; + esac +} + +function fetch_github () { + rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)" + sha="$(nix-prefetch-url --unpack $url/archive/$rev.tar.gz)" + # Différent du git-describe et github-spécifique + #tag=$(echo "$awk_describe" | awk -f - $url | sed -e "s/^v//") + tag=$(get_name $branch $rev) +} + +function fetch_other () { + rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)" + sha="$(nix-prefetch-git --url $url --rev $(get_ref $branch) | jq -r '.sha256')" + tag=$(get_name $branch $rev) +} + +case "$url" in + https://*github.com/*) + fetch_github 2>/dev/null + owner=$(echo "$url" | cut -d"/" -f4) + repo=$(echo "$url" | cut -d"/" -f5) + + F='{ + "tag": $tag, + "meta": { + "name": $name, + "url": $url, + "branch": $branch + }, + "github": { + "owner": $owner, + "repo": $repo, + "rev": $rev, + "sha256": $sha, + "fetchSubmodules": true + } + }' + ;; + *) + fetch_other 2>/dev/null + F='{ + "tag": $tag, + "meta": { + "name": $name, + "url": $url, + "branch": $branch + }, + "git": { + "url": $url, + "rev": $rev, + "sha256": $sha, + "fetchSubmodules": true + } + }' + ;; +esac + +jq -n \ + --arg name "$name" \ + --arg owner "$owner" \ + --arg repo "$repo" \ + --arg tag "$tag" \ + --arg rev "$rev" \ + --arg url "$url" \ + --arg branch "$branch" \ + --arg sha "$sha" \ + "$F" > $file diff --git a/lib/node-env.nix b/lib/node-env.nix new file mode 100644 index 00000000..720e0cc0 --- /dev/null +++ b/lib/node-env.nix @@ -0,0 +1,542 @@ +# This file originates from node2nix + +{stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}: + +let + python = if nodejs ? python then nodejs.python else python2; + + # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise + tarWrapper = runCommand "tarWrapper" {} '' + mkdir -p $out/bin + + cat > $out/bin/tar <> $out/nix-support/hydra-build-products + ''; + }; + + includeDependencies = {dependencies}: + stdenv.lib.optionalString (dependencies != []) + (stdenv.lib.concatMapStrings (dependency: + '' + # Bundle the dependencies of the package + mkdir -p node_modules + cd node_modules + + # Only include dependencies if they don't exist. They may also be bundled in the package. + if [ ! -e "${dependency.name}" ] + then + ${composePackage dependency} + fi + + cd .. + '' + ) dependencies); + + # Recursively composes the dependencies of a package + composePackage = { name, packageName, src, dependencies ? [], ... }@args: + '' + DIR=$(pwd) + cd $TMPDIR + + unpackFile ${src} + + # Make the base dir in which the target dependency resides first + mkdir -p "$(dirname "$DIR/${packageName}")" + + if [ -f "${src}" ] + then + # Figure out what directory has been unpacked + packageDir="$(find . -maxdepth 1 -type d | tail -1)" + + # Restore write permissions to make building work + find "$packageDir" -type d -print0 | xargs -0 chmod u+x + chmod -R u+w "$packageDir" + + # Move the extracted tarball into the output folder + mv "$packageDir" "$DIR/${packageName}" + elif [ -d "${src}" ] + then + # Get a stripped name (without hash) of the source directory. + # On old nixpkgs it's already set internally. + if [ -z "$strippedName" ] + then + strippedName="$(stripHash ${src})" + fi + + # Restore write permissions to make building work + chmod -R u+w "$strippedName" + + # Move the extracted directory into the output folder + mv "$strippedName" "$DIR/${packageName}" + fi + + # Unset the stripped name to not confuse the next unpack step + unset strippedName + + # Include the dependencies of the package + cd "$DIR/${packageName}" + ${includeDependencies { inherit dependencies; }} + cd .. + ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + ''; + + pinpointDependencies = {dependencies, production}: + let + pinpointDependenciesFromPackageJSON = writeTextFile { + name = "pinpointDependencies.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function resolveDependencyVersion(location, name) { + if(location == process.env['NIX_STORE']) { + return null; + } else { + var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); + + if(fs.existsSync(dependencyPackageJSON)) { + var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); + + if(dependencyPackageObj.name == name) { + return dependencyPackageObj.version; + } + } else { + return resolveDependencyVersion(path.resolve(location, ".."), name); + } + } + } + + function replaceDependencies(dependencies) { + if(typeof dependencies == "object" && dependencies !== null) { + for(var dependency in dependencies) { + var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); + + if(resolvedVersion === null) { + process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); + } else { + dependencies[dependency] = resolvedVersion; + } + } + } + } + + /* Read the package.json configuration */ + var packageObj = JSON.parse(fs.readFileSync('./package.json')); + + /* Pinpoint all dependencies */ + replaceDependencies(packageObj.dependencies); + if(process.argv[2] == "development") { + replaceDependencies(packageObj.devDependencies); + } + replaceDependencies(packageObj.optionalDependencies); + + /* Write the fixed package.json file */ + fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); + ''; + }; + in + '' + node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"} + + ${stdenv.lib.optionalString (dependencies != []) + '' + if [ -d node_modules ] + then + cd node_modules + ${stdenv.lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} + cd .. + fi + ''} + ''; + + # Recursively traverses all dependencies of a package and pinpoints all + # dependencies in the package.json file to the versions that are actually + # being used. + + pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args: + '' + if [ -d "${packageName}" ] + then + cd "${packageName}" + ${pinpointDependencies { inherit dependencies production; }} + cd .. + ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + fi + ''; + + # Extract the Node.js source code which is used to compile packages with + # native bindings + nodeSources = runCommand "node-sources" {} '' + tar --no-same-owner --no-same-permissions -xf ${nodejs.src} + mv node-* $out + ''; + + # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) + addIntegrityFieldsScript = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function augmentDependencies(baseDir, dependencies) { + for(var dependencyName in dependencies) { + var dependency = dependencies[dependencyName]; + + // Open package.json and augment metadata fields + var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); + var packageJSONPath = path.join(packageJSONDir, "package.json"); + + if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored + console.log("Adding metadata fields to: "+packageJSONPath); + var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); + + if(dependency.integrity) { + packageObj["_integrity"] = dependency.integrity; + } else { + packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. + } + + packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. + fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); + } + + // Augment transitive dependencies + if(dependency.dependencies !== undefined) { + augmentDependencies(packageJSONDir, dependency.dependencies); + } + } + } + + if(fs.existsSync("./package-lock.json")) { + var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); + + if(packageLock.lockfileVersion !== 1) { + process.stderr.write("Sorry, I only understand lock file version 1!\n"); + process.exit(1); + } + + if(packageLock.dependencies !== undefined) { + augmentDependencies(".", packageLock.dependencies); + } + } + ''; + }; + + # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes + reconstructPackageLock = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + var packageObj = JSON.parse(fs.readFileSync("package.json")); + + var lockObj = { + name: packageObj.name, + version: packageObj.version, + lockfileVersion: 1, + requires: true, + dependencies: {} + }; + + function augmentPackageJSON(filePath, dependencies) { + var packageJSON = path.join(filePath, "package.json"); + if(fs.existsSync(packageJSON)) { + var packageObj = JSON.parse(fs.readFileSync(packageJSON)); + dependencies[packageObj.name] = { + version: packageObj.version, + integrity: "sha1-000000000000000000000000000=", + dependencies: {} + }; + processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); + } + } + + function processDependencies(dir, dependencies) { + if(fs.existsSync(dir)) { + var files = fs.readdirSync(dir); + + files.forEach(function(entry) { + var filePath = path.join(dir, entry); + var stats = fs.statSync(filePath); + + if(stats.isDirectory()) { + if(entry.substr(0, 1) == "@") { + // When we encounter a namespace folder, augment all packages belonging to the scope + var pkgFiles = fs.readdirSync(filePath); + + pkgFiles.forEach(function(entry) { + if(stats.isDirectory()) { + var pkgFilePath = path.join(filePath, entry); + augmentPackageJSON(pkgFilePath, dependencies); + } + }); + } else { + augmentPackageJSON(filePath, dependencies); + } + } + }); + } + } + + processDependencies("node_modules", lockObj.dependencies); + + fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); + ''; + }; + + # Builds and composes an NPM package including all its dependencies + buildNodePackage = + { name + , packageName + , version + , dependencies ? [] + , buildInputs ? [] + , production ? true + , npmFlags ? "" + , dontNpmInstall ? false + , bypassCache ? false + , preRebuild ? "" + , dontStrip ? true + , unpackPhase ? "true" + , buildPhase ? "true" + , ... }@args: + + let + forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ]; + in + stdenv.mkDerivation ({ + name = "node-${name}-${version}"; + buildInputs = [ tarWrapper python nodejs ] + ++ stdenv.lib.optional (stdenv.isLinux) utillinux + ++ stdenv.lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall preRebuild unpackPhase buildPhase; + + compositionScript = composePackage args; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; + + installPhase = '' + # Create and enter a root node_modules/ folder + mkdir -p $out/lib/node_modules + cd $out/lib/node_modules + + # Compose the package and all its dependencies + source $compositionScriptPath + + # Pinpoint the versions of all dependencies to the ones that are actually being used + echo "pinpointing versions of dependencies..." + source $pinpointDependenciesScriptPath + + # Patch the shebangs of the bundled modules to prevent them from + # calling executables outside the Nix store as much as possible + patchShebangs . + + # Deploy the Node.js package by running npm install. Since the + # dependencies have been provided already by ourselves, it should not + # attempt to install them again, which is good, because we want to make + # it Nix's responsibility. If it needs to install any dependencies + # anyway (e.g. because the dependency parameters are + # incomplete/incorrect), it fails. + # + # The other responsibilities of NPM are kept -- version checks, build + # steps, postprocessing etc. + + export HOME=$TMPDIR + cd "${packageName}" + runHook preRebuild + + ${stdenv.lib.optionalString bypassCache '' + if [ ! -f package-lock.json ] + then + echo "No package-lock.json file found, reconstructing..." + node ${reconstructPackageLock} + fi + + node ${addIntegrityFieldsScript} + ''} + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild + + if [ "$dontNpmInstall" != "1" ] + then + # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. + rm -f npm-shrinkwrap.json + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install + fi + + # Create symlink to the deployed executable folder, if applicable + if [ -d "$out/lib/node_modules/.bin" ] + then + ln -s $out/lib/node_modules/.bin $out/bin + fi + + # Create symlinks to the deployed manual page folders, if applicable + if [ -d "$out/lib/node_modules/${packageName}/man" ] + then + mkdir -p $out/share + for dir in "$out/lib/node_modules/${packageName}/man/"* + do + mkdir -p $out/share/man/$(basename "$dir") + for page in "$dir"/* + do + ln -s $page $out/share/man/$(basename "$dir") + done + done + fi + + # Run post install hook, if provided + runHook postInstall + ''; + } // extraArgs); + + # Builds a development shell + buildNodeShell = + { name + , packageName + , version + , src + , dependencies ? [] + , buildInputs ? [] + , production ? true + , npmFlags ? "" + , dontNpmInstall ? false + , bypassCache ? false + , dontStrip ? true + , unpackPhase ? "true" + , buildPhase ? "true" + , ... }@args: + + let + forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; + + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ]; + + nodeDependencies = stdenv.mkDerivation ({ + name = "node-dependencies-${name}-${version}"; + + buildInputs = [ tarWrapper python nodejs ] + ++ stdenv.lib.optional (stdenv.isLinux) utillinux + ++ stdenv.lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall unpackPhase buildPhase; + + includeScript = includeDependencies { inherit dependencies; }; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; + + installPhase = '' + mkdir -p $out/${packageName} + cd $out/${packageName} + + source $includeScriptPath + + # Create fake package.json to make the npm commands work properly + cp ${src}/package.json . + chmod 644 package.json + ${stdenv.lib.optionalString bypassCache '' + if [ -f ${src}/package-lock.json ] + then + cp ${src}/package-lock.json . + fi + ''} + + # Pinpoint the versions of all dependencies to the ones that are actually being used + echo "pinpointing versions of dependencies..." + cd .. + ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + source $pinpointDependenciesScriptPath + cd ${packageName} + + # Patch the shebangs of the bundled modules to prevent them from + # calling executables outside the Nix store as much as possible + patchShebangs . + + export HOME=$PWD + + ${stdenv.lib.optionalString bypassCache '' + if [ ! -f package-lock.json ] + then + echo "No package-lock.json file found, reconstructing..." + node ${reconstructPackageLock} + fi + + node ${addIntegrityFieldsScript} + ''} + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild + + ${stdenv.lib.optionalString (!dontNpmInstall) '' + # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. + rm -f npm-shrinkwrap.json + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install + ''} + + cd .. + ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + mv ${packageName} lib + ln -s $out/lib/node_modules/.bin $out/bin + ''; + } // extraArgs); + in + stdenv.mkDerivation { + name = "node-shell-${name}-${version}"; + + buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ buildInputs; + buildCommand = '' + mkdir -p $out/bin + cat > $out/bin/shell < 0: + return props["branch"].replace("/", "_") + else: + return "HEAD" + +def package_and_upload(package, package_dest, package_url): + return [ + steps.ShellCommand(name="build package", + logEnviron=False, haltOnFailure=True, workdir="source", + command=["git", "archive", "HEAD", "-o", package]), + + steps.FileUpload(name="upload package", workersrc=package, + workdir="source", masterdest=package_dest, + url=package_url, mode=0o644), + + steps.ShellCommand(name="cleanup package", logEnviron=False, + haltOnFailure=True, workdir="source", alwaysRun=True, + command=["rm", "-f", package]), + ] + +# Schedulers +def force_scheduler(name, builders): + return schedulers.ForceScheduler(name=name, + label="Force build", buttonName="Force build", + reason=util.StringParameter(name="reason", label="Reason", default="Force build"), + codebases=[ + util.CodebaseParameter("", + branch=util.StringParameter( + name="branch", label="Git reference (tag, branch)", required=True), + revision=util.FixedParameter(name="revision", default=""), + repository=util.FixedParameter(name="repository", default=""), + project=util.FixedParameter(name="project", default=""), + ), + ], + username=util.FixedParameter(name="username", default="Web button"), + builderNames=builders) + +def deploy_scheduler(name, builders): + return schedulers.ForceScheduler(name=name, + builderNames=builders, + label="Deploy built package", buttonName="Deploy", + username=util.FixedParameter(name="username", default="Web button"), + codebases=[ + util.CodebaseParameter(codebase="", + branch=util.FixedParameter(name="branch", default=""), + revision=util.FixedParameter(name="revision", default=""), + repository=util.FixedParameter(name="repository", default=""), + project=util.FixedParameter(name="project", default=""))], + reason=util.FixedParameter(name="reason", default="Deploy"), + properties=[ + util.ChoiceStringParameter(label="Environment", + name="environment", default="integration", + choices=["integration", "production"]), + BuildsList(label="Build to deploy", name="build"), + ] + ) + +def hook_scheduler(project, timer=10): + return schedulers.AnyBranchScheduler( + change_filter=util.ChangeFilter(category="hooks", project=project), + name=project, treeStableTimer=timer, builderNames=["{}_build".format(project)]) + +# Slack/XMPP status push +from buildbot.reporters.http import HttpStatusPushBase +from twisted.internet import defer +from twisted.python import log +from buildbot.util import httpclientservice +from buildbot.reporters import utils +from buildbot.process import results +from twisted.words.protocols.jabber.jid import JID +from wokkel import client, xmppim +from functools import partial + +class SlackStatusPush(HttpStatusPushBase): + name = "SlackStatusPush" + + @defer.inlineCallbacks + def reconfigService(self, serverUrl, **kwargs): + yield HttpStatusPushBase.reconfigService(self, **kwargs) + self._http = yield httpclientservice.HTTPClientService.getService( + self.master, serverUrl) + + @defer.inlineCallbacks + def send(self, build): + yield utils.getDetailsForBuild(self.master, build, wantProperties=True) + response = yield self._http.post("", json=self.format(build)) + if response.code != 200: + log.msg("%s: unable to upload status: %s" % + (response.code, response.content)) + + def format(self, build): + colors = [ + "#36A64F", # success + "#F1E903", # warnings + "#DA0505", # failure + "#FFFFFF", # skipped + "#000000", # exception + "#FFFFFF", # retry + "#D02CA9", # cancelled + ] + + if "environment" in build["properties"]: + msg = "{} environment".format(build["properties"]["environment"][0]) + if "build" in build["properties"]: + msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg + elif len(build["buildset"]["sourcestamps"][0]["branch"]) > 0: + msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"]) + else: + msg = "build" + + if build["complete"]: + timedelta = int((build["complete_at"] - build["started_at"]).total_seconds()) + hours, rest = divmod(timedelta, 3600) + minutes, seconds = divmod(rest, 60) + if hours > 0: + duration = "{}h {}min {}s".format(hours, minutes, seconds) + elif minutes > 0: + duration = "{}min {}s".format(minutes, seconds) + else: + duration = "{}s".format(seconds) + + text = "Build <{}|{}> of {}'s {} was {} in {}.".format( + build["url"], build["buildid"], + build["builder"]["name"], + msg, + results.Results[build["results"]], + duration, + ) + fields = [ + { + "title": "Build", + "value": "<{}|{}>".format(build["url"], build["buildid"]), + "short": True, + }, + { + "title": "Project", + "value": build["builder"]["name"], + "short": True, + }, + { + "title": "Build status", + "value": results.Results[build["results"]], + "short": True, + }, + { + "title": "Build duration", + "value": duration, + "short": True, + }, + ] + if "environment" in build["properties"]: + fields.append({ + "title": "Environment", + "value": build["properties"]["environment"][0], + "short": True, + }) + if "build" in build["properties"]: + fields.append({ + "title": "Archive", + "value": build["properties"]["build"][0], + "short": True, + }) + attachments = [{ + "fallback": "", + "color": colors[build["results"]], + "fields": fields + }] + else: + text = "Build <{}|{}> of {}'s {} started.".format( + build["url"], build["buildid"], + build["builder"]["name"], + msg, + ) + attachments = [] + + return { + "username": "Buildbot", + "icon_url": "http://docs.buildbot.net/current/_static/icon.png", + "text": text, + "attachments": attachments, + } + +class XMPPStatusPush(HttpStatusPushBase): + name = "XMPPStatusPush" + + @defer.inlineCallbacks + def reconfigService(self, password, recipients, **kwargs): + yield HttpStatusPushBase.reconfigService(self, **kwargs) + self.password = password + self.recipients = recipients + + @defer.inlineCallbacks + def send(self, build): + yield utils.getDetailsForBuild(self.master, build, wantProperties=True) + body = self.format(build) + factory = client.DeferredClientFactory(JID("notify_bot@immae.fr/buildbot"), self.password) + d = client.clientCreator(factory) + def send_message(recipient, stream): + message = xmppim.Message(recipient=JID(recipient), body=body) + message.stanzaType = 'chat' + stream.send(message.toElement()) + # To allow chaining + return stream + for recipient in self.recipients: + d.addCallback(partial(send_message, recipient)) + d.addCallback(lambda _: factory.streamManager.xmlstream.sendFooter()) + d.addErrback(log.err) + + def format(self, build): + if "environment" in build["properties"]: + msg = "{} environment".format(build["properties"]["environment"][0]) + if "build" in build["properties"]: + msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg + elif len(build["buildset"]["sourcestamps"][0]["branch"]) > 0: + msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"]) + else: + msg = "build" + + if build["complete"]: + timedelta = int((build["complete_at"] - build["started_at"]).total_seconds()) + hours, rest = divmod(timedelta, 3600) + minutes, seconds = divmod(rest, 60) + if hours > 0: + duration = "{}h {}min {}s".format(hours, minutes, seconds) + elif minutes > 0: + duration = "{}min {}s".format(minutes, seconds) + else: + duration = "{}s".format(seconds) + + text = "Build {} ( {} ) of {}'s {} was {} in {}.".format( + build["buildid"], build["url"], + build["builder"]["name"], + msg, + results.Results[build["results"]], + duration, + ) + else: + text = "Build {} ( {} ) of {}'s {} started.".format( + build["buildid"], build["url"], + build["builder"]["name"], + msg, + ) + + return text diff --git a/modules/private/buildbot/common/master.cfg b/modules/private/buildbot/common/master.cfg new file mode 100644 index 00000000..abe08e0a --- /dev/null +++ b/modules/private/buildbot/common/master.cfg @@ -0,0 +1,69 @@ +# -*- python -*- +# ex: set filetype=python: + +from buildbot.plugins import secrets, util, webhooks +from buildbot.util import bytes2unicode +import re +import os +from buildbot_config import E, configure +import json + +class CustomBase(webhooks.base): + def getChanges(self, request): + try: + content = request.content.read() + args = json.loads(bytes2unicode(content)) + except Exception as e: + raise ValueError("Error loading JSON: " + str(e)) + + args.setdefault("comments", "") + args.setdefault("repository", "") + args.setdefault("author", args.get("who")) + + return ([args], None) + +userInfoProvider = util.LdapUserInfo( + uri=E.LDAP_URL, + bindUser=E.LDAP_ADMIN_USER, + bindPw=open(E.SECRETS_FILE + "/ldap", "r").read().rstrip(), + accountBase=E.LDAP_BASE, + accountPattern=E.LDAP_PATTERN, + accountFullName='cn', + accountEmail='mail', + avatarData="jpegPhoto", + groupBase=E.LDAP_BASE, + groupName="cn", + groupMemberPattern=E.LDAP_GROUP_PATTERN, + ) + +c = BuildmasterConfig = { + "title": E.TITLE, + "titleURL": E.TITLE_URL, + "db": { + "db_url": "sqlite:///state.sqlite" + }, + "protocols": { "pb": { "port": E.PB_SOCKET } }, + "workers": [], + "change_source": [], + "schedulers": [], + "builders": [], + "services": [], + "secretsProviders": [ + secrets.SecretInAFile(E.SECRETS_FILE), + ], + "www": { + "change_hook_dialects": { "base": { "custom_class": CustomBase } }, + "plugins": { + "waterfall_view": {}, + "console_view": {}, + "grid_view": {}, + "buildslist": {}, + }, + "auth": util.RemoteUserAuth( + header=b"X-Remote-User", + userInfoProvider=userInfoProvider, + headerRegex=re.compile(br"(?P[^ @]+)")), + } + } + +configure(c) diff --git a/modules/private/buildbot/default.nix b/modules/private/buildbot/default.nix new file mode 100644 index 00000000..fa6a6f20 --- /dev/null +++ b/modules/private/buildbot/default.nix @@ -0,0 +1,198 @@ +{ lib, pkgs, config, myconfig, ... }: +let + varDir = "/var/lib/buildbot"; + buildbot_common = pkgs.python3Packages.buildPythonPackage rec { + name = "buildbot_common"; + src = ./common; + format = "other"; + installPhase = '' + mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages} + cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common + ''; + }; + buildbot = pkgs.python3Packages.buildbot-full; +in +{ + options = { + myServices.buildbot.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable buildbot. + ''; + }; + }; + + config = lib.mkIf config.myServices.buildbot.enable { + ids.uids.buildbot = myconfig.env.buildbot.user.uid; + ids.gids.buildbot = myconfig.env.buildbot.user.gid; + + users.groups.buildbot.gid = config.ids.gids.buildbot; + users.users.buildbot = { + name = "buildbot"; + uid = config.ids.uids.buildbot; + group = "buildbot"; + description = "Buildbot user"; + home = varDir; + extraGroups = [ "keys" ]; + }; + + services.websites.tools.vhostConfs.git.extraConfig = lib.attrsets.mapAttrsToList (k: project: '' + RedirectMatch permanent "^/buildbot/${project.name}$" "/buildbot/${project.name}/" + RewriteEngine On + RewriteRule ^/buildbot/${project.name}/ws(.*)$ unix:///run/buildbot/${project.name}.sock|ws://git.immae.eu/ws$1 [P,NE,QSA,L] + ProxyPass /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ + ProxyPassReverse /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ + + Use LDAPConnect + Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu + + SetEnvIf X-Url-Scheme https HTTPS=1 + ProxyPreserveHost On + + + + Require local + Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu + Include /var/secrets/buildbot/${project.name}/webhook-httpd-include + + + '') myconfig.env.buildbot.projects; + + system.activationScripts = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { + deps = [ "users" "wrappers" ]; + text = project.activationScript; + }) myconfig.env.buildbot.projects; + + secrets.keys = ( + lib.lists.flatten ( + lib.attrsets.mapAttrsToList (k: project: + lib.attrsets.mapAttrsToList (k: v: + { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = v; + dest = "buildbot/${project.name}/${k}"; + } + ) project.secrets + ++ [ + { + permissions = "0600"; + user = "wwwrun"; + group = "wwwrun"; + text = lib.optionalString (lib.attrsets.hasAttr "webhookTokens" project) '' + Require expr "req('Access-Key') in { ${builtins.concatStringsSep ", " (map (x: "'${x}'") project.webhookTokens)} }" + ''; + dest = "buildbot/${project.name}/webhook-httpd-include"; + } + ] + ) myconfig.env.buildbot.projects + ) + ) ++ [ + { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = myconfig.env.buildbot.ldap.password; + dest = "buildbot/ldap"; + } + { + permissions = "0600"; + user = "buildbot"; + group = "buildbot"; + text = builtins.readFile "${myconfig.privateFiles}/buildbot_ssh_key"; + dest = "buildbot/ssh_key"; + } + ]; + + systemd.services = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { + description = "Buildbot Continuous Integration Server ${project.name}."; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + path = project.packages pkgs ++ (project.pythonPackages buildbot.pythonModule pkgs); + preStart = let + master-cfg = "${buildbot_common}/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common/master.cfg"; + tac_file = pkgs.writeText "buildbot.tac" '' + import os + + from twisted.application import service + from buildbot.master import BuildMaster + + basedir = '${varDir}/${project.name}' + rotateLength = 10000000 + maxRotatedFiles = 10 + configfile = '${master-cfg}' + + # Default umask for server + umask = None + + # if this is a relocatable tac file, get the directory containing the TAC + if basedir == '.': + import os + basedir = os.path.abspath(os.path.dirname(__file__)) + + # note: this line is matched against to check that this is a buildmaster + # directory; do not edit it. + application = service.Application('buildmaster') + from twisted.python.logfile import LogFile + from twisted.python.log import ILogObserver, FileLogObserver + logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength, + maxRotatedFiles=maxRotatedFiles) + application.setComponent(ILogObserver, FileLogObserver(logfile).emit) + + m = BuildMaster(basedir, configfile, umask) + m.setServiceParent(application) + m.log_rotation.rotateLength = rotateLength + m.log_rotation.maxRotatedFiles = maxRotatedFiles + ''; + in '' + if [ ! -f ${varDir}/${project.name}/buildbot.tac ]; then + ${buildbot}/bin/buildbot create-master -c "${master-cfg}" "${varDir}/${project.name}" + rm -f ${varDir}/${project.name}/master.cfg.sample + rm -f ${varDir}/${project.name}/buildbot.tac + fi + ln -sf ${tac_file} ${varDir}/${project.name}/buildbot.tac + # different buildbots may be trying that simultaneously, add the || true to avoid complaining in case of race + install -Dm600 -o buildbot -g buildbot -T /var/secrets/buildbot/ssh_key ${varDir}/buildbot_key || true + buildbot_secrets=${varDir}/${project.name}/secrets + install -m 0700 -o buildbot -g buildbot -d $buildbot_secrets + install -Dm600 -o buildbot -g buildbot -T /var/secrets/buildbot/ldap $buildbot_secrets/ldap + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList + (k: v: "install -Dm600 -o buildbot -g buildbot -T /var/secrets/buildbot/${project.name}/${k} $buildbot_secrets/${k}") project.secrets + )} + ''; + environment = let + project_env = lib.attrsets.mapAttrs' (k: v: lib.attrsets.nameValuePair "BUILDBOT_${k}" v) project.environment; + buildbot_config = pkgs.python3Packages.buildPythonPackage (rec { + name = "buildbot_config-${project.name}"; + src = ./projects + "/${project.name}"; + format = "other"; + installPhase = '' + mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages} + cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_config + ''; + }); + HOME = "${varDir}/${project.name}"; + PYTHONPATH = "${buildbot.pythonModule.withPackages (self: project.pythonPackages self pkgs ++ [ + pkgs.python3Packages.wokkel + pkgs.python3Packages.treq pkgs.python3Packages.ldap3 buildbot + pkgs.python3Packages.buildbot-worker + buildbot_common buildbot_config + ])}/${buildbot.pythonModule.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${pkgs.python3.pythonForBuild.sitePackages}" else ""}"; + in project_env // { inherit PYTHONPATH HOME; }; + + serviceConfig = { + Type = "forking"; + User = "buildbot"; + Group = "buildbot"; + RuntimeDirectory = "buildbot"; + RuntimeDirectoryPreserve = "yes"; + StateDirectory = "buildbot"; + SupplementaryGroups = "keys"; + WorkingDirectory = "${varDir}/${project.name}"; + ExecStart = "${buildbot}/bin/buildbot start"; + }; + }) myconfig.env.buildbot.projects; + }; +} diff --git a/modules/private/buildbot/projects/caldance/__init__.py b/modules/private/buildbot/projects/caldance/__init__.py new file mode 100644 index 00000000..2c0bad5b --- /dev/null +++ b/modules/private/buildbot/projects/caldance/__init__.py @@ -0,0 +1,190 @@ +from buildbot.plugins import * +from buildbot_common.build_helpers import * +import os +from buildbot.util import bytes2unicode +import json + +__all__ = [ "configure", "E" ] + +class E(): + PROJECT = "caldance" + BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) + SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) + PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) + RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) + RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) + GIT_URL = "gitolite@git.immae.eu:perso/simon_descarpentries/www.cal-dance.com" + SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" + SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF" + LDAP_HOST = "ldap.immae.eu" + LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" + XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ") + + PUPPET_HOST = { + "integration": "root@caldance.immae.eu", + } + + # master.cfg + SECRETS_FILE = os.getcwd() + "/secrets" + LDAP_URL = "ldaps://ldap.immae.eu:636" + LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_BASE = "dc=immae,dc=eu" + LDAP_PATTERN = "(uid=%(username)s)" + LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=caldance,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" + TITLE_URL = "https://caldance.immae.eu" + TITLE = "Caldance" + +class CustomBase(webhooks.base): + def getChanges(self, request): + try: + content = request.content.read() + args = json.loads(bytes2unicode(content)) + except Exception as e: + raise ValueError("Error loading JSON: " + str(e)) + + args.setdefault("comments", "") + args.setdefault("repository", "") + args.setdefault("author", args.get("who", "unknown")) + + if args["category"] == "deploy_webhook": + args = { + "category": "deploy_webhook", + "comments": "", + "repository": "", + "author": "webhook", + "project": "Caldance", + "properties": { + "environment": args.get("environment", "integration"), + "build": "caldance_{}.tar.gz".format(args.get("build", "master")) + } + } + + return ([args], None) + +def deploy_hook_scheduler(project, timer=1): + return schedulers.AnyBranchScheduler( + change_filter=util.ChangeFilter(category="deploy_webhook", project=project), + name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)]) + +def configure(c): + c["buildbotURL"] = E.BUILDBOT_URL + c["www"]["port"] = E.SOCKET + + c["www"]["change_hook_dialects"]["base"] = { + "custom_class": CustomBase + } + c['workers'].append(worker.LocalWorker("generic-worker")) + c['workers'].append(worker.LocalWorker("deploy-worker")) + + c['schedulers'].append(hook_scheduler("Caldance", timer=1)) + c['schedulers'].append(force_scheduler("force_caldance", ["Caldance_build"])) + c['schedulers'].append(deploy_scheduler("deploy_caldance", ["Caldance_deploy"])) + c['schedulers'].append(deploy_hook_scheduler("Caldance", timer=1)) + + c['builders'].append(factory("caldance")) + + c['builders'].append(deploy_factory("caldance")) + + c['services'].append(SlackStatusPush( + name="slack_status_caldance", + builders=["Caldance_build", "Caldance_deploy"], + serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) + c['services'].append(XMPPStatusPush( + name="xmpp_status_caldance", + builders=["Caldance_build", "Caldance_deploy"], + recipients=E.XMPP_RECIPIENTS, + password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip())) + +def factory(project, ignore_fails=False): + release_file = "{1}/{0}_%(kw:clean_branch)s.tar.gz" + + package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch) + package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch) + package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch) + + factory = util.BuildFactory() + factory.addStep(steps.Git(logEnviron=False, repourl=E.GIT_URL, + sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), + sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) + factory.addSteps(package_and_upload(package, package_dest, package_url)) + + return util.BuilderConfig( + name="{}_build".format(project.capitalize()), + workernames=["generic-worker"], factory=factory) + +def compute_build_infos(project): + @util.renderer + def compute(props): + import re, hashlib + build_file = props.getProperty("build") + package_dest = "{1}/{0}".format(build_file, E.RELEASE_PATH) + version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1) + with open(package_dest, "rb") as f: + sha = hashlib.sha256(f.read()).hexdigest() + return { + "build_version": version, + "build_hash": sha, + } + return compute + +@util.renderer +def puppet_host(props): + environment = props["environment"] if props.hasProperty("environment") else "integration" + return E.PUPPET_HOST.get(environment, "host.invalid") + +def deploy_factory(project): + package_dest = util.Interpolate("{0}/%(prop:build)s".format(E.RELEASE_PATH)) + + factory = util.BuildFactory() + factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) + factory.addStep(steps.SetProperties(properties=compute_build_infos(project))) + factory.addStep(LdapPush(environment=util.Property("environment"), + project=project, build_version=util.Property("build_version"), + build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap"))) + factory.addStep(steps.MasterShellCommand(command=[ + "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host])) + return util.BuilderConfig(name="{}_deploy".format(project.capitalize()), workernames=["deploy-worker"], factory=factory) + +from twisted.internet import defer +from buildbot.process.buildstep import FAILURE +from buildbot.process.buildstep import SUCCESS +from buildbot.process.buildstep import BuildStep + +class LdapPush(BuildStep): + name = "LdapPush" + renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"] + + def __init__(self, **kwargs): + self.environment = kwargs.pop("environment") + self.project = kwargs.pop("project") + self.build_version = kwargs.pop("build_version") + self.build_hash = kwargs.pop("build_hash") + self.ldap_password = kwargs.pop("ldap_password") + self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) + super().__init__(**kwargs) + + def run(self): + import json + from ldap3 import Reader, Writer, Server, Connection, ObjectDef + server = Server(self.ldap_host) + conn = Connection(server, + user=E.LDAP_DN, + password=self.ldap_password) + conn.bind() + obj = ObjectDef("immaePuppetClass", conn) + r = Reader(conn, obj, + "cn=caldance.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) + r.search() + if len(r) > 0: + w = Writer.from_cursor(r) + for value in w[0].immaePuppetJson.values: + config = json.loads(value) + if "role::caldance::{}_version".format(self.project) in config: + config["role::caldance::{}_version".format(self.project)] = self.build_version + config["role::caldance::{}_sha256".format(self.project)] = self.build_hash + w[0].immaePuppetJson -= value + w[0].immaePuppetJson += json.dumps(config, indent=" ") + w.commit() + return defer.succeed(SUCCESS) + return defer.succeed(FAILURE) diff --git a/modules/private/buildbot/projects/cryptoportfolio/__init__.py b/modules/private/buildbot/projects/cryptoportfolio/__init__.py new file mode 100644 index 00000000..5d70f957 --- /dev/null +++ b/modules/private/buildbot/projects/cryptoportfolio/__init__.py @@ -0,0 +1,169 @@ +from buildbot.plugins import * +from buildbot_common.build_helpers import * +import os + +__all__ = [ "configure", "E" ] + +class E(): + PROJECT = "cryptoportfolio" + BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) + SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) + PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) + RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) + RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) + GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/{0}.git" + SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" + LDAP_HOST = "ldap.immae.eu" + LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" + + PUPPET_HOST = { + "production": "root@cryptoportfolio.immae.eu", + "integration": "root@cryptoportfolio-dev.immae.eu" + } + + # master.cfg + SECRETS_FILE = os.getcwd() + "/secrets" + LDAP_URL = "ldaps://ldap.immae.eu:636" + LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_BASE = "dc=immae,dc=eu" + LDAP_PATTERN = "(uid=%(username)s)" + LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=cryptoportfolio,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" + TITLE_URL = "https://git.immae.eu" + TITLE = "Cryptoportfolio" + +# eval .. dans .zshrc_local +# mkdir -p $BUILD/go +# export GOPATH=$BUILD/go +# go get -u github.com/golang/dep/cmd/dep +# export PATH=$PATH:$BUILD/go/bin +# go get git.immae.eu/Cryptoportfolio/Front.git +# cd $BUILD/go/src/git.immae.eu/Cryptoportfolio/Front.git +# git checkout dev +# dep ensure +def configure(c): + c["buildbotURL"] = E.BUILDBOT_URL + c["www"]["port"] = E.SOCKET + + c['workers'].append(worker.LocalWorker("generic-worker")) + c['workers'].append(worker.LocalWorker("deploy-worker")) + + c['schedulers'].append(hook_scheduler("Trader")) + c['schedulers'].append(hook_scheduler("Front")) + c['schedulers'].append(force_scheduler( + "force_cryptoportfolio", ["Trader_build", "Front_build"])) + c['schedulers'].append(deploy_scheduler("deploy_cryptoportfolio", + ["Trader_deploy", "Front_deploy"])) + + c['builders'].append(factory("trader")) + c['builders'].append(factory("front", ignore_fails=True)) + + c['builders'].append(deploy_factory("trader")) + c['builders'].append(deploy_factory("front")) + + c['services'].append(SlackStatusPush( + name="slack_status_cryptoportfolio", + builders=["Front_build", "Trader_build", "Front_deploy", "Trader_deploy"], + serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) + +def factory(project, ignore_fails=False): + release_file = "{1}/{0}/{0}_%(kw:clean_branch)s.tar.gz" + + url = E.GIT_URL.format(project.capitalize()) + + package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch) + package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch) + package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch) + + factory = util.BuildFactory() + factory.addStep(steps.Git(logEnviron=False, repourl=url, + mode="full", method="copy")) + factory.addStep(steps.ShellCommand(name="make install", + logEnviron=False, haltOnFailure=(not ignore_fails), + warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), + command=["make", "install"])) + factory.addStep(steps.ShellCommand(name="make test", + logEnviron=False, haltOnFailure=(not ignore_fails), + warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), + command=["make", "test"])) + factory.addSteps(package_and_upload(package, package_dest, package_url)) + + return util.BuilderConfig( + name="{}_build".format(project.capitalize()), + workernames=["generic-worker"], factory=factory) + +def compute_build_infos(project): + @util.renderer + def compute(props): + import re, hashlib + build_file = props.getProperty("build") + package_dest = "{2}/{0}/{1}".format(project, build_file, E.RELEASE_PATH) + version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1) + with open(package_dest, "rb") as f: + sha = hashlib.sha256(f.read()).hexdigest() + return { + "build_version": version, + "build_hash": sha, + } + return compute + +@util.renderer +def puppet_host(props): + environment = props["environment"] if props.hasProperty("environment") else "integration" + return E.PUPPET_HOST.get(environment, "host.invalid") + +def deploy_factory(project): + package_dest = util.Interpolate("{1}/{0}/%(prop:build)s".format(project, E.RELEASE_PATH)) + + factory = util.BuildFactory() + factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) + factory.addStep(steps.SetProperties(properties=compute_build_infos(project))) + factory.addStep(LdapPush(environment=util.Property("environment"), + project=project, build_version=util.Property("build_version"), + build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap"))) + factory.addStep(steps.MasterShellCommand(command=[ + "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host])) + return util.BuilderConfig(name="{}_deploy".format(project.capitalize()), workernames=["deploy-worker"], factory=factory) + +from twisted.internet import defer +from buildbot.process.buildstep import FAILURE +from buildbot.process.buildstep import SUCCESS +from buildbot.process.buildstep import BuildStep + +class LdapPush(BuildStep): + name = "LdapPush" + renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"] + + def __init__(self, **kwargs): + self.environment = kwargs.pop("environment") + self.project = kwargs.pop("project") + self.build_version = kwargs.pop("build_version") + self.build_hash = kwargs.pop("build_hash") + self.ldap_password = kwargs.pop("ldap_password") + self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) + super().__init__(**kwargs) + + def run(self): + import json + from ldap3 import Reader, Writer, Server, Connection, ObjectDef + server = Server(self.ldap_host) + conn = Connection(server, + user=E.LDAP_DN, + password=self.ldap_password) + conn.bind() + obj = ObjectDef("immaePuppetClass", conn) + r = Reader(conn, obj, + "cn=cryptoportfolio.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) + r.search() + if len(r) > 0: + w = Writer.from_cursor(r) + for value in w[0].immaePuppetJson.values: + config = json.loads(value) + if "role::cryptoportfolio::{}_version".format(self.project) in config: + config["role::cryptoportfolio::{}_version".format(self.project)] = self.build_version + config["role::cryptoportfolio::{}_sha256".format(self.project)] = self.build_hash + w[0].immaePuppetJson -= value + w[0].immaePuppetJson += json.dumps(config, indent=" ") + w.commit() + return defer.succeed(SUCCESS) + return defer.succeed(FAILURE) diff --git a/modules/private/buildbot/projects/test/__init__.py b/modules/private/buildbot/projects/test/__init__.py new file mode 100644 index 00000000..e6b8d514 --- /dev/null +++ b/modules/private/buildbot/projects/test/__init__.py @@ -0,0 +1,188 @@ +from buildbot.plugins import * +from buildbot_common.build_helpers import * +import os +from buildbot.util import bytes2unicode +import json + +__all__ = [ "configure", "E" ] + +class E(): + PROJECT = "test" + BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) + SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) + PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) + RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) + RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) + GIT_URL = "https://git.immae.eu/perso/Immae/TestProject.git" + SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" + PUPPET_HOST = "root@backup-1.v.immae.eu" + LDAP_HOST = "ldap.immae.eu" + LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" + XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ") + + # master.cfg + SECRETS_FILE = os.getcwd() + "/secrets" + LDAP_URL = "ldaps://ldap.immae.eu:636" + LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_BASE = "dc=immae,dc=eu" + LDAP_PATTERN = "(uid=%(username)s)" + LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=test,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" + TITLE_URL = "https://git.immae.eu/?p=perso/Immae/TestProject.git;a=summary" + TITLE = "Test project" + +class CustomBase(webhooks.base): + def getChanges(self, request): + try: + content = request.content.read() + args = json.loads(bytes2unicode(content)) + except Exception as e: + raise ValueError("Error loading JSON: " + str(e)) + + args.setdefault("comments", "") + args.setdefault("repository", "") + args.setdefault("author", args.get("who", "unknown")) + + if args["category"] == "deploy_webhook": + args = { + "category": "deploy_webhook", + "comments": "", + "repository": "", + "author": "unknown", + "project": "TestProject", + "properties": { + "environment": args.get("environment", "integration"), + "build": "test_{}.tar.gz".format(args.get("branch", "master")) + } + } + + return ([args], None) + +def deploy_hook_scheduler(project, timer=1): + return schedulers.AnyBranchScheduler( + change_filter=util.ChangeFilter(category="deploy_webhook", project=project), + name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)]) + +def configure(c): + c["buildbotURL"] = E.BUILDBOT_URL + c["www"]["port"] = E.SOCKET + + c["www"]["change_hook_dialects"]["base"] = { + "custom_class": CustomBase + } + c['workers'].append(worker.LocalWorker("generic-worker-test")) + c['workers'].append(worker.LocalWorker("deploy-worker-test")) + + c['schedulers'].append(hook_scheduler("TestProject", timer=1)) + c['schedulers'].append(force_scheduler("force_test", ["TestProject_build"])) + c['schedulers'].append(deploy_scheduler("deploy_test", ["TestProject_deploy"])) + c['schedulers'].append(deploy_hook_scheduler("TestProject", timer=1)) + + c['builders'].append(factory()) + c['builders'].append(deploy_factory()) + + c['services'].append(SlackStatusPush( + name="slack_status_test_project", + builders=["TestProject_build", "TestProject_deploy"], + serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) + c['services'].append(XMPPStatusPush( + name="xmpp_status_test_project", + builders=["TestProject_build", "TestProject_deploy"], + recipients=E.XMPP_RECIPIENTS, + password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip())) + +def factory(): + package = util.Interpolate("test_%(kw:clean_branch)s.tar.gz", clean_branch=clean_branch) + package_dest = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_PATH), clean_branch=clean_branch) + package_url = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_URL), clean_branch=clean_branch) + + factory = util.BuildFactory() + factory.addStep(steps.Git(logEnviron=False, + repourl=E.GIT_URL, mode="full", method="copy")) + factory.addStep(steps.ShellCommand(name="env", + logEnviron=False, command=["env"])) + factory.addStep(steps.ShellCommand(name="pwd", + logEnviron=False, command=["pwd"])) + factory.addStep(steps.ShellCommand(name="true", + logEnviron=False, command=["true"])) + factory.addStep(steps.ShellCommand(name="echo", + logEnviron=False, command=["echo", package])) + factory.addSteps(package_and_upload(package, package_dest, package_url)) + + return util.BuilderConfig(name="TestProject_build", workernames=["generic-worker-test"], factory=factory) + + +def compute_build_infos(): + @util.renderer + def compute(props): + import re, hashlib + build_file = props.getProperty("build") + package_dest = "{}/{}".format(E.RELEASE_PATH, build_file) + version = re.match(r"{0}_(.*).tar.gz".format("test"), build_file).group(1) + with open(package_dest, "rb") as f: + sha = hashlib.sha256(f.read()).hexdigest() + return { + "build_version": version, + "build_hash": sha, + } + return compute + +@util.renderer +def puppet_host(props): + return E.PUPPET_HOST + +def deploy_factory(): + package_dest = util.Interpolate("{}/%(prop:build)s".format(E.RELEASE_PATH)) + + factory = util.BuildFactory() + factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) + factory.addStep(steps.SetProperties(properties=compute_build_infos())) + factory.addStep(LdapPush(environment=util.Property("environment"), + build_version=util.Property("build_version"), + build_hash=util.Property("build_hash"), + ldap_password=util.Secret("ldap"))) + factory.addStep(steps.MasterShellCommand(command=[ + "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host])) + return util.BuilderConfig(name="TestProject_deploy", workernames=["deploy-worker-test"], factory=factory) + +from twisted.internet import defer +from buildbot.process.buildstep import FAILURE +from buildbot.process.buildstep import SUCCESS +from buildbot.process.buildstep import BuildStep + +class LdapPush(BuildStep): + name = "LdapPush" + renderables = ["environment", "build_version", "build_hash", "ldap_password"] + + def __init__(self, **kwargs): + self.environment = kwargs.pop("environment") + self.build_version = kwargs.pop("build_version") + self.build_hash = kwargs.pop("build_hash") + self.ldap_password = kwargs.pop("ldap_password") + self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) + super().__init__(**kwargs) + + def run(self): + import json + from ldap3 import Reader, Writer, Server, Connection, ObjectDef + server = Server(self.ldap_host) + conn = Connection(server, + user=E.LDAP_DN, + password=self.ldap_password) + conn.bind() + obj = ObjectDef("immaePuppetClass", conn) + r = Reader(conn, obj, + "cn=test.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) + r.search() + if len(r) > 0: + w = Writer.from_cursor(r) + for value in w[0].immaePuppetJson.values: + config = json.loads(value) + if "test_version" in config: + config["test_version"] = self.build_version + config["test_sha256"] = self.build_hash + w[0].immaePuppetJson -= value + w[0].immaePuppetJson += json.dumps(config, indent=" ") + w.commit() + return defer.succeed(SUCCESS) + return defer.succeed(FAILURE) diff --git a/modules/private/certificates.nix b/modules/private/certificates.nix new file mode 100644 index 00000000..43f6a234 --- /dev/null +++ b/modules/private/certificates.nix @@ -0,0 +1,52 @@ +{ lib, pkgs, config, ... }: +{ + options.services.myCertificates = { + certConfig = lib.mkOption { + default = { + webroot = "${config.security.acme.directory}/acme-challenge"; + email = "ismael@bouya.org"; + postRun = '' + systemctl reload httpdTools.service httpdInte.service httpdProd.service + ''; + plugins = [ "cert.pem" "chain.pem" "fullchain.pem" "full.pem" "key.pem" "account_key.json" ]; + }; + description = "Default configuration for certificates"; + }; + }; + + config = { + services.websitesCerts = config.services.myCertificates.certConfig; + myServices.databasesCerts = config.services.myCertificates.certConfig; + myServices.ircCerts = config.services.myCertificates.certConfig; + + security.acme.preliminarySelfsigned = true; + + security.acme.certs = { + "eldiron" = config.services.myCertificates.certConfig // { + domain = "eldiron.immae.eu"; + }; + }; + + systemd.services = lib.attrsets.mapAttrs' (k: v: + lib.attrsets.nameValuePair "acme-selfsigned-${k}" (lib.mkBefore { script = + (lib.optionalString (builtins.elem "cert.pem" v.plugins) '' + cp $workdir/server.crt ${config.security.acme.directory}/${k}/cert.pem + chown '${v.user}:${v.group}' ${config.security.acme.directory}/${k}/cert.pem + chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.directory}/${k}/cert.pem + '') + + (lib.optionalString (builtins.elem "chain.pem" v.plugins) '' + cp $workdir/ca.crt ${config.security.acme.directory}/${k}/chain.pem + chown '${v.user}:${v.group}' ${config.security.acme.directory}/${k}/chain.pem + chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.directory}/${k}/chain.pem + '') + ; }) + ) config.security.acme.certs // { + httpdProd.after = [ "acme-selfsigned-certificates.target" ]; + httpdProd.wants = [ "acme-selfsigned-certificates.target" ]; + httpdTools.after = [ "acme-selfsigned-certificates.target" ]; + httpdTools.wants = [ "acme-selfsigned-certificates.target" ]; + httpdInte.after = [ "acme-selfsigned-certificates.target" ]; + httpdInte.wants = [ "acme-selfsigned-certificates.target" ]; + }; + }; +} diff --git a/modules/private/databases/default.nix b/modules/private/databases/default.nix new file mode 100644 index 00000000..3f7a44bf --- /dev/null +++ b/modules/private/databases/default.nix @@ -0,0 +1,63 @@ +{ lib, config, myconfig, ... }: +let + cfg = config.myServices.databases; +in +{ + options.myServices = { + databases.enable = lib.mkEnableOption "my databases service"; + databasesCerts = lib.mkOption { + description = "Default databases configurations for certificates as accepted by acme"; + }; + }; + + config.nixpkgs.overlays = lib.mkIf cfg.enable [ (self: super: { + postgresql = self.postgresql_11_custom; + }) ]; + + config.myServices.databases = lib.mkIf cfg.enable { + mariadb = { + enable = true; + ldapConfig = { + inherit (myconfig.env.ldap) host base; + inherit (myconfig.env.databases.mysql.pam) dn filter password; + }; + credentials.root = myconfig.env.databases.mysql.systemUsers.root; + }; + + openldap = { + accessFile = "${myconfig.privateFiles}/ldap.conf"; + baseDn = myconfig.env.ldap.base; + rootDn = myconfig.env.ldap.root_dn; + rootPw = myconfig.env.ldap.root_pw; + enable = true; + }; + + postgresql = { + ldapConfig = { + inherit (myconfig.env.ldap) host base; + inherit (myconfig.env.databases.postgresql.pam) dn filter password; + }; + replicationLdapConfig = { + inherit (myconfig.env.ldap) host base password; + dn = myconfig.env.ldap.host_dn; + }; + authorizedHosts = { + immaeEu = [{ + ip4 = [ + myconfig.env.servers.immaeEu.ips.main.ip4 + myconfig.env.servers.immaeEu.ips.alt.ip4 + ]; + }]; + }; + replicationHosts = { + backup-1 = { + ip4 = [myconfig.env.servers.backup-1.ips.main.ip4]; + ip6 = myconfig.env.servers.backup-1.ips.main.ip6; + }; + }; + enable = true; + }; + + redis.enable = true; + }; +} diff --git a/modules/private/databases/mariadb.nix b/modules/private/databases/mariadb.nix new file mode 100644 index 00000000..a7239c0e --- /dev/null +++ b/modules/private/databases/mariadb.nix @@ -0,0 +1,149 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.databases.mariadb; +in { + options.myServices.databases = { + mariadb = { + enable = lib.mkOption { + default = cfg.enable; + example = true; + description = "Whether to enable mariadb database"; + type = lib.types.bool; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.mariadb; + description = '' + Mariadb package to use. + ''; + }; + credentials = lib.mkOption { + default = {}; + description = "Credentials"; + type = lib.types.attrsOf lib.types.str; + }; + ldapConfig = lib.mkOption { + description = "LDAP configuration to allow PAM identification via LDAP"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + filter = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/mysql"; + description = '' + The directory where Mariadb stores its data. + ''; + }; + # Output variables + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/mysqld"; + description = '' + The directory where Mariadb puts sockets. + ''; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + mysqld = "${cfg.socketsDir}/mysqld.sock"; + }; + readOnly = true; + description = '' + Mariadb sockets + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [ 3306 ]; + + # for adminer, ssl is implemented with mysqli only, which is + # currently disabled because it’s not compatible with pam. + # Thus we need to generate two users for each 'remote': one remote + # with SSL, and one localhost without SSL. + # User identified by LDAP: + # CREATE USER foo@% IDENTIFIED VIA pam USING 'mysql' REQUIRE SSL; + # CREATE USER foo@localhost IDENTIFIED VIA pam USING 'mysql'; + services.mysql = { + enable = true; + package = cfg.package; + dataDir = cfg.dataDir; + extraOptions = '' + ssl_ca = ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt + ssl_key = ${config.security.acme.directory}/mysql/key.pem + ssl_cert = ${config.security.acme.directory}/mysql/fullchain.pem + ''; + }; + + users.users.mysql.extraGroups = [ "keys" ]; + security.acme.certs."mysql" = config.myServices.databasesCerts // { + user = "mysql"; + group = "mysql"; + plugins = [ "fullchain.pem" "key.pem" "account_key.json" ]; + domain = "db-1.immae.eu"; + postRun = '' + systemctl restart mysql.service + ''; + }; + + secrets.keys = [ + { + dest = "mysql/mysqldump"; + permissions = "0400"; + user = "root"; + group = "root"; + text = '' + [mysqldump] + user = root + password = ${cfg.credentials.root} + ''; + } + { + dest = "mysql/pam"; + permissions = "0400"; + user = "mysql"; + group = "mysql"; + text = with cfg.ldapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_filter ${filter} + ssl start_tls + ''; + } + ]; + + services.cron = { + enable = true; + systemCronJobs = [ + '' + 30 1,13 * * * root ${cfg.package}/bin/mysqldump --defaults-file=${config.secrets.location}/mysql/mysqldump --all-databases > ${cfg.dataDir}/backup.sql + '' + ]; + }; + + security.pam.services = let + pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; + in [ + { + name = "mysql"; + text = '' + # https://mariadb.com/kb/en/mariadb/pam-authentication-plugin/ + auth required ${pam_ldap} config=${config.secrets.location}/mysql/pam + account required ${pam_ldap} config=${config.secrets.location}/mysql/pam + ''; + } + ]; + + }; +} + diff --git a/modules/private/databases/openldap/default.nix b/modules/private/databases/openldap/default.nix new file mode 100644 index 00000000..e048d565 --- /dev/null +++ b/modules/private/databases/openldap/default.nix @@ -0,0 +1,154 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.databases.openldap; + ldapConfig = let + kerberosSchema = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/krb5/krb5/master/src/plugins/kdb/ldap/libkdb_ldap/kerberos.schema"; + sha256 = "17fnkkf6s3lznsl7wp6914pqsc78d038rh38l638big8z608ksww"; + }; + puppetSchema = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/puppetlabs/puppet/master/ext/ldap/puppet.schema"; + sha256 = "11bjf5zfvqlim7p9vddcafs0wiq3v8ys77x8h6fbp9c6bdfh0awh"; + }; + in '' + include ${pkgs.openldap}/etc/schema/core.schema + include ${pkgs.openldap}/etc/schema/cosine.schema + include ${pkgs.openldap}/etc/schema/inetorgperson.schema + include ${pkgs.openldap}/etc/schema/nis.schema + include ${puppetSchema} + include ${kerberosSchema} + include ${./immae.schema} + + pidfile ${cfg.pids.pid} + argsfile ${cfg.pids.args} + + moduleload back_hdb + backend hdb + + moduleload memberof + database hdb + suffix "${cfg.baseDn}" + rootdn "${cfg.rootDn}" + include ${config.secrets.location}/ldap/password + directory ${cfg.dataDir} + overlay memberof + + TLSCertificateFile ${config.security.acme.directory}/ldap/cert.pem + TLSCertificateKeyFile ${config.security.acme.directory}/ldap/key.pem + TLSCACertificateFile ${config.security.acme.directory}/ldap/fullchain.pem + TLSCACertificatePath ${pkgs.cacert.unbundled}/etc/ssl/certs/ + #This makes openldap crash + #TLSCipherSuite DEFAULT + + sasl-host kerberos.immae.eu + include ${config.secrets.location}/ldap/access + ''; +in +{ + options.myServices.databases = { + openldap = { + enable = lib.mkOption { + default = cfg.enable; + example = true; + description = "Whether to enable ldap"; + type = lib.types.bool; + }; + baseDn = lib.mkOption { + type = lib.types.str; + description = '' + Base DN for LDAP + ''; + }; + rootDn = lib.mkOption { + type = lib.types.str; + description = '' + Root DN + ''; + }; + rootPw = lib.mkOption { + type = lib.types.str; + description = '' + Root (Hashed) password + ''; + }; + accessFile = lib.mkOption { + type = lib.types.path; + description = '' + The file path that defines the access + ''; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/openldap"; + description = '' + The directory where Openldap stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/slapd"; + description = '' + The directory where Openldap puts sockets and pid files. + ''; + }; + # Output variables + pids = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + pid = "${cfg.socketsDir}/slapd.pid"; + args = "${cfg.socketsDir}/slapd.args"; + }; + readOnly = true; + description = '' + Slapd pid files + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = [ + { + dest = "ldap/password"; + permissions = "0400"; + user = "openldap"; + group = "openldap"; + text = "rootpw ${cfg.rootPw}"; + } + { + dest = "ldap/access"; + permissions = "0400"; + user = "openldap"; + group = "openldap"; + text = builtins.readFile "${cfg.accessFile}"; + } + ]; + users.users.openldap.extraGroups = [ "keys" ]; + networking.firewall.allowedTCPPorts = [ 636 389 ]; + + services.cron = { + systemCronJobs = [ + '' + 35 1,13 * * * root ${pkgs.openldap}/bin/slapcat -v -b "dc=immae,dc=eu" -f ${pkgs.writeText "slapd.conf" ldapConfig} -l ${cfg.dataDir}/backup.ldif | ${pkgs.gnugrep}/bin/grep -v "^# id=[0-9a-f]*$" + '' + ]; + }; + + security.acme.certs."ldap" = config.myServices.databasesCerts // { + user = "openldap"; + group = "openldap"; + plugins = [ "fullchain.pem" "key.pem" "cert.pem" "account_key.json" ]; + domain = "ldap.immae.eu"; + postRun = '' + systemctl restart openldap.service + ''; + }; + + services.openldap = { + enable = true; + dataDir = cfg.dataDir; + urlList = [ "ldap://" "ldaps://" ]; + extraConfig = ldapConfig; + }; + }; +} diff --git a/modules/private/databases/openldap/immae.schema b/modules/private/databases/openldap/immae.schema new file mode 100644 index 00000000..f5ee5d54 --- /dev/null +++ b/modules/private/databases/openldap/immae.schema @@ -0,0 +1,167 @@ +# vim: set filetype=slapd: +objectIdentifier Immaeroot 1.3.6.1.4.1.50071 + +objectIdentifier Immae Immaeroot:2 +objectIdentifier ImmaeattributeType Immae:3 +objectIdentifier ImmaeobjectClass Immae:4 + +# TT-RSS +attributetype ( ImmaeattributeType:1 NAME 'immaeTtrssLogin' + DESC 'login for TTRSS' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +objectclass ( ImmaeobjectClass:1 NAME 'immaeTtrssClass' + DESC 'Expansion of the existing object classes for ttrss' + SUP top AUXILIARY + MUST ( immaeTtrssLogin ) ) + +# FTP +attributetype ( ImmaeattributeType:2 NAME 'immaeFtpDirectory' + DESC 'home directory for ftp' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + +attributetype ( ImmaeattributeType:3 NAME 'immaeFtpUid' + DESC 'user id for ftp' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +attributetype ( ImmaeattributeType:4 NAME 'immaeFtpGid' + DESC 'group id for ftp' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +objectclass ( ImmaeobjectClass:2 NAME 'immaeFtpClass' + DESC 'Expansion of the existing object classes for ftp' + SUP top AUXILIARY + MUST ( immaeFtpDirectory $ immaeFtpGid $ immaeFtpUid ) ) + + +# SSH keys +attributetype ( ImmaeattributeType:5 NAME 'immaeSshKey' + DESC 'OpenSSH Public key' + EQUALITY octetStringMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) + +objectClass ( ImmaeobjectClass:3 NAME 'immaeSshClass' + DESC 'OpenSSH class' + SUP top AUXILIARY + MAy ( immaeSSHKey ) ) + +# Specific access +attributetype (ImmaeattributeType:6 NAME 'immaeAccessDn' + EQUALITY distinguishedNameMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) + +attributetype (ImmaeattributeType:17 NAME 'immaeAccessWriteDn' + EQUALITY distinguishedNameMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) + +attributetype (ImmaeattributeType:18 NAME 'immaeAccessReadSubtree' + EQUALITY distinguishedNameMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) + +objectClass ( ImmaeobjectClass:4 NAME 'immaeAccessClass' + DESC 'Access class' + SUP top AUXILIARY + MAY ( immaeAccessDn $ immaeAccessWriteDn $ immaeAccessReadSubtree ) ) + +# Xmpp uid +attributetype ( ImmaeattributeType:7 NAME 'immaeXmppUid' + DESC 'user part for Xmpp' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +objectclass ( ImmaeobjectClass:5 NAME 'immaeXmppClass' + DESC 'Expansion of the existing object classes for XMPP' + SUP top AUXILIARY + MUST ( immaeXmppUid ) ) + +# Postfix accounts +attributetype ( ImmaeattributeType:8 NAME 'immaePostfixAddress' + DESC 'the dovecot address to match as username' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +attributetype ( ImmaeattributeType:9 NAME 'immaePostfixHome' + DESC 'the postfix home directory' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( ImmaeattributeType:10 NAME 'immaePostfixMail' + DESC 'the dovecot mail location' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( ImmaeattributeType:11 NAME 'immaePostfixUid' + DESC 'the dovecot uid' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +attributetype ( ImmaeattributeType:12 NAME 'immaePostfixGid' + DESC 'the dovecot gid' + EQUALITY caseExactIA5Match + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +objectclass ( ImmaeobjectClass:6 NAME 'immaePostfixClass' + DESC 'Expansion of the existing object classes for Postfix' + SUP top AUXILIARY + MUST ( immaePostfixAddress $ immaePostfixHome $ + immaePostfixMail $ immaePostfixUid $ immaePostfixGid ) + ) + +# Tinc informations +# Domaine = une classe a part ou une partie du dn ? +# attributetype ( ImmaeattributeType:13 NAME 'immaeTincIpSegment' +# DESC 'the internal ip segment in tinc' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) +# +# attributetype ( ImmaeattributeType:14 NAME 'immaeTincSubdomain' +# DESC 'the host subdomain' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) +# +# attributetype ( ImmaeattributeType:15 NAME 'immaeTincHostname' +# DESC 'the host name' +# EQUALITY caseIgnoreIA5Match +# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) +# +# objectclass ( ImmaeobjectClass:7 NAME 'immaeTincHostClass' +# DESC 'Expansion of the existing object classes for Tinc' +# SUP top AUXILIARY +# MUST ( immaeTincInternalIp $ immaeTincSubdomain $ +# immaeTincHostname ) +# ) + +attributetype (ImmaeattributeType:16 NAME 'immaePuppetJson' + DESC 'Puppet hiera json' + EQUALITY octetStringMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) + +objectclass ( ImmaeobjectClass:8 NAME 'immaePuppetClass' + DESC 'Expansion of the existing object classes for Puppet' + SUP top AUXILIARY + MUST ( immaePuppetJson ) + ) + +attributetype (ImmaeattributeType:19 NAME 'immaeTaskId' + DESC 'Taskwarrior server Org:Name:Key' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +objectclass ( ImmaeobjectClass:9 NAME 'immaeTaskClass' + DESC 'Expansion of the existing object classes for Task' + SUP top AUXILIARY + MUST ( immaeTaskId ) + ) + +# Last: +# attributetype (ImmaeattributeType:19 NAME 'immaeTaskId' +# objectclass ( ImmaeobjectClass:9 NAME 'immaeTaskClass' + diff --git a/modules/private/databases/postgresql.nix b/modules/private/databases/postgresql.nix new file mode 100644 index 00000000..911a6d1b --- /dev/null +++ b/modules/private/databases/postgresql.nix @@ -0,0 +1,220 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.databases.postgresql; +in { + options.myServices.databases = { + postgresql = { + enable = lib.mkOption { + default = cfg.enable; + example = true; + description = "Whether to enable postgresql database"; + type = lib.types.bool; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.postgresql; + description = '' + Postgresql package to use. + ''; + }; + ldapConfig = lib.mkOption { + description = "LDAP configuration to allow PAM identification via LDAP"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + filter = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + replicationLdapConfig = lib.mkOption { + description = "LDAP configuration to allow replication"; + type = lib.types.submodule { + options = { + host = lib.mkOption { type = lib.types.str; }; + base = lib.mkOption { type = lib.types.str; }; + dn = lib.mkOption { type = lib.types.str; }; + password = lib.mkOption { type = lib.types.str; }; + }; + }; + }; + authorizedHosts = lib.mkOption { + default = {}; + description = "Hosts to allow connections from"; + type = lib.types.attrsOf (lib.types.listOf (lib.types.submodule { + options = { + method = lib.mkOption { + default = "md5"; + type = lib.types.str; + }; + username = lib.mkOption { + default = "all"; + type = lib.types.str; + }; + database = lib.mkOption { + default = "all"; + type = lib.types.str; + }; + ip4 = lib.mkOption { + default = []; + type = lib.types.listOf lib.types.str; + }; + ip6 = lib.mkOption { + default = []; + type = lib.types.listOf lib.types.str; + }; + }; + })); + }; + replicationHosts = lib.mkOption { + default = {}; + description = "Hosts to allow replication from"; + type = lib.types.attrsOf (lib.types.submodule { + options = { + ip4 = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + ip6 = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + }; + }); + }; + # Output variables + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/postgresql"; + description = '' + The directory where Postgresql puts sockets. + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Postgresql sockets directory for systemd + ''; + readOnly = true; + }; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [ 5432 ]; + + security.acme.certs."postgresql" = config.myServices.databasesCerts // { + user = "postgres"; + group = "postgres"; + plugins = [ "fullchain.pem" "key.pem" "account_key.json" ]; + domain = "db-1.immae.eu"; + postRun = '' + systemctl reload postgresql.service + ''; + }; + + systemd.services.postgresql.serviceConfig = { + SupplementaryGroups = "keys"; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + }; + services.postgresql = { + enable = true; + package = cfg.package; + enableTCPIP = true; + extraConfig = '' + max_connections = 100 + wal_level = logical + shared_buffers = 512MB + work_mem = 10MB + max_wal_size = 1GB + min_wal_size = 80MB + log_timezone = 'Europe/Paris' + datestyle = 'iso, mdy' + timezone = 'Europe/Paris' + lc_messages = 'en_US.UTF-8' + lc_monetary = 'en_US.UTF-8' + lc_numeric = 'en_US.UTF-8' + lc_time = 'en_US.UTF-8' + default_text_search_config = 'pg_catalog.english' + ssl = on + ssl_cert_file = '${config.security.acme.directory}/postgresql/fullchain.pem' + ssl_key_file = '${config.security.acme.directory}/postgresql/key.pem' + ''; + authentication = let + hosts = builtins.concatStringsSep "\n" ( + lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v: + map (ip6: "hostssl ${v.database} ${v.username} ${ip6}/128 ${v.method}") v.ip6 + ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4 + ) vs) cfg.authorizedHosts + )); + replication = builtins.concatStringsSep "\n" ( + lib.lists.flatten (lib.mapAttrsToList (k: v: + map (ip6: "hostssl replication ${k} ${ip6}/128 pam pamservice=postgresql_replication") v.ip6 + ++ map (ip4: "hostssl replication ${k} ${ip4}/32 pam pamservice=postgresql_replication") v.ip4 + ) cfg.replicationHosts + )); + in '' + local all postgres ident + local all all md5 + ${hosts} + hostssl all all all pam + ${replication} + ''; + }; + + secrets.keys = [ + { + dest = "postgresql/pam"; + permissions = "0400"; + group = "postgres"; + user = "postgres"; + text = with cfg.ldapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_filter ${filter} + ssl start_tls + ''; + } + { + dest = "postgresql/pam_replication"; + permissions = "0400"; + group = "postgres"; + user = "postgres"; + text = with cfg.replicationLdapConfig; '' + host ${host} + base ${base} + binddn ${dn} + bindpw ${password} + pam_login_attribute cn + ssl start_tls + ''; + } + ]; + + security.pam.services = let + pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; + in [ + { + name = "postgresql"; + text = '' + auth required ${pam_ldap} config=${config.secrets.location}/postgresql/pam + account required ${pam_ldap} config=${config.secrets.location}/postgresql/pam + ''; + } + { + name = "postgresql_replication"; + text = '' + auth required ${pam_ldap} config=${config.secrets.location}/postgresql/pam_replication + account required ${pam_ldap} config=${config.secrets.location}/postgresql/pam_replication + ''; + } + ]; + }; +} + diff --git a/modules/private/databases/redis.nix b/modules/private/databases/redis.nix new file mode 100644 index 00000000..1ba6eed6 --- /dev/null +++ b/modules/private/databases/redis.nix @@ -0,0 +1,57 @@ +{ lib, config, ... }: +let + cfg = config.myServices.databases.redis; +in { + options.myServices.databases.redis = { + enable = lib.mkOption { + default = cfg.enable; + example = true; + description = "Whether to enable redis database"; + type = lib.types.bool; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/redis"; + description = '' + The directory where Redis puts sockets. + ''; + }; + # Output variables + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted redis sockets directory for systemd + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + redis = "${cfg.socketsDir}/redis.sock"; + }; + readOnly = true; + description = '' + Redis sockets + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users.redis.uid = config.ids.uids.redis; + users.groups.redis.gid = config.ids.gids.redis; + services.redis = rec { + enable = true; + bind = "127.0.0.1"; + unixSocket = cfg.sockets.redis; + extraConfig = '' + unixsocketperm 777 + maxclients 1024 + ''; + }; + systemd.services.redis.serviceConfig.RuntimeDirectory = cfg.systemdRuntimeDirectory; + }; +} + diff --git a/modules/private/default.nix b/modules/private/default.nix new file mode 100644 index 00000000..894efb76 --- /dev/null +++ b/modules/private/default.nix @@ -0,0 +1,65 @@ +let +set = { + # adatped from nixpkgs/nixos/modules/services/web-servers/apache-httpd/default.nix + httpdInte = import ../websites/httpd-service-builder.nix { httpdName = "Inte"; withUsers = false; }; + httpdProd = import ../websites/httpd-service-builder.nix { httpdName = "Prod"; withUsers = false; }; + httpdTools = import ../websites/httpd-service-builder.nix { httpdName = "Tools"; withUsers = true; }; + + databases = ./databases; + mariadb = ./databases/mariadb.nix; + openldap = ./databases/openldap; + postgresql = ./databases/postgresql.nix; + redis = ./databases/redis.nix; + + websites = ./websites; + atenInte = ./websites/aten/integration.nix; + atenProd = ./websites/aten/production.nix; + capitainesProd = ./websites/capitaines/production.nix; + chloeInte = ./websites/chloe/integration.nix; + chloeProd = ./websites/chloe/production.nix; + connexionswingInte = ./websites/connexionswing/integration.nix; + connexionswingProd = ./websites/connexionswing/production.nix; + denisejeromeProd = ./websites/denisejerome/production.nix; + emiliaProd = ./websites/emilia/production.nix; + florianApp = ./websites/florian/app.nix; + florianInte = ./websites/florian/integration.nix; + florianProd = ./websites/florian/production.nix; + immaeProd = ./websites/immae/production.nix; + immaeRelease = ./websites/immae/release.nix; + immaeTemp = ./websites/immae/temp.nix; + leilaProd = ./websites/leila/production.nix; + ludivinecassalInte = ./websites/ludivinecassal/integration.nix; + ludivinecassalProd = ./websites/ludivinecassal/production.nix; + nassimeProd = ./websites/nassime/production.nix; + naturaloutilProd = ./websites/naturaloutil/production.nix; + papaSurveillance = ./websites/papa/surveillance.nix; + piedsjalouxInte = ./websites/piedsjaloux/integration.nix; + piedsjalouxProd = ./websites/piedsjaloux/production.nix; + + cloudTool = ./websites/tools/cloud; + davTool = ./websites/tools/dav; + dbTool = ./websites/tools/db; + diasporaTool = ./websites/tools/diaspora; + etherTool = ./websites/tools/ether; + gitTool = ./websites/tools/git; + mastodonTool = ./websites/tools/mastodon; + mgoblinTool = ./websites/tools/mgoblin; + peertubeTool = ./websites/tools/peertube; + toolsTool = ./websites/tools/tools; + + buildbot = ./buildbot; + certificates = ./certificates.nix; + gitolite = ./gitolite; + irc = ./irc.nix; + pub = ./pub; + tasks = ./tasks; + dns = ./dns.nix; + ftp = ./ftp.nix; + mail = ./mail.nix; + mpd = ./mpd.nix; + ssh = ./ssh; + + system = ./system.nix; +}; +in +builtins.listToAttrs (map (attr: { name = "priv${attr}"; value = set.${attr}; }) (builtins.attrNames set)) diff --git a/modules/private/dns.nix b/modules/private/dns.nix new file mode 100644 index 00000000..ced8d9b0 --- /dev/null +++ b/modules/private/dns.nix @@ -0,0 +1,132 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + config = let + cfg = config.services.bind; + configFile = pkgs.writeText "named.conf" '' + include "/etc/bind/rndc.key"; + controls { + inet 127.0.0.1 allow {localhost;} keys {"rndc-key";}; + }; + + acl cachenetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.cacheNetworks} }; + acl badnetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.blockedNetworks} }; + + options { + listen-on { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOn} }; + listen-on-v6 { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOnIpv6} }; + allow-query { cachenetworks; }; + blackhole { badnetworks; }; + forward first; + forwarders { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.forwarders} }; + directory "/var/run/named"; + pid-file "/var/run/named/named.pid"; + ${cfg.extraOptions} + }; + + ${cfg.extraConfig} + + ${ lib.concatMapStrings + ({ name, file, master ? true, extra ? "", slaves ? [], masters ? [] }: + '' + zone "${name}" { + type ${if master then "master" else "slave"}; + file "${file}"; + ${ if lib.lists.length slaves > 0 then + '' + allow-transfer { + ${lib.concatMapStrings (ip: "${ip};\n") slaves} + }; + '' else ""} + ${ if lib.lists.length masters > 0 then + '' + masters { + ${lib.concatMapStrings (ip: "${ip};\n") masters} + }; + '' else ""} + allow-query { any; }; + ${extra} + }; + '') + cfg.zones } + ''; + in + { + networking.firewall.allowedUDPPorts = [ 53 ]; + networking.firewall.allowedTCPPorts = [ 53 ]; + services.bind = { + enable = true; + cacheNetworks = ["any"]; + configFile = configFile; + extraOptions = '' + allow-recursion { 127.0.0.1; }; + allow-transfer { none; }; + + notify-source ${myconfig.env.servers.eldiron.ips.main.ip4}; + notify-source-v6 ${lib.head myconfig.env.servers.eldiron.ips.main.ip6}; + version none; + hostname none; + server-id none; + ''; + zones = with myconfig.env.dns; + assert (builtins.substring ((builtins.stringLength soa.email)-1) 1 soa.email) != "."; + assert (builtins.substring ((builtins.stringLength soa.primary)-1) 1 soa.primary) != "."; + (map (conf: { + name = conf.name; + master = false; + file = "/var/run/named/${conf.name}.zone"; + masters = if lib.attrsets.hasAttr "masters" conf + then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.masters) + else []; + }) slaveZones) + ++ (map (conf: { + name = conf.name; + master = true; + extra = if lib.attrsets.hasAttr "extra" conf then conf.extra else ""; + slaves = if lib.attrsets.hasAttr "slaves" conf + then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.slaves) + else []; + file = pkgs.writeText "${conf.name}.zone" '' + $TTL 10800 + @ IN SOA ${soa.primary}. ${builtins.replaceStrings ["@"] ["."] soa.email}. ${soa.serial} ${soa.refresh} ${soa.retry} ${soa.expire} ${soa.ttl} + + ${lib.concatStringsSep "\n" (map (x: "@ IN NS ${x}.") (lib.concatMap (n: lib.attrsets.mapAttrsToList (k: v: k) ns.${n}) conf.ns))} + + ${conf.entries} + + ${if lib.attrsets.hasAttr "withEmail" conf && lib.lists.length conf.withEmail > 0 then '' + mail IN A ${myconfig.env.servers.immaeEu.ips.main.ip4} + mx-1 IN A ${myconfig.env.servers.eldiron.ips.main.ip4} + ${builtins.concatStringsSep "\n" (map (i: "mail IN AAAA ${i}") myconfig.env.servers.immaeEu.ips.main.ip6)} + ${builtins.concatStringsSep "\n" (map (i: "mx-1 IN AAAA ${i}") myconfig.env.servers.eldiron.ips.main.ip6)} + ${lib.concatStringsSep "\n\n" (map (e: + let + n = if e.domain == "" then "@" else "${e.domain} "; + suffix = if e.domain == "" then "" else ".${e.domain}"; + in + '' + ; ------------------ mail: ${n} --------------------------- + ${if e.receive then "${n} IN MX 10 mail.${conf.name}." else ""} + ;${if e.receive then "${n} IN MX 50 mx-1.${conf.name}." else ""} + + ; Mail sender authentications + ${n} IN TXT "v=spf1 mx ~all" + _dmarc${suffix} IN TXT "v=DMARC1; p=none; adkim=r; aspf=r; fo=1; rua=mailto:postmaster+rua@immae.eu; ruf=mailto:postmaster+ruf@immae.eu;" + ${if e.send then '' + immae_eu._domainkey${suffix} IN TXT ( "v=DKIM1; k=rsa; s=email; " + "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzl3vLd8W5YAuumC5+ZT9OV7/14Pmh5JYtwyqKI3cfe9NnAqInt3xO4bZ7oqIxRKWN4SD39vm7O/QOvFdBt00ENOOzdP90s5gKw6eIP/4+vPTh0IWltAsmu9B2agzdtWUE7t2xFKIzEn8l9niRE2QYbVaqZv4sub98vY55fIgFoHtjkmNC7325S8fjDJGp6OPbyhAs6Xl5/adjF" + "0ko4Y2p6RaxLQfjlS0bxmK4Qg6C14pIXHtzVeqOuWrwApqt5+AULSn97iUtqV/IJlEEjC6DUR44t3C/G0G/k46iFclCqRRi0hdPrOHCtZDbtMubnTN9eaUiNpkXh1WnCflHwtjQwIDAQAB" ) + '' else ""} + '') conf.withEmail)} + '' + (if conf.name == "immae.eu" then '' + ; ----------------- Accept DMARC reports ------------------- + ${lib.concatStringsSep "\n" ( + lib.flatten ( + map (z: map (e: "${e.domain}${if builtins.stringLength e.domain > 0 then "." else ""}${z.name}._report._dmarc IN TXT \"v=DMARC1;\"") (z.withEmail or [])) masterZones + ) + )} + '' else "") else ""} + ''; + }) masterZones); + }; + }; +} diff --git a/modules/private/ftp.nix b/modules/private/ftp.nix new file mode 100644 index 00000000..842d2d65 --- /dev/null +++ b/modules/private/ftp.nix @@ -0,0 +1,118 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + options = { + services.pure-ftpd.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable pure-ftpd. + ''; + }; + }; + + config = lib.mkIf config.services.pure-ftpd.enable { + security.acme.certs."ftp" = config.services.myCertificates.certConfig // { + domain = "eldiron.immae.eu"; + postRun = '' + systemctl restart pure-ftpd.service + ''; + extraDomains = { "ftp.immae.eu" = null; }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ 21 ]; + allowedTCPPortRanges = [ { from = 40000; to = 50000; } ]; + }; + }; + + users.users = [ + { + name = "ftp"; + uid = config.ids.uids.ftp; # 8 + group = "ftp"; + description = "Anonymous FTP user"; + home = "/homeless-shelter"; + extraGroups = [ "keys" ]; + } + ]; + + users.groups.ftp.gid = config.ids.gids.ftp; + + system.activationScripts.pure-ftpd = '' + install -m 0755 -o ftp -g ftp -d /var/lib/ftp + ''; + + secrets.keys = [{ + dest = "pure-ftpd-ldap"; + permissions = "0400"; + user = "ftp"; + group = "ftp"; + text = '' + LDAPServer ${myconfig.env.ftp.ldap.host} + LDAPPort 389 + LDAPUseTLS True + LDAPBaseDN ${myconfig.env.ftp.ldap.base} + LDAPBindDN ${myconfig.env.ftp.ldap.dn} + LDAPBindPW ${myconfig.env.ftp.ldap.password} + LDAPDefaultUID 500 + LDAPForceDefaultUID False + LDAPDefaultGID 100 + LDAPForceDefaultGID False + LDAPFilter ${myconfig.env.ftp.ldap.filter} + + LDAPAuthMethod BIND + + # Pas de possibilite de donner l'Uid/Gid ! + # Compile dans pure-ftpd directement avec immaeFtpUid / immaeFtpGid + LDAPHomeDir immaeFtpDirectory + ''; + }]; + + systemd.services.pure-ftpd = let + configFile = pkgs.writeText "pure-ftpd.conf" '' + PassivePortRange 40000 50000 + ChrootEveryone yes + CreateHomeDir yes + BrokenClientsCompatibility yes + MaxClientsNumber 50 + Daemonize yes + MaxClientsPerIP 8 + VerboseLog no + DisplayDotFiles yes + AnonymousOnly no + NoAnonymous no + SyslogFacility ftp + DontResolve yes + MaxIdleTime 15 + LDAPConfigFile /var/secrets/pure-ftpd-ldap + LimitRecursion 10000 8 + AnonymousCanCreateDirs no + MaxLoad 4 + AntiWarez yes + Umask 133:022 + # ftp + MinUID 8 + AllowUserFXP no + AllowAnonymousFXP no + ProhibitDotFilesWrite no + ProhibitDotFilesRead no + AutoRename no + AnonymousCantUpload no + MaxDiskUsage 99 + CustomerProof yes + TLS 1 + CertFile ${config.security.acme.directory}/ftp/full.pem + ''; + in { + description = "Pure-FTPd server"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig.ExecStart = "${pkgs.pure-ftpd}/bin/pure-ftpd ${configFile}"; + serviceConfig.Type = "forking"; + serviceConfig.PIDFile = "/run/pure-ftpd.pid"; + }; + }; + +} diff --git a/modules/private/gitolite/default.nix b/modules/private/gitolite/default.nix new file mode 100644 index 00000000..b9914a16 --- /dev/null +++ b/modules/private/gitolite/default.nix @@ -0,0 +1,63 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.gitolite; +in { + options.myServices.gitolite = { + enable = lib.mkEnableOption "my gitolite service"; + gitoliteDir = lib.mkOption { + type = lib.types.string; + default = "/var/lib/gitolite"; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = [ 9418 ]; + + services.gitDaemon = { + enable = true; + user = "gitolite"; + group = "gitolite"; + basePath = "${cfg.gitoliteDir}/repositories"; + }; + + system.activationScripts.gitolite = let + gitolite_ldap_groups = pkgs.mylibs.wrap { + name = "gitolite_ldap_groups.sh"; + file = ./gitolite_ldap_groups.sh; + vars = { + LDAP_PASS = myconfig.env.tools.gitolite.ldap.password; + }; + paths = [ pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.coreutils ]; + }; + in { + deps = [ "users" ]; + text = '' + if [ -d ${cfg.gitoliteDir} ]; then + ln -sf ${gitolite_ldap_groups} ${cfg.gitoliteDir}/gitolite_ldap_groups.sh + chmod g+rx ${cfg.gitoliteDir} + fi + if [ -f ${cfg.gitoliteDir}/projects.list ]; then + chmod g+r ${cfg.gitoliteDir}/projects.list + fi + ''; + }; + + users.users.wwwrun.extraGroups = [ "gitolite" ]; + + users.users.gitolite.packages = let + python-packages = python-packages: with python-packages; [ + simplejson + urllib3 + sleekxmpp + ]; + in + [ + (pkgs.python3.withPackages python-packages) + ]; + # Installation: https://git.immae.eu/mantisbt/view.php?id=93 + services.gitolite = { + enable = true; + adminPubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXqRbiHw7QoHADNIEuo4nUT9fSOIEBMdJZH0bkQAxXyJFyCM1IMz0pxsHV0wu9tdkkr36bPEUj2aV5bkYLBN6nxcV2Y49X8bjOSCPfx3n6Own1h+NeZVBj4ZByrFmqCbTxUJIZ2bZKcWOFncML39VmWdsVhNjg0X4NBBehqXRIKr2gt3E/ESAxTYJFm0BnU0baciw9cN0bsRGqvFgf5h2P48CIAfwhVcGmPQnnAwabnosYQzRWxR0OygH5Kd8mePh6FheIRIigfXsDO8f/jdxwut8buvNIf3m5EBr3tUbTsvM+eV3M5vKGt7sk8T64DVtepTSdOOWtp+47ktsnHOMh immae@immae.eu"; + }; + }; +} diff --git a/modules/private/gitolite/gitolite_ldap_groups.sh b/modules/private/gitolite/gitolite_ldap_groups.sh new file mode 100755 index 00000000..7db0da40 --- /dev/null +++ b/modules/private/gitolite/gitolite_ldap_groups.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +uid_param="$1" +ldap_host="ldap.immae.eu" +ldap_binddn="cn=gitolite,ou=services,dc=immae,dc=eu" +ldap_bindpw="$LDAP_PASS" +ldap_searchbase="dc=immae,dc=eu" +ldap_scope="subtree" + +ldap_options="-h ${ldap_host} -ZZ -x -D ${ldap_binddn} -w ${ldap_bindpw} -b ${ldap_searchbase} -s ${ldap_scope}" + +ldap_filter="(&(memberOf=cn=groups,cn=gitolite,ou=services,dc=immae,dc=eu)(|(member=uid=${uid_param},ou=users,dc=immae,dc=eu)(member=uid=${uid_param},ou=group_users,dc=immae,dc=eu)))" +ldap_result=$(ldapsearch ${ldap_options} -LLL "${ldap_filter}" cn | grep 'cn:' | cut -d' ' -f2) + +echo "$ldap_result" diff --git a/modules/private/irc.nix b/modules/private/irc.nix new file mode 100644 index 00000000..b3fe91f4 --- /dev/null +++ b/modules/private/irc.nix @@ -0,0 +1,54 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.irc; +in +{ + options.myServices = { + ircCerts = lib.mkOption { + description = "Default ircconfigurations for certificates as accepted by acme"; + }; + irc.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable irc stuff. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + security.acme.certs."irc" = config.myServices.ircCerts // { + domain = "irc.immae.eu"; + postRun = '' + systemctl restart stunnel.service + ''; + }; + + networking.firewall.allowedTCPPorts = [ 6697 ]; + services.bitlbee = with pkgs; { + enable = true; + authMode = "Registered"; + libpurple_plugins = [ + purple-hangouts + purple-matrix + ]; + plugins = [ + bitlbee-mastodon + bitlbee-facebook + bitlbee-discord + bitlbee-steam + ]; + }; + + services.stunnel = { + enable = true; + servers = { + bitlbee = { + accept = 6697; + connect = 6667; + cert = "${config.security.acme.directory}/irc/full.pem"; + }; + }; + }; + }; +} diff --git a/modules/private/mail.nix b/modules/private/mail.nix new file mode 100644 index 00000000..611c8b41 --- /dev/null +++ b/modules/private/mail.nix @@ -0,0 +1,13 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + config.users.users.nullmailer.uid = config.ids.uids.nullmailer; + config.users.groups.nullmailer.gid = config.ids.gids.nullmailer; + + config.services.nullmailer = { + enable = true; + config = { + me = myconfig.env.mail.host; + remotes = "${myconfig.env.mail.relay} smtp"; + }; + }; +} diff --git a/modules/private/mpd.nix b/modules/private/mpd.nix new file mode 100644 index 00000000..9903bdf0 --- /dev/null +++ b/modules/private/mpd.nix @@ -0,0 +1,56 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + config = { + secrets.keys = [ + { + dest = "mpd"; + permissions = "0400"; + text = myconfig.env.mpd.password; + } + { + dest = "mpd-config"; + permissions = "0400"; + user = "mpd"; + group = "mpd"; + text = '' + password "${myconfig.env.mpd.password}@read,add,control,admin" + ''; + } + ]; + networking.firewall.allowedTCPPorts = [ 6600 ]; + users.users.mpd.extraGroups = [ "wwwrun" "keys" ]; + systemd.services.mpd.serviceConfig.RuntimeDirectory = "mpd"; + services.mpd = { + enable = true; + network.listenAddress = "any"; + musicDirectory = myconfig.env.mpd.folder; + extraConfig = '' + include "/var/secrets/mpd-config" + audio_output { + type "null" + name "No Output" + mixer_type "none" + } + audio_output { + type "httpd" + name "OGG" + encoder "vorbis" + bind_to_address "/run/mpd/ogg.sock" + quality "5.0" + format "44100:16:1" + } + audio_output { + type "httpd" + name "MP3" + encoder "lame" + bind_to_address "/run/mpd/mp3.sock" + quality "5.0" + format "44100:16:1" + } + + + ''; + }; + }; +} + diff --git a/modules/private/pub/default.nix b/modules/private/pub/default.nix new file mode 100644 index 00000000..c31c8eb0 --- /dev/null +++ b/modules/private/pub/default.nix @@ -0,0 +1,52 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + options = { + myServices.pub.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable pub user. + ''; + }; + }; + + config = lib.mkIf config.myServices.pub.enable { + users.users.pub = let + restrict = pkgs.runCommand "restrict" { + file = ./restrict; + buildInputs = [ pkgs.makeWrapper ]; + } '' + mkdir -p $out/bin + cp $file $out/bin/restrict + chmod a+x $out/bin/restrict + patchShebangs $out/bin/restrict + wrapProgram $out/bin/restrict \ + --prefix PATH : ${lib.makeBinPath [ pkgs.bubblewrap pkgs.rrsync ]} \ + --set TMUX_RESTRICT ${./tmux.restrict.conf} + ''; + purple-hangouts = pkgs.purple-hangouts.overrideAttrs(old: { + installPhase = '' + install -Dm755 -t $out/lib/purple-2/ libhangouts.so + for size in 16 22 24 48; do + install -TDm644 hangouts$size.png $out/share/pixmaps/pidgin/protocols/$size/hangouts.png + done + ''; + }); + in { + createHome = true; + description = "Restricted shell user"; + home = "/var/lib/pub"; + uid = myconfig.env.users.pub.uid; + useDefaultShell = true; + packages = [ + restrict + pkgs.tmux + (pkgs.pidgin.override { plugins = [ + pkgs.purple-plugin-pack purple-hangouts + pkgs.purple-discord pkgs.purple-facebook + pkgs.telegram-purple + ]; }) + ]; + }; + }; +} diff --git a/modules/private/pub/restrict b/modules/private/pub/restrict new file mode 100644 index 00000000..b2f3be36 --- /dev/null +++ b/modules/private/pub/restrict @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +user="$1" +rootuser="$HOME/$user/" +mkdir -p $rootuser + +orig="$SSH_ORIGINAL_COMMAND" +if [ -z "$orig" ]; then + orig="/bin/bash -l" +fi +if [ "${orig:0:7}" = "command" ]; then + orig="${orig:8}" +fi + +case "$orig" in +rsync*) + rrsync $HOME/$user/ + ;; +*) + nix_store_paths() { + nix-store -q -R \ + /run/current-system/sw \ + /etc/profiles/per-user/pub \ + /etc/ssl/certs/ca-bundle.crt \ + | while read i; do + printf '%s--ro-bind\0'$i'\0'$i'\0' '' + done + } + + set -euo pipefail + (exec -c bwrap --ro-bind /usr /usr \ + --args 10 \ + --dir /tmp \ + --dir /var \ + --symlink ../tmp var/tmp \ + --proc /proc \ + --dev /dev \ + --ro-bind /etc/resolv.conf /etc/resolv.conf \ + --ro-bind /etc/zoneinfo /etc/zoneinfo \ + --ro-bind /etc/ssl /etc/ssl \ + --ro-bind /etc/static/ssl/certs /etc/static/ssl/certs \ + --ro-bind /run/current-system/sw/lib/locale/locale-archive /etc/locale-archive \ + --ro-bind /run/current-system/sw/bin /bin \ + --ro-bind /etc/profiles/per-user/pub/bin /bin-pub \ + --bind /var/lib/pub/$user /var/lib/pub \ + --dir /var/lib/commons \ + --ro-bind $TMUX_RESTRICT /var/lib/commons/tmux.restrict.conf \ + --chdir /var/lib/pub \ + --unshare-all \ + --share-net \ + --dir /run/user/$(id -u) \ + --setenv TERM "$TERM" \ + --setenv LOCALE_ARCHIVE "/etc/locale-archive" \ + --setenv XDG_RUNTIME_DIR "/run/user/`id -u`" \ + --setenv PS1 "$user@pub $ " \ + --setenv PATH "/bin:/bin-pub" \ + --setenv HOME "/var/lib/pub" \ + --file 11 /etc/passwd \ + --file 12 /etc/group \ + -- $orig) \ + 10< <(nix_store_paths) \ + 11< <(getent passwd $UID 65534) \ + 12< <(getent group $(id -g) 65534) + ;; +esac diff --git a/modules/private/pub/tmux.restrict.conf b/modules/private/pub/tmux.restrict.conf new file mode 100644 index 00000000..5aefd1c7 --- /dev/null +++ b/modules/private/pub/tmux.restrict.conf @@ -0,0 +1,43 @@ +# Pour les nostalgiques de screen +# comme les raccourcis ne sont pas les mêmes, j'évite +set -g prefix C-a +unbind-key C-b + +unbind-key -a +bind-key -n C-h list-keys +bind-key C-d detach +bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window + +# même hack que sur screen lorsqu'on veut profiter du scroll du terminal +# (xterm ...) +set -g terminal-overrides 'xterm*:smcup@:rmcup@' + +#Pour les ctrl+arrow +set-option -g xterm-keys on + +# c'est un minimum (defaut 2000) +set-option -g history-limit 10000 + +# lorsque j'ai encore un tmux ailleurs seule +# sa fenetre active réduit la taille de ma fenetre locale +setw -g aggressive-resize on + +# Pour etre alerté sur un changement dans une autre fenêtre +setw -g monitor-activity on +#set -g visual-activity on +#set -g visual-bell on + +set -g base-index 1 + +# repercuter le contenu de la fenetre dans la barre de titre +# reference des string : man tmux (status-left) +set -g set-titles on +set -g set-titles-string '#H #W #T' # host window command + +#Dans les valeurs par defaut deja, avec le ssh-agent +set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY PATH" + +set -g status off +set -g status-left '' +set -g status-right '' + diff --git a/modules/private/ssh/default.nix b/modules/private/ssh/default.nix new file mode 100644 index 00000000..beedaff5 --- /dev/null +++ b/modules/private/ssh/default.nix @@ -0,0 +1,40 @@ +{ lib, pkgs, config, myconfig, ... }: +{ + config = { + networking.firewall.allowedTCPPorts = [ 22 ]; + + services.openssh.extraConfig = '' + AuthorizedKeysCommand /etc/ssh/ldap_authorized_keys + AuthorizedKeysCommandUser nobody + ''; + + secrets.keys = [{ + dest = "ssh-ldap"; + user = "nobody"; + group = "nogroup"; + permissions = "0400"; + text = myconfig.env.sshd.ldap.password; + }]; + system.activationScripts.sshd = { + deps = [ "secrets" ]; + text = '' + install -Dm400 -o nobody -g nogroup -T /var/secrets/ssh-ldap /etc/ssh/ldap_password + ''; + }; + # ssh is strict about parent directory having correct rights, don't + # move it in the nix store. + environment.etc."ssh/ldap_authorized_keys" = let + ldap_authorized_keys = + pkgs.mylibs.wrap { + name = "ldap_authorized_keys"; + file = ./ldap_authorized_keys.sh; + paths = [ pkgs.which pkgs.gitolite pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.gnused pkgs.coreutils ]; + }; + in { + enable = true; + mode = "0755"; + user = "root"; + source = ldap_authorized_keys; + }; + }; +} diff --git a/modules/private/ssh/ldap_authorized_keys.sh b/modules/private/ssh/ldap_authorized_keys.sh new file mode 100755 index 00000000..d556452d --- /dev/null +++ b/modules/private/ssh/ldap_authorized_keys.sh @@ -0,0 +1,152 @@ +#!/usr/bin/env bash + +LDAPSEARCH=ldapsearch +KEY="immaeSshKey" +LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu" +LDAP_PASS=$(cat /etc/ssh/ldap_password) +LDAP_HOST="ldap.immae.eu" +LDAP_MEMBER="cn=users,cn=ssh,ou=services,dc=immae,dc=eu" +LDAP_GITOLITE_MEMBER="cn=users,cn=gitolite,ou=services,dc=immae,dc=eu" +LDAP_PUB_RESTRICT_MEMBER="cn=restrict,cn=pub,ou=services,dc=immae,dc=eu" +LDAP_PUB_FORWARD_MEMBER="cn=forward,cn=pub,ou=services,dc=immae,dc=eu" +LDAP_BASE="dc=immae,dc=eu" +GITOLITE_SHELL=$(which gitolite-shell) +ECHO=$(which echo) + +suitable_for() { + type_for="$1" + key="$2" + + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo "$key" + else + key_type=$(cut -d " " -f 1 <<< "$key") + + if grep -q "\b-$type_for\b" <<< "$key_type"; then + echo "" + elif grep -q "\b$type_for\b" <<< "$key_type"; then + echo $(sed -e "s/^[^ ]* //g" <<< "$key") + else + echo "" + fi + fi +} + +clean_key_line() { + type_for="$1" + line="$2" + + if [[ "$line" == $KEY::* ]]; then + # base64 keys should't happen, unless wrong copy-pasting + key="" + else + key=$(sed -e "s/^$KEY: *//" -e "s/ *$//" <<< "$line") + fi + + suitable_for "$type_for" "$key" +} + +ldap_search() { + $LDAPSEARCH -h $LDAP_HOST -ZZ -b $LDAP_BASE -D $LDAP_BIND -w "$LDAP_PASS" -x -o ldif-wrap=no -LLL "$@" +} + +ldap_keys() { + user=$1; + if [[ $user == gitolite ]]; then + ldap_search '(&(memberOf='$LDAP_GITOLITE_MEMBER')('$KEY'=*))' $KEY | \ + while read line ; + do + if [ ! -z "$line" ]; then + if [[ $line == dn* ]]; then + user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") + if [ -n "$user" ]; then + if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then + # Capitalize first letter (backward compatibility) + user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user") + fi + else + # Service fake user + user=$(sed -n 's/.*cn=\([^,]*\).*/\1/p' <<< "$line") + fi + elif [[ $line == $KEY* ]]; then + key=$(clean_key_line git "$line") + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'command="'$GITOLITE_SHELL' '$user'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ' + echo $key + fi + fi + fi + fi + done + exit 0 + elif [[ $user == pub ]]; then + ldap_search '(&(memberOf='$LDAP_PUB_RESTRICT_MEMBER')('$KEY'=*))' $KEY | \ + while read line ; + do + if [ ! -z "$line" ]; then + if [[ $line == dn* ]]; then + echo "" + user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") + echo "# $user" + elif [[ $line == $KEY* ]]; then + key=$(clean_key_line pub "$line") + key_forward=$(clean_key_line forward "$line") + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'command="/etc/profiles/per-user/pub/bin/restrict '$user'" ' + echo $key + fi + elif [ ! -z "$key_forward" ]; then + if [[ $key_forward != *$'\n'* ]] && [[ $key_forward == ssh-* ]]; then + echo "# forward only" + echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" ' + echo $key_forward + fi + fi + fi + fi + done + + echo "" + ldap_search '(&(memberOf='$LDAP_PUB_FORWARD_MEMBER')('$KEY'=*))' $KEY | \ + while read line ; + do + if [ ! -z "$line" ]; then + if [[ $line == dn* ]]; then + echo "" + user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") + echo "# $user" + elif [[ $line == $KEY* ]]; then + key=$(clean_key_line forward "$line") + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" ' + echo $key + fi + fi + fi + fi + done + exit 0 + else + ldap_search '(&(memberOf='$LDAP_MEMBER')('$KEY'=*)(uid='$user'))' $KEY | \ + while read line ; + do + if [ ! -z "$line" ]; then + if [[ $line == dn* ]]; then + user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") + elif [[ $line == $KEY* ]]; then + key=$(clean_key_line ssh "$line") + if [ ! -z "$key" ]; then + if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then + echo $key + fi + fi + fi + fi + done + fi +} + +ldap_keys $@ diff --git a/modules/private/system.nix b/modules/private/system.nix new file mode 100644 index 00000000..fba504e9 --- /dev/null +++ b/modules/private/system.nix @@ -0,0 +1,30 @@ +{ pkgs, privateFiles, ... }: +{ + config = { + nixpkgs.overlays = builtins.attrValues (import ../../overlays); + _module.args = { + pkgsNext = import {}; + pkgsPrevious = import {}; + myconfig = { + inherit privateFiles; + env = import "${privateFiles}/environment.nix"; + }; + }; + + services.journald.extraConfig = '' + MaxLevelStore="warning" + MaxRetentionSec="1year" + ''; + + users.users.root.packages = [ + pkgs.telnet + pkgs.htop + pkgs.iftop + ]; + + environment.systemPackages = [ + pkgs.vim + ]; + + }; +} diff --git a/modules/private/system/eldiron.nix b/modules/private/system/eldiron.nix new file mode 100644 index 00000000..b71df33d --- /dev/null +++ b/modules/private/system/eldiron.nix @@ -0,0 +1,63 @@ +{ privateFiles }: +{ config, pkgs, myconfig, ... }: +{ + boot.kernelPackages = pkgs.linuxPackages_latest; + _module.args.privateFiles = privateFiles; + + networking = { + firewall.enable = true; + # 176.9.151.89 declared in nixops -> infra / tools + interfaces."eth0".ipv4.addresses = pkgs.lib.attrsets.mapAttrsToList + (n: ips: { address = ips.ip4; prefixLength = 32; }) + (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") myconfig.env.servers.eldiron.ips); + interfaces."eth0".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList + (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) + myconfig.env.servers.eldiron.ips); + }; + + imports = builtins.attrValues (import ../..); + + myServices.buildbot.enable = true; + myServices.databases.enable = true; + myServices.gitolite.enable = true; + myServices.irc.enable = true; + myServices.pub.enable = true; + myServices.tasks.enable = true; + services.pure-ftpd.enable = true; + + deployment = { + targetEnv = "hetzner"; + hetzner = { + robotUser = myconfig.env.hetzner.user; + robotPass = myconfig.env.hetzner.pass; + mainIPv4 = myconfig.env.servers.eldiron.ips.main.ip4; + partitions = '' + clearpart --all --initlabel --drives=sda,sdb + + part swap1 --recommended --label=swap1 --fstype=swap --ondisk=sda + part swap2 --recommended --label=swap2 --fstype=swap --ondisk=sdb + + part raid.1 --grow --ondisk=sda + part raid.2 --grow --ondisk=sdb + + raid / --level=1 --device=md0 --fstype=ext4 --label=root raid.1 raid.2 + ''; + }; + }; + + services.cron = { + enable = true; + systemCronJobs = [ + '' + # The star after /var/lib/* avoids deleting all folders in case of problem + 0 3,9,15,21 * * * root rsync -e "ssh -i /root/.ssh/id_charon_vpn" -aAXvz --delete --numeric-ids --super --rsync-path="sudo rsync" /var/lib/* immae@immae.eu: > /dev/null + '' + ]; + }; + + # This value determines the NixOS release with which your system is + # to be compatible, in order to avoid breaking some software such as + # database servers. You should change this only after NixOS release + # notes say you should. + system.stateVersion = "18.09"; # Did you read the comment? +} diff --git a/modules/private/tasks/default.nix b/modules/private/tasks/default.nix new file mode 100644 index 00000000..30f49ee9 --- /dev/null +++ b/modules/private/tasks/default.nix @@ -0,0 +1,327 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.tasks; + server_vardir = config.services.taskserver.dataDir; + fqdn = "task.immae.eu"; + user = config.services.taskserver.user; + env = myconfig.env.tools.task; + group = config.services.taskserver.group; + taskserver-user-certs = pkgs.runCommand "taskserver-user-certs" {} '' + mkdir -p $out/bin + cat > $out/bin/taskserver-user-certs <<"EOF" + #!/usr/bin/env bash + + user=$1 + + silent_certtool() { + if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then + echo "GNUTLS certtool invocation failed with output:" >&2 + echo "$output" >&2 + fi + } + + silent_certtool -p \ + --bits 4096 \ + --outfile "${server_vardir}/userkeys/$user.key.pem" + ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem" + + silent_certtool -c \ + --template "${pkgs.writeText "taskserver-ca.template" '' + tls_www_client + encryption_key + signing_key + expiration_days = 3650 + ''}" \ + --load-ca-certificate "${server_vardir}/keys/ca.cert" \ + --load-ca-privkey "${server_vardir}/keys/ca.key" \ + --load-privkey "${server_vardir}/userkeys/$user.key.pem" \ + --outfile "${server_vardir}/userkeys/$user.cert.pem" + EOF + chmod a+x $out/bin/taskserver-user-certs + patchShebangs $out/bin/taskserver-user-certs + ''; + taskwarrior-web = pkgs.webapps.taskwarrior-web; + socketsDir = "/run/taskwarrior-web"; + varDir = "/var/lib/taskwarrior-web"; + taskwebPages = let + uidPages = lib.attrsets.zipAttrs ( + lib.lists.flatten + (lib.attrsets.mapAttrsToList (k: c: map (v: { "${v}" = k; }) c.uid) env.taskwarrior-web) + ); + pages = lib.attrsets.mapAttrs (uid: items: + if lib.lists.length items == 1 then + '' + + + + + + + '' + else + '' + + + To-do list disponibles + + + + +
    + ${builtins.concatStringsSep "\n" (map (item: "
  • ${item}
  • ") items)} +
+ + + '' + ) uidPages; + in + pkgs.runCommand "taskwerver-pages" {} '' + mkdir -p $out/ + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: "cp ${pkgs.writeText k v} $out/${k}.html") pages)} + echo "Please login" > $out/index.html + ''; +in { + options.myServices.tasks = { + enable = lib.mkEnableOption "my tasks service"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = [{ + dest = "webapps/tools-taskwarrior-web"; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}" + SetEnv TASKD_VARDIR "${server_vardir}" + SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}" + SetEnv TASKD_LDAP_DN "${env.ldap.dn}" + SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}" + SetEnv TASKD_LDAP_BASE "${env.ldap.base}" + SetEnv TASKD_LDAP_FILTER "${env.ldap.search}" + ''; + }]; + services.websites.tools.modules = [ "proxy_fcgi" "sed" ]; + services.websites.tools.vhostConfs.task = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "task.immae.eu" ]; + root = "/run/current-system/webapps/_task"; + extraConfig = [ '' + + DirectoryIndex index.php + Use LDAPConnect + Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu + + SetHandler "proxy:unix:/var/run/phpfpm/task.sock|fcgi://localhost" + + Include /var/secrets/webapps/tools-taskwarrior-web + + '' + '' + + ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" + ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" + ProxyPassReverse http://${fqdn}/ + + SetOutputFilter Sed + OutputSed "s|/ajax|/taskweb/%{folderName}/ajax|g" + OutputSed "s|\([^x]\)/tasks|\1/taskweb/%{folderName}/tasks|g" + OutputSed "s|\([^x]\)/projects|\1/taskweb/%{folderName}/projects|g" + OutputSed "s|http://${fqdn}/|/taskweb/%{folderName}/|g" + OutputSed "s|/img/relax.jpg|/taskweb/%{folderName}/img/relax.jpg|g" + + '' + '' + Alias /taskweb ${taskwebPages} + + DirectoryIndex index.html + Require all granted + + + RewriteEngine on + RewriteRule ^/taskweb$ /taskweb/ [R=301,L] + RedirectMatch permanent ^/taskweb/([^/]+)$ /taskweb/$1/ + + RewriteCond %{LA-U:REMOTE_USER} !="" + RewriteCond ${taskwebPages}/%{LA-U:REMOTE_USER}.html -f + RewriteRule ^/taskweb/?$ ${taskwebPages}/%{LA-U:REMOTE_USER}.html [L] + + + Use LDAPConnect + Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu + + '' + ] ++ (lib.attrsets.mapAttrsToList (k: v: '' + + ${builtins.concatStringsSep "\n" (map (uid: "Require ldap-attribute uid=${uid}") v.uid)} + + Use Taskwarrior ${k} + + '') env.taskwarrior-web); + }; + services.phpfpm.poolConfigs = { + tasks = '' + listen = /var/run/phpfpm/task.sock + user = ${user} + group = ${group} + listen.owner = wwwrun + listen.group = wwwrun + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 + + ; Needed to avoid clashes in browser cookies (same domain) + env[PATH] = "/etc/profiles/per-user/${user}/bin" + php_value[session.name] = TaskPHPSESSID + php_admin_value[open_basedir] = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/" + ''; + }; + + myServices.websites.webappDirs._task = ./www; + + security.acme.certs."task" = config.services.myCertificates.certConfig // { + inherit user group; + plugins = [ "fullchain.pem" "key.pem" "cert.pem" "account_key.json" ]; + domain = fqdn; + postRun = '' + systemctl restart taskserver.service + ''; + }; + + users.users.${user}.packages = [ taskserver-user-certs ]; + + system.activationScripts.taskserver = { + deps = [ "users" ]; + text = '' + install -m 0750 -o ${user} -g ${group} -d ${server_vardir} + install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys + install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys + + if [ ! -e "${server_vardir}/keys/ca.key" ]; then + silent_certtool() { + if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then + echo "GNUTLS certtool invocation failed with output:" >&2 + echo "$output" >&2 + fi + } + + silent_certtool -p \ + --bits 4096 \ + --outfile "${server_vardir}/keys/ca.key" + + silent_certtool -s \ + --template "${pkgs.writeText "taskserver-ca.template" '' + cn = ${fqdn} + expiration_days = -1 + cert_signing_key + ca + ''}" \ + --load-privkey "${server_vardir}/keys/ca.key" \ + --outfile "${server_vardir}/keys/ca.cert" + + chown :${group} "${server_vardir}/keys/ca.key" + chmod g+r "${server_vardir}/keys/ca.key" + fi + ''; + }; + + services.taskserver = { + enable = true; + allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ]; + inherit fqdn; + listenHost = "::"; + pki.manual.ca.cert = "${server_vardir}/keys/ca.cert"; + pki.manual.server.cert = "${config.security.acme.directory}/task/fullchain.pem"; + pki.manual.server.crl = "${config.security.acme.directory}/task/invalid.crl"; + pki.manual.server.key = "${config.security.acme.directory}/task/key.pem"; + requestLimit = 104857600; + }; + + system.activationScripts.taskwarrior-web = { + deps = [ "users" ]; + text = '' + if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then + ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web + chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem + fi + ''; + }; + + systemd.services = (lib.attrsets.mapAttrs' (name: userConfig: + let + credentials = "${userConfig.org}/${name}/${userConfig.key}"; + dateFormat = userConfig.date; + taskrc = pkgs.writeText "taskrc" '' + data.location=${varDir}/${name} + taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem + taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem + # IdenTrust DST Root CA X3 + # obtained here: https://letsencrypt.org/fr/certificates/ + taskd.ca=${pkgs.writeText "ca.cert" '' + -----BEGIN CERTIFICATE----- + MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ + MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT + DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow + PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD + Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB + AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O + rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq + OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b + xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw + 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD + aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV + HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG + SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 + ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr + AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz + R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 + JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo + Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ + -----END CERTIFICATE-----''} + taskd.server=${fqdn}:${toString config.services.taskserver.listenPort} + taskd.credentials=${credentials} + dateformat=${dateFormat} + ''; + in lib.attrsets.nameValuePair "taskwarrior-web-${name}" { + description = "Taskwarrior webapp for ${name}"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + path = [ pkgs.taskwarrior ]; + + environment.TASKRC = taskrc; + environment.BUNDLE_PATH = "${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${taskwarrior-web.gems.confFiles}/Gemfile"; + environment.LC_ALL = "fr_FR.UTF-8"; + + script = '' + exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock + ''; + + serviceConfig = { + User = user; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 60; + Type = "simple"; + WorkingDirectory = taskwarrior-web; + StateDirectoryMode = 0750; + StateDirectory = assert lib.strings.hasPrefix "/var/lib/" varDir; + (lib.strings.removePrefix "/var/lib/" varDir + "/${name}"); + RuntimeDirectoryPreserve = "yes"; + RuntimeDirectory = assert lib.strings.hasPrefix "/run/" socketsDir; + lib.strings.removePrefix "/run/" socketsDir; + }; + + unitConfig.RequiresMountsFor = varDir; + }) env.taskwarrior-web) // { + taskserver-ca.postStart = '' + chown :${group} "${server_vardir}/keys/ca.key" + chmod g+r "${server_vardir}/keys/ca.key" + ''; + }; + + }; +} diff --git a/modules/private/tasks/www/index.php b/modules/private/tasks/www/index.php new file mode 100644 index 00000000..deaf8af1 --- /dev/null +++ b/modules/private/tasks/www/index.php @@ -0,0 +1,157 @@ + $value) { + if ($key !== "count") { + $entries[] = explode(":", $value); + } +} + +if (isset($_GET["file"])) { + $basecert = $vardir . "/userkeys/" . $ldap_user; + if (!file_exists($basecert . ".cert.pem")) { + exec("taskserver-user-certs $ldap_user"); + } + $certificate = file_get_contents($basecert . ".cert.pem"); + $cert_key = file_get_contents($basecert . ".key.pem"); + + // IdenTrust DST Root CA X3 + // obtained here: https://letsencrypt.org/fr/certificates/ + $server_cert = "-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE-----"; + + $file = $_GET["file"]; + switch($file) { + case "ca.cert.pem": + $content = $server_cert; + $name = "ca.cert.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "cert.pem": + $content = $certificate; + $name = $ldap_user . ".cert.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "key.pem": + $content = $cert_key; + $name = $ldap_user . ".key.pem"; + $type = "application/x-x509-ca-cert"; + break; + case "mirakel"; + foreach ($entries as $entry) { + list($org, $user, $key) = $entry; + if ($key == $_GET["key"]) { break; } + } + $name = $user . ".mirakel"; + $type = "text/plain"; + $content = "username: $user +org: $org +user key: $key +server: $host +client.cert: +$certificate +Client.key: +$cert_key +ca.cert: +$server_cert +"; + break; + default: + die("invalid file name"); + break; + } + + header("Content-Type: $type"); + header('Content-Disposition: attachment; filename="' . $name . '"'); + header('Content-Transfer-Encoding: binary'); + header('Accept-Ranges: bytes'); + header('Cache-Control: private'); + header('Pragma: private'); + echo $content; + exit; +} +?> + +
+ Taskwarrior configuration +
+ + +For command line interface, download the files, put them near your Taskwarrior +configuration files, and add that to your Taskwarrior configuration: +
+taskd.certificate=/path/to/.cert.pem
+taskd.key=/path/to/.key.pem
+taskd.server=
+ 1) {
+  echo "# Chose one of them\n";
+  foreach($entries as $entry) {
+    list($org, $user, $key) = $entry;
+    echo "# taskd.credentials=$org/$user/$key\n";
+  }
+} else { ?>
+taskd.credentials=//
+
+taskd.ca=/path/to/ca.cert.pem
+
+For Mirakel, download and import the file: + +For Android Taskwarrior app, see instructions here. + + + diff --git a/modules/private/websites/aten/builder.nix b/modules/private/websites/aten/builder.nix new file mode 100644 index 00000000..9a2e1a7d --- /dev/null +++ b/modules/private/websites/aten/builder.nix @@ -0,0 +1,102 @@ +{ apacheUser, apacheGroup, aten, lib, config }: rec { + app = aten.override { inherit (config) environment; }; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u ${apacheUser} APP_ENV=${app.environment} ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-aten > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "postgresql.service" ]; + socket = "/var/run/phpfpm/aten-${app.environment}.sock"; + pool = '' + listen = ${socket} + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + keys = [{ + dest = "webapps/${app.environment}-aten"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + SetEnv APP_ENV "${app.environment}" + SetEnv APP_SECRET "${config.secret}" + SetEnv DATABASE_URL "${config.psql_url}" + ''; + }]; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "aten_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + Include /var/secrets/webapps/${app.environment}-aten + + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + + + Use LDAPConnect + Require ldap-group cn=dev.aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + '' else '' + Use Stats aten.pro + + + Use LDAPConnect + Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + ''} + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + DirectoryIndex index.php + FallbackResource /index.php + + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; +} diff --git a/modules/private/websites/aten/integration.nix b/modules/private/websites/aten/integration.nix new file mode 100644 index 00000000..748e3885 --- /dev/null +++ b/modules/private/websites/aten/integration.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, myconfig, ... }: +let + aten = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) aten; + config = myconfig.env.websites.aten.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.aten.integration; +in { + options.myServices.websites.aten.integration.enable = lib.mkEnableOption "enable Aten's website in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = aten.keys; + systemd.services.phpfpm-aten_dev.preStart = lib.mkAfter aten.phpFpm.preStart; + systemd.services.phpfpm-aten_dev.after = lib.mkAfter aten.phpFpm.serviceDeps; + systemd.services.phpfpm-aten_dev.wants = aten.phpFpm.serviceDeps; + services.phpfpm.poolConfigs.aten_dev = aten.phpFpm.pool; + system.activationScripts.aten_dev = aten.activationScript; + myServices.websites.webappDirs."${aten.apache.webappName}" = aten.app.webRoot; + services.websites.integration.modules = aten.apache.modules; + services.websites.integration.vhostConfs.aten = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "dev.aten.pro" ]; + root = aten.apache.root; + extraConfig = [ aten.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/aten/production.nix b/modules/private/websites/aten/production.nix new file mode 100644 index 00000000..7a4adb5a --- /dev/null +++ b/modules/private/websites/aten/production.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, myconfig, ... }: +let + aten = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) aten; + config = myconfig.env.websites.aten.production; + apacheUser = config.services.httpd.Prod.user; + apacheGroup = config.services.httpd.Prod.group; + }; + + cfg = config.myServices.websites.aten.production; +in { + options.myServices.websites.aten.production.enable = lib.mkEnableOption "enable Aten's website in production"; + + config = lib.mkIf cfg.enable { + secrets.keys = aten.keys; + services.webstats.sites = [ { name = "aten.pro"; } ]; + + systemd.services.phpfpm-aten_prod.preStart = lib.mkAfter aten.phpFpm.preStart; + systemd.services.phpfpm-aten_prod.after = lib.mkAfter aten.phpFpm.serviceDeps; + systemd.services.phpfpm-aten_prod.wants = aten.phpFpm.serviceDeps; + services.phpfpm.poolConfigs.aten_prod = aten.phpFpm.pool; + system.activationScripts.aten_prod = aten.activationScript; + myServices.websites.webappDirs."${aten.apache.webappName}" = aten.app.webRoot; + services.websites.production.modules = aten.apache.modules; + services.websites.production.vhostConfs.aten = { + certName = "aten"; + certMainHost = "aten.pro"; + hosts = [ "aten.pro" "www.aten.pro" ]; + root = aten.apache.root; + extraConfig = [ aten.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/capitaines/mastodon_static/index.html b/modules/private/websites/capitaines/mastodon_static/index.html new file mode 100644 index 00000000..fae4152d --- /dev/null +++ b/modules/private/websites/capitaines/mastodon_static/index.html @@ -0,0 +1,29 @@ + + + + + This instance is now closed - Mastodon + + + +
+ Mastodon +

Sorry, this instance is closed now.

+
+ + diff --git a/modules/private/websites/capitaines/mastodon_static/oops.png b/modules/private/websites/capitaines/mastodon_static/oops.png new file mode 100644 index 0000000000000000000000000000000000000000..0abddad3e8a11e53ff717ec55810d383e4b2b9ec GIT binary patch literal 120305 zcmbTd1yo#3(*}ry;1=911b270;BLVge1PCGxCVC!?iO4o2@u@fHCS->;IKp9yx;fl z?!UX|EN2cgbEms+b#--h)l<*?q@pB)ibRM61qFpFCo8E21qDkE1qGvn@EUR@-7U}& z@*WMc_fpa@ z^RhMLGp7_0CKvSJhYSD&xR{W80PXCZ`8|Xv|BTBI`TTO3g_8VF6Bk<{%728?QB)z9 zaBu>Ub1`!;nX$65k#lo1vvG29bF(p$v$L|Xv#>&5+)Qko{9N4p>^$Uu|0p4Mb27K! zSCf?fdoRd0AxbM37e{^;7I$}dW_J!|2PaDwHa=49>YV(nm0{xYJ8se`MF5G6#?f2II*R8;)W!1m666$Mcli-(CL3mY>l3lR7+ zuRpDwUDN>o72|(x?X2PH2w+hII6JsHnL*aWg6iMS5Z(R1-{_?wL>hi&Cu_)}nAk}= zn7IN0_AYXgLX?nSn9Z%t`K9@Iq}kYbI9YkvS-E-H*mzlaIixtbx!JjS#JSlx#Qz=R zf9oqICMCtk$t}hw!6n7UCdJJw$-^TdEy2mo#UsYe#U}A@Upaec7ZZCkz`yskhTQjW zU%vm>zWfqS023DnCk+P&yMHY}#md3O!P&~ekz7KZo19kB#LU|M^BtjB$=F~n1;vV;ScyE;vLr=?=R)fX_=O+LByX>U{H*q>Oa$|aZ%mMtkdVfGu-B=gM^!gJtwp_p~EU4H1m;q1-#{L7I z#m?GZ*Uy@$yim{>Z!P;j@7)XRm=X#t3(aWG%v?V&7k;mj4)gy$b)gF{S7~?I8dE*QS`{{~7mxG=--8Uq=0J({L!v|BU+IrU)4S z3iaxLYnqpY(9et!ywJ0C#Z`w@Ogi$sH&_LcIBi96Nq}77kIbD>RD-VpJgJo(c;p6l z-V33C>pz0L3>`c`IRFkhvJI`OM%?$phbc5(Fkt?EfAhPo76=#`sCx4v(w`fX!AbJZ z)<3eXe(QE47Amwgw<5&puiU&(t*}?DXmpanX?+2 zDrr*vO9j?m){c_$8MAK;rWT3k3`Sxf*_IOReCiJVO#MZ}o$zp3FkiTwsGt=K81}zd zn<-LDp=4=kCr=HQvoFrhDBnv@Vfy}TOfP0~HgKm~eZpK~Tk!d#@0Yb&5Aw&ZXgNqQ z+fBFeggeWt$G46OEn~#bEw&0a+$GA-dhD9cVQDzUdI~0+>qdXnKUb^!N9`{9bITG;R;6`v{J-D%4%hzn`uKyQEo|b{^5k2gjhbT-&N$qYi{nO_9%Xt z_GRKHltBn^Vi==J@ken-O*9yfysRn3SPKty=%O}SiV)AiIX4M(-naJjgo#hct+IB% zsD4fZ5)7EezL?dY)#p`?S&XSSnBr_^NG!rwP>I@^l2fr*f{l*K5Qrun{%BT?i+N^=U~$jc!|T^TvyV{%N9_2Q3* zFD&&lL&w+*zu&?=h&!iqQ%ko#2W}`jQOY;D&dm z;lYwz`PCQIt?gRW%~}xKqy-eRszFxjNABaX9#~|Y>!_ZQBSC7)g*~Rg_jA1+3Pm9@ z{g9QS<^q8c)I9(l2pR~8 z4Y!kvty9lqt82OX|4Jg)0og9R$*-0|z#G%uLC{UDWm=7M(Qqg@bvoLbRj>LVj||d4 zNU1uw*6lp1H(i2inqP?M{std*K467CfG;wtE!?mjU<_$B*= zBgi1)bQE+tkoOaqWz3kcuJAyWI4Nn3xmEQFXiTS%1~>+~Mm;dpUbDM>ba?u{!*}IQ ziyHcJCK3i-JaqQb zVl00e8|wzeQ9CicEX*GxNn)l-0mlB4R%TWeyCxp*rqXUC@#+wZ>iDqz6f zj!GJ^$NNu*cXVKb^kSU46h#*Fm{QY=0hm2)yjhL$54e=zjbPpWpM&m3(SpMB(v_h=M5420LO;wi2 zV2Pz>cq`*K1>{yI&ETfYbTd__4?O+u1`;c$UCw*Be_Zd&)LFZ#{qSFZ^RN8PNkgU@ zcMt62^Y8ClcS$iM#s54_E33{~VG;4lH4CPxHQ_{W1Xr-DYl8YqG!SzM>G>lDgKG)U zStU3EvZAb5aeR=&A&Jm&a%e%g3ruZ{k2wTZK0R8k6YAwQboEU;N)4@I8B5nP*M4TL ztgOnF#zjjM>t?mm1P}-<35470TSdAOELAVOeguBljw}dy$hnF)wnB_2n&KLvn|F)& zO3+A8n{r}#U?$KVx*mE`v$e^J{I8i8!|(E5;ee~_Ml5A~AD$QnBH14}mi$k;9qLJT zNT0sn8PiKtqo7PhGhLCDUL7xpKFR>!DqJM85i&-d%G=l)%!TZhnlH73nXT|MJnn7C zWt}X}gsMACyJy&%gQY%I9l%NrEgmD6$t-wns{H4+!n$#8A=t&MK{ujI(m-CxAGa`D zjNW`h5f0z7MQ?@mS(b#sG`hqe+S_=tk4W;1w&e6QaC4HP%h2Gh5!+U5B?>meufPYdKlG_m7DavKAVg51%>DBFhi5Ap$NRf;I3|Ez`UWpQAKK)=@j7t1 zQ~WiZ!E@x1E8pgSc9in#U?x*LCXku6KglgJeS(XtS>?V(=T2bx5rBvNYlyF6Al; zXt)vdA&Bwt;c@!&KKCjSSys4_+R*0>LIerTo`YNn)cNf4`sYiEM-o5#cU)_4y5x zZeu$5>A~{yQlc&2y?63*dmNuhp;u%26{We4D_rzB_sXihs$VO{uWM(Xww=@)ZS=?u zexTSis=>JZwwXtC)j=hAqq|RvcI_S+bYB9xsGg7MXU2MEQv4^lp)ERCeh1dClfvrR zoz57Vg2ttAJokZ*O*b{crHFR%^l6NUVnrP=USn~v1qucdkcV^nw}Jv(9X6L&+^h591TaEl&W$qk^c*GR8mk~Z$qizbt5mB3h9dmj#T zH7M%d7_;^Kf}O}b7_dEKP+%!vI5xd^#*Gk}@O?hT~pL@D8sOYvzS*}7t)QA~5k4-TH>9)qo z!~&$e^1sCL*YVMtm5}Y}$*w|T)nMFIYAbtoZU9w(Uix`UR?7gVWd}@oX_eMB&)1Qn z-r4UizxqvZ$!f_b< z>hR}g!303-$~l{2+Jw`si&dY0cQf+l85P)kV7h?oFFh3hdwMDu5$b{%-9PZK@?aLQ zMn+QYp^%s@aqzxJ){%TggY8SjwXa@@nuPNDCGK)HcWSUS4j!BzkZHnhi?La~7YBux zQ&DhzF{2MBd|m5YuGW30l$qOF#jFXhHZ?AaGw{|V*jslzcg?yBGhP~8!>DvnK1d-- z9+&c6GUHZzEDoF9FF{n4yy(ObJXT{6v7z6W59Y$0;hxj1EmbTxi|EIXp{F!S!z-{A z;zcJO4nI2~eQx|WY_Z?Tk$C4Z!aj zbPY%Q9MlzyBD&WzgXS}7Y2qnwW@RIK6%tVlSQf#{a)#QBm}Gy$@U-5!CjWz`UDiUa z6ifpD8{T6gwaRfl9zKc$Xc~<8XvM~4Mm4#%k!aJ zjFg5%#Cfnmu$SYpPoGepGNjz33l3XWetu9Uvi&mc&5sp+n9Jp0`3`=^HE4?$NGU3e z>3D1~_#0Jms_K_BTNLe5k*j9;m6N=nQ!kB}N#>f_wZfSHdxB{$)L*cuaFccNkURqt zmZ*34;3W+x-9Wvfdn>R$> zob=$w8-6trm#!eJr?FgA%41X*q2j;YU7+4{=6vI@y0R!Ma38kk@vh|9cKt|l+JehL z`Mc3Qv?Y#`jW)M3oo_6ybhSB+J9A{oV}bQg?Jc8gOw78ihMW2J=|O$aS#3m5SS>3- z$w9h}uAo-7TC+314=5&Y>q3Ch>$atVWUj~j-oWYMUkCm}Y(%2h1f4`RG6_IuNm9ll zt12E1za7w$A2GOLnROIEh*_am&`uN|604|jz8W%bWswJK0__;v?F_!e zgAdy~)k&#)AjQn;sCXmkdP=(*fCGJg#-6H?$LEtZ_FX!Bp>bx5em~&THO41P*uJ~6 zDqk@v~A#;V-*cSv~nl0KS9BVhcV;Tm!ZcX~h%MmRsI29_5U>{Yz)6VLV; ztQ+I|pmHC)0<{mbPelP}&#GaP(eXGWB~*2#&-&a#AJ?~mIUok@6}M_RA-^hCg|BxW zx)9-{r@)s+b-}c9Vzg6_Wpm$>{0YFz}OM3YW| zpLw455fc{C|N4Pp1QfTyuv<%?6|i-wak`0{0rtmYjsLy}y*NqN9bx)$S?&<{|`Lj-#B{7h^?` z2#$nMeoD~Ki+39^tlXWf?pFnR*n5>v+&9VB^z6ZNM2fGvr)eLDxo!(a4{UKpsdP55X_~WEl!(P4kARyLThjQ%ID{NO0|? zJMBmpna+g8rpZf##!cjf051%=ceO9%}kBgSjj=#i>B|@OIuh zpmsLj5TLA57@e544%p#5+Iv2sl2KS#pjub4c*pr9lMW<{ELra_!>-xb3bp-ZJd|h_f_h$G5QcuM=r)FOa}wDVCWdCL9_!0hgz*c{dpzQfRC8b_8{$gI9dX>$P=*m6{o6C-awk2?i6BCeNbYn5u)O>hq(opbqLxGD4pQFC;;-{5ACX zl>ErW?K_*r&K=D)!2(+k4aK*T*Tc5bg+VDPG-XU@$Dq%>IyygQ1L7jtjrl4ssRjgnPAdRnw(t|2SWqVU{CU0Wh(xIjX3MNBir!*HL*J7Ui%xi~ zttq+%t_a4{nNs>)p%J1b{Brwtoe9674bS+-e6D&klkMfxaw^e+aEa|AiN|5c433MU z*^zF^R1PXa>ed!wQ(;wv9@fM)0(J}OWYdR}HViVH%K_I=NN#*HF8fLnBUsHW>ZtFq z+hAA(?}$usV#C0vT!r_}1bJc|CiDiUfZ3YuiNIy%nTzoZzv?U4-gZ+jJ+;O8Ags$V)i7ds8=}ev`Vtc@`S{wej?u zdFJf>6sH2KU&0YQqp;WQ&W}_5TVG#>V~1Ne5xKjW1=+ggQMbsvgVcqXDc081M#TI3 z&Gi}1$Pl>KP{-sfPOm@Cc`n*An=~)EEzd@%#8uf;i7kk zq4kp)ZRO+@qgZjR%)j>aFJe&Tay){!H?z)GOS>-80O6ig+NsS9 zLw{C?{T{+hP6)BrhL@hY%%~Ff^087tCEW}=1}I;UtwSvVa9e&V$7?r3seqo|K~`cf zm+P1xEMiIVku5Tubuu$0nP&QQK$8)l&=iv$NXg!P#*tAD$(L%g=P zVcC}0N&B>Rez^J?!_!*Vy^eZ^dc#H607o;7rmfOB`|D9{jG?RWP08>IL54Z$SS98K}zAkIbX7FsF2g|{)rZ>~O z*(W4g^}&-Wz4ZN$Jgr&r5X6goYo8u0vSs!?z9($< zP3&YcDwoSg#jOGU=n8;34{}T@yfiIPmr=pA0o?RKs(bB$Ox|*DVMWZ#+W0N22JNT` z#YKn*Z9|bD;od%hB9q)}6p}q})QK8?zjs)Y7TG&((asdM^g!KB*rV6mbTxy6&3&2p3l^3nK5#A>P`mR@qo=QhDx>5e!wnB?gQ}Q8Yx3j|JJLa-5ytwCc`{UR!gc?Yqm;FaK3Ft#Nn#%VagP#QXR+bdu;bThx#HZ^gi4=X@a8 zh!MPG>fO6yemzxBo1lPo@p$kx>ICG3zIqDZaC1_oe@!=~aoxDkB!jpk(WDo6&+ZSh zFAjB5Ti|o1!i95xnm~71^J=n;%eH_HtPg~*)V`$V$@D zzlGW1FNm7U@pE(`jr(vNLok=rs>Pd}kXY>`!MBgNKhilr9- z^(!zg@!MFzr zNrtjvvr{o?GY58o5l&YpS0be&-z>j7Ej4Q5$Hk6Hu#}(6+0D#$w^(y{7!xR1}jA^`)P2>(f>fGojE7p^z;bmF_iWdf1 z7?Ffp3vF-wf4ovmpIcBhJX|OU#;w+5oZhD zi^k-6cg>RvtLQ{3i2@EcIcvin#aH79Bj*0El}QUMzGtD1cyA2Tp({1R6d8#Qu7~Ga zSP89s_jW;D??a_ijUZ@)qw)N!sTB}?E3`e7lzLUYNEMQ1}bXyPw`Uzf7 zJC`>HaxDMTeHtjn%m1s~`BR@5c6Ic%vc90P)qyUrb_k4yC=c7EZuWQ)efL-W4Yu^u z@QHZ4?CjPPVRl`YX$_6>$ma(t!r`r(mRJ>6-oiC~avXFkba zPgtI)2*2JVVEJSze{%($24Se!-U@M_x*hM5<^Og`K{04ckQ#tF-w!Q(C;N|YQLv3W znOM(fOZ-!G)wG=`%xUUGBVl5URENa&SBIy9a{{vPeUlWw4}~Em*91t(^>fHQ-0kIV z(u};JqO??%6(yWSyouFN!Fv1a6hhmGlq~b*VmOqnB4{-b@$yGGWO$UsMuR4+C7+m$ zr}Uh!Ldk5H-$h3T&d|RxIf_?@JP#{@2Vgc4TeA`_87Kv|cfG`_CyBXEs3LaZT2A0& zuS=nW@L9iq8zvG&U_(W3V46@zs>_YH$O zldvHPaS^H=fujv9W?`Hx{8VLdmaeoyWm)SVsh?*kn#Y7b5MxPNq zU4#lpsqdB;QOH=3B!?8@cZaBy6SxFrB7bG)_UcxGt8$FD2}_;$U5&3b&&^BHCKI-D;fSW4NXG zBr;&j>@RmgxrGM>gey3zw1uY1{v=l<`^l-97>p_pfXk%nRs z8DQVSsPO1ymBQ%!0*_>6ZTKLY$W~`Z%n}6XrRP7dmf>IcC@*!x=U!tLWd*&BOr*S!23Maqc$6g6~<$kQ1uS z!Q%e?gxm4_3I_(hS>8u?{lqt97!-=NtX%mSGkq#2Y-q(bZM>`s=%gpJkb+szvwg`y z(X9zCx}K?7pg=zHUeVUTZlfaCA|$89&Ki&Z(q>%lA}cA@8G4LuchZ7k0`X=qm1&Df zE)!)=>_rRRZ8f)uY1Rh5+S2#Bd?Xr1RPb3nNXvb{mFTg|;g1d7V%QSbyjycI-@z06 zNBiF4Og4cNE1Z-S6z@3+G}gP1FnJ{XI-mVGSqbsa$U^(b>3Q1Gd}FRxg__}|#Q_0O zn!)L16ogvnK)$CPNUosovH%xIelr)S1^%*N52^SP{tg2lnbBB# zLr~T$-U3sTFoY}*`)qaP%1`)tP-zB*FZ2b`m2P_zr%XHELS!FH!Yi`sNGMhErrNk3 zSYr3SiOiklxC@x2?gpOBmT-jJ;$IFo#E&=v=i8%C6kgFJHx0LEC(?G~@fs;j^(8JU zp{JtS-`R!xy?43`(4W@pZfnOz9h8irMMV_J^DN+CkvUo(%QwqR*{3 zT-&bp2M7KOWjUlGnhm|^yI7~TC)l1to#oU^2IaIoA)t`8UIfmm56GK$o{V1~Y0?nv zx9KylA&Gq3Zun6`;s>1mgrngct;IK zXy69~jE3v(%m8Y@M{4fTS4fkp4D7wJZEZi0$GU7D@fKFzRtr@Z27^3QhGXu~8&-QB z&=1EzWhd(O;PAxSPuByk4^xgLJ5bM{&!fUpzL|5LeL~$kHxa)TxX<>-X}S6+Pd>W| z&y+uRrXy*Z!QG^VD$HdKUC&)u4j}A#b^FbGi~i`Nf?y~aUx{eiDREWO;Ldwb@wYFG zlc8{vogq-oUPPfWVxXg<=-h;L*mgaYv#mU=kEbfbvOt?|BZJhEK}HDT`OI}}c5`tP zBX;4?ez}!%R;p)D%zDwLqJ@3j@v0INo_i>0Q($7=BZ4tMIC)P z$dXN!ED`Rd@SzTh?T_JE)u?EgZrZh*iHn^mj$GNS5eW=KyG6v2I;S4)qxS_<9>6_u z5z#xg968XP;Nd)yS1U5TBGenRHyg_Co2oq-@4Ycv$jts=h~wl<^+A|#h2;(=puy5H zDSMwFcOt)x)DLJ@S>8c^4&GrzrhElC!k)J{Z(kt>vXaDOGm6m~aIOZ}hAuU-Vya7R z%K5$LY%f2AkXyJ&_{Y#jJIx)gBoyF*QF*7?iLW_tmAt zkw}s(5}74=9aBtPVZg~*RlWp7ESC53ImF)xP-@rMf zi2TO)#H9FJ$yH!jn+o1occfIO{Y$8+H%IzIs1X!QJ~qje$*XdTng1-HlA#q+2e;HA z2wOPVB4K#e;P{mL1iL)YdmzHPL!mu*A@Z;*BeW#6DRnk}e4BdNv6Fvj>76t-7ui&I z+kf#Rh%>dv+4Zd?HlRZln7CpUuVtBFXn&4r48MAs9107apU6Q>St2ytYgA(GGiXjB z>_;mo!kb>~UsZ;%vFx0o8L@fh60^v`N56 zs-eY9YOs_DMI+&Wr8GLR{-6_n*LNMwqhn#9v)fPjm1XqWiN&r4GTMw4o2di#A|k_! zlvNXrcEB4Efklaj4JJ&-;91q2Gr#=p4LrLtbOIdlhBXS|KACZY{ZAc+{ELgqcbSaV znD-B@)TpVKi!g93Bzf&U4=wyl@-yiQ(4DjC;gcncgu21g^k>j2saJQWY4oy|AvU)s zG%Pz1&f*JsBdsczXq;Jb3Q5<^xCSQb;d}t*0&(2Ng&7%h>0{@izd?!#d&N>o%29G%Dp)zf5j~qTblb>=!uITJ_g-QnZ1>OtAX?C@#rMgSd^N3tRmSr zI@|*?Gr9CY?U?x1{!R4u%}_CN@$q*8+<7?MdMB;yYXGjgewj-%8qYI4xi$zB?S;KD zHI-wwG^q4bjF-oumg8bu)@D)=uf;;1F+akaLVDi1+n;kf@GW322d{iQ{oxM%=~hs` zHt9g5|I4j^9Mg_Z!bT2yO>~yo>Dn!8gQMZ*Dm_DBdC+W3D*I(dN!|3Sh*7yvvGEmmper9&U%u>Y-~JWXCaQ>Fsy(LQxS<;tvg9FF#i@uq^@nGZSzJ~0 zsX;fY--twdd%_ZA!gp*jKKIcBbJb0ZZj1yxr7DiQ@ifv4b)1U@@sSF=BhS6lV;315 zhbqQb_yo4PRMa#^!Q=*qc~}s{{4JO7oETVUfI%GZA5^=u;ike2pWH%jI(vJQ3dyPM zh!?)5-H0Dt&%#gAa47YoixQ0Uv_Y=5ue7wi zW`{@b`v|Xfn{npX_OyYK>}D^5L}tI`GdUP~fjbe4l}Ir-TOHHlJaIQKV&6);Ko&`8 z&uuwH6&pPX+crEY+k5B8Lg+|W!>HJcG%FK7fJLE0>v8IVengC4+~QMrb&P(a-8|0- zS>d#8Sv*FuwB`1#4r5sCLwiJg>FzopuU*<_2oll5A8sBu%8;+NZw)&B_E z1&5$Xr`A5E1IJf;0j<1x{m;5&h@mMpLnQwplMS_$`s`XBT#$U+d@QJRuumZsczefk zon;>$JEaTB$evz~CbcJcZr4EJgB9phc9A=vQPFn+JSvnt`iG+bdp?zY>UcP^fM_tHmJZIi1GjZi}Z{9+>g{W06) zzWac?*hSei2)M_ogD)nq&CFiaJ z@&Ul>5bQ}MFN^hB{2O{JjSay8a(7l4M`!-q;J|}@Xh=iBXFoOs& z8ZM>yr*clqp0`@8Wpb9|ivz?W?OU0}h-O1+@gMvLV6Enw1?82{{kG5!$eILyLfE+w zf)RSoZe9b8uu6X5Si8~iI0tpIm3%H5%S3uBA0;%;E=csd7w5v1@ zaYT#m!UJe4a1Y)a3o8_QdfA0ifHS#;w0+08l+y!~UkwtAE#)4EWNIPe2CY`JOI1XU zBr>0p*jGla$VET-S1n#|-}(;I?hWBJBw1U>Z0v6G%F;B4eRV|^$d}!_GqS55>pZxC zdwA0EwpKCsE|r|JeQ@CnpIMrB6nCqCjA#jnQlB^~!%`CRzBXeNZ%r9m;;L>-E^392 zL?ih$l`=AcPK-M7C8Cf=f3r~BaB>44$^j#AV=r3_!rql%{(a&%fJa8+^d0LT-;~2y zZbqYzysATJEb|l?@z!8j=L^39@PI({P8wMNY-9?LXRXsuCiC_cN$t3a)tNvU3h>~# zWLsx537kWQD+zIbzZjWcBlpy0*G}vGjFmg6Ji~A7?sO3Y5HQL1(v{lUoL`h$Pw7l( zj7hz<2zGGaLTYd@k3x$DSf%wqDoI9QA+ht-dAF%UYmtZpXJpSZ9Y@`3wLP>{3AQIw zVIzvt+i6F(;WySEA#@KJvgi+Ow+`TooCozGH@wVU#_>n=43`_7c;B6JUM8bAg_40| ziW`FY!D%>?I&XJm<6^gOWpF;SU!U?ldsvbQ4dnEFJX=RTZZlb;NEP^tCX+b&SmHdo zyWGfB*3tsY%W`i&(N2E0vXx=MS@>uPf531!9(`u!Cu@kw;55)?)?C%rz1dv9}Oy^o@G{5b5OJL$GyIeUfs2u(zvMajk<}FOjSOOp)8Fp zNQ;;rEMMfU@iOPz!rwq>3{RfkdAqL+7qg0C;hkN2sO6gW>u5(ZhzezI9;HH3%+LJ& z6}KN=_0uBTXFls7v`3Ln``sK~_4EZfmHl1$sZW_F-Az(`Grcs46eD}ZDg1*A+`xl< z8N*xR*87Z2oSOW!E2FiO`bZb1&^J$DZ-2dw2?%LV{4F&m0xhPKt`C>Ns)mf~MBMvE z{=LFlu^YRi{es5=fUP`1;0;=n;?o;a;ucZcfZe#9V2!%Pd zqfI$Z!7;{Zsew3t6}>z1XK%NC0#3^Ggk!6B9{ukqI8{aY_14W6UxjBHRKQNWGNwU} zhZLiG%;+*meL=z5OUcDJ@>DMC>G+lUIQdOY&XUND7Xl2;b#VNwDfwSzruOR{7ahm( z=AV$4Hr{r<{+s=CzRf~_n<^7$N=-7j7-Xwd)%vpvZ~}xqvtoW< zbEW(8Clxxx>DQ_4Mts?x)Img;0vBdKUmtoSh#zQ6mF9maQPH6SnfIzU{H$%K+tZfnBXB5?=WaXAtBp#x^QBBIpn6!4 zc=c*GJyc2C)AwZe!}awhDv`_P`MZB$gkmB`Lxu%2_5TM-Wbn`PcfRvE319c0rVi5g zcP(WEG`=VcRzvDmJ!EW1Y9weA(Ic*dXXQv?D;M__fT<3J?BD0$S#Iu0pwR=YUY!jW z@bPwRcQ4FW>ZAtW%b8XhIgt&AD_{fM+7u}5Np#}ywMLEj4D2tO=U|04-RSP24;HUY%>{*$@-zY<@O8h*4W29~x_Cz4#{gRpidJJ|XHgfHwIn9YA-#o@7+|%>jPbsoGq#Pt+Fvg@?X%;HER&ln? zNtQ&LW7BCyDlu@-na?rWC$Q@Q++EG{tOu{lv}Bv#C;#GO9eJb)H$zeS5d$QVL@?Tj z0Aa_T9clO5Vvq-_zA%Br2mCe4ms}K=q6$4{@yh+LM&gs+2LvJzlmvwI8Ze5p7CrEB z(bmW+yIiTtaLWJ!{NK-s-_6PgQ8j#H6mw3jr6UqUlZ*dKJn5mo&8Q=aGc&XQv9g)wakj5lhx7ad9JL_0;W9;h$=H zha+y^CSj<7X86c*c40;-kw^ zEKA`{Bokcgqk8MDww;W5D&h+^M+--|(4l+$&ED9aQrg6AH@1+&B?>sUM$2T3iJ7T# z6FprD0kBK^`+sLc??axE8EZ#Ku1$<}!KfI{_c=j6qbQFFp00=~Be%id#CEc|ZM)u8 z-9Ok@!;DK0eO(?dt@*}Rcf8%abt;QbPY1WeRdWl2{N~)K*XZemI696Z9|SQ54`+Pg zc^GJMLyiEdqV4dzduSw=$epn=%`F4Y$B46!z9ieR{jmyDo`Of%I|NO$_$X>54Ewl! zPCKV3Hk|>+jK;fVA0`Bkzm4Mi6|;K|k#6t&PMm|v&pGLO#x#h}3!F+kyEuE@y8UxA zpAW{!R|jOpbVfU}VasIW8B<(0oj6p$vUu`+1yuALYySSnOUfIpi}rBcB+L4ZSD&%G zq3m{m7XTz;vbCOTXRWNFFTlYWP|ptbB%b4$QB&ts7`sF(w}P>7jH=$v({ZB_ahFhp zOI8feRlq%ErGgGh*ICOYIf;xFdasI0lB}rcve`ISdf*`-b$gv=sfL5rx^s)6Y;_QM z-3Nn&J}+xXah*rt_K=H0G%!RXv#9F#iJzsvtSv2M9we?8c_6$gurpQL!!G>J3jF~L zY-Xiz&0q{c*8_C0W5LP$?ELyDVb_HvT)puHI>D67N9_H<4%ei;^8m0z@ZN(pcSK&& z+Q*f81tdoTxjF_P+nz{o;`iakCpf)4!3Uu?zF&7HF%Cn$9Vp+1iH8o4-GH#c zkSbjhu_y^Jpu+9!$}7z$-V}6|asJ@v48{FQ&xFk29j=l#I?dE=Ml@R!?h)PAjvf^~ z(Is-rM)1HBSv=sUUy_k=U~LAR(LIpGSP-*a8C8fuF<3R`Q(8j7CdW{gB@5yS%JLa@ zZ<2opH{>7@wa(#wFaFB&au+H&D%yRv&fMqySjH1|(?b3FmM3^w4d*iCgVoKQxckBi8=|Wmp8VG$kGJN{dcS zZ*IQz6Ehq%O7RYrPEPXxI3_Wh%J^ym)QVWLoK)AIzjjk;kfD|hY!*n(7({qoNR=bN zSt$wf7ZHhsJ^wzcjBcp+)4@pz!d+341ZrLUPP%U-yLlIezdyXG$;J{f!O%sKKJ?4_ z*(zPFSaZv0BZ^>qZ5`E6as>tNx6ucM7Um=!_zKn~O2xUkQaakI$Z3Y*^|Z2jmF}}l z&o%L|-KErd-_%OP_=PPTxkU~2GMha|CUMw+PueOj=iat&d*ilhGA3?;8^hH{MQbXOW4--0WX{o-H4%;<=?aF{l<6~!%L;sXC}QH6t_S|%L*5Z{lQ_<10TT#? z{OSbP2vqUwVoWD3YRVOK^ixOQ^ZoUYDM%JHGp^N&7R};+_!|%7ZI9BQBSg-)1}m0w z?ydzmrP84>fg&l$dcASGB1Vt=I)0g*Y9)$A_yexu0(`8yel=RmJ6(<1-bt1D+tMvX z5t+OlIL{@q%iI*dSnP=8r^hk^r=R5fDRmp_#{kmr22bErHF(D0C1x5$+h17NotUsU zuY(>b=*Dr2)4vxYjqDwO0Ctl6`-}TdI9EElx^ANcvf;DBGc(F#zr6~=h#f+Q+9Xo@ z?Qvcn$W@_7*->y7$y`_g1)xP2S!as~5nr%x)BGAN6PdGFaS3c29tkr0{QKGcc|zQs zITmrT3E8}?Mxl1)Hz1*~fF zUe4b*bVQL+m|Ri?6tlO=cPopmj*=g~hu`Oxu2)Ti%%5Sbg8L`YDief}XbCv7Z= zb?veN@BJ>Sv&qXI|I~R^#M>$SxN;A8N)#EwT^I_{bF*P9?RGM$j%=Dt_+w_W2gq)! z9Y~HzX|dTp@@|Fx>@aOn0UT&?>`e=sxDxZti5M?+{VIrQvF?`O*!@PagJMkvjY}?D zu%q%u;+V^jqRkI(94OK`x^M5Ap*0{{)@CZEL2NXEe-h9h? z&Txf29@6UkDI02|?v1D)MKV{52sfw;KH|9iM$pP(esi(`ps&1SKuPP^ym)_}Pl_Ig z2c1CdWm4WQ-t&j=9LV!O_|A>9Tq`?Xw{Ih3S8Hx|hwwBs2r37e`g%R10z$q?lbqvW zzI{W9fHe-lL+Gq{rF398^bx!+V)f%5!W`HiW>3UtNdN37GJCrpud!`&zG!+}V+KY% z>p+8TJ&CRVT%RY9VB{auP@qTM`T>$*Se5ZIKi$hfpQ6$}T*V$8yxr68oc6y!t!!!= z;5jx?|Fuznk-k^gL{IOX(+^MRO*oZgpBzo zneD8AUk&M-C$%7IxEVT+UT5PP02TWKeOnz$FTSsI^lVnD9lOIG!`jd5t{FAQrPL=| zD7(LHDY0<-@MfbGC0PrazbUzL^Ln*6bYLg;;#o#^vO2g7dU@O4? zw37g@*y~6vbUeky#R>UkM&VPF9>-4CnXN&+U#dt4g!|uEg&xP|apSdDsSyHWA$6P1 z!=7`ve%A-U-EDk+nGl5Z8=3g2{&#JT(jkeGE_&83YAr@bDo@gsaz&xguSiTu1jp6i zx=GnVn$LjEnSk~Zv7;cxqQoZXuv4^iN&^g|{=BjNLv$0Qb~ua?($*0gZ7!P)d#iFy zXW^&|S=AoI&k&OI7@ls0734YBz$%;4yxvmn3SY{M0?0#z4c^Axj;@a|OCOJam4LLn z8~(U=HE1jkzhR>^yo)i&bH?hI9@;tYIl{9YDEM1rYq`m`wGo?aNR+1xPJDrZ-hyn| z5le?WHmYF_X&XZB4}56PiF5smM4M;_n=z+B@je_KBi$9TMp?U%G@%v8PipE4KIp8! zx^jG;=YtF%I(^Tu`=sU6l?PLq$z?e#t{$>}(VG8#&rbN$hr>wuVdeJw)CIE6&sDO= zGN30oJHK`?wsRaeq-=zXixF^95v%?^Fdk#MYi=R{6!3?1jVW|{|9>G}OWmA1-Tc9M zl8{(xmaA?553TQWr2pai%(vqo+>Uqhe!k0L`p#y6pV*|;a4QGLOV7`az&aFrbti?aiGFReviQ>>*W22^> zK@?t@UkJj)^?i()W0jMumxl1%FMcsXSO0z_oQ;upmres%tNlMP@vOET1STFO>0PIv zR8NgScb(eZ7DHb8uE7`tGOcP72cv;ANND%uyo}@C-x%)4Zt>LBu9YgEt9EnC;yaAF=AxycciiDc{T}n^jP<&Cza;Z*R<8?Ie&XHB zuJ<3hyEK6+4$2qUwGDdv$i>@r_R9Q@Q25tvgHOep6^D$CnybRt{T%~kamm&!N6w(h zxcPmiHU<~=fO#3wrr^IE2#xSEV1c!%YVSfL-N8F4Sk32yL8f1bp-ECAZ>hLGg|=T0 z$SFQq91$Q>OwRvO3ves*^wB27>sjZ2T4;N+e2#t!5j~dpsI#1Ck^)hLe9>j!VsUe8 zz+c_Vu$vJ9p(pNmj66h3&`6*LwbTmsIj8jS=52{++=~NtG7*i*hJxmn8X+c&rmxQ|&At5z(3SeXk`h(Q|NiJY3dIL*yJJ?@tCfL*I^ z4ym0O;Ew?kM}ksAyGg$U+N3}Ef9T;n?(>sG1|9S(mCG$uLMfe0>2dDNd~zLG#d$Gp z$BwCg$neXx;C4PSvGA_M#Q`Z0+x5HAJQByIBvvP8*A>r&ij8FcGfj)v*G@78r7E*$ zGVya)O8;>;+@&uIR=TMpn}Ye=@c{pWZw5bBi+%TKt27^TD{yl)k(>@b|V!N*=a*9!_0HhxOI z|HBN6YGdZbzL6P{@D^YX7^r1=JOHUYf>3AquX<9Be}<`P1l+3j3|vvE#KRNnytP~s z{pO`yLWI;5bv!;9<1-%okNGz7B9SQtGqCiM7%WQI$PL#Ob#B6%=6fDpWeytb3$azc z!w6$7IM(h_jYIcHUpk^U;G0<+N=QqLC{-hz-54SqP1&_{FUw7QAK@lAaX+iGi*la& zA`lh=8GC{Zw|#n}koc0&0hoU3bN{kd0b)p*dc6E2uN8!wQJKoyN0jIr4?X#sM{L?k zg7S|P(R1|Q>10kEAG}4A4i1EOPeKU08a4+kKD#Aw{%BJcSk0i}!b>_l7u3;3^CU;F zTpp%h?Dj_67pK@><``)o-3TG&d0z_)gj`d@m} zq~{yEBkbq<#&*hOvj>A@bwYv#G=_6yD>5c$z8Q2*O#0+P&=%D7A-LG&-Fs`$3NxSD zv_c~H3l!-$_W%jwjOf1&&IV6scA))ZCS-z6;_|d+%li*m+?#mwGRa~|5jV~1No-bX zLkXPNj{^wk7?}8?sHEsF&^bCUIjqNsSGKEV35s6KtZ0ypY<7G#d5@ex`n2+_U$bxg zlE|8Vqe{PZ9CD$5_Gz_ij#=XX@-LM|LR^$Co7R|@x2)Pd~*AA_(6mYPg8 zb>Fx2ZHj?M_`CFzy7>6t4*K@A<&_m#RoR(ngg@Ye_BWz<4~BQ{S~lgB*@f^Ixc_XX zh@_#K0Ox+fkRNxi_D<3!z?&3B4s2k-&A}gg`tk1RM+oEn=2rOz8jnj(ut?a>o!>D1 zkfbMmydceA*YM0P=aqcPoJME@<@LbtnC573yXaKT*XcEys9Y00`*(QH3>&#v{Vb=j zK2D(EZem3YeUm|zT(w#u9=FA0>SOrT%?8Y|JD2D}nqbrx?a@F^e^x=WY|`gv#YwxL zbN7g}G+!R~RiiSO(lZPPU}5rpVrqmuWtljtR3@d=3wyk>oH4fbzS4DTCT@}S?dBr} zMZWO5I%-qp*g{y4@)9bpg?tp%2nd_xR%XtJ?t%aV9rjs|C2i!~)00A=kV^ws>2c{o zPEMN4dTVW5wtug21=b-T)Bk@%=cpCgPm35jMNVI{gIlvx{$ta_(8pq;Hpd?`L$5S7 z?fp{5Zvz~-_vdL<8WdOa@`djR|8ImC=c`d|Ml>Fxn?KwScZ&nUx;>#nY0<^-nHBRX z@NjlT21$6Vb8RTeSAC)RecKT`LaLOXl|$4M-1ClRzu|VDuv3I5p*vtzlJJYnW-@E} z1FjP~n}b_2-kIG5AErFDH^!=Z(A9z@kV8(#aaz3oH;5j7_7_BdKlNV_{g6#ZgdS8M z>BM`EyU4>LQA+hqqO~X-9@NPDK>-%tz9Bb&|6AW1g$9N;4<>Bdlq&;gP#f>IC2ly1 z5X0-Lju`v&BY;g@J>idn5%2*%J(xh(eb(;C{BBn(rJ~%h3y6=y_Kt1Qok;ZBk>9Kg zS>7`8FCr`=Cw9^XMS>$doqzN3GyW-ysY|aC^|ylilUs9kgR|U~k1Z8ERtqOv_kNc+ zuKP--2#eMvoLTpmAO>6mwpkHAa5k*cFK?YQy^Gofj^qiaJ9rF2APKC+_~aEmFDR4W zxf|gRi>~IO#7DHetRRY66_W(c^ley17+`WR8PzB>F)__Awf>RLrsc`1JU=@*sp_n_ zwhr|!wcsGP^Frd|-gy_%27cdTbVgo;9U_ZQ`?x7%)8)s%lA7^_-=^wy9j9eSsK-}k$x&Nx@|*Oc{`%VJ!N|EXRVkOM(8D&5+08!o zV^9(kH({h-6#nO(@jGdq?Tg}Q6Mz}}W}!637kt%OWdn;-{pyp85!0?PbhIcTlk?$t zr35L3S3VFYd(nF}`0%LE5Bl0nBDX&?1yS26W<>?R&#j{n&aF9JPv_#dog|r>wu1!* z$}?q~+P}ISv{`(?X=(QjR2l6cq*Pz~y7alw_wT!*fKX~nZn1Q1xb&OzN|9@GG?F}m z^*o?`k;PP*c$a1vGYzXG-#@6p0or^2FvL&DFDQRsea<$$OIOal*LH8nV-iRAd{SE5 z>lFd;y_)_UU&V#cdiqF%u~*@A^9>9f$w;yx$)UsMHab4(h5osCz=`UDX@VDE*9CcL z{+F%h#~DYVqB=iA=jz(G)i2f-8scF)Af(7VPMv0Aht_T-yBX^=aUxwCB0_{Pq1-x) zV|9pgqjVen_PxUA_?(c9u{RuwCP=8UfkVIYtk`pyAUgGrXost2&--qdCU{4SqH?aI zM^)gjKOMN4mj}ASs9f&1MvJs7%#CF|t{wWPe};+#L75O{cmcBtOR*=5VeUyziY2rw zwOi6JEqR97Tb{Q(O#TV_J=i@+=eUqfM0kQ%lT*s;ag|>YW;^rrU+zi9+DQz1)+$?c z45Gz4%Pa*C3w0t<2m?BWZcFi}M`H)rDvTfX+il-)MY)O1D@hCZYPz(KygBv{T^D-s zYu(F6j74d0n&{v4_=}d84i{6QW%(T!?U}g0rIu7v(?7Zr1~YJKMvL51+EN2M7;{ z;AYglq9I1t@n5hU!|yq1*g?NrIwdFjt6+L55FGPG&YuL$Slwg+*$0zOiI~hzfU(UkhJwN+as((AoqM{`J z|2YrBDmEuNM!t)IZE2g+?<2jg$lOZdl{=Tb5Ncc|;2$;qr*cko^+y=-gT7vGF$v+F zUE~9COo~1_bw~}YaY$90L_BcG%1t<$;KNC=7xfM+g-5F*i0(tL&TR)MNvHRLeeK zn({Q)bjFnsn^*uFWA6>wRTMmMh)h%gIXzCI{9D2z+hNsp5v~~1xTa~Ik+d!9MXccV zxm0IVr~6YRSh@6Axmu`8hfOq8LC3h#q!-S#;l+keyz4G6A+2#Z8_#Mu6W43ic%rye zX#3SNmFKuQgeD5t7knY_FL^uuG2*u1jEE`BC7iweNj!WkyaETaI2_Wi>e?8&w2`bO z>mDW8gP5j}HAi1lJ*$W=z3&BZzRz`Z?)KC_i8z!|lzpAFm9*#4l1t9Zswmw*CKdL6 z*JobBxbA%;?D6;T0~SDwb+n{)^gtN-E@Dw_Mx1$h5(oS)ee;`MT&8yJ|b`Kcnr0&~~9ZufB^R=`15=r2U7)cWuQR0I$@I z$ptFDrwxBY4{p^*XM8~XSdzhaP+qIo?W!FE4Whi=yW7$u)!tTn4@O)$T=yaMt;IPP3q8kepb4pWnZcE4 zmb+2MJg~lu7&y+2ti^RSAu$Euq(EJ<`srETg2+C!8%%_t{jRMQh~1(O^W)>(buMH# z0Mh9EH_TbV*k)!B>U4!^Nj~y@TByw4;H(bAY_lJQ*sqCnzjCw1DVE0{tA7nEpivxD zSHSl9L-aArV_0qM!Sra9(l2Xf?xT)@1srJpbYNIx>4G~=QyjVwy6?G?2DA;12 zrwc)^&$qfxy;)m3!{v75d-__6O^B6Ag>v6?v=dOJ-@m0`W$Znr-NS1)Cb*`>(@5^{ zYF?#NW}D=`)Gz1-WuW#sQ3HMF_TGb!wh!v`5zm|LWPyj_0~In{5y^}cWR}xzk5&2+ z`~^et*Qxbs0Ua;OS)zSI`Q^PWrMJ%)4sCT}qlhG2b1MH34?Z&Kw1%k7hxuTU{p3~t z3k=-WAIA5)TEL(8zsVuHzsk=@VT-~$-@-48{OoyAyAysF8yF=4ek)*xodbPC<0Ka2 zoVh%c6_wAsFjR&e1w}*cdtzgO>8Hwg}%aEnGDfgVvRm->@Ih8 zJg_YZ+-LBR!>Y@3_5V2Yso2k@=|1ORxVwxVhcTmi2|9iJe?W9*eE(v2!hVRRx$J}RT_Qfc>fcbMGp)~ zwsK*A=hycK@1VNRA5hqL_SN>1aND8yQ?NUfF|P^dUdLD6eMW54RsCMe51#Day9`1> z`@MOqS0EgQ)NnCe^_eeUJ7w{?CbHDFh-gjA*fg?CIv(CnK=af0T@rQ8({jl|Ew++~PK-2+t}uqFY-nJa+)46OsK1Pd z(vyqnGi%Vi_8&t1SV#9g=UUnnXEg7Kb_~0te_-E+TPNpH^z+_qGXT_PqroksHo))O zSL$k^)no0-ALPRa7s5vbEaTP1ZdwI8Kn1o8qmu13!CNy@y72dY{T*ud4tP}`4U@f1zquZ0JYV)1naKN|ru46tn!d)+~h{w?3 z8*eMP$n~qDvtDhRdgRhw5i9!X9K$1k*Rd6bUn2exW=dvi@@?pA@$ApUk9X-`92*~D z(0qOv#N$d~0r5j5IX(hU&*=vS_OMs2HCr2MeFSKMaJ8}t!{twC>Wf#Zn$>XT@On5H zh;Y{uFHYEc?-TPdDN}q?n&45U^zxkzWW&smw5x7b@|36n*D^6mSxUhue?R@_WsZcVWwIhw^q^ zrJ~f=FGa+E#LHL${m8gA8?t3(ihhSFVa$y%0zhLIx?yH9SQeP z#a<&WM6b40B)TbzR}DM8OzCVSuA2XBTxZd2J8BWt?E6*; zaodTz?Ev<-g%6*blUs&Yr=MfS0LtoXgD-(jmWs<-coZzEU$ZuoPN4x7B7|yygXyB` z>P2#hRbw>Li_-nAnkzCY4U#utlq#>|>oT)e+5$02H96fcwATf3O&Q=L#Yi?iGd1dn z#vjyKF3_HXTZ03I7SWmo0f(aG#vY7zpNX{S^@LY{lE7t7^D{iqE5txch3p*4UvN7U zGUc9=5&A%FFe;A7UMzc!4xDFyJG}4O`$`+-2KV_)saaqRKiMZW{xri`%lU^jcFzzf zZcK6E@(k;lQ|cO0xj@7{5+LFno=tSS-;mkj@(90DA*tK*N)TFWLFP2t%3X95eM6l3 z?vD(UNV8L5!nM(?oB3#soK#dp9m}M9@WXy$qjgrarP{9Qw#cGZA^=UHrkyjB>kza4 z^QMD_HTlXSu8X#9hxNu-r9#Y#v<(wqXKYPVuRdu+s94$s0gb?Nk3oBYQWHwF?6gC( zLSnk_pvd~YHUTN4|_%9@6N{nW)-m|d%jwanVb7*9UT13DZ zT)shTrg?G@?B_-aA=ruMx8Q=z!K>dwRa0D0nOQ()e{m^R`2DKF(UV1+hI9`L{S-8~ zjdm`T`Q6m(L)h|XwBnr4kuD)JqsC${zw<=Dp3Phyax6g09j z(9B~NH&=^W3NiI}{i+k7VO~ktXn$CFQ4lJi1 zrMo+E=ibN1sH&8Ep6f#W8zO$JfU*SZf>~H;Rt+?dAI9y!7rLVC41mstTD}iVbKTNymz@$27T&m| z!KZvTxMr;GXyLnQAsMfzEqdc6U9U+bY zfV_peUu}x9nPjsm2>q-NX@qA7%XlXaOp@;Q5L1xPJVXc(fryA?g*tTjLr*qp92{AW= zYTeK^7ST}W(Q{`svGQH}%t=W%r>O0)tBE_7GTl2hEytBpg_tn)e_;>jXd~Sc^+qfS z(|ZOORYWp+6*#*Fi#9eZS7x9S^+4F4|6Vz>)Di2DX}9Twn}BGR8YX?bSB)O7D6Z{C z?N}x5S2YaHQ#s>2<$|XisB>;-5CFij@gt69^IC~74^$%l`YF2bzUFY!IcQ-2NAAbC zNX&h|5&vKPRCa0!o6bMwj}o|x9a|x5O*6kyh`8KVGj>EpKx5#ZY_O3OYW>gYkH{^I z58p)Yx+8KdLJPG5cB|@M5@}D2@`FkaFM{F+S>J4dV7zb1i+QJ`{P20B?B#7V1!9=} z#uB9h7ZP-&-9I9u&R>3`Dnhnvmb(9l$ow^4Ew3Tjyes*jK)1ppe(m;^#0riP{q`t1 z&)SPx*4`eo*!;e?C{FTbu9aTssMMuV{R%)WiL ze?pZPZt%S#G``d(hgCe{&BuA|rsVqs0(h9(l@KK09llnVCtUJdt%C!`0)$5g`qN!) zo3TV=%)R{Pqi^Xzk6pRXzcF+Cu{O><-vO$LXqk>ZiD)mYNOU3!$Cj(c&sHZmAB;WP z+eZi3RLfc%Zf|$@DqlZK4n%QC+I1@}=KneYgtdh_m-lg5qr#lq-k#gGSR43VC?gO$ zyAE`8(|blPwWitmA_9H+h>B2r^4=$#e+&^*V%E*}PE8I7qI4;wOgSgqBiF2CQ_QMc z-^whXZr4jA=KY;XGeYIV&CAXytSD&$;CEXq{jq4G^*Is;h;?Y4pLMsf;4re7boc#D z5qvK^F*-d4iQ9hU$KSf#Cl^!%N1c!>mVRFdBJ`L1q9Lm!k&cWw43tce~irEhNV z7F6RyQpQ(4Y??^lzL%Y7jEpqcx09wTk$4uR{s>vBuQ+ilha89U3-$e@ezmF@Q_YCNcV4~AEBZpfSS_g*aAd&v0Kb~$ zg3d^IOOTmmjfb6mFTv{ZB3_$0@Y{?YD2Ai$%O?jqo8D!HHuaPJ0PtExMw4zNTLNBI z!4KMo?SxT;Y&)Vg&2+|}P?FYNQAN`CVtB+Y;WIADa8!h&JCsRy2V)#E9_`*ZF4Z`p zm&hEP52>}Zl%~T^4SiY&jkA0V-1p+p`nJtxuC2zBR72*uTB?;xP?i!Fxj`LefwOp$9ns@x^7>hP=08I&F>EatHXf-r?A@5w)HY2rzFZW69m73>zvb^7Oc`DKO#~SMlYH*QDf-4`c;ENd99nX~*TR=Tcf%JB-e!aOE)62&k)T&n5%wB))Qcd8-M}8D4$gRKy>HX#Nhd16Sf+QX9zAbakxmL zExdTUW6GEB9uIJ0V}t%kaQgWBspWa=9D8wLPGCtRHNn8R<(utd*V^sVD0ikqeRD14 z*YhHKtR&ngkFAx}G^Od>w;miwO24-<3cbS{qieLE&@srkFzo0&AKN+H_Nwu; zoJ_-3>$n8xHIuVewI8|B5gR|BlI^f4P)uh8(zLN<<{B65%8sSoAU1+_oCw9c_OD%Ak7!M=EDAX0K*v0@eize% zaLG7-S3qK2VH=-Vd$jEJ^=!#JE7z%7Ej@?BnN4zrXS)=vC*#2u+n{BST!eZGI(m4@ z4hHzjkk!zh;I|8xYn+LNb%qG$FpEyb14+z)be3JL0smpolLo!~y4AHH63kDCYWVN; zNJoyb>S^Y~x|MTKJiB4~DxR$S=qmUj_cI@`-m`5X$6I#dVD|NlnVKI_nY+AuwA9Al zZC;KZT`Li??Oo_V$w2!df`hzh{_M;8BRA0+{Cvu3w9I5s!PU1Wy{>Olc;WXX+YRk> zZUegX*99NjOO+9&;1DxUBgUtwneF2$;nekXD#Tm|vNhZ|O-aKkSZ1)A4+klZ$9KMp zdn6LCcZl-KdFDpYj*;=2@9^|TzLQ)OHVXEaT+y+8=$>7wN8WKxLMYsUL>+Jm-&*1BX`J&03-EnH2)L_;)x(Of4D^)OP`f>Ew%Pm(c` zKutUSJFLU)-3YAEAf#6tx@O^FVT@e=YLN9H$c#bE_hKVxzhfzC2Uujz%qNVHrVXW5 z(c#=z6$y4}%I!#mcF^|% zNwv2d_Ft}@9x@*}!(;pxxC!m9y?Aecgx)gz4P_!e`n{Rva3R8yiF#NkjwtfF@pp`k zOH=2)@igRa+{gL%PvpA$I2kn5o?)7T6W*LgwGWEQGq*N8(bu7@M=qJCF$=YE8QNZ-4CRovgi2bc zVy=v(;`^Q+F{n^=$KGohZaJwc=iS9?EiQtma~Y(^j^TBTfe>U!C2_AkO9<}!)WK1Y zvt{SaTY(?6>|#}7Dh&Kqn=9s>H}<7IYu~zc*_v8ch|$ZAD~zvmx~-9W$2w`cqOUy8 zR!*Rtz8G_M>h0z4zqQndhAn;b{-R#%m}UIYWgZowYvRqxcyQBr5$OCFo_HXok8gEN zwOrpQ3M@&XNo+$j9CLp3qE}z@Mjbd$fOHULu`%~OqEAgneL*kZE$-IXH~MS)UQ?~n z+egZndyXd_naFfUssHrvES;GR^16WYh`W#+4Fw85HXOaE7yRtK@-)A*To-~(&2>}w zL(ycF0T>tf3G?e8_x0e(%kzj z!8ZfM_bx{AzD-tkj2IRje|X1KU-3cc?LgrByPdmz>n_L1XL=eb@Yja+{p1lB)=eQAnIvKqISX^UeDk(hjqtX5gLOji{j;P zVT59-V*1GWivu{&B()gSQUOu(Ql$VmW6_0TwnY3)!VOPm)^K8{v6qnWcs`q0Ort-A zY;a%9$S8&Z9`%lukmA{9OE|jIh!O%wY!bO4_;IuxNOBfi*h$~sDzW>qLg{qN-_txI z)RF>6J7r|bCfi{O7qVpEBSv^o_S*ST<&9EZySIVg2{u7t0(jJUUVVKxBP}Br^`%UE zhaV=kYan{gdPU+`ODm5ie9m%N2o{&^{&YxHD}^p|)c=QTN9Czm;k&W+IX~(-+SZj7 z3fO_mmfMn-x@ zVTtoacCh&j0^8MNAVM%?sBa+OxNv80A=!19BZ|-?;;JoLYV;1qusNo|a_Y(51{D|N z5b{|>q)3xS!Py(+=-_a7Y8tsD=R&?VbAM`CF6|&~och{`wES$9-+$%;)kU9t5A63Y zLSIEFo+k#DO+?B;RJj9w9}C7j*nn%{Fe6+@e^f{+4PE82`=7opV-8{?^Dh@32M;0|?9)Jh7t@>5L@YCWClXrEe z6@fT-8{$;W1U&tjZ52P#)t6EdJqn+>#~4%L72kM2_Bx+rJ8;Y33ko`%{Z2G>Su>B@ z*_9v9W4?dT+pwV)RM)vWb!iXzLWH|uWc7%ndxSRX5i&UipN$L$gGvPB%V)#%_4l0h zAiUW9CE5xO5m5lKd7s&-Kpb4i8@^Lk66D>pko{dVL?9?8IS`0M^1z5$^_I^AkM)=s z152!YN#SF(@Am+z?JrjjRVG6dFBVZ5scL*-8Yz^jgR_f`a%pBfYG$Z4slvUN)An`7 zUwzx3XT6D1y=xW9A2zpE4j=X&GJZ1m$68np-4(kAUkcaI9&!#`va$I~lhbOj)=G6&1=C zSbge4w+wtmq=j;@$u9><>%vn70OR@975B=Z(93WX#+v7T9xmA{&rDoSyF+)S6tB*C zt>mOjvA}UCR#(0`M|Fnx<1;S&UiFX~s0t5j^EqI4hia7&Y&Q6oAS8RkV<=kQH(X7W zi9Z$0o$d3r;lLr~u}y2Yn_zCdWMP0|T|=`E@Zaz4VJ!WXcZOzAk;SvR%f{J8N57y_ zu^?0afEs*`zViZOdyQ1C&5hy(Iz68ZoFzGAfAL+NUETaa!Nbn>dmh%+&F!abse8d9 zf$hkJz94Y@-AH#BzSxUaNTef;1JK&9%ir@zqF)vbvQ?aObQ2DMd`rLm#M0_go++#- zN`lJZlCMcGX09<016N#B%7Z?Cq~FZ~IW_)j$_as0Cu|x`+MN#@LM*Tt4^1nY?t<0m z_3eHvR%~wo5+XijDlt58h?lm%*;^5WUr+?d3^lGAx(GPqsP9g|^y7wVX-&qobWQ4B ze24<4lAoSLj3xpe?HDw&jE#2o&qJ}-1pHD+Y$Z|Q=6x+z8v~RyQDEQ(2vv%!s62TD z=N*^@^`QSJsWWK>H{{X<*)H&BGknSM1SBs)Z6VZnGDZnkRRReF3$n;)2uVwqMN^#- zi*nn+Mq2r>q z9m8kILn1r0fde3xacdPsb0976t1yq9SyZcg#y4^eNE$9S#^jFCVy{WRxn_zcopr})PN#_ztFziekxrC8QEwsA{gKG(ntj;zd&Utr=Zb^g4J$`a*|aJ9gzMQ?DvQU+j1>uCzJxea_= z+}UQ<`H8;5!g@p3_9G>K;1B}_vMC&Y=B*1SR7RkJb48RY3bJ}jKnKG_Tj1OFK+`WQt%H*3o(`eA#h544eFekWuFN5qnp zYhe%+J<-vD|L1wwbtBm^g1obGGX-*i&)USfXkq2M-^cnu}%S_uyGqP}T!ybxYCi`PNki3F5#bgZN zaA*ko;bo63Uh8!X#qN>X>d|}vvym5rFf?p;KsKQ731?{RG(dQw<|yval??bFXF~zz ztxah&hOg-z9hcYuwtRK`1V0}Gg$bjd9x}`}6VfIhADK@6tTSUzHSg&0((>wo$;$QS zk)O`c6YcYgBn54AK1=cYXr*XD71?;DAA(fJ-@0v7fJCgEqmXe;aNh3bHi1;Ea}tW$ z9A`O@Kjyx6+WxBZ7t5IH(-{Tce8>EVhImU}{sKLV zi#!yM)s#Vb<+rwSp^_inem$OB+toB8N)dhH9V2@AQmZ>;9OJC91fgwofF4<++N-u$ zan7`{o`8mR)91#gE6>756+<;s?=n;TpT#1iXJzY36lt3~IK)6i5*I-N4%5F=d@=L%IK0DZW6HclKnjnpyxe)+ zVsmb}??oajhi&|niZk!F?(Ea2q(B$@Kd+XVZeOb`LTNn_{s3hQrOUHRV#?u(M_g}$ zEu%k2_IOB%IH|zFz6WpjF&#BUj2H+jHHW-#_h~a=*Yoo<4Gvwo+*1@s%{-N?|=AS8OTg z)v^ATmwdpM`WayR-8FpVs#q{K z507)V(@_mO%m^}P$R#8BztEcvQ3*eOqWY(0d%sYLR@|0ywR`vb$A09> zf{m;-qy9S#wrCvYA%2rj7TfF?|4D~4xKg7~H3IqXD1&vp*f#Y_L;ci=ieec>Cz1Kq zPK-N|RMrlghqCE>{7qv(v$;L;{aCD2|oi&-l84hFUG-MQ&p02CVW#UFTvDdX(;TmiLY^y00kOk=! z7;95ZoSA$|!jeD-^DRsAj}Ani-&`gsj?oCPG!}DW`0O&NLJt3bNfF~)b$VP_X(wQ$ zG8{EK>uCDAv021tR7A{TK}542Tb|WS%$^6C2G1Ss>XB6TP}Sw}>*tq7=|sqeYlx#+ zddbn!P?~OadI%v7D8tk+AbiXg-`h9i$ z@zVKeu2NoCn3Iriw9r+ix#BS5OHpUw^=B34FL`MHjh?tVD+S*2>8~mjU%H>KCFf98 zisLURY`Vgbnqkg`;c4KqNMYwt5rG)rBW-vGnml8dE=N5;eM?*;6^+L(?P4GMn0T0Z zL=)>9Cw?{<-LYHFSn7wmuY(0-)1GN#0>oG?jK41LPA3@?KNsS2vK>uz^`PTm+fs1t zP7XTU=f!m-C~QI2-t@?3_ao@>(6Mkp`>Ak7UZhw&d|ytC#!}fc4h^5xNK~Gjv-5n(vqm9usa7t z6qCrXEy{7y_`2f~6{-7W;-oPmAVnP>6t3?b?MwWf{@H&1Z0CgFL-cjg+aW6X0Yo1OVj&b zQ>r`0PdT!_9MW7HW>S&6# zAUVd23#eL@6~I$P>+hrAH>D4x+RNA_u#`hB0{hlARrH`(1mjFcTBreVzBDO#rY%7x zk+H-U6L{jpr)5!YCQd5Y%=9-<1=ZQ41oDg4*|RGPML)a}|ILHjA_oZ4RDvqFj(s<2 zq3D42#d?gGA|;n7>ii(ESa(Wb=V6g*U8Sh5Fka~rr8Le7YjClx77nwKmCKAza%%!= z11e!h&*c&3J(OdienU&~5C7Hbio`i%g}ATjW$yP25o;w7s6iRU35c~fk2zFCun7HiQh7my>Djd5If|RJ%N78e)^Jz59qW* z|CU>HGOGULzbdSjbV-c_*Y2^^fSs^&(V;!2v84EbH?fv3&?9 z`)bVXX+f=Y6!DDn2&gsToBBMBYliYSw!93|=`_5n9od~wz& zk{zn{RT~$JWzk4W?EhTxQ*&`c(g2VMfh3~=9WT2$h)}2-bE%i$mx$)ZleFTMxzEgR zj~W_x|2b_bO7j#1m12GXV%WEWQI9u(L3IMjB#pM^7Zl0jXg-gtyl)4jsR;Wm6*tpi zC|O5te`pIHW@g!0qCDZ^grn)K!murfr!)!!H`8z_xYJIz21lihzWQQ)vM|oL+Q@p zTUX_v2xHP!OHK3d&^;HXf*CoAum*#tsS4m?g3q?+V07pl@!PET;k(VEMYhvKq&&{u zqnI5i=1QYEuSNS8O9={u_3;w#So3EG*eWk+35`DxX3YI@0YUiK`9liHclI;!GGnRc zW2`$Zsd;;3oj?|bUKmJWrvke~0p1`b<(u__V@Db%Ck&Y z;kolluMl-6#Le|Y=Fo{)_nhuia9?hC{dL{y>UCo3b>MB|9zgb~GV8rk!ykx~%ti-~ zX&b$pRCbbH6VvGSO|t+m$+O?tFB7W8Ej)q`3bmV1Ur$-LkoCN*VZ$|=bOSMBsLIFg zPm`e+8_$h$hQxmA!6#SEVo zJgAEA=HihO7A0vrlB0Dz*8W39m5HAjJvhVY>&37Ko67YblkA~RZr0~PG;z6>zs@XJ z5GHS)`{u1_*n>21Ioqj^k?I76QMg1D;h7re>!$#t{Bd7H%l^BXxOnFwf5$P)b=MEf z_PH(a10Obdy~Y~KM(z#ziMXv!jewo*PBZc|zM2BfgY?#&~+Exb=@d06T(4Lm;QTJ=d()ZbR z?Gp0f2TLNT36u_b#_Q|y3nK4K45;Ji`LLALHM*vnc$a_Tdqwv}2Q!&IBs+S}WQ2Ur zU%g|ft2*=9!=g>tn`$sR5c@2HMqXzr>{$$VyuBN}gB;^*88wF}2BLtdOn-!?GW0wC z+Pb8D_`buO6F>BdqaZqPpU7#^e#^Ip{MFj_Xb6ijugnhG!USVjn#oK*6tMKsUUN?Rbuc$rzQ1^L ztNNdm!i-qzm+GF~Vb_iUC$1!+koDGZN8l|)~zp%+8fZ2Fk%1nUF`UNM?k z93o(R>ikBWH7D`us!D7h;SNt5Uv;=8`-i`ia~+A#(-R#7jlia{3%*))5VEixqlBM6 z7gadGZ#LuTPvB3@r&ld9G6$;=1oe~?K@X|K(mH42Q%LItqIr-C zhe9p;{4c`&4FZ%W_*v#skTFyoB~kZ2s;oLEdHK?`i+qDN&-ZPDhNC0x!C8KI&vwUA zWy+`~Xc`$o-o)TF*icqZ`Eokuxxx}Beov_TE#T@S8k%=J0QPTw zsw#jJ>kfIp1~7lubo{GO(>fe-8HF>e3(uQ)ftyl6GU&ZhVm>zJ?0_s$J^yME@_6;b zCIt!ij8w~*LvVjuaExNM+Row*HmWj9xez&h!+Kk4Q^)CV6tcN|MF&A=uKaO@(=Cq; zlVc5Dg0Ik<8lVu2yM21dABI=`6Si$u1MqIaO;A#mZ)WqAXb@jRM1U>cuM=*tw{Q3- zLQG>*U`p*#)#&}TSlWI@mzKr*B-E$P*DLIF~OpF;aYU`mZ6N_2v3Tyq8a|hsKaic$7mL&7O?v? zoJJ$DQ(7^sQgYsU=%ieKFd=blM0{2)L~|oXMd1BOhfZf0zoGKLB)>uEC~f*AW2Dch z6`YMALjHWPXY_w)x(3EfmS!E>=EnBM+1R#ib7R|1HnwdW8{64nqc^sV`<`>YJHKG2 zr@OkU9#r6t15N!P7drupdb&`P9^+KQ-XnE@ zZL|X2PeK8C6-72K+ODC61r{BzXfo>GU$`>$Q75G-`2UA`NgiqC>dTUA9$h$7?Nf{RFX3fZds=X>Y^X92w_;yG2Xj&os6f64- zx{a&;ZPnd<4p`|{a1xe%x&*a0YIgMWWg+d~-Vg25_wc5b=q}%=>~oAJFJ%axk1l8l zXr9j@kCc|5zThD_-(As2ro>VyhM$OR`fVs%cfsv-U1p^UHdi(2cX>DzDiz?18KpG_;!!Jwbu2{4K70oXR+7UT~q-OLWLV= zrrXCV4EpDt*SF|R{>h-CA4W7?OgV+MrrG)#la-AUa*n8g)vt^dd0Nu}S~-t@u7BJW zy!K<4Ib*EqQ#_K|dan@9TjqeS!~tEYnmYz=?cm~=Xb>$YL67tACa`qNk`Rhk$1G-A ze7w2FhnhtNcD=(&xfvlz^Q~%DQByH(lg66n#2}b<<7#wEX(V* zw{J$v%ufbxaA_e}aD-Thv2g42bvORXYur8!X;s_WPAE=jq|)CV!p{Ur z=fhdp9sBChZ1Lu^Zl7taqd-=twT8yiyjD}!wXU>{0x!nAS_(zbnXA-?RWV$XAFZ9}5(-oZbQXI=Z` z%>Vl8WUa^hFC2^C`G`ANrn6e zOMsw*-P~QD#^P*S!0Q+fHKx;@w*$_hsxyN@oB`0+)M(~Pj_&^q2lDpvNfiM zr(b;kfCUJsFM=(cMk5!JP@b<$^AYwglWM7u*AIpGBgemI=+1n3za41Isc~-0{;2B< zynMc%RpI$ohD-TapTw2Rug16VT8hyVE;ijMdt2CKKyq*?BTj+9KlPJX{0&X=jRU6 zRD$yEvWe$>I+%Vs-g$*W!ZaEfAp_^+EGhssrX_uE$9fXtK2FL9t0*?NNPeF=B0WnP zF>fD%hHH7#i^46ZUpe&`MR8{~0^>mx{}#cd!Hx$$46rD9b?Lo9ysd1G0)jKIvT*vQ z&%pXj5^f7qY+V345GCZ=gBuJC0sxmPL>`-?ZFU#s(iNmO3or2Cch(1~3zpG$z) za32BDlgiEOfcxiN;Ip72Z#B7J%Y7wa6`m$T6La;BxmFoNvt+16`QK!cjaRUD!x};| zZY2(0z2=W~!AK2c&~pj{M)6MQ>x)!c`E)H>YEcyvZpHblZ~68tIkSf zz|VF%#Ot}Qml^Zd&Q%%cIHHm(LLR}1yRi!Oatf>>owv?%_HP2?t~NBFpiW=M7#|)! z>%}0gKD&XhM73of^g6))jHb^$(8h|y2*lR|RQx09O`_BXo3T60ID+1CVRIGv=4|`B zi3}Fbe?-CGMQaI;2`iA=I*ghm71o6#EdfKn%n&p1h*5|oB*Er1@albZ2Sffg{$j5T zK3zei6RhOJY&W2g>l1Vf*GRmlbdjxFWpuqBD8a%a+BON|*P>M!aIN@}kzbWQcV%g3 zY=nBpfWHCA1JK>7A#UdkYX81Y&M zy6b~93`X;bHx|I$Z&xSF`EO!AcdU2_r4ZIUGmkeBG#tWmZbODm+MGe{_GYYH0l9!j zDymzr4g(B6y4&mTrN7V<5j1y5!Rh(y88Sj6m$hAIsTK4_-w6N&wNjALmb~T_CcOT4 zYO5Q(YPGhXTgRrih8$OA^I}3ms@&l)mT`6THP#A4CyN`LuaGdPKDmaw;G8TGq{Xjl z7Mh3|yHDG`woAx@5}VMpT}8rglD+%TEqBg17UNL*)c^GogV5^{UXT{&Ycb(rAi;(j z*=T*N2+h;2mYn~9E)0I8v+Qd?jKQIq+Mm&kg+M0tQh|XD?N!Xrq6d5SLdqCcM*Apf^z15*`H*MgH! zc@f`Zv z|7V&dg8ldbyVxCsT`=YtM2JQPF#%Hy47c8qF}-&De} zB1?%zFTY)5#i{O?qDPyPoWN%2@4Lpgd;bY^??aE?@;+CWrCI8O4o+xr8fLmmQ&E7hCec=GvbY#36?u=ekMQ@4MR^*P9>o#pv^GG+J2= zu$EPY>mF5CgcFKtQHj@KQ2yp0ITR`T)icAak)RRXq=-u=UvlEs?_jA$1wc;heKtdO zYs{{Io-C_faF;iFral=Gk$`+b_njR0EITDCoer--((*h^ujv4Oh~HeBtGbS(dZkYykP=OhD7ykGbluT22J(WO{% z>OhEJHgEj$uGerK-Hu@{D|3oDDGxa%wKWkgj@1;*Kag$GKCB|p&kSN0#m3`JzS zb`fU_=^gIa$KYnR{jGQXx69z9ALunJ@IfyHD*SJNLLn*7ywE18 zJGO{(IIr!vEG=ibJ0rWyUq1H^ROi&0*M=B#N&uCisaB4c5DoalTbmSxVf`#u{rzT` zB`(YJG#9WLw(-Y+#ksHbbe>&7VRo2<&Eg*w>95E&p{*`TEId1UW*)-EP6B1ZP3_8J zlvCrA;h}w(#`Ag1tnNs1Pv{QBJNtuF^@tsd+>DGeAn_QiDt0Ae;H42)=X=|~GBP34 zh-d9?sDf=z?Pib{Fo+u_#KRycjbBK2Ty$Wj!~fLo$x@_;h^NZG$_F$mVuwNP&3IAS zhL)~rnPdeSi>KA|0M8@b0dy+{^$D+lZouP~v#sny8Jdf$0lpcBRg_)^RaMs@>(~#@ zBN;MD)d>o3k-+l-Qco4BpHIc(KhPwUucG;-pPvhC13z!BVGe>{iJ0y9$2P7KGzB2& znCJiZi)%ZEYbkDdyrV#1o#3Of z8y@(w1EL0Btg_A)JK`LMWPHN6-`V;3)Y@5n53ZR%ig^{bY6-MHsxbjup-r{vk9}l* zlf1)Q*<>vP9mia#=Kujh!VU(3Z5>~*FIa3&m03rq zHO{}Pka@>Rhq!rkikaR&*#15VCf-8E z>pl_mO84E=RmR9POg3WlIpoS>(cY8EIRV*zZc4W z;OL?pt0FmRZ_u!TkhCk!5$`ZSSTNq4VT*iQmIf>KfQE=5IrXN&qg!SXvu6Gl{ri+z zqRQYM3DDgkZkc!G3g`TeYoB+3%!ed1_H3H+`AKAPO!t*u0{D%@jg<2j4-KmL_pxTf z%q#!0e#tZ99Y!A?e!CgP45R3ElY;#8{5Bz%Jba3^;nuvDfWs#|fF*4~U>9-%wD5tJ@{C5A)?&5+BYzeN0l#L!yE_L%!~uO`3Z^~rN}mkJ*+N=d zxfR94J@=_ZS5Jy^vO;|(Ug=tic=@Th?Z)SHT8+UY3D3K{4n9&9+4@3s1EhcIa|%#2 ztRowo^vVn3Ail74+3#AF*?>`@%Er=dE9Vb8a(EaRtu$0QBiZO7f8hQ~H8Y3;%#!Y> z>&pgj9tYTHrJZ$}$$9-!7pSSvV_S`Rn!|G@0T8T)VmFs=A6|UTTr9>NwVd+-$>z@o za2LI#A`X2;k*yAqO3qDU(m4m#xKCJh=@uQv<;^lTHb)he8)I)$K~I7&L_#TdH^v#? zaI$Xo>STM6af}Ry-=8)=g|N{7yODntSUD{lD1k3AGZ&H>iH?G_>9qHZCM3_^oFO;B zjOT=dD6x~5&4-wjt-bC=4?)^c%nw2MMhr`&v`M~bM@haT9%3o~&}cp)c3Dkf6sH0x=Nqri44yhTZpd1uzEVcea&byw>&H5qDb~J3h3s| z!toSQFB{*|C4Dl?&Q2ssG@=?~F z*EfO(0N8g**K_Rox=o(6!pR`>;k7*P-dSruai|NVRuS;M z2?uuam^6Ee1i4*E{)}D}G>BQi6?>#fMU6mQUEEh?S9{5V7n3tVMM7daiCB6H_VQ+~iJK52AX-ym_W)t9Iw%V&l|~ zZ_4hL7K|5bWt3h1s##fEo2R5UQYWh~P0RuYS-1gn*X1&!VO7mnhN0r(RjTw}^pd;= z+0T7ts%kc|F;?X_PMnZdL3H2U|GiNMw1qR(=fRAJAjb&Qf2kbe;gqf+oFVsrfYqwy zwc1scFvzW3GKi+txV!saesg6K_~M7##Om$8n143i)2$(HaY8rZ6(chnP37m-kTyy5>DSftN941GEhCuH!#B6LT|B8-Q~Q_>9F1EY3msG<4RHGyuN=e z2h7#P6+yr7QdPxS$jy4(U!$veomUVj@QYzxX~o2A+Q`K4V&Ty1j#b>cP9w5f@9IVM z;bR`S>XWH8tr&0)0@`7a|3g32=hevsyHiLT=y`2LXgQp^VmA~rMo~!X2MyJ5Q)5`{ zHFo%Xnj9|dZ z?W$y641E%a{1s_VO@)lSztPC$4q_G$daKbxKKyug)u1`BToC)Tp-q%0k~Y_VoR*I% zkUUVJu3w)~1}A^}ANle?)CTcH->uLn1UiCWx0HY4q6VWlNp8Wog9+$&09M2Z+G5e{ zb;NGA&aFz4_H$$m=4+gQ(7!jW$gcD$Yh(u4s zBp#@^Vw!fw`N1t)MSx-l?3RZlsx%qaZ}#g3QMBxI;uRiI*c%+QW(^Nx$yC_)3J*{D z?RsIY`e`9gk50`-w1&4qXY2ZvCQNErH5{LWE;0Ylxnis!5=$>P^YQGAm!#V|8binj3=ks*8q2n4vH$-*zHyx~>O~xQ6o92f|)vj;Ucy#L|^A7BQif^x&oX+Tj z<-%3y<*{cFqGLrE7_7FB&2jUE8z#DW@9rg~<39g^7D0=|F`!D5Vuo5i0iyRm-^}d$ z`t4u_gT+FZe=Rka%ofpc^03Wm6^PP5zwpAx5cRC@^0n0MX<@CU)sl7E>m(|}q7x`T zP-8D;KO)eK83a_pL=5{Njt9x44_4X)w=ZgjLS`m1;7_25~_9PG*Tw_WwQ!|J$b+|^>fgttbV~BhM zV=RhNxvFpkO>psu{TLW0Q<(pG3z(2eMGs8MbT(T094M8%$G2aY-=I23Tf4q^$#Gs% zFA7?u?8!2ns}wTQ%6=H|@cTz+x^+AdHfFBSi7bA zI4q%g4s1?`hKb2+^lq+#oQNC-)u@mVb@7`PDmTQCz&LCew@lyRIw zlN=Kw0DBMxuUlDXQ|Ku6_Eok;YAvU*-AMf$q>Ora8g{*(Z9%_w80L!xH5jANNFz8r zaGLMz01v8qx&@#454*#J7^nY0b4y1Lm&R|JQ8-`;%?8E9hh$Kb&_kmupUI&^R_ z<|GbE8DcR0>hA2`pBAdq-$;=lGU|CUz!)*qWNm<^8gy-oVG+RLsF^(0aUu(BXKcpc zgAjDvnz4W7g|LcU4;?U=ZCSu5rK0VX91VmH4!OyG#@)CZ4Zo|wDQ6$1%j(6Psn!_Y zOF4>KD=o1yBh?lTb44mei9_Bq|LOWWMG`ab<#-l6cEu5YMnWm}|D4i*^(l=g#?6$9 z)M_9Xa8ygs^gC?LmXB6SYdtWM{a&6n!(~o}2b&_{Sp)9S8 zGf3WD+>E=uiq9<*;FnwhP86!Ydafm-v|}E_35s}(uy zb4x}D^YKvy0y>9uU7iX--j~2$Bn^#C)1H6EE@=aP^YX~|3)JE1?lUj?ZL*OZ86{gu z7eFw0+b~Yxyfi*0F+>3ac>BI65HsqjeV`egIT&H2mt>Um4CL1QqaBKXxGmH5XVeV9 zsR9KX+=h$|5WLHB$Dm0rUW|%hWwAEx9eiW2LRtOs0gc+fwOD$RDpTdM?d+7oq*8V? zZ$VA1>c)8`^GFa$0yC{dCb+ZuC47vFNaNksWAzkVAQ@oAg%trumP{2cc2BO zR#T-}v%|aP2{wq@atR0=zyRm~STBnz&=ZtryV zbjf&iz3~+z%MhCB(W6Qn_#~7hbP39Rt}#P`6t%TfvheaFWvNYM`(x8j3X@FR$venj zUmtOWq>H7(YlXH-^SXhS{B>%9{wq$Xrgb(o)J7=GK~Dk$7ybqP>}O})c~5tb*H#c} z=^xSz10Cqu8_&H9w$R==?0VzE7=OLk}B!WMidDQ0qUmJ)3LkAyDW5;BU zNf@$AxQWK1Q$@$wi4mPcL>FdORJB$RlB0T1SsLky;t2arBg#gbGgoJvxTftptJy7RHgZ#g27 zgDlLRO%yxmRHqCEbrxl3PEE{MFjcE*(HMkhM2*}SE#?3X(6@09JUlRTQ;T+oonSXg zlun!&|2aBH8s=iL3s0e}!9%Jmp$6Cwd{{dhM4sR2CPPO$*!`@aDWTC(wx+}$3NcOk zrd8HZEC|y4-PLO&g*$2k*UQ>qY9`e(AyPmThPHlt_yUqr3lOF|@b~0m6NNQs`Fy4R ztDvMP!{6Jat#Fc))T39FP)=xS`~|FVf5~^m>BPEXE(M=Xb+0EQv(4(uBS@dmeDMZX zc{qxLQD;B{$Jm1bvVmG)^5SkY4X6O0!uzhy@pe@P0hRHKtz;4^=1R{zH%8GAGBQX8 z<&Zatt~vdtIqj4Tl4<0gvT0aYN)_z$zkg{s4c@!FYfTklyBO*dsU-%P5&nkWVrG~# zXF<>5LHX<_Da+Ykhl7{!U^-)cji;x5LdOE?Mf5qz~WQo2q0 zMy`?{bx3DGIRs2B9Y^YMOJYpsG~HE6QEQ7cb@_)=>DBK$IeOvRZT-?-jZZZ)gzVOm_3$}X|RTEuU9y}gn>cJw@GbVQP870j6|o?-MY|A_B4N9QOXd(4lNhnDL?l;#q@pWAEh_kR z>j!P%hUQq%&cgqTB%)AdP~Y4148@!#QP{rlQlo4PFmz$?!$8*l0Or_rbiK~mCxzAS zjm4ClwN=jP4ax^+A9?Nzbe!*#i>!FK?B{iJRVykLnaCr6P8Xkk@otD}md<&RC*|0w z_`ww7D*oPyZwk#8Tw?JTk&6vh%C+tbzI$>Q?PaoAN5b$ChA$8>l04PKFg#ui!XY?& zuEDqhtQeXr>S_T?s^$(wuTe7pFMdS>1tUigb?A$@0#0)ji7Qhm&$`1T@$ip2xmUQD zP;r-uBG~GBr1X`)A@^g3SSfR?2M(68HR-;c!i5LLu=F$D*xm5kqJ+{wVrXh zRo^4J0WE!h|B1lYFk70j8F{XS;!{4jrA8*m$PpQ^GX+DJA6y-ew~I{yKNgU|Z)Eng z?B)u`Adlix&vildPdlF!DE<^ORm_rtm0Ucl^31~=5#YD)h2FM6p4DW_QClKf#3tyE zZIAn_BVF7BG*$8W+wtBXsX2#-dF-qKKcAz4X=&ph<9DqbrH`*Pp>;pkCZ~Za8uJ|T zo1AWVGO%9RV=CePyBIM=bw-yJnJJ6?yEZXusV+RkB)n7+H4wzl z4qtM7yn_?wgn$bCd$s%MeR#K`x>DqwYgHNwmeUY7+L7SUPCkHFxZ+_7Ud^!qMeurE z!|iov_N@e+DroUH8MsEuHXEsE{e3{cz5@iuW}q}GYy{N2#HPlGF0_6Hx=|>gXZn1* z8`TH+-9ZQ4vtvNfA_N_b??h}*#>^}$EZuMF>?bWa-5_E~wnolrYIVEE zXXwW0o{LIe2iE)GG~1yz#aIu~k-FJ>>i2lrII4Y1hD08NscWnevhxBJNaCSO0L5=R~J8 zcZ`2#Zrj$7b}e`|G?18@#B9;0ZvVw#&CY>cHj~=e7sRBAM{N0dm;-4oMRl^FKmpUD zjIbw;@J&2ZABzN&TU$mv%t#9kfT~|$Iqa`%9Wn;iMpK!GplM|G2*4=j#Y*aG90WHh znx(h(3CjCpMzb8UNm{$&$&dT?{33AVR+oYO)9;^N57>YwY{EKbHAYS_WC$#y`mp`Z zqZSrXj_Jrhcg6oIj75q^eaR2tBpfHIwVMA3Nw*!cY zZDt&TyERi=Tc6N-o?dxf**upv^ouLOu}K=^W;I_+ig1^+XWlMFq;(ro5yp;P4@SNd z*@$iXkP4L-+KZ0yINR3?drHPFiIG(YAk8Df3k8w_>lw0ID657)27C~!;Z8Ku;wWM? z2Tpt<88;wl-3m@`T7Jd}ViMgzl;5Uv{p2t{=88PJp>tFaGj}&ptp?GK8-B837oW(fod#w_(b}C}O=kPw#wNk(3Jks;fl_gE<6m^N z)^awe#4^6W>mzH|bqk9YIrv&fNmb||BwpO?iHsYbJDyDoi6u@8VQ(n!o^izJzJZ3I z+jHP>U!S<2^;?GlVnOcf4=0?Gp5s%{h_3b@>t5okY)g_DZqi%2nqn`HuSyZ8t$>49 zKJsTogY+}?3|aOlGz0GQ0KWgTq?H%Gh_VQp*#iRIScjg^zsXkeGhpjo0Tf7xu0N=B ztKZMnA_H)c-89)WB2;ve+o758gZFj5vX~|puT|*?bMF;j_~`e-qD}<%ogaTa&l=#! zg7EAWdQI~Nid7JV0>*v8w*?J-qe-6YlziKH0;lxNYsIw4gn>OzADHMdKcJFCOB#{f zZt~ki@ktr9x23xVeoMo3gjTA*iQ~(yvLk^(gLN$V2~bS(ubO^_sLXsIYJSZ`P!MTr z(k@(i;@kQ4@p_F|--`G}_%D)?vrb;TV>tRdX<&+j$X6rUW}shK$Cn*Mr>^onIa(r$(~7&@_ZvG#Vb6)j zT!-`H>%0frLwD7c@%762P?qR^OA-V^C`b>3rt-;NYdUFjkEPFNZHlHRm-Qp+ONHVS6a5PV3^mbrrZmf(SfZ7DbwTShuSQWIlP=8qe493qk(?H z-A!^2ns*?7a_)0rv0AmUVu}Lq84Hf>lYhVykN>ja+Ktjb+Sj4>o`+tCnph>l(<&ri$%x>nn$DrHXXCe= zc+NRz?no%5sNU>|)~$y&8m#K9W!Szq;KI|rT0WoJbn1XYH}3<&#qC2ns2Pz~(t=@H z5)@L0`{(f6n7lZvXQP8pwR6sz!s(9Nc&&|n^~>aa!gDr>sFYT}1Miw@u(!>Gkil>F zIKz0V2#=K!&Q56N+!@CgwXm%>tR7$KyrRK?Tyi!xwpvO8Oih*;cvO^!o;NN*6gKV_ z^)49A&Su&?MFV>iy`t#Vco-yC=EXF z@*p%D19aeIe^@8hkVn;g1$$xYx>YuOZNLf(3JRRY(+4vU#zJ`toclX7sF?FehE6-1 zF>=q=bKe8=V0IB1q|W&;MS0m}=(VlR^LOkuA+tBEHbLsXz*qf`VxYM|4wMNld3`ha zXV()yuBDwlTzMN1q+pXTc`yx~xD~_V23#Ems=z+VdA?-J+nec$q;t|S*ed`t6b@8M zT&bfk!u;*s7uY9ZUu=9M!R)*F9&ToYt*9?tZTr@bUQPt(_*p}J?ue44d#o|^J)_Zh z(D@HUnE{r-M;A&L(?uTvboU57?H-2m8+!?^T~(IF&f>gcqL7Fdh{PL-u10$l*C#?O zQSj<)kVZNpI~GrHT<5pv6pg%5tNX=2GJ$7z_npaL%Ui+%skD+ug6*P^C$eKnkfPP< zd$OgwAh%?T{n}Z}rPEnK{|^gAF5fs5ILJ-ks|2@E+}G2$5KTw$43s#hPGbf3fy_vZ5xM zK>AQSuOU+&(1;1bNd@%k=NQb`6HX@kPP&@6VcakjC$-ri`nmZBeS^s(MN?A6gp<4- zK!gG>ZP;nbCPIPT7|`f?b#nQsorLB~jYK>d%<6%Pv>#QW7RZoV?p6!fFtyY8MNri1I-dLkIkP8Co395tcRm(|?`WSusq2y0vUUTwTS zygPHD;9>%*Rq9l%F{FEb*f3~gR-CK6rOYIo=mYd38^JqUcl5H`lm5c{Phb>s?6VF7 zMEUJ&>G|q*c*8SfvFeawh=q_bCz~&JcbZX;M=}s#peZ*AJxvS#VC52b1Rs(ae5Dg%ig`8AZI6x4h#2{N1;Ew;ZvcJK z-+n%)zq9IFiozsKcEDSH%+~|`_;Fh6>Le)7=IZA;c|$q3FEAYlj|ciKH(Tt&BP9hP zIlodyR76ET6ZHGUg-l2wPCLYX6@|ROLJtDe%D_I**^*Xy<}^6Avq5QsfFCDYe+jq? zLpggd-8BKut5c&HJev2Jg0$dEiX)4hNNqIcZ7M`E1C=qC`yLm)EQb0%oVduv%?>D= z-8%HzcOuYE|KAT3Gt`CDPE)84~PL*?`;=l80mdcRm4+&V!P7euO?@vF&^+2 zwVQRa{1{CM!iKpljDBIk%Ha$V@o4YGqws?t5#x#&itu1QIhG-BXyuAp;QkPjRmtZ$ z9>w$ObEZVvqY~vDNmk)5in9&}bjPcP{SJ&rIg>A33eSogx`9O(|!e$dx-+PA6P2wAmsIQtV zPFQy5bLKA8&-2!YQHlz4XaA`Xo7RnzP4zJSZKlzEg^jb9UoA&1-oqvVvfna%)>9<2Yr zYEctNJPvR=?2it?@+KePJyu=yEJzt0+o=NXJ;@8>CV5aDxH_Y}r3S*EBpp!7!rDO# zsMrjYbYd*NX@*zcjwQWMM=dbtcDp0`?S?xH_i)yTlH0a z0%W1@eW|OFj`1n)bulaJ||Apgr2(X18;Q`Htfj<@1{00xSZ3lRA zXF4y>B;IjyQRqE#!%rZt-+w6i_$r8+OS7dS!SeKW#cA(2lg_5h4uxOp#*Sp}QG9K* zU@G~%-b_DFCF_`Wq@^JwuFlG_eMU%*U99es9PHRNtt0myYH8|FYp|dvaI`p}U)y@z z(SQ$buvg~F@TB+f?#q(;X~LjZ!n`^e=#?z_;zTcXM~;t5(gu?yvntc=dHL#y-*YcQ zh>D1a01A)LJbXcZR+`m%bI#sr=^wlz#cB{jpL{w6t|Ez145Vir>^yxPJmB~$NU8%? zPg^O5fp~*_-nd^oVGZV=#@5G5_9)ZXF*}{i>tv$su(%c40!f&!JiX%2XC87AKg|9c zegX|4uY&3k=lr~?@iVm{+AN8U;nC~|5m>@0eGZR!N~(JlYw zHZw83$f*!pZ9OvCMHFj!z|TAZVzi&XU7c7}OFbXjMgKw*==FpTqUIkBJyb96ei)Ti znC6~mDG)mQjbtCLnpqCeVW65M2jH=%|EdW|%Q!@shx6!Bp4d6@90D74DnZMIJ{1w# zR8Uu4d4y-g=*B6!`s)X9J>l5BF0w1EyIU|mTR%U+?;Ar zbl=8=_6x1ap63;3~eS8m2uSdY4J&44Z_n<{(5%w=G*I9Sb!Cd`|__~nR+a`w*h~{ z?>PgUUQocqcK1*HL;=FkA?F-+XLz-N#3L3qiP#m-IIVkxfs4^x7Ff zyReWvCZ4YmG?~?kfQOs31GVP^BvxU*jtX~`cNz*s6Mk*i=Sad0>#ujFdWR5h2S+U(O4|WQxaY+~66lwb^J7Lx3 zpEPUO4zUQFT<&gDO_I`2#o`Fr+g`IHhx<{Lh?v3U&siz3DS}yxoxhSGZoGziAjN8-c2? zxSqz<(T&joFav}by>tv+(u}=YMDidtbIX{(UM<{Yd8)cN9lmw!pNJgxj~kJQuoXSN zv3!;jS>O2X1oP$-@r>|{SQkQTw2?mc$Cx(fX7-Pp*ofOi#I!@<+ZiC$sQZ+4==0Y_ zvregzJuQQ9!?yc;YZnoOIW~ACoBla|(%*T^$d4Z$TIuK6TpWdmXnr}WN6D;g>&<%T zD2Tuv-_)NxO5#!Sy%bLQ9Uc-?l-DEWmIY5h-h{3j)5Og%h3=Y=A;shM6RD_@o`Bb@ z5{c>RqZV;OldKqk{ZZXyg`z!0he#01bQ(G;JeVB!mIBdyd+O%l_ic_*UWGm?^ zwpiK2-385ilrpx!lon%lz2-hqy>)t;hcW2Bv!WU%P)zqmY6D51_;#KzIU)L+sHFV- z##i|a_VzXjJJmaL?1p8QjO{9+V&032t9?sD044E1wQiUP$Q&#L8J9p+oVyC%{(eHB|Lky6>WDtX`REF-7G+jpbAENK%_AJ> zt8a#N2s1aS3Nq#TI1binn;yVc`PQm%VZx7s!Z={9Jew`lq8BPFm~QDbo4k#wpKtF} z)Q8NeZsKi*8^w^vDr!@*qHI#m7PNX?yY(kG6lZ&4(m@|B& z-romq@jk#bdb1o;Fe9&pC_3$fxH0(Z5t$4yCJMFP1r&INT;uEZzR}0#mGrewo#Efx78L?+mf*ULC(9hF<+0M(qDdK7hqJ5i5!Gd%e zMWh?@<>V}?JeOVkk&H7EwT`ywerNr@0S_HJf71N+z{k(RhC9%z2CIs}eVu{5%9Cb6 zmwT7)L2&Y5^3(w0H41@BMCZJrZG@muIxR_z7&VY4hqd3M0!nadG`J&u_ILV%y|Cf+ z_RWv^#;}ovPywKN#f3U*lzo}i2o%^Hc*g-8N1c__F;EB@)c!P7fYO~t?L56OdQAN$ zA>z@d)r1GbeEyj~&VE)m=lbxyrx%K8F(KdPLK`}VM6CBk*c|_lJ3Ix7I+CU=Z~*g% zpDy8@4-6DHah*zAXEPL|AvFCAb5qlD-2!Y!=(vOlTg;LA%5GSrvEvKo_M#rE)cf=e z<9S(rUQVf|sGkpQoQbITKb-+(Qu@u+;K^p|LC|WZNTa7~uHJRNfL;$Y*WG+wW@hZ& zKx#SJqjxHHi|gQ{MK-@k7>Uqr6mwVVh}(eBV1Np#Sr_VRmcXYT zs@Gpb<^N)XmK?OZ=r^Tg6V)F1xi|NIy0$$H{R*~pkLM34j_S&h@GI-l%)?vHzT~4G z#s2Ut8pWJ!`KYhwPt>Vm+oKkdQm1C7AbjobntEA6N`Ig@kJ$HrW;{)N9a<%`BW2(0 zEPpPFfOdNhow+BrhN53*U3R8snsV`)eAIC+96oXoxiya}VbJ=ZElBL24L`k0n(EO`GcN5iou+X|yrexl)xT?YV4|Td>D$ zI9Lvew6zqFWAR?G%$ibr+;%d}en7y-HGJ z5^{$Q&ih{v3YU;-aYI+zT(XrA)TamhqBUNM9GvmHZhA;|VdWj-=x7ne;9t{?cNHam zHv&@i6g-fssH#UQsKQG?Uf@4B-B%!KC0~Pwsd8 z9*UXB95k|*5Z|DR_vKSL%FWGAhCyfQ9JXCNU-Ec#$L1IHsf~G&yik1Kgo8~eG7^xEBe!Gjd#HEN|-8P z4u>eq)7!&I-$IoA0t4wABxNY$dt&y{%hu4{TR`LU_JHnT8f~QUfP#C$5~a1688p9y%*k7kkS2G#IJiD?Hgw{d>2K zJ}8i^YjjE*qesu8pwK{++|fVbGNq8zOOkJ1lWbfjXwFJ(Zf*bd)pnf*G(p_$?FNI}YLnEfu)%Zvxwy>Glr=EXx4qAbxz<<@ z$yHi^pjsFURa-#RqVOBxmCDw^kf^-Z+iCoXTipelFmEj>SZe<|#Huz>liMF*dZ6TN zj*rlIeE8u&z%o=3nEr>piB9VE8%ll|ZJJjG{4ekE%L{8B45(Xuk-_P227jl^FF=4X3Qhb>;CEGn-iUCuyP;09lV=b&9MV$F6++}?4DWZx)E6(RJd$cpk7xJ* zhngNE<%E@%gTod?OMLKaof2tjhg-?XZC~epfD1g+ji3~D)}-ORg!Cw2 z7{XK)wc3YRqnnT6lzkPvSP@n-k(@{n9P)gGA*JNI4Ql!#IdewK&F4OXIJ%Sa_3=Bdh<4 zrb{32x=)_f0k7dr;>My9VP0Q<=yi?M-`zt?U<%@i3894eXAP|#1QI+FG45Meqmh?R z?#4WkvMXjEfg+~Cka4wTj79~WG+=%rqQd;m9KUdWaIhOsPrxyw8pp!=M@Wr&~2~h3_r^VdyD@kK5kZO+ISVAgd`>ILS_VD8!u#y$8Flvzmj7 zZI(|G*2G(F$y;1vG5Ao+Xnrvgu$2bR$d3wE|tJQi3Z;rhR~2MUg74j}vZy zTsggL;u6a}3Jq=Vib&pW-4buko((cz9%t{)ik>g->7`!1WkX zhgLeSwFlh(ofUv%TTMXkF`m5RYwpcu>$k4$;blyY=UDKDq+?c2xWlOa$Iba0;Vi)i z35p*Y8k8BbHAt|^BunucjNj?kjb2)QGJm!R=1fquidUZO|C8PQBs%F^qbUgfB5)+m zq40`#ro9&;b*b+{)ArMi2KLKR;MS zg<;un=R%1p#n{y&MQc#PrkDiBsI@7DAxn_ynqd1w+&@WRLw6KGoqXBvD--KkpZs|# zthZTZq{)!$=S-@_ZPM zLgG@Gh@H>lEEOkeh!@j=_ZJ_~a!91#FSwFyR)5wHA12h};$GC@uG+kC#eQ*Pd1vZy z@hHCM7;O-b3cNo5B>DD(o@MaMWG$Q^Zc5o!{McBM*ACY}MiBgYTry#mFNJh;Eagg% z;8Df_Qxmg23tKL3PTqj}k)@6vj+CAaQtK??%b3v{99l;kzSO|L()9~(f_!OB2{o;Q zm!HC3QxEgBsZbtcYRjME zWMd%Cpv9{5v{hgIkzI&s1MuY<(#&(naU>QsjYL!ScQl&`;6x z-ug%sml-?lKLyjSeE2R5)btcXX`=)k^@B1bR|s-s3!SWqim;Is$BWIoad~zNDfxmk zljLy1^;Hh@p&__hbSJV-kV|M0E_)?C+$)YM0+Z#t7Kl2s@=J(DyXy>1ilVRw*~gvl zo-F-ym2<|sgffFxGc`sv2O(02*^i(<4#*}LAiF;88EtWT0=oyerl@z$)rB$#K1CKrdFjdsdrPI>Q z=z7X9;jxuzOR`q&_GC-yuShz5Kt}DZzsL+;lVywB)md=6uSQzPa=#L%VRnix-lajx zF1TfEd;r-+;@(HUSnp`TM*LZMp>w@xO5N=F<>;4@v-H0&pPz7#nIv;W({t5sg(V2= zqKoPzT27XGViwsg;r82))QQoyl9lEkX18FK-Ew<9l}SSKiD|PY$Pcc!oBq1s=q~8~ z)Qd)<#n?O}9)y6QVJwSw=5i+;aWa!i(RU`Ux}QHeRbsNtTtGIf$ryqHMw)%XTS685 z%;%f^>7iCW0_jHw~kzN(6gt+L(>U)juF zEkVqX%LtRIg4Ptif5o!!yV!H$1HO>@#o{ z(s4wXE&k0Le#*o2z$JI8*A58EtGW#+SgfAm^MexOPlLK-6iV|15Mtc-%i*cAA#aFy z-0yryQn1lEayaa9jWGMfs>G)Ud$6RoBTZ_ z)_{!RAn7Y&WQKi5`yI!ROJ<^jn*1x{L#BxRM*ogcUqn zeP1lpPUz8sZdaisRN2qcJ6^~g-NV>7e*5?x&+skq|g-)I`i zwA;IapNk&WjM>x4PrfatwbHJSa-VH$0fia>=_{dq0Pfw}wY9+s@EsaI_|p1BS7T=s4}5+V z=Am?+%h1&`qTRAT^x9Qi%$zpkT5ZXmj&GGrhJWCKt2(iJzw>7 z1D%~>mt>7d4ixb!D^NV_8$vT1R#(eX$cqgP{{ZJ6W#s3JFxgxA6XF?Jx#NmO^d(|_zqLqo&)_--b*TxHQiPW-_Aj|~ITl6VTMzueA;KyZuGC@Vj!`mQdh1;HGK9hf? z;xY`;ChE-y;#Jex*M^d+N;j{q$%Q-e_~f8h;Y|zBUBW@;gy}sq3{dub6-43$m%vQM zFNdwldwP$@@xMyXZpv)FOFg|=IV`@eiBjsm?9cgG%5|eNTy?@z@2U3$KP`q!_jF`~ zZvJkp$V0Yu)7caEmHqI|%k{I7;&5mCFDoNw1D%zgWo%xAVw?0U$A2<;IvNDgof}ZK zY1lDy5K=%>OkNv%PN`KIDg8#Z0x>F30snS3x^1Xrv7HI*pPaiu_)8xaAYW&%t9^5< zpGI6nPy4T_+X}|+oSYlFB89ZmBo%o>7gKpieMX|Wv@xY4ITm&AfjPC>_2uW*-rZiw z@aof5C!HWtVq!p{56Y(BbusXM_`@J=a@B04^M~<;xiyMx-XFSZPC=L$tX(VRh=>RQ zLs!=C&`}Scy|*mHkP`!)yT6F;RxB5uAh$L}lX^vtU5ScK*$fd~)qn0Ln_k66yWm{s zjEt&wyNgt5;*!^9Hp;cTD&gcAoYmE39sH?%zmTesGb~9PlBhwOcC~dq_QZrw^lvMH z!~AF*)Hl_wx6LvE*Jd#wX0z*kt~6owv7WmMjlX3u2=?C9rjiw!H%-Xb7NgX=H2YrQ z72Y%CFzO>EDsEu|92AeXo$)b5@Y$4d0 zP|H;lOKc45D-wc?N<4W^Ehh5AL1I;51X6S_``y!y`Oq+qlAq%@{~RT@^&KH61ieR> zp}S`%#~!dxTmSvNn|w~hXaoVH&N~bdS?Tjp{L!rlp7TVjVJ-~6-3~48R^78Ihsq5L zzf5rgB{{RG3Trsu6o3W_aO{p{m5lM$nl+d=J+i`=JmTnA;52L>1zX$LF6luurQOd= zc2+I8`iCm9@$%pz-BS(d!e&f?B@reFm^c zd5~$|9&~rl^tB$g%P$cc6|)h@`EIv5h@FH9w@YiTO_wEmb!ilOwlt$yoTw+wg|CRo5~GKj&s=-EN~m3D&;y z5}73*$2_N0LEX@(54SE(ZEv%j{&cYPG1+jWe5gG4GQ`9%2>utzk%m%oY!@1wSbP&~ ze?t(yTZ#>P1)faKKdi|(in72N5D}rU#uMbpyVRWS4g}D`XcKKZOBpFejzM)MD=trV z52L*1e8(5G;%9%I7|#wy5zKZYylL-XCt` z{GK3E>|;+A3%1EUID!6n+VUq7?&zE%K))nC(79=(G+2Ehu=wLk)2<6hvmfy4Hu8D- zOYnDYHbrs6{OF4@w|i;WK8Mbn$7X>=eEVVZ>SlI1ld*^!_&shXZ`Yo&%= zKCGXDUc+dYImOJp`Z%{-ENuQf(}mSQ+OJl{m>L^Uu-O?Cw>T#~S2aVUNoGl6BWbCX zF|r**@_gg6hxMz{8_S94Pa?qk4EzT{@zc$*Im`Ay&NLIbUg4R8RcRe}zZ4Q~jKQN<{vbKzBt=ymm!=+tyi9Pt9^?*dw z2LAuWMo?vhX{71_is#I>AkB?7gg{6=gx&_NKAjPmOPpxe;zOs0Aamn)~Z zNH)uDwOe%zY%D%0d?}A|(1Dj^1cR{Wa$gU8Df>;Y`4fM6S$@yp3ZB_iBr>_#!P*O6bTF^BCEpz1A&4Pp~WH}+Q!hE(|V`- z_pvdTk6jq!*mC|3#4NsteIwVJc;W)zqjH>R3dInzmA1c60T~sHvS0NK zq{1x6s*c*WTRIXAheJA;|k1{bk(WKl}LS zV^=H)h5c022aHfwp%KF~7}?2gQI@PZ5zZs?UG8@UKD3E#oBZHAp9>CWf#-sMpe<>r zg!tIMJ^twJxZDpcWM@k&)VZxrsEqQxPvkbTii$rk8q?y(-F?KT+4{?g@b4XBikjA1 z3YCvscM0dnp(&^+7u`ub#bnlj97?eL&v*g#^yYa|{%gzcYzB$mQ3R^z7hLMc%uB@u zKWjCl7+!N`K6BJ+;&AFVkt*->>OyJ5oxP*`)vkD~`#kT+ z$%zvXzeur%zp%^CX;+co{V|rbPGV-G6(< zZMfTQ4a6(3v$pn~mK;>pwy%EXSBab$C~9ur*^RfK-jmp6)=7|&nU zH8yt7newtJ=Mqo=&5_#u5-|7&pm$TIC(sjBazUeWL6tByf1H4QX9yrk`tvu~BXS(auAxJN_c!cLlfSb}?$|FX@WgdCDHU3g@>4 z;PlwaUDj5wZ2FPz=I_cX{ViMNAKsS@`gR|7E*%xUl@PqXg6f~0dgfZJ|79)#NR!d4 z(hepM)<}L!4LXX0xN+4kmrI+rg7m&&-r)P=mbw8(SGGQ3BQ^ch4~}f!qQ#54;_t4i zX6${^vXM{7kgp+5&F{AOJcY_mcn|RC<35T{#r=NZHzCOYQ zD&LP4@m~Ap+V7R!btOF%cv*uV*vnQ{)S};S)_8n(5>X4QIB0Q3cE}D~=vc>09fso> zJzMP>ReKiN+IJ?$X3qQUMAO-5bW&G%HYO>6x(VW*-N|OKz9@^`^r=pZg!4&PO;LeW$l;t~YFRDyHH5(w0t1-<$1Q2>aWc5Cgs1{@^va z4+1>1wIa}3#0v9jt#x*ON=$I)#+$4@M;he9hNVZnuHXyg-FCuNnkX2&KUNL)l>^ISW2?=mWP`{Pi?3BClR^{4uo2swMg zI!77gwQp)27R(!#hsSyq!Tcl>a?3X()-yF(wFWtu+^A)~9*eT0q;(19=hm(~#* zOiQ*l^3c_-r;F;n*XPXJtQ`#@>V0CejsEyXz=y*gr$lpkdrmem)}~S>Iu(70hDni; zt-LcMs5Pc}(o1K`nut(M-OCZHk2Eb6v`(1#Eep}=&=`WBgiBfpxwzS%-PvXPUvCT4+9mfw6nZ!~KAu{p?BaSlzw0Rp|BKFp zI_X$FY~P_{gcbunm7zg{*_8z?q`M#$3E4VaO(cew>JZu;l?KPdL;Htf=9OEF{< zr6=t5urQ$!76ig=@>3?nI{DogfaaFqMrxjVqy>vwMi$^l;A{%7TbiJ zBWLD2>n==W5zTbgL9=xN#M?n&oPV0#(Xbk{T@{Gt=lKymGBg{6oEBw-i6NX`bV1a; zA3ZGiD^6|_%8m`$=)LC|(gd5ZQn}MK^^vTpl#9Nzw5GJk9qiszRuW|mKN$KuV6|;# z3=ZC!thp;7R_MKQP?_phQLm-BOpT4#r-)_0?S1$XZbU}ZXD2Dl_uON!+)<1$cpShs z2R531U~M@1cbF9m&h)Je(jL4_K&D?a?xs5{5PgpHSs2Dj*bf{z#_7E3=mYv0HRG_l zPLKAOQd_IDGZmwm+cRztCKGxqoy4ixZgIM z*9<7k+Ev^6)QijUfFIrH(5*Q8VSrv=oJMN_k2n>lAiCaKo-w1_tycl|qKq*}SnR*vFTxmCE2N;YPo)0;p}g+tE04AG~AVi}NL! zU3{AtVzr>DX)sJ2I8{+;b#Rim^zv?lZ*cV}RJwK^aitVcBfMzl2#k zv8JKE9*E;b#4AxIUfz&ZqL(o=PEm@5*@(fGr=DdNeqfqJMI5py;wmj*Jiz=ZMO|fQ zy&14$wtD${F)sSN!yRk)D}y2ZfmEo&MIA+e;{C%rITlAF>=arY73ifx9WEq%3u*d# zpxmSiFBtAW~VPe~nUak4)-<+& zTFE=<_rs?<%|;O$eUEoH)PKv4s~}(Jgx-qc=EGrx`v>4lm4}e;5aWa2K^;FHiT$|< z4s~KXMb_7SzIWz~D6D>zOcWieT z1en7^U>}r7^M%`ts+pOiK&3gnG3O`?208?0);^cfBL5j31K8{AE2gRizL~z&lN^RO z4+-5TW@yTqhKw%@-RzIDB@Viipz^Z*23EB||IfyDC#7dbAqQcmzPCTAc7Tf@FdrIO zf&kDWS5jIr+dF#~U%j;+w?&Z-!|9>&rn_dax$M@vzLN$y>=Ot?D|9W3F&>@(ahWogc zpD|Xw;nii7`U&tIiT~0q%MG_;JSYC>OB_*Us=gC zkk;8~bh5I^bW6ub{t87z>NfShdGjQMnK(d+q`%Uj*%9}PT*Qb2#b2s>DK{PFn}^$I z>B)FfC2_awOSx*XnFzv_!qL-!WN0jcp}HisG=e9pT4?DJV?b)fr(*_N0Up@(^58O< z<}+DpPD4(&Jmv|P5dZD4zD`AY>ui#|hAu&#T(8C3rkv{1{pn_@e-F5Yn9#%Wl>1Cq z#XrF)s`iI1*T?zG*+!G8n(d!zx*Ed*PithDBF+tFNAE(5IQ3;HCOaQpjAZDASciF? zD9w|0nA5Ip>c|WTHgJOyGib2dWMR3je?=oF#u$=w?pCYBY$d8MY?v6xz|P}f%0W^5R@7MQ2K9;%-9?&xGBqh+tl1yRT$ECY z68d^yO37xi6*BgxQTg$+6(X>kZX_VzXcOlqphD zE0KtfH?%`_@4hujoJRJTP|OV8>L`+swG!&7E3Lnag8`$?HXRn@pz4}R=>5dez!L(l zcv@5=5mtXCk9PC+e}N1!AVdmGq4&R-)N^qPP+j!MNPsaS;#Dmgi}%<80n?KcAKU40 z4QUXR0;0!Z9o{e_N*oQlKu*fx1iOC2A3iHP)xBp0ZTTTx?xu}X;@s4C$8rXq;FCY@ zxMyrU$iTfj&8-dkckqD3j`blyn)zi_-5jZB%t2D+CKcAKJKRUYcB*Ux-Lk4wY@JM( zyfG<6tNx`*;v>mzut;!}H3!Asc#qHGmajQ3(lSzYhRL5x#2Te3tkscLEn22s6=J~Z zC(^Ov_#DNOg0YJKikmo?<5Bc%Bd^A*`@;nEW9I=>c&GI>5VN-)GjJ^eNODS&sEcOE z(yZvp1DaG{8@wI4>0DJM#onh$3})*Z65b)w@X zZtyFyYtm=|nHeCT-r78j58$41A_(vgSDDu+M2ARAXxe|WIk*PB_y1zPPY6v)m+>*U zvj1pk(tQJ$Hm(+UOZFw?>ul?Co$uL7s>`*l<>W*9T1^w4d&=jR>+9!%Dwq!6oa>Q2 z><22YZ%1A|ucRJEmRmzTtZC0U6pEEm#4RpipJ1Ht=0U3e?||39PrgKuV@E93?L-*fqL|+z8pPm=GDoK zcJ(jGvS!ZxOc0HV)Ri%GF9mU$2|%>Dvr+w61o<5VD#Ls-a?xs-fOcE(gtU$PVAq$| zBx?-2OeS_te(S38%-+^P*drEZkH*B(cMO8uy#>muU##(nlZ-ltkg1)q$3_1`1bAtIjTk1%wF0a1wYz!rhkyge`8CFB^!L=4Y&IfKNg(#*Lb`pCzep@BU&fy1PM z)YZzw2O6TyPDN-Js!7D@>Z+))nqXN0F ztks5|mF2;;F>$z_th}1*SY#m^Zw2~t3(V>1DL8PKkr3`(i=YI^#vQu$Vka3LKFtVK zIXzvu*FwAO4%ec$?!ePpWwzynC}xU>yprWJ2H%iy`Yo9_bIuHOS_SDb3BZ2UqkOct zkeVoPs-0&LZLRpSwr%CIY={TacQXFD+=(?|S<0JvfOQ^8HRgvBAk#HeKNoxZ!M8tJ z9krG69l$@W7_?a>cAI^Of**ahsnM^R#%=RoAFb5Q@F-FYK+rfy9!3yWhT3&;ZTrUl zYXSs(-$QKwr6|HLJH%JSk;x&AFHmoAvsmm-1&E7VnY z;vLyRqawKLG$5|r3s~Qkx$cO@;H+Qd-O8mAdTaXT*3i~)S=Z; zF4+wC+gNmy?0bE-g6HTt`emMD?p9NDo>f0rtY|}t=Ua}$>BLoz>Dt5o#b~vOPk`6N zTxZ{#^tBl3va%IF+ zfe1zzW~I)}>0V!Q@vhrNKYOxXX*(Z%`B<-)#f7RKVP7fPW~iW(JyxpI0&&bOOqcX7 zohG{v#f9xN?JYl=%ReX2n|m)4U5jZpakWW&GLYS7FS_N^2G)l*Bc-B?dg1@Tz&*lm zHZPd5L)$jO#TcoaWS$OsUYeDn)zKJwiRfqqEtCW7lSd-JPgeI#D(@6EnTQcBG5s7a zHfym|BtmmQ_6&gK?!7lI~hfk`ihwLJ3LdxfXXy=5|7!PwL+MqXqbs>|t732x!Ly9i)q;F29Sv z-C}Nls3^1~7eBD!TZ2v&ptUMtyJ~8?YFLy=f3eDKh1eZu4rrVrw0;f$-+#hvN4|q2 ziZB1rg9_)j6WO-7b#}^>_Iv(J+_<^8>P;>K&O}cu4v2w0#79`?_jq5%`)!A@W09q(J8I;vWS+dz)p=ppmSsa6|0(SMbpeR_9^Do= zWI>Q!)jgR~dqoC3v>%@upYQaY!-|}&<-d(z*|tpaVcV~|HlWoycQ-Pd>9%}t(I44< z!2Gz31Mn7{>=9YTWzz^7*c-o+NjnglDTz_eI3m91`CV2rYz*FXJ@s53v0v=mtzR9| z>UL<%@Z#z#KIJlI8EJ9}vwoiuv+2^)!r@qYTSyx!7LhkUJ4T2IU0Vq=Hg1BUOHME< zxIBh4{hs|6GL{YMhsa4G7J7g4qNN>ISGIq@kp-u{(wjr~-n7CRBDlRh5yXo9-|s@w z?|U_}_C?;1Pe-Bu)Y5^9zBb#+ESMdDp`+ccEJae|^5M(kHexRYnfE?qpL%{=kK)O{Yx$NF&byUjV)Or_ zPyy|(?VV6c7%1-2QoOT~m3etY>QMJb+)NmBW9uuhjWhu$L83rNYFd2n+ZT9)XxDwi zYAfYyNLIno>R9}{b)X15UP+~+KQ$M{FTm6jpMbxy$F90XO zvvvRtvt4Rrz2L%m-`FoASHxkZs6fSOz9bpg(B@blQYj6LPCd*7arpD=j=w3~Y-|!~ zM*q9JQfTw@!VeAmj9ll0D9KoWPn~E=!ouY3u|pkyV_ctomN;VE%};cU2=#&ziQS-FJ#`lTrpL^hT#sXABiL}5TBEhN-~~;YHMh|{Z+VXefg{J+;mWcUfl~Ou0IP=K}F4U>(ZD_n-Ex za7}{X;{WD$1w~;{&{BMls~={GO+*&YpY2GWm7bUPL%%^|&l2(k%{H=k5dD1^d=_AQG1ajJL;QB$NBndy| z?qVjmzmDMj69$*c8p+;T-q`R&rSy*#E=%NF$h*h+G}o#?8=k{ft0r!6?8hpZoo`ws zy+dRM@ho=bt`j?t?^)a2+7a?S$ z>%xD5xIymFGUy<-Zfr7_oR&6!&7TiTec{LP7@-;e6+u^GFiYK8z z>m=%kpN1u0Ua%EF$lJ0kibh9KQ>d57Bqto(-EIq&m0Sy4X?+24<=K%tmsM&Ix#=GK zRm-iG$B7NUigtU^0{;zy)F8z%Ts}7ZhOSBK(Fd_=Vcf$f)i)o`)F#^u+ z7dP-Z7o&c&UVt8NSaZ(F8(Km!ljzzEYlp9{AF2_3(Q_I8Q78WwV@O&(^{c0Dl*ojfS-@?JHFE-08(b@cF0}E{_mZ0Td^0Ku{JgsW*V=Q#9)!pSh z66309EnJ0h6<)i-_=N?ii%}Zrq*mqXOJrET%s})G1tAOk7id^Pbj$B3Q@4_=aA|3w z<_AT77W|>p2uDeUczKb3UD(X}za?laB&N2v(1y1E)l>g5H_KcdG8U)B-m5O7ru}!E z!m`Sz)$^rYtKG$An^{(k1$yRStdrJ?{)hJ=@Pn_s`U=n7 zE5E8dqW)tG_LM*Z+0RR_+uKHeo`Xtjeq!f_ZY0F&%o_L_NzAH%aBZ~GEOgs{+o{^4 zhnma_uR2`+E{0D_Gf{%gztazqivfVG-6nSf(!>~3-LL_%Tes057OA7Ei;OU9Bi*L0 zQJ?K84A#)&W44S23%tiK26B^Yb{luNH7-tk8Zak#uP}H{Hh{;w$0+ z3u7s^%%hMbRk_wgx=}Wsy_HK^>K{31^`~&SaeLGd-u(B|6Q2-^WPv3NkgP?Fy3J_+ zDW^TO*9r9Nf0<7-JoBhxZ$iQIoCi6Ztfj~ymtK1p%hCl|x?+sV*iVd$BtbVpae=99 z`~1?@!`1INxW}o7EK3yE*HQWQ$EnLu~vwX2BzV z_2E+$@55$rmED^^$eOeq%(GJxJE61M`L~_b-0AdO>aaUT$Z4(4)F3(J>Ke$N{>HIf z=2uHGR*iDB=+_Z2yIsCr%iy1kS7 z#eT0uxNV*XuN*IUWWnI#DTf{NrInK6n{O3hy}J}WC~VLj%J9^5eaM@B=5e%DT?jBm z^rIj8=}4af1hpL(dmBN=0U^Pg5#%Y4f1V9qBV#oBlvSvbGsAXO+v%-A{!e=TI$Dw* z47`5+a)GR&Gm)@{z}<&Rf?Q56-lk$_Vd1lSzOhD7^i4Klx?C~f=ugd9hwR^q!e7j& z_-ln9tVERWVyF`9){_cl_hfQAjt`pA-H6#b+)0)z$Av#bJvab+&z-jara}WU;~Ftc zZtsm`wo{EVqAtFa-DL@O1V|-{u?R2zJ0CPtqtjmS6Z%a{mL?kxyz6P)3bQAQ#<2eS zfP<_9yjak3t1R!1oCLJ&tj?-3BHTmirtbK!*v#Q;QKRZ;CJ&Awh;vBvTj)H;qe9@) z6^u^U3SGw!!;+yg3I5?elU^X50+ILE9G|wCFMKRgm*ODPIeGkB+~x1@tPZB+8Yol^ zpeJsdXEqVfJ(0=!fB2>EXJr$q*xZ-fwp|<_jB+YUtNd#@OB~8Ev|M}K|;DIQ)b0{i8 zlv}*(GEPo?sodNvm$r#=h+r`YuXtKj6BaF2SJIwf?3p~PGv70(g;{cH)StXB`P0{< zvpmuFiw0_&G@og<`y;ft!OK~_A)VyzJ(!=EL8K0xd`A1pHmSWgZ2s?%_YiQlM~u{1 zhz;wwstD|=sk6u(-jKfUZs;?wZlW}WkF3F$2?5>(p^f)*LMW;0th_;?rF{?XQm`9c zM9r*1Vjkhh!!3`-1%E|=Mqcxg3hO$)lZDp-n$>6!BStD~)QB)?{}6>L{}gE&6=8k& zdOyDokn8HG#RAT`EfyvP_+HnwW^E)qn;IpWRY)aba(!B_BGFEEm~>{{PX=Ci8WkdZ zpwSk*_b71UV@M`*%k6LCL2%#4|EqwN{9LybK{v|>G>zc=pzLQczIDZ96qEv%dmU0t zLa_3Zw3CP&DM5KbWMo3yhE%^{yY|#cJ!a9y)iL_Bv`>Qu{8wUr*>?Pr>Vq z{;LQo=Y<1@|GTn@KqXJ_p)MZVBRK=p@tf;$JHHnEto3QcEi>6C((zwaAL^?ZXcT4% zNM5?!^YP~{AzyX*u%J|FYi_GubjdgED6;8;Ukuk(IC`CWZa9l~lz!jzsJ?Ku7c10(txpwM6wpgPg zwc7ryq2+kJEu?yWY}Mf>^o_;vt;o|1`&Z6b0I=5w^}kyT&!X^=AK28!Vavz@Sx}C! zSfBI3Hvo4#=ue0_5ET8_(b4Jf2>NNh^I{^EhqkW$(y%{m?KP(E= zt58~XgTkVDL7WyQC>WJOAKw%ajsSA(4)*%@JQaw8Uwe#ShYG&-q1_8ahQT;W$pJr& z?9e7oeQ7|`wAdy=-8)?P%H14?3x67DbY+ntL|;3%v60jN()_C;IP0 z>+6oo>=F{?g)PqG7v!r5c^uk8=CKQ{=&=Xd$%9Q`t;v4F)d_*MHMcVm7AWv8564q<-TL5(rdZY5x4*)M3I^AM@jPMj zq)k?4uJpT=jecL;d}5m=2x{7x|1S?Eb|;Us&C&15WkY|tKTwJV`GJvtKTm^rVwMo6 zY@0KH_TMr@<#YzNM^V8#i%UsP5Tn1X{bpq|puMz1G{&knF+E$WD2lX6jfhUu(Op|c zWo+lR4GPK>U#dkEY6T;zhdLA2dV>8pp^BL=2hn{rZ`M!o`X%8x7`h1qyu_ZudH?s|nA7F7U@d;| zH1+0!2J5G`dQ>UQE@1(pMax3=C9S)0H#LJ3(^uqiOR*Acn|ndQcvptmB*&pLhyv~)46vC9V)%rR z*mbJiKx-dn_)5P0$gp=_?1>~NN=;3DfJuG!AaR67CqAzG?Z}+0%Z{deqq@gH+%(R_ zCH2yLmNz!xLsq8gg}{JES9&kt;t%2-DOs<+oEYCo4`+4Wh|-RwC1>9Rsb~=R^*w)H z4SrxJeg05fldK$>sYRQC)%l`d2=eF+<=Z#Q48`i@2Q^u0YCB=eFK^Xz z`!&e*F?S_ct+A2Ua2@JmeHvB@Ka}I;&Jc-X^h=1nEy&4`5H&^4f((@?!>fn9LO*x) zeWIbJhDuBr9wLb!qVw_%cACZh0rZ>|iYet6Bglvuf7+yLuE4)@GdaIB zDfge={G+uXSW|Af^P0zNw0%+~ubj_ldHYB`M~D(1{&_pz#&S|%q2ULEM+FU=Lsl{a zu2py+AsWtO_P8Urk@`E}vpjOn!`?d6jOzZx^7Vn_al^{qAV|5vt;*fIv60J#QL$(m$;=W)N+5Y3iOCfP(Z`hLR)7 zZ8qLMOn@8+Uo}0BfvxgqLWsEe%GDA}Lhr^^X5^ce2E4U;R>|=r=4;HrLD;}wthvEu z=4QkRT5JEX6zqh4E=RF%;Mg%!zRyPk5h7Hwnp4KAK8`B*J`a-~%K27S2k^S7JAO$;okQeMmcQcv;D z%#o3zikumWl?AhAw27}Nwlk@VcmS+AqW6a*!vl1rMGi_-ql1}&-S@4Pu){=pAF3Nh z#177Ta*+x$$py!djX`PNY&x$PF=gSj1XxLN@f{+yj|OfVi2skLuV9F4TbfM>?h@Pw z8JyrYxVyUr4ek(};O@a4f&_P$1b26Lx51q^=bZb#`3HOUTD7~Ys;fJ0Wvs0kjK13& z3Rp{L_MZMIC9c{0upOU>4%$}nz+;=H6Mw(qcSWVx!%RRdQap6SW)HKG(JrS90%qcT zCr*8jBU9#4!!dVo_JUPxm)H47fS%e{=H;cVe*AZw5k-?9EpU)Poj)JUp1m>?ez1PH zKh#NwS~y~7%%}O0qp#-PZ}>%#Z`CXlwDj#(>F`Wbnm|D6OjAd+P?7eA`zy;q@tcV| z14B&5l8y1mNrd?euO=gNU#PuZf58OlH!-rjCJdj90mnnmT1}+%=bAn;fExCp_?so5 zWLtQzEi_m6;tuQ%`^aaZEP{!SfDrBhb!O)iJwRN)7?x)RgL*efd`3g>HdIiz2oJBK zG_y65h=ynB{};rRMqYg_&H4Hx{nlBf;Eyr0!7P6bb>t^=Yo6)wE$0mi#=+Kp^i~Pk znl5_bGvz2?*~8-qaLZA*rlsJxR7#4BsAnYro#7%t8}&&%GGF(c^oN8;*3BBg5ng)Mt5opidK6j4n_@tS?{`B zTwfhPQEM03*mpzy=151vzJUXq>L3nJRpq^cxrg*YWOd;yTQbu4GFy;_kUgW<5E;3O zHxoHRSWqt@v`4EP=OhM0Th;ete=bwoSg$~P0gP>Q-_=@R+r|W^H$(sh;lq} z$u#G7N9bDNj+B&q3`udgf=rX9j6-nm=dbre66A!pKOLY3RHe9kMJ}U8zBIczOanhgKYbzGtG;+Bz`%74Ixv!KI z6o9-&O1N7r9pGCgEMmZ6xBd-x%9&EPPw=6+H-9#|py-Zcix2fOkQ1__3c3i!Z(G9fn_(a}F{DVNGv zuHb#9z8tkKhI|K7(LGKE6hhZZjSlFrxtb&e;Wm&p@Oq9@!{}<*!fe1mHJ1NsIiai^JC~ZXl=#+aF*}lv1vXX{#?fM^5!GkOMHFxessV3*%E&iw}WwN zg$)yhu7;WuV7odk?+SW>R3_JtI}B^hgnN!J+=0Q2I|$r2^sDJNL`oKD7w&s9L(m(F zbF5o}X(}c#|8`s6^~MgAU=Qa0GM5b{p;E3Yp8oruv zs^j|8wZGrZ8sRK(@bjF2eLyjzaX;c5;gXsaF7bxgpt_?>t}S;c)cJj(EIa7`y*T;4 ziZhi2@=;lpn?O}cBJK0_t}>Kpb(kw;Cf2wHJ34`IF&Fq! znSM6y?4UGpDp6?O#|0c=nIJ42MG5RaY6Uh7S$-qFckpTk8UFTrU6=vG6S2=^4uHg~ zCSoeh*uO3pCw!9JbQWo4QaYo(k#;mZ5M_eMrMBjW0Rp-H;Gn4*VcO~6k&Bxvlb%>C zEcQU<6@s(+lM0)VZ+L#0m}otvPYl!|h;}yexfK!}-AIvG!WT}d3<9H#*Vw}LT?EvQ zjT)Pd)n*NkN4|wvamWgHatUvrn2M9;G`*_QET-_Ozjal9?3xTTt<&apXYB8vybva( zcBi^`=lwepWts^O-{7#9_!c-Hj7q{6ofY#6LKU`WON{&HlVXe!!1|ylPeEGh_(?M= zgZFhsb#i10DOer!2H#3J$}^&G)s;}88HwZxl_f;!0BdEXx8Sj>5Fg^4_*3Ar+%n|> zq0eGxUhe6F&1%f)uMP7LNKkiOv9B@-R^l8=@pqW+H_?kDv0}u&)*{M?RXPKZ&X2@T zbOpk05)*=~_>4di^NT!Gxxg&oHF3iq+cIMs@KGzlGcsZTrzYd+xeCpAt+wA9{?>3( zcbb4-GNSQ_wa7;4;MX+13tEVp0;ZOnz3Iv6Ojab4M5G_>O{% zvS+RUDB=AD&-gKx;XSS}mR)JmW?wrw5MdiUl(GG=*!ZP1l8tQbNp3K-PXn>3O5xCQ zpORdY?T{F;n^d9Oio--+wh(>cV5dk};hhCPEb@9@>x?7uO*D%9^Cvc%rZ&aJASlnAQMNOyYV@N<|$;L)arKzapn`9Svk-w6bfX z;ZY^?il9pa>L)uo^~Sp<)MDmQVWV zp&YumASL&hGN!Vz2+Dg3I*8bJ<)65E_>hl!=)RJ@N{ZEI#?PCHn?SN31tE5}eW%ma z>7bl0Css}Dg6IOltto^xt2;eie zQ55R#PV1r9*xpxTx8^D7BTAu=!yBJ5DHQlV_;yG7rHjh;*!7M2=FP08&VA;|v(ZjG zIMb~&RXVH!8MF~Hu+6KPG#PYOiO86^IiwmQnTds^j=Vin&;I^h9iFIH(XcWhp6^J_ zh`a*+w0hB|TC4rbl3pqjN{@|`Wn{sR#5h6>0*^EPO0AhKMT`kfQ`KKHU_kc~}v5+iJU*;bkq5l~W0I*r<{IsT@rKDb?p!_^XF=^`o zcW~sPEFo>jOrO_eP=g)amuq?8R@RPOg#_qMT#;1{Kr)|8eP5UIfNj-gRg6MyQg^g4nDcw{#xDODPJQrqS9~dH>=j<{Ke#|{I@2Q7 z>F?GjRi9F$#h~4^@~Lbt05Zoeq3mc``4}va0BiCL(*G1uQ{v4a`Gf@G1T~k*EAUP5 zB_}v{P6xW}iZ6~ZBkw$qmiX#5r7`%eb82FE7nboLXmMII2a<$H!DR?=yz%=jLx)zO zDA;oVN#~sJFpumdjV;@KOqFB{*_LVn#VVRdSd7vh9-laR?{?n8%vsYWwf0nr+(t6B zQK~FxAm&}2UUZEeUA6wFiAh)V6ablS-b$+KULYOxquOik(77q8qCL}eW4m#?0>Zy- zFOHW?&~;r=!)h@$w)$eVW1^8OU8l52e`ua2^*({MyEoxeWtKT-#$qL5`sBPCU?N$} zK+g$Bk+_|zf`(=VwyxqZJsi#_AL+(%sgWKx9?ftsQ$qlrR=w|13_5UUi-BsZEMo*a zc0>S(?ceu-07|-wD|>YE1+9J-7remx9a_6-zoI9karg-EJsk|j*0aFrMuw{GlbVzU zvWCBupzfBEs-;y0Fmb=5#u^PChyGjeEWp%X=hc|1AF0!&OU>hGK_qWS`rA$6FHf9d(D1i~*Biy9bfvH>K+KC8jcBs2x&LD51 zH$3uG5U~2{Hb44!0sueesZyxHOtmwW)w+q}+swaoxXnOdyeLlQclwH@ux&6J^~|cq z;o-%qk2BkFq<)K_DQ5yWqv#dSCw7rKsjcJ~%yh$9=w0$d2?(@R^O<$eVkZ_@FrfYq zQCvS*HR4iPVsjmg5A+K-S<^>& zqk0rkUSU#eqGYane%7%0QT7#^VSd}%er(#Mm_GCyj5pO;HLuKm`xUtzwKj^s0~F*= z*QLpEt|;xP4o9wf&dkg~NOi|NZ%BAM?be3wFr~qO+Zut~`C3 zZ4b_>wHRhL-tRB91SBWSh;NQM+2ta%84%rUEqjOeSv`^|ue^*Le?|yLFd6cD?^$m# zY7a<@zDAt||0a%vM{dx?PPYHiR{asjex_YMqS(lrKk%a*^frNFRMM?&(kS)5(Qffm zrd`s|&j?4qsO7w$Pcl{AhFo&jm!6g;7AMO(Q|U6Wfc{qx+#AbH=;ekMe9wj-I#m|^ zssJ=pzJ^a5rtKQMlk9QIyoS=d{J&mf!~_79Sn=14S^!#=&o+zI_(|#LloN5i3FLsE;^{o#Y985mb;8^tEGZyh z&>S+R>q2kBq8aR2m70`@%Jw;t*gO)BQ<8jC1NU>CdcFG?7o?TGBPRST?O~ahsQmn^ zFQIFpDt*Y5;{#8TW>gftp$rq1|doXI;n3 zinck!2Q`?-kFlE!uRfluaPHoCGkR4Po4Ga}30e_kNG6GnHQMfP77NIc+s+H-`%t9n z5`vb^VT_*#QLF&y1xuveqAi7;gS)OP*R8K~@iIGd8=rxCM>hTgf31dnt~-rH^6w#Q zg5947(W92gR-(MvsSa9j3fBhFp7nLm1)w_`qAp=?jzcp&nd0x`7_~4TVP$Zh@>amv z6y!Wg&vVhbO+9;V@=d$?BL$W?IiHp!eLp?LB%8C+5;Pb{FVG_(WEo`E(YPh!=e23? ziFn(8916{jDub9qA{-c~7`}74s0Bbe2oDPj-YoG6rLY?&9sh-KJ-3ne3^Q&UoYnq| z6uT6T@4uw4!PtR8lLu;#?nnz=Z-J@AC~7Z6H%I5}>|yn!wNL-MrSPqesvZJz(h2~K zz*2)lV=cplA5Tvba;gQ1cv)_F40V_HL!1fJkByOPk?-O2A;xa>hDv59NkP50AL&LR z&*QIJkX~x8wCh^^1j>Gm_Zkyx?WZ=;w!*I{yQGlGUh>yE4L(kq{4?yoDu#1YooS>L?M(% z^LOJ_Nnqz+FH#LITAcRobBmDwNa zBZVh(A_=Iq%4fugn^FgOkeP&SYl24VqI4dH5;{i{d21>SCT4L*f6-LzUFVGGUO0+u zxt+}+43?;gz72|#m8-7Th@iVQA5}G&q1G&o!kQwX)gBx~#@jxv6_pq+RFr)e@1OOF zuS{bD&DnhiqgoV$ZcX#-=E} zm^D_#;57g7v&UWk>t%u8{XCk<)*Vz1-i-k3 zsbpFw4vEEcWQ={r=Up38Bls37y1c_ov_Rr>ju#L=3v+IXDGO&Rz9LAF@Aj*_&v>4* zUY$mv&DFr%h=J&6T1<9(Q!A*nt0d~kyg?a9pa zSaZ=oT1sYG_~1c;QvYRo{IPUzZ?U;nrSWQ%0(PL={kTB^QdND3*W#5V>&4#`6TQa% zT(iHA)7ajE4f%aZ8%<5c8#q!0I$Z4{JQPzmXaNG(yu6I+(!rBww%zfP**%59?kauj zCZb{2_agBVmG#Wb!E*^4Uar5Q(=P|mqo_F)TBV>nzdpqxrNysD+}_2Lk5%s$0>yC- z*y(p}T-{5C&W?>p2$3;wsbh=DgAXthen?5}4tOH^e4~w1D71oueQJ=C@KGeNY+9)~ zxkKB^YFanVQzFxZX^9^=1NjEgZ$`37p*AKL$wO5g@79NH5md%w030 zfd>vN$*_wISDYTf!zUgWSww3htpPw^5HhjeyBa0^#uB>S*T8MB8^IE?u zx0?e3vHZF9N3;WfpcA;iz(N*S-xk8;5e`|AlclkUu$@(lMl* z_yhVwDziDXRxCCLz|rhuqSX%L&9a-Xal#gGSqQChJM(l08R#9qB$9s=H!;ELyeX^- zxDoL(*r@2kD!tpzSR0P$$DCDvx@vuu*ai(|ZXTvN%E4l3w~dX?H>vM-Jm{@5%xJry zKuf>>MU>&Eaah6W^AZ@Fki7pYHD+EnD=I78##y39p$XBMwsE!gYayAapxUz7c@bybhnS;_TFVBpvXpl8 zWQi2IHaDhU6)!F9@LG_L-#oI9a&;5u$s^cUTJB-!L5A`aE;`nws&W(TddM4b;_t20 zw=)Ae52^f=r>(B`ni^2Qmh=x<1gH`!^l-w(5V^5nkBB_*KMV(o>gvLA+AqmSTQH4L z$`4#zYCV4R3uIlf$0PN)8gUpYf>rz3yf>AzBL+6TpnN+5`?z0Uk^z(PdF=@rX4e`| z6kdjM-h#=J#F)N8l?Khu&ThZKk>CWeCr;IWk3r4%V`tbGk=lKX5$6rWP_Xg}4ZvR( zf{#Ey@c&&uVyRil&SS7UXt=d)qWv4d6IG!Y>HCH= z>F_YUQ;b%S28rL_f+L?dSVmv2p6ay<#`{{r`B|ywc^=rMW8Z`D*L-#A#396~uBzN0 zK3DM*JA@k#ICS)7l}|O­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

ElyjRYCv( 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 literal 0 HcmV?d00001 diff --git a/modules/private/websites/capitaines/production.nix b/modules/private/websites/capitaines/production.nix new file mode 100644 index 00000000..57d87873 --- /dev/null +++ b/modules/private/websites/capitaines/production.nix @@ -0,0 +1,44 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.capitaines.production; + env = myconfig.env.websites.capitaines; + webappName = "capitaines_mastodon"; + root = "/run/current-system/webapps/${webappName}"; + siteDir = ./mastodon_static; +in { + options.myServices.websites.capitaines.production.enable = lib.mkEnableOption "enable Capitaines's website"; + + config = lib.mkIf cfg.enable { + myServices.websites.webappDirs."${webappName}" = siteDir; + + services.websites.production.vhostConfs.capitaines_mastodon = { + certName = "capitaines"; + certMainHost = "mastodon.capitaines.fr"; + hosts = [ "mastodon.capitaines.fr" ]; + root = root; + extraConfig = [ + '' + ErrorDocument 404 /index.html + + DirectoryIndex index.html + Options Indexes FollowSymLinks MultiViews Includes + Require all granted + + '' + ]; + }; + + services.websites.production.vhostConfs.capitaines = { + certName = "capitaines"; + addToCerts = true; + hosts = [ "capitaines.fr" ]; + root = "/run/current-system/webapps/_www"; + extraConfig = [ '' + + DirectoryIndex index.htm + Require all granted + + '' ]; + }; + }; +} diff --git a/modules/private/websites/chloe/builder.nix b/modules/private/websites/chloe/builder.nix new file mode 100644 index 00000000..f65e9a95 --- /dev/null +++ b/modules/private/websites/chloe/builder.nix @@ -0,0 +1,102 @@ +{ apacheUser, apacheGroup, chloe, config }: +rec { + app = chloe.override { inherit (config) environment; }; + phpFpm = rec { + serviceDeps = [ "mysql.service" ]; + socket = "/var/run/phpfpm/chloe-${app.environment}.sock"; + pool = '' + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "${app.spipConfig}:${configDir}:${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + keys = [{ + dest = "webapps/${app.environment}-chloe"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + SetEnv SPIP_CONFIG_DIR "${configDir}" + SetEnv SPIP_VAR_DIR "${app.varDir}" + SetEnv SPIP_SITE "chloe-${app.environment}" + SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu" + SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu" + SetEnv SPIP_LDAP_SEARCH_DN "${config.ldap.dn}" + SetEnv SPIP_LDAP_SEARCH_PW "${config.ldap.password}" + SetEnv SPIP_LDAP_SEARCH "${config.ldap.search}" + SetEnv SPIP_MYSQL_HOST "${config.mysql.host}" + SetEnv SPIP_MYSQL_PORT "${config.mysql.port}" + SetEnv SPIP_MYSQL_DB "${config.mysql.name}" + SetEnv SPIP_MYSQL_USER "${config.mysql.user}" + SetEnv SPIP_MYSQL_PASSWORD "${config.mysql.password}" + ''; + }]; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "chloe_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Include /var/secrets/webapps/${app.environment}-chloe + + RewriteEngine On + ${if app.environment == "prod" then '' + RewriteRule ^/news.rss /spip.php?page=backend&id_rubrique=1 + '' else ""} + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + DirectoryIndex index.php index.htm index.html + Options -Indexes +FollowSymLinks +MultiViews +Includes + Include ${root}/htaccess.txt + + AllowOverride AuthConfig FileInfo Limit + Require all granted + + + + Require all denied + + + + Require all denied + + + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=chloe.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + '' else '' + Use Stats osteopathe-cc.fr + ''} + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; + configDir = ./config; +} diff --git a/modules/private/websites/chloe/config/chmod.php b/modules/private/websites/chloe/config/chmod.php new file mode 100644 index 00000000..aae16cdf --- /dev/null +++ b/modules/private/websites/chloe/config/chmod.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/modules/private/websites/chloe/config/connect.php b/modules/private/websites/chloe/config/connect.php new file mode 100644 index 00000000..18b09330 --- /dev/null +++ b/modules/private/websites/chloe/config/connect.php @@ -0,0 +1,15 @@ + diff --git a/modules/private/websites/chloe/config/ldap.php b/modules/private/websites/chloe/config/ldap.php new file mode 100644 index 00000000..825b7edb --- /dev/null +++ b/modules/private/websites/chloe/config/ldap.php @@ -0,0 +1,9 @@ + array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',); +$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH"); +?> diff --git a/modules/private/websites/chloe/integration.nix b/modules/private/websites/chloe/integration.nix new file mode 100644 index 00000000..c42a4282 --- /dev/null +++ b/modules/private/websites/chloe/integration.nix @@ -0,0 +1,36 @@ +{ lib, pkgs, config, myconfig, ... }: +let + chloe = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) chloe; + config = myconfig.env.websites.chloe.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.chloe.integration; +in { + options.myServices.websites.chloe.integration.enable = lib.mkEnableOption "enable Chloe's website in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = chloe.keys; + systemd.services.phpfpm-chloe_dev.after = lib.mkAfter chloe.phpFpm.serviceDeps; + systemd.services.phpfpm-chloe_dev.wants = chloe.phpFpm.serviceDeps; + services.phpfpm.pools.chloe_dev = { + listen = chloe.phpFpm.socket; + extraConfig = chloe.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + '' + extension=${pkgs.php}/lib/php/extensions/mysqli.so + ''; + }; + system.activationScripts.chloe_dev = chloe.activationScript; + myServices.websites.webappDirs."${chloe.apache.webappName}" = chloe.app.webRoot; + services.websites.integration.modules = chloe.apache.modules; + services.websites.integration.vhostConfs.chloe = { + certName = "eldiron"; + addToCerts = true; + hosts = ["chloe.immae.eu" ]; + root = chloe.apache.root; + extraConfig = [ chloe.apache.vhostConf ]; + }; + }; +} diff --git a/modules/private/websites/chloe/production.nix b/modules/private/websites/chloe/production.nix new file mode 100644 index 00000000..0bf2d8fd --- /dev/null +++ b/modules/private/websites/chloe/production.nix @@ -0,0 +1,38 @@ +{ lib, pkgs, config, myconfig, ... }: +let + chloe = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) chloe; + config = myconfig.env.websites.chloe.production; + apacheUser = config.services.httpd.Prod.user; + apacheGroup = config.services.httpd.Prod.group; + }; + + cfg = config.myServices.websites.chloe.production; +in { + options.myServices.websites.chloe.production.enable = lib.mkEnableOption "enable Chloe's website in production"; + + config = lib.mkIf cfg.enable { + secrets.keys = chloe.keys; + services.webstats.sites = [ { name = "osteopathe-cc.fr"; } ]; + + systemd.services.phpfpm-chloe_prod.after = lib.mkAfter chloe.phpFpm.serviceDeps; + systemd.services.phpfpm-chloe_prod.wants = chloe.phpFpm.serviceDeps; + services.phpfpm.pools.chloe_prod = { + listen = chloe.phpFpm.socket; + extraConfig = chloe.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + '' + extension=${pkgs.php}/lib/php/extensions/mysqli.so + ''; + }; + system.activationScripts.chloe_prod = chloe.activationScript; + myServices.websites.webappDirs."${chloe.apache.webappName}" = chloe.app.webRoot; + services.websites.production.modules = chloe.apache.modules; + services.websites.production.vhostConfs.chloe = { + certName = "chloe"; + certMainHost = "osteopathe-cc.fr"; + hosts = ["osteopathe-cc.fr" "www.osteopathe-cc.fr" ]; + root = chloe.apache.root; + extraConfig = [ chloe.apache.vhostConf ]; + }; + }; +} diff --git a/modules/private/websites/commons/adminer.nix b/modules/private/websites/commons/adminer.nix new file mode 100644 index 00000000..98ab4619 --- /dev/null +++ b/modules/private/websites/commons/adminer.nix @@ -0,0 +1,21 @@ +{}: +rec { + phpFpm = { + socket = "/var/run/phpfpm/adminer.sock"; + }; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "_adminer"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /adminer ${root} + + DirectoryIndex index.php + Require all granted + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ''; + }; +} diff --git a/modules/private/websites/connexionswing/builder.nix b/modules/private/websites/connexionswing/builder.nix new file mode 100644 index 00000000..b4b04cb2 --- /dev/null +++ b/modules/private/websites/connexionswing/builder.nix @@ -0,0 +1,163 @@ +{ apacheUser, apacheGroup, connexionswing, pkgs, phpPackages, config }: +rec { + app = connexionswing.override { inherit (config) environment; }; + keys = [{ + dest = "webapps/${app.environment}-connexionswing"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_host: ${config.mysql.host} + database_port: ${config.mysql.port} + database_name: ${config.mysql.name} + database_user: ${config.mysql.user} + database_password: ${config.mysql.password} + database_server_version: ${pkgs.mariadb.mysqlVersion} + mailer_transport: sendmail + mailer_host: null + mailer_user: null + mailer_password: null + subscription_email: ${config.email} + allow_robots: true + secret: ${config.secret} + ${if app.environment == "prod" then '' + services: + swiftmailer.mailer.default.transport: + class: Swift_SendmailTransport + arguments: ['/run/wrappers/bin/sendmail -bs'] + '' else ""} + ''; + }]; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u ${apacheUser} ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-connexionswing > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "mysql.service" ]; + socket = "/var/run/phpfpm/connexionswing-${app.environment}.sock"; + phpConfig = '' + extension=${phpPackages.imagick}/lib/php/extensions/imagick.so + ''; + pool = '' + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/secrets/webapps/${app.environment}-connexionswing:${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "connexionswing_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + Options FollowSymLinks + AllowOverride None + Require all granted + + + + Options FollowSymLinks + AllowOverride None + Require all granted + + + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=connexionswing.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + DirectoryIndex app_dev.php + + + Options -MultiViews + + + + RewriteEngine On + + RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ + RewriteRule ^(.*) - [E=BASE:%1] + + # Maintenance script + RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f + RewriteCond %{SCRIPT_FILENAME} !maintenance.php + RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] + ErrorDocument 503 /maintenance.php + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} . + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ - [L] + + # Rewrite all other queries to the front controller. + RewriteRule ^ %{ENV:BASE}/app_dev.php [L] + + + + '' else '' + Use Stats connexionswing.com + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + ''} + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} \ + ${app.varDir}/medias \ + ${app.varDir}/uploads \ + ${app.varDir}/var + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; +} diff --git a/modules/private/websites/connexionswing/integration.nix b/modules/private/websites/connexionswing/integration.nix new file mode 100644 index 00000000..1d8488a9 --- /dev/null +++ b/modules/private/websites/connexionswing/integration.nix @@ -0,0 +1,36 @@ +{ lib, pkgs, config, myconfig, ... }: +let + connexionswing = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) connexionswing; + config = myconfig.env.websites.connexionswing.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.connexionswing.integration; +in { + options.myServices.websites.connexionswing.integration.enable = lib.mkEnableOption "enable Connexionswing's website in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = connexionswing.keys; + systemd.services.phpfpm-connexionswing_dev.after = lib.mkAfter connexionswing.phpFpm.serviceDeps; + systemd.services.phpfpm-connexionswing_dev.wants = connexionswing.phpFpm.serviceDeps; + systemd.services.phpfpm-connexionswing_dev.preStart = lib.mkAfter connexionswing.phpFpm.preStart; + services.phpfpm.pools.connexionswing_dev = { + listen = connexionswing.phpFpm.socket; + extraConfig = connexionswing.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + connexionswing.phpFpm.phpConfig; + }; + system.activationScripts.connexionswing_dev = connexionswing.activationScript; + myServices.websites.webappDirs."${connexionswing.apache.webappName}" = connexionswing.app.webRoot; + services.websites.integration.modules = connexionswing.apache.modules; + services.websites.integration.vhostConfs.connexionswing = { + certName = "eldiron"; + addToCerts = true; + hosts = ["connexionswing.immae.eu" "sandetludo.immae.eu" ]; + root = connexionswing.apache.root; + extraConfig = [ connexionswing.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/connexionswing/production.nix b/modules/private/websites/connexionswing/production.nix new file mode 100644 index 00000000..555f129f --- /dev/null +++ b/modules/private/websites/connexionswing/production.nix @@ -0,0 +1,38 @@ +{ lib, pkgs, config, myconfig, ... }: +let + connexionswing = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) connexionswing; + config = myconfig.env.websites.connexionswing.production; + apacheUser = config.services.httpd.Prod.user; + apacheGroup = config.services.httpd.Prod.group; + }; + + cfg = config.myServices.websites.connexionswing.production; +in { + options.myServices.websites.connexionswing.production.enable = lib.mkEnableOption "enable Connexionswing's website in production"; + + config = lib.mkIf cfg.enable { + secrets.keys = connexionswing.keys; + services.webstats.sites = [ { name = "connexionswing.com"; } ]; + + systemd.services.phpfpm-connexionswing_prod.after = lib.mkAfter connexionswing.phpFpm.serviceDeps; + systemd.services.phpfpm-connexionswing_prod.wants = connexionswing.phpFpm.serviceDeps; + systemd.services.phpfpm-connexionswing_prod.preStart = lib.mkAfter connexionswing.phpFpm.preStart; + services.phpfpm.pools.connexionswing_prod = { + listen = connexionswing.phpFpm.socket; + extraConfig = connexionswing.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + connexionswing.phpFpm.phpConfig; + }; + system.activationScripts.connexionswing_prod = connexionswing.activationScript; + myServices.websites.webappDirs."${connexionswing.apache.webappName}" = connexionswing.app.webRoot; + services.websites.production.modules = connexionswing.apache.modules; + services.websites.production.vhostConfs.connexionswing = { + certName = "connexionswing"; + certMainHost = "connexionswing.com"; + hosts = ["connexionswing.com" "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ]; + root = connexionswing.apache.root; + extraConfig = [ connexionswing.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/default.nix b/modules/private/websites/default.nix new file mode 100644 index 00000000..8b02977c --- /dev/null +++ b/modules/private/websites/default.nix @@ -0,0 +1,265 @@ +{ lib, pkgs, config, myconfig, ... }: +let + www_root = "/run/current-system/webapps/_www"; + theme_root = "/run/current-system/webapps/_theme"; + apacheConfig = { + gzip = { + modules = [ "deflate" "filter" ]; + extraConfig = '' + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + ''; + }; + macros = { + modules = [ "macro" ]; + }; + stats = { + extraConfig = '' + + Alias /webstats ${config.services.webstats.dataDir}/%{domain} + + DirectoryIndex index.html + AllowOverride None + Require all granted + + + Use LDAPConnect + Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu + + + ''; + }; + ldap = { + modules = [ "ldap" "authnz_ldap" ]; + extraConfig = '' + + LDAPSharedCacheSize 500000 + LDAPCacheEntries 1024 + LDAPCacheTTL 600 + LDAPOpCacheEntries 1024 + LDAPOpCacheTTL 600 + + + Include /var/secrets/apache-ldap + ''; + }; + global = { + extraConfig = (pkgs.webapps.apache-default.override { inherit www_root;}).apacheConfig; + }; + apaxy = { + extraConfig = (pkgs.webapps.apache-theme.override { inherit theme_root; }).apacheConfig; + }; + http2 = { + modules = [ "http2" ]; + extraConfig = '' + Protocols h2 http/1.1 + ''; + }; + customLog = { + extraConfig = '' + LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost + ''; + }; + }; + makeModules = lib.lists.flatten (lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig); + makeExtraConfig = (builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig)); +in +{ + options.myServices.websites.webappDirs = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + description = '' + Webapp paths to create in /run/current-system/webapps + ''; + default = {}; + }; + + config = { + users.users.wwwrun.extraGroups = [ "keys" ]; + networking.firewall.allowedTCPPorts = [ 80 443 ]; + + nixpkgs.overlays = [ (self: super: rec { + #openssl = self.openssl_1_1; + php = php72; + php72 = (super.php72.override { + mysql.connector-c = self.mariadb; + config.php.mysqlnd = false; + config.php.mysqli = false; + }).overrideAttrs(old: rec { + # Didn't manage to build with mysqli + mysql_config connector + configureFlags = old.configureFlags ++ [ + "--with-mysqli=shared,mysqlnd" + ]; + # preConfigure = (old.preConfigure or "") + '' + # export CPPFLAGS="$CPPFLAGS -I${pkgs.mariadb}/include/mysql/server"; + # sed -i -e 's/#include "mysqli_priv.h"/#include "mysqli_priv.h"\n#include /' \ + # ext/mysqli/mysqli.c ext/mysqli/mysqli_prop.c + # ''; + }); + phpPackages = super.php72Packages.override { inherit php; }; + }) ]; + + secrets.keys = [{ + dest = "apache-ldap"; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + + + AuthLDAPURL ldap://ldap.immae.eu:389/dc=immae,dc=eu STARTTLS + AuthLDAPBindDN cn=httpd,ou=services,dc=immae,dc=eu + AuthLDAPBindPassword "${myconfig.env.httpd.ldap.password}" + AuthType Basic + AuthName "Authentification requise (Acces LDAP)" + AuthBasicProvider ldap + + + ''; + }]; + + system.activationScripts = { + httpd = '' + install -d -m 0755 ${config.security.acme.directory}/acme-challenge + install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions + ''; + }; + + services.phpfpm = { + phpPackage = pkgs.php; + phpOptions = '' + session.save_path = "/var/lib/php/sessions" + post_max_size = 20M + ; 15 days (seconds) + session.gc_maxlifetime = 1296000 + ; 30 days (minutes) + session.cache_expire = 43200 + ''; + extraConfig = '' + log_level = notice + ''; + }; + + services.websites.production = { + enable = true; + adminAddr = "httpd@immae.eu"; + httpdName = "Prod"; + ips = + let ips = myconfig.env.servers.eldiron.ips.production; + in [ips.ip4] ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + }; + + services.websites.integration = { + enable = true; + adminAddr = "httpd@immae.eu"; + httpdName = "Inte"; + ips = + let ips = myconfig.env.servers.eldiron.ips.integration; + in [ips.ip4] ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + }; + + services.websites.tools = { + enable = true; + adminAddr = "httpd@immae.eu"; + httpdName = "Tools"; + ips = + let ips = myconfig.env.servers.eldiron.ips.main; + in [ips.ip4] ++ (ips.ip6 or []); + modules = makeModules; + extraConfig = makeExtraConfig ++ + [ '' + RedirectMatch ^/licen[cs]es?_et_tip(ping)?$ https://www.immae.eu/licences_et_tip.html + RedirectMatch ^/licen[cs]es?_and_tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/licen[cs]es?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html + RedirectMatch ^/(mentions|mentions_legales|legal)$ https://www.immae.eu/mentions.html + RedirectMatch ^/CGU$ https://www.immae.eu/CGU + '' + ]; + nosslVhost = { + enable = true; + host = "nossl.immae.eu"; + }; + fallbackVhost = { + certName = "eldiron"; + hosts = ["eldiron.immae.eu" ]; + root = www_root; + extraConfig = [ "DirectoryIndex index.htm" ]; + }; + }; + + system.extraSystemBuilderCmds = lib.mkIf (builtins.length (builtins.attrValues config.myServices.websites.webappDirs) > 0) '' + mkdir -p $out/webapps + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (name: path: "ln -s ${path} $out/webapps/${name}") config.myServices.websites.webappDirs)} + ''; + + myServices.websites = { + webappDirs = { + _www = pkgs.webapps.apache-default.www; + _theme = pkgs.webapps.apache-theme.theme; + }; + + aten.integration.enable = true; + aten.production.enable = true; + + capitaines.production.enable = true; + + chloe.integration.enable = true; + chloe.production.enable = true; + + connexionswing.integration.enable = true; + connexionswing.production.enable = true; + + denisejerome.production.enable = true; + + emilia.production.enable = true; + + florian.app.enable = true; + florian.integration.enable = true; + florian.production.enable = true; + + immae.production.enable = true; + immae.release.enable = true; + immae.temp.enable = true; + + leila.production.enable = true; + + ludivinecassal.integration.enable = true; + ludivinecassal.production.enable = true; + + nassime.production.enable = true; + + naturaloutil.production.enable = true; + + papa.surveillance.enable = true; + + piedsjaloux.integration.enable = true; + piedsjaloux.production.enable = true; + + tools.cloud.enable = true; + tools.dav.enable = true; + tools.db.enable = true; + tools.diaspora.enable = true; + tools.etherpad-lite.enable = true; + tools.git.enable = true; + tools.mastodon.enable = true; + tools.mediagoblin.enable = true; + tools.peertube.enable = true; + tools.tools.enable = true; + }; + }; +} diff --git a/modules/private/websites/denisejerome/production.nix b/modules/private/websites/denisejerome/production.nix new file mode 100644 index 00000000..b5aff942 --- /dev/null +++ b/modules/private/websites/denisejerome/production.nix @@ -0,0 +1,31 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.denisejerome.production; + varDir = "/var/lib/ftp/denisejerome"; + env = myconfig.env.websites.denisejerome; +in { + options.myServices.websites.denisejerome.production.enable = lib.mkEnableOption "enable Denise Jerome's website"; + + config = lib.mkIf cfg.enable { + services.webstats.sites = [ { name = "denisejerome.piedsjaloux.fr"; } ]; + + services.websites.production.vhostConfs.denisejerome = { + certName = "denisejerome"; + certMainHost = "denisejerome.piedsjaloux.fr"; + hosts = ["denisejerome.piedsjaloux.fr" ]; + root = varDir; + extraConfig = [ + '' + Use Stats denisejerome.piedsjaloux.fr + + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride AuthConfig + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/emilia/moodle/pause.html b/modules/private/websites/emilia/moodle/pause.html new file mode 100644 index 00000000..8b99c59f --- /dev/null +++ b/modules/private/websites/emilia/moodle/pause.html @@ -0,0 +1,48 @@ + + + + Pause + + + + +

+

Site web en pause !

+
+

Le site et les cours de photographie sont actuellement en pause.

+
+
+ + diff --git a/modules/private/websites/emilia/production.nix b/modules/private/websites/emilia/production.nix new file mode 100644 index 00000000..13f008f7 --- /dev/null +++ b/modules/private/websites/emilia/production.nix @@ -0,0 +1,66 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.emilia.production; + env = myconfig.env.websites.emilia; + varDir = "/var/lib/moodle"; + siteDir = ./moodle; + webappName = "emilia_moodle"; + root = "/run/current-system/webapps/${webappName}"; + # php_admin_value[upload_max_filesize] = 50000000 + # php_admin_value[post_max_size] = 50000000 + configFile = '' + dbtype = 'pgsql'; + $CFG->dblibrary = 'native'; + $CFG->dbhost = '${env.postgresql.host}'; + $CFG->dbname = '${env.postgresql.database}'; + $CFG->dbuser = '${env.postgresql.user}'; + $CFG->dbpass = '${env.postgresql.password}'; + $CFG->prefix = 'mdl_'; + $CFG->dboptions = array ( + 'dbpersist' => 0, + 'dbport' => '${env.postgreesql.port}', + 'dbsocket' => '${env.postgresql.password}', + ); + + $CFG->wwwroot = 'https://www.saison-photo.org'; + $CFG->dataroot = '${varDir}'; + $CFG->admin = 'admin'; + + $CFG->directorypermissions = 02777; + + require_once(__DIR__ . '/lib/setup.php'); + + // There is no php closing tag in this file, + // it is intentional because it prevents trailing whitespace problems! + ''; +in { + options.myServices.websites.emilia.production.enable = lib.mkEnableOption "enable Emilia's website"; + + config = lib.mkIf cfg.enable { + system.activationScripts.emilia = '' + install -m 0755 -o wwwrun -g wwwrun -d ${varDir} + ''; + myServices.websites.webappDirs."${webappName}" = siteDir; + services.websites.production.vhostConfs.emilia = { + certName = "emilia"; + certMainHost = "saison-photo.org"; + hosts = [ "saison-photo.org" "www.saison-photo.org" ]; + root = root; + extraConfig = [ + '' + + DirectoryIndex pause.html + Options Indexes FollowSymLinks MultiViews Includes + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/florian/app.nix b/modules/private/websites/florian/app.nix new file mode 100644 index 00000000..3a6d1522 --- /dev/null +++ b/modules/private/websites/florian/app.nix @@ -0,0 +1,36 @@ +{ lib, pkgs, config, myconfig, ... }: +let + adminer = pkgs.callPackage ../commons/adminer.nix {}; + + tellesflorian = pkgs.callPackage ./builder_app.nix { + inherit (pkgs.webapps) tellesflorian; + config = myconfig.env.websites.tellesflorian.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.florian.app; +in { + options.myServices.websites.florian.app.enable = lib.mkEnableOption "enable Florian's app in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = tellesflorian.keys; + systemd.services.phpfpm-tellesflorian_dev.after = lib.mkAfter tellesflorian.phpFpm.serviceDeps; + systemd.services.phpfpm-tellesflorian_dev.wants = tellesflorian.phpFpm.serviceDeps; + systemd.services.phpfpm-tellesflorian_dev.preStart = lib.mkAfter tellesflorian.phpFpm.preStart; + services.phpfpm.poolConfigs.tellesflorian_dev = tellesflorian.phpFpm.pool; + system.activationScripts.tellesflorian_dev = tellesflorian.activationScript; + myServices.websites.webappDirs."${tellesflorian.apache.webappName}" = tellesflorian.app.webRoot; + services.websites.integration.modules = adminer.apache.modules ++ tellesflorian.apache.modules; + services.websites.integration.vhostConfs.tellesflorian = { + certName = "eldiron"; + addToCerts = true; + hosts = ["app.tellesflorian.com" ]; + root = tellesflorian.apache.root; + extraConfig = [ + tellesflorian.apache.vhostConf + adminer.apache.vhostConf + ]; + }; + }; +} diff --git a/modules/private/websites/florian/builder_app.nix b/modules/private/websites/florian/builder_app.nix new file mode 100644 index 00000000..e521f6eb --- /dev/null +++ b/modules/private/websites/florian/builder_app.nix @@ -0,0 +1,152 @@ +{ apacheUser, apacheGroup, tellesflorian, config }: +rec { + app = tellesflorian.override { inherit (config) environment; }; + keys = [ + { + dest = "webapps/${app.environment}-tellesflorian-passwords"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + invite:${config.invite_passwords} + ''; + } + { + dest = "webapps/${app.environment}-tellesflorian"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_host: ${config.mysql.host} + database_port: ${config.mysql.port} + database_name: ${config.mysql.name} + database_user: ${config.mysql.user} + database_password: ${config.mysql.password} + mailer_transport: smtp + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + secret: ${config.secret} + ''; + } + ]; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-tellesflorian > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "mysql.service" ]; + socket = "/var/run/phpfpm/floriantelles-${app.environment}.sock"; + pool = '' + listen = ${socket} + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "/var/secrets/webapps/${app.environment}-tellesflorian:${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "florian_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ${if app.environment == "dev" then '' + + AuthBasicProvider file ldap + Use LDAPConnect + Require ldap-group cn=app.tellesflorian.com,cn=httpd,ou=services,dc=immae,dc=eu + + AuthUserFile "/var/secrets/webapps/${app.environment}-tellesflorian-passwords" + Require user "invite" + + ErrorDocument 401 "" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + DirectoryIndex app_dev.php + + + Options -MultiViews + + + + RewriteEngine On + + RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ + RewriteRule ^(.*) - [E=BASE:%1] + + # Maintenance script + RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f + RewriteCond %{SCRIPT_FILENAME} !maintenance.php + RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] + ErrorDocument 503 /maintenance.php + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} . + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ - [L] + + # Rewrite all other queries to the front controller. + RewriteRule ^ %{ENV:BASE}/app_dev.php [L] + + + + '' else '' + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + ''} + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} \ + ${app.varDir}/var + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; +} diff --git a/modules/private/websites/florian/integration.nix b/modules/private/websites/florian/integration.nix new file mode 100644 index 00000000..424ebd48 --- /dev/null +++ b/modules/private/websites/florian/integration.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, myconfig, ... }: +let + adminer = pkgs.callPackage ../commons/adminer.nix {}; + cfg = config.myServices.websites.florian.integration; + varDir = "/var/lib/ftp/florian"; + env = myconfig.env.websites.florian; +in { + options.myServices.websites.florian.integration.enable = lib.mkEnableOption "enable Florian's website integration"; + + config = lib.mkIf cfg.enable { + security.acme.certs."ftp".extraDomains."florian.immae.eu" = null; + + services.websites.integration.modules = adminer.apache.modules; + services.websites.integration.vhostConfs.florian = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "florian.immae.eu" ]; + root = "${varDir}/florian.immae.eu"; + extraConfig = [ + adminer.apache.vhostConf + '' + ServerAdmin ${env.server_admin} + + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/florian/production.nix b/modules/private/websites/florian/production.nix new file mode 100644 index 00000000..9b310b8b --- /dev/null +++ b/modules/private/websites/florian/production.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, myconfig, ... }: +let + adminer = pkgs.callPackage ../commons/adminer.nix {}; + cfg = config.myServices.websites.florian.production; + varDir = "/var/lib/ftp/florian"; + env = myconfig.env.websites.florian; +in { + options.myServices.websites.florian.production.enable = lib.mkEnableOption "enable Florian's website production"; + + config = lib.mkIf cfg.enable { + security.acme.certs."ftp".extraDomains."tellesflorian.com" = null; + + services.websites.production.modules = adminer.apache.modules; + services.websites.production.vhostConfs.florian = { + certName = "florian"; + certMainHost = "tellesflorian.com"; + hosts = [ "tellesflorian.com" "www.tellesflorian.com" ]; + root = "${varDir}/tellesflorian.com"; + extraConfig = [ + adminer.apache.vhostConf + '' + ServerAdmin ${env.server_admin} + + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/immae/production.nix b/modules/private/websites/immae/production.nix new file mode 100644 index 00000000..c3cabb6a --- /dev/null +++ b/modules/private/websites/immae/production.nix @@ -0,0 +1,64 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.immae.production; + varDir = "/var/lib/ftp/immae"; + env = myconfig.env.websites.immae; +in { + options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website"; + + config = lib.mkIf cfg.enable { + services.webstats.sites = [ { name = "www.immae.eu"; } ]; + + services.phpfpm.poolConfigs.immae = '' + listen = /run/phpfpm/immae.sock + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + + php_admin_value[open_basedir] = "${varDir}:/tmp" + ''; + services.websites.production.modules = [ "proxy_fcgi" ]; + services.websites.production.vhostConfs.immae = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "www.immae.eu" ]; + root = varDir; + extraConfig = [ + '' + Use Stats www.immae.eu + + + SetHandler "proxy:unix:/run/phpfpm/immae.sock|fcgi://localhost" + + + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + + + Use LDAPConnect + Require ldap-group cn=blog,cn=immae.eu,ou=services,dc=immae,dc=eu + + '' + ]; + }; + + services.websites.production.vhostConfs.bouya = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "bouya.org" "www.bouya.org" ]; + root = null; + extraConfig = [ '' + RedirectMatch 301 ^/((?!\.well-known.*$).*)$ https://www.normalesup.org/~bouya/ + '' ]; + }; + }; +} diff --git a/modules/private/websites/immae/release.nix b/modules/private/websites/immae/release.nix new file mode 100644 index 00000000..68381a6a --- /dev/null +++ b/modules/private/websites/immae/release.nix @@ -0,0 +1,39 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.immae.release; + varDir = "/var/lib/ftp/release.immae.eu"; + env = myconfig.env.websites.release; +in { + options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website"; + + config = lib.mkIf cfg.enable { + services.webstats.sites = [ { name = "release.immae.eu"; } ]; + + services.websites.production.vhostConfs.release = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "release.immae.eu" ]; + root = varDir; + extraConfig = [ + '' + Use Stats release.immae.eu + + Use Apaxy "${varDir}" "title .duplicity-ignore" + + Use LDAPConnect + Options Indexes + AllowOverride All + Require all granted + + + + Use LDAPConnect + Options Indexes FollowSymlinks + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/immae/temp.nix b/modules/private/websites/immae/temp.nix new file mode 100644 index 00000000..0b2a3a3e --- /dev/null +++ b/modules/private/websites/immae/temp.nix @@ -0,0 +1,36 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.immae.temp; + varDir = "/var/lib/ftp/temp.immae.eu"; + env = myconfig.env.websites.temp; +in { + options.myServices.websites.immae.temp.enable = lib.mkEnableOption "enable Temp' website"; + + config = lib.mkIf cfg.enable { + services.websites.production.modules = [ "headers" ]; + services.websites.production.vhostConfs.temp = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "temp.immae.eu" ]; + root = varDir; + extraConfig = [ + '' + Use Apaxy "${varDir}" "title .duplicity-ignore" + + Header set Content-Disposition attachment + + + Options -Indexes + AllowOverride None + Require all granted + + + + Options Indexes + + '' + ]; + }; + }; +} + diff --git a/modules/private/websites/leila/production.nix b/modules/private/websites/leila/production.nix new file mode 100644 index 00000000..69c8c497 --- /dev/null +++ b/modules/private/websites/leila/production.nix @@ -0,0 +1,82 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.myServices.websites.leila.production; + varDir = "/var/lib/ftp/leila"; +in { + options.myServices.websites.leila.production.enable = lib.mkEnableOption "enable Leila's website in production"; + + config = lib.mkIf cfg.enable { + services.phpfpm.poolConfigs.leila = '' + listen = /run/phpfpm/leila.sock + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + + php_admin_value[open_basedir] = "${varDir}:/tmp" + ''; + + services.webstats.sites = [ + { name = "leila.bouya.org"; } + { name = "chorale.leila.bouya.org"; } + ]; + + services.websites.production.modules = [ "proxy_fcgi" ]; + services.websites.production.vhostConfs.leila_chorale = { + certName = "leila"; + addToCerts = true; + hosts = [ "chorale.leila.bouya.org" "chorale-vocanta.fr.nf" "www.chorale-vocanta.fr.nf" ]; + root = "${varDir}/Chorale"; + extraConfig = [ + '' + Use Stats chorale.leila.bouya.org + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + + Use LDAPConnect + Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu + + + SetHandler "proxy:unix:/run/phpfpm/leila.sock|fcgi://localhost" + + + '' + ]; + }; + services.websites.production.vhostConfs.leila = { + certName = "leila"; + certMainHost = "leila.bouya.org"; + hosts = [ "leila.bouya.org" ]; + root = varDir; + extraConfig = [ + '' + Use Stats leila.bouya.org + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + + Use LDAPConnect + Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu + + + SetHandler "proxy:unix:/run/phpfpm/leila.sock|fcgi://localhost" + + + + DirectoryIndex index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/ludivinecassal/builder.nix b/modules/private/websites/ludivinecassal/builder.nix new file mode 100644 index 00000000..3167bce7 --- /dev/null +++ b/modules/private/websites/ludivinecassal/builder.nix @@ -0,0 +1,155 @@ +{ apacheUser, apacheGroup, config, ludivinecassal, pkgs, ruby, sass, imagemagick }: +rec { + app = ludivinecassal.override { inherit (config) environment; }; + varDir = "/var/lib/ludivinecassal_${app.environment}"; + keys = [{ + dest = "webapps/${app.environment}-ludivinecassal"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_host: ${config.mysql.host} + database_port: ${config.mysql.port} + database_name: ${config.mysql.name} + database_user: ${config.mysql.user} + database_password: ${config.mysql.password} + database_server_version: ${pkgs.mariadb.mysqlVersion} + mailer_transport: smtp + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + secret: ${config.secret} + ldap_host: ldap.immae.eu + ldap_port: 636 + ldap_version: 3 + ldap_ssl: true + ldap_tls: false + ldap_user_bind: 'uid={username},ou=users,dc=immae,dc=eu' + ldap_base_dn: 'dc=immae,dc=eu' + ldap_search_dn: '${config.ldap.dn}' + ldap_search_password: '${config.ldap.password}' + ldap_search_filter: '${config.ldap.search}' + leapt_im: + binary_path: ${imagemagick}/bin + assetic: + sass: ${sass}/bin/sass + ruby: ${ruby}/bin/ruby + ''; + }]; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u ${apacheUser} ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-ludivinecassal > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "mysql.service" ]; + socket = "/var/run/phpfpm/ludivinecassal-${app.environment}.sock"; + pool = '' + listen = ${socket} + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "/var/secrets/webapps/${app.environment}-ludivinecassal:${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "ludivine_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=ludivine.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + DirectoryIndex app_dev.php + + + Options -MultiViews + + + + RewriteEngine On + + RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ + RewriteRule ^(.*) - [E=BASE:%1] + + # Maintenance script + RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f + RewriteCond %{SCRIPT_FILENAME} !maintenance.php + RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] + ErrorDocument 503 /maintenance.php + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} . + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ - [L] + + # Rewrite all other queries to the front controller. + RewriteRule ^ %{ENV:BASE}/app_dev.php [L] + + + + '' else '' + Use Stats ludivinecassal.com + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + ''} + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/tmp + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; +} diff --git a/modules/private/websites/ludivinecassal/integration.nix b/modules/private/websites/ludivinecassal/integration.nix new file mode 100644 index 00000000..ed0dc9fe --- /dev/null +++ b/modules/private/websites/ludivinecassal/integration.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, myconfig, ... }: +let + ludivinecassal = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) ludivinecassal; + config = myconfig.env.websites.ludivinecassal.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.ludivinecassal.integration; +in { + options.myServices.websites.ludivinecassal.integration.enable = lib.mkEnableOption "enable Ludivine's website in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = ludivinecassal.keys; + + systemd.services.phpfpm-ludivinecassal_dev.after = lib.mkAfter ludivinecassal.phpFpm.serviceDeps; + systemd.services.phpfpm-ludivinecassal_dev.wants = ludivinecassal.phpFpm.serviceDeps; + systemd.services.phpfpm-ludivinecassal_dev.preStart = lib.mkAfter ludivinecassal.phpFpm.preStart; + services.phpfpm.poolConfigs.ludivinecassal_dev = ludivinecassal.phpFpm.pool; + system.activationScripts.ludivinecassal_dev = ludivinecassal.activationScript; + myServices.websites.webappDirs."${ludivinecassal.apache.webappName}" = ludivinecassal.app.webRoot; + services.websites.integration.modules = ludivinecassal.apache.modules; + services.websites.integration.vhostConfs.ludivine = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "ludivine.immae.eu" ]; + root = ludivinecassal.apache.root; + extraConfig = [ ludivinecassal.apache.vhostConf ]; + }; + }; +} diff --git a/modules/private/websites/ludivinecassal/production.nix b/modules/private/websites/ludivinecassal/production.nix new file mode 100644 index 00000000..3df5613f --- /dev/null +++ b/modules/private/websites/ludivinecassal/production.nix @@ -0,0 +1,33 @@ +{ lib, pkgs, config, myconfig, ... }: +let + ludivinecassal = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) ludivinecassal; + config = myconfig.env.websites.ludivinecassal.production; + apacheUser = config.services.httpd.Prod.user; + apacheGroup = config.services.httpd.Prod.group; + }; + + cfg = config.myServices.websites.ludivinecassal.production; +in { + options.myServices.websites.ludivinecassal.production.enable = lib.mkEnableOption "enable Ludivine's website in production"; + + config = lib.mkIf cfg.enable { + secrets.keys = ludivinecassal.keys; + services.webstats.sites = [ { name = "ludivinecassal.com"; } ]; + + systemd.services.phpfpm-ludivinecassal_prod.after = lib.mkAfter ludivinecassal.phpFpm.serviceDeps; + systemd.services.phpfpm-ludivinecassal_prod.wants = ludivinecassal.phpFpm.serviceDeps; + systemd.services.phpfpm-ludivinecassal_prod.preStart = lib.mkAfter ludivinecassal.phpFpm.preStart; + services.phpfpm.poolConfigs.ludivinecassal_prod = ludivinecassal.phpFpm.pool; + system.activationScripts.ludivinecassal_prod = ludivinecassal.activationScript; + myServices.websites.webappDirs."${ludivinecassal.apache.webappName}" = ludivinecassal.app.webRoot; + services.websites.production.modules = ludivinecassal.apache.modules; + services.websites.production.vhostConfs.ludivine = { + certName = "ludivinecassal"; + certMainHost = "ludivinecassal.com"; + hosts = ["ludivinecassal.com" "www.ludivinecassal.com" ]; + root = ludivinecassal.apache.root; + extraConfig = [ ludivinecassal.apache.vhostConf ]; + }; + }; +} diff --git a/modules/private/websites/nassime/production.nix b/modules/private/websites/nassime/production.nix new file mode 100644 index 00000000..a1097784 --- /dev/null +++ b/modules/private/websites/nassime/production.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.nassime.production; + varDir = "/var/lib/ftp/nassime"; + env = myconfig.env.websites.nassime; +in { + options.myServices.websites.nassime.production.enable = lib.mkEnableOption "enable Nassime's website"; + + config = lib.mkIf cfg.enable { + services.webstats.sites = [ { name = "nassime.bouya.org"; } ]; + + security.acme.certs."ftp".extraDomains."nassime.bouya.org" = null; + + services.websites.production.vhostConfs.nassime = { + certName = "nassime"; + certMainHost = "nassime.bouya.org"; + hosts = ["nassime.bouya.org" ]; + root = varDir; + extraConfig = [ + '' + Use Stats nassime.bouya.org + ServerAdmin ${env.server_admin} + + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/naturaloutil/production.nix b/modules/private/websites/naturaloutil/production.nix new file mode 100644 index 00000000..f59957da --- /dev/null +++ b/modules/private/websites/naturaloutil/production.nix @@ -0,0 +1,96 @@ +{ lib, pkgs, config, myconfig, ... }: +let + adminer = pkgs.callPackage ../commons/adminer.nix {}; + cfg = config.myServices.websites.naturaloutil.production; + varDir = "/var/lib/ftp/jerome"; + env = myconfig.env.websites.jerome; +in { + options.myServices.websites.naturaloutil.production.enable = lib.mkEnableOption "enable Naturaloutil's website"; + + config = lib.mkIf cfg.enable { + services.webstats.sites = [ { name = "naturaloutil.immae.eu"; } ]; + + security.acme.certs."ftp".extraDomains."naturaloutil.immae.eu" = null; + + secrets.keys = [{ + dest = "webapps/prod-naturaloutil"; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0400"; + text = '' + ssl_set(NULL, NULL, "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt", NULL, NULL); + '' else ""} + $database = connect_db($db, $mysql_server, $mysql_base, $mysql_user, $mysql_password); + ?> + ''; + }]; + system.activationScripts.naturaloutil = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o wwwrun -g wwwrun -d /var/lib/php/sessions/naturaloutil + ''; + }; + systemd.services.phpfpm-jerome.after = lib.mkAfter [ "mysql.service" ]; + systemd.services.phpfpm-jerome.wants = [ "mysql.service" ]; + services.phpfpm.pools.jerome = { + listen = "/run/phpfpm/naturaloutil.sock"; + extraConfig = '' + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + + env[BDD_CONNECT] = "/var/secrets/webapps/prod-naturaloutil" + php_admin_value[open_basedir] = "/var/lib/php/sessions/naturaloutil:/var/secrets/webapps/prod-naturaloutil:${varDir}:/tmp" + php_admin_value[session.save_path] = "/var/lib/php/sessions/naturaloutil" + ''; + phpOptions = config.services.phpfpm.phpOptions + '' + extension=${pkgs.php}/lib/php/extensions/mysqli.so + ''; + }; + services.websites.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ]; + services.websites.production.vhostConfs.naturaloutil = { + certName = "naturaloutil"; + certMainHost = "naturaloutil.immae.eu"; + hosts = ["naturaloutil.immae.eu" ]; + root = varDir; + extraConfig = [ + adminer.apache.vhostConf + '' + Use Stats naturaloutil.immae.eu + ServerAdmin ${env.server_admin} + ErrorLog "${varDir}/logs/error_log" + CustomLog "${varDir}/logs/access_log" combined + + + SetHandler "proxy:unix:/run/phpfpm/naturaloutil.sock|fcgi://localhost" + + + + AllowOverride None + Require all denied + + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/papa/surveillance.nix b/modules/private/websites/papa/surveillance.nix new file mode 100644 index 00000000..8e7cd9db --- /dev/null +++ b/modules/private/websites/papa/surveillance.nix @@ -0,0 +1,49 @@ +{ lib, pkgs, config, myconfig, ... }: +let + cfg = config.myServices.websites.papa.surveillance; + varDir = "/var/lib/ftp/papa"; +in { + options.myServices.websites.papa.surveillance.enable = lib.mkEnableOption "enable Papa surveillance's website"; + + config = lib.mkIf cfg.enable { + security.acme.certs."ftp".extraDomains."surveillance.maison.bbc.bouya.org" = null; + + services.cron = { + systemCronJobs = let + script = pkgs.writeScript "cleanup-papa" '' + #!${pkgs.stdenv.shell} + d=$(date -d "7 days ago" +%Y%m%d) + for i in /var/lib/ftp/papa/*/20[0-9][0-9][0-9][0-9][0-9][0-9]; do + if [ "$d" -gt $(basename $i) ]; then + rm -rf "$i" + fi + done + ''; + in + [ + '' + 0 6 * * * wwwrun ${script} + '' + ]; + }; + + services.websites.production.vhostConfs.papa = { + certName = "papa"; + certMainHost = "surveillance.maison.bbc.bouya.org"; + hosts = [ "surveillance.maison.bbc.bouya.org" ]; + root = varDir; + extraConfig = [ + '' + Use Apaxy "${varDir}" "title .duplicity-ignore" + + Use LDAPConnect + Options Indexes + AllowOverride None + Require ldap-group cn=surveillance.maison.bbc.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu + + '' + ]; + }; + }; +} + diff --git a/modules/private/websites/piedsjaloux/builder.nix b/modules/private/websites/piedsjaloux/builder.nix new file mode 100644 index 00000000..9fcc8fb6 --- /dev/null +++ b/modules/private/websites/piedsjaloux/builder.nix @@ -0,0 +1,144 @@ +{ apacheUser, apacheGroup, piedsjaloux, config, pkgs, lib, texlive, imagemagick }: +rec { + app = piedsjaloux.override { inherit (config) environment; }; + varDir = "/var/lib/piedsjaloux_${app.environment}"; + keys = [{ + dest = "webapps/${app.environment}-piedsjaloux"; + user = apacheUser; + group = apacheGroup; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_host: ${config.mysql.host} + database_port: ${config.mysql.port} + database_name: ${config.mysql.name} + database_user: ${config.mysql.user} + database_password: ${config.mysql.password} + database_server_version: ${pkgs.mariadb.mysqlVersion} + mailer_transport: smtp + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + secret: ${config.secret} + pdflatex: "${texlive.combine { inherit (texlive) attachfile preprint scheme-small; }}/bin/pdflatex" + leapt_im: + binary_path: ${imagemagick}/bin + ''; + }]; + phpFpm = rec { + preStart = '' + if [ ! -f "${app.varDir}/currentWebappDir" -o \ + ! -f "${app.varDir}/currentKey" -o \ + "${app}" != "$(cat ${app.varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${app.varDir}/currentKey; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u ${apacheUser} ./bin/console --env=${app.environment} cache:clear --no-warmup + popd > /dev/null + echo -n "${app}" > ${app.varDir}/currentWebappDir + sha512sum /var/secrets/webapps/${app.environment}-piedsjaloux > ${app.varDir}/currentKey + fi + ''; + serviceDeps = [ "mysql.service" ]; + socket = "/var/run/phpfpm/piedsjaloux-${app.environment}.sock"; + pool = '' + listen = ${socket} + user = ${apacheUser} + group = ${apacheGroup} + listen.owner = ${apacheUser} + listen.group = ${apacheGroup} + php_admin_value[upload_max_filesize] = 20M + php_admin_value[post_max_size] = 20M + ;php_admin_flag[log_errors] = on + php_admin_value[open_basedir] = "/var/secrets/webapps/${app.environment}-piedsjaloux:${app}:${app.varDir}:/tmp" + php_admin_value[session.save_path] = "${app.varDir}/phpSessions" + env[PATH] = ${lib.makeBinPath [ pkgs.apg pkgs.unzip ]} + ${if app.environment == "dev" then '' + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + env[SYMFONY_DEBUG_MODE] = "yes" + '' else '' + pm = dynamic + pm.max_children = 20 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 3 + ''}''; + }; + apache = rec { + modules = [ "proxy_fcgi" ]; + webappName = "piedsjaloux_${app.environment}"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ${if app.environment == "dev" then '' + + Use LDAPConnect + Require ldap-group cn=piedsjaloux.immae.eu,cn=httpd,ou=services,dc=immae,dc=eu + ErrorDocument 401 "" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Require all granted + + DirectoryIndex app_dev.php + + + Options -MultiViews + + + + RewriteEngine On + + RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ + RewriteRule ^(.*) - [E=BASE:%1] + + # Maintenance script + RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f + RewriteCond %{SCRIPT_FILENAME} !maintenance.php + RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] + ErrorDocument 503 /maintenance.php + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} . + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ - [L] + + # Rewrite all other queries to the front controller. + RewriteRule ^ %{ENV:BASE}/app_dev.php [L] + + + + '' else '' + Use Stats piedsjaloux.fr + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + ''} + ''; + }; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} \ + ${app.varDir}/tmp + install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions + ''; + }; +} diff --git a/modules/private/websites/piedsjaloux/integration.nix b/modules/private/websites/piedsjaloux/integration.nix new file mode 100644 index 00000000..5f574e1a --- /dev/null +++ b/modules/private/websites/piedsjaloux/integration.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, myconfig, ... }: +let + piedsjaloux = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) piedsjaloux; + config = myconfig.env.websites.piedsjaloux.integration; + apacheUser = config.services.httpd.Inte.user; + apacheGroup = config.services.httpd.Inte.group; + }; + + cfg = config.myServices.websites.piedsjaloux.integration; +in { + options.myServices.websites.piedsjaloux.integration.enable = lib.mkEnableOption "enable PiedsJaloux's website in integration"; + + config = lib.mkIf cfg.enable { + secrets.keys = piedsjaloux.keys; + systemd.services.phpfpm-piedsjaloux_dev.after = lib.mkAfter piedsjaloux.phpFpm.serviceDeps; + systemd.services.phpfpm-piedsjaloux_dev.wants = piedsjaloux.phpFpm.serviceDeps; + systemd.services.phpfpm-piedsjaloux_dev.preStart = lib.mkAfter piedsjaloux.phpFpm.preStart; + services.phpfpm.poolConfigs.piedsjaloux_dev = piedsjaloux.phpFpm.pool; + system.activationScripts.piedsjaloux_dev = piedsjaloux.activationScript; + myServices.websites.webappDirs."${piedsjaloux.apache.webappName}" = piedsjaloux.app.webRoot; + services.websites.integration.modules = piedsjaloux.apache.modules; + services.websites.integration.vhostConfs.piedsjaloux = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "piedsjaloux.immae.eu" ]; + root = piedsjaloux.apache.root; + extraConfig = [ piedsjaloux.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/piedsjaloux/production.nix b/modules/private/websites/piedsjaloux/production.nix new file mode 100644 index 00000000..e3bd2ddc --- /dev/null +++ b/modules/private/websites/piedsjaloux/production.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, myconfig, ... }: +let + piedsjaloux = pkgs.callPackage ./builder.nix { + inherit (pkgs.webapps) piedsjaloux; + config = myconfig.env.websites.piedsjaloux.production; + apacheUser = config.services.httpd.Prod.user; + apacheGroup = config.services.httpd.Prod.group; + }; + + cfg = config.myServices.websites.piedsjaloux.production; +in { + options.myServices.websites.piedsjaloux.production.enable = lib.mkEnableOption "enable PiedsJaloux's website in production"; + + config = lib.mkIf cfg.enable { + secrets.keys = piedsjaloux.keys; + services.webstats.sites = [ { name = "piedsjaloux.fr"; } ]; + + systemd.services.phpfpm-piedsjaloux_prod.after = lib.mkAfter piedsjaloux.phpFpm.serviceDeps; + systemd.services.phpfpm-piedsjaloux_prod.wants = piedsjaloux.phpFpm.serviceDeps; + systemd.services.phpfpm-piedsjaloux_prod.preStart = lib.mkAfter piedsjaloux.phpFpm.preStart; + services.phpfpm.poolConfigs.piedsjaloux_prod = piedsjaloux.phpFpm.pool; + system.activationScripts.piedsjaloux_prod = piedsjaloux.activationScript; + myServices.websites.webappDirs."${piedsjaloux.apache.webappName}" = piedsjaloux.app.webRoot; + services.websites.production.modules = piedsjaloux.apache.modules; + services.websites.production.vhostConfs.piedsjaloux = { + certName = "piedsjaloux"; + certMainHost = "piedsjaloux.fr"; + hosts = [ "piedsjaloux.fr" "www.piedsjaloux.fr" ]; + root = piedsjaloux.apache.root; + extraConfig = [ piedsjaloux.apache.vhostConf ]; + }; + }; +} + diff --git a/modules/private/websites/tools/cloud/default.nix b/modules/private/websites/tools/cloud/default.nix new file mode 100644 index 00000000..ceb8f772 --- /dev/null +++ b/modules/private/websites/tools/cloud/default.nix @@ -0,0 +1,188 @@ +{ lib, pkgs, config, myconfig, ... }: +let + nextcloud = pkgs.webapps.nextcloud.withApps (builtins.attrValues pkgs.webapps.nextcloud-apps); + env = myconfig.env.tools.nextcloud; + varDir = "/var/lib/nextcloud"; + webappName = "tools_nextcloud"; + apacheRoot = "/run/current-system/webapps/${webappName}"; + cfg = config.myServices.websites.tools.cloud; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" ( + [ nextcloud varDir ] + ++ builtins.attrValues pkgs.webapps.nextcloud-apps); + socket = "/var/run/phpfpm/nextcloud.sock"; + phpConfig = '' + extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so + extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so + zend_extension=${pkgs.php}/lib/php/extensions/opcache.so + ''; + pool = '' + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + php_admin_value[output_buffering] = 0 + php_admin_value[max_execution_time] = 1800 + php_admin_value[zend_extension] = "opcache" + ;already enabled by default? + ;php_value[opcache.enable] = 1 + php_value[opcache.enable_cli] = 1 + php_value[opcache.interned_strings_buffer] = 8 + php_value[opcache.max_accelerated_files] = 10000 + php_value[opcache.memory_consumption] = 128 + php_value[opcache.save_comments] = 1 + php_value[opcache.revalidate_freq] = 1 + php_admin_value[memory_limit] = 512M + + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:${basedir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +in { + options.myServices.websites.tools.cloud = { + enable = lib.mkEnableOption "enable cloud website"; + }; + + config = lib.mkIf cfg.enable { + services.websites.tools.modules = [ "proxy_fcgi" ]; + + services.websites.tools.vhostConfs.cloud = { + certName = "eldiron"; + addToCerts = true; + hosts = ["cloud.immae.eu" ]; + root = apacheRoot; + extraConfig = [ + '' + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + + AcceptPathInfo On + DirectoryIndex index.php + Options FollowSymlinks + Require all granted + AllowOverride all + + + Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" + + + CGIPassAuth on + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + '' + ]; + }; + + secrets.keys = [{ + dest = "webapps/tools-nextcloud"; + user = "wwwrun"; + group = "wwwrun"; + permissions = "0600"; + text = '' + '${env.instance_id}1', + 'datadirectory' => '/var/lib/nextcloud/', + 'passwordsalt' => '${env.password_salt}', + 'debug' => false, + 'dbtype' => 'pgsql', + 'version' => '16.0.0.9', + 'dbname' => '${env.postgresql.database}', + 'dbhost' => '${env.postgresql.socket}', + 'dbtableprefix' => 'oc_', + 'dbuser' => '${env.postgresql.user}', + 'dbpassword' => '${env.postgresql.password}', + 'installed' => true, + 'maxZipInputSize' => 0, + 'allowZipDownload' => true, + 'forcessl' => true, + 'theme' => ${"''"}, + 'maintenance' => false, + 'trusted_domains' => + array ( + 0 => 'cloud.immae.eu', + ), + 'secret' => '${env.secret}', + 'appstoreenabled' => false, + 'appstore.experimental.enabled' => true, + 'loglevel' => 2, + 'trashbin_retention_obligation' => 'auto', + 'htaccess.RewriteBase' => '/', + 'mail_smtpmode' => 'sendmail', + 'mail_smtphost' => '127.0.0.1', + 'mail_smtpname' => ''', + 'mail_smtppassword' => ''', + 'mail_from_address' => 'nextcloud', + 'mail_smtpauth' => false, + 'mail_domain' => 'tools.immae.eu', + 'memcache.local' => '\\OC\\Memcache\\APCu', + 'memcache.locking' => '\\OC\\Memcache\\Redis', + 'filelocking.enabled' => true, + 'redis' => + array ( + 'host' => '${env.redis.socket}', + 'port' => 0, + 'dbindex' => ${env.redis.db_index}, + ), + 'overwrite.cli.url' => 'https://cloud.immae.eu', + 'ldapIgnoreNamingRules' => false, + 'ldapProviderFactory' => '\\OCA\\User_LDAP\\LDAPProviderFactory', + 'has_rebuilt_cache' => true, + ); + ''; + }]; + users.users.root.packages = let + occ = pkgs.writeScriptBin "nextcloud-occ" '' + #! ${pkgs.stdenv.shell} + cd ${nextcloud} + NEXTCLOUD_CONFIG_DIR="${nextcloud}/config" \ + exec \ + sudo -u wwwrun ${pkgs.php}/bin/php \ + -c ${pkgs.php}/etc/php.ini \ + occ $* + ''; + in [ occ ]; + + system.activationScripts.nextcloud = { + deps = [ "secrets" ]; + text = let + confs = lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) nextcloud.otherConfig; + in + '' + install -m 0755 -o wwwrun -g wwwrun -d ${varDir} + install -m 0750 -o wwwrun -g wwwrun -d ${varDir}/phpSessions + ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: + "install -D -m 0644 -o wwwrun -g wwwrun -T ${v} ${varDir}/config/${n}.json" + ) confs)} + install -D -m 0600 -o wwwrun -g wwwrun -T /var/secrets/webapps/tools-nextcloud ${varDir}/config/config.php + ''; + }; + # FIXME: add a warning when config.php changes + system.extraSystemBuilderCmds = '' + mkdir -p $out/webapps + ln -s ${nextcloud} $out/webapps/${webappName} + ''; + + services.phpfpm.pools.nextcloud = { + listen = phpFpm.socket; + extraConfig = phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + phpFpm.phpConfig; + }; + + services.cron = { + enable = true; + systemCronJobs = [ + '' + LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive + */15 * * * * wwwrun ${pkgs.php}/bin/php -f ${nextcloud}/cron.php + '' + ]; + }; + }; +} diff --git a/modules/private/websites/tools/dav/davical.nix b/modules/private/websites/tools/dav/davical.nix new file mode 100644 index 00000000..98cebee9 --- /dev/null +++ b/modules/private/websites/tools/dav/davical.nix @@ -0,0 +1,139 @@ +{ stdenv, fetchurl, gettext, writeText, env, awl, davical }: +rec { + activationScript = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/davical + ''; + }; + keys = [{ + dest = "webapps/dav-davical"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + pg_connect[] = "dbname=${env.postgresql.database} user=${env.postgresql.user} host=${env.postgresql.socket} password=${env.postgresql.password}"; + + $c->readonly_webdav_collections = false; + + $c->admin_email ='davical@tools.immae.eu'; + + $c->restrict_setup_to_admin = true; + + $c->collections_always_exist = false; + + $c->external_refresh = 60; + + $c->enable_scheduling = true; + + $c->iMIP = (object) array("send_email" => true); + + $c->authenticate_hook['optional'] = false; + $c->authenticate_hook['call'] = 'LDAP_check'; + $c->authenticate_hook['config'] = array( + 'host' => 'ldap.immae.eu', + 'port' => '389', + 'startTLS' => 'yes', + 'bindDN'=> 'cn=davical,ou=services,dc=immae,dc=eu', + 'passDN'=> '${env.ldap.password}', + 'protocolVersion' => '3', + 'baseDNUsers'=> array('ou=users,dc=immae,dc=eu', 'ou=group_users,dc=immae,dc=eu'), + 'filterUsers' => 'memberOf=cn=users,cn=davical,ou=services,dc=immae,dc=eu', + 'baseDNGroups' => 'ou=groups,dc=immae,dc=eu', + 'filterGroups' => 'memberOf=cn=groups,cn=davical,ou=services,dc=immae,dc=eu', + 'mapping_field' => array( + "username" => "uid", + "fullname" => "cn", + "email" => "mail", + "modified" => "modifyTimestamp", + ), + 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)), + /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/ + // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"), + 'group_mapping_field' => array( + "username" => "cn", + "updated" => "modifyTimestamp", + "fullname" => "givenName", + "displayname" => "givenName", + "members" => "memberUid", + "email" => "mail", + ), + ); + + $c->do_not_sync_from_ldap = array('admin' => true); + include('drivers_ldap.php'); + ''; + }]; + webapp = davical.override { davical_config = "/var/secrets/webapps/dav-davical"; }; + webRoot = "${webapp}/htdocs"; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_davical"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /davical "${root}" + Alias /caldav.php "${root}/caldav.php" + + DirectoryIndex index.php index.html + AcceptPathInfo On + AllowOverride None + Require all granted + + + CGIPassAuth on + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + RewriteEngine On + + Header unset Access-Control-Allow-Origin + Header unset Access-Control-Allow-Methods + Header unset Access-Control-Allow-Headers + Header unset Access-Control-Allow-Credentials + Header unset Access-Control-Expose-Headers + + Header always set Access-Control-Allow-Origin "*" + Header always set Access-Control-Allow-Methods "GET,POST,OPTIONS,PROPFIND,PROPPATCH,REPORT,PUT,MOVE,DELETE,LOCK,UNLOCK" + Header always set Access-Control-Allow-Headers "User-Agent,Authorization,Content-type,Depth,If-match,If-None-Match,Lock-Token,Timeout,Destination,Overwrite,Prefer,X-client,X-Requested-With" + Header always set Access-Control-Allow-Credentials false + Header always set Access-Control-Expose-Headers "Etag,Preference-Applied" + + RewriteCond %{HTTP:Access-Control-Request-Method} !^$ + RewriteCond %{REQUEST_METHOD} OPTIONS + RewriteRule ^(.*)$ $1 [R=200,L] + + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webapp "/var/secrets/webapps/dav-davical" awl ]; + socket = "/var/run/phpfpm/davical.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = DavicalPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp:/var/lib/php/sessions/davical" + php_admin_value[include_path] = "${awl}/inc:${webapp}/inc" + php_admin_value[session.save_path] = "/var/lib/php/sessions/davical" + php_flag[magic_quotes_gpc] = Off + php_flag[register_globals] = Off + php_admin_value[error_reporting] = "E_ALL & ~E_NOTICE" + php_admin_value[default_charset] = "utf-8" + php_flag[magic_quotes_runtime] = Off + ''; + }; +} diff --git a/modules/private/websites/tools/dav/default.nix b/modules/private/websites/tools/dav/default.nix new file mode 100644 index 00000000..fb0baaec --- /dev/null +++ b/modules/private/websites/tools/dav/default.nix @@ -0,0 +1,53 @@ +{ lib, pkgs, config, myconfig, ... }: +let + infcloud = rec { + webappName = "tools_infcloud"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /carddavmate ${root} + Alias /caldavzap ${root} + Alias /infcloud ${root} + + AllowOverride All + Options FollowSymlinks + Require all granted + DirectoryIndex index.html + + ''; + }; + davical = pkgs.callPackage ./davical.nix { + env = myconfig.env.tools.davical; + inherit (pkgs.webapps) davical awl; + }; + + cfg = config.myServices.websites.tools.dav; +in { + options.myServices.websites.tools.dav = { + enable = lib.mkEnableOption "enable dav website"; + }; + + config = lib.mkIf cfg.enable { + system.activationScripts.davical = davical.activationScript; + secrets.keys = davical.keys; + services.websites.tools.modules = davical.apache.modules; + + services.websites.tools.vhostConfs.dav = { + certName = "eldiron"; + addToCerts = true; + hosts = ["dav.immae.eu" ]; + root = null; + extraConfig = [ + infcloud.vhostConf + davical.apache.vhostConf + ]; + }; + + services.phpfpm.poolConfigs = { + davical = davical.phpFpm.pool; + }; + + myServices.websites.webappDirs."${davical.apache.webappName}" = davical.webRoot; + myServices.websites.webappDirs."${infcloud.webappName}" = pkgs.webapps.infcloud; + }; +} + diff --git a/modules/private/websites/tools/db/default.nix b/modules/private/websites/tools/db/default.nix new file mode 100644 index 00000000..361e204d --- /dev/null +++ b/modules/private/websites/tools/db/default.nix @@ -0,0 +1,21 @@ +{ lib, pkgs, config, ... }: +let + adminer = pkgs.callPackage ../../commons/adminer.nix {}; + + cfg = config.myServices.websites.tools.db; +in { + options.myServices.websites.tools.db = { + enable = lib.mkEnableOption "enable database's website"; + }; + + config = lib.mkIf cfg.enable { + services.websites.tools.modules = adminer.apache.modules; + services.websites.tools.vhostConfs.db-1 = { + certName = "eldiron"; + addToCerts = true; + hosts = ["db-1.immae.eu" ]; + root = null; + extraConfig = [ adminer.apache.vhostConf ]; + }; + }; +} diff --git a/modules/private/websites/tools/diaspora/default.nix b/modules/private/websites/tools/diaspora/default.nix new file mode 100644 index 00000000..efa1fabb --- /dev/null +++ b/modules/private/websites/tools/diaspora/default.nix @@ -0,0 +1,181 @@ +{ lib, pkgs, config, myconfig, ... }: +let + env = myconfig.env.tools.diaspora; + root = "/run/current-system/webapps/tools_diaspora"; + cfg = config.myServices.websites.tools.diaspora; + dcfg = config.services.diaspora; +in { + options.myServices.websites.tools.diaspora = { + enable = lib.mkEnableOption "enable diaspora's website"; + }; + + config = lib.mkIf cfg.enable { + users.users.diaspora.extraGroups = [ "keys" ]; + + secrets.keys = [ + { + dest = "webapps/diaspora/diaspora.yml"; + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + text = '' + configuration: + environment: + url: "https://diaspora.immae.eu/" + certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt' + redis: '${env.redis_url}' + sidekiq: + s3: + assets: + logging: + logrotate: + debug: + server: + listen: '${dcfg.sockets.rails}' + rails_environment: 'production' + chat: + server: + bosh: + log: + map: + mapbox: + privacy: + piwik: + statistics: + camo: + settings: + enable_registrations: false + welcome_message: + invitations: + open: false + paypal_donations: + community_spotlight: + captcha: + enable: false + terms: + maintenance: + remove_old_users: + default_metas: + csp: + services: + twitter: + tumblr: + wordpress: + mail: + enable: true + sender_address: 'diaspora@tools.immae.eu' + method: 'sendmail' + smtp: + sendmail: + location: '/run/wrappers/bin/sendmail' + admins: + account: "ismael" + podmin_email: 'diaspora@tools.immae.eu' + relay: + outbound: + inbound: + ldap: + enable: true + host: ldap.immae.eu + port: 636 + only_ldap: true + mail_attribute: mail + skip_email_confirmation: true + use_bind_dn: true + bind_dn: "cn=diaspora,ou=services,dc=immae,dc=eu" + bind_pw: "${env.ldap.password}" + search_base: "dc=immae,dc=eu" + search_filter: "(&(memberOf=cn=users,cn=diaspora,ou=services,dc=immae,dc=eu)(uid=%{username}))" + production: + environment: + development: + environment: + ''; + } + { + dest = "webapps/diaspora/database.yml"; + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + text = '' + postgresql: &postgresql + adapter: postgresql + host: "${env.postgresql.socket}" + port: "${env.postgresql.port}" + username: "${env.postgresql.user}" + password: "${env.postgresql.password}" + encoding: unicode + common: &common + <<: *postgresql + combined: &combined + <<: *common + development: + <<: *combined + database: diaspora_development + production: + <<: *combined + database: ${env.postgresql.database} + test: + <<: *combined + database: "diaspora_test" + integration1: + <<: *combined + database: diaspora_integration1 + integration2: + <<: *combined + database: diaspora_integration2 + ''; + } + { + dest = "webapps/diaspora/secret_token.rb"; + user = "diaspora"; + group = "diaspora"; + permissions = "0400"; + text = '' + Diaspora::Application.config.secret_key_base = '${env.secret_token}' + ''; + } + ]; + + services.diaspora = { + enable = true; + package = pkgs.webapps.diaspora.override { ldap = true; }; + dataDir = "/var/lib/diaspora_immae"; + adminEmail = "diaspora@tools.immae.eu"; + configDir = "/var/secrets/webapps/diaspora"; + }; + + services.websites.tools.modules = [ + "headers" "proxy" "proxy_http" + ]; + system.extraSystemBuilderCmds = '' + mkdir -p $out/webapps + ln -s ${dcfg.workdir}/public/ $out/webapps/tools_diaspora + ''; + services.websites.tools.vhostConfs.diaspora = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "diaspora.immae.eu" ]; + root = root; + extraConfig = [ '' + RewriteEngine On + RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f + RewriteRule ^/(.*)$ unix://${dcfg.sockets.rails}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L] + + ProxyRequests Off + ProxyVia On + ProxyPreserveHost On + RequestHeader set X_FORWARDED_PROTO https + + + Require all granted + + + + Require all granted + Options -MultiViews + + '' ]; + }; + }; +} diff --git a/modules/private/websites/tools/ether/default.nix b/modules/private/websites/tools/ether/default.nix new file mode 100644 index 00000000..ebcbf618 --- /dev/null +++ b/modules/private/websites/tools/ether/default.nix @@ -0,0 +1,175 @@ +{ lib, pkgs, config, myconfig, ... }: +let + env = myconfig.env.tools.etherpad-lite; + cfg = config.myServices.websites.tools.etherpad-lite; + # Make sure we’re not rebuilding whole libreoffice just because of a + # dependency + libreoffice = (import { overlays = []; }).libreoffice-fresh; + ecfg = config.services.etherpad-lite; +in { + options.myServices.websites.tools.etherpad-lite = { + enable = lib.mkEnableOption "enable etherpad's website"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = [ + { + dest = "webapps/tools-etherpad-apikey"; + permissions = "0400"; + text = env.api_key; + } + { + dest = "webapps/tools-etherpad-sessionkey"; + permissions = "0400"; + text = env.session_key; + } + { + dest = "webapps/tools-etherpad"; + permissions = "0400"; + text = '' + { + "title": "Etherpad", + "favicon": "favicon.ico", + + "ip": "", + "port" : "${ecfg.sockets.node}", + "showSettingsInAdminPage" : false, + "dbType" : "postgres", + "dbSettings" : { + "user" : "${env.postgresql.user}", + "host" : "${env.postgresql.socket}", + "password": "${env.postgresql.password}", + "database": "${env.postgresql.database}", + "charset" : "utf8mb4" + }, + + "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", + "padOptions": { + "noColors": false, + "showControls": true, + "showChat": true, + "showLineNumbers": true, + "useMonospaceFont": false, + "userName": false, + "userColor": false, + "rtl": false, + "alwaysShowChat": false, + "chatAndUsers": false, + "lang": "en-gb" + }, + + "suppressErrorsInPadText" : false, + "requireSession" : false, + "editOnly" : false, + "sessionNoPassword" : false, + "minify" : true, + "maxAge" : 21600, + "abiword" : null, + "soffice" : "${libreoffice}/bin/soffice", + "tidyHtml" : "${pkgs.html-tidy}/bin/tidy", + "allowUnknownFileEnds" : true, + "requireAuthentication" : false, + "requireAuthorization" : false, + "trustProxy" : false, + "disableIPlogging" : false, + "automaticReconnectionTimeout" : 0, + "scrollWhenFocusLineIsOutOfViewport": { + "percentage": { + "editionAboveViewport": 0, + "editionBelowViewport": 0 + }, + "duration": 0, + "scrollWhenCaretIsInTheLastLineOfViewport": false, + "percentageToScrollWhenUserPressesArrowUp": 0 + }, + "users": { + "ldapauth": { + "url": "ldaps://${env.ldap.host}", + "accountBase": "${env.ldap.base}", + "accountPattern": "(&(memberOf=cn=users,cn=etherpad,ou=services,dc=immae,dc=eu)(uid={{username}}))", + "displayNameAttribute": "cn", + "searchDN": "cn=etherpad,ou=services,dc=immae,dc=eu", + "searchPWD": "${env.ldap.password}", + "groupSearchBase": "${env.ldap.base}", + "groupAttribute": "member", + "groupAttributeIsDN": true, + "searchScope": "sub", + "groupSearch": "(memberOf=cn=groups,cn=etherpad,ou=services,dc=immae,dc=eu)", + "anonymousReadonly": false + } + }, + "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], + "loadTest": false, + "indentationOnNewLine": false, + "toolbar": { + "left": [ + ["bold", "italic", "underline", "strikethrough"], + ["orderedlist", "unorderedlist", "indent", "outdent"], + ["undo", "redo"], + ["clearauthorship"] + ], + "right": [ + ["importexport", "timeslider", "savedrevision"], + ["settings", "embed"], + ["showusers"] + ], + "timeslider": [ + ["timeslider_export", "timeslider_returnToPad"] + ] + }, + "loglevel": "INFO", + "logconfig" : { "appenders": [ { "type": "console" } ] } + } + ''; + } + ]; + services.etherpad-lite = { + enable = true; + modules = builtins.attrValues pkgs.webapps.etherpad-lite-modules; + sessionKeyFile = "/var/secrets/webapps/tools-etherpad-sessionkey"; + apiKeyFile = "/var/secrets/webapps/tools-etherpad-apikey"; + configFile = "/var/secrets/webapps/tools-etherpad"; + }; + + systemd.services.etherpad-lite.serviceConfig.SupplementaryGroups = "keys"; + + services.websites.tools.modules = [ + "headers" "proxy" "proxy_http" "proxy_wstunnel" + ]; + services.websites.tools.vhostConfs.etherpad-lite = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "ether.immae.eu" ]; + root = null; + extraConfig = [ '' + Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" + RequestHeader set X-Forwarded-Proto "https" + + RewriteEngine On + + RewriteMap redirects "txt:${pkgs.writeText "redirects.txt" myconfig.env.tools.etherpad-lite.redirects}" + RewriteCond %{QUERY_STRING} "!noredirect" + RewriteCond %{REQUEST_URI} "^(.*)$" + RewriteCond ''${redirects:$1|Unknown} "!Unknown" + RewriteRule "^(.*)$" ''${redirects:$1} [L,NE,R=301,QSD] + + RewriteCond %{REQUEST_URI} ^/socket.io [NC] + RewriteCond %{QUERY_STRING} transport=websocket [NC] + RewriteRule /(.*) unix://${ecfg.sockets.node}|ws://ether.immae.eu/$1 [P,NE,QSA,L] + + + ProxyVia On + ProxyRequests Off + ProxyPreserveHost On + ProxyPass / unix://${ecfg.sockets.node}|http://ether.immae.eu/ + ProxyPassReverse / unix://${ecfg.sockets.node}|http://ether.immae.eu/ + + Options FollowSymLinks MultiViews + AllowOverride None + Require all granted + + + '' ]; + }; + }; +} diff --git a/modules/private/websites/tools/git/default.nix b/modules/private/websites/tools/git/default.nix new file mode 100644 index 00000000..75d02402 --- /dev/null +++ b/modules/private/websites/tools/git/default.nix @@ -0,0 +1,45 @@ +{ lib, pkgs, config, myconfig, ... }: +let + mantisbt = pkgs.callPackage ./mantisbt.nix { + inherit (pkgs.webapps) mantisbt_2 mantisbt_2-plugins; + env = myconfig.env.tools.mantisbt; + }; + gitweb = pkgs.callPackage ./gitweb.nix { + gitoliteDir = config.myServices.gitolite.gitoliteDir; + }; + + cfg = config.myServices.websites.tools.git; +in { + options.myServices.websites.tools.git = { + enable = lib.mkEnableOption "enable git's website"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = mantisbt.keys; + services.websites.tools.modules = + gitweb.apache.modules ++ + mantisbt.apache.modules; + myServices.websites.webappDirs."${gitweb.apache.webappName}" = gitweb.webRoot; + myServices.websites.webappDirs."${mantisbt.apache.webappName}" = mantisbt.webRoot; + + system.activationScripts.mantisbt = mantisbt.activationScript; + services.websites.tools.vhostConfs.git = { + certName = "eldiron"; + addToCerts = true; + hosts = ["git.immae.eu" ]; + root = gitweb.apache.root; + extraConfig = [ + gitweb.apache.vhostConf + mantisbt.apache.vhostConf + '' + RewriteEngine on + RewriteCond %{REQUEST_URI} ^/releases + RewriteRule /releases(.*) https://release.immae.eu$1 [P,L] + '' + ]; + }; + services.phpfpm.poolConfigs = { + mantisbt = mantisbt.phpFpm.pool; + }; + }; +} diff --git a/modules/private/websites/tools/git/gitweb.nix b/modules/private/websites/tools/git/gitweb.nix new file mode 100644 index 00000000..2ee7a63a --- /dev/null +++ b/modules/private/websites/tools/git/gitweb.nix @@ -0,0 +1,64 @@ +{ gitweb, writeText, gitolite, git, gitoliteDir, highlight }: +rec { + varDir = gitoliteDir; + webRoot = gitweb; + config = writeText "gitweb.conf" '' + $git_temp = "/tmp"; + + # The directories where your projects are. Must not end with a + # slash. + $projectroot = "${varDir}/repositories"; + + $projects_list = "${varDir}/projects.list"; + $strict_export = "true"; + + # Base URLs for links displayed in the web interface. + our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu); + + $feature{'blame'}{'default'} = [1]; + $feature{'avatar'}{'default'} = ['gravatar']; + $feature{'highlight'}{'default'} = [1]; + + @stylesheets = ("gitweb-theme/gitweb.css"); + $logo = "gitweb-theme/git-logo.png"; + $favicon = "gitweb-theme/git-favicon.png"; + $javascript = "gitweb-theme/gitweb.js"; + $logo_url = "https://git.immae.eu/"; + $projects_list_group_categories = "true"; + $projects_list_description_width = 60; + $project_list_default_category = "__Others__"; + $highlight_bin = "${highlight}/bin/highlight"; + ''; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "cgid" ]; + webappName = "tools_gitweb"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/ + ScriptAliasMatch \ + "(?x)^/(.*/(HEAD | \ + info/refs | \ + objects/(info/[^/]+ | \ + [0-9a-f]{2}/[0-9a-f]{38} | \ + pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ + git-(upload|receive)-pack))$" \ + ${git}/libexec/git-core/git-http-backend/$1 + + + Require all granted + + + DirectoryIndex gitweb.cgi + Require all granted + AllowOverride None + Options ExecCGI FollowSymLinks + + SetHandler cgi-script + SetEnv GITWEB_CONFIG "${config}" + + + ''; + }; +} diff --git a/modules/private/websites/tools/git/mantisbt.nix b/modules/private/websites/tools/git/mantisbt.nix new file mode 100644 index 00000000..a1b830eb --- /dev/null +++ b/modules/private/websites/tools/git/mantisbt.nix @@ -0,0 +1,96 @@ +{ env, mantisbt_2, mantisbt_2-plugins }: +rec { + activationScript = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/mantisbt + ''; + }; + keys = [{ + dest = "webapps/tools-mantisbt"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + + DirectoryIndex index.php + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + AllowOverride All + Options FollowSymlinks + Require all granted + + + #Reenable during upgrade + Require all denied + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot "/var/secrets/webapps/tools-mantisbt" ] + ++ webRoot.plugins); + socket = "/var/run/phpfpm/mantisbt.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + php_admin_value[upload_max_filesize] = 5000000 + + php_admin_value[open_basedir] = "${basedir}:/tmp:/var/lib/php/sessions/mantisbt" + php_admin_value[session.save_path] = "/var/lib/php/sessions/mantisbt" + ''; + }; +} diff --git a/modules/private/websites/tools/mastodon/default.nix b/modules/private/websites/tools/mastodon/default.nix new file mode 100644 index 00000000..d742a33a --- /dev/null +++ b/modules/private/websites/tools/mastodon/default.nix @@ -0,0 +1,128 @@ +{ lib, pkgs, config, myconfig, ... }: +let + env = myconfig.env.tools.mastodon; + root = "/run/current-system/webapps/tools_mastodon"; + cfg = config.myServices.websites.tools.mastodon; + mcfg = config.services.mastodon; +in { + options.myServices.websites.tools.mastodon = { + enable = lib.mkEnableOption "enable mastodon's website"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = [{ + dest = "webapps/tools-mastodon"; + user = "mastodon"; + group = "mastodon"; + permissions = "0400"; + text = '' + REDIS_HOST=${env.redis.host} + REDIS_PORT=${env.redis.port} + REDIS_DB=${env.redis.db} + DB_HOST=${env.postgresql.socket} + DB_USER=${env.postgresql.user} + DB_NAME=${env.postgresql.database} + DB_PASS=${env.postgresql.password} + DB_PORT=${env.postgresql.port} + + LOCAL_DOMAIN=mastodon.immae.eu + LOCAL_HTTPS=true + ALTERNATE_DOMAINS=immae.eu + + PAPERCLIP_SECRET=${env.paperclip_secret} + SECRET_KEY_BASE=${env.secret_key_base} + OTP_SECRET=${env.otp_secret} + + VAPID_PRIVATE_KEY=${env.vapid.private} + VAPID_PUBLIC_KEY=${env.vapid.public} + + SMTP_DELIVERY_METHOD=sendmail + SMTP_FROM_ADDRESS=mastodon@tools.immae.eu + SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" + PAPERCLIP_ROOT_PATH=${mcfg.dataDir} + + STREAMING_CLUSTER_NUM=1 + + RAILS_LOG_LEVEL=warn + + # LDAP authentication (optional) + LDAP_ENABLED=true + LDAP_HOST=ldap.immae.eu + LDAP_PORT=636 + LDAP_METHOD=simple_tls + LDAP_BASE="dc=immae,dc=eu" + LDAP_BIND_DN="cn=mastodon,ou=services,dc=immae,dc=eu" + LDAP_PASSWORD="${env.ldap.password}" + LDAP_UID="uid" + LDAP_SEARCH_FILTER="(&(%{uid}=%{email})(memberOf=cn=users,cn=mastodon,ou=services,dc=immae,dc=eu))" + ''; + }]; + services.mastodon = { + enable = true; + configFile = "/var/secrets/webapps/tools-mastodon"; + socketsPrefix = "live_immae"; + dataDir = "/var/lib/mastodon_immae"; + }; + + services.websites.tools.modules = [ + "headers" "proxy" "proxy_wstunnel" "proxy_http" + ]; + system.extraSystemBuilderCmds = '' + mkdir -p $out/webapps + ln -s ${mcfg.workdir}/public/ $out/webapps/tools_mastodon + ''; + services.websites.tools.vhostConfs.mastodon = { + certName = "eldiron"; + addToCerts = true; + hosts = ["mastodon.immae.eu" ]; + root = root; + extraConfig = [ '' + Header always set Referrer-Policy "strict-origin-when-cross-origin" + Header always set Strict-Transport-Security "max-age=31536000" + + + Header always set Cache-Control "public, max-age=31536000, immutable" + Require all granted + + + ProxyPreserveHost On + RequestHeader set X-Forwarded-Proto "https" + + RewriteEngine On + + ProxyPass /500.html ! + ProxyPass /sw.js ! + ProxyPass /embed.js ! + ProxyPass /robots.txt ! + ProxyPass /manifest.json ! + ProxyPass /browserconfig.xml ! + ProxyPass /mask-icon.svg ! + ProxyPassMatch ^(/.*\.(png|ico|gif)$) ! + ProxyPassMatch ^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) ! + + RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] + RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L] + ProxyPass / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ + ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ + + Alias /system ${mcfg.dataDir} + + + Require all granted + Options -MultiViews + + + + Require all granted + Options -MultiViews +FollowSymlinks + + + ErrorDocument 500 /500.html + ErrorDocument 501 /500.html + ErrorDocument 502 /500.html + ErrorDocument 503 /500.html + ErrorDocument 504 /500.html + '' ]; + }; + }; +} diff --git a/modules/private/websites/tools/mgoblin/default.nix b/modules/private/websites/tools/mgoblin/default.nix new file mode 100644 index 00000000..5da81f68 --- /dev/null +++ b/modules/private/websites/tools/mgoblin/default.nix @@ -0,0 +1,122 @@ +{ lib, pkgs, config, myconfig, ... }: +let + env = myconfig.env.tools.mediagoblin; + cfg = config.myServices.websites.tools.mediagoblin; + mcfg = config.services.mediagoblin; +in { + options.myServices.websites.tools.mediagoblin = { + enable = lib.mkEnableOption "enable mediagoblin's website"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = [{ + dest = "webapps/tools-mediagoblin"; + user = "mediagoblin"; + group = "mediagoblin"; + permissions = "0400"; + text = '' + [DEFAULT] + data_basedir = "${mcfg.dataDir}" + + [mediagoblin] + direct_remote_path = /mgoblin_static/ + email_sender_address = "mediagoblin@tools.immae.eu" + + #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db + sql_engine = ${env.psql_url} + + email_debug_mode = false + allow_registration = false + allow_reporting = true + + theme = airymodified + + user_privilege_scheme = "uploader,commenter,reporter" + + # We need to redefine them here since we override data_basedir + # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini + workbench_path = %(data_basedir)s/media/workbench + crypto_path = %(data_basedir)s/crypto + theme_install_dir = %(data_basedir)s/themes/ + theme_linked_assets_dir = %(data_basedir)s/theme_static/ + plugin_linked_assets_dir = %(data_basedir)s/plugin_static/ + + [storage:queuestore] + base_dir = %(data_basedir)s/media/queue + + [storage:publicstore] + base_dir = %(data_basedir)s/media/public + base_url = /mgoblin_media/ + + [celery] + CELERY_RESULT_DBURI = ${env.redis_url} + BROKER_URL = ${env.redis_url} + CELERYD_CONCURRENCY = 1 + + [plugins] + [[mediagoblin.plugins.geolocation]] + [[mediagoblin.plugins.ldap]] + [[[immae.eu]]] + LDAP_SERVER_URI = 'ldaps://ldap.immae.eu:636' + LDAP_SEARCH_BASE = 'dc=immae,dc=eu' + LDAP_BIND_DN = 'cn=mediagoblin,ou=services,dc=immae,dc=eu' + LDAP_BIND_PW = '${env.ldap.password}' + LDAP_SEARCH_FILTER = '(&(memberOf=cn=users,cn=mediagoblin,ou=services,dc=immae,dc=eu)(uid={username}))' + EMAIL_SEARCH_FIELD = 'mail' + [[mediagoblin.plugins.basicsearch]] + [[mediagoblin.plugins.piwigo]] + [[mediagoblin.plugins.processing_info]] + [[mediagoblin.media_types.image]] + [[mediagoblin.media_types.video]] + ''; + }]; + + users.users.mediagoblin.extraGroups = [ "keys" ]; + + services.mediagoblin = { + enable = true; + plugins = builtins.attrValues pkgs.webapps.mediagoblin-plugins; + configFile = "/var/secrets/webapps/tools-mediagoblin"; + }; + + services.websites.tools.modules = [ + "proxy" "proxy_http" + ]; + users.users.wwwrun.extraGroups = [ "mediagoblin" ]; + services.websites.tools.vhostConfs.mgoblin = { + certName = "eldiron"; + addToCerts = true; + hosts = ["mgoblin.immae.eu" ]; + root = null; + extraConfig = [ '' + Alias /mgoblin_media ${mcfg.dataDir}/media/public + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + Alias /theme_static ${mcfg.dataDir}/theme_static + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + Alias /plugin_static ${mcfg.dataDir}/plugin_static + + Options -Indexes +FollowSymLinks +MultiViews +Includes + Require all granted + + + ProxyPreserveHost on + ProxyVia On + ProxyRequests Off + ProxyPass /mgoblin_media ! + ProxyPass /theme_static ! + ProxyPass /plugin_static ! + ProxyPassMatch ^/.well-known/acme-challenge ! + ProxyPass / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ + ProxyPassReverse / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ + '' ]; + }; + }; +} diff --git a/modules/private/websites/tools/peertube/default.nix b/modules/private/websites/tools/peertube/default.nix new file mode 100644 index 00000000..dee1b81d --- /dev/null +++ b/modules/private/websites/tools/peertube/default.nix @@ -0,0 +1,179 @@ +{ lib, pkgs, config, myconfig, ... }: +let + env = myconfig.env.tools.peertube; + cfg = config.myServices.websites.tools.peertube; + pcfg = config.services.peertube; +in { + options.myServices.websites.tools.peertube = { + enable = lib.mkEnableOption "enable Peertube's website"; + }; + + config = lib.mkIf cfg.enable { + services.peertube = { + enable = true; + configFile = "/var/secrets/webapps/tools-peertube"; + package = pkgs.webapps.peertube.override { ldap = true; }; + }; + users.users.peertube.extraGroups = [ "keys" ]; + + secrets.keys = [{ + dest = "webapps/tools-peertube"; + user = "peertube"; + group = "peertube"; + permissions = "0640"; + text = '' + listen: + hostname: 'localhost' + port: ${env.listenPort} + webserver: + https: true + hostname: 'peertube.immae.eu' + port: 443 + trust_proxy: + - 'loopback' + database: + hostname: '${env.postgresql.socket}' + port: 5432 + suffix: '_prod' + username: '${env.postgresql.user}' + password: '${env.postgresql.password}' + pool: + max: 5 + redis: + socket: '${env.redis.socket}' + auth: null + db: ${env.redis.db_index} + ldap: + enable: true + ldap_only: false + url: ldaps://${env.ldap.host}/${env.ldap.base} + bind_dn: ${env.ldap.dn} + bind_password: ${env.ldap.password} + base: ${env.ldap.base} + mail_entry: "mail" + user_filter: "${env.ldap.filter}" + smtp: + transport: sendmail + sendmail: '/run/wrappers/bin/sendmail' + hostname: null + port: 465 # If you use StartTLS: 587 + username: null + password: null + tls: true # If you use StartTLS: false + disable_starttls: false + ca_file: null # Used for self signed certificates + from_address: 'peertube@tools.immae.eu' + storage: + tmp: '${pcfg.dataDir}/storage/tmp/' + avatars: '${pcfg.dataDir}/storage/avatars/' + videos: '${pcfg.dataDir}/storage/videos/' + redundancy: '${pcfg.dataDir}/storage/videos/' + logs: '${pcfg.dataDir}/storage/logs/' + previews: '${pcfg.dataDir}/storage/previews/' + thumbnails: '${pcfg.dataDir}/storage/thumbnails/' + torrents: '${pcfg.dataDir}/storage/torrents/' + captions: '${pcfg.dataDir}/storage/captions/' + cache: '${pcfg.dataDir}/storage/cache/' + log: + level: 'info' + search: + remote_uri: + users: true + anonymous: false + trending: + videos: + interval_days: 7 + redundancy: + videos: + check_interval: '1 hour' # How often you want to check new videos to cache + strategies: # Just uncomment strategies you want + # Following are saved in local-production.json + cache: + previews: + size: 500 # Max number of previews you want to cache + captions: + size: 500 # Max number of video captions/subtitles you want to cache + admin: + email: 'peertube@tools.immae.eu' + contact_form: + enabled: true + signup: + enabled: false + limit: 10 + requires_email_verification: false + filters: + cidr: + whitelist: [] + blacklist: [] + user: + video_quota: -1 + video_quota_daily: -1 + transcoding: + enabled: false + allow_additional_extensions: true + threads: 1 + resolutions: + 240p: false + 360p: false + 480p: true + 720p: true + 1080p: true + hls: + enabled: false + import: + videos: + http: + enabled: true + torrent: + enabled: false + instance: + name: 'Immae’s PeerTube' + short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.' + description: ''' + terms: ''' + default_client_route: '/videos/trending' + default_nsfw_policy: 'blur' + customizations: + javascript: ''' + css: ''' + robots: | + User-agent: * + Disallow: + securitytxt: + "# If you would like to report a security issue\n# you may report it to:\nContact: https://github.com/Chocobozzz/PeerTube/blob/develop/SECURITY.md\nContact: mailto:" + services: + # You can provide a reporting endpoint for Content Security Policy violations + csp-logger: + twitter: + username: '@_immae' + whitelisted: false + ''; + }]; + + services.websites.tools.modules = [ + "headers" "proxy" "proxy_http" "proxy_wstunnel" + ]; + services.websites.tools.vhostConfs.peertube = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "peertube.immae.eu" ]; + root = null; + extraConfig = [ '' + RewriteEngine On + + RewriteCond %{REQUEST_URI} ^/socket.io [NC] + RewriteCond %{QUERY_STRING} transport=websocket [NC] + RewriteRule /(.*) ws://localhost:${env.listenPort}/$1 [P,NE,QSA,L] + + RewriteCond %{REQUEST_URI} ^/tracker/socket [NC] + RewriteRule /(.*) ws://localhost:${env.listenPort}/$1 [P,NE,QSA,L] + + ProxyPass / http://localhost:${env.listenPort}/ + ProxyPassReverse / http://localhost:${env.listenPort}/ + + ProxyPreserveHost On + RequestHeader set X-Real-IP %{REMOTE_ADDR}s + '' ]; + }; + }; +} diff --git a/modules/private/websites/tools/tools/adminer.nix b/modules/private/websites/tools/tools/adminer.nix new file mode 100644 index 00000000..cd51e7fe --- /dev/null +++ b/modules/private/websites/tools/tools/adminer.nix @@ -0,0 +1,47 @@ +{ adminer }: +rec { + activationScript = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/adminer + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/tmp/adminer + ''; + }; + webRoot = adminer; + phpFpm = rec { + socket = "/var/run/phpfpm/adminer.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 5 + pm.process_idle_timeout = 60 + ;php_admin_flag[log_errors] = on + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = AdminerPHPSESSID + php_admin_value[open_basedir] = "${webRoot}:/tmp:/var/lib/php/sessions/adminer:/var/lib/php/tmp/adminer" + php_admin_value[session.save_path] = "/var/lib/php/sessions/adminer" + php_admin_value[upload_tmp_dir] = "/var/lib/php/tmp/adminer" + ''; + }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "_adminer"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /adminer ${root} + + DirectoryIndex index.php + Require all granted + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ''; + }; +} diff --git a/modules/private/websites/tools/tools/default.nix b/modules/private/websites/tools/tools/default.nix new file mode 100644 index 00000000..94a2be16 --- /dev/null +++ b/modules/private/websites/tools/tools/default.nix @@ -0,0 +1,302 @@ +{ lib, pkgs, config, myconfig, ... }: +let + adminer = pkgs.callPackage ./adminer.nix { + inherit (pkgs.webapps) adminer; + }; + ympd = pkgs.callPackage ./ympd.nix { + env = myconfig.env.tools.ympd; + }; + ttrss = pkgs.callPackage ./ttrss.nix { + inherit (pkgs.webapps) ttrss ttrss-plugins; + env = myconfig.env.tools.ttrss; + }; + roundcubemail = pkgs.callPackage ./roundcubemail.nix { + inherit (pkgs.webapps) roundcubemail roundcubemail-plugins roundcubemail-skins; + env = myconfig.env.tools.roundcubemail; + }; + rainloop = pkgs.callPackage ./rainloop.nix {}; + kanboard = pkgs.callPackage ./kanboard.nix { + env = myconfig.env.tools.kanboard; + }; + wallabag = pkgs.callPackage ./wallabag.nix { + inherit (pkgs.webapps) wallabag; + env = myconfig.env.tools.wallabag; + }; + yourls = pkgs.callPackage ./yourls.nix { + inherit (pkgs.webapps) yourls yourls-plugins; + env = myconfig.env.tools.yourls; + }; + rompr = pkgs.callPackage ./rompr.nix { + inherit (pkgs.webapps) rompr; + env = myconfig.env.tools.rompr; + }; + shaarli = pkgs.callPackage ./shaarli.nix { + env = myconfig.env.tools.shaarli; + }; + dokuwiki = pkgs.callPackage ./dokuwiki.nix { + inherit (pkgs.webapps) dokuwiki dokuwiki-plugins; + }; + ldap = pkgs.callPackage ./ldap.nix { + inherit (pkgs.webapps) phpldapadmin; + env = myconfig.env.tools.phpldapadmin; + }; + + cfg = config.myServices.websites.tools.tools; +in { + options.myServices.websites.tools.tools = { + enable = lib.mkEnableOption "enable tools website"; + }; + + config = lib.mkIf cfg.enable { + secrets.keys = + kanboard.keys + ++ ldap.keys + ++ roundcubemail.keys + ++ shaarli.keys + ++ ttrss.keys + ++ wallabag.keys + ++ yourls.keys; + + services.websites.integration.modules = + rainloop.apache.modules; + + services.websites.tools.modules = + [ "proxy_fcgi" ] + ++ adminer.apache.modules + ++ ympd.apache.modules + ++ ttrss.apache.modules + ++ roundcubemail.apache.modules + ++ wallabag.apache.modules + ++ yourls.apache.modules + ++ rompr.apache.modules + ++ shaarli.apache.modules + ++ dokuwiki.apache.modules + ++ ldap.apache.modules + ++ kanboard.apache.modules; + + services.websites.integration.vhostConfs.devtools = { + certName = "eldiron"; + addToCerts = true; + hosts = ["devtools.immae.eu" ]; + root = "/var/lib/ftp/devtools.immae.eu"; + extraConfig = [ + '' + + DirectoryIndex index.php index.htm index.html + AllowOverride all + Require all granted + + SetHandler "proxy:unix:/var/run/phpfpm/devtools.sock|fcgi://localhost" + + + '' + rainloop.apache.vhostConf + ]; + }; + + services.websites.tools.vhostConfs.tools = { + certName = "eldiron"; + addToCerts = true; + hosts = ["tools.immae.eu" ]; + root = "/var/lib/ftp/tools.immae.eu"; + extraConfig = [ + '' + + DirectoryIndex index.php index.htm index.html + AllowOverride all + Require all granted + + SetHandler "proxy:unix:/var/run/phpfpm/tools.sock|fcgi://localhost" + + + '' + adminer.apache.vhostConf + ympd.apache.vhostConf + ttrss.apache.vhostConf + roundcubemail.apache.vhostConf + wallabag.apache.vhostConf + yourls.apache.vhostConf + rompr.apache.vhostConf + shaarli.apache.vhostConf + dokuwiki.apache.vhostConf + ldap.apache.vhostConf + kanboard.apache.vhostConf + ]; + }; + + services.websites.tools.vhostConfs.outils = { + certName = "eldiron"; + addToCerts = true; + hosts = [ "outils.immae.eu" ]; + root = null; + extraConfig = [ + '' + RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1 + + RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1 + + RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1 + RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1 + + RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1 + RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1 + RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1 + RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1 + + RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1 + + RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1 + '' + ]; + }; + + systemd.services = { + phpfpm-dokuwiki = { + after = lib.mkAfter dokuwiki.phpFpm.serviceDeps; + wants = dokuwiki.phpFpm.serviceDeps; + }; + phpfpm-kanboard = { + after = lib.mkAfter kanboard.phpFpm.serviceDeps; + wants = kanboard.phpFpm.serviceDeps; + }; + phpfpm-ldap = { + after = lib.mkAfter ldap.phpFpm.serviceDeps; + wants = ldap.phpFpm.serviceDeps; + }; + phpfpm-rainloop = { + after = lib.mkAfter rainloop.phpFpm.serviceDeps; + wants = rainloop.phpFpm.serviceDeps; + }; + phpfpm-roundcubemail = { + after = lib.mkAfter roundcubemail.phpFpm.serviceDeps; + wants = roundcubemail.phpFpm.serviceDeps; + }; + phpfpm-shaarli = { + after = lib.mkAfter shaarli.phpFpm.serviceDeps; + wants = shaarli.phpFpm.serviceDeps; + }; + phpfpm-ttrss = { + after = lib.mkAfter ttrss.phpFpm.serviceDeps; + wants = ttrss.phpFpm.serviceDeps; + }; + phpfpm-wallabag = { + after = lib.mkAfter wallabag.phpFpm.serviceDeps; + wants = wallabag.phpFpm.serviceDeps; + preStart = lib.mkAfter wallabag.phpFpm.preStart; + }; + phpfpm-yourls = { + after = lib.mkAfter yourls.phpFpm.serviceDeps; + wants = yourls.phpFpm.serviceDeps; + }; + ympd = { + description = "Standalone MPD Web GUI written in C"; + wantedBy = [ "multi-user.target" ]; + script = '' + export MPD_PASSWORD=$(cat /var/secrets/mpd) + ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody + ''; + }; + tt-rss = { + description = "Tiny Tiny RSS feeds update daemon"; + serviceConfig = { + User = "wwwrun"; + ExecStart = "${pkgs.php}/bin/php ${ttrss.webRoot}/update.php --daemon"; + StandardOutput = "syslog"; + StandardError = "syslog"; + PermissionsStartOnly = true; + }; + + wantedBy = [ "multi-user.target" ]; + requires = ["postgresql.service"]; + after = ["network.target" "postgresql.service"]; + }; + }; + + services.phpfpm.pools.roundcubemail = { + listen = roundcubemail.phpFpm.socket; + extraConfig = roundcubemail.phpFpm.pool; + phpOptions = config.services.phpfpm.phpOptions + roundcubemail.phpFpm.phpConfig; + }; + + services.phpfpm.pools.devtools = { + listen = "/var/run/phpfpm/devtools.sock"; + extraConfig = '' + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 + + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/devtools.immae.eu:/tmp" + ''; + phpOptions = config.services.phpfpm.phpOptions + '' + extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so + extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so + zend_extension=${pkgs.php}/lib/php/extensions/opcache.so + ''; + }; + + services.phpfpm.poolConfigs = { + adminer = adminer.phpFpm.pool; + ttrss = ttrss.phpFpm.pool; + wallabag = wallabag.phpFpm.pool; + yourls = yourls.phpFpm.pool; + rompr = rompr.phpFpm.pool; + shaarli = shaarli.phpFpm.pool; + dokuwiki = dokuwiki.phpFpm.pool; + ldap = ldap.phpFpm.pool; + rainloop = rainloop.phpFpm.pool; + kanboard = kanboard.phpFpm.pool; + tools = '' + listen = /var/run/phpfpm/tools.sock + user = wwwrun + group = wwwrun + listen.owner = wwwrun + listen.group = wwwrun + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = ToolsPHPSESSID + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/tools.immae.eu:/tmp" + ''; + }; + + system.activationScripts = { + adminer = adminer.activationScript; + ttrss = ttrss.activationScript; + roundcubemail = roundcubemail.activationScript; + wallabag = wallabag.activationScript; + yourls = yourls.activationScript; + rompr = rompr.activationScript; + shaarli = shaarli.activationScript; + dokuwiki = dokuwiki.activationScript; + rainloop = rainloop.activationScript; + kanboard = kanboard.activationScript; + ldap = ldap.activationScript; + }; + + myServices.websites.webappDirs = { + _adminer = adminer.webRoot; + "${dokuwiki.apache.webappName}" = dokuwiki.webRoot; + "${ldap.apache.webappName}" = "${ldap.webRoot}/htdocs"; + "${rompr.apache.webappName}" = rompr.webRoot; + "${roundcubemail.apache.webappName}" = roundcubemail.webRoot; + "${shaarli.apache.webappName}" = shaarli.webRoot; + "${ttrss.apache.webappName}" = ttrss.webRoot; + "${wallabag.apache.webappName}" = wallabag.webRoot; + "${yourls.apache.webappName}" = yourls.webRoot; + "${rainloop.apache.webappName}" = rainloop.webRoot; + "${kanboard.apache.webappName}" = kanboard.webRoot; + }; + + }; +} + diff --git a/modules/private/websites/tools/tools/dokuwiki.nix b/modules/private/websites/tools/tools/dokuwiki.nix new file mode 100644 index 00000000..c61d15f2 --- /dev/null +++ b/modules/private/websites/tools/tools/dokuwiki.nix @@ -0,0 +1,61 @@ +{ lib, stdenv, dokuwiki, dokuwiki-plugins }: +rec { + varDir = "/var/lib/dokuwiki"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + if [ ! -d ${varDir} ]; then + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/animals + cp -a ${webRoot}/conf.dist ${varDir}/conf + cp -a ${webRoot}/data.dist ${varDir}/data + cp -a ${webRoot}/ + chown -R ${apache.user}:${apache.user} ${varDir}/config ${varDir}/data + chmod -R 755 ${varDir}/config ${varDir}/data + fi + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + ''; + }; + webRoot = dokuwiki.withPlugins (builtins.attrValues dokuwiki-plugins); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_dokuwiki"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /dokuwiki "${root}" + + DirectoryIndex index.php + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + AllowOverride All + Options +FollowSymlinks + Require all granted + + ''; + }; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot varDir ] ++ webRoot.plugins); + socket = "/var/run/phpfpm/dokuwiki.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = DokuwikiPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/kanboard.nix b/modules/private/websites/tools/tools/kanboard.nix new file mode 100644 index 00000000..68f92b81 --- /dev/null +++ b/modules/private/websites/tools/tools/kanboard.nix @@ -0,0 +1,86 @@ +{ env, kanboard }: +rec { + varDir = "/var/lib/kanboard"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + install -TDm644 ${webRoot}/dataold/.htaccess ${varDir}/data/.htaccess + install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config + ''; + }; + keys = [{ + dest = "webapps/tools-kanboard"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + + ''; + }]; + webRoot = kanboard { kanboard_config = "/var/secrets/webapps/tools-kanboard"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_kanboard"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /kanboard "${root}" + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + Require all denied + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir "/var/secrets/webapps/tools-kanboard" ]; + socket = "/var/run/phpfpm/kanboard.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = KanboardPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/ldap.nix b/modules/private/websites/tools/tools/ldap.nix new file mode 100644 index 00000000..4585ee3c --- /dev/null +++ b/modules/private/websites/tools/tools/ldap.nix @@ -0,0 +1,74 @@ +{ lib, php, env, writeText, phpldapadmin }: +rec { + activationScript = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/phpldapadmin + ''; + }; + keys = [{ + dest = "webapps/tools-ldap"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + custom->appearance['show_clear_password'] = true; + $config->custom->appearance['hide_template_warning'] = true; + $config->custom->appearance['theme'] = "tango"; + $config->custom->appearance['minimalMode'] = true; + + $servers = new Datastore(); + + $servers->newServer('ldap_pla'); + $servers->setValue('server','name','Immae’s LDAP'); + $servers->setValue('server','host','ldaps://${env.ldap.host}'); + $servers->setValue('login','auth_type','cookie'); + $servers->setValue('login','bind_id','${env.ldap.dn}'); + $servers->setValue('login','bind_pass','${env.ldap.password}'); + $servers->setValue('appearance','password_hash','ssha'); + $servers->setValue('login','attr','uid'); + $servers->setValue('login','fallback_dn',true); + ''; + }]; + webRoot = phpldapadmin.override { config = "/var/secrets/webapps/tools-ldap"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_ldap"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /ldap "${root}" + + DirectoryIndex index.php + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + AllowOverride None + Require all granted + + ''; + }; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot "/var/secrets/webapps/tools-ldap" ]; + socket = "/var/run/phpfpm/ldap.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = LdapPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp:/var/lib/php/sessions/phpldapadmin" + php_admin_value[session.save_path] = "/var/lib/php/sessions/phpldapadmin" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/rainloop.nix b/modules/private/websites/tools/tools/rainloop.nix new file mode 100644 index 00000000..dbf0f248 --- /dev/null +++ b/modules/private/websites/tools/tools/rainloop.nix @@ -0,0 +1,59 @@ +{ lib, pkgs, writeText, stdenv, fetchurl }: +rec { + varDir = "/var/lib/rainloop"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/data + ''; + }; + webRoot = pkgs.rainloop-community.override { dataPath = "${varDir}/data"; }; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_rainloop"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /rainloop "${root}" + + DirectoryIndex index.php + AllowOverride All + Options -FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + + Require all denied + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + socket = "/var/run/phpfpm/rainloop.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = RainloopPHPSESSID + php_admin_value[upload_max_filesize] = 200M + php_admin_value[post_max_size] = 200M + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/rompr.nix b/modules/private/websites/tools/tools/rompr.nix new file mode 100644 index 00000000..fea59fc9 --- /dev/null +++ b/modules/private/websites/tools/tools/rompr.nix @@ -0,0 +1,77 @@ +{ lib, env, rompr }: +rec { + varDir = "/var/lib/rompr"; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/prefs ${varDir}/albumart ${varDir}/phpSessions + ''; + webRoot = rompr; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "headers" "mime" "proxy_fcgi" ]; + webappName = "tools_rompr"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /rompr ${root} + + + Options Indexes FollowSymLinks + DirectoryIndex index.php + AllowOverride all + Require all granted + Order allow,deny + Allow from all + ErrorDocument 404 /rompr/404.php + AddType image/x-icon .ico + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + + + + Header Set Cache-Control "max-age=0, no-store" + Header Set Cache-Control "no-cache, must-revalidate" + + + + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + + ''; + }; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + socket = "/var/run/phpfpm/rompr.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = RomprPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + php_flag[magic_quotes_gpc] = Off + php_flag[track_vars] = On + php_flag[register_globals] = Off + php_admin_flag[allow_url_fopen] = On + php_value[include_path] = ${webRoot} + php_admin_value[upload_tmp_dir] = "${varDir}/prefs" + php_admin_value[post_max_size] = 32M + php_admin_value[upload_max_filesize] = 32M + php_admin_value[memory_limit] = 256M + ''; + }; +} diff --git a/modules/private/websites/tools/tools/roundcubemail.nix b/modules/private/websites/tools/tools/roundcubemail.nix new file mode 100644 index 00000000..8974d1bb --- /dev/null +++ b/modules/private/websites/tools/tools/roundcubemail.nix @@ -0,0 +1,121 @@ +{ env, roundcubemail, roundcubemail-plugins, roundcubemail-skins, phpPackages, apacheHttpd }: +rec { + varDir = "/var/lib/roundcubemail"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/cache ${varDir}/logs + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + ''; + }; + keys = [{ + dest = "webapps/tools-roundcube"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + array("verify_peer" => false)); + $config['smtp_server'] = 'tls://mail.immae.eu'; + $config['smtp_port'] = '25'; + $config['managesieve_host'] = 'mail.immae.eu'; + $config['managesieve_port'] = '4190'; + $config['managesieve_usetls'] = true; + $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false)); + + $config['imap_cache'] = 'db'; + $config['messages_cache'] = 'db'; + + $config['support_url'] = '''; + + $config['des_key'] = '${env.secret}'; + + $config['skin'] = 'elastic'; + $config['plugins'] = array( + 'attachment_reminder', + 'emoticons', + 'filesystem_attachments', + 'hide_blockquote', + 'identicon', + 'identity_select', + 'jqueryui', + 'managesieve', + 'newmail_notifier', + 'vcard_attachments', + 'zipdownload', + + 'automatic_addressbook', + 'message_highlight', + 'carddav', + // Ne marche pas ?: 'ident_switch', + // Ne marche pas ?: 'thunderbird_labels', + ); + + $config['language'] = 'fr_FR'; + + $config['drafts_mbox'] = 'Mail/Drafts'; + $config['junk_mbox'] = 'Mail/Spam'; + $config['sent_mbox'] = 'Mail/sent'; + $config['trash_mbox'] = '''; + $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', '''); + $config['draft_autosave'] = 60; + $config['enable_installer'] = false; + $config['log_driver'] = 'file'; + $config['temp_dir'] = '${varDir}/cache'; + $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; + ''; + }]; + webRoot = (roundcubemail.override { roundcube_config = "/var/secrets/webapps/tools-roundcube"; }).withPlugins + (builtins.attrValues roundcubemail-plugins) (builtins.attrValues roundcubemail-skins); + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_roundcubemail"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /roundcube "${root}" + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot "/var/secrets/webapps/tools-roundcube" varDir ] + ++ webRoot.plugins + ++ webRoot.skins); + phpConfig = '' + date.timezone = 'CET' + extension=${phpPackages.imagick}/lib/php/extensions/imagick.so + ''; + socket = "/var/run/phpfpm/roundcubemail.sock"; + pool = '' + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = RoundcubemailPHPSESSID + php_admin_value[upload_max_filesize] = 200M + php_admin_value[post_max_size] = 200M + php_admin_value[open_basedir] = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/shaarli.nix b/modules/private/websites/tools/tools/shaarli.nix new file mode 100644 index 00000000..2e89a473 --- /dev/null +++ b/modules/private/websites/tools/tools/shaarli.nix @@ -0,0 +1,65 @@ +{ lib, env, stdenv, fetchurl, shaarli }: +let + varDir = "/var/lib/shaarli"; +in rec { + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/cache ${varDir}/pagecache ${varDir}/tmp ${varDir}/data \ + ${varDir}/phpSessions + ''; + webRoot = shaarli varDir; + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" "rewrite" "env" ]; + webappName = "tools_shaarli"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /Shaarli "${root}" + + Include /var/secrets/webapps/tools-shaarli + + DirectoryIndex index.php index.htm index.html + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ''; + }; + keys = [{ + dest = "webapps/tools-shaarli"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + SetEnv SHAARLI_LDAP_PASSWORD "${env.ldap.password}" + SetEnv SHAARLI_LDAP_DN "${env.ldap.dn}" + SetEnv SHAARLI_LDAP_HOST "ldaps://${env.ldap.host}" + SetEnv SHAARLI_LDAP_BASE "${env.ldap.base}" + SetEnv SHAARLI_LDAP_FILTER "${env.ldap.search}" + ''; + }]; + phpFpm = rec { + serviceDeps = [ "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; + socket = "/var/run/phpfpm/shaarli.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = ShaarliPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/ttrss.nix b/modules/private/websites/tools/tools/ttrss.nix new file mode 100644 index 00000000..05c8cab0 --- /dev/null +++ b/modules/private/websites/tools/tools/ttrss.nix @@ -0,0 +1,131 @@ +{ php, env, ttrss, ttrss-plugins }: +rec { + varDir = "/var/lib/ttrss"; + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/lock ${varDir}/cache ${varDir}/feed-icons + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/cache/export/ \ + ${varDir}/cache/feeds/ \ + ${varDir}/cache/images/ \ + ${varDir}/cache/js/ \ + ${varDir}/cache/simplepie/ \ + ${varDir}/cache/upload/ + touch ${varDir}/feed-icons/index.html + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + ''; + }; + keys = [{ + dest = "webapps/tools-ttrss"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + + DirectoryIndex index.php + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + AllowOverride All + Options FollowSymlinks + Require all granted + + ''; + }; + phpFpm = rec { + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot "/var/secrets/webapps/tools-ttrss" varDir ] + ++ webRoot.plugins); + socket = "/var/run/phpfpm/ttrss.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = TtrssPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; +} diff --git a/modules/private/websites/tools/tools/wallabag.nix b/modules/private/websites/tools/tools/wallabag.nix new file mode 100644 index 00000000..d6e58828 --- /dev/null +++ b/modules/private/websites/tools/tools/wallabag.nix @@ -0,0 +1,148 @@ +{ env, wallabag }: +rec { + varDir = "/var/lib/wallabag"; + keys = [{ + dest = "webapps/tools-wallabag"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_driver: pdo_pgsql + database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver + database_host: ${env.postgresql.socket} + database_port: ${env.postgresql.port} + database_name: ${env.postgresql.database} + database_user: ${env.postgresql.user} + database_password: ${env.postgresql.password} + database_path: null + database_table_prefix: wallabag_ + database_socket: null + database_charset: utf8 + domain_name: https://tools.immae.eu/wallabag + mailer_transport: sendmail + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + locale: fr + secret: ${env.secret} + twofactor_auth: true + twofactor_sender: wallabag@tools.immae.eu + fosuser_registration: false + fosuser_confirmation: true + from_email: wallabag@tools.immae.eu + rss_limit: 50 + rabbitmq_host: localhost + rabbitmq_port: 5672 + rabbitmq_user: guest + rabbitmq_password: guest + rabbitmq_prefetch_count: 10 + redis_scheme: unix + redis_host: null + redis_port: null + redis_path: ${env.redis.socket} + redis_password: null + sites_credentials: { } + ldap_enabled: true + ldap_host: ldap.immae.eu + ldap_port: 636 + ldap_tls: false + ldap_ssl: true + ldap_bind_requires_dn: true + ldap_base: 'dc=immae,dc=eu' + ldap_manager_dn: 'cn=wallabag,ou=services,dc=immae,dc=eu' + ldap_manager_pw: ${env.ldap.password} + ldap_filter: '(&(memberOf=cn=users,cn=wallabag,ou=services,dc=immae,dc=eu))' + ldap_admin_filter: '(&(memberOf=cn=admins,cn=wallabag,ou=services,dc=immae,dc=eu)(uid=%s))' + ldap_username_attribute: uid + ldap_email_attribute: mail + ldap_name_attribute: cn + ldap_enabled_attribute: null + services: + swiftmailer.mailer.default.transport: + class: Swift_SendmailTransport + arguments: ['/run/wrappers/bin/sendmail -bs'] + ''; + }]; + webappDir = wallabag.override { ldap = true; wallabag_config = "/var/secrets/webapps/tools-wallabag"; }; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/var ${varDir}/data/db ${varDir}/assets/images + ''; + webRoot = "${webappDir}/web"; + # Domain migration: Table wallabag_entry contains whole + # https://tools.immae.eu/wallabag domain name in preview_picture + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_wallabag"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /wallabag "${root}" + + AllowOverride None + Require all granted + # For OAuth (apps) + CGIPassAuth On + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + + Options -MultiViews + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ app.php [QSA,L] + + + + + RewriteEngine Off + + + + AllowOverride None + Require all granted + + ''; + }; + phpFpm = rec { + preStart = '' + if [ ! -f "${varDir}/currentWebappDir" -o \ + ! -f "${varDir}/currentKey" -o \ + "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${varDir}/currentKey; then + pushd ${webappDir} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear + rm -rf /var/lib/wallabag/var/cache/pro_ + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction + popd > /dev/null + echo -n "${webappDir}" > ${varDir}/currentWebappDir + sha512sum /var/secrets/webapps/tools-wallabag > ${varDir}/currentKey + fi + ''; + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webappDir "/var/secrets/webapps/tools-wallabag" varDir ]; + socket = "/var/run/phpfpm/wallabag.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = WallabagPHPSESSID + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:${basedir}:/tmp" + php_value[max_execution_time] = 300 + ''; + }; +} diff --git a/modules/private/websites/tools/tools/ympd.nix b/modules/private/websites/tools/tools/ympd.nix new file mode 100644 index 00000000..b54c4866 --- /dev/null +++ b/modules/private/websites/tools/tools/ympd.nix @@ -0,0 +1,40 @@ +{ env }: +let + ympd = rec { + config = { + webPort = "localhost:${env.listenPort}"; + host = env.mpd.host; + port = env.mpd.port; + }; + apache = { + modules = [ + "proxy_wstunnel" + ]; + vhostConf = '' + + Use LDAPConnect + Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu + + + RedirectMatch permanent "^/mpd$" "/mpd/" + + ProxyPass http://${config.webPort}/ + ProxyPassReverse http://${config.webPort}/ + ProxyPreserveHost on + + + ProxyPass ws://${config.webPort}/ws + + + ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/ + ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/ + + + ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/ + ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/ + + ''; + }; + }; +in + ympd diff --git a/modules/private/websites/tools/tools/yourls.nix b/modules/private/websites/tools/tools/yourls.nix new file mode 100644 index 00000000..0a8e8377 --- /dev/null +++ b/modules/private/websites/tools/tools/yourls.nix @@ -0,0 +1,93 @@ +{ env, yourls, yourls-plugins }: +rec { + activationScript = { + deps = [ "httpd" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/yourls + ''; + }; + keys = [{ + dest = "webapps/tools-yourls"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + AllowOverride None + Require all granted + + RewriteEngine On + RewriteBase /url/ + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^.*$ /url/yourls-loader.php [L] + + DirectoryIndex index.php + + ''; + }; + phpFpm = rec { + serviceDeps = [ "mysql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" ( + [ webRoot "/var/secrets/webapps/tools-yourls" ] + ++ webRoot.plugins); + socket = "/var/run/phpfpm/yourls.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = YourlsPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp:/var/lib/php/sessions/yourls" + php_admin_value[session.save_path] = "/var/lib/php/sessions/yourls" + ''; + }; +} diff --git a/modules/secrets.nix b/modules/secrets.nix new file mode 100644 index 00000000..b282e56e --- /dev/null +++ b/modules/secrets.nix @@ -0,0 +1,61 @@ +{ lib, pkgs, config, ... }: +{ + options.secrets = { + keys = lib.mkOption { + type = lib.types.listOf lib.types.unspecified; + default = []; + description = "Keys to upload to server"; + }; + location = lib.mkOption { + type = lib.types.path; + default = "/var/secrets"; + description = "Location where to put the keys"; + }; + }; + config = let + location = config.secrets.location; + keys = config.secrets.keys; + empty = pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out && touch $out/done"; + dumpKey = v: '' + mkdir -p secrets/$(dirname ${v.dest}) + echo -n ${lib.strings.escapeShellArg v.text} > secrets/${v.dest} + cat >> mods < 0) { + system.activationScripts.secrets = { + deps = [ "users" "wrappers" ]; + text = '' + install -m0750 -o root -g keys -d ${location} + if [ -f /run/keys/secrets.tar ]; then + if [ ! -f ${location}/currentSecrets ] || ! sha512sum -c --status "${location}/currentSecrets"; then + echo "rebuilding secrets" + rm -rf ${location} + install -m0750 -o root -g keys -d ${location} + ${pkgs.gnutar}/bin/tar --strip-components 1 -C ${location} -xf /run/keys/secrets.tar + sha512sum /run/keys/secrets.tar > ${location}/currentSecrets + find ${location} -type d -exec chown root:keys {} \; -exec chmod o-rx {} \; + fi + fi + ''; + }; + deployment.keys."secrets.tar" = { + permissions = "0400"; + # keyFile below is not evaluated at build time by nixops, so the + # `secrets` path doesn’t necessarily exist when uploading the + # keys, and nixops is unhappy. + user = "root${builtins.substring 10000 1 secrets}"; + group = "root"; + keyFile = "${secrets}"; + }; + }; +} diff --git a/modules/webapps/diaspora.nix b/modules/webapps/diaspora.nix new file mode 100644 index 00000000..65599b73 --- /dev/null +++ b/modules/webapps/diaspora.nix @@ -0,0 +1,171 @@ +{ lib, pkgs, config, ... }: +let + name = "diaspora"; + cfg = config.services.diaspora; + + uid = config.ids.uids.diaspora; + gid = config.ids.gids.diaspora; +in +{ + options.services.diaspora = { + enable = lib.mkEnableOption "Enable Diaspora’s service"; + user = lib.mkOption { + type = lib.types.str; + default = name; + description = "User account under which Diaspora runs"; + }; + group = lib.mkOption { + type = lib.types.str; + default = name; + description = "Group under which Diaspora runs"; + }; + adminEmail = lib.mkOption { + type = lib.types.str; + example = "admin@example.com"; + description = "Admin e-mail for Diaspora"; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Diaspora stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/${name}"; + description = '' + The directory where Diaspora puts runtime files and sockets. + ''; + }; + configDir = lib.mkOption { + type = lib.types.path; + description = '' + The configuration path for Diaspora. + ''; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.webapps.diaspora; + description = '' + Diaspora package to use. + ''; + }; + # Output variables + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Diaspora data directory for systemd + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Diaspora sockets directory for systemd + ''; + readOnly = true; + }; + workdir = lib.mkOption { + type = lib.types.package; + default = cfg.package.override { + varDir = cfg.dataDir; + podmin_email = cfg.adminEmail; + config_dir = cfg.configDir; + }; + description = '' + Adjusted diaspora package with overriden values + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + rails = "${cfg.socketsDir}/diaspora.sock"; + eye = "${cfg.socketsDir}/eye.sock"; + }; + readOnly = true; + description = '' + Diaspora sockets + ''; + }; + pids = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + eye = "${cfg.socketsDir}/eye.pid"; + }; + readOnly = true; + description = '' + Diaspora pids + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { + inherit name; + inherit uid; + group = cfg.group; + description = "Diaspora user"; + home = cfg.dataDir; + packages = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby ]; + useDefaultShell = true; + }); + users.groups = lib.optionalAttrs (cfg.group == name) (lib.singleton { + inherit name; + inherit gid; + }); + + systemd.services.diaspora = { + description = "Diaspora"; + wantedBy = [ "multi-user.target" ]; + after = [ + "network.target" "redis.service" "postgresql.service" + ]; + wants = [ + "redis.service" "postgresql.service" + ]; + + environment.RAILS_ENV = "production"; + environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; + environment.EYE_SOCK = cfg.sockets.eye; + environment.EYE_PID = cfg.pids.eye; + + path = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby pkgs.curl pkgs.which pkgs.gawk ]; + + preStart = '' + install -m 0755 -d ${cfg.dataDir}/uploads ${cfg.dataDir}/tmp ${cfg.dataDir}/log + install -m 0700 -d ${cfg.dataDir}/tmp/pids + if [ ! -f ${cfg.dataDir}/schedule.yml ]; then + echo "{}" > ${cfg.dataDir}/schedule.yml + fi + ./bin/bundle exec rails db:migrate + ''; + + script = '' + exec ${cfg.workdir}/script/server + ''; + + serviceConfig = { + User = cfg.user; + PrivateTmp = true; + Restart = "always"; + Type = "simple"; + WorkingDirectory = cfg.workdir; + StateDirectory = cfg.systemdStateDirectory; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StandardInput = "null"; + KillMode = "control-group"; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + }; +} diff --git a/modules/webapps/etherpad-lite.nix b/modules/webapps/etherpad-lite.nix new file mode 100644 index 00000000..7f0e2ed4 --- /dev/null +++ b/modules/webapps/etherpad-lite.nix @@ -0,0 +1,158 @@ +{ lib, pkgs, config, ... }: +let + name = "etherpad-lite"; + cfg = config.services.etherpad-lite; + + uid = config.ids.uids.etherpad-lite; + gid = config.ids.gids.etherpad-lite; +in +{ + options.services.etherpad-lite = { + enable = lib.mkEnableOption "Enable Etherpad lite’s service"; + user = lib.mkOption { + type = lib.types.str; + default = name; + description = "User account under which Etherpad lite runs"; + }; + group = lib.mkOption { + type = lib.types.str; + default = name; + description = "Group under which Etherpad lite runs"; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Etherpad lite stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/${name}"; + description = '' + The directory where Etherpad lite stores its sockets. + ''; + }; + configFile = lib.mkOption { + type = lib.types.path; + description = '' + The config file path for Etherpad lite. + ''; + }; + sessionKeyFile = lib.mkOption { + type = lib.types.path; + description = '' + The Session key file path for Etherpad lite. + ''; + }; + apiKeyFile = lib.mkOption { + type = lib.types.path; + description = '' + The API key file path for Etherpad lite. + ''; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.webapps.etherpad-lite; + description = '' + Etherpad lite package to use. + ''; + }; + modules = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = []; + description = '' + Etherpad lite modules to use. + ''; + }; + # Output variables + workdir = lib.mkOption { + type = lib.types.package; + default = cfg.package.withModules cfg.modules; + description = '' + Adjusted Etherpad lite package with plugins + ''; + readOnly = true; + }; + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Etherpad lite data directory for systemd + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Etherpad lite sockets directory for systemd + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + node = "${cfg.socketsDir}/etherpad-lite.sock"; + }; + readOnly = true; + description = '' + Etherpad lite sockets + ''; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.services.etherpad-lite = { + description = "Etherpad-lite"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "postgresql.service" ]; + wants = [ "postgresql.service" ]; + + environment.NODE_ENV = "production"; + environment.HOME = cfg.workdir; + + path = [ pkgs.nodejs ]; + + script = '' + exec ${pkgs.nodejs}/bin/node ${cfg.workdir}/src/node/server.js \ + --sessionkey ${cfg.sessionKeyFile} \ + --apikey ${cfg.apiKeyFile} \ + --settings ${cfg.configFile} + ''; + + postStart = '' + while [ ! -S ${cfg.sockets.node} ]; do + sleep 0.5 + done + chmod a+w ${cfg.sockets.node} + ''; + serviceConfig = { + DynamicUser = true; + User = cfg.user; + Group = cfg.group; + WorkingDirectory = cfg.workdir; + PrivateTmp = true; + NoNewPrivileges = true; + PrivateDevices = true; + ProtectHome = true; + ProtectControlGroups = true; + ProtectKernelModules = true; + Restart = "always"; + Type = "simple"; + TimeoutSec = 60; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StateDirectory= cfg.systemdStateDirectory; + ExecStartPre = [ + "+${pkgs.coreutils}/bin/install -d -m 0755 -o ${cfg.user} -g ${cfg.group} ${cfg.dataDir}/ep_initialized" + "+${pkgs.coreutils}/bin/chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir} ${cfg.configFile} ${cfg.sessionKeyFile} ${cfg.apiKeyFile}" + ]; + }; + }; + + }; +} diff --git a/modules/webapps/mastodon.nix b/modules/webapps/mastodon.nix new file mode 100644 index 00000000..6255de91 --- /dev/null +++ b/modules/webapps/mastodon.nix @@ -0,0 +1,223 @@ +{ lib, pkgs, config, ... }: +let + name = "mastodon"; + cfg = config.services.mastodon; + + uid = config.ids.uids.mastodon; + gid = config.ids.gids.mastodon; +in +{ + options.services.mastodon = { + enable = lib.mkEnableOption "Enable Mastodon’s service"; + user = lib.mkOption { + type = lib.types.str; + default = name; + description = "User account under which Mastodon runs"; + }; + group = lib.mkOption { + type = lib.types.str; + default = name; + description = "Group under which Mastodon runs"; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Mastodon stores its data. + ''; + }; + socketsPrefix = lib.mkOption { + type = lib.types.string; + default = "live"; + description = '' + The prefix to use for Mastodon sockets. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/${name}"; + description = '' + The directory where Mastodon puts runtime files and sockets. + ''; + }; + configFile = lib.mkOption { + type = lib.types.path; + description = '' + The configuration file path for Mastodon. + ''; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.webapps.mastodon; + description = '' + Mastodon package to use. + ''; + }; + # Output variables + workdir = lib.mkOption { + type = lib.types.package; + default = cfg.package.override { varDir = cfg.dataDir; }; + description = '' + Adjusted mastodon package with overriden varDir + ''; + readOnly = true; + }; + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Mastodon data directory for systemd + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Mastodon sockets directory for systemd + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + node = "${cfg.socketsDir}/${cfg.socketsPrefix}_node.sock"; + rails = "${cfg.socketsDir}/${cfg.socketsPrefix}_puma.sock"; + }; + readOnly = true; + description = '' + Mastodon sockets + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { + inherit name; + inherit uid; + group = cfg.group; + description = "Mastodon user"; + home = cfg.dataDir; + useDefaultShell = true; + }); + users.groups = lib.optionalAttrs (cfg.group == name) (lib.singleton { + inherit name; + inherit gid; + }); + + systemd.services.mastodon-streaming = { + description = "Mastodon Streaming"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "mastodon-web.service" ]; + + environment.NODE_ENV = "production"; + environment.SOCKET = cfg.sockets.node; + + path = [ pkgs.nodejs pkgs.bashInteractive ]; + + script = '' + exec npm run start + ''; + + postStart = '' + while [ ! -S $SOCKET ]; do + sleep 0.5 + done + chmod a+w $SOCKET + ''; + + postStop = '' + rm $SOCKET + ''; + + serviceConfig = { + User = cfg.user; + EnvironmentFile = cfg.configFile; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 15; + Type = "simple"; + WorkingDirectory = cfg.workdir; + StateDirectory = cfg.systemdStateDirectory; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + RuntimeDirectoryPreserve = "yes"; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + + systemd.services.mastodon-web = { + description = "Mastodon Web app"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + environment.RAILS_ENV = "production"; + environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; + environment.SOCKET = cfg.sockets.rails; + + path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file ]; + + preStart = '' + install -m 0755 -d ${cfg.dataDir}/tmp/cache + ./bin/bundle exec rails db:migrate + ''; + + script = '' + exec ./bin/bundle exec puma -C config/puma.rb + ''; + + serviceConfig = { + User = cfg.user; + EnvironmentFile = cfg.configFile; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 60; + Type = "simple"; + WorkingDirectory = cfg.workdir; + StateDirectory = cfg.systemdStateDirectory; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + RuntimeDirectoryPreserve = "yes"; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + + systemd.services.mastodon-sidekiq = { + description = "Mastodon Sidekiq"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "mastodon-web.service" ]; + + environment.RAILS_ENV="production"; + environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; + environment.DB_POOL="5"; + + path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.imagemagick pkgs.ffmpeg pkgs.file ]; + + script = '' + exec ./bin/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push + ''; + + serviceConfig = { + User = cfg.user; + EnvironmentFile = cfg.configFile; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 15; + Type = "simple"; + WorkingDirectory = cfg.workdir; + StateDirectory = cfg.systemdStateDirectory; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + RuntimeDirectoryPreserve = "yes"; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + + }; +} diff --git a/modules/webapps/mediagoblin.nix b/modules/webapps/mediagoblin.nix new file mode 100644 index 00000000..78bbef6f --- /dev/null +++ b/modules/webapps/mediagoblin.nix @@ -0,0 +1,237 @@ +{ lib, pkgs, config, ... }: +let + name = "mediagoblin"; + cfg = config.services.mediagoblin; + + uid = config.ids.uids.mediagoblin; + gid = config.ids.gids.mediagoblin; + + paste_local = pkgs.writeText "paste_local.ini" '' + [DEFAULT] + debug = false + + [pipeline:main] + pipeline = mediagoblin + + [app:mediagoblin] + use = egg:mediagoblin#app + config = ${cfg.configFile} ${cfg.workdir}/mediagoblin.ini + /mgoblin_static = ${cfg.workdir}/mediagoblin/static + + [loggers] + keys = root + + [handlers] + keys = console + + [formatters] + keys = generic + + [logger_root] + level = INFO + handlers = console + + [handler_console] + class = StreamHandler + args = (sys.stderr,) + level = NOTSET + formatter = generic + + [formatter_generic] + format = %(levelname)-7.7s [%(name)s] %(message)s + + [filter:errors] + use = egg:mediagoblin#errors + debug = false + + [server:main] + use = egg:waitress#main + unix_socket = ${cfg.sockets.paster} + unix_socket_perms = 777 + url_scheme = https + ''; +in +{ + options.services.mediagoblin = { + enable = lib.mkEnableOption "Enable Mediagoblin’s service"; + user = lib.mkOption { + type = lib.types.str; + default = name; + description = "User account under which Mediagoblin runs"; + }; + group = lib.mkOption { + type = lib.types.str; + default = name; + description = "Group under which Mediagoblin runs"; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Mediagoblin stores its data. + ''; + }; + socketsDir = lib.mkOption { + type = lib.types.path; + default = "/run/${name}"; + description = '' + The directory where Mediagoblin puts runtime files and sockets. + ''; + }; + configFile = lib.mkOption { + type = lib.types.path; + description = '' + The configuration file path for Mediagoblin. + ''; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.webapps.mediagoblin; + description = '' + Mediagoblin package to use. + ''; + }; + plugins = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = []; + description = '' + Mediagoblin plugins to use. + ''; + }; + # Output variables + workdir = lib.mkOption { + type = lib.types.package; + default = cfg.package.withPlugins cfg.plugins; + description = '' + Adjusted Mediagoblin package with plugins + ''; + readOnly = true; + }; + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Mediagoblin data directory for systemd + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Mediagoblin sockets directory for systemd + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + paster = "${cfg.socketsDir}/mediagoblin.sock"; + }; + readOnly = true; + description = '' + Mediagoblin sockets + ''; + }; + pids = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + paster = "${cfg.socketsDir}/mediagoblin.pid"; + celery = "${cfg.socketsDir}/mediagoblin-celeryd.pid"; + }; + readOnly = true; + description = '' + Mediagoblin pid files + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { + inherit name; + inherit uid; + group = cfg.group; + description = "Mediagoblin user"; + home = cfg.dataDir; + useDefaultShell = true; + }); + users.groups = lib.optionalAttrs (cfg.group == name) (lib.singleton { + inherit name; + inherit gid; + }); + + systemd.services.mediagoblin-web = { + description = "Mediagoblin service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + wants = [ "postgresql.service" "redis.service" ]; + + environment.SCRIPT_NAME = "/mediagoblin/"; + + script = '' + exec ./bin/paster serve \ + ${paste_local} \ + --pid-file=${cfg.pids.paster} + ''; + preStop = '' + exec ./bin/paster serve \ + --pid-file=${cfg.pids.paster} \ + ${paste_local} stop + ''; + preStart = '' + if [ -d ${cfg.dataDir}/plugin_static/ ]; then + rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth + ln -sf ${cfg.workdir}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth + fi + ./bin/gmg -cf ${cfg.configFile} dbupdate + ''; + + serviceConfig = { + User = cfg.user; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 15; + Type = "simple"; + WorkingDirectory = cfg.workdir; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StateDirectory= cfg.systemdStateDirectory; + PIDFile = cfg.pids.paster; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + + systemd.services.mediagoblin-celeryd = { + description = "Mediagoblin service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "mediagoblin-web.service" ]; + + environment.MEDIAGOBLIN_CONFIG = cfg.configFile; + environment.CELERY_CONFIG_MODULE = "mediagoblin.init.celery.from_celery"; + + script = '' + exec ./bin/celery worker \ + --logfile=${cfg.dataDir}/celery.log \ + --loglevel=INFO + ''; + + serviceConfig = { + User = cfg.user; + PrivateTmp = true; + Restart = "always"; + TimeoutSec = 60; + Type = "simple"; + WorkingDirectory = cfg.workdir; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StateDirectory= cfg.systemdStateDirectory; + PIDFile = cfg.pids.celery; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + }; +} diff --git a/modules/webapps/peertube.nix b/modules/webapps/peertube.nix new file mode 100644 index 00000000..89dcc67a --- /dev/null +++ b/modules/webapps/peertube.nix @@ -0,0 +1,105 @@ +{ lib, pkgs, config, ... }: +let + name = "peertube"; + cfg = config.services.peertube; + + uid = config.ids.uids.peertube; + gid = config.ids.gids.peertube; +in +{ + options.services.peertube = { + enable = lib.mkEnableOption "Enable Peertube’s service"; + user = lib.mkOption { + type = lib.types.str; + default = name; + description = "User account under which Peertube runs"; + }; + group = lib.mkOption { + type = lib.types.str; + default = name; + description = "Group under which Peertube runs"; + }; + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Peertube stores its data. + ''; + }; + configFile = lib.mkOption { + type = lib.types.path; + description = '' + The configuration file path for Peertube. + ''; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.webapps.peertube; + description = '' + Peertube package to use. + ''; + }; + # Output variables + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Peertube data directory for systemd + ''; + readOnly = true; + }; + }; + + config = lib.mkIf cfg.enable { + users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { + inherit name; + inherit uid; + group = cfg.group; + description = "Peertube user"; + home = cfg.dataDir; + useDefaultShell = true; + }); + users.groups = lib.optionalAttrs (cfg.group == name) (lib.singleton { + inherit name; + inherit gid; + }); + + systemd.services.peertube = { + description = "Peertube"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "postgresql.service" ]; + wants = [ "postgresql.service" ]; + + environment.NODE_CONFIG_DIR = "${cfg.dataDir}/config"; + environment.NODE_ENV = "production"; + environment.HOME = cfg.package; + + path = [ pkgs.nodejs pkgs.bashInteractive pkgs.ffmpeg pkgs.openssl ]; + + script = '' + install -m 0750 -d ${cfg.dataDir}/config + ln -sf ${cfg.configFile} ${cfg.dataDir}/config/production.yaml + exec npm run start + ''; + + serviceConfig = { + User = cfg.user; + Group = cfg.group; + WorkingDirectory = cfg.package; + StateDirectory = cfg.systemdStateDirectory; + StateDirectoryMode = 0750; + PrivateTmp = true; + ProtectHome = true; + ProtectControlGroups = true; + Restart = "always"; + Type = "simple"; + TimeoutSec = 60; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + }; +} + diff --git a/modules/webapps/webstats/default.nix b/modules/webapps/webstats/default.nix new file mode 100644 index 00000000..924d72de --- /dev/null +++ b/modules/webapps/webstats/default.nix @@ -0,0 +1,81 @@ +{ lib, pkgs, config, ... }: +let + name = "goaccess"; + cfg = config.services.webstats; +in { + options.services.webstats = { + dataDir = lib.mkOption { + type = lib.types.path; + default = "/var/lib/${name}"; + description = '' + The directory where Goaccess stores its data. + ''; + }; + sites = lib.mkOption { + type = lib.types.listOf (lib.types.submodule { + options = { + conf = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + use custom goaccess configuration file instead of the + default one. + ''; + }; + name = lib.mkOption { + type = lib.types.string; + description = '' + Domain name. Corresponds to the Apache file name and the + folder name in which the state will be saved. + ''; + }; + }; + }); + default = []; + description = "Sites to generate stats"; + }; + }; + + config = lib.mkIf (builtins.length cfg.sites > 0) { + users.users.root.packages = [ + pkgs.goaccess + ]; + + services.cron = { + enable = true; + systemCronJobs = let + stats = domain: conf: let + config = if builtins.isNull conf + then pkgs.runCommand "goaccess.conf" { + dbPath = "${cfg.dataDir}/${domain}"; + } "substituteAll ${./goaccess.conf} $out" + else conf; + d = pkgs.writeScriptBin "stats-${domain}" '' + #!${pkgs.stdenv.shell} + set -e + shopt -s nullglob + date_regex=$(LC_ALL=C date -d yesterday +'%d\/%b\/%Y') + TMPFILE=$(mktemp) + trap "rm -f $TMPFILE" EXIT + + mkdir -p ${cfg.dataDir}/${domain} + cat /var/log/httpd/access-${domain}.log | sed -n "/\\[$date_regex/ p" > $TMPFILE + for i in /var/log/httpd/access-${domain}*.gz; do + zcat "$i" | sed -n "/\\[$date_regex/ p" >> $TMPFILE + done + ${pkgs.goaccess}/bin/goaccess $TMPFILE --no-progress -o ${cfg.dataDir}/${domain}/index.html -p ${config} + ''; + in "${d}/bin/stats-${domain}"; + allStats = sites: pkgs.writeScript "stats" '' + #!${pkgs.stdenv.shell} + + mkdir -p ${cfg.dataDir} + ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)} + ''; + in + [ + "5 0 * * * root ${allStats cfg.sites}" + ]; + }; + }; +} diff --git a/modules/webapps/webstats/goaccess.conf b/modules/webapps/webstats/goaccess.conf new file mode 100644 index 00000000..49189883 --- /dev/null +++ b/modules/webapps/webstats/goaccess.conf @@ -0,0 +1,99 @@ +time-format %H:%M:%S +date-format %d/%b/%Y + +#sur immae.eu +#log-format %v %h %^[%d:%t %^] "%r" %s %b "%R" "%u" $^ + +log-format VCOMBINED +#= %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u" + +html-prefs {"theme":"bright","layout":"vertical"} + +exclude-ip 188.165.209.148 +exclude-ip 178.33.252.96 +exclude-ip 2001:41d0:2:9c94::1 +exclude-ip 2001:41d0:2:9c94:: +exclude-ip 176.9.151.89 +exclude-ip 2a01:4f8:160:3445:: +exclude-ip 82.255.56.72 + +no-query-string true + +keep-db-files true +load-from-disk true +db-path @dbPath@ + +ignore-panel REFERRERS +ignore-panel KEYPHRASES + +static-file .css +static-file .js +static-file .jpg +static-file .png +static-file .gif +static-file .ico +static-file .jpeg +static-file .pdf +static-file .csv +static-file .mpeg +static-file .mpg +static-file .swf +static-file .woff +static-file .woff2 +static-file .xls +static-file .xlsx +static-file .doc +static-file .docx +static-file .ppt +static-file .pptx +static-file .txt +static-file .zip +static-file .ogg +static-file .mp3 +static-file .mp4 +static-file .exe +static-file .iso +static-file .gz +static-file .rar +static-file .svg +static-file .bmp +static-file .tar +static-file .tgz +static-file .tiff +static-file .tif +static-file .ttf +static-file .flv +#static-file .less +#static-file .ac3 +#static-file .avi +#static-file .bz2 +#static-file .class +#static-file .cue +#static-file .dae +#static-file .dat +#static-file .dts +#static-file .ejs +#static-file .eot +#static-file .eps +#static-file .img +#static-file .jar +#static-file .map +#static-file .mid +#static-file .midi +#static-file .ogv +#static-file .webm +#static-file .mkv +#static-file .odp +#static-file .ods +#static-file .odt +#static-file .otf +#static-file .pict +#static-file .pls +#static-file .ps +#static-file .qt +#static-file .rm +#static-file .svgz +#static-file .wav +#static-file .webp + + diff --git a/modules/websites/default.nix b/modules/websites/default.nix new file mode 100644 index 00000000..e57f505a --- /dev/null +++ b/modules/websites/default.nix @@ -0,0 +1,199 @@ +{ lib, config, ... }: with lib; +let + cfg = config.services.websites; +in +{ + options.services.websitesCerts = mkOption { + description = "Default websites configuration for certificates as accepted by acme"; + }; + options.services.websites = with types; mkOption { + default = {}; + description = "Each type of website to enable will target a distinct httpd server"; + type = attrsOf (submodule { + options = { + enable = mkEnableOption "Enable websites of this type"; + adminAddr = mkOption { + type = str; + description = "Admin e-mail address of the instance"; + }; + httpdName = mkOption { + type = str; + description = "Name of the httpd instance to assign this type to"; + }; + ips = mkOption { + type = listOf string; + default = []; + description = "ips to listen to"; + }; + modules = mkOption { + type = listOf str; + default = []; + description = "Additional modules to load in Apache"; + }; + extraConfig = mkOption { + type = listOf lines; + default = []; + description = "Additional configuration to append to Apache"; + }; + nosslVhost = mkOption { + description = "A default nossl vhost for captive portals"; + default = {}; + type = submodule { + options = { + enable = mkEnableOption "Add default no-ssl vhost for this instance"; + host = mkOption { + type = string; + description = "The hostname to use for this vhost"; + }; + root = mkOption { + type = path; + default = ./nosslVhost; + description = "The root folder to serve"; + }; + indexFile = mkOption { + type = string; + default = "index.html"; + description = "The index file to show."; + }; + }; + }; + }; + fallbackVhost = mkOption { + description = "The fallback vhost that will be defined as first vhost in Apache"; + type = submodule { + options = { + certName = mkOption { type = string; }; + hosts = mkOption { type = listOf string; }; + root = mkOption { type = nullOr path; }; + extraConfig = mkOption { type = listOf lines; default = []; }; + }; + }; + }; + vhostConfs = mkOption { + default = {}; + description = "List of vhosts to define for Apache"; + type = attrsOf (submodule { + options = { + certName = mkOption { type = string; }; + addToCerts = mkOption { + type = bool; + default = false; + description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null"; + }; + certMainHost = mkOption { + type = nullOr string; + description = "Use that host as 'main host' for acme certs"; + default = null; + }; + hosts = mkOption { type = listOf string; }; + root = mkOption { type = nullOr path; }; + extraConfig = mkOption { type = listOf lines; default = []; }; + }; + }); + }; + }; + }); + }; + + config.services.httpd = let + redirectVhost = ips: { # Should go last, catchall http -> https redirect + listen = map (ip: { inherit ip; port = 80; }) ips; + hostName = "redirectSSL"; + serverAliases = [ "*" ]; + enableSSL = false; + logFormat = "combinedVhost"; + documentRoot = "${config.security.acme.directory}/acme-challenge"; + extraConfig = '' + RewriteEngine on + RewriteCond "%{REQUEST_URI}" "!^/\.well-known" + RewriteRule ^(.+) https://%{HTTP_HOST}$1 [R=301] + # To redirect in specific "VirtualHost *:80", do + # RedirectMatch 301 ^/((?!\.well-known.*$).*)$ https://host/$1 + # rather than rewrite + ''; + }; + nosslVhost = ips: cfg: { + listen = map (ip: { inherit ip; port = 80; }) ips; + hostName = cfg.host; + enableSSL = false; + logFormat = "combinedVhost"; + documentRoot = cfg.root; + extraConfig = '' + + DirectoryIndex ${cfg.indexFile} + AllowOverride None + Require all granted + + RewriteEngine on + RewriteRule ^/(.+) / [L] + + ''; + }; + toVhost = ips: vhostConf: { + enableSSL = true; + sslServerCert = "${config.security.acme.directory}/${vhostConf.certName}/cert.pem"; + sslServerKey = "${config.security.acme.directory}/${vhostConf.certName}/key.pem"; + sslServerChain = "${config.security.acme.directory}/${vhostConf.certName}/chain.pem"; + logFormat = "combinedVhost"; + listen = map (ip: { inherit ip; port = 443; }) ips; + hostName = builtins.head vhostConf.hosts; + serverAliases = builtins.tail vhostConf.hosts or []; + documentRoot = vhostConf.root; + extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig; + }; + in attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair + icfg.httpdName (mkIf icfg.enable { + enable = true; + listen = map (ip: { inherit ip; port = 443; }) icfg.ips; + stateDir = "/run/httpd_${name}"; + logPerVirtualHost = true; + multiProcessingModule = "worker"; + inherit (icfg) adminAddr; + logFormat = "combinedVhost"; + extraModules = lists.unique icfg.modules; + extraConfig = builtins.concatStringsSep "\n" icfg.extraConfig; + virtualHosts = [ (toVhost icfg.ips icfg.fallbackVhost) ] + ++ optionals (icfg.nosslVhost.enable) [ (nosslVhost icfg.ips icfg.nosslVhost) ] + ++ (attrsets.mapAttrsToList (n: v: toVhost icfg.ips v) icfg.vhostConfs) + ++ [ (redirectVhost icfg.ips) ]; + }) + ) cfg; + + config.security.acme.certs = let + typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg; + flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v: + attrValues v.vhostConfs + ) typesToManage); + groupedCerts = attrsets.filterAttrs + (_: group: builtins.any (v: v.addToCerts || !isNull v.certMainHost) group) + (lists.groupBy (v: v.certName) flatVhosts); + groupToDomain = group: + let + nonNull = builtins.filter (v: !isNull v.certMainHost) group; + domains = lists.unique (map (v: v.certMainHost) nonNull); + in + if builtins.length domains == 0 + then null + else assert (builtins.length domains == 1); (elemAt domains 0); + extraDomains = group: + let + mainDomain = groupToDomain group; + in + lists.remove mainDomain ( + lists.unique ( + lists.flatten (map (c: optionals (c.addToCerts || !isNull c.certMainHost) c.hosts) group) + ) + ); + in attrsets.mapAttrs (k: g: + if (!isNull (groupToDomain g)) + then config.services.websitesCerts // { + domain = groupToDomain g; + extraDomains = builtins.listToAttrs ( + map (d: attrsets.nameValuePair d null) (extraDomains g)); + } + else { + extraDomains = builtins.listToAttrs ( + map (d: attrsets.nameValuePair d null) (extraDomains g)); + } + ) groupedCerts; +} diff --git a/modules/websites/httpd-service-builder.nix b/modules/websites/httpd-service-builder.nix new file mode 100644 index 00000000..d049202c --- /dev/null +++ b/modules/websites/httpd-service-builder.nix @@ -0,0 +1,746 @@ +# to help backporting this builder should stay as close as possible to +# nixos/modules/services/web-servers/apache-httpd/default.nix +{ httpdName, withUsers ? true }: +{ config, lib, pkgs, ... }: + +with lib; + +let + + mainCfg = config.services.httpd."${httpdName}"; + + httpd = mainCfg.package.out; + + version24 = !versionOlder httpd.version "2.4"; + + httpdConf = mainCfg.configFile; + + php = mainCfg.phpPackage.override { apacheHttpd = httpd.dev; /* otherwise it only gets .out */ }; + + phpMajorVersion = head (splitString "." php.version); + + mod_perl = pkgs.apacheHttpdPackages.mod_perl.override { apacheHttpd = httpd; }; + + defaultListen = cfg: if cfg.enableSSL + then [{ip = "*"; port = 443;}] + else [{ip = "*"; port = 80;}]; + + getListen = cfg: + let list = (lib.optional (cfg.port != 0) {ip = "*"; port = cfg.port;}) ++ cfg.listen; + in if list == [] + then defaultListen cfg + else list; + + listenToString = l: "${l.ip}:${toString l.port}"; + + extraModules = attrByPath ["extraModules"] [] mainCfg; + extraForeignModules = filter isAttrs extraModules; + extraApacheModules = filter isString extraModules; + + + makeServerInfo = cfg: { + # Canonical name must not include a trailing slash. + canonicalNames = + let defaultPort = (head (defaultListen cfg)).port; in + map (port: + (if cfg.enableSSL then "https" else "http") + "://" + + cfg.hostName + + (if port != defaultPort then ":${toString port}" else "") + ) (map (x: x.port) (getListen cfg)); + + # Admin address: inherit from the main server if not specified for + # a virtual host. + adminAddr = if cfg.adminAddr != null then cfg.adminAddr else mainCfg.adminAddr; + + vhostConfig = cfg; + serverConfig = mainCfg; + fullConfig = config; # machine config + }; + + + allHosts = [mainCfg] ++ mainCfg.virtualHosts; + + + callSubservices = serverInfo: defs: + let f = svc: + let + svcFunction = + if svc ? function then svc.function + # instead of using serviceType="mediawiki"; you can copy mediawiki.nix to any location outside nixpkgs, modify it at will, and use serviceExpression=./mediawiki.nix; + else if svc ? serviceExpression then import (toString svc.serviceExpression) + else import (toString "${toString ./.}/${if svc ? serviceType then svc.serviceType else svc.serviceName}.nix"); + config = (evalModules + { modules = [ { options = res.options; config = svc.config or svc; } ]; + check = false; + }).config; + defaults = { + extraConfig = ""; + extraModules = []; + extraModulesPre = []; + extraPath = []; + extraServerPath = []; + globalEnvVars = []; + robotsEntries = ""; + startupScript = ""; + enablePHP = false; + enablePerl = false; + phpOptions = ""; + options = {}; + documentRoot = null; + }; + res = defaults // svcFunction { inherit config lib pkgs serverInfo php; }; + in res; + in map f defs; + + + # !!! callSubservices is expensive + subservicesFor = cfg: callSubservices (makeServerInfo cfg) cfg.extraSubservices; + + mainSubservices = subservicesFor mainCfg; + + allSubservices = mainSubservices ++ concatMap subservicesFor mainCfg.virtualHosts; + + + enableSSL = any (vhost: vhost.enableSSL) allHosts; + + + # Names of modules from ${httpd}/modules that we want to load. + apacheModules = + [ # HTTP authentication mechanisms: basic and digest. + "auth_basic" "auth_digest" + + # Authentication: is the user who he claims to be? + "authn_file" "authn_dbm" "authn_anon" + (if version24 then "authn_core" else "authn_alias") + + # Authorization: is the user allowed access? + "authz_user" "authz_groupfile" "authz_host" + + # Other modules. + "ext_filter" "include" "log_config" "env" "mime_magic" + "cern_meta" "expires" "headers" "usertrack" /* "unique_id" */ "setenvif" + "mime" "dav" "status" "autoindex" "asis" "info" "dav_fs" + "vhost_alias" "negotiation" "dir" "imagemap" "actions" "speling" + "userdir" "alias" "rewrite" "proxy" "proxy_http" + ] + ++ optionals version24 [ + "mpm_${mainCfg.multiProcessingModule}" + "authz_core" + "unixd" + "cache" "cache_disk" + "slotmem_shm" + "socache_shmcb" + # For compatibility with old configurations, the new module mod_access_compat is provided. + "access_compat" + ] + ++ (if mainCfg.multiProcessingModule == "prefork" then [ "cgi" ] else [ "cgid" ]) + ++ optional enableSSL "ssl" + ++ extraApacheModules; + + + allDenied = if version24 then '' + Require all denied + '' else '' + Order deny,allow + Deny from all + ''; + + allGranted = if version24 then '' + Require all granted + '' else '' + Order allow,deny + Allow from all + ''; + + + loggingConf = (if mainCfg.logFormat != "none" then '' + ErrorLog ${mainCfg.logDir}/error.log + + LogLevel notice + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + LogFormat "%{Referer}i -> %U" referer + LogFormat "%{User-agent}i" agent + + CustomLog ${mainCfg.logDir}/access.log ${mainCfg.logFormat} + '' else '' + ErrorLog /dev/null + ''); + + + browserHacks = '' + BrowserMatch "Mozilla/2" nokeepalive + BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 + BrowserMatch "RealPlayer 4\.0" force-response-1.0 + BrowserMatch "Java/1\.0" force-response-1.0 + BrowserMatch "JDK/1\.0" force-response-1.0 + BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully + BrowserMatch "^WebDrive" redirect-carefully + BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully + BrowserMatch "^gnome-vfs" redirect-carefully + ''; + + + sslConf = '' + SSLSessionCache ${if version24 then "shmcb" else "shm"}:${mainCfg.stateDir}/ssl_scache(512000) + + ${if version24 then "Mutex" else "SSLMutex"} posixsem + + SSLRandomSeed startup builtin + SSLRandomSeed connect builtin + + SSLProtocol ${mainCfg.sslProtocols} + SSLCipherSuite ${mainCfg.sslCiphers} + SSLHonorCipherOrder on + ''; + + + mimeConf = '' + TypesConfig ${httpd}/conf/mime.types + + AddType application/x-x509-ca-cert .crt + AddType application/x-pkcs7-crl .crl + AddType application/x-httpd-php .php .phtml + + + MIMEMagicFile ${httpd}/conf/magic + + ''; + + + perServerConf = isMainServer: cfg: let + + serverInfo = makeServerInfo cfg; + + subservices = callSubservices serverInfo cfg.extraSubservices; + + maybeDocumentRoot = fold (svc: acc: + if acc == null then svc.documentRoot else assert svc.documentRoot == null; acc + ) null ([ cfg ] ++ subservices); + + documentRoot = if maybeDocumentRoot != null then maybeDocumentRoot else + pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out"; + + documentRootConf = '' + DocumentRoot "${documentRoot}" + + + Options Indexes FollowSymLinks + AllowOverride None + ${allGranted} + + ''; + + robotsTxt = + concatStringsSep "\n" (filter (x: x != "") ( + # If this is a vhost, the include the entries for the main server as well. + (if isMainServer then [] else [mainCfg.robotsEntries] ++ map (svc: svc.robotsEntries) mainSubservices) + ++ [cfg.robotsEntries] + ++ (map (svc: svc.robotsEntries) subservices))); + + in '' + ${concatStringsSep "\n" (map (n: "ServerName ${n}") serverInfo.canonicalNames)} + + ${concatMapStrings (alias: "ServerAlias ${alias}\n") cfg.serverAliases} + + ${if cfg.sslServerCert != null then '' + SSLCertificateFile ${cfg.sslServerCert} + SSLCertificateKeyFile ${cfg.sslServerKey} + ${if cfg.sslServerChain != null then '' + SSLCertificateChainFile ${cfg.sslServerChain} + '' else ""} + '' else ""} + + ${if cfg.enableSSL then '' + SSLEngine on + '' else if enableSSL then /* i.e., SSL is enabled for some host, but not this one */ + '' + SSLEngine off + '' else ""} + + ${if isMainServer || cfg.adminAddr != null then '' + ServerAdmin ${cfg.adminAddr} + '' else ""} + + ${if !isMainServer && mainCfg.logPerVirtualHost then '' + ErrorLog ${mainCfg.logDir}/error-${cfg.hostName}.log + CustomLog ${mainCfg.logDir}/access-${cfg.hostName}.log ${cfg.logFormat} + '' else ""} + + ${optionalString (robotsTxt != "") '' + Alias /robots.txt ${pkgs.writeText "robots.txt" robotsTxt} + ''} + + ${if isMainServer || maybeDocumentRoot != null then documentRootConf else ""} + + ${if cfg.enableUserDir then '' + + UserDir public_html + UserDir disabled root + + + AllowOverride FileInfo AuthConfig Limit Indexes + Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec + + ${allGranted} + + + ${allDenied} + + + + '' else ""} + + ${if cfg.globalRedirect != null && cfg.globalRedirect != "" then '' + RedirectPermanent / ${cfg.globalRedirect} + '' else ""} + + ${ + let makeFileConf = elem: '' + Alias ${elem.urlPath} ${elem.file} + ''; + in concatMapStrings makeFileConf cfg.servedFiles + } + + ${ + let makeDirConf = elem: '' + Alias ${elem.urlPath} ${elem.dir}/ + + Options +Indexes + ${allGranted} + AllowOverride All + + ''; + in concatMapStrings makeDirConf cfg.servedDirs + } + + ${concatMapStrings (svc: svc.extraConfig) subservices} + + ${cfg.extraConfig} + ''; + + + confFile = pkgs.writeText "httpd.conf" '' + + ServerRoot ${httpd} + + ${optionalString version24 '' + DefaultRuntimeDir ${mainCfg.stateDir}/runtime + ''} + + PidFile ${mainCfg.stateDir}/httpd.pid + + ${optionalString (mainCfg.multiProcessingModule != "prefork") '' + # mod_cgid requires this. + ScriptSock ${mainCfg.stateDir}/cgisock + ''} + + + MaxClients ${toString mainCfg.maxClients} + MaxRequestsPerChild ${toString mainCfg.maxRequestsPerChild} + + + ${let + listen = concatMap getListen allHosts; + toStr = listen: "Listen ${listenToString listen}\n"; + uniqueListen = uniqList {inputList = map toStr listen;}; + in concatStrings uniqueListen + } + + User ${mainCfg.user} + Group ${mainCfg.group} + + ${let + load = {name, path}: "LoadModule ${name}_module ${path}\n"; + allModules = + concatMap (svc: svc.extraModulesPre) allSubservices + ++ map (name: {inherit name; path = "${httpd}/modules/mod_${name}.so";}) apacheModules + ++ optional mainCfg.enableMellon { name = "auth_mellon"; path = "${pkgs.apacheHttpdPackages.mod_auth_mellon}/modules/mod_auth_mellon.so"; } + ++ optional enablePHP { name = "php${phpMajorVersion}"; path = "${php}/modules/libphp${phpMajorVersion}.so"; } + ++ optional enablePerl { name = "perl"; path = "${mod_perl}/modules/mod_perl.so"; } + ++ concatMap (svc: svc.extraModules) allSubservices + ++ extraForeignModules; + in concatMapStrings load allModules + } + + AddHandler type-map var + + + ${allDenied} + + + ${mimeConf} + ${loggingConf} + ${browserHacks} + + Include ${httpd}/conf/extra/httpd-default.conf + Include ${httpd}/conf/extra/httpd-autoindex.conf + Include ${httpd}/conf/extra/httpd-multilang-errordoc.conf + Include ${httpd}/conf/extra/httpd-languages.conf + + TraceEnable off + + ${if enableSSL then sslConf else ""} + + # Fascist default - deny access to everything. + + Options FollowSymLinks + AllowOverride None + ${allDenied} + + + # Generate directives for the main server. + ${perServerConf true mainCfg} + + # Always enable virtual hosts; it doesn't seem to hurt. + ${let + listen = concatMap getListen allHosts; + uniqueListen = uniqList {inputList = listen;}; + directives = concatMapStrings (listen: "NameVirtualHost ${listenToString listen}\n") uniqueListen; + in optionalString (!version24) directives + } + + ${let + makeVirtualHost = vhost: '' + + ${perServerConf false vhost} + + ''; + in concatMapStrings makeVirtualHost mainCfg.virtualHosts + } + ''; + + + enablePHP = mainCfg.enablePHP || any (svc: svc.enablePHP) allSubservices; + + enablePerl = mainCfg.enablePerl || any (svc: svc.enablePerl) allSubservices; + + + # Generate the PHP configuration file. Should probably be factored + # out into a separate module. + phpIni = pkgs.runCommand "php.ini" + { options = concatStringsSep "\n" + ([ mainCfg.phpOptions ] ++ (map (svc: svc.phpOptions) allSubservices)); + preferLocalBuild = true; + } + '' + cat ${php}/etc/php.ini > $out + echo "$options" >> $out + ''; + +in + + +{ + + ###### interface + + options = { + + services.httpd."${httpdName}" = { + + enable = mkOption { + type = types.bool; + default = false; + description = "Whether to enable the Apache HTTP Server."; + }; + + package = mkOption { + type = types.package; + default = pkgs.apacheHttpd; + defaultText = "pkgs.apacheHttpd"; + description = '' + Overridable attribute of the Apache HTTP Server package to use. + ''; + }; + + configFile = mkOption { + type = types.path; + default = confFile; + defaultText = "confFile"; + example = literalExample ''pkgs.writeText "httpd.conf" "# my custom config file ..."''; + description = '' + Override the configuration file used by Apache. By default, + NixOS generates one automatically. + ''; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Cnfiguration lines appended to the generated Apache + configuration file. Note that this mechanism may not work + when is overridden. + ''; + }; + + extraModules = mkOption { + type = types.listOf types.unspecified; + default = []; + example = literalExample ''[ "proxy_connect" { name = "php5"; path = "''${pkgs.php}/modules/libphp5.so"; } ]''; + description = '' + Additional Apache modules to be used. These can be + specified as a string in the case of modules distributed + with Apache, or as an attribute set specifying the + name and path of the + module. + ''; + }; + + logPerVirtualHost = mkOption { + type = types.bool; + default = false; + description = '' + If enabled, each virtual host gets its own + access.log and + error.log, namely suffixed by the + of the virtual host. + ''; + }; + + user = mkOption { + type = types.str; + default = "wwwrun"; + description = '' + User account under which httpd runs. The account is created + automatically if it doesn't exist. + ''; + }; + + group = mkOption { + type = types.str; + default = "wwwrun"; + description = '' + Group under which httpd runs. The account is created + automatically if it doesn't exist. + ''; + }; + + logDir = mkOption { + type = types.path; + default = "/var/log/httpd"; + description = '' + Directory for Apache's log files. It is created automatically. + ''; + }; + + stateDir = mkOption { + type = types.path; + default = "/run/httpd"; + description = '' + Directory for Apache's transient runtime state (such as PID + files). It is created automatically. Note that the default, + /run/httpd, is deleted at boot time. + ''; + }; + + virtualHosts = mkOption { + type = types.listOf (types.submodule ( + { options = import { + inherit lib; + forMainServer = false; + }; + })); + default = []; + example = [ + { hostName = "foo"; + documentRoot = "/data/webroot-foo"; + } + { hostName = "bar"; + documentRoot = "/data/webroot-bar"; + } + ]; + description = '' + Specification of the virtual hosts served by Apache. Each + element should be an attribute set specifying the + configuration of the virtual host. The available options + are the non-global options permissible for the main host. + ''; + }; + + enableMellon = mkOption { + type = types.bool; + default = false; + description = "Whether to enable the mod_auth_mellon module."; + }; + + enablePHP = mkOption { + type = types.bool; + default = false; + description = "Whether to enable the PHP module."; + }; + + phpPackage = mkOption { + type = types.package; + default = pkgs.php; + defaultText = "pkgs.php"; + description = '' + Overridable attribute of the PHP package to use. + ''; + }; + + enablePerl = mkOption { + type = types.bool; + default = false; + description = "Whether to enable the Perl module (mod_perl)."; + }; + + phpOptions = mkOption { + type = types.lines; + default = ""; + example = + '' + date.timezone = "CET" + ''; + description = + "Options appended to the PHP configuration file php.ini."; + }; + + multiProcessingModule = mkOption { + type = types.str; + default = "prefork"; + example = "worker"; + description = + '' + Multi-processing module to be used by Apache. Available + modules are prefork (the default; + handles each request in a separate child process), + worker (hybrid approach that starts a + number of child processes each running a number of + threads) and event (a recent variant of + worker that handles persistent + connections more efficiently). + ''; + }; + + maxClients = mkOption { + type = types.int; + default = 150; + example = 8; + description = "Maximum number of httpd processes (prefork)"; + }; + + maxRequestsPerChild = mkOption { + type = types.int; + default = 0; + example = 500; + description = + "Maximum number of httpd requests answered per httpd child (prefork), 0 means unlimited"; + }; + + sslCiphers = mkOption { + type = types.str; + default = "HIGH:!aNULL:!MD5:!EXP"; + description = "Cipher Suite available for negotiation in SSL proxy handshake."; + }; + + sslProtocols = mkOption { + type = types.str; + default = "All -SSLv2 -SSLv3 -TLSv1"; + example = "All -SSLv2 -SSLv3"; + description = "Allowed SSL/TLS protocol versions."; + }; + } + + # Include the options shared between the main server and virtual hosts. + // (import { + inherit lib; + forMainServer = true; + }); + + }; + + + ###### implementation + + config = mkIf config.services.httpd."${httpdName}".enable { + + assertions = [ { assertion = mainCfg.enableSSL == true + -> mainCfg.sslServerCert != null + && mainCfg.sslServerKey != null; + message = "SSL is enabled for httpd, but sslServerCert and/or sslServerKey haven't been specified."; } + ]; + + warnings = map (cfg: ''apache-httpd's port option is deprecated. Use listen = [{/*ip = "*"; */ port = ${toString cfg.port};}]; instead'' ) (lib.filter (cfg: cfg.port != 0) allHosts); + + users.users = optionalAttrs (withUsers && mainCfg.user == "wwwrun") (singleton + { name = "wwwrun"; + group = mainCfg.group; + description = "Apache httpd user"; + uid = config.ids.uids.wwwrun; + }); + + users.groups = optionalAttrs (withUsers && mainCfg.group == "wwwrun") (singleton + { name = "wwwrun"; + gid = config.ids.gids.wwwrun; + }); + + environment.systemPackages = [httpd] ++ concatMap (svc: svc.extraPath) allSubservices; + + services.httpd."${httpdName}".phpOptions = + '' + ; Needed for PHP's mail() function. + sendmail_path = sendmail -t -i + + ; Don't advertise PHP + expose_php = off + '' + optionalString (!isNull config.time.timeZone) '' + + ; Apparently PHP doesn't use $TZ. + date.timezone = "${config.time.timeZone}" + ''; + + systemd.services."httpd${httpdName}" = + { description = "Apache HTTPD"; + + wantedBy = [ "multi-user.target" ]; + wants = [ "keys.target" ]; + after = [ "network.target" "fs.target" "postgresql.service" "keys.target" ]; + + path = + [ httpd pkgs.coreutils pkgs.gnugrep ] + ++ optional enablePHP pkgs.system-sendmail # Needed for PHP's mail() function. + ++ concatMap (svc: svc.extraServerPath) allSubservices; + + environment = + optionalAttrs enablePHP { PHPRC = phpIni; } + // optionalAttrs mainCfg.enableMellon { LD_LIBRARY_PATH = "${pkgs.xmlsec}/lib"; } + // (listToAttrs (concatMap (svc: svc.globalEnvVars) allSubservices)); + + preStart = + '' + mkdir -m 0750 -p ${mainCfg.stateDir} + [ $(id -u) != 0 ] || chown root.${mainCfg.group} ${mainCfg.stateDir} + ${optionalString version24 '' + mkdir -m 0750 -p "${mainCfg.stateDir}/runtime" + [ $(id -u) != 0 ] || chown root.${mainCfg.group} "${mainCfg.stateDir}/runtime" + ''} + mkdir -m 0700 -p ${mainCfg.logDir} + + # Get rid of old semaphores. These tend to accumulate across + # server restarts, eventually preventing it from restarting + # successfully. + for i in $(${pkgs.utillinux}/bin/ipcs -s | grep ' ${mainCfg.user} ' | cut -f2 -d ' '); do + ${pkgs.utillinux}/bin/ipcrm -s $i + done + + # Run the startup hooks for the subservices. + for i in ${toString (map (svn: svn.startupScript) allSubservices)}; do + echo Running Apache startup hook $i... + $i + done + ''; + + serviceConfig.ExecStart = "@${httpd}/bin/httpd httpd -f ${httpdConf}"; + serviceConfig.ExecStop = "${httpd}/bin/httpd -f ${httpdConf} -k graceful-stop"; + serviceConfig.ExecReload = "${httpd}/bin/httpd -f ${httpdConf} -k graceful"; + serviceConfig.Type = "forking"; + serviceConfig.PIDFile = "${mainCfg.stateDir}/httpd.pid"; + serviceConfig.Restart = "always"; + serviceConfig.RestartSec = "5s"; + }; + + }; +} diff --git a/modules/websites/nosslVhost/index.html b/modules/websites/nosslVhost/index.html new file mode 100644 index 00000000..4401a806 --- /dev/null +++ b/modules/websites/nosslVhost/index.html @@ -0,0 +1,11 @@ + + + + No SSL site + + +

No SSL on this site

+

Use for wifi networks with login page that doesn't work well with + https.

+ + diff --git a/nix_path_env b/nix_path_env new file mode 100644 index 00000000..901cd693 --- /dev/null +++ b/nix_path_env @@ -0,0 +1,11 @@ +#!/bin/bash + +if [ -z "$NIXOPS_DEPLOYMENT" ]; then + # This will automatically upgrade to latest version at each build + nixpkgs="https://nixos.org/channels/nixos-19.03/nixexprs.tar.xz" +else + nixpkgs="https://releases.nixos.org/nixos/19.03/nixos-19.03.172530.096e2f137b6/nixexprs.tar.xz" +fi +nixpkgsPrevious="$nixpkgs" +nixpkgsNext="$nixpkgs" +export NIX_PATH="nixpkgs=$nixpkgs:nixpkgsNext=$nixpkgsNext:nixpkgsPrevious=$nixpkgsPrevious" diff --git a/nixops/.gitignore b/nixops/.gitignore new file mode 100644 index 00000000..2ea467b8 --- /dev/null +++ b/nixops/.gitignore @@ -0,0 +1 @@ +/state diff --git a/nixops/Makefile b/nixops/Makefile new file mode 100644 index 00000000..cce57ff4 --- /dev/null +++ b/nixops/Makefile @@ -0,0 +1,54 @@ +setup: + ./scripts/setup + +ssh-eldiron: + ./scripts/nixops_wrap ssh eldiron + +info: + ./scripts/nixops_wrap list + ./scripts/nixops_wrap info + +debug: + ./scripts/nixops_wrap deploy --build-only --show-trace + +dry-run: + ./scripts/nixops_wrap deploy --dry-run + +build: + ./scripts/nixops_wrap deploy --build-only + +upload: + ./scripts/nixops_wrap deploy --copy-only + +deploy: + ./scripts/nixops_wrap deploy + +reboot: + ./scripts/nixops_wrap reboot --include=eldiron + +push: + ./scripts/push_deployment + ./scripts/push_environment + +pull: + ./scripts/pull_environment + +pull-deployment: + ./scripts/pull_deployment + +profile = $(shell ./scripts/nixops_wrap info | grep "^Nix profile: " | sed -e "s/^Nix profile: //") +GEN ?= "+3" + +list-generations: + nix-env -p $(profile) --list-generations + ./scripts/nixops_wrap ssh eldiron -- nix-env -p /nix/var/nix/profiles/system --list-generations + +delete-generations: + nix-env -p $(profile) --delete-generations $(GEN) + ./scripts/nixops_wrap ssh eldiron -- nix-env -p /nix/var/nix/profiles/system --delete-generations $(GEN) + +cleanup: delete-generations + nix-store --gc + ./scripts/nixops_wrap ssh eldiron -- nix-store --gc + +.PHONY: setup ssh-eldiron info debug dry-run build upload deploy push pull pull-deployment list-generations delete-generations cleanup diff --git a/nixops/custom_nixops.nix b/nixops/custom_nixops.nix new file mode 100644 index 00000000..f024a4d8 --- /dev/null +++ b/nixops/custom_nixops.nix @@ -0,0 +1,2 @@ +with import { overlays = builtins.attrValues (import ../overlays); }; +nixops diff --git a/nixops/eldiron.nix b/nixops/eldiron.nix new file mode 100644 index 00000000..649e431a --- /dev/null +++ b/nixops/eldiron.nix @@ -0,0 +1,9 @@ +{ privateFiles ? ./. }: +{ + network = { + description = "Immae's network"; + enableRollback = true; + }; + + eldiron = import ../modules/private/system/eldiron.nix { inherit privateFiles; }; +} diff --git a/nixops/migrate_hetzner.md b/nixops/migrate_hetzner.md new file mode 100644 index 00000000..c7fbe207 --- /dev/null +++ b/nixops/migrate_hetzner.md @@ -0,0 +1,20 @@ +nixops show a deprecation message at each deployment because hetzner +info is outdated. To fix it: + + cp -a ~/.nixops ~/.nixops.bak + + nixops export --all > all.json + + network=$(cat all.json| jq -r '."cef694f3-081d-11e9-b31f-0242ec186adf".resources.eldiron."hetzner.networkInfo"' | jq -r -c '.networking.interfaces.eth0 = { "ipv4": { "addresses": [ { "address": .networking.interfaces.eth0.ipAddress, "prefixLength": .networking.interfaces.eth0.prefixLength } ] } }') + + cat all.json | jq --arg network "$network" '."cef694f3-081d-11e9-b31f-0242ec186adf".resources.eldiron."hetzner.networkInfo" = $network' > all_new.json + + nixops delete --force -d eldiron + + nixops import < all_new.json + + rm all.json all_new.json + +*check that everything works*, then: + + rm -rf ~/.nixops.bak diff --git a/nixops/scripts/nixops_wrap b/nixops/scripts/nixops_wrap new file mode 100755 index 00000000..d03784e7 --- /dev/null +++ b/nixops/scripts/nixops_wrap @@ -0,0 +1,36 @@ +#!/bin/bash + +DeploymentUuid="cef694f3-081d-11e9-b31f-0242ec186adf" +if [ -z "$NIXOPS_CONFIG_PASS_SUBTREE_PATH" ]; then + echo "Please set NIXOPS_CONFIG_PASS_SUBTREE_PATH to the password-store subtree path" + exit 1; +fi +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +export NIXOPS_STATE="$(dirname $DIR)/state/eldiron.nixops" +export NIXOPS_DEPLOYMENT="$DeploymentUuid" +source $(dirname $(dirname $DIR))/nix_path_env +nixops="$(nix-build --no-out-link "$(dirname $DIR)/custom_nixops.nix")/bin/nixops" + +TEMP=$(mktemp -d /tmp/XXXXXX-nixops-files) +chmod go-rwx $TEMP + +# __noChroot: ssh-config-file requires relaxed +export NIX_PATH="ssh-config-file=$(dirname $DIR)/ssh/config:$NIX_PATH" + + +finish() { + rm -rf "$TEMP" + $nixops set-args --unset privateFiles +} + +trap finish EXIT + +# pass cannot "just" list files in a directory without showing a tree :( +files=$(pass ls $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/files | sed -e '1d' -e 's/^.* //') + +for file in $files; do + pass show "$NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/files/$file" > $TEMP/$file +done +$nixops set-args --argstr privateFiles "$TEMP" + +$nixops "$@" diff --git a/nixops/scripts/pull_deployment b/nixops/scripts/pull_deployment new file mode 100755 index 00000000..10f71fec --- /dev/null +++ b/nixops/scripts/pull_deployment @@ -0,0 +1,34 @@ +#!/bin/bash + +DeploymentUuid="cef694f3-081d-11e9-b31f-0242ec186adf" +if [ -z "$NIXOPS_CONFIG_PASS_SUBTREE_PATH" ]; then + echo "Please set NIXOPS_CONFIG_PASS_SUBTREE_PATH to the password-store subtree path" + exit 1; +fi +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +export NIXOPS_STATE="$(dirname $DIR)/state/eldiron.nixops" +export NIXOPS_DEPLOYMENT="$DeploymentUuid" +source $(dirname $(dirname $DIR))/nix_path_env +nixops="$(nix-build --no-out-link "$(dirname $DIR)/custom_nixops.nix")/bin/nixops" + +export NIXOPS_STATE="$(dirname $DIR)/state/eldiron.nixops" + +if $nixops info -d $DeploymentUuid 2>/dev/null >/dev/null; then + cat </dev/null 2>&1 && pwd )" +export NIXOPS_STATE="$(dirname $DIR)/state/eldiron.nixops" +export NIXOPS_DEPLOYMENT="$DeploymentUuid" +source $(dirname $(dirname $DIR))/nix_path_env +nixops="$(nix-build --no-out-link "$(dirname $DIR)/custom_nixops.nix")/bin/nixops" + +$nixops export | pass insert -m $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/Deployment diff --git a/nixops/scripts/push_environment b/nixops/scripts/push_environment new file mode 100755 index 00000000..8b59240e --- /dev/null +++ b/nixops/scripts/push_environment @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ -z "$NIXOPS_CONFIG_PASS_SUBTREE_PATH" ]; then + echo "Please set NIXOPS_CONFIG_PASS_SUBTREE_PATH to the password-store subtree path" + exit 1; +fi + +if [ -z "$NIXOPS_CONFIG_PASS_SUBTREE_REMOTE" ]; then + echo "Please set NIXOPS_CONFIG_PASS_SUBTREE_REMOTE to the password-store subtree remote name" + exit 1; +fi + +pass git subtree push --prefix=$NIXOPS_CONFIG_PASS_SUBTREE_PATH $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE master diff --git a/nixops/scripts/setup b/nixops/scripts/setup new file mode 100755 index 00000000..1586265d --- /dev/null +++ b/nixops/scripts/setup @@ -0,0 +1,163 @@ +#!/bin/bash + +set -euo pipefail + +RemoteRepo="gitolite@git.immae.eu:perso/Immae/Prive/Password_store/Sites" +DeploymentUuid="cef694f3-081d-11e9-b31f-0242ec186adf" + +if ! which nix 2>/dev/null >/dev/null; then + cat <<-EOF + nix is needed, please install it: + > curl https://nixos.org/nix/install | sh + (or any other way handled by your distribution) + EOF + exit 1 +fi + +if [ "${NIX_STORE:-/nix/store}" != "/nix/store" ]; then + cat <<-EOF + Nix store outside of /nix/store is not supported + EOF + exit 1 +fi + +if [ -z "$NIXOPS_CONFIG_PASS_SUBTREE_REMOTE" \ + -o -z "$NIXOPS_CONFIG_PASS_SUBTREE_PATH" ]; then + cat <<-EOF + Two environment variables are needed to setup the password store: + NIXOPS_CONFIG_PASS_SUBTREE_PATH : path where the subtree will be imported + NIXOPS_CONFIG_PASS_SUBTREE_REMOTE : remote name to give to the repository + EOF + exit 1 +fi + +if ! pass $NIXOPS_CONFIG_PASS_SUBTREE_PATH > /dev/null 2>/dev/null; then + cat <<-EOF + /!\ This will modify your password store to add and import a subtree + with the specific passwords files. Choose a path that doesn’t exist + yet in your password store. + > pass git remote add $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE $RemoteRepo + > pass git subtree add --prefix=$NIXOPS_CONFIG_PASS_SUBTREE_PATH $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE master + Later, you can use pull_environment and push_environment scripts to + update the passwords when needed + Continue? [y/N] + EOF + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + pass git remote add $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE $RemoteRepo + pass git subtree add --prefix=$NIXOPS_CONFIG_PASS_SUBTREE_PATH $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE master + else + echo "Aborting" + exit 1 + fi +fi + +# Repull it before using it, just in case +pass git subtree pull --prefix=$NIXOPS_CONFIG_PASS_SUBTREE_PATH $NIXOPS_CONFIG_PASS_SUBTREE_REMOTE master + +gpg_keys=$(pass ls $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/GPGKeys | sed -e "1d" | cut -d" " -f2) +for key in $gpg_keys; do + content=$(pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/GPGKeys/$key) + fpr=$(echo "$content" | gpg --import-options show-only --import --with-colons | grep -e "^pub" | cut -d':' -f5) + gpg --list-key "$fpr" >/dev/null 2>/dev/null && imported=yes || imported=no + # /usr/share/doc/gnupg/DETAILS field 2 + (echo "$content" | gpg --import-options show-only --import --with-colons | + grep -E '^pub:' | + cut -d':' -f2 | + grep -q '[fu]') && signed=yes || signed=no + if [ "$signed" = no -o "$imported" = no ] ; then + echo "The key for $key needs to be imported and signed (a local signature is enough)" + echo "$content" | gpg --import-options show-only --import + echo "Continue? [y/N]" + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + echo "$content" | gpg --import + gpg --expert --edit-key "$fpr" lsign quit + else + echo "Aborting" + exit 1 + fi + fi +done + +nix_group=$(stat -c %G /nix/store) +if [ "$nix_group" = "nixbld" ]; then + nix_user="nixbld1" +else + nix_user="$(stat -c %U /nix/store)" +fi + +if [ ! -f /etc/ssh/ssh_rsa_key_nixops ]; then + cat <<-EOF + The key to access private git repositories (websites hosted by the + server) needs to be accessible to nix builders. It will be put in + /etc/ssh/ssh_rsa_key_nixops (sudo right is needed for that) + > pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/SshKey | sudo tee /etc/ssh/ssh_rsa_key_nixops > /dev/null + > pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/SshKey.pub | sudo tee /etc/ssh/ssh_rsa_key_nixops.pub > /dev/null + > sudo chmod u=r,go-rwx /etc/ssh/ssh_rsa_key_nixops + > sudo chown $nix_user:$nix_group /etc/ssh/ssh_rsa_key_nixops /etc/ssh/ssh_rsa_key_nixops.pub + Continue? [y/N] + EOF + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + if ! id -u $nix_user 2>/dev/null >/dev/null; then + echo "User $nix_user seems inexistant, did you install nix?" + exit 1 + fi + mask=$(umask) + umask 0777 + # Don’t forward it directly to tee, it would break ncurse pinentry + key=$(pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/SshKey) + echo "$key" | sudo tee /etc/ssh/ssh_rsa_key_nixops > /dev/null + sudo chmod u=r,go=- /etc/ssh/ssh_rsa_key_nixops + pubkey=$(pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/SshKey.pub) + echo "$pubkey" | sudo tee /etc/ssh/ssh_rsa_key_nixops.pub > /dev/null + sudo chmod a=r /etc/ssh/ssh_rsa_key_nixops.pub + sudo chown $nix_user:$nix_group /etc/ssh/ssh_rsa_key_nixops /etc/ssh/ssh_rsa_key_nixops.pub + umask $mask + else + echo "Aborting" + exit 1 + fi +fi + +if nix show-config --json | jq -e '.sandbox.value == "true"' >/dev/null; then + cat <<-EOF + There are some impure derivations in the repo currently (grep __noChroot), please put + sandbox = "relaxed" + in /etc/nix/nix.conf + you may also want to add + keep-outputs = true + keep-derivations = true + to prevent garbage collector from deleting build dependencies (they take a lot of time to build) + EOF + exit 1 +fi + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +source $(dirname $(dirname $DIR))/nix_path_env +nixops="$(nix-build --no-out-link "$(dirname $DIR)/custom_nixops.nix")/bin/nixops" +export NIXOPS_STATE="$(dirname $DIR)/state/eldiron.nixops" +export NIXOPS_DEPLOYMENT="$DeploymentUuid" + +if ! $nixops info 2>/dev/null >/dev/null; then + cat <<-EOF + Importing deployment file into nixops: + Continue? [y/N] + EOF + read y + if [ "$y" = "y" -o "$y" = "Y" ]; then + deployment=$(pass show $NIXOPS_CONFIG_PASS_SUBTREE_PATH/Nixops/Deployment) + echo "$deployment" | $nixops import + + $nixops modify "$(dirname $DIR)/eldiron.nix" + else + echo "Aborting" + exit 1 + fi +fi + +cat <<-EOF + All set up. + Please make sure you’re using scripts/nixops_wrap when deploying + EOF diff --git a/nixops/ssh/config b/nixops/ssh/config new file mode 100644 index 00000000..3d4dc3e4 --- /dev/null +++ b/nixops/ssh/config @@ -0,0 +1,5 @@ +Host git.immae.eu +IdentityFile /etc/ssh/ssh_rsa_key_nixops +StrictHostKeyChecking no +UserKnownHostsFile /dev/null +CheckHostIP no diff --git a/nixops/state/.gitkeep b/nixops/state/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/overlays/bitlbee/bitlbee_long_nicks.patch b/overlays/bitlbee/bitlbee_long_nicks.patch new file mode 100644 index 00000000..70be0925 --- /dev/null +++ b/overlays/bitlbee/bitlbee_long_nicks.patch @@ -0,0 +1,56 @@ +diff --git a/bitlbee.h b/bitlbee.h +index 17ab2979..5858277e 100644 +--- a/bitlbee.h ++++ b/bitlbee.h +@@ -121,7 +121,7 @@ extern "C" { + #define CONTROL_TOPIC "Welcome to the control channel. Type \2help\2 for help information." + #define IRCD_INFO PACKAGE " " + +-#define MAX_NICK_LENGTH 24 ++#define MAX_NICK_LENGTH 99 + + #define HELP_FILE VARDIR "help.txt" + #define CONF_FILE_DEF ETCDIR "bitlbee.conf" +diff --git a/tests/check_nick.c b/tests/check_nick.c +index ca5e5111..909fdcc9 100644 +--- a/tests/check_nick.c ++++ b/tests/check_nick.c +@@ -11,16 +11,16 @@ + START_TEST(test_nick_strip){ + int i; + const char *get[] = { "test:", "test", "test\n", +- "thisisaveryveryveryverylongnick", +- "thisisave:ryveryveryverylongnick", ++ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", ++ "thisis:averyveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", + "t::::est", + "test123", + "123test", + "123", + NULL }; + const char *expected[] = { "test", "test", "test", +- "thisisaveryveryveryveryl", +- "thisisaveryveryveryveryl", ++ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve", ++ "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryve", + "test", + "test123", + "_123test", +@@ -28,7 +28,7 @@ START_TEST(test_nick_strip){ + NULL }; + + for (i = 0; get[i]; i++) { +- char copy[60]; ++ char copy[260]; + strcpy(copy, get[i]); + nick_strip(NULL, copy); + fail_unless(strcmp(copy, expected[i]) == 0, +@@ -53,7 +53,7 @@ END_TEST + + START_TEST(test_nick_ok_notok) + { +- const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnick", ++ const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnickthisisaveryveryveryveryveryveryverylongnick", + "\nillegalchar", "", "nick%", "123test", NULL }; + int i; + diff --git a/overlays/bitlbee/default.nix b/overlays/bitlbee/default.nix new file mode 100644 index 00000000..5183d012 --- /dev/null +++ b/overlays/bitlbee/default.nix @@ -0,0 +1,5 @@ +self: super: { + bitlbee = super.bitlbee.overrideAttrs(old: { + patches = (old.patches or []) ++ [ ./bitlbee_long_nicks.patch ]; + }); +} diff --git a/overlays/bundix/default.nix b/overlays/bundix/default.nix new file mode 100644 index 00000000..6c4046cf --- /dev/null +++ b/overlays/bundix/default.nix @@ -0,0 +1,7 @@ +self: super: { + bundix = super.bundix.overrideAttrs (old: { + preBuild = (old.preBuild or "") + '' + sed -i -e "/case obj/a\ when nil\n nil" lib/bundix/nixer.rb + ''; + }); +} diff --git a/overlays/databases/mysql/default.nix b/overlays/databases/mysql/default.nix new file mode 100644 index 00000000..5e402841 --- /dev/null +++ b/overlays/databases/mysql/default.nix @@ -0,0 +1,12 @@ +self: super: rec { + mariadb = mariadbPAM; + mariadbPAM = super.mariadb.overrideAttrs(old: { + cmakeFlags = old.cmakeFlags ++ [ "-DWITH_AUTHENTICATION_PAM=ON" ]; + buildInputs = old.buildInputs ++ [ self.pam ]; + }) // (with super.mariadb; { + inherit client; + servier = super.mariadb; + inherit connector-c; + inherit galera; + }); +} diff --git a/overlays/databases/postgresql/default.nix b/overlays/databases/postgresql/default.nix new file mode 100644 index 00000000..8d1405e3 --- /dev/null +++ b/overlays/databases/postgresql/default.nix @@ -0,0 +1,11 @@ +self: super: rec { + postgresql_11_custom = super.postgresql_11.overrideAttrs(old: { + # datadir in /var/lib/postgresql is named after psqlSchema + passthru = old.passthru // { psqlSchema = "11.0"; }; + configureFlags = old.configureFlags ++ [ "--with-pam" ]; + buildInputs = (old.buildInputs or []) ++ [ self.pam ]; + patches = old.patches ++ [ + ./postgresql_run_socket_path.patch + ]; + }); +} diff --git a/overlays/databases/postgresql/postgresql_run_socket_path.patch b/overlays/databases/postgresql/postgresql_run_socket_path.patch new file mode 100644 index 00000000..b558c7b7 --- /dev/null +++ b/overlays/databases/postgresql/postgresql_run_socket_path.patch @@ -0,0 +1,12 @@ +diff -Naur postgresql-9.2.0.sockets/src/include/pg_config_manual.h postgresql-9.2.0/src/include/pg_config_manual.h +--- postgresql-9.2.0.sockets/src/include/pg_config_manual.h 2012-09-06 17:26:17.000000000 -0400 ++++ postgresql-9.2.0/src/include/pg_config_manual.h 2012-09-06 18:13:18.183092471 -0400 +@@ -144,7 +144,7 @@ + * here's where to twiddle it. You can also override this at runtime + * with the postmaster's -k switch. + */ +-#define DEFAULT_PGSOCKET_DIR "/tmp" ++#define DEFAULT_PGSOCKET_DIR "/run/postgresql" + + /* + * The random() function is expected to yield values between 0 and diff --git a/overlays/default.nix b/overlays/default.nix new file mode 100644 index 00000000..408515ed --- /dev/null +++ b/overlays/default.nix @@ -0,0 +1,31 @@ +{ + mylibs = self: super: { mylibs = import ../libs.nix { pkgs = self; }; }; + mypkgs = self: super: import ../pkgs { pkgs = self; }; + + bitlbee = import ./bitlbee; + bundix = import ./bundix; + dwm = import ./dwm; + elinks = import ./elinks; + gitweb = import ./gitweb; + goaccess = import ./goaccess; + kanboard = import ./kanboard; + ldapvi = import ./ldapvi; + lesspipe = import ./lesspipe; + mysql = import ./databases/mysql; + neomutt = import ./neomutt; + nixops = import ./nixops; + pass = import ./pass; + pelican = import ./pelican; + postgresql = import ./databases/postgresql; + profanity = import ./profanity; + sc-im = import ./sc-im; + shaarli = import ./shaarli; + slrn = import ./slrn; + taskwarrior = import ./taskwarrior; + vit = import ./vit; + weboob = import ./weboob; + weechat = import ./weechat; + ympd = import ./ympd; +} +// import ./python-packages +// import ./environments diff --git a/overlays/dwm/default.nix b/overlays/dwm/default.nix new file mode 100644 index 00000000..96ed3ff5 --- /dev/null +++ b/overlays/dwm/default.nix @@ -0,0 +1,7 @@ +self: super: { + dwm = super.dwm.overrideAttrs(old: rec { + postPatch = '' + cp ${./dwm_config.h} ./config.h + ''; + }); +} diff --git a/overlays/dwm/dwm_config.h b/overlays/dwm/dwm_config.h new file mode 100644 index 00000000..b1587e88 --- /dev/null +++ b/overlays/dwm/dwm_config.h @@ -0,0 +1,98 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char *fonts[] = { "monospace:size=10" }; +static const char dmenufont[] = "monospace:size=10"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, +}; + +/* tagging */ +static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +static const Rule rules[] = { + /* xprop(1): + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ + /* class instance title tags mask isfloating monitor */ + { "Nextcloud", NULL, NULL, 9 << 8, 0, -1 }, +}; + +/* layout(s) */ +static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ +static const int nmaster = 1; /* number of clients in master area */ +static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ + +static const Layout layouts[] = { + /* symbol arrange function */ + { "[M]", monocle }, /* first entry is default */ + { "[]=", tile }, + { "><>", NULL }, /* no layout function means floating behavior */ +}; + +/* key definitions */ +#define MODKEY Mod1Mask +#define TAGKEYS(KEY,TAG) \ + { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ + { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ + { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ + { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, + +/* helper for spawning shell commands in the pre dwm-5.0 fashion */ +#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } + +/* commands */ +static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; +static const char *termcmd[] = { "st", NULL }; + +static Key keys[] = { + /* modifier key function argument */ + { MODKEY, XK_p, spawn, {.v = dmenucmd } }, + { MODKEY, XK_t, spawn, {.v = termcmd } }, + { MODKEY, XK_Tab, view, {0} }, + { MODKEY|ShiftMask, XK_c, killclient, {0} }, + { MODKEY, XK_j, focusstack, {.i = +1 } }, + { MODKEY, XK_k, focusstack, {.i = -1 } }, + { MODKEY, XK_Return, zoom, {0} }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) + TAGKEYS( XK_4, 3) + TAGKEYS( XK_5, 4) + TAGKEYS( XK_6, 5) + TAGKEYS( XK_7, 6) + TAGKEYS( XK_8, 7) + TAGKEYS( XK_9, 8) + { MODKEY|ShiftMask, XK_q, quit, {0} }, +}; + +/* button definitions */ +/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ +static Button buttons[] = { + /* click event mask button function argument */ + { ClkLtSymbol, 0, Button1, setlayout, {0} }, + { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, + { ClkWinTitle, 0, Button2, zoom, {0} }, + { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, + { ClkClientWin, MODKEY, Button1, movemouse, {0} }, + { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, + { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, + { ClkTagBar, 0, Button1, view, {0} }, + { ClkTagBar, 0, Button3, toggleview, {0} }, + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, +}; + diff --git a/overlays/elinks/default.nix b/overlays/elinks/default.nix new file mode 100644 index 00000000..1744dc0b --- /dev/null +++ b/overlays/elinks/default.nix @@ -0,0 +1,14 @@ +self: super: { + elinks = super.elinks.overrideAttrs (old: + self.mylibs.fetchedGithub ./elinks.json // rec { + preConfigure = ''sh autogen.sh''; + buildInputs = old.buildInputs ++ (with self; [ gettext automake autoconf ]); + configureFlags = [ + "--disable-smb" "--without-x" "--enable-cgi" + "--enable-leds" "--enable-256-colors" + "--enable-html-highlight" "--with-zlib" + ]; + patches = []; + } + ); +} diff --git a/overlays/elinks/elinks.json b/overlays/elinks/elinks.json new file mode 100644 index 00000000..ea13b1fa --- /dev/null +++ b/overlays/elinks/elinks.json @@ -0,0 +1,15 @@ +{ + "tag": "f86be65-master", + "meta": { + "name": "elinks", + "url": "https://github.com/nabetaro/elinks", + "branch": "master" + }, + "github": { + "owner": "nabetaro", + "repo": "elinks", + "rev": "f86be659718c0cd0a67f88b42f07044c23d0d028", + "sha256": "1jxb7xgawcjkb3gw4gqyw26g02709wwdbhyczfckh3l4njxhy14m", + "fetchSubmodules": true + } +} diff --git a/overlays/environments/default.nix b/overlays/environments/default.nix new file mode 100644 index 00000000..630b0bd1 --- /dev/null +++ b/overlays/environments/default.nix @@ -0,0 +1,3 @@ +{ + immae-eu = import ./immae-eu.nix; +} diff --git a/overlays/environments/immae-eu.nix b/overlays/environments/immae-eu.nix new file mode 100644 index 00000000..1f27e7ca --- /dev/null +++ b/overlays/environments/immae-eu.nix @@ -0,0 +1,116 @@ +self: super: with self; +let + # https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh + # https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks + paths = [ + # archives + lzo unzip bzip2 p7zip xz + # unrar is unfree + + # backups + duply + + # calendar/contacts + abook khard khal cadaver vdirsyncer pal + + # computing + boinctui + + # cryptocurrencies + cardano sia monero + xmr-stak + solc + iota-cli-app + + # debugging + rr valgrind netcat-gnu strace + + # documentations + unicodeDoc + + # e-mails + muttprint mutt-ics + notmuch-python2 notmuch-python3 notmuch-vim + neomutt mairix notmuch + bogofilter fetchmail + + # git + vcsh gitRepo gitAndTools.stgit tig + + # graphical tools + nextcloud-client firefox + dwm dmenu st + + # images + feh imagemagick tiv graphicsmagick + + # internet browsing + w3m lynx links elinks browsh weboob urlview googler urlwatch + + # less + python3Packages.pygments lesspipe highlight sourceHighlight + + # monitoring + cnagios mtop pg_activity nagios-cli mtr + iftop htop iotop iperf + goaccess + # nagnu + + # messaging/forums/news + flrn slrn + telegram-cli telegram-history-dump telegramircd + weechat profanity + newsboat irssi + + # nix + mylibs.yarn2nixPackage.yarn2nix + nixops nix-prefetch-scripts nix-generate-from-cpan + nix-zsh-completions bundix nodePackages.bower2nix + nodePackages.node2nix + # (nixos {}).nixos-generate-config + # (nixos {}).nixos-install + # (nixos {}).nixos-enter + # (nixos {}).manual.manpages + + # note taking + note terminal-velocity jrnl + + # office + sc-im ranger + genius bc + ledger + tmux + rtorrent + ldapvi + + # password management + pass apg pwgen + + # pdf + pdftk poppler_utils + + # programming + pelican emacs26-nox ctags + wdiff + + # security + keybase + + # todolist/time management + taskwarrior vit timewarrior + + # video/music + youtube-dl ncmpc ncmpcpp ffmpeg + + # other tools + pgloader s3cmd lftp jq cpulimit libxslt + ]; +in +{ + myEnvironments.immae-eu = buildEnv { + name = "immae-eu-packages"; + inherit paths; + pathsToLink = [ "/bin" "/etc" "/include" "/lib" "/libexec" "/share"]; + extraOutputsToInstall = [ "bin" "man" "doc" "info" ]; + }; +} diff --git a/overlays/gitweb/default.nix b/overlays/gitweb/default.nix new file mode 100644 index 00000000..aa17d22f --- /dev/null +++ b/overlays/gitweb/default.nix @@ -0,0 +1,7 @@ +self: super: { + gitweb = super.gitweb.overrideAttrs(old: { + installPhase = old.installPhase + '' + cp -r ${./theme} $out/gitweb-theme; + ''; + }); +} diff --git a/overlays/gitweb/theme/git-favicon.png b/overlays/gitweb/theme/git-favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa44bb051e6ed0726911f095d6991e430805242 GIT binary patch literal 1125 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 .list_head { + width: 98.5%; +} + +.page_body > .diff_tree { + width: 99.5%; +} + +.patch > .header { + width: 99%; +} + +.author .avatar, +.author_date .avatar { + position: relative; + top: 3px; +} + +.object_header .avatar { + border: 1px solid #D8D8D8; + float: right; +} + +.object_header td, +.object_header th { + vertical-align: top; +} + +/* Refs +---------------------------------------------------------------------------- */ + +span.refs span { + color: #707070; + display: inline-block; + margin: 0; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; +} + +span.refs span.ref { + color: #707070; + display: inline-block; + margin: 0; + background-color: #c4c4ff; + border: 1px solid #7878ff; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUnpolg7AAAAHJQTFRFAAAAVVWqZmbMVVXVYGDgbW3td3fuc3PzdHT0cHD1d3f6dHT6dnb7dHT7dnb8dnb8dnb9d3f9dnb+eHj+d3f+eHj+d3f+d3f+d3f+eHj+d3f+eHj+d3f+eHj+d3f+d3f+eHj+d3f+d3f+d3f+eHj/////V9oQhQAAACR0Uk5TAAIEBQcNDhMVGCotNTZAT217i5CgobvExtjZ4eLr7vP09ff7uqQ6cgAAAAFiS0dEJcMByQ8AAABUSURBVBjTpc43AoAwDENRh95bgNBM1f3PyOpslD++RSJ61YgH5M2IbIkn4GocSR1MZVBL4t2n4FgkbaxI8Sqph041WknZCWAIrcmEUbpf3lNe0N9u59YFYHnZ78gAAAAASUVORK5CYII=); + background-repeat: no-repeat; + padding-left: 18px; +} + +span.refs span.tag { + color: #707070; + display: inline-block; + margin: 0; + background-color: #ffffab; + border: 1px solid #d9d93b; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUZZ+h9RwAAAGZQTFRFAAAAtrYkwMBAwMBAx8c4yso11NQ71NQ51dU52Ng71tY519c719c719c62Ng719c719c62Ng72dk62Ng62Ng72Ng72dk62Ng72Ng62dk62dk72dk62Ng62dk72Ng72Ng72dk7////ou/AnQAAACB0Uk5TAAYHCxESLjRCWWlqa4uNkpissbrO19jc3ufs8vf6/f7atAU2AAAAAWJLR0QhxGwNFgAAAF1JREFUGFeNy0cOgCAABVGw94rY5d//lC7omhhn+ZIh5Gf1xPk0Zi5dAABROIQjSU/fsAXhDkCUljAv8jW2wlQpaixpo4Nj+dtatVpjkSJjLNaizRVpvhBCu/4h391jzw1lU12Z7wAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + padding-left: 18px; +} + +span.refs span.head { + color: #707070; + display: inline-block; + margin: 0; + background-color: #c4ffc4; + border: 1px solid #78ff78; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSYDsafX/gAAAUpJREFUOMvVkjFLA0EQhd/s7l06MSCihbV/wC5/QBDEIFYWprRIIQQJFqKFQi4kUbBQsFSwtrUQLQULUTBFLCzVIgimCXe7z0q5yIWcqfRVwzDzMTNvgL8mSUqWw3JOtFQJdsIwLDYyjdYgkEmkazl2oVtQWk36nn8AYBYASmFpxmizGtnoqO7Vb+M9KglEkASdpWU872nvVCiPRpuTnz2JIHGyqX3d0kZfR1G0Ht+g/do+FIhOBbLW3n/FNb/28D0puZ+dyL44ur1UoH5yzt2JyIj6UGdDgwrPhYzSagNEszJaeU/lWlylbmnaeGZZICsAppxzi6nt73HK85oQCMknOuarpno+FIjglVjZDXaCS2yDv3rIHlCb88FY0BlUl3hs7ektkhckb5DFWhoz+n12zr7ZPLpYUqLm0oBMn8NUzLhpAgjpWMS/1CcSJ3ykD7Rk1QAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + padding-left: 18px; +} + +span.refs a { + color: #4e4e4e; + font: 11px "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, monospace; + line-height: 18px; +} + +/* Diffs +---------------------------------------------------------------------------- */ + +div.diff.to_file a.path, +div.diff.to_file { + color: #007000; +} + +div.diff.from_file a.path, +div.diff.from_file { + color: #aa0000; +} + +.patch .header { + margin: 0; +} + +.patchset { + overflow-x: auto; + overflow-y: hidden; +} + +.chunk_header { + background: #eaf2f5; + color: #999; +} + +.rem { + background: #ffdddd; +} +.rem .marked { + background: #ffaaaa; +} +.add { + background: #ddffdd; +} +.add .marked { + background: #7dff7d; +} + +.extended_header { + width: 99.5%; +} + +div.chunk_block { + overflow: hidden; +} + +div.chunk_block div.old { + float: left; + width: 50%; + overflow: hidden; + border-right: 5px solid #EAF2F5; +} + +div.chunk_block.rem, +div.chunk_block.add { + background: transparent; +} + +div.chunk_block div.old .add, +div.chunk_block div.old .rem { + padding-right: 3px; +} + +div.chunk_block div.new .add, +div.chunk_block div.new .rem { + padding-left: 3px; +} + +div.chunk_block div.new { + margin-left: 50%; + width: 50%; + border-left: 5px solid #EAF2F5; +} + +/* Category +---------------------------------------------------------------------------- */ + +td.category { + background: #E6F1F6; /* old browsers */ + background: -moz-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); /* firefox */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#C8D8E7), color-stop(100%,#E6F1F3)); /* webkit */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C8D8E7', endColorstr='#E6F1F3',GradientType=0 ); /* ie */ + background: -o-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); + font-weight: bold; + border-bottom: 1px solid #D1D1D1; + border-top: 1px solid #D1D1D1; +} + +/* Age +---------------------------------------------------------------------------- */ + +/* noage: "No commits" */ +.project_list td.noage { + color: #cdcdcd; +} + +/* age2: 60*60*24*2 <= age */ +.project_list td.age2, .blame td.age2 { + color: #545454; +} + +/* age1: 60*60*2 <= age < 60*60*24*2 */ +.project_list td.age1 { + color: #009900; +} + +/* age0: age < 60*60*2 */ +.project_list td.age0 { + color: #009900; + font-weight: bold; +} + +/* File status +---------------------------------------------------------------------------- */ + +.diff_tree span.file_status.new { + color: #008000; +} + +table.diff_tree span.file_status.deleted { + color: #c00000; +} + +table.diff_tree span.file_status.moved, +table.diff_tree span.file_status.mode_chnge { + color: #545454; +} + +table.diff_tree span.file_status.copied { + color: #70a070; +} + +span.cntrl { + border: dashed #aaaaaa; + border-width: 1px; + padding: 0px 2px 0px 2px; + margin: 0px 2px 0px 2px; +} + +span.match { + background: #aaffaa; + color: #000; +} + +td.error { + color: red; + background: yellow; +} + +/* blob view */ + +td.pre, div.pre, div.diff { + white-space: pre-wrap; +} + +/* JavaScript-based timezone manipulation */ + +.popup { /* timezone selection UI */ + position: absolute; + /* "top: 0; right: 0;" would be better, if not for bugs in browsers */ + top: 0; left: 0; + border: 1px solid #d8d8d8; + padding: 2px; + background-color: #f0f0f0; + font-style: normal; + color: #545454; + cursor: auto; +} + +.close-button { /* close timezone selection UI without selecting */ + /* float doesn't work within absolutely positioned container, + * if width of container is not set explicitly */ + /* float: right; */ + position: absolute; + top: 0px; right: 0px; + border: 1px solid #ffaaaa; + margin: 1px 1px 1px 1px; + padding-bottom: 2px; + width: 12px; + height: 10px; + font-size: 9px; + font-weight: bold; + text-align: center; + background-color: #ffdddd; + cursor: pointer; +} + +/* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */ + +/* Highlighting theme definition: */ + +.num { color:#6ecf36; } +.esc { color:#ff00ff; } +.str { color:#ff00d3; background-color: #edc9ec } +.dstr { color:#818100; } +.slc { color:#838183; font-style:italic; } +.com { color:#838183; font-style:italic; } +.dir { color:#008200; } +.sym { color:#000000; } +.line { color:#555555; } +.kwa { color:#666666; font-weight:bold; } +.kwb { color:#6b3099; } +.kwc { color:#d4663d; } +.kwd { color:#2928ff; } + +/**** Styles supplémentaires *****/ + +.readme div.toc { + float: right; + border: 1px solid black; + background-color: white; +} +.readme div.toc span.toctitle { + display: inline-block; + width: 100%; + text-align: center; + font-weight: bold; +} + +.readme table { + background-color: white; +} + +.readme table thead tr { + background-color: #ccc; +} + +.readme table tbody tr:nth-child(2n) { + background-color: #f8f8f8; +} + +.readme table td, .readme table th { + border: 1px solid black; +} diff --git a/overlays/gitweb/theme/gitweb.js b/overlays/gitweb/theme/gitweb.js new file mode 100644 index 00000000..72f3cfa5 --- /dev/null +++ b/overlays/gitweb/theme/gitweb.js @@ -0,0 +1,27 @@ +function include(filename, onload) { + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + script.src = filename; + script.type = 'text/javascript'; + script.onload = script.onreadystatechange = function() { + if (script.readyState) { + if (script.readyState === 'complete' || script.readyState === 'loaded') { + script.onreadystatechange = null; + onload(); + } + } + else { + onload(); + } + } + head.appendChild(script); +} + +include('static/gitweb.js', function() {}); +include('//code.jquery.com/jquery-3.1.0.min.js', function() { + $("div.title").each(function(index, element) { + if ($(element).text() === "readme" || $(element).text() === " ") { + $(element).hide(); + } + }); +}); diff --git a/overlays/goaccess/default.nix b/overlays/goaccess/default.nix new file mode 100644 index 00000000..12b28f3b --- /dev/null +++ b/overlays/goaccess/default.nix @@ -0,0 +1,13 @@ +self: super: { + goaccess = super.goaccess.overrideAttrs(old: rec { + name = "goaccess-${version}"; + version = "1.3"; + src = self.fetchurl { + url = "https://tar.goaccess.io/${name}.tar.gz"; + sha256 = "16vv3pj7pbraq173wlxa89jjsd279004j4kgzlrsk1dz4if5qxwc"; + }; + configureFlags = old.configureFlags ++ [ "--enable-tcb=btree" ]; + buildInputs = old.buildInputs ++ [ self.tokyocabinet self.bzip2 ]; + }); + +} diff --git a/overlays/kanboard/default.nix b/overlays/kanboard/default.nix new file mode 100644 index 00000000..81b39fec --- /dev/null +++ b/overlays/kanboard/default.nix @@ -0,0 +1,18 @@ +self: super: { + kanboard = { kanboard_config ? "/etc/kanboard/config.php" }: + super.kanboard.overrideAttrs(old: rec { + name = "kanboard-${version}"; + version = "1.2.9"; + src = self.fetchFromGitHub { + owner = "kanboard"; + repo = "kanboard"; + rev = "c4152316b14936556edf3bcc4d11f16ba31b8ae7"; + sha256 = "18bn9zhyfc5x28hwcxss7chdq7c8rshc8jxgai65i5l68iwhvjg7"; + }; + installPhase = '' + cp -a . $out + ln -s ${kanboard_config} $out/config.php + mv $out/data $out/dataold + ''; + }); +} diff --git a/overlays/ldapvi/default.nix b/overlays/ldapvi/default.nix new file mode 100644 index 00000000..030e6769 --- /dev/null +++ b/overlays/ldapvi/default.nix @@ -0,0 +1,3 @@ +self: super: { + ldapvi = super.ldapvi.overrideAttrs (old: self.mylibs.fetchedGit ./ldapvi.json); +} diff --git a/overlays/ldapvi/ldapvi.json b/overlays/ldapvi/ldapvi.json new file mode 100644 index 00000000..ceaff712 --- /dev/null +++ b/overlays/ldapvi/ldapvi.json @@ -0,0 +1,14 @@ +{ + "tag": "f1d42ba-master", + "meta": { + "name": "ldapvi", + "url": "http://www.lichteblau.com/git/ldapvi.git", + "branch": "master" + }, + "git": { + "url": "http://www.lichteblau.com/git/ldapvi.git", + "rev": "f1d42bad66cc4623d1ff21fbd5dddbf5009d3e40", + "sha256": "0c2h4b1spp9z6a16gy9azf0wyxq397yy7001x1zlvc7c60q11wry", + "fetchSubmodules": true + } +} diff --git a/overlays/lesspipe/default.nix b/overlays/lesspipe/default.nix new file mode 100644 index 00000000..e53feae6 --- /dev/null +++ b/overlays/lesspipe/default.nix @@ -0,0 +1,5 @@ +self: super: { + lesspipe = super.lesspipe.overrideAttrs(old: { + configureFlags = (old.configureFlags or []) ++ [ "--yes" ]; + }); +} diff --git a/overlays/neomutt/default.nix b/overlays/neomutt/default.nix new file mode 100644 index 00000000..c8578c9a --- /dev/null +++ b/overlays/neomutt/default.nix @@ -0,0 +1,8 @@ +self: super: { + neomutt = super.neomutt.overrideAttrs (old: + { + buildInputs = old.buildInputs ++ [ self.gdbm ]; + configureFlags = old.configureFlags ++ [ "--gdbm" ]; + } + ); +} diff --git a/overlays/nixops/default.nix b/overlays/nixops/default.nix new file mode 100644 index 00000000..eb29ecd0 --- /dev/null +++ b/overlays/nixops/default.nix @@ -0,0 +1,7 @@ +self: super: { + nixops = super.nixops.overrideAttrs (old: { + preConfigure = (old.preConfigure or "") + '' + sed -i -e "/'keyFile'/s/'path'/'string'/" nixops/backends/__init__.py + ''; + }); +} diff --git a/overlays/pass/default.nix b/overlays/pass/default.nix new file mode 100644 index 00000000..df42cf19 --- /dev/null +++ b/overlays/pass/default.nix @@ -0,0 +1,8 @@ +self: super: { + pass = (super.pass.withExtensions (exts: [ exts.pass-otp ])).overrideAttrs (old: + self.mylibs.fetchedGit ./pass.json // { + patches = old.patches ++ [ ./pass-fix-pass-init.patch ]; + } + ); + +} diff --git a/overlays/pass/pass-fix-pass-init.patch b/overlays/pass/pass-fix-pass-init.patch new file mode 100644 index 00000000..10a76c16 --- /dev/null +++ b/overlays/pass/pass-fix-pass-init.patch @@ -0,0 +1,42 @@ +From 33e8f1cd0065639a948d7b5ba3f93d43bdf7f3be Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= +Date: Sun, 11 Nov 2018 19:47:33 +0100 +Subject: [PATCH] Fix pass init for some gpg keys + +This fixes the pass init for gpg keys which have their main key as +encryption key. This may happen for instance with RSA keys and specific +configuration. +--- + src/password-store.sh | 2 +- + tests/t0300-reencryption.sh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/password-store.sh b/src/password-store.sh +index d89d455..44d122e 100755 +--- a/src/password-store.sh ++++ b/src/password-store.sh +@@ -124,7 +124,7 @@ reencrypt_path() { + IFS=";" eval 'GPG_RECIPIENTS+=( $group )' # http://unix.stackexchange.com/a/92190 + unset "GPG_RECIPIENTS[$index]" + done +- gpg_keys="$($GPG $PASSWORD_STORE_GPG_OPTS --list-keys --with-colons "${GPG_RECIPIENTS[@]}" | sed -n 's/^sub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u)" ++ gpg_keys="$($GPG $PASSWORD_STORE_GPG_OPTS --list-keys --with-colons "${GPG_RECIPIENTS[@]}" | sed -n 's/^[ps]ub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u)" + fi + current_keys="$(LC_ALL=C $GPG $PASSWORD_STORE_GPG_OPTS -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$passfile" 2>&1 | sed -n 's/^gpg: public key is \([A-F0-9]\+\)$/\1/p' | LC_ALL=C sort -u)" + +diff --git a/tests/t0300-reencryption.sh b/tests/t0300-reencryption.sh +index 3c88987..57d873f 100755 +--- a/tests/t0300-reencryption.sh ++++ b/tests/t0300-reencryption.sh +@@ -7,7 +7,7 @@ cd "$(dirname "$0")" + INITIAL_PASSWORD="will this password live? a big question indeed..." + + canonicalize_gpg_keys() { +- $GPG --list-keys --with-colons "$@" | sed -n 's/sub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u ++ $GPG --list-keys --with-colons "$@" | sed -n 's/[ps]ub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u + } + gpg_keys_from_encrypted_file() { + $GPG -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$1" 2>&1 | grep "public key is" | cut -d ' ' -f 5 | LC_ALL=C sort -u +-- +2.19.1 + diff --git a/overlays/pass/pass.json b/overlays/pass/pass.json new file mode 100644 index 00000000..a4638c13 --- /dev/null +++ b/overlays/pass/pass.json @@ -0,0 +1,14 @@ +{ + "tag": "d29a389-master", + "meta": { + "name": "password-store", + "url": "https://git.zx2c4.com/password-store/", + "branch": "master" + }, + "git": { + "url": "https://git.zx2c4.com/password-store/", + "rev": "d29a389a40524c684595f51bb937f66958bc14ea", + "sha256": "17g43i0if9nggcq6005iyxxy9my8s15ihc2nzwjgqzhy3svh5xvn", + "fetchSubmodules": true + } +} diff --git a/overlays/pelican/default.nix b/overlays/pelican/default.nix new file mode 100644 index 00000000..5f60b8f7 --- /dev/null +++ b/overlays/pelican/default.nix @@ -0,0 +1,6 @@ +self: super: { + pelican = with self.python3Packages; + pelican.overrideAttrs(old: self.mylibs.fetchedGithub ./pelican.json // { + propagatedBuildInputs = old.propagatedBuildInputs ++ [ pyyaml ]; + }); +} diff --git a/overlays/pelican/pelican.json b/overlays/pelican/pelican.json new file mode 100644 index 00000000..d8f4425e --- /dev/null +++ b/overlays/pelican/pelican.json @@ -0,0 +1,15 @@ +{ + "tag": "4.0.1", + "meta": { + "name": "pelican", + "url": "https://github.com/getpelican/pelican", + "branch": "refs/tags/4.0.1" + }, + "github": { + "owner": "getpelican", + "repo": "pelican", + "rev": "24d6efa9fda4ad45649ddf88c1c596193d589bf8", + "sha256": "09fcwnnfln0cl5v0qpxzrllj27znrg6dbhaksxrl0192c3mbyjvl", + "fetchSubmodules": true + } +} diff --git a/overlays/profanity/default.nix b/overlays/profanity/default.nix new file mode 100644 index 00000000..33861f1b --- /dev/null +++ b/overlays/profanity/default.nix @@ -0,0 +1,9 @@ +self: super: { + profanity = (super.profanity.override { + notifySupport = true; + inherit (self) libnotify gpgme gdk_pixbuf; + python = self.python3; + }).overrideAttrs (old: rec { + configureFlags = old.configureFlags ++ [ "--enable-plugins" ]; + }); +} diff --git a/overlays/python-packages/buildbot.nix b/overlays/python-packages/buildbot.nix new file mode 100644 index 00000000..ccf2f6a7 --- /dev/null +++ b/overlays/python-packages/buildbot.nix @@ -0,0 +1,8 @@ +self: super: { + pythonOverrides = self.buildPythonOverrides (pyself: pysuper: { + buildbot-plugins = pysuper.buildbot-plugins // { + buildslist = self.python3PackagesPlus.buildbot-plugins.buildslist; + }; + buildbot-full = pysuper.buildbot-full.withPlugins [ pyself.buildbot-plugins.buildslist ]; + }) super.pythonOverrides; +} diff --git a/overlays/python-packages/default.nix b/overlays/python-packages/default.nix new file mode 100644 index 00000000..8a9949e6 --- /dev/null +++ b/overlays/python-packages/default.nix @@ -0,0 +1,28 @@ +let + fromMyPythonPackages = name: self: super: { + pythonOverrides = self.buildPythonOverrides (pyself: pysuper: { + "${name}" = self."${pyself.python.pname}PackagesPlus"."${name}"; + }) super.pythonOverrides; + }; +in +{ + # https://github.com/NixOS/nixpkgs/issues/44426 + # needs to come before all other in alphabetical order (or make use of + # lib.mkBefore) + __pythonOverlayFix = self: super: let + pyNames = [ "python3" "python36" "python37" ]; + overriddenPython = name: [ + { inherit name; value = super.${name}.override { packageOverrides = self.pythonOverrides; }; } + { name = "${name}Packages"; value = self.recurseIntoAttrs self.${name}.pkgs; } + ]; + overriddenPythons = builtins.concatLists (map overriddenPython pyNames); + in { + pythonOverrides = pyself: pysuper: {}; + buildPythonOverrides = newOverrides: currentOverrides: super.lib.composeExtensions newOverrides currentOverrides; + } // super.lib.attrsets.listToAttrs overriddenPythons; + + + apprise = fromMyPythonPackages "apprise"; + buildbot = import ./buildbot.nix; + wokkel = fromMyPythonPackages "wokkel"; +} diff --git a/overlays/sc-im/default.nix b/overlays/sc-im/default.nix new file mode 100644 index 00000000..f7286552 --- /dev/null +++ b/overlays/sc-im/default.nix @@ -0,0 +1,9 @@ +self: super: { + sc-im = super.sc-im.overrideAttrs (old: { + buildPhase = '' + cd src + sed -i Makefile -e 's@\...name.info@.local/state/$(name)info@' + cd .. + '' + old.buildPhase; + }); +} diff --git a/overlays/shaarli/default.nix b/overlays/shaarli/default.nix new file mode 100644 index 00000000..c2fb9cce --- /dev/null +++ b/overlays/shaarli/default.nix @@ -0,0 +1,10 @@ +self: super: { + shaarli = varDir: super.shaarli.overrideAttrs (old: { + patchPhase = ""; + patches = (old.patches or []) ++ [ ./shaarli_ldap.patch ]; + installPhase = (old.installPhase or "") + '' + cp .htaccess $out/ + ln -sf ${varDir}/{cache,pagecache,tmp,data} $out/ + ''; + }); +} diff --git a/overlays/shaarli/shaarli_ldap.patch b/overlays/shaarli/shaarli_ldap.patch new file mode 100644 index 00000000..9c7315a1 --- /dev/null +++ b/overlays/shaarli/shaarli_ldap.patch @@ -0,0 +1,420 @@ +commit bc82ebfd779b8641dadd6787f51639ea9105c3e8 +Author: Ismaël Bouya +Date: Sun Feb 3 20:58:18 2019 +0100 + + Add ldap connection + +diff --git a/.htaccess b/.htaccess +index 4c00427..5acd708 100644 +--- a/.htaccess ++++ b/.htaccess +@@ -6,10 +6,23 @@ RewriteEngine On + # Prevent accessing subdirectories not managed by SCM + RewriteRule ^(.git|doxygen|vendor) - [F] + ++RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ ++RewriteRule ^(.*) - [E=BASE:%1] ++ ++RewriteCond %{ENV:REDIRECT_BASE} (.+) ++RewriteRule .* - [E=BASE:%1] ++ + # Forward the "Authorization" HTTP header + RewriteCond %{HTTP:Authorization} ^(.*) + RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] + ++RewriteCond %{REQUEST_FILENAME} !-f ++RewriteCond %{REQUEST_FILENAME} !-d ++RewriteRule ^((?!api/)[^/]*)/?(.*)$ $2?%{QUERY_STRING} [E=USERSPACE:$1] ++ ++RewriteCond %{ENV:REDIRECT_USERSPACE} (.+) ++RewriteRule .* - [E=USERSPACE:%1] ++ + # REST API + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d +diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php +index 911873a..f21a1ef 100644 +--- a/application/ApplicationUtils.php ++++ b/application/ApplicationUtils.php +@@ -191,6 +191,9 @@ public static function checkResourcePermissions($conf) + $conf->get('resource.page_cache'), + $conf->get('resource.raintpl_tmp'), + ) as $path) { ++ if (! is_dir($path)) { ++ mkdir($path, 0755, true); ++ } + if (! is_readable(realpath($path))) { + $errors[] = '"'.$path.'" '. t('directory is not readable'); + } +diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php +index 32aaea4..99efc15 100644 +--- a/application/config/ConfigManager.php ++++ b/application/config/ConfigManager.php +@@ -21,6 +21,11 @@ class ConfigManager + + public static $DEFAULT_PLUGINS = array('qrcode'); + ++ /** ++ * @var string User space. ++ */ ++ protected $userSpace; ++ + /** + * @var string Config folder. + */ +@@ -41,12 +46,36 @@ class ConfigManager + * + * @param string $configFile Configuration file path without extension. + */ +- public function __construct($configFile = 'data/config') ++ public function __construct($configFile = null, $userSpace = null) + { +- $this->configFile = $configFile; ++ $this->userSpace = $this->findLDAPUser($userSpace); ++ if ($configFile !== null) { ++ $this->configFile = $configFile; ++ } else { ++ $this->configFile = ($this->userSpace === null) ? 'data/config' : 'data/' . $this->userSpace . '/config'; ++ } + $this->initialize(); + } + ++ public function findLDAPUser($login, $password = null) { ++ $connect = ldap_connect(getenv('SHAARLI_LDAP_HOST')); ++ ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ++ if (!$connect || !ldap_bind($connect, getenv('SHAARLI_LDAP_DN'), getenv('SHAARLI_LDAP_PASSWORD'))) { ++ return false; ++ } ++ ++ $search_query = str_replace('%login%', ldap_escape($login), getenv('SHAARLI_LDAP_FILTER')); ++ ++ $search = ldap_search($connect, getenv('SHAARLI_LDAP_BASE'), $search_query); ++ $info = ldap_get_entries($connect, $search); ++ ++ if (ldap_count_entries($connect, $search) == 1 && (is_null($password) || ldap_bind($connect, $info[0]["dn"], $password))) { ++ return $login; ++ } else { ++ return null; ++ } ++ } ++ + /** + * Reset the ConfigManager instance. + */ +@@ -269,6 +298,16 @@ public function getConfigFileExt() + return $this->configFile . $this->configIO->getExtension(); + } + ++ /** ++ * Get the current userspace. ++ * ++ * @return mixed User space. ++ */ ++ public function getUserSpace() ++ { ++ return $this->userSpace; ++ } ++ + /** + * Recursive function which find asked setting in the loaded config. + * +@@ -342,19 +381,31 @@ protected static function removeConfig($settings, &$conf) + */ + protected function setDefaultValues() + { +- $this->setEmpty('resource.data_dir', 'data'); +- $this->setEmpty('resource.config', 'data/config.php'); +- $this->setEmpty('resource.datastore', 'data/datastore.php'); +- $this->setEmpty('resource.ban_file', 'data/ipbans.php'); +- $this->setEmpty('resource.updates', 'data/updates.txt'); +- $this->setEmpty('resource.log', 'data/log.txt'); +- $this->setEmpty('resource.update_check', 'data/lastupdatecheck.txt'); +- $this->setEmpty('resource.history', 'data/history.php'); ++ if ($this->userSpace === null) { ++ $data = 'data'; ++ $tmp = 'tmp'; ++ $cache = 'cache'; ++ $pagecache = 'pagecache'; ++ } else { ++ $data = 'data/' . ($this->userSpace); ++ $tmp = 'tmp/' . ($this->userSpace); ++ $cache = 'cache/' . ($this->userSpace); ++ $pagecache = 'pagecache/' . ($this->userSpace); ++ } ++ ++ $this->setEmpty('resource.data_dir', $data); ++ $this->setEmpty('resource.config', $data . '/config.php'); ++ $this->setEmpty('resource.datastore', $data . '/datastore.php'); ++ $this->setEmpty('resource.ban_file', $data . '/ipbans.php'); ++ $this->setEmpty('resource.updates', $data . '/updates.txt'); ++ $this->setEmpty('resource.log', $data . '/log.txt'); ++ $this->setEmpty('resource.update_check', $data . '/lastupdatecheck.txt'); ++ $this->setEmpty('resource.history', $data . '/history.php'); + $this->setEmpty('resource.raintpl_tpl', 'tpl/'); + $this->setEmpty('resource.theme', 'default'); +- $this->setEmpty('resource.raintpl_tmp', 'tmp/'); +- $this->setEmpty('resource.thumbnails_cache', 'cache'); +- $this->setEmpty('resource.page_cache', 'pagecache'); ++ $this->setEmpty('resource.raintpl_tmp', $tmp); ++ $this->setEmpty('resource.thumbnails_cache', $cache); ++ $this->setEmpty('resource.page_cache', $pagecache); + + $this->setEmpty('security.ban_after', 4); + $this->setEmpty('security.ban_duration', 1800); +diff --git a/application/security/LoginManager.php b/application/security/LoginManager.php +index d6784d6..bdfaca7 100644 +--- a/application/security/LoginManager.php ++++ b/application/security/LoginManager.php +@@ -32,6 +32,9 @@ class LoginManager + /** @var string User sign-in token depending on remote IP and credentials */ + protected $staySignedInToken = ''; + ++ protected $lastErrorReason = ''; ++ protected $lastErrorIsBanishable = false; ++ + /** + * Constructor + * +@@ -83,7 +86,7 @@ public function getStaySignedInToken() + */ + public function checkLoginState($cookie, $clientIpId) + { +- if (! $this->configManager->exists('credentials.login')) { ++ if (! $this->configManager->exists('credentials.login') || (isset($_SESSION['username']) && $_SESSION['username'] && $this->configManager->get('credentials.login') !== $_SESSION['username'])) { + // Shaarli is not configured yet + $this->isLoggedIn = false; + return; +@@ -133,20 +136,40 @@ public function isLoggedIn() + */ + public function checkCredentials($remoteIp, $clientIpId, $login, $password) + { +- $hash = sha1($password . $login . $this->configManager->get('credentials.salt')); ++ $this->lastErrorIsBanishable = false; ++ ++ if ($this->configManager->getUserSpace() !== null && $this->configManager->getUserSpace() !== $login) { ++ logm($this->configManager->get('resource.log'), ++ $remoteIp, ++ 'Trying to login to wrong user space'); ++ $this->lastErrorReason = 'You’re trying to access the wrong account.'; ++ return false; ++ } + +- if ($login != $this->configManager->get('credentials.login') +- || $hash != $this->configManager->get('credentials.hash') +- ) { ++ logm($this->configManager->get('resource.log'), ++ $remoteIp, ++ 'Trying LDAP connection'); ++ $result = $this->configManager->findLDAPUser($login, $password); ++ if ($result === false) { + logm( + $this->configManager->get('resource.log'), + $remoteIp, +- 'Login failed for user ' . $login ++ 'Impossible to connect to LDAP' + ); ++ $this->lastErrorReason = 'Server error.'; ++ return false; ++ } else if (is_null($result)) { ++ logm( ++ $this->configManager->get('resource.log'), ++ $remoteIp, ++ 'Login failed for user ' . $login ++ ); ++ $this->lastErrorIsBanishable = true; ++ $this->lastErrorReason = 'Wrong login/password.'; + return false; + } + +- $this->sessionManager->storeLoginInfo($clientIpId); ++ $this->sessionManager->storeLoginInfo($clientIpId, $login); + logm( + $this->configManager->get('resource.log'), + $remoteIp, +@@ -187,6 +210,10 @@ protected function writeBanFile() + */ + public function handleFailedLogin($server) + { ++ if (!$this->lastErrorIsBanishable) { ++ return $this->lastErrorReason ?: 'Error during login.'; ++ }; ++ + $ip = $server['REMOTE_ADDR']; + $trusted = $this->configManager->get('security.trusted_proxies', []); + +@@ -215,6 +242,7 @@ public function handleFailedLogin($server) + ); + } + $this->writeBanFile(); ++ return $this->lastErrorReason ?: 'Error during login.'; + } + + /** +diff --git a/application/security/SessionManager.php b/application/security/SessionManager.php +index b8b8ab8..5eb4aac 100644 +--- a/application/security/SessionManager.php ++++ b/application/security/SessionManager.php +@@ -111,10 +111,10 @@ public static function checkId($sessionId) + * + * @param string $clientIpId Client IP address identifier + */ +- public function storeLoginInfo($clientIpId) ++ public function storeLoginInfo($clientIpId, $login = null) + { + $this->session['ip'] = $clientIpId; +- $this->session['username'] = $this->conf->get('credentials.login'); ++ $this->session['username'] = $login ?: $this->conf->get('credentials.login'); + $this->extendTimeValidityBy(self::$SHORT_TIMEOUT); + } + +diff --git a/index.php b/index.php +index 4b86a3e..85376e8 100644 +--- a/index.php ++++ b/index.php +@@ -121,7 +121,27 @@ + $_COOKIE['shaarli'] = session_id(); + } + +-$conf = new ConfigManager(); ++$folderBase = getenv("BASE"); ++ ++if (getenv("USERSPACE")) { ++ if (isset($_GET["do"]) && $_GET["do"] == "login") { ++ header("Location: $folderBase/?do=login"); ++ exit; ++ } ++ $userspace = preg_replace("/[^-_A-Za-z0-9]/", '', getenv("USERSPACE")); ++} else if (isset($_SESSION["username"]) && $_SESSION["username"]) { ++ header("Location: " . $folderBase . "/" . $_SESSION["username"] . "?"); ++ exit; ++} else if (!isset($_GET["do"]) || $_GET["do"] != "login") { ++ header("Location: $folderBase/?do=login"); ++ exit; ++} ++ ++if (isset($userspace)) { ++ $conf = new ConfigManager(null, $userspace); ++} else { ++ $conf = new ConfigManager(); ++} + $sessionManager = new SessionManager($_SESSION, $conf); + $loginManager = new LoginManager($GLOBALS, $conf, $sessionManager); + $loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']); +@@ -175,7 +195,7 @@ + } + + // Display the installation form if no existing config is found +- install($conf, $sessionManager, $loginManager); ++ install($conf, $sessionManager, $loginManager, $userspace); + } + + $loginManager->checkLoginState($_COOKIE, $clientIpId); +@@ -205,6 +225,7 @@ function isLoggedIn() + && $loginManager->checkCredentials($_SERVER['REMOTE_ADDR'], $clientIpId, $_POST['login'], $_POST['password']) + ) { + $loginManager->handleSuccessfulLogin($_SERVER); ++ $userspace = $_POST['login']; + + $cookiedir = ''; + if (dirname($_SERVER['SCRIPT_NAME']) != '/') { +@@ -241,25 +262,25 @@ function isLoggedIn() + $uri .= '&'.$param.'='.urlencode($_GET[$param]); + } + } +- header('Location: '. $uri); ++ header('Location: '. $userspace . $uri); + exit; + } + + if (isset($_GET['edit_link'])) { +- header('Location: ?edit_link='. escape($_GET['edit_link'])); ++ header('Location: ' . $userspace . '?edit_link='. escape($_GET['edit_link'])); + exit; + } + + if (isset($_POST['returnurl'])) { + // Prevent loops over login screen. + if (strpos($_POST['returnurl'], 'do=login') === false) { +- header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); ++ header('Location: ' . generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); + exit; + } + } +- header('Location: ?'); exit; ++ header('Location: '. $userspace . '?'); exit; + } else { +- $loginManager->handleFailedLogin($_SERVER); ++ $errorReason = $loginManager->handleFailedLogin($_SERVER); + $redir = '&username='. urlencode($_POST['login']); + if (isset($_GET['post'])) { + $redir .= '&post=' . urlencode($_GET['post']); +@@ -270,7 +291,7 @@ function isLoggedIn() + } + } + // Redirect to login screen. +- echo ''; ++ echo ''; + exit; + } + } +@@ -1719,7 +1740,7 @@ function buildLinkList($PAGE, $LINKSDB, $conf, $pluginManager, $loginManager) + * @param SessionManager $sessionManager SessionManager instance + * @param LoginManager $loginManager LoginManager instance + */ +-function install($conf, $sessionManager, $loginManager) { ++function install($conf, $sessionManager, $loginManager, $userspace) { + // On free.fr host, make sure the /sessions directory exists, otherwise login will not work. + if (endsWith($_SERVER['HTTP_HOST'],'.free.fr') && !is_dir($_SERVER['DOCUMENT_ROOT'].'/sessions')) mkdir($_SERVER['DOCUMENT_ROOT'].'/sessions',0705); + +@@ -1755,7 +1776,7 @@ function install($conf, $sessionManager, $loginManager) { + } + + +- if (!empty($_POST['setlogin']) && !empty($_POST['setpassword'])) ++ if (true) + { + $tz = 'UTC'; + if (!empty($_POST['continent']) && !empty($_POST['city']) +@@ -1764,15 +1785,15 @@ function install($conf, $sessionManager, $loginManager) { + $tz = $_POST['continent'].'/'.$_POST['city']; + } + $conf->set('general.timezone', $tz); +- $login = $_POST['setlogin']; +- $conf->set('credentials.login', $login); ++ $conf->set('credentials.login', $userspace); + $salt = sha1(uniqid('', true) .'_'. mt_rand()); + $conf->set('credentials.salt', $salt); +- $conf->set('credentials.hash', sha1($_POST['setpassword'] . $login . $salt)); ++ $hash = sha1(uniqid('', true) .'_'. mt_rand()); ++ $conf->set('credentials.hash', $hash); + if (!empty($_POST['title'])) { + $conf->set('general.title', escape($_POST['title'])); + } else { +- $conf->set('general.title', 'Shared links on '.escape(index_url($_SERVER))); ++ $conf->set('general.title', ucwords(str_replace("_", " ", $userspace))); + } + $conf->set('translation.language', escape($_POST['language'])); + $conf->set('updates.check_updates', !empty($_POST['updateCheck'])); +@@ -1841,7 +1862,12 @@ function install($conf, $sessionManager, $loginManager) { + $app = new \Slim\App($container); + + // REST API routes +-$app->group('/api/v1', function() { ++if (isset($userspace)) { ++ $mountpoint = '/' . $userspace . '/api/v1'; ++} else { ++ $mountpoint = '/api/v1'; ++} ++$app->group($mountpoint, function() { + $this->get('/info', '\Shaarli\Api\Controllers\Info:getInfo')->setName('getInfo'); + $this->get('/links', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks'); + $this->get('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink'); +@@ -1860,7 +1886,7 @@ function install($conf, $sessionManager, $loginManager) { + $response = $app->run(true); + // Hack to make Slim and Shaarli router work together: + // If a Slim route isn't found and NOT API call, we call renderPage(). +-if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { ++if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], $mountpoint) === false) { + // We use UTF-8 for proper international characters handling. + header('Content-Type: text/html; charset=utf-8'); + renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); diff --git a/overlays/slrn/default.nix b/overlays/slrn/default.nix new file mode 100644 index 00000000..6caef550 --- /dev/null +++ b/overlays/slrn/default.nix @@ -0,0 +1,11 @@ +self: super: { + slrn = super.slrn.overrideAttrs (old: rec { + version = "1.0.3a"; + name = "slrn-${version}"; + src = self.fetchurl { + url = "http://www.jedsoft.org/releases/slrn/slrn-${version}.tar.bz2"; + sha256 = "1b1d9iikr60w0vq86y9a0l4gjl0jxhdznlrdp3r405i097as9a1v"; + }; + configureFlags = old.configureFlags ++ [ "--with-slrnpull" ]; + }); +} diff --git a/overlays/taskwarrior/default.nix b/overlays/taskwarrior/default.nix new file mode 100644 index 00000000..64ea6900 --- /dev/null +++ b/overlays/taskwarrior/default.nix @@ -0,0 +1,13 @@ +self: super: +{ + taskwarrior = super.taskwarrior.overrideAttrs (old: { + postInstall = ''${old.postInstall} + mkdir -p "$out/share/vim/vimfiles/ftdetect" + mkdir -p "$out/share/vim/vimfiles/syntax" + ln -s "../../../../share/doc/task/scripts/vim/ftdetect/task.vim" "$out/share/vim/vimfiles/ftdetect/" + ln -s "../../../../share/doc/task/scripts/vim/syntax/taskrc.vim" "$out/share/vim/vimfiles/syntax/" + ln -s "../../../../share/doc/task/scripts/vim/syntax/taskdata.vim" "$out/share/vim/vimfiles/syntax/" + ln -s "../../../../share/doc/task/scripts/vim/syntax/taskedit.vim" "$out/share/vim/vimfiles/syntax/" + ''; + }); +} diff --git a/overlays/vit/default.nix b/overlays/vit/default.nix new file mode 100644 index 00000000..46242840 --- /dev/null +++ b/overlays/vit/default.nix @@ -0,0 +1,8 @@ +self: super: +{ + vit = (super.vit.override { inherit (self) taskwarrior; }).overrideAttrs (old: + self.mylibs.fetchedGithub ./vit.json // { + buildInputs = old.buildInputs ++ (with self.perlPackages; [ TryTiny TextCharWidth ]); + } + ); +} diff --git a/overlays/vit/vit.json b/overlays/vit/vit.json new file mode 100644 index 00000000..d062f685 --- /dev/null +++ b/overlays/vit/vit.json @@ -0,0 +1,15 @@ +{ + "tag": "dbacada-1.3", + "meta": { + "name": "vit", + "url": "https://github.com/scottkosty/vit", + "branch": "1.3" + }, + "github": { + "owner": "scottkosty", + "repo": "vit", + "rev": "dbacada5867b238fdf35dbf00a3ca0daf7703038", + "sha256": "1wlk62cv6dc0dqv8265xcx2l7ydzg40xf6l4qbrf6h5156ncc90l", + "fetchSubmodules": true + } +} diff --git a/overlays/weboob/default.nix b/overlays/weboob/default.nix new file mode 100644 index 00000000..d0a15a7d --- /dev/null +++ b/overlays/weboob/default.nix @@ -0,0 +1,15 @@ +self: super: { + weboob = (self.pythonPackages.weboob.overridePythonAttrs { + setupPyBuildFlags = [ "--no-qt" "--xdg" ]; + }).overrideAttrs (old: rec { + version = "1.5"; + src = self.fetchurl { + url = "https://git.weboob.org/weboob/weboob/-/archive/${version}/${old.pname}-${version}.tar.gz"; + sha256 = "0l6q5nm5g0zn6gmf809059kddrbds27wgygxsfkqja9blks5vq7z"; + }; + postInstall = ''${old.postInstall or ""} + mkdir -p $out/share/bash-completion/completions/ + cp tools/weboob_bash_completion $out/share/bash-completion/completions/weboob + ''; + }); +} diff --git a/overlays/weechat/default.nix b/overlays/weechat/default.nix new file mode 100644 index 00000000..17faa0ec --- /dev/null +++ b/overlays/weechat/default.nix @@ -0,0 +1,14 @@ +self: super: { + weechat = super.weechat.override { + configure = { availablePlugins, ... }: { + plugins = with self; with availablePlugins; [ + # Make sure websocket_client is not 0.55.0, it provokes + # regular crashes + (python.withPackages (ps: with ps; assert websocket_client.version == "0.54.0"; [websocket_client emoji])) + perl + ruby + ]; + }; + }; + +} diff --git a/overlays/ympd/default.nix b/overlays/ympd/default.nix new file mode 100644 index 00000000..dda17aa7 --- /dev/null +++ b/overlays/ympd/default.nix @@ -0,0 +1,5 @@ +self: super: { + ympd = super.ympd.overrideAttrs(old: self.mylibs.fetchedGithub ./ympd.json // { + patches = (old.patches or []) ++ [ ./ympd-password-env.patch ]; + }); +} diff --git a/overlays/ympd/ympd-password-env.patch b/overlays/ympd/ympd-password-env.patch new file mode 100644 index 00000000..2bbe1886 --- /dev/null +++ b/overlays/ympd/ympd-password-env.patch @@ -0,0 +1,23 @@ +diff --git a/src/ympd.c b/src/ympd.c +index 3aed7e6..b3b6fda 100644 +--- a/src/ympd.c ++++ b/src/ympd.c +@@ -71,6 +71,7 @@ int main(int argc, char **argv) + char *run_as_user = NULL; + char const *error_msg = NULL; + char *webport = "8080"; ++ const char *s; + + atexit(bye); + #ifdef WITH_DYNAMIC_ASSETS +@@ -92,6 +93,10 @@ int main(int argc, char **argv) + {0, 0, 0, 0 } + }; + ++ if ((s = getenv("MPD_PASSWORD")) != NULL) { ++ mpd.password = strdup(s); ++ } ++ + while((n = getopt_long(argc, argv, "h:p:w:u:vm:", + long_options, &option_index)) != -1) { + switch (n) { diff --git a/overlays/ympd/ympd.json b/overlays/ympd/ympd.json new file mode 100644 index 00000000..51f06d5d --- /dev/null +++ b/overlays/ympd/ympd.json @@ -0,0 +1,15 @@ +{ + "tag": "612f8fc-master", + "meta": { + "name": "ympd", + "url": "https://github.com/notandy/ympd", + "branch": "master" + }, + "github": { + "owner": "notandy", + "repo": "ympd", + "rev": "612f8fc0b2c47fc89d403e4a044541c6b2b238c8", + "sha256": "01hnj10zl103mrn82vyd42fvq7w5az3jf1qz18889zv67kn73ll9", + "fetchSubmodules": true + } +} diff --git a/pkgs/bitlbee-mastodon/default.nix b/pkgs/bitlbee-mastodon/default.nix new file mode 100644 index 00000000..0451068f --- /dev/null +++ b/pkgs/bitlbee-mastodon/default.nix @@ -0,0 +1,28 @@ +{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, bitlbee, glib, lib }: +stdenv.mkDerivation rec { + name = "bitlbee-mastodon-${version}"; + version = "v1.4.2"; + + src = fetchFromGitHub { + rev = version; + owner = "kensanata"; + repo = "bitlbee-mastodon"; + sha256 = "04rakgr1pfsg1vhfwlfbggbzw249j7dmk88xrsnf3n84c5ccdyas"; + }; + + nativeBuildInputs = [ autoreconfHook pkgconfig ]; + buildInputs = [ bitlbee glib ]; + + preConfigure = '' + export BITLBEE_PLUGINDIR=$out/lib/bitlbee + ./autogen.sh + ''; + + meta = { + description = "Bitlbee plugin for Mastodon"; + + homepage = https://github.com/kensanata/bitlbee-mastodon; + license = lib.licenses.gpl2Plus; + platforms = lib.platforms.linux; + }; +} diff --git a/pkgs/boinctui/default.nix b/pkgs/boinctui/default.nix new file mode 100644 index 00000000..d8b106a3 --- /dev/null +++ b/pkgs/boinctui/default.nix @@ -0,0 +1,20 @@ +{ stdenv, fetchurl, expat, openssl, autoconf, ncurses }: +stdenv.mkDerivation rec { + name = "boinctui-${version}"; + version = "2.5.0"; + src = fetchurl { + url = "http://sourceforge.net/projects/boinctui/files/boinctui_${version}.tar.gz"; + sha256 = "16zxp8r4z6pllacdacg681y56cg2phnn3pm5gwszbsi93cix2g8p"; + }; + + configureFlags = [ "--without-gnutls" ]; + preConfigure = '' + autoconf + ''; + + preBuild = '' + sed -i -e 's/"HOME"/"XDG_CONFIG_HOME"/' src/cfg.cpp + sed -i -e 's@\.boinctui\.cfg@boinctui/boinctui.cfg@' src/mainprog.cpp + ''; + buildInputs = [ expat openssl autoconf ncurses ]; +} diff --git a/pkgs/cnagios/cnagios.json b/pkgs/cnagios/cnagios.json new file mode 100644 index 00000000..4c1c385a --- /dev/null +++ b/pkgs/cnagios/cnagios.json @@ -0,0 +1,15 @@ +{ + "tag": "3bd27fb-master", + "meta": { + "name": "cnagios", + "url": "https://github.com/dannywarren/cnagios", + "branch": "master" + }, + "github": { + "owner": "dannywarren", + "repo": "cnagios", + "rev": "3bd27fb40e68f61ffd01bea6234b919a667b6fe4", + "sha256": "0iy5pmlcz6y3if72nav22xqxniiv1v8ywi0927m6s459hkw5n2rb", + "fetchSubmodules": true + } +} diff --git a/pkgs/cnagios/default.nix b/pkgs/cnagios/default.nix new file mode 100644 index 00000000..d5b52f3f --- /dev/null +++ b/pkgs/cnagios/default.nix @@ -0,0 +1,22 @@ +{ stdenv, mylibs, perl, ncurses }: +stdenv.mkDerivation (mylibs.fetchedGithub ./cnagios.json // { + configureFlags = [ + "--with-etc-dir=/etc/cnagios" + "--with-var-dir=/var/lib/naemon" + "--with-status-file=/var/lib/naemon/status.dat" + "--with-nagios-data=4" + ]; + + prePatch = '' + sed -i -e "s/-lcurses/-lncurses/" Makefile.in + ''; + installPhase = '' + install -dm755 $out/share/doc/cnagios + install -Dm644 cnagiosrc $out/share/doc/cnagios/ + install -Dm644 cnagios.help $out/share/doc/cnagios/ + install -Dm644 cnagios.pl $out/share/doc/cnagios/ + install -dm755 $out/bin + install -Dm755 cnagios $out/bin/ + ''; + buildInputs = [ perl ncurses ]; +}) diff --git a/pkgs/composer-env/default.nix b/pkgs/composer-env/default.nix new file mode 100644 index 00000000..416a61ca --- /dev/null +++ b/pkgs/composer-env/default.nix @@ -0,0 +1,280 @@ +# This file originates from composer2nix + +{ stdenv, writeTextFile, fetchurl, php, unzip }: + +let + composer = stdenv.mkDerivation { + name = "composer-1.8.0"; + src = fetchurl { + url = https://github.com/composer/composer/releases/download/1.8.0/composer.phar; + sha256 = "19pg9ip2mpyf5cyq34fld7qwl77mshqw3c4nif7sxmpnar6sh089"; + }; + buildInputs = [ php ]; + + # We must wrap the composer.phar because of the impure shebang. + # We cannot use patchShebangs because the executable verifies its own integrity and will detect that somebody has tampered with it. + + buildCommand = '' + # Copy phar file + mkdir -p $out/share/php + cp $src $out/share/php/composer.phar + chmod 755 $out/share/php/composer.phar + + # Create wrapper executable + mkdir -p $out/bin + cat > $out/bin/composer < + ''; + }; + + constructBin = writeTextFile { + name = "constructbin.php"; + executable = true; + text = '' + #! ${php}/bin/php + + ''; + }; + + bundleDependencies = dependencies: + stdenv.lib.concatMapStrings (dependencyName: + let + dependency = dependencies.${dependencyName}; + in + '' + ${if dependency.targetDir == "" then '' + vendorDir="$(dirname ${dependencyName})" + mkdir -p "$vendorDir" + ${if symlinkDependencies then + ''ln -s "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"'' + else + ''cp -a "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"'' + }${if dependency.needsModifyRights or false then "\n" + '' + chmod -R u+rwx "$vendorDir/$(basename "${dependencyName}")" + '' else ""} + '' else '' + namespaceDir="${dependencyName}/$(dirname "${dependency.targetDir}")" + mkdir -p "$namespaceDir" + ${if symlinkDependencies then + ''ln -s "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"'' + else + ''cp -a "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"'' + }${if dependency.needsModifyRights or false then "\n" + '' + chmod -R u+rwx "$namespaceDir/$(basename "${dependency.targetDir}")" + '' else ""} + ''} + '') (builtins.attrNames dependencies); + + extraArgs = removeAttrs args [ "name" "packages" "devPackages" "buildInputs" ]; + in + stdenv.mkDerivation ({ + name = "composer-${name}"; + buildInputs = [ php composer ] ++ buildInputs; + + inherit unpackPhase buildPhase; + + installPhase = '' + ${if executable then '' + mkdir -p $out/share/php + cp -a $src $out/share/php/$name + chmod -R u+w $out/share/php/$name + cd $out/share/php/$name + '' else '' + cp -a $src $out + chmod -R u+w $out + cd $out + ''} + + # Execute pre install hook + runHook preInstall + + # Remove unwanted files + rm -f *.nix + + export HOME=$TMPDIR + + ${if doRemoveVendor then '' + # Remove the provided vendor folder if it exists + rm -Rf vendor + '' else ""} + # If there is no composer.lock file, compose a dummy file. + # Otherwise, composer attempts to download the package.json file from + # the registry which we do not want. + if [ ! -f composer.lock ] + then + cat > composer.lock < vendor/composer/installed.json + + # Copy or symlink the provided dependencies + cd vendor + ${bundleDependencies packages} + ${stdenv.lib.optionalString (!noDev) (bundleDependencies devPackages)} + cd .. + + # Reconstruct autoload scripts + # We use the optimize feature because Nix packages cannot change after they have been built + # Using the dynamic loader for a Nix package is useless since there is nothing to dynamically reload. + composer dump-autoload --optimize ${stdenv.lib.optionalString noDev "--no-dev"} + + # Run the install step as a validation to confirm that everything works out as expected + composer install --optimize-autoloader ${stdenv.lib.optionalString noDev "--no-dev"} + + ${stdenv.lib.optionalString executable '' + # Reconstruct the bin/ folder if we deploy an executable project + ${constructBin} composer.json + ln -s $(pwd)/vendor/bin $out/bin + ''} + + ${stdenv.lib.optionalString (!symlinkDependencies) '' + # Patch the shebangs if possible + if [ -d $(pwd)/vendor/bin ] + then + # Look for all executables in bin/ + for i in $(pwd)/vendor/bin/* + do + # Look for their location + realFile=$(readlink -f "$i") + + # Restore write permissions + chmod u+wx "$(dirname "$realFile")" + chmod u+w "$realFile" + + # Patch shebang + sed -e "s|#!/usr/bin/php|#!${php}/bin/php|" \ + -e "s|#!/usr/bin/env php|#!${php}/bin/php|" \ + "$realFile" > tmp + mv tmp "$realFile" + chmod u+x "$realFile" + done + fi + ''} + + if [ "$removeComposerArtifacts" = "1" ] + then + # Remove composer stuff + rm -f composer.json composer.lock + fi + + # Execute post install hook + runHook postInstall + ''; + } // extraArgs); +in +{ + composer = stdenv.lib.makeOverridable composer; + buildZipPackage = stdenv.lib.makeOverridable buildZipPackage; + buildPackage = stdenv.lib.makeOverridable buildPackage; +} diff --git a/pkgs/crypto/cardano/daedalus.json b/pkgs/crypto/cardano/daedalus.json new file mode 100644 index 00000000..5bb72f49 --- /dev/null +++ b/pkgs/crypto/cardano/daedalus.json @@ -0,0 +1,15 @@ +{ + "tag": "0.12.1", + "meta": { + "name": "daedalus", + "url": "https://github.com/input-output-hk/daedalus", + "branch": "refs/tags/0.12.1" + }, + "github": { + "owner": "input-output-hk", + "repo": "daedalus", + "rev": "1276852b9a766d9fd4cda10561254f1a8ddd33ed", + "sha256": "0jf6ibwf0r4587g1ixq6zvi40kzwy137jgay5136yfbg15xw14k2", + "fetchSubmodules": true + } +} diff --git a/pkgs/crypto/cardano/default.nix b/pkgs/crypto/cardano/default.nix new file mode 100644 index 00000000..879fddb0 --- /dev/null +++ b/pkgs/crypto/cardano/default.nix @@ -0,0 +1,29 @@ +{ stdenv, mylibs }: +let + daedalusSrc = (mylibs.fetchedGithub ./daedalus.json).src; + daedalusOrig = (import daedalusSrc {}).daedalus; + cfg = stdenv.mkDerivation rec { + name = "launcher-config-custom"; + buildInputs = [ daedalusSrc daedalusOrig.cfg ]; + src = daedalusOrig.cfg; + installPhase = '' + cp -a $src $out + chmod -R u+w $out + cd $out/etc + sed -e "/^walletPath/d" -e "/^walletArgs/d" launcher-config.yaml > launcher-config-server-only.yaml + ''; + }; +in +stdenv.mkDerivation rec { + name = "daedalus-custom"; + src = daedalusOrig; + buildInputs = [ cfg daedalusOrig ]; + installPhase = '' + cp -a $src $out + chmod -R u+w $out + cd $out/bin + sed -i -e "s@${builtins.storeDir}/[0-9a-z]*-daedalus-config@${cfg}/etc@" daedalus + sed -e "s@${cfg}/etc/launcher-config.yaml@${cfg}/etc/launcher-config-server-only.yaml@" daedalus > daedalus-server-only + chmod a+x daedalus-server-only + ''; +} diff --git a/pkgs/crypto/iota-cli-app/default.nix b/pkgs/crypto/iota-cli-app/default.nix new file mode 100644 index 00000000..1a9d3ed7 --- /dev/null +++ b/pkgs/crypto/iota-cli-app/default.nix @@ -0,0 +1,20 @@ +{ stdenv, mylibs, fetchurl, fetchgit, callPackage, nodePackages, nodejs-8_x }: +let + nodeEnv = callPackage mylibs.nodeEnv { nodejs = nodejs-8_x; }; + # built using node2nix -8 -l package-lock.json + # and changing "./." to "src" + packageEnv = import ./node-packages.nix { + src = stdenv.mkDerivation (mylibs.fetchedGithub ./iota-cli-app.json // { + phases = "installPhase"; + installPhase = '' + cp -a $src $out + chmod u+w -R $out + cd $out + sed -i -e "s@host: 'http://localhost',@host: 'https://iri.trytes.eu',@" index.js + sed -i -e "s@port: 14265@port: 443@" index.js + ''; + }); + inherit fetchurl fetchgit nodeEnv; + }; +in +packageEnv.package diff --git a/pkgs/crypto/iota-cli-app/iota-cli-app.json b/pkgs/crypto/iota-cli-app/iota-cli-app.json new file mode 100644 index 00000000..6b47dec1 --- /dev/null +++ b/pkgs/crypto/iota-cli-app/iota-cli-app.json @@ -0,0 +1,15 @@ +{ + "tag": "d7e2e08-master", + "meta": { + "name": "iota-cli-app", + "url": "https://github.com/iotaledger/cli-app", + "branch": "master" + }, + "github": { + "owner": "iotaledger", + "repo": "cli-app", + "rev": "d7e2e0856ae6bd34890fefb4245c07cd467a5032", + "sha256": "1n9kczsxdgjv8282nj2grlijvxipiskx0ndn169vz6v1l1hrwc8b", + "fetchSubmodules": true + } +} diff --git a/pkgs/crypto/iota-cli-app/node-packages.nix b/pkgs/crypto/iota-cli-app/node-packages.nix new file mode 100644 index 00000000..d5c61d6d --- /dev/null +++ b/pkgs/crypto/iota-cli-app/node-packages.nix @@ -0,0 +1,1814 @@ +# This file has been generated by node2nix 1.6.0. Do not edit! + +{src, nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}: + +let + sources = { + "acorn-3.3.0" = { + name = "acorn"; + packageName = "acorn"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"; + sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; + }; + }; + "acorn-5.2.1" = { + name = "acorn"; + packageName = "acorn"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz"; + sha512 = "jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="; + }; + }; + "acorn-jsx-3.0.1" = { + name = "acorn-jsx"; + packageName = "acorn-jsx"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz"; + sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b"; + }; + }; + "ajv-4.11.8" = { + name = "ajv"; + packageName = "ajv"; + version = "4.11.8"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz"; + sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; + }; + }; + "ajv-keywords-1.5.1" = { + name = "ajv-keywords"; + packageName = "ajv-keywords"; + version = "1.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz"; + sha1 = "314dd0a4b3368fad3dfcdc54ede6171b886daf3c"; + }; + }; + "ansi-escapes-1.4.0" = { + name = "ansi-escapes"; + packageName = "ansi-escapes"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz"; + sha1 = "d3a8a83b319aa67793662b13e761c7911422306e"; + }; + }; + "ansi-regex-2.1.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + }; + "ansi-regex-3.0.0" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + }; + "ansi-styles-2.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + }; + "ansi-styles-3.2.0" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz"; + sha512 = "NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug=="; + }; + }; + "argparse-1.0.9" = { + name = "argparse"; + packageName = "argparse"; + version = "1.0.9"; + src = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz"; + sha1 = "73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"; + }; + }; + "array-union-1.0.2" = { + name = "array-union"; + packageName = "array-union"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + }; + "array-uniq-1.0.3" = { + name = "array-uniq"; + packageName = "array-uniq"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + }; + "arrify-1.0.1" = { + name = "arrify"; + packageName = "arrify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"; + sha1 = "898508da2226f380df904728456849c1501a4b0d"; + }; + }; + "async-2.6.0" = { + name = "async"; + packageName = "async"; + version = "2.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/async/-/async-2.6.0.tgz"; + sha512 = "xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw=="; + }; + }; + "babel-code-frame-6.26.0" = { + name = "babel-code-frame"; + packageName = "babel-code-frame"; + version = "6.26.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; + sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; + }; + }; + "babel-polyfill-6.26.0" = { + name = "babel-polyfill"; + packageName = "babel-polyfill"; + version = "6.26.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz"; + sha1 = "379937abc67d7895970adc621f284cd966cf2153"; + }; + }; + "babel-runtime-6.26.0" = { + name = "babel-runtime"; + packageName = "babel-runtime"; + version = "6.26.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"; + sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; + }; + }; + "balanced-match-1.0.0" = { + name = "balanced-match"; + packageName = "balanced-match"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + }; + "bignumber.js-4.1.0" = { + name = "bignumber.js"; + packageName = "bignumber.js"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz"; + sha512 = "eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA=="; + }; + }; + "bluebird-3.5.1" = { + name = "bluebird"; + packageName = "bluebird"; + version = "3.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz"; + sha512 = "MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="; + }; + }; + "brace-expansion-1.1.8" = { + name = "brace-expansion"; + packageName = "brace-expansion"; + version = "1.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"; + sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292"; + }; + }; + "caller-path-0.1.0" = { + name = "caller-path"; + packageName = "caller-path"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz"; + sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f"; + }; + }; + "callsites-0.2.0" = { + name = "callsites"; + packageName = "callsites"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz"; + sha1 = "afab96262910a7f33c19a5775825c69f34e350ca"; + }; + }; + "chalk-1.1.3" = { + name = "chalk"; + packageName = "chalk"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + }; + "chalk-2.3.0" = { + name = "chalk"; + packageName = "chalk"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz"; + sha512 = "Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q=="; + }; + }; + "circular-json-0.3.3" = { + name = "circular-json"; + packageName = "circular-json"; + version = "0.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz"; + sha512 = "UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A=="; + }; + }; + "cli-cursor-1.0.2" = { + name = "cli-cursor"; + packageName = "cli-cursor"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz"; + sha1 = "64da3f7d56a54412e59794bd62dc35295e8f2987"; + }; + }; + "cli-width-1.1.1" = { + name = "cli-width"; + packageName = "cli-width"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz"; + sha1 = "a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d"; + }; + }; + "cli-width-2.2.0" = { + name = "cli-width"; + packageName = "cli-width"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz"; + sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639"; + }; + }; + "co-4.6.0" = { + name = "co"; + packageName = "co"; + version = "4.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz"; + sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; + }; + }; + "code-point-at-1.1.0" = { + name = "code-point-at"; + packageName = "code-point-at"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + }; + "color-convert-1.9.1" = { + name = "color-convert"; + packageName = "color-convert"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz"; + sha512 = "mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ=="; + }; + }; + "color-name-1.1.3" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + }; + "colors-1.1.2" = { + name = "colors"; + packageName = "colors"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"; + sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; + }; + }; + "concat-map-0.0.1" = { + name = "concat-map"; + packageName = "concat-map"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + }; + "concat-stream-1.6.0" = { + name = "concat-stream"; + packageName = "concat-stream"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz"; + sha1 = "0aac662fd52be78964d5532f694784e70110acf7"; + }; + }; + "core-js-2.5.3" = { + name = "core-js"; + packageName = "core-js"; + version = "2.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz"; + sha1 = "8acc38345824f16d8365b7c9b4259168e8ed603e"; + }; + }; + "core-util-is-1.0.2" = { + name = "core-util-is"; + packageName = "core-util-is"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + }; + "crypto-js-3.1.9-1" = { + name = "crypto-js"; + packageName = "crypto-js"; + version = "3.1.9-1"; + src = fetchurl { + url = "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz"; + sha1 = "fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8"; + }; + }; + "d-1.0.0" = { + name = "d"; + packageName = "d"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/d/-/d-1.0.0.tgz"; + sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; + }; + }; + "debug-2.6.9" = { + name = "debug"; + packageName = "debug"; + version = "2.6.9"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"; + sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="; + }; + }; + "deep-is-0.1.3" = { + name = "deep-is"; + packageName = "deep-is"; + version = "0.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + }; + "del-2.2.2" = { + name = "del"; + packageName = "del"; + version = "2.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz"; + sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8"; + }; + }; + "doctrine-2.0.2" = { + name = "doctrine"; + packageName = "doctrine"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz"; + sha512 = "y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A=="; + }; + }; + "encoding-0.1.12" = { + name = "encoding"; + packageName = "encoding"; + version = "0.1.12"; + src = fetchurl { + url = "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz"; + sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb"; + }; + }; + "es5-ext-0.10.37" = { + name = "es5-ext"; + packageName = "es5-ext"; + version = "0.10.37"; + src = fetchurl { + url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz"; + sha1 = "0ee741d148b80069ba27d020393756af257defc3"; + }; + }; + "es6-iterator-2.0.3" = { + name = "es6-iterator"; + packageName = "es6-iterator"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz"; + sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; + }; + }; + "es6-map-0.1.5" = { + name = "es6-map"; + packageName = "es6-map"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz"; + sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; + }; + }; + "es6-set-0.1.5" = { + name = "es6-set"; + packageName = "es6-set"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz"; + sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; + }; + }; + "es6-symbol-3.1.1" = { + name = "es6-symbol"; + packageName = "es6-symbol"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz"; + sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; + }; + }; + "es6-weak-map-2.0.2" = { + name = "es6-weak-map"; + packageName = "es6-weak-map"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz"; + sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"; + }; + }; + "escape-string-regexp-1.0.5" = { + name = "escape-string-regexp"; + packageName = "escape-string-regexp"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + }; + "escope-3.6.0" = { + name = "escope"; + packageName = "escope"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz"; + sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; + }; + }; + "eslint-3.19.0" = { + name = "eslint"; + packageName = "eslint"; + version = "3.19.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz"; + sha1 = "c8fc6201c7f40dd08941b87c085767386a679acc"; + }; + }; + "espree-3.5.2" = { + name = "espree"; + packageName = "espree"; + version = "3.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz"; + sha512 = "sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ=="; + }; + }; + "esprima-4.0.0" = { + name = "esprima"; + packageName = "esprima"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz"; + sha512 = "oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="; + }; + }; + "esquery-1.0.0" = { + name = "esquery"; + packageName = "esquery"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz"; + sha1 = "cfba8b57d7fba93f17298a8a006a04cda13d80fa"; + }; + }; + "esrecurse-4.2.0" = { + name = "esrecurse"; + packageName = "esrecurse"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz"; + sha1 = "fa9568d98d3823f9a41d91e902dcab9ea6e5b163"; + }; + }; + "estraverse-4.2.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz"; + sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; + }; + }; + "esutils-2.0.2" = { + name = "esutils"; + packageName = "esutils"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz"; + sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; + }; + }; + "event-emitter-0.3.5" = { + name = "event-emitter"; + packageName = "event-emitter"; + version = "0.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz"; + sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; + }; + }; + "exit-hook-1.1.1" = { + name = "exit-hook"; + packageName = "exit-hook"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz"; + sha1 = "f05ca233b48c05d54fff07765df8507e95c02ff8"; + }; + }; + "fast-levenshtein-2.0.6" = { + name = "fast-levenshtein"; + packageName = "fast-levenshtein"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + }; + "figures-1.7.0" = { + name = "figures"; + packageName = "figures"; + version = "1.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz"; + sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"; + }; + }; + "file-entry-cache-2.0.0" = { + name = "file-entry-cache"; + packageName = "file-entry-cache"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz"; + sha1 = "c392990c3e684783d838b8c84a45d8a048458361"; + }; + }; + "flat-cache-1.3.0" = { + name = "flat-cache"; + packageName = "flat-cache"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz"; + sha1 = "d3030b32b38154f4e3b7e9c709f490f7ef97c481"; + }; + }; + "fs.realpath-1.0.0" = { + name = "fs.realpath"; + packageName = "fs.realpath"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + }; + "generate-function-2.0.0" = { + name = "generate-function"; + packageName = "generate-function"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz"; + sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74"; + }; + }; + "generate-object-property-1.2.0" = { + name = "generate-object-property"; + packageName = "generate-object-property"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz"; + sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0"; + }; + }; + "glob-7.1.2" = { + name = "glob"; + packageName = "glob"; + version = "7.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"; + sha512 = "MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="; + }; + }; + "globals-9.18.0" = { + name = "globals"; + packageName = "globals"; + version = "9.18.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz"; + sha512 = "S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="; + }; + }; + "globby-5.0.0" = { + name = "globby"; + packageName = "globby"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz"; + sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"; + }; + }; + "graceful-fs-4.1.11" = { + name = "graceful-fs"; + packageName = "graceful-fs"; + version = "4.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz"; + sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"; + }; + }; + "has-ansi-2.0.0" = { + name = "has-ansi"; + packageName = "has-ansi"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + }; + "has-flag-2.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz"; + sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51"; + }; + }; + "iconv-lite-0.4.19" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.19"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz"; + sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="; + }; + }; + "ignore-3.3.7" = { + name = "ignore"; + packageName = "ignore"; + version = "3.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz"; + sha512 = "YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="; + }; + }; + "imurmurhash-0.1.4" = { + name = "imurmurhash"; + packageName = "imurmurhash"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + }; + "in-publish-2.0.0" = { + name = "in-publish"; + packageName = "in-publish"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz"; + sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51"; + }; + }; + "inflight-1.0.6" = { + name = "inflight"; + packageName = "inflight"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + }; + "inherits-2.0.3" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + }; + "inquirer-0.11.0" = { + name = "inquirer"; + packageName = "inquirer"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/inquirer/-/inquirer-0.11.0.tgz"; + sha1 = "7448bfa924092af311d47173bbab990cae2bb027"; + }; + }; + "inquirer-0.12.0" = { + name = "inquirer"; + packageName = "inquirer"; + version = "0.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz"; + sha1 = "1ef2bfd63504df0bc75785fff8c2c41df12f077e"; + }; + }; + "install-0.10.4" = { + name = "install"; + packageName = "install"; + version = "0.10.4"; + src = fetchurl { + url = "https://registry.npmjs.org/install/-/install-0.10.4.tgz"; + sha512 = "+IRyOastuPmLVx9zlVXJoKErSqz1Ma5at9A7S8yfsj3W+Kg95faPoh3bPDtMrZ/grz4PRmXzrswmlzfLlYyLOw=="; + }; + }; + "interpret-1.1.0" = { + name = "interpret"; + packageName = "interpret"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz"; + sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"; + }; + }; + "iota.lib.js-0.4.6" = { + name = "iota.lib.js"; + packageName = "iota.lib.js"; + version = "0.4.6"; + src = fetchurl { + url = "https://registry.npmjs.org/iota.lib.js/-/iota.lib.js-0.4.6.tgz"; + sha1 = "47afdc03d57c7f55d2f58f068db492df6bc6e9bb"; + }; + }; + "is-fullwidth-code-point-1.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + }; + "is-fullwidth-code-point-2.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + }; + "is-my-json-valid-2.16.1" = { + name = "is-my-json-valid"; + packageName = "is-my-json-valid"; + version = "2.16.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz"; + sha512 = "ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ=="; + }; + }; + "is-path-cwd-1.0.0" = { + name = "is-path-cwd"; + packageName = "is-path-cwd"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; + sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; + }; + }; + "is-path-in-cwd-1.0.0" = { + name = "is-path-in-cwd"; + packageName = "is-path-in-cwd"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz"; + sha1 = "6477582b8214d602346094567003be8a9eac04dc"; + }; + }; + "is-path-inside-1.0.1" = { + name = "is-path-inside"; + packageName = "is-path-inside"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz"; + sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; + }; + }; + "is-property-1.0.2" = { + name = "is-property"; + packageName = "is-property"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"; + sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84"; + }; + }; + "is-resolvable-1.0.1" = { + name = "is-resolvable"; + packageName = "is-resolvable"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz"; + sha512 = "y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g=="; + }; + }; + "is-stream-1.1.0" = { + name = "is-stream"; + packageName = "is-stream"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz"; + sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; + }; + }; + "isarray-1.0.0" = { + name = "isarray"; + packageName = "isarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + }; + "js-tokens-3.0.2" = { + name = "js-tokens"; + packageName = "js-tokens"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz"; + sha1 = "9866df395102130e38f7f996bceb65443209c25b"; + }; + }; + "js-yaml-3.10.0" = { + name = "js-yaml"; + packageName = "js-yaml"; + version = "3.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz"; + sha512 = "O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA=="; + }; + }; + "json-stable-stringify-1.0.1" = { + name = "json-stable-stringify"; + packageName = "json-stable-stringify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; + sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; + }; + }; + "json5-0.5.1" = { + name = "json5"; + packageName = "json5"; + version = "0.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz"; + sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; + }; + }; + "jsonify-0.0.0" = { + name = "jsonify"; + packageName = "jsonify"; + version = "0.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"; + sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; + }; + }; + "jsonpointer-4.0.1" = { + name = "jsonpointer"; + packageName = "jsonpointer"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz"; + sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"; + }; + }; + "left-pad-1.2.0" = { + name = "left-pad"; + packageName = "left-pad"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz"; + sha1 = "d30a73c6b8201d8f7d8e7956ba9616087a68e0ee"; + }; + }; + "levn-0.3.0" = { + name = "levn"; + packageName = "levn"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + }; + "lodash-3.10.1" = { + name = "lodash"; + packageName = "lodash"; + version = "3.10.1"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"; + sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; + }; + }; + "lodash-4.17.4" = { + name = "lodash"; + packageName = "lodash"; + version = "4.17.4"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz"; + sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae"; + }; + }; + "log-update-1.0.2" = { + name = "log-update"; + packageName = "log-update"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz"; + sha1 = "19929f64c4093d2d2e7075a1dad8af59c296b8d1"; + }; + }; + "minimatch-3.0.4" = { + name = "minimatch"; + packageName = "minimatch"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"; + sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; + }; + }; + "minimist-0.0.8" = { + name = "minimist"; + packageName = "minimist"; + version = "0.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + }; + "minimist-1.2.0" = { + name = "minimist"; + packageName = "minimist"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"; + sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; + }; + }; + "mkdirp-0.5.1" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "0.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + }; + "moment-2.20.1" = { + name = "moment"; + packageName = "moment"; + version = "2.20.1"; + src = fetchurl { + url = "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz"; + sha512 = "Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg=="; + }; + }; + "ms-2.0.0" = { + name = "ms"; + packageName = "ms"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + }; + "mute-stream-0.0.5" = { + name = "mute-stream"; + packageName = "mute-stream"; + version = "0.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"; + sha1 = "8fbfabb0a98a253d3184331f9e8deb7372fac6c0"; + }; + }; + "natural-compare-1.4.0" = { + name = "natural-compare"; + packageName = "natural-compare"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"; + sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; + }; + }; + "node-fetch-1.7.3" = { + name = "node-fetch"; + packageName = "node-fetch"; + version = "1.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz"; + sha512 = "NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ=="; + }; + }; + "node-localstorage-0.6.0" = { + name = "node-localstorage"; + packageName = "node-localstorage"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz"; + sha1 = "45a0601c6932dfde6644a23361f1be173c75d3af"; + }; + }; + "number-is-nan-1.0.1" = { + name = "number-is-nan"; + packageName = "number-is-nan"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + }; + "object-assign-4.1.1" = { + name = "object-assign"; + packageName = "object-assign"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + }; + "once-1.4.0" = { + name = "once"; + packageName = "once"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + }; + "onetime-1.1.0" = { + name = "onetime"; + packageName = "onetime"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz"; + sha1 = "a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"; + }; + }; + "optionator-0.8.2" = { + name = "optionator"; + packageName = "optionator"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz"; + sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64"; + }; + }; + "os-homedir-1.0.2" = { + name = "os-homedir"; + packageName = "os-homedir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + }; + "path-is-absolute-1.0.1" = { + name = "path-is-absolute"; + packageName = "path-is-absolute"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + }; + "path-is-inside-1.0.2" = { + name = "path-is-inside"; + packageName = "path-is-inside"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + }; + "path-parse-1.0.5" = { + name = "path-parse"; + packageName = "path-parse"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz"; + sha1 = "3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"; + }; + }; + "pify-2.3.0" = { + name = "pify"; + packageName = "pify"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + }; + "pinkie-2.0.4" = { + name = "pinkie"; + packageName = "pinkie"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + }; + "pinkie-promise-2.0.1" = { + name = "pinkie-promise"; + packageName = "pinkie-promise"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + }; + "pluralize-1.2.1" = { + name = "pluralize"; + packageName = "pluralize"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz"; + sha1 = "d1a21483fd22bb41e58a12fa3421823140897c45"; + }; + }; + "prelude-ls-1.1.2" = { + name = "prelude-ls"; + packageName = "prelude-ls"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + }; + "prettyjson-1.2.1" = { + name = "prettyjson"; + packageName = "prettyjson"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz"; + sha1 = "fcffab41d19cab4dfae5e575e64246619b12d289"; + }; + }; + "process-nextick-args-1.0.7" = { + name = "process-nextick-args"; + packageName = "process-nextick-args"; + version = "1.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz"; + sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3"; + }; + }; + "progress-1.1.8" = { + name = "progress"; + packageName = "progress"; + version = "1.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz"; + sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"; + }; + }; + "readable-stream-2.3.3" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz"; + sha512 = "m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ=="; + }; + }; + "readline2-1.0.1" = { + name = "readline2"; + packageName = "readline2"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz"; + sha1 = "41059608ffc154757b715d9989d199ffbf372e35"; + }; + }; + "rechoir-0.6.2" = { + name = "rechoir"; + packageName = "rechoir"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz"; + sha1 = "85204b54dba82d5742e28c96756ef43af50e3384"; + }; + }; + "regenerator-runtime-0.10.5" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.10.5"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz"; + sha1 = "336c3efc1220adcedda2c9fab67b5a7955a33658"; + }; + }; + "regenerator-runtime-0.11.1" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; + sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="; + }; + }; + "require-uncached-1.0.3" = { + name = "require-uncached"; + packageName = "require-uncached"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz"; + sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3"; + }; + }; + "resolve-1.5.0" = { + name = "resolve"; + packageName = "resolve"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz"; + sha512 = "hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw=="; + }; + }; + "resolve-from-1.0.1" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz"; + sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"; + }; + }; + "restore-cursor-1.0.1" = { + name = "restore-cursor"; + packageName = "restore-cursor"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz"; + sha1 = "34661f46886327fed2991479152252df92daa541"; + }; + }; + "rimraf-2.6.2" = { + name = "rimraf"; + packageName = "rimraf"; + version = "2.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz"; + sha512 = "lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w=="; + }; + }; + "run-async-0.1.0" = { + name = "run-async"; + packageName = "run-async"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz"; + sha1 = "c8ad4a5e110661e402a7d21b530e009f25f8e389"; + }; + }; + "rx-lite-3.1.2" = { + name = "rx-lite"; + packageName = "rx-lite"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz"; + sha1 = "19ce502ca572665f3b647b10939f97fd1615f102"; + }; + }; + "safe-buffer-5.1.1" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"; + sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="; + }; + }; + "shelljs-0.7.8" = { + name = "shelljs"; + packageName = "shelljs"; + version = "0.7.8"; + src = fetchurl { + url = "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz"; + sha1 = "decbcf874b0d1e5fb72e14b164a9683048e9acb3"; + }; + }; + "slice-ansi-0.0.4" = { + name = "slice-ansi"; + packageName = "slice-ansi"; + version = "0.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz"; + sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35"; + }; + }; + "sprintf-js-1.0.3" = { + name = "sprintf-js"; + packageName = "sprintf-js"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + }; + "string-width-1.0.2" = { + name = "string-width"; + packageName = "string-width"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + }; + "string-width-2.1.1" = { + name = "string-width"; + packageName = "string-width"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"; + sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="; + }; + }; + "string_decoder-1.0.3" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz"; + sha512 = "4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ=="; + }; + }; + "strip-ansi-3.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + }; + "strip-ansi-4.0.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + }; + "strip-bom-3.0.0" = { + name = "strip-bom"; + packageName = "strip-bom"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"; + sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"; + }; + }; + "strip-json-comments-2.0.1" = { + name = "strip-json-comments"; + packageName = "strip-json-comments"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + }; + "supports-color-2.0.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + }; + "supports-color-4.5.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "4.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz"; + sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b"; + }; + }; + "table-3.8.3" = { + name = "table"; + packageName = "table"; + version = "3.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/table/-/table-3.8.3.tgz"; + sha1 = "2bbc542f0fda9861a755d3947fefd8b3f513855f"; + }; + }; + "text-table-0.2.0" = { + name = "text-table"; + packageName = "text-table"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + }; + "through-2.3.8" = { + name = "through"; + packageName = "through"; + version = "2.3.8"; + src = fetchurl { + url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + }; + "type-check-0.3.2" = { + name = "type-check"; + packageName = "type-check"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + }; + "typedarray-0.0.6" = { + name = "typedarray"; + packageName = "typedarray"; + version = "0.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + }; + "user-home-2.0.0" = { + name = "user-home"; + packageName = "user-home"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz"; + sha1 = "9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"; + }; + }; + "util-deprecate-1.0.2" = { + name = "util-deprecate"; + packageName = "util-deprecate"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + }; + "vorpal-1.12.0" = { + name = "vorpal"; + packageName = "vorpal"; + version = "1.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz"; + sha1 = "4be7b2a4e48f8fcfc9cf3648c419d311c522159d"; + }; + }; + "wordwrap-1.0.0" = { + name = "wordwrap"; + packageName = "wordwrap"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"; + sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; + }; + }; + "wrap-ansi-2.1.0" = { + name = "wrap-ansi"; + packageName = "wrap-ansi"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; + sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; + }; + }; + "wrappy-1.0.2" = { + name = "wrappy"; + packageName = "wrappy"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + }; + "write-0.2.1" = { + name = "write"; + packageName = "write"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/write/-/write-0.2.1.tgz"; + sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757"; + }; + }; + "xmlhttprequest-1.8.0" = { + name = "xmlhttprequest"; + packageName = "xmlhttprequest"; + version = "1.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz"; + sha1 = "67fe075c5c24fef39f9d65f5f7b7fe75171968fc"; + }; + }; + "xtend-4.0.1" = { + name = "xtend"; + packageName = "xtend"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"; + sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; + }; + }; + }; + args = { + name = "iota-cli-app"; + packageName = "iota-cli-app"; + version = "1.0.8"; + inherit src; + dependencies = [ + sources."acorn-5.2.1" + (sources."acorn-jsx-3.0.1" // { + dependencies = [ + sources."acorn-3.3.0" + ]; + }) + sources."ajv-4.11.8" + sources."ajv-keywords-1.5.1" + sources."ansi-escapes-1.4.0" + sources."ansi-regex-2.1.1" + sources."ansi-styles-3.2.0" + sources."argparse-1.0.9" + sources."array-union-1.0.2" + sources."array-uniq-1.0.3" + sources."arrify-1.0.1" + sources."async-2.6.0" + (sources."babel-code-frame-6.26.0" // { + dependencies = [ + sources."ansi-styles-2.2.1" + sources."chalk-1.1.3" + sources."supports-color-2.0.0" + ]; + }) + sources."babel-polyfill-6.26.0" + (sources."babel-runtime-6.26.0" // { + dependencies = [ + sources."regenerator-runtime-0.11.1" + ]; + }) + sources."balanced-match-1.0.0" + sources."bignumber.js-4.1.0" + sources."bluebird-3.5.1" + sources."brace-expansion-1.1.8" + sources."caller-path-0.1.0" + sources."callsites-0.2.0" + sources."chalk-2.3.0" + sources."circular-json-0.3.3" + sources."cli-cursor-1.0.2" + sources."cli-width-2.2.0" + sources."co-4.6.0" + sources."code-point-at-1.1.0" + sources."color-convert-1.9.1" + sources."color-name-1.1.3" + sources."colors-1.1.2" + sources."concat-map-0.0.1" + sources."concat-stream-1.6.0" + sources."core-js-2.5.3" + sources."core-util-is-1.0.2" + sources."crypto-js-3.1.9-1" + sources."d-1.0.0" + sources."debug-2.6.9" + sources."deep-is-0.1.3" + sources."del-2.2.2" + sources."doctrine-2.0.2" + sources."encoding-0.1.12" + sources."es5-ext-0.10.37" + sources."es6-iterator-2.0.3" + sources."es6-map-0.1.5" + sources."es6-set-0.1.5" + sources."es6-symbol-3.1.1" + sources."es6-weak-map-2.0.2" + sources."escape-string-regexp-1.0.5" + sources."escope-3.6.0" + (sources."eslint-3.19.0" // { + dependencies = [ + sources."ansi-styles-2.2.1" + sources."chalk-1.1.3" + sources."supports-color-2.0.0" + ]; + }) + sources."espree-3.5.2" + sources."esprima-4.0.0" + sources."esquery-1.0.0" + sources."esrecurse-4.2.0" + sources."estraverse-4.2.0" + sources."esutils-2.0.2" + sources."event-emitter-0.3.5" + sources."exit-hook-1.1.1" + sources."fast-levenshtein-2.0.6" + sources."figures-1.7.0" + sources."file-entry-cache-2.0.0" + sources."flat-cache-1.3.0" + sources."fs.realpath-1.0.0" + sources."generate-function-2.0.0" + sources."generate-object-property-1.2.0" + sources."glob-7.1.2" + sources."globals-9.18.0" + sources."globby-5.0.0" + sources."graceful-fs-4.1.11" + sources."has-ansi-2.0.0" + sources."has-flag-2.0.0" + sources."iconv-lite-0.4.19" + sources."ignore-3.3.7" + sources."imurmurhash-0.1.4" + sources."in-publish-2.0.0" + sources."inflight-1.0.6" + sources."inherits-2.0.3" + (sources."inquirer-0.12.0" // { + dependencies = [ + sources."ansi-styles-2.2.1" + sources."chalk-1.1.3" + sources."supports-color-2.0.0" + ]; + }) + sources."install-0.10.4" + sources."interpret-1.1.0" + sources."iota.lib.js-0.4.6" + sources."is-fullwidth-code-point-1.0.0" + sources."is-my-json-valid-2.16.1" + sources."is-path-cwd-1.0.0" + sources."is-path-in-cwd-1.0.0" + sources."is-path-inside-1.0.1" + sources."is-property-1.0.2" + sources."is-resolvable-1.0.1" + sources."is-stream-1.1.0" + sources."isarray-1.0.0" + sources."js-tokens-3.0.2" + sources."js-yaml-3.10.0" + sources."json-stable-stringify-1.0.1" + sources."json5-0.5.1" + sources."jsonify-0.0.0" + sources."jsonpointer-4.0.1" + sources."left-pad-1.2.0" + sources."levn-0.3.0" + sources."lodash-4.17.4" + sources."log-update-1.0.2" + sources."minimatch-3.0.4" + sources."minimist-0.0.8" + sources."mkdirp-0.5.1" + sources."moment-2.20.1" + sources."ms-2.0.0" + sources."mute-stream-0.0.5" + sources."natural-compare-1.4.0" + sources."node-fetch-1.7.3" + sources."node-localstorage-0.6.0" + sources."number-is-nan-1.0.1" + sources."object-assign-4.1.1" + sources."once-1.4.0" + sources."onetime-1.1.0" + sources."optionator-0.8.2" + sources."os-homedir-1.0.2" + sources."path-is-absolute-1.0.1" + sources."path-is-inside-1.0.2" + sources."path-parse-1.0.5" + sources."pify-2.3.0" + sources."pinkie-2.0.4" + sources."pinkie-promise-2.0.1" + sources."pluralize-1.2.1" + sources."prelude-ls-1.1.2" + (sources."prettyjson-1.2.1" // { + dependencies = [ + sources."minimist-1.2.0" + ]; + }) + sources."process-nextick-args-1.0.7" + sources."progress-1.1.8" + sources."readable-stream-2.3.3" + sources."readline2-1.0.1" + sources."rechoir-0.6.2" + sources."regenerator-runtime-0.10.5" + sources."require-uncached-1.0.3" + sources."resolve-1.5.0" + sources."resolve-from-1.0.1" + sources."restore-cursor-1.0.1" + sources."rimraf-2.6.2" + sources."run-async-0.1.0" + sources."rx-lite-3.1.2" + sources."safe-buffer-5.1.1" + sources."shelljs-0.7.8" + sources."slice-ansi-0.0.4" + sources."sprintf-js-1.0.3" + sources."string-width-1.0.2" + sources."string_decoder-1.0.3" + sources."strip-ansi-3.0.1" + sources."strip-bom-3.0.0" + sources."strip-json-comments-2.0.1" + sources."supports-color-4.5.0" + (sources."table-3.8.3" // { + dependencies = [ + sources."ansi-regex-3.0.0" + sources."ansi-styles-2.2.1" + (sources."chalk-1.1.3" // { + dependencies = [ + sources."ansi-regex-2.1.1" + sources."strip-ansi-3.0.1" + ]; + }) + sources."is-fullwidth-code-point-2.0.0" + sources."string-width-2.1.1" + sources."strip-ansi-4.0.0" + sources."supports-color-2.0.0" + ]; + }) + sources."text-table-0.2.0" + sources."through-2.3.8" + sources."type-check-0.3.2" + sources."typedarray-0.0.6" + sources."user-home-2.0.0" + sources."util-deprecate-1.0.2" + (sources."vorpal-1.12.0" // { + dependencies = [ + sources."ansi-styles-2.2.1" + sources."chalk-1.1.3" + sources."cli-width-1.1.1" + (sources."inquirer-0.11.0" // { + dependencies = [ + sources."lodash-3.10.1" + ]; + }) + sources."minimist-1.2.0" + sources."supports-color-2.0.0" + ]; + }) + sources."wordwrap-1.0.0" + sources."wrap-ansi-2.1.0" + sources."wrappy-1.0.2" + sources."write-0.2.1" + sources."xmlhttprequest-1.8.0" + sources."xtend-4.0.1" + ]; + buildInputs = globalBuildInputs; + meta = { + description = "IOTA CLI"; + homepage = "https://github.com/iotaledger/cli-app#readme"; + license = "MIT"; + }; + production = true; + bypassCache = true; + }; +in +{ + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; +} diff --git a/pkgs/crypto/sia/default.nix b/pkgs/crypto/sia/default.nix new file mode 100644 index 00000000..45908afb --- /dev/null +++ b/pkgs/crypto/sia/default.nix @@ -0,0 +1,19 @@ +{ stdenv, fetchzip }: +stdenv.mkDerivation rec { + version = "v1.3.7"; + name = "Sia-${version}"; + src = fetchzip { + url = "https://sia.tech/static/releases/${name}-linux-amd64.zip"; + sha256 = "1ljzwrlkx4hc16r8siiyakn039afipp95dyr83c8yfq3r3bfasqd"; + }; + phases = "installPhase"; + installPhase = '' + mkdir -p $out/share/doc + mkdir -p $out/bin + mkdir -p $out/share/sia + cp -a $src/doc $out/share/doc/sia + cp -a $src/LICENSE $src/README.md $out/share/sia + cp -a $src/{siac,siad} $out/bin + cp -a $src/{siac,siad}.sig $out/share/sia/ + ''; +} diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 00000000..8ea65a5c --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,51 @@ +{ pkgs }: +with pkgs; +let + mylibs = import ../libs.nix { inherit pkgs; }; +in +rec { + boinctui = callPackage ../pkgs/boinctui {}; + cnagios = callPackage ../pkgs/cnagios { inherit mylibs; }; + duply = callPackage ../pkgs/duply {}; + flrn = callPackage ../pkgs/flrn { inherit mylibs; slang = callPackage ../pkgs/slang_1 {}; }; + genius = callPackage ../pkgs/genius {}; + mtop = callPackage ../pkgs/mtop {}; + muttprint = callPackage ../pkgs/muttprint {}; + mutt-ics = callPackage ../pkgs/mutt-ics { inherit mylibs; }; + nagios-cli = callPackage ../pkgs/nagios-cli { inherit mylibs; }; + nagnu = callPackage ../pkgs/nagnu { inherit mylibs; }; + note = callPackage ../pkgs/note {}; + notmuch-python2 = callPackage ../pkgs/notmuch/notmuch-python { pythonPackages = python2Packages; }; + notmuch-python3 = callPackage ../pkgs/notmuch/notmuch-python { pythonPackages = python3Packages; }; + notmuch-vim = callPackage ../pkgs/notmuch/notmuch-vim {}; + pg_activity = callPackage ../pkgs/pg_activity { inherit mylibs; }; + pgloader = callPackage ../pkgs/pgloader { inherit mylibs; }; + telegram-cli = callPackage ../pkgs/telegram-cli { inherit mylibs; }; + telegram-history-dump = callPackage ../pkgs/telegram-history-dump { inherit mylibs; }; + telegramircd = callPackage ../pkgs/telegramircd { inherit mylibs; telethon = callPackage ../pkgs/telethon_sync {}; }; + terminal-velocity = callPackage ../pkgs/terminal-velocity {}; + tiv = callPackage ../pkgs/tiv {}; + unicodeDoc = callPackage ../pkgs/unicode {}; + + cardano = callPackage ../pkgs/crypto/cardano { inherit mylibs; }; + iota-cli-app = callPackage ../pkgs/crypto/iota-cli-app { inherit mylibs; }; + sia = callPackage ../pkgs/crypto/sia {}; + + pure-ftpd = callPackage ../pkgs/pure-ftpd {}; + mpd = (callPackage ../pkgs/mpd_0_21 {}).mpd; + mpd-small = (callPackage ../pkgs/mpd_0_21 {}).mpd-small; + + bitlbee-mastodon = callPackage ./bitlbee-mastodon {}; + + composerEnv = callPackage ./composer-env {}; + webapps = callPackage ./webapps { inherit mylibs composerEnv private; }; + + private = if builtins.pathExists (./. + "/private") + then import ./private { inherit pkgs; } + else { webapps = {}; }; + + python3PackagesPlus = callPackage ./python-packages { + python = python3; + inherit mylibs; + }; +} diff --git a/pkgs/duply/default.nix b/pkgs/duply/default.nix new file mode 100644 index 00000000..3816996c --- /dev/null +++ b/pkgs/duply/default.nix @@ -0,0 +1,40 @@ +{ stdenv, fetchurl, makeWrapper, coreutils, python2, duplicity, gawk, gnupg1, bash, gnugrep, txt2man, which }: +stdenv.mkDerivation rec { + name = "duply-${version}"; + version = "2.1"; + + src = fetchurl { + url = "mirror://sourceforge/project/ftplicity/duply%20%28simple%20duplicity%29/2.1.x/duply_${version}.tgz"; + sha256 = "0i5j7h7h6ssrwhll0sfhymisshg54kx7j45zcqffzjxa0ylvzlm8"; + }; + + buildInputs = [ txt2man makeWrapper ]; + + postPatch = "patchShebangs ."; + + installPhase = '' + mkdir -p "$out/bin" + mkdir -p "$out/share/man/man1" + install -vD duply "$out/bin" + sed -i $out/bin/duply -e "1a \ + export PATH='${stdenv.lib.makeBinPath [ coreutils python2 duplicity gawk gnupg1 bash gnugrep txt2man which ]}' + " -e "1a \ + export DUPL_PYTHON_BIN=$(basename ${duplicity}/lib/python*) + " + "$out/bin/duply" txt2man > "$out/share/man/man1/duply.1" + ''; + + meta = with stdenv.lib; { + description = "Shell front end for the duplicity backup tool"; + longDescription = '' + Duply is a shell front end for the duplicity backup tool + http://duplicity.nongnu.org/. It greatly simplifies it's usage by + implementing backup job profiles, batch commands and more. Who says + secure backups on non-trusted spaces are no child's play? + ''; + homepage = http://duply.net/; + license = licenses.gpl2; + maintainers = [ maintainers.bjornfor ]; + platforms = stdenv.lib.platforms.unix; + }; +} diff --git a/pkgs/flrn/default.nix b/pkgs/flrn/default.nix new file mode 100644 index 00000000..f288615a --- /dev/null +++ b/pkgs/flrn/default.nix @@ -0,0 +1,13 @@ +{ stdenv, mylibs, libetpan, openssl, autoconf, groff, slang, yacc }: +stdenv.mkDerivation (mylibs.fetchedGithub ./flrn.json // { + buildInputs = [ libetpan openssl autoconf groff slang yacc ]; + preConfigure = '' + sed -i -e "s/test -e configure/false/" configure.in + autoconf + sed -i -e '/define CHECK_MAIL/d' src/flrn_config.h + sed -i -e '/DEFAULT_DIR_FILE/s@".flrn"@".config/flrn"@' src/flrn_config.h + sed -i -e '/DEFAULT_CONFIG_FILE/s@".flrnrc"@"flrnrc"@' src/flrn_config.h + sed -i -e '/DEFAULT_FLNEWS_FILE/s@".flnewsrc"@"flnewsrc"@' src/flrn_config.h + sed -i -e '/flrn_char chaine/s@18@20@' src/flrn_command.c + ''; +}) diff --git a/pkgs/flrn/flrn.json b/pkgs/flrn/flrn.json new file mode 100644 index 00000000..3d7a9443 --- /dev/null +++ b/pkgs/flrn/flrn.json @@ -0,0 +1,15 @@ +{ + "tag": "860d642-master", + "meta": { + "name": "flrn", + "url": "https://github.com/Cigaes/flrn", + "branch": "master" + }, + "github": { + "owner": "Cigaes", + "repo": "flrn", + "rev": "860d642bd6389a209c8b697bd044f78d23406509", + "sha256": "0sqlxxpy1xg7cb2hbxcr0al46nyr6jjnns4b5i8w04z5sypa9r5c", + "fetchSubmodules": true + } +} diff --git a/pkgs/genius/default.nix b/pkgs/genius/default.nix new file mode 100644 index 00000000..b40d1d01 --- /dev/null +++ b/pkgs/genius/default.nix @@ -0,0 +1,19 @@ +{ stdenv, fetchurl, mpfr, glib, hicolor-icon-theme, gtk2, intltool, gnome-doc-utils, python3, gnome2, autoconf, automake, libtool, ncurses, readline, pkg-config, }: +stdenv.mkDerivation rec { + name = "genius-${version}"; + version = "1.0.24"; + src = fetchurl { + url = "https://download.gnome.org/sources/genius/1.0/${name}.tar.xz"; + sha256 = "772f95f6ae4716d39bb180cd50e8b6b9b074107bee0cd083b825e1e6e55916b6"; + }; + buildInputs = [ + mpfr glib hicolor-icon-theme gtk2 intltool gnome-doc-utils python3 gnome2.gtksourceview + autoconf automake libtool ncurses readline pkg-config + ]; + preConfigure = '' + autoreconf -fi + ''; + preBuild = '' + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + ''; +} diff --git a/pkgs/mpd_0_21/default.nix b/pkgs/mpd_0_21/default.nix new file mode 100644 index 00000000..f19a76fb --- /dev/null +++ b/pkgs/mpd_0_21/default.nix @@ -0,0 +1,152 @@ +{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, glib, systemd, boost, darwin +# Inputs +, curl, libmms, libnfs, samba +# Archive support +, bzip2, zziplib +# Codecs +, audiofile, faad2, ffmpeg, flac, fluidsynth, game-music-emu +, libmad, libmikmod, mpg123, libopus, libvorbis, lame +# Filters +, libsamplerate +# Outputs +, alsaLib, libjack2, libpulseaudio, libshout +# Misc +, icu, sqlite, avahi, dbus, pcre, libgcrypt, expat +# Services +, yajl +# Client support +, mpd_clientlib +# Tag support +, libid3tag +}: + +let + major = "0.21"; + minor = "7"; + + lib = stdenv.lib; + mkDisable = f: "-D${f}=disabled"; + mkEnable = f: "-D${f}=enabled"; + keys = lib.mapAttrsToList (k: v: k); + + featureDependencies = { + # Storage plugins + udisks = [ dbus ]; + webdav = [ curl expat ]; + # Input plugins + curl = [ curl ]; + mms = [ libmms ]; + nfs = [ libnfs ]; + smbclient = [ samba ]; + # Archive support + bzip2 = [ bzip2 ]; + zzip = [ zziplib ]; + # Decoder plugins + audiofile = [ audiofile ]; + faad = [ faad2 ]; + ffmpeg = [ ffmpeg ]; + flac = [ flac ]; + fluidsynth = [ fluidsynth ]; + gme = [ game-music-emu ]; + mad = [ libmad ]; + mikmod = [ libmikmod ]; + mpg123 = [ mpg123 ]; + opus = [ libopus ]; + vorbis = [ libvorbis ]; + # Encoder plugins + vorbisenc = [ libvorbis ]; + lame = [ lame ]; + # Filter plugins + libsamplerate = [ libsamplerate ]; + # Output plugins + alsa = [ alsaLib ]; + jack = [ libjack2 ]; + pulse = [ libpulseaudio ]; + shout = [ libshout ]; + # Commercial services + qobuz = [ curl libgcrypt yajl ]; + soundcloud = [ curl yajl ]; + tidal = [ curl yajl ]; + # Client support + libmpdclient = [ mpd_clientlib ]; + # Tag support + id3tag = [ libid3tag ]; + # Misc + dbus = [ dbus ]; + expat = [ expat ]; + icu = [ icu ]; + pcre = [ pcre ]; + sqlite = [ sqlite ]; + systemd = [ systemd ]; + yajl = [ yajl ]; + zeroconf = [ avahi dbus ]; + }; + + run = { features ? null }: + let + fl = if (features == null ) + then keys featureDependencies + else features; + + # Disable platform specific features if needed + # using libmad to decode mp3 files on darwin is causing a segfault -- there + # is probably a solution, but I'm disabling it for now + platformMask = lib.optionals stdenv.isDarwin [ "mad" "pulse" "jack" "nfs" "smb" ] + ++ lib.optionals (!stdenv.isLinux) [ "alsa" "systemd" ]; + features_ = lib.subtractLists platformMask fl; + + in stdenv.mkDerivation rec { + name = "mpd-${version}"; + version = "${major}${if minor == "" then "" else "." + minor}"; + + src = fetchFromGitHub { + owner = "MusicPlayerDaemon"; + repo = "MPD"; + rev = "v${version}"; + sha256 = "11zi8hmlj63ngzl06vzx05669k20j4cdsp0caz4p4ayn46fd4m17"; + }; + + buildInputs = [ glib boost ] + ++ (lib.concatLists (lib.attrVals features_ featureDependencies)) + ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AudioToolbox; + + nativeBuildInputs = [ meson ninja pkgconfig ]; + + enableParallelBuilding = true; + + mesonFlags = + map mkEnable features_ ++ map mkDisable (lib.subtractLists features_ (keys featureDependencies)) + ++ [ "-Dsyslog=enabled" ] + ++ lib.optional (lib.any (x: x == "zeroconf") features_) + "-Dzeroconf=avahi" + ++ lib.optional stdenv.isLinux + "-Dsystemd_system_unit_dir=etc/systemd/system"; + + meta = with stdenv.lib; { + description = "A flexible, powerful daemon for playing music"; + homepage = http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki; + license = licenses.gpl2; + maintainers = with maintainers; [ astsmtl fuuzetsu ehmry fpletz ]; + platforms = platforms.unix; + + longDescription = '' + Music Player Daemon (MPD) is a flexible, powerful daemon for playing + music. Through plugins and libraries it can play a variety of sound + files while being controlled by its network protocol. + ''; + }; + }; +in +{ + mpd = run { }; + mpd-small = run { features = [ + "webdav" "curl" "mms" "nfs" "bzip2" "zzip" + "audiofile" "faad" "flac" "gme" "mad" + "mpg123" "opus" "vorbis" + "vorbisenc" "lame" "libsamplerate" + "alsa" "shout" "libmpdclient" + "id3tag" "expat" "pcre" "yajl" "sqlite" + "soundcloud" "qobuz" "tidal" + "systemd" + ]; }; +} diff --git a/pkgs/mtop/default.nix b/pkgs/mtop/default.nix new file mode 100644 index 00000000..4a894303 --- /dev/null +++ b/pkgs/mtop/default.nix @@ -0,0 +1,24 @@ +{ buildPerlPackage, fetchurl, perlPackages, lib }: +buildPerlPackage rec { + name = "mtop-${version}"; + version = "0.6.6"; + src = fetchurl { + url = "http://downloads.sourceforge.net/project/mtop/mtop/v${version}/mtop-${version}.tar.gz"; + sha256 = "0x0x5300b1j9i0xxk8rsrki0pspyzj2vylhzv8qg3l6j26aw0zrf"; + }; + outputs = ["out"]; + buildInputs = with perlPackages; [ DBI DBDmysql Curses ]; + + postInstall = '' + cd "$out" + preConfigure || true + ''; + + meta = with lib; { + description = "MySQL top (monitor and examine slow queries)"; + homepage = http://mtop.sourceforge.net/; + license = licenses.gpl3; + maintainers = with maintainers; [ { name = "Marc Prewitt"; email = "mprewitt@chelsea.net"; } ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/mutt-ics/default.nix b/pkgs/mutt-ics/default.nix new file mode 100644 index 00000000..a8a529b9 --- /dev/null +++ b/pkgs/mutt-ics/default.nix @@ -0,0 +1,5 @@ +{ python3Packages, mylibs }: +with python3Packages; +buildPythonApplication (mylibs.fetchedGithub ./mutt-ics.json // { + propagatedBuildInputs = [ icalendar ]; +}) diff --git a/pkgs/mutt-ics/mutt-ics.json b/pkgs/mutt-ics/mutt-ics.json new file mode 100644 index 00000000..ae8ed372 --- /dev/null +++ b/pkgs/mutt-ics/mutt-ics.json @@ -0,0 +1,15 @@ +{ + "tag": "d291187-master", + "meta": { + "name": "mutt-ics", + "url": "https://github.com/dmedvinsky/mutt-ics", + "branch": "master" + }, + "github": { + "owner": "dmedvinsky", + "repo": "mutt-ics", + "rev": "d29118788f291f67d34fefa6eda9f95846a2fe34", + "sha256": "0kqzngsvzjq5gpf60jhfmb2xzjznvk172khf4dlcb72n3ak4rb92", + "fetchSubmodules": true + } +} diff --git a/pkgs/muttprint/0.73-4.diff.gz b/pkgs/muttprint/0.73-4.diff.gz new file mode 100644 index 0000000000000000000000000000000000000000..c4f3cefe2238dcd72a18eb88d718372e29ff74e8 GIT binary patch literal 16525 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 A4*&oF literal 0 HcmV?d00001 diff --git a/pkgs/muttprint/default.nix b/pkgs/muttprint/default.nix new file mode 100644 index 00000000..0863a7b9 --- /dev/null +++ b/pkgs/muttprint/default.nix @@ -0,0 +1,44 @@ +{ stdenv, fetchurl, lib, psutils, dialog, texlive, makeWrapper, automake, autoconf, imagemagick, ghostscript, perl, perlPackages }: +stdenv.mkDerivation rec { + name = "muttprint-${version}"; + version = "0.73"; + src = fetchurl { + url = "http://downloads.sf.net/muttprint/${name}.tar.gz"; + sha256 = "1dny4niyibfgazwlzfcnb37jy6k140rs6baaj629z12rmahfdavw"; + }; + patches = [ + ./0.73-4.diff.gz + ./regex.patch + ./two_edge.patch + ]; + preConfigure = '' + aclocal + automake --add-missing --copy + autoconf + ''; + preBuild = '' + cd pics + convert -flop BabyTuX.eps BabyTuX.eps + for i in BabyTuX_color.eps BabyTuX.eps Debian_color.eps \ + Debian.eps Gentoo.eps Gentoo_color.eps ; do + convert $i $(basename $i .eps).png + done + convert penguin.eps penguin.jpg + cd .. + ''; + postInstall = '' + perlFlags= + for i in $(IFS=:; echo $PERL5LIB); do + perlFlags="$perlFlags -I$i" + done + + sed -i "$out/bin/muttprint" -e "s|^#\!\(.*[ /]perl.*\)$|#\!\1$perlFlags|" + sed -i "$out/bin/muttprint" -e "s|ENV{HOME}/.muttprintrc|ENV{XDG_CONFIG_HOME}/muttprint/muttprintrc|" + + wrapProgram $out/bin/muttprint \ + --prefix PATH : ${lib.makeBinPath [ psutils dialog + (texlive.combine { inherit (texlive) scheme-basic utopia fancyvrb lastpage marvosym ucs cm-super; }) ]} + ''; + buildInputs = [ makeWrapper automake autoconf imagemagick ghostscript perl ] ++ + (with perlPackages; [ TimeDate FileWhich TextIconv ]); +} diff --git a/pkgs/muttprint/regex.patch b/pkgs/muttprint/regex.patch new file mode 100644 index 00000000..e99c4a2c --- /dev/null +++ b/pkgs/muttprint/regex.patch @@ -0,0 +1,11 @@ +--- a/muttprint 2015-07-21 11:18:04.219578426 +1200 ++++ b/muttprint 2015-07-21 11:18:53.906243779 +1200 +@@ -1635,7 +1635,7 @@ + open (AUX, "$auxfile") or fatalError "Could not open $auxfile:\n$!"; + + while () { +- ($numberOfPages) = /\\newlabel{LastPage}{{}{(\d+)}}/; ++ ($numberOfPages) = /\\newlabel\{LastPage}\{\{}\{(\d+)}}/; + } + + close AUX or fatalError "Could not close $auxfile:\n$!"; diff --git a/pkgs/muttprint/two_edge.patch b/pkgs/muttprint/two_edge.patch new file mode 100644 index 00000000..4a7290d3 --- /dev/null +++ b/pkgs/muttprint/two_edge.patch @@ -0,0 +1,19 @@ +--- a/muttprint 2016-05-05 13:48:50.515950744 +1200 ++++ b/muttprint 2016-05-05 13:52:10.722623902 +1200 +@@ -643,14 +643,14 @@ + if ($Config{PAPERSAVE} eq "on") { + if ($useCups) { + $Config{PRINT_COMMAND} =~ +- s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/; ++ s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/; + } else { # no cups + modifyPS("landscape"); + } + } else { # no papersave + if ($useCups) { + $Config{PRINT_COMMAND} =~ +- s/\$CUPS_OPTIONS/ -o sides=two-sided-short-edge \$CUPS_OPTIONS/; ++ s/\$CUPS_OPTIONS/ -o sides=two-sided-long-edge \$CUPS_OPTIONS/; + } else { # no cups + modifyPS("portrait"); + } diff --git a/pkgs/nagios-cli/default.nix b/pkgs/nagios-cli/default.nix new file mode 100644 index 00000000..7d7e7cc2 --- /dev/null +++ b/pkgs/nagios-cli/default.nix @@ -0,0 +1,2 @@ +{ python2Packages, mylibs }: +python2Packages.buildPythonApplication (mylibs.fetchedGithub ./nagios-cli.json) diff --git a/pkgs/nagios-cli/nagios-cli.json b/pkgs/nagios-cli/nagios-cli.json new file mode 100644 index 00000000..fc912277 --- /dev/null +++ b/pkgs/nagios-cli/nagios-cli.json @@ -0,0 +1,15 @@ +{ + "tag": "edc51ea-master", + "meta": { + "name": "nagios-cli", + "url": "https://github.com/tehmaze/nagios-cli", + "branch": "master" + }, + "github": { + "owner": "tehmaze", + "repo": "nagios-cli", + "rev": "edc51eaccf1086bb4469ce45c5e5155f2d71a2f9", + "sha256": "1qw5fv4niz079zqwmfr3kzjv8cc31rbhi9whdbv9c32qdi3h7vsp", + "fetchSubmodules": true + } +} diff --git a/pkgs/nagnu/default.nix b/pkgs/nagnu/default.nix new file mode 100644 index 00000000..2b9c0ecc --- /dev/null +++ b/pkgs/nagnu/default.nix @@ -0,0 +1,12 @@ +{ stdenv, mylibs, ncurses, curl }: +stdenv.mkDerivation (mylibs.fetchedGithub ./nagnu.json // rec { + buildInputs = [ ncurses curl ]; + installPhase = '' + mkdir -p $out/bin + cp nagnu $out/bin + mkdir -p $out/share/doc/nagnu + cp nagnu.conf.sample $out/share/doc/nagnu + mkdir -p $out/share/man/man8 + cp docs/nagnu.8 $out/share/man/man8 + ''; +}) diff --git a/pkgs/nagnu/nagnu.json b/pkgs/nagnu/nagnu.json new file mode 100644 index 00000000..60a8b079 --- /dev/null +++ b/pkgs/nagnu/nagnu.json @@ -0,0 +1,15 @@ +{ + "tag": "c7e65fc-master", + "meta": { + "name": "nagnu", + "url": "https://github.com/frlen/nagnu", + "branch": "master" + }, + "github": { + "owner": "frlen", + "repo": "nagnu", + "rev": "c7e65fc02f46a3756a4cc47953ea2f3e57a84728", + "sha256": "1i2jm8ibvqcc734daamnzc3hx8q0nsry1x12q0kr5yvcsdjjgyy3", + "fetchSubmodules": true + } +} diff --git a/pkgs/note/default.nix b/pkgs/note/default.nix new file mode 100644 index 00000000..0c422bcc --- /dev/null +++ b/pkgs/note/default.nix @@ -0,0 +1,18 @@ +{ lib, buildPerlPackage, fetchurl, perlPackages }: +buildPerlPackage rec { + name = "note-1.3.26"; + src = fetchurl { + url = "mirror://cpan/authors/id/T/TL/TLINDEN/${name}.tar.gz"; + sha256 = "1h645rnb5vpms48fcyzvp7cwwcbf9k5xq49w2bpniyzzgk2brjrq"; + }; + outputs = ["out" "man"]; + propagatedBuildInputs = with perlPackages; [ YAML ]; + + meta = with lib; { + description = "A perl script for maintaining notes"; + homepage = http://www.daemon.de/NOTE; + license = licenses.gpl3; + maintainers = with maintainers; [ { name = "T.v.Dein"; email = "tlinden@cpan.org"; } ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/notmuch/notmuch-python/default.nix b/pkgs/notmuch/notmuch-python/default.nix new file mode 100644 index 00000000..d639d9ae --- /dev/null +++ b/pkgs/notmuch/notmuch-python/default.nix @@ -0,0 +1,16 @@ +{ stdenv, notmuch, pythonPackages }: +stdenv.mkDerivation rec { + name = "notmuch-${pythonPackages.python.name}-${version}"; + version = notmuch.version; + outputs = [ "out" ]; + buildInputs = with pythonPackages; [ sphinx python ]; + src = notmuch.src; + phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ]; + buildPhase = '' + cd bindings/python + python setup.py build + ''; + installPhase = '' + python setup.py install --prefix=$out --optimize=1 + ''; +} diff --git a/pkgs/notmuch/notmuch-vim/default.nix b/pkgs/notmuch/notmuch-vim/default.nix new file mode 100644 index 00000000..e79a253a --- /dev/null +++ b/pkgs/notmuch/notmuch-vim/default.nix @@ -0,0 +1,11 @@ +{ stdenv, notmuch }: +stdenv.mkDerivation rec { + name = "notmuch-vim-${version}"; + version = notmuch.version; + outputs = [ "out" ]; + src = notmuch.src; + phases = [ "unpackPhase" "installPhase" ]; + installPhase = '' + make -C vim DESTDIR=$out prefix="/share/vim/vimfiles" install + ''; +} diff --git a/pkgs/pg_activity/default.nix b/pkgs/pg_activity/default.nix new file mode 100644 index 00000000..a20ee8a4 --- /dev/null +++ b/pkgs/pg_activity/default.nix @@ -0,0 +1,5 @@ +{ python2Packages, mylibs }: +with python2Packages; +buildPythonApplication (mylibs.fetchedGithub ./pg_activity.json // { + propagatedBuildInputs = [ psycopg2 psutil ]; +}) diff --git a/pkgs/pg_activity/pg_activity.json b/pkgs/pg_activity/pg_activity.json new file mode 100644 index 00000000..4485d9a7 --- /dev/null +++ b/pkgs/pg_activity/pg_activity.json @@ -0,0 +1,15 @@ +{ + "tag": "v1.4.0", + "meta": { + "name": "pg_activity", + "url": "https://github.com/julmon/pg_activity/", + "branch": "refs/tags/v1.4.0" + }, + "github": { + "owner": "julmon", + "repo": "pg_activity", + "rev": "f26ae614c204254a805309026eebd5e9230b0214", + "sha256": "1bmvgrmna7vz2a6vknxm0k19vl9x7l6hn6vpfd7jgd53rz7c9w5p", + "fetchSubmodules": true + } +} diff --git a/pkgs/pgloader/default.nix b/pkgs/pgloader/default.nix new file mode 100644 index 00000000..9f1be67d --- /dev/null +++ b/pkgs/pgloader/default.nix @@ -0,0 +1,19 @@ +{ stdenv, mylibs, sbcl, cacert, sqlite, freetds, libzip, curl, git, openssl, makeWrapper }: +stdenv.mkDerivation (mylibs.fetchedGithub ./pgloader.json // { + # was removed from quicklisp packages cd7bfa6f48295f361c691a7520fb122938bd2a68, + # but needs curl to build everything otherwise + __noChroot = true; + buildInputs = [ sbcl cacert sqlite freetds libzip curl git openssl makeWrapper ]; + LD_LIBRARY_PATH = stdenv.lib.makeLibraryPath [ sqlite libzip curl git openssl freetds ]; + buildPhase = '' + export PATH=$PATH:$out/bin + export HOME=$TMPDIR + make pgloader + ''; + dontStrip = true; + enableParallelBuilding = false; + installPhase = '' + install -Dm755 build/bin/pgloader "$out/bin/pgloader" + wrapProgram $out/bin/pgloader --prefix LD_LIBRARY_PATH : "$LD_LIBRARY_PATH" + ''; +}) diff --git a/pkgs/pgloader/pgloader.json b/pkgs/pgloader/pgloader.json new file mode 100644 index 00000000..dfe310b7 --- /dev/null +++ b/pkgs/pgloader/pgloader.json @@ -0,0 +1,15 @@ +{ + "tag": "v3.5.2", + "meta": { + "name": "pgloader", + "url": "https://github.com/dimitri/pgloader", + "branch": "refs/tags/v3.5.2" + }, + "github": { + "owner": "dimitri", + "repo": "pgloader", + "rev": "63af7e7373975391446dcae151f5c61564849025", + "sha256": "1rd0k1x7ml6b6x526brachm13v51vx5ikpg64c8k8j29cskq2vqa", + "fetchSubmodules": true + } +} diff --git a/pkgs/private/default.nix b/pkgs/private/default.nix new file mode 100644 index 00000000..60fabad1 --- /dev/null +++ b/pkgs/private/default.nix @@ -0,0 +1,12 @@ +{ pkgs }: +with pkgs; +let + mylibs = import ../../libs.nix { inherit pkgs; }; +in +rec { + webapps = callPackage ./webapps { + inherit mylibs; + inherit (pkgs) composerEnv; + inherit (pkgs.webapps) spip; + }; +} diff --git a/pkgs/private/webapps/apache-default/default.nix b/pkgs/private/webapps/apache-default/default.nix new file mode 100644 index 00000000..92f558eb --- /dev/null +++ b/pkgs/private/webapps/apache-default/default.nix @@ -0,0 +1,21 @@ +{ www_root ? null }: +rec { + www = ./www; + apacheConfig = let + www_root' = if isNull www_root then www else www_root; + in '' + ErrorDocument 500 /maintenance_immae.html + ErrorDocument 501 /maintenance_immae.html + ErrorDocument 502 /maintenance_immae.html + ErrorDocument 503 /maintenance_immae.html + ErrorDocument 504 /maintenance_immae.html + Alias /maintenance_immae.html ${www_root'}/maintenance_immae.html + ProxyPass /maintenance_immae.html ! + + AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${www_root'}/googleb6d69446ff4ca3e5.html + + AllowOverride None + Require all granted + + ''; +} diff --git a/pkgs/private/webapps/apache-default/www/googleb6d69446ff4ca3e5.html b/pkgs/private/webapps/apache-default/www/googleb6d69446ff4ca3e5.html new file mode 100644 index 00000000..ff6dbf30 --- /dev/null +++ b/pkgs/private/webapps/apache-default/www/googleb6d69446ff4ca3e5.html @@ -0,0 +1 @@ +google-site-verification: googleb6d69446ff4ca3e5.html \ No newline at end of file diff --git a/pkgs/private/webapps/apache-default/www/index.htm b/pkgs/private/webapps/apache-default/www/index.htm new file mode 100644 index 00000000..02742518 --- /dev/null +++ b/pkgs/private/webapps/apache-default/www/index.htm @@ -0,0 +1,9 @@ + + + + Hello World HTML + + +

It works!

+ + diff --git a/pkgs/private/webapps/apache-default/www/maintenance_immae.html b/pkgs/private/webapps/apache-default/www/maintenance_immae.html new file mode 100644 index 00000000..90f265f4 --- /dev/null +++ b/pkgs/private/webapps/apache-default/www/maintenance_immae.html @@ -0,0 +1,58 @@ + + + + Maintenance + + + + + +
+

Erreur serveur ou maintenance en cours !

+
+

Une mise à jour ou une opération de maintenance est en cours sur le site. Retentez dans quelques instants ou patientez, la page se rechargera automatiquement.

+
+
+ +
+

Server error or website in maintenance!

+
+

An update or a maintenance is on track on the website. Please try again in a few seconds or wait, the page will reload automatically.

+
+
+ + diff --git a/pkgs/private/webapps/apache-default/www/nossl.html b/pkgs/private/webapps/apache-default/www/nossl.html new file mode 100644 index 00000000..4401a806 --- /dev/null +++ b/pkgs/private/webapps/apache-default/www/nossl.html @@ -0,0 +1,11 @@ + + + + No SSL site + + +

No SSL on this site

+

Use for wifi networks with login page that doesn't work well with + https.

+ + diff --git a/pkgs/private/webapps/aten/aten.json b/pkgs/private/webapps/aten/aten.json new file mode 100644 index 00000000..53569b62 --- /dev/null +++ b/pkgs/private/webapps/aten/aten.json @@ -0,0 +1,14 @@ +{ + "tag": "b99537f-master", + "meta": { + "name": "aten", + "url": "gitolite@git.immae.eu:perso/Immae/Sites/Aten", + "branch": "master" + }, + "git": { + "url": "gitolite@git.immae.eu:perso/Immae/Sites/Aten", + "rev": "b99537fdad41291afb4f1bb8b2e2aa4081c71fae", + "sha256": "15mlyik6zivxwry6zc906bqnivxhby27yr8kj4lg5n68pvb877dn", + "fetchSubmodules": true + } +} diff --git a/pkgs/private/webapps/aten/default.nix b/pkgs/private/webapps/aten/default.nix new file mode 100644 index 00000000..c36e15df --- /dev/null +++ b/pkgs/private/webapps/aten/default.nix @@ -0,0 +1,57 @@ +{ environment ? "prod" +, varDir ? "/var/lib/aten_${environment}" +, mylibs, composerEnv, fetchgit, runCommand, nodejs, jq, libsass, python, fetchurl }: +let + packagesource = mylibs.fetchedGitPrivate ./aten.json; + packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' + cat ${packagesource.src}/package.json | jq -r '.version = "v1.0.0"|.name="aten"' > $out + ''; + yarnModules = mylibs.yarn2nixPackage.mkYarnModules rec { + name = "aten-yarn"; + pname = name; + version = "v1.0.0"; + packageJSON = packagejson; + yarnLock = "${packagesource.src}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + all = { + buildInputs = [ mylibs.yarn2nixPackage.src ]; + }; + node-sass = { + buildInputs = [ libsass python ]; + postInstall = let + nodeHeaders = fetchurl { + url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; + sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; + }; + in + '' + node scripts/build.js --tarball=${nodeHeaders} + ''; + }; + }; + }; + app = composerEnv.buildPackage ( + import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // + packagesource // + rec { + noDev = (environment == "prod"); + preInstall = '' + export SYMFONY_ENV="${environment}" + export APP_ENV="${environment}" + ''; + postInstall = '' + ln -sf ${yarnModules}/node_modules . + yarn run --offline encore production + rm -rf var/{log,cache} + ln -sf ${varDir}/{log,cache} var/ + ''; + buildInputs = [ yarnModules mylibs.yarn2nixPackage.yarn ]; + passthru = { + inherit varDir; + inherit environment; + webRoot = "${app}/public"; + }; + } + ); +in app diff --git a/pkgs/private/webapps/aten/php-packages.nix b/pkgs/private/webapps/aten/php-packages.nix new file mode 100644 index 00000000..8d865876 --- /dev/null +++ b/pkgs/private/webapps/aten/php-packages.nix @@ -0,0 +1,740 @@ +# Generated with composer2nix and adapted to return only the list of +# packages +{ composerEnv, fetchurl, fetchgit ? null }: +{ + packages = { + "behat/transliterator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"; + src = fetchurl { + url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c; + sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0"; + }; + }; + }; + "doctrine/annotations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-annotations-c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5; + sha256 = "0b80xpqd3j99xgm0c41kbgy0k6knrfnd29223c93295sb12112g7"; + }; + }; + }; + "doctrine/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-cache-d768d58baee9a4862ca783840eca1b9add7a7f57"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57; + sha256 = "1kljhw4gqp12iz88h6ymsrlfir2fis7icn6dffyizfc1csyb4s2i"; + }; + }; + }; + "doctrine/collections" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-collections-a01ee38fcd999f34d9bfbcee59dbda5105449cbf"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf; + sha256 = "0d36zc21ka0pdac9xpkxsgf5zzw9gp0m9lk3r3xs5y70j0lkkkis"; + }; + }; + }; + "doctrine/common" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-common-30e33f60f64deec87df728c02b107f82cdafad9d"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d; + sha256 = "0s4vv14ibyx62a9aj3wn5cs2bbxd72fajmfmi8qb5l11gx0375na"; + }; + }; + }; + "doctrine/dbal" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-dbal-22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9; + sha256 = "0kbahs699jd8pxf512dgg7arv49dc7qzi3mx8snxqm4h15n5brnj"; + }; + }; + }; + "doctrine/doctrine-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-bundle-82d2c63cd09acbde2332f55d9aa7b28aefe4983d"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/82d2c63cd09acbde2332f55d9aa7b28aefe4983d; + sha256 = "0gzrigv360rp50yxpwidbkf8vlagym0w1if010yz5xcfrz37cpn3"; + }; + }; + }; + "doctrine/doctrine-cache-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-cache-bundle-5514c90d9fb595e1095e6d66ebb98ce9ef049927"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927; + sha256 = "04njrfhw4fc2ifacd9h0wd9i14l7ycv3hanbqrw5ilsai02j6asa"; + }; + }; + }; + "doctrine/doctrine-migrations-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-migrations-bundle-49fa399181db4bf4f9f725126bd1cb65c4398dce"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce; + sha256 = "1a73xjhjrjlvkh8d253kfc2rbxd2h4hwafhv5078dy7rg6x9blyn"; + }; + }; + }; + "doctrine/event-manager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-event-manager-a520bc093a0170feeb6b14e9d83f3a14452e64b3"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3; + sha256 = "165cxvw4idqj01l63nya2whpdb3fz6ld54rx198b71bzwfrydl88"; + }; + }; + }; + "doctrine/inflector" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-inflector-5527a48b7313d15261292c149e55e26eae771b0a"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a; + sha256 = "0ng6vlwjr8h6hqwa32ynykz1mhlfsff5hirjidlk086ab6njppa5"; + }; + }; + }; + "doctrine/instantiator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-instantiator-185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda; + sha256 = "1mah9a6mb30qad1zryzjain2dxw29d8h4bjkbcs3srpm3p891msy"; + }; + }; + }; + "doctrine/lexer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; + sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; + }; + }; + }; + "doctrine/migrations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-migrations-215438c0eef3e5f9b7da7d09c6b90756071b43e6"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6; + sha256 = "0k6sgw65vji9rgib10mq2m634m41a67inspkrcw4qixig2lnb3ld"; + }; + }; + }; + "doctrine/orm" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-orm-434820973cadf2da2d66e7184be370084cc32ca8"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8; + sha256 = "114fyq8kaf5qzfkp8sdygqflf3z94va1cs5c3scycfpg9cmi4gls"; + }; + }; + }; + "doctrine/persistence" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-persistence-c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38; + sha256 = "0xdm5n38rjas1mlyxc15sg1as5h7y012mdb0j9lr6cvphgnaxxv7"; + }; + }; + }; + "doctrine/reflection" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-reflection-02538d3f95e88eb397a5f86274deb2c6175c2ab6"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6; + sha256 = "12n9zik4lxb9lx1jf0nbvg9vl9nv958a7z1yjx48scfxd1d1sxjy"; + }; + }; + }; + "gedmo/doctrine-extensions" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "gedmo-doctrine-extensions-87c78ff9fd4b90460386f753d95622f6fbbfcb27"; + src = fetchurl { + url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27; + sha256 = "0jfg0a19lhdv5b3c032ghknxhvc1f0x2n7fcwp47bm1rbz222q0z"; + }; + }; + }; + "giggsey/libphonenumber-for-php" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "giggsey-libphonenumber-for-php-a71f260c2efce10ded8af030a20fa13edfb0e9be"; + src = fetchurl { + url = https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/a71f260c2efce10ded8af030a20fa13edfb0e9be; + sha256 = "15id03c1msyhri7j4i63r535g3g56n3x99i8301as63w7m1ybfj5"; + }; + }; + }; + "giggsey/locale" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "giggsey-locale-da6845720b5d104d319d7e84576f54e44dd9e4f5"; + src = fetchurl { + url = https://api.github.com/repos/giggsey/Locale/zipball/da6845720b5d104d319d7e84576f54e44dd9e4f5; + sha256 = "0gc8im06h5l794a0drd74s3inps22jr1zr5wnw0b89m06d4nw42j"; + }; + }; + }; + "jdorn/sql-formatter" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; + src = fetchurl { + url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; + sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; + }; + }; + }; + "ocramius/package-versions" = { + targetDir = ""; + needsModifyRights = true; + src = composerEnv.buildZipPackage { + name = "ocramius-package-versions-4489d5002c49d55576fa0ba786f42dbb009be46f"; + src = fetchurl { + url = https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f; + sha256 = "039c404g9597x45xh04bnn8kmcyknkbnr57yb9s7vf29vfrg4881"; + }; + }; + }; + "ocramius/proxy-manager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "ocramius-proxy-manager-14b137b06b0f911944132df9d51e445a35920ab1"; + src = fetchurl { + url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1; + sha256 = "10y5msgh2jdlw4w075fasv40yq01szjy15m3f0wgc89hlfmqz0sn"; + }; + }; + }; + "opensoft/doctrine-postgres-types" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "opensoft-doctrine-postgres-types-7e69bdfeb2ae61c2f1e90872370cdf0135fb3006"; + src = fetchurl { + url = https://api.github.com/repos/opensoft/doctrine-postgres-types/zipball/7e69bdfeb2ae61c2f1e90872370cdf0135fb3006; + sha256 = "1v9rjq82dxnpnb6bir6irkj54324a02qlybayvq2gf2807241bjj"; + }; + }; + }; + "presta/sitemap-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "presta-sitemap-bundle-16a2c0eae7320e3647013e48026a6a6bd14f75df"; + src = fetchurl { + url = https://api.github.com/repos/prestaconcept/PrestaSitemapBundle/zipball/16a2c0eae7320e3647013e48026a6a6bd14f75df; + sha256 = "1hqh144awazafa2vpv091h9pyqrppbalcvzf9c1n6h387jwwj5l8"; + }; + }; + }; + "psr/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; + sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; + }; + }; + }; + "psr/container" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; + sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; + }; + }; + }; + "psr/log" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-log-6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd; + sha256 = "1i351p3gd1pgjcjxv7mwwkiw79f1xiqr38irq22156h05zlcx80d"; + }; + }; + }; + "psr/simple-cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; + sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; + }; + }; + }; + "sensio/framework-extra-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-framework-extra-bundle-1fdf591c4b388e62dbb2579de89c1560b33f865d"; + src = fetchurl { + url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/1fdf591c4b388e62dbb2579de89c1560b33f865d; + sha256 = "0hhw3lsvgm78rqphgmdrg2inc9997lwx0290x71hsixk08khnlb1"; + }; + }; + }; + "symfony/asset" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-asset-fb06338fd3762f8615b51a58e5e9299ccca03876"; + src = fetchurl { + url = https://api.github.com/repos/symfony/asset/zipball/fb06338fd3762f8615b51a58e5e9299ccca03876; + sha256 = "19fbnz2h4z5nxzcy8n3bfbcjwgncabwdlxh70qfkr7bswpsxr6p3"; + }; + }; + }; + "symfony/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-cache-5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41"; + src = fetchurl { + url = https://api.github.com/repos/symfony/cache/zipball/5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41; + sha256 = "1wn2rd3n5nj300vsygh60vbjh2k9lh7s9c3ayl614hahrfcfb29s"; + }; + }; + }; + "symfony/config" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-config-005d9a083d03f588677d15391a716b1ac9b887c0"; + src = fetchurl { + url = https://api.github.com/repos/symfony/config/zipball/005d9a083d03f588677d15391a716b1ac9b887c0; + sha256 = "1h20qhkzsl5xwzs3rg1yyaq5yn8rg92krfzmpmfgv7d3jp1v03as"; + }; + }; + }; + "symfony/console" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-console-4dff24e5d01e713818805c1862d2e3f901ee7dd0"; + src = fetchurl { + url = https://api.github.com/repos/symfony/console/zipball/4dff24e5d01e713818805c1862d2e3f901ee7dd0; + sha256 = "016l3hxcbvyxz3kkkynk12gi8949hl3x09dwsh0x5wqikgnp64c2"; + }; + }; + }; + "symfony/contracts" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-contracts-1aa7ab2429c3d594dd70689604b5cf7421254cdf"; + src = fetchurl { + url = https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf; + sha256 = "0jhav49lngmrjg4r5kdpmc7lhmasn2fzkmbvhw62l4i1vnm5r5bm"; + }; + }; + }; + "symfony/debug" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-debug-e0a2b92ee0b5b934f973d90c2f58e18af109d276"; + src = fetchurl { + url = https://api.github.com/repos/symfony/debug/zipball/e0a2b92ee0b5b934f973d90c2f58e18af109d276; + sha256 = "0yzyaprsrmbc93gzwr1wdjx05kin7b4hqy5w74zkcxyab09pan7f"; + }; + }; + }; + "symfony/dependency-injection" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-dependency-injection-e4adc57a48d3fa7f394edfffa9e954086d7740e5"; + src = fetchurl { + url = https://api.github.com/repos/symfony/dependency-injection/zipball/e4adc57a48d3fa7f394edfffa9e954086d7740e5; + sha256 = "0g8ssf7qm0jf0anvflp033xwdim9z4g73k3kz1vs3smw4pffl6nv"; + }; + }; + }; + "symfony/doctrine-bridge" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-doctrine-bridge-3466c911438e176c20e1943c529131889432d12f"; + src = fetchurl { + url = https://api.github.com/repos/symfony/doctrine-bridge/zipball/3466c911438e176c20e1943c529131889432d12f; + sha256 = "0qq644z7l9j9fyydlj68p9f43a9i20rnmxy8pkq5sn4r0yn06bb8"; + }; + }; + }; + "symfony/event-dispatcher" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-event-dispatcher-921f49c3158a276d27c0d770a5a347a3b718b328"; + src = fetchurl { + url = https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328; + sha256 = "05i8syqbzhh11cf2i9d64s8b5x41mfsribfa62rvc0mhbqk7ifzf"; + }; + }; + }; + "symfony/filesystem" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-filesystem-2f4c8b999b3b7cadb2a69390b01af70886753710"; + src = fetchurl { + url = https://api.github.com/repos/symfony/filesystem/zipball/2f4c8b999b3b7cadb2a69390b01af70886753710; + sha256 = "1gi14q8gf250a3rzmr6arb08ljpzpfg868vm0z21fgmf0zh0dqr6"; + }; + }; + }; + "symfony/finder" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-finder-e53d477d7b5c4982d0e1bfd2298dbee63d01441d"; + src = fetchurl { + url = https://api.github.com/repos/symfony/finder/zipball/e53d477d7b5c4982d0e1bfd2298dbee63d01441d; + sha256 = "1mpxwgvfqzng36xbdvda6nk1zidyr9dgswccmr4z15k0i9gi0qsj"; + }; + }; + }; + "symfony/flex" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-flex-955774ecf07b10230bb5b44e150ba078b45f68fa"; + src = fetchurl { + url = https://api.github.com/repos/symfony/flex/zipball/955774ecf07b10230bb5b44e150ba078b45f68fa; + sha256 = "069v1s810mq5kqvx68x87lmlz0h9b2kgla1znnibnbh6j6k4qg6d"; + }; + }; + }; + "symfony/form" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-form-5ab767b7732154ca6f45c92e30e081178edf30ad"; + src = fetchurl { + url = https://api.github.com/repos/symfony/form/zipball/5ab767b7732154ca6f45c92e30e081178edf30ad; + sha256 = "1g65a7hl1kk6rpa6q52fyzy6vkjafr3233hi2qiggyp0qys20kcc"; + }; + }; + }; + "symfony/framework-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-framework-bundle-eb32d67140510f04fe9cc5fb9ad38fda09591db1"; + src = fetchurl { + url = https://api.github.com/repos/symfony/framework-bundle/zipball/eb32d67140510f04fe9cc5fb9ad38fda09591db1; + sha256 = "06dpqppwyngq1frww0q0zjs0gj8na0fi67czlhqf2x2lizgz6wjd"; + }; + }; + }; + "symfony/http-foundation" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-http-foundation-1b31f3017fadd8cb05cf2c8aebdbf3b12a943851"; + src = fetchurl { + url = https://api.github.com/repos/symfony/http-foundation/zipball/1b31f3017fadd8cb05cf2c8aebdbf3b12a943851; + sha256 = "0s6mx79gl6sp39bk8213xcdzx4ld5xim38s8lckm7wqnkvx94mfl"; + }; + }; + }; + "symfony/http-kernel" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-http-kernel-b39ceffc0388232c309cbde3a7c3685f2ec0a624"; + src = fetchurl { + url = https://api.github.com/repos/symfony/http-kernel/zipball/b39ceffc0388232c309cbde3a7c3685f2ec0a624; + sha256 = "17rb1hl9r8rlqw1cv9qx2ckvz81g2ylppirq035mya1a848y5ym5"; + }; + }; + }; + "symfony/inflector" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-inflector-f9a637c0359f74404d44cf0da0a3ce53bae0787e"; + src = fetchurl { + url = https://api.github.com/repos/symfony/inflector/zipball/f9a637c0359f74404d44cf0da0a3ce53bae0787e; + sha256 = "1sp1pk716biyplqpakcpq71ik2h2m1bvsz9cfj9zd63y2723xna3"; + }; + }; + }; + "symfony/intl" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-intl-748a1c54903344385f88fef75da293915b16a207"; + src = fetchurl { + url = https://api.github.com/repos/symfony/intl/zipball/748a1c54903344385f88fef75da293915b16a207; + sha256 = "1vwa2n7fglxs8rv1yrbxn6vgizg73asimg794igk27i90xdybfmc"; + }; + }; + }; + "symfony/lts" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-lts-c1affae45b78aee036effa1759237e7fa96d4af2"; + src = fetchurl { + url = https://api.github.com/repos/symfony/lts/zipball/c1affae45b78aee036effa1759237e7fa96d4af2; + sha256 = "0vk9pn4xl7ascvllak0gschdd1w2mxma3ng04j3r1n13zccxc33s"; + }; + }; + }; + "symfony/options-resolver" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-options-resolver-a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba"; + src = fetchurl { + url = https://api.github.com/repos/symfony/options-resolver/zipball/a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba; + sha256 = "1fjjlp09mwkjcxg98bihqlq4miq24k13691051f5p39lcy03zmb3"; + }; + }; + }; + "symfony/orm-pack" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-orm-pack-1b58f752cd917a08c9c8df020781d9c46a2275b1"; + src = fetchurl { + url = https://api.github.com/repos/symfony/orm-pack/zipball/1b58f752cd917a08c9c8df020781d9c46a2275b1; + sha256 = "1sk8jchaw29lmpq76yb24mc1csmifnkvbjdrgjdgqs6x5i39plli"; + }; + }; + }; + "symfony/polyfill-intl-icu" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-intl-icu-f22a90256d577c7ef7efad8df1f0201663d57644"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644; + sha256 = "0x7h8l248l1gc07xmvfixq6p80ifdaa29qympfq3jzfb79k69slq"; + }; + }; + }; + "symfony/polyfill-mbstring" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-mbstring-c79c051f5b3a46be09205c73b80b346e4153e494"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494; + sha256 = "18v2777cky55ah6xi4dh383mp4iddwzmnvx81qd86y1kgfykwhpi"; + }; + }; + }; + "symfony/property-access" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-property-access-b6df4e1849f389468edb36e2e59877d4a8170723"; + src = fetchurl { + url = https://api.github.com/repos/symfony/property-access/zipball/b6df4e1849f389468edb36e2e59877d4a8170723; + sha256 = "16pbnv3x56gp5wxakmbphf3d4igkjyr3v693n3cjm62h72z4dxf3"; + }; + }; + }; + "symfony/routing" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-routing-649460207e77da6c545326c7f53618d23ad2c866"; + src = fetchurl { + url = https://api.github.com/repos/symfony/routing/zipball/649460207e77da6c545326c7f53618d23ad2c866; + sha256 = "1qjkgghs0kp4lk4711d3gx26vvilrrrjbbz02navzfqy4xjrf0sw"; + }; + }; + }; + "symfony/translation" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-translation-c0e2191e9bed845946ab3d99767513b56ca7dcd6"; + src = fetchurl { + url = https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6; + sha256 = "0gzq7f2izsiam9blha85bzvg7x6zc4f3x3bkwhzma6x6ipjfkla2"; + }; + }; + }; + "symfony/twig-bridge" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-twig-bridge-2e928d6c8244e7f3b32bcfac5814095a83179e60"; + src = fetchurl { + url = https://api.github.com/repos/symfony/twig-bridge/zipball/2e928d6c8244e7f3b32bcfac5814095a83179e60; + sha256 = "1f902j8b0lyqjss9r2mf7j63apv5z8ki57vmcdcw5jlqagbmw1y1"; + }; + }; + }; + "symfony/twig-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-twig-bundle-024820cbb4aeffc4843c4170b69c057fb4840fb3"; + src = fetchurl { + url = https://api.github.com/repos/symfony/twig-bundle/zipball/024820cbb4aeffc4843c4170b69c057fb4840fb3; + sha256 = "1qqfpxw228lc024whpr4j6aa6k9ly290nxz9c9ds826lllg2l1zh"; + }; + }; + }; + "symfony/validator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-validator-cd35bb14a0e81bd99835e36cac4db1e72ad1939b"; + src = fetchurl { + url = https://api.github.com/repos/symfony/validator/zipball/cd35bb14a0e81bd99835e36cac4db1e72ad1939b; + sha256 = "1809yz483mv5mmrw14v3b371dmjab7i455gxkrqm0z8n0wjdn6i3"; + }; + }; + }; + "symfony/var-exporter" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-var-exporter-a39222e357362424b61dcde50e2f7b5a7d3306db"; + src = fetchurl { + url = https://api.github.com/repos/symfony/var-exporter/zipball/a39222e357362424b61dcde50e2f7b5a7d3306db; + sha256 = "1ys2sc3ivgfxq7kj8cydxqh5179d3niqxsy10lgg18c5a6bsj41j"; + }; + }; + }; + "symfony/webpack-encore-pack" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-webpack-encore-pack-8d7f51379d7ae17aea7cf501d910a11896895ac4"; + src = fetchurl { + url = https://api.github.com/repos/symfony/webpack-encore-pack/zipball/8d7f51379d7ae17aea7cf501d910a11896895ac4; + sha256 = "0k6xavcyihx45dsrm1r2r1lbn7vryy463akz66w4gycx5dcqrw0j"; + }; + }; + }; + "symfony/yaml" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-yaml-c41175c801e3edfda90f32e292619d10c27103d7"; + src = fetchurl { + url = https://api.github.com/repos/symfony/yaml/zipball/c41175c801e3edfda90f32e292619d10c27103d7; + sha256 = "0bh9365mmvzhdk1m0b1xarlg0swx9pv916m7xifcmdrxn67w552p"; + }; + }; + }; + "twig/twig" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "twig-twig-a11dd39f5b6589e14f0ff3b36675d06047c589b1"; + src = fetchurl { + url = https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1; + sha256 = "0rnwam9379gj5m4ik0fh6c81dbr7kwj2b3x1gnmpf6awa5fm261n"; + }; + }; + }; + "zendframework/zend-code" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-code-c21db169075c6ec4b342149f446e7b7b724f95eb"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb; + sha256 = "031mfsahjkl63348020wq05273kvszx0dv2766zmzncnd6fcggw1"; + }; + }; + }; + "zendframework/zend-eventmanager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd; + sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; + }; + }; + }; + }; + devPackages = { + "nikic/php-parser" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "nikic-php-parser-8aae5b59b83bb4d0dbf07b0a835f2680a658f610"; + src = fetchurl { + url = https://api.github.com/repos/nikic/PHP-Parser/zipball/8aae5b59b83bb4d0dbf07b0a835f2680a658f610; + sha256 = "103ix4bsvrwyc4wxh9cqd38xffn25kq3phnpgk8b3z7dqvvr2pss"; + }; + }; + }; + "symfony/dotenv" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-dotenv-97f135ab40f969cbeae27d482ff63acbc33dbe2a"; + src = fetchurl { + url = https://api.github.com/repos/symfony/dotenv/zipball/97f135ab40f969cbeae27d482ff63acbc33dbe2a; + sha256 = "1jwpxb4w0mi5p89k51l1g84hnnj9s8kjl9jsx3xj39hhc3dy44pc"; + }; + }; + }; + "symfony/maker-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-maker-bundle-24b19cccad0c658eca516b35b08668d123fabf92"; + src = fetchurl { + url = https://api.github.com/repos/symfony/maker-bundle/zipball/24b19cccad0c658eca516b35b08668d123fabf92; + sha256 = "1wm17jl3gk0m5ma7nz40y7ryxgm0qncrxcrqdqg5x6afwla85grp"; + }; + }; + }; + "symfony/polyfill-php72" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php72-9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631; + sha256 = "1smd08fw64mf89s9ma099ayfjlz26wrix9hfr6kh5w4d0rzrhmlw"; + }; + }; + }; + "symfony/profiler-pack" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-profiler-pack-99c4370632c2a59bb0444852f92140074ef02209"; + src = fetchurl { + url = https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209; + sha256 = "12xisnrqq6q5l0v8bric0p23bsaxh50x43fq7wn2adnsz24nv9pi"; + }; + }; + }; + "symfony/stopwatch" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-stopwatch-ec076716412274e51f8a7ea675d9515e5c311123"; + src = fetchurl { + url = https://api.github.com/repos/symfony/stopwatch/zipball/ec076716412274e51f8a7ea675d9515e5c311123; + sha256 = "0fzh2bh7lm8f222hk5ihfkpi697babfrz1r0dghlws17hfbgzgax"; + }; + }; + }; + "symfony/var-dumper" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-var-dumper-db61258540350725f4beb6b84006e32398acd120"; + src = fetchurl { + url = https://api.github.com/repos/symfony/var-dumper/zipball/db61258540350725f4beb6b84006e32398acd120; + sha256 = "0pw3hf4mcc1q9miswrjbgr32x0a2dfjvpi16pjzw173xmf79i4iz"; + }; + }; + }; + "symfony/web-profiler-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-web-profiler-bundle-198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08"; + src = fetchurl { + url = https://api.github.com/repos/symfony/web-profiler-bundle/zipball/198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08; + sha256 = "0r4r3zf22860mdx8b2l72ghz8liyi3l39cc1934b2lkh2kghlsi6"; + }; + }; + }; + }; +} diff --git a/pkgs/private/webapps/aten/yarn-packages.nix b/pkgs/private/webapps/aten/yarn-packages.nix new file mode 100644 index 00000000..c16d9dcc --- /dev/null +++ b/pkgs/private/webapps/aten/yarn-packages.nix @@ -0,0 +1,7871 @@ +{fetchurl, linkFarm}: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + + { + name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz"; + path = fetchurl { + name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz"; + url = "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.19.0.tgz"; + sha1 = "f0725dbbede5ff9d9fdbd7a07f84accafc83ca14"; + }; + } + + { + name = "_types_node___node_10.5.3.tgz"; + path = fetchurl { + name = "_types_node___node_10.5.3.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-10.5.3.tgz"; + sha1 = "5bcfaf088ad17894232012877669634c06b20cc5"; + }; + } + + { + name = "_types_tapable___tapable_0.2.5.tgz"; + path = fetchurl { + name = "_types_tapable___tapable_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz"; + sha1 = "2443fc12da514c81346b1a665675559cee21fa75"; + }; + } + + { + name = "_types_uglify_js___uglify_js_3.0.3.tgz"; + path = fetchurl { + name = "_types_uglify_js___uglify_js_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.3.tgz"; + sha1 = "801a5ca1dc642861f47c46d14b700ed2d610840b"; + }; + } + + { + name = "_types_webpack___webpack_3.8.14.tgz"; + path = fetchurl { + name = "_types_webpack___webpack_3.8.14.tgz"; + url = "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.14.tgz"; + sha1 = "e2bfdf7f604b3f7dc776eaa17446d7f7538f3de7"; + }; + } + + { + name = "abbrev___abbrev_1.1.1.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz"; + sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8"; + }; + } + + { + name = "accepts___accepts_1.3.5.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz"; + sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2"; + }; + } + + { + name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz"; + path = fetchurl { + name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz"; + sha1 = "c752bd210bef679501b6c6cb7fc84f8f47158cc4"; + }; + } + + { + name = "acorn___acorn_4.0.13.tgz"; + path = fetchurl { + name = "acorn___acorn_4.0.13.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz"; + sha1 = "105495ae5361d697bd195c825192e1ad7f253787"; + }; + } + + { + name = "acorn___acorn_5.7.1.tgz"; + path = fetchurl { + name = "acorn___acorn_5.7.1.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz"; + sha1 = "f095829297706a7c9776958c0afc8930a9b9d9d8"; + }; + } + + { + name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz"; + path = fetchurl { + name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz"; + sha1 = "e33fde95e50db9f2a802e3647e311d2fc5000c69"; + }; + } + + { + name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; + path = fetchurl { + name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz"; + sha1 = "e86b819c602cf8821ad637413698f1dec021847a"; + }; + } + + { + name = "ajv___ajv_4.11.8.tgz"; + path = fetchurl { + name = "ajv___ajv_4.11.8.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz"; + sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; + }; + } + + { + name = "ajv___ajv_5.5.2.tgz"; + path = fetchurl { + name = "ajv___ajv_5.5.2.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz"; + sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965"; + }; + } + + { + name = "ajv___ajv_6.5.2.tgz"; + path = fetchurl { + name = "ajv___ajv_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz"; + sha1 = "678495f9b82f7cca6be248dd92f59bff5e1f4360"; + }; + } + + { + name = "align_text___align_text_0.1.4.tgz"; + path = fetchurl { + name = "align_text___align_text_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz"; + sha1 = "0cd90a561093f35d0a99256c22b7069433fad117"; + }; + } + + { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + path = fetchurl { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; + sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; + }; + } + + { + name = "amdefine___amdefine_1.0.1.tgz"; + path = fetchurl { + name = "amdefine___amdefine_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz"; + sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5"; + }; + } + + { + name = "ansi_html___ansi_html_0.0.7.tgz"; + path = fetchurl { + name = "ansi_html___ansi_html_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"; + sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e"; + }; + } + + { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + } + + { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + } + + { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + } + + { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d"; + }; + } + + { + name = "anymatch___anymatch_2.0.0.tgz"; + path = fetchurl { + name = "anymatch___anymatch_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"; + sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"; + }; + } + + { + name = "aproba___aproba_1.2.0.tgz"; + path = fetchurl { + name = "aproba___aproba_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; + sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; + }; + } + + { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + path = fetchurl { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; + sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21"; + }; + } + + { + name = "argparse___argparse_1.0.10.tgz"; + path = fetchurl { + name = "argparse___argparse_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; + sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; + }; + } + + { + name = "arr_diff___arr_diff_2.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz"; + sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf"; + }; + } + + { + name = "arr_diff___arr_diff_4.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + } + + { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + path = fetchurl { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; + }; + } + + { + name = "arr_union___arr_union_3.1.0.tgz"; + path = fetchurl { + name = "arr_union___arr_union_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + } + + { + name = "array_find_index___array_find_index_1.0.2.tgz"; + path = fetchurl { + name = "array_find_index___array_find_index_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz"; + sha1 = "df010aa1287e164bbda6f9723b0a96a1ec4187a1"; + }; + } + + { + name = "array_flatten___array_flatten_1.1.1.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + } + + { + name = "array_flatten___array_flatten_2.1.1.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz"; + sha1 = "426bb9da84090c1838d812c8150af20a8331e296"; + }; + } + + { + name = "array_includes___array_includes_3.0.3.tgz"; + path = fetchurl { + name = "array_includes___array_includes_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz"; + sha1 = "184b48f62d92d7452bb31b323165c7f8bd02266d"; + }; + } + + { + name = "array_union___array_union_1.0.2.tgz"; + path = fetchurl { + name = "array_union___array_union_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + } + + { + name = "array_uniq___array_uniq_1.0.3.tgz"; + path = fetchurl { + name = "array_uniq___array_uniq_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + } + + { + name = "array_unique___array_unique_0.2.1.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz"; + sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53"; + }; + } + + { + name = "array_unique___array_unique_0.3.2.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + } + + { + name = "asn1.js___asn1.js_4.10.1.tgz"; + path = fetchurl { + name = "asn1.js___asn1.js_4.10.1.tgz"; + url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz"; + sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"; + }; + } + + { + name = "asn1___asn1_0.2.3.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz"; + sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86"; + }; + } + + { + name = "assert_plus___assert_plus_1.0.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + } + + { + name = "assert_plus___assert_plus_0.2.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz"; + sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234"; + }; + } + + { + name = "assert___assert_1.4.1.tgz"; + path = fetchurl { + name = "assert___assert_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz"; + sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91"; + }; + } + + { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + path = fetchurl { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + } + + { + name = "async_each___async_each_1.0.1.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz"; + sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d"; + }; + } + + { + name = "async_foreach___async_foreach_0.1.3.tgz"; + path = fetchurl { + name = "async_foreach___async_foreach_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz"; + sha1 = "36121f845c0578172de419a97dbeb1d16ec34542"; + }; + } + + { + name = "async___async_1.5.2.tgz"; + path = fetchurl { + name = "async___async_1.5.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz"; + sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; + }; + } + + { + name = "async___async_2.6.1.tgz"; + path = fetchurl { + name = "async___async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz"; + sha1 = "b245a23ca71930044ec53fa46aa00a3e87c6a610"; + }; + } + + { + name = "asynckit___asynckit_0.4.0.tgz"; + path = fetchurl { + name = "asynckit___asynckit_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + } + + { + name = "atob___atob_2.1.1.tgz"; + path = fetchurl { + name = "atob___atob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz"; + sha1 = "ae2d5a729477f289d60dd7f96a6314a22dd6c22a"; + }; + } + + { + name = "autoprefixer___autoprefixer_6.7.7.tgz"; + path = fetchurl { + name = "autoprefixer___autoprefixer_6.7.7.tgz"; + url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz"; + sha1 = "1dbd1c835658e35ce3f9984099db00585c782014"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.6.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz"; + sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + } + + { + name = "aws4___aws4_1.7.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz"; + sha1 = "d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"; + }; + } + + { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + path = fetchurl { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; + sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; + }; + } + + { + name = "babel_core___babel_core_6.26.3.tgz"; + path = fetchurl { + name = "babel_core___babel_core_6.26.3.tgz"; + url = "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz"; + sha1 = "b2e2f09e342d0f0c88e2f02e067794125e75c207"; + }; + } + + { + name = "babel_generator___babel_generator_6.26.1.tgz"; + path = fetchurl { + name = "babel_generator___babel_generator_6.26.1.tgz"; + url = "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz"; + sha1 = "1844408d3b8f0d35a404ea7ac180f087a601bd90"; + }; + } + + { + name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz"; + sha1 = "cce4517ada356f4220bcae8a02c2b346f9a56664"; + }; + } + + { + name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz"; + sha1 = "ece6aacddc76e41c3461f88bfc575bd0daa2df8d"; + }; + } + + { + name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz"; + path = fetchurl { + name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz"; + sha1 = "a5f56dab41a25f97ecb498c7ebaca9819f95be5f"; + }; + } + + { + name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz"; + sha1 = "f25b82cf7dc10433c55f70592d5746400ac22caa"; + }; + } + + { + name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz"; + sha1 = "d3475b8c03ed98242a25b48351ab18399d3580a9"; + }; + } + + { + name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz"; + sha1 = "8f7782aa93407c41d3aa50908f89b031b1b6853d"; + }; + } + + { + name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz"; + sha1 = "1ecb27689c9d25513eadbc9914a73f5408be7a76"; + }; + } + + { + name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz"; + sha1 = "f7a13427ba9f73f8f4fa993c54a97882d1244257"; + }; + } + + { + name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz"; + path = fetchurl { + name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz"; + sha1 = "325c59f902f82f24b74faceed0363954f6495e72"; + }; + } + + { + name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz"; + sha1 = "5ec581827ad723fecdd381f1c928390676e4551b"; + }; + } + + { + name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz"; + path = fetchurl { + name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz"; + sha1 = "bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"; + }; + } + + { + name = "babel_helpers___babel_helpers_6.24.1.tgz"; + path = fetchurl { + name = "babel_helpers___babel_helpers_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz"; + sha1 = "3471de9caec388e5c850e597e58a26ddf37602b2"; + }; + } + + { + name = "babel_loader___babel_loader_7.1.5.tgz"; + path = fetchurl { + name = "babel_loader___babel_loader_7.1.5.tgz"; + url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz"; + sha1 = "e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"; + }; + } + + { + name = "babel_messages___babel_messages_6.23.0.tgz"; + path = fetchurl { + name = "babel_messages___babel_messages_6.23.0.tgz"; + url = "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz"; + sha1 = "f3cdf4703858035b2a2951c6ec5edf6c62f2630e"; + }; + } + + { + name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz"; + sha1 = "35157b101426fd2ffd3da3f75c7d1e91835bbf8a"; + }; + } + + { + name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz"; + sha1 = "cad9cad1191b5ad634bf30ae0872391e0647be95"; + }; + } + + { + name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz"; + sha1 = "9ee7e8337290da95288201a6a57f4170317830de"; + }; + } + + { + name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz"; + sha1 = "ba0360937f8d06e40180a43fe0d5616fff532cf3"; + }; + } + + { + name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz"; + sha1 = "6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"; + }; + } + + { + name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz"; + sha1 = "452692cb711d5f79dc7f85e440ce41b9f244d221"; + }; + } + + { + name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz"; + sha1 = "bbc51b49f964d70cb8d8e0b94e820246ce3a6141"; + }; + } + + { + name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz"; + sha1 = "d70f5299c1308d05c12f463813b0a09e73b1895f"; + }; + } + + { + name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz"; + sha1 = "5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"; + }; + } + + { + name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz"; + sha1 = "6fe2a8d16895d5634f4cd999b6d3480a308159b3"; + }; + } + + { + name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz"; + sha1 = "997bb1f1ab967f682d2b0876fe358d60e765c56d"; + }; + } + + { + name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz"; + sha1 = "73eb3d310ca969e3ef9ec91c53741a6f1576423e"; + }; + } + + { + name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz"; + sha1 = "f47c95b2b613df1d3ecc2fdb7573623c75248691"; + }; + } + + { + name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz"; + sha1 = "834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"; + }; + } + + { + name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz"; + sha1 = "4f54a02d6cd66cf915280019a31d31925377ca2e"; + }; + } + + { + name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz"; + sha1 = "3b3e54017239842d6d19c3011c4bd2f00a00d154"; + }; + } + + { + name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz"; + sha1 = "58a793863a9e7ca870bdc5a881117ffac27db6f3"; + }; + } + + { + name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz"; + sha1 = "ff89a142b9119a906195f5f106ecf305d9407d23"; + }; + } + + { + name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz"; + sha1 = "ac997e6285cd18ed6176adb607d602344ad38468"; + }; + } + + { + name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz"; + sha1 = "24cef69ae21cb83a7f8603dad021f572eb278f8d"; + }; + } + + { + name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz"; + sha1 = "57ac351ab49caf14a97cd13b09f66fdf0a625f2b"; + }; + } + + { + name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz"; + sha1 = "24f875d6721c87661bbd99a4622e51f14de38aa0"; + }; + } + + { + name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz"; + sha1 = "d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"; + }; + } + + { + name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz"; + sha1 = "00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"; + }; + } + + { + name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz"; + sha1 = "a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"; + }; + } + + { + name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz"; + sha1 = "dec09f1cddff94b52ac73d505c84df59dcceb372"; + }; + } + + { + name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz"; + sha1 = "d38b12f42ea7323f729387f18a7c5ae1faeb35e9"; + }; + } + + { + name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz"; + sha1 = "2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"; + }; + } + + { + name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz"; + path = fetchurl { + name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz"; + sha1 = "e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"; + }; + } + + { + name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz"; + path = fetchurl { + name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz"; + sha1 = "d5faf7aa578a65bbe591cf5edae04a0c67020758"; + }; + } + + { + name = "babel_preset_env___babel_preset_env_1.7.0.tgz"; + path = fetchurl { + name = "babel_preset_env___babel_preset_env_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz"; + sha1 = "dea79fa4ebeb883cd35dab07e260c1c9c04df77a"; + }; + } + + { + name = "babel_register___babel_register_6.26.0.tgz"; + path = fetchurl { + name = "babel_register___babel_register_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz"; + sha1 = "6ed021173e2fcb486d7acb45c6009a856f647071"; + }; + } + + { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + path = fetchurl { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"; + sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; + }; + } + + { + name = "babel_template___babel_template_6.26.0.tgz"; + path = fetchurl { + name = "babel_template___babel_template_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz"; + sha1 = "de03e2d16396b069f46dd9fff8521fb1a0e35e02"; + }; + } + + { + name = "babel_traverse___babel_traverse_6.26.0.tgz"; + path = fetchurl { + name = "babel_traverse___babel_traverse_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz"; + sha1 = "46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"; + }; + } + + { + name = "babel_types___babel_types_6.26.0.tgz"; + path = fetchurl { + name = "babel_types___babel_types_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz"; + sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497"; + }; + } + + { + name = "babylon___babylon_6.18.0.tgz"; + path = fetchurl { + name = "babylon___babylon_6.18.0.tgz"; + url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"; + sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"; + }; + } + + { + name = "balanced_match___balanced_match_0.4.2.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_0.4.2.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz"; + sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838"; + }; + } + + { + name = "balanced_match___balanced_match_1.0.0.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + } + + { + name = "base64_js___base64_js_1.3.0.tgz"; + path = fetchurl { + name = "base64_js___base64_js_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz"; + sha1 = "cab1e6118f051095e58b5281aea8c1cd22bfc0e3"; + }; + } + + { + name = "base___base_0.11.2.tgz"; + path = fetchurl { + name = "base___base_0.11.2.tgz"; + url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; + sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; + }; + } + + { + name = "batch___batch_0.6.1.tgz"; + path = fetchurl { + name = "batch___batch_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"; + sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; + }; + } + + { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + path = fetchurl { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + } + + { + name = "big.js___big.js_3.2.0.tgz"; + path = fetchurl { + name = "big.js___big.js_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz"; + sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e"; + }; + } + + { + name = "binary_extensions___binary_extensions_1.11.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.11.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz"; + sha1 = "46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"; + }; + } + + { + name = "block_stream___block_stream_0.0.9.tgz"; + path = fetchurl { + name = "block_stream___block_stream_0.0.9.tgz"; + url = "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz"; + sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; + }; + } + + { + name = "bn.js___bn.js_4.11.8.tgz"; + path = fetchurl { + name = "bn.js___bn.js_4.11.8.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz"; + sha1 = "2cde09eb5ee341f484746bb0309b3253b1b1442f"; + }; + } + + { + name = "body_parser___body_parser_1.18.2.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.18.2.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz"; + sha1 = "87678a19d84b47d859b83199bd59bce222b10454"; + }; + } + + { + name = "bonjour___bonjour_3.5.0.tgz"; + path = fetchurl { + name = "bonjour___bonjour_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"; + sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"; + }; + } + + { + name = "boolbase___boolbase_1.0.0.tgz"; + path = fetchurl { + name = "boolbase___boolbase_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"; + sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; + }; + } + + { + name = "boom___boom_2.10.1.tgz"; + path = fetchurl { + name = "boom___boom_2.10.1.tgz"; + url = "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz"; + sha1 = "39c8918ceff5799f83f9492a848f625add0c766f"; + }; + } + + { + name = "bootstrap___bootstrap_4.1.3.tgz"; + path = fetchurl { + name = "bootstrap___bootstrap_4.1.3.tgz"; + url = "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.3.tgz"; + sha1 = "0eb371af2c8448e8c210411d0cb824a6409a12be"; + }; + } + + { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + path = fetchurl { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; + }; + } + + { + name = "braces___braces_1.8.5.tgz"; + path = fetchurl { + name = "braces___braces_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz"; + sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7"; + }; + } + + { + name = "braces___braces_2.3.2.tgz"; + path = fetchurl { + name = "braces___braces_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; + sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; + }; + } + + { + name = "brorand___brorand_1.1.0.tgz"; + path = fetchurl { + name = "brorand___brorand_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + } + + { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + path = fetchurl { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"; + sha1 = "326734642f403dabc3003209853bb70ad428ef48"; + }; + } + + { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + path = fetchurl { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; + sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"; + }; + } + + { + name = "browserify_des___browserify_des_1.0.2.tgz"; + path = fetchurl { + name = "browserify_des___browserify_des_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"; + sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c"; + }; + } + + { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + path = fetchurl { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; + sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; + }; + } + + { + name = "browserify_sign___browserify_sign_4.0.4.tgz"; + path = fetchurl { + name = "browserify_sign___browserify_sign_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz"; + sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"; + }; + } + + { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + path = fetchurl { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; + sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"; + }; + } + + { + name = "browserslist___browserslist_1.7.7.tgz"; + path = fetchurl { + name = "browserslist___browserslist_1.7.7.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz"; + sha1 = "0bd76704258be829b2398bb50e4b62d1a166b0b9"; + }; + } + + { + name = "browserslist___browserslist_3.2.8.tgz"; + path = fetchurl { + name = "browserslist___browserslist_3.2.8.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz"; + sha1 = "b0005361d6471f0f5952797a76fc985f1f978fc6"; + }; + } + + { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + path = fetchurl { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"; + sha1 = "52fabcc6a606d1a00302802648ef68f639da268c"; + }; + } + + { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + path = fetchurl { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"; + sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; + }; + } + + { + name = "buffer___buffer_4.9.1.tgz"; + path = fetchurl { + name = "buffer___buffer_4.9.1.tgz"; + url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz"; + sha1 = "6d1bb601b07a4efced97094132093027c95bc298"; + }; + } + + { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + path = fetchurl { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz"; + sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f"; + }; + } + + { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + path = fetchurl { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; + sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; + }; + } + + { + name = "bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + } + + { + name = "cache_base___cache_base_1.0.1.tgz"; + path = fetchurl { + name = "cache_base___cache_base_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; + sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; + }; + } + + { + name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; + path = fetchurl { + name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz"; + sha1 = "308beeaffdf28119051efa1d932213c91b8f92e7"; + }; + } + + { + name = "camelcase___camelcase_1.2.1.tgz"; + path = fetchurl { + name = "camelcase___camelcase_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz"; + sha1 = "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"; + }; + } + + { + name = "camelcase___camelcase_2.1.1.tgz"; + path = fetchurl { + name = "camelcase___camelcase_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz"; + sha1 = "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"; + }; + } + + { + name = "camelcase___camelcase_3.0.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz"; + sha1 = "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"; + }; + } + + { + name = "camelcase___camelcase_4.1.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz"; + sha1 = "d545635be1e33c542649c69173e5de6acfae34dd"; + }; + } + + { + name = "caniuse_api___caniuse_api_1.6.1.tgz"; + path = fetchurl { + name = "caniuse_api___caniuse_api_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz"; + sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"; + }; + } + + { + name = "caniuse_db___caniuse_db_1.0.30000871.tgz"; + path = fetchurl { + name = "caniuse_db___caniuse_db_1.0.30000871.tgz"; + url = "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000871.tgz"; + sha1 = "f1995c1fe31892649a7605957a80c92518423d4d"; + }; + } + + { + name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz"; + path = fetchurl { + name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz"; + url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz"; + sha1 = "70026616e8afe6e1442f8bb4e1092987d81a2f25"; + }; + } + + { + name = "caseless___caseless_0.12.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + } + + { + name = "center_align___center_align_0.1.3.tgz"; + path = fetchurl { + name = "center_align___center_align_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz"; + sha1 = "aa0d32629b6ee972200411cbd4461c907bc2b7ad"; + }; + } + + { + name = "chalk___chalk_1.1.3.tgz"; + path = fetchurl { + name = "chalk___chalk_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + } + + { + name = "chalk___chalk_2.4.1.tgz"; + path = fetchurl { + name = "chalk___chalk_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz"; + sha1 = "18c49ab16a037b6eb0152cc83e3471338215b66e"; + }; + } + + { + name = "chokidar___chokidar_2.0.4.tgz"; + path = fetchurl { + name = "chokidar___chokidar_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz"; + sha1 = "356ff4e2b0e8e43e322d18a372460bbcf3accd26"; + }; + } + + { + name = "chownr___chownr_1.0.1.tgz"; + path = fetchurl { + name = "chownr___chownr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz"; + sha1 = "e2a75042a9551908bebd25b8523d5f9769d79181"; + }; + } + + { + name = "cipher_base___cipher_base_1.0.4.tgz"; + path = fetchurl { + name = "cipher_base___cipher_base_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"; + sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de"; + }; + } + + { + name = "clap___clap_1.2.3.tgz"; + path = fetchurl { + name = "clap___clap_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz"; + sha1 = "4f36745b32008492557f46412d66d50cb99bce51"; + }; + } + + { + name = "class_utils___class_utils_0.3.6.tgz"; + path = fetchurl { + name = "class_utils___class_utils_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; + sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; + }; + } + + { + name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz"; + path = fetchurl { + name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz"; + url = "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz"; + sha1 = "ceda8bb96b00fe168e9b080272960d20fdcadd6d"; + }; + } + + { + name = "cliui___cliui_2.1.0.tgz"; + path = fetchurl { + name = "cliui___cliui_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz"; + sha1 = "4b475760ff80264c762c3a1719032e91c7fea0d1"; + }; + } + + { + name = "cliui___cliui_3.2.0.tgz"; + path = fetchurl { + name = "cliui___cliui_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz"; + sha1 = "120601537a916d29940f934da3b48d585a39213d"; + }; + } + + { + name = "clone_deep___clone_deep_2.0.2.tgz"; + path = fetchurl { + name = "clone_deep___clone_deep_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz"; + sha1 = "00db3a1e173656730d1188c3d6aced6d7ea97713"; + }; + } + + { + name = "clone___clone_1.0.4.tgz"; + path = fetchurl { + name = "clone___clone_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + } + + { + name = "co___co_4.6.0.tgz"; + path = fetchurl { + name = "co___co_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"; + sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; + }; + } + + { + name = "coa___coa_1.0.4.tgz"; + path = fetchurl { + name = "coa___coa_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz"; + sha1 = "a9ef153660d6a86a8bdec0289a5c684d217432fd"; + }; + } + + { + name = "code_point_at___code_point_at_1.1.0.tgz"; + path = fetchurl { + name = "code_point_at___code_point_at_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + } + + { + name = "collection_visit___collection_visit_1.0.0.tgz"; + path = fetchurl { + name = "collection_visit___collection_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + } + + { + name = "color_convert___color_convert_1.9.2.tgz"; + path = fetchurl { + name = "color_convert___color_convert_1.9.2.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz"; + sha1 = "49881b8fba67df12a96bdf3f56c0aab9e7913147"; + }; + } + + { + name = "color_name___color_name_1.1.1.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz"; + sha1 = "4b1415304cf50028ea81643643bd82ea05803689"; + }; + } + + { + name = "color_name___color_name_1.1.3.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + } + + { + name = "color_string___color_string_0.3.0.tgz"; + path = fetchurl { + name = "color_string___color_string_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz"; + sha1 = "27d46fb67025c5c2fa25993bfbf579e47841b991"; + }; + } + + { + name = "color___color_0.11.4.tgz"; + path = fetchurl { + name = "color___color_0.11.4.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz"; + sha1 = "6d7b5c74fb65e841cd48792ad1ed5e07b904d764"; + }; + } + + { + name = "colormin___colormin_1.1.2.tgz"; + path = fetchurl { + name = "colormin___colormin_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz"; + sha1 = "ea2f7420a72b96881a38aae59ec124a6f7298133"; + }; + } + + { + name = "colors___colors_1.1.2.tgz"; + path = fetchurl { + name = "colors___colors_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz"; + sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; + }; + } + + { + name = "combined_stream___combined_stream_1.0.6.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz"; + sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818"; + }; + } + + { + name = "commondir___commondir_1.0.1.tgz"; + path = fetchurl { + name = "commondir___commondir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"; + sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b"; + }; + } + + { + name = "component_emitter___component_emitter_1.2.1.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz"; + sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; + }; + } + + { + name = "compressible___compressible_2.0.14.tgz"; + path = fetchurl { + name = "compressible___compressible_2.0.14.tgz"; + url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz"; + sha1 = "326c5f507fbb055f54116782b969a81b67a29da7"; + }; + } + + { + name = "compression___compression_1.7.3.tgz"; + path = fetchurl { + name = "compression___compression_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz"; + sha1 = "27e0e176aaf260f7f2c2813c3e440adb9f1993db"; + }; + } + + { + name = "concat_map___concat_map_0.0.1.tgz"; + path = fetchurl { + name = "concat_map___concat_map_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + } + + { + name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; + path = fetchurl { + name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz"; + sha1 = "b06873934bc5e344fef611a196a6faae0aee015a"; + }; + } + + { + name = "console_browserify___console_browserify_1.1.0.tgz"; + path = fetchurl { + name = "console_browserify___console_browserify_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz"; + sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10"; + }; + } + + { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + path = fetchurl { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + } + + { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + path = fetchurl { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"; + sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; + }; + } + + { + name = "content_disposition___content_disposition_0.5.2.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz"; + sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; + }; + } + + { + name = "content_type___content_type_1.0.4.tgz"; + path = fetchurl { + name = "content_type___content_type_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; + sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; + }; + } + + { + name = "convert_source_map___convert_source_map_0.3.5.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_0.3.5.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz"; + sha1 = "f1d802950af7dd2631a1febe0596550c86ab3190"; + }; + } + + { + name = "convert_source_map___convert_source_map_1.5.1.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz"; + sha1 = "b8278097b9bc229365de5c62cf5fcaed8b5599e5"; + }; + } + + { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + path = fetchurl { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + } + + { + name = "cookie___cookie_0.3.1.tgz"; + path = fetchurl { + name = "cookie___cookie_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz"; + sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; + }; + } + + { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + path = fetchurl { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + } + + { + name = "core_js___core_js_2.5.7.tgz"; + path = fetchurl { + name = "core_js___core_js_2.5.7.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz"; + sha1 = "f972608ff0cead68b841a16a932d0b183791814e"; + }; + } + + { + name = "core_util_is___core_util_is_1.0.2.tgz"; + path = fetchurl { + name = "core_util_is___core_util_is_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + } + + { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + path = fetchurl { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz"; + sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff"; + }; + } + + { + name = "create_hash___create_hash_1.2.0.tgz"; + path = fetchurl { + name = "create_hash___create_hash_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"; + sha1 = "889078af11a63756bcfb59bd221996be3a9ef196"; + }; + } + + { + name = "create_hmac___create_hmac_1.1.7.tgz"; + path = fetchurl { + name = "create_hmac___create_hmac_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"; + sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff"; + }; + } + + { + name = "cross_spawn___cross_spawn_3.0.1.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz"; + sha1 = "1256037ecb9f0c5f79e3d6ef135e30770184b982"; + }; + } + + { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz"; + sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449"; + }; + } + + { + name = "cryptiles___cryptiles_2.0.5.tgz"; + path = fetchurl { + name = "cryptiles___cryptiles_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz"; + sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8"; + }; + } + + { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + path = fetchurl { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; + sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec"; + }; + } + + { + name = "css_color_names___css_color_names_0.0.4.tgz"; + path = fetchurl { + name = "css_color_names___css_color_names_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"; + sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; + }; + } + + { + name = "css_loader___css_loader_0.26.4.tgz"; + path = fetchurl { + name = "css_loader___css_loader_0.26.4.tgz"; + url = "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz"; + sha1 = "b61e9e30db94303e6ffc892f10ecd09ad025a1fd"; + }; + } + + { + name = "css_select___css_select_1.2.0.tgz"; + path = fetchurl { + name = "css_select___css_select_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz"; + sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; + }; + } + + { + name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz"; + path = fetchurl { + name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz"; + sha1 = "e6988474ae8c953477bf5e7efecfceccd9cf4c86"; + }; + } + + { + name = "css_what___css_what_2.1.0.tgz"; + path = fetchurl { + name = "css_what___css_what_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz"; + sha1 = "9467d032c38cfaefb9f2d79501253062f87fa1bd"; + }; + } + + { + name = "css___css_2.2.3.tgz"; + path = fetchurl { + name = "css___css_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz"; + sha1 = "f861f4ba61e79bedc962aa548e5780fd95cbc6be"; + }; + } + + { + name = "cssesc___cssesc_0.1.0.tgz"; + path = fetchurl { + name = "cssesc___cssesc_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz"; + sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4"; + }; + } + + { + name = "cssnano___cssnano_3.10.0.tgz"; + path = fetchurl { + name = "cssnano___cssnano_3.10.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz"; + sha1 = "4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"; + }; + } + + { + name = "csso___csso_2.3.2.tgz"; + path = fetchurl { + name = "csso___csso_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz"; + sha1 = "ddd52c587033f49e94b71fc55569f252e8ff5f85"; + }; + } + + { + name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; + path = fetchurl { + name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz"; + sha1 = "988df33feab191ef799a61369dd76c17adf957ea"; + }; + } + + { + name = "d___d_1.0.0.tgz"; + path = fetchurl { + name = "d___d_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz"; + sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; + }; + } + + { + name = "dashdash___dashdash_1.14.1.tgz"; + path = fetchurl { + name = "dashdash___dashdash_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + } + + { + name = "date_now___date_now_0.1.4.tgz"; + path = fetchurl { + name = "date_now___date_now_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz"; + sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b"; + }; + } + + { + name = "debug___debug_2.6.9.tgz"; + path = fetchurl { + name = "debug___debug_2.6.9.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; + sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; + }; + } + + { + name = "debug___debug_3.1.0.tgz"; + path = fetchurl { + name = "debug___debug_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz"; + sha1 = "5bb5a0672628b64149566ba16819e61518c67261"; + }; + } + + { + name = "decamelize___decamelize_1.2.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + } + + { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + path = fetchurl { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + } + + { + name = "deep_equal___deep_equal_1.0.1.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz"; + sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5"; + }; + } + + { + name = "deep_extend___deep_extend_0.6.0.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz"; + sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac"; + }; + } + + { + name = "define_properties___define_properties_1.1.2.tgz"; + path = fetchurl { + name = "define_properties___define_properties_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz"; + sha1 = "83a73f2fea569898fb737193c8f873caf6d45c94"; + }; + } + + { + name = "define_property___define_property_0.2.5.tgz"; + path = fetchurl { + name = "define_property___define_property_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + } + + { + name = "define_property___define_property_1.0.0.tgz"; + path = fetchurl { + name = "define_property___define_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + } + + { + name = "define_property___define_property_2.0.2.tgz"; + path = fetchurl { + name = "define_property___define_property_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; + sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; + }; + } + + { + name = "defined___defined_1.0.0.tgz"; + path = fetchurl { + name = "defined___defined_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz"; + sha1 = "c98d9bcef75674188e110969151199e39b1fa693"; + }; + } + + { + name = "del___del_3.0.0.tgz"; + path = fetchurl { + name = "del___del_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz"; + sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5"; + }; + } + + { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + } + + { + name = "delegates___delegates_1.0.0.tgz"; + path = fetchurl { + name = "delegates___delegates_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + } + + { + name = "depd___depd_1.1.1.tgz"; + path = fetchurl { + name = "depd___depd_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz"; + sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359"; + }; + } + + { + name = "depd___depd_1.1.2.tgz"; + path = fetchurl { + name = "depd___depd_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + } + + { + name = "des.js___des.js_1.0.0.tgz"; + path = fetchurl { + name = "des.js___des.js_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz"; + sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"; + }; + } + + { + name = "destroy___destroy_1.0.4.tgz"; + path = fetchurl { + name = "destroy___destroy_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + } + + { + name = "detect_indent___detect_indent_4.0.0.tgz"; + path = fetchurl { + name = "detect_indent___detect_indent_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz"; + sha1 = "f76d064352cdf43a1cb6ce619c4ee3a9475de208"; + }; + } + + { + name = "detect_libc___detect_libc_1.0.3.tgz"; + path = fetchurl { + name = "detect_libc___detect_libc_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz"; + sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; + }; + } + + { + name = "detect_node___detect_node_2.0.3.tgz"; + path = fetchurl { + name = "detect_node___detect_node_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz"; + sha1 = "a2033c09cc8e158d37748fbde7507832bd6ce127"; + }; + } + + { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + path = fetchurl { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; + sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875"; + }; + } + + { + name = "dns_equal___dns_equal_1.0.0.tgz"; + path = fetchurl { + name = "dns_equal___dns_equal_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"; + sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d"; + }; + } + + { + name = "dns_packet___dns_packet_1.3.1.tgz"; + path = fetchurl { + name = "dns_packet___dns_packet_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz"; + sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a"; + }; + } + + { + name = "dns_txt___dns_txt_2.0.2.tgz"; + path = fetchurl { + name = "dns_txt___dns_txt_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"; + sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6"; + }; + } + + { + name = "dom_converter___dom_converter_0.1.4.tgz"; + path = fetchurl { + name = "dom_converter___dom_converter_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz"; + sha1 = "a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"; + }; + } + + { + name = "dom_serializer___dom_serializer_0.1.0.tgz"; + path = fetchurl { + name = "dom_serializer___dom_serializer_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz"; + sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82"; + }; + } + + { + name = "domain_browser___domain_browser_1.2.0.tgz"; + path = fetchurl { + name = "domain_browser___domain_browser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"; + sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda"; + }; + } + + { + name = "domelementtype___domelementtype_1.3.0.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz"; + sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2"; + }; + } + + { + name = "domelementtype___domelementtype_1.1.3.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz"; + sha1 = "bd28773e2642881aec51544924299c5cd822185b"; + }; + } + + { + name = "domhandler___domhandler_2.1.0.tgz"; + path = fetchurl { + name = "domhandler___domhandler_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz"; + sha1 = "d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"; + }; + } + + { + name = "domutils___domutils_1.1.6.tgz"; + path = fetchurl { + name = "domutils___domutils_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz"; + sha1 = "bddc3de099b9a2efacc51c623f28f416ecc57485"; + }; + } + + { + name = "domutils___domutils_1.5.1.tgz"; + path = fetchurl { + name = "domutils___domutils_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz"; + sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; + }; + } + + { + name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz"; + sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505"; + }; + } + + { + name = "ee_first___ee_first_1.1.1.tgz"; + path = fetchurl { + name = "ee_first___ee_first_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + } + + { + name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz"; + path = fetchurl { + name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz"; + url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz"; + sha1 = "d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0"; + }; + } + + { + name = "elliptic___elliptic_6.4.0.tgz"; + path = fetchurl { + name = "elliptic___elliptic_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz"; + sha1 = "cac9af8762c85836187003c8dfe193e5e2eae5df"; + }; + } + + { + name = "emojis_list___emojis_list_2.1.0.tgz"; + path = fetchurl { + name = "emojis_list___emojis_list_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"; + sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; + }; + } + + { + name = "encodeurl___encodeurl_1.0.2.tgz"; + path = fetchurl { + name = "encodeurl___encodeurl_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + } + + { + name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz"; + path = fetchurl { + name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz"; + url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz"; + sha1 = "0421e339fd71419b3da13d129b3979040230476e"; + }; + } + + { + name = "entities___entities_1.1.1.tgz"; + path = fetchurl { + name = "entities___entities_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz"; + sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"; + }; + } + + { + name = "errno___errno_0.1.7.tgz"; + path = fetchurl { + name = "errno___errno_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz"; + sha1 = "4684d71779ad39af177e3f007996f7c67c852618"; + }; + } + + { + name = "error_ex___error_ex_1.3.2.tgz"; + path = fetchurl { + name = "error_ex___error_ex_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; + sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; + }; + } + + { + name = "error_stack_parser___error_stack_parser_2.0.2.tgz"; + path = fetchurl { + name = "error_stack_parser___error_stack_parser_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz"; + sha1 = "4ae8dbaa2bf90a8b450707b9149dcabca135520d"; + }; + } + + { + name = "es_abstract___es_abstract_1.12.0.tgz"; + path = fetchurl { + name = "es_abstract___es_abstract_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz"; + sha1 = "9dbbdd27c6856f0001421ca18782d786bf8a6165"; + }; + } + + { + name = "es_to_primitive___es_to_primitive_1.1.1.tgz"; + path = fetchurl { + name = "es_to_primitive___es_to_primitive_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz"; + sha1 = "45355248a88979034b6792e19bb81f2b7975dd0d"; + }; + } + + { + name = "es5_ext___es5_ext_0.10.45.tgz"; + path = fetchurl { + name = "es5_ext___es5_ext_0.10.45.tgz"; + url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz"; + sha1 = "0bfdf7b473da5919d5adf3bd25ceb754fccc3653"; + }; + } + + { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + path = fetchurl { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"; + sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; + }; + } + + { + name = "es6_map___es6_map_0.1.5.tgz"; + path = fetchurl { + name = "es6_map___es6_map_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz"; + sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; + }; + } + + { + name = "es6_set___es6_set_0.1.5.tgz"; + path = fetchurl { + name = "es6_set___es6_set_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz"; + sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; + }; + } + + { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + path = fetchurl { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz"; + sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; + }; + } + + { + name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; + path = fetchurl { + name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz"; + sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"; + }; + } + + { + name = "escape_html___escape_html_1.0.3.tgz"; + path = fetchurl { + name = "escape_html___escape_html_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + } + + { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + path = fetchurl { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + } + + { + name = "escope___escope_3.6.0.tgz"; + path = fetchurl { + name = "escope___escope_3.6.0.tgz"; + url = "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz"; + sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; + }; + } + + { + name = "esprima___esprima_2.7.3.tgz"; + path = fetchurl { + name = "esprima___esprima_2.7.3.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz"; + sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581"; + }; + } + + { + name = "esrecurse___esrecurse_4.2.1.tgz"; + path = fetchurl { + name = "esrecurse___esrecurse_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz"; + sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"; + }; + } + + { + name = "estraverse___estraverse_4.2.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz"; + sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; + }; + } + + { + name = "esutils___esutils_2.0.2.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz"; + sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; + }; + } + + { + name = "etag___etag_1.8.1.tgz"; + path = fetchurl { + name = "etag___etag_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + } + + { + name = "event_emitter___event_emitter_0.3.5.tgz"; + path = fetchurl { + name = "event_emitter___event_emitter_0.3.5.tgz"; + url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz"; + sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; + }; + } + + { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz"; + sha1 = "090b4d6cdbd645ed10bf750d4b5407942d7ba163"; + }; + } + + { + name = "events___events_1.1.1.tgz"; + path = fetchurl { + name = "events___events_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz"; + sha1 = "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"; + }; + } + + { + name = "eventsource___eventsource_0.1.6.tgz"; + path = fetchurl { + name = "eventsource___eventsource_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz"; + sha1 = "0acede849ed7dd1ccc32c811bb11b944d4f29232"; + }; + } + + { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + path = fetchurl { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; + sha1 = "7fcbdb198dc71959432efe13842684e0525acb02"; + }; + } + + { + name = "execa___execa_0.7.0.tgz"; + path = fetchurl { + name = "execa___execa_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz"; + sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777"; + }; + } + + { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz"; + sha1 = "df07284e342a807cd733ac5af72411e581d1177b"; + }; + } + + { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + } + + { + name = "expand_range___expand_range_1.8.2.tgz"; + path = fetchurl { + name = "expand_range___expand_range_1.8.2.tgz"; + url = "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz"; + sha1 = "a299effd335fe2721ebae8e257ec79644fc85337"; + }; + } + + { + name = "express___express_4.16.3.tgz"; + path = fetchurl { + name = "express___express_4.16.3.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz"; + sha1 = "6af8a502350db3246ecc4becf6b5a34d22f7ed53"; + }; + } + + { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + } + + { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + } + + { + name = "extend___extend_3.0.2.tgz"; + path = fetchurl { + name = "extend___extend_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; + sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; + }; + } + + { + name = "extglob___extglob_0.3.2.tgz"; + path = fetchurl { + name = "extglob___extglob_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz"; + sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1"; + }; + } + + { + name = "extglob___extglob_2.0.4.tgz"; + path = fetchurl { + name = "extglob___extglob_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; + sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; + }; + } + + { + name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz"; + path = fetchurl { + name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz"; + sha1 = "5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"; + }; + } + + { + name = "extsprintf___extsprintf_1.3.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + } + + { + name = "extsprintf___extsprintf_1.4.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; + sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz"; + sha1 = "c053477817c86b51daa853c81e059b733d023614"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz"; + sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; + }; + } + + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; + sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; + }; + } + + { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + path = fetchurl { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + } + + { + name = "fastparse___fastparse_1.1.1.tgz"; + path = fetchurl { + name = "fastparse___fastparse_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz"; + sha1 = "d1e2643b38a94d7583b479060e6c4affc94071f8"; + }; + } + + { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz"; + sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"; + }; + } + + { + name = "faye_websocket___faye_websocket_0.11.1.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz"; + sha1 = "f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"; + }; + } + + { + name = "file_loader___file_loader_0.10.1.tgz"; + path = fetchurl { + name = "file_loader___file_loader_0.10.1.tgz"; + url = "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz"; + sha1 = "815034119891fc6441fb5a64c11bc93c22ddd842"; + }; + } + + { + name = "filename_regex___filename_regex_2.0.1.tgz"; + path = fetchurl { + name = "filename_regex___filename_regex_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz"; + sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"; + }; + } + + { + name = "fill_range___fill_range_2.2.4.tgz"; + path = fetchurl { + name = "fill_range___fill_range_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz"; + sha1 = "eb1e773abb056dcd8df2bfdf6af59b8b3a936565"; + }; + } + + { + name = "fill_range___fill_range_4.0.0.tgz"; + path = fetchurl { + name = "fill_range___fill_range_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + } + + { + name = "finalhandler___finalhandler_1.1.1.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz"; + sha1 = "eebf4ed840079c83f4249038c9d703008301b105"; + }; + } + + { + name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz"; + sha1 = "9288e3e9e3cc3748717d39eade17cf71fc30ee6f"; + }; + } + + { + name = "find_up___find_up_1.1.2.tgz"; + path = fetchurl { + name = "find_up___find_up_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz"; + sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"; + }; + } + + { + name = "find_up___find_up_2.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"; + sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; + }; + } + + { + name = "flatten___flatten_1.0.2.tgz"; + path = fetchurl { + name = "flatten___flatten_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz"; + sha1 = "dae46a9d78fbe25292258cc1e780a41d95c03782"; + }; + } + + { + name = "follow_redirects___follow_redirects_1.5.1.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz"; + sha1 = "67a8f14f5a1f67f962c2c46469c79eaec0a90291"; + }; + } + + { + name = "for_in___for_in_0.1.8.tgz"; + path = fetchurl { + name = "for_in___for_in_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz"; + sha1 = "d8773908e31256109952b1fdb9b3fa867d2775e1"; + }; + } + + { + name = "for_in___for_in_1.0.2.tgz"; + path = fetchurl { + name = "for_in___for_in_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + } + + { + name = "for_own___for_own_0.1.5.tgz"; + path = fetchurl { + name = "for_own___for_own_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz"; + sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce"; + }; + } + + { + name = "for_own___for_own_1.0.0.tgz"; + path = fetchurl { + name = "for_own___for_own_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz"; + sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b"; + }; + } + + { + name = "foreach___foreach_2.0.5.tgz"; + path = fetchurl { + name = "foreach___foreach_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz"; + sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99"; + }; + } + + { + name = "forever_agent___forever_agent_0.6.1.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + } + + { + name = "form_data___form_data_2.1.4.tgz"; + path = fetchurl { + name = "form_data___form_data_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz"; + sha1 = "33c183acf193276ecaa98143a69e94bfee1750d1"; + }; + } + + { + name = "form_data___form_data_2.3.2.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz"; + sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099"; + }; + } + + { + name = "forwarded___forwarded_0.1.2.tgz"; + path = fetchurl { + name = "forwarded___forwarded_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + } + + { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + path = fetchurl { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + } + + { + name = "fresh___fresh_0.5.2.tgz"; + path = fetchurl { + name = "fresh___fresh_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + } + + { + name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz"; + path = fetchurl { + name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz"; + sha1 = "efc86cbb816224565861a1be7a9d84d0aafea136"; + }; + } + + { + name = "fs_extra___fs_extra_2.1.2.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz"; + sha1 = "046c70163cef9aad46b0e4a7fa467fb22d71de35"; + }; + } + + { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz"; + sha1 = "06c277218454ec288df77ada54a03b8702aacb9d"; + }; + } + + { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + path = fetchurl { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + } + + { + name = "fsevents___fsevents_1.2.4.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz"; + sha1 = "f41dcb1af2582af3692da36fc55cbd8e1041c426"; + }; + } + + { + name = "fstream___fstream_1.0.11.tgz"; + path = fetchurl { + name = "fstream___fstream_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz"; + sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"; + }; + } + + { + name = "function_bind___function_bind_1.1.1.tgz"; + path = fetchurl { + name = "function_bind___function_bind_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz"; + sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d"; + }; + } + + { + name = "gauge___gauge_2.7.4.tgz"; + path = fetchurl { + name = "gauge___gauge_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz"; + sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; + }; + } + + { + name = "gaze___gaze_1.1.3.tgz"; + path = fetchurl { + name = "gaze___gaze_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz"; + sha1 = "c441733e13b927ac8c0ff0b4c3b033f28812924a"; + }; + } + + { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz"; + sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"; + }; + } + + { + name = "get_stdin___get_stdin_4.0.1.tgz"; + path = fetchurl { + name = "get_stdin___get_stdin_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz"; + sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe"; + }; + } + + { + name = "get_stream___get_stream_3.0.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz"; + sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14"; + }; + } + + { + name = "get_value___get_value_2.0.6.tgz"; + path = fetchurl { + name = "get_value___get_value_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + } + + { + name = "getpass___getpass_0.1.7.tgz"; + path = fetchurl { + name = "getpass___getpass_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + } + + { + name = "glob_base___glob_base_0.3.0.tgz"; + path = fetchurl { + name = "glob_base___glob_base_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz"; + sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"; + }; + } + + { + name = "glob_parent___glob_parent_2.0.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz"; + sha1 = "81383d72db054fcccf5336daa902f182f6edbb28"; + }; + } + + { + name = "glob_parent___glob_parent_3.1.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz"; + sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; + }; + } + + { + name = "glob___glob_6.0.4.tgz"; + path = fetchurl { + name = "glob___glob_6.0.4.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz"; + sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"; + }; + } + + { + name = "glob___glob_7.1.2.tgz"; + path = fetchurl { + name = "glob___glob_7.1.2.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz"; + sha1 = "c19c9df9a028702d678612384a6552404c636d15"; + }; + } + + { + name = "globals___globals_9.18.0.tgz"; + path = fetchurl { + name = "globals___globals_9.18.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz"; + sha1 = "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"; + }; + } + + { + name = "globby___globby_6.1.0.tgz"; + path = fetchurl { + name = "globby___globby_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz"; + sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c"; + }; + } + + { + name = "globule___globule_1.2.1.tgz"; + path = fetchurl { + name = "globule___globule_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz"; + sha1 = "5dffb1b191f22d20797a9369b49eab4e9839696d"; + }; + } + + { + name = "graceful_fs___graceful_fs_4.1.11.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.1.11.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz"; + sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"; + }; + } + + { + name = "handle_thing___handle_thing_1.2.5.tgz"; + path = fetchurl { + name = "handle_thing___handle_thing_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz"; + sha1 = "fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"; + }; + } + + { + name = "har_schema___har_schema_1.0.5.tgz"; + path = fetchurl { + name = "har_schema___har_schema_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz"; + sha1 = "d263135f43307c02c602afc8fe95970c0151369e"; + }; + } + + { + name = "har_schema___har_schema_2.0.0.tgz"; + path = fetchurl { + name = "har_schema___har_schema_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + } + + { + name = "har_validator___har_validator_4.2.1.tgz"; + path = fetchurl { + name = "har_validator___har_validator_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz"; + sha1 = "33481d0f1bbff600dd203d75812a6a5fba002e2a"; + }; + } + + { + name = "har_validator___har_validator_5.0.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.0.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz"; + sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd"; + }; + } + + { + name = "has_ansi___has_ansi_2.0.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + } + + { + name = "has_flag___has_flag_1.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz"; + sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; + }; + } + + { + name = "has_flag___has_flag_2.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz"; + sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51"; + }; + } + + { + name = "has_flag___has_flag_3.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + } + + { + name = "has_unicode___has_unicode_2.0.1.tgz"; + path = fetchurl { + name = "has_unicode___has_unicode_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + } + + { + name = "has_value___has_value_0.3.1.tgz"; + path = fetchurl { + name = "has_value___has_value_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + } + + { + name = "has_value___has_value_1.0.0.tgz"; + path = fetchurl { + name = "has_value___has_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + } + + { + name = "has_values___has_values_0.1.4.tgz"; + path = fetchurl { + name = "has_values___has_values_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + } + + { + name = "has_values___has_values_1.0.0.tgz"; + path = fetchurl { + name = "has_values___has_values_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + } + + { + name = "has___has_1.0.3.tgz"; + path = fetchurl { + name = "has___has_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz"; + sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796"; + }; + } + + { + name = "hash_base___hash_base_3.0.4.tgz"; + path = fetchurl { + name = "hash_base___hash_base_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz"; + sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918"; + }; + } + + { + name = "hash.js___hash.js_1.1.5.tgz"; + path = fetchurl { + name = "hash.js___hash.js_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz"; + sha1 = "e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"; + }; + } + + { + name = "hawk___hawk_3.1.3.tgz"; + path = fetchurl { + name = "hawk___hawk_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz"; + sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4"; + }; + } + + { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + path = fetchurl { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; + sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; + }; + } + + { + name = "hoek___hoek_2.16.3.tgz"; + path = fetchurl { + name = "hoek___hoek_2.16.3.tgz"; + url = "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz"; + sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed"; + }; + } + + { + name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; + path = fetchurl { + name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz"; + sha1 = "e36c3f2d2cae7d746a857e38d18d5f32a7882db8"; + }; + } + + { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz"; + sha1 = "97f236977bd6e125408930ff6de3eec6281ec047"; + }; + } + + { + name = "hpack.js___hpack.js_2.1.6.tgz"; + path = fetchurl { + name = "hpack.js___hpack.js_2.1.6.tgz"; + url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz"; + sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2"; + }; + } + + { + name = "html_comment_regex___html_comment_regex_1.1.1.tgz"; + path = fetchurl { + name = "html_comment_regex___html_comment_regex_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz"; + sha1 = "668b93776eaae55ebde8f3ad464b307a4963625e"; + }; + } + + { + name = "html_entities___html_entities_1.2.1.tgz"; + path = fetchurl { + name = "html_entities___html_entities_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz"; + sha1 = "0df29351f0721163515dfb9e5543e5f6eed5162f"; + }; + } + + { + name = "htmlparser2___htmlparser2_3.3.0.tgz"; + path = fetchurl { + name = "htmlparser2___htmlparser2_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz"; + sha1 = "cc70d05a59f6542e43f0e685c982e14c924a9efe"; + }; + } + + { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + path = fetchurl { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz"; + sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87"; + }; + } + + { + name = "http_errors___http_errors_1.6.2.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz"; + sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736"; + }; + } + + { + name = "http_errors___http_errors_1.6.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + } + + { + name = "http_parser_js___http_parser_js_0.4.13.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.4.13.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz"; + sha1 = "3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"; + }; + } + + { + name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz"; + path = fetchurl { + name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz"; + url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz"; + sha1 = "642e8848851d66f09d4f124912846dbaeb41b833"; + }; + } + + { + name = "http_proxy___http_proxy_1.17.0.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz"; + sha1 = "7ad38494658f84605e2f6db4436df410f4e5be9a"; + }; + } + + { + name = "http_signature___http_signature_1.1.1.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz"; + sha1 = "df72e267066cd0ac67fb76adf8e134a8fbcf91bf"; + }; + } + + { + name = "http_signature___http_signature_1.2.0.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + } + + { + name = "https_browserify___https_browserify_1.0.0.tgz"; + path = fetchurl { + name = "https_browserify___https_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz"; + sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.19.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.19.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz"; + sha1 = "f7468f60135f5e5dad3399c0a81be9a1603a082b"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz"; + sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63"; + }; + } + + { + name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; + path = fetchurl { + name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz"; + sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded"; + }; + } + + { + name = "ieee754___ieee754_1.1.12.tgz"; + path = fetchurl { + name = "ieee754___ieee754_1.1.12.tgz"; + url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz"; + sha1 = "50bf24e5b9c8bb98af4964c941cdb0918da7b60b"; + }; + } + + { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + path = fetchurl { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz"; + sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8"; + }; + } + + { + name = "import_local___import_local_1.0.0.tgz"; + path = fetchurl { + name = "import_local___import_local_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz"; + sha1 = "5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"; + }; + } + + { + name = "in_publish___in_publish_2.0.0.tgz"; + path = fetchurl { + name = "in_publish___in_publish_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz"; + sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51"; + }; + } + + { + name = "indent_string___indent_string_2.1.0.tgz"; + path = fetchurl { + name = "indent_string___indent_string_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz"; + sha1 = "8e2d48348742121b4a8218b7a137e9a52049dc80"; + }; + } + + { + name = "indexes_of___indexes_of_1.0.1.tgz"; + path = fetchurl { + name = "indexes_of___indexes_of_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz"; + sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; + }; + } + + { + name = "indexof___indexof_0.0.1.tgz"; + path = fetchurl { + name = "indexof___indexof_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz"; + sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; + }; + } + + { + name = "inflight___inflight_1.0.6.tgz"; + path = fetchurl { + name = "inflight___inflight_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + } + + { + name = "inherits___inherits_2.0.3.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + } + + { + name = "inherits___inherits_2.0.1.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + } + + { + name = "ini___ini_1.3.5.tgz"; + path = fetchurl { + name = "ini___ini_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz"; + sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927"; + }; + } + + { + name = "internal_ip___internal_ip_1.2.0.tgz"; + path = fetchurl { + name = "internal_ip___internal_ip_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz"; + sha1 = "ae9fbf93b984878785d50a8de1b356956058cf5c"; + }; + } + + { + name = "interpret___interpret_1.1.0.tgz"; + path = fetchurl { + name = "interpret___interpret_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz"; + sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"; + }; + } + + { + name = "invariant___invariant_2.2.4.tgz"; + path = fetchurl { + name = "invariant___invariant_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz"; + sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6"; + }; + } + + { + name = "invert_kv___invert_kv_1.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz"; + sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"; + }; + } + + { + name = "ip___ip_1.1.5.tgz"; + path = fetchurl { + name = "ip___ip_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz"; + sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz"; + sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"; + }; + } + + { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + path = fetchurl { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; + sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + } + + { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + } + + { + name = "is_buffer___is_buffer_1.1.6.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; + sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; + }; + } + + { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + path = fetchurl { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz"; + sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe"; + }; + } + + { + name = "is_callable___is_callable_1.1.4.tgz"; + path = fetchurl { + name = "is_callable___is_callable_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz"; + sha1 = "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; + }; + } + + { + name = "is_date_object___is_date_object_1.0.1.tgz"; + path = fetchurl { + name = "is_date_object___is_date_object_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz"; + sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"; + }; + } + + { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; + }; + } + + { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; + }; + } + + { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + path = fetchurl { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz"; + sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"; + }; + } + + { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + path = fetchurl { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz"; + sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534"; + }; + } + + { + name = "is_extendable___is_extendable_0.1.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + } + + { + name = "is_extendable___is_extendable_1.0.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; + sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; + }; + } + + { + name = "is_extglob___is_extglob_1.0.0.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz"; + sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0"; + }; + } + + { + name = "is_extglob___is_extglob_2.1.1.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + } + + { + name = "is_finite___is_finite_1.0.2.tgz"; + path = fetchurl { + name = "is_finite___is_finite_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz"; + sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + } + + { + name = "is_glob___is_glob_2.0.1.tgz"; + path = fetchurl { + name = "is_glob___is_glob_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz"; + sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863"; + }; + } + + { + name = "is_glob___is_glob_3.1.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + } + + { + name = "is_glob___is_glob_4.0.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz"; + sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0"; + }; + } + + { + name = "is_number___is_number_2.1.0.tgz"; + path = fetchurl { + name = "is_number___is_number_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz"; + sha1 = "01fcbbb393463a548f2f466cce16dece49db908f"; + }; + } + + { + name = "is_number___is_number_3.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + } + + { + name = "is_number___is_number_4.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz"; + sha1 = "0026e37f5454d73e356dfe6564699867c6a7f0ff"; + }; + } + + { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + path = fetchurl { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; + sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; + }; + } + + { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + path = fetchurl { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz"; + sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52"; + }; + } + + { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + path = fetchurl { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz"; + sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; + }; + } + + { + name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; + path = fetchurl { + name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz"; + sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e"; + }; + } + + { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + path = fetchurl { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; + }; + } + + { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + path = fetchurl { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz"; + sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"; + }; + } + + { + name = "is_primitive___is_primitive_2.0.0.tgz"; + path = fetchurl { + name = "is_primitive___is_primitive_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz"; + sha1 = "207bab91638499c07b2adf240a41a87210034575"; + }; + } + + { + name = "is_regex___is_regex_1.0.4.tgz"; + path = fetchurl { + name = "is_regex___is_regex_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz"; + sha1 = "5517489b547091b0930e095654ced25ee97e9491"; + }; + } + + { + name = "is_stream___is_stream_1.1.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz"; + sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; + }; + } + + { + name = "is_svg___is_svg_2.1.0.tgz"; + path = fetchurl { + name = "is_svg___is_svg_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz"; + sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9"; + }; + } + + { + name = "is_symbol___is_symbol_1.0.1.tgz"; + path = fetchurl { + name = "is_symbol___is_symbol_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz"; + sha1 = "3cc59f00025194b6ab2e38dbae6689256b660572"; + }; + } + + { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + path = fetchurl { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + } + + { + name = "is_utf8___is_utf8_0.2.1.tgz"; + path = fetchurl { + name = "is_utf8___is_utf8_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz"; + sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72"; + }; + } + + { + name = "is_windows___is_windows_1.0.2.tgz"; + path = fetchurl { + name = "is_windows___is_windows_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; + sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; + }; + } + + { + name = "is_wsl___is_wsl_1.1.0.tgz"; + path = fetchurl { + name = "is_wsl___is_wsl_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz"; + sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; + }; + } + + { + name = "isarray___isarray_0.0.1.tgz"; + path = fetchurl { + name = "isarray___isarray_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz"; + sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf"; + }; + } + + { + name = "isarray___isarray_1.0.0.tgz"; + path = fetchurl { + name = "isarray___isarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + } + + { + name = "isexe___isexe_2.0.0.tgz"; + path = fetchurl { + name = "isexe___isexe_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + } + + { + name = "isobject___isobject_2.1.0.tgz"; + path = fetchurl { + name = "isobject___isobject_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + } + + { + name = "isobject___isobject_3.0.1.tgz"; + path = fetchurl { + name = "isobject___isobject_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + } + + { + name = "isstream___isstream_0.1.2.tgz"; + path = fetchurl { + name = "isstream___isstream_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + } + + { + name = "jquery___jquery_3.3.1.tgz"; + path = fetchurl { + name = "jquery___jquery_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz"; + sha1 = "958ce29e81c9790f31be7792df5d4d95fc57fbca"; + }; + } + + { + name = "js_base64___js_base64_2.4.8.tgz"; + path = fetchurl { + name = "js_base64___js_base64_2.4.8.tgz"; + url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz"; + sha1 = "57a9b130888f956834aa40c5b165ba59c758f033"; + }; + } + + { + name = "js_tokens___js_tokens_4.0.0.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz"; + sha1 = "19203fb59991df98e3a287050d4647cdeaf32499"; + }; + } + + { + name = "js_tokens___js_tokens_3.0.2.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz"; + sha1 = "9866df395102130e38f7f996bceb65443209c25b"; + }; + } + + { + name = "js_yaml___js_yaml_3.7.0.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.7.0.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz"; + sha1 = "5c967ddd837a9bfdca5f2de84253abe8a1c03b80"; + }; + } + + { + name = "jsbn___jsbn_0.1.1.tgz"; + path = fetchurl { + name = "jsbn___jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + } + + { + name = "jsesc___jsesc_1.3.0.tgz"; + path = fetchurl { + name = "jsesc___jsesc_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz"; + sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b"; + }; + } + + { + name = "jsesc___jsesc_0.5.0.tgz"; + path = fetchurl { + name = "jsesc___jsesc_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz"; + sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; + }; + } + + { + name = "json_loader___json_loader_0.5.7.tgz"; + path = fetchurl { + name = "json_loader___json_loader_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz"; + sha1 = "dca14a70235ff82f0ac9a3abeb60d337a365185d"; + }; + } + + { + name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"; + sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340"; + }; + } + + { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; + }; + } + + { + name = "json_schema___json_schema_0.2.3.tgz"; + path = fetchurl { + name = "json_schema___json_schema_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + } + + { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; + sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; + }; + } + + { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + path = fetchurl { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + } + + { + name = "json3___json3_3.3.2.tgz"; + path = fetchurl { + name = "json3___json3_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz"; + sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1"; + }; + } + + { + name = "json5___json5_0.5.1.tgz"; + path = fetchurl { + name = "json5___json5_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz"; + sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; + }; + } + + { + name = "jsonfile___jsonfile_2.4.0.tgz"; + path = fetchurl { + name = "jsonfile___jsonfile_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz"; + sha1 = "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"; + }; + } + + { + name = "jsonify___jsonify_0.0.0.tgz"; + path = fetchurl { + name = "jsonify___jsonify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz"; + sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; + }; + } + + { + name = "jsprim___jsprim_1.4.1.tgz"; + path = fetchurl { + name = "jsprim___jsprim_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + } + + { + name = "killable___killable_1.0.0.tgz"; + path = fetchurl { + name = "killable___killable_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz"; + sha1 = "da8b84bd47de5395878f95d64d02f2449fe05e6b"; + }; + } + + { + name = "kind_of___kind_of_3.2.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + } + + { + name = "kind_of___kind_of_4.0.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + } + + { + name = "kind_of___kind_of_5.1.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; + sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; + }; + } + + { + name = "kind_of___kind_of_6.0.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz"; + sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051"; + }; + } + + { + name = "lazy_cache___lazy_cache_1.0.4.tgz"; + path = fetchurl { + name = "lazy_cache___lazy_cache_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz"; + sha1 = "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"; + }; + } + + { + name = "lcid___lcid_1.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz"; + sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835"; + }; + } + + { + name = "load_json_file___load_json_file_1.1.0.tgz"; + path = fetchurl { + name = "load_json_file___load_json_file_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz"; + sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0"; + }; + } + + { + name = "load_json_file___load_json_file_2.0.0.tgz"; + path = fetchurl { + name = "load_json_file___load_json_file_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz"; + sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8"; + }; + } + + { + name = "loader_runner___loader_runner_2.3.0.tgz"; + path = fetchurl { + name = "loader_runner___loader_runner_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz"; + sha1 = "f482aea82d543e07921700d5a46ef26fdac6b8a2"; + }; + } + + { + name = "loader_utils___loader_utils_1.1.0.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz"; + sha1 = "c98aef488bcceda2ffb5e2de646d6a754429f5cd"; + }; + } + + { + name = "locate_path___locate_path_2.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz"; + sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; + }; + } + + { + name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; + path = fetchurl { + name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz"; + sha1 = "8c38a099500f215ad09e59f1722fd0c52bfe0a4e"; + }; + } + + { + name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; + path = fetchurl { + name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"; + sha1 = "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"; + }; + } + + { + name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; + path = fetchurl { + name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"; + sha1 = "e531c27644cf8b57a99e17ed95b35c748789392e"; + }; + } + + { + name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; + path = fetchurl { + name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz"; + sha1 = "838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"; + }; + } + + { + name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; + path = fetchurl { + name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz"; + sha1 = "570bc7dede46d61cdcde687d65d3eecbaa3aaff5"; + }; + } + + { + name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; + path = fetchurl { + name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; + url = "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"; + sha1 = "5203ad7ba425fae842460e696db9cf3e6aac057c"; + }; + } + + { + name = "lodash.assign___lodash.assign_3.2.0.tgz"; + path = fetchurl { + name = "lodash.assign___lodash.assign_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz"; + sha1 = "3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"; + }; + } + + { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + path = fetchurl { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz"; + sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7"; + }; + } + + { + name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz"; + path = fetchurl { + name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz"; + sha1 = "b28aa6288a2b9fc651035c7711f65ab6190331a6"; + }; + } + + { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + path = fetchurl { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"; + sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef"; + }; + } + + { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + path = fetchurl { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"; + sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af"; + }; + } + + { + name = "lodash.defaults___lodash.defaults_3.1.2.tgz"; + path = fetchurl { + name = "lodash.defaults___lodash.defaults_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz"; + sha1 = "c7308b18dbf8bc9372d701a73493c61192bd2e2c"; + }; + } + + { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + path = fetchurl { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; + sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; + }; + } + + { + name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; + path = fetchurl { + name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"; + sha1 = "2f573d85c6a24289ff00663b491c1d338ff3458a"; + }; + } + + { + name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; + path = fetchurl { + name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz"; + sha1 = "79e4eb88c36a8122af86f844aa9bcd851b5fbb55"; + }; + } + + { + name = "lodash.keys___lodash.keys_3.1.2.tgz"; + path = fetchurl { + name = "lodash.keys___lodash.keys_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz"; + sha1 = "4dbc0472b156be50a0b286855d1bd0b0c656098a"; + }; + } + + { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + path = fetchurl { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; + sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; + }; + } + + { + name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; + path = fetchurl { + name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz"; + sha1 = "639057e726c3afbdb3e7d42741caa8d6e4335927"; + }; + } + + { + name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; + path = fetchurl { + name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz"; + sha1 = "936a4e309ef330a7645ed4145986c85ae5b20805"; + }; + } + + { + name = "lodash.tail___lodash.tail_4.1.1.tgz"; + path = fetchurl { + name = "lodash.tail___lodash.tail_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz"; + sha1 = "d2333a36d9e7717c8ad2f7cacafec7c32b444664"; + }; + } + + { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + path = fetchurl { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; + sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; + }; + } + + { + name = "lodash___lodash_4.17.10.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.10.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz"; + sha1 = "1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"; + }; + } + + { + name = "loglevel___loglevel_1.6.1.tgz"; + path = fetchurl { + name = "loglevel___loglevel_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz"; + sha1 = "e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"; + }; + } + + { + name = "longest___longest_1.0.1.tgz"; + path = fetchurl { + name = "longest___longest_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz"; + sha1 = "30a0b2da38f73770e8294a0d22e6625ed77d0097"; + }; + } + + { + name = "loose_envify___loose_envify_1.4.0.tgz"; + path = fetchurl { + name = "loose_envify___loose_envify_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz"; + sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf"; + }; + } + + { + name = "loud_rejection___loud_rejection_1.6.0.tgz"; + path = fetchurl { + name = "loud_rejection___loud_rejection_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz"; + sha1 = "5b46f80147edee578870f086d04821cf998e551f"; + }; + } + + { + name = "lru_cache___lru_cache_4.1.3.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.3.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz"; + sha1 = "a1175cf3496dfc8436c156c334b4955992bce69c"; + }; + } + + { + name = "make_dir___make_dir_1.3.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz"; + sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c"; + }; + } + + { + name = "map_cache___map_cache_0.2.2.tgz"; + path = fetchurl { + name = "map_cache___map_cache_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + } + + { + name = "map_obj___map_obj_1.0.1.tgz"; + path = fetchurl { + name = "map_obj___map_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz"; + sha1 = "d933ceb9205d82bdcf4886f6742bdc2b4dea146d"; + }; + } + + { + name = "map_visit___map_visit_1.0.0.tgz"; + path = fetchurl { + name = "map_visit___map_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + } + + { + name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz"; + path = fetchurl { + name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz"; + url = "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz"; + sha1 = "de819fdbcd84dccd8fae59c6aeb79615b9d266ac"; + }; + } + + { + name = "math_random___math_random_1.0.1.tgz"; + path = fetchurl { + name = "math_random___math_random_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz"; + sha1 = "8b3aac588b8a66e4975e3cdea67f7bb329601fac"; + }; + } + + { + name = "md5.js___md5.js_1.3.4.tgz"; + path = fetchurl { + name = "md5.js___md5.js_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz"; + sha1 = "e9bdbde94a20a5ac18b04340fc5764d5b09d901d"; + }; + } + + { + name = "media_typer___media_typer_0.3.0.tgz"; + path = fetchurl { + name = "media_typer___media_typer_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + } + + { + name = "mem___mem_1.1.0.tgz"; + path = fetchurl { + name = "mem___mem_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz"; + sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76"; + }; + } + + { + name = "memory_fs___memory_fs_0.4.1.tgz"; + path = fetchurl { + name = "memory_fs___memory_fs_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz"; + sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552"; + }; + } + + { + name = "meow___meow_3.7.0.tgz"; + path = fetchurl { + name = "meow___meow_3.7.0.tgz"; + url = "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz"; + sha1 = "72cb668b425228290abbfa856892587308a801fb"; + }; + } + + { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + path = fetchurl { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + } + + { + name = "methods___methods_1.1.2.tgz"; + path = fetchurl { + name = "methods___methods_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + } + + { + name = "micromatch___micromatch_2.3.11.tgz"; + path = fetchurl { + name = "micromatch___micromatch_2.3.11.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz"; + sha1 = "86677c97d1720b363431d04d0d15293bd38c1565"; + }; + } + + { + name = "micromatch___micromatch_3.1.10.tgz"; + path = fetchurl { + name = "micromatch___micromatch_3.1.10.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; + sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; + }; + } + + { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + path = fetchurl { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz"; + sha1 = "f080351c865b0dc562a8462966daa53543c78a4d"; + }; + } + + { + name = "mime_db___mime_db_1.35.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.35.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz"; + sha1 = "0569d657466491283709663ad379a99b90d9ab47"; + }; + } + + { + name = "mime_types___mime_types_2.1.19.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.19.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz"; + sha1 = "71e464537a7ef81c15f2db9d97e913fc0ff606f0"; + }; + } + + { + name = "mime___mime_1.4.1.tgz"; + path = fetchurl { + name = "mime___mime_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz"; + sha1 = "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"; + }; + } + + { + name = "mime___mime_1.6.0.tgz"; + path = fetchurl { + name = "mime___mime_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz"; + sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1"; + }; + } + + { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz"; + sha1 = "820c86a39334640e99516928bd03fca88057d022"; + }; + } + + { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"; + }; + } + + { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; + sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; + }; + } + + { + name = "minimatch___minimatch_3.0.4.tgz"; + path = fetchurl { + name = "minimatch___minimatch_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + } + + { + name = "minimist___minimist_0.0.8.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + } + + { + name = "minimist___minimist_1.2.0.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz"; + sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; + }; + } + + { + name = "minipass___minipass_2.3.3.tgz"; + path = fetchurl { + name = "minipass___minipass_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz"; + sha1 = "a7dcc8b7b833f5d368759cce544dccb55f50f233"; + }; + } + + { + name = "minizlib___minizlib_1.1.0.tgz"; + path = fetchurl { + name = "minizlib___minizlib_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz"; + sha1 = "11e13658ce46bc3a70a267aac58359d1e0c29ceb"; + }; + } + + { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz"; + sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe"; + }; + } + + { + name = "mixin_object___mixin_object_2.0.1.tgz"; + path = fetchurl { + name = "mixin_object___mixin_object_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz"; + sha1 = "4fb949441dab182540f1fe035ba60e1947a5e57e"; + }; + } + + { + name = "mkdirp___mkdirp_0.5.1.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + } + + { + name = "ms___ms_2.0.0.tgz"; + path = fetchurl { + name = "ms___ms_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + } + + { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + path = fetchurl { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz"; + sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901"; + }; + } + + { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + path = fetchurl { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz"; + sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229"; + }; + } + + { + name = "nan___nan_2.10.0.tgz"; + path = fetchurl { + name = "nan___nan_2.10.0.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz"; + sha1 = "96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"; + }; + } + + { + name = "nanomatch___nanomatch_1.2.13.tgz"; + path = fetchurl { + name = "nanomatch___nanomatch_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; + sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; + }; + } + + { + name = "needle___needle_2.2.1.tgz"; + path = fetchurl { + name = "needle___needle_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz"; + sha1 = "b5e325bd3aae8c2678902fa296f729455d1d3a7d"; + }; + } + + { + name = "negotiator___negotiator_0.6.1.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz"; + sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; + }; + } + + { + name = "neo_async___neo_async_2.5.1.tgz"; + path = fetchurl { + name = "neo_async___neo_async_2.5.1.tgz"; + url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz"; + sha1 = "acb909e327b1e87ec9ef15f41b8a269512ad41ee"; + }; + } + + { + name = "next_tick___next_tick_1.0.0.tgz"; + path = fetchurl { + name = "next_tick___next_tick_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz"; + sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c"; + }; + } + + { + name = "node_forge___node_forge_0.7.5.tgz"; + path = fetchurl { + name = "node_forge___node_forge_0.7.5.tgz"; + url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz"; + sha1 = "6c152c345ce11c52f465c2abd957e8639cd674df"; + }; + } + + { + name = "node_gyp___node_gyp_3.7.0.tgz"; + path = fetchurl { + name = "node_gyp___node_gyp_3.7.0.tgz"; + url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz"; + sha1 = "789478e8f6c45e277aa014f3e28f958f286f9203"; + }; + } + + { + name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; + path = fetchurl { + name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz"; + sha1 = "5f94263d404f6e44767d726901fff05478d600df"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz"; + sha1 = "3070040716afdc778747b61b6887bf78880b80fc"; + }; + } + + { + name = "node_sass___node_sass_4.9.2.tgz"; + path = fetchurl { + name = "node_sass___node_sass_4.9.2.tgz"; + url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz"; + sha1 = "5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437"; + }; + } + + { + name = "nopt___nopt_3.0.6.tgz"; + path = fetchurl { + name = "nopt___nopt_3.0.6.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz"; + sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; + }; + } + + { + name = "nopt___nopt_4.0.1.tgz"; + path = fetchurl { + name = "nopt___nopt_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz"; + sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; + }; + } + + { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; + sha1 = "12f95a307d58352075a04907b84ac8be98ac012f"; + }; + } + + { + name = "normalize_path___normalize_path_2.1.1.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + } + + { + name = "normalize_range___normalize_range_0.1.2.tgz"; + path = fetchurl { + name = "normalize_range___normalize_range_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz"; + sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942"; + }; + } + + { + name = "normalize_url___normalize_url_1.9.1.tgz"; + path = fetchurl { + name = "normalize_url___normalize_url_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz"; + sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c"; + }; + } + + { + name = "npm_bundled___npm_bundled_1.0.3.tgz"; + path = fetchurl { + name = "npm_bundled___npm_bundled_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz"; + sha1 = "7e71703d973af3370a9591bafe3a63aca0be2308"; + }; + } + + { + name = "npm_packlist___npm_packlist_1.1.11.tgz"; + path = fetchurl { + name = "npm_packlist___npm_packlist_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz"; + sha1 = "84e8c683cbe7867d34b1d357d893ce29e28a02de"; + }; + } + + { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz"; + sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f"; + }; + } + + { + name = "npmlog___npmlog_4.1.2.tgz"; + path = fetchurl { + name = "npmlog___npmlog_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz"; + sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b"; + }; + } + + { + name = "nth_check___nth_check_1.0.1.tgz"; + path = fetchurl { + name = "nth_check___nth_check_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz"; + sha1 = "9929acdf628fc2c41098deab82ac580cf149aae4"; + }; + } + + { + name = "num2fraction___num2fraction_1.2.2.tgz"; + path = fetchurl { + name = "num2fraction___num2fraction_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz"; + sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"; + }; + } + + { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + path = fetchurl { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.8.2.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz"; + sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"; + }; + } + + { + name = "object_assign___object_assign_4.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + } + + { + name = "object_copy___object_copy_0.1.0.tgz"; + path = fetchurl { + name = "object_copy___object_copy_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + } + + { + name = "object_keys___object_keys_1.0.12.tgz"; + path = fetchurl { + name = "object_keys___object_keys_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz"; + sha1 = "09c53855377575310cca62f55bb334abff7b3ed2"; + }; + } + + { + name = "object_path___object_path_0.9.2.tgz"; + path = fetchurl { + name = "object_path___object_path_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz"; + sha1 = "0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"; + }; + } + + { + name = "object_visit___object_visit_1.0.1.tgz"; + path = fetchurl { + name = "object_visit___object_visit_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + } + + { + name = "object.omit___object.omit_2.0.1.tgz"; + path = fetchurl { + name = "object.omit___object.omit_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz"; + sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"; + }; + } + + { + name = "object.pick___object.pick_1.3.0.tgz"; + path = fetchurl { + name = "object.pick___object.pick_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + } + + { + name = "obuf___obuf_1.1.2.tgz"; + path = fetchurl { + name = "obuf___obuf_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz"; + sha1 = "09bea3343d41859ebd446292d11c9d4db619084e"; + }; + } + + { + name = "on_finished___on_finished_2.3.0.tgz"; + path = fetchurl { + name = "on_finished___on_finished_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + } + + { + name = "on_headers___on_headers_1.0.1.tgz"; + path = fetchurl { + name = "on_headers___on_headers_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz"; + sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; + }; + } + + { + name = "once___once_1.4.0.tgz"; + path = fetchurl { + name = "once___once_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + } + + { + name = "open_iconic___open_iconic_1.1.1.tgz"; + path = fetchurl { + name = "open_iconic___open_iconic_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/open-iconic/-/open-iconic-1.1.1.tgz"; + sha1 = "9dcfc8c7cd3c61cdb4a236b1a347894c97adc0c6"; + }; + } + + { + name = "opn___opn_5.3.0.tgz"; + path = fetchurl { + name = "opn___opn_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz"; + sha1 = "64871565c863875f052cfdf53d3e3cb5adb53b1c"; + }; + } + + { + name = "original___original_1.0.1.tgz"; + path = fetchurl { + name = "original___original_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz"; + sha1 = "b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190"; + }; + } + + { + name = "os_browserify___os_browserify_0.3.0.tgz"; + path = fetchurl { + name = "os_browserify___os_browserify_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz"; + sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; + }; + } + + { + name = "os_homedir___os_homedir_1.0.2.tgz"; + path = fetchurl { + name = "os_homedir___os_homedir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + } + + { + name = "os_locale___os_locale_1.4.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz"; + sha1 = "20f9f17ae29ed345e8bde583b13d2009803c14d9"; + }; + } + + { + name = "os_locale___os_locale_2.1.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz"; + sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2"; + }; + } + + { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + path = fetchurl { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + } + + { + name = "osenv___osenv_0.1.5.tgz"; + path = fetchurl { + name = "osenv___osenv_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz"; + sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410"; + }; + } + + { + name = "p_finally___p_finally_1.0.0.tgz"; + path = fetchurl { + name = "p_finally___p_finally_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz"; + sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae"; + }; + } + + { + name = "p_limit___p_limit_1.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz"; + sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"; + }; + } + + { + name = "p_locate___p_locate_2.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz"; + sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; + }; + } + + { + name = "p_map___p_map_1.2.0.tgz"; + path = fetchurl { + name = "p_map___p_map_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz"; + sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b"; + }; + } + + { + name = "p_try___p_try_1.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz"; + sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; + }; + } + + { + name = "pako___pako_1.0.6.tgz"; + path = fetchurl { + name = "pako___pako_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz"; + sha1 = "0101211baa70c4bca4a0f63f2206e97b7dfaf258"; + }; + } + + { + name = "parse_asn1___parse_asn1_5.1.1.tgz"; + path = fetchurl { + name = "parse_asn1___parse_asn1_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz"; + sha1 = "f6bf293818332bd0dab54efb16087724745e6ca8"; + }; + } + + { + name = "parse_glob___parse_glob_3.0.4.tgz"; + path = fetchurl { + name = "parse_glob___parse_glob_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz"; + sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c"; + }; + } + + { + name = "parse_json___parse_json_2.2.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz"; + sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9"; + }; + } + + { + name = "parseurl___parseurl_1.3.2.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz"; + sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; + }; + } + + { + name = "pascalcase___pascalcase_0.1.1.tgz"; + path = fetchurl { + name = "pascalcase___pascalcase_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + } + + { + name = "path_browserify___path_browserify_0.0.0.tgz"; + path = fetchurl { + name = "path_browserify___path_browserify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz"; + sha1 = "a0b870729aae214005b7d5032ec2cbbb0fb4451a"; + }; + } + + { + name = "path_dirname___path_dirname_1.0.2.tgz"; + path = fetchurl { + name = "path_dirname___path_dirname_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz"; + sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; + }; + } + + { + name = "path_exists___path_exists_2.1.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz"; + sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b"; + }; + } + + { + name = "path_exists___path_exists_3.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz"; + sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; + }; + } + + { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + path = fetchurl { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + } + + { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + path = fetchurl { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + } + + { + name = "path_key___path_key_2.0.1.tgz"; + path = fetchurl { + name = "path_key___path_key_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + } + + { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + path = fetchurl { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + } + + { + name = "path_type___path_type_1.1.0.tgz"; + path = fetchurl { + name = "path_type___path_type_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz"; + sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441"; + }; + } + + { + name = "path_type___path_type_2.0.0.tgz"; + path = fetchurl { + name = "path_type___path_type_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz"; + sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73"; + }; + } + + { + name = "pbkdf2___pbkdf2_3.0.16.tgz"; + path = fetchurl { + name = "pbkdf2___pbkdf2_3.0.16.tgz"; + url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz"; + sha1 = "7404208ec6b01b62d85bf83853a8064f8d9c2a5c"; + }; + } + + { + name = "performance_now___performance_now_0.2.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz"; + sha1 = "33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"; + }; + } + + { + name = "performance_now___performance_now_2.1.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + } + + { + name = "pify___pify_2.3.0.tgz"; + path = fetchurl { + name = "pify___pify_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + } + + { + name = "pify___pify_3.0.0.tgz"; + path = fetchurl { + name = "pify___pify_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz"; + sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"; + }; + } + + { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + path = fetchurl { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + } + + { + name = "pinkie___pinkie_2.0.4.tgz"; + path = fetchurl { + name = "pinkie___pinkie_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + } + + { + name = "pkg_dir___pkg_dir_2.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz"; + sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b"; + }; + } + + { + name = "pkg_up___pkg_up_1.0.0.tgz"; + path = fetchurl { + name = "pkg_up___pkg_up_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz"; + sha1 = "3e08fb461525c4421624a33b9f7e6d0af5b05a26"; + }; + } + + { + name = "popper.js___popper.js_1.14.4.tgz"; + path = fetchurl { + name = "popper.js___popper.js_1.14.4.tgz"; + url = "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz"; + sha1 = "8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6"; + }; + } + + { + name = "portfinder___portfinder_1.0.13.tgz"; + path = fetchurl { + name = "portfinder___portfinder_1.0.13.tgz"; + url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz"; + sha1 = "bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"; + }; + } + + { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + path = fetchurl { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + } + + { + name = "postcss_calc___postcss_calc_5.3.1.tgz"; + path = fetchurl { + name = "postcss_calc___postcss_calc_5.3.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz"; + sha1 = "77bae7ca928ad85716e2fda42f261bf7c1d65b5e"; + }; + } + + { + name = "postcss_colormin___postcss_colormin_2.2.2.tgz"; + path = fetchurl { + name = "postcss_colormin___postcss_colormin_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz"; + sha1 = "6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"; + }; + } + + { + name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz"; + path = fetchurl { + name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz"; + sha1 = "bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"; + }; + } + + { + name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz"; + path = fetchurl { + name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz"; + sha1 = "befe89fafd5b3dace5ccce51b76b81514be00e3d"; + }; + } + + { + name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz"; + path = fetchurl { + name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz"; + sha1 = "b9abf27b88ac188158a5eb12abcae20263b91932"; + }; + } + + { + name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz"; + path = fetchurl { + name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz"; + sha1 = "d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"; + }; + } + + { + name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz"; + path = fetchurl { + name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz"; + sha1 = "8b1eaf554f686fb288cd874c55667b0aa3668d58"; + }; + } + + { + name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz"; + path = fetchurl { + name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz"; + sha1 = "bce30b2cc591ffc634322b5fb3464b6d934f4433"; + }; + } + + { + name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz"; + path = fetchurl { + name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz"; + sha1 = "82245fdf82337041645e477114d8e593aa18b8ec"; + }; + } + + { + name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz"; + path = fetchurl { + name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz"; + sha1 = "4c5530313c08e1d5b3bbf3d2bbc747e278eea270"; + }; + } + + { + name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz"; + path = fetchurl { + name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz"; + sha1 = "23d90cd127b0a77994915332739034a1a4f3d658"; + }; + } + + { + name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz"; + path = fetchurl { + name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz"; + sha1 = "d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"; + }; + } + + { + name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz"; + path = fetchurl { + name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz"; + sha1 = "a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"; + }; + } + + { + name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz"; + path = fetchurl { + name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz"; + sha1 = "4b58edb56641eba7c8474ab3526cafd7bbdecb69"; + }; + } + + { + name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz"; + path = fetchurl { + name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz"; + sha1 = "5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"; + }; + } + + { + name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz"; + path = fetchurl { + name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz"; + sha1 = "ad2ce071373b943b3d930a3fa59a358c28d6f1f3"; + }; + } + + { + name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz"; + path = fetchurl { + name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz"; + sha1 = "b2c6a98c0072cf91b932d1a496508114311735bf"; + }; + } + + { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz"; + path = fetchurl { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz"; + sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb"; + }; + } + + { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz"; + path = fetchurl { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz"; + sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069"; + }; + } + + { + name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz"; + path = fetchurl { + name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz"; + sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90"; + }; + } + + { + name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz"; + path = fetchurl { + name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz"; + sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20"; + }; + } + + { + name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz"; + path = fetchurl { + name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz"; + sha1 = "ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"; + }; + } + + { + name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz"; + path = fetchurl { + name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz"; + sha1 = "108f74b3f2fcdaf891a2ffa3ea4592279fc78222"; + }; + } + + { + name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz"; + path = fetchurl { + name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz"; + sha1 = "eec6c2a67b6c412a8db2042e77fe8da43f95c11d"; + }; + } + + { + name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz"; + path = fetchurl { + name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz"; + sha1 = "c2c6d20cc958284f6abfbe63f7609bf409059ad3"; + }; + } + + { + name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz"; + path = fetchurl { + name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz"; + sha1 = "68f80695f045d08263a879ad240df8dd64f644ea"; + }; + } + + { + name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz"; + path = fetchurl { + name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz"; + sha1 = "ff76f4d8212437b31c298a42d2e1444025771ae1"; + }; + } + + { + name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz"; + sha1 = "f9437788606c3c9acee16ffe8d8b16297f27bb90"; + }; + } + + { + name = "postcss_svgo___postcss_svgo_2.1.6.tgz"; + path = fetchurl { + name = "postcss_svgo___postcss_svgo_2.1.6.tgz"; + url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz"; + sha1 = "b6df18aa613b666e133f08adb5219c2684ac108d"; + }; + } + + { + name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz"; + path = fetchurl { + name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz"; + sha1 = "981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"; + }; + } + + { + name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz"; + sha1 = "87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"; + }; + } + + { + name = "postcss_zindex___postcss_zindex_2.2.0.tgz"; + path = fetchurl { + name = "postcss_zindex___postcss_zindex_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz"; + sha1 = "d2109ddc055b91af67fc4cb3b025946639d2af22"; + }; + } + + { + name = "postcss___postcss_5.2.18.tgz"; + path = fetchurl { + name = "postcss___postcss_5.2.18.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz"; + sha1 = "badfa1497d46244f6390f58b319830d9107853c5"; + }; + } + + { + name = "postcss___postcss_6.0.23.tgz"; + path = fetchurl { + name = "postcss___postcss_6.0.23.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz"; + sha1 = "61c82cc328ac60e677645f979054eb98bc0e3324"; + }; + } + + { + name = "prepend_http___prepend_http_1.0.4.tgz"; + path = fetchurl { + name = "prepend_http___prepend_http_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz"; + sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"; + }; + } + + { + name = "preserve___preserve_0.2.0.tgz"; + path = fetchurl { + name = "preserve___preserve_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz"; + sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b"; + }; + } + + { + name = "pretty_error___pretty_error_2.1.1.tgz"; + path = fetchurl { + name = "pretty_error___pretty_error_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz"; + sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"; + }; + } + + { + name = "private___private_0.1.8.tgz"; + path = fetchurl { + name = "private___private_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz"; + sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff"; + }; + } + + { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz"; + sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa"; + }; + } + + { + name = "process___process_0.11.10.tgz"; + path = fetchurl { + name = "process___process_0.11.10.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz"; + sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; + }; + } + + { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz"; + sha1 = "ecfc733bf22ff8c6f407fa275327b9ab67e48b93"; + }; + } + + { + name = "prr___prr_1.0.1.tgz"; + path = fetchurl { + name = "prr___prr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz"; + sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; + }; + } + + { + name = "pseudomap___pseudomap_1.0.2.tgz"; + path = fetchurl { + name = "pseudomap___pseudomap_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + } + + { + name = "public_encrypt___public_encrypt_4.0.2.tgz"; + path = fetchurl { + name = "public_encrypt___public_encrypt_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz"; + sha1 = "46eb9107206bf73489f8b85b69d91334c6610994"; + }; + } + + { + name = "punycode___punycode_1.3.2.tgz"; + path = fetchurl { + name = "punycode___punycode_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz"; + sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; + }; + } + + { + name = "punycode___punycode_1.4.1.tgz"; + path = fetchurl { + name = "punycode___punycode_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + } + + { + name = "punycode___punycode_2.1.1.tgz"; + path = fetchurl { + name = "punycode___punycode_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; + sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; + }; + } + + { + name = "q___q_1.5.1.tgz"; + path = fetchurl { + name = "q___q_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz"; + sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; + }; + } + + { + name = "qs___qs_6.5.1.tgz"; + path = fetchurl { + name = "qs___qs_6.5.1.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz"; + sha1 = "349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"; + }; + } + + { + name = "qs___qs_6.4.0.tgz"; + path = fetchurl { + name = "qs___qs_6.4.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz"; + sha1 = "13e26d28ad6b0ffaa91312cd3bf708ed351e7233"; + }; + } + + { + name = "qs___qs_6.5.2.tgz"; + path = fetchurl { + name = "qs___qs_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; + sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; + }; + } + + { + name = "query_string___query_string_4.3.4.tgz"; + path = fetchurl { + name = "query_string___query_string_4.3.4.tgz"; + url = "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz"; + sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb"; + }; + } + + { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + path = fetchurl { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz"; + sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; + }; + } + + { + name = "querystring___querystring_0.2.0.tgz"; + path = fetchurl { + name = "querystring___querystring_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz"; + sha1 = "b209849203bb25df820da756e747005878521620"; + }; + } + + { + name = "querystringify___querystringify_2.0.0.tgz"; + path = fetchurl { + name = "querystringify___querystringify_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz"; + sha1 = "fa3ed6e68eb15159457c89b37bc6472833195755"; + }; + } + + { + name = "randomatic___randomatic_3.0.0.tgz"; + path = fetchurl { + name = "randomatic___randomatic_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz"; + sha1 = "d35490030eb4f7578de292ce6dfb04a91a128923"; + }; + } + + { + name = "randombytes___randombytes_2.0.6.tgz"; + path = fetchurl { + name = "randombytes___randombytes_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz"; + sha1 = "d302c522948588848a8d300c932b44c24231da80"; + }; + } + + { + name = "randomfill___randomfill_1.0.4.tgz"; + path = fetchurl { + name = "randomfill___randomfill_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz"; + sha1 = "c92196fc86ab42be983f1bf31778224931d61458"; + }; + } + + { + name = "range_parser___range_parser_1.2.0.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz"; + sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; + }; + } + + { + name = "raw_body___raw_body_2.3.2.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz"; + sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89"; + }; + } + + { + name = "rc___rc_1.2.8.tgz"; + path = fetchurl { + name = "rc___rc_1.2.8.tgz"; + url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz"; + sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"; + }; + } + + { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + path = fetchurl { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz"; + sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02"; + }; + } + + { + name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; + path = fetchurl { + name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz"; + sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be"; + }; + } + + { + name = "read_pkg___read_pkg_1.1.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz"; + sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"; + }; + } + + { + name = "read_pkg___read_pkg_2.0.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz"; + sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"; + }; + } + + { + name = "readable_stream___readable_stream_1.0.34.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.0.34.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz"; + sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c"; + }; + } + + { + name = "readable_stream___readable_stream_2.3.6.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.6.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz"; + sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"; + }; + } + + { + name = "readdirp___readdirp_2.1.0.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz"; + sha1 = "4ed0ad060df3073300c48440373f72d1cc642d78"; + }; + } + + { + name = "redent___redent_1.0.0.tgz"; + path = fetchurl { + name = "redent___redent_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz"; + sha1 = "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"; + }; + } + + { + name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz"; + path = fetchurl { + name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz"; + sha1 = "747c914e049614a4c9cfbba629871ad1d2927716"; + }; + } + + { + name = "reduce_function_call___reduce_function_call_1.0.2.tgz"; + path = fetchurl { + name = "reduce_function_call___reduce_function_call_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz"; + sha1 = "5a200bf92e0e37751752fe45b0ab330fd4b6be99"; + }; + } + + { + name = "regenerate___regenerate_1.4.0.tgz"; + path = fetchurl { + name = "regenerate___regenerate_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz"; + sha1 = "4a856ec4b56e4077c557589cae85e7a4c8869a11"; + }; + } + + { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; + sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"; + }; + } + + { + name = "regenerator_transform___regenerator_transform_0.10.1.tgz"; + path = fetchurl { + name = "regenerator_transform___regenerator_transform_0.10.1.tgz"; + url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz"; + sha1 = "1e4996837231da8b7f3cf4114d71b5691a0680dd"; + }; + } + + { + name = "regex_cache___regex_cache_0.4.4.tgz"; + path = fetchurl { + name = "regex_cache___regex_cache_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz"; + sha1 = "75bdc58a2a1496cec48a12835bc54c8d562336dd"; + }; + } + + { + name = "regex_not___regex_not_1.0.2.tgz"; + path = fetchurl { + name = "regex_not___regex_not_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; + sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; + }; + } + + { + name = "regex_parser___regex_parser_2.2.9.tgz"; + path = fetchurl { + name = "regex_parser___regex_parser_2.2.9.tgz"; + url = "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz"; + sha1 = "a372f45a248b62976a568037c1b6e60a60599192"; + }; + } + + { + name = "regexpu_core___regexpu_core_1.0.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz"; + sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b"; + }; + } + + { + name = "regexpu_core___regexpu_core_2.0.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz"; + sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240"; + }; + } + + { + name = "regjsgen___regjsgen_0.2.0.tgz"; + path = fetchurl { + name = "regjsgen___regjsgen_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz"; + sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7"; + }; + } + + { + name = "regjsparser___regjsparser_0.1.5.tgz"; + path = fetchurl { + name = "regjsparser___regjsparser_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz"; + sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"; + }; + } + + { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + path = fetchurl { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + } + + { + name = "renderkid___renderkid_2.0.1.tgz"; + path = fetchurl { + name = "renderkid___renderkid_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz"; + sha1 = "898cabfc8bede4b7b91135a3ffd323e58c0db319"; + }; + } + + { + name = "repeat_element___repeat_element_1.1.2.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz"; + sha1 = "ef089a178d1483baae4d93eb98b4f9e4e11d990a"; + }; + } + + { + name = "repeat_string___repeat_string_1.6.1.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + } + + { + name = "repeating___repeating_2.0.1.tgz"; + path = fetchurl { + name = "repeating___repeating_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz"; + sha1 = "5214c53a926d3552707527fbab415dbc08d06dda"; + }; + } + + { + name = "request___request_2.87.0.tgz"; + path = fetchurl { + name = "request___request_2.87.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz"; + sha1 = "32f00235cd08d482b4d0d68db93a829c0ed5756e"; + }; + } + + { + name = "request___request_2.81.0.tgz"; + path = fetchurl { + name = "request___request_2.81.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz"; + sha1 = "c6928946a0e06c5f8d6f8a9333469ffda46298a0"; + }; + } + + { + name = "require_directory___require_directory_2.1.1.tgz"; + path = fetchurl { + name = "require_directory___require_directory_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + } + + { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz"; + sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; + }; + } + + { + name = "requires_port___requires_port_1.0.0.tgz"; + path = fetchurl { + name = "requires_port___requires_port_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz"; + sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; + }; + } + + { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + path = fetchurl { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz"; + sha1 = "00a9f7387556e27038eae232caa372a6a59b665a"; + }; + } + + { + name = "resolve_from___resolve_from_3.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz"; + sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; + }; + } + + { + name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz"; + path = fetchurl { + name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz"; + sha1 = "e1b37034d48f22f8cfb9f04c026faaa070fdaf26"; + }; + } + + { + name = "resolve_url___resolve_url_0.2.1.tgz"; + path = fetchurl { + name = "resolve_url___resolve_url_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + } + + { + name = "ret___ret_0.1.15.tgz"; + path = fetchurl { + name = "ret___ret_0.1.15.tgz"; + url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; + sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; + }; + } + + { + name = "rework_visit___rework_visit_1.0.0.tgz"; + path = fetchurl { + name = "rework_visit___rework_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz"; + sha1 = "9945b2803f219e2f7aca00adb8bc9f640f842c9a"; + }; + } + + { + name = "rework___rework_1.0.1.tgz"; + path = fetchurl { + name = "rework___rework_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz"; + sha1 = "30806a841342b54510aa4110850cd48534144aa7"; + }; + } + + { + name = "right_align___right_align_0.1.3.tgz"; + path = fetchurl { + name = "right_align___right_align_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz"; + sha1 = "61339b722fe6a3515689210d24e14c96148613ef"; + }; + } + + { + name = "rimraf___rimraf_2.6.2.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.2.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz"; + sha1 = "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"; + }; + } + + { + name = "ripemd160___ripemd160_2.0.2.tgz"; + path = fetchurl { + name = "ripemd160___ripemd160_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz"; + sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.1.1.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz"; + sha1 = "893312af69b2123def71f57889001671eeb2c853"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; + }; + } + + { + name = "safe_regex___safe_regex_1.1.0.tgz"; + path = fetchurl { + name = "safe_regex___safe_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + } + + { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + path = fetchurl { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; + }; + } + + { + name = "sass_graph___sass_graph_2.2.4.tgz"; + path = fetchurl { + name = "sass_graph___sass_graph_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz"; + sha1 = "13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"; + }; + } + + { + name = "sass_loader___sass_loader_7.0.3.tgz"; + path = fetchurl { + name = "sass_loader___sass_loader_7.0.3.tgz"; + url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.0.3.tgz"; + sha1 = "6ca10871a1cc7549f8143db5a9958242c4e4ca2a"; + }; + } + + { + name = "sax___sax_1.2.4.tgz"; + path = fetchurl { + name = "sax___sax_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; + sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; + }; + } + + { + name = "schema_utils___schema_utils_0.3.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz"; + sha1 = "f5877222ce3e931edae039f17eb3716e7137f8cf"; + }; + } + + { + name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; + path = fetchurl { + name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz"; + sha1 = "8eb06db9a9723333824d3f5530641149847ce5d1"; + }; + } + + { + name = "select_hose___select_hose_2.0.0.tgz"; + path = fetchurl { + name = "select_hose___select_hose_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz"; + sha1 = "625d8658f865af43ec962bfc376a37359a4994ca"; + }; + } + + { + name = "selfsigned___selfsigned_1.10.3.tgz"; + path = fetchurl { + name = "selfsigned___selfsigned_1.10.3.tgz"; + url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz"; + sha1 = "d628ecf9e3735f84e8bafba936b3cf85bea43823"; + }; + } + + { + name = "semver___semver_5.5.0.tgz"; + path = fetchurl { + name = "semver___semver_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz"; + sha1 = "dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"; + }; + } + + { + name = "semver___semver_5.3.0.tgz"; + path = fetchurl { + name = "semver___semver_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz"; + sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; + }; + } + + { + name = "send___send_0.16.2.tgz"; + path = fetchurl { + name = "send___send_0.16.2.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz"; + sha1 = "6ecca1e0f8c156d141597559848df64730a6bbc1"; + }; + } + + { + name = "serve_index___serve_index_1.9.1.tgz"; + path = fetchurl { + name = "serve_index___serve_index_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz"; + sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; + }; + } + + { + name = "serve_static___serve_static_1.13.2.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.13.2.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz"; + sha1 = "095e8472fd5b46237db50ce486a43f4b86c6cec1"; + }; + } + + { + name = "set_blocking___set_blocking_2.0.0.tgz"; + path = fetchurl { + name = "set_blocking___set_blocking_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + } + + { + name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz"; + path = fetchurl { + name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz"; + sha1 = "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"; + }; + } + + { + name = "set_value___set_value_0.4.3.tgz"; + path = fetchurl { + name = "set_value___set_value_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz"; + sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"; + }; + } + + { + name = "set_value___set_value_2.0.0.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz"; + sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"; + }; + } + + { + name = "setimmediate___setimmediate_1.0.5.tgz"; + path = fetchurl { + name = "setimmediate___setimmediate_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz"; + sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.0.3.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz"; + sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; + }; + } + + { + name = "sha.js___sha.js_2.4.11.tgz"; + path = fetchurl { + name = "sha.js___sha.js_2.4.11.tgz"; + url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz"; + sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7"; + }; + } + + { + name = "shallow_clone___shallow_clone_1.0.0.tgz"; + path = fetchurl { + name = "shallow_clone___shallow_clone_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz"; + sha1 = "4480cd06e882ef68b2ad88a3ea54832e2c48b571"; + }; + } + + { + name = "shebang_command___shebang_command_1.2.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + } + + { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + } + + { + name = "signal_exit___signal_exit_3.0.2.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz"; + sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; + }; + } + + { + name = "slash___slash_1.0.0.tgz"; + path = fetchurl { + name = "slash___slash_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz"; + sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"; + }; + } + + { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + path = fetchurl { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; + }; + } + + { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + path = fetchurl { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; + }; + } + + { + name = "snapdragon___snapdragon_0.8.2.tgz"; + path = fetchurl { + name = "snapdragon___snapdragon_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; + sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; + }; + } + + { + name = "sntp___sntp_1.0.9.tgz"; + path = fetchurl { + name = "sntp___sntp_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz"; + sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198"; + }; + } + + { + name = "sockjs_client___sockjs_client_1.1.4.tgz"; + path = fetchurl { + name = "sockjs_client___sockjs_client_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz"; + sha1 = "5babe386b775e4cf14e7520911452654016c8b12"; + }; + } + + { + name = "sockjs___sockjs_0.3.19.tgz"; + path = fetchurl { + name = "sockjs___sockjs_0.3.19.tgz"; + url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz"; + sha1 = "d976bbe800af7bd20ae08598d582393508993c0d"; + }; + } + + { + name = "sort_keys___sort_keys_1.1.2.tgz"; + path = fetchurl { + name = "sort_keys___sort_keys_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz"; + sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad"; + }; + } + + { + name = "source_list_map___source_list_map_0.1.8.tgz"; + path = fetchurl { + name = "source_list_map___source_list_map_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz"; + sha1 = "c550b2ab5427f6b3f21f5afead88c4f5587b2106"; + }; + } + + { + name = "source_list_map___source_list_map_2.0.0.tgz"; + path = fetchurl { + name = "source_list_map___source_list_map_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz"; + sha1 = "aaa47403f7b245a92fbc97ea08f250d6087ed085"; + }; + } + + { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz"; + sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259"; + }; + } + + { + name = "source_map_support___source_map_support_0.4.18.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.4.18.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz"; + sha1 = "0286a6de8be42641338594e97ccea75f0a2c585f"; + }; + } + + { + name = "source_map_url___source_map_url_0.4.0.tgz"; + path = fetchurl { + name = "source_map_url___source_map_url_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + } + + { + name = "source_map___source_map_0.1.43.tgz"; + path = fetchurl { + name = "source_map___source_map_0.1.43.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz"; + sha1 = "c24bc146ca517c1471f5dacbe2571b2b7f9e3346"; + }; + } + + { + name = "source_map___source_map_0.4.4.tgz"; + path = fetchurl { + name = "source_map___source_map_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz"; + sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b"; + }; + } + + { + name = "source_map___source_map_0.5.7.tgz"; + path = fetchurl { + name = "source_map___source_map_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + } + + { + name = "source_map___source_map_0.6.1.tgz"; + path = fetchurl { + name = "source_map___source_map_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; + sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; + }; + } + + { + name = "spdx_correct___spdx_correct_3.0.0.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz"; + sha1 = "05a5b4d7153a195bc92c3c425b69f3b2a9524c82"; + }; + } + + { + name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz"; + sha1 = "2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"; + }; + } + + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz"; + sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0"; + }; + } + + { + name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz"; + sha1 = "7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"; + }; + } + + { + name = "spdy_transport___spdy_transport_2.1.0.tgz"; + path = fetchurl { + name = "spdy_transport___spdy_transport_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz"; + sha1 = "4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"; + }; + } + + { + name = "spdy___spdy_3.4.7.tgz"; + path = fetchurl { + name = "spdy___spdy_3.4.7.tgz"; + url = "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz"; + sha1 = "42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"; + }; + } + + { + name = "split_string___split_string_3.1.0.tgz"; + path = fetchurl { + name = "split_string___split_string_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; + sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; + }; + } + + { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + path = fetchurl { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + } + + { + name = "sshpk___sshpk_1.14.2.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.14.2.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz"; + sha1 = "c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"; + }; + } + + { + name = "stackframe___stackframe_1.0.4.tgz"; + path = fetchurl { + name = "stackframe___stackframe_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz"; + sha1 = "357b24a992f9427cba6b545d96a14ed2cbca187b"; + }; + } + + { + name = "static_extend___static_extend_0.1.2.tgz"; + path = fetchurl { + name = "static_extend___static_extend_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + } + + { + name = "statuses___statuses_1.5.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + } + + { + name = "statuses___statuses_1.4.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz"; + sha1 = "bb73d446da2796106efcc1b601a253d6c46bd087"; + }; + } + + { + name = "stdout_stream___stdout_stream_1.4.0.tgz"; + path = fetchurl { + name = "stdout_stream___stdout_stream_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz"; + sha1 = "a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"; + }; + } + + { + name = "stream_browserify___stream_browserify_2.0.1.tgz"; + path = fetchurl { + name = "stream_browserify___stream_browserify_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz"; + sha1 = "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"; + }; + } + + { + name = "stream_http___stream_http_2.8.3.tgz"; + path = fetchurl { + name = "stream_http___stream_http_2.8.3.tgz"; + url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz"; + sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc"; + }; + } + + { + name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; + path = fetchurl { + name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz"; + sha1 = "279b225df1d582b1f54e65addd4352e18faa0713"; + }; + } + + { + name = "string_width___string_width_1.0.2.tgz"; + path = fetchurl { + name = "string_width___string_width_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + } + + { + name = "string_width___string_width_2.1.1.tgz"; + path = fetchurl { + name = "string_width___string_width_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; + sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; + }; + } + + { + name = "string_decoder___string_decoder_1.1.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; + sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; + }; + } + + { + name = "string_decoder___string_decoder_0.10.31.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_0.10.31.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz"; + sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94"; + }; + } + + { + name = "stringstream___stringstream_0.0.6.tgz"; + path = fetchurl { + name = "stringstream___stringstream_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz"; + sha1 = "7880225b0d4ad10e30927d167a1d6f2fd3b33a72"; + }; + } + + { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + } + + { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + } + + { + name = "strip_bom___strip_bom_2.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz"; + sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e"; + }; + } + + { + name = "strip_bom___strip_bom_3.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz"; + sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"; + }; + } + + { + name = "strip_eof___strip_eof_1.0.0.tgz"; + path = fetchurl { + name = "strip_eof___strip_eof_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz"; + sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf"; + }; + } + + { + name = "strip_indent___strip_indent_1.0.1.tgz"; + path = fetchurl { + name = "strip_indent___strip_indent_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz"; + sha1 = "0c7962a6adefa7bbd4ac366460a638552ae1a0a2"; + }; + } + + { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + } + + { + name = "style_loader___style_loader_0.13.2.tgz"; + path = fetchurl { + name = "style_loader___style_loader_0.13.2.tgz"; + url = "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz"; + sha1 = "74533384cf698c7104c7951150b49717adc2f3bb"; + }; + } + + { + name = "summernote___summernote_0.8.10.tgz"; + path = fetchurl { + name = "summernote___summernote_0.8.10.tgz"; + url = "https://registry.yarnpkg.com/summernote/-/summernote-0.8.10.tgz"; + sha1 = "21a5d7f18a3b07500b58b60d5907417a54897520"; + }; + } + + { + name = "supports_color___supports_color_2.0.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + } + + { + name = "supports_color___supports_color_3.2.3.tgz"; + path = fetchurl { + name = "supports_color___supports_color_3.2.3.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz"; + sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; + }; + } + + { + name = "supports_color___supports_color_4.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz"; + sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b"; + }; + } + + { + name = "supports_color___supports_color_5.4.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.4.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz"; + sha1 = "1c6b337402c2137605efe19f10fec390f6faab54"; + }; + } + + { + name = "svgo___svgo_0.7.2.tgz"; + path = fetchurl { + name = "svgo___svgo_0.7.2.tgz"; + url = "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz"; + sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5"; + }; + } + + { + name = "tapable___tapable_0.2.8.tgz"; + path = fetchurl { + name = "tapable___tapable_0.2.8.tgz"; + url = "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz"; + sha1 = "99372a5c999bf2df160afc0d74bed4f47948cd22"; + }; + } + + { + name = "tar___tar_2.2.1.tgz"; + path = fetchurl { + name = "tar___tar_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz"; + sha1 = "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"; + }; + } + + { + name = "tar___tar_4.4.4.tgz"; + path = fetchurl { + name = "tar___tar_4.4.4.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz"; + sha1 = "ec8409fae9f665a4355cc3b4087d0820232bb8cd"; + }; + } + + { + name = "thunky___thunky_1.0.2.tgz"; + path = fetchurl { + name = "thunky___thunky_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz"; + sha1 = "a862e018e3fb1ea2ec3fce5d55605cf57f247371"; + }; + } + + { + name = "time_stamp___time_stamp_2.0.0.tgz"; + path = fetchurl { + name = "time_stamp___time_stamp_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz"; + sha1 = "95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"; + }; + } + + { + name = "timers_browserify___timers_browserify_2.0.10.tgz"; + path = fetchurl { + name = "timers_browserify___timers_browserify_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz"; + sha1 = "1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"; + }; + } + + { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + path = fetchurl { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; + sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; + }; + } + + { + name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; + path = fetchurl { + name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz"; + sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47"; + }; + } + + { + name = "to_object_path___to_object_path_0.3.0.tgz"; + path = fetchurl { + name = "to_object_path___to_object_path_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + } + + { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + } + + { + name = "to_regex___to_regex_3.0.2.tgz"; + path = fetchurl { + name = "to_regex___to_regex_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; + sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.3.4.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.3.4.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz"; + sha1 = "ec60cee38ac675063ffc97a5c18970578ee83655"; + }; + } + + { + name = "trim_newlines___trim_newlines_1.0.0.tgz"; + path = fetchurl { + name = "trim_newlines___trim_newlines_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz"; + sha1 = "5887966bb582a4503a41eb524f7d35011815a613"; + }; + } + + { + name = "trim_right___trim_right_1.0.1.tgz"; + path = fetchurl { + name = "trim_right___trim_right_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz"; + sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003"; + }; + } + + { + name = "true_case_path___true_case_path_1.0.2.tgz"; + path = fetchurl { + name = "true_case_path___true_case_path_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz"; + sha1 = "7ec91130924766c7f573be3020c34f8fdfd00d62"; + }; + } + + { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + path = fetchurl { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz"; + sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; + }; + } + + { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + } + + { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + path = fetchurl { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + } + + { + name = "type_is___type_is_1.6.16.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.16.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz"; + sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194"; + }; + } + + { + name = "uglify_js___uglify_js_2.8.29.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_2.8.29.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz"; + sha1 = "29c5733148057bb4e1f75df35b7a9cb72e6a59dd"; + }; + } + + { + name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz"; + path = fetchurl { + name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"; + sha1 = "6e0924d6bda6b5afe349e39a6d632850a0f882b7"; + }; + } + + { + name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz"; + path = fetchurl { + name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz"; + url = "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz"; + sha1 = "b951f4abb6bd617e66f63eb891498e391763e309"; + }; + } + + { + name = "union_value___union_value_1.0.0.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz"; + sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"; + }; + } + + { + name = "uniq___uniq_1.0.1.tgz"; + path = fetchurl { + name = "uniq___uniq_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + } + + { + name = "uniqs___uniqs_2.0.0.tgz"; + path = fetchurl { + name = "uniqs___uniqs_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz"; + sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; + }; + } + + { + name = "unpipe___unpipe_1.0.0.tgz"; + path = fetchurl { + name = "unpipe___unpipe_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + } + + { + name = "unset_value___unset_value_1.0.0.tgz"; + path = fetchurl { + name = "unset_value___unset_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + } + + { + name = "upath___upath_1.1.0.tgz"; + path = fetchurl { + name = "upath___upath_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz"; + sha1 = "35256597e46a581db4793d0ce47fa9aebfc9fabd"; + }; + } + + { + name = "uri_js___uri_js_4.2.2.tgz"; + path = fetchurl { + name = "uri_js___uri_js_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; + sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; + }; + } + + { + name = "urix___urix_0.1.0.tgz"; + path = fetchurl { + name = "urix___urix_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + } + + { + name = "url_parse___url_parse_1.4.1.tgz"; + path = fetchurl { + name = "url_parse___url_parse_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz"; + sha1 = "4dec9dad3dc8585f862fed461d2e19bbf623df30"; + }; + } + + { + name = "url___url_0.11.0.tgz"; + path = fetchurl { + name = "url___url_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz"; + sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; + }; + } + + { + name = "use___use_3.1.1.tgz"; + path = fetchurl { + name = "use___use_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; + sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; + }; + } + + { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + path = fetchurl { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + } + + { + name = "util___util_0.10.3.tgz"; + path = fetchurl { + name = "util___util_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz"; + sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; + }; + } + + { + name = "util___util_0.10.4.tgz"; + path = fetchurl { + name = "util___util_0.10.4.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz"; + sha1 = "3aa0125bfe668a4672de58857d3ace27ecb76901"; + }; + } + + { + name = "utila___utila_0.3.3.tgz"; + path = fetchurl { + name = "utila___utila_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz"; + sha1 = "d7e8e7d7e309107092b05f8d9688824d633a4226"; + }; + } + + { + name = "utila___utila_0.4.0.tgz"; + path = fetchurl { + name = "utila___utila_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz"; + sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c"; + }; + } + + { + name = "utils_merge___utils_merge_1.0.1.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + } + + { + name = "uuid___uuid_3.3.2.tgz"; + path = fetchurl { + name = "uuid___uuid_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz"; + sha1 = "1b4af4955eb3077c501c23872fc6513811587131"; + }; + } + + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz"; + sha1 = "81643bcbef1bdfecd4623793dc4648948ba98338"; + }; + } + + { + name = "vary___vary_1.1.2.tgz"; + path = fetchurl { + name = "vary___vary_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + } + + { + name = "vendors___vendors_1.0.2.tgz"; + path = fetchurl { + name = "vendors___vendors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz"; + sha1 = "7fcb5eef9f5623b156bcea89ec37d63676f21801"; + }; + } + + { + name = "verror___verror_1.10.0.tgz"; + path = fetchurl { + name = "verror___verror_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + } + + { + name = "vm_browserify___vm_browserify_0.0.4.tgz"; + path = fetchurl { + name = "vm_browserify___vm_browserify_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz"; + sha1 = "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"; + }; + } + + { + name = "watchpack___watchpack_1.6.0.tgz"; + path = fetchurl { + name = "watchpack___watchpack_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz"; + sha1 = "4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"; + }; + } + + { + name = "wbuf___wbuf_1.7.3.tgz"; + path = fetchurl { + name = "wbuf___wbuf_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz"; + sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df"; + }; + } + + { + name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz"; + path = fetchurl { + name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-chunk-hash/-/webpack-chunk-hash-0.5.0.tgz"; + sha1 = "1dba38203d73c1e6ab069b6810a5a37402399dec"; + }; + } + + { + name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz"; + path = fetchurl { + name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz"; + sha1 = "f8fc1120ce3b4fc5680ceecb43d777966b21105e"; + }; + } + + { + name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz"; + path = fetchurl { + name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz"; + sha1 = "1f4f4c78bf1895378f376815910812daf79a216f"; + }; + } + + { + name = "webpack_sources___webpack_sources_1.1.0.tgz"; + path = fetchurl { + name = "webpack_sources___webpack_sources_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz"; + sha1 = "a101ebae59d6507354d71d8013950a3a8b7a5a54"; + }; + } + + { + name = "webpack___webpack_3.12.0.tgz"; + path = fetchurl { + name = "webpack___webpack_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz"; + sha1 = "3f9e34360370602fcf639e97939db486f4ec0d74"; + }; + } + + { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz"; + sha1 = "0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"; + }; + } + + { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + path = fetchurl { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz"; + sha1 = "5d2ff22977003ec687a4b87073dfbbac146ccf29"; + }; + } + + { + name = "whet.extend___whet.extend_0.9.9.tgz"; + path = fetchurl { + name = "whet.extend___whet.extend_0.9.9.tgz"; + url = "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz"; + sha1 = "f877d5bf648c97e5aa542fadc16d6a259b9c11a1"; + }; + } + + { + name = "which_module___which_module_1.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz"; + sha1 = "bba63ca861948994ff307736089e3b96026c2a4f"; + }; + } + + { + name = "which_module___which_module_2.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + } + + { + name = "which___which_1.3.1.tgz"; + path = fetchurl { + name = "which___which_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; + sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; + }; + } + + { + name = "wide_align___wide_align_1.1.3.tgz"; + path = fetchurl { + name = "wide_align___wide_align_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz"; + sha1 = "ae074e6bdc0c14a431e804e624549c633b000457"; + }; + } + + { + name = "window_size___window_size_0.1.0.tgz"; + path = fetchurl { + name = "window_size___window_size_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz"; + sha1 = "5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"; + }; + } + + { + name = "wordwrap___wordwrap_0.0.2.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz"; + sha1 = "b79669bb42ecb409f83d583cad52ca17eaa1643f"; + }; + } + + { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; + sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; + }; + } + + { + name = "wrappy___wrappy_1.0.2.tgz"; + path = fetchurl { + name = "wrappy___wrappy_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + } + + { + name = "xtend___xtend_4.0.1.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz"; + sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; + }; + } + + { + name = "y18n___y18n_3.2.1.tgz"; + path = fetchurl { + name = "y18n___y18n_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz"; + sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41"; + }; + } + + { + name = "yallist___yallist_2.1.2.tgz"; + path = fetchurl { + name = "yallist___yallist_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + } + + { + name = "yallist___yallist_3.0.2.tgz"; + path = fetchurl { + name = "yallist___yallist_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz"; + sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"; + }; + } + + { + name = "yargs_parser___yargs_parser_4.2.1.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz"; + sha1 = "29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"; + }; + } + + { + name = "yargs_parser___yargs_parser_5.0.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz"; + sha1 = "275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"; + }; + } + + { + name = "yargs_parser___yargs_parser_7.0.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz"; + sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"; + }; + } + + { + name = "yargs___yargs_6.6.0.tgz"; + path = fetchurl { + name = "yargs___yargs_6.6.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz"; + sha1 = "782ec21ef403345f830a808ca3d513af56065208"; + }; + } + + { + name = "yargs___yargs_7.1.0.tgz"; + path = fetchurl { + name = "yargs___yargs_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz"; + sha1 = "6ba318eb16961727f5d284f8ea003e8d6154d0c8"; + }; + } + + { + name = "yargs___yargs_8.0.2.tgz"; + path = fetchurl { + name = "yargs___yargs_8.0.2.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz"; + sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360"; + }; + } + + { + name = "yargs___yargs_3.10.0.tgz"; + path = fetchurl { + name = "yargs___yargs_3.10.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz"; + sha1 = "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"; + }; + } + ]; +} diff --git a/pkgs/private/webapps/chloe/chloe.json b/pkgs/private/webapps/chloe/chloe.json new file mode 100644 index 00000000..686d751e --- /dev/null +++ b/pkgs/private/webapps/chloe/chloe.json @@ -0,0 +1,14 @@ +{ + "tag": "96fc4eb-master", + "meta": { + "name": "chloe", + "url": "gitolite@git.immae.eu:perso/Immae/Sites/Chloe", + "branch": "master" + }, + "git": { + "url": "gitolite@git.immae.eu:perso/Immae/Sites/Chloe", + "rev": "96fc4eb0099a29b0f9a58fb4eaec4bf14ac65f0a", + "sha256": "0mf15j6z86j2smm2k360cmm5djhcjbs9949pznwi57kw97vkm1s3", + "fetchSubmodules": true + } +} diff --git a/pkgs/private/webapps/chloe/default.nix b/pkgs/private/webapps/chloe/default.nix new file mode 100644 index 00000000..f148d4b0 --- /dev/null +++ b/pkgs/private/webapps/chloe/default.nix @@ -0,0 +1,19 @@ +{ environment ? "prod" +, varDir ? "/var/lib/chloe_${environment}" +, spip, stdenv, mylibs, sassc }: +let + siteDir = stdenv.mkDerivation (mylibs.fetchedGitPrivate ./chloe.json // rec { + buildPhase = '' + make + ''; + installPhase = '' + cp -a . $out + ''; + buildInputs = [ sassc ]; + }); +in +spip.override { + ldap = true; + siteName = "chloe"; + inherit environment siteDir; +} diff --git a/pkgs/private/webapps/connexionswing/connexionswing.json b/pkgs/private/webapps/connexionswing/connexionswing.json new file mode 100644 index 00000000..44d9f0e4 --- /dev/null +++ b/pkgs/private/webapps/connexionswing/connexionswing.json @@ -0,0 +1,14 @@ +{ + "tag": "dfcdce0-master", + "meta": { + "name": "connexionswing", + "url": "gitolite@git.immae.eu:perso/Immae/Projets/Connexionswing", + "branch": "master" + }, + "git": { + "url": "gitolite@git.immae.eu:perso/Immae/Projets/Connexionswing", + "rev": "dfcdce04d11a75f5e850e6dc3a049de4517fc107", + "sha256": "0ddirwxs2ify3bni6nv787nb31ckyn2hsrcq8g01b5cfv5havkwq", + "fetchSubmodules": true + } +} diff --git a/pkgs/private/webapps/connexionswing/default.nix b/pkgs/private/webapps/connexionswing/default.nix new file mode 100644 index 00000000..04e296b8 --- /dev/null +++ b/pkgs/private/webapps/connexionswing/default.nix @@ -0,0 +1,27 @@ +{ environment ? "prod" +, varDir ? "/var/lib/connexionswing_${environment}" +, composerEnv, fetchurl, fetchgit, mylibs }: +let + app = composerEnv.buildPackage ( + import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // + mylibs.fetchedGitPrivate ./connexionswing.json // + rec { + noDev = (environment == "prod"); + preInstall = '' + export SYMFONY_ENV="${environment}" + ''; + postInstall = '' + cd $out + ${if environment == "prod" then "php ./bin/console assetic:dump --env=prod --no-debug" else ""} + rm app/config/parameters.yml + ln -sf /var/secrets/webapps/${environment}-connexionswing app/config/parameters.yml + rm -rf var/{logs,cache} + ln -sf ${varDir}/var/{logs,cache} var/ + ln -sf ${varDir}/{medias,uploads} web/images/ + ''; + passthru = { + inherit varDir environment; + webRoot = "${app}/web"; + }; + }); +in app diff --git a/pkgs/private/webapps/connexionswing/php-packages.nix b/pkgs/private/webapps/connexionswing/php-packages.nix new file mode 100644 index 00000000..581b4372 --- /dev/null +++ b/pkgs/private/webapps/connexionswing/php-packages.nix @@ -0,0 +1,597 @@ +# Generated with composer2nix and adapted to return only the list of +# packages +{ composerEnv, fetchurl, fetchgit ? null }: +{ + packages = { + "behat/transliterator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"; + src = fetchurl { + url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c; + sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0"; + }; + }; + }; + "components/bootstrap" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "components-bootstrap-670295b9d6170a79acc8586a15e729bf24128275"; + src = fetchurl { + url = https://api.github.com/repos/components/bootstrap/zipball/670295b9d6170a79acc8586a15e729bf24128275; + sha256 = "0lcq9cjnywvf1nd8k99flgcf2dmfgyyxzsvcpip8xiibmh5x04p9"; + }; + }; + }; + "components/jquery" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "components-jquery-5dd7297d7603e11e53bdcca2a71074d92de37b8f"; + src = fetchurl { + url = https://api.github.com/repos/components/jquery/zipball/5dd7297d7603e11e53bdcca2a71074d92de37b8f; + sha256 = "1maplw3yic1pzbwwl2amjlivipsi1w0r8bq7i0mmjaqf7wij506i"; + }; + }; + }; + "components/jqueryui" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "components-jqueryui-44ecf3794cc56b65954cc19737234a3119d036cc"; + src = fetchurl { + url = https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc; + sha256 = "1y0ppxk44jkxbh38i05sg0zcgk927s5wy6sjngwr5qifibqbcbhk"; + }; + }; + }; + "composer/ca-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "composer-ca-bundle-d2c0a83b7533d6912e8d516756ebd34f893e9169"; + src = fetchurl { + url = https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169; + sha256 = "1as399dzrfbjnifb87j1g5cvrbacyddbay8fv59i56xx1bdq7lwc"; + }; + }; + }; + "doctrine/annotations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-annotations-54cacc9b81758b14e3ce750f205a393d52339e97"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97; + sha256 = "1wi5skihqbcinlkrkr15nmmvqkn2gydqib8xl232abdvfq1q0w24"; + }; + }; + }; + "doctrine/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-cache-eb152c5100571c7a45470ff2a35095ab3f3b900b"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b; + sha256 = "0iq0qqv1smlqz63jhj2fpjy54c5dwfwxyf5c89iky6i0yb81gwyd"; + }; + }; + }; + "doctrine/collections" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-collections-1a4fb7e902202c33cce8c55989b945612943c2ba"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba; + sha256 = "0fkiwkx7zbmfnh4p21za807lh1n7g1f4lpgy8y59g4r5krvpl90w"; + }; + }; + }; + "doctrine/common" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-common-4acb8f89626baafede6ee5475bc5844096eba8a9"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9; + sha256 = "0qjqframvg81z3lwqaj5haanqj9v3dfbj170pxmwlgmrfsbr16zh"; + }; + }; + }; + "doctrine/dbal" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873; + sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3"; + }; + }; + }; + "doctrine/doctrine-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-bundle-703fad32e4c8cbe609caf45a71a1d4266c830f0f"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/703fad32e4c8cbe609caf45a71a1d4266c830f0f; + sha256 = "0v2f63j22i3im8jbmv7spi8j42fay6dnxjvbxnbwj190ajxl6sdp"; + }; + }; + }; + "doctrine/doctrine-cache-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-cache-bundle-4c8e363f96427924e7e519c5b5119b4f54512697"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/4c8e363f96427924e7e519c5b5119b4f54512697; + sha256 = "1irm04iijzq6gziknwyb10a9s0xbzh04xs5i2d6aac86cc29187c"; + }; + }; + }; + "doctrine/doctrine-migrations-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-migrations-bundle-a9e506369f931351a2a6dd2aef588a822802b1b7"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a9e506369f931351a2a6dd2aef588a822802b1b7; + sha256 = "1jgrqsgdwcm2g8rml76qr6b19s1vxfbnrp43qr6n1g9kbx7y9wg9"; + }; + }; + }; + "doctrine/inflector" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-inflector-90b2128806bfde671b6952ab8bea493942c1fdae"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae; + sha256 = "01vmclj3k7xil51jg329fznshh8d07pvm4mr89lvfn1d7fyrq6qw"; + }; + }; + }; + "doctrine/instantiator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d; + sha256 = "15dcja45rnwya431pcm826l68k1g8f1fabl7rih69alcdyvdlln4"; + }; + }; + }; + "doctrine/lexer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; + sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; + }; + }; + }; + "doctrine/migrations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-migrations-c81147c0f2938a6566594455367e095150547f72"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/migrations/zipball/c81147c0f2938a6566594455367e095150547f72; + sha256 = "0x8hvxbm3f40sx25nq8zlh1kr936pagghzp89l0gdy5bar7cdzi5"; + }; + }; + }; + "doctrine/orm" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-orm-810a7baf81462a5ddf10e8baa8cb94b6eec02754"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754; + sha256 = "1hmkc7917kgnav9hmlgvlp7qwm3zjj910ci71g9yqwjh6s28wrf1"; + }; + }; + }; + "fig/link-util" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac; + sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64"; + }; + }; + }; + "friendsofsymfony/jsrouting-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "friendsofsymfony-jsrouting-bundle-49c1069132dcef371fb526351569deabeb6f0d8e"; + src = fetchurl { + url = https://api.github.com/repos/FriendsOfSymfony/FOSJsRoutingBundle/zipball/49c1069132dcef371fb526351569deabeb6f0d8e; + sha256 = "0ymmxhxbjnzj8bk3zq55vq0xvsaq82348v321gy2jyi90d19p5j7"; + }; + }; + }; + "gedmo/doctrine-extensions" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "gedmo-doctrine-extensions-1e400fbd05b7e5f912f55fe95805450f7d3bed60"; + src = fetchurl { + url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/1e400fbd05b7e5f912f55fe95805450f7d3bed60; + sha256 = "0mpdpmar1hxamz2x2iqjickf1msjh67kkfpsblnklxk5izjwzhxx"; + }; + }; + }; + "immae/connexionswing-ckeditor-component" = { + targetDir = ""; + src = fetchgit { + name = "immae-connexionswing-ckeditor-component-3b35bd273a79f6b01fda7a246aed64aca147ea7a"; + url = "https://git.immae.eu/perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git"; + rev = "3b35bd273a79f6b01fda7a246aed64aca147ea7a"; + sha256 = "1w0y6k28ci73n0db9gwvqg7grzvh1z718ys9v1ik8cla7zw83bni"; + }; + }; + "immae/jquery-touchswipe" = { + targetDir = ""; + src = fetchgit { + name = "immae-jquery-touchswipe-3e15949df974d6612d76dc9ee75cd976dbcc2114"; + url = "https://git.immae.eu/perso/Immae/Projets/packagist/jquery-touchswipe.git"; + rev = "3e15949df974d6612d76dc9ee75cd976dbcc2114"; + sha256 = "1pnvki1j3a65cdwwqs0id790ni813lh3r0m7556gdn0hsqa1cc4d"; + }; + }; + "incenteev/composer-parameter-handler" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550"; + src = fetchurl { + url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550; + sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm"; + }; + }; + }; + "jdorn/sql-formatter" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; + src = fetchurl { + url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; + sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; + }; + }; + }; + "kriswallsmith/assetic" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"; + src = fetchurl { + url = https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1; + sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8"; + }; + }; + }; + "monolog/monolog" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "monolog-monolog-fd8c787753b3a2ad11bc60c063cff1358a32a3b4"; + src = fetchurl { + url = https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4; + sha256 = "0avf3y8raw23krwdb7kw9qb5bsr5ls4i7qd2vh7hcds3qjixg3h9"; + }; + }; + }; + "ocramius/proxy-manager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "ocramius-proxy-manager-57e9272ec0e8deccf09421596e0e2252df440e11"; + src = fetchurl { + url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11; + sha256 = "10crhcnhz42b01i6lv6ysgc7awp7yw82p4i2a4sg6bjihw677yps"; + }; + }; + }; + "paragonie/random_compat" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "paragonie-random_compat-258c89a6b97de7dfaf5b8c7607d0478e236b04fb"; + src = fetchurl { + url = https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb; + sha256 = "11arrici2mgfj7r847wm423pqrvfj9wn9jcgyxnq4rzyahaxz5l1"; + }; + }; + }; + "psr/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; + sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; + }; + }; + }; + "psr/container" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; + sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; + }; + }; + }; + "psr/link" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562; + sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13"; + }; + }; + }; + "psr/log" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-log-4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d; + sha256 = "1mlcv17fjw39bjpck176ah1z393b6pnbw3jqhhrblj27c70785md"; + }; + }; + }; + "psr/simple-cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; + src = fetchurl { + url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; + sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; + }; + }; + }; + "ricbra/robots-txt-bundle" = { + targetDir = "Ricbra/Bundle/RobotsTxtBundle"; + src = composerEnv.buildZipPackage { + name = "ricbra-robots-txt-bundle-80d122a708893a762041464890e59a76babd6c22"; + src = fetchurl { + url = https://api.github.com/repos/ricbra/robots-txt-bundle/zipball/80d122a708893a762041464890e59a76babd6c22; + sha256 = "0w3lfzy1ys0bwl3shy4ychldfd711w1p2y13i1az2z2gh731d0ad"; + }; + }; + }; + "robloach/component-installer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "robloach-component-installer-908a859aa7c4949ba9ad67091e67bac10b66d3d7"; + src = fetchurl { + url = https://api.github.com/repos/RobLoach/component-installer/zipball/908a859aa7c4949ba9ad67091e67bac10b66d3d7; + sha256 = "19y5sv4k338bihzmm8iac6q43r18vxhmbpvrdhz8jn39r51ampq9"; + }; + }; + }; + "sensio/distribution-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a"; + src = fetchurl { + url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a; + sha256 = "0wyffqj924lz9cv0vbahyngjw1g850v0p34swygzzgp3cr0ank13"; + }; + }; + }; + "sensio/framework-extra-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-framework-extra-bundle-bb907234df776b68922eb4b25bfa061683597b6a"; + src = fetchurl { + url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a; + sha256 = "011hcljjcfq5qy4a7mlf0hwqxyb58yci40ini0n5rqandcyk2nck"; + }; + }; + }; + "sensiolabs/security-checker" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensiolabs-security-checker-dc270d5fec418cc6ac983671dba5d80ffaffb142"; + src = fetchurl { + url = https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142; + sha256 = "0fnshyd6f8j91a7y604nh6sqgscjl48mfa0727g2r4hkdfz8hpd1"; + }; + }; + }; + "swiftmailer/swiftmailer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "swiftmailer-swiftmailer-7ffc1ea296ed14bf8260b6ef11b80208dbadba91"; + src = fetchurl { + url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91; + sha256 = "1vl5pzgvr2yfrj1yfs02mi917b0gr56v76ibi40r51a3346zhp6v"; + }; + }; + }; + "symfony/assetic-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c"; + src = fetchurl { + url = https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c; + sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc"; + }; + }; + }; + "symfony/monolog-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-monolog-bundle-8781649349fe418d51d194f8c9d212c0b97c40dd"; + src = fetchurl { + url = https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd; + sha256 = "0wcqhg1vfdj3mxacr3fxpgqwy1rk9znjg9bmzx4jymk8l16i7bq8"; + }; + }; + }; + "symfony/polyfill-apcu" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-apcu-9b83bd010112ec196410849e840d9b9fefcb15ad"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/9b83bd010112ec196410849e840d9b9fefcb15ad; + sha256 = "0iiiqbn0bs0zqc95nz8l1qa5ysy0iifx4f27r9wnhzsh6f1h02mv"; + }; + }; + }; + "symfony/polyfill-intl-icu" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-intl-icu-80ee17ae83c10cd513e5144f91a73607a21edb4e"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/80ee17ae83c10cd513e5144f91a73607a21edb4e; + sha256 = "1hck9bn8zfb1pmx2yccf4w5dd9rbmvwii7hncin6px6nasi6wzvv"; + }; + }; + }; + "symfony/polyfill-mbstring" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-mbstring-3296adf6a6454a050679cde90f95350ad604b171"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171; + sha256 = "02wyx9fjx9lyc5q5d3bnn8aw9xag8im2wqanmbkljwd5vmx9k9b2"; + }; + }; + }; + "symfony/polyfill-php56" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php56-af98553c84912459db3f636329567809d639a8f6"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-php56/zipball/af98553c84912459db3f636329567809d639a8f6; + sha256 = "1l1ydsd7cq3s97cpgl4fw1qxc2wmv27yfxa3q8ng9p66ypzvkw42"; + }; + }; + }; + "symfony/polyfill-php70" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php70-77454693d8f10dd23bb24955cffd2d82db1007a6"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6; + sha256 = "146d620ca725iqdh7j0dqb99h20d4vs641c9vjy9x4jws3rgj905"; + }; + }; + }; + "symfony/polyfill-util" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-util-1a5ad95d9436cbff3296034fe9f8d586dce3fb3a"; + src = fetchurl { + url = https://api.github.com/repos/symfony/polyfill-util/zipball/1a5ad95d9436cbff3296034fe9f8d586dce3fb3a; + sha256 = "0l7w4dlr7y3qijpaiq7hfhbhv1qqz9jjknr1n6k4vrss2a8d1sxk"; + }; + }; + }; + "symfony/swiftmailer-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec"; + src = fetchurl { + url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec; + sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01"; + }; + }; + }; + "symfony/symfony" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-symfony-4babd75194d45f7a4412560038924f3008c67ef2"; + src = fetchurl { + url = https://api.github.com/repos/symfony/symfony/zipball/4babd75194d45f7a4412560038924f3008c67ef2; + sha256 = "1347qp994yg6k91v5gwdwnn202bz92m0pj4090b59z5nqxh7463d"; + }; + }; + }; + "twig/extensions" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "twig-extensions-d188c76168b853481cc75879ea045bf93d718e9c"; + src = fetchurl { + url = https://api.github.com/repos/twigphp/Twig-extensions/zipball/d188c76168b853481cc75879ea045bf93d718e9c; + sha256 = "0d6wywys5fqzi3m8g8h3sb5phl5y3a7vfc95n214mqp0iwrcmzwm"; + }; + }; + }; + "twig/twig" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "twig-twig-b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"; + src = fetchurl { + url = https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f; + sha256 = "1q82f246wq7whl11lx00n0skwmllppvpzg20x6q4frmw44dc6v9a"; + }; + }; + }; + "willdurand/jsonp-callback-validator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "willdurand-jsonp-callback-validator-1a7d388bb521959e612ef50c5c7b1691b097e909"; + src = fetchurl { + url = https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909; + sha256 = "19ds8f3nbss4b2xvqkcjkcvz0l4c5nhrm8w8yxc8a508r0jmd9in"; + }; + }; + }; + "zendframework/zend-code" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-code-95033f061b083e16cdee60530ec260d7d628b887"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887; + sha256 = "0h77qf267l2sp9wg3n61dpgpf6wh6p5jssy8mrg7vlns2j03f9f5"; + }; + }; + }; + "zendframework/zend-eventmanager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd; + sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; + }; + }; + }; + }; + devPackages = { + "doctrine/data-fixtures" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-data-fixtures-17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/data-fixtures/zipball/17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e; + sha256 = "15k7vl58kwh02g0a93rab82ifbgmc91srgminzlkjq5kx8agh7ab"; + }; + }; + }; + "doctrine/doctrine-fixtures-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-fixtures-bundle-74b8cc70a4a25b774628ee59f4cdf3623a146273"; + src = fetchurl { + url = https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273; + sha256 = "1bbflq8k6izwqgp9ka2gyb5y96a80b4lnlc5wrgc5gnih7hqidlf"; + }; + }; + }; + "sensio/generator-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65"; + src = fetchurl { + url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65; + sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3"; + }; + }; + }; + "symfony/phpunit-bridge" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-phpunit-bridge-7470518370113785f67a7fd8e6e1667661e88805"; + src = fetchurl { + url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/7470518370113785f67a7fd8e6e1667661e88805; + sha256 = "0jd28ag0wks9sv62rkwsbx68csvdl5gabbz2h01hkqpa23gdkhs9"; + }; + }; + }; + }; +} diff --git a/pkgs/private/webapps/default.nix b/pkgs/private/webapps/default.nix new file mode 100644 index 00000000..e9aa13ce --- /dev/null +++ b/pkgs/private/webapps/default.nix @@ -0,0 +1,11 @@ +{ callPackage, mylibs, composerEnv, lib, spip }: +rec { + apache-default = callPackage ./apache-default {}; + + aten = callPackage ./aten { inherit composerEnv mylibs; }; + chloe = callPackage ./chloe { inherit mylibs spip; }; + connexionswing = callPackage ./connexionswing { inherit composerEnv mylibs;}; + ludivinecassal = callPackage ./ludivinecassal { inherit composerEnv mylibs; }; + piedsjaloux = callPackage ./piedsjaloux { inherit composerEnv mylibs; }; + tellesflorian = callPackage ./tellesflorian { inherit composerEnv mylibs; }; +} diff --git a/pkgs/private/webapps/ludivinecassal/default.nix b/pkgs/private/webapps/ludivinecassal/default.nix new file mode 100644 index 00000000..34014352 --- /dev/null +++ b/pkgs/private/webapps/ludivinecassal/default.nix @@ -0,0 +1,35 @@ +{ environment ? "prod" +, varDir ? "/var/lib/ludivinecassal_${environment}" +, composerEnv, fetchurl, fetchgit, imagemagick, sass, ruby, mylibs }: +let + app = composerEnv.buildPackage ( + import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // + mylibs.fetchedGitPrivate ./ludivinecassal.json // + rec { + noDev = (environment == "prod"); + preInstall = '' + export SYMFONY_ENV="${environment}" + cp app/config/parameters.yml.dist app/config/parameters.yml + cat >> app/config/parameters.yml < $out + ''; + buildslist_yarn = mylibs.yarn2nixPackage.mkYarnModules rec { + name = "buildslist-yarn-modules"; + pname = name; + inherit (pythonPackages.buildbot-pkg) version; + packageJSON = packagejson; + yarnLock = "${buildslist_src.src}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + all = { buildInputs = [ mylibs.yarn2nixPackage.src ]; }; + }; + }; + buildslist_bower = buildBowerComponents { + name = "buildslist"; + generated = ./bower.nix; + src = "${buildslist_src.src}/guanlecoja/"; + }; +in +pythonPackages.buildPythonPackage rec { + pname = "buildbot-buildslist"; + inherit (pythonPackages.buildbot-pkg) version; + + __noChroot = true; + preConfigure = '' + export HOME=$PWD + cp -a ${buildslist_yarn}/node_modules . + chmod -R u+w node_modules + cp -a ${buildslist_bower}/bower_components ./libs + chmod -R u+w libs + ''; + propagatedBuildInputs = with pythonPackages; [ + (klein.overridePythonAttrs(old: { checkPhase = ""; })) + buildbot-pkg + ]; + nativeBuildInputs = [ yarn nodejs ]; + buildInputs = [ buildslist_yarn buildslist_bower ]; + + doCheck = false; + src = buildslist_src.src; +} diff --git a/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix b/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix new file mode 100644 index 00000000..7ab3c635 --- /dev/null +++ b/pkgs/python-packages/buildbot/plugins/buildslist/yarn-packages.nix @@ -0,0 +1,5459 @@ +{fetchurl, linkFarm}: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + + { + name = "abbrev___abbrev_1.1.1.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz"; + sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8"; + }; + } + + { + name = "abbrev___abbrev_1.0.9.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz"; + sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135"; + }; + } + + { + name = "accepts___accepts_1.3.3.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz"; + sha1 = "c3ca7434938648c3e0d9c1e328dd68b622c284ca"; + }; + } + + { + name = "after___after_0.8.2.tgz"; + path = fetchurl { + name = "after___after_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz"; + sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; + }; + } + + { + name = "ajv___ajv_6.10.0.tgz"; + path = fetchurl { + name = "ajv___ajv_6.10.0.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz"; + sha1 = "90d0d54439da587cd7e843bfb7045f50bd22bdf1"; + }; + } + + { + name = "amdefine___amdefine_1.0.1.tgz"; + path = fetchurl { + name = "amdefine___amdefine_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz"; + sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5"; + }; + } + + { + name = "ansi_gray___ansi_gray_0.1.1.tgz"; + path = fetchurl { + name = "ansi_gray___ansi_gray_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz"; + sha1 = "2962cf54ec9792c48510a3deb524436861ef7251"; + }; + } + + { + name = "ansi_regex___ansi_regex_0.2.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz"; + sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9"; + }; + } + + { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + } + + { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + } + + { + name = "ansi_styles___ansi_styles_1.1.0.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz"; + sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de"; + }; + } + + { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + } + + { + name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; + path = fetchurl { + name = "ansi_wrap___ansi_wrap_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz"; + sha1 = "a82250ddb0015e9a27ca82e82ea603bbfa45efaf"; + }; + } + + { + name = "anymatch___anymatch_1.3.2.tgz"; + path = fetchurl { + name = "anymatch___anymatch_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz"; + sha1 = "553dcb8f91e3c889845dfdba34c77721b90b9d7a"; + }; + } + + { + name = "aproba___aproba_1.2.0.tgz"; + path = fetchurl { + name = "aproba___aproba_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; + sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; + }; + } + + { + name = "archy___archy_1.0.0.tgz"; + path = fetchurl { + name = "archy___archy_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz"; + sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"; + }; + } + + { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + path = fetchurl { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; + sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21"; + }; + } + + { + name = "argparse___argparse_1.0.10.tgz"; + path = fetchurl { + name = "argparse___argparse_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; + sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; + }; + } + + { + name = "arr_diff___arr_diff_2.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz"; + sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf"; + }; + } + + { + name = "arr_diff___arr_diff_4.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + } + + { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + path = fetchurl { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; + }; + } + + { + name = "arr_union___arr_union_3.1.0.tgz"; + path = fetchurl { + name = "arr_union___arr_union_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + } + + { + name = "array_differ___array_differ_1.0.0.tgz"; + path = fetchurl { + name = "array_differ___array_differ_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz"; + sha1 = "eff52e3758249d33be402b8bb8e564bb2b5d4031"; + }; + } + + { + name = "array_each___array_each_1.0.1.tgz"; + path = fetchurl { + name = "array_each___array_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz"; + sha1 = "a794af0c05ab1752846ee753a1f211a05ba0c44f"; + }; + } + + { + name = "array_find_index___array_find_index_1.0.2.tgz"; + path = fetchurl { + name = "array_find_index___array_find_index_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz"; + sha1 = "df010aa1287e164bbda6f9723b0a96a1ec4187a1"; + }; + } + + { + name = "array_slice___array_slice_0.2.3.tgz"; + path = fetchurl { + name = "array_slice___array_slice_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz"; + sha1 = "dd3cfb80ed7973a75117cdac69b0b99ec86186f5"; + }; + } + + { + name = "array_slice___array_slice_1.1.0.tgz"; + path = fetchurl { + name = "array_slice___array_slice_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz"; + sha1 = "e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"; + }; + } + + { + name = "array_uniq___array_uniq_1.0.3.tgz"; + path = fetchurl { + name = "array_uniq___array_uniq_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + } + + { + name = "array_unique___array_unique_0.2.1.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz"; + sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53"; + }; + } + + { + name = "array_unique___array_unique_0.3.2.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + } + + { + name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + path = fetchurl { + name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz"; + sha1 = "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"; + }; + } + + { + name = "asn1___asn1_0.2.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + + { + name = "assert_plus___assert_plus_1.0.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + } + + { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + path = fetchurl { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + } + + { + name = "async_each___async_each_1.0.1.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz"; + sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d"; + }; + } + + { + name = "async_foreach___async_foreach_0.1.3.tgz"; + path = fetchurl { + name = "async_foreach___async_foreach_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz"; + sha1 = "36121f845c0578172de419a97dbeb1d16ec34542"; + }; + } + + { + name = "async___async_1.5.2.tgz"; + path = fetchurl { + name = "async___async_1.5.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz"; + sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; + }; + } + + { + name = "async___async_2.6.2.tgz"; + path = fetchurl { + name = "async___async_2.6.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz"; + sha1 = "18330ea7e6e313887f5d2f2a904bac6fe4dd5381"; + }; + } + + { + name = "asynckit___asynckit_0.4.0.tgz"; + path = fetchurl { + name = "asynckit___asynckit_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + } + + { + name = "atob___atob_2.1.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + } + + { + name = "aws4___aws4_1.8.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz"; + sha1 = "f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"; + }; + } + + { + name = "backo2___backo2_1.0.2.tgz"; + path = fetchurl { + name = "backo2___backo2_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz"; + sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; + }; + } + + { + name = "balanced_match___balanced_match_1.0.0.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + } + + { + name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + path = fetchurl { + name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; + sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; + }; + } + + { + name = "base64id___base64id_1.0.0.tgz"; + path = fetchurl { + name = "base64id___base64id_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz"; + sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"; + }; + } + + { + name = "base___base_0.11.2.tgz"; + path = fetchurl { + name = "base___base_0.11.2.tgz"; + url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; + sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; + }; + } + + { + name = "batch___batch_0.5.3.tgz"; + path = fetchurl { + name = "batch___batch_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz"; + sha1 = "3f3414f380321743bfc1042f9a83ff1d5824d464"; + }; + } + + { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + path = fetchurl { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + } + + { + name = "beeper___beeper_1.1.1.tgz"; + path = fetchurl { + name = "beeper___beeper_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz"; + sha1 = "e6d5ea8c5dad001304a70b22638447f69cb2f809"; + }; + } + + { + name = "better_assert___better_assert_1.0.2.tgz"; + path = fetchurl { + name = "better_assert___better_assert_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz"; + sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; + }; + } + + { + name = "binary_extensions___binary_extensions_1.13.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.13.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz"; + sha1 = "9523e001306a32444b907423f1de2164222f6ab1"; + }; + } + + { + name = "blob___blob_0.0.4.tgz"; + path = fetchurl { + name = "blob___blob_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz"; + sha1 = "bcf13052ca54463f30f9fc7e95b9a47630a94921"; + }; + } + + { + name = "block_stream___block_stream_0.0.9.tgz"; + path = fetchurl { + name = "block_stream___block_stream_0.0.9.tgz"; + url = "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz"; + sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; + }; + } + + { + name = "bluebird___bluebird_2.11.0.tgz"; + path = fetchurl { + name = "bluebird___bluebird_2.11.0.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz"; + sha1 = "534b9033c022c9579c56ba3b3e5a5caafbb650e1"; + }; + } + + { + name = "body_parser___body_parser_1.18.3.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.18.3.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz"; + sha1 = "5b292198ffdd553b3a0f20ded0592b956955c8b4"; + }; + } + + { + name = "body_parser___body_parser_1.14.2.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.14.2.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz"; + sha1 = "1015cb1fe2c443858259581db53332f8d0cf50f9"; + }; + } + + { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + path = fetchurl { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; + }; + } + + { + name = "braces___braces_0.1.5.tgz"; + path = fetchurl { + name = "braces___braces_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz"; + sha1 = "c085711085291d8b75fdd74eab0f8597280711e6"; + }; + } + + { + name = "braces___braces_1.8.5.tgz"; + path = fetchurl { + name = "braces___braces_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz"; + sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7"; + }; + } + + { + name = "braces___braces_2.3.2.tgz"; + path = fetchurl { + name = "braces___braces_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; + sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; + }; + } + + { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + path = fetchurl { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz"; + sha1 = "bd7dc26ae2972d0eda253be061dba992349c19f0"; + }; + } + + { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + path = fetchurl { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz"; + sha1 = "890dd90d923a873e08e10e5fd51a57e5b7cce0ec"; + }; + } + + { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + path = fetchurl { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz"; + sha1 = "f8f78b76789888ef39f205cd637f68e702122b2c"; + }; + } + + { + name = "bytes___bytes_2.2.0.tgz"; + path = fetchurl { + name = "bytes___bytes_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz"; + sha1 = "fd35464a403f6f9117c2de3609ecff9cae000588"; + }; + } + + { + name = "bytes___bytes_2.4.0.tgz"; + path = fetchurl { + name = "bytes___bytes_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz"; + sha1 = "7d97196f9d5baf7f6935e25985549edd2a6c2339"; + }; + } + + { + name = "bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + } + + { + name = "cache_base___cache_base_1.0.1.tgz"; + path = fetchurl { + name = "cache_base___cache_base_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; + sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; + }; + } + + { + name = "callsite___callsite_1.0.0.tgz"; + path = fetchurl { + name = "callsite___callsite_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz"; + sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; + }; + } + + { + name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; + path = fetchurl { + name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz"; + sha1 = "308beeaffdf28119051efa1d932213c91b8f92e7"; + }; + } + + { + name = "camelcase___camelcase_2.1.1.tgz"; + path = fetchurl { + name = "camelcase___camelcase_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz"; + sha1 = "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"; + }; + } + + { + name = "camelcase___camelcase_3.0.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz"; + sha1 = "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"; + }; + } + + { + name = "caseless___caseless_0.12.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + } + + { + name = "chalk___chalk_0.5.1.tgz"; + path = fetchurl { + name = "chalk___chalk_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz"; + sha1 = "663b3a648b68b55d04690d49167aa837858f2174"; + }; + } + + { + name = "chalk___chalk_1.1.3.tgz"; + path = fetchurl { + name = "chalk___chalk_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + } + + { + name = "chokidar___chokidar_1.7.0.tgz"; + path = fetchurl { + name = "chokidar___chokidar_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz"; + sha1 = "798e689778151c8076b4b360e5edd28cda2bb468"; + }; + } + + { + name = "chownr___chownr_1.1.1.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz"; + sha1 = "54726b8b8fff4df053c42187e801fb4412df1494"; + }; + } + + { + name = "class_utils___class_utils_0.3.6.tgz"; + path = fetchurl { + name = "class_utils___class_utils_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; + sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; + }; + } + + { + name = "cliui___cliui_3.2.0.tgz"; + path = fetchurl { + name = "cliui___cliui_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz"; + sha1 = "120601537a916d29940f934da3b48d585a39213d"; + }; + } + + { + name = "clone_stats___clone_stats_0.0.1.tgz"; + path = fetchurl { + name = "clone_stats___clone_stats_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz"; + sha1 = "b88f94a82cf38b8791d58046ea4029ad88ca99d1"; + }; + } + + { + name = "clone___clone_0.2.0.tgz"; + path = fetchurl { + name = "clone___clone_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz"; + sha1 = "c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"; + }; + } + + { + name = "clone___clone_1.0.4.tgz"; + path = fetchurl { + name = "clone___clone_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + } + + { + name = "code_point_at___code_point_at_1.1.0.tgz"; + path = fetchurl { + name = "code_point_at___code_point_at_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + } + + { + name = "coffee_script___coffee_script_1.12.7.tgz"; + path = fetchurl { + name = "coffee_script___coffee_script_1.12.7.tgz"; + url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz"; + sha1 = "c05dae0cb79591d05b3070a8433a98c9a89ccc53"; + }; + } + + { + name = "coffee_script___coffee_script_1.10.0.tgz"; + path = fetchurl { + name = "coffee_script___coffee_script_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz"; + sha1 = "12938bcf9be1948fa006f92e0c4c9e81705108c0"; + }; + } + + { + name = "collection_visit___collection_visit_1.0.0.tgz"; + path = fetchurl { + name = "collection_visit___collection_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + } + + { + name = "color_support___color_support_1.1.3.tgz"; + path = fetchurl { + name = "color_support___color_support_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz"; + sha1 = "93834379a1cc9a0c61f82f52f0d04322251bd5a2"; + }; + } + + { + name = "colors___colors_1.3.3.tgz"; + path = fetchurl { + name = "colors___colors_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz"; + sha1 = "39e005d546afe01e01f9c4ca8fa50f686a01205d"; + }; + } + + { + name = "combined_stream___combined_stream_1.0.7.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz"; + sha1 = "2d1d24317afb8abe95d6d2c0b07b57813539d828"; + }; + } + + { + name = "commander___commander_2.17.1.tgz"; + path = fetchurl { + name = "commander___commander_2.17.1.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz"; + sha1 = "bd77ab7de6de94205ceacc72f1716d29f20a77bf"; + }; + } + + { + name = "component_bind___component_bind_1.0.0.tgz"; + path = fetchurl { + name = "component_bind___component_bind_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz"; + sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; + }; + } + + { + name = "component_emitter___component_emitter_1.1.2.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz"; + sha1 = "296594f2753daa63996d2af08d15a95116c9aec3"; + }; + } + + { + name = "component_emitter___component_emitter_1.2.1.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz"; + sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; + }; + } + + { + name = "component_inherit___component_inherit_0.0.3.tgz"; + path = fetchurl { + name = "component_inherit___component_inherit_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz"; + sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; + }; + } + + { + name = "concat_map___concat_map_0.0.1.tgz"; + path = fetchurl { + name = "concat_map___concat_map_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + } + + { + name = "connect___connect_3.6.6.tgz"; + path = fetchurl { + name = "connect___connect_3.6.6.tgz"; + url = "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz"; + sha1 = "09eff6c55af7236e137135a72574858b6786f524"; + }; + } + + { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + path = fetchurl { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + } + + { + name = "content_type___content_type_1.0.4.tgz"; + path = fetchurl { + name = "content_type___content_type_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; + sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; + }; + } + + { + name = "cookie___cookie_0.3.1.tgz"; + path = fetchurl { + name = "cookie___cookie_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz"; + sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; + }; + } + + { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + path = fetchurl { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + } + + { + name = "core_js___core_js_2.6.5.tgz"; + path = fetchurl { + name = "core_js___core_js_2.6.5.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz"; + sha1 = "44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"; + }; + } + + { + name = "core_util_is___core_util_is_1.0.2.tgz"; + path = fetchurl { + name = "core_util_is___core_util_is_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + } + + { + name = "cross_spawn___cross_spawn_3.0.1.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz"; + sha1 = "1256037ecb9f0c5f79e3d6ef135e30770184b982"; + }; + } + + { + name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; + path = fetchurl { + name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz"; + sha1 = "988df33feab191ef799a61369dd76c17adf957ea"; + }; + } + + { + name = "custom_event___custom_event_1.0.1.tgz"; + path = fetchurl { + name = "custom_event___custom_event_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz"; + sha1 = "5d02a46850adf1b4a317946a3928fccb5bfd0425"; + }; + } + + { + name = "dashdash___dashdash_1.14.1.tgz"; + path = fetchurl { + name = "dashdash___dashdash_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + } + + { + name = "dateformat___dateformat_1.0.12.tgz"; + path = fetchurl { + name = "dateformat___dateformat_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz"; + sha1 = "9f124b67594c937ff706932e4a642cca8dbbfee9"; + }; + } + + { + name = "dateformat___dateformat_2.2.0.tgz"; + path = fetchurl { + name = "dateformat___dateformat_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz"; + sha1 = "4065e2013cf9fb916ddfd82efb506ad4c6769062"; + }; + } + + { + name = "debug___debug_2.2.0.tgz"; + path = fetchurl { + name = "debug___debug_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz"; + sha1 = "f87057e995b1a1f6ae6a4960664137bc56f039da"; + }; + } + + { + name = "debug___debug_2.3.3.tgz"; + path = fetchurl { + name = "debug___debug_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz"; + sha1 = "40c453e67e6e13c901ddec317af8986cda9eff8c"; + }; + } + + { + name = "debug___debug_2.6.9.tgz"; + path = fetchurl { + name = "debug___debug_2.6.9.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; + sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; + }; + } + + { + name = "debug___debug_3.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + + { + name = "decamelize___decamelize_1.2.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + } + + { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + path = fetchurl { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + } + + { + name = "deep_extend___deep_extend_0.6.0.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz"; + sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac"; + }; + } + + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + + { + name = "defaults___defaults_1.0.3.tgz"; + path = fetchurl { + name = "defaults___defaults_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + } + + { + name = "define_property___define_property_0.2.5.tgz"; + path = fetchurl { + name = "define_property___define_property_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + } + + { + name = "define_property___define_property_1.0.0.tgz"; + path = fetchurl { + name = "define_property___define_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + } + + { + name = "define_property___define_property_2.0.2.tgz"; + path = fetchurl { + name = "define_property___define_property_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; + sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; + }; + } + + { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + } + + { + name = "delegates___delegates_1.0.0.tgz"; + path = fetchurl { + name = "delegates___delegates_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + } + + { + name = "depd___depd_1.1.2.tgz"; + path = fetchurl { + name = "depd___depd_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + } + + { + name = "deprecated___deprecated_0.0.1.tgz"; + path = fetchurl { + name = "deprecated___deprecated_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz"; + sha1 = "f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"; + }; + } + + { + name = "detect_file___detect_file_1.0.0.tgz"; + path = fetchurl { + name = "detect_file___detect_file_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz"; + sha1 = "f0d66d03672a825cb1b73bdb3fe62310c8e552b7"; + }; + } + + { + name = "detect_libc___detect_libc_1.0.3.tgz"; + path = fetchurl { + name = "detect_libc___detect_libc_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz"; + sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; + }; + } + + { + name = "di___di_0.0.1.tgz"; + path = fetchurl { + name = "di___di_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz"; + sha1 = "806649326ceaa7caa3306d75d985ea2748ba913c"; + }; + } + + { + name = "dom_serialize___dom_serialize_2.2.1.tgz"; + path = fetchurl { + name = "dom_serialize___dom_serialize_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz"; + sha1 = "562ae8999f44be5ea3076f5419dcd59eb43ac95b"; + }; + } + + { + name = "duplexer2___duplexer2_0.0.2.tgz"; + path = fetchurl { + name = "duplexer2___duplexer2_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz"; + sha1 = "c614dcf67e2fb14995a91711e5a617e8a60a31db"; + }; + } + + { + name = "duplexer___duplexer_0.1.1.tgz"; + path = fetchurl { + name = "duplexer___duplexer_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; + sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; + }; + } + + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + + { + name = "ee_first___ee_first_1.1.1.tgz"; + path = fetchurl { + name = "ee_first___ee_first_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + } + + { + name = "encodeurl___encodeurl_1.0.2.tgz"; + path = fetchurl { + name = "encodeurl___encodeurl_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + } + + { + name = "end_of_stream___end_of_stream_0.1.5.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz"; + sha1 = "8e177206c3c80837d85632e8b9359dfe8b2f6eaf"; + }; + } + + { + name = "engine.io_client___engine.io_client_1.8.5.tgz"; + path = fetchurl { + name = "engine.io_client___engine.io_client_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz"; + sha1 = "fe7fb60cb0dcf2fa2859489329cb5968dedeb11f"; + }; + } + + { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + path = fetchurl { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz"; + sha1 = "937b079f0007d0893ec56d46cb220b8cb435220a"; + }; + } + + { + name = "engine.io___engine.io_1.8.5.tgz"; + path = fetchurl { + name = "engine.io___engine.io_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz"; + sha1 = "4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6"; + }; + } + + { + name = "ent___ent_2.2.0.tgz"; + path = fetchurl { + name = "ent___ent_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz"; + sha1 = "e964219325a21d05f44466a2f686ed6ce5f5dd1d"; + }; + } + + { + name = "error_ex___error_ex_1.3.2.tgz"; + path = fetchurl { + name = "error_ex___error_ex_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; + sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; + }; + } + + { + name = "escape_html___escape_html_1.0.3.tgz"; + path = fetchurl { + name = "escape_html___escape_html_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + } + + { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + path = fetchurl { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + } + + { + name = "escodegen___escodegen_1.8.1.tgz"; + path = fetchurl { + name = "escodegen___escodegen_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz"; + sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018"; + }; + } + + { + name = "esprima___esprima_2.7.3.tgz"; + path = fetchurl { + name = "esprima___esprima_2.7.3.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz"; + sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581"; + }; + } + + { + name = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + + { + name = "estraverse___estraverse_1.9.3.tgz"; + path = fetchurl { + name = "estraverse___estraverse_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz"; + sha1 = "af67f2dc922582415950926091a4005d29c9bb44"; + }; + } + + { + name = "esutils___esutils_2.0.2.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz"; + sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; + }; + } + + { + name = "event_stream___event_stream_3.3.5.tgz"; + path = fetchurl { + name = "event_stream___event_stream_3.3.5.tgz"; + url = "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.5.tgz"; + sha1 = "e5dd8989543630d94c6cf4d657120341fa31636b"; + }; + } + + { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz"; + sha1 = "090b4d6cdbd645ed10bf750d4b5407942d7ba163"; + }; + } + + { + name = "expand_braces___expand_braces_0.1.2.tgz"; + path = fetchurl { + name = "expand_braces___expand_braces_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz"; + sha1 = "488b1d1d2451cb3d3a6b192cfc030f44c5855fea"; + }; + } + + { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz"; + sha1 = "df07284e342a807cd733ac5af72411e581d1177b"; + }; + } + + { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + } + + { + name = "expand_range___expand_range_0.1.1.tgz"; + path = fetchurl { + name = "expand_range___expand_range_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz"; + sha1 = "4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"; + }; + } + + { + name = "expand_range___expand_range_1.8.2.tgz"; + path = fetchurl { + name = "expand_range___expand_range_1.8.2.tgz"; + url = "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz"; + sha1 = "a299effd335fe2721ebae8e257ec79644fc85337"; + }; + } + + { + name = "expand_tilde___expand_tilde_2.0.2.tgz"; + path = fetchurl { + name = "expand_tilde___expand_tilde_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz"; + sha1 = "97e801aa052df02454de46b02bf621642cdc8502"; + }; + } + + { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + } + + { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + } + + { + name = "extend___extend_3.0.2.tgz"; + path = fetchurl { + name = "extend___extend_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; + sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; + }; + } + + { + name = "extglob___extglob_0.3.2.tgz"; + path = fetchurl { + name = "extglob___extglob_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz"; + sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1"; + }; + } + + { + name = "extglob___extglob_2.0.4.tgz"; + path = fetchurl { + name = "extglob___extglob_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; + sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; + }; + } + + { + name = "extsprintf___extsprintf_1.3.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + } + + { + name = "extsprintf___extsprintf_1.4.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; + sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; + }; + } + + { + name = "fancy_log___fancy_log_1.3.3.tgz"; + path = fetchurl { + name = "fancy_log___fancy_log_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz"; + sha1 = "dbc19154f558690150a23953a0adbd035be45fc7"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz"; + sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; + }; + } + + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; + sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; + }; + } + + { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + path = fetchurl { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + } + + { + name = "faye_websocket___faye_websocket_0.7.3.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.7.3.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz"; + sha1 = "cc4074c7f4a4dfd03af54dd65c354b135132ce11"; + }; + } + + { + name = "filename_regex___filename_regex_2.0.1.tgz"; + path = fetchurl { + name = "filename_regex___filename_regex_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz"; + sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"; + }; + } + + { + name = "fill_range___fill_range_2.2.4.tgz"; + path = fetchurl { + name = "fill_range___fill_range_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz"; + sha1 = "eb1e773abb056dcd8df2bfdf6af59b8b3a936565"; + }; + } + + { + name = "fill_range___fill_range_4.0.0.tgz"; + path = fetchurl { + name = "fill_range___fill_range_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + } + + { + name = "finalhandler___finalhandler_1.1.0.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz"; + sha1 = "ce0b6855b45853e791b2fcc680046d88253dd7f5"; + }; + } + + { + name = "find_index___find_index_0.1.1.tgz"; + path = fetchurl { + name = "find_index___find_index_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz"; + sha1 = "675d358b2ca3892d795a1ab47232f8b6e2e0dde4"; + }; + } + + { + name = "find_up___find_up_1.1.2.tgz"; + path = fetchurl { + name = "find_up___find_up_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz"; + sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"; + }; + } + + { + name = "findup_sync___findup_sync_2.0.0.tgz"; + path = fetchurl { + name = "findup_sync___findup_sync_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz"; + sha1 = "9326b1488c22d1a6088650a86901b2d9a90a2cbc"; + }; + } + + { + name = "fined___fined_1.1.1.tgz"; + path = fetchurl { + name = "fined___fined_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz"; + sha1 = "95d88ff329123dd1a6950fdfcd321f746271e01f"; + }; + } + + { + name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; + path = fetchurl { + name = "first_chunk_stream___first_chunk_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz"; + sha1 = "59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"; + }; + } + + { + name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; + path = fetchurl { + name = "flagged_respawn___flagged_respawn_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz"; + sha1 = "e7de6f1279ddd9ca9aac8a5971d618606b3aab41"; + }; + } + + { + name = "follow_redirects___follow_redirects_1.7.0.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz"; + sha1 = "489ebc198dc0e7f64167bd23b03c4c19b5784c76"; + }; + } + + { + name = "for_in___for_in_1.0.2.tgz"; + path = fetchurl { + name = "for_in___for_in_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + } + + { + name = "for_own___for_own_0.1.5.tgz"; + path = fetchurl { + name = "for_own___for_own_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz"; + sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce"; + }; + } + + { + name = "for_own___for_own_1.0.0.tgz"; + path = fetchurl { + name = "for_own___for_own_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz"; + sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b"; + }; + } + + { + name = "forever_agent___forever_agent_0.6.1.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + } + + { + name = "form_data___form_data_2.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + + { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + path = fetchurl { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + } + + { + name = "from___from_0.1.7.tgz"; + path = fetchurl { + name = "from___from_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz"; + sha1 = "83c60afc58b9c56997007ed1a768b3ab303a44fe"; + }; + } + + { + name = "fs_access___fs_access_1.0.1.tgz"; + path = fetchurl { + name = "fs_access___fs_access_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz"; + sha1 = "d6a87f262271cefebec30c553407fb995da8777a"; + }; + } + + { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz"; + sha1 = "06c277218454ec288df77ada54a03b8702aacb9d"; + }; + } + + { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + path = fetchurl { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + } + + { + name = "fsevents___fsevents_1.2.7.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz"; + sha1 = "4851b664a3783e52003b3c66eb0eee1074933aa4"; + }; + } + + { + name = "fstream___fstream_1.0.11.tgz"; + path = fetchurl { + name = "fstream___fstream_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz"; + sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"; + }; + } + + { + name = "function_bind___function_bind_1.1.1.tgz"; + path = fetchurl { + name = "function_bind___function_bind_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz"; + sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d"; + }; + } + + { + name = "gauge___gauge_2.7.4.tgz"; + path = fetchurl { + name = "gauge___gauge_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz"; + sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; + }; + } + + { + name = "gaze___gaze_0.5.2.tgz"; + path = fetchurl { + name = "gaze___gaze_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz"; + sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f"; + }; + } + + { + name = "gaze___gaze_1.1.3.tgz"; + path = fetchurl { + name = "gaze___gaze_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz"; + sha1 = "c441733e13b927ac8c0ff0b4c3b033f28812924a"; + }; + } + + { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz"; + sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"; + }; + } + + { + name = "get_stdin___get_stdin_4.0.1.tgz"; + path = fetchurl { + name = "get_stdin___get_stdin_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz"; + sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe"; + }; + } + + { + name = "get_value___get_value_2.0.6.tgz"; + path = fetchurl { + name = "get_value___get_value_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + } + + { + name = "getpass___getpass_0.1.7.tgz"; + path = fetchurl { + name = "getpass___getpass_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + } + + { + name = "glob_base___glob_base_0.3.0.tgz"; + path = fetchurl { + name = "glob_base___glob_base_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz"; + sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"; + }; + } + + { + name = "glob_parent___glob_parent_2.0.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz"; + sha1 = "81383d72db054fcccf5336daa902f182f6edbb28"; + }; + } + + { + name = "glob_stream___glob_stream_3.1.18.tgz"; + path = fetchurl { + name = "glob_stream___glob_stream_3.1.18.tgz"; + url = "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz"; + sha1 = "9170a5f12b790306fdfe598f313f8f7954fd143b"; + }; + } + + { + name = "glob_watcher___glob_watcher_0.0.6.tgz"; + path = fetchurl { + name = "glob_watcher___glob_watcher_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz"; + sha1 = "b95b4a8df74b39c83298b0c05c978b4d9a3b710b"; + }; + } + + { + name = "glob2base___glob2base_0.0.12.tgz"; + path = fetchurl { + name = "glob2base___glob2base_0.0.12.tgz"; + url = "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz"; + sha1 = "9d419b3e28f12e83a362164a277055922c9c0d56"; + }; + } + + { + name = "glob___glob_4.5.3.tgz"; + path = fetchurl { + name = "glob___glob_4.5.3.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz"; + sha1 = "c6cb73d3226c1efef04de3c56d012f03377ee15f"; + }; + } + + { + name = "glob___glob_5.0.15.tgz"; + path = fetchurl { + name = "glob___glob_5.0.15.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz"; + sha1 = "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"; + }; + } + + { + name = "glob___glob_7.1.3.tgz"; + path = fetchurl { + name = "glob___glob_7.1.3.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz"; + sha1 = "3960832d3f1574108342dafd3a67b332c0969df1"; + }; + } + + { + name = "glob___glob_3.1.21.tgz"; + path = fetchurl { + name = "glob___glob_3.1.21.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz"; + sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd"; + }; + } + + { + name = "global_modules___global_modules_1.0.0.tgz"; + path = fetchurl { + name = "global_modules___global_modules_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz"; + sha1 = "6d770f0eb523ac78164d72b5e71a8877265cc3ea"; + }; + } + + { + name = "global_prefix___global_prefix_1.0.2.tgz"; + path = fetchurl { + name = "global_prefix___global_prefix_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz"; + sha1 = "dbf743c6c14992593c655568cb66ed32c0122ebe"; + }; + } + + { + name = "globule___globule_1.2.1.tgz"; + path = fetchurl { + name = "globule___globule_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz"; + sha1 = "5dffb1b191f22d20797a9369b49eab4e9839696d"; + }; + } + + { + name = "globule___globule_0.1.0.tgz"; + path = fetchurl { + name = "globule___globule_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz"; + sha1 = "d9c8edde1da79d125a151b79533b978676346ae5"; + }; + } + + { + name = "glogg___glogg_1.0.2.tgz"; + path = fetchurl { + name = "glogg___glogg_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz"; + sha1 = "2d7dd702beda22eb3bffadf880696da6d846313f"; + }; + } + + { + name = "graceful_fs___graceful_fs_3.0.11.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_3.0.11.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz"; + sha1 = "7613c778a1afea62f25c630a086d7f3acbbdd818"; + }; + } + + { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz"; + sha1 = "ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"; + }; + } + + { + name = "graceful_fs___graceful_fs_1.2.3.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz"; + sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364"; + }; + } + + { + name = "guanlecoja___guanlecoja_0.8.8.tgz"; + path = fetchurl { + name = "guanlecoja___guanlecoja_0.8.8.tgz"; + url = "https://registry.yarnpkg.com/guanlecoja/-/guanlecoja-0.8.8.tgz"; + sha1 = "210099a9f4ea9bf80d78fda730226f7862478a26"; + }; + } + + { + name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; + path = fetchurl { + name = "gulp_livereload___gulp_livereload_3.8.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-3.8.1.tgz"; + sha1 = "00f744b2d749d3e9e3746589c8a44acac779b50f"; + }; + } + + { + name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; + path = fetchurl { + name = "gulp_ng_classify___gulp_ng_classify_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-ng-classify/-/gulp-ng-classify-4.0.1.tgz"; + sha1 = "3019161127c35c317ea08dc2a65ea35b592dbfd7"; + }; + } + + { + name = "gulp_sass___gulp_sass_3.2.1.tgz"; + path = fetchurl { + name = "gulp_sass___gulp_sass_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.2.1.tgz"; + sha1 = "2e3688a96fd8be1c0c01340750c191b2e79fab94"; + }; + } + + { + name = "gulp_util___gulp_util_3.0.8.tgz"; + path = fetchurl { + name = "gulp_util___gulp_util_3.0.8.tgz"; + url = "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz"; + sha1 = "0054e1e744502e27c04c187c3ecc505dd54bbb4f"; + }; + } + + { + name = "gulp___gulp_3.9.0.tgz"; + path = fetchurl { + name = "gulp___gulp_3.9.0.tgz"; + url = "https://registry.yarnpkg.com/gulp/-/gulp-3.9.0.tgz"; + sha1 = "cf1fba4cb558bb8c6ae6c9613f583ae2620d214a"; + }; + } + + { + name = "gulplog___gulplog_1.0.0.tgz"; + path = fetchurl { + name = "gulplog___gulplog_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz"; + sha1 = "e28c4d45d05ecbbed818363ce8f9c5926229ffe5"; + }; + } + + { + name = "handlebars___handlebars_4.1.0.tgz"; + path = fetchurl { + name = "handlebars___handlebars_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz"; + sha1 = "0d6a6f34ff1f63cecec8423aa4169827bf787c3a"; + }; + } + + { + name = "har_schema___har_schema_2.0.0.tgz"; + path = fetchurl { + name = "har_schema___har_schema_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + } + + { + name = "har_validator___har_validator_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + + { + name = "has_ansi___has_ansi_0.1.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz"; + sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e"; + }; + } + + { + name = "has_ansi___has_ansi_2.0.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + } + + { + name = "has_binary___has_binary_0.1.7.tgz"; + path = fetchurl { + name = "has_binary___has_binary_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz"; + sha1 = "68e61eb16210c9545a0a5cce06a873912fe1e68c"; + }; + } + + { + name = "has_cors___has_cors_1.1.0.tgz"; + path = fetchurl { + name = "has_cors___has_cors_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz"; + sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; + }; + } + + { + name = "has_flag___has_flag_1.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz"; + sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; + }; + } + + { + name = "has_gulplog___has_gulplog_0.1.0.tgz"; + path = fetchurl { + name = "has_gulplog___has_gulplog_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz"; + sha1 = "6414c82913697da51590397dafb12f22967811ce"; + }; + } + + { + name = "has_unicode___has_unicode_2.0.1.tgz"; + path = fetchurl { + name = "has_unicode___has_unicode_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + } + + { + name = "has_value___has_value_0.3.1.tgz"; + path = fetchurl { + name = "has_value___has_value_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + } + + { + name = "has_value___has_value_1.0.0.tgz"; + path = fetchurl { + name = "has_value___has_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + } + + { + name = "has_values___has_values_0.1.4.tgz"; + path = fetchurl { + name = "has_values___has_values_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + } + + { + name = "has_values___has_values_1.0.0.tgz"; + path = fetchurl { + name = "has_values___has_values_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + } + + { + name = "has___has_1.0.3.tgz"; + path = fetchurl { + name = "has___has_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz"; + sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796"; + }; + } + + { + name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; + path = fetchurl { + name = "homedir_polyfill___homedir_polyfill_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz"; + sha1 = "743298cef4e5af3e194161fbadcc2151d3a058e8"; + }; + } + + { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz"; + sha1 = "97f236977bd6e125408930ff6de3eec6281ec047"; + }; + } + + { + name = "http_errors___http_errors_1.6.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + } + + { + name = "http_errors___http_errors_1.3.1.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz"; + sha1 = "197e22cdebd4198585e8694ef6786197b91ed942"; + }; + } + + { + name = "http_parser_js___http_parser_js_0.5.0.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz"; + sha1 = "d65edbede84349d0dc30320815a15d39cc3cbbd8"; + }; + } + + { + name = "http_proxy___http_proxy_1.17.0.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz"; + sha1 = "7ad38494658f84605e2f6db4436df410f4e5be9a"; + }; + } + + { + name = "http_signature___http_signature_1.2.0.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.13.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.13.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz"; + sha1 = "1f88aba4ab0b1508e8312acc39345f36e992e2f2"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz"; + sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + + { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + path = fetchurl { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz"; + sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8"; + }; + } + + { + name = "in_publish___in_publish_2.0.0.tgz"; + path = fetchurl { + name = "in_publish___in_publish_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz"; + sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51"; + }; + } + + { + name = "indent_string___indent_string_2.1.0.tgz"; + path = fetchurl { + name = "indent_string___indent_string_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz"; + sha1 = "8e2d48348742121b4a8218b7a137e9a52049dc80"; + }; + } + + { + name = "indexof___indexof_0.0.1.tgz"; + path = fetchurl { + name = "indexof___indexof_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz"; + sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; + }; + } + + { + name = "inflight___inflight_1.0.6.tgz"; + path = fetchurl { + name = "inflight___inflight_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + } + + { + name = "inherits___inherits_1.0.2.tgz"; + path = fetchurl { + name = "inherits___inherits_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz"; + sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"; + }; + } + + { + name = "inherits___inherits_2.0.3.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + } + + { + name = "ini___ini_1.3.5.tgz"; + path = fetchurl { + name = "ini___ini_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz"; + sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927"; + }; + } + + { + name = "interpret___interpret_0.6.6.tgz"; + path = fetchurl { + name = "interpret___interpret_0.6.6.tgz"; + url = "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz"; + sha1 = "fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"; + }; + } + + { + name = "invert_kv___invert_kv_1.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz"; + sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"; + }; + } + + { + name = "is_absolute___is_absolute_1.0.0.tgz"; + path = fetchurl { + name = "is_absolute___is_absolute_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz"; + sha1 = "395e1ae84b11f26ad1795e73c17378e48a301576"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + } + + { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + } + + { + name = "is_buffer___is_buffer_1.1.6.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; + sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; + }; + } + + { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; + }; + } + + { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; + }; + } + + { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + path = fetchurl { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz"; + sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"; + }; + } + + { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + path = fetchurl { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz"; + sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534"; + }; + } + + { + name = "is_extendable___is_extendable_0.1.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + } + + { + name = "is_extendable___is_extendable_1.0.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; + sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; + }; + } + + { + name = "is_extglob___is_extglob_1.0.0.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz"; + sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0"; + }; + } + + { + name = "is_extglob___is_extglob_2.1.1.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + } + + { + name = "is_finite___is_finite_1.0.2.tgz"; + path = fetchurl { + name = "is_finite___is_finite_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz"; + sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + } + + { + name = "is_glob___is_glob_2.0.1.tgz"; + path = fetchurl { + name = "is_glob___is_glob_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz"; + sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863"; + }; + } + + { + name = "is_glob___is_glob_3.1.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + } + + { + name = "is_number___is_number_0.1.1.tgz"; + path = fetchurl { + name = "is_number___is_number_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz"; + sha1 = "69a7af116963d47206ec9bd9b48a14216f1e3806"; + }; + } + + { + name = "is_number___is_number_2.1.0.tgz"; + path = fetchurl { + name = "is_number___is_number_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz"; + sha1 = "01fcbbb393463a548f2f466cce16dece49db908f"; + }; + } + + { + name = "is_number___is_number_3.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + } + + { + name = "is_number___is_number_4.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz"; + sha1 = "0026e37f5454d73e356dfe6564699867c6a7f0ff"; + }; + } + + { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + path = fetchurl { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; + }; + } + + { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + path = fetchurl { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz"; + sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"; + }; + } + + { + name = "is_primitive___is_primitive_2.0.0.tgz"; + path = fetchurl { + name = "is_primitive___is_primitive_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz"; + sha1 = "207bab91638499c07b2adf240a41a87210034575"; + }; + } + + { + name = "is_relative___is_relative_1.0.0.tgz"; + path = fetchurl { + name = "is_relative___is_relative_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz"; + sha1 = "a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"; + }; + } + + { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + path = fetchurl { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + } + + { + name = "is_unc_path___is_unc_path_1.0.0.tgz"; + path = fetchurl { + name = "is_unc_path___is_unc_path_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz"; + sha1 = "d731e8898ed090a12c352ad2eaed5095ad322c9d"; + }; + } + + { + name = "is_utf8___is_utf8_0.2.1.tgz"; + path = fetchurl { + name = "is_utf8___is_utf8_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz"; + sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72"; + }; + } + + { + name = "is_windows___is_windows_1.0.2.tgz"; + path = fetchurl { + name = "is_windows___is_windows_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; + sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; + }; + } + + { + name = "is___is_3.3.0.tgz"; + path = fetchurl { + name = "is___is_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz"; + sha1 = "61cff6dd3c4193db94a3d62582072b44e5645d79"; + }; + } + + { + name = "isarray___isarray_0.0.1.tgz"; + path = fetchurl { + name = "isarray___isarray_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz"; + sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf"; + }; + } + + { + name = "isarray___isarray_1.0.0.tgz"; + path = fetchurl { + name = "isarray___isarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + } + + { + name = "isbinaryfile___isbinaryfile_3.0.3.tgz"; + path = fetchurl { + name = "isbinaryfile___isbinaryfile_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz"; + sha1 = "5d6def3edebf6e8ca8cae9c30183a804b5f8be80"; + }; + } + + { + name = "isexe___isexe_2.0.0.tgz"; + path = fetchurl { + name = "isexe___isexe_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + } + + { + name = "isobject___isobject_2.1.0.tgz"; + path = fetchurl { + name = "isobject___isobject_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + } + + { + name = "isobject___isobject_3.0.1.tgz"; + path = fetchurl { + name = "isobject___isobject_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + } + + { + name = "isstream___isstream_0.1.2.tgz"; + path = fetchurl { + name = "isstream___isstream_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + } + + { + name = "istanbul___istanbul_0.4.5.tgz"; + path = fetchurl { + name = "istanbul___istanbul_0.4.5.tgz"; + url = "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz"; + sha1 = "65c7d73d4c4da84d4f3ac310b918fb0b8033733b"; + }; + } + + { + name = "jasmine_core___jasmine_core_2.99.1.tgz"; + path = fetchurl { + name = "jasmine_core___jasmine_core_2.99.1.tgz"; + url = "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz"; + sha1 = "e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"; + }; + } + + { + name = "js_base64___js_base64_2.5.1.tgz"; + path = fetchurl { + name = "js_base64___js_base64_2.5.1.tgz"; + url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz"; + sha1 = "1efa39ef2c5f7980bb1784ade4a8af2de3291121"; + }; + } + + { + name = "js_yaml___js_yaml_3.12.2.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.12.2.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz"; + sha1 = "ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc"; + }; + } + + { + name = "jsbn___jsbn_0.1.1.tgz"; + path = fetchurl { + name = "jsbn___jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + } + + { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; + }; + } + + { + name = "json_schema___json_schema_0.2.3.tgz"; + path = fetchurl { + name = "json_schema___json_schema_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + } + + { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + path = fetchurl { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + } + + { + name = "json3___json3_3.3.2.tgz"; + path = fetchurl { + name = "json3___json3_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz"; + sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1"; + }; + } + + { + name = "jsprim___jsprim_1.4.1.tgz"; + path = fetchurl { + name = "jsprim___jsprim_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + } + + { + name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; + path = fetchurl { + name = "karma_chrome_launcher___karma_chrome_launcher_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz"; + sha1 = "216879c68ac04d8d5140e99619ba04b59afd46cf"; + }; + } + + { + name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; + path = fetchurl { + name = "karma_coffee_preprocessor___karma_coffee_preprocessor_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/karma-coffee-preprocessor/-/karma-coffee-preprocessor-0.3.0.tgz"; + sha1 = "a4d8dc2b145bfef458a203d308b63bc03c9b4259"; + }; + } + + { + name = "karma_coverage___karma_coverage_0.5.5.tgz"; + path = fetchurl { + name = "karma_coverage___karma_coverage_0.5.5.tgz"; + url = "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-0.5.5.tgz"; + sha1 = "b0d58b1025d59d5c6620263186f1d58f5d5348c5"; + }; + } + + { + name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; + path = fetchurl { + name = "karma_jasmine___karma_jasmine_0.3.8.tgz"; + url = "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-0.3.8.tgz"; + sha1 = "5b6457791ad9b89aa173f079e3ebe1b8c805236c"; + }; + } + + { + name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; + path = fetchurl { + name = "karma_sourcemap_loader___karma_sourcemap_loader_0.3.7.tgz"; + url = "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz"; + sha1 = "91322c77f8f13d46fed062b042e1009d4c4505d8"; + }; + } + + { + name = "karma___karma_0.13.22.tgz"; + path = fetchurl { + name = "karma___karma_0.13.22.tgz"; + url = "https://registry.yarnpkg.com/karma/-/karma-0.13.22.tgz"; + sha1 = "07750b1bd063d7e7e7b91bcd2e6354d8f2aa8744"; + }; + } + + { + name = "kind_of___kind_of_3.2.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + } + + { + name = "kind_of___kind_of_4.0.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + } + + { + name = "kind_of___kind_of_5.1.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; + sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; + }; + } + + { + name = "kind_of___kind_of_6.0.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz"; + sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051"; + }; + } + + { + name = "lcid___lcid_1.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz"; + sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835"; + }; + } + + { + name = "levn___levn_0.3.0.tgz"; + path = fetchurl { + name = "levn___levn_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + } + + { + name = "liftoff___liftoff_2.5.0.tgz"; + path = fetchurl { + name = "liftoff___liftoff_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz"; + sha1 = "2009291bb31cea861bbf10a7c15a28caf75c31ec"; + }; + } + + { + name = "livereload_js___livereload_js_2.4.0.tgz"; + path = fetchurl { + name = "livereload_js___livereload_js_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz"; + sha1 = "447c31cf1ea9ab52fc20db615c5ddf678f78009c"; + }; + } + + { + name = "load_json_file___load_json_file_1.1.0.tgz"; + path = fetchurl { + name = "load_json_file___load_json_file_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz"; + sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0"; + }; + } + + { + name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; + path = fetchurl { + name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz"; + sha1 = "8c38a099500f215ad09e59f1722fd0c52bfe0a4e"; + }; + } + + { + name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; + path = fetchurl { + name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"; + sha1 = "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"; + }; + } + + { + name = "lodash._basetostring___lodash._basetostring_3.0.1.tgz"; + path = fetchurl { + name = "lodash._basetostring___lodash._basetostring_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz"; + sha1 = "d1861d877f824a52f669832dcaf3ee15566a07d5"; + }; + } + + { + name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; + path = fetchurl { + name = "lodash._basevalues___lodash._basevalues_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz"; + sha1 = "5b775762802bde3d3297503e26300820fdf661b7"; + }; + } + + { + name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; + path = fetchurl { + name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"; + sha1 = "e531c27644cf8b57a99e17ed95b35c748789392e"; + }; + } + + { + name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; + path = fetchurl { + name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz"; + sha1 = "838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"; + }; + } + + { + name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; + path = fetchurl { + name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz"; + sha1 = "570bc7dede46d61cdcde687d65d3eecbaa3aaff5"; + }; + } + + { + name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; + path = fetchurl { + name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; + url = "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"; + sha1 = "5203ad7ba425fae842460e696db9cf3e6aac057c"; + }; + } + + { + name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reescape___lodash._reescape_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz"; + sha1 = "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"; + }; + } + + { + name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reevaluate___lodash._reevaluate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz"; + sha1 = "58bc74c40664953ae0b124d806996daca431e2ed"; + }; + } + + { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + path = fetchurl { + name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"; + sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d"; + }; + } + + { + name = "lodash._root___lodash._root_3.0.1.tgz"; + path = fetchurl { + name = "lodash._root___lodash._root_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz"; + sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692"; + }; + } + + { + name = "lodash.assign___lodash.assign_3.2.0.tgz"; + path = fetchurl { + name = "lodash.assign___lodash.assign_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz"; + sha1 = "3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"; + }; + } + + { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + path = fetchurl { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz"; + sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7"; + }; + } + + { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + path = fetchurl { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"; + sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef"; + }; + } + + { + name = "lodash.escape___lodash.escape_3.2.0.tgz"; + path = fetchurl { + name = "lodash.escape___lodash.escape_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz"; + sha1 = "995ee0dc18c1b48cc92effae71a10aab5b487698"; + }; + } + + { + name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; + path = fetchurl { + name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"; + sha1 = "2f573d85c6a24289ff00663b491c1d338ff3458a"; + }; + } + + { + name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; + path = fetchurl { + name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz"; + sha1 = "79e4eb88c36a8122af86f844aa9bcd851b5fbb55"; + }; + } + + { + name = "lodash.keys___lodash.keys_3.1.2.tgz"; + path = fetchurl { + name = "lodash.keys___lodash.keys_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz"; + sha1 = "4dbc0472b156be50a0b286855d1bd0b0c656098a"; + }; + } + + { + name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; + path = fetchurl { + name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz"; + sha1 = "639057e726c3afbdb3e7d42741caa8d6e4335927"; + }; + } + + { + name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; + path = fetchurl { + name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz"; + sha1 = "936a4e309ef330a7645ed4145986c85ae5b20805"; + }; + } + + { + name = "lodash.template___lodash.template_3.6.2.tgz"; + path = fetchurl { + name = "lodash.template___lodash.template_3.6.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz"; + sha1 = "f8cdecc6169a255be9098ae8b0c53d378931d14f"; + }; + } + + { + name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; + path = fetchurl { + name = "lodash.templatesettings___lodash.templatesettings_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz"; + sha1 = "fb307844753b66b9f1afa54e262c745307dba8e5"; + }; + } + + { + name = "lodash___lodash_3.10.1.tgz"; + path = fetchurl { + name = "lodash___lodash_3.10.1.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz"; + sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; + }; + } + + { + name = "lodash___lodash_4.17.11.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.11.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz"; + sha1 = "b39ea6229ef607ecd89e2c8df12536891cac9b8d"; + }; + } + + { + name = "lodash___lodash_1.0.2.tgz"; + path = fetchurl { + name = "lodash___lodash_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz"; + sha1 = "8f57560c83b59fc270bd3d561b690043430e2551"; + }; + } + + { + name = "log4js___log4js_0.6.38.tgz"; + path = fetchurl { + name = "log4js___log4js_0.6.38.tgz"; + url = "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz"; + sha1 = "2c494116695d6fb25480943d3fc872e662a522fd"; + }; + } + + { + name = "loophole___loophole_1.1.0.tgz"; + path = fetchurl { + name = "loophole___loophole_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/loophole/-/loophole-1.1.0.tgz"; + sha1 = "37949fea453b6256acc725c320ce0c5a7f70a2bd"; + }; + } + + { + name = "loud_rejection___loud_rejection_1.6.0.tgz"; + path = fetchurl { + name = "loud_rejection___loud_rejection_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz"; + sha1 = "5b46f80147edee578870f086d04821cf998e551f"; + }; + } + + { + name = "lru_cache___lru_cache_2.7.3.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_2.7.3.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz"; + sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952"; + }; + } + + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + + { + name = "make_iterator___make_iterator_1.0.1.tgz"; + path = fetchurl { + name = "make_iterator___make_iterator_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz"; + sha1 = "29b33f312aa8f547c4a5e490f56afcec99133ad6"; + }; + } + + { + name = "map_cache___map_cache_0.2.2.tgz"; + path = fetchurl { + name = "map_cache___map_cache_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + } + + { + name = "map_obj___map_obj_1.0.1.tgz"; + path = fetchurl { + name = "map_obj___map_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz"; + sha1 = "d933ceb9205d82bdcf4886f6742bdc2b4dea146d"; + }; + } + + { + name = "map_stream___map_stream_0.0.7.tgz"; + path = fetchurl { + name = "map_stream___map_stream_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz"; + sha1 = "8a1f07896d82b10926bd3744a2420009f88974a8"; + }; + } + + { + name = "map_visit___map_visit_1.0.0.tgz"; + path = fetchurl { + name = "map_visit___map_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + } + + { + name = "math_random___math_random_1.0.4.tgz"; + path = fetchurl { + name = "math_random___math_random_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz"; + sha1 = "5dd6943c938548267016d4e34f057583080c514c"; + }; + } + + { + name = "media_typer___media_typer_0.3.0.tgz"; + path = fetchurl { + name = "media_typer___media_typer_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + } + + { + name = "meow___meow_3.7.0.tgz"; + path = fetchurl { + name = "meow___meow_3.7.0.tgz"; + url = "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz"; + sha1 = "72cb668b425228290abbfa856892587308a801fb"; + }; + } + + { + name = "micromatch___micromatch_2.3.11.tgz"; + path = fetchurl { + name = "micromatch___micromatch_2.3.11.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz"; + sha1 = "86677c97d1720b363431d04d0d15293bd38c1565"; + }; + } + + { + name = "micromatch___micromatch_3.1.10.tgz"; + path = fetchurl { + name = "micromatch___micromatch_3.1.10.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; + sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; + }; + } + + { + name = "mime_db___mime_db_1.38.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.38.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz"; + sha1 = "1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"; + }; + } + + { + name = "mime_types___mime_types_2.1.22.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.22.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz"; + sha1 = "fe6b355a190926ab7698c9a0556a11199b2199bd"; + }; + } + + { + name = "mime___mime_1.6.0.tgz"; + path = fetchurl { + name = "mime___mime_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz"; + sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1"; + }; + } + + { + name = "mini_lr___mini_lr_0.1.9.tgz"; + path = fetchurl { + name = "mini_lr___mini_lr_0.1.9.tgz"; + url = "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz"; + sha1 = "02199d27347953d1fd1d6dbded4261f187b2d0f6"; + }; + } + + { + name = "minimatch___minimatch_3.0.4.tgz"; + path = fetchurl { + name = "minimatch___minimatch_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + } + + { + name = "minimatch___minimatch_2.0.10.tgz"; + path = fetchurl { + name = "minimatch___minimatch_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz"; + sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"; + }; + } + + { + name = "minimatch___minimatch_0.2.14.tgz"; + path = fetchurl { + name = "minimatch___minimatch_0.2.14.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz"; + sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a"; + }; + } + + { + name = "minimist___minimist_0.0.8.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + } + + { + name = "minimist___minimist_1.2.0.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz"; + sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; + }; + } + + { + name = "minimist___minimist_0.0.10.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.10.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz"; + sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf"; + }; + } + + { + name = "minipass___minipass_2.3.5.tgz"; + path = fetchurl { + name = "minipass___minipass_2.3.5.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz"; + sha1 = "cacebe492022497f656b0f0f51e2682a9ed2d848"; + }; + } + + { + name = "minizlib___minizlib_1.2.1.tgz"; + path = fetchurl { + name = "minizlib___minizlib_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz"; + sha1 = "dd27ea6136243c7c880684e8672bb3a45fd9b614"; + }; + } + + { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz"; + sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe"; + }; + } + + { + name = "mkdirp___mkdirp_0.5.1.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + } + + { + name = "ms___ms_0.7.1.tgz"; + path = fetchurl { + name = "ms___ms_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz"; + sha1 = "9cd13c03adbff25b65effde7ce864ee952017098"; + }; + } + + { + name = "ms___ms_0.7.2.tgz"; + path = fetchurl { + name = "ms___ms_0.7.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz"; + sha1 = "ae25cf2512b3885a1d95d7f037868d8431124765"; + }; + } + + { + name = "ms___ms_2.0.0.tgz"; + path = fetchurl { + name = "ms___ms_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + } + + { + name = "ms___ms_2.1.1.tgz"; + path = fetchurl { + name = "ms___ms_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz"; + sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"; + }; + } + + { + name = "multipipe___multipipe_0.1.2.tgz"; + path = fetchurl { + name = "multipipe___multipipe_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz"; + sha1 = "2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"; + }; + } + + { + name = "nan___nan_2.12.1.tgz"; + path = fetchurl { + name = "nan___nan_2.12.1.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz"; + sha1 = "7b1aa193e9aa86057e3c7bbd0ac448e770925552"; + }; + } + + { + name = "nanomatch___nanomatch_1.2.13.tgz"; + path = fetchurl { + name = "nanomatch___nanomatch_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; + sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; + }; + } + + { + name = "natives___natives_1.1.6.tgz"; + path = fetchurl { + name = "natives___natives_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz"; + sha1 = "a603b4a498ab77173612b9ea1acdec4d980f00bb"; + }; + } + + { + name = "needle___needle_2.2.4.tgz"; + path = fetchurl { + name = "needle___needle_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz"; + sha1 = "51931bff82533b1928b7d1d69e01f1b00ffd2a4e"; + }; + } + + { + name = "negotiator___negotiator_0.6.1.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz"; + sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; + }; + } + + { + name = "ng_classify___ng_classify_4.1.1.tgz"; + path = fetchurl { + name = "ng_classify___ng_classify_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/ng-classify/-/ng-classify-4.1.1.tgz"; + sha1 = "6688b924c3c9b5f94da5f8fbc0d55176f3dda122"; + }; + } + + { + name = "node_gyp___node_gyp_3.8.0.tgz"; + path = fetchurl { + name = "node_gyp___node_gyp_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz"; + sha1 = "540304261c330e80d0d5edce253a68cb3964218c"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz"; + sha1 = "3070040716afdc778747b61b6887bf78880b80fc"; + }; + } + + { + name = "node_sass___node_sass_4.11.0.tgz"; + path = fetchurl { + name = "node_sass___node_sass_4.11.0.tgz"; + url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz"; + sha1 = "183faec398e9cbe93ba43362e2768ca988a6369a"; + }; + } + + { + name = "node.extend___node.extend_1.1.8.tgz"; + path = fetchurl { + name = "node.extend___node.extend_1.1.8.tgz"; + url = "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz"; + sha1 = "0aab3e63789f4e6d68b42bc00073ad1881243cf0"; + }; + } + + { + name = "nopt___nopt_3.0.6.tgz"; + path = fetchurl { + name = "nopt___nopt_3.0.6.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz"; + sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; + }; + } + + { + name = "nopt___nopt_4.0.1.tgz"; + path = fetchurl { + name = "nopt___nopt_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz"; + sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; + }; + } + + { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz"; + sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8"; + }; + } + + { + name = "normalize_path___normalize_path_2.1.1.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + } + + { + name = "npm_bundled___npm_bundled_1.0.6.tgz"; + path = fetchurl { + name = "npm_bundled___npm_bundled_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz"; + sha1 = "e7ba9aadcef962bb61248f91721cd932b3fe6bdd"; + }; + } + + { + name = "npm_packlist___npm_packlist_1.4.1.tgz"; + path = fetchurl { + name = "npm_packlist___npm_packlist_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz"; + sha1 = "19064cdf988da80ea3cee45533879d90192bbfbc"; + }; + } + + { + name = "npmlog___npmlog_4.1.2.tgz"; + path = fetchurl { + name = "npmlog___npmlog_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz"; + sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b"; + }; + } + + { + name = "null_check___null_check_1.0.0.tgz"; + path = fetchurl { + name = "null_check___null_check_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz"; + sha1 = "977dffd7176012b9ec30d2a39db5cf72a0439edd"; + }; + } + + { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + path = fetchurl { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + + { + name = "object_assign___object_assign_4.1.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz"; + sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"; + }; + } + + { + name = "object_assign___object_assign_3.0.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz"; + sha1 = "9bedd5ca0897949bca47e7ff408062d549f587f2"; + }; + } + + { + name = "object_assign___object_assign_4.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + } + + { + name = "object_component___object_component_0.0.3.tgz"; + path = fetchurl { + name = "object_component___object_component_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz"; + sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; + }; + } + + { + name = "object_copy___object_copy_0.1.0.tgz"; + path = fetchurl { + name = "object_copy___object_copy_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + } + + { + name = "object_visit___object_visit_1.0.1.tgz"; + path = fetchurl { + name = "object_visit___object_visit_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + } + + { + name = "object.defaults___object.defaults_1.1.0.tgz"; + path = fetchurl { + name = "object.defaults___object.defaults_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz"; + sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf"; + }; + } + + { + name = "object.map___object.map_1.0.1.tgz"; + path = fetchurl { + name = "object.map___object.map_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz"; + sha1 = "cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"; + }; + } + + { + name = "object.omit___object.omit_2.0.1.tgz"; + path = fetchurl { + name = "object.omit___object.omit_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz"; + sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"; + }; + } + + { + name = "object.pick___object.pick_1.3.0.tgz"; + path = fetchurl { + name = "object.pick___object.pick_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + } + + { + name = "on_finished___on_finished_2.3.0.tgz"; + path = fetchurl { + name = "on_finished___on_finished_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + } + + { + name = "once___once_1.4.0.tgz"; + path = fetchurl { + name = "once___once_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + } + + { + name = "once___once_1.3.3.tgz"; + path = fetchurl { + name = "once___once_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz"; + sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20"; + }; + } + + { + name = "optimist___optimist_0.6.1.tgz"; + path = fetchurl { + name = "optimist___optimist_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz"; + sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686"; + }; + } + + { + name = "optionator___optionator_0.8.2.tgz"; + path = fetchurl { + name = "optionator___optionator_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz"; + sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64"; + }; + } + + { + name = "options___options_0.0.6.tgz"; + path = fetchurl { + name = "options___options_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz"; + sha1 = "ec22d312806bb53e731773e7cdaefcf1c643128f"; + }; + } + + { + name = "orchestrator___orchestrator_0.3.8.tgz"; + path = fetchurl { + name = "orchestrator___orchestrator_0.3.8.tgz"; + url = "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz"; + sha1 = "14e7e9e2764f7315fbac184e506c7aa6df94ad7e"; + }; + } + + { + name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; + path = fetchurl { + name = "ordered_read_streams___ordered_read_streams_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz"; + sha1 = "fd565a9af8eb4473ba69b6ed8a34352cb552f126"; + }; + } + + { + name = "os_homedir___os_homedir_1.0.2.tgz"; + path = fetchurl { + name = "os_homedir___os_homedir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + } + + { + name = "os_locale___os_locale_1.4.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz"; + sha1 = "20f9f17ae29ed345e8bde583b13d2009803c14d9"; + }; + } + + { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + path = fetchurl { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + } + + { + name = "osenv___osenv_0.1.5.tgz"; + path = fetchurl { + name = "osenv___osenv_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz"; + sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410"; + }; + } + + { + name = "parse_filepath___parse_filepath_1.0.2.tgz"; + path = fetchurl { + name = "parse_filepath___parse_filepath_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz"; + sha1 = "a632127f53aaf3d15876f5872f3ffac763d6c891"; + }; + } + + { + name = "parse_glob___parse_glob_3.0.4.tgz"; + path = fetchurl { + name = "parse_glob___parse_glob_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz"; + sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c"; + }; + } + + { + name = "parse_json___parse_json_2.2.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz"; + sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9"; + }; + } + + { + name = "parse_node_version___parse_node_version_1.0.1.tgz"; + path = fetchurl { + name = "parse_node_version___parse_node_version_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz"; + sha1 = "e2b5dbede00e7fa9bc363607f53327e8b073189b"; + }; + } + + { + name = "parse_passwd___parse_passwd_1.0.0.tgz"; + path = fetchurl { + name = "parse_passwd___parse_passwd_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz"; + sha1 = "6d5b934a456993b23d37f40a382d6f1666a8e5c6"; + }; + } + + { + name = "parsejson___parsejson_0.0.3.tgz"; + path = fetchurl { + name = "parsejson___parsejson_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz"; + sha1 = "ab7e3759f209ece99437973f7d0f1f64ae0e64ab"; + }; + } + + { + name = "parseqs___parseqs_0.0.5.tgz"; + path = fetchurl { + name = "parseqs___parseqs_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz"; + sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; + }; + } + + { + name = "parseuri___parseuri_0.0.5.tgz"; + path = fetchurl { + name = "parseuri___parseuri_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz"; + sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; + }; + } + + { + name = "parseurl___parseurl_1.3.2.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz"; + sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; + }; + } + + { + name = "pascalcase___pascalcase_0.1.1.tgz"; + path = fetchurl { + name = "pascalcase___pascalcase_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + } + + { + name = "path_exists___path_exists_2.1.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz"; + sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b"; + }; + } + + { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + path = fetchurl { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + } + + { + name = "path_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + + { + name = "path_root_regex___path_root_regex_0.1.2.tgz"; + path = fetchurl { + name = "path_root_regex___path_root_regex_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz"; + sha1 = "bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"; + }; + } + + { + name = "path_root___path_root_0.1.1.tgz"; + path = fetchurl { + name = "path_root___path_root_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz"; + sha1 = "9a4a6814cac1c0cd73360a95f32083c8ea4745b7"; + }; + } + + { + name = "path_type___path_type_1.1.0.tgz"; + path = fetchurl { + name = "path_type___path_type_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz"; + sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441"; + }; + } + + { + name = "pause_stream___pause_stream_0.0.11.tgz"; + path = fetchurl { + name = "pause_stream___pause_stream_0.0.11.tgz"; + url = "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz"; + sha1 = "fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"; + }; + } + + { + name = "performance_now___performance_now_2.1.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + } + + { + name = "pify___pify_2.3.0.tgz"; + path = fetchurl { + name = "pify___pify_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + } + + { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + path = fetchurl { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + } + + { + name = "pinkie___pinkie_2.0.4.tgz"; + path = fetchurl { + name = "pinkie___pinkie_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + } + + { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + path = fetchurl { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + } + + { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + } + + { + name = "preserve___preserve_0.2.0.tgz"; + path = fetchurl { + name = "preserve___preserve_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz"; + sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b"; + }; + } + + { + name = "pretty_hrtime___pretty_hrtime_1.0.3.tgz"; + path = fetchurl { + name = "pretty_hrtime___pretty_hrtime_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"; + sha1 = "b7e3ea42435a4c9b2759d99e0f201eb195802ee1"; + }; + } + + { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz"; + sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa"; + }; + } + + { + name = "pseudomap___pseudomap_1.0.2.tgz"; + path = fetchurl { + name = "pseudomap___pseudomap_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + } + + { + name = "psl___psl_1.1.31.tgz"; + path = fetchurl { + name = "psl___psl_1.1.31.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz"; + sha1 = "e9aa86d0101b5b105cbe93ac6b784cd547276184"; + }; + } + + { + name = "punycode___punycode_1.4.1.tgz"; + path = fetchurl { + name = "punycode___punycode_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + } + + { + name = "punycode___punycode_2.1.1.tgz"; + path = fetchurl { + name = "punycode___punycode_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; + sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; + }; + } + + { + name = "qs___qs_5.2.0.tgz"; + path = fetchurl { + name = "qs___qs_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz"; + sha1 = "a9f31142af468cb72b25b30136ba2456834916be"; + }; + } + + { + name = "qs___qs_6.5.2.tgz"; + path = fetchurl { + name = "qs___qs_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; + sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; + }; + } + + { + name = "qs___qs_2.2.5.tgz"; + path = fetchurl { + name = "qs___qs_2.2.5.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz"; + sha1 = "1088abaf9dcc0ae5ae45b709e6c6b5888b23923c"; + }; + } + + { + name = "randomatic___randomatic_3.1.1.tgz"; + path = fetchurl { + name = "randomatic___randomatic_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz"; + sha1 = "b776efc59375984e36c537b2f51a1f0aff0da1ed"; + }; + } + + { + name = "raw_body___raw_body_2.3.3.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz"; + sha1 = "1b324ece6b5706e153855bc1148c65bb7f6ea0c3"; + }; + } + + { + name = "raw_body___raw_body_2.1.7.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.1.7.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz"; + sha1 = "adfeace2e4fb3098058014d08c072dcc59758774"; + }; + } + + { + name = "rc___rc_1.2.8.tgz"; + path = fetchurl { + name = "rc___rc_1.2.8.tgz"; + url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz"; + sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"; + }; + } + + { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + path = fetchurl { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz"; + sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02"; + }; + } + + { + name = "read_pkg___read_pkg_1.1.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz"; + sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"; + }; + } + + { + name = "readable_stream___readable_stream_1.0.34.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.0.34.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz"; + sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c"; + }; + } + + { + name = "readable_stream___readable_stream_2.3.6.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.6.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz"; + sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"; + }; + } + + { + name = "readable_stream___readable_stream_1.1.14.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.1.14.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz"; + sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; + }; + } + + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + + { + name = "rechoir___rechoir_0.6.2.tgz"; + path = fetchurl { + name = "rechoir___rechoir_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz"; + sha1 = "85204b54dba82d5742e28c96756ef43af50e3384"; + }; + } + + { + name = "redent___redent_1.0.0.tgz"; + path = fetchurl { + name = "redent___redent_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz"; + sha1 = "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"; + }; + } + + { + name = "regex_cache___regex_cache_0.4.4.tgz"; + path = fetchurl { + name = "regex_cache___regex_cache_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz"; + sha1 = "75bdc58a2a1496cec48a12835bc54c8d562336dd"; + }; + } + + { + name = "regex_not___regex_not_1.0.2.tgz"; + path = fetchurl { + name = "regex_not___regex_not_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; + sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; + }; + } + + { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + path = fetchurl { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + } + + { + name = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + + { + name = "repeat_string___repeat_string_0.2.2.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz"; + sha1 = "c7a8d3236068362059a7e4651fc6884e8b1fb4ae"; + }; + } + + { + name = "repeat_string___repeat_string_1.6.1.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + } + + { + name = "repeating___repeating_2.0.1.tgz"; + path = fetchurl { + name = "repeating___repeating_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz"; + sha1 = "5214c53a926d3552707527fbab415dbc08d06dda"; + }; + } + + { + name = "replace_ext___replace_ext_0.0.1.tgz"; + path = fetchurl { + name = "replace_ext___replace_ext_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz"; + sha1 = "29bbd92078a739f0bcce2b4ee41e837953522924"; + }; + } + + { + name = "request___request_2.88.0.tgz"; + path = fetchurl { + name = "request___request_2.88.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz"; + sha1 = "9c2fca4f7d35b592efe57c7f0a55e81052124fef"; + }; + } + + { + name = "require_directory___require_directory_2.1.1.tgz"; + path = fetchurl { + name = "require_directory___require_directory_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + } + + { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz"; + sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; + }; + } + + { + name = "requires_port___requires_port_1.0.0.tgz"; + path = fetchurl { + name = "requires_port___requires_port_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz"; + sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; + }; + } + + { + name = "resolve_dir___resolve_dir_1.0.1.tgz"; + path = fetchurl { + name = "resolve_dir___resolve_dir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz"; + sha1 = "79a40644c362be82f26effe739c9bb5382046f43"; + }; + } + + { + name = "resolve_url___resolve_url_0.2.1.tgz"; + path = fetchurl { + name = "resolve_url___resolve_url_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + } + + { + name = "resolve___resolve_1.1.7.tgz"; + path = fetchurl { + name = "resolve___resolve_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz"; + sha1 = "203114d82ad2c5ed9e8e0411b3932875e889e97b"; + }; + } + + { + name = "resolve___resolve_1.10.0.tgz"; + path = fetchurl { + name = "resolve___resolve_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz"; + sha1 = "3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"; + }; + } + + { + name = "ret___ret_0.1.15.tgz"; + path = fetchurl { + name = "ret___ret_0.1.15.tgz"; + url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; + sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; + }; + } + + { + name = "rimraf___rimraf_2.6.3.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.3.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz"; + sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; + }; + } + + { + name = "safe_regex___safe_regex_1.1.0.tgz"; + path = fetchurl { + name = "safe_regex___safe_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + } + + { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + path = fetchurl { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; + }; + } + + { + name = "sass_graph___sass_graph_2.2.4.tgz"; + path = fetchurl { + name = "sass_graph___sass_graph_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz"; + sha1 = "13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"; + }; + } + + { + name = "sax___sax_1.2.4.tgz"; + path = fetchurl { + name = "sax___sax_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; + sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; + }; + } + + { + name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; + path = fetchurl { + name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz"; + sha1 = "8eb06db9a9723333824d3f5530641149847ce5d1"; + }; + } + + { + name = "semver___semver_5.6.0.tgz"; + path = fetchurl { + name = "semver___semver_5.6.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz"; + sha1 = "7e74256fbaa49c75aa7c7a205cc22799cac80004"; + }; + } + + { + name = "semver___semver_4.3.6.tgz"; + path = fetchurl { + name = "semver___semver_4.3.6.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz"; + sha1 = "300bc6e0e86374f7ba61068b5b1ecd57fc6532da"; + }; + } + + { + name = "semver___semver_5.3.0.tgz"; + path = fetchurl { + name = "semver___semver_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz"; + sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; + }; + } + + { + name = "sequencify___sequencify_0.0.7.tgz"; + path = fetchurl { + name = "sequencify___sequencify_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz"; + sha1 = "90cff19d02e07027fd767f5ead3e7b95d1e7380c"; + }; + } + + { + name = "set_blocking___set_blocking_2.0.0.tgz"; + path = fetchurl { + name = "set_blocking___set_blocking_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + } + + { + name = "set_value___set_value_0.4.3.tgz"; + path = fetchurl { + name = "set_value___set_value_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz"; + sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"; + }; + } + + { + name = "set_value___set_value_2.0.0.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz"; + sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; + }; + } + + { + name = "sigmund___sigmund_1.0.1.tgz"; + path = fetchurl { + name = "sigmund___sigmund_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz"; + sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; + }; + } + + { + name = "signal_exit___signal_exit_3.0.2.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz"; + sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; + }; + } + + { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + path = fetchurl { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; + }; + } + + { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + path = fetchurl { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; + }; + } + + { + name = "snapdragon___snapdragon_0.8.2.tgz"; + path = fetchurl { + name = "snapdragon___snapdragon_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; + sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; + }; + } + + { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + path = fetchurl { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz"; + sha1 = "cb6d4bb8bec81e1078b99677f9ced0046066bb8b"; + }; + } + + { + name = "socket.io_client___socket.io_client_1.7.4.tgz"; + path = fetchurl { + name = "socket.io_client___socket.io_client_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz"; + sha1 = "ec9f820356ed99ef6d357f0756d648717bdd4281"; + }; + } + + { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + path = fetchurl { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz"; + sha1 = "dd532025103ce429697326befd64005fcfe5b4a0"; + }; + } + + { + name = "socket.io___socket.io_1.7.4.tgz"; + path = fetchurl { + name = "socket.io___socket.io_1.7.4.tgz"; + url = "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz"; + sha1 = "2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00"; + }; + } + + { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz"; + sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259"; + }; + } + + { + name = "source_map_url___source_map_url_0.4.0.tgz"; + path = fetchurl { + name = "source_map_url___source_map_url_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + } + + { + name = "source_map___source_map_0.4.4.tgz"; + path = fetchurl { + name = "source_map___source_map_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz"; + sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b"; + }; + } + + { + name = "source_map___source_map_0.5.7.tgz"; + path = fetchurl { + name = "source_map___source_map_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + } + + { + name = "source_map___source_map_0.6.1.tgz"; + path = fetchurl { + name = "source_map___source_map_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; + sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; + }; + } + + { + name = "source_map___source_map_0.2.0.tgz"; + path = fetchurl { + name = "source_map___source_map_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz"; + sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"; + }; + } + + { + name = "sparkles___sparkles_1.0.1.tgz"; + path = fetchurl { + name = "sparkles___sparkles_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz"; + sha1 = "008db65edce6c50eec0c5e228e1945061dd0437c"; + }; + } + + { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz"; + sha1 = "fb83e504445268f154b074e218c87c003cd31df4"; + }; + } + + { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz"; + sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977"; + }; + } + + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz"; + sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0"; + }; + } + + { + name = "spdx_license_ids___spdx_license_ids_3.0.3.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz"; + sha1 = "81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"; + }; + } + + { + name = "split_string___split_string_3.1.0.tgz"; + path = fetchurl { + name = "split_string___split_string_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; + sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; + }; + } + + { + name = "split___split_1.0.1.tgz"; + path = fetchurl { + name = "split___split_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz"; + sha1 = "605bd9be303aa59fb35f9229fbea0ddec9ea07d9"; + }; + } + + { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + path = fetchurl { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + } + + { + name = "sshpk___sshpk_1.16.1.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.16.1.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz"; + sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877"; + }; + } + + { + name = "static_extend___static_extend_0.1.2.tgz"; + path = fetchurl { + name = "static_extend___static_extend_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + } + + { + name = "statuses___statuses_1.5.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + } + + { + name = "statuses___statuses_1.3.1.tgz"; + path = fetchurl { + name = "statuses___statuses_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz"; + sha1 = "faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"; + }; + } + + { + name = "stdout_stream___stdout_stream_1.4.1.tgz"; + path = fetchurl { + name = "stdout_stream___stdout_stream_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz"; + sha1 = "5ac174cdd5cd726104aa0c0b2bd83815d8d535de"; + }; + } + + { + name = "stream_combiner___stream_combiner_0.2.2.tgz"; + path = fetchurl { + name = "stream_combiner___stream_combiner_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz"; + sha1 = "aec8cbac177b56b6f4fa479ced8c1912cee52858"; + }; + } + + { + name = "stream_consume___stream_consume_0.1.1.tgz"; + path = fetchurl { + name = "stream_consume___stream_consume_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz"; + sha1 = "d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"; + }; + } + + { + name = "string_width___string_width_1.0.2.tgz"; + path = fetchurl { + name = "string_width___string_width_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + } + + { + name = "string_width___string_width_2.1.1.tgz"; + path = fetchurl { + name = "string_width___string_width_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; + sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; + }; + } + + { + name = "string_decoder___string_decoder_0.10.31.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_0.10.31.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz"; + sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94"; + }; + } + + { + name = "string_decoder___string_decoder_1.1.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; + sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; + }; + } + + { + name = "strip_ansi___strip_ansi_0.3.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz"; + sha1 = "25f48ea22ca79187f3174a4db8759347bb126220"; + }; + } + + { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + } + + { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + } + + { + name = "strip_bom___strip_bom_1.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz"; + sha1 = "85b8862f3844b5a6d5ec8467a93598173a36f794"; + }; + } + + { + name = "strip_bom___strip_bom_2.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz"; + sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e"; + }; + } + + { + name = "strip_indent___strip_indent_1.0.1.tgz"; + path = fetchurl { + name = "strip_indent___strip_indent_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz"; + sha1 = "0c7962a6adefa7bbd4ac366460a638552ae1a0a2"; + }; + } + + { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + } + + { + name = "supports_color___supports_color_0.2.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz"; + sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a"; + }; + } + + { + name = "supports_color___supports_color_2.0.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + } + + { + name = "supports_color___supports_color_3.2.3.tgz"; + path = fetchurl { + name = "supports_color___supports_color_3.2.3.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz"; + sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; + }; + } + + { + name = "tar___tar_2.2.1.tgz"; + path = fetchurl { + name = "tar___tar_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz"; + sha1 = "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"; + }; + } + + { + name = "tar___tar_4.4.8.tgz"; + path = fetchurl { + name = "tar___tar_4.4.8.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz"; + sha1 = "b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"; + }; + } + + { + name = "through2___through2_0.6.5.tgz"; + path = fetchurl { + name = "through2___through2_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz"; + sha1 = "41ab9c67b29d57209071410e1d7a7a968cd3ad48"; + }; + } + + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + + { + name = "tildify___tildify_1.2.0.tgz"; + path = fetchurl { + name = "tildify___tildify_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz"; + sha1 = "dcec03f55dca9b7aa3e5b04f21817eb56e63588a"; + }; + } + + { + name = "time_stamp___time_stamp_1.1.0.tgz"; + path = fetchurl { + name = "time_stamp___time_stamp_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz"; + sha1 = "764a5a11af50561921b133f3b44e618687e0f5c3"; + }; + } + + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + + { + name = "to_array___to_array_0.1.4.tgz"; + path = fetchurl { + name = "to_array___to_array_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz"; + sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; + }; + } + + { + name = "to_object_path___to_object_path_0.3.0.tgz"; + path = fetchurl { + name = "to_object_path___to_object_path_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + } + + { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + } + + { + name = "to_regex___to_regex_3.0.2.tgz"; + path = fetchurl { + name = "to_regex___to_regex_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; + sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz"; + sha1 = "53f36da3f47783b0925afa06ff9f3b165280f781"; + }; + } + + { + name = "trim_newlines___trim_newlines_1.0.0.tgz"; + path = fetchurl { + name = "trim_newlines___trim_newlines_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz"; + sha1 = "5887966bb582a4503a41eb524f7d35011815a613"; + }; + } + + { + name = "true_case_path___true_case_path_1.0.3.tgz"; + path = fetchurl { + name = "true_case_path___true_case_path_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz"; + sha1 = "f813b5a8c86b40da59606722b144e3225799f47d"; + }; + } + + { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + } + + { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + path = fetchurl { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + } + + { + name = "type_check___type_check_0.3.2.tgz"; + path = fetchurl { + name = "type_check___type_check_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + } + + { + name = "type_is___type_is_1.6.16.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.16.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz"; + sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194"; + }; + } + + { + name = "uglify_js___uglify_js_3.4.9.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_3.4.9.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz"; + sha1 = "af02f180c1207d76432e473ed24a28f4a782bae3"; + }; + } + + { + name = "ultron___ultron_1.0.2.tgz"; + path = fetchurl { + name = "ultron___ultron_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz"; + sha1 = "ace116ab557cd197386a4e88f4685378c8b2e4fa"; + }; + } + + { + name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; + path = fetchurl { + name = "unc_path_regex___unc_path_regex_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz"; + sha1 = "e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"; + }; + } + + { + name = "union_value___union_value_1.0.0.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz"; + sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"; + }; + } + + { + name = "unique_stream___unique_stream_1.0.0.tgz"; + path = fetchurl { + name = "unique_stream___unique_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz"; + sha1 = "d59a4a75427447d9aa6c91e70263f8d26a4b104b"; + }; + } + + { + name = "unpipe___unpipe_1.0.0.tgz"; + path = fetchurl { + name = "unpipe___unpipe_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + } + + { + name = "unset_value___unset_value_1.0.0.tgz"; + path = fetchurl { + name = "unset_value___unset_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + } + + { + name = "uri_js___uri_js_4.2.2.tgz"; + path = fetchurl { + name = "uri_js___uri_js_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; + sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; + }; + } + + { + name = "urix___urix_0.1.0.tgz"; + path = fetchurl { + name = "urix___urix_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + } + + { + name = "use___use_3.1.1.tgz"; + path = fetchurl { + name = "use___use_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; + sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; + }; + } + + { + name = "user_home___user_home_1.1.1.tgz"; + path = fetchurl { + name = "user_home___user_home_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz"; + sha1 = "2b5be23a32b63a7c9deb8d0f28d485724a3df190"; + }; + } + + { + name = "useragent___useragent_2.3.0.tgz"; + path = fetchurl { + name = "useragent___useragent_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz"; + sha1 = "217f943ad540cb2128658ab23fc960f6a88c9972"; + }; + } + + { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + path = fetchurl { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + } + + { + name = "utils_merge___utils_merge_1.0.1.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + } + + { + name = "uuid___uuid_3.3.2.tgz"; + path = fetchurl { + name = "uuid___uuid_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz"; + sha1 = "1b4af4955eb3077c501c23872fc6513811587131"; + }; + } + + { + name = "v8flags___v8flags_2.1.1.tgz"; + path = fetchurl { + name = "v8flags___v8flags_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz"; + sha1 = "aab1a1fa30d45f88dd321148875ac02c0b55e5b4"; + }; + } + + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + + { + name = "verror___verror_1.10.0.tgz"; + path = fetchurl { + name = "verror___verror_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + } + + { + name = "vinyl_fs___vinyl_fs_0.3.14.tgz"; + path = fetchurl { + name = "vinyl_fs___vinyl_fs_0.3.14.tgz"; + url = "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz"; + sha1 = "9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"; + }; + } + + { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; + path = fetchurl { + name = "vinyl_sourcemaps_apply___vinyl_sourcemaps_apply_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz"; + sha1 = "ab6549d61d172c2b1b87be5c508d239c8ef87705"; + }; + } + + { + name = "vinyl___vinyl_0.4.6.tgz"; + path = fetchurl { + name = "vinyl___vinyl_0.4.6.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz"; + sha1 = "2f356c87a550a255461f36bbeb2a5ba8bf784847"; + }; + } + + { + name = "vinyl___vinyl_0.5.3.tgz"; + path = fetchurl { + name = "vinyl___vinyl_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz"; + sha1 = "b0455b38fc5e0cf30d4325132e461970c2091cde"; + }; + } + + { + name = "void_elements___void_elements_2.0.1.tgz"; + path = fetchurl { + name = "void_elements___void_elements_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz"; + sha1 = "c066afb582bb1cb4128d60ea92392e94d5e9dbec"; + }; + } + + { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz"; + sha1 = "0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"; + }; + } + + { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + path = fetchurl { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz"; + sha1 = "5d2ff22977003ec687a4b87073dfbbac146ccf29"; + }; + } + + { + name = "which_module___which_module_1.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz"; + sha1 = "bba63ca861948994ff307736089e3b96026c2a4f"; + }; + } + + { + name = "which___which_1.3.1.tgz"; + path = fetchurl { + name = "which___which_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; + sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; + }; + } + + { + name = "wide_align___wide_align_1.1.3.tgz"; + path = fetchurl { + name = "wide_align___wide_align_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz"; + sha1 = "ae074e6bdc0c14a431e804e624549c633b000457"; + }; + } + + { + name = "wordwrap___wordwrap_1.0.0.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz"; + sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; + }; + } + + { + name = "wordwrap___wordwrap_0.0.3.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz"; + sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107"; + }; + } + + { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; + sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; + }; + } + + { + name = "wrappy___wrappy_1.0.2.tgz"; + path = fetchurl { + name = "wrappy___wrappy_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + } + + { + name = "ws___ws_1.1.5.tgz"; + path = fetchurl { + name = "ws___ws_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz"; + sha1 = "cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"; + }; + } + + { + name = "wtf_8___wtf_8_1.0.0.tgz"; + path = fetchurl { + name = "wtf_8___wtf_8_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz"; + sha1 = "392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"; + }; + } + + { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + path = fetchurl { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz"; + sha1 = "185a888c04eca46c3e4070d99f7b49de3528992d"; + }; + } + + { + name = "xtend___xtend_4.0.1.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz"; + sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; + }; + } + + { + name = "y18n___y18n_3.2.1.tgz"; + path = fetchurl { + name = "y18n___y18n_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz"; + sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41"; + }; + } + + { + name = "yallist___yallist_2.1.2.tgz"; + path = fetchurl { + name = "yallist___yallist_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + } + + { + name = "yallist___yallist_3.0.3.tgz"; + path = fetchurl { + name = "yallist___yallist_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz"; + sha1 = "b4b049e314be545e3ce802236d6cd22cd91c3de9"; + }; + } + + { + name = "yargs_parser___yargs_parser_5.0.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz"; + sha1 = "275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"; + }; + } + + { + name = "yargs___yargs_7.1.0.tgz"; + path = fetchurl { + name = "yargs___yargs_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz"; + sha1 = "6ba318eb16961727f5d284f8ea003e8d6154d0c8"; + }; + } + + { + name = "yeast___yeast_0.1.2.tgz"; + path = fetchurl { + name = "yeast___yeast_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz"; + sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; + }; + } + ]; +} diff --git a/pkgs/python-packages/buildbot/plugins/default.nix b/pkgs/python-packages/buildbot/plugins/default.nix new file mode 100644 index 00000000..4952819a --- /dev/null +++ b/pkgs/python-packages/buildbot/plugins/default.nix @@ -0,0 +1,7 @@ +{ mylibs, callPackage, python }: +{ + buildslist = callPackage ./buildslist { + inherit mylibs; + pythonPackages = python.pkgs; + }; +} diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix new file mode 100644 index 00000000..747bbe62 --- /dev/null +++ b/pkgs/python-packages/default.nix @@ -0,0 +1,6 @@ +{ mylibs, callPackage, python }: +{ + apprise = callPackage ./apprise { inherit mylibs; pythonPackages = python.pkgs; }; + buildbot-plugins = callPackage ./buildbot/plugins { inherit mylibs python; }; + wokkel = callPackage ./wokkel.nix { pythonPackages = python.pkgs; }; +} diff --git a/pkgs/python-packages/wokkel.nix b/pkgs/python-packages/wokkel.nix new file mode 100644 index 00000000..b34caecd --- /dev/null +++ b/pkgs/python-packages/wokkel.nix @@ -0,0 +1,11 @@ +{ pythonPackages }: with pythonPackages; +buildPythonPackage rec { + pname = "wokkel"; + version = "18.0.0"; + src = fetchPypi { + inherit pname version; + sha256 = "1spq44gg8gsviqx1dvlmjpgfc0wk0jpyx4ap01y2pad1ai9cw016"; + }; + propagatedBuildInputs = [ twisted.extras.tls twisted incremental dateutil ]; + doChecks = false; +} diff --git a/pkgs/slang_1/default.nix b/pkgs/slang_1/default.nix new file mode 100644 index 00000000..3054b1d3 --- /dev/null +++ b/pkgs/slang_1/default.nix @@ -0,0 +1,25 @@ +{ stdenv, fetchpatch, fetchurl }: +stdenv.mkDerivation rec { + name = "slang-debian-patched-${version}"; + version = "1.4.9"; + src = fetchurl { + url = "ftp://space.mit.edu/pub/davis/slang/v1.4/slang-1.4.9.tar.gz"; + sha256 = "1y2mg0whqh4b3acd0k17i4biz55bimxg8aaxhmwd165cvspxns9r"; + }; + patches = [ + (fetchpatch { + name = "slang_1.4.9dbs-8.diff.gz"; + url = "http://archive.debian.org/debian-archive/debian-amd64/pool/main/s/slang/slang_1.4.9dbs-8.diff.gz"; + sha256 = "0xdq14k5ynqfwpmis1rcggs7m4n921i3bs27icbmbhfg5gb2hap2"; + }) + ]; + preConfigure = '' + for i in debian/patches/*; do + patch -p1 < $i + done + makeFlagsArray=(CFLAGS=" -g -O2 -fno-strength-reduce -DUTF8 -D_REENTRANT -D_XOPEN_SOURCE=500") + ''; + postBuild = '' + sed -i "1i#ifndef UTF8\n#define UTF8\n#endif" src/slang.h + ''; +} diff --git a/pkgs/telegram-cli/default.nix b/pkgs/telegram-cli/default.nix new file mode 100644 index 00000000..6987748d --- /dev/null +++ b/pkgs/telegram-cli/default.nix @@ -0,0 +1,16 @@ +{ stdenv, mylibs, pkgconfig, libevent, lua, jansson, openssl, readline, zlib, libconfig }: +stdenv.mkDerivation (mylibs.fetchedGithub ./telegram-cli.json // { + patches = [ + ./telegram-cli.patch + ]; + buildInputs = [ pkgconfig libevent lua jansson openssl readline zlib libconfig ]; + preBuild = '' + sed -i -e 's@"/etc/" PROG_NAME "/server.pub"@"'$out'/etc/server.pub"@' main.c + ''; + installPhase = '' + mkdir -p $out + install -Dm755 bin/telegram-cli $out/bin/telegram-cli + install -Dm644 tg-server.pub $out/etc/server.pub + install -Dm644 debian/telegram-cli.8 $out/man/man8/telegram-cli.8 + ''; +}) diff --git a/pkgs/telegram-cli/telegram-cli.json b/pkgs/telegram-cli/telegram-cli.json new file mode 100644 index 00000000..53e0a7b2 --- /dev/null +++ b/pkgs/telegram-cli/telegram-cli.json @@ -0,0 +1,15 @@ +{ + "tag": "6547c0b-master", + "meta": { + "name": "telegram-cli", + "url": "https://github.com/vysheng/tg", + "branch": "master" + }, + "github": { + "owner": "vysheng", + "repo": "tg", + "rev": "6547c0b21b977b327b3c5e8142963f4bc246187a", + "sha256": "07sss5cnw2ygd7mp8f5532lmj7qm6ywqf4cjaq5g13i8igzqzwzj", + "fetchSubmodules": true + } +} diff --git a/pkgs/telegram-cli/telegram-cli.patch b/pkgs/telegram-cli/telegram-cli.patch new file mode 100644 index 00000000..2d2b7b04 --- /dev/null +++ b/pkgs/telegram-cli/telegram-cli.patch @@ -0,0 +1,90 @@ +diff --git a/tgl/crypto/rsa_pem_openssl.c b/tgl/crypto/rsa_pem_openssl.c +index db653f2..5e6a697 100644 +--- a/tgl/crypto/rsa_pem_openssl.c ++++ b/tgl/crypto/rsa_pem_openssl.c +@@ -36,6 +36,12 @@ TGLC_WRAPPER_ASSOC(rsa,RSA) + // TODO: Refactor crucial struct-identity into its own header. + TGLC_WRAPPER_ASSOC(bn,BIGNUM) + ++/* ++ * Since OpenSSL version 1.1.0 the RSA struct (rsa_st) is opaque, ++ * see also https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes ++ */ ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) ++ + TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) { + RSA *ret = RSA_new (); + ret->e = unwrap_bn (TGLC_bn_new ()); +@@ -47,7 +53,30 @@ TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) { + #define RSA_GETTER(M) \ + TGLC_bn *TGLC_rsa_ ## M (TGLC_rsa *key) { \ + return wrap_bn (unwrap_rsa (key)->M); \ +- } \ ++ } ++ ++#else // OPENSSL_VERSION_NUMBER ++ ++TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) { ++ RSA *ret = RSA_new (); ++ BIGNUM *ret_e = unwrap_bn (TGLC_bn_new ()); ++ BIGNUM *ret_n = unwrap_bn (TGLC_bn_bin2bn (n, n_bytes, NULL)); ++ RSA_set0_key (ret, ret_n, ret_e, NULL); ++ TGLC_bn_set_word (wrap_bn (ret_e), e); ++ return wrap_rsa (ret); ++} ++ ++#define RSA_GETTER(M) \ ++TGLC_bn *TGLC_rsa_ ## M (TGLC_rsa *key) { \ ++ BIGNUM *rsa_n, *rsa_e, *rsa_d; \ ++ RSA_get0_key(unwrap_rsa (key), \ ++ (const BIGNUM **) &rsa_n, \ ++ (const BIGNUM **) &rsa_e, \ ++ (const BIGNUM **) &rsa_d); \ ++ return wrap_bn (rsa_ ## M); \ ++} ++ ++#endif // OPENSSL_VERSION_NUMBER + + RSA_GETTER(n); + RSA_GETTER(e); +@@ -60,4 +89,4 @@ TGLC_rsa *TGLC_pem_read_RSAPublicKey (FILE *fp) { + return wrap_rsa (PEM_read_RSAPublicKey (fp, NULL, NULL, NULL)); + } + +-#endif ++#endif // TGL_AVOID_OPENSSL +diff --git a/tgl/mtproto-utils.c b/tgl/mtproto-utils.c +index 0948bc8..cfdb216 100644 +--- a/tgl/mtproto-utils.c ++++ b/tgl/mtproto-utils.c +@@ -98,7 +98,7 @@ static unsigned long long BN2ull (TGLC_bn *b) { + if (sizeof (unsigned long) == 8) { + return TGLC_bn_get_word (b); + } else if (sizeof (unsigned long long) == 8) { +- assert (0); // As long as nobody ever uses this code, assume it is broken. ++// assert (0); // As long as nobody ever uses this code, assume it is broken. + unsigned long long tmp; + /* Here be dragons, but it should be okay due to be64toh */ + TGLC_bn_bn2bin (b, (unsigned char *) &tmp); +@@ -112,7 +112,7 @@ static void ull2BN (TGLC_bn *b, unsigned long long val) { + if (sizeof (unsigned long) == 8 || val < (1ll << 32)) { + TGLC_bn_set_word (b, val); + } else if (sizeof (unsigned long long) == 8) { +- assert (0); // As long as nobody ever uses this code, assume it is broken. ++// assert (0); // As long as nobody ever uses this code, assume it is broken. + htobe64(val); + /* Here be dragons, but it should be okay due to htobe64 */ + TGLC_bn_bin2bn ((unsigned char *) &val, 8, b); +diff --git a/tgl/tl-parser/tl-parser.c b/tgl/tl-parser/tl-parser.c +index 524b196..aeadbd2 100644 +--- a/tgl/tl-parser/tl-parser.c ++++ b/tgl/tl-parser/tl-parser.c +@@ -1903,7 +1903,7 @@ struct tl_combinator_tree *tl_parse_args134 (struct tree *T) { + //assert (S->data); + char *name = S->data; + if (!name) { +- static char s[20]; ++ static char s[21]; + sprintf (s, "%lld", lrand48 () * (1ll << 32) + lrand48 ()); + name = s; + } diff --git a/pkgs/telegram-history-dump/default.nix b/pkgs/telegram-history-dump/default.nix new file mode 100644 index 00000000..050b3511 --- /dev/null +++ b/pkgs/telegram-history-dump/default.nix @@ -0,0 +1,9 @@ +{ stdenv, ruby, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./telegram-history-dump.json // { + installPhase = '' + mkdir -p $out/lib $out/bin + cp -a $src $out/lib/telegram-history-dump + ln -s $out/lib/telegram-history-dump/telegram-history-dump.rb $out/bin/telegram-history-dump + ''; + buildInputs = [ ruby ]; +}) diff --git a/pkgs/telegram-history-dump/telegram-history-dump.json b/pkgs/telegram-history-dump/telegram-history-dump.json new file mode 100644 index 00000000..487df731 --- /dev/null +++ b/pkgs/telegram-history-dump/telegram-history-dump.json @@ -0,0 +1,15 @@ +{ + "tag": "468ea91-master", + "meta": { + "name": "telegram-history-dump", + "url": "https://github.com/tvdstaaij/telegram-history-dump", + "branch": "master" + }, + "github": { + "owner": "tvdstaaij", + "repo": "telegram-history-dump", + "rev": "468ea91e543529b54bc2c5ea28b1ea17f362fd3e", + "sha256": "1wmwiqacfa56bmwx50njnb15cg0fy6rbdrmrjd4xfbh8bs6yp0gh", + "fetchSubmodules": true + } +} diff --git a/pkgs/telegramircd/default.nix b/pkgs/telegramircd/default.nix new file mode 100644 index 00000000..2f1d7ca5 --- /dev/null +++ b/pkgs/telegramircd/default.nix @@ -0,0 +1,16 @@ +{ openssl, telethon, python3Packages, mylibs }: +with python3Packages; +buildPythonApplication rec { + format = "other"; + pname = "telegramircd"; + version = "master"; + propagatedBuildInputs = [ telethon aiohttp ConfigArgParse openssl ]; + src = (mylibs.fetchedGithub ./telegramircd.json).src; + LD_LIBRARY_PATH = "${openssl.out}/lib"; + installPhase = '' + install -D $src/telegramircd.py $out/bin/telegramircd + wrapProgram "$out/bin/telegramircd" \ + --prefix LD_LIBRARY_PATH : "${openssl.out}/lib" + install -Dm644 "$src/config" -t "$out/etc/telegramircd/" + ''; +} diff --git a/pkgs/telegramircd/telegramircd.json b/pkgs/telegramircd/telegramircd.json new file mode 100644 index 00000000..3d219f81 --- /dev/null +++ b/pkgs/telegramircd/telegramircd.json @@ -0,0 +1,15 @@ +{ + "tag": "40a0c7c-master", + "meta": { + "name": "telegramircd", + "url": "https://github.com/MaskRay/telegramircd", + "branch": "master" + }, + "github": { + "owner": "MaskRay", + "repo": "telegramircd", + "rev": "40a0c7cf60492bde3f44d43f06f62e3792480139", + "sha256": "123fjhgxq2fzn0ar8274jv7jjbxnlpidrj5333kbch7rpcipks0y", + "fetchSubmodules": true + } +} diff --git a/pkgs/telethon_sync/default.nix b/pkgs/telethon_sync/default.nix new file mode 100644 index 00000000..aa58d5be --- /dev/null +++ b/pkgs/telethon_sync/default.nix @@ -0,0 +1,23 @@ +{ lib, python3Packages }: +with python3Packages; +buildPythonPackage rec { + pname = "Telethon-sync"; + version = "1.1.1"; + + src = fetchPypi { + inherit pname version; + sha256 = + "01z8fzqn0qs5pxhvzq891r3mwffq1ga3f8xvm7qdn6kvmxjni9fy"; + }; + + propagatedBuildInputs = [ + rsa pyaes async_generator + ]; + doCheck = false; + + meta = with lib; { + homepage = https://github.com/LonamiWebs/Telethon; + description = "Full-featured Telegram client library for Python 3"; + license = licenses.mit; + }; +} diff --git a/pkgs/terminal-velocity/default.nix b/pkgs/terminal-velocity/default.nix new file mode 100644 index 00000000..9e79deea --- /dev/null +++ b/pkgs/terminal-velocity/default.nix @@ -0,0 +1,33 @@ +{ python36Packages }: +with python36Packages; +buildPythonApplication rec { + pname = "terminal-velocity-git"; + version = "0.2.0"; + src = fetchPypi { + inherit pname version; + sha256 = "13yrkcmvh5h5fwnai61sbmqkrjyisz08n62pq0ada2lyyqf7g6b9"; + }; + + patches = [ + ./sort_found_notes.patch + ./python3_support.patch + # FIXME: update this patch when version changes + ./fix_build.patch + ]; + + propagatedBuildInputs = [ + chardet + urwid + (sh.overridePythonAttrs { doCheck = false; }) + pyyaml + ]; + buildInputs = [ + m2r + (restructuredtext_lint.overridePythonAttrs { doCheck = false; }) + pygments + ]; + + postInstall = '' + rm $out/bin/terminal_velocity + ''; +} diff --git a/pkgs/terminal-velocity/fix_build.patch b/pkgs/terminal-velocity/fix_build.patch new file mode 100644 index 00000000..b08e0c43 --- /dev/null +++ b/pkgs/terminal-velocity/fix_build.patch @@ -0,0 +1,21 @@ +commit a64bf3d58f6ba7f5fa72fe5b89a3973cac0c1a99 +Author: Ismaël Bouya +Date: Sat Mar 9 20:13:52 2019 +0100 + + Remove mister_bump dependency + +diff --git a/setup.py b/setup.py +index 84a99e9..a783dff 100644 +--- a/setup.py ++++ b/setup.py +@@ -1,7 +1,9 @@ + from setuptools import setup + from m2r import parse_from_file + import restructuredtext_lint +-from mister_bump import bump ++ ++def bump(): ++ return "0.2.0" + + # Parser README.md into reStructuredText format + rst_readme = parse_from_file('README.md') diff --git a/pkgs/terminal-velocity/python3_support.patch b/pkgs/terminal-velocity/python3_support.patch new file mode 100644 index 00000000..bd4aec7b --- /dev/null +++ b/pkgs/terminal-velocity/python3_support.patch @@ -0,0 +1,215 @@ +commit 6ca19964b9e8a7866fd7e21a3dac9ccd35f0d434 +Author: Ismaël Bouya +Date: Sat Mar 9 20:13:18 2019 +0100 + + Add python3 support + +diff --git a/terminal_velocity/notebook.py b/terminal_velocity/notebook.py +index b6226dc..11f76de 100644 +--- a/terminal_velocity/notebook.py ++++ b/terminal_velocity/notebook.py +@@ -60,51 +60,6 @@ import sys + import chardet + + +-def unicode_or_bust(raw_text): +- """Return the given raw text data decoded to unicode. +- +- If the text cannot be decoded, return None. +- +- """ +- encodings = ["utf-8"] +- for encoding in (sys.getfilesystemencoding(), sys.getdefaultencoding()): +- # I would use a set for this, but they don't maintain order. +- if encoding not in encodings: +- encodings.append(encoding) +- +- for encoding in encodings: +- if encoding: # getfilesystemencoding() may return None +- try: +- decoded = unicode(raw_text, encoding=encoding) +- return decoded +- except UnicodeDecodeError: +- pass +- +- # If none of those guesses worked, let chardet have a go. +- encoding = chardet.detect(raw_text)["encoding"] +- if encoding and encoding not in encodings: +- try: +- decoded = unicode(raw_text, encoding=encoding) +- logger.debug("File decoded with chardet, encoding was {0}".format( +- encoding)) +- return decoded +- except UnicodeDecodeError: +- pass +- except LookupError: +- pass +- +- # I've heard that decoding with cp1252 never fails, so try that last. +- try: +- decoded = unicode(raw_text, encoding="cp1252") +- logger.debug("File decoded with encoding cp1252") +- return decoded +- except UnicodeDecodeError: +- pass +- +- # If nothing worked then give up. +- return None +- +- + class Error(Exception): + """Base class for exceptions in this module.""" + pass +@@ -192,12 +147,12 @@ class PlainTextNote(object): + # subdirs) if they don't exist. + directory = os.path.split(self.abspath)[0] + if not os.path.isdir(directory): +- logger.debug(u"'{0} doesn't exist, creating it".format(directory)) ++ logger.debug("'{0} doesn't exist, creating it".format(directory)) + try: + os.makedirs(directory) + except os.error as e: + raise NewNoteError( +- u"{0} could not be created: {1}".format(directory, e)) ++ "{0} could not be created: {1}".format(directory, e)) + + # Create an empty file if the file doesn't exist. + open(self.abspath, 'a') +@@ -217,11 +172,11 @@ class PlainTextNote(object): + + @property + def contents(self): +- contents = unicode_or_bust(open(self.abspath, "r").read()) ++ contents = open(self.abspath, "rb").read().decode(errors='ignore') + if contents is None: + logger.error( +- u"Could not decode file contents: {0}".format(self.abspath)) +- return u"" ++ "Could not decode file contents: {0}".format(self.abspath)) ++ return "" + else: + return contents + +@@ -322,12 +277,12 @@ class PlainTextNoteBook(object): + + # Create notebook_dir if it doesn't exist. + if not os.path.isdir(self.path): +- logger.debug(u"'{0} doesn't exist, creating it".format(self.path)) ++ logger.debug("'{0} doesn't exist, creating it".format(self.path)) + try: + os.makedirs(self.path) + except os.error as e: + raise NewNoteBookError( +- u"{0} could not be created: {1}".format(self.path, e)) ++ "{0} could not be created: {1}".format(self.path, e)) + else: + # TODO: Check that self.path is a directory, if not raise. + pass +@@ -358,13 +313,12 @@ class PlainTextNoteBook(object): + abspath = os.path.join(root, filename) + relpath = os.path.relpath(abspath, self.path) + relpath, ext = os.path.splitext(relpath) +- unicode_relpath = unicode_or_bust(relpath) + if relpath is None: + # The filename could not be decoded. + logger.error( + "Could not decode filename: {0}".format(relpath)) + else: +- self.add_new(title=unicode_relpath, extension=ext) ++ self.add_new(title=relpath, extension=ext) + + @property + def path(self): +@@ -418,7 +372,7 @@ class PlainTextNoteBook(object): + for note in self._notes: + if note.title == title and note.extension == extension: + raise NoteAlreadyExistsError( +- u"Note already in NoteBook: {0}".format(note.title)) ++ "Note already in NoteBook: {0}".format(note.title)) + + # Ok, add the note. + note = PlainTextNote(title, self, extension) +diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py +index 5f0e213..9234bea 100755 +--- a/terminal_velocity/terminal_velocity.py ++++ b/terminal_velocity/terminal_velocity.py +@@ -1,7 +1,7 @@ +-#!/usr/bin/env python2 ++#!/usr/bin/env python3 + """A fast note-taking app for the UNIX terminal""" + from __future__ import print_function +-import ConfigParser ++import configparser + import argparse + import os + import logging +@@ -9,9 +9,9 @@ import logging.handlers + import sys + + #import terminal_velocity.urwid_ui as urwid_ui +-import urwid_ui ++from . import urwid_ui + +-from git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes ++from .git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes + + + def startup(): +@@ -37,7 +37,7 @@ def main(): + + # Parse the config file. + config_file = os.path.abspath(os.path.expanduser(args.config)) +- config = ConfigParser.SafeConfigParser() ++ config = configparser.ConfigParser() + config.read(config_file) + defaults = dict(config.items('DEFAULT')) + +diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py +index caebcb9..89bab35 100644 +--- a/terminal_velocity/urwid_ui.py ++++ b/terminal_velocity/urwid_ui.py +@@ -10,7 +10,7 @@ import logging + logger = logging.getLogger(__name__) + + import urwid +-import notebook ++from . import notebook + + + palette = [ +@@ -27,8 +27,6 @@ def system(cmd, loop): + + loop.screen.stop() + +- cmd = u"{0}".format(cmd) +- cmd = cmd.encode("utf-8") # FIXME: Correct encoding? + safe_cmd = shlex.split(cmd) + + logger.debug("System command: {0}".format(safe_cmd)) +@@ -114,7 +112,7 @@ class AutocompleteWidget(urwid.Edit): + + # When search bar is empty show placeholder text. + if not self.edit_text and not self.autocomplete_text: +- placeholder_text = u"Find or Create" ++ placeholder_text = "Find or Create" + return (placeholder_text, + [("placeholder", len(placeholder_text))]) + +@@ -186,7 +184,7 @@ class NoteFilterListBox(urwid.ListBox): + + def render(self, size, focus=False): + if len(self.list_walker) == 0: +- placeholder = placeholder_text(u"No matching notes, press Enter " ++ placeholder = placeholder_text("No matching notes, press Enter " + "to create a new note") + return placeholder.render(size) + return super(NoteFilterListBox, self).render(size, self.fake_focus) +@@ -399,7 +397,7 @@ class MainFrame(urwid.Frame): + # If the user has no notes yet show some placeholder text, otherwise + # show the note list. + if len(self.notebook) == 0: +- self.body = placeholder_text(u"You have no notes yet, to create " ++ self.body = placeholder_text("You have no notes yet, to create " + "a note type a note title then press Enter") + else: + self.body = urwid.Padding(self.list_box, left=1, right=1) diff --git a/pkgs/terminal-velocity/sort_found_notes.patch b/pkgs/terminal-velocity/sort_found_notes.patch new file mode 100644 index 00000000..2bc563c6 --- /dev/null +++ b/pkgs/terminal-velocity/sort_found_notes.patch @@ -0,0 +1,73 @@ +commit 0f9df37046e58c8963aff93c649e5d3dbf2202bd +Author: Ismaël Bouya +Date: Sat Mar 9 20:11:46 2019 +0100 + + Add sorting option + +diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py +index a53eda3..5f0e213 100755 +--- a/terminal_velocity/terminal_velocity.py ++++ b/terminal_velocity/terminal_velocity.py +@@ -90,6 +90,10 @@ the default default will be used""" + default=defaults.get("log_file", "~/.tvlog"), + help="the file to log to (default: %(default)s)") + ++ parser.add_argument("-s", "--sort", dest="sort", action="store", ++ default=defaults.get("sort", "date"), ++ help="the note sorting rules. Possible values: date, title (default: %(default)s)") ++ + parser.add_argument("-p", "--print-config", dest="print_config", + action="store_true", default=False, + help="print your configuration settings then exit") +@@ -138,7 +142,7 @@ the default default will be used""" + try: + urwid_ui.launch(notes_dir=args.notes_dir, editor=args.editor, + extension=args.extension, extensions=args.extensions, +- exclude=args.exclude) ++ exclude=args.exclude, sort=args.sort) + except KeyboardInterrupt: + # Run the shutdown hook + shutdown() +diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py +index 34cf4f6..caebcb9 100644 +--- a/terminal_velocity/urwid_ui.py ++++ b/terminal_velocity/urwid_ui.py +@@ -237,11 +237,12 @@ class NoteFilterListBox(urwid.ListBox): + class MainFrame(urwid.Frame): + """The topmost urwid widget.""" + +- def __init__(self, notes_dir, editor, extension, extensions, exclude=None): ++ def __init__(self, notes_dir, editor, extension, extensions, exclude=None, sort="date"): + + self.editor = editor + self.notebook = notebook.PlainTextNoteBook(notes_dir, extension, + extensions, exclude=exclude) ++ self.sort = sort + + # Don't filter the note list when the text in the search box changes. + self.suppress_filter = False +@@ -408,7 +409,10 @@ class MainFrame(urwid.Frame): + + # Sort the notes. + # TODO: Support different sort orderings. +- matching_notes.sort(key=lambda x: x.mtime, reverse=True) ++ if self.sort == "title": ++ matching_notes.sort(key=lambda x: x.title) ++ else: ++ matching_notes.sort(key=lambda x: x.mtime, reverse=True) + + # Tell the list box to show only the matching notes. + self.list_box.filter(matching_notes) +@@ -433,10 +437,10 @@ class MainFrame(urwid.Frame): + self.selected_note = note + + +-def launch(notes_dir, editor, extension, extensions, exclude=None): ++def launch(notes_dir, editor, extension, extensions, exclude=None, sort="date"): + """Launch the user interface.""" + +- frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude) ++ frame = MainFrame(notes_dir, editor, extension, extensions, exclude=exclude, sort=sort) + loop = urwid.MainLoop(frame, palette) + frame.loop = loop + loop.run() diff --git a/pkgs/tiv/default.nix b/pkgs/tiv/default.nix new file mode 100644 index 00000000..c03aabe0 --- /dev/null +++ b/pkgs/tiv/default.nix @@ -0,0 +1,19 @@ +{ buildPerlPackage, fetchurl, perlPackages }: +buildPerlPackage rec { + name = "tiv-${version}"; + version = "2015"; + src = fetchurl { + url = "http://xyne.archlinux.ca/projects/tiv/src/tiv-${version}.tar.xz"; + sha256 = "1vq073v7z7vmcd57lhs4rf4jasji69cpjgkz4dykp94a77p1qq90"; + }; + + outputs = ["out"]; + buildInputs = with perlPackages; [ PerlMagick ]; + perlPreHookScript = ./tiv_builder.sh; + perlPreHook = '' + source $perlPreHookScript + ''; + installPhase = '' + install -Dm755 tiv "$out/bin/tiv" + ''; +} diff --git a/pkgs/tiv/tiv_builder.sh b/pkgs/tiv/tiv_builder.sh new file mode 100644 index 00000000..ea166828 --- /dev/null +++ b/pkgs/tiv/tiv_builder.sh @@ -0,0 +1,8 @@ +orig=$(declare -f preConfigure) +new_name="preConfigure2 ${orig#preConfigure}" +eval "$new_name" + +preConfigure() { + preConfigure2 || true +} + diff --git a/pkgs/unicode/default.nix b/pkgs/unicode/default.nix new file mode 100644 index 00000000..756e939b --- /dev/null +++ b/pkgs/unicode/default.nix @@ -0,0 +1,48 @@ +{ lib, fetchurl, runCommand, libarchive }: +with lib.attrsets; +let + version = "12.0"; + version-full = "${version}.0"; + files = { + emoji-data = fetchurl { + url = "http://www.unicode.org/Public/emoji/${version}/emoji-data.txt"; + sha256 = "03sf7h1d6kb9m5s02lif88jsi5kjszpkfvcymaqxj8ds70ar9pgv"; + }; + emoji-sequences = fetchurl { + url = "http://www.unicode.org/Public/emoji/${version}/emoji-sequences.txt"; + sha256 = "1hghki2rn3n7m4lwpwi2a5wrsf2nij4bxga9ldabx4g0g2k23svs"; + }; + emoji-test = fetchurl { + url = "http://www.unicode.org/Public/emoji/${version}/emoji-test.txt"; + sha256 = "1dqd0fh999mh6naj816ni113m9dimfy3ih9nffjq2lrv9mmlgdck"; + }; + emoji-variation-sequences = fetchurl { + url = "http://www.unicode.org/Public/emoji/${version}/emoji-variation-sequences.txt"; + sha256 = "1cccwx5bl79w4c19vi5dhjqxrph92s8hihp9y8s2cqvdzmgbln7a"; + }; + emoji-zwj-sequences = fetchurl { + url = "http://www.unicode.org/Public/emoji/${version}/emoji-zwj-sequences.txt"; + sha256 = "1l791nbijmmhwa7kmvfn8gp26ban512l6mgqpz1mnbq3xm19181n"; + }; + }; + zippedFiles = { + UCD = fetchurl { + url = "http://www.unicode.org/Public/zipped/${version-full}/UCD.zip"; + sha256 = "1ighy39cjkmqnv1797wrxjz76mv1fdw7zp5j04q55bkwxsdkvrmh"; + }; + Unihan = fetchurl { + url = "http://www.unicode.org/Public/zipped/${version-full}/Unihan.zip"; + sha256 = "1kfdhgg2gm52x3s07bijb5cxjy0jxwhd097k5lqhvzpznprm6ibf"; + }; + }; +in + runCommand "unicode" { + buildInputs = [ libarchive ]; + } '' + mkdir -p $out/share/unicode + ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: "install -Dm644 ${u} $out/share/unicode/emoji/${n}.txt") files)} + ${builtins.concatStringsSep "\n" (mapAttrsToList (n: u: '' + install -Dm644 ${u} $out/share/unicode/${n}.zip + bsdtar -C "$out/share/unicode" -x -f "$out/share/unicode/${n}.zip" + '') zippedFiles)} + '' diff --git a/pkgs/webapps/adminer/default.nix b/pkgs/webapps/adminer/default.nix new file mode 100644 index 00000000..b78a2e0b --- /dev/null +++ b/pkgs/webapps/adminer/default.nix @@ -0,0 +1,14 @@ +{ stdenv, fetchurl }: +stdenv.mkDerivation rec { + version = "4.7.1"; + name = "adminer-${version}"; + src = fetchurl { + url = "https://www.adminer.org/static/download/${version}/${name}.php"; + sha256 = "00gnck9vd44wc6ihf7hh4ma6jvdsw69xgjlkbrdf6irnni6rnvhn"; + }; + phases = "installPhase"; + installPhase = '' + mkdir -p $out + cp $src $out/index.php + ''; +} diff --git a/pkgs/webapps/apache-theme/default.nix b/pkgs/webapps/apache-theme/default.nix new file mode 100644 index 00000000..4b5755a8 --- /dev/null +++ b/pkgs/webapps/apache-theme/default.nix @@ -0,0 +1,88 @@ +{ theme_root ? null }: +rec { + theme = ./theme; + apacheConfig = let + theme_root' = if isNull theme_root then theme else theme_root; + in '' + + Alias /theme ${theme_root'} + + Options -Indexes + AllowOverride None + Require all granted + + + # mod_autoindex + + Options Indexes + AllowOverride None + Require all granted + + # Inspired from Apaxy by @adamwhitcroft + + IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks +ShowForbidden + + IndexHeadInsert "" + + IndexIgnoreReset ON + IndexIgnore /theme .htaccess %{ignored} + + AddIcon /theme/icons/blank.png ^^BLANKICON^^ + AddIcon /theme/icons/folder.png ^^DIRECTORY^^ + AddIcon /theme/icons/folder-home.png .. + + AddIconByType (TXT,/theme/icons/text.png) text/* + AddIconByType (IMG,/theme/icons/image.png) image/* + AddIconByType (SND,/theme/icons/audio.png) audio/* + AddIconByType (VID,/theme/icons/video.png) video/* + + AddIcon /theme/icons/archive.png .7z .bz2 .cab .gz .tar + AddIcon /theme/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod + AddIcon /theme/icons/bin.png .bin .hex + AddIcon /theme/icons/bmp.png .bmp + AddIcon /theme/icons/c.png .c + AddIcon /theme/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv + AddIcon /theme/icons/cd.png .iso + AddIcon /theme/icons/cpp.png .cpp + AddIcon /theme/icons/css.png .css .sass .scss + AddIcon /theme/icons/deb.png .deb + AddIcon /theme/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .wpd .wps + AddIcon /theme/icons/draw.png .svg .svgz + AddIcon /theme/icons/eps.png .ai .eps + AddIcon /theme/icons/exe.png .exe + AddIcon /theme/icons/gif.png .gif + AddIcon /theme/icons/h.png .h + AddIcon /theme/icons/html.png .html .xhtml .shtml .htm .URL .url + AddIcon /theme/icons/ico.png .ico + AddIcon /theme/icons/java.png .jar + AddIcon /theme/icons/jpg.png .jpg .jpeg .jpe + AddIcon /theme/icons/js.png .js .json + AddIcon /theme/icons/markdown.png .md + AddIcon /theme/icons/package.png .pkg .dmg + AddIcon /theme/icons/pdf.png .pdf + AddIcon /theme/icons/php.png .php .phtml + AddIcon /theme/icons/playlist.png .m3u .m3u8 .pls .pls8 + AddIcon /theme/icons/png.png .png + AddIcon /theme/icons/ps.png .ps + AddIcon /theme/icons/psd.png .psd + AddIcon /theme/icons/py.png .py + AddIcon /theme/icons/rar.png .rar + AddIcon /theme/icons/rb.png .rb + AddIcon /theme/icons/rpm.png .rpm + AddIcon /theme/icons/rss.png .rss + AddIcon /theme/icons/script.png .bat .cmd .sh + AddIcon /theme/icons/sql.png .sql + AddIcon /theme/icons/tiff.png .tiff .tif + AddIcon /theme/icons/text.png .txt .nfo + AddIcon /theme/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv + AddIcon /theme/icons/xml.png .xml + AddIcon /theme/icons/zip.png .zip + DefaultIcon /theme/icons/default.png + + HeaderName /theme/header.html + ReadmeName /theme/footer.html + IndexStyleSheet /theme/style.css + + + ''; +} diff --git a/pkgs/webapps/apache-theme/theme/.htaccess b/pkgs/webapps/apache-theme/theme/.htaccess new file mode 100644 index 00000000..f9e54722 --- /dev/null +++ b/pkgs/webapps/apache-theme/theme/.htaccess @@ -0,0 +1,9 @@ +# +# Apaxy by @adamwhitcroft +# +# For a full breakdown of the mod_autoindex module +# http://apache.org/docs/2.2/mod/mod_autoindex.html +# + +# Don't index this folder +Options -Indexes diff --git a/pkgs/webapps/apache-theme/theme/footer.html b/pkgs/webapps/apache-theme/theme/footer.html new file mode 100644 index 00000000..57a2012f --- /dev/null +++ b/pkgs/webapps/apache-theme/theme/footer.html @@ -0,0 +1,31 @@ + + + diff --git a/pkgs/webapps/apache-theme/theme/header.html b/pkgs/webapps/apache-theme/theme/header.html new file mode 100644 index 00000000..cbded6a4 --- /dev/null +++ b/pkgs/webapps/apache-theme/theme/header.html @@ -0,0 +1,3 @@ +
+

+ diff --git a/pkgs/webapps/apache-theme/theme/icons/archive.png b/pkgs/webapps/apache-theme/theme/icons/archive.png new file mode 100644 index 0000000000000000000000000000000000000000..99ae6fc6677bb9c0b47e740778a315a56b1fc3c5 GIT binary patch literal 551 zcmV+?0@(eDP)hnm57*rzi*-_GEo$ne!p+>JU83z z)&xNisx(cXT-QZweNTXTy$(R9)4AP=2(IgLI2@joh)|a0-C+RBvH+OR=Y(MhfH8)$ zED;ebtu+p&-3toAAqW=5E1e`$0~~Ap9a_X zzK`d5x4tY(ilRV?2vt=*G`Qxi!CMP;Jv@qtFdB_++ef1jBEogCs;Uaxw#l;WF5q&x zuvjc^e<31VE*EUueg(vFjN>@;dcFTXeKUADolc*I!y&e9ziYTC3W6X&YyDE2&1T<@ p$K!LFrk_7z&}cM%b-UdkzX4XSEHy8yRp>>VCD?q+4djE zFhLZ?kYNHDo&L{yjWHmtbuK`L3F?!K+qEL*rc1bYtAI!AAI^ET)*x$bE+7hHym>m8 zsh{Hxc z0+?}7%>lS005jv|&N1E(Z{Sz4h)Qh|%#6nmrZ5#s+=(ULKB@ilGIKV;;@z9r-~El* zqJ!7VvtVYdE>*C)R2hE*tu=@UD@_k8O)uB{zl<@bD-e+{gn&}&T)c5lDFq<}h{&f> ssniOBV58gZ&R;k#M}e;xG_>YYiYlK@m9)R5X6S3EnN;# z1PU5tB2l5lNcLp1713tnLw6&MWcj^$^PcRt-EQ}bnLkD39sf~Esho&@ziqeMe6?C_ zj4@D3{nN0Bpe#$A&*wknz278B0`Gl~70Xz00173N0h_Npb$b79F0Z@A#~>$CxieMv){HY zj4==qhzPXSQO?T{<{eC@I i`JyJ1$#FiPe|!NMI%}f|m=mP{0000Od5R{~cx+!9p-W#mZ(c7Uqgp7FNOqTMOT0 z_bv8$1R;gkSZE=+K`=HpqKWB5l*~+KizQ-=#d^9kbI!*(|9{@*^Z7q1DfW9LMl|AKUHrKaHZuG7JMz6afGhiv>96IGs+&<#K4Z z+n7uyI3AA}4u?00VHof{&mu}GD5apahSnNE5TMa$fH4N&_o1~$x7!7PTaDHlNgt6? zrak~*zu%)$sbt>obFDR`lpsQgOyO>~L$z8>H9Z3eAwcfO*IL6gO6tX3y(qSb0;RPXousXVEdQf2|K#8bd*HpAg?z+f-{04$eFaL#c) zpTQVIv)N1mGA?vFos?i<7@}UUgE59M46`mg0v;6yfFKB9n&xvGe*;MF;?c?*;QkhD z+eRG6ux%SkDHMxETrL-^*Xz_2LWmy`DW#s{IDeA!?e%&or7g?KSSW;m>$;$ndNiNU pe{MFLFV}V7U$KyLz9|$6pWlLsoc76c7nT43002ovPDHLkV1nz3;XwcZ literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/blank.png b/pkgs/webapps/apache-theme/theme/icons/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..bef1f600664da97d487c7dc4abece6ed50b9e362 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~rvRT2*AE}w zegFRB&!0cPfB*jb_wT!RZ$5r}|Mly)PoF;g`0?|{k00N^fB*UO=i9fhfByXS@87>) zzkYrD_WkqcFJHcV{rvgk|NsAIFS7yJ$ygHP7tG-B>_!@hljQC0!qCAg>jC6&7I;J! zGca%qgD@k*tT_@uLG}_)Usv|qZ0rKu<`1uiJOm2ydb&7FFu`e*cFliej_bY*G}(A_6pwx6KYxI1f{H9+Q)F6(B7<29Hbpsu3K1&IEkC_`gL4k!oa1CTqP(_@N@oz~ z_&h?U3Cd=uq69^G-Uox0IpFMSOvO2jwH9BBs5MuK;y}RRVv8wTGKomiJ%7pf@iA2$b3Qns9xTgQf|i8BH5lY2CXy0WAT<#-miY?adz3aD zstdMSPdFM}u&N*OI8JHAIZNphdw;K}m8+Pj#9A}On}A#@y!Y1zfQV)iJW3*-RUXkh z>(fXh&hiPht^P#&TH z8qCuDTR?0zAc0h!w=E{|3pw zaJL4l^#-G(lZBGFT&r<;^M$RaEq;G|zYt(F8u6?B4WqU0?(grfZ)|K3$MKzpt+jMI x9kkY6Q>|9Fd%fOHr_)(q#30MEZoOXL{s(i+8tc1-%r*c3002ovPDHLkV1lUl9MAv& literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/c.png b/pkgs/webapps/apache-theme/theme/icons/c.png new file mode 100644 index 0000000000000000000000000000000000000000..12adaa37ec9ca45280c2121ec2d6cb568a740175 GIT binary patch literal 554 zcmV+_0@eMAP)-7E&#dWIQqMHfQG*7fw8kH}lO*sy$iPp!dOR-hA)z zy~l_+ju)AE(>eD9V~mti5z!kFMUiSW8m)T04k_iG#LhW%yIpiTodeQZx56-l)_R-+ z5QZU=Bx#Yg7S`Ia!~l@#h?(KN&prN1hWHj=pxa}VNMPt924t6ku!JrUfzFEe`s~PNkImf%* zKFTG5XLAA8mhRoHgUn>U85S~M-y0biV?ac=mUdmt%#cKsD5apaE_{^#L2C`A6o@FH sYPGtars-z8-ENL^K@bFKtyWwA2O0}XC=)O7{r~^~07*qoM6N<$f`47(ZU6uP literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/calc.png b/pkgs/webapps/apache-theme/theme/icons/calc.png new file mode 100644 index 0000000000000000000000000000000000000000..a03436733fad634f7c2128570898b06614c587b4 GIT binary patch literal 506 zcmV@CEAaEOKZJwYu^nKmh`d-*4mjTj$;Ht04e3YTw5+5 w-aTF&T%LF40HA(d2NBJ5kWQx`T-V+E29xhKZnxnR+W-In07*qoM6N<$g3d?CyZ`_I literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/cd.png b/pkgs/webapps/apache-theme/theme/icons/cd.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3ffbb9a8df12b517ad5dcf110db463553980a5 GIT binary patch literal 757 zcmV}q+&Vj)&Ib%#F$3=??-q=D)iBL+RwPtv-V6(Wx zbT(r)mqZJTt@;BBz|qlHYUKpaF5&w&{~b@zb&XOAaaAGsu32Z5nGQLfN$&66Vl1RebLTqtOI_Lct{&jw$2{BX@D;#&v-0 znWTA&ZCiwHkO9Z8n=&mIXk#77(rl*G6=eETyE|?IMKe3E%gh9~>OK n=ytnze}By2IL<*BhR=Th5K3mOu?hx200000NkvXXu0mjfuwq{N literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/copying.png b/pkgs/webapps/apache-theme/theme/icons/copying.png new file mode 100644 index 0000000000000000000000000000000000000000..83fa06e611927106220d68018e1a4962581bf9b4 GIT binary patch literal 699 zcmV;s0!00ZP)KCm_LpunmgW-d-9PDVKImdzf#&nc3aFhlhtBQp&rwZNKv$&@^o%g!s94 ze}6xUqUh%A>vTb`evna}6H#AdU(@jQ>sX44UpBq7gpK0ZDGI5;@KaU711 zk2{X%d5p*78__fkP168S*EP%KlCmr@O%vO;0jR2q<#Nf}+Z+9UA6?hk&S_Fglu{_A zSS%J)RYe$v^!t5G(?r*G&d<*Y!;q?~SS%JDUrLEq*ELEhR;v|xp402~kW%va_{e&_ zrYH)g(<$%o@AP^-@;qm?TA`Gpu4_coG$^G=(-gxnI668aj$=H}2@OSp)(-ko|A5u0g3!UC zIAwDcO(z9Icb$Yfh!l*Xn_vgQNm~$019b_tnm!Q|g%FAm6+|5jclX}8G{N|iQV)K^ zm%Hzm-}iG)rBazP#>@plFwTD*Aw*S5dCe)8%hhZ)n@gwD2qAW44uXJIt3{*H*bqvo zTq>19DMh>84$btfk&sqOvE|7L-}mu-A8T!B^7Eqr4($8*@`s-LzqQsH*;yapZF7m2?;q0o`H5&G&f&}?=TFSCYbe<_yr;tJ z#v=Dut`LvzC4cfdQ%7ca(_E&sJTtJOF$UQQSn?jQJ3h?CGj|Y91c2e>7(af0BM5vP zC;Y`d0h`|&jE_v>Ai9+f>^t6l+>cXFKwt&N54Hu`FQCgHz2_kBKChvD)$O>kxysY^ zyC~Bh$eOq4kY1NGWBlTCI+`u8W(Qz|BmAy8g>WYmMi5NGWSFkw_Hl_4=IW ld53mP4~WHL^<*+x`~#+Yf@-qG!W94j002ovPDHLkV1j8j3{U_7 literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/css.png b/pkgs/webapps/apache-theme/theme/icons/css.png new file mode 100644 index 0000000000000000000000000000000000000000..15f76955743addaaa08ddc7b235ae51d4eeed69f GIT binary patch literal 592 zcmV-W0DQM8hSu-7|(6a$H@gv8u#r1{R=bMG{!)9Gtt%-A`1 z%zu;+B9~HrYD^}Rd^jAAvMfUgu~*nR$8x!3u~>YUbzP6rG^H57$NVe-klh1@AHLoS zNz;^~C`Qs+i?x=Au0(Yk0BBd@y}uRkHz$oTc<)ip;l#1^J02pJCT5G)bh{w+n z^#%anY~l6*XswafTDVwFwH%C`KBns_*$wUvtZ?wm%2WiVn33Mqp49)E*)t zNW!RYMK^DGvkpa_JVl3&dGU}PyF`az4^jw~UtZdc+@KOQDN$FQZ@%yCu2zF8>t7^!1wVN%lx`M%F1Y-^pgS5VX8iDtwlrtkX6IN^+&Ya=_hfuw=Q-p*Tr1# z5G!NjBrcz*TxKoGbzMXR5n*NI70DYp;#W>0B6tf+nD^6&?-Sb5LcFgB@w}kkbzPKK zBdoogBzEaIB7(oVj(PVP-Pwi!B0|&A4!rL_gZhRR5P@h@1+csZiO9wo;Qd%4aylDm z)>>2*AR?&kTY`0{wHf#Abg;Ky7x3p6D~YO_we< ze%7D8#(tXFJfQY1hz=7Ux`_8>9`{WVf6e^W?7D6RptUYIj)O5Zg<*w0b(rw6{SeU& zW@8MF3S3Zt5%k8PRC8m`bGve*2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4FVdQ&MBb@02Nbo AR{#J2 literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/diff.png b/pkgs/webapps/apache-theme/theme/icons/diff.png new file mode 100644 index 0000000000000000000000000000000000000000..5bef920766b333d4917efaf794b054b46632771c GIT binary patch literal 586 zcmV-Q0=4~#P)*9Rs1h``+!4`b3(7@xbNY z%Q@%cJNGKxZuhYe;>dBFZEg{&s`fQad#SWqt$r{Vj0FM#R8?K7*>M~ulL_PT_^URZ zPGh>R^XTM+UBlo@ug9)o@HP_R*ZVAY?>zuu8h^C_(RH1{U=ULpjfPAnlee*Vqtof2 z2_cYDl07{oWf-)3JyM3jo2@Op{SrUFwYU?x55Vv3;sQVjfl{m0WICN*$)MS6qS>~M zlyW72ZQJt^a%X1%q~dX2hr?LUE!MN^T;;FGeav0wHdC~RZ7!Z%%txqHDl(JFtYlEH z*XIU>LX|{f2Y`HjgF>MSKq9e2KEH7zKnO7h93MY(6F1%e2T*5#*|HC8>;s#%>Y96& zQnL4HkHhidLhXXVER=T&0GC{%JXKtS^M~jE*tiCkWw}(}2OrK0XJMC8vj2IX(vOl` zXIa+uFOq-)|*zi+m6v_1bBa_z|1dhCL-i{j-n{e zMN$3^-?jH~UCd#bq4f@k=v9L_j*(^AfgodWdv9PLsmu&!#&9?U04Sv}o6Y=2r4+i| zE|?j{7zjfIGEbddz+f=&vm{AsbXSpxAczdAXXXN?)2Sy{Et~-WXsscPC9hu%Ns^>S zuHHL?#|j44a_u2AV>BAo=t`-TDntZfjDe{LxPX4Y?`NG(r$$~1pqjzD7oS_+pn3+* zU_2iCnUoR$P?ja6l)lPSz?!en>-AQM%T@jb(E19_KuYP!aU3HI!_^9!2th+UYv9Ps zbRt3^Tif%S>?cTTSj#@(rE9TRAWc&UA+E&Rz4*(;ul(e4bg>BlUv>0fKU1^WoJ3Ld Z=>bTwJbCQ{8OZd# literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/draw.png b/pkgs/webapps/apache-theme/theme/icons/draw.png new file mode 100644 index 0000000000000000000000000000000000000000..8f1da5c333fd0e97559e809da86928bae710b4a5 GIT binary patch literal 679 zcmV;Y0$BZtP)*gHC!F64q@T=P3!^;h%tLYE{MsM_SA$P9D#Bm(T<#JAVo`>goEz9NS>)gDPqstC) zPl}SREZ)o9L(Saug?Nw{VqGSW-%i zF+`@P5&1msAB9pL+B5!y&%n@FFVR>h#u$I3lnBrBFvifBo5R}MBeML4vHDL6?>b2g zrih=l3CDuRQZ{S&6-+#ij>l1{6hpTTs6TzptB>1E=DJB{CTXKTtl%3Q866IB<GLVg%b~OeINe0(FsE7yfI_%-k6lX%k*WF#~sT=iYPX zoI5wD*XwiE+EwS=O(r;D7$!=ohe54YOUmVPrBo^rhT(sKopbd2eY)N5JEgU*#Bq$) zdJ+M|aZIb#swfdbL{i1z`!2!H9zKfk7b@fXZyiuMeEte2IAyKHd!P3Ac7R{ zdv6_rp|#A*`}ngnxVujQu-2lCF=+z*6}R^aKQl+rtKvUz!sS~-!0i?M)HyirH^vZ( z2;Tc~^fr)R8h2v>acA(m>!X_6e2i~C8|5NGcw%AH)TtuTH2!=U7tbP{=VL&B8~L(3 z%B{7h2=ou^#~O}2viSrV43L8!ZvXv|KnqSwiXb&axAOuyJc7e5*xMSWnJIi`is0%U z?57XN!45JIoN<4#kcr4YY67IbH9Nmdc77Rv+=Dl%`iQ_7gHmduRkqd+Ehwd0Ns^$o zPVd7%LTgQuBq*g?s!%8_wcG90Mx$|U5(QBdwTs2#(r>8_mTss2=MMk?002ovPDHLk FV1nl{4xj)4 literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/exe.png b/pkgs/webapps/apache-theme/theme/icons/exe.png new file mode 100644 index 0000000000000000000000000000000000000000..31299b7f4a44636d7fe5eba427e629e0fa221c66 GIT binary patch literal 846 zcmV-U1F`&xP)Sz#!Ka4FK2$LZ(AS8w;S)insd4t~Gr@4=D zrGAAxOLkFq=_o=$Az=o~7zmSx-~M|M2`ODtZR$v;>KvU)JUu=AErj?J$MIkMug2ps zo6UxLy-q%#2jFlxFq_S|y1IH+RrPn`;o;%A*=*igmW84y0344;j>jWW6p>6Oky4_n zDgeIk6Gai*?UvJ@=ZWK(IF12GrBcLkjA0lkih}F96bc1YAp}y&AKE9A3B%zK z0Nb{yR4M?(aeSIrt5rPDLk+|5M6lg%$!4?EYBem&Vl)~tolg1u{KR!#ZfO|b3`3Ope2(KdY&IKSUtf_@((m_KEEddWGo+MECKE0%FUe#wTwGkxYPFb7r>xiO z?+f1F-!Tk>APDGoyEu+RtJR`hE|X5D>G%6QKR;70mpMB-BZ?w~5PW=mpe~n7JkP`T zeRN&Nw(XPl-EK#*SOlO}t1%vrPq?OO-zNIL&-L{+g+c+}_c08E(P+eEGC|jMN~IEo zLIKON7z_qhMI6T@ z5()PEJyJ>x!(hMPqw6}2MuTiN`y+5dh;M>Ysr3H#_I9ah8m4Jt+cu_Y5(ELB=b`I5 zilU$>%84KhLtb89P*wFUaesgR%XQs<=JR>m^SqNmqtOT<#OWuh)#{J9>$={{=kve+ Y1E?XCEuTb+KL7v#07*qoM6N<$f?)xG-~a#s literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-home.png b/pkgs/webapps/apache-theme/theme/icons/folder-home.png new file mode 100644 index 0000000000000000000000000000000000000000..14fe20abbcf176ea4dbfa6c442c3cbca0dde9fdb GIT binary patch literal 618 zcmV-w0+s!VP)A~#9OXm&B>E!E2PTwCqRod9KFbqk49_R6VH6*fJM=EQ(i3wU&LZ1!%7DD^y7r1{cRfcGDTIOs0uXd zWsdf@>BkA+kNqMe0;93c(N9wLc3RBO1r$|bj9OF$=H~+Tc3Sk46zd$u{3g(1u%fY| zsg^4=S5}D=lUr(>7@8}qRLhmIUyDJBSd3^uBiVq!=v;WDBL0{_D`XaPJ2C!*tXKvZM=Q=;jx3o|7qYs8{gmf1y~<6PL~&qDgXcg07*qoM6N<$ Eg4@LtNB{r; literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-open.png b/pkgs/webapps/apache-theme/theme/icons/folder-open.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa5cc7571c872c8f10bbafae65a5ad501bcf519 GIT binary patch literal 431 zcmV;g0Z{&lP)#5i+25Ey z1eW>A(TJZct!&j|`k;COJ3TXtQVsytTJGvML{YngLVrtHtim3w?VOd|_q)l$Cb{vs zkD7(<;r;Y#yI$jXZ+#Ugxz$QB571FQokpWyx1TtpC>W?#ig|UqyIA$73V}a1@wae~ zR`Z(Hy!+)+K6#tHp#5t@~g&mrE6HM-f^~=t^SC=NDJo7J@Va1tE@8 ZegpsFp=+X_I-URk002ovPDHLkV1gz9zD@(I$z)gyHJ~3%GZry#Ku@3_8309WQ*vyGj1VIRZ_nxiI@3dN}18k%S ze7PKLEZlo@J$Uu#>Vxs)m+wp-J+|LPBdGuUM)T9g!^o*E#&Jx0d+Wap;yC8F+G6BH z6W3|w2L}$05k}>L*qb2P4tSq)Dj7~Ri9`((H!vv0JY9X9@53-)=46H0^Ych2EtrTJ zkrPFS4MdopO1OCKHUMv5uCiVG%DdOb>9ZG*b~D#HQ9=>JBpVFvnsw3|owSA%W8zSW zUz=aR`+`=apFjr*`Ua*B)r@nO79a>{zj)H)Tp>Z^L<>DIm3+=xb+T5Sa(pD`hP6(V zNW=;~(4K*+VTrN>Fvh1Ztx_ zkoFFh`72Zy#ct!rXb)7Z+Gy10#*?HgYS!3o*7hhbqM4?sST%Cymp^>`eBZ;|KdXii dK$S3D{sRQuK3buqDUtvH002ovPDHLkV1kf>1jYaW literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png b/pkgs/webapps/apache-theme/theme/icons/folder-parent-old.png new file mode 100644 index 0000000000000000000000000000000000000000..b82d7a992d61f84dd2b2a099b76e3b4bb4b2c7d0 GIT binary patch literal 494 zcmVzaf)kBl_gc8hW;0R51DE+b_YC*U9VH_C2aO-j6tE2l zke1^TydMO*K@gk-L2wFmSF%LJ6>CY743ttsrPMG?_c{>fpM$V zx&|1HMhC!tRiM#m+-j{K%H_9-^;RwbM5N%;yl>2AvqEcK)cEedptTl0jr$c&fquVl kMdZ1*J#}&Gjr3=H0E{cixm!I+_5c6?07*qoM6N<$g0bhzSO5S3 literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/folder-parent.png b/pkgs/webapps/apache-theme/theme/icons/folder-parent.png new file mode 100644 index 0000000000000000000000000000000000000000..3c964f195ff962b9c2bdfbedbda91f3e6505274c GIT binary patch literal 621 zcmV-z0+RiSP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2iyq{ z6d@o`g*sFK00HeuL_t(I%axL`ZWBQehQHa}3&NNvkqNPs6hTOc;*8R`HxhD+wDAkL zrh*5s@&KSKXe{|TEJZ@1qe+J-QbwY{M4%MJ$>H1Gq2Lmok5DkuYFC>1XXfAk7XWMR z9pEni7gr&KUm_y+fS0Pe323E2fCuIKdp##2-+*^cRa?L|uu_|Fe>56B12{Z9`~>{0 zCRKGCXt{DyJzTrpULOvJPXNZ_@t4_bb_MuaotVnH)mWQMCcCPdsA@8qOm=~_IvBv* z0&WZjgRL}8+j*Xo=Q(Mbwg-d37SO0S5#SN<8b|=+oO^hDeEh;Ww^Z!CzwCCq@4feD zKm-clO`XDOmSw4PuCZ7ws2=BBBg?WBSp64;l}@L#(d+eg=JPp4Q7oPLd`_>|+v#*V z8x_SwfXBcqpnY_7^t{<@uE!W}b&fHHi;Ii%y}i8;zzlfnD*3R#zduveug70{lUS(Nv%3K=ZvZvRYgQD zV~n`~))@2DTH7+lV6DX%Q*Lel@CpGS#25)7P~Jacj3>VVv7y(VM9=#Y00000NkvXX Hu0mjfRbvyh literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/folder.png b/pkgs/webapps/apache-theme/theme/icons/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..7c613e054b15f36f1c63d3a9e68c29f95ccafbf2 GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4fxrAZ4@_Z>LpB(P=EDgGHs@(H<#3lpZ>Z`kgozhr}u z%ND^SH)bT1ai5(%GhLBQWyc2T{QCEEs*fL)cv-qlud%l7b=JzvYWCyXgSnn09r_m{_v@Z)oh|J@zh}ePF2??0inNxM*dzknJ zhQ}a2hL2&QOd&yRjHb|}iV{>1IBn_quMTPg6BD|JJ6T`WUVDk{?d|8*+Rc>GBjy+( z#GWx`Lu_qr?X}zO?#jvvQpy{NV~iXhA2S>dKWb}jH_vmdweuJt&vW|yeph?%8NPeV z?yHw%0aQwODR2^;f}jLJ3ZjH~&EV75Z}8ruz4uH`j(E^E7zM&5%5kI&kZRzSz$HNx zkkl1ma{dc18))YovgTP_tD%epn=qG-g{dRBNYs!_1#2CuCeU?-kOGmFxM^kPK-D7o zlV`Y-4+z!3|NKE5MN$z+5=663)Cr+WRHK44H7+uTA9-{L0cC)4K>guk{7Ik8EF(je zczA$byoW0e(D^NbGU(PiNEpdL2m$H6Cy@{$lEN6IK;Ky-Tzn;pk}x?!FSS6`k+K4p z=Y-P%F>w`QNQ&w2Gej`~9~c$ih($>pfy^B7&v&8&wV;vJ3y^}atgiq*R5&{vBh8fL z5`N;a=aEnXSW*!GvJVIy5dyM~!TWLsu+uuHpQlJ8NCDh9;HT+76`JjD+iNG(ms;!& z=4;~prMvi}FS9SS*1NoTKbQ+p6a``L6Ix2y-`Uw&?Q}Y1S#~3_bBhnm57*rzi*-_GEo$ne!p+>JU83z z)&xNisx(cXT-QZweNTXTy$(R9)4AP=2(IgLI2@joh)|a0-C+RBvH+OR=Y(MhfH8)$ zED;ebtu+p&-3toAAqW=5E1e`$0~~Ap9a_X zzK`d5x4tY(ilRV?2vt=*G`Qxi!CMP;Jv@qtFdB_++ef1jBEogCs;Uaxw#l;WF5q&x zuvjc^e<31VE*EUueg(vFjN>@;dcFTXeKUADolc*I!y&e9ziYTC3W6X&YyDE2&1T<@ p$K!LFrk_7z&}cM%b-UdkzX4XSEHy8yRpDVj&dMLK&`LkR z-Vg8x#2>J>NNKb=gOLkJ3L^wXFj!o6XLc+uF?XD(_h4X$+4p#Fn4r_?>@xG2_kIf{ zV2p`~=s0M%+fk#@Xx8g>7-RlL_TFPO8euRP+>^Do8HOROwPg$-3`4|m+$0f!h?F7& zz>H^@8LFBq#BW&Gy992Y3$tu7GsroYlCoeA{j^Y);w%H_9E^w*)x8HM42Xw10fysm zv22M5Xci#{@1YY0Zik@LYan6h`ZD;u1uQMhjWYkd1NE9Zcp1Z9?L!W>5%gXW+zpF6 z_|bu+4rFHyY63`e6=uTFk0kfE-~f-W(8K}L9jL){hO`%7aF7#NY+V3P?@+JMEMdA6 z<)T0?Lh^7pPtiL{AF9yJ6(pHH8-bV^&N&d#AGenWGp7-VD2}2C*4kgME?d@GL{S7H uim6(yp7i_uvu?M$QN}@~Qt8)fwUaMf+?Y_t!-v=a0000 literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/hpp.png b/pkgs/webapps/apache-theme/theme/icons/hpp.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e52e2506572c56302fb7c45bae8baa1ee01da0 GIT binary patch literal 530 zcmV+t0`2{YP)Zt$)OpIMkn2FchKo{u-0xBjxjQy&za3;AFXq4&~CSJ&QTOasdiu9 zDS77{%gn%r5C|cls-@aXcL3N+cS?Shvm#O%R#k=v699$>lS(flB;I>eb>qHo_D|RP zH@){BTZK>lo!YY@X8d&{ovIQ-AX%-jCW+{8hx+hWIuWV90Wrct(4eRfaCV7GEX|2X zHGu|27lL{JjrxmsPzZYOHty9f)NlQpK$irZ|Dt&N9KZhv^XUTf;cQES7}13g9^XZ+ zA@)1yLf~hyHd`VvpD)nDqd~83V9iyJrI%15up+|hFVvsD#(ep4O`suOue9b>@!lgM zm^4jKd%fO+e!owxR@?YwH|4!2%QB|Z=_F}3n@4$`A7@#1f2;ITjYcDHwOU7i0Gj*9 UdQ9@X+yDRo07*qoM6N<$f_38LfdBvi literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/html.png b/pkgs/webapps/apache-theme/theme/icons/html.png new file mode 100644 index 0000000000000000000000000000000000000000..2f94a7846c6e7061642b087fb4ba720df23d18c4 GIT binary patch literal 770 zcmV+d1O5DoP)gw0t`#U1?IUf8q|FA_- zEaiDlQ4|0u@bK}!Jl`3z@#=u{Gd0fS8F@A3i%a=2B+qktz21@yArL|U;N|X!pMQHs zty<=j_9d4IXAzVr#)5SNN2qFs461Dz2&FGNy4EMW}6ucvy;>( z5;nH?F($%exV!u(&IeQ#?>)vjhpO`9!@rSe?7`Lf8B!aQSc9mdz+|;VeImugmY;s@ zqpCRPFd>X-8?T0(o2m2VXQydoDK<7Fv7zw7V0Va!awe}(E+wpQ9iXa&5U@uh#Kv%S zeui>tF(x855jHkF-FQvmgw3~aP*w6;nPIH&M>qnUovyLH_m)R%TkH*sW4E(Xf{Di4 z@uG|hPwQ0WBw!*js0eE>_W0$=KRnyo#|Po^g(lx$yGWywA_9}ulq8N$0;cOJJGug;Fo{Xeny9&4@bbvm8-#l=OEB*DfJH?Fk*_lZ;$0OuUt zZWn89&t_S6yWj8M>2|x9KJ1alQ7V=CjYi}4J5=3(H%{8rYXATM07*qoM6N<$g05?9 AwEzGB literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/ico.png b/pkgs/webapps/apache-theme/theme/icons/ico.png new file mode 100644 index 0000000000000000000000000000000000000000..82227e85cc243f85a421bf75ac99107afbebfab1 GIT binary patch literal 792 zcmV+z1LypSP)_zxg|zDbtx@+G(jEQczF}6mKDc#F%K} zLJd138{<>(0B%iO@fHwbj4>dX5F-n@CR`d7%0*;R>m4YiolENi6E`m4Y|iQ=-#Izb z{QUfF$8nxktJN+}AW4#z6-614rlzKrlgVT{kw_qfI99k)sgTd-+1}n>ksZfL+qRA4 zI41$Xwr#T6Y+Cj_kBOxfewM4e+xbjSYctbpTl6+HG5vm%-qsdomNw`~on>Zmlb-ZB zW|lX(f2$qO^N>ByBe%QDT2bP4?ib;BoEM*RD2mSLS`Muy!pp@SRMq6=%x6M17NgTU z+`O73EIee_brG7zjq^=dktkiKq8I^XXXMoqnk*O@Um+Y4 zjEpa%DT0xS6|SE*DD8hgB2ddNZDy20EKIARa=qRlRi|^1K1F+@N%3lej$|!|2MJP* zItQImJlFkKAz_<5d$Y*!*c=b;bTd3QNAa(hi~sj~Pag6+=OGOa4p#g7`!NjTL|5M5 z-)CrO2w4b`U07IX>+I|#7z`dO?7A+QOa>uDR@QZWV10f4X(p3tI|)H36v~>WIq(OB WS0oDDpwScn0000( literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/image.png b/pkgs/webapps/apache-theme/theme/icons/image.png new file mode 100644 index 0000000000000000000000000000000000000000..add1c5915f43ce85974c751787073adbd23028b5 GIT binary patch literal 671 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 Os0^O2elF{r5}E+}wx@^y literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/makefile.png b/pkgs/webapps/apache-theme/theme/icons/makefile.png new file mode 100644 index 0000000000000000000000000000000000000000..f99ea4c0ab059e1df4ce00e2f92375b874763bca GIT binary patch literal 614 zcmV-s0-61ZP)%NRXMH?!6G37$NKyG<0=Wo$jxy62sx}mz45FDfPsEm}OZbA;j;* zU@#axJUn#E3Ik!&`LZQHjJCXbI+yWIxBaU3J3TCI}JW+|0QrYlm)3qS}l9gRjmJDm>6WYTEOWHR*oedB-bP!vUs z$76&LQ{gzy^K3SI8IQ+5z8%3YmQJTukaG?EdWB~FW(&FL z7~eF=Fh?Xwf|POS N002ovPDHLkV1h8F5N7}Y literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/package.png b/pkgs/webapps/apache-theme/theme/icons/package.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1343ea1cdcc53df214f3180022c51a8c0ddd7b GIT binary patch literal 614 zcmV-s0-61ZP)hB*XqG3q#$ekT*VYsp+eC?CMWCD>qOzPc z%Tc|8(QwG|=SiW&d&C+DfuAb`3;t}@)d&Hx2Js#x;x8=&c&mxxM!5b>mQke#AS|0bW zkt7#@z1Q#P=P83cW6;mIv$aE2E>YqHS8G%ZYlDonK?XpU7aa#%cZcWK0bH#SCn#$j zZLJaKI`2z+{SH7x2;QIfZLP7^p_~(JWAGx~gj7oP?JMPCM!A?F)^=pu7@QN76QQX! z@(bYYtCxTMfu`0tk<$!ptuH(HN7=IsoCvxqiNe(Yx++f{M1=hhpQiWkZCodbqyJhK zA2>W&5E1rOFOA1Xv+CK$FU#$#I7n4|Fv!*T2QPmrngA-j0ssI207*qoM6N<$g0#v9 AH2?qr literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/pdf.png b/pkgs/webapps/apache-theme/theme/icons/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..7408d8d65d6c4be3394ce605d719ddade3b6691f GIT binary patch literal 799 zcmV+)1K|9LP)WBQ+$<6&=z0Siw>IL9MuT#>jMln6f{7xe^bhjy-?Se8j1%l2dwrZ#-+t;7--7{p z`xbXs5A}MTYPAZ`)}VahTVBUCGKYuAd~uZQ)mxK{ZzHpUPU zl>O)cPOFAQEsW#h?g_EhVvHeP`43rJQ0@0=_@sZ6OrGbVn#aFHPMpA4LvsHPtEaw# z%h#~oJ+QCZH7MfKhUQ52C*r?J+) z2dv-1x_6%WhRTEcxZS%jDuWmh1C_fI#I-8vbebed+5n~0%VM!e9LE~~vRUZdiL9=| z?r;MTul!H_;zhL96pKZaQZH2y1m{bo(vA7~`Hw$TxUMaku~8aMisZvrnVKRihTQOQ dsjI8&{5#5Ng9j%04W0l1002ovPDHLkV1ll-ZH52< literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/php.png b/pkgs/webapps/apache-theme/theme/icons/php.png new file mode 100644 index 0000000000000000000000000000000000000000..22c4df637f8429fb781e167889714665886b027b GIT binary patch literal 757 zcmVwzjr4H8o)v#)inA=aI=| zNT<^ugp{()G)<(G|1$ulX_88%+Jx)6xUTyfn910rzbulsOW3v~ZaC9}j)ffCh9p9M-Q#r~g^s>3yyvk%%^wQcQneqPXG!Fq{2JG#aI4%O(JRWaih^ zt9URdP)cDarN}K7aXk${V}nUJ947s30RYD9u)DZvX2EYh4yoDOGks2$8ZZ3n?X9>kXxp63em>LZn0}6uLY)IoXp; nCUspAW*e%-3t9$XdBv&J#l1wyr;YyJHth`IE<7%wHVKbeV_{1OZyD z)(7El#rgBqvsn2?kWyw&P^nbl`~C%?HDNPm7zUVm9~7mGX4~M)mcn`{@yYMN+lcY* z{y8u+j4=>eX-NGWz@Xsfi(g2h6mcYxL@AQEyYF#C1VM_RH4haeQHm4ejH9lD>cky2ztO?1XI~Mt3CLOf3Cuph=P<>cm)lqiC6YvenNfeW_z0D%-Dv+?N-21r2O-3o wsGV`|EjOAAn@g+C;$rsiY}@vFu~@AC0VdIO3`JCdIsgCw07*qoM6N<$f{kDgMF0Q* literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/png.png b/pkgs/webapps/apache-theme/theme/icons/png.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe1ec4ef1c8fd7ab601f5e00cfa02a39db0fca7 GIT binary patch literal 679 zcmV;Y0$BZtP)P?Y%G;*G@{2NuK$cmd$e+m~2t(bigiUtY42tP{l%PAM*@ z6N>2-^|=g;qsRhW86Zv}UJwy32Pxs4MH^$7XP&3GR*C8%rt(bcA$cRmx(sC%&c%#| zbHu(yE2^VJh`c5@=C8p5Aj;=q!^BKrY^*x=DMVB!l7 zf1Xg+0j{bT)>a$F#qEL@T8_ zhlhuoTU%R%VR)mkF@|=#jZ&(k8;!4gRk{tyW9t%H?v#JxNhSup*ke_Y177tfbEU6bS)9 z9LHFvit)O~pvX>wcF^$*QXAdxIpKv1+*zQ}*<|g4r3;TV(N1*C5HAo1; z#TR%rySa{6k)ct3ja}|9R3fndEvN(pu?4_Bys^6$jS*kDlkOD}f`lN6L_|+a@2o722Pa@kqb@l7K}lw zHMH7$kxA}x98<5?vDP;1Naf`1&yDxDKFqHV0Bq+U|JP^A=kv?OV)6PP+-q|zm%SuV P00000NkvXXu0mjfeHs}( literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/ps.png b/pkgs/webapps/apache-theme/theme/icons/ps.png new file mode 100644 index 0000000000000000000000000000000000000000..05f3ed9304ce3fc8c17598ab5f328709335ec0d9 GIT binary patch literal 817 zcmV-11J3-3P)Zkc9T7L^J0jJ2X1;aTsU|pUbuSPJ!~Q-CZs4^HlUy}Y9sA*>U7?F)3=94 z8dvy|cX`S8`@ir1zJFqUef^5o`d+Km`o19zq2k!ebR|expp;^HdAYH_zrP~FFud=1 z-b8}WuWQEwTt`qCILXq|5?X7wSS7-KNTP^mSk zH6;H3PNS)q@Nzu)`!8l@X4u@^WPX00Fbok&DU4}r?!2v2ZA4!wUz!{sleSn}TO*xL zGdDMf)*2}#B93E>F-XMDzii;Rtpv9hv)QVPqmIwL&a zJK#etq#8t2g9t|?ng7}2RK~#=!}`;w6pKZsr>7|t3ZzmgfDYi@!6&Nqh-y7T>zEst zMmU)k7-J}x%Y2)D2}l+e7O-ubo}M1G)`-u5gL*_YXaaEgLIKyY4!ub=UU2oi#rwb` zm&-9cJdD;F-}gH&m>TaV2qg#gCds5Z{F#>eM8>=(nHl9;@ee%D!}onEl?qbI4xlgB z#qZb8VI>nh`g4~sYTwtMucE>RRX=2KaFAN9hVT1_0$=RG)WiVGH!t$j**p&)modiR zzj?+#FSdB+P7wqFmSxf1-Az89$F}XZ2TCb~5beO6u=(}sD2=A(pTI;rnLWuIl#>ScP@o{Y1KHPy5j>XXF0fv5iL?V&slM<7{WM*<1esGdqMkk@_0b00000NkvXXu0mjf__%gE literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/psd.png b/pkgs/webapps/apache-theme/theme/icons/psd.png new file mode 100644 index 0000000000000000000000000000000000000000..62718ee28131465e8562c8de6536015ceecdbe69 GIT binary patch literal 622 zcmV-!0+IcRP)!K5aQ&k_}_K`bH?6}qSh{s0H* zAWp7|bQLPL;NU+X#Z7T=sJa*jM{yBiDmtW4c#VSz#h?g@p_Q~s>izMqgCw;vDdr1j zI2_LBe$TnbDHIA9wAM305FDisxvuLAA#OSOeBMu|)0tE%h3mTi)f@x?wOWlzrLrib zlo`+SkW%(z0MGL%l}Z_5jKLTKz>~MD0EC6Zu0)8F2e%O!aJm9oeL`!EwHAQc+%m~n zh(y$-QdbPe1rM+9W+)o!3ej5QDy6X2Vy(q!#aMcPM-zLvc`-?KrOE5XwRXKTlu`&| zOxuChidOCox@fIfmzwAAmdU>Vj?w{VkHncAPqoL`G=kBZ&-EscbKiKi(7>^V6QfbC z-CyGLq3w*1C0SR&Uk~a|fa2qqH5xyDvCoTe`|=3;cZS)U4Dsf}3OfcJuAWP64LEbm z#_8b*80yO2_Z_p z?<1w`c`%(JrNsArgb*bWi^ZnO9iSRC!gK_n6>ClZON-;8W$u&VD`_y7O^07*qo IM6N<$g325ja{vGU literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/py.png b/pkgs/webapps/apache-theme/theme/icons/py.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaffd184f9232cfc840f813b64853a1357930e3 GIT binary patch literal 743 zcmV?P)ND2lMwVy&go3Yf2d=G2jc zWby?ZzmN3*?mv8-FxFanJ!y==S_?q4-C=I&9h*VObY+!Rr;Co@N1(AzC*gWA#vrxU zSZjIm@(r`EztHSNY<6RUMw3oAL^&RBUtl8xBhw z5g%HDugarE78MDy=?odRC=~XvGh867-c4pC6N1p7;ta0z@LWsO_=Jzbb0F)6TpE3k z7iAz)5H+yY{+iGeXr;h$Ncldc#yq#qykjWW#_BF9*Cp=@Xe>h%5XWp6q=m+}7Q#&~ zPrT>QNFLhjpgW-2u+;+H1>q5DkIZj@=n1Z#JI;RRBRjeu*wxntvy64NXtp-^vDKoX zeZGk@tE!A0I=lUX;nE@A$r79~c;z Z`Uxh$hCuM3=j;Fg002ovPDHLkV1h=!S8@OV literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/rar.png b/pkgs/webapps/apache-theme/theme/icons/rar.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0ff54f4eb81cd34ea804e3388abe1b7352046a GIT binary patch literal 621 zcmV-z0+RiSP)Y6r3(E9x@HK7 zpsr35a8PjUC}_ugf#M=ahr}=8q(m)6B}s=S=?yeZ@#da$?#YcqBtw%*`@-Rc1Hb3@ z!0T+i`1ruu(L0=Ql^G+X!>jktDHe+WY;SM#_Gy_gaB5OIFQw=Co9Qc;^VhT2h)6jN zhzX(}qLfM{0IJn0ch}db?>1LE?SoA@@cn!up5kElh*3D20z~6uXfm0c{B?i#NyJms z{bpVor8(|+Gs6H*biB*uGPPO_fItU$hXF=ugi;FSX|!)i}Ex| zDWp~kqx8&nfLIU#pin4KsZ;czA0uW2cdMn+$ zAYJRR_wZXbwU9bbo_7B*>wfZFDZJe1``32E8-3242Qcqs8^X)Qr7|(K+`pf>mAQiu zku!zEa7d@IlWCb>d(Ne`Cyz$PdlQEG#(4~cm}@$*`PY8|;3*p*@h`O500000NkvXX Hu0mjf^CuH? literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/rb.png b/pkgs/webapps/apache-theme/theme/icons/rb.png new file mode 100644 index 0000000000000000000000000000000000000000..c7db42fcb4a9d0004072bd3c84d53a62f5373868 GIT binary patch literal 781 zcmV+o1M>WdP)Ok=a2u>Xcf;dpfL^KG;7}O>OTMmt;)oN@m&9}e(EeF*? z>7=gl`#h|7!BY8r{;==+BS8@C;15P?T`t(?~5KygF86O{i zYdp{EPp8v(p0_BZM5sM{fP4Fzjst%&cJD5q#>#wdS$1B#!IoqHQYw}DjdKp?+#=Yo z{Li~H1GN8p$;yys?n9B(iPO9vJdNLM@#6Lfn~xsDIfwCm9}!uAXP!Ob&DjBH)Cmb7 z0i7HAm>n5rXgBNlfKy--Nmd>_LS>@Lm(da( zwJBCaWAk}yG0wU94MfPDJ4LHeCk&tffvwl?Pcqjs`>0Y~jp~Auq5*oI2rWpP5jo9ig_FlNm=Ns23 zfB%l8(s)YKRv{u7V(Ii!K{S4cTWs31jr8;cllP0vj+L+qycKa`ot=cdfac66lvb?DtX?Xp6pPGFRaxiHP}OU& z2!g`3TKt%-uuejV(bTX+I}%F;Dv_Y_aRL$@)V{taKxm_hiDILPkcfuqi-mbN*PtzK zvA|kO@8B@6u3nh*a2>*Vc6V*ch00000 LNkvXXu0mjfEw5?t literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/readme.png b/pkgs/webapps/apache-theme/theme/icons/readme.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae48cd0f2bc062c5a7440855f857300a6a3016a GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Oq_H_m^z- zTRP=J)Oea>RsV}!Gm^GD)xPDAZ@Gp?@-u=5eL{3w3Z=9K;osoqy~7g(zoDRwXG-p2N3Ie7`43*p>BGX>l}Zb}hQi Zuj(nc_WMVsJYYaDc)I$ztaD0e0s!K~y-6m61P4TTv9oe|f#{CLzTKP5p;fBGOT(PPUtAJ2>bN z3hkEBRqEv6ltqMgNmt2|cCd5{S^E$&1QlMK5(q+Yu)LvANa%a_<#Z@{G+Imj;BXI| zd%o{G=OmiV=5u4r!EiWS;SR7Y%Tr3dO}MV><#M^@>FH@K%lfb8;c&>+)fE>P7cCV8 z!E!d6B?yAM7$BR?(r&kxRTM=;Q8ZTUcDuN)OTXV|NJRhlk|zd4QNW zl}eF%`GTMKGkhz&;=%iOB%eJc3`49aiVzXDwzf#8)2ywnAtHYby}HW1xjBB6KOiFG zBUGzZ=I7^Q)!Xp!%V%UTKtz6zFe2F7+XG;Gdz=0JeR8=R>+9>x%*;?Km6)BK04FWU}Kp&dx7k_+PkE38Rt#0000K~y-6m6Fd(R8bViKli=+9K~p$CrwGBiz2B;A= zD2rO=-%z@!MO2Fn%&=9f7PjdJQuKomLdc4sp&z_)H3MeaqFL6W8Q;C{o))Gsj6!qZ zY!2sq&i8xnRk>WQ&ssa`oa>^F@H{WlT3=K%Gc!>~M@Kf3$>4e3e+@h5D3wag&(G&| z9LL!(42k2o9sz`5NTE>3>Lf`>k^}(z_%JHmjcVD0YRRHn_XBE8z{;Gq)*>Ry#a|`( zRf4%`0MwR!=$`ASjcsc}thIQ?7(@gSL7#n%-#dodbsh;ekt}{>>Cp*nG=Yd)?ORD> z3|^8Xs|A~XfZ*eG528;$fo+FyFsSA+Yh4BZPgZ503w1ua2ap=QCy|M($p0yFD~Hk9YnSF;>v%hyt-6nr3T=4pCjlW zA$4W~Y21v-zr=ibNYHl;X$Z03a@e`|>jO+-n)1_Oq+tUM$H#DqM`daRaf07@3}*!U zBdP*a-JtyZD)Rd$k_e3_Z{qLl$3)Mt3!hP2vpD0hixI)U{@NRKor0zee&-QH1l8KT zymcYMYwf}r!FukaG?EdWB~FW(&FL z7~eF=Fh?Xwf|POS N002ovPDHLkV1h8F5N7}Y literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/script.png b/pkgs/webapps/apache-theme/theme/icons/script.png new file mode 100644 index 0000000000000000000000000000000000000000..1099b5fe5b173d0c312ad7022c892e7773784a18 GIT binary patch literal 613 zcmV-r0-F7aP)i!L@rbgBeekXZkP zVE%(r6#J2GBCegKgsKz~ahFa)xm_HhOOh!8>Doo@PzlNVzSkjN9eWR)<-qx!=R7=K ztJSI+V-B2iD`Y68R9i%LytA{jcBxbFP3(n8aJ2D&&%W)ht91gPx zAdX{tyj7>51D#l_wKj`-jB7Uotb00000NkvXXu0mjf53dke literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/source.png b/pkgs/webapps/apache-theme/theme/icons/source.png new file mode 100644 index 0000000000000000000000000000000000000000..5bef920766b333d4917efaf794b054b46632771c GIT binary patch literal 586 zcmV-Q0=4~#P)*9Rs1h``+!4`b3(7@xbNY z%Q@%cJNGKxZuhYe;>dBFZEg{&s`fQad#SWqt$r{Vj0FM#R8?K7*>M~ulL_PT_^URZ zPGh>R^XTM+UBlo@ug9)o@HP_R*ZVAY?>zuu8h^C_(RH1{U=ULpjfPAnlee*Vqtof2 z2_cYDl07{oWf-)3JyM3jo2@Op{SrUFwYU?x55Vv3;sQVjfl{m0WICN*$)MS6qS>~M zlyW72ZQJt^a%X1%q~dX2hr?LUE!MN^T;;FGeav0wHdC~RZ7!Z%%txqHDl(JFtYlEH z*XIU>LX|{f2Y`HjgF>MSKq9e2KEH7zKnO7h93MY(6F1%e2T*5#*|HC8>;s#%>Y96& zQnL4HkHhidLhXXVER=T&0GC{%JXKtS^M~jE*tiCkWw}(}2OrK0XJMC8vj2IX(vOl` zXIa+uFOL7t`q!MD#7QwHA4vqb$oeGR7>@GzBw*nZMm2O;a3?#|1GnthE@1VGIF;5MX8y zGo$bOQRcgt8RVRUwf4UPoO2)m@H}r6KL9AD002}~6|~j}f?!mDF$Pstf$F-(>2yMt zWiZA(aHN!f)dc_|LJ$NfiUM_AgOVh{^?F5FmbhQ!Uja%f#Bq!yNkEs&1@rkFzVDAh z==&a<%?8xAE%H1^mSyO=?r~Bf#2<$HpZLCyFbq)?1=_X+X{{d!A2;|)_YLAWhSnO? zG!166877m-D1@eIuwJi0Q51FC?KWI4m$24?nK2B*rwBp_D5XF|*zfm2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4`starVhW?6V_7VF+B}sPyZA0eS?@d$ z#eMQj!8uz(S^A z_uV}#-A9?6IzIB7&E}nUdTF_1ph&V~XsE%l3eK?ASL+YHEZS+4yFI!k@rOXp+SY4Q yE+t%LyYEI{HkqG$+wQlBOW>EyaqI2t7#)vK+t0cw<25i089ZJ6T-G@yGywqaxuc5! literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/tex.png b/pkgs/webapps/apache-theme/theme/icons/tex.png new file mode 100644 index 0000000000000000000000000000000000000000..1487b253863859568538f1edba54dcb97e424039 GIT binary patch literal 677 zcmV;W0$TlvP)&_93$f8ou+raPpEihLl!RnVkbp=UZGytgo4hS{6E_Hp9=OHh-E-c#ocoMM zqft^y9goN3pL_$RX}Tiv%c$4uZYq_^B@zit)BF;7JRUO~4tachyc6H|bMbf_-}k>` zfOtGkx7*E07>0yl_$@NPgeOWVE-o&3dwU}cLn4s~@9*zyZEdl*xClVKUgzfKhH|+~ zI-TbH{G4nyODq<{41$2+aLCTi4xLViN~MD1I6OZ;qqRnBO`%Z0vMgGy7O$_b*tSiv zSR@DnBn(3~Ha5^&1E95LWo3o4vokW83?f3i-DYoZkHf=5dc7X|`}>H<#|XJxZu*+m z8pm-+CX0q?8l@DbQff+^IG9wc)#CK@lzcvqX_~}h zF;-VsxxBob3dls@;o*VNXhgHwq*yEhAR<_nh3mRpU0rc>bcEKLYPCutk(d<#*xlWo zapO1+>+9=uIvrA}6oz47Sr)Zg4Z|=P3ucuc=V>$=Y;SL4 zSr!0mYij`X`~6u56D%(;b8>PrJ#TJqV%zqozUc@-5FjEmm$q$x+P;4Ulv00E5RtCy zy7<07lfeJV_kCQ~MMSz1jYbbV&pW=qzyI;2Pw*FWb93Ip!otCC_u5Q_pbG+YL!FW8b-ND~^m|(lzR@|=FD?t#{)+z*yF^CAW*{lNU_xmN+-(+hoo`}Rz6rr^y z%d)4A)|x1a5Rq6~t=2M0lGW*SdV6XCKhtbBlXknk{07ed_tgh+a3uf$002ovPDHLk FV1o4Y#MS@+ literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/tiff.png b/pkgs/webapps/apache-theme/theme/icons/tiff.png new file mode 100644 index 0000000000000000000000000000000000000000..819e64cdf7aa0880edaddfdcae40cbecb88bf435 GIT binary patch literal 654 zcmV;90&)F`P)NH zX2R|l;8VCb8dq0Vhz1)6OG2v&wNWZiNZa?XLx(yUd#1BIzdYwWj~pHzKDXBHr<5ME z#E8gop67dVaBy(kYPH(UW)r207THCIw3Ty2$2B@lvZnxXcy!RY` z_{95{Z%DcX(MWViun?yxEGjv)SQH*D0e}~8U*o+e^WJkY_|10X4rB!hjdL@IQ%XHS zVTnEIDB!bsy379;fMFTm0BIqO(g#i&%5S(*! z2f3-S^Xw5frz51uus??=HN(^bN*T1dO_&tKi6LJtP^BS?nV%3sKr4kBPuYIj;<|T1 zDA&jvtH|t(VzXk}n<3>o)K@4TY#>?~i4a0SdG8ScNsz1ugxb9=?AbNp%HW2Ud~Jh# zWd$)AVLWB}{SruvCnky9{5WTNc}1`R_jQ8!87d3pS2L0u5`0OD3N_Fmpwj9B5VOd5 zFhFM+F-E*~cxw^m&id{}Mar=yWV zZ~y@8b~`AFf_l9U0N|X1G4`MpLV$42A*D>BQA%+>pHV0jkjZ3lxm*&iSS&thIp-j8 z{1~ND3B%zK03f9VV+;ULE|*~##)CEtLy)+_Gn`H*+-^72YBltFy)QZ;#A}1iW&_){ z(d~AVM1LB5IpXJGjG@(PrSgAG(C_y_2ubB%8m!lAEEWscwvA@9nQD+)VYyu5e!s)_ z{g)L~Aq3*T@Odbu&~+V+M&s!+=lpjCLWt)$&i8h^4NcRMc$Q_svaF}q=bXcJT@XS% ulFQ}Z=kxi8>$=~b7EOV!>vO{}-hTnuq;A%qk8}k90000bVK9&T^bZ%$A7 zd4GQp;Du%Juvny1kH+w{S{)KA*G~P zEItb`o6Sf`DbZS^wI&QhT-T*mtKqsXVHhU8$z(#a*-UD!HBw51QVL@X0G&<;-}fn% zN_d{fVzHpzZqsVDm`wIPK_c4jE2aLJsI|tjENt7R*X!Z?KJ)n;+qSVRYiHN(e9wbMqd}oi zU^E(0E|;lRt2=l8s|QlbWHOh_;W!SC7n0000_G$Pd)0ltf5e&YhnWvk7c>zU^S{oO8Z2>f++!XYc(R zrPPa;-~2_e(mK0l zw@jx~ep^kbn+k19bXk1y7qWt3x96u{9(j0pplKRR2;oCjRo`o^nH|=-1GPol5@p5= zM)_fIR7N3kM^#m%ls=dkQ5Dzy9%rwjNy?bXk6(V5H<6&N)&_AGOx6{{@fk VbEjPP6gB_=002ovPDHLkV1im-P$mEX literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/xml.png b/pkgs/webapps/apache-theme/theme/icons/xml.png new file mode 100644 index 0000000000000000000000000000000000000000..83a83df91a6742767efeb2be12dcefdb9e5c8d6b GIT binary patch literal 585 zcmV-P0=E5$P)kv~VLT#6P4fg9gd>=S~+fH;pZ&8JNWkXU?2COwjA~cARsE zd7gh{g-}YRTI5kQh8WLehH z-g~_FD-8q8=d^PU5qYIiKm`B<6GLDRuLj?>%aMLUepVcsAs5 zf15liAtHqRd;HrfKCX~QB_8*;3D1T^#}|kQ&bfsL!P680q!bjMgkOi4&bx(2r2v5$ z_JyEOFxlP0Zf>xCbP7{PFn&g7Kbg)6rjGTaQ|#sjlijU92}Fd+UK`ttQ8y2idqZri zj<1#x5!B5Cwiz?oYZv&X6Xx;s=>viFh*pd3fNR#UtvB!+_OAp0q7`|w_EJdE;}xzT zu-2lrUg;B^b2AUL)>)dS7-N>6rwAx%@X)|swWs|SO@;IQBCzh6Z`6h(tLjt_nT XjRR+gDFH-y00000NkvXXu0mjfvlaK* literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/icons/zip.png b/pkgs/webapps/apache-theme/theme/icons/zip.png new file mode 100644 index 0000000000000000000000000000000000000000..cc196c1eeeecf71a4ad125c1e8ce6414aa2e7112 GIT binary patch literal 617 zcmV-v0+#)WP)|WK~y-6m5;wq6j2mL&n$NrSwmn&HYkx&LLdPfEhM&9J2w6S zCMIeutf;K0tfa)m%Fc?IIIEqlg_3AkF%(;9ASfY77G{^3H}99l7!t#70$=iqcawX* zbA#rG2e&h0pF8ho=$4?w-G^_f)oK9L>vdLM-l2eAFG=5mbUN*&3)L&rV-u4Uq<9ig zI7h4_?mc<}!0R{fn4G=E&d;@({oSo4QJr*pbfk}6YXA@t78e(DfHhdv zMk|FFmEy9auI>2=IUo!}qA1EwFb0<$VN^=NDAlt)H*f$%QA8Mq{|p>9OE5|yI#akT z>1p7sJz?Oi#bpUPQ;4;KRlNa08Z$pvJ#L?$t76j_s}iggB-I1>Ai$~pt^nU^@?v3% zpm;t1>loc?LNGw8J<@K)nEo3Kj*s`W_&=8@4qYYQ+os+6galGzbL}HX2dz^A@|1^$ z38aizt(lm;$>7D)8sv%hwpri&jCd)r^?jAjpZ8}1oFA#;rG$8OxYH?3ja>_Ci1eLm z*%-^$)o*yUu@k&{eEELsz&%S8)w383^s_rWRCxLqgntx*WUqE=00000NkvXXu0mjf D(KZJc literal 0 HcmV?d00001 diff --git a/pkgs/webapps/apache-theme/theme/style.css b/pkgs/webapps/apache-theme/theme/style.css new file mode 100644 index 00000000..4d25c9fb --- /dev/null +++ b/pkgs/webapps/apache-theme/theme/style.css @@ -0,0 +1,160 @@ +/*------------------------------------*\ + Apaxy + by @adamwhitcroft + + Theme name: Apaxy + Theme author: @adamwhitcroft +\*------------------------------------*/ +@import url('//fonts.googleapis.com/css?family=Open+Sans'); +/* Have to use @import for the font, as you can only specify a single stylesheet */ +* { + margin:0; + padding:0; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing: border-box; +} + +html { + min-height:100%; + border-top:10px solid #ECEEF1; + border-bottom:10px solid #ECEEF1; + color:#61666c; + font-weight:400; + font-size:1em; + font-family:'Open Sans', sans-serif; + line-height:2em; +} +body { + padding:20px; + -webkit-backface-visibility:hidden; +} +code { + font-family:consolas,monospace; +} +a { + color:#61666c; + text-decoration:none; +} +a, img { + border:none; + outline:none +} +a:hover { + color:#2a2a2a; +} +/*------------------------------------*\ + Wrapper +\*------------------------------------*/ +.wrapper { + margin:0 auto; + padding-top:20px; + max-width:80%; +} +/*------------------------------------*\ + Demo block +\*------------------------------------*/ +.block { + font-size:.875em; + margin:20px 0; + padding:20px; + color:#9099A3; +} +/*------------------------------------*\ + Table (directory listing) +\*------------------------------------*/ +table { + width:100%; + border-collapse:collapse; + font-size:.875em; +} +tr { + outline:0; + border:0; +} +tr:hover td { + background:#f6f6f6; +} +th { + text-align:left; + font-size:.75em; + padding-right:20px; +} +/* 2nd Column: Filename */ +th + th { + width:65%; +} +/* 3rd Column: Last Modified */ +th + th + th { +} +/* 4th Column: Size */ +th + th + th + th { + width:5%; +} +tr td:first-of-type { + padding-left:10px; + padding-right:10px; +} +td { + padding:5px 0; + outline:0; + border:0; + border-bottom:1px solid #edf1f5; + vertical-align:middle; + text-align:left; + -webkit-transition:background 300ms ease; + -moz-transition:background 300ms ease; + -ms-transition:background 300ms ease; + -o-transition:background 300ms ease; + transition:background 300ms ease; +} +td a{ + display: block; +} +tr.parent a[href^="/"] { + color:#9099A3; +} + .parent a[href^="/"]:hover { + color:#2281d0; + } +/*------------------------------------*\ + Footer +\*------------------------------------*/ +.footer { + text-align:center; + font-size:.75em; +} + +h1#pagetitle { + text-align: center; +} +tr.parent a[href="/"]{ + display: none; +} + +tr.indexhead { + visibility: hidden; +} + +th.indexcollastmod, td.indexcollastmod, th.indexcolsize, td.indexcolsize { + visibility: hidden; +} + +.instructions a { + text-decoration: underline; +} + +.instructions h2 { + margin-top: 10px; +} +.instructions em.important:before { + content: "⚠ Important ⚠ "; + color: red; +} +.instructions pre { + width: 50em; + padding: 10px 15px; + display: table; + border: 1px inset black; + line-height: 1em; +} diff --git a/pkgs/webapps/awl/default.nix b/pkgs/webapps/awl/default.nix new file mode 100644 index 00000000..8564fc3b --- /dev/null +++ b/pkgs/webapps/awl/default.nix @@ -0,0 +1,16 @@ +{ stdenv, fetchurl }: +stdenv.mkDerivation rec { + version = "0.59"; + name = "awl-${version}"; + src = fetchurl { + url = "https://www.davical.org/downloads/awl_${version}.orig.tar.xz"; + sha256 = "01b7km7ga3ggbpp8axkc55nizgk5c35fl2z93iydb3hwbxmsvnjp"; + }; + unpackCmd = '' + tar --one-top-level -xf $curSrc + ''; + installPhase = '' + mkdir -p $out + cp -ra dba docs inc scripts tests $out + ''; +} diff --git a/pkgs/webapps/davical/davical_19eb79ebf9250e5f339675319902458c40ed1755.patch b/pkgs/webapps/davical/davical_19eb79ebf9250e5f339675319902458c40ed1755.patch new file mode 100644 index 00000000..2a08a5c1 --- /dev/null +++ b/pkgs/webapps/davical/davical_19eb79ebf9250e5f339675319902458c40ed1755.patch @@ -0,0 +1,26 @@ +diff --git a/inc/ui/collection-edit.php b/inc/ui/collection-edit.php +index 3af9edd3b8c4ad9074113273175098841af6a28e..8c1d84012b035f7bc7faedcb24916581a02a5d3e 100644 +--- a/inc/ui/collection-edit.php ++++ b/inc/ui/collection-edit.php +@@ -190,7 +190,7 @@ $privilege_xlate = array( + * @param dbrow $row The row object we read from the database. + * @return string The formatted privileges. + */ +-function collection_privilege_format_function( $value, $column, $row ) { ++function collection_privilege_format_function( $value, $column = NULL, $row = NULL ) { + global $privilege_xlate; + + $privs = bits_to_privilege($value, 'calendar'); +diff --git a/inc/ui/principal-edit.php b/inc/ui/principal-edit.php +index 20dee7fa4ca2235ff2f74be0dfb52cbe937ef822..2e37cd596b597bcce1e59d7c02a1c5fc2a7f88ce 100644 +--- a/inc/ui/principal-edit.php ++++ b/inc/ui/principal-edit.php +@@ -454,7 +454,7 @@ EOTEMPLATE; + * @param dbrow $row The row object we read from the database. + * @return string The formatted privileges. + */ +-function principal_privilege_format_function( $value, $column, $row ) { ++function principal_privilege_format_function( $value, $column = NULL, $row = NULL ) { + global $privilege_xlate; + + $privs = bits_to_privilege($value,'*'); diff --git a/pkgs/webapps/davical/default.nix b/pkgs/webapps/davical/default.nix new file mode 100644 index 00000000..52d87366 --- /dev/null +++ b/pkgs/webapps/davical/default.nix @@ -0,0 +1,20 @@ +{ davical_config ? "/etc/davical/config.php", stdenv, fetchurl, gettext }: +stdenv.mkDerivation rec { + version = "1.1.7"; + name = "davical-${version}"; + src = fetchurl { + url = "https://www.davical.org/downloads/davical_${version}.orig.tar.xz"; + sha256 = "1ar5m2dxr92b204wkdi8z33ir9vz2jbh5k1p74icpv9ywifvjjp9"; + }; + unpackCmd = '' + tar --one-top-level -xf $curSrc + ''; + makeFlags = "all"; + patches = [ ./davical_19eb79ebf9250e5f339675319902458c40ed1755.patch ]; + installPhase = '' + mkdir -p $out + cp -ra config dba docs htdocs inc locale po scripts testing zonedb $out + ln -s ${davical_config} $out/config/config.php + ''; + buildInputs = [ gettext ]; +} diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix new file mode 100644 index 00000000..8c3eb0ef --- /dev/null +++ b/pkgs/webapps/default.nix @@ -0,0 +1,114 @@ +{ callPackage, mylibs, composerEnv, lib, private }: +rec { + adminer = callPackage ./adminer {}; + apache-theme = callPackage ./apache-theme {}; + awl = callPackage ./awl {}; + davical = callPackage ./davical {}; + diaspora = callPackage ./diaspora { inherit mylibs; }; + + dokuwiki = callPackage ./dokuwiki { inherit mylibs; }; + dokuwiki-with-plugins = dokuwiki.withPlugins (builtins.attrValues dokuwiki-plugins); + dokuwiki-plugins = let + names = [ "farmer" "todo" ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./dokuwiki/plugins + "/${name}.nix") {}); + + etherpad-lite = callPackage ./etherpad-lite {}; + etherpad-lite-with-modules = etherpad-lite.withModules (builtins.attrValues etherpad-lite-modules); + etherpad-lite-modules = let + nodeEnv = callPackage mylibs.nodeEnv {}; + names = [ + "ep_aa_file_menu_toolbar" "ep_adminpads" "ep_align" "ep_bookmark" + "ep_clear_formatting" "ep_colors" "ep_copy_paste_select_all" + "ep_cursortrace" "ep_embedmedia" "ep_font_family" "ep_font_size" + "ep_headings2" "ep_ldapauth" "ep_line_height" "ep_markdown" + "ep_previewimages" "ep_ruler" "ep_scrollto" "ep_set_title_on_pad" + "ep_subscript_and_superscript" "ep_timesliderdiff" + ]; + in + # nix files are built using node2nix -i node-packages.json + lib.attrsets.genAttrs names + (name: (callPackage (./etherpad-lite/modules + "/${name}/node-packages.nix") { inherit nodeEnv; }) + .${name}.overrideAttrs(old: { passthru = (old.passthru or {}) // { moduleName = name; }; })); + + infcloud = callPackage ./infcloud {}; + + mantisbt_2 = callPackage ./mantisbt_2 {}; + mantisbt_2-with-plugins = mantisbt_2.withPlugins (builtins.attrValues mantisbt_2-plugins); + mantisbt_2-plugins = let + names = [ "slack" "source-integration" ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./mantisbt_2/plugins + "/${name}") {}); + + mastodon = callPackage ./mastodon { inherit mylibs; }; + + mediagoblin = callPackage ./mediagoblin { inherit mylibs; }; + mediagoblin-with-plugins = mediagoblin.withPlugins (builtins.attrValues mediagoblin-plugins); + mediagoblin-plugins = let + names = [ "basicsearch" ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./mediagoblin/plugins + "/${name}") {}); + + nextcloud = callPackage ./nextcloud {}; + nextcloud-with-apps = nextcloud.withPlugins (builtins.attrValues nextcloud-apps); + nextcloud-apps = let + names = [ + "audioplayer" "bookmarks" "calendar" "contacts" "deck" + "files_markdown" "gpxedit" "gpxpod" "keeweb" "music" + "notes" "ocsms" "passman" "spreed" "tasks" + "flowupload" "carnet" + # FIXME: fix passman for NC 16 + ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./nextcloud/apps + "/${name}.nix") { buildApp = nextcloud.buildApp; }); + + peertube = callPackage ./peertube { inherit mylibs; }; + phpldapadmin = callPackage ./phpldapadmin {}; + rompr = callPackage ./rompr { inherit mylibs; }; + + roundcubemail = callPackage ./roundcubemail {}; + roundcubemail-with-plugins-skins = roundcubemail.withPlugins (builtins.attrValues roundcubemail-plugins) (builtins.attrValues roundcubemail-skins); + roundcubemail-skins = let + names = []; + in + lib.attrsets.genAttrs names + (name: callPackage (./roundcubemail/skins + "/${name}") {}); + roundcubemail-plugins = let + names = [ + "automatic_addressbook" "carddav" "contextmenu" + "contextmenu_folder" "html5_notifier" "ident_switch" + "message_highlight" "thunderbird_labels" + ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./roundcubemail/plugins + "/${name}") { buildPlugin = roundcubemail.buildPlugin; }); + + spip = callPackage ./spip {}; + taskwarrior-web = callPackage ./taskwarrior-web { inherit mylibs; }; + + ttrss = callPackage ./ttrss { inherit mylibs; }; + ttrss-with-plugins = ttrss.withPlugins (builtins.attrValues ttrss-plugins); + ttrss-plugins = let + names = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ]; + patched = [ "af_feedmod" "feediron" ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./ttrss/plugins + "/${name}") ( + { inherit mylibs; } // + (if builtins.elem name patched then { patched = true; } else {}) + ) + ); + + wallabag = callPackage ./wallabag { inherit composerEnv; }; + yourls = callPackage ./yourls { inherit mylibs; }; + yourls-with-plugins = yourls.withPlugins (builtins.attrValues yourls-plugins); + yourls-plugins = let + names = [ "ldap" ]; + in + lib.attrsets.genAttrs names + (name: callPackage (./yourls/plugins + "/${name}") { inherit mylibs; }); +} // private.webapps diff --git a/pkgs/webapps/diaspora/default.nix b/pkgs/webapps/diaspora/default.nix new file mode 100644 index 00000000..eff8d271 --- /dev/null +++ b/pkgs/webapps/diaspora/default.nix @@ -0,0 +1,73 @@ +{ ldap ? false, varDir ? "/var/lib/diaspora", podmin_email ? null, config_dir ? "/etc/diaspora", + mylibs, stdenv, bundlerEnv, writeText, + cacert, defaultGemConfig, perl, ruby_2_4, nodejs, which, git }: +let + diaspora_src = stdenv.mkDerivation (mylibs.fetchedGithub ./diaspora.json // rec { + buildPhase = '' + ${if ldap then "patch -p1 < ${./ldap.patch}" else ""} + # FIXME: bundlerEnv below doesn't take postgresql group for some + # reason + echo 'gem "pg", "1.1.3"' >> Gemfile + ''; + installPhase = '' + cp -a . $out + ''; + }); + gems = bundlerEnv { + name = "diaspora-env"; + # https://git.immae.eu/mantisbt/view.php?id=131 + ruby = ruby_2_4.overrideAttrs(old: { + postInstall = builtins.replaceStrings [" --destdir $GEM_HOME"] [""] old.postInstall; + }); + gemfile = "${diaspora_src}/Gemfile"; + lockfile = "${diaspora_src}/Gemfile.lock"; + gemset = if ldap then ./gemset_ldap.nix else ./gemset.nix; + groups = [ "postgresql" "default" "production" ]; + gemConfig = defaultGemConfig // { + kostya-sigar = attrs: { + buildInputs = [ perl ]; + }; + }; + }; + build_config = writeText "diaspora.yml" '' + configuration: + environment: + certificate_authorities: '${cacert}/etc/ssl/certs/ca-bundle.crt' + ${if podmin_email != null then '' + # dummy comment for indentation + admins: + podmin_email: '${podmin_email}' + '' else ""} + production: + environment: + ''; + dummy_token = writeText "secret_token.rb" '' + Diaspora::Application.config.secret_key_base = 'dummy' + ''; +in +stdenv.mkDerivation { + name = "diaspora"; + inherit diaspora_src; + builder = writeText "build_diaspora" '' + source $stdenv/setup + cp -a $diaspora_src $out + cd $out + chmod -R u+rwX . + tar -czf public/source.tar.gz ./{app,db,lib,script,Gemfile,Gemfile.lock,Rakefile,config.ru} + ln -s database.yml.example config/database.yml + ln -s ${build_config} config/diaspora.yml + ln -s ${dummy_token} config/initializers/secret_token.rb + ln -sf ${varDir}/schedule.yml config/schedule.yml + ln -sf ${varDir}/oidc_key.pem config/oidc_key.pem + ln -sf ${varDir}/uploads public/uploads + RAILS_ENV=production ${gems}/bin/rake assets:precompile + ln -sf ${config_dir}/database.yml config/database.yml + ln -sf ${config_dir}/diaspora.yml config/diaspora.yml + ln -sf ${config_dir}/secret_token.rb config/initializers/secret_token.rb + rm -rf tmp log + ln -sf ${varDir}/tmp tmp + ln -sf ${varDir}/log log + ''; + propagatedBuildInputs = [ gems nodejs which git ]; + passthru = { inherit gems varDir; }; +} diff --git a/pkgs/webapps/diaspora/diaspora.json b/pkgs/webapps/diaspora/diaspora.json new file mode 100644 index 00000000..e6795aac --- /dev/null +++ b/pkgs/webapps/diaspora/diaspora.json @@ -0,0 +1,15 @@ +{ + "tag": "v0.7.10.0", + "meta": { + "name": "diaspora", + "url": "https://github.com/diaspora/diaspora", + "branch": "refs/tags/v0.7.10.0" + }, + "github": { + "owner": "diaspora", + "repo": "diaspora", + "rev": "f0085cf5bb1c45bdfba866f628153d299e56eca8", + "sha256": "02mnb40rdkk6jlnvpy61fad59gbpgnlwz1k35w4wfqdwzq0znaqp", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/diaspora/gemset.nix b/pkgs/webapps/diaspora/gemset.nix new file mode 100644 index 00000000..e47f5b74 --- /dev/null +++ b/pkgs/webapps/diaspora/gemset.nix @@ -0,0 +1,3047 @@ +{ + actioncable = { + dependencies = ["actionpack" "nio4r" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; + type = "gem"; + }; + version = "5.1.6"; + }; + active_model_serializers = { + dependencies = ["activemodel" "concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; + type = "gem"; + }; + version = "0.9.7"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; + type = "gem"; + }; + version = "5.1.6"; + }; + activemodel = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport" "arel"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord-import = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; + type = "gem"; + }; + version = "0.27.0"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; + type = "gem"; + }; + version = "5.1.6"; + }; + acts-as-taggable-on = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; + type = "gem"; + }; + version = "6.0.0"; + }; + acts_as_api = { + dependencies = ["activemodel" "activesupport" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; + type = "gem"; + }; + version = "1.0.1"; + }; + addressable = { + dependencies = ["public_suffix"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; + type = "gem"; + }; + version = "2.5.2"; + }; + aes_key_wrap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; + type = "gem"; + }; + version = "1.0.1"; + }; + arel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; + type = "gem"; + }; + version = "8.0.0"; + }; + asset_sync = { + dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; + type = "gem"; + }; + version = "2.5.0"; + }; + ast = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; + type = "gem"; + }; + version = "2.4.0"; + }; + attr_required = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; + type = "gem"; + }; + version = "1.0.1"; + }; + autoprefixer-rails = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; + type = "gem"; + }; + version = "8.6.5"; + }; + backports = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; + type = "gem"; + }; + version = "3.11.4"; + }; + bcrypt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; + type = "gem"; + }; + version = "3.1.12"; + }; + bindata = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; + type = "gem"; + }; + version = "2.4.4"; + }; + bootstrap-sass = { + dependencies = ["autoprefixer-rails" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; + type = "gem"; + }; + version = "3.3.7"; + }; + bootstrap-switch-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; + type = "gem"; + }; + version = "3.3.3"; + }; + buftok = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; + type = "gem"; + }; + version = "0.2.0"; + }; + builder = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; + type = "gem"; + }; + version = "3.2.3"; + }; + byebug = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; + type = "gem"; + }; + version = "10.0.2"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; + type = "gem"; + }; + version = "3.11.1"; + }; + carrierwave = { + dependencies = ["activemodel" "activesupport" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; + type = "gem"; + }; + version = "1.2.3"; + }; + celluloid = { + dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-essentials = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-extras = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-fsm = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-io = { + dependencies = ["celluloid" "nio4r" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-pool = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-supervision = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; + type = "gem"; + }; + version = "0.20.6"; + }; + chunky_png = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; + type = "gem"; + }; + version = "1.3.10"; + }; + cliver = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; + type = "gem"; + }; + version = "0.3.2"; + }; + coderay = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + compass = { + dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-core = { + dependencies = ["multi_json" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-import-once = { + dependencies = ["sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; + type = "gem"; + }; + version = "1.0.5"; + }; + compass-rails = { + dependencies = ["compass" "sass-rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; + type = "gem"; + }; + version = "3.1.0"; + }; + concurrent-ruby = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; + type = "gem"; + }; + version = "1.1.3"; + }; + configurate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; + type = "gem"; + }; + version = "0.3.1"; + }; + connection_pool = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; + type = "gem"; + }; + version = "2.2.2"; + }; + coveralls = { + dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; + type = "gem"; + }; + version = "0.8.22"; + }; + crack = { + dependencies = ["safe_yaml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; + type = "gem"; + }; + version = "0.4.3"; + }; + crass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; + type = "gem"; + }; + version = "1.0.4"; + }; + cucumber = { + dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; + type = "gem"; + }; + version = "3.1.2"; + }; + cucumber-api-steps = { + dependencies = ["cucumber" "jsonpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; + type = "gem"; + }; + version = "0.14.0"; + }; + cucumber-core = { + dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; + type = "gem"; + }; + version = "3.2.1"; + }; + cucumber-expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; + type = "gem"; + }; + version = "6.0.1"; + }; + cucumber-rails = { + dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; + type = "gem"; + }; + version = "1.6.0"; + }; + cucumber-tag_expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; + type = "gem"; + }; + version = "1.1.1"; + }; + cucumber-wire = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; + type = "gem"; + }; + version = "0.0.1"; + }; + database_cleaner = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; + type = "gem"; + }; + version = "1.7.0"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; + type = "gem"; + }; + version = "4.5.0"; + }; + devise_lastseenable = { + dependencies = ["devise" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; + type = "gem"; + }; + version = "0.0.6"; + }; + diaspora-prosody-config = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; + type = "gem"; + }; + version = "0.0.7"; + }; + diaspora_federation = { + dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-json_schema = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-rails = { + dependencies = ["actionpack" "diaspora_federation"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-test = { + dependencies = ["diaspora_federation" "fabrication" "uuid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; + type = "gem"; + }; + version = "0.2.5"; + }; + diff-lcs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + domain_name = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; + type = "gem"; + }; + version = "0.5.20180417"; + }; + entypo-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; + type = "gem"; + }; + version = "3.0.0"; + }; + equalizer = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; + type = "gem"; + }; + version = "0.0.11"; + }; + erubi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; + type = "gem"; + }; + version = "1.7.1"; + }; + eslintrb = { + dependencies = ["execjs" "multi_json" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; + type = "gem"; + }; + version = "2.1.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; + type = "gem"; + }; + version = "1.1.6"; + }; + ethon = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; + type = "gem"; + }; + version = "0.11.0"; + }; + excon = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; + type = "gem"; + }; + version = "0.62.0"; + }; + execjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; + type = "gem"; + }; + version = "2.7.0"; + }; + eye = { + dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; + type = "gem"; + }; + version = "0.10.0"; + }; + fabrication = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; + type = "gem"; + }; + version = "2.20.1"; + }; + factory_girl = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; + type = "gem"; + }; + version = "4.8.0"; + }; + factory_girl_rails = { + dependencies = ["factory_girl" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; + type = "gem"; + }; + version = "4.8.0"; + }; + faraday = { + dependencies = ["multipart-post"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; + type = "gem"; + }; + version = "0.15.3"; + }; + faraday-cookie_jar = { + dependencies = ["faraday" "http-cookie"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; + type = "gem"; + }; + version = "0.0.6"; + }; + faraday_middleware = { + dependencies = ["faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; + type = "gem"; + }; + version = "0.12.2"; + }; + ffi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; + type = "gem"; + }; + version = "1.9.25"; + }; + fixture_builder = { + dependencies = ["activerecord" "activesupport" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; + type = "gem"; + }; + version = "0.5.2.rc3"; + }; + fog-aws = { + dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; + type = "gem"; + }; + version = "3.3.0"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; + type = "gem"; + }; + version = "2.1.2"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-xml = { + dependencies = ["fog-core" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; + type = "gem"; + }; + version = "0.1.3"; + }; + formatador = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; + type = "gem"; + }; + version = "1.1.6"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; + type = "gem"; + }; + version = "2.3.2"; + }; + get_process_mem = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; + type = "gem"; + }; + version = "0.2.3"; + }; + gherkin = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; + type = "gem"; + }; + version = "5.1.0"; + }; + gitlab = { + dependencies = ["httparty" "terminal-table"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; + type = "gem"; + }; + version = "4.7.0"; + }; + globalid = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; + type = "gem"; + }; + version = "0.4.1"; + }; + gon = { + dependencies = ["actionpack" "multi_json" "request_store"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; + type = "gem"; + }; + version = "6.2.1"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-compat = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + guard-rubocop = { + dependencies = ["guard" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; + type = "gem"; + }; + version = "1.3.0"; + }; + haml = { + dependencies = ["temple" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; + type = "gem"; + }; + version = "5.0.4"; + }; + haml_lint = { + dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; + type = "gem"; + }; + version = "0.28.0"; + }; + hamlit = { + dependencies = ["temple" "thor" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; + type = "gem"; + }; + version = "2.9.1"; + }; + handlebars_assets = { + dependencies = ["execjs" "sprockets" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; + type = "gem"; + }; + version = "0.23.2"; + }; + hashdiff = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; + type = "gem"; + }; + version = "0.3.7"; + }; + hashie = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; + type = "gem"; + }; + version = "3.5.7"; + }; + http = { + dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; + type = "gem"; + }; + version = "3.3.0"; + }; + http-cookie = { + dependencies = ["domain_name"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; + type = "gem"; + }; + version = "1.0.3"; + }; + http-form_data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; + type = "gem"; + }; + version = "2.1.1"; + }; + http_accept_language = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + "http_parser.rb" = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; + type = "gem"; + }; + version = "0.6.0"; + }; + httparty = { + dependencies = ["mime-types" "multi_xml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; + type = "gem"; + }; + version = "0.16.3"; + }; + httpclient = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; + type = "gem"; + }; + version = "2.8.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; + type = "gem"; + }; + version = "1.1.1"; + }; + i18n-inflector = { + dependencies = ["i18n"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; + type = "gem"; + }; + version = "2.6.7"; + }; + i18n-inflector-rails = { + dependencies = ["actionpack" "i18n-inflector" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; + type = "gem"; + }; + version = "1.0.7"; + }; + ipaddress = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + jaro_winkler = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; + type = "gem"; + }; + version = "1.5.1"; + }; + jasmine = { + dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-core = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-jquery-rails = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; + type = "gem"; + }; + version = "2.0.3"; + }; + jquery-rails = { + dependencies = ["rails-dom-testing" "railties" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; + type = "gem"; + }; + version = "4.3.3"; + }; + js-routes = { + dependencies = ["railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; + type = "gem"; + }; + version = "1.4.4"; + }; + js_image_paths = { + dependencies = ["rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; + type = "gem"; + }; + version = "0.1.1"; + }; + json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; + type = "gem"; + }; + version = "2.1.0"; + }; + json-jwt = { + dependencies = ["activesupport" "aes_key_wrap" "bindata"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; + type = "gem"; + }; + version = "1.9.4"; + }; + json-schema = { + dependencies = ["addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; + type = "gem"; + }; + version = "2.8.1"; + }; + json-schema-rspec = { + dependencies = ["json-schema" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; + type = "gem"; + }; + version = "0.0.4"; + }; + jsonpath = { + dependencies = ["multi_json" "to_regexp"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; + type = "gem"; + }; + version = "0.9.6"; + }; + jwt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; + type = "gem"; + }; + version = "2.1.0"; + }; + kgio = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; + type = "gem"; + }; + version = "2.11.2"; + }; + kostya-sigar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; + type = "gem"; + }; + version = "2.0.4"; + }; + leaflet-rails = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; + type = "gem"; + }; + version = "1.3.1"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + little-plugger = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; + type = "gem"; + }; + version = "1.1.4"; + }; + logging = { + dependencies = ["little-plugger" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; + type = "gem"; + }; + version = "2.2.2"; + }; + logging-rails = { + dependencies = ["logging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; + type = "gem"; + }; + version = "0.6.0"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; + type = "gem"; + }; + version = "2.2.3"; + }; + lumberjack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + macaddr = { + dependencies = ["systemu"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; + type = "gem"; + }; + version = "1.7.1"; + }; + mail = { + dependencies = ["mini_mime"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + markdown-it-html5-embed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; + type = "gem"; + }; + version = "1.0.0"; + }; + markerb = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; + type = "gem"; + }; + version = "1.1.0"; + }; + memoizable = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; + type = "gem"; + }; + version = "0.4.2"; + }; + method_source = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; + type = "gem"; + }; + version = "3.2.2"; + }; + mime-types-data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; + type = "gem"; + }; + version = "3.2018.0812"; + }; + mini_magick = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; + type = "gem"; + }; + version = "4.9.2"; + }; + mini_mime = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; + type = "gem"; + }; + version = "1.0.1"; + }; + mini_portile2 = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; + type = "gem"; + }; + version = "2.3.0"; + }; + minitest = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; + type = "gem"; + }; + version = "5.11.3"; + }; + mobile-fu = { + dependencies = ["rack-mobile-detect" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; + type = "gem"; + }; + version = "1.4.0"; + }; + multi_json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + multi_test = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; + type = "gem"; + }; + version = "0.1.2"; + }; + multi_xml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + multipart-post = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; + type = "gem"; + }; + version = "2.0.0"; + }; + mysql2 = { + groups = ["mysql"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; + type = "gem"; + }; + version = "0.5.2"; + }; + naught = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; + type = "gem"; + }; + version = "1.1.0"; + }; + nenv = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + nio4r = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; + type = "gem"; + }; + version = "2.3.1"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; + type = "gem"; + }; + version = "1.8.5"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; + type = "gem"; + }; + version = "0.5.4"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; + type = "gem"; + }; + version = "1.4.1"; + }; + octokit = { + dependencies = ["sawyer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; + type = "gem"; + }; + version = "4.13.0"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; + type = "gem"; + }; + version = "1.8.1"; + }; + omniauth-oauth = { + dependencies = ["oauth" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; + type = "gem"; + }; + version = "1.1.0"; + }; + omniauth-oauth2 = { + dependencies = ["oauth2" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; + type = "gem"; + }; + version = "1.5.0"; + }; + omniauth-tumblr = { + dependencies = ["multi_json" "omniauth-oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; + type = "gem"; + }; + version = "1.2"; + }; + omniauth-twitter = { + dependencies = ["omniauth-oauth" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; + type = "gem"; + }; + version = "1.4.0"; + }; + omniauth-wordpress = { + dependencies = ["omniauth-oauth2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; + type = "gem"; + }; + version = "0.2.2"; + }; + open_graph_reader = { + dependencies = ["faraday" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; + type = "gem"; + }; + version = "0.6.2"; + }; + openid_connect = { + dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; + type = "gem"; + }; + version = "1.1.6"; + }; + orm_adapter = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + parallel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; + type = "gem"; + }; + version = "1.12.1"; + }; + parser = { + dependencies = ["ast"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; + type = "gem"; + }; + version = "2.5.3.0"; + }; + pg = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; + type = "gem"; + }; + version = "1.1.3"; + }; + phantomjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; + type = "gem"; + }; + version = "2.1.1.0"; + }; + poltergeist = { + dependencies = ["capybara" "cliver" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; + type = "gem"; + }; + version = "1.18.1"; + }; + powerpack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; + type = "gem"; + }; + version = "0.1.2"; + }; + pronto = { + dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; + type = "gem"; + }; + version = "0.9.5"; + }; + pronto-eslint = { + dependencies = ["eslintrb" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-haml = { + dependencies = ["haml_lint" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; + type = "gem"; + }; + version = "0.9.0"; + }; + pronto-rubocop = { + dependencies = ["pronto" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-scss = { + dependencies = ["pronto" "scss_lint"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; + type = "gem"; + }; + version = "0.9.1"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; + type = "gem"; + }; + version = "3.6.0"; + }; + public_suffix = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; + type = "gem"; + }; + version = "3.0.3"; + }; + raabro = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; + type = "gem"; + }; + version = "1.1.6"; + }; + rack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-cors = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; + type = "gem"; + }; + version = "1.0.2"; + }; + rack-google-analytics = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; + type = "gem"; + }; + version = "1.2.0"; + }; + rack-mobile-detect = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; + type = "gem"; + }; + version = "0.4.0"; + }; + rack-oauth2 = { + dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; + type = "gem"; + }; + version = "1.9.3"; + }; + rack-piwik = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; + type = "gem"; + }; + version = "0.3.0"; + }; + rack-protection = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; + type = "gem"; + }; + version = "2.0.4"; + }; + rack-rewrite = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; + type = "gem"; + }; + version = "1.5.1"; + }; + rack-ssl = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; + type = "gem"; + }; + version = "1.4.1"; + }; + rack-test = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; + type = "gem"; + }; + version = "5.1.6"; + }; + rails-assets-autosize = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; + type = "gem"; + }; + version = "4.0.2"; + }; + rails-assets-backbone = { + dependencies = ["rails-assets-underscore"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; + type = "gem"; + }; + version = "1.3.3"; + }; + rails-assets-blueimp-gallery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; + type = "gem"; + }; + version = "2.33.0"; + }; + rails-assets-bootstrap = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; + type = "gem"; + }; + version = "3.3.7"; + }; + rails-assets-bootstrap-markdown = { + dependencies = ["rails-assets-bootstrap"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; + type = "gem"; + }; + version = "2.10.0"; + }; + rails-assets-corejs-typeahead = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; + type = "gem"; + }; + version = "1.2.1"; + }; + rails-assets-diaspora_jsxc = { + dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; + type = "gem"; + }; + version = "0.1.5.develop.7"; + }; + rails-assets-emojione = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; + type = "gem"; + }; + version = "2.0.1"; + }; + "rails-assets-favico.js" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; + type = "gem"; + }; + version = "0.3.10"; + }; + rails-assets-fine-uploader = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; + type = "gem"; + }; + version = "5.13.0"; + }; + rails-assets-highlightjs = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; + type = "gem"; + }; + version = "9.12.0"; + }; + rails-assets-jasmine = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; + type = "gem"; + }; + version = "3.3.0"; + }; + rails-assets-jasmine-ajax = { + dependencies = ["rails-assets-jasmine"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; + type = "gem"; + }; + version = "3.4.0"; + }; + rails-assets-jquery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; + type = "gem"; + }; + version = "3.3.1"; + }; + rails-assets-jquery-colorbox = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; + type = "gem"; + }; + version = "1.6.4"; + }; + rails-assets-jquery-fullscreen-plugin = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; + type = "gem"; + }; + version = "0.5.0"; + }; + rails-assets-jquery-placeholder = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; + type = "gem"; + }; + version = "2.3.1"; + }; + rails-assets-jquery-textchange = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; + type = "gem"; + }; + version = "0.2.3"; + }; + "rails-assets-jquery.are-you-sure" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; + type = "gem"; + }; + version = "1.9.0"; + }; + "rails-assets-jquery.slimscroll" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; + type = "gem"; + }; + version = "1.3.8"; + }; + "rails-assets-jquery.ui" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; + type = "gem"; + }; + version = "1.11.4"; + }; + rails-assets-markdown-it = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; + type = "gem"; + }; + version = "8.4.2"; + }; + rails-assets-markdown-it--markdown-it-for-inline = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; + type = "gem"; + }; + version = "0.1.1"; + }; + rails-assets-markdown-it-diaspora-mention = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; + type = "gem"; + }; + version = "1.2.0"; + }; + rails-assets-markdown-it-hashtag = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; + type = "gem"; + }; + version = "0.4.0"; + }; + rails-assets-markdown-it-sanitizer = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; + type = "gem"; + }; + version = "0.4.3"; + }; + rails-assets-markdown-it-sub = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-markdown-it-sup = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-underscore = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; + type = "gem"; + }; + version = "1.9.1"; + }; + rails-assets-utatti-perfect-scrollbar = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; + type = "gem"; + }; + version = "1.4.0"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; + type = "gem"; + }; + version = "1.0.2"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; + type = "gem"; + }; + version = "5.1.2"; + }; + rails-timeago = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; + type = "gem"; + }; + version = "2.16.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; + type = "gem"; + }; + version = "5.1.6"; + }; + rainbow = { + dependencies = ["rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; + type = "gem"; + }; + version = "2.2.2"; + }; + raindrops = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; + type = "gem"; + }; + version = "0.19.0"; + }; + rake = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; + type = "gem"; + }; + version = "12.3.1"; + }; + rb-fsevent = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; + type = "gem"; + }; + version = "0.9.10"; + }; + redcarpet = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; + type = "gem"; + }; + version = "3.4.0"; + }; + redis = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; + type = "gem"; + }; + version = "3.3.5"; + }; + regexp_parser = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; + type = "gem"; + }; + version = "1.3.0"; + }; + request_store = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; + type = "gem"; + }; + version = "1.4.1"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; + type = "gem"; + }; + version = "2.4.0"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-json_expectations = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; + type = "gem"; + }; + version = "2.1.0"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; + type = "gem"; + }; + version = "3.8.1"; + }; + rspec-support = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; + type = "gem"; + }; + version = "3.8.0"; + }; + rubocop = { + dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; + type = "gem"; + }; + version = "0.60.0"; + }; + ruby-oembed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; + type = "gem"; + }; + version = "0.12.0"; + }; + ruby-progressbar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; + type = "gem"; + }; + version = "1.10.0"; + }; + ruby_dep = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + rubyzip = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; + type = "gem"; + }; + version = "1.2.2"; + }; + rugged = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; + type = "gem"; + }; + version = "0.27.5"; + }; + safe_yaml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; + type = "gem"; + }; + version = "1.0.4"; + }; + sass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; + type = "gem"; + }; + version = "3.4.25"; + }; + sass-rails = { + dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; + type = "gem"; + }; + version = "5.0.7"; + }; + sawyer = { + dependencies = ["addressable" "faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; + type = "gem"; + }; + version = "0.8.1"; + }; + scss_lint = { + dependencies = ["rake" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; + type = "gem"; + }; + version = "0.55.0"; + }; + secure_headers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; + type = "gem"; + }; + version = "6.0.0"; + }; + shellany = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; + type = "gem"; + }; + version = "3.1.2"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack-protection" "redis"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; + type = "gem"; + }; + version = "5.2.3"; + }; + sidekiq-cron = { + dependencies = ["fugit" "sidekiq"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; + type = "gem"; + }; + version = "1.0.4"; + }; + simple_captcha2 = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; + type = "gem"; + }; + version = "0.4.3"; + }; + simple_oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; + type = "gem"; + }; + version = "0.3.1"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinon-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; + type = "gem"; + }; + version = "1.15.0"; + }; + spring = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; + type = "gem"; + }; + version = "2.0.2"; + }; + spring-commands-cucumber = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; + type = "gem"; + }; + version = "1.0.1"; + }; + spring-commands-rspec = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; + type = "gem"; + }; + version = "1.0.4"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; + type = "gem"; + }; + version = "3.2.1"; + }; + state_machines = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; + type = "gem"; + }; + version = "0.5.0"; + }; + string-direction = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; + type = "gem"; + }; + version = "1.2.1"; + }; + swd = { + dependencies = ["activesupport" "attr_required" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; + type = "gem"; + }; + version = "1.1.2"; + }; + sysexits = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; + type = "gem"; + }; + version = "1.2.0"; + }; + systemu = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; + type = "gem"; + }; + version = "2.6.5"; + }; + temple = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; + type = "gem"; + }; + version = "0.8.0"; + }; + term-ansicolor = { + dependencies = ["tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; + type = "gem"; + }; + version = "1.7.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; + type = "gem"; + }; + version = "1.8.0"; + }; + thor = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; + type = "gem"; + }; + version = "0.19.4"; + }; + thread_safe = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; + type = "gem"; + }; + version = "0.3.6"; + }; + tilt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; + type = "gem"; + }; + version = "2.0.8"; + }; + timecop = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; + type = "gem"; + }; + version = "0.9.1"; + }; + timers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; + type = "gem"; + }; + version = "4.2.0"; + }; + tins = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; + type = "gem"; + }; + version = "1.20.2"; + }; + to_regexp = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; + type = "gem"; + }; + version = "0.2.1"; + }; + turbo_dev_assets = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; + type = "gem"; + }; + version = "0.0.2"; + }; + twitter = { + dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; + type = "gem"; + }; + version = "6.2.0"; + }; + twitter-text = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; + type = "gem"; + }; + version = "1.14.7"; + }; + typhoeus = { + dependencies = ["ethon"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; + type = "gem"; + }; + version = "1.3.1"; + }; + tzinfo = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; + type = "gem"; + }; + version = "1.2.5"; + }; + uglifier = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; + type = "gem"; + }; + version = "4.1.19"; + }; + unf = { + dependencies = ["unf_ext"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; + type = "gem"; + }; + version = "0.0.7.5"; + }; + unicode-display_width = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; + type = "gem"; + }; + version = "1.4.0"; + }; + unicorn = { + dependencies = ["kgio" "raindrops"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; + type = "gem"; + }; + version = "5.4.1"; + }; + unicorn-worker-killer = { + dependencies = ["get_process_mem" "unicorn"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; + type = "gem"; + }; + version = "0.4.4"; + }; + uuid = { + dependencies = ["macaddr"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; + type = "gem"; + }; + version = "2.3.9"; + }; + valid = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; + type = "gem"; + }; + version = "1.2.0"; + }; + validate_email = { + dependencies = ["activemodel" "mail"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; + type = "gem"; + }; + version = "0.1.6"; + }; + validate_url = { + dependencies = ["activemodel" "addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; + type = "gem"; + }; + version = "1.0.2"; + }; + versionist = { + dependencies = ["activesupport" "railties" "yard"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; + type = "gem"; + }; + version = "1.7.0"; + }; + warden = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; + type = "gem"; + }; + version = "1.2.8"; + }; + webfinger = { + dependencies = ["activesupport" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; + type = "gem"; + }; + version = "1.1.0"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; + type = "gem"; + }; + version = "3.4.2"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; + type = "gem"; + }; + version = "0.6.5"; + }; + websocket-extensions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; + type = "gem"; + }; + version = "0.1.3"; + }; + will_paginate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; + type = "gem"; + }; + version = "3.1.6"; + }; + xpath = { + dependencies = ["nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + yard = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; + type = "gem"; + }; + version = "0.9.16"; + }; +} diff --git a/pkgs/webapps/diaspora/gemset_ldap.nix b/pkgs/webapps/diaspora/gemset_ldap.nix new file mode 100644 index 00000000..d7892f8d --- /dev/null +++ b/pkgs/webapps/diaspora/gemset_ldap.nix @@ -0,0 +1,3056 @@ +{ + actioncable = { + dependencies = ["actionpack" "nio4r" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd"; + type = "gem"; + }; + version = "5.1.6"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081"; + type = "gem"; + }; + version = "5.1.6"; + }; + active_model_serializers = { + dependencies = ["activemodel" "concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z"; + type = "gem"; + }; + version = "0.9.7"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2"; + type = "gem"; + }; + version = "5.1.6"; + }; + activemodel = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport" "arel"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x"; + type = "gem"; + }; + version = "5.1.6"; + }; + activerecord-import = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6"; + type = "gem"; + }; + version = "0.27.0"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll"; + type = "gem"; + }; + version = "5.1.6"; + }; + acts-as-taggable-on = { + dependencies = ["activerecord"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl"; + type = "gem"; + }; + version = "6.0.0"; + }; + acts_as_api = { + dependencies = ["activemodel" "activesupport" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc"; + type = "gem"; + }; + version = "1.0.1"; + }; + addressable = { + dependencies = ["public_suffix"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; + type = "gem"; + }; + version = "2.5.2"; + }; + aes_key_wrap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07"; + type = "gem"; + }; + version = "1.0.1"; + }; + arel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"; + type = "gem"; + }; + version = "8.0.0"; + }; + asset_sync = { + dependencies = ["activemodel" "fog-core" "mime-types" "unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx"; + type = "gem"; + }; + version = "2.5.0"; + }; + ast = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; + type = "gem"; + }; + version = "2.4.0"; + }; + attr_required = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2"; + type = "gem"; + }; + version = "1.0.1"; + }; + autoprefixer-rails = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3"; + type = "gem"; + }; + version = "8.6.5"; + }; + backports = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"; + type = "gem"; + }; + version = "3.11.4"; + }; + bcrypt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; + type = "gem"; + }; + version = "3.1.12"; + }; + bindata = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy"; + type = "gem"; + }; + version = "2.4.4"; + }; + bootstrap-sass = { + dependencies = ["autoprefixer-rails" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"; + type = "gem"; + }; + version = "3.3.7"; + }; + bootstrap-switch-rails = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l"; + type = "gem"; + }; + version = "3.3.3"; + }; + buftok = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs"; + type = "gem"; + }; + version = "0.2.0"; + }; + builder = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; + type = "gem"; + }; + version = "3.2.3"; + }; + byebug = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; + type = "gem"; + }; + version = "10.0.2"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m"; + type = "gem"; + }; + version = "3.11.1"; + }; + carrierwave = { + dependencies = ["activemodel" "activesupport" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs"; + type = "gem"; + }; + version = "1.2.3"; + }; + celluloid = { + dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-essentials = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-extras = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-fsm = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-io = { + dependencies = ["celluloid" "nio4r" "timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314"; + type = "gem"; + }; + version = "0.17.3"; + }; + celluloid-pool = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c"; + type = "gem"; + }; + version = "0.20.5"; + }; + celluloid-supervision = { + dependencies = ["timers"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw"; + type = "gem"; + }; + version = "0.20.6"; + }; + chunky_png = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; + type = "gem"; + }; + version = "1.3.10"; + }; + cliver = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"; + type = "gem"; + }; + version = "0.3.2"; + }; + coderay = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + compass = { + dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-core = { + dependencies = ["multi_json" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a"; + type = "gem"; + }; + version = "1.0.3"; + }; + compass-import-once = { + dependencies = ["sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq"; + type = "gem"; + }; + version = "1.0.5"; + }; + compass-rails = { + dependencies = ["compass" "sass-rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr"; + type = "gem"; + }; + version = "3.1.0"; + }; + concurrent-ruby = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb"; + type = "gem"; + }; + version = "1.1.3"; + }; + configurate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1"; + type = "gem"; + }; + version = "0.3.1"; + }; + connection_pool = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; + type = "gem"; + }; + version = "2.2.2"; + }; + coveralls = { + dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"; + type = "gem"; + }; + version = "0.8.22"; + }; + crack = { + dependencies = ["safe_yaml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; + type = "gem"; + }; + version = "0.4.3"; + }; + crass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; + type = "gem"; + }; + version = "1.0.4"; + }; + cucumber = { + dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j"; + type = "gem"; + }; + version = "3.1.2"; + }; + cucumber-api-steps = { + dependencies = ["cucumber" "jsonpath"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw"; + type = "gem"; + }; + version = "0.14.0"; + }; + cucumber-core = { + dependencies = ["backports" "cucumber-tag_expressions" "gherkin"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c"; + type = "gem"; + }; + version = "3.2.1"; + }; + cucumber-expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw"; + type = "gem"; + }; + version = "6.0.1"; + }; + cucumber-rails = { + dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7"; + type = "gem"; + }; + version = "1.6.0"; + }; + cucumber-tag_expressions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc"; + type = "gem"; + }; + version = "1.1.1"; + }; + cucumber-wire = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"; + type = "gem"; + }; + version = "0.0.1"; + }; + database_cleaner = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x"; + type = "gem"; + }; + version = "1.7.0"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; + type = "gem"; + }; + version = "4.5.0"; + }; + devise_lastseenable = { + dependencies = ["devise" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y"; + type = "gem"; + }; + version = "0.0.6"; + }; + diaspora-prosody-config = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp"; + type = "gem"; + }; + version = "0.0.7"; + }; + diaspora_federation = { + dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-json_schema = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-rails = { + dependencies = ["actionpack" "diaspora_federation"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h"; + type = "gem"; + }; + version = "0.2.5"; + }; + diaspora_federation-test = { + dependencies = ["diaspora_federation" "fabrication" "uuid"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4"; + type = "gem"; + }; + version = "0.2.5"; + }; + diff-lcs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + domain_name = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; + type = "gem"; + }; + version = "0.5.20180417"; + }; + entypo-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6"; + type = "gem"; + }; + version = "3.0.0"; + }; + equalizer = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4"; + type = "gem"; + }; + version = "0.0.11"; + }; + erubi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1"; + type = "gem"; + }; + version = "1.7.1"; + }; + eslintrb = { + dependencies = ["execjs" "multi_json" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx"; + type = "gem"; + }; + version = "2.1.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; + type = "gem"; + }; + version = "1.1.6"; + }; + ethon = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48"; + type = "gem"; + }; + version = "0.11.0"; + }; + excon = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; + type = "gem"; + }; + version = "0.62.0"; + }; + execjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1"; + type = "gem"; + }; + version = "2.7.0"; + }; + eye = { + dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk"; + type = "gem"; + }; + version = "0.10.0"; + }; + fabrication = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; + type = "gem"; + }; + version = "2.20.1"; + }; + factory_girl = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla"; + type = "gem"; + }; + version = "4.8.0"; + }; + factory_girl_rails = { + dependencies = ["factory_girl" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv"; + type = "gem"; + }; + version = "4.8.0"; + }; + faraday = { + dependencies = ["multipart-post"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52"; + type = "gem"; + }; + version = "0.15.3"; + }; + faraday-cookie_jar = { + dependencies = ["faraday" "http-cookie"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6"; + type = "gem"; + }; + version = "0.0.6"; + }; + faraday_middleware = { + dependencies = ["faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d"; + type = "gem"; + }; + version = "0.12.2"; + }; + ffi = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; + type = "gem"; + }; + version = "1.9.25"; + }; + fixture_builder = { + dependencies = ["activerecord" "activesupport" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627"; + type = "gem"; + }; + version = "0.5.2.rc3"; + }; + fog-aws = { + dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs"; + type = "gem"; + }; + version = "3.3.0"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador" "mime-types"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8"; + type = "gem"; + }; + version = "2.1.2"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-xml = { + dependencies = ["fog-core" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n"; + type = "gem"; + }; + version = "0.1.3"; + }; + formatador = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; + type = "gem"; + }; + version = "1.1.6"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; + type = "gem"; + }; + version = "2.3.2"; + }; + get_process_mem = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; + type = "gem"; + }; + version = "0.2.3"; + }; + gherkin = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s"; + type = "gem"; + }; + version = "5.1.0"; + }; + gitlab = { + dependencies = ["httparty" "terminal-table"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34"; + type = "gem"; + }; + version = "4.7.0"; + }; + globalid = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; + type = "gem"; + }; + version = "0.4.1"; + }; + gon = { + dependencies = ["actionpack" "multi_json" "request_store"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl"; + type = "gem"; + }; + version = "6.2.1"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-compat = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + guard-rubocop = { + dependencies = ["guard" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp"; + type = "gem"; + }; + version = "1.3.0"; + }; + haml = { + dependencies = ["temple" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"; + type = "gem"; + }; + version = "5.0.4"; + }; + haml_lint = { + dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv"; + type = "gem"; + }; + version = "0.28.0"; + }; + hamlit = { + dependencies = ["temple" "thor" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf"; + type = "gem"; + }; + version = "2.9.1"; + }; + handlebars_assets = { + dependencies = ["execjs" "sprockets" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca"; + type = "gem"; + }; + version = "0.23.2"; + }; + hashdiff = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; + type = "gem"; + }; + version = "0.3.7"; + }; + hashie = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb"; + type = "gem"; + }; + version = "3.5.7"; + }; + http = { + dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; + type = "gem"; + }; + version = "3.3.0"; + }; + http-cookie = { + dependencies = ["domain_name"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; + type = "gem"; + }; + version = "1.0.3"; + }; + http-form_data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; + type = "gem"; + }; + version = "2.1.1"; + }; + http_accept_language = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + "http_parser.rb" = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"; + type = "gem"; + }; + version = "0.6.0"; + }; + httparty = { + dependencies = ["mime-types" "multi_xml"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730"; + type = "gem"; + }; + version = "0.16.3"; + }; + httpclient = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"; + type = "gem"; + }; + version = "2.8.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7"; + type = "gem"; + }; + version = "1.1.1"; + }; + i18n-inflector = { + dependencies = ["i18n"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g"; + type = "gem"; + }; + version = "2.6.7"; + }; + i18n-inflector-rails = { + dependencies = ["actionpack" "i18n-inflector" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk"; + type = "gem"; + }; + version = "1.0.7"; + }; + ipaddress = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + jaro_winkler = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah"; + type = "gem"; + }; + version = "1.5.1"; + }; + jasmine = { + dependencies = ["jasmine-core" "phantomjs" "rack" "rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-core = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv"; + type = "gem"; + }; + version = "3.3.0"; + }; + jasmine-jquery-rails = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv"; + type = "gem"; + }; + version = "2.0.3"; + }; + jquery-rails = { + dependencies = ["rails-dom-testing" "railties" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8"; + type = "gem"; + }; + version = "4.3.3"; + }; + js-routes = { + dependencies = ["railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm"; + type = "gem"; + }; + version = "1.4.4"; + }; + js_image_paths = { + dependencies = ["rails" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf"; + type = "gem"; + }; + version = "0.1.1"; + }; + json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; + type = "gem"; + }; + version = "2.1.0"; + }; + json-jwt = { + dependencies = ["activesupport" "aes_key_wrap" "bindata"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r"; + type = "gem"; + }; + version = "1.9.4"; + }; + json-schema = { + dependencies = ["addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"; + type = "gem"; + }; + version = "2.8.1"; + }; + json-schema-rspec = { + dependencies = ["json-schema" "rspec"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9"; + type = "gem"; + }; + version = "0.0.4"; + }; + jsonpath = { + dependencies = ["multi_json" "to_regexp"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d"; + type = "gem"; + }; + version = "0.9.6"; + }; + jwt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; + type = "gem"; + }; + version = "2.1.0"; + }; + kgio = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"; + type = "gem"; + }; + version = "2.11.2"; + }; + kostya-sigar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb"; + type = "gem"; + }; + version = "2.0.4"; + }; + leaflet-rails = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb"; + type = "gem"; + }; + version = "1.3.1"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + little-plugger = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym"; + type = "gem"; + }; + version = "1.1.4"; + }; + logging = { + dependencies = ["little-plugger" "multi_json"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn"; + type = "gem"; + }; + version = "2.2.2"; + }; + logging-rails = { + dependencies = ["logging"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239"; + type = "gem"; + }; + version = "0.6.0"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; + type = "gem"; + }; + version = "2.2.3"; + }; + lumberjack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + macaddr = { + dependencies = ["systemu"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b"; + type = "gem"; + }; + version = "1.7.1"; + }; + mail = { + dependencies = ["mini_mime"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + markdown-it-html5-embed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c"; + type = "gem"; + }; + version = "1.0.0"; + }; + markerb = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76"; + type = "gem"; + }; + version = "1.1.0"; + }; + memoizable = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c"; + type = "gem"; + }; + version = "0.4.2"; + }; + method_source = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; + type = "gem"; + }; + version = "3.2.2"; + }; + mime-types-data = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; + type = "gem"; + }; + version = "3.2018.0812"; + }; + mini_magick = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p"; + type = "gem"; + }; + version = "4.9.2"; + }; + mini_mime = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; + type = "gem"; + }; + version = "1.0.1"; + }; + mini_portile2 = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11"; + type = "gem"; + }; + version = "2.3.0"; + }; + minitest = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; + type = "gem"; + }; + version = "5.11.3"; + }; + mobile-fu = { + dependencies = ["rack-mobile-detect" "rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i"; + type = "gem"; + }; + version = "1.4.0"; + }; + multi_json = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + multi_test = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"; + type = "gem"; + }; + version = "0.1.2"; + }; + multi_xml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + multipart-post = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; + type = "gem"; + }; + version = "2.0.0"; + }; + mysql2 = { + groups = ["mysql"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4"; + type = "gem"; + }; + version = "0.5.2"; + }; + naught = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg"; + type = "gem"; + }; + version = "1.1.0"; + }; + nenv = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + net-ldap = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh"; + type = "gem"; + }; + version = "0.16.1"; + }; + nio4r = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; + type = "gem"; + }; + version = "2.3.1"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz"; + type = "gem"; + }; + version = "1.8.5"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y"; + type = "gem"; + }; + version = "0.5.4"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"; + type = "gem"; + }; + version = "1.4.1"; + }; + octokit = { + dependencies = ["sawyer"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6"; + type = "gem"; + }; + version = "4.13.0"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"; + type = "gem"; + }; + version = "1.8.1"; + }; + omniauth-oauth = { + dependencies = ["oauth" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037"; + type = "gem"; + }; + version = "1.1.0"; + }; + omniauth-oauth2 = { + dependencies = ["oauth2" "omniauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr"; + type = "gem"; + }; + version = "1.5.0"; + }; + omniauth-tumblr = { + dependencies = ["multi_json" "omniauth-oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w"; + type = "gem"; + }; + version = "1.2"; + }; + omniauth-twitter = { + dependencies = ["omniauth-oauth" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; + type = "gem"; + }; + version = "1.4.0"; + }; + omniauth-wordpress = { + dependencies = ["omniauth-oauth2"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303"; + type = "gem"; + }; + version = "0.2.2"; + }; + open_graph_reader = { + dependencies = ["faraday" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21"; + type = "gem"; + }; + version = "0.6.2"; + }; + openid_connect = { + dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd"; + type = "gem"; + }; + version = "1.1.6"; + }; + orm_adapter = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + parallel = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"; + type = "gem"; + }; + version = "1.12.1"; + }; + parser = { + dependencies = ["ast"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f"; + type = "gem"; + }; + version = "2.5.3.0"; + }; + pg = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"; + type = "gem"; + }; + version = "1.1.3"; + }; + phantomjs = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk"; + type = "gem"; + }; + version = "2.1.1.0"; + }; + poltergeist = { + dependencies = ["capybara" "cliver" "websocket-driver"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95"; + type = "gem"; + }; + version = "1.18.1"; + }; + powerpack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; + type = "gem"; + }; + version = "0.1.2"; + }; + pronto = { + dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz"; + type = "gem"; + }; + version = "0.9.5"; + }; + pronto-eslint = { + dependencies = ["eslintrb" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-haml = { + dependencies = ["haml_lint" "pronto"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg"; + type = "gem"; + }; + version = "0.9.0"; + }; + pronto-rubocop = { + dependencies = ["pronto" "rubocop"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy"; + type = "gem"; + }; + version = "0.9.1"; + }; + pronto-scss = { + dependencies = ["pronto" "scss_lint"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za"; + type = "gem"; + }; + version = "0.9.1"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; + type = "gem"; + }; + version = "3.6.0"; + }; + public_suffix = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; + type = "gem"; + }; + version = "3.0.3"; + }; + raabro = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; + type = "gem"; + }; + version = "1.1.6"; + }; + rack = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-cors = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; + type = "gem"; + }; + version = "1.0.2"; + }; + rack-google-analytics = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj"; + type = "gem"; + }; + version = "1.2.0"; + }; + rack-mobile-detect = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5"; + type = "gem"; + }; + version = "0.4.0"; + }; + rack-oauth2 = { + dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii"; + type = "gem"; + }; + version = "1.9.3"; + }; + rack-piwik = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z"; + type = "gem"; + }; + version = "0.3.0"; + }; + rack-protection = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq"; + type = "gem"; + }; + version = "2.0.4"; + }; + rack-rewrite = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838"; + type = "gem"; + }; + version = "1.5.1"; + }; + rack-ssl = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp"; + type = "gem"; + }; + version = "1.4.1"; + }; + rack-test = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q"; + type = "gem"; + }; + version = "5.1.6"; + }; + rails-assets-autosize = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib"; + type = "gem"; + }; + version = "4.0.2"; + }; + rails-assets-backbone = { + dependencies = ["rails-assets-underscore"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id"; + type = "gem"; + }; + version = "1.3.3"; + }; + rails-assets-blueimp-gallery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq"; + type = "gem"; + }; + version = "2.33.0"; + }; + rails-assets-bootstrap = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v"; + type = "gem"; + }; + version = "3.3.7"; + }; + rails-assets-bootstrap-markdown = { + dependencies = ["rails-assets-bootstrap"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3"; + type = "gem"; + }; + version = "2.10.0"; + }; + rails-assets-corejs-typeahead = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg"; + type = "gem"; + }; + version = "1.2.1"; + }; + rails-assets-diaspora_jsxc = { + dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi"; + type = "gem"; + }; + version = "0.1.5.develop.7"; + }; + rails-assets-emojione = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52"; + type = "gem"; + }; + version = "2.0.1"; + }; + "rails-assets-favico.js" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv"; + type = "gem"; + }; + version = "0.3.10"; + }; + rails-assets-fine-uploader = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv"; + type = "gem"; + }; + version = "5.13.0"; + }; + rails-assets-highlightjs = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp"; + type = "gem"; + }; + version = "9.12.0"; + }; + rails-assets-jasmine = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5"; + type = "gem"; + }; + version = "3.3.0"; + }; + rails-assets-jasmine-ajax = { + dependencies = ["rails-assets-jasmine"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg"; + type = "gem"; + }; + version = "3.4.0"; + }; + rails-assets-jquery = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y"; + type = "gem"; + }; + version = "3.3.1"; + }; + rails-assets-jquery-colorbox = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp"; + type = "gem"; + }; + version = "1.6.4"; + }; + rails-assets-jquery-fullscreen-plugin = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58"; + type = "gem"; + }; + version = "0.5.0"; + }; + rails-assets-jquery-placeholder = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi"; + type = "gem"; + }; + version = "2.3.1"; + }; + rails-assets-jquery-textchange = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj"; + type = "gem"; + }; + version = "0.2.3"; + }; + "rails-assets-jquery.are-you-sure" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0"; + type = "gem"; + }; + version = "1.9.0"; + }; + "rails-assets-jquery.slimscroll" = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998"; + type = "gem"; + }; + version = "1.3.8"; + }; + "rails-assets-jquery.ui" = { + dependencies = ["rails-assets-jquery"]; + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa"; + type = "gem"; + }; + version = "1.11.4"; + }; + rails-assets-markdown-it = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9"; + type = "gem"; + }; + version = "8.4.2"; + }; + rails-assets-markdown-it--markdown-it-for-inline = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl"; + type = "gem"; + }; + version = "0.1.1"; + }; + rails-assets-markdown-it-diaspora-mention = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig"; + type = "gem"; + }; + version = "1.2.0"; + }; + rails-assets-markdown-it-hashtag = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk"; + type = "gem"; + }; + version = "0.4.0"; + }; + rails-assets-markdown-it-sanitizer = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36"; + type = "gem"; + }; + version = "0.4.3"; + }; + rails-assets-markdown-it-sub = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-markdown-it-sup = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig"; + type = "gem"; + }; + version = "1.0.0"; + }; + rails-assets-underscore = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc"; + type = "gem"; + }; + version = "1.9.1"; + }; + rails-assets-utatti-perfect-scrollbar = { + platforms = []; + source = { + remotes = ["https://rails-assets.org"]; + sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v"; + type = "gem"; + }; + version = "1.4.0"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy"; + type = "gem"; + }; + version = "1.0.2"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; + type = "gem"; + }; + version = "5.1.2"; + }; + rails-timeago = { + dependencies = ["actionpack" "activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv"; + type = "gem"; + }; + version = "2.16.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8"; + type = "gem"; + }; + version = "5.1.6"; + }; + rainbow = { + dependencies = ["rake"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w"; + type = "gem"; + }; + version = "2.2.2"; + }; + raindrops = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"; + type = "gem"; + }; + version = "0.19.0"; + }; + rake = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"; + type = "gem"; + }; + version = "12.3.1"; + }; + rb-fsevent = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; + type = "gem"; + }; + version = "0.9.10"; + }; + redcarpet = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; + type = "gem"; + }; + version = "3.4.0"; + }; + redis = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv"; + type = "gem"; + }; + version = "3.3.5"; + }; + regexp_parser = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; + type = "gem"; + }; + version = "1.3.0"; + }; + request_store = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; + type = "gem"; + }; + version = "1.4.1"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; + type = "gem"; + }; + version = "2.4.0"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-json_expectations = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn"; + type = "gem"; + }; + version = "2.1.0"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p"; + type = "gem"; + }; + version = "3.8.1"; + }; + rspec-support = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; + type = "gem"; + }; + version = "3.8.0"; + }; + rubocop = { + dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i"; + type = "gem"; + }; + version = "0.60.0"; + }; + ruby-oembed = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0"; + type = "gem"; + }; + version = "0.12.0"; + }; + ruby-progressbar = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; + type = "gem"; + }; + version = "1.10.0"; + }; + ruby_dep = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + rubyzip = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj"; + type = "gem"; + }; + version = "1.2.2"; + }; + rugged = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6"; + type = "gem"; + }; + version = "0.27.5"; + }; + safe_yaml = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; + type = "gem"; + }; + version = "1.0.4"; + }; + sass = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw"; + type = "gem"; + }; + version = "3.4.25"; + }; + sass-rails = { + dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"; + type = "gem"; + }; + version = "5.0.7"; + }; + sawyer = { + dependencies = ["addressable" "faraday"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; + type = "gem"; + }; + version = "0.8.1"; + }; + scss_lint = { + dependencies = ["rake" "sass"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp"; + type = "gem"; + }; + version = "0.55.0"; + }; + secure_headers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5"; + type = "gem"; + }; + version = "6.0.0"; + }; + shellany = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"; + type = "gem"; + }; + version = "3.1.2"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack-protection" "redis"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26"; + type = "gem"; + }; + version = "5.2.3"; + }; + sidekiq-cron = { + dependencies = ["fugit" "sidekiq"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0"; + type = "gem"; + }; + version = "1.0.4"; + }; + simple_captcha2 = { + dependencies = ["rails"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3"; + type = "gem"; + }; + version = "0.4.3"; + }; + simple_oauth = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l"; + type = "gem"; + }; + version = "0.3.1"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinon-rails = { + dependencies = ["railties"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb"; + type = "gem"; + }; + version = "1.15.0"; + }; + spring = { + dependencies = ["activesupport"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75"; + type = "gem"; + }; + version = "2.0.2"; + }; + spring-commands-cucumber = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a"; + type = "gem"; + }; + version = "1.0.1"; + }; + spring-commands-rspec = { + dependencies = ["spring"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2"; + type = "gem"; + }; + version = "1.0.4"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; + type = "gem"; + }; + version = "3.2.1"; + }; + state_machines = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3"; + type = "gem"; + }; + version = "0.5.0"; + }; + string-direction = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj"; + type = "gem"; + }; + version = "1.2.1"; + }; + swd = { + dependencies = ["activesupport" "attr_required" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd"; + type = "gem"; + }; + version = "1.1.2"; + }; + sysexits = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr"; + type = "gem"; + }; + version = "1.2.0"; + }; + systemu = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"; + type = "gem"; + }; + version = "2.6.5"; + }; + temple = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; + type = "gem"; + }; + version = "0.8.0"; + }; + term-ansicolor = { + dependencies = ["tins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d"; + type = "gem"; + }; + version = "1.7.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; + type = "gem"; + }; + version = "1.8.0"; + }; + thor = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; + type = "gem"; + }; + version = "0.19.4"; + }; + thread_safe = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; + type = "gem"; + }; + version = "0.3.6"; + }; + tilt = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; + type = "gem"; + }; + version = "2.0.8"; + }; + timecop = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp"; + type = "gem"; + }; + version = "0.9.1"; + }; + timers = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; + type = "gem"; + }; + version = "4.2.0"; + }; + tins = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj"; + type = "gem"; + }; + version = "1.20.2"; + }; + to_regexp = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v"; + type = "gem"; + }; + version = "0.2.1"; + }; + turbo_dev_assets = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx"; + type = "gem"; + }; + version = "0.0.2"; + }; + twitter = { + dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5"; + type = "gem"; + }; + version = "6.2.0"; + }; + twitter-text = { + dependencies = ["unf"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; + type = "gem"; + }; + version = "1.14.7"; + }; + typhoeus = { + dependencies = ["ethon"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5"; + type = "gem"; + }; + version = "1.3.1"; + }; + tzinfo = { + dependencies = ["thread_safe"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; + type = "gem"; + }; + version = "1.2.5"; + }; + uglifier = { + dependencies = ["execjs"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1"; + type = "gem"; + }; + version = "4.1.19"; + }; + unf = { + dependencies = ["unf_ext"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; + type = "gem"; + }; + version = "0.0.7.5"; + }; + unicode-display_width = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57"; + type = "gem"; + }; + version = "1.4.0"; + }; + unicorn = { + dependencies = ["kgio" "raindrops"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak"; + type = "gem"; + }; + version = "5.4.1"; + }; + unicorn-worker-killer = { + dependencies = ["get_process_mem" "unicorn"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva"; + type = "gem"; + }; + version = "0.4.4"; + }; + uuid = { + dependencies = ["macaddr"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f"; + type = "gem"; + }; + version = "2.3.9"; + }; + valid = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3"; + type = "gem"; + }; + version = "1.2.0"; + }; + validate_email = { + dependencies = ["activemodel" "mail"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx"; + type = "gem"; + }; + version = "0.1.6"; + }; + validate_url = { + dependencies = ["activemodel" "addressable"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh"; + type = "gem"; + }; + version = "1.0.2"; + }; + versionist = { + dependencies = ["activesupport" "railties" "yard"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m"; + type = "gem"; + }; + version = "1.7.0"; + }; + warden = { + dependencies = ["rack"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"; + type = "gem"; + }; + version = "1.2.8"; + }; + webfinger = { + dependencies = ["activesupport" "httpclient"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar"; + type = "gem"; + }; + version = "1.1.0"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib"; + type = "gem"; + }; + version = "3.4.2"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l"; + type = "gem"; + }; + version = "0.6.5"; + }; + websocket-extensions = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; + type = "gem"; + }; + version = "0.1.3"; + }; + will_paginate = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9"; + type = "gem"; + }; + version = "3.1.6"; + }; + xpath = { + dependencies = ["nokogiri"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + yard = { + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67"; + type = "gem"; + }; + version = "0.9.16"; + }; +} diff --git a/pkgs/webapps/diaspora/ldap.patch b/pkgs/webapps/diaspora/ldap.patch new file mode 100644 index 00000000..3d4f7851 --- /dev/null +++ b/pkgs/webapps/diaspora/ldap.patch @@ -0,0 +1,256 @@ +commit 936a14e225037aca4cdeac11c843c7985e636c88 +Author: Ismaël Bouya +Date: Mon Jul 24 19:58:24 2017 +0200 + + Add LDAP to diaspora + +diff --git a/Gemfile b/Gemfile +index 414b0138d..2a934e9c9 100644 +--- a/Gemfile ++++ b/Gemfile +@@ -217,6 +217,9 @@ gem "thor", "0.19.1" + + # gem "therubyracer", :platform => :ruby + ++# LDAP ++gem 'net-ldap', '~> 0.16' ++ + group :production do # we don"t install these on travis to speed up test runs + # Analytics + +diff --git a/Gemfile.lock b/Gemfile.lock +index 84f8172e4..cdbf19fcd 100644 +--- a/Gemfile.lock 2019-01-13 19:55:52.538561762 +0100 ++++ b/Gemfile.lock 2019-01-13 19:58:11.087099067 +0100 +@@ -398,6 +398,7 @@ + mysql2 (0.5.2) + naught (1.1.0) + nenv (0.3.0) ++ net-ldap (0.16.1) + nio4r (2.3.1) + nokogiri (1.8.5) + mini_portile2 (~> 2.3.0) +@@ -820,6 +821,7 @@ + minitest + mobile-fu (= 1.4.0) + mysql2 (= 0.5.2) ++ net-ldap (~> 0.16) + nokogiri (= 1.8.5) + omniauth (= 1.8.1) + omniauth-tumblr (= 1.2) +diff --git a/app/models/user.rb b/app/models/user.rb +index 940a48f25..d1e2beeee 100644 +--- a/app/models/user.rb ++++ b/app/models/user.rb +@@ -337,6 +337,12 @@ class User < ActiveRecord::Base + end + + def send_confirm_email ++ if skip_email_confirmation? ++ self.email = unconfirmed_email ++ self.unconfirmed_email = nil ++ save ++ end ++ + return if unconfirmed_email.blank? + Workers::Mail::ConfirmEmail.perform_async(id) + end +@@ -554,6 +560,14 @@ class User < ActiveRecord::Base + end + end + ++ def ldap_user? ++ AppConfig.ldap.enable? && ldap_dn.present? ++ end ++ ++ def skip_email_confirmation? ++ ldap_user? && AppConfig.ldap.skip_email_confirmation? ++ end ++ + private + + def clearable_fields +diff --git a/config/defaults.yml b/config/defaults.yml +index c046aff07..66e9afa13 100644 +--- a/config/defaults.yml ++++ b/config/defaults.yml +@@ -202,6 +202,20 @@ defaults: + scope: tags + include_user_tags: false + pod_tags: ++ ldap: ++ enable: false ++ host: localhost ++ port: 389 ++ only_ldap: true ++ mail_attribute: mail ++ skip_email_confirmation: true ++ use_bind_dn: true ++ bind_dn: "cn=diaspora,dc=example,dc=com" ++ bind_pw: "password" ++ search_base: "dc=example,dc=com" ++ search_filter: "uid=%{username}" ++ bind_template: "uid=%{username},dc=example,dc=com" ++ + + development: + environment: +diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example +index b2573625d..c357c8651 100644 +--- a/config/diaspora.yml.example ++++ b/config/diaspora.yml.example +@@ -710,6 +710,36 @@ configuration: ## Section + ## If scope is 'tags', a comma separated list of tags here can be set. + ## For example "linux,diaspora", to receive posts related to these tags + #pod_tags: ++ ldap: ++ # Uncomment next line if you want to use LDAP on your instance ++ enable: true ++ host: localhost ++ port: 389 ++ # Use only LDAP authentication (don't try other means) ++ only_ldap: true ++ # LDAP attribute to find the user's e-mail. Necessary to create accounts ++ # for not existing users ++ mail_attribute: mail ++ # Skip e-mail confirmation when creating an account via LDAP. ++ skip_email_confirmation: true ++ # ----- Using bind_dn and bind_pw ++ # bind_dn and bind_pw may be used if the diaspora instance ++ # should be able to connect to LDAP to find and search for users. ++ ++ use_bind_dn: true ++ bind_dn: "cn=diaspora,dc=example,dc=com" ++ bind_pw: "password" ++ search_base: "dc=example,dc=com" ++ # This is the filter with which to search for the user. %{username} will ++ # be replaced by the given login. ++ search_filter: "uid=%{username}" ++ # ++ # ----- Using template ++ # This setting doesn't require a diaspora LDAP user. Use a template, and ++ # diaspora will try to login with the templated dn and password ++ # ++ # bind_template: "uid=%{username},dc=example,dc=com" ++ + + ## Here you can override settings defined above if you need + ## to have them different in different environments. +diff --git a/config/initializers/0_ldap_authenticatable.rb b/config/initializers/0_ldap_authenticatable.rb +new file mode 100644 +index 000000000..49846502f +--- /dev/null ++++ b/config/initializers/0_ldap_authenticatable.rb +@@ -0,0 +1,82 @@ ++require 'net/ldap' ++require 'devise/strategies/authenticatable' ++ ++module Devise ++ module Strategies ++ class LdapAuthenticatable < Authenticatable ++ def valid? ++ AppConfig.ldap.enable? && params[:user].present? ++ end ++ ++ def authenticate! ++ ldap = Net::LDAP.new( ++ host: AppConfig.ldap.host, ++ port: AppConfig.ldap.port, ++ encryption: :simple_tls, ++ ) ++ ++ if AppConfig.ldap.use_bind_dn? ++ ldap.auth AppConfig.ldap.bind_dn, AppConfig.ldap.bind_pw ++ ++ if !ldap.bind ++ return fail(:ldap_configuration_error) ++ end ++ ++ search_filter = AppConfig.ldap.search_filter % { username: params[:user][:username] } ++ ++ result = ldap.search(base: AppConfig.ldap.search_base, filter: search_filter, result_set: true) ++ ++ if result.count != 1 ++ return login_fail ++ end ++ ++ user_dn = result.first.dn ++ user_email = result.first[AppConfig.ldap.mail_attribute].first ++ else ++ user_dn = AppConfig.ldap.bind_template % { username: params[:user][:username] } ++ end ++ ++ ldap.auth user_dn, params[:user][:password] ++ ++ if ldap.bind ++ user = User.find_by(ldap_dn: user_dn) ++ ++ # We don't want to trust too much the email attribute from ++ # LDAP: if the user can edit it himself, he may login as ++ # anyone ++ if user.nil? ++ if !AppConfig.ldap.use_bind_dn? ++ result = ldap.search(base: user_dn, scope: Net::LDAP::SearchScope_BaseObject, filter: "(objectClass=*)", result_set: true) ++ user_email = result.first[AppConfig.ldap.mail_attribute].first ++ end ++ ++ if user_email.present? && User.find_by(email: user_email).nil? ++ # Password is used for remember_me token ++ user = User.build(email: user_email, ldap_dn: user_dn, password: SecureRandom.hex, username: params[:user][:username]) ++ user.save ++ user.seed_aspects ++ elsif User.find_by(email: user_email).present? ++ return fail(:ldap_existing_email) ++ else ++ return fail(:ldap_cannot_create_account_without_email) ++ end ++ end ++ ++ success!(user) ++ else ++ return login_fail ++ end ++ end ++ ++ def login_fail ++ if AppConfig.ldap.only_ldap? ++ return fail(:ldap_invalid_login) ++ else ++ return pass ++ end ++ end ++ end ++ end ++end ++ ++Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable) +diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb +index 3698e2373..14e88063e 100644 +--- a/config/initializers/devise.rb ++++ b/config/initializers/devise.rb +@@ -250,10 +250,9 @@ Devise.setup do |config| + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # +- # config.warden do |manager| +- # manager.intercept_401 = false +- # manager.default_strategies(:scope => :user).unshift :some_external_strategy +- # end ++ config.warden do |manager| ++ manager.default_strategies(scope: :user).unshift :ldap_authenticatable ++ end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine +diff --git a/db/migrate/20170724182100_add_ldap_dn_to_users.rb b/db/migrate/20170724182100_add_ldap_dn_to_users.rb +new file mode 100644 +index 000000000..f5cc84d11 +--- /dev/null ++++ b/db/migrate/20170724182100_add_ldap_dn_to_users.rb +@@ -0,0 +1,6 @@ ++class AddLdapDnToUsers < ActiveRecord::Migration ++ def change ++ add_column :users, :ldap_dn, :text, null: true, default: nil ++ add_index :users, ['ldap_dn'], :length => { "ldap_dn" => 191 } ++ end ++end diff --git a/pkgs/webapps/dokuwiki/default.nix b/pkgs/webapps/dokuwiki/default.nix new file mode 100644 index 00000000..9df88c6b --- /dev/null +++ b/pkgs/webapps/dokuwiki/default.nix @@ -0,0 +1,43 @@ +{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, stdenv, mylibs, writeText }: +let + preloadFile = plugins: let preloads = [preload] + ++ builtins.concatMap (p: lib.optional (lib.hasAttr "preload" p) (p.preload p)) plugins; + in writeText "preload.php" ('' + + Andrej Lezo + Matej Mihalik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ + + +// NOTE: see readme.txt before you start to configure this client! + + +// NOTE: do not forget to execute the cache_update.sh script every time you +// update this configuration file or any other files (otherwise your browser +// will use the previous version of files stored in HTML5 cache). Alternatively +// you can update the cache.manifest manually - edit the second line beginning +// with "#V 20" to anything else (this file simple needs "some" change) + + +// Supported setup types (use ONE of them): +// a.) globalAccountSettings => username and password is hardcoded +// in config.js, automatic login without the login screen +// - advantages: fast login process = no username/password is required +// - disadvantages: username/password is visible in your config.js, so +// this type of setup is recommended ONLY for intranet/home users +// b.) globalNetworkCheckSettings => standard setup with login screen +// - advantages: username/password is required (no visible +// username/password in config.js) +// - disadvantages: if a user enters wrong username/password then +// the browser will show authentication popup window (it is NOT +// possible to disable it in JavaScript; see the next option) +// c.) globalNetworkAccountSettings => advanced setup with login screen +// - advantages: no authentication popup if you enter wrong username/ +// password, dynamic XML configuration generator (you can generate +// different configurations for your users /by modifying the "auth" +// module configuration or the PHP code itself/) +// - disadvantages: requires PHP >= 5.3 and additional configuration, +// only basic http authentication is supported => always use https! +// +// +// What is a "principal URL"? => Check you server documentation! +// - "principal URL" is NOT "collection URL" +// - this client automatically detects collections for "principal URL" +// - PROPER "principal URL" looks like: +// https://server.com:8443/principals/users/USER/ +// https://server.com:8443/caldav.php/USER/ +// - INVALID principal URL looks like: +// https://server.com:8443/principals/users/USER/collection/ +// => this is a collection URL +// https://server.com:8443/caldav.php/USER/collection/ +// => this is a collection URL +// https://server.com:8443/principals/users/USER +// => missing trailing '/' +// https://server.com:8443/caldav.php/USER +// => missing trailing '/' +// /caldav.php/USER/ +// => relative URL instead of full URL +// +// +// List of properties used in globalAccountSettings, globalNetworkCheckSettings +// and globalNetworkAccountSettings variables (+ in the "auth" module): +// - href +// Depending on the setup type set the value to: +// a.) globalAccountSettings: full "principal URL" +// b.) globalNetworkCheckSettings: "principal URL" WITHOUT the "USER/" part +// c.) globalNetworkAccountSettings: "full URL" to the "auth" directory +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings +// - userAuth +// - userName +// Set the username you want to login. +// - userPassword +// Set the password for the given username. +// This property is supported in: +// globalAccountSettings +// - timeOut +// This option sets the timeout for jQuery .ajax call (in miliseconds). +// Example: +// timeOut: 90000 +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings +// - lockTimeOut +// NOTE: used only if server supports LOCK requests +// This option sets the LOCK timeout value if resource locking +// is used (in miliseconds). +// Example: +// lockTimeOut: 10000 +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only) +// - checkContentType +// This option enables a content-type checking for server response. +// If enabled then only objects with proper content-type are inserted +// into the interface. +// If you cannot see data in the interface you may try to disable it (useful +// if your server returns wrong value in "propstat/prop/getcontenttype"). +// If undefined then content-type checking is enabled. +// Examples: +// checkContentType: true +// checkContentType: false +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only) +// - settingsAccount +// NOTE: server support for custom DAV properties is REQUIRED! +// This option sets the account where the client properties such as: +// loaded collections, enabled collections, ... are saved during +// the logout and resource/collection synchronisation +// NOTE: set it to true ONLY for ONE account! +// Examples: +// settingsAccount: true +// settingsAccount: false +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only) +// - delegation +// NOTE: server support for this functionality is REQUIRED! +// This option allows you to load delegated (shared) collections. +// If set to true (default) then delegation functionality is enabled, +// and the interface allows you to load delegated collections. +// If false then delegation functionality is completely disabled. +// Examples: +// delegation: true +// delegation: false +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only) +// - additionalResources +// This options sets the list of additional resources (e.g. shared resources +// accessible by all users). If the server supports delegation (see +// the delegation option above) there is no reason to use this option! +// Supported values: +// - array of URL encoded resource names (not collections), such as: +// 'company' +// 'shared_resource' +// If empty (default) or undefined then shared resources are not loaded +// using this option, but may be loaded using the delegation option. +// Examples: +// additionalResources=[] +// additionalResources=['public', 'shared_resource'] +// This property is supported in: +// globalNetworkCheckSettings +// - hrefLabel +// This option sets the server name in the resource header (useful if +// you want to see custom resource header above the collections). +// You can use the following variables in the value: +// %H = full hostname (including the port number) +// %h = full hostname (without the port number) +// %D = full domain name +// %d = only the first and second level domain +// %P = principal name +// %p = principal name without the @domain.com part (if present) +// %U = logged user name +// %u = logged user name without the @domain.com part (if present) +// If undefined, empty or or null then '%d/%p [%u]' is used. +// Examples: +// hrefLabel: '%d/%p [%u]' +// hrefLabel: '%D/%u' +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only) +// - forceReadOnly +// This option sets the list of collections as "read-only". +// Supported values: +// - true +// all collections will be "read-only" +// - array of URL encoded +// - collections, such as: +// '/caldav.php/user/calendar/' +// '/caldav.php/user%40domain.com/calendar/' +// - regexes, such as: +// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i') +// specifies the list of collections marked as "read-only" +// If null (default) or undefined then server detected privileges are used. +// Examples: +// forceReadOnly: null +// forceReadOnly: true +// forceReadOnly: ['/caldav.php/user/calendar/', +// '/caldav.php/user/calendar2/'] +// forceReadOnly: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')] +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only, with +// different syntax for regexes) +// - ignoreAlarms +// This option sets list of calendar collections with disabled +// alarm functionality. +// Supported values: +// - true +// alarm functionality is disabled for all collections +// - array of URL encoded +// - collections, such as: +// '/caldav.php/user/calendar/' +// '/caldav.php/user%40domain.com/calendar/' +// - regexes, such as: +// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i') +// specifies the list of collections with disabled alarm functionality. +// If false (default) or undefined then alarm functionality is enabled +// for all collections. +// Examples: +// ignoreAlarms: true +// ignoreAlarms: ['/caldav.php/user/calendar/', +// '/caldav.php/user/calendar2/'] +// ignoreAlarms: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')] +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only, with +// different syntax for regexes) +// - backgroundCalendars +// This options defines a list of background calendars. If there is +// at least one event defined for the given day in a background calendar, +// the background color for that day will be pink/light-red. +// Supported values: +// - array of URL encoded +// - collections, such as: +// '/caldav.php/user/calendar/' +// '/caldav.php/user%40domain.com/calendar/' +// - regexes, such as: +// new RegExp('^/caldav.php/user/calendar[0-9]/$', 'i') +// specifies the list of background calendar collections. +// Examples: +// backgroundCalendars: ['/caldav.php/user/calendar/', +// '/caldav.php/user/calendar2/'] +// backgroundCalendars: [new RegExp('^/.*/user/calendar[0-9]/$', 'i')] +// This property is supported in: +// globalAccountSettings +// globalNetworkCheckSettings +// globalNetworkAccountSettings (available in auth module only, with +// different syntax for regexes) +// Special options not present in configuration examples: +// NOTE: use ONLY if you know what are you doing! +// - crossDomain +// This option sets the crossDomain for jQuery .ajax call. If null (default) +// then the value is autodetected /and the result is shown in the console/ +// - withCredentials +// This option sets the withCredentials for jQuery .ajax call. The default +// value is false and there is NO REASON to change it to true! +// NOTE: if true, Access-Control-Allow-Origin "*" (CORS header) not works! + + +// globalAccountSettings +// Use this option if you want to use automatic login (without a login +// screen) with hardcoded username/password in config.js. Otherwise use +// globalNetworkCheckSettings or globalNetworkAccountSettings (see below). +// NOTE: if this option is used the value must be an array of object(s). +// List of properties used in globalAccountSettings variable: +// - href +// Set this option to the full "principal URL". +// NOTE: the last character in the value must be '/' +// - userAuth +// - userName +// Set the username you want to login. +// - userPassword +// Set the password for the given username. +// NOTE: for description of other properties see comments at the beginning +// of this file. +// NOTE: for minimal/fast setup you need to set only the href and userAuth +// options. It is safe/recommended to keep the remaining options unchanged! +// Example: +//var globalAccountSettings=[ +// { +// href: 'https://server1.com:8443/caldav.php/USERNAME1/', +// userAuth: +// { +// userName: 'USERNAME1', +// userPassword: 'PASSWORD1' +// }, +// timeOut: 90000, +// lockTimeOut: 10000, +// checkContentType: true, +// settingsAccount: true, +// delegation: true, +// hrefLabel: null, +// forceReadOnly: null, +// ignoreAlarms: false, +// backgroundCalendars: [] +// }, +// { +// href: 'https://server2.com:8443/caldav.php/USERNAME2/', +// ... +// ... +// } +//]; + + +// globalNetworkCheckSettings +// Use this option if you want to use standard login screen without +// hardcoded username/password in config.js (used by globalAccountSettings). +// NOTE: if this option is used the value must be an object. +// List of properties used in globalAccountSettings variable: +// - href +// Set this option to the "principal URL" WITHOUT the "USERNAME/" +// part (this options uses the username from the login screen). +// NOTE: the last character in the value must be '/' +// NOTE: for description of other properties see comments at the beginning +// of this file. +// NOTE: for minimal/fast setup you need to set only the href option. It is +// safe/recommended to keep the remaining options unchanged! +// Example href values: +// OS X server http example (see misc/readme_osx.txt for server setup): +// href: 'http://osx.server.com:8008/principals/users/' +// OS X server https example (see misc/readme_osx.txt for server setup): +// href: 'https://osx.server.com:8443/principals/users/' +// Cyrus server https example: +// href: 'https://cyrus.server.com/dav/principals/user/' +// Example: +// Davical example which automatically detects the protocol, server name, +// port, ... (client installed into Davical "htdocs" subdirectory; +// works "out of the box", no additional setup required): +var globalNetworkCheckSettings={ + href: location.protocol+'//'+location.hostname+ + (location.port ? ':'+location.port: '')+ + location.pathname.replace(RegExp('/+[^/]+/*(index\.html)?$'),'')+ + '/caldav.php/', + timeOut: 90000, + lockTimeOut: 10000, + checkContentType: true, + settingsAccount: true, + delegation: true, + additionalResources: [], + hrefLabel: null, + forceReadOnly: null, + ignoreAlarms: false, + backgroundCalendars: [] +} + + +// globalNetworkAccountSettings +// Try this option ONLY if you have working setup using +// globalNetworkCheckSettings and want to fix the authentication popup +// window problem (if invalid username/password is entered)! +// If you use this option then your browser sends username/password to the PHP +// "auth" module ("auth" directory) instead of the DAV server itself. +// The "auth" module then validates your username/password against your server, +// and if the authentication is successful, then it sends back a configuration +// XML (requires additional configuration). The resulting XML is handled +// IDENTICALLY as the globalAccountSettings configuration option. +// NOTE: for the "auth" module configuration see readme.txt! +// NOTE: this option invokes a login screen and disallows access until +// the client gets correct XML configuration file from the server! +// List of properties used in globalNetworkAccountSettings variable: +// - href +// Set this option to the "full URL" of the "auth" directory +// NOTE: the last character in the value must be '/' +// NOTE: for description of other properties see comments at the beginning +// of this file. +// Example href values: +// href: 'https://server.com/client/auth/' +// Example: +// Use this configuration if the "auth" module is located in the client +// installation subdirectory (default): +//var globalNetworkAccountSettings={ +// href: location.protocol+'//'+location.hostname+ +// (location.port ? ':'+location.port : '')+ +// location.pathname.replace(RegExp('index\.html$'),'')+ +// 'auth/', +// timeOut: 30000 +//}; + + +// globalUseJqueryAuth +// Use jQuery .ajax() auth or custom header for HTTP basic auth (default). +// Set this option to true if your server uses digest auth (note: you may +// experience auth popups on some browsers). +// If undefined (or empty), custom header for HTTP basic auth is used. +// Example: +//var globalUseJqueryAuth=false; + + +// globalBackgroundSync +// Enable background synchronization even if the browser window/tab has no +// focus. +// If false, synchronization is performed only if the browser window/tab +// is focused. If undefined or not false, then background sync is enabled. +// Example: +var globalBackgroundSync=true; + + +// globalSyncResourcesInterval +// This option defines how often (in miliseconds) are resources/collections +// asynchronously synchronized. +// Example: +var globalSyncResourcesInterval=120000; + + +// globalEnableRefresh +// This option enables or disables the manual synchronization button in +// the interface. If this option is enabled then users can perform server +// synchronization manually. Enabling this option may cause high server +// load (even DDOS) if users will try to manually synchronize data too +// often (instead of waiting for the automatic synchronization). +// If undefined or false, the synchronization button is disabled. +// NOTE: enable this option only if you really know what are you doing! +// Example: +var globalEnableRefresh=false; + + +// globalEnableKbNavigation +// Enable basic keyboard navigation using arrow keys? +// If undefined or not false, keyboard navigation is enabled. +// Example: +var globalEnableKbNavigation=true; + + +// globalSettingsType +// Where to store user settings such as: active view, enabled/selected +// collections, ... (the client store them into DAV property on the server). +// NOTE: not all servers support storing DAV properties (some servers support +// only subset /or none/ of these URLs). +// Supported values: +// - 'principal-URL', '', null or undefined (default) => settings are stored +// to principal-URL (recommended for most servers) +// - 'addressbook-home-set' => settings are are stored to addressbook-home-set +// - 'calendar-home-set' => settings are stored to calendar-home-set +// Example: +//var globalSettingsType=''; + + +// globalCrossServerSettingsURL +// Settings such as enabled/selected collections are stored on the server +// (see the previous option) in form of full URL +// (e.g.: https://user@server:port/principal/collection/), but even if this +// approach is "correct" (you can use the same principal URL with multiple +// different logins, ...) it causes a problem if your server is accessible +// from multiple URLs (e.g. http://server/ and https://server/). If you want +// to store only the "principal/collection/" part of the URL (instead of the +// full URL) then enable this option. +// Example: +//var globalCrossServerSettingsURL=false; + + +// globalInterfaceLanguage +// Default interface language (note: this option is case sensitive): +// cs_CZ (Čeština [Czech]) +// da_DK (Dansk [Danish]; thanks Niels Bo Andersen) +// de_DE (Deutsch [German]; thanks Marten Gajda and Thomas Scheel) +// en_US (English [English/US]) +// es_ES (Español [Spanish]; thanks Damián Vila) +// fr_FR (Français [French]; thanks John Fischer) +// it_IT (Italiano [Italian]; thanks Luca Ferrario) +// ja_JP (日本語 [Japan]; thanks Muimu Nakayama) +// hu_HU (Magyar [Hungarian]) +// nl_NL (Nederlands [Dutch]; thanks Johan Vromans) +// sk_SK (Slovenčina [Slovak]) +// tr_TR (Türkçe [Turkish]; thanks Selcuk Pultar) +// ru_RU (Русский [Russian]; thanks Александр Симонов) +// uk_UA (Українська [Ukrainian]; thanks Serge Yakimchuck) +// zh_CN (中国 [Chinese]; thanks Fandy) +// Example: +var globalInterfaceLanguage='fr_FR'; + + +// globalInterfaceCustomLanguages +// If defined and not empty then only languages listed here are shown +// at the login screen, otherwise (default) all languages are shown +// NOTE: values in the array must refer to an existing localization +// (see the option above) +// Example: +// globalInterfaceCustomLanguages=['en_US', 'sk_SK']; +var globalInterfaceCustomLanguages=[]; + + +// globalSortAlphabet +// Use JavaScript localeCompare() or custom alphabet for data sorting. +// Custom alphabet is used by default because JavaScript localeCompare() +// not supports collation and often returns "wrong" result. If set to null +// then localeCompare() is used. +// Example: +// var globalSortAlphabet=null; +var globalSortAlphabet=' 0123456789'+ + 'AÀÁÂÄÆÃÅĀBCÇĆČDĎEÈÉÊËĒĖĘĚFGĞHIÌÍÎİÏĪĮJKLŁĹĽMNŃÑŇOÒÓÔÖŐŒØÕŌ'+ + 'PQRŔŘSŚŠȘșŞşẞTŤȚțŢţUÙÚÛÜŰŮŪVWXYÝŸZŹŻŽ'+ + 'aàáâäæãåābcçćčdďeèéêëēėęěfgğhiìíîïīįıjklłĺľmnńñňoòóôöőœøõō'+ + 'pqrŕřsśšßtťuùúûüűůūvwxyýÿzźżžАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯ'+ + 'Ьабвгґдеєжзиіїйклмнопрстуфхцчшщюяь'; + + +// globalSearchTransformAlphabet +// To support search without diacritics (e.g. search for 'd' will find: 'Ď', 'ď') +// it is required to define something like "character equivalence". +// key = regex text, value = search character +// Example: +var globalSearchTransformAlphabet={ + '[ÀàÁáÂâÄäÆæÃãÅåĀā]': 'a', '[ÇçĆćČč]': 'c', '[Ďď]': 'd', + '[ÈèÉéÊêËëĒēĖėĘęĚě]': 'e', '[Ğğ]': 'g', '[ÌìÍíÎîİıÏïĪīĮį]': 'i', + '[ŁłĹ弾]': 'l', '[ŃńÑñŇň]': 'n', '[ÒòÓóÔôÖöŐőŒœØøÕõŌō]': 'o', + '[ŔŕŘř]': 'r', '[ŚśŠšȘșŞşẞß]': 's', '[ŤťȚțŢţ]': 't', + '[ÙùÚúÛûÜüŰűŮůŪū]': 'u', '[ÝýŸÿ]': 'y', '[ŹźŻżŽž]': 'z' +}; + +// globalResourceAlphabetSorting +// If more than one resource (server account) is configured, sort the +// resources alphabetically? +// Example: +var globalResourceAlphabetSorting=true; + + +// globalNewVersionNotifyUsers +// Update notification will be shown only to users with login names defined +// in this array. +// If undefined (or empty), update notifications will be shown to all users. +// Example: +// globalNewVersionNotifyUsers=['admin', 'peter']; +var globalNewVersionNotifyUsers=[]; + + +// globalDatepickerFormat +// Set the datepicker format (see +// http://docs.jquery.com/UI/Datepicker/formatDate for valid values). +// NOTE: date format is predefined for each localization - use this option +// ONLY if you want to use custom date format (instead of the localization +// predefined one). +// Example: +//var globalDatepickerFormat='dd.mm.yy'; +var globalDatepickerFormat='yy-mm-dd'; + + +// globalDatepickerFirstDayOfWeek +// Set the datepicker first day of the week: Sunday is 0, Monday is 1, etc. +// Example: +var globalDatepickerFirstDayOfWeek=1; + + +// globalHideInfoMessageAfter +// How long are information messages (such as: success, error) displayed +// (in miliseconds). +// Example: +var globalHideInfoMessageAfter=1800; + + +// globalEditorFadeAnimation +// Set the editor fade in/out animation duration when editing or saving data +// (in miliseconds). +// Example: +var globalEditorFadeAnimation=666; + + + + +// ******* CalDAV (CalDavZAP) related settings ******* // + +// globalEventStartPastLimit, globalEventStartFutureLimit, globalTodoPastLimit +// Number of months pre-loaded from past/future in advance for calendars +// and todo lists (if null then date range synchronization is disabled). +// NOTE: interval synchronization is used only if your server supports +// sync-collection REPORT (e.g. DAViCal). +// NOTE: if you experience problems with data loading and your server has +// no time-range filtering support set these variables to null. +// Example: +var globalEventStartPastLimit=3; +var globalEventStartFutureLimit=3; +var globalTodoPastLimit=1; + + +// globalLoadedCalendarCollections +// This option sets the list of calendar collections (down)loaded after login. +// If empty then all calendar collections for the currently logged user are +// loaded. +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalLoadedCalendarCollections=[]; + + +// globalLoadedTodoCollections +// This option sets the list of todo collections (down)loaded after login. +// If empty then all todo collections for the currently logged user are loaded. +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalLoadedTodoCollections=[]; + + +// globalActiveCalendarCollections +// This options sets the list of calendar collections checked (enabled +// checkbox => data visible in the interface) by default after login. +// If empty then all loaded calendar collections for the currently logged +// user are checked. +// NOTE: only already (down)loaded collections can be checked (see +// the globalLoadedCalendarCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalActiveCalendarCollections=[]; + + +// globalActiveTodoCollections +// This options sets the list of todo collections checked (enabled +// checkbox => data visible in the interface) by default after login. +// If empty then all loaded todo collections for the currently logged +// user are checked. +// NOTE: only already (down)loaded collections can be checked (see +// the globalLoadedTodoCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalActiveTodoCollections=[]; + + +// globalCalendarSelected +// This option sets which calendar collection will be pre-selected +// (if you create a new event) by default after login. +// The value must be URL encoded path to a calendar collection, +// for example: 'USER/calendar/' +// If empty or undefined then the first available calendar collection +// is selected automatically. +// NOTE: only already (down)loaded collections can be pre-selected (see +// the globalLoadedCalendarCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +//var globalCalendarSelected=''; + + +// globalTodoCalendarSelected +// This option sets which todo collection will be pre-selected +// (if you create a new todo) by default after login. +// The value must be URL encoded path to a todo collection, +// for example: 'USER/todo_calendar/' +// If empty or undefined then the first available todo collection +// is selected automatically. +// NOTE: only already (down)loaded collections can be pre-selected (see +// the globalLoadedTodoCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +//var globalTodoCalendarSelected=''; + + +// globalActiveView +// This options sets the default fullcalendar view option (the default calendar +// view after the first login). +// Supported values: +// - 'month' +// - 'multiWeek' +// - 'agendaWeek' +// - 'agendaDay' +// NOTE: we use custom and enhanced version of fullcalendar! +// Example: +var globalActiveView='multiWeek'; + + +// globalOpenFormMode +// Open new event form on 'single' or 'double' click. +// If undefined or not 'double', then 'single' is used. +// Example: +var globalOpenFormMode='double'; + + +// globalTodoListFilterSelected +// This options sets the list of filters in todo list that are selected +// after login. +// Supported options: +// - 'filterAction' +// - 'filterProgress' (available only if globalAppleRemindersMode is disabled) +// - 'filterCompleted' +// - 'filterCanceled' (available only if globalAppleRemindersMode is disabled) +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalTodoListFilterSelected=['filterAction', 'filterProgress']; + + +// globalCalendarStartOfBusiness, globalCalendarEndOfBusiness +// These options set the start and end of business hours with 0.5 hour +// precision. Non-business hours are faded out in the calendar interface. +// If both variables are set to the same value then no fade out occurs. +// Example: +var globalCalendarStartOfBusiness=8; +var globalCalendarEndOfBusiness=17; + + +// globalDefaultEventDuration +// This option sets the default duration (in minutes) for newly created events. +// If undefined or null, globalCalendarEndOfBusiness value will be taken as +// a default end time instead. +// Example: +var globalDefaultEventDuration=120; + + +// globalAMPMFormat +// This option enables to use 12 hours format (AM/PM) for displaying time. +// NOTE: time format is predefined for each localization - use this option +// ONLY if you want to use custom time format (instead of the localization +// predefined one). +// Example: +//var globalAMPMFormat=false; + + +// globalTimeFormatBasic +// This option defines the time format information for events in month and +// multiweek views. If undefined or null then default value is used. +// If defined as empty string no time information is shown in these views. +// See http://arshaw.com/fullcalendar/docs/utilities/formatDate/ for exact +// formating rules. +// Example: +//var globalTimeFormatBasic=''; + + +// globalTimeFormatAgenda +// This option defines the time format information for events in day and +// week views. If undefined or null then default value is used. +// If defined as empty string no time information is shown in these views. +// See http://arshaw.com/fullcalendar/docs/utilities/formatDate/ for exact +// formating rules. +// Example: +//var globalTimeFormatAgenda=''; + + +// globalDisplayHiddenEvents +// This option defined whether events from unechecked calendars are displayed +// with certain transparency (true) or completely hidden (false). +// Example: +var globalDisplayHiddenEvents=false; + + +// globalTimeZoneSupport +// This option enables timezone support in the client. +// NOTE: timezone cannot be specified for all-day events because these don't +// have start and end time. +// If this option is disabled then local time is used. +// Example: +var globalTimeZoneSupport=true; + + +// globalTimeZone +// If timezone support is enabled, this option sets the default timezone. +// See timezones.js or use the following command to get the list of supported +// timezones (defined in timezones.js): +// grep "'[^']\+': {" timezones.js | sed -Ee "s#(\s*'|':\s*\{)##g" +// Example: +var globalTimeZone='Europe/Paris'; + + +// globalTimeZonesEnabled +// This option sets the list of available timezones in the interface (for the +// list of supported timezones see the comment for the previous configuration +// option). +// NOTE: if there is at least one event/todo with a certain timezone defined, +// that timezone is enabled (even if it is not present in this list). +// Example: +// var globalTimeZonesEnabled=['America/New_York', 'Europe/Berlin']; +var globalTimeZonesEnabled=[]; + + +// globalRewriteTimezoneComponent +// This options sets whether the client will enhance/replace (if you edit an +// event or todo) the timezone information using the official IANA timezone +// database information (recommended). +// Example: +var globalRewriteTimezoneComponent=true; + + +// globalRemoveUnknownTimezone +// This options sets whether the client will remove all non-standard timezone +// names from events and todos (if you edit an event or todo) +// (e.g.: /freeassociation.sourceforge.net/Tzfile/Europe/Vienna) +// Example: +var globalRemoveUnknownTimezone=false; + + +// globalShowHiddenAlarms +// This option sets whether the client will show alarm notifications for +// unchecked calendars. If this option is enabled and you uncheck a calendar +// in the calendar list, alarm notifications will be temporary disabled for +// unchecked calendar(s). +// Example: +var globalShowHiddenAlarms=false; + + +// globalIgnoreCompletedOrCancelledAlarms +// This options sets whether the client will show alarm notifications for +// already completed or cancelled todos. If enabled then alarm notification +// for completed and cancelled todos are disabled. +// Example: +var globalIgnoreCompletedOrCancelledAlarms=true; + + +// globalMozillaSupport +// Mozilla automatically treats custom repeating event calculations as if +// the start day of the week is Monday, despite what day is chosen in settings. +// Set this variable to true to use the same approach, ensuring compatible +// event rendering in special cases. +// Example: +var globalMozillaSupport=false; + + +// globalCalendarColorPropertyXmlns +// This options sets the namespace used for storing the "calendar-color" +// property by the client. +// If true, undefined (or empty) "http://apple.com/ns/ical/" is used (Apple +// compatible). If false, then the calendar color modification functionality +// is completely disabled. +// Example: +//var globalCalendarColorPropertyXmlns=true; + + +// globalWeekendDays +// This option sets the list of days considered as weekend days (these +// are faded out in the calendar interface). Non-weekend days are automatically +// considered as business days. +// Sunday is 0, Monday is 1, etc. +// Example: +var globalWeekendDays=[0, 6]; + + +// globalAppleRemindersMode +// If this option is enabled then then client will use the same approach +// for handling repeating reminders (todos) as Apple. It is STRONGLY +// recommended to enabled this option if you use any Apple clients for +// reminders (todos). +// Supported options: +// - 'iOS6' +// - 'iOS7' +// - true (support of the latest iOS version - 'iOS8') +// - false +// If this option is enabled: +// - RFC todo support is SEVERELY limited and the client mimics the behaviour +// of Apple Reminders.app (to ensure maximum compatibility) +// - when a single instance of repeating todo is edited, it becomes an +// autonomous non-repeating todo with NO relation to the original repeating +// todo +// - capabilities of repeating todos are limited - only the first instance +// is ever visible in the interface +// - support for todo DTSTART attribute is disabled +// - support for todo STATUS attribute other than COMPLETED and NEEDS-ACTION +// is disabled +// - [iOS6 only] support for LOCATION and URL attributes is disabled +// Example: +var globalAppleRemindersMode=true; + + +// globalSubscribedCalendars +// This option specifies a list of remote URLs to ics files (e.g.: used +// for distributing holidays information). Subscribed calendars are +// ALWAYS read-only. Remote servers where ics files are hosted MUST +// return proper CORS headers (see readme.txt) otherwise this functionality +// will not work! +// NOTE: subsribed calendars are NOT "shared" calendars. For "shared" +// calendars see the delegation option in globalAccountSettings, +// globalNetworkCheckSettings and globalNetworkAccountSettings. +// List of properties used in globalSubscribedCalendars variable: +// - hrefLabel +// This options defines the header string above the subcsribed calendars. +// - calendars +// This option specifies an array of remote calendar objects with the +// following properties: +// - href +// Set this option to the "full URL" of the remote calendar +// - userAuth +// NOTE: keep empty if remote authentication is not required! +// - userName +// Set the username you want to login. +// - userPassword +// Set the password for the given username. +// - typeList +// Set the list of objects you want to process from remote calendars; +// two options are available: +// - 'vevent' (show remote events in the interface) +// - 'vtodo' (show remote todos in the interface) +// - ignoreAlarm +// Set this option to true if you want to disable alarm notifications +// from the remote calendar. +// - displayName +// Set this option to the name of the calendar you want to see +// in the interface. +// - color +// Set the calendar color you want to see in the interface. +// Example: +//var globalSubscribedCalendars={ +// hrefLabel: 'Subscribed', +// calendars: [ +// { +// href: 'http://something.com/calendar.ics', +// userAuth: { +// userName: '', +// userPassword: '' +// }, +// typeList: ['vevent', 'vtodo'], +// ignoreAlarm: true, +// displayName: 'Remote Calendar 1', +// color: '#ff0000' +// }, +// { +// href: 'http://calendar.com/calendar2.ics', +// ... +// ... +// } +// ] +//}; + + + +// ******* CardDAV (CardDavMATE) related settings ******* // + + +// globalLoadedAddressbookCollections +// This option sets the list of addressbook collections (down)loaded after +// login. If empty then all addressbook collections for the currently logged +// user are loaded. +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalLoadedAddressbookCollections=[]; + + +// globalActiveAddressbookCollections +// This options sets the list of addressbook collections checked (enabled +// checkbox => data visible in the interface) by default after login. +// If empty then all loaded addressbook collections for the currently logged +// user are checked. +// NOTE: only already (down)loaded collections can be checked (see +// the globalLoadedAddressbookCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +var globalActiveAddressbookCollections=[]; + + +// globalAddressbookSelected +// This option sets which addressbook collection will be pre-selected +// (if you create a new contact) by default after login. +// The value must be URL encoded path to an addressbook collection, +// for example: 'USER/addressbook/' +// If empty or undefined then the first available addressbook collection +// is selected automatically. +// NOTE: only already (down)loaded collections can be pre-selected (see +// the globalLoadedAddressbookCollections option). +// NOTE: settings stored on the server (see settingsAccount) overwrite this +// option. +// Example: +//var globalAddressbookSelected=''; + + +// globalCompatibility +// This options is reserved for various compatibility settings. +// NOTE: if this option is used the value must be an object. +// Currently there is only one supported option: +// - anniversaryOutputFormat +// Different clients use different (and incompatible) approach +// to store anniversary date in vCards. Apple stores this attribute as: +// itemX.X-ABDATE;TYPE=pref:2000-01-01\r\n +// itemX.X-ABLabel:_$!!$_\r\n' +// other clients store this attribute as: +// X-ANNIVERSARY:2000-01-01\r\n +// Choose 'apple' or 'other' (lower case) for your 3rd party client +// compatibility. You can chose both: ['apple', 'other'], but it may +// cause many problems in the future, for example: duplicate anniversary +// dates, invalid/old anniversary date in your clients, ...) +// Examples: +// anniversaryOutputFormat: ['other'] +// anniversaryOutputFormat: ['apple', 'other'] +// Example: +var globalCompatibility={anniversaryOutputFormat: ['apple']}; + + +// globalUriHandler{Tel,Email,Url,Profile} +// These options set the URI handlers for TEL, EMAIL, URL and X-SOCIALPROFILE +// vCard attributes. Set them to null (or comment out) to disable. +// NOTE: for globalUriHandlerTel is recommended to use 'tel:', 'callto:' +// or 'skype:'. The globalUriHandlerUrl value is used only if no URI handler +// is defined in the URL. +// NOTE: it is safe to keep these values unchanged! +// Example: +var globalUriHandlerTel='tel:'; +var globalUriHandlerEmail='mailto:'; +var globalUriHandlerUrl='http://'; +var globalUriHandlerProfile={ + 'twitter': 'http://twitter.com/%u', + 'facebook': 'http://www.facebook.com/%u', + 'flickr': 'http://www.flickr.com/photos/%u', + 'linkedin': 'http://www.linkedin.com/in/%u', + 'myspace': 'http://www.myspace.com/%u', + 'sinaweibo': 'http://weibo.com/n/%u' +}; + + +// globalDefaultAddressCountry +// This option sets the default country for new address fields. +// See common.js or use the following command to get the list of +// all supported country codes (defined in common.js): +// grep -E "'[a-z]{2}':\s+\[" common.js | sed -Ee 's#^\s+|\s+\[\s+# #g' +// Example: +var globalDefaultAddressCountry='fr'; + + +// globalAddressCountryEquivalence +// This option sets the processing of the country field specified +// in the vCard ADR attribute. +// By default the address field in vCard looks like: +// ADR;TYPE=WORK:;;1 Waters Edge;Baytown;LA;30314;USA\r\n +// what cause a problem, because the country field is a plain +// text and can contain any value, e.g.: +// USA +// United States of America +// US +// and because the address format can be completely different for +// each country, e.g.: +// China address example: +// [China] +// [Province] [City] +// [Street] +// [Postal] +// Japan address example: +// [Postal] +// [Prefecture] [County/City] +// [Further Divisions] +// [Japan] +// the client needs to correctly detect the country from the ADR +// attribute. Apple solved this problem by using: +// item1.ADR;TYPE=WORK:;;1 Waters Edge;Baytown;LA;30314;USA\r\n +// item1.X-ABADR:us\r\n +// where the second "related" attribute defines the country code +// for the ADR attribute. This client uses the same approach, but +// if the vCard is created by 3rd party clients and the X-ABADR +// is missing, it is possible to define additional "rules" for +// country matching. These rules are specied by the country code +// (for full list of country codes see the comment for pre previous +// option) and a case insensitive regular expression (which matches +// the plain text value in the country field). +// NOTE: if X-ABADR is not present and the country not matches any +// country defined in this option, then globalDefaultAddressCountry +// is used by default. +// Example: +var globalAddressCountryEquivalence=[ + {country: 'de', regex: '^\\W*Deutschland\\W*$'}, + {country: 'sk', regex: '^\\W*Slovensko\\W*$'} +]; + + +// globalAddressCountryFavorites +// This option defines the list of countries which are shown at the top +// of the country list in the interface (for full list of country codes +// see the comment for pre globalDefaultAddressCountry option). +// Example: +// var globalAddressCountryFavorites=['de','sk']; +var globalAddressCountryFavorites=[]; + + +// globalAddrColorPropertyXmlns +// This options sets the namespace used for storing the "addressbook-color" +// property by the client. +// If true, undefined (or empty) "http://inf-it.com/ns/ab/" is used. +// If false, then the addressbook color modification functionality +// is completely disabled, and addressbook colors in the interface are +// generated automatically. +// Example: +//var globalAddrColorPropertyXmlns=true; + + +// globalContactStoreFN +// This option specifies how the FN (formatted name) is stored into vCard. +// The value for this options must be an array of strings, that can contain +// the following variables: +// prefix +// last +// middle +// first +// suffix +// The string element of the array can contain any other characters (usually +// space or colon). Elements are added into FN only if the there is +// a variable match, for example if: +// last='Lastname' +// first='Firstname' +// middle='' (empty) +// and this option is set to: +// ['last', ' middle', ' first'] (space in the second and third element) +// the resulting value for FN will be: 'Lastname Firstname' and not +// 'Lastname Firstname' (two spaces), because the middle name is empty (so +// the second element is completely ignored /not added into FN/). +// NOTE: this attribute is NOT used by this client, and it is also NOT +// possible to directly edit it in the interface. +// Examples: +// var globalContactStoreFN=[' last', ' middle', ' first']; +// var globalContactStoreFN=['last', ', middle', ' ,first']; +var globalContactStoreFN=['prefix',' last',' middle',' first',' suffix']; + + +// globalGroupContactsByCompanies +// This options specifies how contacts are grouped in the interface. +// By default the interface looks like (very simple example): +// A +// Adams Adam +// Anderson Peter +// B +// Brown John +// Baker Josh +// if grouped by company/deparment the result is: +// Company A [Department X] +// Adams Adam +// Brown John +// Company B [Department Y] +// Anderson Peter +// Baker Josh +// If this option is set to true contacts are grouped by company/department, +// otherwise (default) contacts are grouped by letters of the alphabet. +// If undefined or not true, grouping by alphabet letters is used. +// NOTE: see also the globalCollectionDisplay option below. +var globalGroupContactsByCompanies=false; + + +// globalCollectionDisplay +// This options specifies how data columns in the contact list are displayed. +// +// NOTE: columns are displayed ONLY if there is enought horizontal place in +// the browser window (e.g. if you define 5 columns here, but your browser +// window is not wide enough, you will see only first 3 columns instead of 5). +// +// NOTE: see the globalContactDataMinVisiblePercentage option which defines the +// width for columns. +// +// The value must be an array of columns, where each column is represented by +// an object with the following properties: +// label => the value of this option is a string used as column header +// You can use the following localized variables in the label string: +// - {Name} +// - {FirstName} +// - {LastName} +// - {MiddleName} +// - {NickName} +// - {Prefix} +// - {Suffix} +// - {BirthDay} +// - {PhoneticLastName} +// - {PhoneticFirstName} +// - {JobTitle} +// - {Company} +// - {Department} +// - {Categories} +// - {NoteText} +// - {Address}, {AddressWork}, {AddressHome}, {AddressOther} +// - {Phone}, {PhoneWork}, {PhoneHome}, {PhoneCell}, {PhoneMain}, +// {PhonePager}, {PhoneFax}, {PhoneIphone}, {PhoneOther} +// - {Email}, {EmailWork}, {EmailHome}, {EmailMobileme}, {EmailOther} +// - {URL}, {URLWork}, {URLHome}, {URLHomepage}, {URLOther} +// - {Dates}, {DatesAnniversary}, {DatesOther} +// - {Related}, {RelatedManager}, {RelatedAssistant}, {RelatedFather}, +// {RelatedMother}, {RelatedParent}, {RelatedBrother}, {RelatedSister}, +// {RelatedChild}, {RelatedFriend}, {RelatedSpouse}, {RelatedPartner}, +// {RelatedOther} +// - {Profile}, {ProfileTwitter}, {ProfileFacebook}, {ProfileFlickr}, +// {ProfileLinkedin}, {ProfileMyspace}, {ProfileSinaweibo} +// - {IM}, {IMWork}, {IMHome}, {IMMobileme}, {IMOther}, {IMAim}, {IMIcq}, +// {IMIrc}, {IMJabber}, {IMMsn}, {IMYahoo}, {IMFacebook}, {IMGadugadu}, +// {IMGoogletalk}, {IMQq}, {IMSkype} +// value => the value of this option is an array of format strings, or +// an object with the following properties: +// - company (used for company contacts) +// - personal (used for user contacts) +// where the value of these properties is an array of format strings used +// for company or user contacts (you can have different values in the same +// column for personal and company contacts). +// You can use the following simple variables in the format string: +// - {FirstName} +// - {LastName} +// - {MiddleName} +// - {NickName} +// - {Prefix} +// - {Suffix} +// - {BirthDay} +// - {PhoneticLastName} +// - {PhoneticFirstName} +// - {JobTitle} +// - {Company} +// - {Department} +// - {Categories} +// - {NoteText} +// You can also use parametrized variables, where the parameter is enclosed +// in square bracket. Paramatrized variables are useful to extract data +// such as home phone {Phone[type=home]}, extract the second phone number +// {Phone[:1]} (zero based indexing) or extract the third home phone number +// {Phone[type=home][:2]} from the vCard. +// NOTE: if the parametrized variable matches multiple items, e.g.: +// {Phone[type=work]} (if the contact has multiple work phones) then the +// first one is used! +// +// The following parametrized variables are supported (note: you can use +// all of them also without parameters /the first one will be used/): +// - {Address[type=XXX]} or {Address[:NUM]} or {Address[type=XXX][:NUM]} +// where supported values for XXX are: +// - work +// - home +// - other +// - any other custom value +// - {Phone[type=XXX]} or {Phone[:NUM]} or {Phone[type=XXX][:NUM]} +// where supported values for XXX are: +// - work +// - home +// - cell +// - main +// - pager +// - fax +// - iphone +// - other +// - any other custom value +// - {Email[type=XXX]} or {Email[:NUM]} or {Email[type=XXX][:NUM]} +// where supported values for XXX are: +// - work +// - home +// - mobileme +// - other +// - any other custom value +// - {URL[type=XXX]} or {URL[:NUM]} or {URL[type=XXX][:NUM]} +// where supported values for XXX are: +// - work +// - home +// - homepage +// - other +// - any other custom value +// - {Dates[type=XXX]} or {Dates[:NUM]} or {Dates[type=XXX][:NUM]} +// where supported values for XXX are: +// - anniversary +// - other +// - any other custom value +// - {Related[type=XXX]} or {Related[:NUM]} or {Related[type=XXX][:NUM]} +// where supported values for XXX are: +// - manager +// - assistant +// - father +// - mother +// - parent +// - brother +// - sister +// - child +// - friend +// - spouse +// - partner +// - other +// - any other custom value +// - {Profile[type=XXX]} or {Profile[:NUM]} or {Profile[type=XXX][:NUM]} +// where supported values for XXX are: +// - twitter +// - facebook +// - flickr +// - linkedin +// - myspace +// - sinaweibo +// - any other custom value +// - {IM[type=XXX]} or {IM[service-type=YYY]} or {IM[:NUM]} +// where supported values for XXX are: +// - work +// - home +// - mobileme +// - other +// - any other custom value +// and supported values for YYY are: +// - aim +// - icq +// - irc +// - jabber +// - msn +// - yahoo +// - facebook +// - gadugadu +// - googletalk +// - qq +// - skype +// - any other custom value +// +// NOTE: if you want to use the "any other custom value" option (for XXX +// or YYY above) you MUST double escape the following characters: +// =[]{}\ +// for example: +// - for profile type "=XXX=" use: '{Profile[type=\\=XXX\\=]}' +// - for profile type "\XXX\" use: '{Profile[type=\\\\XXX\\\\]}' +// +// NOTE: if you want to use curly brackets in the format string you must +// double escape it, e.g.: ['{Company}', '\\{{Department}\\}'] +// +// The format string (for the value option) is an array to allow full +// customization of the interface. For example if: +// value: ['{LastName} {MiddleName} {FirstName}'] +// and the person has no middle name, then the result in the column +// will be (without quotes): +// "Parker Peter" (note: two space characters) +// but if you use: +// value: ['{LastName}', ' {MiddleName}', ' {FirstName}'] +// then the result will be (without quotes): +// "Parker Peter" (note: only one space character) +// The reason is that only those elements of the array are appended +// into the result where non-empty substitution was performed (so the +// ' {MiddleName}' element in this case is ignored, because the person +// in the example above has no /more precisely has empty/ middle name). +// +// Examples: +// To specify two columns (named "Company" and "Department / LastName"), +// where the first will display the company name, and the second will display +// department for company contacts (with "Dep -" prefix), and lastname for +// personal contacts (with "Name -" prefix) use: +// var globalCollectionDisplay=[ +// { +// label: 'Company', +// value: ['{Company}'] +// }, +// { +// label: 'Department / LastName', +// value: { +// company: ['Dep - {Department}'], +// personal: ['Name - {LastName}'] +// } +// } +// ]; +// To specify 3 columns (named "Categories", "URL" and "IM"), where the first +// will display categories, second will display the third work URL, and third +// will display ICQ IM use: +// var globalCollectionDisplay=[ +// { +// label: 'Categories', +// value: ['{Categories}'] +// }, +// { +// label: 'URL', +// value: ['{URL[type=WORK][:2]}'] +// }, +// { +// label: 'IM', +// value: ['{IM[service-type=ICQ]}'] +// } +// ]; +// +// Recommended settings if globalGroupContactsByCompanies +// is set to false: +// var globalCollectionDisplay=[ +// { +// label: '{Name}', +// value: ['{LastName}', ' {MiddleName}', ' {FirstName}'] +// }, +// { +// label: '{Company} [{Department}]', +// value: ['{Company}', ' [{Department}]'] +// }, +// { +// label: '{JobTitle}', +// value: ['{JobTitle}'] +// }, +// { +// label: '{Email}', +// value: ['{Email[:0]}'] +// }, +// { +// label: '{Phone} 1', +// value: ['{Phone[:0]}'] +// }, +// { +// label: '{Phone} 2', +// value: ['{Phone[:1]}'] +// }, +// { +// label: '{NoteText}', +// value: ['{NoteText}'] +// } +// ]; +// +// Recommended settings if globalGroupContactsByCompanies +// is set to true: +// var globalCollectionDisplay=[ +// { +// label: '{Name}', +// value: { +// personal: ['{LastName}', ' {MiddleName}', ' {FirstName}'], +// company: ['{Company}', ' [{Department}]'] +// } +// }, +// { +// label: '{JobTitle}', +// value: ['{JobTitle}'] +// }, +// { +// label: '{Email}', +// value: ['{Email[:0]}'] +// }, +// { +// label: '{Phone} 1', +// value: ['{Phone[:0]}'] +// }, +// { +// label: '{Phone} 2', +// value: ['{Phone[:1]}'] +// }, +// { +// label: '{NoteText}', +// value: ['{NoteText}'] +// } +// ]; +// +// NOTE: if left undefined, the recommended settings will be used. + + +// globalCollectionSort +// This options sets the ordering of contacts in the interface. In general +// contacts are ordered alphabetically by an internal "sort string" which +// is created for each contact. Here you can specify how this internal string +// is created. The value is a simple array holding only the values from the +// value property defined in the globalCollectionDisplay option. +// If undefined, the definition from globalCollectionDisplay is used. +// Example: +// var globalCollectionSort = [ +// ['{LastName}'], +// ['{FirstName}'], +// ['{MiddleName}'], +// { +// company: ['{Categories}'], +// personal: ['{Company}'] +// } +// ]; +var globalCollectionSort=[ + ['{LastName}'], + ['{FirstName}'], + ['{MiddleName}'] +]; + + +// globalContactDataMinVisiblePercentage +// This option defines how the width for columns are computed. If you set +// it to 1 then 100% of all data in the column will be visible (the column +// width is determined by the longest string in the column). If you set it +// to 0.95 then 95% of data will fit into the column width, and the remaining +// 5% will be truncated (" ..."). +// Example: +var globalContactDataMinVisiblePercentage=0.95; + + diff --git a/pkgs/webapps/mantisbt_2/bug_report.php.diff b/pkgs/webapps/mantisbt_2/bug_report.php.diff new file mode 100644 index 00000000..29242529 --- /dev/null +++ b/pkgs/webapps/mantisbt_2/bug_report.php.diff @@ -0,0 +1,20 @@ +--- a/bug_report.php 2019-05-06 12:06:44.265508011 +0200 ++++ b/bug_report.php 2019-05-06 12:09:40.106952738 +0200 +@@ -67,6 +67,17 @@ + 'copy_files' => $f_copy_attachments_from_parent + ); + ++# begin captcha check for anon user ++if ( current_user_is_anonymous() && get_gd_version() > 0 ) { ++ $f_captcha = gpc_get_string( 'captcha', '' ); ++ $f_captcha = utf8_strtolower( trim( $f_captcha ) ); ++ ++ $t_securimage = new Securimage(); ++ if( $t_securimage->check( $f_captcha ) == false ) { ++ trigger_error( ERROR_SIGNUP_NOT_MATCHING_CAPTCHA, ERROR ); ++ } ++} ++ + if( $f_master_bug_id > 0 ) { + bug_ensure_exists( $f_master_bug_id ); + diff --git a/pkgs/webapps/mantisbt_2/bug_report_page.php.diff b/pkgs/webapps/mantisbt_2/bug_report_page.php.diff new file mode 100644 index 00000000..80dea911 --- /dev/null +++ b/pkgs/webapps/mantisbt_2/bug_report_page.php.diff @@ -0,0 +1,53 @@ +--- a/bug_report_page.php 2018-02-10 21:29:27.000000000 +0100 ++++ b/bug_report_page.php 2018-03-03 15:04:19.622499678 +0100 +@@ -708,7 +708,50 @@ + + + + ++ 0 ) { ++ $t_securimage_path = 'vendor/dapphp/securimage'; ++ $t_securimage_show = $t_securimage_path . '/securimage_show.php'; ++ $t_securimage_play = $t_securimage_path . '/securimage_play.swf?' ++ . http_build_query( array( ++ 'audio_file' => $t_securimage_path . '/securimage_play.php', ++ 'bgColor1=' => '#fff', ++ 'bgColor2=' => '#fff', ++ 'iconColor=' => '#777', ++ 'borderWidth=' => 1, ++ 'borderColor=' => '#000', ++ ) ); ++?> ++ ++ CAPTCHA ++ ++ ++ ++ ++ ++ ++ ++ visual captcha ++
++
++ ++ ++ ++ ++
++ ++ ++ ++ + +
+ diff --git a/pkgs/webapps/mantisbt_2/bugnote_add.php.diff b/pkgs/webapps/mantisbt_2/bugnote_add.php.diff new file mode 100644 index 00000000..4509f0ad --- /dev/null +++ b/pkgs/webapps/mantisbt_2/bugnote_add.php.diff @@ -0,0 +1,20 @@ +--- a/bugnote_add.php 2018-02-10 21:29:27.000000000 +0100 ++++ b/bugnote_add.php 2018-03-03 15:13:12.439919511 +0100 +@@ -44,6 +44,17 @@ + + $t_query = array( 'issue_id' => $f_bug_id ); + ++# begin captcha check for anon user ++if ( current_user_is_anonymous() && get_gd_version() > 0 ) { ++ $f_captcha = gpc_get_string( 'captcha', '' ); ++ $f_captcha = utf8_strtolower( trim( $f_captcha ) ); ++ ++ $t_securimage = new Securimage(); ++ if( $t_securimage->check( $f_captcha ) == false ) { ++ trigger_error( ERROR_SIGNUP_NOT_MATCHING_CAPTCHA, ERROR ); ++ } ++} ++ + if( count( $f_files ) > 0 && is_blank( $f_text ) && helper_duration_to_minutes( $f_duration ) == 0 ) { + $t_payload = array( + 'files' => helper_array_transpose( $f_files ) diff --git a/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff b/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff new file mode 100644 index 00000000..a8589c71 --- /dev/null +++ b/pkgs/webapps/mantisbt_2/bugnote_add_inc.php.diff @@ -0,0 +1,52 @@ +--- a/bugnote_add_inc.php 2018-02-10 21:29:27.000000000 +0100 ++++ b/bugnote_add_inc.php 2018-03-03 15:14:27.332428557 +0100 +@@ -119,6 +119,49 @@ + + + ++ 0 ) { ++ $t_securimage_path = 'vendor/dapphp/securimage'; ++ $t_securimage_show = $t_securimage_path . '/securimage_show.php'; ++ $t_securimage_play = $t_securimage_path . '/securimage_play.swf?' ++ . http_build_query( array( ++ 'audio_file' => $t_securimage_path . '/securimage_play.php', ++ 'bgColor1=' => '#fff', ++ 'bgColor2=' => '#fff', ++ 'iconColor=' => '#777', ++ 'borderWidth=' => 1, ++ 'borderColor=' => '#000', ++ ) ); ++?> ++ ++ CAPTCHA ++ ++ ++ ++ ++ ++ ++ ++ visual captcha ++
++
++ ++ ++ ++ ++
++ ++ ++ ++ + + $t_changeset ) { ++ event_signal( 'EVENT_BUG_ACTION', array('RESOLVE', $t_bug_id) ); ++ } + } + + /** diff --git a/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix b/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix new file mode 100644 index 00000000..dc6c7de0 --- /dev/null +++ b/pkgs/webapps/mantisbt_2/plugins/source-integration/default.nix @@ -0,0 +1,21 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation rec { + version = "v2.2.0"; + name = "mantisbt-plugin-source-integration-${version}"; + src = fetchFromGitHub { + owner = "mantisbt-plugins"; + repo = "source-integration"; + rev = "44fc9e2e770aff4f40f56833f26a86ce0e2deb76"; + sha256 = "0gcm6kqqijnv303sk59zn27adwx5vkr545mwzyaq2nrpxnkwdy5b"; + }; + patches = [ + ./Source.API.php.diff + ]; + installPhase = '' + mkdir $out + cp -a Source* $out/ + ''; + passthru = { + selector = "Source*"; + }; +} diff --git a/pkgs/webapps/mastodon/default.nix b/pkgs/webapps/mastodon/default.nix new file mode 100644 index 00000000..12e4c2c8 --- /dev/null +++ b/pkgs/webapps/mastodon/default.nix @@ -0,0 +1,86 @@ +{ varDir ? "/var/lib/mastodon", mylibs, + stdenv, writeText, runCommand, + ruby_2_6, bundlerEnv, defaultGemConfig, + jq, protobuf, protobufc, pkgconfig, libidn, pam, nodejs, yarn }: +let + gems = bundlerEnv { + name = "mastodon-env"; + ruby = ruby_2_6; + gemset = ./gemset.nix; + gemdir = (mylibs.fetchedGithub ./mastodon.json).src; + groups = [ "default" "production" "test" "development" ]; + gemConfig = defaultGemConfig // { + redis-rack = attrs: { + preBuild = '' + sed -i 's!s\.files.*!!' redis-rack.gemspec + ''; + }; + tzinfo = attrs: { + preBuild = '' + sed -i 's!s\.files.*!!' tzinfo.gemspec + ''; + }; + cld3 = attrs: { + buildInputs = [ protobuf protobufc pkgconfig ]; + }; + idn-ruby = attrs: { + buildInputs = [ libidn ]; + }; + rpam2 = attrs: { + buildInputs = [ pam ]; + }; + }; + }; + yarnModules = let + info = mylibs.fetchedGithub ./mastodon.json; + packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' + cat ${info.src}/package.json | jq -r '.version = "${info.version}"' > $out + ''; + in + mylibs.yarn2nixPackage.mkYarnModules rec { + name = "mastodon-yarn"; + pname = name; + version = info.version; + packageJSON = packagejson; + yarnLock = "${info.src}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + all = { + buildInputs = [ mylibs.yarn2nixPackage.src ]; + }; + uws = { + postInstall = '' + npx node-gyp rebuild > build_log.txt 2>&1 || true + ''; + }; + }; + }; + mastodon_with_yarn = stdenv.mkDerivation (mylibs.fetchedGithub ./mastodon.json // rec { + installPhase = '' + cp -a . $out + cp -a ${yarnModules}/node_modules $out + ''; + buildInputs = [ yarnModules ]; + }); +in +stdenv.mkDerivation { + name = "mastodon"; + inherit mastodon_with_yarn; + builder = writeText "build_mastodon" '' + source $stdenv/setup + set -a + SECRET_KEY_BASE=Dummy + OTP_SECRET=Dummy + set +a + cp -a $mastodon_with_yarn $out + cd $out + chmod u+rwX . public + chmod -R u+rwX config/ + sed -i -e 's@^end$@ config.action_mailer.sendmail_settings = { location: ENV.fetch("SENDMAIL_LOCATION", "/usr/sbin/sendmail") }\nend@' config/environments/production.rb + RAILS_ENV=production ${gems}/bin/rails assets:precompile + rm -rf tmp/cache + ln -sf ${varDir}/tmp/cache tmp + ''; + buildInputs = [ gems gems.ruby nodejs yarn ]; + passthru = { inherit gems varDir; }; +} diff --git a/pkgs/webapps/mastodon/gemset.nix b/pkgs/webapps/mastodon/gemset.nix new file mode 100644 index 00000000..9bd2cd31 --- /dev/null +++ b/pkgs/webapps/mastodon/gemset.nix @@ -0,0 +1,2867 @@ +{ + actioncable = { + dependencies = ["actionpack" "nio4r" "websocket-driver"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0826k5ch0l03f9yrkxy69aiv039z4qi00lnahw2rzywd2iz6r68x"; + type = "gem"; + }; + version = "5.2.2"; + }; + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sfpb8s95cmkpp9ybyp2c88r55r5llscmmnkfwcwgasz9ncjiq5n"; + type = "gem"; + }; + version = "5.2.2"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iwhbqqn0cm39dq040iwq8cfyclqk3kyzwlp5k3j5cz8k2668wws"; + type = "gem"; + }; + version = "5.2.2"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lz04drbi1z0xhvb8jnr14pbf505lilr02arahxq7y3mxiz0rs8z"; + type = "gem"; + }; + version = "5.2.2"; + }; + active_model_serializers = { + dependencies = ["actionpack" "activemodel" "case_transform" "jsonapi-renderer"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02snasjwg3q2ar0m6c53ilc5lamx796hm37apk7jf6cx0x3kwzx9"; + type = "gem"; + }; + version = "0.10.8"; + }; + active_record_query_trace = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aharmy1fcd0plv9k0i2dk5icvnlww8n43ia8xahfkcask0cpidh"; + type = "gem"; + }; + version = "1.5.4"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jjkl62x2aprg55x9rpm0h2c82vr2qr989hg3l9r21l01q4822ir"; + type = "gem"; + }; + version = "5.2.2"; + }; + activemodel = { + dependencies = ["activesupport"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xmwi3mw8g4shbjvkhk72ra3r5jccbdsd4piphqka2y1h8s7sxvi"; + type = "gem"; + }; + version = "5.2.2"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport" "arel"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19a0sns6a5wz2wym25lb1dv4lbrrl5sd1n15s5ky2636znmhz30y"; + type = "gem"; + }; + version = "5.2.2"; + }; + activestorage = { + dependencies = ["actionpack" "activerecord" "marcel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c72837098sw384vk6dmrb2p7q3wx4swnibk6sw9dp4hn1vc4p31"; + type = "gem"; + }; + version = "5.2.2"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iya7vxqwxysr74s7b4z1x19gmnx5advimzip3cbmsd5bd43wfgz"; + type = "gem"; + }; + version = "5.2.2"; + }; + addressable = { + dependencies = ["public_suffix"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l"; + type = "gem"; + }; + version = "2.6.0"; + }; + airbrussh = { + dependencies = ["sshkit"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yp1sl5n94ksxpwmaajflbdls45s81hw4spgz01h19xs2zrvv8wl"; + type = "gem"; + }; + version = "1.3.0"; + }; + annotate = { + dependencies = ["activerecord" "rake"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l69l2kn06nkrnyq6gb1x322x5raxs8ms60shpf0v5dsi8lfig16"; + type = "gem"; + }; + version = "2.7.4"; + }; + arel = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0"; + type = "gem"; + }; + version = "9.0.0"; + }; + ast = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7"; + type = "gem"; + }; + version = "2.4.0"; + }; + attr_encrypted = { + dependencies = ["encryptor"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ncv2az1zlj33bsllr6q1qdvbw42gv91lxq0ryclbv8l8xh841jg"; + type = "gem"; + }; + version = "3.1.0"; + }; + av = { + dependencies = ["cocaine"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1swakpybf6g0nzfdn6q4s9c97ysc3i4ffk84dw8v2321fpvc8gqq"; + type = "gem"; + }; + version = "0.9.0"; + }; + aws-eventstream = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gdiwkg24jpx5f3bkw6vchgliicn6v9bpm09j0dldaxsca66q0wy"; + type = "gem"; + }; + version = "1.0.1"; + }; + aws-partitions = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v6ksvawcmi5m0sc3qpcvziidzhkxlcaqs851yvvq2s2r5hgdfgb"; + type = "gem"; + }; + version = "1.131.0"; + }; + aws-sdk-core = { + dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xaaqsy4lpgydg8drjnax62azjmnfpvfz9jk3ca333mdri6c6bvm"; + type = "gem"; + }; + version = "3.45.0"; + }; + aws-sdk-kms = { + dependencies = ["aws-sdk-core" "aws-sigv4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "195f12iygwlxj720gyikggdlxgfh4j371qa8dn7x4kwgq732b1fn"; + type = "gem"; + }; + version = "1.13.0"; + }; + aws-sdk-s3 = { + dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mpf7v5n19ymq585xr0s47d9hcjc6crx5vi99s2ivcl79k1xj87d"; + type = "gem"; + }; + version = "1.30.1"; + }; + aws-sigv4 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hzndv113i6bgy2n72i5l3mwn8vjnb6hhjxfkpn9mm2p5ra77yk7"; + type = "gem"; + }; + version = "1.0.3"; + }; + bcrypt = { + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy"; + type = "gem"; + }; + version = "3.1.12"; + }; + benchmark-ips = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w59c4qnwkjqwn7zyp9hshslbshna77vknmz43h0va5lxisd6ai2"; + type = "gem"; + }; + version = "2.7.2"; + }; + better_errors = { + dependencies = ["coderay" "erubi" "rack"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pqnxxsqqs7vnqvamk5bzs84dv584g9s0qaf2vqb1v2aj5dabcg7"; + type = "gem"; + }; + version = "2.5.0"; + }; + binding_of_caller = { + dependencies = ["debug_inspector"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05syqlks7463zsy1jdfbbdravdhj9hpj5pv2m74blqpv8bq4vv5g"; + type = "gem"; + }; + version = "0.8.0"; + }; + bootsnap = { + dependencies = ["msgpack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0g6r784lmjfhwi046w82phsk244byq9wkj1q3lddwxg9z559bmhy"; + type = "gem"; + }; + version = "1.3.2"; + }; + brakeman = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg37qknz1f10v4fgbn1s98gks0iimsgs1c8xra2jy16kpz4q86k"; + type = "gem"; + }; + version = "4.4.0"; + }; + browser = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0sdx0ny34i6vqxdsc7sy9g0nafdbrw8kvvb5xh9m18x1bzpqk92f"; + type = "gem"; + }; + version = "2.5.3"; + }; + builder = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; + type = "gem"; + }; + version = "3.2.3"; + }; + bullet = { + dependencies = ["activesupport" "uniform_notifier"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fhsq5r9xc3cb32zr21hnsb2zmwbkck7xjvds9ny4inhykrjg47m"; + type = "gem"; + }; + version = "5.9.0"; + }; + bundler-audit = { + dependencies = ["thor"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pm22xpn3xyymsainixnrk8v3l3xi9bzwkjkspx00cfzp84xvxbq"; + type = "gem"; + }; + version = "0.6.1"; + }; + byebug = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8"; + type = "gem"; + }; + version = "10.0.2"; + }; + capistrano = { + dependencies = ["airbrussh" "i18n" "rake" "sshkit"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1hj8hpmplxl41y6phsvkw2k8x3yxmkngs8yl8gkr7c1ma870p4"; + type = "gem"; + }; + version = "3.11.0"; + }; + capistrano-bundler = { + dependencies = ["capistrano" "sshkit"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p00rw2886v77kfjnh0mslyrv4lij5fa9niflz1lhynzlivgrmdr"; + type = "gem"; + }; + version = "1.3.0"; + }; + capistrano-rails = { + dependencies = ["capistrano" "capistrano-bundler"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19j82kiarrph1ilw2xfhfj62z0b53w0gph7613b21iccb2gn3dqy"; + type = "gem"; + }; + version = "1.4.0"; + }; + capistrano-rbenv = { + dependencies = ["capistrano" "sshkit"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182dmsliny87b74m9mxi7farmp03ycqh30yf58b2kcx7m2js2s92"; + type = "gem"; + }; + version = "2.1.4"; + }; + capistrano-yarn = { + dependencies = ["capistrano"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zdg2s061vl5b8114n909mrjb2hc1qx0i4wqx9nacsrcjgyp07l9"; + type = "gem"; + }; + version = "2.0.2"; + }; + capybara = { + dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lhif97mh6wlqf14lwgvyjipm7ip6dz3svwgs52kgd5p3qb6hy2b"; + type = "gem"; + }; + version = "3.12.0"; + }; + case_transform = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fzyws6spn5arqf6q604dh9mrj84a36k5hsc8z7jgcpfvhc49bg2"; + type = "gem"; + }; + version = "0.2"; + }; + charlock_holmes = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nf1l31n10yaark2rrg5qzyzcx9w80681449s3j09qmnipsl8rl5"; + type = "gem"; + }; + version = "0.7.6"; + }; + chewy = { + dependencies = ["activesupport" "elasticsearch" "elasticsearch-dsl"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m1n98fww2is9v4h73qnxjzs0l9ixx2szby5rip26g9l7mjwmm7v"; + type = "gem"; + }; + version = "5.0.0"; + }; + chunky_png = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w"; + type = "gem"; + }; + version = "1.3.10"; + }; + cld3 = { + dependencies = ["ffi"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a3q025jqfwf8id1g40cv7s5pn7mdwzjpgqyzhdxdci1ps5ycgmn"; + type = "gem"; + }; + version = "3.2.3"; + }; + climate_control = { + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q11v0iabvr6rif0d025xh078ili5frrihlj0m04zfg7lgvagxji"; + type = "gem"; + }; + version = "0.2.0"; + }; + cocaine = { + dependencies = ["climate_control"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01kk5xd7lspbkdvn6nyj0y51zhvia3z6r4nalbdcqw5fbsywwi7d"; + type = "gem"; + }; + version = "0.5.8"; + }; + coderay = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + concurrent-ruby = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1"; + type = "gem"; + }; + version = "1.1.4"; + }; + connection_pool = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"; + type = "gem"; + }; + version = "2.2.2"; + }; + crack = { + dependencies = ["safe_yaml"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"; + type = "gem"; + }; + version = "0.4.3"; + }; + crass = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"; + type = "gem"; + }; + version = "1.0.4"; + }; + css_parser = { + dependencies = ["addressable"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gwvf8mc8gnz4aizfijplv3594998h2j44ydakpzsdmkivs07v61"; + type = "gem"; + }; + version = "1.6.0"; + }; + debug_inspector = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vxr0xa1mfbkfcrn71n7c4f2dj7la5hvphn904vh20j3x4j5lrx0"; + type = "gem"; + }; + version = "0.0.3"; + }; + derailed_benchmarks = { + dependencies = ["benchmark-ips" "get_process_mem" "heapy" "memory_profiler" "rack" "rake" "thor"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c9djg1r2w461h97zmmdsdgnsrxqm4qfyp7gry9qxbav9skrplb8"; + type = "gem"; + }; + version = "1.3.5"; + }; + devise = { + dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"]; + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx"; + type = "gem"; + }; + version = "4.5.0"; + }; + devise-two-factor = { + dependencies = ["activesupport" "attr_encrypted" "devise" "railties" "rotp"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b61s5y1ch205lgf3xv8hcvyi27ddd0d4qbbcpnnakhn2bx16lmc"; + type = "gem"; + }; + version = "3.0.3"; + }; + devise_pam_authenticatable2 = { + dependencies = ["devise" "rpam2"]; + groups = ["pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13ipl52pkhc6vxp8ca31viwv01237bi2bfk3b1fixq1x46nf87p2"; + type = "gem"; + }; + version = "9.2.0"; + }; + diff-lcs = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yyh4lr03q2vafzsfqy1xax7vr8zn7mbddz3ax3vnlm5fg0px6pn"; + type = "gem"; + }; + version = "1.3.0"; + }; + domain_name = { + dependencies = ["unf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v"; + type = "gem"; + }; + version = "0.5.20180417"; + }; + doorkeeper = { + dependencies = ["railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0488m6nwp31mxrhayj60gsb7jgyw1lzh73r2kldx00a9bw3634d4"; + type = "gem"; + }; + version = "5.0.2"; + }; + dotenv = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rgl2kqhnxqbjvi9brbvb52iaq1z8yi0pl0bawk4fm6kl9igxr8f"; + type = "gem"; + }; + version = "2.6.0"; + }; + dotenv-rails = { + dependencies = ["dotenv" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1knzdflmy06bjwvi00kndcmh2bhzqna9ccmz9mbyc3xc0v5jr9h8"; + type = "gem"; + }; + version = "2.6.0"; + }; + elasticsearch = { + dependencies = ["elasticsearch-api" "elasticsearch-transport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0a08ynvxz5clfm2ndqpgjrv4aiga9m2y1ab34s3qkihdfdzdzhj8"; + type = "gem"; + }; + version = "6.0.2"; + }; + elasticsearch-api = { + dependencies = ["multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vkahknqn85vvwr1gzh8jf3pvdial0c0d524icg8x06vibqgzd5h"; + type = "gem"; + }; + version = "6.0.2"; + }; + elasticsearch-dsl = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mwn6hvkki560p7sfc841q15zzgldsk9lzm2mlvc2bra7x1yk2q8"; + type = "gem"; + }; + version = "0.1.5"; + }; + elasticsearch-transport = { + dependencies = ["faraday" "multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gpwbw70qisx681j1bw8xq6shg5kdxmcdzg6425af0b5881jg7iy"; + type = "gem"; + }; + version = "6.0.2"; + }; + encryptor = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0s8rvfl0vn8w7k1sgkc234060jh468s3zd45xa64p1jdmfa3zwmb"; + type = "gem"; + }; + version = "3.0.0"; + }; + equatable = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sjm9zjakyixyvsqziikdrsqfzis6j3fq23crgjkp6fwkfgndj7x"; + type = "gem"; + }; + version = "0.5.0"; + }; + erubi = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kagnf6ziahj0d781s6ryy6fwqwa3ad4xbzzj84p9m4nv4c2jir1"; + type = "gem"; + }; + version = "1.8.0"; + }; + et-orbi = { + dependencies = ["tzinfo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b"; + type = "gem"; + }; + version = "1.1.6"; + }; + excon = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2"; + type = "gem"; + }; + version = "0.62.0"; + }; + fabrication = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri"; + type = "gem"; + }; + version = "2.20.1"; + }; + faker = { + dependencies = ["i18n"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01q7wrk5bl0c0qrvg2my3kl0mbfnj1jpd89mqm3fzy4ggbkdhh7i"; + type = "gem"; + }; + version = "1.9.1"; + }; + faraday = { + dependencies = ["multipart-post"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dv1vcxxyw4vy0r2diiml0r8zqk1csrksfxv8nkrw61xlf2daaaa"; + type = "gem"; + }; + version = "0.15.0"; + }; + fast_blank = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16s1ilyvwzmkcgmklbrn0c2pch5n02vf921njx0bld4crgdr6z56"; + type = "gem"; + }; + version = "1.0.0"; + }; + fastimage = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iy9jm13r2r4yz41xaivhxs8mvqn57fjwihxvazbip002mq6rxfz"; + type = "gem"; + }; + version = "2.1.5"; + }; + ffi = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q"; + type = "gem"; + }; + version = "1.9.25"; + }; + fog-core = { + dependencies = ["builder" "excon" "formatador" "mime-types"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1agd6xgzk0rxrsjdpn94v4hy89s0nm2cs4zg2p880w2dan9xgrak"; + type = "gem"; + }; + version = "2.1.0"; + }; + fog-json = { + dependencies = ["fog-core" "multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx"; + type = "gem"; + }; + version = "1.2.0"; + }; + fog-openstack = { + dependencies = ["fog-core" "fog-json" "ipaddress"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0aphjrvmchmqbyxqq82yj0qngyvkmwdci9iqs8722fi23bk83gdl"; + type = "gem"; + }; + version = "0.3.7"; + }; + formatador = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + fugit = { + dependencies = ["et-orbi" "raabro"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i"; + type = "gem"; + }; + version = "1.1.6"; + }; + fuubar = { + dependencies = ["rspec-core" "ruby-progressbar"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr"; + type = "gem"; + }; + version = "2.3.2"; + }; + get_process_mem = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g"; + type = "gem"; + }; + version = "0.2.3"; + }; + globalid = { + dependencies = ["activesupport"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38"; + type = "gem"; + }; + version = "0.4.1"; + }; + goldfinger = { + dependencies = ["addressable" "http" "nokogiri" "oj"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n142035jhyqwczi52zjr07c8kygp9b9f158miaby3z5hygzjyzh"; + type = "gem"; + }; + version = "2.1.0"; + }; + hamlit = { + dependencies = ["temple" "thor" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hk338vkzmwszxdh0q02iw88rbr3bj3fd7fzn4psm8wy80zcgl9i"; + type = "gem"; + }; + version = "2.8.8"; + }; + hamlit-rails = { + dependencies = ["actionpack" "activesupport" "hamlit" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14gzlp6w1j3b5fb4bhbjjh24skx031vnfc2shym9bkmq3r0p8dws"; + type = "gem"; + }; + version = "0.2.0"; + }; + hamster = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n1lsh96vnyc1pnzyd30f9prcsclmvmkdb3nm5aahnyizyiy6lar"; + type = "gem"; + }; + version = "3.0.0"; + }; + hashdiff = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9"; + type = "gem"; + }; + version = "0.3.7"; + }; + hashie = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"; + type = "gem"; + }; + version = "3.6.0"; + }; + heapy = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r9f38fpgjgaxskkwvsliijj6vfmgsff9pnranvvvzkdl67hk1hw"; + type = "gem"; + }; + version = "0.1.4"; + }; + highline = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "069sz5qmjpmv3x7kr5r3rwl20m9vqg97p15scmjdagglra34clkl"; + type = "gem"; + }; + version = "2.0.0"; + }; + hiredis = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04jj8k7lxqxw24sp0jiravigdkgsyrpprxpxm71ba93x1wr2w1bz"; + type = "gem"; + }; + version = "0.6.3"; + }; + hkdf = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04fixg0a51n4vy0j6c1hvisa2yl33m3jrrpxpb5sq6j511vjriil"; + type = "gem"; + }; + version = "0.3.0"; + }; + htmlentities = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj"; + type = "gem"; + }; + version = "4.3.4"; + }; + http = { + dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc"; + type = "gem"; + }; + version = "3.3.0"; + }; + http-cookie = { + dependencies = ["domain_name"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g"; + type = "gem"; + }; + version = "1.0.3"; + }; + http-form_data = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3"; + type = "gem"; + }; + version = "2.1.1"; + }; + http_accept_language = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + "http_parser.rb" = { + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = true; + rev = "54b17ba8c7d8d20a16dfc65d1775241833219cf2"; + sha256 = "079nwjsmg9jp33afc4f5bhjdbhcnfykdw4rd7ahhz8cbdkbhlzcp"; + type = "git"; + url = "https://github.com/tmm1/http_parser.rb"; + }; + version = "0.6.1"; + }; + httplog = { + dependencies = ["rack" "rainbow"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0grdjxfdbc4cffablh64iwyszskmv5sjpjz3zkp6xjxckdr7l7jj"; + type = "gem"; + }; + version = "1.2.0"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "088xnnpi7hq243n44fmgqvjr0m86ivk8r87k9b3ddq3b7nl6nyf9"; + type = "gem"; + }; + version = "1.5.2"; + }; + i18n-tasks = { + dependencies = ["activesupport" "ast" "erubi" "highline" "i18n" "parser" "rails-i18n" "rainbow" "terminal-table"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16592471ylgigmjx98pmbqibjwhavr4wb670kya9qh3nbgf7s1ym"; + type = "gem"; + }; + version = "0.9.28"; + }; + idn-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr"; + type = "gem"; + }; + version = "0.1.0"; + }; + ipaddress = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45"; + type = "gem"; + }; + version = "0.8.3"; + }; + iso-639 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10k1gpkkbxbasgjzh4hd32ygxzjb5312rphipm46ryxkpx556zzz"; + type = "gem"; + }; + version = "0.2.8"; + }; + jaro_winkler = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zz27z88qznix4r65gd9h56gl177snlfpgv10b0s69vi8qpl909l"; + type = "gem"; + }; + version = "1.5.2"; + }; + jmespath = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf"; + type = "gem"; + }; + version = "1.4.0"; + }; + json = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; + type = "gem"; + }; + version = "2.1.0"; + }; + json-ld = { + dependencies = ["multi_json" "rdf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yk4gnxzwlif9d0dy7csdb9ix60h69alk139aaip6304nx2yhdsk"; + type = "gem"; + }; + version = "3.0.2"; + }; + json-ld-preloaded = { + dependencies = ["json-ld" "multi_json" "rdf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c3yh5ayxvz33znbmzinigc5wivicib7nnykqjf00j2f9qag18pv"; + type = "gem"; + }; + version = "3.0.2"; + }; + jsonapi-renderer = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00ysmcv3nrccyimi334ida4axlfgir6cc2ryjxrf4xb97m1bfk5j"; + type = "gem"; + }; + version = "0.2.0"; + }; + jwt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"; + type = "gem"; + }; + version = "2.1.0"; + }; + kaminari = { + dependencies = ["activesupport" "kaminari-actionview" "kaminari-activerecord" "kaminari-core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27y5phifwpggspglmg8pmlf6n4jblxwziix9am42661c770jlm"; + type = "gem"; + }; + version = "1.1.1"; + }; + kaminari-actionview = { + dependencies = ["actionview" "kaminari-core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1386wshpy1ygbris0s7rv7lyzbs0v8dfqkzdwsrsgm9fd1ira640"; + type = "gem"; + }; + version = "1.1.1"; + }; + kaminari-activerecord = { + dependencies = ["activerecord" "kaminari-core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q31ik5648xi2hpy61knnjd0m7rvs17i93gzwcbh3ccj1y24gv2x"; + type = "gem"; + }; + version = "1.1.1"; + }; + kaminari-core = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cfjrhvidvgdwp9ffsm9d4c2s18k2zp3gnya3f41qb3fc6bc2q2w"; + type = "gem"; + }; + version = "1.1.1"; + }; + launchy = { + dependencies = ["addressable"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2"; + type = "gem"; + }; + version = "2.4.3"; + }; + letter_opener = { + dependencies = ["launchy"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09a7kgsmr10a0hrc9bwxglgqvppjxij9w8bxx91mnvh0ivaw0nq9"; + type = "gem"; + }; + version = "1.7.0"; + }; + letter_opener_web = { + dependencies = ["actionmailer" "letter_opener" "railties"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17qhwrkncrrp1bi2f7fbkm5lpnkdsiwy8jcvgr2wa97ck8y4x2bb"; + type = "gem"; + }; + version = "1.3.4"; + }; + link_header = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yamrdq4rywmnpdhbygnkkl9fdy249fg5r851nrkkxr97gj5rihm"; + type = "gem"; + }; + version = "0.0.8"; + }; + lograge = { + dependencies = ["actionpack" "activesupport" "railties" "request_store"]; + groups = ["production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00lcn7s3slfn32di4qwlx2yj5f9r2pcnd0naxrvqqwypcg1z2sdd"; + type = "gem"; + }; + version = "0.10.0"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"; + type = "gem"; + }; + version = "2.2.3"; + }; + mail = { + dependencies = ["mini_mime"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"; + type = "gem"; + }; + version = "2.7.1"; + }; + makara = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ri6r558nylaclqhfq1zhapfsyhryggln7gw69qb9i4c1rkfnyd2"; + type = "gem"; + }; + version = "0.4.0"; + }; + marcel = { + dependencies = ["mimemagic"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nxbjmcyg8vlw6zwagf17l9y2mwkagmmkg95xybpn4bmf3rfnksx"; + type = "gem"; + }; + version = "0.3.3"; + }; + mario-redis-lock = { + dependencies = ["redis"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1v9wdjcjqzpns2migxp4a5b4w82mipi0fwihbqz3q2qj2qm7wc17"; + type = "gem"; + }; + version = "1.2.1"; + }; + memory_profiler = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qir6bc2rw6lac6fsjhnspqyr01sh12d75dkd630qknjwvrrq8kj"; + type = "gem"; + }; + version = "0.9.12"; + }; + method_source = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + microformats = { + dependencies = ["json" "nokogiri"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14az36ax3n81fmwqjb5giixvxsnmxpnlfrsz012pl78x1bkrvfki"; + type = "gem"; + }; + version = "4.0.7"; + }; + mime-types = { + dependencies = ["mime-types-data"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk"; + type = "gem"; + }; + version = "3.2.2"; + }; + mime-types-data = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc"; + type = "gem"; + }; + version = "3.2018.0812"; + }; + mimemagic = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00ibc1mhvdfyfyl103xwb45621nwyqxf124cni5hyfhag0fn1c3q"; + type = "gem"; + }; + version = "0.3.2"; + }; + mini_mime = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3"; + type = "gem"; + }; + version = "1.0.1"; + }; + mini_portile2 = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"; + type = "gem"; + }; + version = "2.4.0"; + }; + minitest = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq"; + type = "gem"; + }; + version = "5.11.3"; + }; + msgpack = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09xy1wc4wfbd1jdrzgxwmqjzfdfxbz0cqdszq2gv6rmc3gv1c864"; + type = "gem"; + }; + version = "1.2.4"; + }; + multi_json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + multipart-post = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; + type = "gem"; + }; + version = "2.0.0"; + }; + necromancer = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0v9nhdkv6zrp7cn48xv7n2vjhsbslpvs0ha36mfkcd56cp27pavz"; + type = "gem"; + }; + version = "0.4.0"; + }; + net-ldap = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh"; + type = "gem"; + }; + version = "0.16.1"; + }; + net-scp = { + dependencies = ["net-ssh"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j"; + type = "gem"; + }; + version = "1.2.1"; + }; + net-ssh = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qfanf71yv8w7yl9l9wqcy68i2x1ghvnf8m581yy4pl0anfdhqw8"; + type = "gem"; + }; + version = "5.0.2"; + }; + nio4r = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"; + type = "gem"; + }; + version = "2.3.1"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184"; + type = "gem"; + }; + version = "1.10.1"; + }; + nokogumbo = { + dependencies = ["nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qr7r2ysbp8b5q78yr8l5qpaxfqdw1i2yz6nsrbavdki8mqjgj24"; + type = "gem"; + }; + version = "2.0.0"; + }; + nsa = { + dependencies = ["activesupport" "concurrent-ruby" "sidekiq" "statsd-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1i1bhmvs49yv70pgl41lx1lr8x6whg52szb8ic1jb6wmmxr2ylcz"; + type = "gem"; + }; + version = "0.2.7"; + }; + oj = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0swv2ryjgbcyrisb2arf88rz0pf8d8f8g7iihc2fhz96a1h985n0"; + type = "gem"; + }; + version = "3.7.8"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p16h1rp8by05k8gfw17xjhgwp60dk8qmj1xalv1n23kmxfsxb1x"; + type = "gem"; + }; + version = "1.9.0"; + }; + omniauth-cas = { + dependencies = ["addressable" "nokogiri" "omniauth"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nnk7cr45aj7hj19zpky58yysvjg8mn5f45sj9knpn5f9kgld7p4"; + type = "gem"; + }; + version = "1.1.1"; + }; + omniauth-saml = { + dependencies = ["omniauth" "ruby-saml"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pg3pw4yjd9w1rn3lkycllrvd767pydbhldgdcqbbcck01asfcfz"; + type = "gem"; + }; + version = "1.10.1"; + }; + orm_adapter = { + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda"; + type = "gem"; + }; + version = "0.5.0"; + }; + ostatus2 = { + dependencies = ["addressable" "http" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fj27nr38g5y52s755pmg5zifwc6n88bw2zmkc22kg4vrhs64k19"; + type = "gem"; + }; + version = "2.0.3"; + }; + ox = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15vkq18fp58504ld9vfakisxdmp68pk5y1bmmm5g7b0q25p8z5pq"; + type = "gem"; + }; + version = "2.10.0"; + }; + paperclip = { + dependencies = ["activemodel" "activesupport" "mime-types" "mimemagic" "terrapin"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04mlw7aqj20ry0fy92gxnxg99hy5xczff7rhywfzz4mqlhc2wgg7"; + type = "gem"; + }; + version = "6.0.0"; + }; + paperclip-av-transcoder = { + dependencies = ["av" "paperclip"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gcnp3fpdb5lqilcij4yqga6397nb7zyyf9lzxnqpbp7cvc18lhf"; + type = "gem"; + }; + version = "0.6.4"; + }; + parallel = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "005shcy8dabc7lwydpkbhd3fx8bfqzvsj6g04r90mx0wky10lz84"; + type = "gem"; + }; + version = "1.13.0"; + }; + parallel_tests = { + dependencies = ["parallel"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13qgd5ajq1vm3ks8fl9vs4w4lx4s7ilm74w6vbyzi952mp6h4n2x"; + type = "gem"; + }; + version = "2.27.1"; + }; + parser = { + dependencies = ["ast"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hhz2k5417vr2k1llwqgjdnmyrhlpqicy0y2arr6r1gp04fg9wlm"; + type = "gem"; + }; + version = "2.6.0.0"; + }; + pastel = { + dependencies = ["equatable" "tty-color"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yf30d9kzpm96gw9kwbv31p0qigwfykn8qdis5950plnzgc1vlp1"; + type = "gem"; + }; + version = "0.7.2"; + }; + pg = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fmnyxcyrvgdbgq7m09whgn9i8rwfybk0w8aii1nc4g5kqw0k2jy"; + type = "gem"; + }; + version = "1.1.4"; + }; + pghero = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nvg9jwynnw3brignq6raka0abrcjmm8mr8yxhvybjpmr6lyyjrd"; + type = "gem"; + }; + version = "2.2.0"; + }; + pkg-config = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hhzz9q3c90bjh5ncq2rvw1gszkw6kq3zxjy5pdbha23p01v6fv8"; + type = "gem"; + }; + version = "1.3.2"; + }; + posix-spawn = { + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "58465d2e213991f8afb13b984854a49fcdcc980c"; + sha256 = "1mq284bps0y4yfwkhvj2j27g6lpzfhzw1bypim1a0n1js7j54vhk"; + type = "git"; + url = "https://github.com/rtomayko/posix-spawn"; + }; + version = "0.3.13"; + }; + powerpack = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv"; + type = "gem"; + }; + version = "0.1.2"; + }; + premailer = { + dependencies = ["addressable" "css_parser" "htmlentities"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1xrhmialxn5vlp1nmf40a4db9gji4h2wbzd7f43sz64z8lvrjj6h"; + type = "gem"; + }; + version = "1.11.1"; + }; + premailer-rails = { + dependencies = ["actionmailer" "premailer"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1avh2bkhabicf1zxla8z6ig5192h3vdzli4d2y9wmxfwgh549lmx"; + type = "gem"; + }; + version = "1.10.2"; + }; + private_address_check = { + groups = ["production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05phz0vscfh9chv90yc9091pifw3cpwkh76flnhrmvja1q3na4cy"; + type = "gem"; + }; + version = "0.5.0"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g"; + type = "gem"; + }; + version = "3.6.0"; + }; + pry-rails = { + dependencies = ["pry"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cf4ii53w2hdh7fn8vhqpzkymmchjbwij4l3m7s6fsxvb9bn51j6"; + type = "gem"; + }; + version = "0.3.9"; + }; + public_suffix = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; + type = "gem"; + }; + version = "3.0.3"; + }; + puma = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k7dqxnq0dnf5rxkgs9rknclkn3ah7lsdrk6nrqxla8qzy31wliq"; + type = "gem"; + }; + version = "3.12.0"; + }; + pundit = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rqnll033ya64qvknbmnq076q9mxaibvcd7q70jhkpjda1xi4703"; + type = "gem"; + }; + version = "2.0.1"; + }; + raabro = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq"; + type = "gem"; + }; + version = "1.1.6"; + }; + rack = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-attack = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11y6kw7hj2z25ba67www6qap7shj2bp6s43h57cn4yrid9kbsibs"; + type = "gem"; + }; + version = "5.4.2"; + }; + rack-cors = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013"; + type = "gem"; + }; + version = "1.0.2"; + }; + rack-protection = { + dependencies = ["rack"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk"; + type = "gem"; + }; + version = "2.0.5"; + }; + rack-proxy = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1igdsim4ifyx9rfcjbxcwmf2vnxca3f8wmr2sj9j118a21g455pp"; + type = "gem"; + }; + version = "0.6.4"; + }; + rack-test = { + dependencies = ["rack"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rails = { + dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m9cszds68dsiycciiayd3c9g90s2yzn1izkr3gpgqkfw6dmvzyr"; + type = "gem"; + }; + version = "5.2.2"; + }; + rails-controller-testing = { + dependencies = ["actionpack" "actionview" "activesupport"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m1rklj6pvzi4fydxcmcv4q0xd7913hhhw1hw530nfz1wkl7vjlf"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "nokogiri"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i"; + type = "gem"; + }; + version = "2.0.3"; + }; + rails-html-sanitizer = { + dependencies = ["loofah"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr"; + type = "gem"; + }; + version = "1.0.4"; + }; + rails-i18n = { + dependencies = ["i18n" "railties"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l"; + type = "gem"; + }; + version = "5.1.2"; + }; + rails-settings-cached = { + dependencies = ["rails"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wyhyls0aqb1iw7mnaldg39w3mnbi3anmpbvb52rjwkpj2mchhnc"; + type = "gem"; + }; + version = "0.6.6"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00pnylmbz4c46mxw5lhxi8h39lndfg6fs1hpd0qd6swnjhkqsr1l"; + type = "gem"; + }; + version = "5.2.2"; + }; + rainbow = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk"; + type = "gem"; + }; + version = "3.0.0"; + }; + rake = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sy5a7nh6xjdc9yhcw31jji7ssrf9v5806hn95gbrzr998a2ydjn"; + type = "gem"; + }; + version = "12.3.2"; + }; + rb-fsevent = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71"; + type = "gem"; + }; + version = "0.9.10"; + }; + rdf = { + dependencies = ["hamster" "link_header"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ylgsspdj2g0af0pgfi1ry50x8ng5069223238vg8kz0p7b24q79"; + type = "gem"; + }; + version = "3.0.9"; + }; + rdf-normalize = { + dependencies = ["rdf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h8qk3x5frqbgb4gj9ga75ddls47x8qhghscgz82gfq76m4r45g0"; + type = "gem"; + }; + version = "0.3.3"; + }; + redis = { + groups = ["default" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rk6mmy3y2jd34llrf591ribl1p54ghkw7m96wrbamy8fwva5zqv"; + type = "gem"; + }; + version = "4.1.0"; + }; + redis-actionpack = { + dependencies = ["actionpack" "redis-rack" "redis-store"]; + groups = ["default" "production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15k41gz7nygd4yydk2yd25gghya1j7q6zifk4mdrra6bwnwjbm63"; + type = "gem"; + }; + version = "5.0.2"; + }; + redis-activesupport = { + dependencies = ["activesupport" "redis-store"]; + groups = ["default" "production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rq5dhrzc1l8c7f5gx9r7mvnsk5206dfwih3yv5si5rf42nx2ay5"; + type = "gem"; + }; + version = "5.0.4"; + }; + redis-namespace = { + dependencies = ["redis"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r7daagrjjribn098dxwbv9zivrbq2rsffbkj2ccxyn9lmjjbgah"; + type = "gem"; + }; + version = "1.6.0"; + }; + redis-rack = { + dependencies = ["rack" "redis-store"]; + groups = ["default" "production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0px0wv8zripc6lrn3k0k61j6nlxda145q8sz50yvnig17wlk36gb"; + type = "gem"; + }; + version = "2.0.4"; + }; + redis-rails = { + dependencies = ["redis-actionpack" "redis-activesupport" "redis-store"]; + groups = ["production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hjvkyaw5hgz7v6fgwdk8pb966z44h1gv8jarmb0gwhkqmjnsh40"; + type = "gem"; + }; + version = "5.0.2"; + }; + redis-store = { + dependencies = ["redis"]; + groups = ["default" "production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cpg4fmqcyl8mm77l852xsidp8384a7s1mgbpki999swvq97svi4"; + type = "gem"; + }; + version = "1.5.0"; + }; + regexp_parser = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq"; + type = "gem"; + }; + version = "1.3.0"; + }; + request_store = { + dependencies = ["rack"]; + groups = ["default" "production"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d"; + type = "gem"; + }; + version = "1.4.1"; + }; + responders = { + dependencies = ["actionpack" "railties"]; + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn"; + type = "gem"; + }; + version = "2.4.0"; + }; + rotp = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w8d6svhq3y9y952r8cqirxvdx12zlkb7zxjb44bcbidb2sisy4d"; + type = "gem"; + }; + version = "2.1.2"; + }; + rpam2 = { + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zvli3s4z1hf2l7gyfickm5i3afjrnycc3ihbiax6ji6arpbyf33"; + type = "gem"; + }; + version = "4.0.2"; + }; + rqrcode = { + dependencies = ["chunky_png"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0h1pnnydgs032psakvg3l779w3ghbn08ajhhhw19hpmnfhrs8k0a"; + type = "gem"; + }; + version = "0.10.1"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"; + type = "gem"; + }; + version = "3.8.0"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pf6n9l4sw1arlax1bdbm1znsvl8cgna2n6k6yk1bi8vz2n73ls1"; + type = "gem"; + }; + version = "3.8.2"; + }; + rspec-sidekiq = { + dependencies = ["rspec-core" "sidekiq"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y7pbqrbc8rjszc45vg4vz9qbn8aymgcc4ribrhvm76wrfz3ksfq"; + type = "gem"; + }; + version = "3.0.3"; + }; + rspec-support = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"; + type = "gem"; + }; + version = "3.8.0"; + }; + rubocop = { + dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pq00qwlmcv52dbhgbk534ggwn1ny9k3sq3vfb1zk3r4psnqz2jy"; + type = "gem"; + }; + version = "0.63.1"; + }; + ruby-progressbar = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk"; + type = "gem"; + }; + version = "1.10.0"; + }; + ruby-saml = { + dependencies = ["nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12f3mmyds4y8f7535p79xzx0wnp7rj02h1fp2x3j2hy5vrkmz2k4"; + type = "gem"; + }; + version = "1.9.0"; + }; + rufus-scheduler = { + dependencies = ["fugit"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "074w41a88343cbv8ydkpl3firhvh3kbh8ppldhdmpvv2g569m32i"; + type = "gem"; + }; + version = "3.5.2"; + }; + safe_yaml = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094"; + type = "gem"; + }; + version = "1.0.4"; + }; + sanitize = { + dependencies = ["crass" "nokogiri" "nokogumbo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rsb2gvqdh41miq7xjckidmgnjh3slvfqbp1hh4s6xfhc32r8g3s"; + type = "gem"; + }; + version = "5.0.0"; + }; + sass = { + dependencies = ["sass-listen"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh"; + type = "gem"; + }; + version = "3.6.0"; + }; + sass-listen = { + dependencies = ["rb-fsevent" "rb-inotify"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df"; + type = "gem"; + }; + version = "4.0.0"; + }; + scss_lint = { + dependencies = ["rake" "sass"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dv4ff1lqbgqdx99nwg059c983dhw67kvvjd21f6vf62cjx09lpn"; + type = "gem"; + }; + version = "0.57.1"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack" "rack-protection" "redis"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1caiq5f5z5vzfria554n04pcbwc8zixf1fpavaksly9zywr3pc29"; + type = "gem"; + }; + version = "5.2.5"; + }; + sidekiq-bulk = { + dependencies = ["sidekiq"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08nyxzmgf742irafy3l4fj09d4s5pyvsh0dzlh8y4hl51rgkh4xv"; + type = "gem"; + }; + version = "0.2.0"; + }; + sidekiq-scheduler = { + dependencies = ["redis" "rufus-scheduler" "sidekiq" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1n38p1ig8rx4ndqxcsc2gyzbaaax6r16b1xkn9mgcwwfx8qd5dbw"; + type = "gem"; + }; + version = "3.0.0"; + }; + sidekiq-unique-jobs = { + dependencies = ["concurrent-ruby" "sidekiq" "thor"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13d58w83jx03w033mm77c42cd409by4idqca3nfbgq0bjx4hqwik"; + type = "gem"; + }; + version = "6.0.8"; + }; + simple-navigation = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk"; + type = "gem"; + }; + version = "4.0.5"; + }; + simple_form = { + dependencies = ["actionpack" "activemodel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1221bf6glwinknrnp3pa2676ayg1yxyfa6l6lbajc72950v5mzm6"; + type = "gem"; + }; + version = "4.1.0"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"; + type = "gem"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"; + type = "gem"; + }; + version = "3.2.1"; + }; + sshkit = { + dependencies = ["net-scp" "net-ssh"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1982pcckxy811gm6z9h8brkds13mrgrx8sgmdz8dq5rg1h91y0yw"; + type = "gem"; + }; + version = "1.17.0"; + }; + stackprof = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1v7mkl4ng2is5h0glivhcjjkkj2shq1qzx9sg9shw9nn8xvg7i4w"; + type = "gem"; + }; + version = "0.2.12"; + }; + statsd-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0djig5dnqjgww6wrw3f1mvnnjllznahlchvk4lvs4wx9qjsqpysr"; + type = "gem"; + }; + version = "1.4.0"; + }; + stoplight = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c55ar2chyivz8n6xkhyq36hgpb0b7cfqfjrcyyv9sjiyrbqyhic"; + type = "gem"; + }; + version = "2.1.3"; + }; + streamio-ffmpeg = { + dependencies = ["multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nnxizc0371vwh0k6gqjj1b7fjszydpqfz549n6qn2q1pza3894z"; + type = "gem"; + }; + version = "3.0.2"; + }; + strong_migrations = { + dependencies = ["activerecord"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0scrffkhjx14rrk5cn01vg20y3vvhzzb47a7c9wa864aq8j8kw7z"; + type = "gem"; + }; + version = "0.3.1"; + }; + temple = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq"; + type = "gem"; + }; + version = "0.8.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk"; + type = "gem"; + }; + version = "1.8.0"; + }; + terrapin = { + dependencies = ["climate_control"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p18f05r0c5s70571gqig3z2ym74wx79s6rd45sprp207bqskzn9"; + type = "gem"; + }; + version = "0.6.0"; + }; + thor = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29"; + type = "gem"; + }; + version = "0.20.3"; + }; + thread_safe = { + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; + type = "gem"; + }; + version = "0.3.6"; + }; + tilt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra"; + type = "gem"; + }; + version = "2.0.8"; + }; + timers = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx"; + type = "gem"; + }; + version = "4.2.0"; + }; + tty-color = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zz5xa6xbrj69h334d8nx7z732fz80s1a0b02b53mim95p80s7bk"; + type = "gem"; + }; + version = "0.4.3"; + }; + tty-command = { + dependencies = ["pastel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d1fghdvnlc8m5i36h7gswn21232k2f9z5ls73fhs9p5ryfs4vz7"; + type = "gem"; + }; + version = "0.8.2"; + }; + tty-cursor = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1f4rsapf4apaxn11xnqrq7axgrlvn6pdlqxqb2g34jnpfh5yrk1i"; + type = "gem"; + }; + version = "0.6.0"; + }; + tty-prompt = { + dependencies = ["necromancer" "pastel" "timers" "tty-cursor" "tty-reader"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wjlsrzky7n7fr4psy2jbi4qpcixkq3196g0bbnmmjy6f26vrjcm"; + type = "gem"; + }; + version = "0.18.1"; + }; + tty-reader = { + dependencies = ["tty-cursor" "tty-screen" "wisper"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r1cbfmkprp2m8jbf5f59jqn2zda7xqxj3gzdsgpz8v7arp9m3wn"; + type = "gem"; + }; + version = "0.5.0"; + }; + tty-screen = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0azpjgyhdm8ycblnx9crq3dgb2x8yg454a13n60zfpsc0n138sw1"; + type = "gem"; + }; + version = "0.6.5"; + }; + twitter-text = { + dependencies = ["unf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg"; + type = "gem"; + }; + version = "1.14.7"; + }; + tzinfo = { + dependencies = ["thread_safe"]; + groups = ["default" "development" "pam_authentication" "production" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z"; + type = "gem"; + }; + version = "1.2.5"; + }; + tzinfo-data = { + dependencies = ["tzinfo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jzl5cv7b5h24lh8s42s3j1ls0p27b5wmc4zdjs2j7hajgbdp19q"; + type = "gem"; + }; + version = "1.2018.9"; + }; + unf = { + dependencies = ["unf_ext"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1"; + type = "gem"; + }; + version = "0.0.7.5"; + }; + unicode-display_width = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bq528fibi8s0jmxz0xzlgzggdq0x4fx46wfqz49478pv8gb2diq"; + type = "gem"; + }; + version = "1.4.1"; + }; + uniform_notifier = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mb0pq99zm17qnz2czmad5b3z0ivzkf6493afj3n550kd56z18s3"; + type = "gem"; + }; + version = "1.12.1"; + }; + warden = { + dependencies = ["rack"]; + groups = ["default" "pam_authentication"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0va966lhpylcwbqb9n151kkihx30agh0a57mwjwdxyanll4s1q12"; + type = "gem"; + }; + version = "1.2.7"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gg0c2sxq7rni0b93w47h7p7cn590xdhf5va7ska48inpipwlgxp"; + type = "gem"; + }; + version = "3.5.1"; + }; + webpacker = { + dependencies = ["activesupport" "rack-proxy" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bw01ihvxpy05xzz3wq6p9d3lw7n4x10ivfrh70hlrjyixmapws6"; + type = "gem"; + }; + version = "3.5.5"; + }; + webpush = { + dependencies = ["hkdf" "jwt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1id7i4gdqck8wj6x22q8dljynvznvwn9f0pgi8h8jiy5dm7m0cf2"; + type = "gem"; + }; + version = "0.3.6"; + }; + websocket-driver = { + dependencies = ["websocket-extensions"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1551k3fs3kkb3ghqfj3n5lps0ikb9pyrdnzmvgfdxy8574n4g1dn"; + type = "gem"; + }; + version = "0.7.0"; + }; + websocket-extensions = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"; + type = "gem"; + }; + version = "0.1.3"; + }; + wisper = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ar2wn3pxnffyzcmf67y67b8lnhgn9zayqhqp26jwqa3d73j71kd"; + type = "gem"; + }; + version = "2.0.0"; + }; + xpath = { + dependencies = ["nokogiri"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; +} \ No newline at end of file diff --git a/pkgs/webapps/mastodon/mastodon.json b/pkgs/webapps/mastodon/mastodon.json new file mode 100644 index 00000000..df73e8f6 --- /dev/null +++ b/pkgs/webapps/mastodon/mastodon.json @@ -0,0 +1,15 @@ +{ + "tag": "v2.7.4", + "meta": { + "name": "mastodon", + "url": "https://github.com/tootsuite/mastodon", + "branch": "refs/tags/v2.7.4" + }, + "github": { + "owner": "tootsuite", + "repo": "mastodon", + "rev": "a91349d45da18d3c85f68ae9be762dad6301c3cf", + "sha256": "0x16c2m8d9nszr9hjw6j1i8gicvpgxzli5afaqd0z144y0ar62qa", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/mastodon/yarn-packages.nix b/pkgs/webapps/mastodon/yarn-packages.nix new file mode 100644 index 00000000..feca6686 --- /dev/null +++ b/pkgs/webapps/mastodon/yarn-packages.nix @@ -0,0 +1,11876 @@ +{fetchurl, linkFarm}: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + + { + name = "_babel_code_frame___code_frame_7.0.0.tgz"; + path = fetchurl { + name = "_babel_code_frame___code_frame_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz"; + sha1 = "06e2ab19bdb535385559aabb5ba59729482800f8"; + }; + } + + { + name = "_babel_core___core_7.2.2.tgz"; + path = fetchurl { + name = "_babel_core___core_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz"; + sha1 = "07adba6dde27bb5ad8d8672f15fde3e08184a687"; + }; + } + + { + name = "_babel_generator___generator_7.2.2.tgz"; + path = fetchurl { + name = "_babel_generator___generator_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz"; + sha1 = "18c816c70962640eab42fe8cae5f3947a5c65ccc"; + }; + } + + { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz"; + sha1 = "323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"; + }; + } + + { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz"; + sha1 = "6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"; + }; + } + + { + name = "_babel_helper_builder_react_jsx___helper_builder_react_jsx_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_builder_react_jsx___helper_builder_react_jsx_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz"; + sha1 = "fa154cb53eb918cf2a9a7ce928e29eb649c5acdb"; + }; + } + + { + name = "_babel_helper_call_delegate___helper_call_delegate_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_call_delegate___helper_call_delegate_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz"; + sha1 = "6a957f105f37755e8645343d3038a22e1449cc4a"; + }; + } + + { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.2.3.tgz"; + path = fetchurl { + name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz"; + sha1 = "f6e719abb90cb7f4a69591e35fd5eb89047c4a7c"; + }; + } + + { + name = "_babel_helper_define_map___helper_define_map_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_define_map___helper_define_map_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz"; + sha1 = "3b74caec329b3c80c116290887c0dd9ae468c20c"; + }; + } + + { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz"; + sha1 = "537fa13f6f1674df745b0c00ec8fe4e99681c8f6"; + }; + } + + { + name = "_babel_helper_function_name___helper_function_name_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_function_name___helper_function_name_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz"; + sha1 = "a0ceb01685f73355d4360c1247f582bfafc8ff53"; + }; + } + + { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_get_function_arity___helper_get_function_arity_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz"; + sha1 = "83572d4320e2a4657263734113c42868b64e49c3"; + }; + } + + { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_hoist_variables___helper_hoist_variables_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz"; + sha1 = "46adc4c5e758645ae7a45deb92bab0918c23bb88"; + }; + } + + { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz"; + sha1 = "8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"; + }; + } + + { + name = "_babel_helper_module_imports___helper_module_imports_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_module_imports___helper_module_imports_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz"; + sha1 = "96081b7111e486da4d2cd971ad1a4fe216cc2e3d"; + }; + } + + { + name = "_babel_helper_module_transforms___helper_module_transforms_7.2.2.tgz"; + path = fetchurl { + name = "_babel_helper_module_transforms___helper_module_transforms_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz"; + sha1 = "ab2f8e8d231409f8370c883d20c335190284b963"; + }; + } + + { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz"; + sha1 = "a2920c5702b073c15de51106200aa8cad20497d5"; + }; + } + + { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_plugin_utils___helper_plugin_utils_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz"; + sha1 = "bbb3fbee98661c569034237cc03967ba99b4f250"; + }; + } + + { + name = "_babel_helper_regex___helper_regex_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_regex___helper_regex_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz"; + sha1 = "2c1718923b57f9bbe64705ffe5640ac64d9bdb27"; + }; + } + + { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz"; + sha1 = "361d80821b6f38da75bd3f0785ece20a88c5fe7f"; + }; + } + + { + name = "_babel_helper_replace_supers___helper_replace_supers_7.2.3.tgz"; + path = fetchurl { + name = "_babel_helper_replace_supers___helper_replace_supers_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz"; + sha1 = "19970020cf22677d62b3a689561dbd9644d8c5e5"; + }; + } + + { + name = "_babel_helper_simple_access___helper_simple_access_7.1.0.tgz"; + path = fetchurl { + name = "_babel_helper_simple_access___helper_simple_access_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz"; + sha1 = "65eeb954c8c245beaa4e859da6188f39d71e585c"; + }; + } + + { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.0.0.tgz"; + path = fetchurl { + name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz"; + sha1 = "3aae285c0311c2ab095d997b8c9a94cad547d813"; + }; + } + + { + name = "_babel_helper_wrap_function___helper_wrap_function_7.2.0.tgz"; + path = fetchurl { + name = "_babel_helper_wrap_function___helper_wrap_function_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz"; + sha1 = "c4e0012445769e2815b55296ead43a958549f6fa"; + }; + } + + { + name = "_babel_helpers___helpers_7.2.0.tgz"; + path = fetchurl { + name = "_babel_helpers___helpers_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz"; + sha1 = "8335f3140f3144270dc63c4732a4f8b0a50b7a21"; + }; + } + + { + name = "_babel_highlight___highlight_7.0.0.tgz"; + path = fetchurl { + name = "_babel_highlight___highlight_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz"; + sha1 = "f710c38c8d458e6dd9a201afb637fcb781ce99e4"; + }; + } + + { + name = "_babel_parser___parser_7.2.3.tgz"; + path = fetchurl { + name = "_babel_parser___parser_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz"; + sha1 = "32f5df65744b70888d17872ec106b02434ba1489"; + }; + } + + { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz"; + sha1 = "b289b306669dce4ad20b0252889a15768c9d417e"; + }; + } + + { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.2.3.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz"; + sha1 = "c9e1294363b346cff333007a92080f3203698461"; + }; + } + + { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.2.3.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.2.3.tgz"; + sha1 = "1fe5b0d22ce0c4418f225474ebd40267430364c0"; + }; + } + + { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz"; + sha1 = "568ecc446c6148ae6b267f02551130891e29f317"; + }; + } + + { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz"; + sha1 = "88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8"; + }; + } + + { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz"; + sha1 = "135d81edb68a081e55e56ec48541ece8065c38f5"; + }; + } + + { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz"; + sha1 = "abe7281fe46c95ddc143a65e5358647792039520"; + }; + } + + { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz"; + sha1 = "69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"; + }; + } + + { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz"; + sha1 = "c50b1b957dcc69e4b1127b65e1c33eef61570c1b"; + }; + } + + { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz"; + sha1 = "69c159ffaf4998122161ad8ebc5e6d1f55df8612"; + }; + } + + { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz"; + sha1 = "72bd13f6ffe1d25938129d2a186b11fd62951470"; + }; + } + + { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz"; + sha1 = "0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"; + }; + } + + { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz"; + sha1 = "3b7a3e733510c57e820b9142a6579ac8b0dfad2e"; + }; + } + + { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz"; + sha1 = "a94013d6eda8908dfe6a477e7f9eda85656ecf5c"; + }; + } + + { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz"; + sha1 = "9aeafbe4d6ffc6563bf8f8372091628f00779550"; + }; + } + + { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz"; + sha1 = "68b8a438663e88519e65b776f8938f3445b1a2ff"; + }; + } + + { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz"; + sha1 = "5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"; + }; + } + + { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz"; + sha1 = "f17c49d91eedbcdf5dd50597d16f5f2f770132d4"; + }; + } + + { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.2.2.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_classes___plugin_transform_classes_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz"; + sha1 = "6c90542f210ee975aa2aa8c8b5af7fa73a126953"; + }; + } + + { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz"; + sha1 = "83a7df6a658865b1c8f641d510c6f3af220216da"; + }; + } + + { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz"; + sha1 = "e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3"; + }; + } + + { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz"; + sha1 = "f0aabb93d120a8ac61e925ea0ba440812dbe0e49"; + }; + } + + { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz"; + sha1 = "d952c4930f312a4dbfff18f0b2914e60c35530b3"; + }; + } + + { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz"; + sha1 = "a63868289e5b4007f7054d46491af51435766008"; + }; + } + + { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz"; + sha1 = "ab7468befa80f764bb03d3cb5eef8cc998e1cad9"; + }; + } + + { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz"; + sha1 = "f7930362829ff99a3174c39f0afcc024ef59731a"; + }; + } + + { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_literals___plugin_transform_literals_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz"; + sha1 = "690353e81f9267dad4fd8cfd77eafa86aba53ea1"; + }; + } + + { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz"; + sha1 = "82a9bce45b95441f617a24011dc89d12da7f4ee6"; + }; + } + + { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz"; + sha1 = "c4f1933f5991d5145e9cfad1dfd848ea1727f404"; + }; + } + + { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz"; + sha1 = "912bfe9e5ff982924c81d0937c92d24994bb9068"; + }; + } + + { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz"; + sha1 = "7678ce75169f0877b8eb2235538c074268dd01ae"; + }; + } + + { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.0.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz"; + sha1 = "ae8fbd89517fa7892d20e6564e641e8770c3aa4a"; + }; + } + + { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz"; + sha1 = "b35d4c10f56bab5d650047dad0f1d8e8814b6598"; + }; + } + + { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz"; + sha1 = "0d5ad15dc805e2ea866df4dd6682bfe76d1408c2"; + }; + } + + { + name = "_babel_plugin_transform_react_display_name___plugin_transform_react_display_name_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_react_display_name___plugin_transform_react_display_name_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz"; + sha1 = "ebfaed87834ce8dc4279609a4f0c324c156e3eb0"; + }; + } + + { + name = "_babel_plugin_transform_react_inline_elements___plugin_transform_react_inline_elements_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_react_inline_elements___plugin_transform_react_inline_elements_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.2.0.tgz"; + sha1 = "3e36e7c47f1c21f52b2b0090d5cd83ceb19a4770"; + }; + } + + { + name = "_babel_plugin_transform_react_jsx_self___plugin_transform_react_jsx_self_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_react_jsx_self___plugin_transform_react_jsx_self_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz"; + sha1 = "461e21ad9478f1031dd5e276108d027f1b5240ba"; + }; + } + + { + name = "_babel_plugin_transform_react_jsx_source___plugin_transform_react_jsx_source_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_react_jsx_source___plugin_transform_react_jsx_source_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz"; + sha1 = "20c8c60f0140f5dd3cd63418d452801cf3f7180f"; + }; + } + + { + name = "_babel_plugin_transform_react_jsx___plugin_transform_react_jsx_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_react_jsx___plugin_transform_react_jsx_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz"; + sha1 = "ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f"; + }; + } + + { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.0.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz"; + sha1 = "5b41686b4ed40bef874d7ed6a84bdd849c13e0c1"; + }; + } + + { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz"; + sha1 = "566bc43f7d0aedc880eaddbd29168d0f248966ea"; + }; + } + + { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz"; + sha1 = "6333aee2f8d6ee7e28615457298934a3b46198f0"; + }; + } + + { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.2.2.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_spread___plugin_transform_spread_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz"; + sha1 = "3103a9abe22f742b6d406ecd3cd49b774919b406"; + }; + } + + { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz"; + sha1 = "a1e454b5995560a9c1e0d537dfc15061fd2687e1"; + }; + } + + { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz"; + sha1 = "d87ed01b8eaac7a92473f608c97c089de2ba1e5b"; + }; + } + + { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz"; + sha1 = "117d2bcec2fbf64b4b59d1f9819894682d29f2b2"; + }; + } + + { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.2.0.tgz"; + path = fetchurl { + name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz"; + sha1 = "4eb8db16f972f8abb5062c161b8b115546ade08b"; + }; + } + + { + name = "_babel_preset_env___preset_env_7.2.3.tgz"; + path = fetchurl { + name = "_babel_preset_env___preset_env_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz"; + sha1 = "948c8df4d4609c99c7e0130169f052ea6a7a8933"; + }; + } + + { + name = "_babel_preset_react___preset_react_7.0.0.tgz"; + path = fetchurl { + name = "_babel_preset_react___preset_react_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz"; + sha1 = "e86b4b3d99433c7b3e9e91747e2653958bc6b3c0"; + }; + } + + { + name = "_babel_runtime___runtime_7.0.0.tgz"; + path = fetchurl { + name = "_babel_runtime___runtime_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz"; + sha1 = "adeb78fedfc855aa05bc041640f3f6f98e85424c"; + }; + } + + { + name = "_babel_runtime___runtime_7.2.0.tgz"; + path = fetchurl { + name = "_babel_runtime___runtime_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz"; + sha1 = "b03e42eeddf5898e00646e4c840fa07ba8dcad7f"; + }; + } + + { + name = "_babel_template___template_7.2.2.tgz"; + path = fetchurl { + name = "_babel_template___template_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz"; + sha1 = "005b3fdf0ed96e88041330379e0da9a708eb2907"; + }; + } + + { + name = "_babel_traverse___traverse_7.2.3.tgz"; + path = fetchurl { + name = "_babel_traverse___traverse_7.2.3.tgz"; + url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz"; + sha1 = "7ff50cefa9c7c0bd2d81231fdac122f3957748d8"; + }; + } + + { + name = "_babel_types___types_7.2.2.tgz"; + path = fetchurl { + name = "_babel_types___types_7.2.2.tgz"; + url = "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz"; + sha1 = "44e10fc24e33af524488b716cdaee5360ea8ed1e"; + }; + } + + { + name = "_emotion_cache___cache_10.0.0.tgz"; + path = fetchurl { + name = "_emotion_cache___cache_10.0.0.tgz"; + url = "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.0.tgz"; + sha1 = "e22eadcb770de4131ec707c84207e9e1ce210413"; + }; + } + + { + name = "_emotion_hash___hash_0.7.1.tgz"; + path = fetchurl { + name = "_emotion_hash___hash_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.1.tgz"; + sha1 = "9833722341379fb7d67f06a4b00ab3c37913da53"; + }; + } + + { + name = "_emotion_memoize___memoize_0.7.1.tgz"; + path = fetchurl { + name = "_emotion_memoize___memoize_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz"; + sha1 = "e93c13942592cf5ef01aa8297444dc192beee52f"; + }; + } + + { + name = "_emotion_serialize___serialize_0.11.3.tgz"; + path = fetchurl { + name = "_emotion_serialize___serialize_0.11.3.tgz"; + url = "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.3.tgz"; + sha1 = "c4af2d96e3ddb9a749b7b567daa7556bcae45af2"; + }; + } + + { + name = "_emotion_sheet___sheet_0.9.2.tgz"; + path = fetchurl { + name = "_emotion_sheet___sheet_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.2.tgz"; + sha1 = "74e5c6b5e489a1ba30ab246ab5eedd96916487c4"; + }; + } + + { + name = "_emotion_stylis___stylis_0.8.3.tgz"; + path = fetchurl { + name = "_emotion_stylis___stylis_0.8.3.tgz"; + url = "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.3.tgz"; + sha1 = "3ca7e9bcb31b3cb4afbaeb66156d86ee85e23246"; + }; + } + + { + name = "_emotion_unitless___unitless_0.7.3.tgz"; + path = fetchurl { + name = "_emotion_unitless___unitless_0.7.3.tgz"; + url = "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz"; + sha1 = "6310a047f12d21a1036fb031317219892440416f"; + }; + } + + { + name = "_emotion_utils___utils_0.11.1.tgz"; + path = fetchurl { + name = "_emotion_utils___utils_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.1.tgz"; + sha1 = "8529b7412a6eb4b48bdf6e720cc1b8e6e1e17628"; + }; + } + + { + name = "_emotion_weak_memoize___weak_memoize_0.2.2.tgz"; + path = fetchurl { + name = "_emotion_weak_memoize___weak_memoize_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz"; + sha1 = "63985d3d8b02530e0869962f4da09142ee8e200e"; + }; + } + + { + name = "_gfx_zopfli___zopfli_1.0.10.tgz"; + path = fetchurl { + name = "_gfx_zopfli___zopfli_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/@gfx/zopfli/-/zopfli-1.0.10.tgz"; + sha1 = "8cccfcbd670f676cb240812bcf8380c9a66da367"; + }; + } + + { + name = "_types_node___node_10.12.18.tgz"; + path = fetchurl { + name = "_types_node___node_10.12.18.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz"; + sha1 = "1d3ca764718915584fcd9f6344621b7672665c67"; + }; + } + + { + name = "_types_q___q_1.5.1.tgz"; + path = fetchurl { + name = "_types_q___q_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz"; + sha1 = "48fd98c1561fe718b61733daed46ff115b496e18"; + }; + } + + { + name = "_types_react___react_16.4.6.tgz"; + path = fetchurl { + name = "_types_react___react_16.4.6.tgz"; + url = "https://registry.yarnpkg.com/@types/react/-/react-16.4.6.tgz"; + sha1 = "5024957c6bcef4f02823accf5974faba2e54fada"; + }; + } + + { + name = "_webassemblyjs_ast___ast_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_ast___ast_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz"; + sha1 = "b988582cafbb2b095e8b556526f30c90d057cace"; + }; + } + + { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz"; + sha1 = "a69f0af6502eb9a3c045555b1a6129d3d3f2e313"; + }; + } + + { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_api_error___helper_api_error_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz"; + sha1 = "c7b6bb8105f84039511a2b39ce494f193818a32a"; + }; + } + + { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_buffer___helper_buffer_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz"; + sha1 = "3122d48dcc6c9456ed982debe16c8f37101df39b"; + }; + } + + { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz"; + sha1 = "cf8f106e746662a0da29bdef635fcd3d1248364b"; + }; + } + + { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_fsm___helper_fsm_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz"; + sha1 = "df38882a624080d03f7503f93e3f17ac5ac01181"; + }; + } + + { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_module_context___helper_module_context_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz"; + sha1 = "d874d722e51e62ac202476935d649c802fa0e209"; + }; + } + + { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz"; + sha1 = "dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06"; + }; + } + + { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz"; + sha1 = "9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a"; + }; + } + + { + name = "_webassemblyjs_ieee754___ieee754_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_ieee754___ieee754_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz"; + sha1 = "c95839eb63757a31880aaec7b6512d4191ac640b"; + }; + } + + { + name = "_webassemblyjs_leb128___leb128_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_leb128___leb128_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz"; + sha1 = "d7267a1ee9c4594fd3f7e37298818ec65687db63"; + }; + } + + { + name = "_webassemblyjs_utf8___utf8_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_utf8___utf8_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz"; + sha1 = "06d7218ea9fdc94a6793aa92208160db3d26ee82"; + }; + } + + { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_edit___wasm_edit_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz"; + sha1 = "8c74ca474d4f951d01dbae9bd70814ee22a82005"; + }; + } + + { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_gen___wasm_gen_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz"; + sha1 = "9bbba942f22375686a6fb759afcd7ac9c45da1a8"; + }; + } + + { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_opt___wasm_opt_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz"; + sha1 = "b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7"; + }; + } + + { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wasm_parser___wasm_parser_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz"; + sha1 = "6e3d20fa6a3519f6b084ef9391ad58211efb0a1a"; + }; + } + + { + name = "_webassemblyjs_wast_parser___wast_parser_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_parser___wast_parser_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz"; + sha1 = "25bd117562ca8c002720ff8116ef9072d9ca869c"; + }; + } + + { + name = "_webassemblyjs_wast_printer___wast_printer_1.7.11.tgz"; + path = fetchurl { + name = "_webassemblyjs_wast_printer___wast_printer_1.7.11.tgz"; + url = "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz"; + sha1 = "c4245b6de242cb50a2cc950174fdbf65c78d7813"; + }; + } + + { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + path = fetchurl { + name = "_xtuc_ieee754___ieee754_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"; + sha1 = "eef014a3145ae477a1cbc00cd1e552336dceb790"; + }; + } + + { + name = "_xtuc_long___long_4.2.1.tgz"; + path = fetchurl { + name = "_xtuc_long___long_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz"; + sha1 = "5c85d662f76fa1d34575766c5dcd6615abcd30d8"; + }; + } + + { + name = "abab___abab_2.0.0.tgz"; + path = fetchurl { + name = "abab___abab_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz"; + sha1 = "aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"; + }; + } + + { + name = "abbrev___abbrev_1.1.1.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz"; + sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8"; + }; + } + + { + name = "accepts___accepts_1.3.5.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz"; + sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2"; + }; + } + + { + name = "acorn_dynamic_import___acorn_dynamic_import_3.0.0.tgz"; + path = fetchurl { + name = "acorn_dynamic_import___acorn_dynamic_import_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz"; + sha1 = "901ceee4c7faaef7e07ad2a47e890675da50a278"; + }; + } + + { + name = "acorn_globals___acorn_globals_4.3.0.tgz"; + path = fetchurl { + name = "acorn_globals___acorn_globals_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz"; + sha1 = "e3b6f8da3c1552a95ae627571f7dd6923bb54103"; + }; + } + + { + name = "acorn_jsx___acorn_jsx_5.0.1.tgz"; + path = fetchurl { + name = "acorn_jsx___acorn_jsx_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz"; + sha1 = "32a064fd925429216a09b141102bfdd185fae40e"; + }; + } + + { + name = "acorn_walk___acorn_walk_6.1.1.tgz"; + path = fetchurl { + name = "acorn_walk___acorn_walk_6.1.1.tgz"; + url = "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz"; + sha1 = "d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"; + }; + } + + { + name = "acorn___acorn_5.7.3.tgz"; + path = fetchurl { + name = "acorn___acorn_5.7.3.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz"; + sha1 = "67aa231bf8812974b85235a96771eb6bd07ea279"; + }; + } + + { + name = "acorn___acorn_6.0.4.tgz"; + path = fetchurl { + name = "acorn___acorn_6.0.4.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz"; + sha1 = "77377e7353b72ec5104550aa2d2097a2fd40b754"; + }; + } + + { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + path = fetchurl { + name = "ajv_errors___ajv_errors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"; + sha1 = "f35986aceb91afadec4102fbd85014950cefa64d"; + }; + } + + { + name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; + path = fetchurl { + name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz"; + sha1 = "e86b819c602cf8821ad637413698f1dec021847a"; + }; + } + + { + name = "ajv___ajv_6.6.2.tgz"; + path = fetchurl { + name = "ajv___ajv_6.6.2.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz"; + sha1 = "caceccf474bf3fc3ce3b147443711a24063cc30d"; + }; + } + + { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + path = fetchurl { + name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; + sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; + }; + } + + { + name = "ansi_colors___ansi_colors_3.2.3.tgz"; + path = fetchurl { + name = "ansi_colors___ansi_colors_3.2.3.tgz"; + url = "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz"; + sha1 = "57d35b8686e851e2cc04c403f1c00203976a1813"; + }; + } + + { + name = "ansi_escapes___ansi_escapes_3.1.0.tgz"; + path = fetchurl { + name = "ansi_escapes___ansi_escapes_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz"; + sha1 = "f73207bb81207d75fd6c83f125af26eea378ca30"; + }; + } + + { + name = "ansi_html___ansi_html_0.0.7.tgz"; + path = fetchurl { + name = "ansi_html___ansi_html_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"; + sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e"; + }; + } + + { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + } + + { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + } + + { + name = "ansi_regex___ansi_regex_4.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz"; + sha1 = "70de791edf021404c3fd615aa89118ae0432e5a9"; + }; + } + + { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + } + + { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d"; + }; + } + + { + name = "anymatch___anymatch_2.0.0.tgz"; + path = fetchurl { + name = "anymatch___anymatch_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"; + sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"; + }; + } + + { + name = "append_transform___append_transform_0.4.0.tgz"; + path = fetchurl { + name = "append_transform___append_transform_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz"; + sha1 = "d76ebf8ca94d276e247a36bad44a4b74ab611991"; + }; + } + + { + name = "aproba___aproba_1.2.0.tgz"; + path = fetchurl { + name = "aproba___aproba_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; + sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; + }; + } + + { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + path = fetchurl { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; + sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21"; + }; + } + + { + name = "argparse___argparse_1.0.10.tgz"; + path = fetchurl { + name = "argparse___argparse_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; + sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; + }; + } + + { + name = "aria_query___aria_query_3.0.0.tgz"; + path = fetchurl { + name = "aria_query___aria_query_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz"; + sha1 = "65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"; + }; + } + + { + name = "arr_diff___arr_diff_2.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz"; + sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf"; + }; + } + + { + name = "arr_diff___arr_diff_4.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + } + + { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + path = fetchurl { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; + }; + } + + { + name = "arr_union___arr_union_3.1.0.tgz"; + path = fetchurl { + name = "arr_union___arr_union_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + } + + { + name = "array_equal___array_equal_1.0.0.tgz"; + path = fetchurl { + name = "array_equal___array_equal_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz"; + sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93"; + }; + } + + { + name = "array_flatten___array_flatten_1.1.1.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + } + + { + name = "array_flatten___array_flatten_2.1.2.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"; + sha1 = "24ef80a28c1a893617e2149b0c6d0d788293b099"; + }; + } + + { + name = "array_includes___array_includes_3.0.3.tgz"; + path = fetchurl { + name = "array_includes___array_includes_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz"; + sha1 = "184b48f62d92d7452bb31b323165c7f8bd02266d"; + }; + } + + { + name = "array_union___array_union_1.0.2.tgz"; + path = fetchurl { + name = "array_union___array_union_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + } + + { + name = "array_uniq___array_uniq_1.0.3.tgz"; + path = fetchurl { + name = "array_uniq___array_uniq_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + } + + { + name = "array_unique___array_unique_0.2.1.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz"; + sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53"; + }; + } + + { + name = "array_unique___array_unique_0.3.2.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + } + + { + name = "array.prototype.flat___array.prototype.flat_1.2.1.tgz"; + path = fetchurl { + name = "array.prototype.flat___array.prototype.flat_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz"; + sha1 = "812db8f02cad24d3fab65dd67eabe3b8903494a4"; + }; + } + + { + name = "arrify___arrify_1.0.1.tgz"; + path = fetchurl { + name = "arrify___arrify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz"; + sha1 = "898508da2226f380df904728456849c1501a4b0d"; + }; + } + + { + name = "asap___asap_2.0.6.tgz"; + path = fetchurl { + name = "asap___asap_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"; + sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46"; + }; + } + + { + name = "asn1.js___asn1.js_4.10.1.tgz"; + path = fetchurl { + name = "asn1.js___asn1.js_4.10.1.tgz"; + url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz"; + sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"; + }; + } + + { + name = "asn1___asn1_0.2.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + + { + name = "assert_plus___assert_plus_1.0.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + } + + { + name = "assert___assert_1.4.1.tgz"; + path = fetchurl { + name = "assert___assert_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz"; + sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91"; + }; + } + + { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + path = fetchurl { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + } + + { + name = "ast_types_flow___ast_types_flow_0.0.7.tgz"; + path = fetchurl { + name = "ast_types_flow___ast_types_flow_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz"; + sha1 = "f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"; + }; + } + + { + name = "astral_regex___astral_regex_1.0.0.tgz"; + path = fetchurl { + name = "astral_regex___astral_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz"; + sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"; + }; + } + + { + name = "async_each___async_each_1.0.1.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz"; + sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d"; + }; + } + + { + name = "async_limiter___async_limiter_1.0.0.tgz"; + path = fetchurl { + name = "async_limiter___async_limiter_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz"; + sha1 = "78faed8c3d074ab81f22b4e985d79e8738f720f8"; + }; + } + + { + name = "async___async_1.5.2.tgz"; + path = fetchurl { + name = "async___async_1.5.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz"; + sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; + }; + } + + { + name = "async___async_2.6.1.tgz"; + path = fetchurl { + name = "async___async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz"; + sha1 = "b245a23ca71930044ec53fa46aa00a3e87c6a610"; + }; + } + + { + name = "asynckit___asynckit_0.4.0.tgz"; + path = fetchurl { + name = "asynckit___asynckit_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + } + + { + name = "atob___atob_2.1.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + + { + name = "autoprefixer___autoprefixer_9.4.3.tgz"; + path = fetchurl { + name = "autoprefixer___autoprefixer_9.4.3.tgz"; + url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.3.tgz"; + sha1 = "c97384a8fd80477b78049163a91bbc725d9c41d9"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + } + + { + name = "aws4___aws4_1.8.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz"; + sha1 = "f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"; + }; + } + + { + name = "axios___axios_0.18.0.tgz"; + path = fetchurl { + name = "axios___axios_0.18.0.tgz"; + url = "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz"; + sha1 = "32d53e4851efdc0a11993b6cd000789d70c05102"; + }; + } + + { + name = "axobject_query___axobject_query_2.0.2.tgz"; + path = fetchurl { + name = "axobject_query___axobject_query_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz"; + sha1 = "ea187abe5b9002b377f925d8bf7d1c561adf38f9"; + }; + } + + { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + path = fetchurl { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; + sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; + }; + } + + { + name = "babel_core___babel_core_6.26.3.tgz"; + path = fetchurl { + name = "babel_core___babel_core_6.26.3.tgz"; + url = "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz"; + sha1 = "b2e2f09e342d0f0c88e2f02e067794125e75c207"; + }; + } + + { + name = "babel_core___babel_core_7.0.0_bridge.0.tgz"; + path = fetchurl { + name = "babel_core___babel_core_7.0.0_bridge.0.tgz"; + url = "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz"; + sha1 = "95a492ddd90f9b4e9a4a1da14eb335b87b634ece"; + }; + } + + { + name = "babel_eslint___babel_eslint_10.0.1.tgz"; + path = fetchurl { + name = "babel_eslint___babel_eslint_10.0.1.tgz"; + url = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz"; + sha1 = "919681dc099614cd7d31d45c8908695092a1faed"; + }; + } + + { + name = "babel_generator___babel_generator_6.26.1.tgz"; + path = fetchurl { + name = "babel_generator___babel_generator_6.26.1.tgz"; + url = "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz"; + sha1 = "1844408d3b8f0d35a404ea7ac180f087a601bd90"; + }; + } + + { + name = "babel_helpers___babel_helpers_6.24.1.tgz"; + path = fetchurl { + name = "babel_helpers___babel_helpers_6.24.1.tgz"; + url = "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz"; + sha1 = "3471de9caec388e5c850e597e58a26ddf37602b2"; + }; + } + + { + name = "babel_jest___babel_jest_23.6.0.tgz"; + path = fetchurl { + name = "babel_jest___babel_jest_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz"; + sha1 = "a644232366557a2240a0c083da6b25786185a2f1"; + }; + } + + { + name = "babel_loader___babel_loader_8.0.4.tgz"; + path = fetchurl { + name = "babel_loader___babel_loader_8.0.4.tgz"; + url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz"; + sha1 = "7bbf20cbe4560629e2e41534147692d3fecbdce6"; + }; + } + + { + name = "babel_messages___babel_messages_6.23.0.tgz"; + path = fetchurl { + name = "babel_messages___babel_messages_6.23.0.tgz"; + url = "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz"; + sha1 = "f3cdf4703858035b2a2951c6ec5edf6c62f2630e"; + }; + } + + { + name = "babel_plugin_istanbul___babel_plugin_istanbul_4.1.6.tgz"; + path = fetchurl { + name = "babel_plugin_istanbul___babel_plugin_istanbul_4.1.6.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz"; + sha1 = "36c59b2192efce81c5b378321b74175add1c9a45"; + }; + } + + { + name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_23.2.0.tgz"; + path = fetchurl { + name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_23.2.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz"; + sha1 = "e61fae05a1ca8801aadee57a6d66b8cefaf44167"; + }; + } + + { + name = "babel_plugin_lodash___babel_plugin_lodash_3.3.4.tgz"; + path = fetchurl { + name = "babel_plugin_lodash___babel_plugin_lodash_3.3.4.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz"; + sha1 = "4f6844358a1340baed182adbeffa8df9967bc196"; + }; + } + + { + name = "babel_plugin_macros___babel_plugin_macros_2.4.3.tgz"; + path = fetchurl { + name = "babel_plugin_macros___babel_plugin_macros_2.4.3.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.3.tgz"; + sha1 = "870345aa538d85f04b4614fea5922b55c45dd551"; + }; + } + + { + name = "babel_plugin_preval___babel_plugin_preval_3.0.1.tgz"; + path = fetchurl { + name = "babel_plugin_preval___babel_plugin_preval_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-3.0.1.tgz"; + sha1 = "a26f9690114a864a54a5cbdf865496ebf541a9c3"; + }; + } + + { + name = "babel_plugin_react_intl___babel_plugin_react_intl_3.0.1.tgz"; + path = fetchurl { + name = "babel_plugin_react_intl___babel_plugin_react_intl_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-3.0.1.tgz"; + sha1 = "4abc7fff04a7bbbb7034aec0a675713f2e52181c"; + }; + } + + { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + path = fetchurl { + name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"; + sha1 = "fd6536f2bce13836ffa3a5458c4903a597bb3bf5"; + }; + } + + { + name = "babel_plugin_transform_react_remove_prop_types___babel_plugin_transform_react_remove_prop_types_0.4.21.tgz"; + path = fetchurl { + name = "babel_plugin_transform_react_remove_prop_types___babel_plugin_transform_react_remove_prop_types_0.4.21.tgz"; + url = "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.21.tgz"; + sha1 = "0087938f4348cb751b3e5055a6b38f3c61b5231b"; + }; + } + + { + name = "babel_preset_jest___babel_preset_jest_23.2.0.tgz"; + path = fetchurl { + name = "babel_preset_jest___babel_preset_jest_23.2.0.tgz"; + url = "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz"; + sha1 = "8ec7a03a138f001a1a8fb1e8113652bf1a55da46"; + }; + } + + { + name = "babel_register___babel_register_6.26.0.tgz"; + path = fetchurl { + name = "babel_register___babel_register_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz"; + sha1 = "6ed021173e2fcb486d7acb45c6009a856f647071"; + }; + } + + { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + path = fetchurl { + name = "babel_runtime___babel_runtime_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"; + sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; + }; + } + + { + name = "babel_template___babel_template_6.26.0.tgz"; + path = fetchurl { + name = "babel_template___babel_template_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz"; + sha1 = "de03e2d16396b069f46dd9fff8521fb1a0e35e02"; + }; + } + + { + name = "babel_traverse___babel_traverse_6.26.0.tgz"; + path = fetchurl { + name = "babel_traverse___babel_traverse_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz"; + sha1 = "46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"; + }; + } + + { + name = "babel_types___babel_types_6.26.0.tgz"; + path = fetchurl { + name = "babel_types___babel_types_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz"; + sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497"; + }; + } + + { + name = "babylon___babylon_6.18.0.tgz"; + path = fetchurl { + name = "babylon___babylon_6.18.0.tgz"; + url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"; + sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"; + }; + } + + { + name = "backoff___backoff_2.5.0.tgz"; + path = fetchurl { + name = "backoff___backoff_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz"; + sha1 = "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"; + }; + } + + { + name = "balanced_match___balanced_match_1.0.0.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + } + + { + name = "base64_js___base64_js_1.3.0.tgz"; + path = fetchurl { + name = "base64_js___base64_js_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz"; + sha1 = "cab1e6118f051095e58b5281aea8c1cd22bfc0e3"; + }; + } + + { + name = "base___base_0.11.2.tgz"; + path = fetchurl { + name = "base___base_0.11.2.tgz"; + url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; + sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; + }; + } + + { + name = "batch___batch_0.6.1.tgz"; + path = fetchurl { + name = "batch___batch_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"; + sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; + }; + } + + { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + path = fetchurl { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + } + + { + name = "bfj___bfj_6.1.1.tgz"; + path = fetchurl { + name = "bfj___bfj_6.1.1.tgz"; + url = "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz"; + sha1 = "05a3b7784fbd72cfa3c22e56002ef99336516c48"; + }; + } + + { + name = "big.js___big.js_3.2.0.tgz"; + path = fetchurl { + name = "big.js___big.js_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz"; + sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e"; + }; + } + + { + name = "big.js___big.js_5.2.2.tgz"; + path = fetchurl { + name = "big.js___big.js_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"; + sha1 = "65f0af382f578bcdc742bd9c281e9cb2d7768328"; + }; + } + + { + name = "binary_extensions___binary_extensions_1.12.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz"; + sha1 = "c2d780f53d45bba8317a8902d4ceeaf3a6385b14"; + }; + } + + { + name = "bluebird___bluebird_3.5.3.tgz"; + path = fetchurl { + name = "bluebird___bluebird_3.5.3.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz"; + sha1 = "7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"; + }; + } + + { + name = "bn.js___bn.js_4.11.8.tgz"; + path = fetchurl { + name = "bn.js___bn.js_4.11.8.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz"; + sha1 = "2cde09eb5ee341f484746bb0309b3253b1b1442f"; + }; + } + + { + name = "body_parser___body_parser_1.18.3.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.18.3.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz"; + sha1 = "5b292198ffdd553b3a0f20ded0592b956955c8b4"; + }; + } + + { + name = "bonjour___bonjour_3.5.0.tgz"; + path = fetchurl { + name = "bonjour___bonjour_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"; + sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"; + }; + } + + { + name = "boolbase___boolbase_1.0.0.tgz"; + path = fetchurl { + name = "boolbase___boolbase_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"; + sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; + }; + } + + { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + path = fetchurl { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; + }; + } + + { + name = "braces___braces_1.8.5.tgz"; + path = fetchurl { + name = "braces___braces_1.8.5.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz"; + sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7"; + }; + } + + { + name = "braces___braces_2.3.2.tgz"; + path = fetchurl { + name = "braces___braces_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; + sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; + }; + } + + { + name = "bricks.js___bricks.js_1.8.0.tgz"; + path = fetchurl { + name = "bricks.js___bricks.js_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/bricks.js/-/bricks.js-1.8.0.tgz"; + sha1 = "8fdeb3c0226af251f4d5727a7df7f9ac0092b4b2"; + }; + } + + { + name = "brorand___brorand_1.1.0.tgz"; + path = fetchurl { + name = "brorand___brorand_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + } + + { + name = "browser_process_hrtime___browser_process_hrtime_0.1.3.tgz"; + path = fetchurl { + name = "browser_process_hrtime___browser_process_hrtime_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz"; + sha1 = "616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"; + }; + } + + { + name = "browser_resolve___browser_resolve_1.11.3.tgz"; + path = fetchurl { + name = "browser_resolve___browser_resolve_1.11.3.tgz"; + url = "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz"; + sha1 = "9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"; + }; + } + + { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + path = fetchurl { + name = "browserify_aes___browserify_aes_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"; + sha1 = "326734642f403dabc3003209853bb70ad428ef48"; + }; + } + + { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + path = fetchurl { + name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; + sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"; + }; + } + + { + name = "browserify_des___browserify_des_1.0.2.tgz"; + path = fetchurl { + name = "browserify_des___browserify_des_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"; + sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c"; + }; + } + + { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + path = fetchurl { + name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; + sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; + }; + } + + { + name = "browserify_sign___browserify_sign_4.0.4.tgz"; + path = fetchurl { + name = "browserify_sign___browserify_sign_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz"; + sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"; + }; + } + + { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + path = fetchurl { + name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; + sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"; + }; + } + + { + name = "browserslist___browserslist_4.3.7.tgz"; + path = fetchurl { + name = "browserslist___browserslist_4.3.7.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.7.tgz"; + sha1 = "f1de479a6466ea47a0a26dcc725e7504817e624a"; + }; + } + + { + name = "bser___bser_2.0.0.tgz"; + path = fetchurl { + name = "bser___bser_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz"; + sha1 = "9ac78d3ed5d915804fd87acb158bc797147a1719"; + }; + } + + { + name = "buffer_from___buffer_from_1.1.1.tgz"; + path = fetchurl { + name = "buffer_from___buffer_from_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz"; + sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef"; + }; + } + + { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + path = fetchurl { + name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"; + sha1 = "52fabcc6a606d1a00302802648ef68f639da268c"; + }; + } + + { + name = "buffer_writer___buffer_writer_1.0.1.tgz"; + path = fetchurl { + name = "buffer_writer___buffer_writer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-1.0.1.tgz"; + sha1 = "22a936901e3029afcd7547eb4487ceb697a3bf08"; + }; + } + + { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + path = fetchurl { + name = "buffer_xor___buffer_xor_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"; + sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; + }; + } + + { + name = "buffer___buffer_4.9.1.tgz"; + path = fetchurl { + name = "buffer___buffer_4.9.1.tgz"; + url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz"; + sha1 = "6d1bb601b07a4efced97094132093027c95bc298"; + }; + } + + { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + path = fetchurl { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz"; + sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f"; + }; + } + + { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + path = fetchurl { + name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; + sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; + }; + } + + { + name = "bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + } + + { + name = "cacache___cacache_11.3.2.tgz"; + path = fetchurl { + name = "cacache___cacache_11.3.2.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz"; + sha1 = "2d81e308e3d258ca38125b676b98b2ac9ce69bfa"; + }; + } + + { + name = "cache_base___cache_base_1.0.1.tgz"; + path = fetchurl { + name = "cache_base___cache_base_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; + sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; + }; + } + + { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + path = fetchurl { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"; + sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; + }; + } + + { + name = "caller_path___caller_path_0.1.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz"; + sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f"; + }; + } + + { + name = "caller_path___caller_path_2.0.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"; + sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; + }; + } + + { + name = "callsites___callsites_0.2.0.tgz"; + path = fetchurl { + name = "callsites___callsites_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz"; + sha1 = "afab96262910a7f33c19a5775825c69f34e350ca"; + }; + } + + { + name = "callsites___callsites_2.0.0.tgz"; + path = fetchurl { + name = "callsites___callsites_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"; + sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; + }; + } + + { + name = "camelcase___camelcase_4.1.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz"; + sha1 = "d545635be1e33c542649c69173e5de6acfae34dd"; + }; + } + + { + name = "camelcase___camelcase_5.0.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz"; + sha1 = "03295527d58bd3cd4aa75363f35b2e8d97be2f42"; + }; + } + + { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + path = fetchurl { + name = "caniuse_api___caniuse_api_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"; + sha1 = "5e4d90e2274961d46291997df599e3ed008ee4c0"; + }; + } + + { + name = "caniuse_lite___caniuse_lite_1.0.30000926.tgz"; + path = fetchurl { + name = "caniuse_lite___caniuse_lite_1.0.30000926.tgz"; + url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000926.tgz"; + sha1 = "4361a99d818ca6e521dbe89a732de62a194a789c"; + }; + } + + { + name = "capture_exit___capture_exit_1.2.0.tgz"; + path = fetchurl { + name = "capture_exit___capture_exit_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz"; + sha1 = "1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"; + }; + } + + { + name = "caseless___caseless_0.12.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + } + + { + name = "chalk___chalk_1.1.3.tgz"; + path = fetchurl { + name = "chalk___chalk_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + } + + { + name = "chalk___chalk_2.4.1.tgz"; + path = fetchurl { + name = "chalk___chalk_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz"; + sha1 = "18c49ab16a037b6eb0152cc83e3471338215b66e"; + }; + } + + { + name = "chardet___chardet_0.7.0.tgz"; + path = fetchurl { + name = "chardet___chardet_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz"; + sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e"; + }; + } + + { + name = "check_types___check_types_7.4.0.tgz"; + path = fetchurl { + name = "check_types___check_types_7.4.0.tgz"; + url = "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz"; + sha1 = "0378ec1b9616ec71f774931a3c6516fad8c152f4"; + }; + } + + { + name = "cheerio___cheerio_1.0.0_rc.2.tgz"; + path = fetchurl { + name = "cheerio___cheerio_1.0.0_rc.2.tgz"; + url = "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz"; + sha1 = "4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"; + }; + } + + { + name = "chokidar___chokidar_2.0.4.tgz"; + path = fetchurl { + name = "chokidar___chokidar_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz"; + sha1 = "356ff4e2b0e8e43e322d18a372460bbcf3accd26"; + }; + } + + { + name = "chownr___chownr_1.1.1.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz"; + sha1 = "54726b8b8fff4df053c42187e801fb4412df1494"; + }; + } + + { + name = "chrome_trace_event___chrome_trace_event_1.0.0.tgz"; + path = fetchurl { + name = "chrome_trace_event___chrome_trace_event_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz"; + sha1 = "45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"; + }; + } + + { + name = "ci_info___ci_info_1.6.0.tgz"; + path = fetchurl { + name = "ci_info___ci_info_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz"; + sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497"; + }; + } + + { + name = "cipher_base___cipher_base_1.0.4.tgz"; + path = fetchurl { + name = "cipher_base___cipher_base_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"; + sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de"; + }; + } + + { + name = "circular_json___circular_json_0.3.3.tgz"; + path = fetchurl { + name = "circular_json___circular_json_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz"; + sha1 = "815c99ea84f6809529d2f45791bdf82711352d66"; + }; + } + + { + name = "class_utils___class_utils_0.3.6.tgz"; + path = fetchurl { + name = "class_utils___class_utils_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; + sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; + }; + } + + { + name = "classnames___classnames_2.2.6.tgz"; + path = fetchurl { + name = "classnames___classnames_2.2.6.tgz"; + url = "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz"; + sha1 = "43935bffdd291f326dad0a205309b38d00f650ce"; + }; + } + + { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz"; + sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; + }; + } + + { + name = "cli_width___cli_width_2.2.0.tgz"; + path = fetchurl { + name = "cli_width___cli_width_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz"; + sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639"; + }; + } + + { + name = "cliui___cliui_3.2.0.tgz"; + path = fetchurl { + name = "cliui___cliui_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz"; + sha1 = "120601537a916d29940f934da3b48d585a39213d"; + }; + } + + { + name = "cliui___cliui_4.1.0.tgz"; + path = fetchurl { + name = "cliui___cliui_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz"; + sha1 = "348422dbe82d800b3022eef4f6ac10bf2e4d1b49"; + }; + } + + { + name = "clone_deep___clone_deep_2.0.2.tgz"; + path = fetchurl { + name = "clone_deep___clone_deep_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz"; + sha1 = "00db3a1e173656730d1188c3d6aced6d7ea97713"; + }; + } + + { + name = "co___co_4.6.0.tgz"; + path = fetchurl { + name = "co___co_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"; + sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; + }; + } + + { + name = "coa___coa_2.0.2.tgz"; + path = fetchurl { + name = "coa___coa_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"; + sha1 = "43f6c21151b4ef2bf57187db0d73de229e3e7ec3"; + }; + } + + { + name = "code_point_at___code_point_at_1.1.0.tgz"; + path = fetchurl { + name = "code_point_at___code_point_at_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + } + + { + name = "collection_visit___collection_visit_1.0.0.tgz"; + path = fetchurl { + name = "collection_visit___collection_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + } + + { + name = "color_convert___color_convert_1.9.3.tgz"; + path = fetchurl { + name = "color_convert___color_convert_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"; + sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8"; + }; + } + + { + name = "color_name___color_name_1.1.3.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + } + + { + name = "color_name___color_name_1.1.4.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; + sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; + }; + } + + { + name = "color_string___color_string_1.5.3.tgz"; + path = fetchurl { + name = "color_string___color_string_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz"; + sha1 = "c9bbc5f01b58b5492f3d6857459cb6590ce204cc"; + }; + } + + { + name = "color___color_3.1.0.tgz"; + path = fetchurl { + name = "color___color_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz"; + sha1 = "d8e9fb096732875774c84bf922815df0308d0ffc"; + }; + } + + { + name = "colors___colors_1.1.2.tgz"; + path = fetchurl { + name = "colors___colors_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz"; + sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; + }; + } + + { + name = "combined_stream___combined_stream_1.0.7.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz"; + sha1 = "2d1d24317afb8abe95d6d2c0b07b57813539d828"; + }; + } + + { + name = "commander___commander_2.19.0.tgz"; + path = fetchurl { + name = "commander___commander_2.19.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz"; + sha1 = "f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"; + }; + } + + { + name = "commander___commander_2.17.1.tgz"; + path = fetchurl { + name = "commander___commander_2.17.1.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz"; + sha1 = "bd77ab7de6de94205ceacc72f1716d29f20a77bf"; + }; + } + + { + name = "commondir___commondir_1.0.1.tgz"; + path = fetchurl { + name = "commondir___commondir_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"; + sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b"; + }; + } + + { + name = "component_emitter___component_emitter_1.2.1.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz"; + sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; + }; + } + + { + name = "compressible___compressible_2.0.15.tgz"; + path = fetchurl { + name = "compressible___compressible_2.0.15.tgz"; + url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz"; + sha1 = "857a9ab0a7e5a07d8d837ed43fe2defff64fe212"; + }; + } + + { + name = "compression_webpack_plugin___compression_webpack_plugin_2.0.0.tgz"; + path = fetchurl { + name = "compression_webpack_plugin___compression_webpack_plugin_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz"; + sha1 = "46476350c1eb27f783dccc79ac2f709baa2cffbc"; + }; + } + + { + name = "compression___compression_1.7.3.tgz"; + path = fetchurl { + name = "compression___compression_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz"; + sha1 = "27e0e176aaf260f7f2c2813c3e440adb9f1993db"; + }; + } + + { + name = "concat_map___concat_map_0.0.1.tgz"; + path = fetchurl { + name = "concat_map___concat_map_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + } + + { + name = "concat_stream___concat_stream_1.6.2.tgz"; + path = fetchurl { + name = "concat_stream___concat_stream_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"; + sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"; + }; + } + + { + name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; + path = fetchurl { + name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz"; + sha1 = "b06873934bc5e344fef611a196a6faae0aee015a"; + }; + } + + { + name = "console_browserify___console_browserify_1.1.0.tgz"; + path = fetchurl { + name = "console_browserify___console_browserify_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz"; + sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10"; + }; + } + + { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + path = fetchurl { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + } + + { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + path = fetchurl { + name = "constants_browserify___constants_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"; + sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; + }; + } + + { + name = "contains_path___contains_path_0.1.0.tgz"; + path = fetchurl { + name = "contains_path___contains_path_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz"; + sha1 = "fe8cf184ff6670b6baef01a9d4861a5cbec4120a"; + }; + } + + { + name = "content_disposition___content_disposition_0.5.2.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz"; + sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; + }; + } + + { + name = "content_type___content_type_1.0.4.tgz"; + path = fetchurl { + name = "content_type___content_type_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; + sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; + }; + } + + { + name = "convert_source_map___convert_source_map_1.6.0.tgz"; + path = fetchurl { + name = "convert_source_map___convert_source_map_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz"; + sha1 = "51b537a8c43e0f04dec1993bffcdd504e758ac20"; + }; + } + + { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + path = fetchurl { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + } + + { + name = "cookie___cookie_0.3.1.tgz"; + path = fetchurl { + name = "cookie___cookie_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz"; + sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; + }; + } + + { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + path = fetchurl { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"; + sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0"; + }; + } + + { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + path = fetchurl { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + } + + { + name = "core_js___core_js_1.2.7.tgz"; + path = fetchurl { + name = "core_js___core_js_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz"; + sha1 = "652294c14651db28fa93bd2d5ff2983a4f08c636"; + }; + } + + { + name = "core_js___core_js_2.6.1.tgz"; + path = fetchurl { + name = "core_js___core_js_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.1.tgz"; + sha1 = "87416ae817de957a3f249b3b5ca475d4aaed6042"; + }; + } + + { + name = "core_util_is___core_util_is_1.0.2.tgz"; + path = fetchurl { + name = "core_util_is___core_util_is_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + } + + { + name = "cosmiconfig___cosmiconfig_4.0.0.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz"; + sha1 = "760391549580bbd2df1e562bc177b13c290972dc"; + }; + } + + { + name = "cosmiconfig___cosmiconfig_5.0.7.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_5.0.7.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz"; + sha1 = "39826b292ee0d78eda137dfa3173bd1c21a43b04"; + }; + } + + { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + path = fetchurl { + name = "create_ecdh___create_ecdh_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz"; + sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff"; + }; + } + + { + name = "create_emotion___create_emotion_10.0.5.tgz"; + path = fetchurl { + name = "create_emotion___create_emotion_10.0.5.tgz"; + url = "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.5.tgz"; + sha1 = "22487f19b59a7ed10144f808289eadffebcfab06"; + }; + } + + { + name = "create_hash___create_hash_1.2.0.tgz"; + path = fetchurl { + name = "create_hash___create_hash_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"; + sha1 = "889078af11a63756bcfb59bd221996be3a9ef196"; + }; + } + + { + name = "create_hmac___create_hmac_1.1.7.tgz"; + path = fetchurl { + name = "create_hmac___create_hmac_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"; + sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff"; + }; + } + + { + name = "cross_env___cross_env_5.2.0.tgz"; + path = fetchurl { + name = "cross_env___cross_env_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz"; + sha1 = "6ecd4c015d5773e614039ee529076669b9d126f2"; + }; + } + + { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz"; + sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449"; + }; + } + + { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"; + }; + } + + { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + path = fetchurl { + name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; + sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec"; + }; + } + + { + name = "css_color_names___css_color_names_0.0.4.tgz"; + path = fetchurl { + name = "css_color_names___css_color_names_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"; + sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; + }; + } + + { + name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + path = fetchurl { + name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"; + sha1 = "c198940f63a76d7e36c1e71018b001721054cb22"; + }; + } + + { + name = "css_font_size_keywords___css_font_size_keywords_1.0.0.tgz"; + path = fetchurl { + name = "css_font_size_keywords___css_font_size_keywords_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz"; + sha1 = "854875ace9aca6a8d2ee0d345a44aae9bb6db6cb"; + }; + } + + { + name = "css_font_stretch_keywords___css_font_stretch_keywords_1.0.1.tgz"; + path = fetchurl { + name = "css_font_stretch_keywords___css_font_stretch_keywords_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz"; + sha1 = "50cee9b9ba031fb5c952d4723139f1e107b54b10"; + }; + } + + { + name = "css_font_style_keywords___css_font_style_keywords_1.0.1.tgz"; + path = fetchurl { + name = "css_font_style_keywords___css_font_style_keywords_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz"; + sha1 = "5c3532813f63b4a1de954d13cea86ab4333409e4"; + }; + } + + { + name = "css_font_weight_keywords___css_font_weight_keywords_1.0.0.tgz"; + path = fetchurl { + name = "css_font_weight_keywords___css_font_weight_keywords_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz"; + sha1 = "9bc04671ac85bc724b574ef5d3ac96b0d604fd97"; + }; + } + + { + name = "css_global_keywords___css_global_keywords_1.0.1.tgz"; + path = fetchurl { + name = "css_global_keywords___css_global_keywords_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz"; + sha1 = "72a9aea72796d019b1d2a3252de4e5aaa37e4a69"; + }; + } + + { + name = "css_list_helpers___css_list_helpers_1.0.1.tgz"; + path = fetchurl { + name = "css_list_helpers___css_list_helpers_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/css-list-helpers/-/css-list-helpers-1.0.1.tgz"; + sha1 = "fff57192202db83240c41686f919e449a7024f7d"; + }; + } + + { + name = "css_loader___css_loader_2.1.0.tgz"; + path = fetchurl { + name = "css_loader___css_loader_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.0.tgz"; + sha1 = "42952ac22bca5d076978638e9813abce49b8f0cc"; + }; + } + + { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + path = fetchurl { + name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"; + sha1 = "3b2ff4972cc362ab88561507a95408a1432135d7"; + }; + } + + { + name = "css_select___css_select_2.0.2.tgz"; + path = fetchurl { + name = "css_select___css_select_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz"; + sha1 = "ab4386cec9e1f668855564b17c3733b43b2a5ede"; + }; + } + + { + name = "css_select___css_select_1.2.0.tgz"; + path = fetchurl { + name = "css_select___css_select_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz"; + sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; + }; + } + + { + name = "css_selector_tokenizer___css_selector_tokenizer_0.7.1.tgz"; + path = fetchurl { + name = "css_selector_tokenizer___css_selector_tokenizer_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz"; + sha1 = "a177271a8bca5019172f4f891fc6eed9cbf68d5d"; + }; + } + + { + name = "css_system_font_keywords___css_system_font_keywords_1.0.0.tgz"; + path = fetchurl { + name = "css_system_font_keywords___css_system_font_keywords_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz"; + sha1 = "85c6f086aba4eb32c571a3086affc434b84823ed"; + }; + } + + { + name = "css_tree___css_tree_1.0.0_alpha.28.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.28.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz"; + sha1 = "8e8968190d886c9477bc8d61e96f61af3f7ffa7f"; + }; + } + + { + name = "css_tree___css_tree_1.0.0_alpha.29.tgz"; + path = fetchurl { + name = "css_tree___css_tree_1.0.0_alpha.29.tgz"; + url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz"; + sha1 = "3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"; + }; + } + + { + name = "css_unit_converter___css_unit_converter_1.1.1.tgz"; + path = fetchurl { + name = "css_unit_converter___css_unit_converter_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz"; + sha1 = "d9b9281adcfd8ced935bdbaba83786897f64e996"; + }; + } + + { + name = "css_url_regex___css_url_regex_1.1.0.tgz"; + path = fetchurl { + name = "css_url_regex___css_url_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz"; + sha1 = "83834230cc9f74c457de59eebd1543feeb83b7ec"; + }; + } + + { + name = "css_what___css_what_2.1.2.tgz"; + path = fetchurl { + name = "css_what___css_what_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz"; + sha1 = "c0876d9d0480927d7d4920dcd72af3595649554d"; + }; + } + + { + name = "cssesc___cssesc_0.1.0.tgz"; + path = fetchurl { + name = "cssesc___cssesc_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz"; + sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4"; + }; + } + + { + name = "cssesc___cssesc_2.0.0.tgz"; + path = fetchurl { + name = "cssesc___cssesc_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz"; + sha1 = "3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"; + }; + } + + { + name = "cssnano_preset_default___cssnano_preset_default_4.0.6.tgz"; + path = fetchurl { + name = "cssnano_preset_default___cssnano_preset_default_4.0.6.tgz"; + url = "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz"; + sha1 = "92379e2a6db4a91c0ea727f5f556eeac693eab6a"; + }; + } + + { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"; + sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f"; + }; + } + + { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + path = fetchurl { + name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"; + sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d"; + }; + } + + { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"; + sha1 = "b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"; + }; + } + + { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + path = fetchurl { + name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"; + sha1 = "574082fb2859d2db433855835d9a8456ea18bbf3"; + }; + } + + { + name = "cssnano___cssnano_4.1.8.tgz"; + path = fetchurl { + name = "cssnano___cssnano_4.1.8.tgz"; + url = "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.8.tgz"; + sha1 = "8014989679d5fd42491e4499a521dbfb85c95fd1"; + }; + } + + { + name = "csso___csso_3.5.1.tgz"; + path = fetchurl { + name = "csso___csso_3.5.1.tgz"; + url = "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz"; + sha1 = "7b9eb8be61628973c1b261e169d2f024008e758b"; + }; + } + + { + name = "cssom___cssom_0.3.4.tgz"; + path = fetchurl { + name = "cssom___cssom_0.3.4.tgz"; + url = "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz"; + sha1 = "8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"; + }; + } + + { + name = "cssstyle___cssstyle_1.1.1.tgz"; + path = fetchurl { + name = "cssstyle___cssstyle_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz"; + sha1 = "18b038a9c44d65f7a8e428a653b9f6fe42faf5fb"; + }; + } + + { + name = "csstype___csstype_2.6.0.tgz"; + path = fetchurl { + name = "csstype___csstype_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/csstype/-/csstype-2.6.0.tgz"; + sha1 = "6cf7b2fa7fc32aab3d746802c244d4eda71371a2"; + }; + } + + { + name = "cyclist___cyclist_0.2.2.tgz"; + path = fetchurl { + name = "cyclist___cyclist_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz"; + sha1 = "1b33792e11e914a2fd6d6ed6447464444e5fa640"; + }; + } + + { + name = "d___d_1.0.0.tgz"; + path = fetchurl { + name = "d___d_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz"; + sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; + }; + } + + { + name = "damerau_levenshtein___damerau_levenshtein_1.0.4.tgz"; + path = fetchurl { + name = "damerau_levenshtein___damerau_levenshtein_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz"; + sha1 = "03191c432cb6eea168bb77f3a55ffdccb8978514"; + }; + } + + { + name = "dashdash___dashdash_1.14.1.tgz"; + path = fetchurl { + name = "dashdash___dashdash_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + } + + { + name = "data_urls___data_urls_1.1.0.tgz"; + path = fetchurl { + name = "data_urls___data_urls_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz"; + sha1 = "15ee0582baa5e22bb59c77140da8f9c76963bbfe"; + }; + } + + { + name = "date_now___date_now_0.1.4.tgz"; + path = fetchurl { + name = "date_now___date_now_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz"; + sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b"; + }; + } + + { + name = "debug___debug_2.6.9.tgz"; + path = fetchurl { + name = "debug___debug_2.6.9.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; + sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; + }; + } + + { + name = "debug___debug_3.1.0.tgz"; + path = fetchurl { + name = "debug___debug_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz"; + sha1 = "5bb5a0672628b64149566ba16819e61518c67261"; + }; + } + + { + name = "debug___debug_3.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + + { + name = "debug___debug_4.1.1.tgz"; + path = fetchurl { + name = "debug___debug_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz"; + sha1 = "3b72260255109c6b589cee050f1d516139664791"; + }; + } + + { + name = "decamelize___decamelize_1.2.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + } + + { + name = "decamelize___decamelize_2.0.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz"; + sha1 = "656d7bbc8094c4c788ea53c5840908c9c7d063c7"; + }; + } + + { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + path = fetchurl { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + } + + { + name = "deep_equal___deep_equal_1.0.1.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz"; + sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5"; + }; + } + + { + name = "deep_extend___deep_extend_0.5.1.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz"; + sha1 = "b894a9dd90d3023fbf1c55a394fb858eb2066f1f"; + }; + } + + { + name = "deep_extend___deep_extend_0.6.0.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz"; + sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac"; + }; + } + + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + + { + name = "default_gateway___default_gateway_2.7.2.tgz"; + path = fetchurl { + name = "default_gateway___default_gateway_2.7.2.tgz"; + url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz"; + sha1 = "b7ef339e5e024b045467af403d50348db4642d0f"; + }; + } + + { + name = "default_require_extensions___default_require_extensions_1.0.0.tgz"; + path = fetchurl { + name = "default_require_extensions___default_require_extensions_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz"; + sha1 = "f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"; + }; + } + + { + name = "define_properties___define_properties_1.1.3.tgz"; + path = fetchurl { + name = "define_properties___define_properties_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"; + sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1"; + }; + } + + { + name = "define_property___define_property_0.2.5.tgz"; + path = fetchurl { + name = "define_property___define_property_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + } + + { + name = "define_property___define_property_1.0.0.tgz"; + path = fetchurl { + name = "define_property___define_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + } + + { + name = "define_property___define_property_2.0.2.tgz"; + path = fetchurl { + name = "define_property___define_property_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; + sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; + }; + } + + { + name = "del___del_3.0.0.tgz"; + path = fetchurl { + name = "del___del_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz"; + sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5"; + }; + } + + { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + } + + { + name = "delegates___delegates_1.0.0.tgz"; + path = fetchurl { + name = "delegates___delegates_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + } + + { + name = "depd___depd_1.1.2.tgz"; + path = fetchurl { + name = "depd___depd_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + } + + { + name = "des.js___des.js_1.0.0.tgz"; + path = fetchurl { + name = "des.js___des.js_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz"; + sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"; + }; + } + + { + name = "destroy___destroy_1.0.4.tgz"; + path = fetchurl { + name = "destroy___destroy_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + } + + { + name = "detect_indent___detect_indent_4.0.0.tgz"; + path = fetchurl { + name = "detect_indent___detect_indent_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz"; + sha1 = "f76d064352cdf43a1cb6ce619c4ee3a9475de208"; + }; + } + + { + name = "detect_libc___detect_libc_1.0.3.tgz"; + path = fetchurl { + name = "detect_libc___detect_libc_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz"; + sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; + }; + } + + { + name = "detect_newline___detect_newline_2.1.0.tgz"; + path = fetchurl { + name = "detect_newline___detect_newline_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz"; + sha1 = "f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"; + }; + } + + { + name = "detect_node___detect_node_2.0.4.tgz"; + path = fetchurl { + name = "detect_node___detect_node_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz"; + sha1 = "014ee8f8f669c5c58023da64b8179c083a28c46c"; + }; + } + + { + name = "detect_passive_events___detect_passive_events_1.0.4.tgz"; + path = fetchurl { + name = "detect_passive_events___detect_passive_events_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-1.0.4.tgz"; + sha1 = "6ed477e6e5bceb79079735dcd357789d37f9a91a"; + }; + } + + { + name = "diff___diff_3.5.0.tgz"; + path = fetchurl { + name = "diff___diff_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz"; + sha1 = "800c0dd1e0a8bfbc95835c202ad220fe317e5a12"; + }; + } + + { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + path = fetchurl { + name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; + url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; + sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875"; + }; + } + + { + name = "discontinuous_range___discontinuous_range_1.0.0.tgz"; + path = fetchurl { + name = "discontinuous_range___discontinuous_range_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz"; + sha1 = "e38331f0844bba49b9a9cb71c771585aab1bc65a"; + }; + } + + { + name = "dns_equal___dns_equal_1.0.0.tgz"; + path = fetchurl { + name = "dns_equal___dns_equal_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"; + sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d"; + }; + } + + { + name = "dns_packet___dns_packet_1.3.1.tgz"; + path = fetchurl { + name = "dns_packet___dns_packet_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz"; + sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a"; + }; + } + + { + name = "dns_txt___dns_txt_2.0.2.tgz"; + path = fetchurl { + name = "dns_txt___dns_txt_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"; + sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6"; + }; + } + + { + name = "doctrine___doctrine_1.5.0.tgz"; + path = fetchurl { + name = "doctrine___doctrine_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz"; + sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa"; + }; + } + + { + name = "doctrine___doctrine_2.1.0.tgz"; + path = fetchurl { + name = "doctrine___doctrine_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz"; + sha1 = "5cd01fc101621b42c4cd7f5d1a66243716d3f39d"; + }; + } + + { + name = "dom_helpers___dom_helpers_3.4.0.tgz"; + path = fetchurl { + name = "dom_helpers___dom_helpers_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz"; + sha1 = "e9b369700f959f62ecde5a6babde4bccd9169af8"; + }; + } + + { + name = "dom_serializer___dom_serializer_0.1.0.tgz"; + path = fetchurl { + name = "dom_serializer___dom_serializer_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz"; + sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82"; + }; + } + + { + name = "domain_browser___domain_browser_1.2.0.tgz"; + path = fetchurl { + name = "domain_browser___domain_browser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"; + sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda"; + }; + } + + { + name = "domelementtype___domelementtype_1.3.1.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"; + sha1 = "d048c44b37b0d10a7f2a3d5fee3f4333d790481f"; + }; + } + + { + name = "domelementtype___domelementtype_1.1.3.tgz"; + path = fetchurl { + name = "domelementtype___domelementtype_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz"; + sha1 = "bd28773e2642881aec51544924299c5cd822185b"; + }; + } + + { + name = "domexception___domexception_1.0.1.tgz"; + path = fetchurl { + name = "domexception___domexception_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz"; + sha1 = "937442644ca6a31261ef36e3ec677fe805582c90"; + }; + } + + { + name = "domhandler___domhandler_2.4.2.tgz"; + path = fetchurl { + name = "domhandler___domhandler_2.4.2.tgz"; + url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz"; + sha1 = "8805097e933d65e85546f726d60f5eb88b44f803"; + }; + } + + { + name = "domutils___domutils_1.5.1.tgz"; + path = fetchurl { + name = "domutils___domutils_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz"; + sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; + }; + } + + { + name = "domutils___domutils_1.7.0.tgz"; + path = fetchurl { + name = "domutils___domutils_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"; + sha1 = "56ea341e834e06e6748af7a1cb25da67ea9f8c2a"; + }; + } + + { + name = "dot_prop___dot_prop_4.2.0.tgz"; + path = fetchurl { + name = "dot_prop___dot_prop_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz"; + sha1 = "1f19e0c2e1aa0e32797c49799f2837ac6af69c57"; + }; + } + + { + name = "dotenv___dotenv_6.2.0.tgz"; + path = fetchurl { + name = "dotenv___dotenv_6.2.0.tgz"; + url = "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz"; + sha1 = "941c0410535d942c8becf28d3f357dbd9d476064"; + }; + } + + { + name = "double_ended_queue___double_ended_queue_2.1.0_0.tgz"; + path = fetchurl { + name = "double_ended_queue___double_ended_queue_2.1.0_0.tgz"; + url = "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz"; + sha1 = "103d3527fd31528f40188130c841efdd78264e5c"; + }; + } + + { + name = "duplexer___duplexer_0.1.1.tgz"; + path = fetchurl { + name = "duplexer___duplexer_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz"; + sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1"; + }; + } + + { + name = "duplexify___duplexify_3.6.1.tgz"; + path = fetchurl { + name = "duplexify___duplexify_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz"; + sha1 = "b1a7a29c4abfd639585efaecce80d666b1e34125"; + }; + } + + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + + { + name = "ee_first___ee_first_1.1.1.tgz"; + path = fetchurl { + name = "ee_first___ee_first_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + } + + { + name = "ejs___ejs_2.6.1.tgz"; + path = fetchurl { + name = "ejs___ejs_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz"; + sha1 = "498ec0d495655abc6f23cd61868d926464071aa0"; + }; + } + + { + name = "electron_to_chromium___electron_to_chromium_1.3.96.tgz"; + path = fetchurl { + name = "electron_to_chromium___electron_to_chromium_1.3.96.tgz"; + url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz"; + sha1 = "25770ec99b8b07706dedf3a5f43fa50cb54c4f9a"; + }; + } + + { + name = "elliptic___elliptic_6.4.1.tgz"; + path = fetchurl { + name = "elliptic___elliptic_6.4.1.tgz"; + url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz"; + sha1 = "c2d0b7776911b86722c632c3c06c60f2f819939a"; + }; + } + + { + name = "https___codeload.github.com_Gargron_emoji_mart_tar.gz_ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9"; + path = fetchurl { + name = "https___codeload.github.com_Gargron_emoji_mart_tar.gz_ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9"; + url = "https://codeload.github.com/Gargron/emoji-mart/tar.gz/ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9"; + sha1 = "4255dc41fa7df9c3a02c1595f058e248bc37b784"; + }; + } + + { + name = "emoji_regex___emoji_regex_6.5.1.tgz"; + path = fetchurl { + name = "emoji_regex___emoji_regex_6.5.1.tgz"; + url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz"; + sha1 = "9baea929b155565c11ea41c6626eaa65cef992c2"; + }; + } + + { + name = "emojis_list___emojis_list_2.1.0.tgz"; + path = fetchurl { + name = "emojis_list___emojis_list_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"; + sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; + }; + } + + { + name = "encodeurl___encodeurl_1.0.2.tgz"; + path = fetchurl { + name = "encodeurl___encodeurl_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + } + + { + name = "encoding___encoding_0.1.12.tgz"; + path = fetchurl { + name = "encoding___encoding_0.1.12.tgz"; + url = "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz"; + sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb"; + }; + } + + { + name = "end_of_stream___end_of_stream_1.4.1.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz"; + sha1 = "ed29634d19baba463b6ce6b80a37213eab71ec43"; + }; + } + + { + name = "enhanced_resolve___enhanced_resolve_4.1.0.tgz"; + path = fetchurl { + name = "enhanced_resolve___enhanced_resolve_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz"; + sha1 = "41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"; + }; + } + + { + name = "entities___entities_1.1.2.tgz"; + path = fetchurl { + name = "entities___entities_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz"; + sha1 = "bdfa735299664dfafd34529ed4f8522a275fea56"; + }; + } + + { + name = "enzyme_adapter_react_16___enzyme_adapter_react_16_1.7.1.tgz"; + path = fetchurl { + name = "enzyme_adapter_react_16___enzyme_adapter_react_16_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.7.1.tgz"; + sha1 = "c37c4cb0fd75e88a063154a7a88096474914496a"; + }; + } + + { + name = "enzyme_adapter_utils___enzyme_adapter_utils_1.9.0.tgz"; + path = fetchurl { + name = "enzyme_adapter_utils___enzyme_adapter_utils_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.9.0.tgz"; + sha1 = "3997c20f3387fdcd932b155b3740829ea10aa86c"; + }; + } + + { + name = "enzyme___enzyme_3.8.0.tgz"; + path = fetchurl { + name = "enzyme___enzyme_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz"; + sha1 = "646d2d5d0798cb98fdec39afcee8a53237b47ad5"; + }; + } + + { + name = "errno___errno_0.1.7.tgz"; + path = fetchurl { + name = "errno___errno_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz"; + sha1 = "4684d71779ad39af177e3f007996f7c67c852618"; + }; + } + + { + name = "error_ex___error_ex_1.3.2.tgz"; + path = fetchurl { + name = "error_ex___error_ex_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; + sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; + }; + } + + { + name = "es_abstract___es_abstract_1.12.0.tgz"; + path = fetchurl { + name = "es_abstract___es_abstract_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz"; + sha1 = "9dbbdd27c6856f0001421ca18782d786bf8a6165"; + }; + } + + { + name = "es_to_primitive___es_to_primitive_1.2.0.tgz"; + path = fetchurl { + name = "es_to_primitive___es_to_primitive_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz"; + sha1 = "edf72478033456e8dda8ef09e00ad9650707f377"; + }; + } + + { + name = "es5_ext___es5_ext_0.10.46.tgz"; + path = fetchurl { + name = "es5_ext___es5_ext_0.10.46.tgz"; + url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz"; + sha1 = "efd99f67c5a7ec789baa3daa7f79870388f7f572"; + }; + } + + { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + path = fetchurl { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"; + sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; + }; + } + + { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + path = fetchurl { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz"; + sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; + }; + } + + { + name = "escape_html___escape_html_1.0.3.tgz"; + path = fetchurl { + name = "escape_html___escape_html_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + } + + { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + path = fetchurl { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + } + + { + name = "escodegen___escodegen_1.11.0.tgz"; + path = fetchurl { + name = "escodegen___escodegen_1.11.0.tgz"; + url = "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz"; + sha1 = "b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"; + }; + } + + { + name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.2.tgz"; + path = fetchurl { + name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz"; + sha1 = "58f15fb839b8d0576ca980413476aab2472db66a"; + }; + } + + { + name = "eslint_module_utils___eslint_module_utils_2.2.0.tgz"; + path = fetchurl { + name = "eslint_module_utils___eslint_module_utils_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz"; + sha1 = "b270362cd88b1a48ad308976ce7fa54e98411746"; + }; + } + + { + name = "eslint_plugin_import___eslint_plugin_import_2.14.0.tgz"; + path = fetchurl { + name = "eslint_plugin_import___eslint_plugin_import_2.14.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz"; + sha1 = "6b17626d2e3e6ad52cfce8807a845d15e22111a8"; + }; + } + + { + name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.1.2.tgz"; + path = fetchurl { + name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz"; + sha1 = "69bca4890b36dcf0fe16dd2129d2d88b98f33f88"; + }; + } + + { + name = "eslint_plugin_promise___eslint_plugin_promise_4.0.1.tgz"; + path = fetchurl { + name = "eslint_plugin_promise___eslint_plugin_promise_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz"; + sha1 = "2d074b653f35a23d1ba89d8e976a985117d1c6a2"; + }; + } + + { + name = "eslint_plugin_react___eslint_plugin_react_7.12.1.tgz"; + path = fetchurl { + name = "eslint_plugin_react___eslint_plugin_react_7.12.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.1.tgz"; + sha1 = "b9c4639f72469ff317ac31e3bd630d22d0dbf8f4"; + }; + } + + { + name = "eslint_scope___eslint_scope_3.7.1.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_3.7.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz"; + sha1 = "3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"; + }; + } + + { + name = "eslint_scope___eslint_scope_4.0.0.tgz"; + path = fetchurl { + name = "eslint_scope___eslint_scope_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz"; + sha1 = "50bf3071e9338bcdc43331794a0cb533f0136172"; + }; + } + + { + name = "eslint_utils___eslint_utils_1.3.1.tgz"; + path = fetchurl { + name = "eslint_utils___eslint_utils_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz"; + sha1 = "9a851ba89ee7c460346f97cf8939c7298827e512"; + }; + } + + { + name = "eslint_visitor_keys___eslint_visitor_keys_1.0.0.tgz"; + path = fetchurl { + name = "eslint_visitor_keys___eslint_visitor_keys_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz"; + sha1 = "3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"; + }; + } + + { + name = "eslint___eslint_5.11.1.tgz"; + path = fetchurl { + name = "eslint___eslint_5.11.1.tgz"; + url = "https://registry.yarnpkg.com/eslint/-/eslint-5.11.1.tgz"; + sha1 = "8deda83db9f354bf9d3f53f9677af7e0e13eadda"; + }; + } + + { + name = "espree___espree_5.0.0.tgz"; + path = fetchurl { + name = "espree___espree_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz"; + sha1 = "fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c"; + }; + } + + { + name = "esprima___esprima_3.1.3.tgz"; + path = fetchurl { + name = "esprima___esprima_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz"; + sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633"; + }; + } + + { + name = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + + { + name = "esquery___esquery_1.0.1.tgz"; + path = fetchurl { + name = "esquery___esquery_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz"; + sha1 = "406c51658b1f5991a5f9b62b1dc25b00e3e5c708"; + }; + } + + { + name = "esrecurse___esrecurse_4.2.1.tgz"; + path = fetchurl { + name = "esrecurse___esrecurse_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz"; + sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"; + }; + } + + { + name = "estraverse___estraverse_4.2.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz"; + sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; + }; + } + + { + name = "esutils___esutils_2.0.2.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz"; + sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; + }; + } + + { + name = "etag___etag_1.8.1.tgz"; + path = fetchurl { + name = "etag___etag_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + } + + { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + path = fetchurl { + name = "eventemitter3___eventemitter3_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz"; + sha1 = "090b4d6cdbd645ed10bf750d4b5407942d7ba163"; + }; + } + + { + name = "events___events_1.1.1.tgz"; + path = fetchurl { + name = "events___events_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz"; + sha1 = "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"; + }; + } + + { + name = "eventsource___eventsource_1.0.7.tgz"; + path = fetchurl { + name = "eventsource___eventsource_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz"; + sha1 = "8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"; + }; + } + + { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + path = fetchurl { + name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; + sha1 = "7fcbdb198dc71959432efe13842684e0525acb02"; + }; + } + + { + name = "exec_sh___exec_sh_0.2.2.tgz"; + path = fetchurl { + name = "exec_sh___exec_sh_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz"; + sha1 = "2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"; + }; + } + + { + name = "execa___execa_0.10.0.tgz"; + path = fetchurl { + name = "execa___execa_0.10.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz"; + sha1 = "ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"; + }; + } + + { + name = "execa___execa_0.7.0.tgz"; + path = fetchurl { + name = "execa___execa_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz"; + sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777"; + }; + } + + { + name = "execa___execa_1.0.0.tgz"; + path = fetchurl { + name = "execa___execa_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"; + sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8"; + }; + } + + { + name = "exif_js___exif_js_2.3.0.tgz"; + path = fetchurl { + name = "exif_js___exif_js_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/exif-js/-/exif-js-2.3.0.tgz"; + sha1 = "9d10819bf571f873813e7640241255ab9ce1a814"; + }; + } + + { + name = "exit___exit_0.1.2.tgz"; + path = fetchurl { + name = "exit___exit_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz"; + sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c"; + }; + } + + { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz"; + sha1 = "df07284e342a807cd733ac5af72411e581d1177b"; + }; + } + + { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + } + + { + name = "expand_range___expand_range_1.8.2.tgz"; + path = fetchurl { + name = "expand_range___expand_range_1.8.2.tgz"; + url = "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz"; + sha1 = "a299effd335fe2721ebae8e257ec79644fc85337"; + }; + } + + { + name = "expect___expect_23.6.0.tgz"; + path = fetchurl { + name = "expect___expect_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz"; + sha1 = "1e0c8d3ba9a581c87bd71fb9bc8862d443425f98"; + }; + } + + { + name = "express___express_4.16.4.tgz"; + path = fetchurl { + name = "express___express_4.16.4.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz"; + sha1 = "fddef61926109e24c515ea97fd2f1bdbf62df12e"; + }; + } + + { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + } + + { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + } + + { + name = "extend___extend_3.0.2.tgz"; + path = fetchurl { + name = "extend___extend_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; + sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; + }; + } + + { + name = "external_editor___external_editor_3.0.3.tgz"; + path = fetchurl { + name = "external_editor___external_editor_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz"; + sha1 = "5866db29a97826dbe4bf3afd24070ead9ea43a27"; + }; + } + + { + name = "extglob___extglob_0.3.2.tgz"; + path = fetchurl { + name = "extglob___extglob_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz"; + sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1"; + }; + } + + { + name = "extglob___extglob_2.0.4.tgz"; + path = fetchurl { + name = "extglob___extglob_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; + sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; + }; + } + + { + name = "extsprintf___extsprintf_1.3.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + } + + { + name = "extsprintf___extsprintf_1.4.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; + sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz"; + sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; + }; + } + + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; + sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; + }; + } + + { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + path = fetchurl { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + } + + { + name = "fastparse___fastparse_1.1.2.tgz"; + path = fetchurl { + name = "fastparse___fastparse_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz"; + sha1 = "91728c5a5942eced8531283c79441ee4122c35a9"; + }; + } + + { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.10.0.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz"; + sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"; + }; + } + + { + name = "faye_websocket___faye_websocket_0.11.1.tgz"; + path = fetchurl { + name = "faye_websocket___faye_websocket_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz"; + sha1 = "f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"; + }; + } + + { + name = "fb_watchman___fb_watchman_2.0.0.tgz"; + path = fetchurl { + name = "fb_watchman___fb_watchman_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz"; + sha1 = "54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"; + }; + } + + { + name = "fbjs___fbjs_0.8.17.tgz"; + path = fetchurl { + name = "fbjs___fbjs_0.8.17.tgz"; + url = "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz"; + sha1 = "c4d598ead6949112653d6588b01a5cdcd9f90fdd"; + }; + } + + { + name = "fibers___fibers_3.1.1.tgz"; + path = fetchurl { + name = "fibers___fibers_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/fibers/-/fibers-3.1.1.tgz"; + sha1 = "0238902ca938347bd779523692fbeefdf4f688ab"; + }; + } + + { + name = "figgy_pudding___figgy_pudding_3.5.1.tgz"; + path = fetchurl { + name = "figgy_pudding___figgy_pudding_3.5.1.tgz"; + url = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz"; + sha1 = "862470112901c727a0e495a80744bd5baa1d6790"; + }; + } + + { + name = "figures___figures_2.0.0.tgz"; + path = fetchurl { + name = "figures___figures_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz"; + sha1 = "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"; + }; + } + + { + name = "file_entry_cache___file_entry_cache_2.0.0.tgz"; + path = fetchurl { + name = "file_entry_cache___file_entry_cache_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz"; + sha1 = "c392990c3e684783d838b8c84a45d8a048458361"; + }; + } + + { + name = "file_loader___file_loader_3.0.1.tgz"; + path = fetchurl { + name = "file_loader___file_loader_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz"; + sha1 = "f8e0ba0b599918b51adfe45d66d1e771ad560faa"; + }; + } + + { + name = "filename_regex___filename_regex_2.0.1.tgz"; + path = fetchurl { + name = "filename_regex___filename_regex_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz"; + sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"; + }; + } + + { + name = "fileset___fileset_2.0.3.tgz"; + path = fetchurl { + name = "fileset___fileset_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz"; + sha1 = "8e7548a96d3cc2327ee5e674168723a333bba2a0"; + }; + } + + { + name = "filesize___filesize_3.6.1.tgz"; + path = fetchurl { + name = "filesize___filesize_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz"; + sha1 = "090bb3ee01b6f801a8a8be99d31710b3422bb317"; + }; + } + + { + name = "fill_range___fill_range_2.2.4.tgz"; + path = fetchurl { + name = "fill_range___fill_range_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz"; + sha1 = "eb1e773abb056dcd8df2bfdf6af59b8b3a936565"; + }; + } + + { + name = "fill_range___fill_range_4.0.0.tgz"; + path = fetchurl { + name = "fill_range___fill_range_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + } + + { + name = "finalhandler___finalhandler_1.1.1.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz"; + sha1 = "eebf4ed840079c83f4249038c9d703008301b105"; + }; + } + + { + name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz"; + sha1 = "9288e3e9e3cc3748717d39eade17cf71fc30ee6f"; + }; + } + + { + name = "find_cache_dir___find_cache_dir_2.0.0.tgz"; + path = fetchurl { + name = "find_cache_dir___find_cache_dir_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz"; + sha1 = "4c1faed59f45184530fb9d7fa123a4d04a98472d"; + }; + } + + { + name = "find_up___find_up_1.1.2.tgz"; + path = fetchurl { + name = "find_up___find_up_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz"; + sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"; + }; + } + + { + name = "find_up___find_up_2.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"; + sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; + }; + } + + { + name = "find_up___find_up_3.0.0.tgz"; + path = fetchurl { + name = "find_up___find_up_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz"; + sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73"; + }; + } + + { + name = "flat_cache___flat_cache_1.3.4.tgz"; + path = fetchurl { + name = "flat_cache___flat_cache_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz"; + sha1 = "2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"; + }; + } + + { + name = "flush_write_stream___flush_write_stream_1.0.3.tgz"; + path = fetchurl { + name = "flush_write_stream___flush_write_stream_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz"; + sha1 = "c5d586ef38af6097650b49bc41b55fabb19f35bd"; + }; + } + + { + name = "follow_redirects___follow_redirects_1.6.0.tgz"; + path = fetchurl { + name = "follow_redirects___follow_redirects_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.0.tgz"; + sha1 = "d12452c031e8c67eb6637d861bfc7a8090167933"; + }; + } + + { + name = "font_awesome___font_awesome_4.7.0.tgz"; + path = fetchurl { + name = "font_awesome___font_awesome_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz"; + sha1 = "8fa8cf0411a1a31afd07b06d2902bb9fc815a133"; + }; + } + + { + name = "for_in___for_in_0.1.8.tgz"; + path = fetchurl { + name = "for_in___for_in_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz"; + sha1 = "d8773908e31256109952b1fdb9b3fa867d2775e1"; + }; + } + + { + name = "for_in___for_in_1.0.2.tgz"; + path = fetchurl { + name = "for_in___for_in_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + } + + { + name = "for_own___for_own_0.1.5.tgz"; + path = fetchurl { + name = "for_own___for_own_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz"; + sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce"; + }; + } + + { + name = "for_own___for_own_1.0.0.tgz"; + path = fetchurl { + name = "for_own___for_own_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz"; + sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b"; + }; + } + + { + name = "forever_agent___forever_agent_0.6.1.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + } + + { + name = "form_data___form_data_2.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + + { + name = "forwarded___forwarded_0.1.2.tgz"; + path = fetchurl { + name = "forwarded___forwarded_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + } + + { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + path = fetchurl { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + } + + { + name = "fresh___fresh_0.5.2.tgz"; + path = fetchurl { + name = "fresh___fresh_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + } + + { + name = "from2___from2_2.3.0.tgz"; + path = fetchurl { + name = "from2___from2_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz"; + sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af"; + }; + } + + { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz"; + sha1 = "06c277218454ec288df77ada54a03b8702aacb9d"; + }; + } + + { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + path = fetchurl { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"; + sha1 = "b47df53493ef911df75731e70a9ded0189db40c9"; + }; + } + + { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + path = fetchurl { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + } + + { + name = "fsevents___fsevents_1.2.4.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz"; + sha1 = "f41dcb1af2582af3692da36fc55cbd8e1041c426"; + }; + } + + { + name = "function_bind___function_bind_1.1.1.tgz"; + path = fetchurl { + name = "function_bind___function_bind_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz"; + sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d"; + }; + } + + { + name = "function.prototype.name___function.prototype.name_1.1.0.tgz"; + path = fetchurl { + name = "function.prototype.name___function.prototype.name_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz"; + sha1 = "8bd763cc0af860a859cc5d49384d74b932cd2327"; + }; + } + + { + name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + path = fetchurl { + name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"; + sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"; + }; + } + + { + name = "gauge___gauge_2.7.4.tgz"; + path = fetchurl { + name = "gauge___gauge_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz"; + sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; + }; + } + + { + name = "generic_pool___generic_pool_2.4.3.tgz"; + path = fetchurl { + name = "generic_pool___generic_pool_2.4.3.tgz"; + url = "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.3.tgz"; + sha1 = "780c36f69dfad05a5a045dd37be7adca11a4f6ff"; + }; + } + + { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz"; + sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"; + }; + } + + { + name = "get_stream___get_stream_3.0.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz"; + sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14"; + }; + } + + { + name = "get_stream___get_stream_4.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz"; + sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"; + }; + } + + { + name = "get_value___get_value_2.0.6.tgz"; + path = fetchurl { + name = "get_value___get_value_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + } + + { + name = "getpass___getpass_0.1.7.tgz"; + path = fetchurl { + name = "getpass___getpass_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + } + + { + name = "glob_base___glob_base_0.3.0.tgz"; + path = fetchurl { + name = "glob_base___glob_base_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz"; + sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"; + }; + } + + { + name = "glob_parent___glob_parent_2.0.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz"; + sha1 = "81383d72db054fcccf5336daa902f182f6edbb28"; + }; + } + + { + name = "glob_parent___glob_parent_3.1.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz"; + sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; + }; + } + + { + name = "glob___glob_7.1.3.tgz"; + path = fetchurl { + name = "glob___glob_7.1.3.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz"; + sha1 = "3960832d3f1574108342dafd3a67b332c0969df1"; + }; + } + + { + name = "global_modules_path___global_modules_path_2.3.1.tgz"; + path = fetchurl { + name = "global_modules_path___global_modules_path_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.1.tgz"; + sha1 = "e541f4c800a1a8514a990477b267ac67525b9931"; + }; + } + + { + name = "globals___globals_11.9.0.tgz"; + path = fetchurl { + name = "globals___globals_11.9.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz"; + sha1 = "bde236808e987f290768a93d065060d78e6ab249"; + }; + } + + { + name = "globals___globals_9.18.0.tgz"; + path = fetchurl { + name = "globals___globals_9.18.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz"; + sha1 = "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"; + }; + } + + { + name = "globby___globby_6.1.0.tgz"; + path = fetchurl { + name = "globby___globby_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz"; + sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c"; + }; + } + + { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz"; + sha1 = "ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"; + }; + } + + { + name = "growly___growly_1.3.0.tgz"; + path = fetchurl { + name = "growly___growly_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz"; + sha1 = "f10748cbe76af964b7c96c93c6bcc28af120c081"; + }; + } + + { + name = "gzip_size___gzip_size_5.0.0.tgz"; + path = fetchurl { + name = "gzip_size___gzip_size_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz"; + sha1 = "a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"; + }; + } + + { + name = "handle_thing___handle_thing_2.0.0.tgz"; + path = fetchurl { + name = "handle_thing___handle_thing_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz"; + sha1 = "0e039695ff50c93fc288557d696f3c1dc6776754"; + }; + } + + { + name = "handlebars___handlebars_4.0.12.tgz"; + path = fetchurl { + name = "handlebars___handlebars_4.0.12.tgz"; + url = "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz"; + sha1 = "2c15c8a96d46da5e266700518ba8cb8d919d5bc5"; + }; + } + + { + name = "har_schema___har_schema_2.0.0.tgz"; + path = fetchurl { + name = "har_schema___har_schema_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + } + + { + name = "har_validator___har_validator_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + + { + name = "has_ansi___has_ansi_2.0.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + } + + { + name = "has_flag___has_flag_1.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz"; + sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; + }; + } + + { + name = "has_flag___has_flag_3.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + } + + { + name = "has_symbols___has_symbols_1.0.0.tgz"; + path = fetchurl { + name = "has_symbols___has_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz"; + sha1 = "ba1a8f1af2a0fc39650f5c850367704122063b44"; + }; + } + + { + name = "has_unicode___has_unicode_2.0.1.tgz"; + path = fetchurl { + name = "has_unicode___has_unicode_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + } + + { + name = "has_value___has_value_0.3.1.tgz"; + path = fetchurl { + name = "has_value___has_value_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + } + + { + name = "has_value___has_value_1.0.0.tgz"; + path = fetchurl { + name = "has_value___has_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + } + + { + name = "has_values___has_values_0.1.4.tgz"; + path = fetchurl { + name = "has_values___has_values_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + } + + { + name = "has_values___has_values_1.0.0.tgz"; + path = fetchurl { + name = "has_values___has_values_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + } + + { + name = "has___has_1.0.3.tgz"; + path = fetchurl { + name = "has___has_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz"; + sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796"; + }; + } + + { + name = "hash_base___hash_base_3.0.4.tgz"; + path = fetchurl { + name = "hash_base___hash_base_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz"; + sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918"; + }; + } + + { + name = "hash.js___hash.js_1.1.7.tgz"; + path = fetchurl { + name = "hash.js___hash.js_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz"; + sha1 = "0babca538e8d4ee4a0f8988d68866537a003cf42"; + }; + } + + { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + path = fetchurl { + name = "hex_color_regex___hex_color_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz"; + sha1 = "4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"; + }; + } + + { + name = "history___history_4.7.2.tgz"; + path = fetchurl { + name = "history___history_4.7.2.tgz"; + url = "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz"; + sha1 = "22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b"; + }; + } + + { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + path = fetchurl { + name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; + sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; + }; + } + + { + name = "hoist_non_react_statics___hoist_non_react_statics_2.5.5.tgz"; + path = fetchurl { + name = "hoist_non_react_statics___hoist_non_react_statics_2.5.5.tgz"; + url = "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz"; + sha1 = "c5903cf409c0dfd908f388e619d86b9c1174cb47"; + }; + } + + { + name = "hoist_non_react_statics___hoist_non_react_statics_3.2.1.tgz"; + path = fetchurl { + name = "hoist_non_react_statics___hoist_non_react_statics_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz"; + sha1 = "c09c0555c84b38a7ede6912b61efddafd6e75e1e"; + }; + } + + { + name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; + path = fetchurl { + name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz"; + sha1 = "e36c3f2d2cae7d746a857e38d18d5f32a7882db8"; + }; + } + + { + name = "hoopy___hoopy_0.1.4.tgz"; + path = fetchurl { + name = "hoopy___hoopy_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz"; + sha1 = "609207d661100033a9a9402ad3dea677381c1b1d"; + }; + } + + { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz"; + sha1 = "97f236977bd6e125408930ff6de3eec6281ec047"; + }; + } + + { + name = "hpack.js___hpack.js_2.1.6.tgz"; + path = fetchurl { + name = "hpack.js___hpack.js_2.1.6.tgz"; + url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz"; + sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2"; + }; + } + + { + name = "hsl_regex___hsl_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsl_regex___hsl_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz"; + sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e"; + }; + } + + { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + path = fetchurl { + name = "hsla_regex___hsla_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz"; + sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"; + }; + } + + { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + path = fetchurl { + name = "html_comment_regex___html_comment_regex_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz"; + sha1 = "97d4688aeb5c81886a364faa0cad1dda14d433a7"; + }; + } + + { + name = "html_encoding_sniffer___html_encoding_sniffer_1.0.2.tgz"; + path = fetchurl { + name = "html_encoding_sniffer___html_encoding_sniffer_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz"; + sha1 = "e70d84b94da53aa375e11fe3a351be6642ca46f8"; + }; + } + + { + name = "html_entities___html_entities_1.2.1.tgz"; + path = fetchurl { + name = "html_entities___html_entities_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz"; + sha1 = "0df29351f0721163515dfb9e5543e5f6eed5162f"; + }; + } + + { + name = "htmlparser2___htmlparser2_3.10.0.tgz"; + path = fetchurl { + name = "htmlparser2___htmlparser2_3.10.0.tgz"; + url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz"; + sha1 = "5f5e422dcf6119c0d983ed36260ce9ded0bee464"; + }; + } + + { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + path = fetchurl { + name = "http_deceiver___http_deceiver_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz"; + sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87"; + }; + } + + { + name = "http_errors___http_errors_1.6.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + } + + { + name = "http_link_header___http_link_header_1.0.2.tgz"; + path = fetchurl { + name = "http_link_header___http_link_header_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.2.tgz"; + sha1 = "bea50f02e1c7996021f1013b428c63f77e0f4e11"; + }; + } + + { + name = "http_parser_js___http_parser_js_0.5.0.tgz"; + path = fetchurl { + name = "http_parser_js___http_parser_js_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz"; + sha1 = "d65edbede84349d0dc30320815a15d39cc3cbbd8"; + }; + } + + { + name = "http_proxy_middleware___http_proxy_middleware_0.18.0.tgz"; + path = fetchurl { + name = "http_proxy_middleware___http_proxy_middleware_0.18.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz"; + sha1 = "0987e6bb5a5606e5a69168d8f967a87f15dd8aab"; + }; + } + + { + name = "http_proxy___http_proxy_1.17.0.tgz"; + path = fetchurl { + name = "http_proxy___http_proxy_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz"; + sha1 = "7ad38494658f84605e2f6db4436df410f4e5be9a"; + }; + } + + { + name = "http_signature___http_signature_1.2.0.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + } + + { + name = "https_browserify___https_browserify_1.0.0.tgz"; + path = fetchurl { + name = "https_browserify___https_browserify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz"; + sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz"; + sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + + { + name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; + path = fetchurl { + name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz"; + sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded"; + }; + } + + { + name = "icss_utils___icss_utils_4.0.0.tgz"; + path = fetchurl { + name = "icss_utils___icss_utils_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.0.0.tgz"; + sha1 = "d52cf4bcdcfa1c45c2dbefb4ffdf6b00ef608098"; + }; + } + + { + name = "ieee754___ieee754_1.1.12.tgz"; + path = fetchurl { + name = "ieee754___ieee754_1.1.12.tgz"; + url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz"; + sha1 = "50bf24e5b9c8bb98af4964c941cdb0918da7b60b"; + }; + } + + { + name = "iferr___iferr_0.1.5.tgz"; + path = fetchurl { + name = "iferr___iferr_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz"; + sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"; + }; + } + + { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + path = fetchurl { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz"; + sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8"; + }; + } + + { + name = "ignore___ignore_4.0.6.tgz"; + path = fetchurl { + name = "ignore___ignore_4.0.6.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz"; + sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc"; + }; + } + + { + name = "immutable___immutable_3.8.2.tgz"; + path = fetchurl { + name = "immutable___immutable_3.8.2.tgz"; + url = "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz"; + sha1 = "c2439951455bb39913daf281376f1530e104adf3"; + }; + } + + { + name = "import_cwd___import_cwd_2.1.0.tgz"; + path = fetchurl { + name = "import_cwd___import_cwd_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz"; + sha1 = "aa6cf36e722761285cb371ec6519f53e2435b0a9"; + }; + } + + { + name = "import_fresh___import_fresh_2.0.0.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz"; + sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; + }; + } + + { + name = "import_from___import_from_2.1.0.tgz"; + path = fetchurl { + name = "import_from___import_from_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz"; + sha1 = "335db7f2a7affd53aaa471d4b8021dee36b7f3b1"; + }; + } + + { + name = "import_local___import_local_1.0.0.tgz"; + path = fetchurl { + name = "import_local___import_local_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz"; + sha1 = "5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"; + }; + } + + { + name = "import_local___import_local_2.0.0.tgz"; + path = fetchurl { + name = "import_local___import_local_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz"; + sha1 = "55070be38a5993cf18ef6db7e961f5bee5c5a09d"; + }; + } + + { + name = "imports_loader___imports_loader_0.8.0.tgz"; + path = fetchurl { + name = "imports_loader___imports_loader_0.8.0.tgz"; + url = "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz"; + sha1 = "030ea51b8ca05977c40a3abfd9b4088fe0be9a69"; + }; + } + + { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + path = fetchurl { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + } + + { + name = "indexes_of___indexes_of_1.0.1.tgz"; + path = fetchurl { + name = "indexes_of___indexes_of_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz"; + sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; + }; + } + + { + name = "indexof___indexof_0.0.1.tgz"; + path = fetchurl { + name = "indexof___indexof_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz"; + sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; + }; + } + + { + name = "inflight___inflight_1.0.6.tgz"; + path = fetchurl { + name = "inflight___inflight_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + } + + { + name = "inherits___inherits_2.0.3.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + } + + { + name = "inherits___inherits_2.0.1.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + } + + { + name = "ini___ini_1.3.5.tgz"; + path = fetchurl { + name = "ini___ini_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz"; + sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927"; + }; + } + + { + name = "inquirer___inquirer_6.2.1.tgz"; + path = fetchurl { + name = "inquirer___inquirer_6.2.1.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz"; + sha1 = "9943fc4882161bdb0b0c9276769c75b32dbfcd52"; + }; + } + + { + name = "internal_ip___internal_ip_3.0.1.tgz"; + path = fetchurl { + name = "internal_ip___internal_ip_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz"; + sha1 = "df5c99876e1d2eb2ea2d74f520e3f669a00ece27"; + }; + } + + { + name = "interpret___interpret_1.2.0.tgz"; + path = fetchurl { + name = "interpret___interpret_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz"; + sha1 = "d5061a6224be58e8083985f5014d844359576296"; + }; + } + + { + name = "intersection_observer___intersection_observer_0.5.1.tgz"; + path = fetchurl { + name = "intersection_observer___intersection_observer_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.5.1.tgz"; + sha1 = "e340fc56ce74290fe2b2394d1ce88c4353ac6dfa"; + }; + } + + { + name = "intl_format_cache___intl_format_cache_2.1.0.tgz"; + path = fetchurl { + name = "intl_format_cache___intl_format_cache_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.1.0.tgz"; + sha1 = "04a369fecbfad6da6005bae1f14333332dcf9316"; + }; + } + + { + name = "intl_messageformat_parser___intl_messageformat_parser_1.4.0.tgz"; + path = fetchurl { + name = "intl_messageformat_parser___intl_messageformat_parser_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz"; + sha1 = "b43d45a97468cadbe44331d74bb1e8dea44fc075"; + }; + } + + { + name = "intl_messageformat___intl_messageformat_2.2.0.tgz"; + path = fetchurl { + name = "intl_messageformat___intl_messageformat_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz"; + sha1 = "345bcd46de630b7683330c2e52177ff5eab484fc"; + }; + } + + { + name = "intl_relativeformat___intl_relativeformat_2.1.0.tgz"; + path = fetchurl { + name = "intl_relativeformat___intl_relativeformat_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.1.0.tgz"; + sha1 = "010f1105802251f40ac47d0e3e1a201348a255df"; + }; + } + + { + name = "intl___intl_1.2.5.tgz"; + path = fetchurl { + name = "intl___intl_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz"; + sha1 = "82244a2190c4e419f8371f5aa34daa3420e2abde"; + }; + } + + { + name = "invariant___invariant_2.2.4.tgz"; + path = fetchurl { + name = "invariant___invariant_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz"; + sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6"; + }; + } + + { + name = "invert_kv___invert_kv_1.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz"; + sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"; + }; + } + + { + name = "invert_kv___invert_kv_2.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz"; + sha1 = "7393f5afa59ec9ff5f67a27620d11c226e3eec02"; + }; + } + + { + name = "ip_regex___ip_regex_2.1.0.tgz"; + path = fetchurl { + name = "ip_regex___ip_regex_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz"; + sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"; + }; + } + + { + name = "ip___ip_1.1.5.tgz"; + path = fetchurl { + name = "ip___ip_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz"; + sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz"; + sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.8.1.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz"; + sha1 = "fa4b79fa47fd3def5e3b159825161c0a519c9427"; + }; + } + + { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + path = fetchurl { + name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; + sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz"; + sha1 = "4574a2ae56f7ab206896fb431eaeed066fdf8f03"; + }; + } + + { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + } + + { + name = "is_boolean_object___is_boolean_object_1.0.0.tgz"; + path = fetchurl { + name = "is_boolean_object___is_boolean_object_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz"; + sha1 = "98f8b28030684219a95f375cfbd88ce3405dff93"; + }; + } + + { + name = "is_buffer___is_buffer_1.1.6.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; + sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; + }; + } + + { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + path = fetchurl { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz"; + sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe"; + }; + } + + { + name = "is_callable___is_callable_1.1.4.tgz"; + path = fetchurl { + name = "is_callable___is_callable_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz"; + sha1 = "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"; + }; + } + + { + name = "is_ci___is_ci_1.2.1.tgz"; + path = fetchurl { + name = "is_ci___is_ci_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz"; + sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c"; + }; + } + + { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + path = fetchurl { + name = "is_color_stop___is_color_stop_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz"; + sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; + }; + } + + { + name = "is_date_object___is_date_object_1.0.1.tgz"; + path = fetchurl { + name = "is_date_object___is_date_object_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz"; + sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"; + }; + } + + { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; + }; + } + + { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; + }; + } + + { + name = "is_directory___is_directory_0.3.1.tgz"; + path = fetchurl { + name = "is_directory___is_directory_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz"; + sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; + }; + } + + { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + path = fetchurl { + name = "is_dotfile___is_dotfile_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz"; + sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"; + }; + } + + { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + path = fetchurl { + name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz"; + sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534"; + }; + } + + { + name = "is_extendable___is_extendable_0.1.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + } + + { + name = "is_extendable___is_extendable_1.0.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; + sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; + }; + } + + { + name = "is_extglob___is_extglob_1.0.0.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz"; + sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0"; + }; + } + + { + name = "is_extglob___is_extglob_2.1.1.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + } + + { + name = "is_finite___is_finite_1.0.2.tgz"; + path = fetchurl { + name = "is_finite___is_finite_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz"; + sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + } + + { + name = "is_generator_fn___is_generator_fn_1.0.0.tgz"; + path = fetchurl { + name = "is_generator_fn___is_generator_fn_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz"; + sha1 = "969d49e1bb3329f6bb7f09089be26578b2ddd46a"; + }; + } + + { + name = "is_glob___is_glob_2.0.1.tgz"; + path = fetchurl { + name = "is_glob___is_glob_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz"; + sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863"; + }; + } + + { + name = "is_glob___is_glob_3.1.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + } + + { + name = "is_glob___is_glob_4.0.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz"; + sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0"; + }; + } + + { + name = "is_nan___is_nan_1.2.1.tgz"; + path = fetchurl { + name = "is_nan___is_nan_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz"; + sha1 = "9faf65b6fb6db24b7f5c0628475ea71f988401e2"; + }; + } + + { + name = "is_number_object___is_number_object_1.0.3.tgz"; + path = fetchurl { + name = "is_number_object___is_number_object_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz"; + sha1 = "f265ab89a9f445034ef6aff15a8f00b00f551799"; + }; + } + + { + name = "is_number___is_number_2.1.0.tgz"; + path = fetchurl { + name = "is_number___is_number_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz"; + sha1 = "01fcbbb393463a548f2f466cce16dece49db908f"; + }; + } + + { + name = "is_number___is_number_3.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + } + + { + name = "is_number___is_number_4.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz"; + sha1 = "0026e37f5454d73e356dfe6564699867c6a7f0ff"; + }; + } + + { + name = "is_obj___is_obj_1.0.1.tgz"; + path = fetchurl { + name = "is_obj___is_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz"; + sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"; + }; + } + + { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + path = fetchurl { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; + sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; + }; + } + + { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + path = fetchurl { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz"; + sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52"; + }; + } + + { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + path = fetchurl { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz"; + sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; + }; + } + + { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + path = fetchurl { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; + }; + } + + { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + path = fetchurl { + name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz"; + sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"; + }; + } + + { + name = "is_primitive___is_primitive_2.0.0.tgz"; + path = fetchurl { + name = "is_primitive___is_primitive_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz"; + sha1 = "207bab91638499c07b2adf240a41a87210034575"; + }; + } + + { + name = "is_promise___is_promise_2.1.0.tgz"; + path = fetchurl { + name = "is_promise___is_promise_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz"; + sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"; + }; + } + + { + name = "is_regex___is_regex_1.0.4.tgz"; + path = fetchurl { + name = "is_regex___is_regex_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz"; + sha1 = "5517489b547091b0930e095654ced25ee97e9491"; + }; + } + + { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + path = fetchurl { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz"; + sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88"; + }; + } + + { + name = "is_stream___is_stream_1.1.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz"; + sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; + }; + } + + { + name = "is_string___is_string_1.0.4.tgz"; + path = fetchurl { + name = "is_string___is_string_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz"; + sha1 = "cc3a9b69857d621e963725a24caeec873b826e64"; + }; + } + + { + name = "is_subset___is_subset_0.1.1.tgz"; + path = fetchurl { + name = "is_subset___is_subset_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz"; + sha1 = "8a59117d932de1de00f245fcdd39ce43f1e939a6"; + }; + } + + { + name = "is_svg___is_svg_3.0.0.tgz"; + path = fetchurl { + name = "is_svg___is_svg_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz"; + sha1 = "9321dbd29c212e5ca99c4fa9794c714bcafa2f75"; + }; + } + + { + name = "is_symbol___is_symbol_1.0.2.tgz"; + path = fetchurl { + name = "is_symbol___is_symbol_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz"; + sha1 = "a055f6ae57192caee329e7a860118b497a950f38"; + }; + } + + { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + path = fetchurl { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + } + + { + name = "is_utf8___is_utf8_0.2.1.tgz"; + path = fetchurl { + name = "is_utf8___is_utf8_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz"; + sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72"; + }; + } + + { + name = "is_windows___is_windows_1.0.2.tgz"; + path = fetchurl { + name = "is_windows___is_windows_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; + sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; + }; + } + + { + name = "is_wsl___is_wsl_1.1.0.tgz"; + path = fetchurl { + name = "is_wsl___is_wsl_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz"; + sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; + }; + } + + { + name = "isarray___isarray_0.0.1.tgz"; + path = fetchurl { + name = "isarray___isarray_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz"; + sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf"; + }; + } + + { + name = "isarray___isarray_1.0.0.tgz"; + path = fetchurl { + name = "isarray___isarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + } + + { + name = "isexe___isexe_2.0.0.tgz"; + path = fetchurl { + name = "isexe___isexe_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + } + + { + name = "isobject___isobject_2.1.0.tgz"; + path = fetchurl { + name = "isobject___isobject_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + } + + { + name = "isobject___isobject_3.0.1.tgz"; + path = fetchurl { + name = "isobject___isobject_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + } + + { + name = "isomorphic_fetch___isomorphic_fetch_2.2.1.tgz"; + path = fetchurl { + name = "isomorphic_fetch___isomorphic_fetch_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz"; + sha1 = "611ae1acf14f5e81f729507472819fe9733558a9"; + }; + } + + { + name = "isstream___isstream_0.1.2.tgz"; + path = fetchurl { + name = "isstream___isstream_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + } + + { + name = "istanbul_api___istanbul_api_1.3.7.tgz"; + path = fetchurl { + name = "istanbul_api___istanbul_api_1.3.7.tgz"; + url = "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz"; + sha1 = "a86c770d2b03e11e3f778cd7aedd82d2722092aa"; + }; + } + + { + name = "istanbul_lib_coverage___istanbul_lib_coverage_1.2.1.tgz"; + path = fetchurl { + name = "istanbul_lib_coverage___istanbul_lib_coverage_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz"; + sha1 = "ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"; + }; + } + + { + name = "istanbul_lib_hook___istanbul_lib_hook_1.2.2.tgz"; + path = fetchurl { + name = "istanbul_lib_hook___istanbul_lib_hook_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz"; + sha1 = "bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"; + }; + } + + { + name = "istanbul_lib_instrument___istanbul_lib_instrument_1.10.2.tgz"; + path = fetchurl { + name = "istanbul_lib_instrument___istanbul_lib_instrument_1.10.2.tgz"; + url = "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz"; + sha1 = "1f55ed10ac3c47f2bdddd5307935126754d0a9ca"; + }; + } + + { + name = "istanbul_lib_report___istanbul_lib_report_1.1.5.tgz"; + path = fetchurl { + name = "istanbul_lib_report___istanbul_lib_report_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz"; + sha1 = "f2a657fc6282f96170aaf281eb30a458f7f4170c"; + }; + } + + { + name = "istanbul_lib_source_maps___istanbul_lib_source_maps_1.2.6.tgz"; + path = fetchurl { + name = "istanbul_lib_source_maps___istanbul_lib_source_maps_1.2.6.tgz"; + url = "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz"; + sha1 = "37b9ff661580f8fca11232752ee42e08c6675d8f"; + }; + } + + { + name = "istanbul_reports___istanbul_reports_1.5.1.tgz"; + path = fetchurl { + name = "istanbul_reports___istanbul_reports_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz"; + sha1 = "97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"; + }; + } + + { + name = "jest_changed_files___jest_changed_files_23.4.2.tgz"; + path = fetchurl { + name = "jest_changed_files___jest_changed_files_23.4.2.tgz"; + url = "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz"; + sha1 = "1eed688370cd5eebafe4ae93d34bb3b64968fe83"; + }; + } + + { + name = "jest_cli___jest_cli_23.6.0.tgz"; + path = fetchurl { + name = "jest_cli___jest_cli_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz"; + sha1 = "61ab917744338f443ef2baa282ddffdd658a5da4"; + }; + } + + { + name = "jest_config___jest_config_23.6.0.tgz"; + path = fetchurl { + name = "jest_config___jest_config_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz"; + sha1 = "f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d"; + }; + } + + { + name = "jest_diff___jest_diff_23.6.0.tgz"; + path = fetchurl { + name = "jest_diff___jest_diff_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz"; + sha1 = "1500f3f16e850bb3d71233408089be099f610c7d"; + }; + } + + { + name = "jest_docblock___jest_docblock_23.2.0.tgz"; + path = fetchurl { + name = "jest_docblock___jest_docblock_23.2.0.tgz"; + url = "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz"; + sha1 = "f085e1f18548d99fdd69b20207e6fd55d91383a7"; + }; + } + + { + name = "jest_each___jest_each_23.6.0.tgz"; + path = fetchurl { + name = "jest_each___jest_each_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz"; + sha1 = "ba0c3a82a8054387016139c733a05242d3d71575"; + }; + } + + { + name = "jest_environment_jsdom___jest_environment_jsdom_23.4.0.tgz"; + path = fetchurl { + name = "jest_environment_jsdom___jest_environment_jsdom_23.4.0.tgz"; + url = "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz"; + sha1 = "056a7952b3fea513ac62a140a2c368c79d9e6023"; + }; + } + + { + name = "jest_environment_node___jest_environment_node_23.4.0.tgz"; + path = fetchurl { + name = "jest_environment_node___jest_environment_node_23.4.0.tgz"; + url = "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz"; + sha1 = "57e80ed0841dea303167cce8cd79521debafde10"; + }; + } + + { + name = "jest_get_type___jest_get_type_22.4.3.tgz"; + path = fetchurl { + name = "jest_get_type___jest_get_type_22.4.3.tgz"; + url = "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz"; + sha1 = "e3a8504d8479342dd4420236b322869f18900ce4"; + }; + } + + { + name = "jest_haste_map___jest_haste_map_23.6.0.tgz"; + path = fetchurl { + name = "jest_haste_map___jest_haste_map_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz"; + sha1 = "2e3eb997814ca696d62afdb3f2529f5bbc935e16"; + }; + } + + { + name = "jest_jasmine2___jest_jasmine2_23.6.0.tgz"; + path = fetchurl { + name = "jest_jasmine2___jest_jasmine2_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz"; + sha1 = "840e937f848a6c8638df24360ab869cc718592e0"; + }; + } + + { + name = "jest_leak_detector___jest_leak_detector_23.6.0.tgz"; + path = fetchurl { + name = "jest_leak_detector___jest_leak_detector_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz"; + sha1 = "e4230fd42cf381a1a1971237ad56897de7e171de"; + }; + } + + { + name = "jest_matcher_utils___jest_matcher_utils_23.6.0.tgz"; + path = fetchurl { + name = "jest_matcher_utils___jest_matcher_utils_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz"; + sha1 = "726bcea0c5294261a7417afb6da3186b4b8cac80"; + }; + } + + { + name = "jest_message_util___jest_message_util_23.4.0.tgz"; + path = fetchurl { + name = "jest_message_util___jest_message_util_23.4.0.tgz"; + url = "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz"; + sha1 = "17610c50942349508d01a3d1e0bda2c079086a9f"; + }; + } + + { + name = "jest_mock___jest_mock_23.2.0.tgz"; + path = fetchurl { + name = "jest_mock___jest_mock_23.2.0.tgz"; + url = "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz"; + sha1 = "ad1c60f29e8719d47c26e1138098b6d18b261134"; + }; + } + + { + name = "jest_regex_util___jest_regex_util_23.3.0.tgz"; + path = fetchurl { + name = "jest_regex_util___jest_regex_util_23.3.0.tgz"; + url = "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz"; + sha1 = "5f86729547c2785c4002ceaa8f849fe8ca471bc5"; + }; + } + + { + name = "jest_resolve_dependencies___jest_resolve_dependencies_23.6.0.tgz"; + path = fetchurl { + name = "jest_resolve_dependencies___jest_resolve_dependencies_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz"; + sha1 = "b4526af24c8540d9a3fab102c15081cf509b723d"; + }; + } + + { + name = "jest_resolve___jest_resolve_23.6.0.tgz"; + path = fetchurl { + name = "jest_resolve___jest_resolve_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz"; + sha1 = "cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae"; + }; + } + + { + name = "jest_runner___jest_runner_23.6.0.tgz"; + path = fetchurl { + name = "jest_runner___jest_runner_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz"; + sha1 = "3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38"; + }; + } + + { + name = "jest_runtime___jest_runtime_23.6.0.tgz"; + path = fetchurl { + name = "jest_runtime___jest_runtime_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz"; + sha1 = "059e58c8ab445917cd0e0d84ac2ba68de8f23082"; + }; + } + + { + name = "jest_serializer___jest_serializer_23.0.1.tgz"; + path = fetchurl { + name = "jest_serializer___jest_serializer_23.0.1.tgz"; + url = "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz"; + sha1 = "a3776aeb311e90fe83fab9e533e85102bd164165"; + }; + } + + { + name = "jest_snapshot___jest_snapshot_23.6.0.tgz"; + path = fetchurl { + name = "jest_snapshot___jest_snapshot_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz"; + sha1 = "f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a"; + }; + } + + { + name = "jest_util___jest_util_23.4.0.tgz"; + path = fetchurl { + name = "jest_util___jest_util_23.4.0.tgz"; + url = "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz"; + sha1 = "4d063cb927baf0a23831ff61bec2cbbf49793561"; + }; + } + + { + name = "jest_validate___jest_validate_23.6.0.tgz"; + path = fetchurl { + name = "jest_validate___jest_validate_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz"; + sha1 = "36761f99d1ed33fcd425b4e4c5595d62b6597474"; + }; + } + + { + name = "jest_watcher___jest_watcher_23.4.0.tgz"; + path = fetchurl { + name = "jest_watcher___jest_watcher_23.4.0.tgz"; + url = "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz"; + sha1 = "d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"; + }; + } + + { + name = "jest_worker___jest_worker_23.2.0.tgz"; + path = fetchurl { + name = "jest_worker___jest_worker_23.2.0.tgz"; + url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz"; + sha1 = "faf706a8da36fae60eb26957257fa7b5d8ea02b9"; + }; + } + + { + name = "jest___jest_23.6.0.tgz"; + path = fetchurl { + name = "jest___jest_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz"; + sha1 = "ad5835e923ebf6e19e7a1d7529a432edfee7813d"; + }; + } + + { + name = "js_base64___js_base64_2.5.0.tgz"; + path = fetchurl { + name = "js_base64___js_base64_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz"; + sha1 = "42255ba183ab67ce59a0dee640afdc00ab5ae93e"; + }; + } + + { + name = "js_levenshtein___js_levenshtein_1.1.4.tgz"; + path = fetchurl { + name = "js_levenshtein___js_levenshtein_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz"; + sha1 = "3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e"; + }; + } + + { + name = "js_string_escape___js_string_escape_1.0.1.tgz"; + path = fetchurl { + name = "js_string_escape___js_string_escape_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz"; + sha1 = "e2625badbc0d67c7533e9edc1068c587ae4137ef"; + }; + } + + { + name = "js_tokens___js_tokens_4.0.0.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz"; + sha1 = "19203fb59991df98e3a287050d4647cdeaf32499"; + }; + } + + { + name = "js_tokens___js_tokens_3.0.2.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz"; + sha1 = "9866df395102130e38f7f996bceb65443209c25b"; + }; + } + + { + name = "js_yaml___js_yaml_3.12.0.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz"; + sha1 = "eaed656ec8344f10f527c6bfa1b6e2244de167d1"; + }; + } + + { + name = "jsbn___jsbn_0.1.1.tgz"; + path = fetchurl { + name = "jsbn___jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + } + + { + name = "jsdom___jsdom_11.12.0.tgz"; + path = fetchurl { + name = "jsdom___jsdom_11.12.0.tgz"; + url = "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz"; + sha1 = "1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"; + }; + } + + { + name = "jsesc___jsesc_1.3.0.tgz"; + path = fetchurl { + name = "jsesc___jsesc_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz"; + sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b"; + }; + } + + { + name = "jsesc___jsesc_2.5.2.tgz"; + path = fetchurl { + name = "jsesc___jsesc_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz"; + sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4"; + }; + } + + { + name = "jsesc___jsesc_0.5.0.tgz"; + path = fetchurl { + name = "jsesc___jsesc_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz"; + sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; + }; + } + + { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + path = fetchurl { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9"; + }; + } + + { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; + }; + } + + { + name = "json_schema___json_schema_0.2.3.tgz"; + path = fetchurl { + name = "json_schema___json_schema_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + } + + { + name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"; + sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651"; + }; + } + + { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; + sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; + }; + } + + { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + path = fetchurl { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + } + + { + name = "json3___json3_3.3.2.tgz"; + path = fetchurl { + name = "json3___json3_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz"; + sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1"; + }; + } + + { + name = "json5___json5_0.5.1.tgz"; + path = fetchurl { + name = "json5___json5_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz"; + sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; + }; + } + + { + name = "json5___json5_1.0.1.tgz"; + path = fetchurl { + name = "json5___json5_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz"; + sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe"; + }; + } + + { + name = "json5___json5_2.1.0.tgz"; + path = fetchurl { + name = "json5___json5_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz"; + sha1 = "e7a0c62c48285c628d20a10b85c89bb807c32850"; + }; + } + + { + name = "jsonify___jsonify_0.0.0.tgz"; + path = fetchurl { + name = "jsonify___jsonify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz"; + sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; + }; + } + + { + name = "jsprim___jsprim_1.4.1.tgz"; + path = fetchurl { + name = "jsprim___jsprim_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + } + + { + name = "jsx_ast_utils___jsx_ast_utils_2.0.1.tgz"; + path = fetchurl { + name = "jsx_ast_utils___jsx_ast_utils_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz"; + sha1 = "e801b1b39985e20fffc87b40e3748080e2dcac7f"; + }; + } + + { + name = "keycode___keycode_2.2.0.tgz"; + path = fetchurl { + name = "keycode___keycode_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz"; + sha1 = "3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"; + }; + } + + { + name = "killable___killable_1.0.1.tgz"; + path = fetchurl { + name = "killable___killable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz"; + sha1 = "4c8ce441187a061c7474fb87ca08e2a638194892"; + }; + } + + { + name = "kind_of___kind_of_3.2.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + } + + { + name = "kind_of___kind_of_4.0.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + } + + { + name = "kind_of___kind_of_5.1.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; + sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; + }; + } + + { + name = "kind_of___kind_of_6.0.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz"; + sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051"; + }; + } + + { + name = "kleur___kleur_2.0.2.tgz"; + path = fetchurl { + name = "kleur___kleur_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz"; + sha1 = "b704f4944d95e255d038f0cb05fb8a602c55a300"; + }; + } + + { + name = "knot.js___knot.js_1.1.5.tgz"; + path = fetchurl { + name = "knot.js___knot.js_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/knot.js/-/knot.js-1.1.5.tgz"; + sha1 = "28e72522f703f50fe98812fde224dd72728fef5d"; + }; + } + + { + name = "lcid___lcid_1.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz"; + sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835"; + }; + } + + { + name = "lcid___lcid_2.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz"; + sha1 = "6ef5d2df60e52f82eb228a4c373e8d1f397253cf"; + }; + } + + { + name = "left_pad___left_pad_1.3.0.tgz"; + path = fetchurl { + name = "left_pad___left_pad_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz"; + sha1 = "5b8a3a7765dfe001261dde915589e782f8c94d1e"; + }; + } + + { + name = "leven___leven_2.1.0.tgz"; + path = fetchurl { + name = "leven___leven_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz"; + sha1 = "c2e7a9f772094dee9d34202ae8acce4687875580"; + }; + } + + { + name = "levn___levn_0.3.0.tgz"; + path = fetchurl { + name = "levn___levn_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + } + + { + name = "load_json_file___load_json_file_1.1.0.tgz"; + path = fetchurl { + name = "load_json_file___load_json_file_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz"; + sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0"; + }; + } + + { + name = "load_json_file___load_json_file_2.0.0.tgz"; + path = fetchurl { + name = "load_json_file___load_json_file_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz"; + sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8"; + }; + } + + { + name = "loader_runner___loader_runner_2.3.1.tgz"; + path = fetchurl { + name = "loader_runner___loader_runner_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz"; + sha1 = "026f12fe7c3115992896ac02ba022ba92971b979"; + }; + } + + { + name = "loader_utils___loader_utils_0.2.17.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_0.2.17.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz"; + sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348"; + }; + } + + { + name = "loader_utils___loader_utils_1.2.3.tgz"; + path = fetchurl { + name = "loader_utils___loader_utils_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz"; + sha1 = "1ff5dc6911c9f0a062531a4c04b609406108c2c7"; + }; + } + + { + name = "locate_path___locate_path_2.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz"; + sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; + }; + } + + { + name = "locate_path___locate_path_3.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz"; + sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e"; + }; + } + + { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + path = fetchurl { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"; + sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af"; + }; + } + + { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + path = fetchurl { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; + sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; + }; + } + + { + name = "lodash.escape___lodash.escape_4.0.1.tgz"; + path = fetchurl { + name = "lodash.escape___lodash.escape_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz"; + sha1 = "c9044690c21e04294beaa517712fded1fa88de98"; + }; + } + + { + name = "lodash.flattendeep___lodash.flattendeep_4.4.0.tgz"; + path = fetchurl { + name = "lodash.flattendeep___lodash.flattendeep_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz"; + sha1 = "fb030917f86a3134e5bc9bec0d69e0013ddfedb2"; + }; + } + + { + name = "lodash.get___lodash.get_4.4.2.tgz"; + path = fetchurl { + name = "lodash.get___lodash.get_4.4.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz"; + sha1 = "2d177f652fa31e939b4438d5341499dfa3825e99"; + }; + } + + { + name = "lodash.has___lodash.has_4.5.2.tgz"; + path = fetchurl { + name = "lodash.has___lodash.has_4.5.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz"; + sha1 = "d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"; + }; + } + + { + name = "lodash.isboolean___lodash.isboolean_3.0.3.tgz"; + path = fetchurl { + name = "lodash.isboolean___lodash.isboolean_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz"; + sha1 = "6c2e171db2a257cd96802fd43b01b20d5f5870f6"; + }; + } + + { + name = "lodash.isequal___lodash.isequal_4.5.0.tgz"; + path = fetchurl { + name = "lodash.isequal___lodash.isequal_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz"; + sha1 = "415c4478f2bcc30120c22ce10ed3226f7d3e18e0"; + }; + } + + { + name = "lodash.isobject___lodash.isobject_3.0.2.tgz"; + path = fetchurl { + name = "lodash.isobject___lodash.isobject_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz"; + sha1 = "3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"; + }; + } + + { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + path = fetchurl { + name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; + sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; + }; + } + + { + name = "lodash.sortby___lodash.sortby_4.7.0.tgz"; + path = fetchurl { + name = "lodash.sortby___lodash.sortby_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz"; + sha1 = "edd14c824e2cc9c1e0b0a1b42bb5210516a42438"; + }; + } + + { + name = "lodash.tail___lodash.tail_4.1.1.tgz"; + path = fetchurl { + name = "lodash.tail___lodash.tail_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz"; + sha1 = "d2333a36d9e7717c8ad2f7cacafec7c32b444664"; + }; + } + + { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + path = fetchurl { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; + sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; + }; + } + + { + name = "lodash___lodash_4.17.11.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.11.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz"; + sha1 = "b39ea6229ef607ecd89e2c8df12536891cac9b8d"; + }; + } + + { + name = "loglevel___loglevel_1.6.1.tgz"; + path = fetchurl { + name = "loglevel___loglevel_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz"; + sha1 = "e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"; + }; + } + + { + name = "loose_envify___loose_envify_1.4.0.tgz"; + path = fetchurl { + name = "loose_envify___loose_envify_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz"; + sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf"; + }; + } + + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + + { + name = "lru_cache___lru_cache_5.1.1.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz"; + sha1 = "1da27e6710271947695daf6848e847f01d84b920"; + }; + } + + { + name = "make_dir___make_dir_1.3.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz"; + sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c"; + }; + } + + { + name = "makeerror___makeerror_1.0.11.tgz"; + path = fetchurl { + name = "makeerror___makeerror_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz"; + sha1 = "e01a5c9109f2af79660e4e8b9587790184f5a96c"; + }; + } + + { + name = "map_age_cleaner___map_age_cleaner_0.1.3.tgz"; + path = fetchurl { + name = "map_age_cleaner___map_age_cleaner_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz"; + sha1 = "7d583a7306434c055fe474b0f45078e6e1b4b92a"; + }; + } + + { + name = "map_cache___map_cache_0.2.2.tgz"; + path = fetchurl { + name = "map_cache___map_cache_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + } + + { + name = "map_visit___map_visit_1.0.0.tgz"; + path = fetchurl { + name = "map_visit___map_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + } + + { + name = "mark_loader___mark_loader_0.1.6.tgz"; + path = fetchurl { + name = "mark_loader___mark_loader_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/mark-loader/-/mark-loader-0.1.6.tgz"; + sha1 = "0abb477dca7421d70e20128ff6489f5cae8676d5"; + }; + } + + { + name = "marky___marky_1.2.1.tgz"; + path = fetchurl { + name = "marky___marky_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/marky/-/marky-1.2.1.tgz"; + sha1 = "a3fcf82ffd357756b8b8affec9fdbf3a30dc1b02"; + }; + } + + { + name = "math_random___math_random_1.0.1.tgz"; + path = fetchurl { + name = "math_random___math_random_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz"; + sha1 = "8b3aac588b8a66e4975e3cdea67f7bb329601fac"; + }; + } + + { + name = "md5.js___md5.js_1.3.5.tgz"; + path = fetchurl { + name = "md5.js___md5.js_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz"; + sha1 = "b5d07b8e3216e3e27cd728d72f70d1e6a342005f"; + }; + } + + { + name = "mdn_data___mdn_data_1.1.4.tgz"; + path = fetchurl { + name = "mdn_data___mdn_data_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz"; + sha1 = "50b5d4ffc4575276573c4eedb8780812a8419f01"; + }; + } + + { + name = "media_typer___media_typer_0.3.0.tgz"; + path = fetchurl { + name = "media_typer___media_typer_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + } + + { + name = "mem___mem_1.1.0.tgz"; + path = fetchurl { + name = "mem___mem_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz"; + sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76"; + }; + } + + { + name = "mem___mem_4.0.0.tgz"; + path = fetchurl { + name = "mem___mem_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz"; + sha1 = "6437690d9471678f6cc83659c00cbafcd6b0cdaf"; + }; + } + + { + name = "memoize_one___memoize_one_4.1.0.tgz"; + path = fetchurl { + name = "memoize_one___memoize_one_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz"; + sha1 = "a2387c58c03fff27ca390c31b764a79addf3f906"; + }; + } + + { + name = "memory_fs___memory_fs_0.4.1.tgz"; + path = fetchurl { + name = "memory_fs___memory_fs_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz"; + sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552"; + }; + } + + { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + path = fetchurl { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + } + + { + name = "merge_stream___merge_stream_1.0.1.tgz"; + path = fetchurl { + name = "merge_stream___merge_stream_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz"; + sha1 = "4041202d508a342ba00174008df0c251b8c135e1"; + }; + } + + { + name = "merge___merge_1.2.1.tgz"; + path = fetchurl { + name = "merge___merge_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz"; + sha1 = "38bebf80c3220a8a487b6fcfb3941bb11720c145"; + }; + } + + { + name = "methods___methods_1.1.2.tgz"; + path = fetchurl { + name = "methods___methods_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + } + + { + name = "micromatch___micromatch_2.3.11.tgz"; + path = fetchurl { + name = "micromatch___micromatch_2.3.11.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz"; + sha1 = "86677c97d1720b363431d04d0d15293bd38c1565"; + }; + } + + { + name = "micromatch___micromatch_3.1.10.tgz"; + path = fetchurl { + name = "micromatch___micromatch_3.1.10.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; + sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; + }; + } + + { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + path = fetchurl { + name = "miller_rabin___miller_rabin_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz"; + sha1 = "f080351c865b0dc562a8462966daa53543c78a4d"; + }; + } + + { + name = "mime_db___mime_db_1.37.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.37.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz"; + sha1 = "0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"; + }; + } + + { + name = "mime_types___mime_types_2.1.21.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.21.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz"; + sha1 = "28995aa1ecb770742fe6ae7e58f9181c744b3f96"; + }; + } + + { + name = "mime___mime_1.4.1.tgz"; + path = fetchurl { + name = "mime___mime_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz"; + sha1 = "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"; + }; + } + + { + name = "mime___mime_2.4.0.tgz"; + path = fetchurl { + name = "mime___mime_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz"; + sha1 = "e051fd881358585f3279df333fe694da0bcffdd6"; + }; + } + + { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz"; + sha1 = "820c86a39334640e99516928bd03fca88057d022"; + }; + } + + { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.5.0.tgz"; + path = fetchurl { + name = "mini_css_extract_plugin___mini_css_extract_plugin_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz"; + sha1 = "ac0059b02b9692515a637115b0cc9fed3a35c7b0"; + }; + } + + { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"; + }; + } + + { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; + sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; + }; + } + + { + name = "minimatch___minimatch_3.0.4.tgz"; + path = fetchurl { + name = "minimatch___minimatch_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + } + + { + name = "minimist___minimist_0.0.8.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + } + + { + name = "minimist___minimist_1.2.0.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz"; + sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; + }; + } + + { + name = "minimist___minimist_0.0.10.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.10.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz"; + sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf"; + }; + } + + { + name = "minipass___minipass_2.3.5.tgz"; + path = fetchurl { + name = "minipass___minipass_2.3.5.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz"; + sha1 = "cacebe492022497f656b0f0f51e2682a9ed2d848"; + }; + } + + { + name = "minizlib___minizlib_1.2.1.tgz"; + path = fetchurl { + name = "minizlib___minizlib_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz"; + sha1 = "dd27ea6136243c7c880684e8672bb3a45fd9b614"; + }; + } + + { + name = "mississippi___mississippi_3.0.0.tgz"; + path = fetchurl { + name = "mississippi___mississippi_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz"; + sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022"; + }; + } + + { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz"; + sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe"; + }; + } + + { + name = "mixin_object___mixin_object_2.0.1.tgz"; + path = fetchurl { + name = "mixin_object___mixin_object_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz"; + sha1 = "4fb949441dab182540f1fe035ba60e1947a5e57e"; + }; + } + + { + name = "mkdirp___mkdirp_0.5.1.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + } + + { + name = "moo___moo_0.4.3.tgz"; + path = fetchurl { + name = "moo___moo_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz"; + sha1 = "3f847a26f31cf625a956a87f2b10fbc013bfd10e"; + }; + } + + { + name = "mousetrap___mousetrap_1.6.2.tgz"; + path = fetchurl { + name = "mousetrap___mousetrap_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.2.tgz"; + sha1 = "caadd9cf886db0986fb2fee59a82f6bd37527587"; + }; + } + + { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + path = fetchurl { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz"; + sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92"; + }; + } + + { + name = "ms___ms_2.0.0.tgz"; + path = fetchurl { + name = "ms___ms_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + } + + { + name = "ms___ms_2.1.1.tgz"; + path = fetchurl { + name = "ms___ms_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz"; + sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"; + }; + } + + { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + path = fetchurl { + name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz"; + sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901"; + }; + } + + { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + path = fetchurl { + name = "multicast_dns___multicast_dns_6.2.3.tgz"; + url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz"; + sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229"; + }; + } + + { + name = "mute_stream___mute_stream_0.0.7.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz"; + sha1 = "3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"; + }; + } + + { + name = "nan___nan_2.12.1.tgz"; + path = fetchurl { + name = "nan___nan_2.12.1.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz"; + sha1 = "7b1aa193e9aa86057e3c7bbd0ac448e770925552"; + }; + } + + { + name = "nanomatch___nanomatch_1.2.13.tgz"; + path = fetchurl { + name = "nanomatch___nanomatch_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; + sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; + }; + } + + { + name = "natural_compare___natural_compare_1.4.0.tgz"; + path = fetchurl { + name = "natural_compare___natural_compare_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz"; + sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; + }; + } + + { + name = "nearley___nearley_2.16.0.tgz"; + path = fetchurl { + name = "nearley___nearley_2.16.0.tgz"; + url = "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz"; + sha1 = "77c297d041941d268290ec84b739d0ee297e83a7"; + }; + } + + { + name = "needle___needle_2.2.4.tgz"; + path = fetchurl { + name = "needle___needle_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz"; + sha1 = "51931bff82533b1928b7d1d69e01f1b00ffd2a4e"; + }; + } + + { + name = "negotiator___negotiator_0.6.1.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz"; + sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; + }; + } + + { + name = "neo_async___neo_async_2.6.0.tgz"; + path = fetchurl { + name = "neo_async___neo_async_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz"; + sha1 = "b9d15e4d71c6762908654b5183ed38b753340835"; + }; + } + + { + name = "next_tick___next_tick_1.0.0.tgz"; + path = fetchurl { + name = "next_tick___next_tick_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz"; + sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c"; + }; + } + + { + name = "nice_try___nice_try_1.0.5.tgz"; + path = fetchurl { + name = "nice_try___nice_try_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz"; + sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366"; + }; + } + + { + name = "node_fetch___node_fetch_1.7.3.tgz"; + path = fetchurl { + name = "node_fetch___node_fetch_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz"; + sha1 = "980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"; + }; + } + + { + name = "node_forge___node_forge_0.7.5.tgz"; + path = fetchurl { + name = "node_forge___node_forge_0.7.5.tgz"; + url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz"; + sha1 = "6c152c345ce11c52f465c2abd957e8639cd674df"; + }; + } + + { + name = "node_int64___node_int64_0.4.0.tgz"; + path = fetchurl { + name = "node_int64___node_int64_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz"; + sha1 = "87a9065cdb355d3182d8f94ce11188b825c68a3b"; + }; + } + + { + name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; + path = fetchurl { + name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz"; + sha1 = "5f94263d404f6e44767d726901fff05478d600df"; + }; + } + + { + name = "node_notifier___node_notifier_5.3.0.tgz"; + path = fetchurl { + name = "node_notifier___node_notifier_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz"; + sha1 = "c77a4a7b84038733d5fb351aafd8a268bfe19a01"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz"; + sha1 = "3070040716afdc778747b61b6887bf78880b80fc"; + }; + } + + { + name = "node_releases___node_releases_1.1.3.tgz"; + path = fetchurl { + name = "node_releases___node_releases_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.3.tgz"; + sha1 = "aad9ce0dcb98129c753f772c0aa01360fb90fbd2"; + }; + } + + { + name = "nopt___nopt_4.0.1.tgz"; + path = fetchurl { + name = "nopt___nopt_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz"; + sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; + }; + } + + { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; + sha1 = "12f95a307d58352075a04907b84ac8be98ac012f"; + }; + } + + { + name = "normalize_path___normalize_path_2.1.1.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + } + + { + name = "normalize_range___normalize_range_0.1.2.tgz"; + path = fetchurl { + name = "normalize_range___normalize_range_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz"; + sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942"; + }; + } + + { + name = "normalize_url___normalize_url_3.3.0.tgz"; + path = fetchurl { + name = "normalize_url___normalize_url_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz"; + sha1 = "b2e1c4dc4f7c6d57743df733a4f5978d18650559"; + }; + } + + { + name = "npm_bundled___npm_bundled_1.0.5.tgz"; + path = fetchurl { + name = "npm_bundled___npm_bundled_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz"; + sha1 = "3c1732b7ba936b3a10325aef616467c0ccbcc979"; + }; + } + + { + name = "npm_packlist___npm_packlist_1.1.12.tgz"; + path = fetchurl { + name = "npm_packlist___npm_packlist_1.1.12.tgz"; + url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz"; + sha1 = "22bde2ebc12e72ca482abd67afc51eb49377243a"; + }; + } + + { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz"; + sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f"; + }; + } + + { + name = "npmlog___npmlog_4.1.2.tgz"; + path = fetchurl { + name = "npmlog___npmlog_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz"; + sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b"; + }; + } + + { + name = "nth_check___nth_check_1.0.2.tgz"; + path = fetchurl { + name = "nth_check___nth_check_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz"; + sha1 = "b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"; + }; + } + + { + name = "num2fraction___num2fraction_1.2.2.tgz"; + path = fetchurl { + name = "num2fraction___num2fraction_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz"; + sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"; + }; + } + + { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + path = fetchurl { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + } + + { + name = "nwsapi___nwsapi_2.0.9.tgz"; + path = fetchurl { + name = "nwsapi___nwsapi_2.0.9.tgz"; + url = "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz"; + sha1 = "77ac0cdfdcad52b6a1151a84e73254edc33ed016"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + + { + name = "object_assign___object_assign_4.1.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz"; + sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"; + }; + } + + { + name = "object_assign___object_assign_4.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + } + + { + name = "object_copy___object_copy_0.1.0.tgz"; + path = fetchurl { + name = "object_copy___object_copy_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + } + + { + name = "object_fit_images___object_fit_images_3.2.4.tgz"; + path = fetchurl { + name = "object_fit_images___object_fit_images_3.2.4.tgz"; + url = "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz"; + sha1 = "6c299d38fdf207746e5d2d46c2877f6f25d15b52"; + }; + } + + { + name = "object_inspect___object_inspect_1.6.0.tgz"; + path = fetchurl { + name = "object_inspect___object_inspect_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz"; + sha1 = "c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"; + }; + } + + { + name = "object_is___object_is_1.0.1.tgz"; + path = fetchurl { + name = "object_is___object_is_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz"; + sha1 = "0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"; + }; + } + + { + name = "object_keys___object_keys_1.0.12.tgz"; + path = fetchurl { + name = "object_keys___object_keys_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz"; + sha1 = "09c53855377575310cca62f55bb334abff7b3ed2"; + }; + } + + { + name = "object_visit___object_visit_1.0.1.tgz"; + path = fetchurl { + name = "object_visit___object_visit_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + } + + { + name = "object.assign___object.assign_4.1.0.tgz"; + path = fetchurl { + name = "object.assign___object.assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz"; + sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da"; + }; + } + + { + name = "object.entries___object.entries_1.1.0.tgz"; + path = fetchurl { + name = "object.entries___object.entries_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz"; + sha1 = "2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519"; + }; + } + + { + name = "object.fromentries___object.fromentries_2.0.0.tgz"; + path = fetchurl { + name = "object.fromentries___object.fromentries_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz"; + sha1 = "49a543d92151f8277b3ac9600f1e930b189d30ab"; + }; + } + + { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.0.3.tgz"; + path = fetchurl { + name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz"; + sha1 = "8758c846f5b407adab0f236e0986f14b051caa16"; + }; + } + + { + name = "object.omit___object.omit_2.0.1.tgz"; + path = fetchurl { + name = "object.omit___object.omit_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz"; + sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"; + }; + } + + { + name = "object.pick___object.pick_1.3.0.tgz"; + path = fetchurl { + name = "object.pick___object.pick_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + } + + { + name = "object.values___object.values_1.0.4.tgz"; + path = fetchurl { + name = "object.values___object.values_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz"; + sha1 = "e524da09b4f66ff05df457546ec72ac99f13069a"; + }; + } + + { + name = "obuf___obuf_1.1.2.tgz"; + path = fetchurl { + name = "obuf___obuf_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz"; + sha1 = "09bea3343d41859ebd446292d11c9d4db619084e"; + }; + } + + { + name = "offline_plugin___offline_plugin_5.0.6.tgz"; + path = fetchurl { + name = "offline_plugin___offline_plugin_5.0.6.tgz"; + url = "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-5.0.6.tgz"; + sha1 = "7a7b244220cddb8a8cabecb172ec5c0be03e74b2"; + }; + } + + { + name = "on_finished___on_finished_2.3.0.tgz"; + path = fetchurl { + name = "on_finished___on_finished_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + } + + { + name = "on_headers___on_headers_1.0.1.tgz"; + path = fetchurl { + name = "on_headers___on_headers_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz"; + sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; + }; + } + + { + name = "once___once_1.4.0.tgz"; + path = fetchurl { + name = "once___once_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + } + + { + name = "onetime___onetime_2.0.1.tgz"; + path = fetchurl { + name = "onetime___onetime_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz"; + sha1 = "067428230fd67443b2794b22bba528b6867962d4"; + }; + } + + { + name = "opener___opener_1.5.1.tgz"; + path = fetchurl { + name = "opener___opener_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz"; + sha1 = "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"; + }; + } + + { + name = "opn___opn_5.4.0.tgz"; + path = fetchurl { + name = "opn___opn_5.4.0.tgz"; + url = "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz"; + sha1 = "cb545e7aab78562beb11aa3bfabc7042e1761035"; + }; + } + + { + name = "optimist___optimist_0.6.1.tgz"; + path = fetchurl { + name = "optimist___optimist_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz"; + sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686"; + }; + } + + { + name = "optionator___optionator_0.8.2.tgz"; + path = fetchurl { + name = "optionator___optionator_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz"; + sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64"; + }; + } + + { + name = "original___original_1.0.2.tgz"; + path = fetchurl { + name = "original___original_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz"; + sha1 = "e442a61cffe1c5fd20a65f3261c26663b303f25f"; + }; + } + + { + name = "os_browserify___os_browserify_0.3.0.tgz"; + path = fetchurl { + name = "os_browserify___os_browserify_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz"; + sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; + }; + } + + { + name = "os_homedir___os_homedir_1.0.2.tgz"; + path = fetchurl { + name = "os_homedir___os_homedir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + } + + { + name = "os_locale___os_locale_2.1.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz"; + sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2"; + }; + } + + { + name = "os_locale___os_locale_3.1.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz"; + sha1 = "a802a6ee17f24c10483ab9935719cef4ed16bf1a"; + }; + } + + { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + path = fetchurl { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + } + + { + name = "osenv___osenv_0.1.5.tgz"; + path = fetchurl { + name = "osenv___osenv_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz"; + sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410"; + }; + } + + { + name = "p_defer___p_defer_1.0.0.tgz"; + path = fetchurl { + name = "p_defer___p_defer_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz"; + sha1 = "9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"; + }; + } + + { + name = "p_finally___p_finally_1.0.0.tgz"; + path = fetchurl { + name = "p_finally___p_finally_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz"; + sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae"; + }; + } + + { + name = "p_is_promise___p_is_promise_1.1.0.tgz"; + path = fetchurl { + name = "p_is_promise___p_is_promise_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz"; + sha1 = "9c9456989e9f6588017b0434d56097675c3da05e"; + }; + } + + { + name = "p_limit___p_limit_1.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz"; + sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"; + }; + } + + { + name = "p_limit___p_limit_2.1.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz"; + sha1 = "1d5a0d20fb12707c758a655f6bbc4386b5930d68"; + }; + } + + { + name = "p_locate___p_locate_2.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz"; + sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; + }; + } + + { + name = "p_locate___p_locate_3.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz"; + sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4"; + }; + } + + { + name = "p_map___p_map_1.2.0.tgz"; + path = fetchurl { + name = "p_map___p_map_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz"; + sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b"; + }; + } + + { + name = "p_try___p_try_1.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz"; + sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; + }; + } + + { + name = "p_try___p_try_2.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz"; + sha1 = "85080bb87c64688fa47996fe8f7dfbe8211760b1"; + }; + } + + { + name = "packet_reader___packet_reader_0.3.1.tgz"; + path = fetchurl { + name = "packet_reader___packet_reader_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz"; + sha1 = "cd62e60af8d7fea8a705ec4ff990871c46871f27"; + }; + } + + { + name = "pako___pako_1.0.7.tgz"; + path = fetchurl { + name = "pako___pako_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz"; + sha1 = "2473439021b57f1516c82f58be7275ad8ef1bb27"; + }; + } + + { + name = "parallel_transform___parallel_transform_1.1.0.tgz"; + path = fetchurl { + name = "parallel_transform___parallel_transform_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz"; + sha1 = "d410f065b05da23081fcd10f28854c29bda33b06"; + }; + } + + { + name = "parse_asn1___parse_asn1_5.1.1.tgz"; + path = fetchurl { + name = "parse_asn1___parse_asn1_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz"; + sha1 = "f6bf293818332bd0dab54efb16087724745e6ca8"; + }; + } + + { + name = "parse_css_font___parse_css_font_2.0.2.tgz"; + path = fetchurl { + name = "parse_css_font___parse_css_font_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/parse-css-font/-/parse-css-font-2.0.2.tgz"; + sha1 = "7b60b060705a25a9b90b7f0ed493e5823248a652"; + }; + } + + { + name = "parse_glob___parse_glob_3.0.4.tgz"; + path = fetchurl { + name = "parse_glob___parse_glob_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz"; + sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c"; + }; + } + + { + name = "parse_json___parse_json_2.2.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz"; + sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9"; + }; + } + + { + name = "parse_json___parse_json_4.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz"; + sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; + }; + } + + { + name = "parse5___parse5_4.0.0.tgz"; + path = fetchurl { + name = "parse5___parse5_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz"; + sha1 = "6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"; + }; + } + + { + name = "parse5___parse5_3.0.3.tgz"; + path = fetchurl { + name = "parse5___parse5_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz"; + sha1 = "042f792ffdd36851551cf4e9e066b3874ab45b5c"; + }; + } + + { + name = "parseurl___parseurl_1.3.2.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz"; + sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; + }; + } + + { + name = "pascalcase___pascalcase_0.1.1.tgz"; + path = fetchurl { + name = "pascalcase___pascalcase_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + } + + { + name = "path_browserify___path_browserify_0.0.0.tgz"; + path = fetchurl { + name = "path_browserify___path_browserify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz"; + sha1 = "a0b870729aae214005b7d5032ec2cbbb0fb4451a"; + }; + } + + { + name = "path_complete_extname___path_complete_extname_1.0.0.tgz"; + path = fetchurl { + name = "path_complete_extname___path_complete_extname_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz"; + sha1 = "f889985dc91000c815515c0bfed06c5acda0752b"; + }; + } + + { + name = "path_dirname___path_dirname_1.0.2.tgz"; + path = fetchurl { + name = "path_dirname___path_dirname_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz"; + sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; + }; + } + + { + name = "path_exists___path_exists_2.1.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz"; + sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b"; + }; + } + + { + name = "path_exists___path_exists_3.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz"; + sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; + }; + } + + { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + path = fetchurl { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + } + + { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + path = fetchurl { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + } + + { + name = "path_key___path_key_2.0.1.tgz"; + path = fetchurl { + name = "path_key___path_key_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + } + + { + name = "path_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + + { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + path = fetchurl { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + } + + { + name = "path_to_regexp___path_to_regexp_1.7.0.tgz"; + path = fetchurl { + name = "path_to_regexp___path_to_regexp_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz"; + sha1 = "59fde0f435badacba103a84e9d3bc64e96b9937d"; + }; + } + + { + name = "path_type___path_type_1.1.0.tgz"; + path = fetchurl { + name = "path_type___path_type_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz"; + sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441"; + }; + } + + { + name = "path_type___path_type_2.0.0.tgz"; + path = fetchurl { + name = "path_type___path_type_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz"; + sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73"; + }; + } + + { + name = "pbkdf2___pbkdf2_3.0.17.tgz"; + path = fetchurl { + name = "pbkdf2___pbkdf2_3.0.17.tgz"; + url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz"; + sha1 = "976c206530617b14ebb32114239f7b09336e93a6"; + }; + } + + { + name = "performance_now___performance_now_0.2.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz"; + sha1 = "33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"; + }; + } + + { + name = "performance_now___performance_now_2.1.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + } + + { + name = "pg_connection_string___pg_connection_string_0.1.3.tgz"; + path = fetchurl { + name = "pg_connection_string___pg_connection_string_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz"; + sha1 = "da1847b20940e42ee1492beaf65d49d91b245df7"; + }; + } + + { + name = "pg_int8___pg_int8_1.0.1.tgz"; + path = fetchurl { + name = "pg_int8___pg_int8_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz"; + sha1 = "943bd463bf5b71b4170115f80f8efc9a0c0eb78c"; + }; + } + + { + name = "pg_pool___pg_pool_1.8.0.tgz"; + path = fetchurl { + name = "pg_pool___pg_pool_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/pg-pool/-/pg-pool-1.8.0.tgz"; + sha1 = "f7ec73824c37a03f076f51bfdf70e340147c4f37"; + }; + } + + { + name = "pg_types___pg_types_1.13.0.tgz"; + path = fetchurl { + name = "pg_types___pg_types_1.13.0.tgz"; + url = "https://registry.yarnpkg.com/pg-types/-/pg-types-1.13.0.tgz"; + sha1 = "75f490b8a8abf75f1386ef5ec4455ecf6b345c63"; + }; + } + + { + name = "pg___pg_6.4.2.tgz"; + path = fetchurl { + name = "pg___pg_6.4.2.tgz"; + url = "https://registry.yarnpkg.com/pg/-/pg-6.4.2.tgz"; + sha1 = "c364011060eac7a507a2ae063eb857ece910e27f"; + }; + } + + { + name = "pgpass___pgpass_1.0.2.tgz"; + path = fetchurl { + name = "pgpass___pgpass_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz"; + sha1 = "2a7bb41b6065b67907e91da1b07c1847c877b306"; + }; + } + + { + name = "pify___pify_2.3.0.tgz"; + path = fetchurl { + name = "pify___pify_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + } + + { + name = "pify___pify_3.0.0.tgz"; + path = fetchurl { + name = "pify___pify_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz"; + sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"; + }; + } + + { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + path = fetchurl { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + } + + { + name = "pinkie___pinkie_2.0.4.tgz"; + path = fetchurl { + name = "pinkie___pinkie_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + } + + { + name = "pkg_dir___pkg_dir_1.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz"; + sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"; + }; + } + + { + name = "pkg_dir___pkg_dir_2.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz"; + sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b"; + }; + } + + { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz"; + sha1 = "2749020f239ed990881b1f71210d51eb6523bea3"; + }; + } + + { + name = "pluralize___pluralize_7.0.0.tgz"; + path = fetchurl { + name = "pluralize___pluralize_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz"; + sha1 = "298b89df8b93b0221dbf421ad2b1b1ea23fc6777"; + }; + } + + { + name = "pn___pn_1.1.0.tgz"; + path = fetchurl { + name = "pn___pn_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz"; + sha1 = "e2f4cef0e219f463c179ab37463e4e1ecdccbafb"; + }; + } + + { + name = "portfinder___portfinder_1.0.20.tgz"; + path = fetchurl { + name = "portfinder___portfinder_1.0.20.tgz"; + url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz"; + sha1 = "bea68632e54b2e13ab7b0c4775e9b41bf270e44a"; + }; + } + + { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + path = fetchurl { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + } + + { + name = "postcss_calc___postcss_calc_7.0.1.tgz"; + path = fetchurl { + name = "postcss_calc___postcss_calc_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz"; + sha1 = "36d77bab023b0ecbb9789d84dcb23c4941145436"; + }; + } + + { + name = "postcss_colormin___postcss_colormin_4.0.2.tgz"; + path = fetchurl { + name = "postcss_colormin___postcss_colormin_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz"; + sha1 = "93cd1fa11280008696887db1a528048b18e7ed99"; + }; + } + + { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + path = fetchurl { + name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz"; + sha1 = "ca3813ed4da0f812f9d43703584e449ebe189a7f"; + }; + } + + { + name = "postcss_discard_comments___postcss_discard_comments_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_comments___postcss_discard_comments_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz"; + sha1 = "30697735b0c476852a7a11050eb84387a67ef55d"; + }; + } + + { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + path = fetchurl { + name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz"; + sha1 = "3fe133cd3c82282e550fc9b239176a9207b784eb"; + }; + } + + { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz"; + sha1 = "c8c951e9f73ed9428019458444a02ad90bb9f765"; + }; + } + + { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + path = fetchurl { + name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz"; + sha1 = "652aef8a96726f029f5e3e00146ee7a4e755ff57"; + }; + } + + { + name = "postcss_load_config___postcss_load_config_2.0.0.tgz"; + path = fetchurl { + name = "postcss_load_config___postcss_load_config_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz"; + sha1 = "f1312ddbf5912cd747177083c5ef7a19d62ee484"; + }; + } + + { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + path = fetchurl { + name = "postcss_loader___postcss_loader_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz"; + sha1 = "6b97943e47c72d845fa9e03f273773d4e8dd6c2d"; + }; + } + + { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.10.tgz"; + path = fetchurl { + name = "postcss_merge_longhand___postcss_merge_longhand_4.0.10.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz"; + sha1 = "c4d63ab57bdc054ab4067ab075d488c8c2978380"; + }; + } + + { + name = "postcss_merge_rules___postcss_merge_rules_4.0.2.tgz"; + path = fetchurl { + name = "postcss_merge_rules___postcss_merge_rules_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz"; + sha1 = "2be44401bf19856f27f32b8b12c0df5af1b88e74"; + }; + } + + { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + path = fetchurl { + name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz"; + sha1 = "cd4c344cce474343fac5d82206ab2cbcb8afd5a6"; + }; + } + + { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.1.tgz"; + path = fetchurl { + name = "postcss_minify_gradients___postcss_minify_gradients_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz"; + sha1 = "6da95c6e92a809f956bb76bf0c04494953e1a7dd"; + }; + } + + { + name = "postcss_minify_params___postcss_minify_params_4.0.1.tgz"; + path = fetchurl { + name = "postcss_minify_params___postcss_minify_params_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz"; + sha1 = "5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2"; + }; + } + + { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.1.tgz"; + path = fetchurl { + name = "postcss_minify_selectors___postcss_minify_selectors_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz"; + sha1 = "a891c197977cc37abf60b3ea06b84248b1c1e9cd"; + }; + } + + { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz"; + sha1 = "818719a1ae1da325f9832446b01136eeb493cd7e"; + }; + } + + { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_2.0.3.tgz"; + path = fetchurl { + name = "postcss_modules_local_by_default___postcss_modules_local_by_default_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.3.tgz"; + sha1 = "6a199d596ec3ef57b8f5ced96d786b8cb16a7dec"; + }; + } + + { + name = "postcss_modules_scope___postcss_modules_scope_2.0.1.tgz"; + path = fetchurl { + name = "postcss_modules_scope___postcss_modules_scope_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.0.1.tgz"; + sha1 = "2c0f2394cde4cd09147db054c68917e38f6d43a4"; + }; + } + + { + name = "postcss_modules_values___postcss_modules_values_2.0.0.tgz"; + path = fetchurl { + name = "postcss_modules_values___postcss_modules_values_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz"; + sha1 = "479b46dc0c5ca3dc7fa5270851836b9ec7152f64"; + }; + } + + { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz"; + sha1 = "8b35add3aee83a136b0471e0d59be58a50285dd4"; + }; + } + + { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz"; + sha1 = "d9a83d47c716e8a980f22f632c8b0458cfb48a4c"; + }; + } + + { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_positions___postcss_normalize_positions_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz"; + sha1 = "ee2d4b67818c961964c6be09d179894b94fd6ba1"; + }; + } + + { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz"; + sha1 = "5293f234b94d7669a9f805495d35b82a581c50e5"; + }; + } + + { + name = "postcss_normalize_string___postcss_normalize_string_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_string___postcss_normalize_string_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz"; + sha1 = "23c5030c2cc24175f66c914fa5199e2e3c10fef3"; + }; + } + + { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz"; + sha1 = "8be83e0b9cb3ff2d1abddee032a49108f05f95d7"; + }; + } + + { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz"; + sha1 = "841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"; + }; + } + + { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz"; + sha1 = "10e437f86bc7c7e58f7b9652ed878daaa95faae1"; + }; + } + + { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.1.tgz"; + path = fetchurl { + name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz"; + sha1 = "d14cb639b61238418ac8bc8d3b7bdd65fc86575e"; + }; + } + + { + name = "postcss_object_fit_images___postcss_object_fit_images_1.1.2.tgz"; + path = fetchurl { + name = "postcss_object_fit_images___postcss_object_fit_images_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-object-fit-images/-/postcss-object-fit-images-1.1.2.tgz"; + sha1 = "8b773043db14672ef6cd6f2cb1f0d8b26a9f573b"; + }; + } + + { + name = "postcss_ordered_values___postcss_ordered_values_4.1.1.tgz"; + path = fetchurl { + name = "postcss_ordered_values___postcss_ordered_values_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz"; + sha1 = "2e3b432ef3e489b18333aeca1f1295eb89be9fc2"; + }; + } + + { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.2.tgz"; + path = fetchurl { + name = "postcss_reduce_initial___postcss_reduce_initial_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz"; + sha1 = "bac8e325d67510ee01fa460676dc8ea9e3b40f15"; + }; + } + + { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.1.tgz"; + path = fetchurl { + name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz"; + sha1 = "8600d5553bdd3ad640f43bff81eb52f8760d4561"; + }; + } + + { + name = "postcss_selector_parser___postcss_selector_parser_3.1.1.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz"; + sha1 = "4f875f4afb0c96573d5cf4d74011aee250a7e865"; + }; + } + + { + name = "postcss_selector_parser___postcss_selector_parser_5.0.0.tgz"; + path = fetchurl { + name = "postcss_selector_parser___postcss_selector_parser_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz"; + sha1 = "249044356697b33b64f1a8f7c80922dddee7195c"; + }; + } + + { + name = "postcss_svgo___postcss_svgo_4.0.1.tgz"; + path = fetchurl { + name = "postcss_svgo___postcss_svgo_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz"; + sha1 = "5628cdb38f015de6b588ce6d0bf0724b492b581d"; + }; + } + + { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + path = fetchurl { + name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz"; + sha1 = "9446911f3289bfd64c6d680f073c03b1f9ee4bac"; + }; + } + + { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + path = fetchurl { + name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"; + sha1 = "9ff822547e2893213cf1c30efa51ac5fd1ba8281"; + }; + } + + { + name = "postcss___postcss_5.2.18.tgz"; + path = fetchurl { + name = "postcss___postcss_5.2.18.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz"; + sha1 = "badfa1497d46244f6390f58b319830d9107853c5"; + }; + } + + { + name = "postcss___postcss_7.0.7.tgz"; + path = fetchurl { + name = "postcss___postcss_7.0.7.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-7.0.7.tgz"; + sha1 = "2754d073f77acb4ef08f1235c36c5721a7201614"; + }; + } + + { + name = "postgres_array___postgres_array_1.0.3.tgz"; + path = fetchurl { + name = "postgres_array___postgres_array_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.3.tgz"; + sha1 = "c561fc3b266b21451fc6555384f4986d78ec80f5"; + }; + } + + { + name = "postgres_bytea___postgres_bytea_1.0.0.tgz"; + path = fetchurl { + name = "postgres_bytea___postgres_bytea_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz"; + sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35"; + }; + } + + { + name = "postgres_date___postgres_date_1.0.3.tgz"; + path = fetchurl { + name = "postgres_date___postgres_date_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz"; + sha1 = "e2d89702efdb258ff9d9cee0fe91bd06975257a8"; + }; + } + + { + name = "postgres_interval___postgres_interval_1.1.2.tgz"; + path = fetchurl { + name = "postgres_interval___postgres_interval_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.2.tgz"; + sha1 = "bf71ff902635f21cb241a013fc421d81d1db15a9"; + }; + } + + { + name = "precond___precond_0.2.3.tgz"; + path = fetchurl { + name = "precond___precond_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz"; + sha1 = "aa9591bcaa24923f1e0f4849d240f47efc1075ac"; + }; + } + + { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + } + + { + name = "preserve___preserve_0.2.0.tgz"; + path = fetchurl { + name = "preserve___preserve_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz"; + sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b"; + }; + } + + { + name = "pretty_format___pretty_format_23.6.0.tgz"; + path = fetchurl { + name = "pretty_format___pretty_format_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz"; + sha1 = "5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"; + }; + } + + { + name = "private___private_0.1.8.tgz"; + path = fetchurl { + name = "private___private_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz"; + sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff"; + }; + } + + { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz"; + sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa"; + }; + } + + { + name = "process___process_0.11.10.tgz"; + path = fetchurl { + name = "process___process_0.11.10.tgz"; + url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz"; + sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; + }; + } + + { + name = "progress___progress_2.0.3.tgz"; + path = fetchurl { + name = "progress___progress_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz"; + sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"; + }; + } + + { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + path = fetchurl { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz"; + sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; + }; + } + + { + name = "promise___promise_7.3.1.tgz"; + path = fetchurl { + name = "promise___promise_7.3.1.tgz"; + url = "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz"; + sha1 = "064b72602b18f90f29192b8b1bc418ffd1ebd3bf"; + }; + } + + { + name = "prompts___prompts_0.1.14.tgz"; + path = fetchurl { + name = "prompts___prompts_0.1.14.tgz"; + url = "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz"; + sha1 = "a8e15c612c5c9ec8f8111847df3337c9cbd443b2"; + }; + } + + { + name = "prop_types_extra___prop_types_extra_1.1.0.tgz"; + path = fetchurl { + name = "prop_types_extra___prop_types_extra_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz"; + sha1 = "32609910ea2dcf190366bacd3490d5a6412a605f"; + }; + } + + { + name = "prop_types___prop_types_15.6.2.tgz"; + path = fetchurl { + name = "prop_types___prop_types_15.6.2.tgz"; + url = "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz"; + sha1 = "05d5ca77b4453e985d60fc7ff8c859094a497102"; + }; + } + + { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz"; + sha1 = "ecfc733bf22ff8c6f407fa275327b9ab67e48b93"; + }; + } + + { + name = "prr___prr_1.0.1.tgz"; + path = fetchurl { + name = "prr___prr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz"; + sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; + }; + } + + { + name = "pseudomap___pseudomap_1.0.2.tgz"; + path = fetchurl { + name = "pseudomap___pseudomap_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + } + + { + name = "psl___psl_1.1.31.tgz"; + path = fetchurl { + name = "psl___psl_1.1.31.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz"; + sha1 = "e9aa86d0101b5b105cbe93ac6b784cd547276184"; + }; + } + + { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + path = fetchurl { + name = "public_encrypt___public_encrypt_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz"; + sha1 = "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"; + }; + } + + { + name = "pump___pump_2.0.1.tgz"; + path = fetchurl { + name = "pump___pump_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz"; + sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909"; + }; + } + + { + name = "pump___pump_3.0.0.tgz"; + path = fetchurl { + name = "pump___pump_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz"; + sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64"; + }; + } + + { + name = "pumpify___pumpify_1.5.1.tgz"; + path = fetchurl { + name = "pumpify___pumpify_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz"; + sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce"; + }; + } + + { + name = "punycode___punycode_1.3.2.tgz"; + path = fetchurl { + name = "punycode___punycode_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz"; + sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; + }; + } + + { + name = "punycode___punycode_1.4.1.tgz"; + path = fetchurl { + name = "punycode___punycode_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + } + + { + name = "punycode___punycode_2.1.1.tgz"; + path = fetchurl { + name = "punycode___punycode_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; + sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; + }; + } + + { + name = "q___q_1.5.1.tgz"; + path = fetchurl { + name = "q___q_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz"; + sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; + }; + } + + { + name = "qs___qs_6.5.2.tgz"; + path = fetchurl { + name = "qs___qs_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; + sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; + }; + } + + { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + path = fetchurl { + name = "querystring_es3___querystring_es3_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz"; + sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; + }; + } + + { + name = "querystring___querystring_0.2.0.tgz"; + path = fetchurl { + name = "querystring___querystring_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz"; + sha1 = "b209849203bb25df820da756e747005878521620"; + }; + } + + { + name = "querystringify___querystringify_2.1.0.tgz"; + path = fetchurl { + name = "querystringify___querystringify_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz"; + sha1 = "7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"; + }; + } + + { + name = "quote___quote_0.4.0.tgz"; + path = fetchurl { + name = "quote___quote_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/quote/-/quote-0.4.0.tgz"; + sha1 = "10839217f6c1362b89194044d29b233fd7f32f01"; + }; + } + + { + name = "raf___raf_3.4.1.tgz"; + path = fetchurl { + name = "raf___raf_3.4.1.tgz"; + url = "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz"; + sha1 = "0742e99a4a6552f445d73e3ee0328af0ff1ede39"; + }; + } + + { + name = "railroad_diagrams___railroad_diagrams_1.0.0.tgz"; + path = fetchurl { + name = "railroad_diagrams___railroad_diagrams_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz"; + sha1 = "eb7e6267548ddedfb899c1b90e57374559cddb7e"; + }; + } + + { + name = "rails_ujs___rails_ujs_5.2.2.tgz"; + path = fetchurl { + name = "rails_ujs___rails_ujs_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/rails-ujs/-/rails-ujs-5.2.2.tgz"; + sha1 = "ab01dd087a323975637b50e93e7afcc0f9068568"; + }; + } + + { + name = "randexp___randexp_0.4.6.tgz"; + path = fetchurl { + name = "randexp___randexp_0.4.6.tgz"; + url = "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz"; + sha1 = "e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"; + }; + } + + { + name = "randomatic___randomatic_3.1.1.tgz"; + path = fetchurl { + name = "randomatic___randomatic_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz"; + sha1 = "b776efc59375984e36c537b2f51a1f0aff0da1ed"; + }; + } + + { + name = "randombytes___randombytes_2.0.6.tgz"; + path = fetchurl { + name = "randombytes___randombytes_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz"; + sha1 = "d302c522948588848a8d300c932b44c24231da80"; + }; + } + + { + name = "randomfill___randomfill_1.0.4.tgz"; + path = fetchurl { + name = "randomfill___randomfill_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz"; + sha1 = "c92196fc86ab42be983f1bf31778224931d61458"; + }; + } + + { + name = "range_parser___range_parser_1.2.0.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz"; + sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; + }; + } + + { + name = "raw_body___raw_body_2.3.3.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz"; + sha1 = "1b324ece6b5706e153855bc1148c65bb7f6ea0c3"; + }; + } + + { + name = "rc___rc_1.2.8.tgz"; + path = fetchurl { + name = "rc___rc_1.2.8.tgz"; + url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz"; + sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"; + }; + } + + { + name = "react_dom___react_dom_16.7.0.tgz"; + path = fetchurl { + name = "react_dom___react_dom_16.7.0.tgz"; + url = "https://registry.yarnpkg.com/react-dom/-/react-dom-16.7.0.tgz"; + sha1 = "a17b2a7ca89ee7390bc1ed5eb81783c7461748b8"; + }; + } + + { + name = "react_event_listener___react_event_listener_0.6.5.tgz"; + path = fetchurl { + name = "react_event_listener___react_event_listener_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.5.tgz"; + sha1 = "d374dbe5da485c9f9d4702f0e76971afbe9b6b2e"; + }; + } + + { + name = "react_hotkeys___react_hotkeys_1.1.4.tgz"; + path = fetchurl { + name = "react_hotkeys___react_hotkeys_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-1.1.4.tgz"; + sha1 = "a0712aa2e0c03a759fd7885808598497a4dace72"; + }; + } + + { + name = "react_immutable_proptypes___react_immutable_proptypes_2.1.0.tgz"; + path = fetchurl { + name = "react_immutable_proptypes___react_immutable_proptypes_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz"; + sha1 = "023d6f39bb15c97c071e9e60d00d136eac5fa0b4"; + }; + } + + { + name = "react_immutable_pure_component___react_immutable_pure_component_1.2.3.tgz"; + path = fetchurl { + name = "react_immutable_pure_component___react_immutable_pure_component_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/react-immutable-pure-component/-/react-immutable-pure-component-1.2.3.tgz"; + sha1 = "fa33638df68cfe9f73ccbee1d5861c17f3053f86"; + }; + } + + { + name = "react_infinite_scroller___react_infinite_scroller_1.2.4.tgz"; + path = fetchurl { + name = "react_infinite_scroller___react_infinite_scroller_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz"; + sha1 = "f67eaec4940a4ce6417bebdd6e3433bfc38826e9"; + }; + } + + { + name = "react_input_autosize___react_input_autosize_2.2.1.tgz"; + path = fetchurl { + name = "react_input_autosize___react_input_autosize_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz"; + sha1 = "ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"; + }; + } + + { + name = "react_intl_translations_manager___react_intl_translations_manager_5.0.3.tgz"; + path = fetchurl { + name = "react_intl_translations_manager___react_intl_translations_manager_5.0.3.tgz"; + url = "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz"; + sha1 = "aee010ecf35975673e033ca5d7d3f4147894324d"; + }; + } + + { + name = "react_intl___react_intl_2.7.2.tgz"; + path = fetchurl { + name = "react_intl___react_intl_2.7.2.tgz"; + url = "https://registry.yarnpkg.com/react-intl/-/react-intl-2.7.2.tgz"; + sha1 = "efe97e3fc0e99b4e88a6e6150854d3d1852a4381"; + }; + } + + { + name = "react_is___react_is_16.7.0.tgz"; + path = fetchurl { + name = "react_is___react_is_16.7.0.tgz"; + url = "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz"; + sha1 = "c1bd21c64f1f1364c6f70695ec02d69392f41bfa"; + }; + } + + { + name = "react_lifecycles_compat___react_lifecycles_compat_3.0.4.tgz"; + path = fetchurl { + name = "react_lifecycles_compat___react_lifecycles_compat_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz"; + sha1 = "4f1a273afdfc8f3488a8c516bfda78f872352362"; + }; + } + + { + name = "react_masonry_infinite___react_masonry_infinite_1.2.2.tgz"; + path = fetchurl { + name = "react_masonry_infinite___react_masonry_infinite_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/react-masonry-infinite/-/react-masonry-infinite-1.2.2.tgz"; + sha1 = "20c1386f9ccdda9747527c8f42bc2c02dd2e7951"; + }; + } + + { + name = "react_motion___react_motion_0.5.2.tgz"; + path = fetchurl { + name = "react_motion___react_motion_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz"; + sha1 = "0dd3a69e411316567927917c6626551ba0607316"; + }; + } + + { + name = "react_notification___react_notification_6.8.4.tgz"; + path = fetchurl { + name = "react_notification___react_notification_6.8.4.tgz"; + url = "https://registry.yarnpkg.com/react-notification/-/react-notification-6.8.4.tgz"; + sha1 = "c189d23f47b0e1b240932f4cfab2f4082cd420bf"; + }; + } + + { + name = "react_overlays___react_overlays_0.8.3.tgz"; + path = fetchurl { + name = "react_overlays___react_overlays_0.8.3.tgz"; + url = "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz"; + sha1 = "fad65eea5b24301cca192a169f5dddb0b20d3ac5"; + }; + } + + { + name = "react_redux_loading_bar___react_redux_loading_bar_4.0.8.tgz"; + path = fetchurl { + name = "react_redux_loading_bar___react_redux_loading_bar_4.0.8.tgz"; + url = "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-4.0.8.tgz"; + sha1 = "e84d59d1517b79f53b0f39c8ddb40682af648c1b"; + }; + } + + { + name = "react_redux___react_redux_6.0.0.tgz"; + path = fetchurl { + name = "react_redux___react_redux_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.0.tgz"; + sha1 = "09e86eeed5febb98e9442458ad2970c8f1a173ef"; + }; + } + + { + name = "react_router_dom___react_router_dom_4.3.1.tgz"; + path = fetchurl { + name = "react_router_dom___react_router_dom_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz"; + sha1 = "4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6"; + }; + } + + { + name = "react_router_scroll_4___react_router_scroll_4_1.0.0_beta.2.tgz"; + path = fetchurl { + name = "react_router_scroll_4___react_router_scroll_4_1.0.0_beta.2.tgz"; + url = "https://registry.yarnpkg.com/react-router-scroll-4/-/react-router-scroll-4-1.0.0-beta.2.tgz"; + sha1 = "d887063ec0f66124aaf450158dd158ff7d3dc279"; + }; + } + + { + name = "react_router___react_router_4.3.1.tgz"; + path = fetchurl { + name = "react_router___react_router_4.3.1.tgz"; + url = "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz"; + sha1 = "aada4aef14c809cb2e686b05cee4742234506c4e"; + }; + } + + { + name = "react_select___react_select_2.2.0.tgz"; + path = fetchurl { + name = "react_select___react_select_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/react-select/-/react-select-2.2.0.tgz"; + sha1 = "67c8b5c2dcb8df0384f2a103efe952570f5d6b93"; + }; + } + + { + name = "react_sparklines___react_sparklines_1.7.0.tgz"; + path = fetchurl { + name = "react_sparklines___react_sparklines_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/react-sparklines/-/react-sparklines-1.7.0.tgz"; + sha1 = "9b1d97e8c8610095eeb2ad658d2e1fcf91f91a60"; + }; + } + + { + name = "react_swipeable_views_core___react_swipeable_views_core_0.13.0.tgz"; + path = fetchurl { + name = "react_swipeable_views_core___react_swipeable_views_core_0.13.0.tgz"; + url = "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.13.0.tgz"; + sha1 = "6bf8a8132a756355444537672a14e84b1e3b53c2"; + }; + } + + { + name = "react_swipeable_views_utils___react_swipeable_views_utils_0.13.0.tgz"; + path = fetchurl { + name = "react_swipeable_views_utils___react_swipeable_views_utils_0.13.0.tgz"; + url = "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.13.0.tgz"; + sha1 = "0ea17aa67f88a69d534c79d591f8d82ef98346a4"; + }; + } + + { + name = "react_swipeable_views___react_swipeable_views_0.13.0.tgz"; + path = fetchurl { + name = "react_swipeable_views___react_swipeable_views_0.13.0.tgz"; + url = "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.13.0.tgz"; + sha1 = "a200cef1005d55af6a27b97048afe9a4056e0ab8"; + }; + } + + { + name = "react_test_renderer___react_test_renderer_16.7.0.tgz"; + path = fetchurl { + name = "react_test_renderer___react_test_renderer_16.7.0.tgz"; + url = "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.7.0.tgz"; + sha1 = "1ca96c2b450ab47c36ba92cd8c03fcefc52ea01c"; + }; + } + + { + name = "react_textarea_autosize___react_textarea_autosize_7.1.0.tgz"; + path = fetchurl { + name = "react_textarea_autosize___react_textarea_autosize_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.0.tgz"; + sha1 = "3132cb77e65d94417558d37c0bfe415a5afd3445"; + }; + } + + { + name = "react_toggle___react_toggle_4.0.2.tgz"; + path = fetchurl { + name = "react_toggle___react_toggle_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.0.2.tgz"; + sha1 = "77f487860efb87fafd197672a2db8c885be1440f"; + }; + } + + { + name = "react_transition_group___react_transition_group_2.5.2.tgz"; + path = fetchurl { + name = "react_transition_group___react_transition_group_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.2.tgz"; + sha1 = "9457166a9ba6ce697a3e1b076b3c049b9fb2c408"; + }; + } + + { + name = "react___react_16.7.0.tgz"; + path = fetchurl { + name = "react___react_16.7.0.tgz"; + url = "https://registry.yarnpkg.com/react/-/react-16.7.0.tgz"; + sha1 = "b674ec396b0a5715873b350446f7ea0802ab6381"; + }; + } + + { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + path = fetchurl { + name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz"; + sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02"; + }; + } + + { + name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; + path = fetchurl { + name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz"; + sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be"; + }; + } + + { + name = "read_pkg___read_pkg_1.1.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz"; + sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"; + }; + } + + { + name = "read_pkg___read_pkg_2.0.0.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz"; + sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"; + }; + } + + { + name = "readable_stream___readable_stream_2.3.6.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.6.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz"; + sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"; + }; + } + + { + name = "readable_stream___readable_stream_3.1.1.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz"; + sha1 = "ed6bbc6c5ba58b090039ff18ce670515795aeb06"; + }; + } + + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + + { + name = "realpath_native___realpath_native_1.0.2.tgz"; + path = fetchurl { + name = "realpath_native___realpath_native_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz"; + sha1 = "cd51ce089b513b45cf9b1516c82989b51ccc6560"; + }; + } + + { + name = "redis_commands___redis_commands_1.4.0.tgz"; + path = fetchurl { + name = "redis_commands___redis_commands_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz"; + sha1 = "52f9cf99153efcce56a8f86af986bd04e988602f"; + }; + } + + { + name = "redis_parser___redis_parser_2.6.0.tgz"; + path = fetchurl { + name = "redis_parser___redis_parser_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz"; + sha1 = "52ed09dacac108f1a631c07e9b69941e7a19504b"; + }; + } + + { + name = "redis___redis_2.8.0.tgz"; + path = fetchurl { + name = "redis___redis_2.8.0.tgz"; + url = "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz"; + sha1 = "202288e3f58c49f6079d97af7a10e1303ae14b02"; + }; + } + + { + name = "redux_immutable___redux_immutable_4.0.0.tgz"; + path = fetchurl { + name = "redux_immutable___redux_immutable_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/redux-immutable/-/redux-immutable-4.0.0.tgz"; + sha1 = "3a1a32df66366462b63691f0e1dc35e472bbc9f3"; + }; + } + + { + name = "redux_thunk___redux_thunk_2.3.0.tgz"; + path = fetchurl { + name = "redux_thunk___redux_thunk_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz"; + sha1 = "51c2c19a185ed5187aaa9a2d08b666d0d6467622"; + }; + } + + { + name = "redux___redux_4.0.1.tgz"; + path = fetchurl { + name = "redux___redux_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz"; + sha1 = "436cae6cc40fbe4727689d7c8fae44808f1bfef5"; + }; + } + + { + name = "regenerate_unicode_properties___regenerate_unicode_properties_7.0.0.tgz"; + path = fetchurl { + name = "regenerate_unicode_properties___regenerate_unicode_properties_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz"; + sha1 = "107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"; + }; + } + + { + name = "regenerate___regenerate_1.4.0.tgz"; + path = fetchurl { + name = "regenerate___regenerate_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz"; + sha1 = "4a856ec4b56e4077c557589cae85e7a4c8869a11"; + }; + } + + { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; + sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"; + }; + } + + { + name = "regenerator_runtime___regenerator_runtime_0.12.1.tgz"; + path = fetchurl { + name = "regenerator_runtime___regenerator_runtime_0.12.1.tgz"; + url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz"; + sha1 = "fa1a71544764c036f8c49b13a08b2594c9f8a0de"; + }; + } + + { + name = "regenerator_transform___regenerator_transform_0.13.3.tgz"; + path = fetchurl { + name = "regenerator_transform___regenerator_transform_0.13.3.tgz"; + url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz"; + sha1 = "264bd9ff38a8ce24b06e0636496b2c856b57bcbb"; + }; + } + + { + name = "regex_cache___regex_cache_0.4.4.tgz"; + path = fetchurl { + name = "regex_cache___regex_cache_0.4.4.tgz"; + url = "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz"; + sha1 = "75bdc58a2a1496cec48a12835bc54c8d562336dd"; + }; + } + + { + name = "regex_not___regex_not_1.0.2.tgz"; + path = fetchurl { + name = "regex_not___regex_not_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; + sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; + }; + } + + { + name = "regexpp___regexpp_2.0.1.tgz"; + path = fetchurl { + name = "regexpp___regexpp_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz"; + sha1 = "8d19d31cf632482b589049f8281f93dbcba4d07f"; + }; + } + + { + name = "regexpu_core___regexpu_core_1.0.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz"; + sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b"; + }; + } + + { + name = "regexpu_core___regexpu_core_4.4.0.tgz"; + path = fetchurl { + name = "regexpu_core___regexpu_core_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz"; + sha1 = "8d43e0d1266883969720345e70c275ee0aec0d32"; + }; + } + + { + name = "regjsgen___regjsgen_0.2.0.tgz"; + path = fetchurl { + name = "regjsgen___regjsgen_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz"; + sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7"; + }; + } + + { + name = "regjsgen___regjsgen_0.5.0.tgz"; + path = fetchurl { + name = "regjsgen___regjsgen_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz"; + sha1 = "a7634dc08f89209c2049adda3525711fb97265dd"; + }; + } + + { + name = "regjsparser___regjsparser_0.1.5.tgz"; + path = fetchurl { + name = "regjsparser___regjsparser_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz"; + sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"; + }; + } + + { + name = "regjsparser___regjsparser_0.6.0.tgz"; + path = fetchurl { + name = "regjsparser___regjsparser_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz"; + sha1 = "f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"; + }; + } + + { + name = "rellax___rellax_1.7.1.tgz"; + path = fetchurl { + name = "rellax___rellax_1.7.1.tgz"; + url = "https://registry.yarnpkg.com/rellax/-/rellax-1.7.1.tgz"; + sha1 = "2f82aaa1c1d8116eef08fc533c59655a097c8be2"; + }; + } + + { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + path = fetchurl { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + } + + { + name = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + + { + name = "repeat_string___repeat_string_1.6.1.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + } + + { + name = "repeating___repeating_2.0.1.tgz"; + path = fetchurl { + name = "repeating___repeating_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz"; + sha1 = "5214c53a926d3552707527fbab415dbc08d06dda"; + }; + } + + { + name = "request_promise_core___request_promise_core_1.1.1.tgz"; + path = fetchurl { + name = "request_promise_core___request_promise_core_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz"; + sha1 = "3eee00b2c5aa83239cfb04c5700da36f81cd08b6"; + }; + } + + { + name = "request_promise_native___request_promise_native_1.0.5.tgz"; + path = fetchurl { + name = "request_promise_native___request_promise_native_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz"; + sha1 = "5281770f68e0c9719e5163fd3fab482215f4fda5"; + }; + } + + { + name = "request___request_2.88.0.tgz"; + path = fetchurl { + name = "request___request_2.88.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz"; + sha1 = "9c2fca4f7d35b592efe57c7f0a55e81052124fef"; + }; + } + + { + name = "requestidlecallback___requestidlecallback_0.3.0.tgz"; + path = fetchurl { + name = "requestidlecallback___requestidlecallback_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/requestidlecallback/-/requestidlecallback-0.3.0.tgz"; + sha1 = "6fb74e0733f90df3faa4838f9f6a2a5f9b742ac5"; + }; + } + + { + name = "require_directory___require_directory_2.1.1.tgz"; + path = fetchurl { + name = "require_directory___require_directory_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + } + + { + name = "require_from_string___require_from_string_2.0.2.tgz"; + path = fetchurl { + name = "require_from_string___require_from_string_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz"; + sha1 = "89a7fdd938261267318eafe14f9c32e598c36909"; + }; + } + + { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz"; + sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; + }; + } + + { + name = "require_package_name___require_package_name_2.0.1.tgz"; + path = fetchurl { + name = "require_package_name___require_package_name_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz"; + sha1 = "c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"; + }; + } + + { + name = "require_uncached___require_uncached_1.0.3.tgz"; + path = fetchurl { + name = "require_uncached___require_uncached_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz"; + sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3"; + }; + } + + { + name = "requires_port___requires_port_1.0.0.tgz"; + path = fetchurl { + name = "requires_port___requires_port_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz"; + sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; + }; + } + + { + name = "reselect___reselect_4.0.0.tgz"; + path = fetchurl { + name = "reselect___reselect_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz"; + sha1 = "f2529830e5d3d0e021408b246a206ef4ea4437f7"; + }; + } + + { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + path = fetchurl { + name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz"; + sha1 = "00a9f7387556e27038eae232caa372a6a59b665a"; + }; + } + + { + name = "resolve_from___resolve_from_1.0.1.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz"; + sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"; + }; + } + + { + name = "resolve_from___resolve_from_3.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz"; + sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; + }; + } + + { + name = "resolve_pathname___resolve_pathname_2.2.0.tgz"; + path = fetchurl { + name = "resolve_pathname___resolve_pathname_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz"; + sha1 = "7e9ae21ed815fd63ab189adeee64dc831eefa879"; + }; + } + + { + name = "resolve_url___resolve_url_0.2.1.tgz"; + path = fetchurl { + name = "resolve_url___resolve_url_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + } + + { + name = "resolve___resolve_1.1.7.tgz"; + path = fetchurl { + name = "resolve___resolve_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz"; + sha1 = "203114d82ad2c5ed9e8e0411b3932875e889e97b"; + }; + } + + { + name = "resolve___resolve_1.9.0.tgz"; + path = fetchurl { + name = "resolve___resolve_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz"; + sha1 = "a14c6fdfa8f92a7df1d996cb7105fa744658ea06"; + }; + } + + { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz"; + sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; + }; + } + + { + name = "ret___ret_0.1.15.tgz"; + path = fetchurl { + name = "ret___ret_0.1.15.tgz"; + url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; + sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; + }; + } + + { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + path = fetchurl { + name = "rgb_regex___rgb_regex_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz"; + sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1"; + }; + } + + { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + path = fetchurl { + name = "rgba_regex___rgba_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz"; + sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3"; + }; + } + + { + name = "rimraf___rimraf_2.6.2.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.2.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz"; + sha1 = "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"; + }; + } + + { + name = "ripemd160___ripemd160_2.0.2.tgz"; + path = fetchurl { + name = "ripemd160___ripemd160_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz"; + sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c"; + }; + } + + { + name = "rst_selector_parser___rst_selector_parser_2.2.3.tgz"; + path = fetchurl { + name = "rst_selector_parser___rst_selector_parser_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz"; + sha1 = "81b230ea2fcc6066c89e3472de794285d9b03d91"; + }; + } + + { + name = "rsvp___rsvp_3.6.2.tgz"; + path = fetchurl { + name = "rsvp___rsvp_3.6.2.tgz"; + url = "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz"; + sha1 = "2e96491599a96cde1b515d5674a8f7a91452926a"; + }; + } + + { + name = "run_async___run_async_2.3.0.tgz"; + path = fetchurl { + name = "run_async___run_async_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz"; + sha1 = "0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"; + }; + } + + { + name = "run_queue___run_queue_1.0.3.tgz"; + path = fetchurl { + name = "run_queue___run_queue_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz"; + sha1 = "e848396f057d223f24386924618e25694161ec47"; + }; + } + + { + name = "rxjs___rxjs_6.3.3.tgz"; + path = fetchurl { + name = "rxjs___rxjs_6.3.3.tgz"; + url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz"; + sha1 = "3c6a7fa420e844a81390fb1158a9ec614f4bad55"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; + }; + } + + { + name = "safe_regex___safe_regex_1.1.0.tgz"; + path = fetchurl { + name = "safe_regex___safe_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + } + + { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + path = fetchurl { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; + }; + } + + { + name = "sane___sane_2.5.2.tgz"; + path = fetchurl { + name = "sane___sane_2.5.2.tgz"; + url = "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz"; + sha1 = "b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"; + }; + } + + { + name = "sass_loader___sass_loader_7.1.0.tgz"; + path = fetchurl { + name = "sass_loader___sass_loader_7.1.0.tgz"; + url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz"; + sha1 = "16fd5138cb8b424bf8a759528a1972d72aad069d"; + }; + } + + { + name = "sass___sass_1.15.2.tgz"; + path = fetchurl { + name = "sass___sass_1.15.2.tgz"; + url = "https://registry.yarnpkg.com/sass/-/sass-1.15.2.tgz"; + sha1 = "539f464a61e29a9e4f560ec9dc2ccc5236db8474"; + }; + } + + { + name = "sax___sax_1.2.4.tgz"; + path = fetchurl { + name = "sax___sax_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; + sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; + }; + } + + { + name = "scheduler___scheduler_0.12.0.tgz"; + path = fetchurl { + name = "scheduler___scheduler_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/scheduler/-/scheduler-0.12.0.tgz"; + sha1 = "8ab17699939c0aedc5a196a657743c496538647b"; + }; + } + + { + name = "schema_utils___schema_utils_0.4.7.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_0.4.7.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz"; + sha1 = "ba74f597d2be2ea880131746ee17d0a093c68187"; + }; + } + + { + name = "schema_utils___schema_utils_1.0.0.tgz"; + path = fetchurl { + name = "schema_utils___schema_utils_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz"; + sha1 = "0b79a93204d7b600d4b2850d1f66c2a34951c770"; + }; + } + + { + name = "scroll_behavior___scroll_behavior_0.9.9.tgz"; + path = fetchurl { + name = "scroll_behavior___scroll_behavior_0.9.9.tgz"; + url = "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.9.tgz"; + sha1 = "ebfe0658455b82ad885b66195215416674dacce2"; + }; + } + + { + name = "select_hose___select_hose_2.0.0.tgz"; + path = fetchurl { + name = "select_hose___select_hose_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz"; + sha1 = "625d8658f865af43ec962bfc376a37359a4994ca"; + }; + } + + { + name = "selfsigned___selfsigned_1.10.4.tgz"; + path = fetchurl { + name = "selfsigned___selfsigned_1.10.4.tgz"; + url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz"; + sha1 = "cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"; + }; + } + + { + name = "semver___semver_5.6.0.tgz"; + path = fetchurl { + name = "semver___semver_5.6.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz"; + sha1 = "7e74256fbaa49c75aa7c7a205cc22799cac80004"; + }; + } + + { + name = "semver___semver_4.3.2.tgz"; + path = fetchurl { + name = "semver___semver_4.3.2.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz"; + sha1 = "c7a07158a80bedd052355b770d82d6640f803be7"; + }; + } + + { + name = "send___send_0.16.2.tgz"; + path = fetchurl { + name = "send___send_0.16.2.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz"; + sha1 = "6ecca1e0f8c156d141597559848df64730a6bbc1"; + }; + } + + { + name = "serialize_javascript___serialize_javascript_1.6.1.tgz"; + path = fetchurl { + name = "serialize_javascript___serialize_javascript_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz"; + sha1 = "4d1f697ec49429a847ca6f442a2a755126c4d879"; + }; + } + + { + name = "serve_index___serve_index_1.9.1.tgz"; + path = fetchurl { + name = "serve_index___serve_index_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz"; + sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; + }; + } + + { + name = "serve_static___serve_static_1.13.2.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.13.2.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz"; + sha1 = "095e8472fd5b46237db50ce486a43f4b86c6cec1"; + }; + } + + { + name = "set_blocking___set_blocking_2.0.0.tgz"; + path = fetchurl { + name = "set_blocking___set_blocking_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + } + + { + name = "set_value___set_value_0.4.3.tgz"; + path = fetchurl { + name = "set_value___set_value_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz"; + sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"; + }; + } + + { + name = "set_value___set_value_2.0.0.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz"; + sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"; + }; + } + + { + name = "setimmediate___setimmediate_1.0.5.tgz"; + path = fetchurl { + name = "setimmediate___setimmediate_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz"; + sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; + }; + } + + { + name = "sha.js___sha.js_2.4.11.tgz"; + path = fetchurl { + name = "sha.js___sha.js_2.4.11.tgz"; + url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz"; + sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7"; + }; + } + + { + name = "shallow_clone___shallow_clone_1.0.0.tgz"; + path = fetchurl { + name = "shallow_clone___shallow_clone_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz"; + sha1 = "4480cd06e882ef68b2ad88a3ea54832e2c48b571"; + }; + } + + { + name = "shebang_command___shebang_command_1.2.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + } + + { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + } + + { + name = "shellwords___shellwords_0.1.1.tgz"; + path = fetchurl { + name = "shellwords___shellwords_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz"; + sha1 = "d6b9181c1a48d397324c84871efbcfc73fc0654b"; + }; + } + + { + name = "signal_exit___signal_exit_3.0.2.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz"; + sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; + }; + } + + { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + path = fetchurl { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; + sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; + }; + } + + { + name = "sisteransi___sisteransi_0.1.1.tgz"; + path = fetchurl { + name = "sisteransi___sisteransi_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz"; + sha1 = "5431447d5f7d1675aac667ccd0b865a4994cb3ce"; + }; + } + + { + name = "slash___slash_1.0.0.tgz"; + path = fetchurl { + name = "slash___slash_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz"; + sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"; + }; + } + + { + name = "slice_ansi___slice_ansi_2.0.0.tgz"; + path = fetchurl { + name = "slice_ansi___slice_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz"; + sha1 = "5373bdb8559b45676e8541c66916cdd6251612e7"; + }; + } + + { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + path = fetchurl { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; + }; + } + + { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + path = fetchurl { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; + }; + } + + { + name = "snapdragon___snapdragon_0.8.2.tgz"; + path = fetchurl { + name = "snapdragon___snapdragon_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; + sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; + }; + } + + { + name = "sockjs_client___sockjs_client_1.3.0.tgz"; + path = fetchurl { + name = "sockjs_client___sockjs_client_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz"; + sha1 = "12fc9d6cb663da5739d3dc5fb6e8687da95cb177"; + }; + } + + { + name = "sockjs___sockjs_0.3.19.tgz"; + path = fetchurl { + name = "sockjs___sockjs_0.3.19.tgz"; + url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz"; + sha1 = "d976bbe800af7bd20ae08598d582393508993c0d"; + }; + } + + { + name = "source_list_map___source_list_map_2.0.1.tgz"; + path = fetchurl { + name = "source_list_map___source_list_map_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz"; + sha1 = "3993bd873bfc48479cca9ea3a547835c7c154b34"; + }; + } + + { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz"; + sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259"; + }; + } + + { + name = "source_map_support___source_map_support_0.4.18.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.4.18.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz"; + sha1 = "0286a6de8be42641338594e97ccea75f0a2c585f"; + }; + } + + { + name = "source_map_support___source_map_support_0.5.9.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.5.9.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz"; + sha1 = "41bc953b2534267ea2d605bccfa7bfa3111ced5f"; + }; + } + + { + name = "source_map_url___source_map_url_0.4.0.tgz"; + path = fetchurl { + name = "source_map_url___source_map_url_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + } + + { + name = "source_map___source_map_0.5.7.tgz"; + path = fetchurl { + name = "source_map___source_map_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + } + + { + name = "source_map___source_map_0.6.1.tgz"; + path = fetchurl { + name = "source_map___source_map_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; + sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; + }; + } + + { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz"; + sha1 = "fb83e504445268f154b074e218c87c003cd31df4"; + }; + } + + { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz"; + sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977"; + }; + } + + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz"; + sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0"; + }; + } + + { + name = "spdx_license_ids___spdx_license_ids_3.0.3.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz"; + sha1 = "81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"; + }; + } + + { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + path = fetchurl { + name = "spdy_transport___spdy_transport_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz"; + sha1 = "00d4863a6400ad75df93361a1608605e5dcdcf31"; + }; + } + + { + name = "spdy___spdy_4.0.0.tgz"; + path = fetchurl { + name = "spdy___spdy_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz"; + sha1 = "81f222b5a743a329aa12cea6a390e60e9b613c52"; + }; + } + + { + name = "split_string___split_string_3.1.0.tgz"; + path = fetchurl { + name = "split_string___split_string_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; + sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; + }; + } + + { + name = "split___split_1.0.1.tgz"; + path = fetchurl { + name = "split___split_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz"; + sha1 = "605bd9be303aa59fb35f9229fbea0ddec9ea07d9"; + }; + } + + { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + path = fetchurl { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + } + + { + name = "sshpk___sshpk_1.16.0.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.16.0.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz"; + sha1 = "1d4963a2fbffe58050aa9084ca20be81741c07de"; + }; + } + + { + name = "ssri___ssri_6.0.1.tgz"; + path = fetchurl { + name = "ssri___ssri_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz"; + sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8"; + }; + } + + { + name = "stable___stable_0.1.8.tgz"; + path = fetchurl { + name = "stable___stable_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz"; + sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf"; + }; + } + + { + name = "stack_utils___stack_utils_1.0.2.tgz"; + path = fetchurl { + name = "stack_utils___stack_utils_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz"; + sha1 = "33eba3897788558bebfc2db059dc158ec36cebb8"; + }; + } + + { + name = "static_extend___static_extend_0.1.2.tgz"; + path = fetchurl { + name = "static_extend___static_extend_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + } + + { + name = "statuses___statuses_1.5.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + } + + { + name = "statuses___statuses_1.4.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz"; + sha1 = "bb73d446da2796106efcc1b601a253d6c46bd087"; + }; + } + + { + name = "stealthy_require___stealthy_require_1.1.1.tgz"; + path = fetchurl { + name = "stealthy_require___stealthy_require_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz"; + sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b"; + }; + } + + { + name = "stream_browserify___stream_browserify_2.0.1.tgz"; + path = fetchurl { + name = "stream_browserify___stream_browserify_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz"; + sha1 = "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"; + }; + } + + { + name = "stream_each___stream_each_1.2.3.tgz"; + path = fetchurl { + name = "stream_each___stream_each_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz"; + sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae"; + }; + } + + { + name = "stream_http___stream_http_2.8.3.tgz"; + path = fetchurl { + name = "stream_http___stream_http_2.8.3.tgz"; + url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz"; + sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc"; + }; + } + + { + name = "stream_shift___stream_shift_1.0.0.tgz"; + path = fetchurl { + name = "stream_shift___stream_shift_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz"; + sha1 = "d5c752825e5367e786f78e18e445ea223a155952"; + }; + } + + { + name = "string_length___string_length_2.0.0.tgz"; + path = fetchurl { + name = "string_length___string_length_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz"; + sha1 = "d40dbb686a3ace960c1cffca562bf2c45f8363ed"; + }; + } + + { + name = "string_width___string_width_1.0.2.tgz"; + path = fetchurl { + name = "string_width___string_width_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + } + + { + name = "string_width___string_width_2.1.1.tgz"; + path = fetchurl { + name = "string_width___string_width_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; + sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; + }; + } + + { + name = "string.prototype.trim___string.prototype.trim_1.1.2.tgz"; + path = fetchurl { + name = "string.prototype.trim___string.prototype.trim_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz"; + sha1 = "d04de2c89e137f4d7d206f086b5ed2fae6be8cea"; + }; + } + + { + name = "string_decoder___string_decoder_1.2.0.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz"; + sha1 = "fe86e738b19544afe70469243b2a1ee9240eae8d"; + }; + } + + { + name = "string_decoder___string_decoder_1.1.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; + sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; + }; + } + + { + name = "stringz___stringz_1.0.0.tgz"; + path = fetchurl { + name = "stringz___stringz_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/stringz/-/stringz-1.0.0.tgz"; + sha1 = "d2acba994e4ce3c725ee15c86fff4281280d2025"; + }; + } + + { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + } + + { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + } + + { + name = "strip_ansi___strip_ansi_5.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz"; + sha1 = "f78f68b5d0866c20b2c9b8c61b5298508dc8756f"; + }; + } + + { + name = "strip_bom___strip_bom_3.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz"; + sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"; + }; + } + + { + name = "strip_bom___strip_bom_2.0.0.tgz"; + path = fetchurl { + name = "strip_bom___strip_bom_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz"; + sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e"; + }; + } + + { + name = "strip_eof___strip_eof_1.0.0.tgz"; + path = fetchurl { + name = "strip_eof___strip_eof_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz"; + sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf"; + }; + } + + { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + } + + { + name = "style_loader___style_loader_0.23.1.tgz"; + path = fetchurl { + name = "style_loader___style_loader_0.23.1.tgz"; + url = "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz"; + sha1 = "cb9154606f3e771ab6c4ab637026a1049174d925"; + }; + } + + { + name = "stylehacks___stylehacks_4.0.1.tgz"; + path = fetchurl { + name = "stylehacks___stylehacks_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz"; + sha1 = "3186595d047ab0df813d213e51c8b94e0b9010f2"; + }; + } + + { + name = "substring_trie___substring_trie_1.0.2.tgz"; + path = fetchurl { + name = "substring_trie___substring_trie_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/substring-trie/-/substring-trie-1.0.2.tgz"; + sha1 = "7b42592391628b4f2cb17365c6cce4257c7b7af5"; + }; + } + + { + name = "supports_color___supports_color_2.0.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + } + + { + name = "supports_color___supports_color_3.2.3.tgz"; + path = fetchurl { + name = "supports_color___supports_color_3.2.3.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz"; + sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; + }; + } + + { + name = "supports_color___supports_color_5.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz"; + sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f"; + }; + } + + { + name = "svgo___svgo_1.1.1.tgz"; + path = fetchurl { + name = "svgo___svgo_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz"; + sha1 = "12384b03335bcecd85cfa5f4e3375fed671cb985"; + }; + } + + { + name = "symbol_observable___symbol_observable_1.2.0.tgz"; + path = fetchurl { + name = "symbol_observable___symbol_observable_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz"; + sha1 = "c22688aed4eab3cdc2dfeacbb561660560a00804"; + }; + } + + { + name = "symbol_tree___symbol_tree_3.2.2.tgz"; + path = fetchurl { + name = "symbol_tree___symbol_tree_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz"; + sha1 = "ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"; + }; + } + + { + name = "table___table_5.1.1.tgz"; + path = fetchurl { + name = "table___table_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz"; + sha1 = "92030192f1b7b51b6eeab23ed416862e47b70837"; + }; + } + + { + name = "tapable___tapable_1.1.1.tgz"; + path = fetchurl { + name = "tapable___tapable_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz"; + sha1 = "4d297923c5a72a42360de2ab52dadfaaec00018e"; + }; + } + + { + name = "tar___tar_4.4.8.tgz"; + path = fetchurl { + name = "tar___tar_4.4.8.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz"; + sha1 = "b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"; + }; + } + + { + name = "tcomb___tcomb_2.7.0.tgz"; + path = fetchurl { + name = "tcomb___tcomb_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz"; + sha1 = "10d62958041669a5d53567b9a4ee8cde22b1c2b0"; + }; + } + + { + name = "terser_webpack_plugin___terser_webpack_plugin_1.2.1.tgz"; + path = fetchurl { + name = "terser_webpack_plugin___terser_webpack_plugin_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz"; + sha1 = "7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26"; + }; + } + + { + name = "terser___terser_3.14.0.tgz"; + path = fetchurl { + name = "terser___terser_3.14.0.tgz"; + url = "https://registry.yarnpkg.com/terser/-/terser-3.14.0.tgz"; + sha1 = "49a8ddf34a1308a901d787dab03a42c51b557447"; + }; + } + + { + name = "test_exclude___test_exclude_4.2.3.tgz"; + path = fetchurl { + name = "test_exclude___test_exclude_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz"; + sha1 = "a9a5e64474e4398339245a0a769ad7c2f4a97c20"; + }; + } + + { + name = "text_table___text_table_0.2.0.tgz"; + path = fetchurl { + name = "text_table___text_table_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + } + + { + name = "throat___throat_4.1.0.tgz"; + path = fetchurl { + name = "throat___throat_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz"; + sha1 = "89037cbc92c56ab18926e6ba4cbb200e15672a6a"; + }; + } + + { + name = "throng___throng_4.0.0.tgz"; + path = fetchurl { + name = "throng___throng_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/throng/-/throng-4.0.0.tgz"; + sha1 = "983c6ba1993b58eae859998aa687ffe88df84c17"; + }; + } + + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + + { + name = "thunky___thunky_1.0.3.tgz"; + path = fetchurl { + name = "thunky___thunky_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz"; + sha1 = "f5df732453407b09191dae73e2a8cc73f381a826"; + }; + } + + { + name = "timers_browserify___timers_browserify_2.0.10.tgz"; + path = fetchurl { + name = "timers_browserify___timers_browserify_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz"; + sha1 = "1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"; + }; + } + + { + name = "timsort___timsort_0.3.0.tgz"; + path = fetchurl { + name = "timsort___timsort_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz"; + sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4"; + }; + } + + { + name = "tiny_queue___tiny_queue_0.2.1.tgz"; + path = fetchurl { + name = "tiny_queue___tiny_queue_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz"; + sha1 = "25a67f2c6e253b2ca941977b5ef7442ef97a6046"; + }; + } + + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + + { + name = "tmpl___tmpl_1.0.4.tgz"; + path = fetchurl { + name = "tmpl___tmpl_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz"; + sha1 = "23640dd7b42d00433911140820e5cf440e521dd1"; + }; + } + + { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + path = fetchurl { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; + sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; + }; + } + + { + name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; + path = fetchurl { + name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz"; + sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47"; + }; + } + + { + name = "to_fast_properties___to_fast_properties_2.0.0.tgz"; + path = fetchurl { + name = "to_fast_properties___to_fast_properties_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e"; + }; + } + + { + name = "to_object_path___to_object_path_0.3.0.tgz"; + path = fetchurl { + name = "to_object_path___to_object_path_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + } + + { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + } + + { + name = "to_regex___to_regex_3.0.2.tgz"; + path = fetchurl { + name = "to_regex___to_regex_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; + sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"; + sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz"; + sha1 = "53f36da3f47783b0925afa06ff9f3b165280f781"; + }; + } + + { + name = "tr46___tr46_1.0.1.tgz"; + path = fetchurl { + name = "tr46___tr46_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz"; + sha1 = "a8b13fd6bfd2489519674ccde55ba3693b706d09"; + }; + } + + { + name = "trim_right___trim_right_1.0.1.tgz"; + path = fetchurl { + name = "trim_right___trim_right_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz"; + sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003"; + }; + } + + { + name = "tryer___tryer_1.0.1.tgz"; + path = fetchurl { + name = "tryer___tryer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz"; + sha1 = "f2c85406800b9b0f74c9f7465b81eaad241252f8"; + }; + } + + { + name = "tslib___tslib_1.9.3.tgz"; + path = fetchurl { + name = "tslib___tslib_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz"; + sha1 = "d7e4dd79245d85428c4d7e4822a79917954ca286"; + }; + } + + { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + path = fetchurl { + name = "tty_browserify___tty_browserify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz"; + sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; + }; + } + + { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + } + + { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + path = fetchurl { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + } + + { + name = "type_check___type_check_0.3.2.tgz"; + path = fetchurl { + name = "type_check___type_check_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + } + + { + name = "type_is___type_is_1.6.16.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.16.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz"; + sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194"; + }; + } + + { + name = "typedarray___typedarray_0.0.6.tgz"; + path = fetchurl { + name = "typedarray___typedarray_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + } + + { + name = "ua_parser_js___ua_parser_js_0.7.19.tgz"; + path = fetchurl { + name = "ua_parser_js___ua_parser_js_0.7.19.tgz"; + url = "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz"; + sha1 = "94151be4c0a7fb1d001af7022fdaca4642659e4b"; + }; + } + + { + name = "uglify_js___uglify_js_3.4.9.tgz"; + path = fetchurl { + name = "uglify_js___uglify_js_3.4.9.tgz"; + url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz"; + sha1 = "af02f180c1207d76432e473ed24a28f4a782bae3"; + }; + } + + { + name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_2.1.1.tgz"; + path = fetchurl { + name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.1.1.tgz"; + sha1 = "6937d7513a37280d4792f1fb536bef35e08e420a"; + }; + } + + { + name = "unicode_astral_regex___unicode_astral_regex_1.0.1.tgz"; + path = fetchurl { + name = "unicode_astral_regex___unicode_astral_regex_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/unicode-astral-regex/-/unicode-astral-regex-1.0.1.tgz"; + sha1 = "2cab8529480646f9614ddbc7b62158ad05123feb"; + }; + } + + { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; + sha1 = "2619800c4c825800efdd8343af7dd9933cbe2818"; + }; + } + + { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; + sha1 = "8ed2a32569961bce9227d09cd3ffbb8fed5f020c"; + }; + } + + { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.0.2.tgz"; + path = fetchurl { + name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz"; + sha1 = "9f1dc76926d6ccf452310564fd834ace059663d4"; + }; + } + + { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.0.4.tgz"; + path = fetchurl { + name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz"; + sha1 = "5a533f31b4317ea76f17d807fa0d116546111dd0"; + }; + } + + { + name = "union_value___union_value_1.0.0.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz"; + sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"; + }; + } + + { + name = "uniq___uniq_1.0.1.tgz"; + path = fetchurl { + name = "uniq___uniq_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + } + + { + name = "uniqs___uniqs_2.0.0.tgz"; + path = fetchurl { + name = "uniqs___uniqs_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz"; + sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; + }; + } + + { + name = "unique_filename___unique_filename_1.1.1.tgz"; + path = fetchurl { + name = "unique_filename___unique_filename_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz"; + sha1 = "1d69769369ada0583103a1e6ae87681b56573230"; + }; + } + + { + name = "unique_slug___unique_slug_2.0.1.tgz"; + path = fetchurl { + name = "unique_slug___unique_slug_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz"; + sha1 = "5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"; + }; + } + + { + name = "unpipe___unpipe_1.0.0.tgz"; + path = fetchurl { + name = "unpipe___unpipe_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + } + + { + name = "unquote___unquote_1.1.1.tgz"; + path = fetchurl { + name = "unquote___unquote_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz"; + sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544"; + }; + } + + { + name = "unset_value___unset_value_1.0.0.tgz"; + path = fetchurl { + name = "unset_value___unset_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + } + + { + name = "upath___upath_1.1.0.tgz"; + path = fetchurl { + name = "upath___upath_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz"; + sha1 = "35256597e46a581db4793d0ce47fa9aebfc9fabd"; + }; + } + + { + name = "uri_js___uri_js_4.2.2.tgz"; + path = fetchurl { + name = "uri_js___uri_js_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; + sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; + }; + } + + { + name = "urix___urix_0.1.0.tgz"; + path = fetchurl { + name = "urix___urix_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + } + + { + name = "url_parse___url_parse_1.4.4.tgz"; + path = fetchurl { + name = "url_parse___url_parse_1.4.4.tgz"; + url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz"; + sha1 = "cac1556e95faa0303691fec5cf9d5a1bc34648f8"; + }; + } + + { + name = "url___url_0.11.0.tgz"; + path = fetchurl { + name = "url___url_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz"; + sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; + }; + } + + { + name = "use___use_3.1.1.tgz"; + path = fetchurl { + name = "use___use_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; + sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; + }; + } + + { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + path = fetchurl { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + } + + { + name = "util.promisify___util.promisify_1.0.0.tgz"; + path = fetchurl { + name = "util.promisify___util.promisify_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz"; + sha1 = "440f7165a459c9a16dc145eb8e72f35687097030"; + }; + } + + { + name = "util___util_0.10.3.tgz"; + path = fetchurl { + name = "util___util_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz"; + sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; + }; + } + + { + name = "util___util_0.10.4.tgz"; + path = fetchurl { + name = "util___util_0.10.4.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz"; + sha1 = "3aa0125bfe668a4672de58857d3ace27ecb76901"; + }; + } + + { + name = "utils_merge___utils_merge_1.0.1.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + } + + { + name = "uuid___uuid_3.3.2.tgz"; + path = fetchurl { + name = "uuid___uuid_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz"; + sha1 = "1b4af4955eb3077c501c23872fc6513811587131"; + }; + } + + { + name = "uws___uws_10.148.0.tgz"; + path = fetchurl { + name = "uws___uws_10.148.0.tgz"; + url = "https://registry.yarnpkg.com/uws/-/uws-10.148.0.tgz"; + sha1 = "3fcd35f083ca515e091cd33b2d78f0f51a666215"; + }; + } + + { + name = "v8_compile_cache___v8_compile_cache_2.0.2.tgz"; + path = fetchurl { + name = "v8_compile_cache___v8_compile_cache_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz"; + sha1 = "a428b28bb26790734c4fc8bc9fa106fccebf6a6c"; + }; + } + + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + + { + name = "value_equal___value_equal_0.4.0.tgz"; + path = fetchurl { + name = "value_equal___value_equal_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz"; + sha1 = "c5bdd2f54ee093c04839d71ce2e4758a6890abc7"; + }; + } + + { + name = "vary___vary_1.1.2.tgz"; + path = fetchurl { + name = "vary___vary_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + } + + { + name = "vendors___vendors_1.0.2.tgz"; + path = fetchurl { + name = "vendors___vendors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz"; + sha1 = "7fcb5eef9f5623b156bcea89ec37d63676f21801"; + }; + } + + { + name = "verror___verror_1.10.0.tgz"; + path = fetchurl { + name = "verror___verror_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + } + + { + name = "vm_browserify___vm_browserify_0.0.4.tgz"; + path = fetchurl { + name = "vm_browserify___vm_browserify_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz"; + sha1 = "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"; + }; + } + + { + name = "w3c_hr_time___w3c_hr_time_1.0.1.tgz"; + path = fetchurl { + name = "w3c_hr_time___w3c_hr_time_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz"; + sha1 = "82ac2bff63d950ea9e3189a58a65625fedf19045"; + }; + } + + { + name = "walker___walker_1.0.7.tgz"; + path = fetchurl { + name = "walker___walker_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz"; + sha1 = "2f7f9b8fd10d677262b18a884e28d19618e028fb"; + }; + } + + { + name = "warning___warning_3.0.0.tgz"; + path = fetchurl { + name = "warning___warning_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz"; + sha1 = "32e5377cb572de4ab04753bdf8821c01ed605b7c"; + }; + } + + { + name = "warning___warning_4.0.2.tgz"; + path = fetchurl { + name = "warning___warning_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz"; + sha1 = "aa6876480872116fa3e11d434b0d0d8d91e44607"; + }; + } + + { + name = "watch___watch_0.18.0.tgz"; + path = fetchurl { + name = "watch___watch_0.18.0.tgz"; + url = "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz"; + sha1 = "28095476c6df7c90c963138990c0a5423eb4b986"; + }; + } + + { + name = "watchpack___watchpack_1.6.0.tgz"; + path = fetchurl { + name = "watchpack___watchpack_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz"; + sha1 = "4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"; + }; + } + + { + name = "wbuf___wbuf_1.7.3.tgz"; + path = fetchurl { + name = "wbuf___wbuf_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz"; + sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df"; + }; + } + + { + name = "webidl_conversions___webidl_conversions_4.0.2.tgz"; + path = fetchurl { + name = "webidl_conversions___webidl_conversions_4.0.2.tgz"; + url = "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz"; + sha1 = "a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"; + }; + } + + { + name = "webpack_assets_manifest___webpack_assets_manifest_3.1.1.tgz"; + path = fetchurl { + name = "webpack_assets_manifest___webpack_assets_manifest_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz"; + sha1 = "39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de"; + }; + } + + { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.0.3.tgz"; + path = fetchurl { + name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz"; + sha1 = "dbc7fff8f52058b6714a20fddf309d0790e3e0a0"; + }; + } + + { + name = "webpack_cli___webpack_cli_3.1.2.tgz"; + path = fetchurl { + name = "webpack_cli___webpack_cli_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz"; + sha1 = "17d7e01b77f89f884a2bbf9db545f0f6a648e746"; + }; + } + + { + name = "webpack_dev_middleware___webpack_dev_middleware_3.4.0.tgz"; + path = fetchurl { + name = "webpack_dev_middleware___webpack_dev_middleware_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz"; + sha1 = "1132fecc9026fd90f0ecedac5cbff75d1fb45890"; + }; + } + + { + name = "webpack_dev_server___webpack_dev_server_3.1.14.tgz"; + path = fetchurl { + name = "webpack_dev_server___webpack_dev_server_3.1.14.tgz"; + url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz"; + sha1 = "60fb229b997fc5a0a1fc6237421030180959d469"; + }; + } + + { + name = "webpack_log___webpack_log_2.0.0.tgz"; + path = fetchurl { + name = "webpack_log___webpack_log_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz"; + sha1 = "5b7928e0637593f119d32f6227c1e0ac31e1b47f"; + }; + } + + { + name = "webpack_merge___webpack_merge_4.1.5.tgz"; + path = fetchurl { + name = "webpack_merge___webpack_merge_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.5.tgz"; + sha1 = "2be31e846c20767d1bef56bdca64c328a681190a"; + }; + } + + { + name = "webpack_sources___webpack_sources_1.3.0.tgz"; + path = fetchurl { + name = "webpack_sources___webpack_sources_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz"; + sha1 = "2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"; + }; + } + + { + name = "webpack___webpack_4.28.3.tgz"; + path = fetchurl { + name = "webpack___webpack_4.28.3.tgz"; + url = "https://registry.yarnpkg.com/webpack/-/webpack-4.28.3.tgz"; + sha1 = "8acef6e77fad8a01bfd0c2b25aa3636d46511874"; + }; + } + + { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + path = fetchurl { + name = "websocket_driver___websocket_driver_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz"; + sha1 = "0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"; + }; + } + + { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + path = fetchurl { + name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz"; + sha1 = "5d2ff22977003ec687a4b87073dfbbac146ccf29"; + }; + } + + { + name = "websocket.js___websocket.js_0.1.12.tgz"; + path = fetchurl { + name = "websocket.js___websocket.js_0.1.12.tgz"; + url = "https://registry.yarnpkg.com/websocket.js/-/websocket.js-0.1.12.tgz"; + sha1 = "46c980787c57ebc8edcf44a0263e5d639367b85b"; + }; + } + + { + name = "whatwg_encoding___whatwg_encoding_1.0.5.tgz"; + path = fetchurl { + name = "whatwg_encoding___whatwg_encoding_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz"; + sha1 = "5abacf777c32166a51d085d6b4f3e7d27113ddb0"; + }; + } + + { + name = "whatwg_fetch___whatwg_fetch_3.0.0.tgz"; + path = fetchurl { + name = "whatwg_fetch___whatwg_fetch_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz"; + sha1 = "fc804e458cc460009b1a2b966bc8817d2578aefb"; + }; + } + + { + name = "whatwg_mimetype___whatwg_mimetype_2.3.0.tgz"; + path = fetchurl { + name = "whatwg_mimetype___whatwg_mimetype_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz"; + sha1 = "3d4b1e0312d2079879f826aff18dbeeca5960fbf"; + }; + } + + { + name = "whatwg_url___whatwg_url_6.5.0.tgz"; + path = fetchurl { + name = "whatwg_url___whatwg_url_6.5.0.tgz"; + url = "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz"; + sha1 = "f2df02bff176fd65070df74ad5ccbb5a199965a8"; + }; + } + + { + name = "whatwg_url___whatwg_url_7.0.0.tgz"; + path = fetchurl { + name = "whatwg_url___whatwg_url_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz"; + sha1 = "fde926fa54a599f3adf82dff25a9f7be02dc6edd"; + }; + } + + { + name = "which_module___which_module_2.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + } + + { + name = "which___which_1.3.1.tgz"; + path = fetchurl { + name = "which___which_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; + sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; + }; + } + + { + name = "wide_align___wide_align_1.1.3.tgz"; + path = fetchurl { + name = "wide_align___wide_align_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz"; + sha1 = "ae074e6bdc0c14a431e804e624549c633b000457"; + }; + } + + { + name = "wordwrap___wordwrap_0.0.3.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz"; + sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107"; + }; + } + + { + name = "wordwrap___wordwrap_1.0.0.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz"; + sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; + }; + } + + { + name = "worker_farm___worker_farm_1.6.0.tgz"; + path = fetchurl { + name = "worker_farm___worker_farm_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz"; + sha1 = "aecc405976fab5a95526180846f0dba288f3a4a0"; + }; + } + + { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; + sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; + }; + } + + { + name = "wrappy___wrappy_1.0.2.tgz"; + path = fetchurl { + name = "wrappy___wrappy_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + } + + { + name = "write_file_atomic___write_file_atomic_2.3.0.tgz"; + path = fetchurl { + name = "write_file_atomic___write_file_atomic_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz"; + sha1 = "1ff61575c2e2a4e8e510d6fa4e243cce183999ab"; + }; + } + + { + name = "write___write_0.2.1.tgz"; + path = fetchurl { + name = "write___write_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz"; + sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757"; + }; + } + + { + name = "ws___ws_5.2.2.tgz"; + path = fetchurl { + name = "ws___ws_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz"; + sha1 = "dffef14866b8e8dc9133582514d1befaf96e980f"; + }; + } + + { + name = "ws___ws_6.1.2.tgz"; + path = fetchurl { + name = "ws___ws_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz"; + sha1 = "3cc7462e98792f0ac679424148903ded3b9c3ad8"; + }; + } + + { + name = "xml_name_validator___xml_name_validator_3.0.0.tgz"; + path = fetchurl { + name = "xml_name_validator___xml_name_validator_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz"; + sha1 = "6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"; + }; + } + + { + name = "xregexp___xregexp_4.0.0.tgz"; + path = fetchurl { + name = "xregexp___xregexp_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz"; + sha1 = "e698189de49dd2a18cc5687b05e17c8e43943020"; + }; + } + + { + name = "xtend___xtend_4.0.1.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz"; + sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; + }; + } + + { + name = "y18n___y18n_3.2.1.tgz"; + path = fetchurl { + name = "y18n___y18n_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz"; + sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41"; + }; + } + + { + name = "y18n___y18n_4.0.0.tgz"; + path = fetchurl { + name = "y18n___y18n_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz"; + sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b"; + }; + } + + { + name = "yallist___yallist_2.1.2.tgz"; + path = fetchurl { + name = "yallist___yallist_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + } + + { + name = "yallist___yallist_3.0.3.tgz"; + path = fetchurl { + name = "yallist___yallist_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz"; + sha1 = "b4b049e314be545e3ce802236d6cd22cd91c3de9"; + }; + } + + { + name = "yargs_parser___yargs_parser_10.1.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_10.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz"; + sha1 = "7202265b89f7e9e9f2e5765e0fe735a905edbaa8"; + }; + } + + { + name = "yargs_parser___yargs_parser_11.1.1.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_11.1.1.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz"; + sha1 = "879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"; + }; + } + + { + name = "yargs_parser___yargs_parser_7.0.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_7.0.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz"; + sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"; + }; + } + + { + name = "yargs_parser___yargs_parser_9.0.2.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_9.0.2.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz"; + sha1 = "9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"; + }; + } + + { + name = "yargs___yargs_12.0.2.tgz"; + path = fetchurl { + name = "yargs___yargs_12.0.2.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz"; + sha1 = "fe58234369392af33ecbef53819171eff0f5aadc"; + }; + } + + { + name = "yargs___yargs_11.1.0.tgz"; + path = fetchurl { + name = "yargs___yargs_11.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz"; + sha1 = "90b869934ed6e871115ea2ff58b03f4724ed2d77"; + }; + } + + { + name = "yargs___yargs_12.0.5.tgz"; + path = fetchurl { + name = "yargs___yargs_12.0.5.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz"; + sha1 = "05f5997b609647b64f66b81e3b4b10a368e7ad13"; + }; + } + + { + name = "yargs___yargs_8.0.2.tgz"; + path = fetchurl { + name = "yargs___yargs_8.0.2.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz"; + sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360"; + }; + } + ]; +} diff --git a/pkgs/webapps/mediagoblin/bower-packages.nix b/pkgs/webapps/mediagoblin/bower-packages.nix new file mode 100644 index 00000000..03af849a --- /dev/null +++ b/pkgs/webapps/mediagoblin/bower-packages.nix @@ -0,0 +1,8 @@ +# Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix) +{ fetchbower, buildEnv }: +buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ + (fetchbower "jquery" "2.1.4" "~2.1.3" "1ywrpk2xsr6ghkm3j9gfnl9r3jn6xarfamp99b0bcm57kq9fm2k0") + (fetchbower "video.js" "4.11.4" "~4.11.4" "05prdvyk0rxbkh7sdd0d9ns5l5crwvc68wzkyqmrdjw367pcv8sn") + (fetchbower "leaflet" "0.7.7" "~0.7.3" "0jim285bljmxxngpm3yx6bnnd10n2whwkgmmhzpcd1rdksnr5nca") + (fetchbower "tinymce" "4.1.10" "~4.1.7" "16jyvdb9bq8gjwhs69q8p88vdixalajrz81nsmbrzzxhkih57dyx") +]; } diff --git a/pkgs/webapps/mediagoblin/default.nix b/pkgs/webapps/mediagoblin/default.nix new file mode 100644 index 00000000..643daedf --- /dev/null +++ b/pkgs/webapps/mediagoblin/default.nix @@ -0,0 +1,169 @@ +{ makeWrapper, stdenv, writeScript, fetchurl, buildBowerComponents, mylibs, which, python36, gst_all_1, automake, autoconf, nodejs, nodePackages }: +let + overridePython = let + packageOverrides = self: super: { + celery = super.celery.overridePythonAttrs(old: rec { + version = "3.1.26.post2"; + src = self.fetchPypi { + inherit version; + inherit (old) pname; + sha256 = "5493e172ae817b81ba7d09443ada114886765a8ce02f16a56e6fac68d953a9b2"; + }; + patches = []; + doCheck = false; + }); + billiard = super.billiard.overridePythonAttrs(old: rec { + version = "3.3.0.23"; + src = self.fetchPypi { + inherit version; + inherit (old) pname; + sha256 = "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"; + }; + }); + amqp = super.amqp.overridePythonAttrs(old: rec { + version = "1.4.9"; + src = self.fetchPypi { + inherit version; + inherit (old) pname; + sha256 = "2dea4d16d073c902c3b89d9b96620fb6729ac0f7a923bbc777cb4ad827c0c61a"; + }; + }); + kombu = super.kombu.overridePythonAttrs(old: rec { + version = "3.0.37"; + src = self.fetchPypi { + inherit version; + inherit (old) pname; + sha256 = "e064a00c66b4d1058cd2b0523fb8d98c82c18450244177b6c0f7913016642650"; + }; + propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.anyjson ]; + doCheck = false; + }); + sqlalchemy = super.sqlalchemy.overridePythonAttrs(old: rec { + version = "1.1.18"; + src = self.fetchPypi { + inherit version; + inherit (old) pname; + sha256 = "8b0ec71af9291191ba83a91c03d157b19ab3e7119e27da97932a4773a3f664a9"; + }; + }); + tempita_5_3_dev = super.buildPythonPackage (mylibs.fetchedGithub ./tempita.json // rec { + buildInputs = with self; [ nose ]; + disabled = false; + }); + sqlalchemy_migrate = super.sqlalchemy_migrate.overridePythonAttrs(old: rec { + propagatedBuildInputs = with self; [ pbr tempita_5_3_dev decorator sqlalchemy six sqlparse ]; + }); + pasteScript = super.pasteScript.overridePythonAttrs(old: rec { + version = "2.0.2"; + name = "PasteScript-${version}"; + src = fetchurl { + url = "mirror://pypi/P/PasteScript/${name}.tar.gz"; + sha256 = "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"; + }; + propagatedBuildInputs = with self; [ six paste PasteDeploy ]; + }); + }; + in + python36.override { inherit packageOverrides; }; + pythonEnv = python-pkgs: with python-pkgs; [ + waitress alembic dateutil wtforms pybcrypt + pytest pytest_xdist werkzeug celery + kombu jinja2 Babel webtest configobj markdown + sqlalchemy itsdangerous pytz sphinx six + oauthlib unidecode jsonschema PasteDeploy + requests PyLD exifread + typing pasteScript lxml + # For images plugin + pillow + # For video plugin + gst-python + # migrations + sqlalchemy_migrate + # authentication + ldap3 + redis + psycopg2 + ]; + python = overridePython.withPackages pythonEnv; + gmg = writeScript "gmg" '' + #!${python}/bin/python + __requires__ = 'mediagoblin' + import sys + from pkg_resources import load_entry_point + + if __name__ == '__main__': + sys.exit( + load_entry_point('mediagoblin', 'console_scripts', 'gmg')() + ) + ''; + bowerComponents = buildBowerComponents { + name = "mediagoblin-bower-components"; + generated = ./bower-packages.nix; + src = (mylibs.fetchedGit ./mediagoblin.json).src; + }; + withPlugins = plugins: package.overrideAttrs(old: { + name = "${old.name}-with-plugins"; + postBuild = old.postBuild + ( + builtins.concatStringsSep "\n" ( + map (value: "ln -s ${value} mediagoblin/plugins/${value.pluginName}") plugins + ) + ); + passthru = old.passthru // { + inherit plugins; + withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins); + }; + }); + package = stdenv.mkDerivation (mylibs.fetchedGit ./mediagoblin.json // rec { + preConfigure = '' + # ./bootstrap.sh + aclocal -I m4 --install + autoreconf -fvi + # end + export HOME=$PWD + ''; + configureFlags = [ "--with-python3" "--without-virtualenv" ]; + postBuild = '' + cp -a ${bowerComponents}/bower_components/* extlib + chmod -R u+w extlib + make extlib + ''; + installPhase = let + libpaths = with gst_all_1; [ + python + gstreamer + gst-plugins-base + gst-libav + gst-plugins-good + gst-plugins-bad + gst-plugins-ugly + ]; + plugin_paths = builtins.concatStringsSep ":" (map (x: "${x}/lib") libpaths); + typelib_paths = with gst_all_1; "${gstreamer}/lib/girepository-1.0:${gst-plugins-base}/lib/girepository-1.0"; + in '' + sed -i "s/registry.has_key(current_theme_name)/current_theme_name in registry/" mediagoblin/tools/theme.py + sed -i -e "s@\[DEFAULT\]@[DEFAULT]\nhere = $out@" mediagoblin/config_spec.ini + sed -i -e "/from gi.repository import GstPbutils/s/^/gi.require_version('GstPbutils', '1.0')\n/" mediagoblin/media_types/video/transcoders.py + cp ${./ldap_fix.py} mediagoblin/plugins/ldap/tools.py + find . -name '*.pyc' -delete + find . -type f -exec sed -i "s|$PWD|$out|g" {} \; + python setup.py build + cp -a . $out + mkdir $out/bin + makeWrapper ${gmg} $out/bin/gmg --prefix PYTHONPATH : "$out:$PYTHONPATH" \ + --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \ + --prefix GI_TYPELIB_PATH : ${typelib_paths} + makeWrapper ${python}/bin/paster $out/bin/paster --prefix PYTHONPATH : "$out:$PYTHONPATH" \ + --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \ + --prefix GI_TYPELIB_PATH : ${typelib_paths} + makeWrapper ${python}/bin/celery $out/bin/celery --prefix PYTHONPATH : "$out:$PYTHONPATH" \ + --prefix GST_PLUGIN_SYSTEM_PATH : ${plugin_paths} \ + --prefix GI_TYPELIB_PATH : ${typelib_paths} + ''; + buildInputs = [ makeWrapper automake autoconf which nodePackages.bower nodejs python ]; + propagatedBuildInputs = with gst_all_1; [ python gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly gstreamer ]; + passthru = { + plugins = []; + inherit withPlugins; + }; + }); +in package diff --git a/pkgs/webapps/mediagoblin/ldap_fix.py b/pkgs/webapps/mediagoblin/ldap_fix.py new file mode 100644 index 00000000..10cc375c --- /dev/null +++ b/pkgs/webapps/mediagoblin/ldap_fix.py @@ -0,0 +1,93 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +from ldap3 import Server, Connection, SUBTREE +from ldap3.core.exceptions import LDAPException +import logging + +import six + +from mediagoblin.tools import pluginapi + +_log = logging.getLogger(__name__) + + +class LDAP(object): + def __init__(self): + self.ldap_settings = pluginapi.get_config('mediagoblin.plugins.ldap') + + def _connect(self, server): + _log.info('Connecting to {0}.'.format(server['LDAP_SERVER_URI'])) + self.server = Server(server['LDAP_SERVER_URI']) + + if 'LDAP_START_TLS' in server and server['LDAP_START_TLS'] == 'true': + _log.info('Initiating TLS') + self.server.start_tls() + + def _manager_auth(self, settings, username, password): + conn = Connection(self.server, + settings['LDAP_BIND_DN'], + settings['LDAP_BIND_PW'], + auto_bind=True) + found = conn.search( + search_base=settings['LDAP_SEARCH_BASE'], + search_filter=settings['LDAP_SEARCH_FILTER'].format(username=username), + search_scope=SUBTREE, + attributes=[settings['EMAIL_SEARCH_FIELD']]) + if (not found) or len(conn.entries) > 1: + return False, None + + user = conn.entries[0] + user_dn = user.entry_dn + try: + email = user.entry_attributes_as_dict[settings['EMAIL_SEARCH_FIELD']][0] + except KeyError: + email = None + + Connection(self.server, user_dn, password, auto_bind=True) + + return username, email + + def _direct_auth(self, settings, username, password): + user_dn = settings['LDAP_USER_DN_TEMPLATE'].format(username=username) + conn = Connection(self.server, user_dn, password, auto_bind=True) + email_found = conn.search( + search_base=settings['LDAP_SEARCH_BASE'], + search_filter='uid={0}'.format(username), + search_scope=SUBTREE, + attributes=[settings['EMAIL_SEARCH_FIELD']]) + + if email_found: + try: + email = conn.entries[0].entry_attributes_as_dict[settings['EMAIL_SEARCH_FIELD']][0] + except KeyError: + email = None + + return username, email + + def login(self, username, password): + for k, v in six.iteritems(self.ldap_settings): + try: + self._connect(v) + + if 'LDAP_BIND_DN' in v: + return self._manager_auth(v, username, password) + else: + return self._direct_auth(v, username, password) + + except LDAPException as e: + _log.info(e) + + return False, None diff --git a/pkgs/webapps/mediagoblin/mediagoblin.json b/pkgs/webapps/mediagoblin/mediagoblin.json new file mode 100644 index 00000000..7ea72d1f --- /dev/null +++ b/pkgs/webapps/mediagoblin/mediagoblin.json @@ -0,0 +1,14 @@ +{ + "tag": "cd465eb-stable", + "meta": { + "name": "mediagoblin", + "url": "git://git.savannah.gnu.org/mediagoblin.git", + "branch": "stable" + }, + "git": { + "url": "git://git.savannah.gnu.org/mediagoblin.git", + "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850", + "sha256": "1yz4i4i97z3rxl534a6psaybyjbyp5nnc52v3nvbpzc4pd2s69mx", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/mediagoblin/plugins/basicsearch/default.nix b/pkgs/webapps/mediagoblin/plugins/basicsearch/default.nix new file mode 100644 index 00000000..16be613f --- /dev/null +++ b/pkgs/webapps/mediagoblin/plugins/basicsearch/default.nix @@ -0,0 +1,18 @@ +{ stdenv, fetchFromGitHub }: +stdenv.mkDerivation rec { + name = "mediagoblin-plugin-basicsearch-${version}"; + version = "ba0a154-master"; + src = fetchFromGitHub { + owner = "ayleph"; + repo = "mediagoblin-basicsearch"; + rev = "ba0a1547bd24ebaf363227fe17644d38c6ce8a6b"; + sha256 = "0d4r7xkf4gxmgaxlb264l44xbanis77g49frwfhfzsflxmdwgncy"; + }; + phases = "unpackPhase installPhase"; + installPhase = '' + cp -R ./basicsearch $out + ''; + passthru = { + pluginName = "basicsearch"; + }; +} diff --git a/pkgs/webapps/mediagoblin/tempita.json b/pkgs/webapps/mediagoblin/tempita.json new file mode 100644 index 00000000..5371e17d --- /dev/null +++ b/pkgs/webapps/mediagoblin/tempita.json @@ -0,0 +1,15 @@ +{ + "tag": "47414a7-master", + "meta": { + "name": "tempita", + "url": "https://github.com/gjhiggins/tempita", + "branch": "master" + }, + "github": { + "owner": "gjhiggins", + "repo": "tempita", + "rev": "47414a7c6e46a9a9afe78f0bce2ea299fa84d10d", + "sha256": "0f33jjjs5rvp7ar2j6ggyfykcrsrn04jaqcq71qfvycf6b7nw3rn", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/nextcloud/apps/audioplayer.nix b/pkgs/webapps/nextcloud/apps/audioplayer.nix new file mode 100644 index 00000000..e321002c --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/audioplayer.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "audioplayer"; + version = "2.7.0"; + url = "https://github.com/Rello/${appName}/releases/download/${version}/${appName}-${version}.tar.gz"; + sha256 = "05dylw45hs32agy6wqjy4r2x3h1dxzyzn0378ig6h5a22xd52mik"; +} diff --git a/pkgs/webapps/nextcloud/apps/bookmarks.nix b/pkgs/webapps/nextcloud/apps/bookmarks.nix new file mode 100644 index 00000000..4632c926 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/bookmarks.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "bookmarks"; + version = "1.0.2"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz"; + sha256 = "1ph123d0pram9a0vq73rn0zw0pyg4l0xqg162b59ds68179m2jfp"; +} diff --git a/pkgs/webapps/nextcloud/apps/calendar.nix b/pkgs/webapps/nextcloud/apps/calendar.nix new file mode 100644 index 00000000..0812810e --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/calendar.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "calendar"; + version = "1.7.0"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "0cgvvgzc2kgs2ng36hzff8rrpw9n58f0hyrr41n3wjkf0iynm56r"; +} diff --git a/pkgs/webapps/nextcloud/apps/carnet.nix b/pkgs/webapps/nextcloud/apps/carnet.nix new file mode 100644 index 00000000..61431e59 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/carnet.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "carnet"; + version = "0.15.2"; + url = "https://github.com/PhieF/CarnetNextcloud/releases/download/v${version}/${appName}-nc-v${version}.tar.gz"; + sha256 = "1npjb2bgwcfxlf22ygl2hfhfgaigk1kpdk795yc79mx2l1iicmg0"; +} diff --git a/pkgs/webapps/nextcloud/apps/contacts.nix b/pkgs/webapps/nextcloud/apps/contacts.nix new file mode 100644 index 00000000..34329ab4 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/contacts.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "contacts"; + version = "3.1.1"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "1qfn532p1pb4m6q2jzyzlyw4c5qccmq6vj0h2zv9xfkajfvz7i7v"; +} diff --git a/pkgs/webapps/nextcloud/apps/deck.nix b/pkgs/webapps/nextcloud/apps/deck.nix new file mode 100644 index 00000000..c5737afb --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/deck.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "deck"; + version = "0.6.1"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "1hafgj67zbhs4higf7nyr61p4s31axzxrsq09c4wmcwviz7p7zvs"; +} diff --git a/pkgs/webapps/nextcloud/apps/files_markdown.nix b/pkgs/webapps/nextcloud/apps/files_markdown.nix new file mode 100644 index 00000000..9ed50076 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/files_markdown.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "files_markdown"; + version = "2.0.6"; + url = "https://github.com/icewind1991/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "1ng8gpjl3g1141k1nii59cg005viidlcbsg4x9brzcj25c5qhjjp"; +} diff --git a/pkgs/webapps/nextcloud/apps/flowupload.nix b/pkgs/webapps/nextcloud/apps/flowupload.nix new file mode 100644 index 00000000..cbadbda7 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/flowupload.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "flowupload"; + version = "0.1.0"; + url = "https://github.com/e-alfred/${appName}/releases/download/${version}/${appName}.tar.gz"; + sha256 = "0cai76hcjrwvq32yav0nd9kkhslandp1sj5czz119gsfjlkpalw9"; +} diff --git a/pkgs/webapps/nextcloud/apps/gpxedit.nix b/pkgs/webapps/nextcloud/apps/gpxedit.nix new file mode 100644 index 00000000..b9c267b6 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/gpxedit.nix @@ -0,0 +1,15 @@ +{ buildApp }: +buildApp rec { + appName = "gpxedit"; + version = "0.0.11"; + url = "https://gitlab.com/eneiluj/gpxedit-oc/wikis/uploads/18058077d0170256c3f4c9201443d09d/${appName}-${version}.tar.gz"; + sha256 = "1ww32jysjnwxrn8r9fjdfhbfqnzgaakn08m64wcmavx29dd42y6m"; + otherConfig = { + mimetypealiases = { + "application/gpx+xml" = "gpx"; + }; + mimetypemapping = { + "gpx" = ["application/gpx+xml"]; + }; + }; +} diff --git a/pkgs/webapps/nextcloud/apps/gpxpod.nix b/pkgs/webapps/nextcloud/apps/gpxpod.nix new file mode 100644 index 00000000..6544ac22 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/gpxpod.nix @@ -0,0 +1,15 @@ +{ buildApp }: +buildApp rec { + appName = "gpxpod"; + version = "3.0.3"; + url = "https://gitlab.com/eneiluj/gpxpod-oc/wikis/uploads/34af9435d7a2cd8fa915b84f0dda0724/${appName}-${version}.tar.gz"; + sha256 = "0v30j5b4ki6nbxqdmnlkrgl1lpg2x2nir9gik6rfj0c3jhmb5mch"; + otherConfig = { + mimetypealiases = { + "application/gpx+xml" = "gpx"; + }; + mimetypemapping = { + "gpx" = ["application/gpx+xml"]; + }; + }; +} diff --git a/pkgs/webapps/nextcloud/apps/keeweb.nix b/pkgs/webapps/nextcloud/apps/keeweb.nix new file mode 100644 index 00000000..99713eee --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/keeweb.nix @@ -0,0 +1,20 @@ +{ buildApp }: +buildApp rec { + appName = "keeweb"; + version = "0.5.0"; + url = "https://github.com/jhass/nextcloud-keeweb/releases/download/v${version}/${appName}-${version}.tar.gz"; + sha256 = "0wdr6ywlirmac7w1ld5ma7fwb4bykclbxfq2sxwg6pvzfid5vc8x"; + installPhase = '' + mkdir -p $out + cp -R . $out/ + sed -i -e 's/max-version="15"/max-version="16"/' $out/appinfo/info.xml + ''; + otherConfig = { + mimetypealiases = { + "x-application/kdbx" = "kdbx"; + }; + mimetypemapping = { + "kdbx" = ["x-application/kdbx"]; + }; + }; +} diff --git a/pkgs/webapps/nextcloud/apps/music.nix b/pkgs/webapps/nextcloud/apps/music.nix new file mode 100644 index 00000000..1c7181ac --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/music.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "music"; + version = "0.9.5"; + url = "https://github.com/owncloud/${appName}/archive/v${version}.tar.gz"; + sha256 = "0dx136z7anmi18harc1v2hyfdaq568lqf3wpy9hgx309ggb4wwzx"; +} diff --git a/pkgs/webapps/nextcloud/apps/notes.nix b/pkgs/webapps/nextcloud/apps/notes.nix new file mode 100644 index 00000000..23d6a060 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/notes.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "notes"; + version = "2.6.0"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "1b1vc8plv4mpsxl7mgwgrcrswphclsm9xa89vxf3s4xzlwwq11c4"; +} diff --git a/pkgs/webapps/nextcloud/apps/ocsms.nix b/pkgs/webapps/nextcloud/apps/ocsms.nix new file mode 100644 index 00000000..bd772952 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/ocsms.nix @@ -0,0 +1,13 @@ +{ buildApp }: +buildApp rec { + appName = "ocsms"; + version = "2.1.1"; + url = "https://github.com/nextcloud/${appName}/releases/download/${version}/${appName}-${version}.tar.gz"; + sha256 = "0sgfbmy1c8rgzjvf9snc7rzgp8aqsc65zfwgi6qcsf2g6gam5n7a"; + installPhase = '' + sed -i -e "/addScript.*devel/d" -e "s@//\(.*addScript.*app.min\)@\1@" templates/main.php + sed -i -e 's/max-version="15.0"/max-version="16.0"/' appinfo/info.xml + mkdir -p $out + cp -R . $out/ + ''; +} diff --git a/pkgs/webapps/nextcloud/apps/passman.nix b/pkgs/webapps/nextcloud/apps/passman.nix new file mode 100644 index 00000000..869acb3d --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/passman.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "passman"; + version = "2.2.1"; + url = "https://releases.passman.cc/${appName}_${version}.tar.gz"; + sha256 = "064pq9d0pl3y1vcywpi19fg47zy7j4h0jaxy6jklwzwcrmzagbka"; +} diff --git a/pkgs/webapps/nextcloud/apps/spreed.nix b/pkgs/webapps/nextcloud/apps/spreed.nix new file mode 100644 index 00000000..a958470b --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/spreed.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "spreed"; + version = "6.0.0"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz"; + sha256 = "14rcskp4pdcf0g816cdp070c8pzrj33fg2w7jb3af8maf1d77306"; +} diff --git a/pkgs/webapps/nextcloud/apps/tasks.nix b/pkgs/webapps/nextcloud/apps/tasks.nix new file mode 100644 index 00000000..1e5f8f28 --- /dev/null +++ b/pkgs/webapps/nextcloud/apps/tasks.nix @@ -0,0 +1,7 @@ +{ buildApp }: +buildApp rec { + appName = "tasks"; + version = "0.10.1"; + url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz"; + sha256 = "0r888yr6bl2y5mp65q8md5k139as1a0xw4yfzvkv7y77wmqn9wsm"; +} diff --git a/pkgs/webapps/nextcloud/default.nix b/pkgs/webapps/nextcloud/default.nix new file mode 100644 index 00000000..2d4eb390 --- /dev/null +++ b/pkgs/webapps/nextcloud/default.nix @@ -0,0 +1,63 @@ +{ varDir ? "/var/lib/nextcloud", otherConfig ? {}, lib, stdenv, fetchurl }: +let + buildApp = { appName, version, url, sha256, otherConfig ? {}, installPhase ? "mkdir -p $out && cp -R . $out/" }: + stdenv.mkDerivation rec { + name = "nextcloud-app-${appName}-${version}"; + inherit version; + phases = "unpackPhase installPhase"; + inherit installPhase; + src = fetchurl { inherit url sha256; }; + passthru = { + inherit appName otherConfig; + }; + }; + withApps = apps: package.overrideAttrs(old: { + name = "${old.name}-with-apps"; + + installPhase = old.installPhase + ( + builtins.concatStringsSep "\n" ( + map (value: "ln -sf ${value} $out/apps/${value.appName}") apps + )); + + passthru = old.passthru // { + otherConfig = with lib.attrsets; with lib.lists; let + zipped = zipAttrs ([old.otherConfig or {}] ++ map (v: v.otherConfig) apps); + in + { + mimetypealiases = foldr (h: prev: prev // h) {} zipped.mimetypealiases; + mimetypemapping = mapAttrs (_: v: unique (flatten v)) (zipAttrs zipped.mimetypemapping); + }; + inherit apps; + withApps = moreApps: old.withApps (moreApps ++ apps); + }; + }); + + package = stdenv.mkDerivation rec { + name = "nextcloud-${version}"; + version = "16.0.0"; + + src = fetchurl { + url = "https://download.nextcloud.com/server/releases/${name}.tar.bz2"; + sha256 = "0bj014vczlrql1w32pqmr7cyqn9awnyzpi2syxhg16qxic1gfcj5"; + }; + + installPhase = '' + mkdir -p $out/ + cp -R . $out/ + rm -r $out/config + ln -sf ${varDir}/config $out/config + ''; + + passthru = { + apps = []; + inherit otherConfig buildApp withApps varDir; + }; + meta = { + description = "Sharing solution for files, calendars, contacts and more"; + homepage = https://nextcloud.com; + maintainers = with lib.maintainers; [ schneefux bachp globin fpletz ]; + license = lib.licenses.agpl3Plus; + platforms = with lib.platforms; unix; + }; + }; +in package diff --git a/pkgs/webapps/peertube/default.nix b/pkgs/webapps/peertube/default.nix new file mode 100644 index 00000000..a04d4908 --- /dev/null +++ b/pkgs/webapps/peertube/default.nix @@ -0,0 +1,123 @@ +{ ldap ? false +, lib, stdenv, fetchzip, youtube-dl, fetchurl, mylibs, python, nodejs, nodePackages }: +let + nodeHeaders = fetchurl { + url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz"; + sha256 = "16f20ya3ys6w5w6y6l4536f7jrgk4gz46bf71w1r1xxb26a54m32"; + }; + patchedPackages = stdenv.mkDerivation (mylibs.fetchedGithub ./peertube.json // rec { + patches = if ldap then [ ./ldap.patch ././yarn_fix_bluebird_ldap.patch ] else [ ./yarn_fix_bluebird.patch ]; + installPhase = '' + mkdir $out + cp package.json yarn.lock $out/ + ''; + }); + # if yarn complains about + # TypeError: Cannot read property 'lang' of undefined yarn + # make sure that all package names in yarn-packages.nix finish in + # .tar.gz where due (especially jsonld-signatures) + # Most errors where due to jsonld-signature (name, git version, etc.) + # or bluebird (3.5.18 instead vs 3.5.21) + yarnModulesArg = rec { + pname = "peertube-yarn-modules"; + version = "1.2.0"; + name = "peertube-yarn-modules-${version}"; + packageJSON = "${patchedPackages}/package.json"; + yarnLock = "${patchedPackages}/yarn.lock"; + yarnNix = ./yarn-packages.nix; + pkgConfig = { + all = { + buildInputs = [ mylibs.yarn2nixPackage.src ]; + }; + bcrypt = { + buildInputs = [ nodePackages.node-pre-gyp ]; + postInstall = let + bcrypt_lib = fetchurl { + url = "https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.2/bcrypt_lib-v3.0.2-node-v57-linux-x64-glibc.tar.gz"; + sha256 = "04bj3yn1wi8a6izihskyks0bb4nls3mndgb2yj12iraiv5dmg097"; + }; + in + '' + mkdir lib && tar -C lib -xf ${bcrypt_lib} + patchShebangs ../node-pre-gyp + npm run install + ''; + }; + dtrace-provider = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = '' + npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + rdf-canonize = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = '' + npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + sharp = { + buildInputs = [ python nodePackages.node-gyp ]; + postInstall = + let + tarball = fetchurl { + url = "https://github.com/lovell/sharp-libvips/releases/download/v8.7.0/libvips-8.7.0-linux-x64.tar.gz"; + sha256 = "1sq7qrp1q1pcrd165c3sky7qjx1kqihfpr4ailb5k73rwyh8lxg4"; + }; + in + '' + mkdir vendor + tar -C vendor -xf ${tarball} + patchShebangs ../prebuild-install + npx node install/libvips + npx node install/dll-copy + npx prebuild-install || npx node-gyp rebuild --tarball=${nodeHeaders} + ''; + }; + utf-8-validate = { + buildInputs = [ nodePackages.node-gyp-build ]; + }; + youtube-dl = { + postInstall = '' + mkdir bin + ln -s ${youtube-dl}/bin/youtube-dl bin/youtube-dl + cat > bin/details < +Date: Tue Feb 12 18:47:53 2019 +0100 + + Add LDAP authentication + +diff --git a/config/default.yaml b/config/default.yaml +index e16b8c35..eac0dd3f 100644 +--- a/config/default.yaml ++++ b/config/default.yaml +@@ -33,6 +33,9 @@ redis: + auth: null + db: 0 + ++ldap: ++ enable: false ++ + smtp: + hostname: null + port: 465 +diff --git a/config/production.yaml.example b/config/production.yaml.example +index 661eac0d..bb5ac251 100644 +--- a/config/production.yaml.example ++++ b/config/production.yaml.example +@@ -33,6 +33,17 @@ redis: + auth: null + db: 0 + ++ldap: ++ enable: true ++ # Disallow non-ldap users (it also disables root!) ++ ldap_only: true ++ url: ldap://localhost:389/dc=example,dc=com ++ bind_dn: cn=admin,dc=example,dc=com ++ bind_password: adminPass ++ base: dc=example,dc=com ++ mail_entry: "mail" ++ user_filter: "(|(email=%username%)(uid=%username%))" ++ + # SMTP server to send emails + smtp: + hostname: null +diff --git a/package.json b/package.json +index 0cf39c7e..fd1ce3ea 100644 +--- a/package.json ++++ b/package.json +@@ -125,6 +125,7 @@ + "js-yaml": "^3.5.4", + "jsonld": "^1.0.1", + "jsonld-signatures": "https://github.com/Chocobozzz/jsonld-signatures#rsa2017", ++ "ldapjs": "^1.0.2", + "lodash": "^4.17.10", + "magnet-uri": "^5.1.4", + "memoizee": "^0.4.14", +diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts +index 6f3ebb9a..fb21df37 100644 +--- a/server/initializers/constants.ts ++++ b/server/initializers/constants.ts +@@ -16,7 +16,7 @@ let config: IConfig = require('config') + + // --------------------------------------------------------------------------- + +-const LAST_MIGRATION_VERSION = 325 ++const LAST_MIGRATION_VERSION = 326 + + // --------------------------------------------------------------------------- + +@@ -177,6 +177,16 @@ const CONFIG = { + AUTH: config.has('redis.auth') ? config.get('redis.auth') : null, + DB: config.has('redis.db') ? config.get('redis.db') : null + }, ++ LDAP: { ++ ENABLE: config.has('ldap.enable') ? config.get('ldap.enable') : false, ++ LDAP_ONLY: config.has('ldap.ldap_only') ? config.get('ldap.ldap_only') : false, ++ URL: config.has('ldap.url') ? config.get('ldap.url') : null, ++ BIND_DN: config.has('ldap.bind_dn') ? config.get('ldap.bind_dn') : null, ++ BIND_PASSWORD: config.has('ldap.bind_password') ? config.get('ldap.bind_password') : null, ++ BASE: config.has('ldap.base') ? config.get('ldap.base') : null, ++ MAIL_ENTRY: config.has('ldap.mail_entry') ? config.get('ldap.mail_entry') : 'mail', ++ USER_FILTER: config.has('ldap.user_filter') ? config.get('ldap.user_filter') : '(|(email=%username%)(uid=%username%))' ++ }, + SMTP: { + HOSTNAME: config.get('smtp.hostname'), + PORT: config.get('smtp.port'), +diff --git a/server/initializers/migrations/0326-user-ldap-dn.ts b/server/initializers/migrations/0326-user-ldap-dn.ts +new file mode 100644 +index 00000000..a9d68124 +--- /dev/null ++++ b/server/initializers/migrations/0326-user-ldap-dn.ts +@@ -0,0 +1,26 @@ ++import * as Sequelize from 'sequelize' ++ ++async function up (utils: { ++ transaction: Sequelize.Transaction, ++ queryInterface: Sequelize.QueryInterface, ++ sequelize: Sequelize.Sequelize ++}): Promise { ++ ++ { ++ const data = { ++ type: Sequelize.STRING, ++ allowNull: true, ++ defaultValue: null ++ } ++ await utils.queryInterface.addColumn('user', 'ldapDn', data) ++ } ++} ++ ++function down (options) { ++ throw new Error('Not implemented.') ++} ++ ++export { ++ up, ++ down ++} +diff --git a/server/lib/oauth-model.ts b/server/lib/oauth-model.ts +index 2cd2ae97..3f14b216 100644 +--- a/server/lib/oauth-model.ts ++++ b/server/lib/oauth-model.ts +@@ -66,7 +66,13 @@ function getRefreshToken (refreshToken: string) { + async function getUser (usernameOrEmail: string, password: string) { + logger.debug('Getting User (username/email: ' + usernameOrEmail + ', password: ******).') + +- const user = await UserModel.loadByUsernameOrEmail(usernameOrEmail) ++ let user ++ if (CONFIG.LDAP.ENABLE) { ++ user = await UserModel.findOrCreateLDAPUser(usernameOrEmail) ++ } ++ if (!user && (!CONFIG.LDAP.ENABLE || !CONFIG.LDAP.LDAP_ONLY)) { ++ user = await UserModel.loadByUsernameOrEmail(usernameOrEmail) ++ } + if (!user) return null + + const passwordMatch = await user.isPasswordMatch(password) +diff --git a/server/models/account/user.ts b/server/models/account/user.ts +index 017a9665..a4d0145c 100644 +--- a/server/models/account/user.ts ++++ b/server/models/account/user.ts +@@ -1,3 +1,4 @@ ++import * as ldap from 'ldapjs' + import * as Sequelize from 'sequelize' + import { + AfterDestroy, +@@ -42,8 +43,9 @@ import { VideoChannelModel } from '../video/video-channel' + import { AccountModel } from './account' + import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type' + import { values } from 'lodash' +-import { NSFW_POLICY_TYPES } from '../../initializers' ++import { CONFIG, NSFW_POLICY_TYPES } from '../../initializers' + import { clearCacheByUserId } from '../../lib/oauth-model' ++import { createUserAccountAndChannel } from '../../lib/user' + import { UserNotificationSettingModel } from './user-notification-setting' + import { VideoModel } from '../video/video' + import { ActorModel } from '../activitypub/actor' +@@ -111,6 +113,11 @@ export class UserModel extends Model { + @Column(DataType.STRING(400)) + email: string + ++ @AllowNull(true) ++ @Default(null) ++ @Column ++ ldapDn: string ++ + @AllowNull(true) + @Default(null) + @Is('UserEmailVerified', value => throwIfNotValid(value, isUserEmailVerifiedValid, 'email verified boolean')) +@@ -354,6 +361,90 @@ export class UserModel extends Model { + return UserModel.findOne(query) + } + ++ static loadByLdapDn (ldapDn: string) { ++ const query = { ++ where: { ++ ldapDn ++ } ++ } ++ ++ return UserModel.findOne(query) ++ } ++ ++ static findOrCreateLDAPUser (username: string) { ++ let userInfos ++ ++ return Promise.resolve(UserModel.findLDAPUser(username)) ++ .then((_userInfos) => { ++ userInfos = _userInfos ++ return UserModel.loadByLdapDn(userInfos['dn']) ++ }) ++ .then((user) => { ++ if (user) { ++ return user ++ } else { ++ return UserModel.createLDAPUser(username, userInfos) ++ } ++ }) ++ .catch(() => { return null }) ++ } ++ ++ static findLDAPUser (username: string) { ++ const client = ldap.createClient({ ++ url: CONFIG.LDAP.URL ++ }) ++ const filter = ldap.parseFilter(CONFIG.LDAP.USER_FILTER) ++ filter.forEach(function (element) { ++ if (element.value === '%username%') element.value = username ++ }) ++ const opts = { ++ filter, ++ scope: 'sub', ++ attributes: [ CONFIG.LDAP.MAIL_ENTRY, 'dn' ] ++ } ++ ++ return new Promise(function (resolve, reject) { ++ client.bind(CONFIG.LDAP.BIND_DN, CONFIG.LDAP.BIND_PASSWORD, function (err) { ++ if (err) reject() ++ let entries = [] ++ client.search(CONFIG.LDAP.BASE, opts, function (err, search) { ++ if (err) reject() ++ search.on('searchEntry', function (entry) { ++ entries.push(entry.object) ++ }) ++ search.on('end', function (result) { ++ if (entries.length === 1) { ++ resolve(entries[0]) ++ } else { ++ reject() ++ } ++ }) ++ }) ++ }) ++ }) ++ } ++ ++ static createLDAPUser (username: string, userInfos: {}) { ++ return Promise.resolve(userInfos) ++ .then((userInfos) => { ++ const userToCreate = new UserModel({ ++ username: username, ++ password: 'SomeInvalidPassword', ++ email: userInfos[CONFIG.LDAP.MAIL_ENTRY], ++ ldapDn: userInfos['dn'], ++ nsfwPolicy: CONFIG.INSTANCE.DEFAULT_NSFW_POLICY, ++ autoPlayVideo: true, ++ role: UserRole.USER, ++ videoQuota: CONFIG.USER.VIDEO_QUOTA, ++ videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY, ++ emailVerified: true ++ }) ++ ++ return createUserAccountAndChannel(userToCreate) ++ }) ++ .then(({ user }) => { return user }) ++ } ++ + static loadByUsernameAndPopulateChannels (username: string) { + const query = { + where: { +@@ -516,8 +607,22 @@ export class UserModel extends Model { + return hasUserRight(this.role, right) + } + ++ static checkLDAPUser (dn: string, password: string) { ++ const client = ldap.createClient({ url: CONFIG.LDAP.URL }) ++ ++ return new Promise(function (resolve, reject) { ++ client.bind(dn, password, function (err) { ++ resolve(!err) ++ }) ++ }) ++ } ++ + isPasswordMatch (password: string) { +- return comparePassword(password, this.password) ++ if (this.ldapDn === null) { ++ return comparePassword(password, this.password) ++ } else { ++ return UserModel.checkLDAPUser(this.ldapDn, password) ++ } + } + + toFormattedJSON (): User { +diff --git a/yarn.lock b/yarn.lock +index 1e759af1..1eb61a9f 100644 +--- a/yarn.lock ++++ b/yarn.lock +@@ -674,6 +674,11 @@ asap@^2.0.0: + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + ++asn1@0.2.3: ++ version "0.2.3" ++ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" ++ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= ++ + asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" +@@ -681,6 +686,11 @@ asn1@~0.2.3: + dependencies: + safer-buffer "~2.1.0" + ++assert-plus@0.1.5: ++ version "0.1.5" ++ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" ++ integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= ++ + assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +@@ -779,6 +789,13 @@ backo2@1.0.2: + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + ++backoff@^2.5.0: ++ version "2.5.0" ++ resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" ++ integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= ++ dependencies: ++ precond "0.2" ++ + balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +@@ -1186,6 +1203,16 @@ bull@^3.4.2: + semver "^5.6.0" + uuid "^3.2.1" + ++bunyan@^1.8.3: ++ version "1.8.12" ++ resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797" ++ integrity sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c= ++ optionalDependencies: ++ dtrace-provider "~0.8" ++ moment "^2.10.6" ++ mv "~2" ++ safe-json-stringify "~1" ++ + busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" +@@ -1966,7 +1993,7 @@ d@1: + dependencies: + es5-ext "^0.10.9" + +-dashdash@^1.12.0: ++dashdash@^1.12.0, dashdash@^1.14.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= +@@ -2292,6 +2319,13 @@ double-ended-queue@^2.1.0-0: + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw= + ++dtrace-provider@~0.8: ++ version "0.8.7" ++ resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04" ++ integrity sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= ++ dependencies: ++ nan "^2.10.0" ++ + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" +@@ -2864,6 +2898,11 @@ extglob@^2.0.4: + snapdragon "^0.8.1" + to-regex "^3.0.1" + ++extsprintf@1.2.0: ++ version "1.2.0" ++ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529" ++ integrity sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk= ++ + extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +@@ -3350,6 +3389,17 @@ glob@7.1.2: + once "^1.3.0" + path-is-absolute "^1.0.0" + ++glob@^6.0.1: ++ version "6.0.4" ++ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" ++ integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= ++ dependencies: ++ inflight "^1.0.4" ++ inherits "2" ++ minimatch "2 || 3" ++ once "^1.3.0" ++ path-is-absolute "^1.0.0" ++ + glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" +@@ -4522,6 +4572,30 @@ lcid@^2.0.0: + dependencies: + invert-kv "^2.0.0" + ++ldap-filter@0.2.2: ++ version "0.2.2" ++ resolved "https://registry.yarnpkg.com/ldap-filter/-/ldap-filter-0.2.2.tgz#f2b842be0b86da3352798505b31ebcae590d77d0" ++ integrity sha1-8rhCvguG2jNSeYUFsx68rlkNd9A= ++ dependencies: ++ assert-plus "0.1.5" ++ ++ldapjs@^1.0.2: ++ version "1.0.2" ++ resolved "https://registry.yarnpkg.com/ldapjs/-/ldapjs-1.0.2.tgz#544ff7032b7b83c68f0701328d9297aa694340f9" ++ integrity sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk= ++ dependencies: ++ asn1 "0.2.3" ++ assert-plus "^1.0.0" ++ backoff "^2.5.0" ++ bunyan "^1.8.3" ++ dashdash "^1.14.0" ++ ldap-filter "0.2.2" ++ once "^1.4.0" ++ vasync "^1.6.4" ++ verror "^1.8.1" ++ optionalDependencies: ++ dtrace-provider "~0.8" ++ + leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" +@@ -5186,7 +5260,7 @@ minimalistic-assert@^1.0.1: + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +-minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: ++"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +@@ -5299,6 +5373,11 @@ moment-timezone@^0.5.14, moment-timezone@^0.5.23: + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= + ++moment@^2.10.6: ++ version "2.24.0" ++ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" ++ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== ++ + morgan@^1.5.3: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" +@@ -5394,6 +5473,15 @@ mute-stream@~0.0.4: + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + ++mv@~2: ++ version "2.1.1" ++ resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" ++ integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= ++ dependencies: ++ mkdirp "~0.5.1" ++ ncp "~2.0.0" ++ rimraf "~2.4.0" ++ + nan@2.11.1, nan@^2.10.0, nan@^2.11.1, nan@^2.9.2: + version "2.11.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" +@@ -5431,6 +5519,11 @@ ncp@1.0.x: + resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246" + integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY= + ++ncp@~2.0.0: ++ version "2.0.0" ++ resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" ++ integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= ++ + needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" +@@ -6520,6 +6613,11 @@ prebuild-install@^5.2.0: + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + ++precond@0.2: ++ version "0.2.3" ++ resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" ++ integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= ++ + prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +@@ -7141,6 +7239,13 @@ rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.4.2, rimraf@^2.5.2, rimraf@^2.5 + dependencies: + glob "^7.0.5" + ++rimraf@~2.4.0: ++ version "2.4.5" ++ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" ++ integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= ++ dependencies: ++ glob "^6.0.1" ++ + run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +@@ -7197,6 +7302,11 @@ safe-buffer@5.1.2, safe-buffer@^5.0.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, s + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + ++safe-json-stringify@~1: ++ version "1.2.0" ++ resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" ++ integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== ++ + safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" +@@ -8857,7 +8967,14 @@ vary@~1.0.1: + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + integrity sha1-meSYFWaihhGN+yuBc1ffeZM3bRA= + +-verror@1.10.0: ++vasync@^1.6.4: ++ version "1.6.4" ++ resolved "https://registry.yarnpkg.com/vasync/-/vasync-1.6.4.tgz#dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f" ++ integrity sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8= ++ dependencies: ++ verror "1.6.0" ++ ++verror@1.10.0, verror@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= +@@ -8866,6 +8983,13 @@ verror@1.10.0: + core-util-is "1.0.2" + extsprintf "^1.2.0" + ++verror@1.6.0: ++ version "1.6.0" ++ resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5" ++ integrity sha1-fROyex+swuLakEBetepuW90lLqU= ++ dependencies: ++ extsprintf "1.2.0" ++ + videostream@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/videostream/-/videostream-2.6.0.tgz#7f0b2b84bc457c12cfe599aa2345f5cc06241ab6" diff --git a/pkgs/webapps/peertube/ldap_yarn.patch b/pkgs/webapps/peertube/ldap_yarn.patch new file mode 100644 index 00000000..538ce043 --- /dev/null +++ b/pkgs/webapps/peertube/ldap_yarn.patch @@ -0,0 +1,278 @@ +commit 45a9e4a7b1badbea15d74bd8b3990303a424dfa6 +Author: Ismaël Bouya +Date: Tue Feb 12 18:47:53 2019 +0100 + + Add LDAP authentication + +diff --git a/package.json b/package.json +index 0cf39c7e..fd1ce3ea 100644 +--- a/package.json ++++ b/package.json +@@ -125,6 +125,7 @@ + "js-yaml": "^3.5.4", + "jsonld": "^1.0.1", + "jsonld-signatures": "https://github.com/Chocobozzz/jsonld-signatures#rsa2017", ++ "ldapjs": "^1.0.2", + "lodash": "^4.17.10", + "magnet-uri": "^5.1.4", + "memoizee": "^0.4.14", +diff --git a/yarn.lock b/yarn.lock +index 1e759af1..1eb61a9f 100644 +--- a/yarn.lock ++++ b/yarn.lock +@@ -674,6 +674,11 @@ asap@^2.0.0: + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + ++asn1@0.2.3: ++ version "0.2.3" ++ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" ++ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= ++ + asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" +@@ -681,6 +686,11 @@ asn1@~0.2.3: + dependencies: + safer-buffer "~2.1.0" + ++assert-plus@0.1.5: ++ version "0.1.5" ++ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" ++ integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= ++ + assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +@@ -779,6 +789,13 @@ backo2@1.0.2: + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + ++backoff@^2.5.0: ++ version "2.5.0" ++ resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" ++ integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= ++ dependencies: ++ precond "0.2" ++ + balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +@@ -1186,6 +1203,16 @@ bull@^3.4.2: + semver "^5.6.0" + uuid "^3.2.1" + ++bunyan@^1.8.3: ++ version "1.8.12" ++ resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797" ++ integrity sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c= ++ optionalDependencies: ++ dtrace-provider "~0.8" ++ moment "^2.10.6" ++ mv "~2" ++ safe-json-stringify "~1" ++ + busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" +@@ -1966,7 +1993,7 @@ d@1: + dependencies: + es5-ext "^0.10.9" + +-dashdash@^1.12.0: ++dashdash@^1.12.0, dashdash@^1.14.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= +@@ -2292,6 +2319,13 @@ double-ended-queue@^2.1.0-0: + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw= + ++dtrace-provider@~0.8: ++ version "0.8.7" ++ resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04" ++ integrity sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= ++ dependencies: ++ nan "^2.10.0" ++ + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" +@@ -2864,6 +2898,11 @@ extglob@^2.0.4: + snapdragon "^0.8.1" + to-regex "^3.0.1" + ++extsprintf@1.2.0: ++ version "1.2.0" ++ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529" ++ integrity sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk= ++ + extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +@@ -3350,6 +3389,17 @@ glob@7.1.2: + once "^1.3.0" + path-is-absolute "^1.0.0" + ++glob@^6.0.1: ++ version "6.0.4" ++ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" ++ integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= ++ dependencies: ++ inflight "^1.0.4" ++ inherits "2" ++ minimatch "2 || 3" ++ once "^1.3.0" ++ path-is-absolute "^1.0.0" ++ + glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" +@@ -4522,6 +4572,30 @@ lcid@^2.0.0: + dependencies: + invert-kv "^2.0.0" + ++ldap-filter@0.2.2: ++ version "0.2.2" ++ resolved "https://registry.yarnpkg.com/ldap-filter/-/ldap-filter-0.2.2.tgz#f2b842be0b86da3352798505b31ebcae590d77d0" ++ integrity sha1-8rhCvguG2jNSeYUFsx68rlkNd9A= ++ dependencies: ++ assert-plus "0.1.5" ++ ++ldapjs@^1.0.2: ++ version "1.0.2" ++ resolved "https://registry.yarnpkg.com/ldapjs/-/ldapjs-1.0.2.tgz#544ff7032b7b83c68f0701328d9297aa694340f9" ++ integrity sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk= ++ dependencies: ++ asn1 "0.2.3" ++ assert-plus "^1.0.0" ++ backoff "^2.5.0" ++ bunyan "^1.8.3" ++ dashdash "^1.14.0" ++ ldap-filter "0.2.2" ++ once "^1.4.0" ++ vasync "^1.6.4" ++ verror "^1.8.1" ++ optionalDependencies: ++ dtrace-provider "~0.8" ++ + leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" +@@ -5186,7 +5260,7 @@ minimalistic-assert@^1.0.1: + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +-minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: ++"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +@@ -5299,6 +5373,11 @@ moment-timezone@^0.5.14, moment-timezone@^0.5.23: + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= + ++moment@^2.10.6: ++ version "2.24.0" ++ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" ++ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== ++ + morgan@^1.5.3: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" +@@ -5394,6 +5473,15 @@ mute-stream@~0.0.4: + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + ++mv@~2: ++ version "2.1.1" ++ resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" ++ integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= ++ dependencies: ++ mkdirp "~0.5.1" ++ ncp "~2.0.0" ++ rimraf "~2.4.0" ++ + nan@2.11.1, nan@^2.10.0, nan@^2.11.1, nan@^2.9.2: + version "2.11.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" +@@ -5431,6 +5519,11 @@ ncp@1.0.x: + resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246" + integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY= + ++ncp@~2.0.0: ++ version "2.0.0" ++ resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" ++ integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= ++ + needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" +@@ -6520,6 +6613,11 @@ prebuild-install@^5.2.0: + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + ++precond@0.2: ++ version "0.2.3" ++ resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" ++ integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= ++ + prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +@@ -7141,6 +7239,13 @@ rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.4.2, rimraf@^2.5.2, rimraf@^2.5 + dependencies: + glob "^7.0.5" + ++rimraf@~2.4.0: ++ version "2.4.5" ++ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" ++ integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= ++ dependencies: ++ glob "^6.0.1" ++ + run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +@@ -7197,6 +7302,11 @@ safe-buffer@5.1.2, safe-buffer@^5.0.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, s + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + ++safe-json-stringify@~1: ++ version "1.2.0" ++ resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" ++ integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== ++ + safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" +@@ -8857,7 +8967,14 @@ vary@~1.0.1: + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + integrity sha1-meSYFWaihhGN+yuBc1ffeZM3bRA= + +-verror@1.10.0: ++vasync@^1.6.4: ++ version "1.6.4" ++ resolved "https://registry.yarnpkg.com/vasync/-/vasync-1.6.4.tgz#dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f" ++ integrity sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8= ++ dependencies: ++ verror "1.6.0" ++ ++verror@1.10.0, verror@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= +@@ -8866,6 +8983,13 @@ verror@1.10.0: + core-util-is "1.0.2" + extsprintf "^1.2.0" + ++verror@1.6.0: ++ version "1.6.0" ++ resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5" ++ integrity sha1-fROyex+swuLakEBetepuW90lLqU= ++ dependencies: ++ extsprintf "1.2.0" ++ + videostream@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/videostream/-/videostream-2.6.0.tgz#7f0b2b84bc457c12cfe599aa2345f5cc06241ab6" diff --git a/pkgs/webapps/peertube/peertube.json b/pkgs/webapps/peertube/peertube.json new file mode 100644 index 00000000..fd2ef7db --- /dev/null +++ b/pkgs/webapps/peertube/peertube.json @@ -0,0 +1,15 @@ +{ + "tag": "v1.2.0", + "meta": { + "name": "peertube", + "url": "https://github.com/Chocobozzz/PeerTube", + "branch": "refs/tags/v1.2.0" + }, + "github": { + "owner": "Chocobozzz", + "repo": "PeerTube", + "rev": "5cc304b909a70d8cbfe9cb5e0c46b4fe7b3d8ea2", + "sha256": "0fpzp9qh3ns3bg2w7f50b5schg30swyhyhk1zd311fy27mdmza6z", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/peertube/sendmail.patch b/pkgs/webapps/peertube/sendmail.patch new file mode 100644 index 00000000..b42bc49b --- /dev/null +++ b/pkgs/webapps/peertube/sendmail.patch @@ -0,0 +1,121 @@ +commit 677374d59c6aa2cb8145da3cd9c17fe05fd9b149 +Author: Ismaël Bouya +Date: Wed Feb 13 12:16:27 2019 +0100 + + Add sendmail + +diff --git a/config/production.yaml.example b/config/production.yaml.example +index bb5ac251..4583f1f5 100644 +--- a/config/production.yaml.example ++++ b/config/production.yaml.example +@@ -46,6 +46,8 @@ ldap: + + # SMTP server to send emails + smtp: ++ transport: smtp ++ sendmail: null + hostname: null + port: 465 # If you use StartTLS: 587 + username: null +diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts +index fb21df37..c551b4f9 100644 +--- a/server/initializers/constants.ts ++++ b/server/initializers/constants.ts +@@ -188,6 +188,8 @@ const CONFIG = { + USER_FILTER: config.has('ldap.user_filter') ? config.get('ldap.user_filter') : '(|(email=%username%)(uid=%username%))' + }, + SMTP: { ++ TRANSPORT: config.has('smtp.transport') ? config.get('smtp.transport') : 'smtp', ++ SENDMAIL: config.has('smtp.sendmail') ? config.get('smtp.sendmail') : null, + HOSTNAME: config.get('smtp.hostname'), + PORT: config.get('smtp.port'), + USERNAME: config.get('smtp.username'), +diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts +index f384a254..ec6e249b 100644 +--- a/server/lib/emailer.ts ++++ b/server/lib/emailer.ts +@@ -27,33 +27,41 @@ class Emailer { + this.initialized = true + + if (Emailer.isEnabled()) { +- logger.info('Using %s:%s as SMTP server.', CONFIG.SMTP.HOSTNAME, CONFIG.SMTP.PORT) +- +- let tls +- if (CONFIG.SMTP.CA_FILE) { +- tls = { +- ca: [ readFileSync(CONFIG.SMTP.CA_FILE) ] ++ if (CONFIG.SMTP.TRANSPORT === 'smtp') { ++ logger.info('Using %s:%s as SMTP server.', CONFIG.SMTP.HOSTNAME, CONFIG.SMTP.PORT) ++ ++ let tls ++ if (CONFIG.SMTP.CA_FILE) { ++ tls = { ++ ca: [ readFileSync(CONFIG.SMTP.CA_FILE) ] ++ } + } +- } + +- let auth +- if (CONFIG.SMTP.USERNAME && CONFIG.SMTP.PASSWORD) { +- auth = { +- user: CONFIG.SMTP.USERNAME, +- pass: CONFIG.SMTP.PASSWORD ++ let auth ++ if (CONFIG.SMTP.USERNAME && CONFIG.SMTP.PASSWORD) { ++ auth = { ++ user: CONFIG.SMTP.USERNAME, ++ pass: CONFIG.SMTP.PASSWORD ++ } + } +- } + +- this.transporter = createTransport({ +- host: CONFIG.SMTP.HOSTNAME, +- port: CONFIG.SMTP.PORT, +- secure: CONFIG.SMTP.TLS, +- debug: CONFIG.LOG.LEVEL === 'debug', +- logger: bunyanLogger as any, +- ignoreTLS: CONFIG.SMTP.DISABLE_STARTTLS, +- tls, +- auth +- }) ++ this.transporter = createTransport({ ++ host: CONFIG.SMTP.HOSTNAME, ++ port: CONFIG.SMTP.PORT, ++ secure: CONFIG.SMTP.TLS, ++ debug: CONFIG.LOG.LEVEL === 'debug', ++ logger: bunyanLogger as any, ++ ignoreTLS: CONFIG.SMTP.DISABLE_STARTTLS, ++ tls, ++ auth ++ }) ++ } else { // sendmail ++ this.transporter = createTransport({ ++ sendmail: true, ++ newline: 'unix', ++ path: CONFIG.SMTP.SENDMAIL, ++ }) ++ } + } else { + if (!isTestInstance()) { + logger.error('Cannot use SMTP server because of lack of configuration. PeerTube will not be able to send mails!') +@@ -62,11 +70,17 @@ class Emailer { + } + + static isEnabled () { +- return !!CONFIG.SMTP.HOSTNAME && !!CONFIG.SMTP.PORT ++ if (CONFIG.SMTP.TRANSPORT === 'sendmail') { ++ return !!CONFIG.SMTP.SENDMAIL ++ } else if (CONFIG.SMTP.TRANSPORT === 'smtp') { ++ return !!CONFIG.SMTP.HOSTNAME && !!CONFIG.SMTP.PORT ++ } else { ++ return false ++ } + } + + async checkConnectionOrDie () { +- if (!this.transporter) return ++ if (!this.transporter || CONFIG.SMTP.TRANSPORT !== 'smtp') return + + logger.info('Testing SMTP server...') + diff --git a/pkgs/webapps/peertube/yarn-packages.nix b/pkgs/webapps/peertube/yarn-packages.nix new file mode 100644 index 00000000..d99dfd3d --- /dev/null +++ b/pkgs/webapps/peertube/yarn-packages.nix @@ -0,0 +1,11552 @@ +{fetchurl, linkFarm}: rec { + offline_cache = linkFarm "offline" packages; + packages = [ + + { + name = "_iamstarkov_listr_update_renderer___listr_update_renderer_0.4.1.tgz"; + path = fetchurl { + name = "_iamstarkov_listr_update_renderer___listr_update_renderer_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz"; + sha1 = "d7c48092a2dcf90fd672b6c8b458649cb350c77e"; + }; + } + + { + name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz"; + path = fetchurl { + name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz"; + sha1 = "ecdf48d532c58ea477acfcab80348424f8d0662f"; + }; + } + + { + name = "_types_async_lock___async_lock_1.1.0.tgz"; + path = fetchurl { + name = "_types_async_lock___async_lock_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/@types/async-lock/-/async-lock-1.1.0.tgz"; + sha1 = "002b1ebeebd382aff66b68bed70a74c7bdd06e3e"; + }; + } + + { + name = "_types_async___async_2.0.50.tgz"; + path = fetchurl { + name = "_types_async___async_2.0.50.tgz"; + url = "https://registry.yarnpkg.com/@types/async/-/async-2.0.50.tgz"; + sha1 = "117540e026d64e1846093abbd5adc7e27fda7bcb"; + }; + } + + { + name = "_types_bcrypt___bcrypt_3.0.0.tgz"; + path = fetchurl { + name = "_types_bcrypt___bcrypt_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/@types/bcrypt/-/bcrypt-3.0.0.tgz"; + sha1 = "851489a9065a067cb7f3c9cbe4ce9bed8bba0876"; + }; + } + + { + name = "_types_bittorrent_protocol___bittorrent_protocol_2.2.2.tgz"; + path = fetchurl { + name = "_types_bittorrent_protocol___bittorrent_protocol_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/@types/bittorrent-protocol/-/bittorrent-protocol-2.2.2.tgz"; + sha1 = "169e9633e1bd18e6b830d11cf42e611b1972cb83"; + }; + } + + { + name = "_types_bluebird___bluebird_3.5.21.tgz"; + path = fetchurl { + name = "_types_bluebird___bluebird_3.5.21.tgz"; + url = "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.21.tgz"; + sha1 = "567615589cc913e84a28ecf9edb031732bdf2634"; + }; + } + + { + name = "_types_bluebird___bluebird_3.5.18.tgz"; + path = fetchurl { + name = "_types_bluebird___bluebird_3.5.18.tgz"; + url = "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz"; + sha1 = "6a60435d4663e290f3709898a4f75014f279c4d6"; + }; + } + + { + name = "_types_body_parser___body_parser_1.17.0.tgz"; + path = fetchurl { + name = "_types_body_parser___body_parser_1.17.0.tgz"; + url = "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz"; + sha1 = "9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"; + }; + } + + { + name = "_types_bull___bull_3.4.0.tgz"; + path = fetchurl { + name = "_types_bull___bull_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/@types/bull/-/bull-3.4.0.tgz"; + sha1 = "18ffefefa4dd1cfbdbdc8ca7df56c934459f6b9d"; + }; + } + + { + name = "_types_bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "_types_bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/@types/bytes/-/bytes-3.0.0.tgz"; + sha1 = "549eeacd0a8fecfaa459334583a4edcee738e6db"; + }; + } + + { + name = "_types_caseless___caseless_0.12.1.tgz"; + path = fetchurl { + name = "_types_caseless___caseless_0.12.1.tgz"; + url = "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz"; + sha1 = "9794c69c8385d0192acc471a540d1f8e0d16218a"; + }; + } + + { + name = "_types_chai_json_schema___chai_json_schema_1.4.3.tgz"; + path = fetchurl { + name = "_types_chai_json_schema___chai_json_schema_1.4.3.tgz"; + url = "https://registry.yarnpkg.com/@types/chai-json-schema/-/chai-json-schema-1.4.3.tgz"; + sha1 = "1dd1e88ae911dd6e6e1c3c2d0e0397328aab0bfb"; + }; + } + + { + name = "_types_chai_xml___chai_xml_0.3.1.tgz"; + path = fetchurl { + name = "_types_chai_xml___chai_xml_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/@types/chai-xml/-/chai-xml-0.3.1.tgz"; + sha1 = "a9cc5812bd67e9c9221d1e9b4dfb0cca797fd40a"; + }; + } + + { + name = "_types_chai___chai_4.1.7.tgz"; + path = fetchurl { + name = "_types_chai___chai_4.1.7.tgz"; + url = "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz"; + sha1 = "1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a"; + }; + } + + { + name = "_types_config___config_0.0.34.tgz"; + path = fetchurl { + name = "_types_config___config_0.0.34.tgz"; + url = "https://registry.yarnpkg.com/@types/config/-/config-0.0.34.tgz"; + sha1 = "123f91bdb5afdd702294b9de9ca04d9ea11137b0"; + }; + } + + { + name = "_types_connect___connect_3.4.32.tgz"; + path = fetchurl { + name = "_types_connect___connect_3.4.32.tgz"; + url = "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz"; + sha1 = "aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"; + }; + } + + { + name = "_types_continuation_local_storage___continuation_local_storage_3.2.1.tgz"; + path = fetchurl { + name = "_types_continuation_local_storage___continuation_local_storage_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/@types/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz"; + sha1 = "a33e0df9dce9b424d1c98fc4fdebd8578dceec7e"; + }; + } + + { + name = "_types_cookiejar___cookiejar_2.1.0.tgz"; + path = fetchurl { + name = "_types_cookiejar___cookiejar_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.0.tgz"; + sha1 = "4b7daf2c51696cfc70b942c11690528229d1a1ce"; + }; + } + + { + name = "_types_events___events_1.2.0.tgz"; + path = fetchurl { + name = "_types_events___events_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz"; + sha1 = "81a6731ce4df43619e5c8c945383b3e62a89ea86"; + }; + } + + { + name = "_types_express_rate_limit___express_rate_limit_2.9.3.tgz"; + path = fetchurl { + name = "_types_express_rate_limit___express_rate_limit_2.9.3.tgz"; + url = "https://registry.yarnpkg.com/@types/express-rate-limit/-/express-rate-limit-2.9.3.tgz"; + sha1 = "e83a548bf251ad12ca49055c22d3f2da4e16b62d"; + }; + } + + { + name = "_types_express_serve_static_core___express_serve_static_core_4.16.0.tgz"; + path = fetchurl { + name = "_types_express_serve_static_core___express_serve_static_core_4.16.0.tgz"; + url = "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz"; + sha1 = "fdfe777594ddc1fe8eb8eccce52e261b496e43e7"; + }; + } + + { + name = "_types_express___express_4.16.0.tgz"; + path = fetchurl { + name = "_types_express___express_4.16.0.tgz"; + url = "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz"; + sha1 = "6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19"; + }; + } + + { + name = "_types_fluent_ffmpeg___fluent_ffmpeg_2.1.8.tgz"; + path = fetchurl { + name = "_types_fluent_ffmpeg___fluent_ffmpeg_2.1.8.tgz"; + url = "https://registry.yarnpkg.com/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.8.tgz"; + sha1 = "a9ffff2140d641ec898ebdddaa1e6e7e962d7943"; + }; + } + + { + name = "_types_form_data___form_data_2.2.1.tgz"; + path = fetchurl { + name = "_types_form_data___form_data_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz"; + sha1 = "ee2b3b8eaa11c0938289953606b745b738c54b1e"; + }; + } + + { + name = "_types_fs_extra___fs_extra_5.0.4.tgz"; + path = fetchurl { + name = "_types_fs_extra___fs_extra_5.0.4.tgz"; + url = "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.4.tgz"; + sha1 = "b971134d162cc0497d221adde3dbb67502225599"; + }; + } + + { + name = "_types_geojson___geojson_1.0.6.tgz"; + path = fetchurl { + name = "_types_geojson___geojson_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz"; + sha1 = "3e02972728c69248c2af08d60a48cbb8680fffdf"; + }; + } + + { + name = "_types_ioredis___ioredis_4.0.4.tgz"; + path = fetchurl { + name = "_types_ioredis___ioredis_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.0.4.tgz"; + sha1 = "c0a809064c05e4c2663803128d46042e73c92558"; + }; + } + + { + name = "_types_libxmljs___libxmljs_0.18.2.tgz"; + path = fetchurl { + name = "_types_libxmljs___libxmljs_0.18.2.tgz"; + url = "https://registry.yarnpkg.com/@types/libxmljs/-/libxmljs-0.18.2.tgz"; + sha1 = "c424173a07477a7552173d7c779d5ffe77dd8efc"; + }; + } + + { + name = "_types_lodash___lodash_4.14.118.tgz"; + path = fetchurl { + name = "_types_lodash___lodash_4.14.118.tgz"; + url = "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.118.tgz"; + sha1 = "247bab39bfcc6d910d4927c6e06cbc70ec376f27"; + }; + } + + { + name = "_types_magnet_uri___magnet_uri_5.1.1.tgz"; + path = fetchurl { + name = "_types_magnet_uri___magnet_uri_5.1.1.tgz"; + url = "https://registry.yarnpkg.com/@types/magnet-uri/-/magnet-uri-5.1.1.tgz"; + sha1 = "861aaf64c92a3137dd848fefc55cd352a8ea851a"; + }; + } + + { + name = "_types_maildev___maildev_0.0.1.tgz"; + path = fetchurl { + name = "_types_maildev___maildev_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/@types/maildev/-/maildev-0.0.1.tgz"; + sha1 = "9fe4fa05610f6c6afc10224bcca6b67bc3c56fc0"; + }; + } + + { + name = "_types_memoizee___memoizee_0.4.2.tgz"; + path = fetchurl { + name = "_types_memoizee___memoizee_0.4.2.tgz"; + url = "https://registry.yarnpkg.com/@types/memoizee/-/memoizee-0.4.2.tgz"; + sha1 = "a500158999a8144a9b46cf9a9fb49b15f1853573"; + }; + } + + { + name = "_types_mime___mime_2.0.0.tgz"; + path = fetchurl { + name = "_types_mime___mime_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz"; + sha1 = "5a7306e367c539b9f6543499de8dd519fac37a8b"; + }; + } + + { + name = "_types_mkdirp___mkdirp_0.5.2.tgz"; + path = fetchurl { + name = "_types_mkdirp___mkdirp_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz"; + sha1 = "503aacfe5cc2703d5484326b1b27efa67a339c1f"; + }; + } + + { + name = "_types_mocha___mocha_5.2.5.tgz"; + path = fetchurl { + name = "_types_mocha___mocha_5.2.5.tgz"; + url = "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.5.tgz"; + sha1 = "8a4accfc403c124a0bafe8a9fc61a05ec1032073"; + }; + } + + { + name = "_types_morgan___morgan_1.7.35.tgz"; + path = fetchurl { + name = "_types_morgan___morgan_1.7.35.tgz"; + url = "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.7.35.tgz"; + sha1 = "6358f502931cc2583d7a94248c41518baa688494"; + }; + } + + { + name = "_types_multer___multer_1.3.7.tgz"; + path = fetchurl { + name = "_types_multer___multer_1.3.7.tgz"; + url = "https://registry.yarnpkg.com/@types/multer/-/multer-1.3.7.tgz"; + sha1 = "9fe1de9f44f401ff2eaf0d4468cf16935a9c6866"; + }; + } + + { + name = "_types_node___node_10.12.12.tgz"; + path = fetchurl { + name = "_types_node___node_10.12.12.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz"; + sha1 = "e15a9d034d9210f00320ef718a50c4a799417c47"; + }; + } + + { + name = "_types_node___node_6.0.41.tgz"; + path = fetchurl { + name = "_types_node___node_6.0.41.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-6.0.41.tgz"; + sha1 = "578cf53aaec65887bcaf16792f8722932e8ff8ea"; + }; + } + + { + name = "_types_nodemailer___nodemailer_4.6.5.tgz"; + path = fetchurl { + name = "_types_nodemailer___nodemailer_4.6.5.tgz"; + url = "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-4.6.5.tgz"; + sha1 = "8bb799202f8cfcc8200a1c1627f6a8a74fe71da6"; + }; + } + + { + name = "_types_oauth2_server___oauth2_server_3.0.10.tgz"; + path = fetchurl { + name = "_types_oauth2_server___oauth2_server_3.0.10.tgz"; + url = "https://registry.yarnpkg.com/@types/oauth2-server/-/oauth2-server-3.0.10.tgz"; + sha1 = "ea671a6ad3d02062aac5f7c1ba1fb9c468314db0"; + }; + } + + { + name = "_types_parse_torrent_file___parse_torrent_file_4.0.1.tgz"; + path = fetchurl { + name = "_types_parse_torrent_file___parse_torrent_file_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/@types/parse-torrent-file/-/parse-torrent-file-4.0.1.tgz"; + sha1 = "056a6c18f3fac0cd7c6c74540f00496a3225976b"; + }; + } + + { + name = "_types_parse_torrent___parse_torrent_5.8.2.tgz"; + path = fetchurl { + name = "_types_parse_torrent___parse_torrent_5.8.2.tgz"; + url = "https://registry.yarnpkg.com/@types/parse-torrent/-/parse-torrent-5.8.2.tgz"; + sha1 = "53ab880e38ced2005a79948f0df0c8762539323e"; + }; + } + + { + name = "_types_pem___pem_1.9.3.tgz"; + path = fetchurl { + name = "_types_pem___pem_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/@types/pem/-/pem-1.9.3.tgz"; + sha1 = "0c864c8b79e43fef6367db895f60fd1edd10e86c"; + }; + } + + { + name = "_types_range_parser___range_parser_1.2.2.tgz"; + path = fetchurl { + name = "_types_range_parser___range_parser_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.2.tgz"; + sha1 = "fa8e1ad1d474688a757140c91de6dace6f4abc8d"; + }; + } + + { + name = "_types_redis___redis_2.8.8.tgz"; + path = fetchurl { + name = "_types_redis___redis_2.8.8.tgz"; + url = "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.8.tgz"; + sha1 = "70855e79a6020080cca3cb5f1f5ee7f11b49a979"; + }; + } + + { + name = "_types_request___request_2.48.1.tgz"; + path = fetchurl { + name = "_types_request___request_2.48.1.tgz"; + url = "https://registry.yarnpkg.com/@types/request/-/request-2.48.1.tgz"; + sha1 = "e402d691aa6670fbbff1957b15f1270230ab42fa"; + }; + } + + { + name = "_types_sequelize___sequelize_4.27.24.tgz"; + path = fetchurl { + name = "_types_sequelize___sequelize_4.27.24.tgz"; + url = "https://registry.yarnpkg.com/@types/sequelize/-/sequelize-4.27.24.tgz"; + sha1 = "7d593c062c368f570c68b0217f5c1d4c892ead48"; + }; + } + + { + name = "_types_serve_static___serve_static_1.13.2.tgz"; + path = fetchurl { + name = "_types_serve_static___serve_static_1.13.2.tgz"; + url = "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz"; + sha1 = "f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"; + }; + } + + { + name = "_types_sharp___sharp_0.21.0.tgz"; + path = fetchurl { + name = "_types_sharp___sharp_0.21.0.tgz"; + url = "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.21.0.tgz"; + sha1 = "e364b345c70e5924a5c626aaccaa236e0cfc2455"; + }; + } + + { + name = "_types_simple_peer___simple_peer_6.1.5.tgz"; + path = fetchurl { + name = "_types_simple_peer___simple_peer_6.1.5.tgz"; + url = "https://registry.yarnpkg.com/@types/simple-peer/-/simple-peer-6.1.5.tgz"; + sha1 = "9353f84cefd052a9684b9a5662c983fc2bcfab41"; + }; + } + + { + name = "_types_socket.io___socket.io_2.1.2.tgz"; + path = fetchurl { + name = "_types_socket.io___socket.io_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.2.tgz"; + sha1 = "7165c2587cc3b86b44aa78e2a0060140551de211"; + }; + } + + { + name = "_types_superagent___superagent_3.8.4.tgz"; + path = fetchurl { + name = "_types_superagent___superagent_3.8.4.tgz"; + url = "https://registry.yarnpkg.com/@types/superagent/-/superagent-3.8.4.tgz"; + sha1 = "24a5973c7d1a9c024b4bbda742a79267c33fb86a"; + }; + } + + { + name = "_types_supertest___supertest_2.0.7.tgz"; + path = fetchurl { + name = "_types_supertest___supertest_2.0.7.tgz"; + url = "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.7.tgz"; + sha1 = "46ff6508075cd4519736be060f0d6331a5c8ca7b"; + }; + } + + { + name = "_types_tough_cookie___tough_cookie_2.3.4.tgz"; + path = fetchurl { + name = "_types_tough_cookie___tough_cookie_2.3.4.tgz"; + url = "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.4.tgz"; + sha1 = "821878b81bfab971b93a265a561d54ea61f9059f"; + }; + } + + { + name = "_types_tv4___tv4_1.2.29.tgz"; + path = fetchurl { + name = "_types_tv4___tv4_1.2.29.tgz"; + url = "https://registry.yarnpkg.com/@types/tv4/-/tv4-1.2.29.tgz"; + sha1 = "4c6d2222b03245dd2104f4fd67f54d1658985911"; + }; + } + + { + name = "_types_validator___validator_9.4.3.tgz"; + path = fetchurl { + name = "_types_validator___validator_9.4.3.tgz"; + url = "https://registry.yarnpkg.com/@types/validator/-/validator-9.4.3.tgz"; + sha1 = "11321eae0546b20f13020131ff890c294df72ecb"; + }; + } + + { + name = "_types_webtorrent___webtorrent_0.98.4.tgz"; + path = fetchurl { + name = "_types_webtorrent___webtorrent_0.98.4.tgz"; + url = "https://registry.yarnpkg.com/@types/webtorrent/-/webtorrent-0.98.4.tgz"; + sha1 = "cf8dbe22e3d5cf6915305f7f970b52bca01bf8b4"; + }; + } + + { + name = "_types_ws___ws_6.0.1.tgz"; + path = fetchurl { + name = "_types_ws___ws_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.1.tgz"; + sha1 = "ca7a3f3756aa12f62a0a62145ed14c6db25d5a28"; + }; + } + + { + name = "JSONStream___JSONStream_1.3.5.tgz"; + path = fetchurl { + name = "JSONStream___JSONStream_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz"; + sha1 = "3208c1f08d3a4d99261ab64f92302bc15e111ca0"; + }; + } + + { + name = "abbrev___abbrev_1.1.1.tgz"; + path = fetchurl { + name = "abbrev___abbrev_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz"; + sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8"; + }; + } + + { + name = "accepts___accepts_1.3.3.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.3.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz"; + sha1 = "c3ca7434938648c3e0d9c1e328dd68b622c284ca"; + }; + } + + { + name = "accepts___accepts_1.2.13.tgz"; + path = fetchurl { + name = "accepts___accepts_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz"; + sha1 = "e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea"; + }; + } + + { + name = "accepts___accepts_1.3.5.tgz"; + path = fetchurl { + name = "accepts___accepts_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz"; + sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2"; + }; + } + + { + name = "acorn_jsx___acorn_jsx_3.0.1.tgz"; + path = fetchurl { + name = "acorn_jsx___acorn_jsx_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz"; + sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b"; + }; + } + + { + name = "acorn___acorn_3.3.0.tgz"; + path = fetchurl { + name = "acorn___acorn_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz"; + sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; + }; + } + + { + name = "acorn___acorn_5.7.3.tgz"; + path = fetchurl { + name = "acorn___acorn_5.7.3.tgz"; + url = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz"; + sha1 = "67aa231bf8812974b85235a96771eb6bd07ea279"; + }; + } + + { + name = "addr_to_ip_port___addr_to_ip_port_1.5.1.tgz"; + path = fetchurl { + name = "addr_to_ip_port___addr_to_ip_port_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/addr-to-ip-port/-/addr-to-ip-port-1.5.1.tgz"; + sha1 = "bfada13fd6aeeeac19f1e9f7d84b4bbab45e5208"; + }; + } + + { + name = "addressparser___addressparser_1.0.1.tgz"; + path = fetchurl { + name = "addressparser___addressparser_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz"; + sha1 = "47afbe1a2a9262191db6838e4fd1d39b40821746"; + }; + } + + { + name = "after___after_0.8.2.tgz"; + path = fetchurl { + name = "after___after_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz"; + sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f"; + }; + } + + { + name = "agent_base___agent_base_4.2.1.tgz"; + path = fetchurl { + name = "agent_base___agent_base_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz"; + sha1 = "d89e5999f797875674c07d87f260fc41e83e8ca9"; + }; + } + + { + name = "agentkeepalive___agentkeepalive_3.5.2.tgz"; + path = fetchurl { + name = "agentkeepalive___agentkeepalive_3.5.2.tgz"; + url = "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz"; + sha1 = "a113924dd3fa24a0bc3b78108c450c2abee00f67"; + }; + } + + { + name = "ajv_keywords___ajv_keywords_1.5.1.tgz"; + path = fetchurl { + name = "ajv_keywords___ajv_keywords_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz"; + sha1 = "314dd0a4b3368fad3dfcdc54ede6171b886daf3c"; + }; + } + + { + name = "ajv___ajv_4.11.8.tgz"; + path = fetchurl { + name = "ajv___ajv_4.11.8.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz"; + sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; + }; + } + + { + name = "ajv___ajv_6.6.1.tgz"; + path = fetchurl { + name = "ajv___ajv_6.6.1.tgz"; + url = "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz"; + sha1 = "6360f5ed0d80f232cc2b294c362d5dc2e538dd61"; + }; + } + + { + name = "ansi_align___ansi_align_2.0.0.tgz"; + path = fetchurl { + name = "ansi_align___ansi_align_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz"; + sha1 = "c36aeccba563b89ceb556f3690f0b1d9e3547f7f"; + }; + } + + { + name = "ansi_escapes___ansi_escapes_1.4.0.tgz"; + path = fetchurl { + name = "ansi_escapes___ansi_escapes_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz"; + sha1 = "d3a8a83b319aa67793662b13e761c7911422306e"; + }; + } + + { + name = "ansi_escapes___ansi_escapes_3.1.0.tgz"; + path = fetchurl { + name = "ansi_escapes___ansi_escapes_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz"; + sha1 = "f73207bb81207d75fd6c83f125af26eea378ca30"; + }; + } + + { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + } + + { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + path = fetchurl { + name = "ansi_regex___ansi_regex_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; + sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; + }; + } + + { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + } + + { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + path = fetchurl { + name = "ansi_styles___ansi_styles_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d"; + }; + } + + { + name = "ansicolors___ansicolors_0.3.2.tgz"; + path = fetchurl { + name = "ansicolors___ansicolors_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz"; + sha1 = "665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"; + }; + } + + { + name = "ansistyles___ansistyles_0.1.3.tgz"; + path = fetchurl { + name = "ansistyles___ansistyles_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz"; + sha1 = "5de60415bda071bb37127854c864f41b23254539"; + }; + } + + { + name = "any_observable___any_observable_0.3.0.tgz"; + path = fetchurl { + name = "any_observable___any_observable_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz"; + sha1 = "af933475e5806a67d0d7df090dd5e8bef65d119b"; + }; + } + + { + name = "anymatch___anymatch_2.0.0.tgz"; + path = fetchurl { + name = "anymatch___anymatch_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"; + sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"; + }; + } + + { + name = "append_field___append_field_1.0.0.tgz"; + path = fetchurl { + name = "append_field___append_field_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz"; + sha1 = "1e3440e915f0b1203d23748e78edd7b9b5b43e56"; + }; + } + + { + name = "application_config_path___application_config_path_0.1.0.tgz"; + path = fetchurl { + name = "application_config_path___application_config_path_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz"; + sha1 = "193c5f0a86541a4c66fba1e2dc38583362ea5e8f"; + }; + } + + { + name = "application_config___application_config_1.0.1.tgz"; + path = fetchurl { + name = "application_config___application_config_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/application-config/-/application-config-1.0.1.tgz"; + sha1 = "5aa2e2a5ed6abd2e5d1d473d3596f574044fe9e7"; + }; + } + + { + name = "aproba___aproba_1.2.0.tgz"; + path = fetchurl { + name = "aproba___aproba_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; + sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; + }; + } + + { + name = "aproba___aproba_2.0.0.tgz"; + path = fetchurl { + name = "aproba___aproba_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz"; + sha1 = "52520b8ae5b569215b354efc0caa3fe1e45a8adc"; + }; + } + + { + name = "archy___archy_1.0.0.tgz"; + path = fetchurl { + name = "archy___archy_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz"; + sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"; + }; + } + + { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + path = fetchurl { + name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; + sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21"; + }; + } + + { + name = "argparse___argparse_1.0.10.tgz"; + path = fetchurl { + name = "argparse___argparse_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; + sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; + }; + } + + { + name = "arr_diff___arr_diff_4.0.0.tgz"; + path = fetchurl { + name = "arr_diff___arr_diff_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; + sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; + }; + } + + { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + path = fetchurl { + name = "arr_flatten___arr_flatten_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; + sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; + }; + } + + { + name = "arr_union___arr_union_3.1.0.tgz"; + path = fetchurl { + name = "arr_union___arr_union_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; + sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; + }; + } + + { + name = "array_flatten___array_flatten_1.1.1.tgz"; + path = fetchurl { + name = "array_flatten___array_flatten_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + } + + { + name = "array_union___array_union_1.0.2.tgz"; + path = fetchurl { + name = "array_union___array_union_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"; + sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; + }; + } + + { + name = "array_uniq___array_uniq_1.0.3.tgz"; + path = fetchurl { + name = "array_uniq___array_uniq_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; + sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; + }; + } + + { + name = "array_unique___array_unique_0.3.2.tgz"; + path = fetchurl { + name = "array_unique___array_unique_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; + sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; + }; + } + + { + name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + path = fetchurl { + name = "arraybuffer.slice___arraybuffer.slice_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz"; + sha1 = "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"; + }; + } + + { + name = "arraybuffer.slice___arraybuffer.slice_0.0.7.tgz"; + path = fetchurl { + name = "arraybuffer.slice___arraybuffer.slice_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz"; + sha1 = "3bbc4275dd584cc1b10809b89d4e8b63a69e7675"; + }; + } + + { + name = "arrify___arrify_1.0.1.tgz"; + path = fetchurl { + name = "arrify___arrify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz"; + sha1 = "898508da2226f380df904728456849c1501a4b0d"; + }; + } + + { + name = "asap___asap_2.0.6.tgz"; + path = fetchurl { + name = "asap___asap_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"; + sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46"; + }; + } + + { + name = "asn1___asn1_0.2.3.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz"; + sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86"; + }; + } + + { + name = "asn1___asn1_0.2.4.tgz"; + path = fetchurl { + name = "asn1___asn1_0.2.4.tgz"; + url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz"; + sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136"; + }; + } + + { + name = "assert_plus___assert_plus_0.1.5.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz"; + sha1 = "ee74009413002d84cec7219c6ac811812e723160"; + }; + } + + { + name = "assert_plus___assert_plus_1.0.0.tgz"; + path = fetchurl { + name = "assert_plus___assert_plus_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + } + + { + name = "assertion_error___assertion_error_1.0.0.tgz"; + path = fetchurl { + name = "assertion_error___assertion_error_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz"; + sha1 = "c7f85438fdd466bc7ca16ab90c81513797a5d23b"; + }; + } + + { + name = "assertion_error___assertion_error_1.1.0.tgz"; + path = fetchurl { + name = "assertion_error___assertion_error_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz"; + sha1 = "e60b6b0e8f301bd97e5375215bda406c85118c0b"; + }; + } + + { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + path = fetchurl { + name = "assign_symbols___assign_symbols_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; + sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; + }; + } + + { + name = "async_each___async_each_1.0.1.tgz"; + path = fetchurl { + name = "async_each___async_each_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz"; + sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d"; + }; + } + + { + name = "async_limiter___async_limiter_1.0.0.tgz"; + path = fetchurl { + name = "async_limiter___async_limiter_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz"; + sha1 = "78faed8c3d074ab81f22b4e985d79e8738f720f8"; + }; + } + + { + name = "async_lock___async_lock_1.1.3.tgz"; + path = fetchurl { + name = "async_lock___async_lock_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/async-lock/-/async-lock-1.1.3.tgz"; + sha1 = "e47f1cbb6bec765b73e27ed8961d58006457ec08"; + }; + } + + { + name = "async_lru___async_lru_1.1.2.tgz"; + path = fetchurl { + name = "async_lru___async_lru_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/async-lru/-/async-lru-1.1.2.tgz"; + sha1 = "abe831f3a52123c87d44273615e203b1ef04692e"; + }; + } + + { + name = "async___async_1.5.1.tgz"; + path = fetchurl { + name = "async___async_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-1.5.1.tgz"; + sha1 = "b05714f4b11b357bf79adaffdd06da42d0766c10"; + }; + } + + { + name = "async___async_2.6.1.tgz"; + path = fetchurl { + name = "async___async_2.6.1.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz"; + sha1 = "b245a23ca71930044ec53fa46aa00a3e87c6a610"; + }; + } + + { + name = "async___async_0.9.2.tgz"; + path = fetchurl { + name = "async___async_0.9.2.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz"; + sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d"; + }; + } + + { + name = "async___async_1.0.0.tgz"; + path = fetchurl { + name = "async___async_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz"; + sha1 = "f8fc04ca3a13784ade9e1641af98578cfbd647a9"; + }; + } + + { + name = "asynckit___asynckit_0.4.0.tgz"; + path = fetchurl { + name = "asynckit___asynckit_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + } + + { + name = "atob___atob_2.1.2.tgz"; + path = fetchurl { + name = "atob___atob_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"; + sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9"; + }; + } + + { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + path = fetchurl { + name = "aws_sign2___aws_sign2_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + } + + { + name = "aws4___aws4_1.8.0.tgz"; + path = fetchurl { + name = "aws4___aws4_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz"; + sha1 = "f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"; + }; + } + + { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + path = fetchurl { + name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; + url = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; + sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; + }; + } + + { + name = "backo2___backo2_1.0.2.tgz"; + path = fetchurl { + name = "backo2___backo2_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz"; + sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947"; + }; + } + + { + name = "backoff___backoff_2.5.0.tgz"; + path = fetchurl { + name = "backoff___backoff_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz"; + sha1 = "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"; + }; + } + + { + name = "balanced_match___balanced_match_1.0.0.tgz"; + path = fetchurl { + name = "balanced_match___balanced_match_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + } + + { + name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + path = fetchurl { + name = "base64_arraybuffer___base64_arraybuffer_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz"; + sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8"; + }; + } + + { + name = "base64id___base64id_1.0.0.tgz"; + path = fetchurl { + name = "base64id___base64id_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz"; + sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"; + }; + } + + { + name = "base___base_0.11.2.tgz"; + path = fetchurl { + name = "base___base_0.11.2.tgz"; + url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; + sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; + }; + } + + { + name = "basic_auth___basic_auth_1.1.0.tgz"; + path = fetchurl { + name = "basic_auth___basic_auth_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz"; + sha1 = "45221ee429f7ee1e5035be3f51533f1cdfd29884"; + }; + } + + { + name = "basic_auth___basic_auth_2.0.1.tgz"; + path = fetchurl { + name = "basic_auth___basic_auth_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz"; + sha1 = "b998279bf47ce38344b4f3cf916d4679bbf51e3a"; + }; + } + + { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + path = fetchurl { + name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + } + + { + name = "bcrypt___bcrypt_3.0.2.tgz"; + path = fetchurl { + name = "bcrypt___bcrypt_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/bcrypt/-/bcrypt-3.0.2.tgz"; + sha1 = "3c575c49ccbfdf0875eb42aa1453f5654092a33d"; + }; + } + + { + name = "bencode___bencode_2.0.0.tgz"; + path = fetchurl { + name = "bencode___bencode_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/bencode/-/bencode-2.0.0.tgz"; + sha1 = "e72e6b3691d824bd03ea7aa9d752cd1d49a50027"; + }; + } + + { + name = "better_assert___better_assert_1.0.2.tgz"; + path = fetchurl { + name = "better_assert___better_assert_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz"; + sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522"; + }; + } + + { + name = "bin_links___bin_links_1.1.2.tgz"; + path = fetchurl { + name = "bin_links___bin_links_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.2.tgz"; + sha1 = "fb74bd54bae6b7befc6c6221f25322ac830d9757"; + }; + } + + { + name = "binary_extensions___binary_extensions_1.12.0.tgz"; + path = fetchurl { + name = "binary_extensions___binary_extensions_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz"; + sha1 = "c2d780f53d45bba8317a8902d4ceeaf3a6385b14"; + }; + } + + { + name = "binary_search___binary_search_1.3.4.tgz"; + path = fetchurl { + name = "binary_search___binary_search_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.4.tgz"; + sha1 = "d15f44ff9226ef309d85247fa0dbfbf659955f56"; + }; + } + + { + name = "bindings___bindings_1.3.1.tgz"; + path = fetchurl { + name = "bindings___bindings_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz"; + sha1 = "21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"; + }; + } + + { + name = "bindings___bindings_1.2.1.tgz"; + path = fetchurl { + name = "bindings___bindings_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz"; + sha1 = "14ad6113812d2d37d72e67b4cacb4bb726505f11"; + }; + } + + { + name = "bitcore_lib___bitcore_lib_0.13.19.tgz"; + path = fetchurl { + name = "bitcore_lib___bitcore_lib_0.13.19.tgz"; + url = "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-0.13.19.tgz"; + sha1 = "48af1e9bda10067c1ab16263472b5add2000f3dc"; + }; + } + + { + name = "https___codeload.github.com_CoMakery_bitcore_message_tar.gz_8799cc327029c3d34fc725f05b2cf981363f6ebf"; + path = fetchurl { + name = "https___codeload.github.com_CoMakery_bitcore_message_tar.gz_8799cc327029c3d34fc725f05b2cf981363f6ebf"; + url = "https://codeload.github.com/CoMakery/bitcore-message/tar.gz/8799cc327029c3d34fc725f05b2cf981363f6ebf"; + sha1 = "c5ac190157ac535fd6aeb3148ab5591ea874e281"; + }; + } + + { + name = "bitfield___bitfield_2.0.0.tgz"; + path = fetchurl { + name = "bitfield___bitfield_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/bitfield/-/bitfield-2.0.0.tgz"; + sha1 = "fbe6767592fe5b4c87ecf1d04126294cc1bfa837"; + }; + } + + { + name = "bittorrent_dht___bittorrent_dht_9.0.0.tgz"; + path = fetchurl { + name = "bittorrent_dht___bittorrent_dht_9.0.0.tgz"; + url = "https://registry.yarnpkg.com/bittorrent-dht/-/bittorrent-dht-9.0.0.tgz"; + sha1 = "08d5ebb51ed91d7e3eea5c275554f4323fb523e5"; + }; + } + + { + name = "bittorrent_peerid___bittorrent_peerid_1.3.0.tgz"; + path = fetchurl { + name = "bittorrent_peerid___bittorrent_peerid_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/bittorrent-peerid/-/bittorrent-peerid-1.3.0.tgz"; + sha1 = "a435d3b267c887c586c528b53359845905d7c158"; + }; + } + + { + name = "bittorrent_protocol___bittorrent_protocol_3.0.1.tgz"; + path = fetchurl { + name = "bittorrent_protocol___bittorrent_protocol_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/bittorrent-protocol/-/bittorrent-protocol-3.0.1.tgz"; + sha1 = "d3948f4d2b09d538095f7e5f93f64ba5df6b5c2a"; + }; + } + + { + name = "bittorrent_tracker___bittorrent_tracker_9.10.1.tgz"; + path = fetchurl { + name = "bittorrent_tracker___bittorrent_tracker_9.10.1.tgz"; + url = "https://registry.yarnpkg.com/bittorrent-tracker/-/bittorrent-tracker-9.10.1.tgz"; + sha1 = "5de14aac012a287af394d3cc9eda1ec6cc956f11"; + }; + } + + { + name = "bl___bl_1.2.2.tgz"; + path = fetchurl { + name = "bl___bl_1.2.2.tgz"; + url = "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz"; + sha1 = "a160911717103c07410cef63ef51b397c025af9c"; + }; + } + + { + name = "blob_to_buffer___blob_to_buffer_1.2.8.tgz"; + path = fetchurl { + name = "blob_to_buffer___blob_to_buffer_1.2.8.tgz"; + url = "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.8.tgz"; + sha1 = "78eeeb332f1280ed0ca6fb2b60693a8c6d36903a"; + }; + } + + { + name = "blob___blob_0.0.4.tgz"; + path = fetchurl { + name = "blob___blob_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz"; + sha1 = "bcf13052ca54463f30f9fc7e95b9a47630a94921"; + }; + } + + { + name = "blob___blob_0.0.5.tgz"; + path = fetchurl { + name = "blob___blob_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz"; + sha1 = "d680eeef25f8cd91ad533f5b01eed48e64caf683"; + }; + } + + { + name = "block_stream2___block_stream2_1.1.0.tgz"; + path = fetchurl { + name = "block_stream2___block_stream2_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/block-stream2/-/block-stream2-1.1.0.tgz"; + sha1 = "c738e3a91ba977ebb5e1fef431e13ca11d8639e2"; + }; + } + + { + name = "block_stream___block_stream_0.0.9.tgz"; + path = fetchurl { + name = "block_stream___block_stream_0.0.9.tgz"; + url = "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz"; + sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; + }; + } + + { + name = "bluebird___bluebird_3.5.0.tgz"; + path = fetchurl { + name = "bluebird___bluebird_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz"; + sha1 = "791420d7f551eea2897453a8a77653f96606d67c"; + }; + } + + { + name = "bluebird___bluebird_2.11.0.tgz"; + path = fetchurl { + name = "bluebird___bluebird_2.11.0.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz"; + sha1 = "534b9033c022c9579c56ba3b3e5a5caafbb650e1"; + }; + } + + { + name = "bluebird___bluebird_3.5.3.tgz"; + path = fetchurl { + name = "bluebird___bluebird_3.5.3.tgz"; + url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz"; + sha1 = "7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"; + }; + } + + { + name = "bn.js___bn.js_2.0.4.tgz"; + path = fetchurl { + name = "bn.js___bn.js_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-2.0.4.tgz"; + sha1 = "220a7cd677f7f1bfa93627ff4193776fe7819480"; + }; + } + + { + name = "bn.js___bn.js_2.2.0.tgz"; + path = fetchurl { + name = "bn.js___bn.js_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz"; + sha1 = "12162bc2ae71fc40a5626c33438f3a875cd37625"; + }; + } + + { + name = "bn.js___bn.js_4.11.8.tgz"; + path = fetchurl { + name = "bn.js___bn.js_4.11.8.tgz"; + url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz"; + sha1 = "2cde09eb5ee341f484746bb0309b3253b1b1442f"; + }; + } + + { + name = "body_parser___body_parser_1.18.3.tgz"; + path = fetchurl { + name = "body_parser___body_parser_1.18.3.tgz"; + url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz"; + sha1 = "5b292198ffdd553b3a0f20ded0592b956955c8b4"; + }; + } + + { + name = "boxen___boxen_1.3.0.tgz"; + path = fetchurl { + name = "boxen___boxen_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz"; + sha1 = "55c6c39a8ba58d9c61ad22cd877532deb665a20b"; + }; + } + + { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + path = fetchurl { + name = "brace_expansion___brace_expansion_1.1.11.tgz"; + url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; + }; + } + + { + name = "braces___braces_2.3.2.tgz"; + path = fetchurl { + name = "braces___braces_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; + sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; + }; + } + + { + name = "brorand___brorand_1.1.0.tgz"; + path = fetchurl { + name = "brorand___brorand_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + } + + { + name = "browser_stdout___browser_stdout_1.3.1.tgz"; + path = fetchurl { + name = "browser_stdout___browser_stdout_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz"; + sha1 = "baa559ee14ced73452229bad7326467c61fabd60"; + }; + } + + { + name = "browserify_package_json___browserify_package_json_1.0.1.tgz"; + path = fetchurl { + name = "browserify_package_json___browserify_package_json_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/browserify-package-json/-/browserify-package-json-1.0.1.tgz"; + sha1 = "98dde8aa5c561fd6d3fe49bbaa102b74b396fdea"; + }; + } + + { + name = "bs58___bs58_2.0.0.tgz"; + path = fetchurl { + name = "bs58___bs58_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/bs58/-/bs58-2.0.0.tgz"; + sha1 = "72b713bed223a0ac518bbda0e3ce3f4817f39eb5"; + }; + } + + { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + path = fetchurl { + name = "buffer_alloc_unsafe___buffer_alloc_unsafe_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz"; + sha1 = "bd7dc26ae2972d0eda253be061dba992349c19f0"; + }; + } + + { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + path = fetchurl { + name = "buffer_alloc___buffer_alloc_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz"; + sha1 = "890dd90d923a873e08e10e5fd51a57e5b7cce0ec"; + }; + } + + { + name = "buffer_compare___buffer_compare_1.0.0.tgz"; + path = fetchurl { + name = "buffer_compare___buffer_compare_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.0.0.tgz"; + sha1 = "acaa7a966e98eee9fae14b31c39a5f158fb3c4a2"; + }; + } + + { + name = "buffer_equal_constant_time___buffer_equal_constant_time_1.0.1.tgz"; + path = fetchurl { + name = "buffer_equal_constant_time___buffer_equal_constant_time_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz"; + sha1 = "f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"; + }; + } + + { + name = "buffer_equals___buffer_equals_1.0.4.tgz"; + path = fetchurl { + name = "buffer_equals___buffer_equals_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz"; + sha1 = "0353b54fd07fd9564170671ae6f66b9cf10d27f5"; + }; + } + + { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + path = fetchurl { + name = "buffer_fill___buffer_fill_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz"; + sha1 = "f8f78b76789888ef39f205cd637f68e702122b2c"; + }; + } + + { + name = "buffer_from___buffer_from_1.1.1.tgz"; + path = fetchurl { + name = "buffer_from___buffer_from_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz"; + sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef"; + }; + } + + { + name = "buffer_writer___buffer_writer_2.0.0.tgz"; + path = fetchurl { + name = "buffer_writer___buffer_writer_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz"; + sha1 = "ce7eb81a38f7829db09c873f2fbb792c0c98ec04"; + }; + } + + { + name = "bufferutil___bufferutil_4.0.0.tgz"; + path = fetchurl { + name = "bufferutil___bufferutil_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.0.tgz"; + sha1 = "a5078160e443751a4e83b6f4d6d7e26c058326a0"; + }; + } + + { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + path = fetchurl { + name = "builtin_modules___builtin_modules_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz"; + sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f"; + }; + } + + { + name = "builtins___builtins_1.0.3.tgz"; + path = fetchurl { + name = "builtins___builtins_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz"; + sha1 = "cb94faeb61c8696451db36534e1422f94f0aee88"; + }; + } + + { + name = "bull___bull_3.5.2.tgz"; + path = fetchurl { + name = "bull___bull_3.5.2.tgz"; + url = "https://registry.yarnpkg.com/bull/-/bull-3.5.2.tgz"; + sha1 = "9c85f205b17686efab2ee28aaa4388887360de32"; + }; + } + + { + name = "bunyan___bunyan_1.8.12.tgz"; + path = fetchurl { + name = "bunyan___bunyan_1.8.12.tgz"; + url = "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz"; + sha1 = "f150f0f6748abdd72aeae84f04403be2ef113797"; + }; + } + + { + name = "busboy___busboy_0.2.14.tgz"; + path = fetchurl { + name = "busboy___busboy_0.2.14.tgz"; + url = "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz"; + sha1 = "6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"; + }; + } + + { + name = "byline___byline_5.0.0.tgz"; + path = fetchurl { + name = "byline___byline_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz"; + sha1 = "741c5216468eadc457b03410118ad77de8c1ddb1"; + }; + } + + { + name = "byte_size___byte_size_4.0.4.tgz"; + path = fetchurl { + name = "byte_size___byte_size_4.0.4.tgz"; + url = "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.4.tgz"; + sha1 = "29d381709f41aae0d89c631f1c81aec88cd40b23"; + }; + } + + { + name = "bytes___bytes_3.0.0.tgz"; + path = fetchurl { + name = "bytes___bytes_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + } + + { + name = "cacache___cacache_10.0.4.tgz"; + path = fetchurl { + name = "cacache___cacache_10.0.4.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz"; + sha1 = "6452367999eff9d4188aefd9a14e9d7c6a263460"; + }; + } + + { + name = "cacache___cacache_11.3.1.tgz"; + path = fetchurl { + name = "cacache___cacache_11.3.1.tgz"; + url = "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz"; + sha1 = "d09d25f6c4aca7a6d305d141ae332613aa1d515f"; + }; + } + + { + name = "cache_base___cache_base_1.0.1.tgz"; + path = fetchurl { + name = "cache_base___cache_base_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; + sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; + }; + } + + { + name = "call_limit___call_limit_1.1.0.tgz"; + path = fetchurl { + name = "call_limit___call_limit_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz"; + sha1 = "6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea"; + }; + } + + { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + path = fetchurl { + name = "call_me_maybe___call_me_maybe_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz"; + sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b"; + }; + } + + { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + path = fetchurl { + name = "caller_callsite___caller_callsite_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"; + sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; + }; + } + + { + name = "caller_path___caller_path_0.1.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz"; + sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f"; + }; + } + + { + name = "caller_path___caller_path_2.0.0.tgz"; + path = fetchurl { + name = "caller_path___caller_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"; + sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; + }; + } + + { + name = "callsite___callsite_1.0.0.tgz"; + path = fetchurl { + name = "callsite___callsite_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz"; + sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20"; + }; + } + + { + name = "callsites___callsites_0.2.0.tgz"; + path = fetchurl { + name = "callsites___callsites_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz"; + sha1 = "afab96262910a7f33c19a5775825c69f34e350ca"; + }; + } + + { + name = "callsites___callsites_2.0.0.tgz"; + path = fetchurl { + name = "callsites___callsites_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"; + sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; + }; + } + + { + name = "camelcase___camelcase_4.1.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz"; + sha1 = "d545635be1e33c542649c69173e5de6acfae34dd"; + }; + } + + { + name = "camelcase___camelcase_5.0.0.tgz"; + path = fetchurl { + name = "camelcase___camelcase_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz"; + sha1 = "03295527d58bd3cd4aa75363f35b2e8d97be2f42"; + }; + } + + { + name = "camelize___camelize_1.0.0.tgz"; + path = fetchurl { + name = "camelize___camelize_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz"; + sha1 = "164a5483e630fa4321e5af07020e531831b2609b"; + }; + } + + { + name = "capture_stack_trace___capture_stack_trace_1.0.1.tgz"; + path = fetchurl { + name = "capture_stack_trace___capture_stack_trace_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz"; + sha1 = "a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"; + }; + } + + { + name = "caseless___caseless_0.12.0.tgz"; + path = fetchurl { + name = "caseless___caseless_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + } + + { + name = "chai_json_schema___chai_json_schema_1.5.0.tgz"; + path = fetchurl { + name = "chai_json_schema___chai_json_schema_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/chai-json-schema/-/chai-json-schema-1.5.0.tgz"; + sha1 = "6960719e40f71fd5b377c9282e5c9a46799474f6"; + }; + } + + { + name = "chai_xml___chai_xml_0.3.2.tgz"; + path = fetchurl { + name = "chai_xml___chai_xml_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/chai-xml/-/chai-xml-0.3.2.tgz"; + sha1 = "61d0776aa8fd936a2178769adcaabf3bfb52b8b1"; + }; + } + + { + name = "chai___chai_1.10.0.tgz"; + path = fetchurl { + name = "chai___chai_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/chai/-/chai-1.10.0.tgz"; + sha1 = "e4031cc87654461a75943e5a35ab46eaf39c1eb9"; + }; + } + + { + name = "chai___chai_4.2.0.tgz"; + path = fetchurl { + name = "chai___chai_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz"; + sha1 = "760aa72cf20e3795e84b12877ce0e83737aa29e5"; + }; + } + + { + name = "chalk___chalk_1.1.3.tgz"; + path = fetchurl { + name = "chalk___chalk_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + } + + { + name = "chalk___chalk_2.4.1.tgz"; + path = fetchurl { + name = "chalk___chalk_2.4.1.tgz"; + url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz"; + sha1 = "18c49ab16a037b6eb0152cc83e3471338215b66e"; + }; + } + + { + name = "charenc___charenc_0.0.2.tgz"; + path = fetchurl { + name = "charenc___charenc_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz"; + sha1 = "c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"; + }; + } + + { + name = "charset_detector___charset_detector_0.0.2.tgz"; + path = fetchurl { + name = "charset_detector___charset_detector_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/charset-detector/-/charset-detector-0.0.2.tgz"; + sha1 = "1cd5ddaf56e83259c6ef8e906ccf06f75fe9a1b2"; + }; + } + + { + name = "check_error___check_error_1.0.2.tgz"; + path = fetchurl { + name = "check_error___check_error_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz"; + sha1 = "574d312edd88bb5dd8912e9286dd6c0aed4aac82"; + }; + } + + { + name = "chokidar___chokidar_2.0.4.tgz"; + path = fetchurl { + name = "chokidar___chokidar_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz"; + sha1 = "356ff4e2b0e8e43e322d18a372460bbcf3accd26"; + }; + } + + { + name = "chownr___chownr_1.1.1.tgz"; + path = fetchurl { + name = "chownr___chownr_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz"; + sha1 = "54726b8b8fff4df053c42187e801fb4412df1494"; + }; + } + + { + name = "chownr___chownr_1.0.1.tgz"; + path = fetchurl { + name = "chownr___chownr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz"; + sha1 = "e2a75042a9551908bebd25b8523d5f9769d79181"; + }; + } + + { + name = "chunk_store_stream___chunk_store_stream_3.0.1.tgz"; + path = fetchurl { + name = "chunk_store_stream___chunk_store_stream_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/chunk-store-stream/-/chunk-store-stream-3.0.1.tgz"; + sha1 = "8e0d739226dcb386f44447b82a005b597a1d41d9"; + }; + } + + { + name = "ci_info___ci_info_1.6.0.tgz"; + path = fetchurl { + name = "ci_info___ci_info_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz"; + sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497"; + }; + } + + { + name = "cidr_regex___cidr_regex_2.0.10.tgz"; + path = fetchurl { + name = "cidr_regex___cidr_regex_2.0.10.tgz"; + url = "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz"; + sha1 = "af13878bd4ad704de77d6dc800799358b3afa70d"; + }; + } + + { + name = "circular_json___circular_json_0.3.3.tgz"; + path = fetchurl { + name = "circular_json___circular_json_0.3.3.tgz"; + url = "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz"; + sha1 = "815c99ea84f6809529d2f45791bdf82711352d66"; + }; + } + + { + name = "class_utils___class_utils_0.3.6.tgz"; + path = fetchurl { + name = "class_utils___class_utils_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; + sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; + }; + } + + { + name = "cli_boxes___cli_boxes_1.0.0.tgz"; + path = fetchurl { + name = "cli_boxes___cli_boxes_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz"; + sha1 = "4fa917c3e59c94a004cd61f8ee509da651687143"; + }; + } + + { + name = "cli_columns___cli_columns_3.1.2.tgz"; + path = fetchurl { + name = "cli_columns___cli_columns_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz"; + sha1 = "6732d972979efc2ae444a1f08e08fa139c96a18e"; + }; + } + + { + name = "cli_cursor___cli_cursor_1.0.2.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz"; + sha1 = "64da3f7d56a54412e59794bd62dc35295e8f2987"; + }; + } + + { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + path = fetchurl { + name = "cli_cursor___cli_cursor_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz"; + sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; + }; + } + + { + name = "cli_table3___cli_table3_0.5.1.tgz"; + path = fetchurl { + name = "cli_table3___cli_table3_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz"; + sha1 = "0252372d94dfc40dbd8df06005f48f31f656f202"; + }; + } + + { + name = "cli_table___cli_table_0.3.1.tgz"; + path = fetchurl { + name = "cli_table___cli_table_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz"; + sha1 = "f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"; + }; + } + + { + name = "cli_truncate___cli_truncate_0.2.1.tgz"; + path = fetchurl { + name = "cli_truncate___cli_truncate_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz"; + sha1 = "9f15cfbb0705005369216c626ac7d05ab90dd574"; + }; + } + + { + name = "cli_width___cli_width_2.2.0.tgz"; + path = fetchurl { + name = "cli_width___cli_width_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz"; + sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639"; + }; + } + + { + name = "cliui___cliui_4.1.0.tgz"; + path = fetchurl { + name = "cliui___cliui_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz"; + sha1 = "348422dbe82d800b3022eef4f6ac10bf2e4d1b49"; + }; + } + + { + name = "clone___clone_1.0.4.tgz"; + path = fetchurl { + name = "clone___clone_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + } + + { + name = "closest_to___closest_to_2.0.0.tgz"; + path = fetchurl { + name = "closest_to___closest_to_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/closest-to/-/closest-to-2.0.0.tgz"; + sha1 = "bb2a860edb7769b62d04821748ae50da24dbefaa"; + }; + } + + { + name = "cls_bluebird___cls_bluebird_2.1.0.tgz"; + path = fetchurl { + name = "cls_bluebird___cls_bluebird_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz"; + sha1 = "37ef1e080a8ffb55c2f4164f536f1919e7968aee"; + }; + } + + { + name = "cluster_key_slot___cluster_key_slot_1.0.12.tgz"; + path = fetchurl { + name = "cluster_key_slot___cluster_key_slot_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz"; + sha1 = "d5deff2a520717bc98313979b687309b2d368e29"; + }; + } + + { + name = "cmd_shim___cmd_shim_2.0.2.tgz"; + path = fetchurl { + name = "cmd_shim___cmd_shim_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz"; + sha1 = "6fcbda99483a8fd15d7d30a196ca69d688a2efdb"; + }; + } + + { + name = "co_bluebird___co_bluebird_1.1.0.tgz"; + path = fetchurl { + name = "co_bluebird___co_bluebird_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/co-bluebird/-/co-bluebird-1.1.0.tgz"; + sha1 = "c8b9f3a9320a7ed30987dcca1a5c3cff59655c7c"; + }; + } + + { + name = "co_use___co_use_1.1.0.tgz"; + path = fetchurl { + name = "co_use___co_use_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/co-use/-/co-use-1.1.0.tgz"; + sha1 = "c6bb3cdf10cb735ecaa9daeeda46d725c94a4e62"; + }; + } + + { + name = "co___co_4.6.0.tgz"; + path = fetchurl { + name = "co___co_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"; + sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; + }; + } + + { + name = "code_point_at___code_point_at_1.1.0.tgz"; + path = fetchurl { + name = "code_point_at___code_point_at_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz"; + sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; + }; + } + + { + name = "collection_visit___collection_visit_1.0.0.tgz"; + path = fetchurl { + name = "collection_visit___collection_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; + sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; + }; + } + + { + name = "color_convert___color_convert_1.9.3.tgz"; + path = fetchurl { + name = "color_convert___color_convert_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"; + sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8"; + }; + } + + { + name = "color_name___color_name_1.1.3.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + } + + { + name = "color_name___color_name_1.1.4.tgz"; + path = fetchurl { + name = "color_name___color_name_1.1.4.tgz"; + url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"; + sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2"; + }; + } + + { + name = "color_string___color_string_1.5.3.tgz"; + path = fetchurl { + name = "color_string___color_string_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz"; + sha1 = "c9bbc5f01b58b5492f3d6857459cb6590ce204cc"; + }; + } + + { + name = "color___color_3.0.0.tgz"; + path = fetchurl { + name = "color___color_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz"; + sha1 = "d920b4328d534a3ac8295d68f7bd4ba6c427be9a"; + }; + } + + { + name = "color___color_3.1.0.tgz"; + path = fetchurl { + name = "color___color_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz"; + sha1 = "d8e9fb096732875774c84bf922815df0308d0ffc"; + }; + } + + { + name = "colornames___colornames_1.1.1.tgz"; + path = fetchurl { + name = "colornames___colornames_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz"; + sha1 = "f8889030685c7c4ff9e2a559f5077eb76a816f96"; + }; + } + + { + name = "colors___colors_1.0.3.tgz"; + path = fetchurl { + name = "colors___colors_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz"; + sha1 = "0433f44d809680fdeb60ed260f1b0c262e82a40b"; + }; + } + + { + name = "colors___colors_1.3.2.tgz"; + path = fetchurl { + name = "colors___colors_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz"; + sha1 = "2df8ff573dfbf255af562f8ce7181d6b971a359b"; + }; + } + + { + name = "colorspace___colorspace_1.1.1.tgz"; + path = fetchurl { + name = "colorspace___colorspace_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.1.tgz"; + sha1 = "9ac2491e1bc6f8fb690e2176814f8d091636d972"; + }; + } + + { + name = "columnify___columnify_1.5.4.tgz"; + path = fetchurl { + name = "columnify___columnify_1.5.4.tgz"; + url = "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz"; + sha1 = "4737ddf1c7b69a8a7c340570782e947eec8e78bb"; + }; + } + + { + name = "combined_stream___combined_stream_1.0.7.tgz"; + path = fetchurl { + name = "combined_stream___combined_stream_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz"; + sha1 = "2d1d24317afb8abe95d6d2c0b07b57813539d828"; + }; + } + + { + name = "commander___commander_2.15.1.tgz"; + path = fetchurl { + name = "commander___commander_2.15.1.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz"; + sha1 = "df46e867d0fc2aec66a34662b406a9ccafff5b0f"; + }; + } + + { + name = "commander___commander_2.9.0.tgz"; + path = fetchurl { + name = "commander___commander_2.9.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz"; + sha1 = "9c99094176e12240cb22d6c5146098400fe0f7d4"; + }; + } + + { + name = "commander___commander_2.19.0.tgz"; + path = fetchurl { + name = "commander___commander_2.19.0.tgz"; + url = "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz"; + sha1 = "f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"; + }; + } + + { + name = "compact2string___compact2string_1.4.0.tgz"; + path = fetchurl { + name = "compact2string___compact2string_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/compact2string/-/compact2string-1.4.0.tgz"; + sha1 = "a99cd96ea000525684b269683ae2222d6eea7b49"; + }; + } + + { + name = "component_bind___component_bind_1.0.0.tgz"; + path = fetchurl { + name = "component_bind___component_bind_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz"; + sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"; + }; + } + + { + name = "component_emitter___component_emitter_1.1.2.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz"; + sha1 = "296594f2753daa63996d2af08d15a95116c9aec3"; + }; + } + + { + name = "component_emitter___component_emitter_1.2.1.tgz"; + path = fetchurl { + name = "component_emitter___component_emitter_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz"; + sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; + }; + } + + { + name = "component_inherit___component_inherit_0.0.3.tgz"; + path = fetchurl { + name = "component_inherit___component_inherit_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz"; + sha1 = "645fc4adf58b72b649d5cae65135619db26ff143"; + }; + } + + { + name = "concat_map___concat_map_0.0.1.tgz"; + path = fetchurl { + name = "concat_map___concat_map_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + } + + { + name = "concat_stream___concat_stream_1.6.2.tgz"; + path = fetchurl { + name = "concat_stream___concat_stream_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"; + sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"; + }; + } + + { + name = "concurrently___concurrently_4.1.0.tgz"; + path = fetchurl { + name = "concurrently___concurrently_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.0.tgz"; + sha1 = "17fdf067da71210685d9ea554423ef239da30d33"; + }; + } + + { + name = "config_chain___config_chain_1.1.12.tgz"; + path = fetchurl { + name = "config_chain___config_chain_1.1.12.tgz"; + url = "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz"; + sha1 = "0fde8d091200eb5e808caf25fe618c02f48e4efa"; + }; + } + + { + name = "config___config_3.0.0.tgz"; + path = fetchurl { + name = "config___config_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/config/-/config-3.0.0.tgz"; + sha1 = "a71cdbb22d225df9eff20b95178d65a63c452367"; + }; + } + + { + name = "configstore___configstore_3.1.2.tgz"; + path = fetchurl { + name = "configstore___configstore_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz"; + sha1 = "c6f25defaeef26df12dd33414b001fe81a543f8f"; + }; + } + + { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + path = fetchurl { + name = "console_control_strings___console_control_strings_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + } + + { + name = "content_disposition___content_disposition_0.5.1.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz"; + sha1 = "87476c6a67c8daa87e32e87616df883ba7fb071b"; + }; + } + + { + name = "content_disposition___content_disposition_0.5.2.tgz"; + path = fetchurl { + name = "content_disposition___content_disposition_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz"; + sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; + }; + } + + { + name = "content_security_policy_builder___content_security_policy_builder_2.0.0.tgz"; + path = fetchurl { + name = "content_security_policy_builder___content_security_policy_builder_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz"; + sha1 = "8749a1d542fcbe82237281ea9f716ce68b394dd2"; + }; + } + + { + name = "content_type___content_type_1.0.4.tgz"; + path = fetchurl { + name = "content_type___content_type_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; + sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; + }; + } + + { + name = "cookie_parser___cookie_parser_1.4.3.tgz"; + path = fetchurl { + name = "cookie_parser___cookie_parser_1.4.3.tgz"; + url = "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz"; + sha1 = "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5"; + }; + } + + { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + path = fetchurl { + name = "cookie_signature___cookie_signature_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + } + + { + name = "cookie___cookie_0.1.5.tgz"; + path = fetchurl { + name = "cookie___cookie_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.1.5.tgz"; + sha1 = "6ab9948a4b1ae21952cd2588530a4722d4044d7c"; + }; + } + + { + name = "cookie___cookie_0.3.1.tgz"; + path = fetchurl { + name = "cookie___cookie_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz"; + sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; + }; + } + + { + name = "cookiejar___cookiejar_2.1.2.tgz"; + path = fetchurl { + name = "cookiejar___cookiejar_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz"; + sha1 = "dd8a235530752f988f9a0844f3fc589e3111125c"; + }; + } + + { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + path = fetchurl { + name = "copy_concurrently___copy_concurrently_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"; + sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0"; + }; + } + + { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + path = fetchurl { + name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; + sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; + }; + } + + { + name = "core_js___core_js_2.5.7.tgz"; + path = fetchurl { + name = "core_js___core_js_2.5.7.tgz"; + url = "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz"; + sha1 = "f972608ff0cead68b841a16a932d0b183791814e"; + }; + } + + { + name = "core_util_is___core_util_is_1.0.2.tgz"; + path = fetchurl { + name = "core_util_is___core_util_is_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + } + + { + name = "cors___cors_2.8.5.tgz"; + path = fetchurl { + name = "cors___cors_2.8.5.tgz"; + url = "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz"; + sha1 = "eac11da51592dd86b9f06f6e7ac293b3df875d29"; + }; + } + + { + name = "cosmiconfig___cosmiconfig_5.0.6.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_5.0.6.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz"; + sha1 = "dca6cf680a0bd03589aff684700858c81abeeb39"; + }; + } + + { + name = "cosmiconfig___cosmiconfig_5.0.7.tgz"; + path = fetchurl { + name = "cosmiconfig___cosmiconfig_5.0.7.tgz"; + url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz"; + sha1 = "39826b292ee0d78eda137dfa3173bd1c21a43b04"; + }; + } + + { + name = "create_error_class___create_error_class_3.0.2.tgz"; + path = fetchurl { + name = "create_error_class___create_error_class_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz"; + sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6"; + }; + } + + { + name = "create_torrent___create_torrent_3.33.0.tgz"; + path = fetchurl { + name = "create_torrent___create_torrent_3.33.0.tgz"; + url = "https://registry.yarnpkg.com/create-torrent/-/create-torrent-3.33.0.tgz"; + sha1 = "8a7a2aa2213a799c266c40e4c12f1468ede25105"; + }; + } + + { + name = "cron_parser___cron_parser_2.7.3.tgz"; + path = fetchurl { + name = "cron_parser___cron_parser_2.7.3.tgz"; + url = "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz"; + sha1 = "12603f89f5375af353a9357be2543d3172eac651"; + }; + } + + { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz"; + sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449"; + }; + } + + { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + path = fetchurl { + name = "cross_spawn___cross_spawn_6.0.5.tgz"; + url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"; + sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"; + }; + } + + { + name = "crypt___crypt_0.0.2.tgz"; + path = fetchurl { + name = "crypt___crypt_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz"; + sha1 = "88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"; + }; + } + + { + name = "crypto_random_string___crypto_random_string_1.0.0.tgz"; + path = fetchurl { + name = "crypto_random_string___crypto_random_string_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz"; + sha1 = "a230f64f568310e1498009940790ec99545bca7e"; + }; + } + + { + name = "cycle___cycle_1.0.3.tgz"; + path = fetchurl { + name = "cycle___cycle_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz"; + sha1 = "21e80b2be8580f98b468f379430662b046c34ad2"; + }; + } + + { + name = "cyclist___cyclist_0.2.2.tgz"; + path = fetchurl { + name = "cyclist___cyclist_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz"; + sha1 = "1b33792e11e914a2fd6d6ed6447464444e5fa640"; + }; + } + + { + name = "d___d_1.0.0.tgz"; + path = fetchurl { + name = "d___d_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz"; + sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; + }; + } + + { + name = "dashdash___dashdash_1.14.1.tgz"; + path = fetchurl { + name = "dashdash___dashdash_1.14.1.tgz"; + url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + } + + { + name = "dasherize___dasherize_2.0.0.tgz"; + path = fetchurl { + name = "dasherize___dasherize_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz"; + sha1 = "6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308"; + }; + } + + { + name = "date_fns___date_fns_1.29.0.tgz"; + path = fetchurl { + name = "date_fns___date_fns_1.29.0.tgz"; + url = "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz"; + sha1 = "12e609cdcb935127311d04d33334e2960a2a54e6"; + }; + } + + { + name = "deasync___deasync_0.1.14.tgz"; + path = fetchurl { + name = "deasync___deasync_0.1.14.tgz"; + url = "https://registry.yarnpkg.com/deasync/-/deasync-0.1.14.tgz"; + sha1 = "232ea2252b443948cad033d792eb3b24b0a3d828"; + }; + } + + { + name = "debug___debug_2.2.0.tgz"; + path = fetchurl { + name = "debug___debug_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz"; + sha1 = "f87057e995b1a1f6ae6a4960664137bc56f039da"; + }; + } + + { + name = "debug___debug_2.3.3.tgz"; + path = fetchurl { + name = "debug___debug_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz"; + sha1 = "40c453e67e6e13c901ddec317af8986cda9eff8c"; + }; + } + + { + name = "debug___debug_2.6.9.tgz"; + path = fetchurl { + name = "debug___debug_2.6.9.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; + sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; + }; + } + + { + name = "debug___debug_3.1.0.tgz"; + path = fetchurl { + name = "debug___debug_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz"; + sha1 = "5bb5a0672628b64149566ba16819e61518c67261"; + }; + } + + { + name = "debug___debug_3.2.6.tgz"; + path = fetchurl { + name = "debug___debug_3.2.6.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz"; + sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b"; + }; + } + + { + name = "debug___debug_4.1.0.tgz"; + path = fetchurl { + name = "debug___debug_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz"; + sha1 = "373687bffa678b38b1cd91f861b63850035ddc87"; + }; + } + + { + name = "debug___debug_4.1.1.tgz"; + path = fetchurl { + name = "debug___debug_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz"; + sha1 = "3b72260255109c6b589cee050f1d516139664791"; + }; + } + + { + name = "debuglog___debuglog_1.0.1.tgz"; + path = fetchurl { + name = "debuglog___debuglog_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz"; + sha1 = "aa24ffb9ac3df9a2351837cfb2d279360cd78492"; + }; + } + + { + name = "decamelize___decamelize_1.2.0.tgz"; + path = fetchurl { + name = "decamelize___decamelize_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + } + + { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + path = fetchurl { + name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + } + + { + name = "decompress_response___decompress_response_3.3.0.tgz"; + path = fetchurl { + name = "decompress_response___decompress_response_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz"; + sha1 = "80a4dd323748384bfa248083622aedec982adff3"; + }; + } + + { + name = "dedent___dedent_0.7.0.tgz"; + path = fetchurl { + name = "dedent___dedent_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz"; + sha1 = "2495ddbaf6eb874abb0e1be9df22d2e5a544326c"; + }; + } + + { + name = "deep_eql___deep_eql_0.1.3.tgz"; + path = fetchurl { + name = "deep_eql___deep_eql_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz"; + sha1 = "ef558acab8de25206cd713906d74e56930eb69f2"; + }; + } + + { + name = "deep_eql___deep_eql_3.0.1.tgz"; + path = fetchurl { + name = "deep_eql___deep_eql_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz"; + sha1 = "dfc9404400ad1c8fe023e7da1df1c147c4b444df"; + }; + } + + { + name = "deep_equal___deep_equal_0.2.2.tgz"; + path = fetchurl { + name = "deep_equal___deep_equal_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz"; + sha1 = "84b745896f34c684e98f2ce0e42abaf43bba017d"; + }; + } + + { + name = "deep_extend___deep_extend_0.6.0.tgz"; + path = fetchurl { + name = "deep_extend___deep_extend_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz"; + sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac"; + }; + } + + { + name = "deep_is___deep_is_0.1.3.tgz"; + path = fetchurl { + name = "deep_is___deep_is_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + } + + { + name = "deep_object_diff___deep_object_diff_1.1.0.tgz"; + path = fetchurl { + name = "deep_object_diff___deep_object_diff_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz"; + sha1 = "d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a"; + }; + } + + { + name = "defaults___defaults_1.0.3.tgz"; + path = fetchurl { + name = "defaults___defaults_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + } + + { + name = "define_properties___define_properties_1.1.3.tgz"; + path = fetchurl { + name = "define_properties___define_properties_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"; + sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1"; + }; + } + + { + name = "define_property___define_property_0.2.5.tgz"; + path = fetchurl { + name = "define_property___define_property_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; + sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; + }; + } + + { + name = "define_property___define_property_1.0.0.tgz"; + path = fetchurl { + name = "define_property___define_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; + sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; + }; + } + + { + name = "define_property___define_property_2.0.2.tgz"; + path = fetchurl { + name = "define_property___define_property_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; + sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; + }; + } + + { + name = "defined___defined_1.0.0.tgz"; + path = fetchurl { + name = "defined___defined_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz"; + sha1 = "c98d9bcef75674188e110969151199e39b1fa693"; + }; + } + + { + name = "del___del_3.0.0.tgz"; + path = fetchurl { + name = "del___del_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz"; + sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5"; + }; + } + + { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + path = fetchurl { + name = "delayed_stream___delayed_stream_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + } + + { + name = "delegates___delegates_1.0.0.tgz"; + path = fetchurl { + name = "delegates___delegates_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + } + + { + name = "denque___denque_1.4.0.tgz"; + path = fetchurl { + name = "denque___denque_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz"; + sha1 = "79e2f0490195502107f24d9553f374837dabc916"; + }; + } + + { + name = "depd___depd_1.1.2.tgz"; + path = fetchurl { + name = "depd___depd_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + } + + { + name = "descrevit___descrevit_0.1.1.tgz"; + path = fetchurl { + name = "descrevit___descrevit_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/descrevit/-/descrevit-0.1.1.tgz"; + sha1 = "c0f5840de0a0f7b1b8b4078569b173327947d5da"; + }; + } + + { + name = "destroy___destroy_1.0.4.tgz"; + path = fetchurl { + name = "destroy___destroy_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + } + + { + name = "detect_indent___detect_indent_5.0.0.tgz"; + path = fetchurl { + name = "detect_indent___detect_indent_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz"; + sha1 = "3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"; + }; + } + + { + name = "detect_libc___detect_libc_1.0.3.tgz"; + path = fetchurl { + name = "detect_libc___detect_libc_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz"; + sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; + }; + } + + { + name = "detect_newline___detect_newline_2.1.0.tgz"; + path = fetchurl { + name = "detect_newline___detect_newline_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz"; + sha1 = "f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"; + }; + } + + { + name = "dezalgo___dezalgo_1.0.3.tgz"; + path = fetchurl { + name = "dezalgo___dezalgo_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz"; + sha1 = "7f742de066fc748bc8db820569dddce49bf0d456"; + }; + } + + { + name = "diagnostics___diagnostics_1.1.1.tgz"; + path = fetchurl { + name = "diagnostics___diagnostics_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.1.tgz"; + sha1 = "cab6ac33df70c9d9a727490ae43ac995a769b22a"; + }; + } + + { + name = "dicer___dicer_0.2.5.tgz"; + path = fetchurl { + name = "dicer___dicer_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz"; + sha1 = "5996c086bb33218c812c090bddc09cd12facb70f"; + }; + } + + { + name = "diff___diff_3.5.0.tgz"; + path = fetchurl { + name = "diff___diff_3.5.0.tgz"; + url = "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz"; + sha1 = "800c0dd1e0a8bfbc95835c202ad220fe317e5a12"; + }; + } + + { + name = "dns_prefetch_control___dns_prefetch_control_0.1.0.tgz"; + path = fetchurl { + name = "dns_prefetch_control___dns_prefetch_control_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz"; + sha1 = "60ddb457774e178f1f9415f0cabb0e85b0b300b2"; + }; + } + + { + name = "docopt___docopt_0.6.2.tgz"; + path = fetchurl { + name = "docopt___docopt_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz"; + sha1 = "b28e9e2220da5ec49f7ea5bb24a47787405eeb11"; + }; + } + + { + name = "doctrine___doctrine_0.7.2.tgz"; + path = fetchurl { + name = "doctrine___doctrine_0.7.2.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz"; + sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523"; + }; + } + + { + name = "doctrine___doctrine_1.5.0.tgz"; + path = fetchurl { + name = "doctrine___doctrine_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz"; + sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa"; + }; + } + + { + name = "dont_sniff_mimetype___dont_sniff_mimetype_1.0.0.tgz"; + path = fetchurl { + name = "dont_sniff_mimetype___dont_sniff_mimetype_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz"; + sha1 = "5932890dc9f4e2f19e5eb02a20026e5e5efc8f58"; + }; + } + + { + name = "dot_json___dot_json_1.0.4.tgz"; + path = fetchurl { + name = "dot_json___dot_json_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/dot-json/-/dot-json-1.0.4.tgz"; + sha1 = "b5c5818eb526a7917ac02df017fe9fba37b11195"; + }; + } + + { + name = "dot_prop___dot_prop_4.2.0.tgz"; + path = fetchurl { + name = "dot_prop___dot_prop_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz"; + sha1 = "1f19e0c2e1aa0e32797c49799f2837ac6af69c57"; + }; + } + + { + name = "dotenv___dotenv_5.0.1.tgz"; + path = fetchurl { + name = "dotenv___dotenv_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz"; + sha1 = "a5317459bd3d79ab88cff6e44057a6a3fbb1fcef"; + }; + } + + { + name = "dottie___dottie_2.0.1.tgz"; + path = fetchurl { + name = "dottie___dottie_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/dottie/-/dottie-2.0.1.tgz"; + sha1 = "697ad9d72004db7574d21f892466a3c285893659"; + }; + } + + { + name = "double_ended_queue___double_ended_queue_2.1.0_0.tgz"; + path = fetchurl { + name = "double_ended_queue___double_ended_queue_2.1.0_0.tgz"; + url = "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz"; + sha1 = "103d3527fd31528f40188130c841efdd78264e5c"; + }; + } + + { + name = "dtrace_provider___dtrace_provider_0.8.7.tgz"; + path = fetchurl { + name = "dtrace_provider___dtrace_provider_0.8.7.tgz"; + url = "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz"; + sha1 = "dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04"; + }; + } + + { + name = "duplexer3___duplexer3_0.1.4.tgz"; + path = fetchurl { + name = "duplexer3___duplexer3_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz"; + sha1 = "ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"; + }; + } + + { + name = "duplexify___duplexify_3.6.1.tgz"; + path = fetchurl { + name = "duplexify___duplexify_3.6.1.tgz"; + url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz"; + sha1 = "b1a7a29c4abfd639585efaecce80d666b1e34125"; + }; + } + + { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + path = fetchurl { + name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + } + + { + name = "ecdsa_sig_formatter___ecdsa_sig_formatter_1.0.10.tgz"; + path = fetchurl { + name = "ecdsa_sig_formatter___ecdsa_sig_formatter_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz"; + sha1 = "1c595000f04a8897dfb85000892a0f4c33af86c3"; + }; + } + + { + name = "editor___editor_1.0.0.tgz"; + path = fetchurl { + name = "editor___editor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz"; + sha1 = "60c7f87bd62bcc6a894fa8ccd6afb7823a24f742"; + }; + } + + { + name = "ee_first___ee_first_1.1.1.tgz"; + path = fetchurl { + name = "ee_first___ee_first_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + } + + { + name = "elegant_spinner___elegant_spinner_1.0.1.tgz"; + path = fetchurl { + name = "elegant_spinner___elegant_spinner_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz"; + sha1 = "db043521c95d7e303fd8f345bedc3349cfb0729e"; + }; + } + + { + name = "elliptic___elliptic_3.0.3.tgz"; + path = fetchurl { + name = "elliptic___elliptic_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/elliptic/-/elliptic-3.0.3.tgz"; + sha1 = "865c9b420bfbe55006b9f969f97a0d2c44966595"; + }; + } + + { + name = "enabled___enabled_1.0.2.tgz"; + path = fetchurl { + name = "enabled___enabled_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz"; + sha1 = "965f6513d2c2d1c5f4652b64a2e3396467fc2f93"; + }; + } + + { + name = "encodeurl___encodeurl_1.0.2.tgz"; + path = fetchurl { + name = "encodeurl___encodeurl_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + } + + { + name = "encoding___encoding_0.1.12.tgz"; + path = fetchurl { + name = "encoding___encoding_0.1.12.tgz"; + url = "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz"; + sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb"; + }; + } + + { + name = "end_of_stream___end_of_stream_1.4.1.tgz"; + path = fetchurl { + name = "end_of_stream___end_of_stream_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz"; + sha1 = "ed29634d19baba463b6ce6b80a37213eab71ec43"; + }; + } + + { + name = "engine.io_client___engine.io_client_1.8.3.tgz"; + path = fetchurl { + name = "engine.io_client___engine.io_client_1.8.3.tgz"; + url = "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz"; + sha1 = "1798ed93451246453d4c6f635d7a201fe940d5ab"; + }; + } + + { + name = "engine.io_client___engine.io_client_3.3.1.tgz"; + path = fetchurl { + name = "engine.io_client___engine.io_client_3.3.1.tgz"; + url = "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.1.tgz"; + sha1 = "afedb4a07b2ea48b7190c3136bfea98fdd4f0f03"; + }; + } + + { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + path = fetchurl { + name = "engine.io_parser___engine.io_parser_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz"; + sha1 = "937b079f0007d0893ec56d46cb220b8cb435220a"; + }; + } + + { + name = "engine.io_parser___engine.io_parser_2.1.3.tgz"; + path = fetchurl { + name = "engine.io_parser___engine.io_parser_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz"; + sha1 = "757ab970fbf2dfb32c7b74b033216d5739ef79a6"; + }; + } + + { + name = "engine.io___engine.io_1.8.3.tgz"; + path = fetchurl { + name = "engine.io___engine.io_1.8.3.tgz"; + url = "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz"; + sha1 = "8de7f97895d20d39b85f88eeee777b2bd42b13d4"; + }; + } + + { + name = "engine.io___engine.io_3.3.2.tgz"; + path = fetchurl { + name = "engine.io___engine.io_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz"; + sha1 = "18cbc8b6f36e9461c5c0f81df2b830de16058a59"; + }; + } + + { + name = "env_variable___env_variable_0.0.5.tgz"; + path = fetchurl { + name = "env_variable___env_variable_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.5.tgz"; + sha1 = "913dd830bef11e96a039c038d4130604eba37f88"; + }; + } + + { + name = "err_code___err_code_1.1.2.tgz"; + path = fetchurl { + name = "err_code___err_code_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz"; + sha1 = "06e0116d3028f6aef4806849eb0ea6a748ae6960"; + }; + } + + { + name = "errno___errno_0.1.7.tgz"; + path = fetchurl { + name = "errno___errno_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz"; + sha1 = "4684d71779ad39af177e3f007996f7c67c852618"; + }; + } + + { + name = "error_ex___error_ex_1.3.2.tgz"; + path = fetchurl { + name = "error_ex___error_ex_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; + sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; + }; + } + + { + name = "es5_ext___es5_ext_0.10.46.tgz"; + path = fetchurl { + name = "es5_ext___es5_ext_0.10.46.tgz"; + url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz"; + sha1 = "efd99f67c5a7ec789baa3daa7f79870388f7f572"; + }; + } + + { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + path = fetchurl { + name = "es6_iterator___es6_iterator_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"; + sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; + }; + } + + { + name = "es6_map___es6_map_0.1.5.tgz"; + path = fetchurl { + name = "es6_map___es6_map_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz"; + sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; + }; + } + + { + name = "es6_promise___es6_promise_4.2.5.tgz"; + path = fetchurl { + name = "es6_promise___es6_promise_4.2.5.tgz"; + url = "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz"; + sha1 = "da6d0d5692efb461e082c14817fe2427d8f5d054"; + }; + } + + { + name = "es6_promisify___es6_promisify_5.0.0.tgz"; + path = fetchurl { + name = "es6_promisify___es6_promisify_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz"; + sha1 = "5109d62f3e56ea967c4b63505aef08291c8a5203"; + }; + } + + { + name = "es6_promisify___es6_promisify_6.0.1.tgz"; + path = fetchurl { + name = "es6_promisify___es6_promisify_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.0.1.tgz"; + sha1 = "6edaa45f3bd570ffe08febce66f7116be4b1cdb6"; + }; + } + + { + name = "es6_set___es6_set_0.1.5.tgz"; + path = fetchurl { + name = "es6_set___es6_set_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz"; + sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; + }; + } + + { + name = "es6_shim___es6_shim_0.35.3.tgz"; + path = fetchurl { + name = "es6_shim___es6_shim_0.35.3.tgz"; + url = "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz"; + sha1 = "9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26"; + }; + } + + { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + path = fetchurl { + name = "es6_symbol___es6_symbol_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz"; + sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; + }; + } + + { + name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; + path = fetchurl { + name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz"; + sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"; + }; + } + + { + name = "escape_html___escape_html_1.0.3.tgz"; + path = fetchurl { + name = "escape_html___escape_html_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + } + + { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + path = fetchurl { + name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + } + + { + name = "escope___escope_3.6.0.tgz"; + path = fetchurl { + name = "escope___escope_3.6.0.tgz"; + url = "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz"; + sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; + }; + } + + { + name = "eslint___eslint_2.13.1.tgz"; + path = fetchurl { + name = "eslint___eslint_2.13.1.tgz"; + url = "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz"; + sha1 = "e4cc8fa0f009fb829aaae23855a29360be1f6c11"; + }; + } + + { + name = "espree___espree_3.5.4.tgz"; + path = fetchurl { + name = "espree___espree_3.5.4.tgz"; + url = "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz"; + sha1 = "b0f447187c8a8bed944b815a660bddf5deb5d1a7"; + }; + } + + { + name = "esprima___esprima_4.0.1.tgz"; + path = fetchurl { + name = "esprima___esprima_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"; + sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71"; + }; + } + + { + name = "esrecurse___esrecurse_4.2.1.tgz"; + path = fetchurl { + name = "esrecurse___esrecurse_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz"; + sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"; + }; + } + + { + name = "estraverse___estraverse_4.2.0.tgz"; + path = fetchurl { + name = "estraverse___estraverse_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz"; + sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; + }; + } + + { + name = "esutils___esutils_1.1.6.tgz"; + path = fetchurl { + name = "esutils___esutils_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz"; + sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"; + }; + } + + { + name = "esutils___esutils_2.0.2.tgz"; + path = fetchurl { + name = "esutils___esutils_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz"; + sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; + }; + } + + { + name = "etag___etag_1.7.0.tgz"; + path = fetchurl { + name = "etag___etag_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz"; + sha1 = "03d30b5f67dd6e632d2945d30d6652731a34d5d8"; + }; + } + + { + name = "etag___etag_1.8.1.tgz"; + path = fetchurl { + name = "etag___etag_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + } + + { + name = "event_emitter___event_emitter_0.3.5.tgz"; + path = fetchurl { + name = "event_emitter___event_emitter_0.3.5.tgz"; + url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz"; + sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; + }; + } + + { + name = "execa___execa_0.10.0.tgz"; + path = fetchurl { + name = "execa___execa_0.10.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz"; + sha1 = "ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"; + }; + } + + { + name = "execa___execa_0.7.0.tgz"; + path = fetchurl { + name = "execa___execa_0.7.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz"; + sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777"; + }; + } + + { + name = "execa___execa_1.0.0.tgz"; + path = fetchurl { + name = "execa___execa_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"; + sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8"; + }; + } + + { + name = "exit_hook___exit_hook_1.1.1.tgz"; + path = fetchurl { + name = "exit_hook___exit_hook_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz"; + sha1 = "f05ca233b48c05d54fff07765df8507e95c02ff8"; + }; + } + + { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + path = fetchurl { + name = "expand_brackets___expand_brackets_2.1.4.tgz"; + url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; + sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; + }; + } + + { + name = "expand_template___expand_template_2.0.3.tgz"; + path = fetchurl { + name = "expand_template___expand_template_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz"; + sha1 = "6e14b3fcee0f3a6340ecb57d2e8918692052a47c"; + }; + } + + { + name = "expect_ct___expect_ct_0.1.1.tgz"; + path = fetchurl { + name = "expect_ct___expect_ct_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.1.tgz"; + sha1 = "de84476a2dbcb85000d5903737e9bc8a5ba7b897"; + }; + } + + { + name = "express_oauth_server___express_oauth_server_2.0.0.tgz"; + path = fetchurl { + name = "express_oauth_server___express_oauth_server_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/express-oauth-server/-/express-oauth-server-2.0.0.tgz"; + sha1 = "57b08665c1201532f52c4c02f19709238b99a48d"; + }; + } + + { + name = "express_rate_limit___express_rate_limit_3.3.2.tgz"; + path = fetchurl { + name = "express_rate_limit___express_rate_limit_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-3.3.2.tgz"; + sha1 = "c5b2fc770d533878ce01a5dbbfadca340f3b8915"; + }; + } + + { + name = "express_validator___express_validator_5.3.0.tgz"; + path = fetchurl { + name = "express_validator___express_validator_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/express-validator/-/express-validator-5.3.0.tgz"; + sha1 = "18a4e4a6e6410e3b9d492fb4ffcb4556fec51806"; + }; + } + + { + name = "express___express_4.13.4.tgz"; + path = fetchurl { + name = "express___express_4.13.4.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.13.4.tgz"; + sha1 = "3c0b76f3c77590c8345739061ec0bd3ba067ec24"; + }; + } + + { + name = "express___express_4.16.4.tgz"; + path = fetchurl { + name = "express___express_4.16.4.tgz"; + url = "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz"; + sha1 = "fddef61926109e24c515ea97fd2f1bdbf62df12e"; + }; + } + + { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; + sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; + }; + } + + { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + path = fetchurl { + name = "extend_shallow___extend_shallow_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; + sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; + }; + } + + { + name = "extend___extend_3.0.2.tgz"; + path = fetchurl { + name = "extend___extend_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; + sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; + }; + } + + { + name = "extglob___extglob_2.0.4.tgz"; + path = fetchurl { + name = "extglob___extglob_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; + sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; + }; + } + + { + name = "extsprintf___extsprintf_1.2.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz"; + sha1 = "5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529"; + }; + } + + { + name = "extsprintf___extsprintf_1.3.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + } + + { + name = "extsprintf___extsprintf_1.4.0.tgz"; + path = fetchurl { + name = "extsprintf___extsprintf_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; + sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; + }; + } + + { + name = "eyes___eyes_0.1.8.tgz"; + path = fetchurl { + name = "eyes___eyes_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz"; + sha1 = "62cf120234c683785d902348a800ef3e0cc20bc0"; + }; + } + + { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + path = fetchurl { + name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz"; + sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; + }; + } + + { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + path = fetchurl { + name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; + sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; + }; + } + + { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + path = fetchurl { + name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + } + + { + name = "fast_safe_stringify___fast_safe_stringify_2.0.6.tgz"; + path = fetchurl { + name = "fast_safe_stringify___fast_safe_stringify_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz"; + sha1 = "04b26106cc56681f51a044cfc0d76cf0008ac2c2"; + }; + } + + { + name = "feature_policy___feature_policy_0.2.0.tgz"; + path = fetchurl { + name = "feature_policy___feature_policy_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.2.0.tgz"; + sha1 = "22096de49ab240176878ffe2bde2f6ff04d48c43"; + }; + } + + { + name = "fecha___fecha_2.3.3.tgz"; + path = fetchurl { + name = "fecha___fecha_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz"; + sha1 = "948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"; + }; + } + + { + name = "figgy_pudding___figgy_pudding_3.5.1.tgz"; + path = fetchurl { + name = "figgy_pudding___figgy_pudding_3.5.1.tgz"; + url = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz"; + sha1 = "862470112901c727a0e495a80744bd5baa1d6790"; + }; + } + + { + name = "figures___figures_1.7.0.tgz"; + path = fetchurl { + name = "figures___figures_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz"; + sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"; + }; + } + + { + name = "figures___figures_2.0.0.tgz"; + path = fetchurl { + name = "figures___figures_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz"; + sha1 = "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"; + }; + } + + { + name = "file_entry_cache___file_entry_cache_1.3.1.tgz"; + path = fetchurl { + name = "file_entry_cache___file_entry_cache_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz"; + sha1 = "44c61ea607ae4be9c1402f41f44270cbfe334ff8"; + }; + } + + { + name = "filestream___filestream_4.1.3.tgz"; + path = fetchurl { + name = "filestream___filestream_4.1.3.tgz"; + url = "https://registry.yarnpkg.com/filestream/-/filestream-4.1.3.tgz"; + sha1 = "948fcaade8221f715f5ecaddc54862faaacc9325"; + }; + } + + { + name = "fill_range___fill_range_4.0.0.tgz"; + path = fetchurl { + name = "fill_range___fill_range_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; + sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; + }; + } + + { + name = "finalhandler___finalhandler_0.4.1.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.1.tgz"; + sha1 = "85a17c6c59a94717d262d61230d4b0ebe3d4a14d"; + }; + } + + { + name = "finalhandler___finalhandler_1.1.1.tgz"; + path = fetchurl { + name = "finalhandler___finalhandler_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz"; + sha1 = "eebf4ed840079c83f4249038c9d703008301b105"; + }; + } + + { + name = "find_npm_prefix___find_npm_prefix_1.0.2.tgz"; + path = fetchurl { + name = "find_npm_prefix___find_npm_prefix_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz"; + sha1 = "8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf"; + }; + } + + { + name = "find_parent_dir___find_parent_dir_0.3.0.tgz"; + path = fetchurl { + name = "find_parent_dir___find_parent_dir_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz"; + sha1 = "33c44b429ab2b2f0646299c5f9f718f376ff8d54"; + }; + } + + { + name = "find_up___find_up_2.1.0.tgz"; + path = fetchurl { + name = "find_up___find_up_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"; + sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; + }; + } + + { + name = "find_up___find_up_3.0.0.tgz"; + path = fetchurl { + name = "find_up___find_up_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz"; + sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73"; + }; + } + + { + name = "flat_cache___flat_cache_1.3.4.tgz"; + path = fetchurl { + name = "flat_cache___flat_cache_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz"; + sha1 = "2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"; + }; + } + + { + name = "flat___flat_4.1.0.tgz"; + path = fetchurl { + name = "flat___flat_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz"; + sha1 = "090bec8b05e39cba309747f1d588f04dbaf98db2"; + }; + } + + { + name = "flatten___flatten_1.0.2.tgz"; + path = fetchurl { + name = "flatten___flatten_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz"; + sha1 = "dae46a9d78fbe25292258cc1e780a41d95c03782"; + }; + } + + { + name = "flexbuffer___flexbuffer_0.0.6.tgz"; + path = fetchurl { + name = "flexbuffer___flexbuffer_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz"; + sha1 = "039fdf23f8823e440c38f3277e6fef1174215b30"; + }; + } + + { + name = "fluent_ffmpeg___fluent_ffmpeg_2.1.2.tgz"; + path = fetchurl { + name = "fluent_ffmpeg___fluent_ffmpeg_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz"; + sha1 = "c952de2240f812ebda0aa8006d7776ee2acf7d74"; + }; + } + + { + name = "flush_write_stream___flush_write_stream_1.0.3.tgz"; + path = fetchurl { + name = "flush_write_stream___flush_write_stream_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz"; + sha1 = "c5d586ef38af6097650b49bc41b55fabb19f35bd"; + }; + } + + { + name = "for_in___for_in_1.0.2.tgz"; + path = fetchurl { + name = "for_in___for_in_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; + sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; + }; + } + + { + name = "forever_agent___forever_agent_0.6.1.tgz"; + path = fetchurl { + name = "forever_agent___forever_agent_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + } + + { + name = "form_data___form_data_2.3.3.tgz"; + path = fetchurl { + name = "form_data___form_data_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz"; + sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6"; + }; + } + + { + name = "format_util___format_util_1.0.3.tgz"; + path = fetchurl { + name = "format_util___format_util_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/format-util/-/format-util-1.0.3.tgz"; + sha1 = "032dca4a116262a12c43f4c3ec8566416c5b2d95"; + }; + } + + { + name = "formidable___formidable_1.2.1.tgz"; + path = fetchurl { + name = "formidable___formidable_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz"; + sha1 = "70fb7ca0290ee6ff961090415f4b3df3d2082659"; + }; + } + + { + name = "forwarded___forwarded_0.1.2.tgz"; + path = fetchurl { + name = "forwarded___forwarded_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + } + + { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + path = fetchurl { + name = "fragment_cache___fragment_cache_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; + sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; + }; + } + + { + name = "frameguard___frameguard_3.0.0.tgz"; + path = fetchurl { + name = "frameguard___frameguard_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/frameguard/-/frameguard-3.0.0.tgz"; + sha1 = "7bcad469ee7b96e91d12ceb3959c78235a9272e9"; + }; + } + + { + name = "fresh___fresh_0.3.0.tgz"; + path = fetchurl { + name = "fresh___fresh_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz"; + sha1 = "651f838e22424e7566de161d8358caa199f83d4f"; + }; + } + + { + name = "fresh___fresh_0.5.2.tgz"; + path = fetchurl { + name = "fresh___fresh_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + } + + { + name = "from2___from2_1.3.0.tgz"; + path = fetchurl { + name = "from2___from2_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz"; + sha1 = "88413baaa5f9a597cfde9221d86986cd3c061dfd"; + }; + } + + { + name = "from2___from2_2.3.0.tgz"; + path = fetchurl { + name = "from2___from2_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz"; + sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af"; + }; + } + + { + name = "front_matter___front_matter_2.1.2.tgz"; + path = fetchurl { + name = "front_matter___front_matter_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz"; + sha1 = "f75983b9f2f413be658c93dfd7bd8ce4078f5cdb"; + }; + } + + { + name = "fs_chunk_store___fs_chunk_store_1.7.0.tgz"; + path = fetchurl { + name = "fs_chunk_store___fs_chunk_store_1.7.0.tgz"; + url = "https://registry.yarnpkg.com/fs-chunk-store/-/fs-chunk-store-1.7.0.tgz"; + sha1 = "1c4bcbe93c99af10aa04b65348f2bb27377a4010"; + }; + } + + { + name = "fs_constants___fs_constants_1.0.0.tgz"; + path = fetchurl { + name = "fs_constants___fs_constants_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz"; + sha1 = "6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"; + }; + } + + { + name = "fs_copy_file_sync___fs_copy_file_sync_1.1.1.tgz"; + path = fetchurl { + name = "fs_copy_file_sync___fs_copy_file_sync_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz"; + sha1 = "11bf32c096c10d126e5f6b36d06eece776062918"; + }; + } + + { + name = "fs_extra___fs_extra_3.0.1.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz"; + sha1 = "3794f378c58b342ea7dbbb23095109c4b3b62291"; + }; + } + + { + name = "fs_extra___fs_extra_7.0.1.tgz"; + path = fetchurl { + name = "fs_extra___fs_extra_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz"; + sha1 = "4f189c44aa123b895f722804f55ea23eadc348e9"; + }; + } + + { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + path = fetchurl { + name = "fs_minipass___fs_minipass_1.2.5.tgz"; + url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz"; + sha1 = "06c277218454ec288df77ada54a03b8702aacb9d"; + }; + } + + { + name = "fs_vacuum___fs_vacuum_1.2.10.tgz"; + path = fetchurl { + name = "fs_vacuum___fs_vacuum_1.2.10.tgz"; + url = "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz"; + sha1 = "b7629bec07a4031a2548fdf99f5ecf1cc8b31e36"; + }; + } + + { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + path = fetchurl { + name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"; + sha1 = "b47df53493ef911df75731e70a9ded0189db40c9"; + }; + } + + { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + path = fetchurl { + name = "fs.realpath___fs.realpath_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + } + + { + name = "fsevents___fsevents_1.2.4.tgz"; + path = fetchurl { + name = "fsevents___fsevents_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz"; + sha1 = "f41dcb1af2582af3692da36fc55cbd8e1041c426"; + }; + } + + { + name = "fstream___fstream_1.0.11.tgz"; + path = fetchurl { + name = "fstream___fstream_1.0.11.tgz"; + url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz"; + sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"; + }; + } + + { + name = "g_status___g_status_2.0.2.tgz"; + path = fetchurl { + name = "g_status___g_status_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz"; + sha1 = "270fd32119e8fc9496f066fe5fe88e0a6bc78b97"; + }; + } + + { + name = "gauge___gauge_2.7.4.tgz"; + path = fetchurl { + name = "gauge___gauge_2.7.4.tgz"; + url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz"; + sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; + }; + } + + { + name = "generate_function___generate_function_2.3.1.tgz"; + path = fetchurl { + name = "generate_function___generate_function_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz"; + sha1 = "f069617690c10c868e73b8465746764f97c3479f"; + }; + } + + { + name = "generate_object_property___generate_object_property_1.2.0.tgz"; + path = fetchurl { + name = "generate_object_property___generate_object_property_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz"; + sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0"; + }; + } + + { + name = "generic_pool___generic_pool_3.4.2.tgz"; + path = fetchurl { + name = "generic_pool___generic_pool_3.4.2.tgz"; + url = "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.4.2.tgz"; + sha1 = "92ff7196520d670839a67308092a12aadf2f6a59"; + }; + } + + { + name = "genfun___genfun_5.0.0.tgz"; + path = fetchurl { + name = "genfun___genfun_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz"; + sha1 = "9dd9710a06900a5c4a5bf57aca5da4e52fe76537"; + }; + } + + { + name = "gentle_fs___gentle_fs_2.0.1.tgz"; + path = fetchurl { + name = "gentle_fs___gentle_fs_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.0.1.tgz"; + sha1 = "585cfd612bfc5cd52471fdb42537f016a5ce3687"; + }; + } + + { + name = "get_browser_rtc___get_browser_rtc_1.0.2.tgz"; + path = fetchurl { + name = "get_browser_rtc___get_browser_rtc_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz"; + sha1 = "bbcd40c8451a7ed4ef5c373b8169a409dd1d11d9"; + }; + } + + { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + path = fetchurl { + name = "get_caller_file___get_caller_file_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz"; + sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"; + }; + } + + { + name = "get_func_name___get_func_name_2.0.0.tgz"; + path = fetchurl { + name = "get_func_name___get_func_name_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz"; + sha1 = "ead774abee72e20409433a066366023dd6887a41"; + }; + } + + { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.0.tgz"; + path = fetchurl { + name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz"; + sha1 = "b877b49a5c16aefac3655f2ed2ea5b684df8d203"; + }; + } + + { + name = "get_stdin___get_stdin_6.0.0.tgz"; + path = fetchurl { + name = "get_stdin___get_stdin_6.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz"; + sha1 = "9e09bf712b360ab9225e812048f71fde9c89657b"; + }; + } + + { + name = "get_stream___get_stream_3.0.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz"; + sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14"; + }; + } + + { + name = "get_stream___get_stream_4.1.0.tgz"; + path = fetchurl { + name = "get_stream___get_stream_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz"; + sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"; + }; + } + + { + name = "get_value___get_value_2.0.6.tgz"; + path = fetchurl { + name = "get_value___get_value_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; + sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; + }; + } + + { + name = "getpass___getpass_0.1.7.tgz"; + path = fetchurl { + name = "getpass___getpass_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + } + + { + name = "github_from_package___github_from_package_0.0.0.tgz"; + path = fetchurl { + name = "github_from_package___github_from_package_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz"; + sha1 = "97fb5d96bfde8973313f20e8288ef9a167fa64ce"; + }; + } + + { + name = "glob_parent___glob_parent_3.1.0.tgz"; + path = fetchurl { + name = "glob_parent___glob_parent_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz"; + sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; + }; + } + + { + name = "glob___glob_7.1.2.tgz"; + path = fetchurl { + name = "glob___glob_7.1.2.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz"; + sha1 = "c19c9df9a028702d678612384a6552404c636d15"; + }; + } + + { + name = "glob___glob_6.0.4.tgz"; + path = fetchurl { + name = "glob___glob_6.0.4.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz"; + sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"; + }; + } + + { + name = "glob___glob_7.1.3.tgz"; + path = fetchurl { + name = "glob___glob_7.1.3.tgz"; + url = "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz"; + sha1 = "3960832d3f1574108342dafd3a67b332c0969df1"; + }; + } + + { + name = "global_dirs___global_dirs_0.1.1.tgz"; + path = fetchurl { + name = "global_dirs___global_dirs_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz"; + sha1 = "b319c0dd4607f353f3be9cca4c72fc148c49f445"; + }; + } + + { + name = "globals___globals_9.18.0.tgz"; + path = fetchurl { + name = "globals___globals_9.18.0.tgz"; + url = "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz"; + sha1 = "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"; + }; + } + + { + name = "globby___globby_6.1.0.tgz"; + path = fetchurl { + name = "globby___globby_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz"; + sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c"; + }; + } + + { + name = "globule___globule_1.2.1.tgz"; + path = fetchurl { + name = "globule___globule_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz"; + sha1 = "5dffb1b191f22d20797a9369b49eab4e9839696d"; + }; + } + + { + name = "gonzales_pe_sl___gonzales_pe_sl_4.2.3.tgz"; + path = fetchurl { + name = "gonzales_pe_sl___gonzales_pe_sl_4.2.3.tgz"; + url = "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz"; + sha1 = "6a868bc380645f141feeb042c6f97fcc71b59fe6"; + }; + } + + { + name = "got___got_6.7.1.tgz"; + path = fetchurl { + name = "got___got_6.7.1.tgz"; + url = "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz"; + sha1 = "240cd05785a9a18e561dc1b44b41c763ef1e8db0"; + }; + } + + { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + path = fetchurl { + name = "graceful_fs___graceful_fs_4.1.15.tgz"; + url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz"; + sha1 = "ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"; + }; + } + + { + name = "graceful_readlink___graceful_readlink_1.0.1.tgz"; + path = fetchurl { + name = "graceful_readlink___graceful_readlink_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz"; + sha1 = "4cafad76bc62f02fa039b2f94e9a3dd3a391a725"; + }; + } + + { + name = "growl___growl_1.10.5.tgz"; + path = fetchurl { + name = "growl___growl_1.10.5.tgz"; + url = "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz"; + sha1 = "f2735dc2283674fa67478b10181059355c369e5e"; + }; + } + + { + name = "har_schema___har_schema_2.0.0.tgz"; + path = fetchurl { + name = "har_schema___har_schema_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; + sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; + }; + } + + { + name = "har_validator___har_validator_5.1.3.tgz"; + path = fetchurl { + name = "har_validator___har_validator_5.1.3.tgz"; + url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz"; + sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080"; + }; + } + + { + name = "has_ansi___has_ansi_2.0.0.tgz"; + path = fetchurl { + name = "has_ansi___has_ansi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + } + + { + name = "has_binary2___has_binary2_1.0.3.tgz"; + path = fetchurl { + name = "has_binary2___has_binary2_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz"; + sha1 = "7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"; + }; + } + + { + name = "has_binary___has_binary_0.1.7.tgz"; + path = fetchurl { + name = "has_binary___has_binary_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz"; + sha1 = "68e61eb16210c9545a0a5cce06a873912fe1e68c"; + }; + } + + { + name = "has_cors___has_cors_1.1.0.tgz"; + path = fetchurl { + name = "has_cors___has_cors_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz"; + sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39"; + }; + } + + { + name = "has_flag___has_flag_2.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz"; + sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51"; + }; + } + + { + name = "has_flag___has_flag_3.0.0.tgz"; + path = fetchurl { + name = "has_flag___has_flag_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + } + + { + name = "has_unicode___has_unicode_2.0.1.tgz"; + path = fetchurl { + name = "has_unicode___has_unicode_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + } + + { + name = "has_value___has_value_0.3.1.tgz"; + path = fetchurl { + name = "has_value___has_value_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; + sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; + }; + } + + { + name = "has_value___has_value_1.0.0.tgz"; + path = fetchurl { + name = "has_value___has_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; + sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; + }; + } + + { + name = "has_values___has_values_0.1.4.tgz"; + path = fetchurl { + name = "has_values___has_values_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; + sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; + }; + } + + { + name = "has_values___has_values_1.0.0.tgz"; + path = fetchurl { + name = "has_values___has_values_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; + sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; + }; + } + + { + name = "hash.js___hash.js_1.1.7.tgz"; + path = fetchurl { + name = "hash.js___hash.js_1.1.7.tgz"; + url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz"; + sha1 = "0babca538e8d4ee4a0f8988d68866537a003cf42"; + }; + } + + { + name = "hashish___hashish_0.0.4.tgz"; + path = fetchurl { + name = "hashish___hashish_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz"; + sha1 = "6d60bc6ffaf711b6afd60e426d077988014e6554"; + }; + } + + { + name = "he___he_1.1.1.tgz"; + path = fetchurl { + name = "he___he_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz"; + sha1 = "93410fd21b009735151f8868c2f271f3427e23fd"; + }; + } + + { + name = "helmet_crossdomain___helmet_crossdomain_0.3.0.tgz"; + path = fetchurl { + name = "helmet_crossdomain___helmet_crossdomain_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz"; + sha1 = "707e2df930f13ad61f76ed08e1bb51ab2b2e85fa"; + }; + } + + { + name = "helmet_csp___helmet_csp_2.7.1.tgz"; + path = fetchurl { + name = "helmet_csp___helmet_csp_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.1.tgz"; + sha1 = "e8e0b5186ffd4db625cfcce523758adbfadb9dca"; + }; + } + + { + name = "helmet___helmet_3.15.0.tgz"; + path = fetchurl { + name = "helmet___helmet_3.15.0.tgz"; + url = "https://registry.yarnpkg.com/helmet/-/helmet-3.15.0.tgz"; + sha1 = "fe0bb80e05d9eec589e3cbecaf5384409a3a64c9"; + }; + } + + { + name = "hh_mm_ss___hh_mm_ss_1.2.0.tgz"; + path = fetchurl { + name = "hh_mm_ss___hh_mm_ss_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz"; + sha1 = "6d0f0b8280824a634cb1d1f20e0bc7bc8b689948"; + }; + } + + { + name = "hide_powered_by___hide_powered_by_1.0.0.tgz"; + path = fetchurl { + name = "hide_powered_by___hide_powered_by_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz"; + sha1 = "4a85ad65881f62857fc70af7174a1184dccce32b"; + }; + } + + { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + path = fetchurl { + name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; + url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz"; + sha1 = "97f236977bd6e125408930ff6de3eec6281ec047"; + }; + } + + { + name = "hpkp___hpkp_2.0.0.tgz"; + path = fetchurl { + name = "hpkp___hpkp_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz"; + sha1 = "10e142264e76215a5d30c44ec43de64dee6d1672"; + }; + } + + { + name = "hsts___hsts_2.1.0.tgz"; + path = fetchurl { + name = "hsts___hsts_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/hsts/-/hsts-2.1.0.tgz"; + sha1 = "cbd6c918a2385fee1dd5680bfb2b3a194c0121cc"; + }; + } + + { + name = "http_cache_semantics___http_cache_semantics_3.8.1.tgz"; + path = fetchurl { + name = "http_cache_semantics___http_cache_semantics_3.8.1.tgz"; + url = "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz"; + sha1 = "39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"; + }; + } + + { + name = "http_errors___http_errors_1.6.3.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.6.3.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + } + + { + name = "http_errors___http_errors_1.3.1.tgz"; + path = fetchurl { + name = "http_errors___http_errors_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz"; + sha1 = "197e22cdebd4198585e8694ef6786197b91ed942"; + }; + } + + { + name = "http_proxy_agent___http_proxy_agent_2.1.0.tgz"; + path = fetchurl { + name = "http_proxy_agent___http_proxy_agent_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz"; + sha1 = "e4821beef5b2142a2026bd73926fe537631c5405"; + }; + } + + { + name = "http_signature___http_signature_1.2.0.tgz"; + path = fetchurl { + name = "http_signature___http_signature_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; + sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; + }; + } + + { + name = "https_proxy_agent___https_proxy_agent_2.2.1.tgz"; + path = fetchurl { + name = "https_proxy_agent___https_proxy_agent_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz"; + sha1 = "51552970fa04d723e04c56d04178c3f92592bbc0"; + }; + } + + { + name = "humanize_ms___humanize_ms_1.2.1.tgz"; + path = fetchurl { + name = "humanize_ms___humanize_ms_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz"; + sha1 = "c46e3159a293f6b896da29316d8b6fe8bb79bbed"; + }; + } + + { + name = "husky___husky_1.2.0.tgz"; + path = fetchurl { + name = "husky___husky_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/husky/-/husky-1.2.0.tgz"; + sha1 = "d631dda1e4a9ee8ba69a10b0c51a0e2c66e711e5"; + }; + } + + { + name = "i___i_0.3.6.tgz"; + path = fetchurl { + name = "i___i_0.3.6.tgz"; + url = "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz"; + sha1 = "d96c92732076f072711b6b10fd7d4f65ad8ee23d"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.23.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz"; + sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63"; + }; + } + + { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + path = fetchurl { + name = "iconv_lite___iconv_lite_0.4.24.tgz"; + url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b"; + }; + } + + { + name = "ienoopen___ienoopen_1.0.0.tgz"; + path = fetchurl { + name = "ienoopen___ienoopen_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.0.0.tgz"; + sha1 = "346a428f474aac8f50cf3784ea2d0f16f62bda6b"; + }; + } + + { + name = "iferr___iferr_0.1.5.tgz"; + path = fetchurl { + name = "iferr___iferr_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz"; + sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"; + }; + } + + { + name = "iferr___iferr_1.0.2.tgz"; + path = fetchurl { + name = "iferr___iferr_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz"; + sha1 = "e9fde49a9da06dc4a4194c6c9ed6d08305037a6d"; + }; + } + + { + name = "ignore_by_default___ignore_by_default_1.0.1.tgz"; + path = fetchurl { + name = "ignore_by_default___ignore_by_default_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz"; + sha1 = "48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"; + }; + } + + { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + path = fetchurl { + name = "ignore_walk___ignore_walk_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz"; + sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8"; + }; + } + + { + name = "ignore___ignore_3.3.10.tgz"; + path = fetchurl { + name = "ignore___ignore_3.3.10.tgz"; + url = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz"; + sha1 = "0a97fb876986e8081c631160f8f9f389157f0043"; + }; + } + + { + name = "immediate_chunk_store___immediate_chunk_store_2.0.0.tgz"; + path = fetchurl { + name = "immediate_chunk_store___immediate_chunk_store_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/immediate-chunk-store/-/immediate-chunk-store-2.0.0.tgz"; + sha1 = "f313fd0cc71396d8911ad031179e1cccfda3da18"; + }; + } + + { + name = "import_fresh___import_fresh_2.0.0.tgz"; + path = fetchurl { + name = "import_fresh___import_fresh_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz"; + sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; + }; + } + + { + name = "import_lazy___import_lazy_2.1.0.tgz"; + path = fetchurl { + name = "import_lazy___import_lazy_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz"; + sha1 = "05698e3d45c88e8d7e9d92cb0584e77f096f3e43"; + }; + } + + { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + path = fetchurl { + name = "imurmurhash___imurmurhash_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + } + + { + name = "indent_string___indent_string_3.2.0.tgz"; + path = fetchurl { + name = "indent_string___indent_string_3.2.0.tgz"; + url = "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz"; + sha1 = "4a5fd6d27cc332f37e5419a504dbb837105c9289"; + }; + } + + { + name = "indexof___indexof_0.0.1.tgz"; + path = fetchurl { + name = "indexof___indexof_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz"; + sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; + }; + } + + { + name = "inflection___inflection_1.12.0.tgz"; + path = fetchurl { + name = "inflection___inflection_1.12.0.tgz"; + url = "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz"; + sha1 = "a200935656d6f5f6bc4dc7502e1aecb703228416"; + }; + } + + { + name = "inflight___inflight_1.0.6.tgz"; + path = fetchurl { + name = "inflight___inflight_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + } + + { + name = "inherits___inherits_2.0.3.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + } + + { + name = "inherits___inherits_2.0.1.tgz"; + path = fetchurl { + name = "inherits___inherits_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + } + + { + name = "ini___ini_1.3.5.tgz"; + path = fetchurl { + name = "ini___ini_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz"; + sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927"; + }; + } + + { + name = "init_package_json___init_package_json_1.10.3.tgz"; + path = fetchurl { + name = "init_package_json___init_package_json_1.10.3.tgz"; + url = "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz"; + sha1 = "45ffe2f610a8ca134f2bd1db5637b235070f6cbe"; + }; + } + + { + name = "inquirer___inquirer_0.12.0.tgz"; + path = fetchurl { + name = "inquirer___inquirer_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz"; + sha1 = "1ef2bfd63504df0bc75785fff8c2c41df12f077e"; + }; + } + + { + name = "invert_kv___invert_kv_1.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz"; + sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"; + }; + } + + { + name = "invert_kv___invert_kv_2.0.0.tgz"; + path = fetchurl { + name = "invert_kv___invert_kv_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz"; + sha1 = "7393f5afa59ec9ff5f67a27620d11c226e3eec02"; + }; + } + + { + name = "ioredis___ioredis_3.2.2.tgz"; + path = fetchurl { + name = "ioredis___ioredis_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz"; + sha1 = "b7d5ff3afd77bb9718bb2821329b894b9a44c00b"; + }; + } + + { + name = "ip_anonymize___ip_anonymize_0.0.6.tgz"; + path = fetchurl { + name = "ip_anonymize___ip_anonymize_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/ip-anonymize/-/ip-anonymize-0.0.6.tgz"; + sha1 = "d2c513e448e874e8cc380d03404691b94b018e68"; + }; + } + + { + name = "ip_regex___ip_regex_2.1.0.tgz"; + path = fetchurl { + name = "ip_regex___ip_regex_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz"; + sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"; + }; + } + + { + name = "ip_set___ip_set_1.0.1.tgz"; + path = fetchurl { + name = "ip_set___ip_set_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ip-set/-/ip-set-1.0.1.tgz"; + sha1 = "633b66d0bd6c8d0de968d053263c9120d3b6727e"; + }; + } + + { + name = "ip___ip_1.1.5.tgz"; + path = fetchurl { + name = "ip___ip_1.1.5.tgz"; + url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz"; + sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.0.5.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.0.5.tgz"; + sha1 = "5fa78cf301b825c78abc3042d812723049ea23c7"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz"; + sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"; + }; + } + + { + name = "ipaddr.js___ipaddr.js_1.8.1.tgz"; + path = fetchurl { + name = "ipaddr.js___ipaddr.js_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz"; + sha1 = "fa4b79fa47fd3def5e3b159825161c0a519c9427"; + }; + } + + { + name = "ipv6_normalize___ipv6_normalize_1.0.1.tgz"; + path = fetchurl { + name = "ipv6_normalize___ipv6_normalize_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz"; + sha1 = "1b3258290d365fa83239e89907dde4592e7620a8"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; + sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; + }; + } + + { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; + sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + } + + { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + path = fetchurl { + name = "is_arrayish___is_arrayish_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz"; + sha1 = "4574a2ae56f7ab206896fb431eaeed066fdf8f03"; + }; + } + + { + name = "is_ascii___is_ascii_1.0.0.tgz"; + path = fetchurl { + name = "is_ascii___is_ascii_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz"; + sha1 = "f02ad0259a0921cd199ff21ce1b09e0f6b4e3929"; + }; + } + + { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + path = fetchurl { + name = "is_binary_path___is_binary_path_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; + sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; + }; + } + + { + name = "is_bluebird___is_bluebird_1.0.2.tgz"; + path = fetchurl { + name = "is_bluebird___is_bluebird_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz"; + sha1 = "096439060f4aa411abee19143a84d6a55346d6e2"; + }; + } + + { + name = "is_buffer___is_buffer_1.1.6.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; + sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; + }; + } + + { + name = "is_buffer___is_buffer_2.0.3.tgz"; + path = fetchurl { + name = "is_buffer___is_buffer_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz"; + sha1 = "4ecf3fcf749cbd1e472689e109ac66261a25e725"; + }; + } + + { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + path = fetchurl { + name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz"; + sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe"; + }; + } + + { + name = "is_ci___is_ci_1.2.1.tgz"; + path = fetchurl { + name = "is_ci___is_ci_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz"; + sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c"; + }; + } + + { + name = "is_cidr___is_cidr_2.0.7.tgz"; + path = fetchurl { + name = "is_cidr___is_cidr_2.0.7.tgz"; + url = "https://registry.yarnpkg.com/is-cidr/-/is-cidr-2.0.7.tgz"; + sha1 = "0fd4b863c26b2eb2d157ed21060c4f3f8dd356ce"; + }; + } + + { + name = "is_cidr___is_cidr_3.0.0.tgz"; + path = fetchurl { + name = "is_cidr___is_cidr_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.0.0.tgz"; + sha1 = "1acf35c9e881063cd5f696d48959b30fed3eed56"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; + sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; + }; + } + + { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + path = fetchurl { + name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; + sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; + }; + } + + { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_0.1.6.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; + sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; + }; + } + + { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + path = fetchurl { + name = "is_descriptor___is_descriptor_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; + sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; + }; + } + + { + name = "is_directory___is_directory_0.3.1.tgz"; + path = fetchurl { + name = "is_directory___is_directory_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz"; + sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; + }; + } + + { + name = "is_extendable___is_extendable_0.1.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; + sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; + }; + } + + { + name = "is_extendable___is_extendable_1.0.1.tgz"; + path = fetchurl { + name = "is_extendable___is_extendable_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; + sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; + }; + } + + { + name = "is_extglob___is_extglob_2.1.1.tgz"; + path = fetchurl { + name = "is_extglob___is_extglob_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + } + + { + name = "is_file___is_file_1.0.0.tgz"; + path = fetchurl { + name = "is_file___is_file_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-file/-/is-file-1.0.0.tgz"; + sha1 = "28a44cfbd9d3db193045f22b65fce8edf9620596"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; + sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; + }; + } + + { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + path = fetchurl { + name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; + sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; + }; + } + + { + name = "is_generator___is_generator_1.0.3.tgz"; + path = fetchurl { + name = "is_generator___is_generator_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz"; + sha1 = "c14c21057ed36e328db80347966c693f886389f3"; + }; + } + + { + name = "is_glob___is_glob_3.1.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; + sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; + }; + } + + { + name = "is_glob___is_glob_4.0.0.tgz"; + path = fetchurl { + name = "is_glob___is_glob_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz"; + sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0"; + }; + } + + { + name = "is_installed_globally___is_installed_globally_0.1.0.tgz"; + path = fetchurl { + name = "is_installed_globally___is_installed_globally_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz"; + sha1 = "0dfd98f5a9111716dd535dda6492f67bf3d25a80"; + }; + } + + { + name = "is_my_ip_valid___is_my_ip_valid_1.0.0.tgz"; + path = fetchurl { + name = "is_my_ip_valid___is_my_ip_valid_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz"; + sha1 = "7b351b8e8edd4d3995d4d066680e664d94696824"; + }; + } + + { + name = "is_my_json_valid___is_my_json_valid_2.19.0.tgz"; + path = fetchurl { + name = "is_my_json_valid___is_my_json_valid_2.19.0.tgz"; + url = "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz"; + sha1 = "8fd6e40363cd06b963fa877d444bfb5eddc62175"; + }; + } + + { + name = "is_nan___is_nan_1.2.1.tgz"; + path = fetchurl { + name = "is_nan___is_nan_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz"; + sha1 = "9faf65b6fb6db24b7f5c0628475ea71f988401e2"; + }; + } + + { + name = "is_npm___is_npm_1.0.0.tgz"; + path = fetchurl { + name = "is_npm___is_npm_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz"; + sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4"; + }; + } + + { + name = "is_number___is_number_3.0.0.tgz"; + path = fetchurl { + name = "is_number___is_number_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; + sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; + }; + } + + { + name = "is_obj___is_obj_1.0.1.tgz"; + path = fetchurl { + name = "is_obj___is_obj_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz"; + sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"; + }; + } + + { + name = "is_observable___is_observable_1.1.0.tgz"; + path = fetchurl { + name = "is_observable___is_observable_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz"; + sha1 = "b3e986c8f44de950867cab5403f5a3465005975e"; + }; + } + + { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + path = fetchurl { + name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; + sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; + }; + } + + { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + path = fetchurl { + name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz"; + sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52"; + }; + } + + { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + path = fetchurl { + name = "is_path_inside___is_path_inside_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz"; + sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; + }; + } + + { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + path = fetchurl { + name = "is_plain_object___is_plain_object_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; + }; + } + + { + name = "is_promise___is_promise_2.1.0.tgz"; + path = fetchurl { + name = "is_promise___is_promise_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz"; + sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"; + }; + } + + { + name = "is_property___is_property_1.0.2.tgz"; + path = fetchurl { + name = "is_property___is_property_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz"; + sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84"; + }; + } + + { + name = "is_redirect___is_redirect_1.0.0.tgz"; + path = fetchurl { + name = "is_redirect___is_redirect_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz"; + sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"; + }; + } + + { + name = "is_regexp___is_regexp_1.0.0.tgz"; + path = fetchurl { + name = "is_regexp___is_regexp_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz"; + sha1 = "fd2d883545c46bac5a633e7b9a09e87fa2cb5069"; + }; + } + + { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + path = fetchurl { + name = "is_resolvable___is_resolvable_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz"; + sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88"; + }; + } + + { + name = "is_retry_allowed___is_retry_allowed_1.1.0.tgz"; + path = fetchurl { + name = "is_retry_allowed___is_retry_allowed_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz"; + sha1 = "11a060568b67339444033d0125a61a20d564fb34"; + }; + } + + { + name = "is_stream___is_stream_1.1.0.tgz"; + path = fetchurl { + name = "is_stream___is_stream_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz"; + sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; + }; + } + + { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + path = fetchurl { + name = "is_typedarray___is_typedarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + } + + { + name = "is_windows___is_windows_1.0.2.tgz"; + path = fetchurl { + name = "is_windows___is_windows_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; + sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; + }; + } + + { + name = "isarray___isarray_0.0.1.tgz"; + path = fetchurl { + name = "isarray___isarray_0.0.1.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz"; + sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf"; + }; + } + + { + name = "isarray___isarray_1.0.0.tgz"; + path = fetchurl { + name = "isarray___isarray_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + } + + { + name = "isarray___isarray_2.0.1.tgz"; + path = fetchurl { + name = "isarray___isarray_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz"; + sha1 = "a37d94ed9cda2d59865c9f76fe596ee1f338741e"; + }; + } + + { + name = "isexe___isexe_2.0.0.tgz"; + path = fetchurl { + name = "isexe___isexe_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + } + + { + name = "iso_639_3___iso_639_3_1.1.0.tgz"; + path = fetchurl { + name = "iso_639_3___iso_639_3_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-1.1.0.tgz"; + sha1 = "83722daf55490a707c318ae18a33ba3bab06c843"; + }; + } + + { + name = "isobject___isobject_2.1.0.tgz"; + path = fetchurl { + name = "isobject___isobject_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; + sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; + }; + } + + { + name = "isobject___isobject_3.0.1.tgz"; + path = fetchurl { + name = "isobject___isobject_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + } + + { + name = "isstream___isstream_0.1.2.tgz"; + path = fetchurl { + name = "isstream___isstream_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + } + + { + name = "jest_get_type___jest_get_type_22.4.3.tgz"; + path = fetchurl { + name = "jest_get_type___jest_get_type_22.4.3.tgz"; + url = "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz"; + sha1 = "e3a8504d8479342dd4420236b322869f18900ce4"; + }; + } + + { + name = "jest_validate___jest_validate_23.6.0.tgz"; + path = fetchurl { + name = "jest_validate___jest_validate_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz"; + sha1 = "36761f99d1ed33fcd425b4e4c5595d62b6597474"; + }; + } + + { + name = "js_tokens___js_tokens_3.0.2.tgz"; + path = fetchurl { + name = "js_tokens___js_tokens_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz"; + sha1 = "9866df395102130e38f7f996bceb65443209c25b"; + }; + } + + { + name = "js_yaml___js_yaml_3.12.0.tgz"; + path = fetchurl { + name = "js_yaml___js_yaml_3.12.0.tgz"; + url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz"; + sha1 = "eaed656ec8344f10f527c6bfa1b6e2244de167d1"; + }; + } + + { + name = "jsbn___jsbn_0.1.1.tgz"; + path = fetchurl { + name = "jsbn___jsbn_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + } + + { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + path = fetchurl { + name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9"; + }; + } + + { + name = "json_schema_ref_parser___json_schema_ref_parser_6.0.2.tgz"; + path = fetchurl { + name = "json_schema_ref_parser___json_schema_ref_parser_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-6.0.2.tgz"; + sha1 = "c17bfed06fa7ff8f1ade36067d087b46f5465ef8"; + }; + } + + { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + path = fetchurl { + name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; + }; + } + + { + name = "json_schema___json_schema_0.2.3.tgz"; + path = fetchurl { + name = "json_schema___json_schema_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; + sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + }; + } + + { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + path = fetchurl { + name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; + sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; + }; + } + + { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + path = fetchurl { + name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + } + + { + name = "json3___json3_3.3.2.tgz"; + path = fetchurl { + name = "json3___json3_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz"; + sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1"; + }; + } + + { + name = "json5___json5_1.0.1.tgz"; + path = fetchurl { + name = "json5___json5_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz"; + sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe"; + }; + } + + { + name = "jsonfile___jsonfile_3.0.1.tgz"; + path = fetchurl { + name = "jsonfile___jsonfile_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz"; + sha1 = "a5ecc6f65f53f662c4415c7675a0331d0992ec66"; + }; + } + + { + name = "jsonfile___jsonfile_4.0.0.tgz"; + path = fetchurl { + name = "jsonfile___jsonfile_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz"; + sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb"; + }; + } + + { + name = "jsonify___jsonify_0.0.0.tgz"; + path = fetchurl { + name = "jsonify___jsonify_0.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz"; + sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; + }; + } + + { + name = "https___github.com_Chocobozzz_jsonld_signatures_archive_77660963e722eb4541d2d255f9d9d4216329665f.tar.gz"; + path = fetchurl { + name = "jsonld-signatures.tar.gz"; + url = "https://github.com/Chocobozzz/jsonld-signatures/archive/77660963e722eb4541d2d255f9d9d4216329665f.tar.gz"; + sha256 = "0prld6q913bsh6kyfq43ny7cw5s1ixki5d4z1kw932shw9piqv5m"; + }; + } + + { + name = "jsonld___jsonld_0.5.21.tgz"; + path = fetchurl { + name = "jsonld___jsonld_0.5.21.tgz"; + url = "https://registry.yarnpkg.com/jsonld/-/jsonld-0.5.21.tgz"; + sha1 = "4d5b78d717eb92bcd1ac9d88e34efad95370c0bf"; + }; + } + + { + name = "jsonld___jsonld_1.1.0.tgz"; + path = fetchurl { + name = "jsonld___jsonld_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/jsonld/-/jsonld-1.1.0.tgz"; + sha1 = "afcb168c44557a7bddead4d4513c3cbcae3bc5b9"; + }; + } + + { + name = "jsonparse___jsonparse_1.3.1.tgz"; + path = fetchurl { + name = "jsonparse___jsonparse_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz"; + sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280"; + }; + } + + { + name = "jsonpointer.js___jsonpointer.js_0.4.0.tgz"; + path = fetchurl { + name = "jsonpointer.js___jsonpointer.js_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz"; + sha1 = "002cb123f767aafdeb0196132ce5c4f9941ccaba"; + }; + } + + { + name = "jsonpointer___jsonpointer_4.0.1.tgz"; + path = fetchurl { + name = "jsonpointer___jsonpointer_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz"; + sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"; + }; + } + + { + name = "jsonschema_draft4___jsonschema_draft4_1.0.0.tgz"; + path = fetchurl { + name = "jsonschema_draft4___jsonschema_draft4_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz"; + sha1 = "f0af2005054f0f0ade7ea2118614b69dc512d865"; + }; + } + + { + name = "jsonschema___jsonschema_1.2.4.tgz"; + path = fetchurl { + name = "jsonschema___jsonschema_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz"; + sha1 = "a46bac5d3506a254465bc548876e267c6d0d6464"; + }; + } + + { + name = "jsprim___jsprim_1.4.1.tgz"; + path = fetchurl { + name = "jsprim___jsprim_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; + sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + }; + } + + { + name = "junk___junk_2.1.0.tgz"; + path = fetchurl { + name = "junk___junk_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/junk/-/junk-2.1.0.tgz"; + sha1 = "f431b4b7f072dc500a5f10ce7f4ec71930e70134"; + }; + } + + { + name = "jwa___jwa_1.1.6.tgz"; + path = fetchurl { + name = "jwa___jwa_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/jwa/-/jwa-1.1.6.tgz"; + sha1 = "87240e76c9808dbde18783cf2264ef4929ee50e6"; + }; + } + + { + name = "jws___jws_3.1.5.tgz"; + path = fetchurl { + name = "jws___jws_3.1.5.tgz"; + url = "https://registry.yarnpkg.com/jws/-/jws-3.1.5.tgz"; + sha1 = "80d12d05b293d1e841e7cb8b4e69e561adcf834f"; + }; + } + + { + name = "k_bucket___k_bucket_4.0.1.tgz"; + path = fetchurl { + name = "k_bucket___k_bucket_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/k-bucket/-/k-bucket-4.0.1.tgz"; + sha1 = "3fc2e5693f0b7bff90d7b6b476edd6087955d542"; + }; + } + + { + name = "k_bucket___k_bucket_5.0.0.tgz"; + path = fetchurl { + name = "k_bucket___k_bucket_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/k-bucket/-/k-bucket-5.0.0.tgz"; + sha1 = "ef7a401fcd4c37cd31dceaa6ae4440ca91055e01"; + }; + } + + { + name = "k_rpc_socket___k_rpc_socket_1.8.0.tgz"; + path = fetchurl { + name = "k_rpc_socket___k_rpc_socket_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/k-rpc-socket/-/k-rpc-socket-1.8.0.tgz"; + sha1 = "9a4dd6a4f3795ed847ffa156579cc389990bd1f2"; + }; + } + + { + name = "k_rpc___k_rpc_5.0.0.tgz"; + path = fetchurl { + name = "k_rpc___k_rpc_5.0.0.tgz"; + url = "https://registry.yarnpkg.com/k-rpc/-/k-rpc-5.0.0.tgz"; + sha1 = "a72651860c96db440579e4c9f38dce8a42b481a8"; + }; + } + + { + name = "kind_of___kind_of_3.2.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_3.2.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; + sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; + }; + } + + { + name = "kind_of___kind_of_4.0.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; + sha1 = "20813df3d712928b207378691a45066fae72dd57"; + }; + } + + { + name = "kind_of___kind_of_5.1.0.tgz"; + path = fetchurl { + name = "kind_of___kind_of_5.1.0.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; + sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; + }; + } + + { + name = "kind_of___kind_of_6.0.2.tgz"; + path = fetchurl { + name = "kind_of___kind_of_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz"; + sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051"; + }; + } + + { + name = "known_css_properties___known_css_properties_0.3.0.tgz"; + path = fetchurl { + name = "known_css_properties___known_css_properties_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz"; + sha1 = "a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4"; + }; + } + + { + name = "kuler___kuler_1.0.1.tgz"; + path = fetchurl { + name = "kuler___kuler_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/kuler/-/kuler-1.0.1.tgz"; + sha1 = "ef7c784f36c9fb6e16dd3150d152677b2b0228a6"; + }; + } + + { + name = "last_one_wins___last_one_wins_1.0.4.tgz"; + path = fetchurl { + name = "last_one_wins___last_one_wins_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/last-one-wins/-/last-one-wins-1.0.4.tgz"; + sha1 = "c1bfd0cbcb46790ec9156b8d1aee8fcb86cda22a"; + }; + } + + { + name = "latest_version___latest_version_3.1.0.tgz"; + path = fetchurl { + name = "latest_version___latest_version_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz"; + sha1 = "a205383fea322b33b5ae3b18abee0dc2f356ee15"; + }; + } + + { + name = "lazy_property___lazy_property_1.0.0.tgz"; + path = fetchurl { + name = "lazy_property___lazy_property_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz"; + sha1 = "84ddc4b370679ba8bd4cdcfa4c06b43d57111147"; + }; + } + + { + name = "lcid___lcid_1.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz"; + sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835"; + }; + } + + { + name = "lcid___lcid_2.0.0.tgz"; + path = fetchurl { + name = "lcid___lcid_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz"; + sha1 = "6ef5d2df60e52f82eb228a4c373e8d1f397253cf"; + }; + } + + { + name = "ldap_filter___ldap_filter_0.2.2.tgz"; + path = fetchurl { + name = "ldap_filter___ldap_filter_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/ldap-filter/-/ldap-filter-0.2.2.tgz"; + sha1 = "f2b842be0b86da3352798505b31ebcae590d77d0"; + }; + } + + { + name = "ldapjs___ldapjs_1.0.2.tgz"; + path = fetchurl { + name = "ldapjs___ldapjs_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/ldapjs/-/ldapjs-1.0.2.tgz"; + sha1 = "544ff7032b7b83c68f0701328d9297aa694340f9"; + }; + } + + { + name = "leven___leven_2.1.0.tgz"; + path = fetchurl { + name = "leven___leven_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz"; + sha1 = "c2e7a9f772094dee9d34202ae8acce4687875580"; + }; + } + + { + name = "levn___levn_0.3.0.tgz"; + path = fetchurl { + name = "levn___levn_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + } + + { + name = "libcipm___libcipm_2.0.2.tgz"; + path = fetchurl { + name = "libcipm___libcipm_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/libcipm/-/libcipm-2.0.2.tgz"; + sha1 = "4f38c2b37acf2ec156936cef1cbf74636568fc7b"; + }; + } + + { + name = "libnpmhook___libnpmhook_4.0.1.tgz"; + path = fetchurl { + name = "libnpmhook___libnpmhook_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-4.0.1.tgz"; + sha1 = "63641654de772cbeb96a88527a7fd5456ec3c2d7"; + }; + } + + { + name = "libnpx___libnpx_10.2.0.tgz"; + path = fetchurl { + name = "libnpx___libnpx_10.2.0.tgz"; + url = "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.0.tgz"; + sha1 = "1bf4a1c9f36081f64935eb014041da10855e3102"; + }; + } + + { + name = "libxmljs___libxmljs_0.19.5.tgz"; + path = fetchurl { + name = "libxmljs___libxmljs_0.19.5.tgz"; + url = "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.19.5.tgz"; + sha1 = "b2f34cc12fd6a3e43670c604c42a902f339ea54d"; + }; + } + + { + name = "lint_staged___lint_staged_8.1.0.tgz"; + path = fetchurl { + name = "lint_staged___lint_staged_8.1.0.tgz"; + url = "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz"; + sha1 = "dbc3ae2565366d8f20efb9f9799d076da64863f2"; + }; + } + + { + name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz"; + path = fetchurl { + name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz"; + sha1 = "924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"; + }; + } + + { + name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz"; + path = fetchurl { + name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz"; + sha1 = "4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"; + }; + } + + { + name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz"; + path = fetchurl { + name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz"; + sha1 = "f1132167535ea4c1261102b9f28dac7cba1e03db"; + }; + } + + { + name = "listr___listr_0.14.3.tgz"; + path = fetchurl { + name = "listr___listr_0.14.3.tgz"; + url = "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz"; + sha1 = "2fea909604e434be464c50bddba0d496928fa586"; + }; + } + + { + name = "load_ip_set___load_ip_set_2.1.0.tgz"; + path = fetchurl { + name = "load_ip_set___load_ip_set_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.1.0.tgz"; + sha1 = "2d50b737cae41de4e413d213991d4083a3e1784b"; + }; + } + + { + name = "locate_path___locate_path_2.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz"; + sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; + }; + } + + { + name = "locate_path___locate_path_3.0.0.tgz"; + path = fetchurl { + name = "locate_path___locate_path_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz"; + sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e"; + }; + } + + { + name = "lock_verify___lock_verify_2.0.2.tgz"; + path = fetchurl { + name = "lock_verify___lock_verify_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.0.2.tgz"; + sha1 = "148e4f85974915c9e3c34d694b7de9ecb18ee7a8"; + }; + } + + { + name = "lockfile___lockfile_1.0.4.tgz"; + path = fetchurl { + name = "lockfile___lockfile_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz"; + sha1 = "07f819d25ae48f87e538e6578b6964a4981a5609"; + }; + } + + { + name = "lodash._baseuniq___lodash._baseuniq_4.6.0.tgz"; + path = fetchurl { + name = "lodash._baseuniq___lodash._baseuniq_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz"; + sha1 = "0ebb44e456814af7905c6212fa2c9b2d51b841e8"; + }; + } + + { + name = "lodash._createset___lodash._createset_4.0.3.tgz"; + path = fetchurl { + name = "lodash._createset___lodash._createset_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz"; + sha1 = "0f4659fbb09d75194fa9e2b88a6644d363c9fe26"; + }; + } + + { + name = "lodash._root___lodash._root_3.0.1.tgz"; + path = fetchurl { + name = "lodash._root___lodash._root_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz"; + sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692"; + }; + } + + { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + path = fetchurl { + name = "lodash.assign___lodash.assign_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz"; + sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7"; + }; + } + + { + name = "lodash.bind___lodash.bind_4.2.1.tgz"; + path = fetchurl { + name = "lodash.bind___lodash.bind_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz"; + sha1 = "7ae3017e939622ac31b7d7d7dcb1b34db1690d35"; + }; + } + + { + name = "lodash.capitalize___lodash.capitalize_4.2.1.tgz"; + path = fetchurl { + name = "lodash.capitalize___lodash.capitalize_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz"; + sha1 = "f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9"; + }; + } + + { + name = "lodash.clone___lodash.clone_4.5.0.tgz"; + path = fetchurl { + name = "lodash.clone___lodash.clone_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz"; + sha1 = "195870450f5a13192478df4bc3d23d2dea1907b6"; + }; + } + + { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + path = fetchurl { + name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"; + sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef"; + }; + } + + { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + path = fetchurl { + name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; + url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"; + sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af"; + }; + } + + { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + path = fetchurl { + name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; + sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; + }; + } + + { + name = "lodash.difference___lodash.difference_4.5.0.tgz"; + path = fetchurl { + name = "lodash.difference___lodash.difference_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz"; + sha1 = "9ccb4e505d486b91651345772885a2df27fd017c"; + }; + } + + { + name = "lodash.flatten___lodash.flatten_4.4.0.tgz"; + path = fetchurl { + name = "lodash.flatten___lodash.flatten_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz"; + sha1 = "f31c22225a9632d2bbf8e4addbef240aa765a61f"; + }; + } + + { + name = "lodash.foreach___lodash.foreach_4.5.0.tgz"; + path = fetchurl { + name = "lodash.foreach___lodash.foreach_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz"; + sha1 = "1a6a35eace401280c7f06dddec35165ab27e3e53"; + }; + } + + { + name = "lodash.get___lodash.get_4.4.2.tgz"; + path = fetchurl { + name = "lodash.get___lodash.get_4.4.2.tgz"; + url = "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz"; + sha1 = "2d177f652fa31e939b4438d5341499dfa3825e99"; + }; + } + + { + name = "lodash.isempty___lodash.isempty_4.4.0.tgz"; + path = fetchurl { + name = "lodash.isempty___lodash.isempty_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz"; + sha1 = "6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"; + }; + } + + { + name = "lodash.isequal___lodash.isequal_4.5.0.tgz"; + path = fetchurl { + name = "lodash.isequal___lodash.isequal_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz"; + sha1 = "415c4478f2bcc30120c22ce10ed3226f7d3e18e0"; + }; + } + + { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + path = fetchurl { + name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz"; + sha1 = "8489b1cb0d29ff88195cceca448ff6d6cc295c36"; + }; + } + + { + name = "lodash.keys___lodash.keys_4.2.0.tgz"; + path = fetchurl { + name = "lodash.keys___lodash.keys_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz"; + sha1 = "a08602ac12e4fb83f91fc1fb7a360a4d9ba35205"; + }; + } + + { + name = "lodash.noop___lodash.noop_3.0.1.tgz"; + path = fetchurl { + name = "lodash.noop___lodash.noop_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz"; + sha1 = "38188f4d650a3a474258439b96ec45b32617133c"; + }; + } + + { + name = "lodash.partial___lodash.partial_4.2.1.tgz"; + path = fetchurl { + name = "lodash.partial___lodash.partial_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.partial/-/lodash.partial-4.2.1.tgz"; + sha1 = "49f3d8cfdaa3bff8b3a91d127e923245418961d4"; + }; + } + + { + name = "lodash.pick___lodash.pick_4.4.0.tgz"; + path = fetchurl { + name = "lodash.pick___lodash.pick_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz"; + sha1 = "52f05610fff9ded422611441ed1fc123a03001b3"; + }; + } + + { + name = "lodash.sample___lodash.sample_4.2.1.tgz"; + path = fetchurl { + name = "lodash.sample___lodash.sample_4.2.1.tgz"; + url = "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz"; + sha1 = "5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d"; + }; + } + + { + name = "lodash.shuffle___lodash.shuffle_4.2.0.tgz"; + path = fetchurl { + name = "lodash.shuffle___lodash.shuffle_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz"; + sha1 = "145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b"; + }; + } + + { + name = "lodash.union___lodash.union_4.6.0.tgz"; + path = fetchurl { + name = "lodash.union___lodash.union_4.6.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz"; + sha1 = "48bb5088409f16f1821666641c44dd1aaae3cd88"; + }; + } + + { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + path = fetchurl { + name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; + sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; + }; + } + + { + name = "lodash.values___lodash.values_4.3.0.tgz"; + path = fetchurl { + name = "lodash.values___lodash.values_4.3.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz"; + sha1 = "a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"; + }; + } + + { + name = "lodash.without___lodash.without_4.4.0.tgz"; + path = fetchurl { + name = "lodash.without___lodash.without_4.4.0.tgz"; + url = "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz"; + sha1 = "3cd4574a00b67bae373a94b748772640507b7aac"; + }; + } + + { + name = "lodash___lodash_4.17.4.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.4.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz"; + sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae"; + }; + } + + { + name = "lodash___lodash_3.10.1.tgz"; + path = fetchurl { + name = "lodash___lodash_3.10.1.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz"; + sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6"; + }; + } + + { + name = "lodash___lodash_4.17.11.tgz"; + path = fetchurl { + name = "lodash___lodash_4.17.11.tgz"; + url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz"; + sha1 = "b39ea6229ef607ecd89e2c8df12536891cac9b8d"; + }; + } + + { + name = "log_symbols___log_symbols_1.0.2.tgz"; + path = fetchurl { + name = "log_symbols___log_symbols_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz"; + sha1 = "376ff7b58ea3086a0f09facc74617eca501e1a18"; + }; + } + + { + name = "log_symbols___log_symbols_2.2.0.tgz"; + path = fetchurl { + name = "log_symbols___log_symbols_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz"; + sha1 = "5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"; + }; + } + + { + name = "log_update___log_update_2.3.0.tgz"; + path = fetchurl { + name = "log_update___log_update_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz"; + sha1 = "88328fd7d1ce7938b29283746f0b1bc126b24708"; + }; + } + + { + name = "logform___logform_1.10.0.tgz"; + path = fetchurl { + name = "logform___logform_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/logform/-/logform-1.10.0.tgz"; + sha1 = "c9d5598714c92b546e23f4e78147c40f1e02012e"; + }; + } + + { + name = "lowercase_keys___lowercase_keys_1.0.1.tgz"; + path = fetchurl { + name = "lowercase_keys___lowercase_keys_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz"; + sha1 = "6f9e30b47084d971a7c820ff15a6c5167b74c26f"; + }; + } + + { + name = "lru_cache___lru_cache_4.1.5.tgz"; + path = fetchurl { + name = "lru_cache___lru_cache_4.1.5.tgz"; + url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz"; + sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"; + }; + } + + { + name = "lru_queue___lru_queue_0.1.0.tgz"; + path = fetchurl { + name = "lru_queue___lru_queue_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz"; + sha1 = "2738bd9f0d3cf4f84490c5736c48699ac632cda3"; + }; + } + + { + name = "lru___lru_3.1.0.tgz"; + path = fetchurl { + name = "lru___lru_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/lru/-/lru-3.1.0.tgz"; + sha1 = "ea7fb8546d83733396a13091d76cfeb4c06837d5"; + }; + } + + { + name = "magnet_uri___magnet_uri_5.2.4.tgz"; + path = fetchurl { + name = "magnet_uri___magnet_uri_5.2.4.tgz"; + url = "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-5.2.4.tgz"; + sha1 = "7afe5b736af04445aff744c93a890a3710077688"; + }; + } + + { + name = "maildev___maildev_1.0.0_rc3.tgz"; + path = fetchurl { + name = "maildev___maildev_1.0.0_rc3.tgz"; + url = "https://registry.yarnpkg.com/maildev/-/maildev-1.0.0-rc3.tgz"; + sha1 = "89429d47b07633e3269a74e484991eecdf3a3857"; + }; + } + + { + name = "mailparser___mailparser_0.6.2.tgz"; + path = fetchurl { + name = "mailparser___mailparser_0.6.2.tgz"; + url = "https://registry.yarnpkg.com/mailparser/-/mailparser-0.6.2.tgz"; + sha1 = "03c486039bdf4df6cd3b6adcaaac4107dfdbc068"; + }; + } + + { + name = "make_dir___make_dir_1.3.0.tgz"; + path = fetchurl { + name = "make_dir___make_dir_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz"; + sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c"; + }; + } + + { + name = "make_error___make_error_1.3.5.tgz"; + path = fetchurl { + name = "make_error___make_error_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz"; + sha1 = "efe4e81f6db28cadd605c70f29c831b58ef776c8"; + }; + } + + { + name = "make_fetch_happen___make_fetch_happen_4.0.1.tgz"; + path = fetchurl { + name = "make_fetch_happen___make_fetch_happen_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz"; + sha1 = "141497cb878f243ba93136c83d8aba12c216c083"; + }; + } + + { + name = "make_fetch_happen___make_fetch_happen_3.0.0.tgz"; + path = fetchurl { + name = "make_fetch_happen___make_fetch_happen_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz"; + sha1 = "7b661d2372fc4710ab5cc8e1fa3c290eea69a961"; + }; + } + + { + name = "map_age_cleaner___map_age_cleaner_0.1.3.tgz"; + path = fetchurl { + name = "map_age_cleaner___map_age_cleaner_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz"; + sha1 = "7d583a7306434c055fe474b0f45078e6e1b4b92a"; + }; + } + + { + name = "map_cache___map_cache_0.2.2.tgz"; + path = fetchurl { + name = "map_cache___map_cache_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; + sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; + }; + } + + { + name = "map_visit___map_visit_1.0.0.tgz"; + path = fetchurl { + name = "map_visit___map_visit_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; + sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; + }; + } + + { + name = "marked_man___marked_man_0.2.1.tgz"; + path = fetchurl { + name = "marked_man___marked_man_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/marked-man/-/marked-man-0.2.1.tgz"; + sha1 = "f259271481de3b507263489f5221b7c5acfd2383"; + }; + } + + { + name = "marked___marked_0.3.19.tgz"; + path = fetchurl { + name = "marked___marked_0.3.19.tgz"; + url = "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz"; + sha1 = "5d47f709c4c9fc3c216b6d46127280f40b39d790"; + }; + } + + { + name = "matcher___matcher_1.1.1.tgz"; + path = fetchurl { + name = "matcher___matcher_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz"; + sha1 = "51d8301e138f840982b338b116bb0c09af62c1c2"; + }; + } + + { + name = "md5___md5_2.2.1.tgz"; + path = fetchurl { + name = "md5___md5_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz"; + sha1 = "53ab38d5fe3c8891ba465329ea23fac0540126f9"; + }; + } + + { + name = "meant___meant_1.0.1.tgz"; + path = fetchurl { + name = "meant___meant_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz"; + sha1 = "66044fea2f23230ec806fb515efea29c44d2115d"; + }; + } + + { + name = "media_typer___media_typer_0.3.0.tgz"; + path = fetchurl { + name = "media_typer___media_typer_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + } + + { + name = "mediasource___mediasource_2.2.2.tgz"; + path = fetchurl { + name = "mediasource___mediasource_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/mediasource/-/mediasource-2.2.2.tgz"; + sha1 = "2fe826f14e51da97fa4bf87be7b808a0b11d3a4c"; + }; + } + + { + name = "mem___mem_1.1.0.tgz"; + path = fetchurl { + name = "mem___mem_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz"; + sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76"; + }; + } + + { + name = "mem___mem_4.0.0.tgz"; + path = fetchurl { + name = "mem___mem_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz"; + sha1 = "6437690d9471678f6cc83659c00cbafcd6b0cdaf"; + }; + } + + { + name = "memoizee___memoizee_0.4.14.tgz"; + path = fetchurl { + name = "memoizee___memoizee_0.4.14.tgz"; + url = "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz"; + sha1 = "07a00f204699f9a95c2d9e77218271c7cd610d57"; + }; + } + + { + name = "memory_chunk_store___memory_chunk_store_1.3.0.tgz"; + path = fetchurl { + name = "memory_chunk_store___memory_chunk_store_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/memory-chunk-store/-/memory-chunk-store-1.3.0.tgz"; + sha1 = "ae99e7e3b58b52db43d49d94722930d39459d0c4"; + }; + } + + { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + path = fetchurl { + name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + } + + { + name = "merge___merge_1.2.1.tgz"; + path = fetchurl { + name = "merge___merge_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz"; + sha1 = "38bebf80c3220a8a487b6fcfb3941bb11720c145"; + }; + } + + { + name = "methods___methods_1.1.2.tgz"; + path = fetchurl { + name = "methods___methods_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + } + + { + name = "micromatch___micromatch_3.1.10.tgz"; + path = fetchurl { + name = "micromatch___micromatch_3.1.10.tgz"; + url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; + sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; + }; + } + + { + name = "mime_db___mime_db_1.37.0.tgz"; + path = fetchurl { + name = "mime_db___mime_db_1.37.0.tgz"; + url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz"; + sha1 = "0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"; + }; + } + + { + name = "mime_types___mime_types_2.1.21.tgz"; + path = fetchurl { + name = "mime_types___mime_types_2.1.21.tgz"; + url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz"; + sha1 = "28995aa1ecb770742fe6ae7e58f9181c744b3f96"; + }; + } + + { + name = "mime___mime_1.3.4.tgz"; + path = fetchurl { + name = "mime___mime_1.3.4.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz"; + sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53"; + }; + } + + { + name = "mime___mime_1.4.1.tgz"; + path = fetchurl { + name = "mime___mime_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz"; + sha1 = "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"; + }; + } + + { + name = "mime___mime_1.6.0.tgz"; + path = fetchurl { + name = "mime___mime_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz"; + sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1"; + }; + } + + { + name = "mime___mime_2.4.0.tgz"; + path = fetchurl { + name = "mime___mime_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz"; + sha1 = "e051fd881358585f3279df333fe694da0bcffdd6"; + }; + } + + { + name = "mimelib___mimelib_0.3.1.tgz"; + path = fetchurl { + name = "mimelib___mimelib_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/mimelib/-/mimelib-0.3.1.tgz"; + sha1 = "787add2415d827acb3af6ec4bca1ea9596418853"; + }; + } + + { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + path = fetchurl { + name = "mimic_fn___mimic_fn_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz"; + sha1 = "820c86a39334640e99516928bd03fca88057d022"; + }; + } + + { + name = "mimic_response___mimic_response_1.0.1.tgz"; + path = fetchurl { + name = "mimic_response___mimic_response_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz"; + sha1 = "4923538878eef42063cb8a3e3b0798781487ab1b"; + }; + } + + { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + path = fetchurl { + name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"; + }; + } + + { + name = "minimatch___minimatch_3.0.4.tgz"; + path = fetchurl { + name = "minimatch___minimatch_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; + sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; + }; + } + + { + name = "minimist___minimist_0.0.8.tgz"; + path = fetchurl { + name = "minimist___minimist_0.0.8.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz"; + sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; + }; + } + + { + name = "minimist___minimist_1.1.3.tgz"; + path = fetchurl { + name = "minimist___minimist_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz"; + sha1 = "3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"; + }; + } + + { + name = "minimist___minimist_1.2.0.tgz"; + path = fetchurl { + name = "minimist___minimist_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz"; + sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; + }; + } + + { + name = "minipass___minipass_2.3.5.tgz"; + path = fetchurl { + name = "minipass___minipass_2.3.5.tgz"; + url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz"; + sha1 = "cacebe492022497f656b0f0f51e2682a9ed2d848"; + }; + } + + { + name = "minizlib___minizlib_1.1.1.tgz"; + path = fetchurl { + name = "minizlib___minizlib_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz"; + sha1 = "6734acc045a46e61d596a43bb9d9cd326e19cc42"; + }; + } + + { + name = "mississippi___mississippi_2.0.0.tgz"; + path = fetchurl { + name = "mississippi___mississippi_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz"; + sha1 = "3442a508fafc28500486feea99409676e4ee5a6f"; + }; + } + + { + name = "mississippi___mississippi_3.0.0.tgz"; + path = fetchurl { + name = "mississippi___mississippi_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz"; + sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022"; + }; + } + + { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + path = fetchurl { + name = "mixin_deep___mixin_deep_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz"; + sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe"; + }; + } + + { + name = "mkdirp___mkdirp_0.5.1.tgz"; + path = fetchurl { + name = "mkdirp___mkdirp_0.5.1.tgz"; + url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz"; + sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; + }; + } + + { + name = "mocha___mocha_5.2.0.tgz"; + path = fetchurl { + name = "mocha___mocha_5.2.0.tgz"; + url = "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz"; + sha1 = "6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"; + }; + } + + { + name = "moment_timezone___moment_timezone_0.5.23.tgz"; + path = fetchurl { + name = "moment_timezone___moment_timezone_0.5.23.tgz"; + url = "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz"; + sha1 = "7cbb00db2c14c71b19303cb47b0fb0a6d8651463"; + }; + } + + { + name = "moment___moment_2.22.2.tgz"; + path = fetchurl { + name = "moment___moment_2.22.2.tgz"; + url = "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz"; + sha1 = "3c257f9839fc0e93ff53149632239eb90783ff66"; + }; + } + + { + name = "moment___moment_2.24.0.tgz"; + path = fetchurl { + name = "moment___moment_2.24.0.tgz"; + url = "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz"; + sha1 = "0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"; + }; + } + + { + name = "morgan___morgan_1.9.1.tgz"; + path = fetchurl { + name = "morgan___morgan_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz"; + sha1 = "0a8d16734a1d9afbc824b99df87e738e58e2da59"; + }; + } + + { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + path = fetchurl { + name = "move_concurrently___move_concurrently_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz"; + sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92"; + }; + } + + { + name = "mp4_box_encoding___mp4_box_encoding_1.3.0.tgz"; + path = fetchurl { + name = "mp4_box_encoding___mp4_box_encoding_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/mp4-box-encoding/-/mp4-box-encoding-1.3.0.tgz"; + sha1 = "2a6f750947ff68c3a498fd76cd6424c53d995d48"; + }; + } + + { + name = "mp4_stream___mp4_stream_2.0.3.tgz"; + path = fetchurl { + name = "mp4_stream___mp4_stream_2.0.3.tgz"; + url = "https://registry.yarnpkg.com/mp4-stream/-/mp4-stream-2.0.3.tgz"; + sha1 = "30acee07709d323f8dcd87a07b3ce9c3c4bfb364"; + }; + } + + { + name = "ms___ms_0.7.1.tgz"; + path = fetchurl { + name = "ms___ms_0.7.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz"; + sha1 = "9cd13c03adbff25b65effde7ce864ee952017098"; + }; + } + + { + name = "ms___ms_0.7.2.tgz"; + path = fetchurl { + name = "ms___ms_0.7.2.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz"; + sha1 = "ae25cf2512b3885a1d95d7f037868d8431124765"; + }; + } + + { + name = "ms___ms_2.0.0.tgz"; + path = fetchurl { + name = "ms___ms_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + } + + { + name = "ms___ms_2.1.1.tgz"; + path = fetchurl { + name = "ms___ms_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz"; + sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"; + }; + } + + { + name = "multer___multer_1.4.1.tgz"; + path = fetchurl { + name = "multer___multer_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/multer/-/multer-1.4.1.tgz"; + sha1 = "24b12a416a22fec2ade810539184bf138720159e"; + }; + } + + { + name = "multistream___multistream_2.1.1.tgz"; + path = fetchurl { + name = "multistream___multistream_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/multistream/-/multistream-2.1.1.tgz"; + sha1 = "629d3a29bd76623489980d04519a2c365948148c"; + }; + } + + { + name = "mute_stream___mute_stream_0.0.5.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz"; + sha1 = "8fbfabb0a98a253d3184331f9e8deb7372fac6c0"; + }; + } + + { + name = "mute_stream___mute_stream_0.0.7.tgz"; + path = fetchurl { + name = "mute_stream___mute_stream_0.0.7.tgz"; + url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz"; + sha1 = "3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"; + }; + } + + { + name = "mv___mv_2.1.1.tgz"; + path = fetchurl { + name = "mv___mv_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz"; + sha1 = "ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"; + }; + } + + { + name = "nan___nan_2.11.1.tgz"; + path = fetchurl { + name = "nan___nan_2.11.1.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz"; + sha1 = "90e22bccb8ca57ea4cd37cc83d3819b52eea6766"; + }; + } + + { + name = "nan___nan_2.10.0.tgz"; + path = fetchurl { + name = "nan___nan_2.10.0.tgz"; + url = "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz"; + sha1 = "96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"; + }; + } + + { + name = "nanomatch___nanomatch_1.2.13.tgz"; + path = fetchurl { + name = "nanomatch___nanomatch_1.2.13.tgz"; + url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; + sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; + }; + } + + { + name = "napi_build_utils___napi_build_utils_1.0.1.tgz"; + path = fetchurl { + name = "napi_build_utils___napi_build_utils_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz"; + sha1 = "1381a0f92c39d66bf19852e7873432fc2123e508"; + }; + } + + { + name = "ncp___ncp_1.0.1.tgz"; + path = fetchurl { + name = "ncp___ncp_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz"; + sha1 = "d15367e5cb87432ba117d2bf80fdf45aecfb4246"; + }; + } + + { + name = "ncp___ncp_2.0.0.tgz"; + path = fetchurl { + name = "ncp___ncp_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz"; + sha1 = "195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"; + }; + } + + { + name = "needle___needle_2.2.4.tgz"; + path = fetchurl { + name = "needle___needle_2.2.4.tgz"; + url = "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz"; + sha1 = "51931bff82533b1928b7d1d69e01f1b00ffd2a4e"; + }; + } + + { + name = "negotiator___negotiator_0.5.3.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.5.3.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz"; + sha1 = "269d5c476810ec92edbe7b6c2f28316384f9a7e8"; + }; + } + + { + name = "negotiator___negotiator_0.6.1.tgz"; + path = fetchurl { + name = "negotiator___negotiator_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz"; + sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; + }; + } + + { + name = "netmask___netmask_1.0.6.tgz"; + path = fetchurl { + name = "netmask___netmask_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz"; + sha1 = "20297e89d86f6f6400f250d9f4f6b4c1945fcd35"; + }; + } + + { + name = "netrc_parser___netrc_parser_3.1.6.tgz"; + path = fetchurl { + name = "netrc_parser___netrc_parser_3.1.6.tgz"; + url = "https://registry.yarnpkg.com/netrc-parser/-/netrc-parser-3.1.6.tgz"; + sha1 = "7243c9ec850b8e805b9bdc7eae7b1450d4a96e72"; + }; + } + + { + name = "next_event___next_event_1.0.0.tgz"; + path = fetchurl { + name = "next_event___next_event_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz"; + sha1 = "e7778acde2e55802e0ad1879c39cf6f75eda61d8"; + }; + } + + { + name = "next_tick___next_tick_1.0.0.tgz"; + path = fetchurl { + name = "next_tick___next_tick_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz"; + sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c"; + }; + } + + { + name = "nice_try___nice_try_1.0.5.tgz"; + path = fetchurl { + name = "nice_try___nice_try_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz"; + sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366"; + }; + } + + { + name = "nocache___nocache_2.0.0.tgz"; + path = fetchurl { + name = "nocache___nocache_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz"; + sha1 = "202b48021a0c4cbde2df80de15a17443c8b43980"; + }; + } + + { + name = "node_abi___node_abi_2.5.0.tgz"; + path = fetchurl { + name = "node_abi___node_abi_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/node-abi/-/node-abi-2.5.0.tgz"; + sha1 = "942e1a78bce764bc0c1672d5821e492b9d032052"; + }; + } + + { + name = "node_addon_api___node_addon_api_1.6.2.tgz"; + path = fetchurl { + name = "node_addon_api___node_addon_api_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.6.2.tgz"; + sha1 = "d8aad9781a5cfc4132cc2fecdbdd982534265217"; + }; + } + + { + name = "node_fetch_npm___node_fetch_npm_2.0.2.tgz"; + path = fetchurl { + name = "node_fetch_npm___node_fetch_npm_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz"; + sha1 = "7258c9046182dca345b4208eda918daf33697ff7"; + }; + } + + { + name = "node_forge___node_forge_0.7.6.tgz"; + path = fetchurl { + name = "node_forge___node_forge_0.7.6.tgz"; + url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz"; + sha1 = "fdf3b418aee1f94f0ef642cd63486c77ca9724ac"; + }; + } + + { + name = "node_gyp_build___node_gyp_build_3.4.0.tgz"; + path = fetchurl { + name = "node_gyp_build___node_gyp_build_3.4.0.tgz"; + url = "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.4.0.tgz"; + sha1 = "f8f62507e65f152488b28aac25d04b9d79748cf7"; + }; + } + + { + name = "node_gyp___node_gyp_3.8.0.tgz"; + path = fetchurl { + name = "node_gyp___node_gyp_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz"; + sha1 = "540304261c330e80d0d5edce253a68cb3964218c"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.11.0.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.11.0.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz"; + sha1 = "db1f33215272f692cd38f03238e3e9b47c5dd054"; + }; + } + + { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + path = fetchurl { + name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; + url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz"; + sha1 = "3070040716afdc778747b61b6887bf78880b80fc"; + }; + } + + { + name = "nodemailer_fetch___nodemailer_fetch_1.3.0.tgz"; + path = fetchurl { + name = "nodemailer_fetch___nodemailer_fetch_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.3.0.tgz"; + sha1 = "9f37f6a5b80c1cb5d697ca2bfbde41a6582a50b0"; + }; + } + + { + name = "nodemailer_fetch___nodemailer_fetch_1.6.0.tgz"; + path = fetchurl { + name = "nodemailer_fetch___nodemailer_fetch_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz"; + sha1 = "79c4908a1c0f5f375b73fe888da9828f6dc963a4"; + }; + } + + { + name = "nodemailer_shared___nodemailer_shared_1.0.4.tgz"; + path = fetchurl { + name = "nodemailer_shared___nodemailer_shared_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.0.4.tgz"; + sha1 = "8b5c5c35bfb29a47dda7d38303f3a4fb47ba38ae"; + }; + } + + { + name = "nodemailer_shared___nodemailer_shared_1.1.0.tgz"; + path = fetchurl { + name = "nodemailer_shared___nodemailer_shared_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz"; + sha1 = "cf5994e2fd268d00f5cf0fa767a08169edb07ec0"; + }; + } + + { + name = "nodemailer___nodemailer_4.7.0.tgz"; + path = fetchurl { + name = "nodemailer___nodemailer_4.7.0.tgz"; + url = "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz"; + sha1 = "4420e06abfffd77d0618f184ea49047db84f4ad8"; + }; + } + + { + name = "nodemon___nodemon_1.18.7.tgz"; + path = fetchurl { + name = "nodemon___nodemon_1.18.7.tgz"; + url = "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.7.tgz"; + sha1 = "716b66bf3e89ac4fcfb38a9e61887a03fc82efbb"; + }; + } + + { + name = "noop_logger___noop_logger_0.1.1.tgz"; + path = fetchurl { + name = "noop_logger___noop_logger_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz"; + sha1 = "94a2b1633c4f1317553007d8966fd0e841b6a4c2"; + }; + } + + { + name = "nopt___nopt_3.0.6.tgz"; + path = fetchurl { + name = "nopt___nopt_3.0.6.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz"; + sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; + }; + } + + { + name = "nopt___nopt_4.0.1.tgz"; + path = fetchurl { + name = "nopt___nopt_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz"; + sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; + }; + } + + { + name = "nopt___nopt_1.0.10.tgz"; + path = fetchurl { + name = "nopt___nopt_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz"; + sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee"; + }; + } + + { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + path = fetchurl { + name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; + url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; + sha1 = "12f95a307d58352075a04907b84ac8be98ac012f"; + }; + } + + { + name = "normalize_path___normalize_path_2.1.1.tgz"; + path = fetchurl { + name = "normalize_path___normalize_path_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; + sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; + }; + } + + { + name = "npm_audit_report___npm_audit_report_1.3.1.tgz"; + path = fetchurl { + name = "npm_audit_report___npm_audit_report_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.1.tgz"; + sha1 = "e79ea1fcb5ffaf3031102b389d5222c2b0459632"; + }; + } + + { + name = "npm_bundled___npm_bundled_1.0.5.tgz"; + path = fetchurl { + name = "npm_bundled___npm_bundled_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz"; + sha1 = "3c1732b7ba936b3a10325aef616467c0ccbcc979"; + }; + } + + { + name = "npm_cache_filename___npm_cache_filename_1.0.2.tgz"; + path = fetchurl { + name = "npm_cache_filename___npm_cache_filename_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz"; + sha1 = "ded306c5b0bfc870a9e9faf823bc5f283e05ae11"; + }; + } + + { + name = "npm_install_checks___npm_install_checks_3.0.0.tgz"; + path = fetchurl { + name = "npm_install_checks___npm_install_checks_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz"; + sha1 = "d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7"; + }; + } + + { + name = "npm_lifecycle___npm_lifecycle_2.1.0.tgz"; + path = fetchurl { + name = "npm_lifecycle___npm_lifecycle_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz"; + sha1 = "1eda2eedb82db929e3a0c50341ab0aad140ed569"; + }; + } + + { + name = "npm_logical_tree___npm_logical_tree_1.2.1.tgz"; + path = fetchurl { + name = "npm_logical_tree___npm_logical_tree_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz"; + sha1 = "44610141ca24664cad35d1e607176193fd8f5b88"; + }; + } + + { + name = "npm_package_arg___npm_package_arg_6.1.0.tgz"; + path = fetchurl { + name = "npm_package_arg___npm_package_arg_6.1.0.tgz"; + url = "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz"; + sha1 = "15ae1e2758a5027efb4c250554b85a737db7fcc1"; + }; + } + + { + name = "npm_packlist___npm_packlist_1.1.12.tgz"; + path = fetchurl { + name = "npm_packlist___npm_packlist_1.1.12.tgz"; + url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz"; + sha1 = "22bde2ebc12e72ca482abd67afc51eb49377243a"; + }; + } + + { + name = "npm_path___npm_path_2.0.4.tgz"; + path = fetchurl { + name = "npm_path___npm_path_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz"; + sha1 = "c641347a5ff9d6a09e4d9bce5580c4f505278e64"; + }; + } + + { + name = "npm_pick_manifest___npm_pick_manifest_2.2.3.tgz"; + path = fetchurl { + name = "npm_pick_manifest___npm_pick_manifest_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz"; + sha1 = "32111d2a9562638bb2c8f2bf27f7f3092c8fae40"; + }; + } + + { + name = "npm_profile___npm_profile_3.0.2.tgz"; + path = fetchurl { + name = "npm_profile___npm_profile_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-profile/-/npm-profile-3.0.2.tgz"; + sha1 = "58d568f1b56ef769602fd0aed8c43fa0e0de0f57"; + }; + } + + { + name = "npm_registry_client___npm_registry_client_8.6.0.tgz"; + path = fetchurl { + name = "npm_registry_client___npm_registry_client_8.6.0.tgz"; + url = "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz"; + sha1 = "7f1529f91450732e89f8518e0f21459deea3e4c4"; + }; + } + + { + name = "npm_registry_fetch___npm_registry_fetch_1.1.1.tgz"; + path = fetchurl { + name = "npm_registry_fetch___npm_registry_fetch_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-1.1.1.tgz"; + sha1 = "710bc5947d9ee2c549375072dab6d5d17baf2eb2"; + }; + } + + { + name = "npm_registry_fetch___npm_registry_fetch_3.8.0.tgz"; + path = fetchurl { + name = "npm_registry_fetch___npm_registry_fetch_3.8.0.tgz"; + url = "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz"; + sha1 = "aa7d9a7c92aff94f48dba0984bdef4bd131c88cc"; + }; + } + + { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + path = fetchurl { + name = "npm_run_path___npm_run_path_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz"; + sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f"; + }; + } + + { + name = "npm_user_validate___npm_user_validate_1.0.0.tgz"; + path = fetchurl { + name = "npm_user_validate___npm_user_validate_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz"; + sha1 = "8ceca0f5cea04d4e93519ef72d0557a75122e951"; + }; + } + + { + name = "npm_which___npm_which_3.0.1.tgz"; + path = fetchurl { + name = "npm_which___npm_which_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz"; + sha1 = "9225f26ec3a285c209cae67c3b11a6b4ab7140aa"; + }; + } + + { + name = "npm___npm_6.4.1.tgz"; + path = fetchurl { + name = "npm___npm_6.4.1.tgz"; + url = "https://registry.yarnpkg.com/npm/-/npm-6.4.1.tgz"; + sha1 = "4f39f9337b557a28faed4a771d5c8802d6b4288b"; + }; + } + + { + name = "npmlog___npmlog_4.1.2.tgz"; + path = fetchurl { + name = "npmlog___npmlog_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz"; + sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b"; + }; + } + + { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + path = fetchurl { + name = "number_is_nan___number_is_nan_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz"; + sha1 = "097b602b53422a522c1afb8790318336941a011d"; + }; + } + + { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + path = fetchurl { + name = "oauth_sign___oauth_sign_0.9.0.tgz"; + url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz"; + sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455"; + }; + } + + { + name = "oauth2_server___oauth2_server_3.0.0.tgz"; + path = fetchurl { + name = "oauth2_server___oauth2_server_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/oauth2-server/-/oauth2-server-3.0.0.tgz"; + sha1 = "c46276b74c3d28634d59ee981f76b58a6459cc28"; + }; + } + + { + name = "object_assign___object_assign_4.1.0.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz"; + sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"; + }; + } + + { + name = "object_assign___object_assign_4.1.1.tgz"; + path = fetchurl { + name = "object_assign___object_assign_4.1.1.tgz"; + url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + } + + { + name = "object_component___object_component_0.0.3.tgz"; + path = fetchurl { + name = "object_component___object_component_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz"; + sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291"; + }; + } + + { + name = "object_copy___object_copy_0.1.0.tgz"; + path = fetchurl { + name = "object_copy___object_copy_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; + sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; + }; + } + + { + name = "object_keys___object_keys_1.0.12.tgz"; + path = fetchurl { + name = "object_keys___object_keys_1.0.12.tgz"; + url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz"; + sha1 = "09c53855377575310cca62f55bb334abff7b3ed2"; + }; + } + + { + name = "object_visit___object_visit_1.0.1.tgz"; + path = fetchurl { + name = "object_visit___object_visit_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; + sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; + }; + } + + { + name = "object.pick___object.pick_1.3.0.tgz"; + path = fetchurl { + name = "object.pick___object.pick_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; + sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; + }; + } + + { + name = "on_finished___on_finished_2.3.0.tgz"; + path = fetchurl { + name = "on_finished___on_finished_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + } + + { + name = "on_headers___on_headers_1.0.1.tgz"; + path = fetchurl { + name = "on_headers___on_headers_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz"; + sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; + }; + } + + { + name = "once___once_1.4.0.tgz"; + path = fetchurl { + name = "once___once_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + } + + { + name = "one_time___one_time_0.0.4.tgz"; + path = fetchurl { + name = "one_time___one_time_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz"; + sha1 = "f8cdf77884826fe4dff93e3a9cc37b1e4480742e"; + }; + } + + { + name = "onetime___onetime_1.1.0.tgz"; + path = fetchurl { + name = "onetime___onetime_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz"; + sha1 = "a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"; + }; + } + + { + name = "onetime___onetime_2.0.1.tgz"; + path = fetchurl { + name = "onetime___onetime_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz"; + sha1 = "067428230fd67443b2794b22bba528b6867962d4"; + }; + } + + { + name = "ono___ono_4.0.10.tgz"; + path = fetchurl { + name = "ono___ono_4.0.10.tgz"; + url = "https://registry.yarnpkg.com/ono/-/ono-4.0.10.tgz"; + sha1 = "f7f9c6d1b76270a499d8664c95a740d44175134c"; + }; + } + + { + name = "open___open_0.0.5.tgz"; + path = fetchurl { + name = "open___open_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz"; + sha1 = "42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"; + }; + } + + { + name = "openapi_schema_validation___openapi_schema_validation_0.4.2.tgz"; + path = fetchurl { + name = "openapi_schema_validation___openapi_schema_validation_0.4.2.tgz"; + url = "https://registry.yarnpkg.com/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz"; + sha1 = "895c29021be02e000f71c51f859da52118eb1e21"; + }; + } + + { + name = "opener___opener_1.5.1.tgz"; + path = fetchurl { + name = "opener___opener_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz"; + sha1 = "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"; + }; + } + + { + name = "optionator___optionator_0.8.2.tgz"; + path = fetchurl { + name = "optionator___optionator_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz"; + sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64"; + }; + } + + { + name = "options___options_0.0.6.tgz"; + path = fetchurl { + name = "options___options_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz"; + sha1 = "ec22d312806bb53e731773e7cdaefcf1c643128f"; + }; + } + + { + name = "os_homedir___os_homedir_1.0.2.tgz"; + path = fetchurl { + name = "os_homedir___os_homedir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz"; + sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; + }; + } + + { + name = "os_locale___os_locale_2.1.0.tgz"; + path = fetchurl { + name = "os_locale___os_locale_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz"; + sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2"; + }; + } + + { + name = "os_locale___os_locale_3.0.1.tgz"; + path = fetchurl { + name = "os_locale___os_locale_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz"; + sha1 = "3b014fbf01d87f60a1e5348d80fe870dc82c4620"; + }; + } + + { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + path = fetchurl { + name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + } + + { + name = "osenv___osenv_0.1.5.tgz"; + path = fetchurl { + name = "osenv___osenv_0.1.5.tgz"; + url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz"; + sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410"; + }; + } + + { + name = "p_defer___p_defer_1.0.0.tgz"; + path = fetchurl { + name = "p_defer___p_defer_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz"; + sha1 = "9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"; + }; + } + + { + name = "p_finally___p_finally_1.0.0.tgz"; + path = fetchurl { + name = "p_finally___p_finally_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz"; + sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae"; + }; + } + + { + name = "p_is_promise___p_is_promise_1.1.0.tgz"; + path = fetchurl { + name = "p_is_promise___p_is_promise_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz"; + sha1 = "9c9456989e9f6588017b0434d56097675c3da05e"; + }; + } + + { + name = "p_limit___p_limit_1.3.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz"; + sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"; + }; + } + + { + name = "p_limit___p_limit_2.0.0.tgz"; + path = fetchurl { + name = "p_limit___p_limit_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz"; + sha1 = "e624ed54ee8c460a778b3c9f3670496ff8a57aec"; + }; + } + + { + name = "p_locate___p_locate_2.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz"; + sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; + }; + } + + { + name = "p_locate___p_locate_3.0.0.tgz"; + path = fetchurl { + name = "p_locate___p_locate_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz"; + sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4"; + }; + } + + { + name = "p_map___p_map_1.2.0.tgz"; + path = fetchurl { + name = "p_map___p_map_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz"; + sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b"; + }; + } + + { + name = "p_map___p_map_2.0.0.tgz"; + path = fetchurl { + name = "p_map___p_map_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz"; + sha1 = "be18c5a5adeb8e156460651421aceca56c213a50"; + }; + } + + { + name = "p_try___p_try_1.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz"; + sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; + }; + } + + { + name = "p_try___p_try_2.0.0.tgz"; + path = fetchurl { + name = "p_try___p_try_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz"; + sha1 = "85080bb87c64688fa47996fe8f7dfbe8211760b1"; + }; + } + + { + name = "package_json_versionify___package_json_versionify_1.0.4.tgz"; + path = fetchurl { + name = "package_json_versionify___package_json_versionify_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/package-json-versionify/-/package-json-versionify-1.0.4.tgz"; + sha1 = "5860587a944873a6b7e6d26e8e51ffb22315bf17"; + }; + } + + { + name = "package_json___package_json_4.0.1.tgz"; + path = fetchurl { + name = "package_json___package_json_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz"; + sha1 = "8869a0401253661c4c4ca3da6c2121ed555f5eed"; + }; + } + + { + name = "packet_reader___packet_reader_0.3.1.tgz"; + path = fetchurl { + name = "packet_reader___packet_reader_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz"; + sha1 = "cd62e60af8d7fea8a705ec4ff990871c46871f27"; + }; + } + + { + name = "pacote___pacote_8.1.6.tgz"; + path = fetchurl { + name = "pacote___pacote_8.1.6.tgz"; + url = "https://registry.yarnpkg.com/pacote/-/pacote-8.1.6.tgz"; + sha1 = "8e647564d38156367e7a9dc47a79ca1ab278d46e"; + }; + } + + { + name = "parallel_transform___parallel_transform_1.1.0.tgz"; + path = fetchurl { + name = "parallel_transform___parallel_transform_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz"; + sha1 = "d410f065b05da23081fcd10f28854c29bda33b06"; + }; + } + + { + name = "parse_json___parse_json_4.0.0.tgz"; + path = fetchurl { + name = "parse_json___parse_json_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz"; + sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; + }; + } + + { + name = "parse_numeric_range___parse_numeric_range_0.0.2.tgz"; + path = fetchurl { + name = "parse_numeric_range___parse_numeric_range_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz"; + sha1 = "b4f09d413c7adbcd987f6e9233c7b4b210c938e4"; + }; + } + + { + name = "parse_torrent___parse_torrent_6.1.2.tgz"; + path = fetchurl { + name = "parse_torrent___parse_torrent_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-6.1.2.tgz"; + sha1 = "99da5bdd23435a1cb7e8e7a63847c4efb21b1956"; + }; + } + + { + name = "parsejson___parsejson_0.0.3.tgz"; + path = fetchurl { + name = "parsejson___parsejson_0.0.3.tgz"; + url = "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz"; + sha1 = "ab7e3759f209ece99437973f7d0f1f64ae0e64ab"; + }; + } + + { + name = "parseqs___parseqs_0.0.5.tgz"; + path = fetchurl { + name = "parseqs___parseqs_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz"; + sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d"; + }; + } + + { + name = "parseuri___parseuri_0.0.5.tgz"; + path = fetchurl { + name = "parseuri___parseuri_0.0.5.tgz"; + url = "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz"; + sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a"; + }; + } + + { + name = "parseurl___parseurl_1.3.2.tgz"; + path = fetchurl { + name = "parseurl___parseurl_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz"; + sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; + }; + } + + { + name = "pascalcase___pascalcase_0.1.1.tgz"; + path = fetchurl { + name = "pascalcase___pascalcase_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; + sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; + }; + } + + { + name = "password_generator___password_generator_2.2.0.tgz"; + path = fetchurl { + name = "password_generator___password_generator_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/password-generator/-/password-generator-2.2.0.tgz"; + sha1 = "fc75cff795110923e054a5a71623433240bf5e49"; + }; + } + + { + name = "path_dirname___path_dirname_1.0.2.tgz"; + path = fetchurl { + name = "path_dirname___path_dirname_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz"; + sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; + }; + } + + { + name = "path_exists___path_exists_3.0.0.tgz"; + path = fetchurl { + name = "path_exists___path_exists_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz"; + sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; + }; + } + + { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + path = fetchurl { + name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + } + + { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + path = fetchurl { + name = "path_is_inside___path_is_inside_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz"; + sha1 = "365417dede44430d1c11af61027facf074bdfc53"; + }; + } + + { + name = "path_key___path_key_2.0.1.tgz"; + path = fetchurl { + name = "path_key___path_key_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz"; + sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; + }; + } + + { + name = "path_parse___path_parse_1.0.6.tgz"; + path = fetchurl { + name = "path_parse___path_parse_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz"; + sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c"; + }; + } + + { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + path = fetchurl { + name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + } + + { + name = "pathval___pathval_1.1.0.tgz"; + path = fetchurl { + name = "pathval___pathval_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz"; + sha1 = "b942e6d4bde653005ef6b71361def8727d0645e0"; + }; + } + + { + name = "peek_stream___peek_stream_1.1.3.tgz"; + path = fetchurl { + name = "peek_stream___peek_stream_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz"; + sha1 = "3b35d84b7ccbbd262fff31dc10da56856ead6d67"; + }; + } + + { + name = "pem___pem_1.13.2.tgz"; + path = fetchurl { + name = "pem___pem_1.13.2.tgz"; + url = "https://registry.yarnpkg.com/pem/-/pem-1.13.2.tgz"; + sha1 = "7b68acbb590fdc13772bca487983cb84cd7b443e"; + }; + } + + { + name = "performance_now___performance_now_2.1.0.tgz"; + path = fetchurl { + name = "performance_now___performance_now_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + } + + { + name = "pfeed___pfeed_1.1.6.tgz"; + path = fetchurl { + name = "pfeed___pfeed_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/pfeed/-/pfeed-1.1.6.tgz"; + sha1 = "0de2a1c40b116fa236227237fa264c7956c185e8"; + }; + } + + { + name = "pg_connection_string___pg_connection_string_0.1.3.tgz"; + path = fetchurl { + name = "pg_connection_string___pg_connection_string_0.1.3.tgz"; + url = "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz"; + sha1 = "da1847b20940e42ee1492beaf65d49d91b245df7"; + }; + } + + { + name = "pg_pool___pg_pool_2.0.4.tgz"; + path = fetchurl { + name = "pg_pool___pg_pool_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.4.tgz"; + sha1 = "05ad0f2d9437d89c94ccc4f4d0a44ac65ade865b"; + }; + } + + { + name = "pg_types___pg_types_1.12.1.tgz"; + path = fetchurl { + name = "pg_types___pg_types_1.12.1.tgz"; + url = "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.1.tgz"; + sha1 = "d64087e3903b58ffaad279e7595c52208a14c3d2"; + }; + } + + { + name = "pg___pg_7.7.1.tgz"; + path = fetchurl { + name = "pg___pg_7.7.1.tgz"; + url = "https://registry.yarnpkg.com/pg/-/pg-7.7.1.tgz"; + sha1 = "546b192ff484322b69689391f885de3ba91a30d4"; + }; + } + + { + name = "pgpass___pgpass_1.0.2.tgz"; + path = fetchurl { + name = "pgpass___pgpass_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz"; + sha1 = "2a7bb41b6065b67907e91da1b07c1847c877b306"; + }; + } + + { + name = "piece_length___piece_length_1.0.0.tgz"; + path = fetchurl { + name = "piece_length___piece_length_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/piece-length/-/piece-length-1.0.0.tgz"; + sha1 = "4db7167157fd69fef14caf7262cd39f189b24508"; + }; + } + + { + name = "pify___pify_2.3.0.tgz"; + path = fetchurl { + name = "pify___pify_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + } + + { + name = "pify___pify_3.0.0.tgz"; + path = fetchurl { + name = "pify___pify_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz"; + sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"; + }; + } + + { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + path = fetchurl { + name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; + sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; + }; + } + + { + name = "pinkie___pinkie_2.0.4.tgz"; + path = fetchurl { + name = "pinkie___pinkie_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; + sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; + }; + } + + { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + path = fetchurl { + name = "pkg_dir___pkg_dir_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz"; + sha1 = "2749020f239ed990881b1f71210d51eb6523bea3"; + }; + } + + { + name = "pkginfo___pkginfo_0.3.1.tgz"; + path = fetchurl { + name = "pkginfo___pkginfo_0.3.1.tgz"; + url = "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz"; + sha1 = "5b29f6a81f70717142e09e765bbeab97b4f81e21"; + }; + } + + { + name = "pkginfo___pkginfo_0.4.1.tgz"; + path = fetchurl { + name = "pkginfo___pkginfo_0.4.1.tgz"; + url = "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz"; + sha1 = "b5418ef0439de5425fc4995042dced14fb2a84ff"; + }; + } + + { + name = "platform___platform_1.3.5.tgz"; + path = fetchurl { + name = "platform___platform_1.3.5.tgz"; + url = "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz"; + sha1 = "fb6958c696e07e2918d2eeda0f0bc9448d733444"; + }; + } + + { + name = "please_upgrade_node___please_upgrade_node_3.1.1.tgz"; + path = fetchurl { + name = "please_upgrade_node___please_upgrade_node_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz"; + sha1 = "ed320051dfcc5024fae696712c8288993595e8ac"; + }; + } + + { + name = "pluralize___pluralize_1.2.1.tgz"; + path = fetchurl { + name = "pluralize___pluralize_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz"; + sha1 = "d1a21483fd22bb41e58a12fa3421823140897c45"; + }; + } + + { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + path = fetchurl { + name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; + sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; + }; + } + + { + name = "postgres_array___postgres_array_1.0.3.tgz"; + path = fetchurl { + name = "postgres_array___postgres_array_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.3.tgz"; + sha1 = "c561fc3b266b21451fc6555384f4986d78ec80f5"; + }; + } + + { + name = "postgres_bytea___postgres_bytea_1.0.0.tgz"; + path = fetchurl { + name = "postgres_bytea___postgres_bytea_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz"; + sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35"; + }; + } + + { + name = "postgres_date___postgres_date_1.0.3.tgz"; + path = fetchurl { + name = "postgres_date___postgres_date_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz"; + sha1 = "e2d89702efdb258ff9d9cee0fe91bd06975257a8"; + }; + } + + { + name = "postgres_interval___postgres_interval_1.1.2.tgz"; + path = fetchurl { + name = "postgres_interval___postgres_interval_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.2.tgz"; + sha1 = "bf71ff902635f21cb241a013fc421d81d1db15a9"; + }; + } + + { + name = "prebuild_install___prebuild_install_5.2.2.tgz"; + path = fetchurl { + name = "prebuild_install___prebuild_install_5.2.2.tgz"; + url = "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.2.tgz"; + sha1 = "237888f21bfda441d0ee5f5612484390bccd4046"; + }; + } + + { + name = "precond___precond_0.2.3.tgz"; + path = fetchurl { + name = "precond___precond_0.2.3.tgz"; + url = "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz"; + sha1 = "aa9591bcaa24923f1e0f4849d240f47efc1075ac"; + }; + } + + { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + path = fetchurl { + name = "prelude_ls___prelude_ls_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + } + + { + name = "prepend_http___prepend_http_1.0.4.tgz"; + path = fetchurl { + name = "prepend_http___prepend_http_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz"; + sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"; + }; + } + + { + name = "pretty_format___pretty_format_23.6.0.tgz"; + path = fetchurl { + name = "pretty_format___pretty_format_23.6.0.tgz"; + url = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz"; + sha1 = "5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"; + }; + } + + { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + path = fetchurl { + name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz"; + sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa"; + }; + } + + { + name = "progress___progress_1.1.8.tgz"; + path = fetchurl { + name = "progress___progress_1.1.8.tgz"; + url = "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz"; + sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"; + }; + } + + { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + path = fetchurl { + name = "promise_inflight___promise_inflight_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz"; + sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; + }; + } + + { + name = "promise_retry___promise_retry_1.1.1.tgz"; + path = fetchurl { + name = "promise_retry___promise_retry_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz"; + sha1 = "6739e968e3051da20ce6497fb2b50f6911df3d6d"; + }; + } + + { + name = "promisify_any___promisify_any_2.0.1.tgz"; + path = fetchurl { + name = "promisify_any___promisify_any_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/promisify-any/-/promisify-any-2.0.1.tgz"; + sha1 = "403e00a8813f175242ab50fe33a69f8eece47305"; + }; + } + + { + name = "prompt___prompt_1.0.0.tgz"; + path = fetchurl { + name = "prompt___prompt_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/prompt/-/prompt-1.0.0.tgz"; + sha1 = "8e57123c396ab988897fb327fd3aedc3e735e4fe"; + }; + } + + { + name = "promzard___promzard_0.3.0.tgz"; + path = fetchurl { + name = "promzard___promzard_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz"; + sha1 = "26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"; + }; + } + + { + name = "proto_list___proto_list_1.2.4.tgz"; + path = fetchurl { + name = "proto_list___proto_list_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz"; + sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849"; + }; + } + + { + name = "protoduck___protoduck_5.0.1.tgz"; + path = fetchurl { + name = "protoduck___protoduck_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz"; + sha1 = "03c3659ca18007b69a50fd82a7ebcc516261151f"; + }; + } + + { + name = "proxy_addr___proxy_addr_1.0.10.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_1.0.10.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.0.10.tgz"; + sha1 = "0d40a82f801fc355567d2ecb65efe3f077f121c5"; + }; + } + + { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + path = fetchurl { + name = "proxy_addr___proxy_addr_2.0.4.tgz"; + url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz"; + sha1 = "ecfc733bf22ff8c6f407fa275327b9ab67e48b93"; + }; + } + + { + name = "prr___prr_1.0.1.tgz"; + path = fetchurl { + name = "prr___prr_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz"; + sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; + }; + } + + { + name = "pseudomap___pseudomap_1.0.2.tgz"; + path = fetchurl { + name = "pseudomap___pseudomap_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + } + + { + name = "psl___psl_1.1.29.tgz"; + path = fetchurl { + name = "psl___psl_1.1.29.tgz"; + url = "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz"; + sha1 = "60f580d360170bb722a797cc704411e6da850c67"; + }; + } + + { + name = "pstree.remy___pstree.remy_1.1.2.tgz"; + path = fetchurl { + name = "pstree.remy___pstree.remy_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.2.tgz"; + sha1 = "4448bbeb4b2af1fed242afc8dc7416a6f504951a"; + }; + } + + { + name = "pump___pump_1.0.3.tgz"; + path = fetchurl { + name = "pump___pump_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz"; + sha1 = "5dfe8311c33bbf6fc18261f9f34702c47c08a954"; + }; + } + + { + name = "pump___pump_2.0.1.tgz"; + path = fetchurl { + name = "pump___pump_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz"; + sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909"; + }; + } + + { + name = "pump___pump_3.0.0.tgz"; + path = fetchurl { + name = "pump___pump_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz"; + sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64"; + }; + } + + { + name = "pumpify___pumpify_1.5.1.tgz"; + path = fetchurl { + name = "pumpify___pumpify_1.5.1.tgz"; + url = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz"; + sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce"; + }; + } + + { + name = "punycode___punycode_1.4.1.tgz"; + path = fetchurl { + name = "punycode___punycode_1.4.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + } + + { + name = "punycode___punycode_2.1.1.tgz"; + path = fetchurl { + name = "punycode___punycode_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; + sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; + }; + } + + { + name = "qrcode_terminal___qrcode_terminal_0.12.0.tgz"; + path = fetchurl { + name = "qrcode_terminal___qrcode_terminal_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz"; + sha1 = "bb5b699ef7f9f0505092a3748be4464fe71b5819"; + }; + } + + { + name = "qs___qs_4.0.0.tgz"; + path = fetchurl { + name = "qs___qs_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz"; + sha1 = "c31d9b74ec27df75e543a86c78728ed8d4623607"; + }; + } + + { + name = "qs___qs_6.5.2.tgz"; + path = fetchurl { + name = "qs___qs_6.5.2.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; + sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; + }; + } + + { + name = "qs___qs_6.6.0.tgz"; + path = fetchurl { + name = "qs___qs_6.6.0.tgz"; + url = "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz"; + sha1 = "a99c0f69a8d26bf7ef012f871cdabb0aee4424c2"; + }; + } + + { + name = "query_string___query_string_6.2.0.tgz"; + path = fetchurl { + name = "query_string___query_string_6.2.0.tgz"; + url = "https://registry.yarnpkg.com/query-string/-/query-string-6.2.0.tgz"; + sha1 = "468edeb542b7e0538f9f9b1aeb26f034f19c86e1"; + }; + } + + { + name = "qw___qw_1.0.1.tgz"; + path = fetchurl { + name = "qw___qw_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz"; + sha1 = "efbfdc740f9ad054304426acb183412cc8b996d4"; + }; + } + + { + name = "random_access_file___random_access_file_2.0.1.tgz"; + path = fetchurl { + name = "random_access_file___random_access_file_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.0.1.tgz"; + sha1 = "dc22de79270e9a84cb36a2419b759725930dcaeb"; + }; + } + + { + name = "random_access_storage___random_access_storage_1.3.0.tgz"; + path = fetchurl { + name = "random_access_storage___random_access_storage_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/random-access-storage/-/random-access-storage-1.3.0.tgz"; + sha1 = "d27e4d897b79dc4358afc2bbe553044e5c8cfe35"; + }; + } + + { + name = "random_iterate___random_iterate_1.0.1.tgz"; + path = fetchurl { + name = "random_iterate___random_iterate_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/random-iterate/-/random-iterate-1.0.1.tgz"; + sha1 = "f7d97d92dee6665ec5f6da08c7f963cad4b2ac99"; + }; + } + + { + name = "randombytes___randombytes_2.0.6.tgz"; + path = fetchurl { + name = "randombytes___randombytes_2.0.6.tgz"; + url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz"; + sha1 = "d302c522948588848a8d300c932b44c24231da80"; + }; + } + + { + name = "range_parser___range_parser_1.2.0.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz"; + sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; + }; + } + + { + name = "range_parser___range_parser_1.0.3.tgz"; + path = fetchurl { + name = "range_parser___range_parser_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz"; + sha1 = "6872823535c692e2c2a0103826afd82c2e0ff175"; + }; + } + + { + name = "range_slice_stream___range_slice_stream_2.0.0.tgz"; + path = fetchurl { + name = "range_slice_stream___range_slice_stream_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/range-slice-stream/-/range-slice-stream-2.0.0.tgz"; + sha1 = "1f25fc7a2cacf9ccd140c46f9cf670a1a7fe3ce6"; + }; + } + + { + name = "raw_body___raw_body_2.3.3.tgz"; + path = fetchurl { + name = "raw_body___raw_body_2.3.3.tgz"; + url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz"; + sha1 = "1b324ece6b5706e153855bc1148c65bb7f6ea0c3"; + }; + } + + { + name = "rc___rc_1.2.8.tgz"; + path = fetchurl { + name = "rc___rc_1.2.8.tgz"; + url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz"; + sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"; + }; + } + + { + name = "rdf_canonize___rdf_canonize_0.2.5.tgz"; + path = fetchurl { + name = "rdf_canonize___rdf_canonize_0.2.5.tgz"; + url = "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-0.2.5.tgz"; + sha1 = "dc761d42a2e9e6bf6eec7e0e352fd5b10ff4e75a"; + }; + } + + { + name = "read_cmd_shim___read_cmd_shim_1.0.1.tgz"; + path = fetchurl { + name = "read_cmd_shim___read_cmd_shim_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz"; + sha1 = "2d5d157786a37c055d22077c32c53f8329e91c7b"; + }; + } + + { + name = "read_installed___read_installed_4.0.3.tgz"; + path = fetchurl { + name = "read_installed___read_installed_4.0.3.tgz"; + url = "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz"; + sha1 = "ff9b8b67f187d1e4c29b9feb31f6b223acd19067"; + }; + } + + { + name = "read_package_json___read_package_json_2.0.13.tgz"; + path = fetchurl { + name = "read_package_json___read_package_json_2.0.13.tgz"; + url = "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz"; + sha1 = "2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a"; + }; + } + + { + name = "read_package_tree___read_package_tree_5.2.1.tgz"; + path = fetchurl { + name = "read_package_tree___read_package_tree_5.2.1.tgz"; + url = "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz"; + sha1 = "6218b187d6fac82289ce4387bbbaf8eef536ad63"; + }; + } + + { + name = "read_pkg___read_pkg_4.0.1.tgz"; + path = fetchurl { + name = "read_pkg___read_pkg_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz"; + sha1 = "963625378f3e1c4d48c85872b5a6ec7d5d093237"; + }; + } + + { + name = "read___read_1.0.7.tgz"; + path = fetchurl { + name = "read___read_1.0.7.tgz"; + url = "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz"; + sha1 = "b3da19bd052431a97671d44a42634adf710b40c4"; + }; + } + + { + name = "readable_stream___readable_stream_2.3.6.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_2.3.6.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz"; + sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"; + }; + } + + { + name = "readable_stream___readable_stream_1.1.14.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.1.14.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz"; + sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; + }; + } + + { + name = "readable_stream___readable_stream_1.0.34.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_1.0.34.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz"; + sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c"; + }; + } + + { + name = "readable_stream___readable_stream_3.0.6.tgz"; + path = fetchurl { + name = "readable_stream___readable_stream_3.0.6.tgz"; + url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz"; + sha1 = "351302e4c68b5abd6a2ed55376a7f9a25be3057a"; + }; + } + + { + name = "readable_wrap___readable_wrap_1.0.0.tgz"; + path = fetchurl { + name = "readable_wrap___readable_wrap_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/readable-wrap/-/readable-wrap-1.0.0.tgz"; + sha1 = "3b5a211c631e12303a54991c806c17e7ae206bff"; + }; + } + + { + name = "readdir_scoped_modules___readdir_scoped_modules_1.0.2.tgz"; + path = fetchurl { + name = "readdir_scoped_modules___readdir_scoped_modules_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz"; + sha1 = "9fafa37d286be5d92cbaebdee030dc9b5f406747"; + }; + } + + { + name = "readdirp___readdirp_2.2.1.tgz"; + path = fetchurl { + name = "readdirp___readdirp_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz"; + sha1 = "0e87622a3325aa33e892285caf8b4e846529a525"; + }; + } + + { + name = "readline2___readline2_1.0.1.tgz"; + path = fetchurl { + name = "readline2___readline2_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz"; + sha1 = "41059608ffc154757b715d9989d199ffbf372e35"; + }; + } + + { + name = "record_cache___record_cache_1.1.0.tgz"; + path = fetchurl { + name = "record_cache___record_cache_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/record-cache/-/record-cache-1.1.0.tgz"; + sha1 = "f8a467a691a469584b26e88d36b18afdb3932037"; + }; + } + + { + name = "redis_commands___redis_commands_1.4.0.tgz"; + path = fetchurl { + name = "redis_commands___redis_commands_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz"; + sha1 = "52f9cf99153efcce56a8f86af986bd04e988602f"; + }; + } + + { + name = "redis_parser___redis_parser_2.6.0.tgz"; + path = fetchurl { + name = "redis_parser___redis_parser_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz"; + sha1 = "52ed09dacac108f1a631c07e9b69941e7a19504b"; + }; + } + + { + name = "redis___redis_2.8.0.tgz"; + path = fetchurl { + name = "redis___redis_2.8.0.tgz"; + url = "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz"; + sha1 = "202288e3f58c49f6079d97af7a10e1303ae14b02"; + }; + } + + { + name = "referrer_policy___referrer_policy_1.1.0.tgz"; + path = fetchurl { + name = "referrer_policy___referrer_policy_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.1.0.tgz"; + sha1 = "35774eb735bf50fb6c078e83334b472350207d79"; + }; + } + + { + name = "reflect_metadata___reflect_metadata_0.1.12.tgz"; + path = fetchurl { + name = "reflect_metadata___reflect_metadata_0.1.12.tgz"; + url = "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz"; + sha1 = "311bf0c6b63cd782f228a81abe146a2bfa9c56f2"; + }; + } + + { + name = "regex_not___regex_not_1.0.2.tgz"; + path = fetchurl { + name = "regex_not___regex_not_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; + sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; + }; + } + + { + name = "registry_auth_token___registry_auth_token_3.3.2.tgz"; + path = fetchurl { + name = "registry_auth_token___registry_auth_token_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz"; + sha1 = "851fd49038eecb586911115af845260eec983f20"; + }; + } + + { + name = "registry_url___registry_url_3.1.0.tgz"; + path = fetchurl { + name = "registry_url___registry_url_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz"; + sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942"; + }; + } + + { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + path = fetchurl { + name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; + sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; + }; + } + + { + name = "render_media___render_media_3.1.3.tgz"; + path = fetchurl { + name = "render_media___render_media_3.1.3.tgz"; + url = "https://registry.yarnpkg.com/render-media/-/render-media-3.1.3.tgz"; + sha1 = "aa8c8cd3f720049370067180709b551d3c566254"; + }; + } + + { + name = "repeat_element___repeat_element_1.1.3.tgz"; + path = fetchurl { + name = "repeat_element___repeat_element_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz"; + sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce"; + }; + } + + { + name = "repeat_string___repeat_string_1.6.1.tgz"; + path = fetchurl { + name = "repeat_string___repeat_string_1.6.1.tgz"; + url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; + sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; + }; + } + + { + name = "request___request_2.88.0.tgz"; + path = fetchurl { + name = "request___request_2.88.0.tgz"; + url = "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz"; + sha1 = "9c2fca4f7d35b592efe57c7f0a55e81052124fef"; + }; + } + + { + name = "require_directory___require_directory_2.1.1.tgz"; + path = fetchurl { + name = "require_directory___require_directory_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + } + + { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + path = fetchurl { + name = "require_main_filename___require_main_filename_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz"; + sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; + }; + } + + { + name = "require_uncached___require_uncached_1.0.3.tgz"; + path = fetchurl { + name = "require_uncached___require_uncached_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz"; + sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3"; + }; + } + + { + name = "resolve_from___resolve_from_1.0.1.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz"; + sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"; + }; + } + + { + name = "resolve_from___resolve_from_2.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz"; + sha1 = "9480ab20e94ffa1d9e80a804c7ea147611966b57"; + }; + } + + { + name = "resolve_from___resolve_from_3.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz"; + sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; + }; + } + + { + name = "resolve_from___resolve_from_4.0.0.tgz"; + path = fetchurl { + name = "resolve_from___resolve_from_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz"; + sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6"; + }; + } + + { + name = "resolve_pkg___resolve_pkg_1.0.0.tgz"; + path = fetchurl { + name = "resolve_pkg___resolve_pkg_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-1.0.0.tgz"; + sha1 = "e19a15e78aca2e124461dc92b2e3943ef93494d9"; + }; + } + + { + name = "resolve_url___resolve_url_0.2.1.tgz"; + path = fetchurl { + name = "resolve_url___resolve_url_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; + sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; + }; + } + + { + name = "resolve___resolve_1.8.1.tgz"; + path = fetchurl { + name = "resolve___resolve_1.8.1.tgz"; + url = "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz"; + sha1 = "82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"; + }; + } + + { + name = "restore_cursor___restore_cursor_1.0.1.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz"; + sha1 = "34661f46886327fed2991479152252df92daa541"; + }; + } + + { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + path = fetchurl { + name = "restore_cursor___restore_cursor_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz"; + sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; + }; + } + + { + name = "ret___ret_0.1.15.tgz"; + path = fetchurl { + name = "ret___ret_0.1.15.tgz"; + url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; + sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; + }; + } + + { + name = "retry_as_promised___retry_as_promised_2.3.2.tgz"; + path = fetchurl { + name = "retry_as_promised___retry_as_promised_2.3.2.tgz"; + url = "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz"; + sha1 = "cd974ee4fd9b5fe03cbf31871ee48221c07737b7"; + }; + } + + { + name = "retry___retry_0.10.1.tgz"; + path = fetchurl { + name = "retry___retry_0.10.1.tgz"; + url = "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz"; + sha1 = "e76388d217992c252750241d3d3956fed98d8ff4"; + }; + } + + { + name = "retry___retry_0.12.0.tgz"; + path = fetchurl { + name = "retry___retry_0.12.0.tgz"; + url = "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz"; + sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b"; + }; + } + + { + name = "revalidator___revalidator_0.1.8.tgz"; + path = fetchurl { + name = "revalidator___revalidator_0.1.8.tgz"; + url = "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz"; + sha1 = "fece61bfa0c1b52a206bd6b18198184bdd523a3b"; + }; + } + + { + name = "rimraf___rimraf_2.6.2.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.6.2.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz"; + sha1 = "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"; + }; + } + + { + name = "rimraf___rimraf_2.4.5.tgz"; + path = fetchurl { + name = "rimraf___rimraf_2.4.5.tgz"; + url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz"; + sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"; + }; + } + + { + name = "run_async___run_async_0.1.0.tgz"; + path = fetchurl { + name = "run_async___run_async_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz"; + sha1 = "c8ad4a5e110661e402a7d21b530e009f25f8e389"; + }; + } + + { + name = "run_node___run_node_1.0.0.tgz"; + path = fetchurl { + name = "run_node___run_node_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz"; + sha1 = "46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"; + }; + } + + { + name = "run_parallel_limit___run_parallel_limit_1.0.5.tgz"; + path = fetchurl { + name = "run_parallel_limit___run_parallel_limit_1.0.5.tgz"; + url = "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.0.5.tgz"; + sha1 = "c29a4fd17b4df358cb52a8a697811a63c984f1b7"; + }; + } + + { + name = "run_parallel___run_parallel_1.1.9.tgz"; + path = fetchurl { + name = "run_parallel___run_parallel_1.1.9.tgz"; + url = "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz"; + sha1 = "c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"; + }; + } + + { + name = "run_queue___run_queue_1.0.3.tgz"; + path = fetchurl { + name = "run_queue___run_queue_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz"; + sha1 = "e848396f057d223f24386924618e25694161ec47"; + }; + } + + { + name = "run_series___run_series_1.1.8.tgz"; + path = fetchurl { + name = "run_series___run_series_1.1.8.tgz"; + url = "https://registry.yarnpkg.com/run-series/-/run-series-1.1.8.tgz"; + sha1 = "2c4558f49221e01cd6371ff4e0a1e203e460fc36"; + }; + } + + { + name = "rusha___rusha_0.8.13.tgz"; + path = fetchurl { + name = "rusha___rusha_0.8.13.tgz"; + url = "https://registry.yarnpkg.com/rusha/-/rusha-0.8.13.tgz"; + sha1 = "9a084e7b860b17bff3015b92c67a6a336191513a"; + }; + } + + { + name = "rx_lite___rx_lite_3.1.2.tgz"; + path = fetchurl { + name = "rx_lite___rx_lite_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz"; + sha1 = "19ce502ca572665f3b647b10939f97fd1615f102"; + }; + } + + { + name = "rxjs___rxjs_6.3.3.tgz"; + path = fetchurl { + name = "rxjs___rxjs_6.3.3.tgz"; + url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz"; + sha1 = "3c6a7fa420e844a81390fb1158a9ec614f4bad55"; + }; + } + + { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + path = fetchurl { + name = "safe_buffer___safe_buffer_5.1.2.tgz"; + url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; + }; + } + + { + name = "safe_json_stringify___safe_json_stringify_1.2.0.tgz"; + path = fetchurl { + name = "safe_json_stringify___safe_json_stringify_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz"; + sha1 = "356e44bc98f1f93ce45df14bcd7c01cda86e0afd"; + }; + } + + { + name = "safe_regex___safe_regex_1.1.0.tgz"; + path = fetchurl { + name = "safe_regex___safe_regex_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; + sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; + }; + } + + { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + path = fetchurl { + name = "safer_buffer___safer_buffer_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; + }; + } + + { + name = "sass_lint___sass_lint_1.12.1.tgz"; + path = fetchurl { + name = "sass_lint___sass_lint_1.12.1.tgz"; + url = "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.12.1.tgz"; + sha1 = "630f69c216aa206b8232fb2aa907bdf3336b6d83"; + }; + } + + { + name = "sax___sax_1.2.4.tgz"; + path = fetchurl { + name = "sax___sax_1.2.4.tgz"; + url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; + sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; + }; + } + + { + name = "scripty___scripty_1.8.0.tgz"; + path = fetchurl { + name = "scripty___scripty_1.8.0.tgz"; + url = "https://registry.yarnpkg.com/scripty/-/scripty-1.8.0.tgz"; + sha1 = "951f0b4bc3e235844b7f5355f58d31e012e0b806"; + }; + } + + { + name = "semver_compare___semver_compare_1.0.0.tgz"; + path = fetchurl { + name = "semver_compare___semver_compare_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz"; + sha1 = "0dee216a1c941ab37e9efb1788f6afc5ff5537fc"; + }; + } + + { + name = "semver_diff___semver_diff_2.1.0.tgz"; + path = fetchurl { + name = "semver_diff___semver_diff_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz"; + sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"; + }; + } + + { + name = "semver___semver_5.6.0.tgz"; + path = fetchurl { + name = "semver___semver_5.6.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz"; + sha1 = "7e74256fbaa49c75aa7c7a205cc22799cac80004"; + }; + } + + { + name = "semver___semver_4.3.2.tgz"; + path = fetchurl { + name = "semver___semver_4.3.2.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz"; + sha1 = "c7a07158a80bedd052355b770d82d6640f803be7"; + }; + } + + { + name = "semver___semver_5.3.0.tgz"; + path = fetchurl { + name = "semver___semver_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz"; + sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; + }; + } + + { + name = "send___send_0.13.1.tgz"; + path = fetchurl { + name = "send___send_0.13.1.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.13.1.tgz"; + sha1 = "a30d5f4c82c8a9bae9ad00a1d9b1bdbe6f199ed7"; + }; + } + + { + name = "send___send_0.13.2.tgz"; + path = fetchurl { + name = "send___send_0.13.2.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz"; + sha1 = "765e7607c8055452bba6f0b052595350986036de"; + }; + } + + { + name = "send___send_0.16.2.tgz"; + path = fetchurl { + name = "send___send_0.16.2.tgz"; + url = "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz"; + sha1 = "6ecca1e0f8c156d141597559848df64730a6bbc1"; + }; + } + + { + name = "sequelize_typescript___sequelize_typescript_0.6.6.tgz"; + path = fetchurl { + name = "sequelize_typescript___sequelize_typescript_0.6.6.tgz"; + url = "https://registry.yarnpkg.com/sequelize-typescript/-/sequelize-typescript-0.6.6.tgz"; + sha1 = "926037b542dae9f4eff20609d095cc5e3a3640f3"; + }; + } + + { + name = "sequelize___sequelize_4.41.2.tgz"; + path = fetchurl { + name = "sequelize___sequelize_4.41.2.tgz"; + url = "https://registry.yarnpkg.com/sequelize/-/sequelize-4.41.2.tgz"; + sha1 = "bb9ba30d72e9eeb883c9861cd0e2cac672010883"; + }; + } + + { + name = "serve_static___serve_static_1.13.2.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.13.2.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz"; + sha1 = "095e8472fd5b46237db50ce486a43f4b86c6cec1"; + }; + } + + { + name = "serve_static___serve_static_1.10.3.tgz"; + path = fetchurl { + name = "serve_static___serve_static_1.10.3.tgz"; + url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz"; + sha1 = "ce5a6ecd3101fed5ec09827dac22a9c29bfb0535"; + }; + } + + { + name = "set_blocking___set_blocking_2.0.0.tgz"; + path = fetchurl { + name = "set_blocking___set_blocking_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + } + + { + name = "set_value___set_value_0.4.3.tgz"; + path = fetchurl { + name = "set_value___set_value_0.4.3.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz"; + sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"; + }; + } + + { + name = "set_value___set_value_2.0.0.tgz"; + path = fetchurl { + name = "set_value___set_value_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz"; + sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"; + }; + } + + { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + path = fetchurl { + name = "setprototypeof___setprototypeof_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; + }; + } + + { + name = "sha___sha_2.0.1.tgz"; + path = fetchurl { + name = "sha___sha_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz"; + sha1 = "6030822fbd2c9823949f8f72ed6411ee5cf25aae"; + }; + } + + { + name = "sharp___sharp_0.21.0.tgz"; + path = fetchurl { + name = "sharp___sharp_0.21.0.tgz"; + url = "https://registry.yarnpkg.com/sharp/-/sharp-0.21.0.tgz"; + sha1 = "e3cf2e4cb9382caf78efb3d45252381730e899c4"; + }; + } + + { + name = "shebang_command___shebang_command_1.2.0.tgz"; + path = fetchurl { + name = "shebang_command___shebang_command_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz"; + sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; + }; + } + + { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + path = fetchurl { + name = "shebang_regex___shebang_regex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz"; + sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; + }; + } + + { + name = "shelljs___shelljs_0.6.1.tgz"; + path = fetchurl { + name = "shelljs___shelljs_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz"; + sha1 = "ec6211bed1920442088fe0f70b2837232ed2c8a8"; + }; + } + + { + name = "shimmer___shimmer_1.2.0.tgz"; + path = fetchurl { + name = "shimmer___shimmer_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.0.tgz"; + sha1 = "f966f7555789763e74d8841193685a5e78736665"; + }; + } + + { + name = "signal_exit___signal_exit_3.0.2.tgz"; + path = fetchurl { + name = "signal_exit___signal_exit_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz"; + sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; + }; + } + + { + name = "simple_concat___simple_concat_1.0.0.tgz"; + path = fetchurl { + name = "simple_concat___simple_concat_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz"; + sha1 = "7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"; + }; + } + + { + name = "simple_get___simple_get_2.8.1.tgz"; + path = fetchurl { + name = "simple_get___simple_get_2.8.1.tgz"; + url = "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz"; + sha1 = "0e22e91d4575d87620620bc91308d57a77f44b5d"; + }; + } + + { + name = "simple_get___simple_get_3.0.3.tgz"; + path = fetchurl { + name = "simple_get___simple_get_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/simple-get/-/simple-get-3.0.3.tgz"; + sha1 = "924528ac3f9d7718ce5e9ec1b1a69c0be4d62efa"; + }; + } + + { + name = "simple_git___simple_git_1.107.0.tgz"; + path = fetchurl { + name = "simple_git___simple_git_1.107.0.tgz"; + url = "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz"; + sha1 = "12cffaf261c14d6f450f7fdb86c21ccee968b383"; + }; + } + + { + name = "simple_peer___simple_peer_9.1.2.tgz"; + path = fetchurl { + name = "simple_peer___simple_peer_9.1.2.tgz"; + url = "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.1.2.tgz"; + sha1 = "f8afa5eb83f8a17d66e437e5ac54c1221eca4b39"; + }; + } + + { + name = "simple_sha1___simple_sha1_2.1.1.tgz"; + path = fetchurl { + name = "simple_sha1___simple_sha1_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/simple-sha1/-/simple-sha1-2.1.1.tgz"; + sha1 = "93f3b7f2e8dfdc056c32793e5d47b58d311b140d"; + }; + } + + { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + path = fetchurl { + name = "simple_swizzle___simple_swizzle_0.2.2.tgz"; + url = "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; + sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; + }; + } + + { + name = "simple_websocket___simple_websocket_7.2.0.tgz"; + path = fetchurl { + name = "simple_websocket___simple_websocket_7.2.0.tgz"; + url = "https://registry.yarnpkg.com/simple-websocket/-/simple-websocket-7.2.0.tgz"; + sha1 = "c3190555d74399372b96b51435f2d8c4b04611df"; + }; + } + + { + name = "sitemap___sitemap_2.1.0.tgz"; + path = fetchurl { + name = "sitemap___sitemap_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/sitemap/-/sitemap-2.1.0.tgz"; + sha1 = "1633cb88c196d755ad94becfb1c1bcacc6d3425a"; + }; + } + + { + name = "slash___slash_1.0.0.tgz"; + path = fetchurl { + name = "slash___slash_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz"; + sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"; + }; + } + + { + name = "slash___slash_2.0.0.tgz"; + path = fetchurl { + name = "slash___slash_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz"; + sha1 = "de552851a1759df3a8f206535442f5ec4ddeab44"; + }; + } + + { + name = "slice_ansi___slice_ansi_0.0.4.tgz"; + path = fetchurl { + name = "slice_ansi___slice_ansi_0.0.4.tgz"; + url = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz"; + sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35"; + }; + } + + { + name = "slide___slide_1.1.6.tgz"; + path = fetchurl { + name = "slide___slide_1.1.6.tgz"; + url = "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz"; + sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"; + }; + } + + { + name = "smart_buffer___smart_buffer_1.1.15.tgz"; + path = fetchurl { + name = "smart_buffer___smart_buffer_1.1.15.tgz"; + url = "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz"; + sha1 = "7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"; + }; + } + + { + name = "smart_buffer___smart_buffer_4.0.1.tgz"; + path = fetchurl { + name = "smart_buffer___smart_buffer_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz"; + sha1 = "07ea1ca8d4db24eb4cac86537d7d18995221ace3"; + }; + } + + { + name = "smtp_connection___smtp_connection_2.3.1.tgz"; + path = fetchurl { + name = "smtp_connection___smtp_connection_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.3.1.tgz"; + sha1 = "d169c8f1c9a73854134cdabe6fb818237dfc4fba"; + }; + } + + { + name = "smtp_server___smtp_server_1.16.1.tgz"; + path = fetchurl { + name = "smtp_server___smtp_server_1.16.1.tgz"; + url = "https://registry.yarnpkg.com/smtp-server/-/smtp-server-1.16.1.tgz"; + sha1 = "91d2dbd5e8bb9ed395b1a1774e8b60dd7b24e453"; + }; + } + + { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + path = fetchurl { + name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; + sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; + }; + } + + { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + path = fetchurl { + name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; + sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; + }; + } + + { + name = "snapdragon___snapdragon_0.8.2.tgz"; + path = fetchurl { + name = "snapdragon___snapdragon_0.8.2.tgz"; + url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; + sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; + }; + } + + { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + path = fetchurl { + name = "socket.io_adapter___socket.io_adapter_0.5.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz"; + sha1 = "cb6d4bb8bec81e1078b99677f9ced0046066bb8b"; + }; + } + + { + name = "socket.io_adapter___socket.io_adapter_1.1.1.tgz"; + path = fetchurl { + name = "socket.io_adapter___socket.io_adapter_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz"; + sha1 = "2a805e8a14d6372124dd9159ad4502f8cb07f06b"; + }; + } + + { + name = "socket.io_client___socket.io_client_1.7.3.tgz"; + path = fetchurl { + name = "socket.io_client___socket.io_client_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz"; + sha1 = "b30e86aa10d5ef3546601c09cde4765e381da377"; + }; + } + + { + name = "socket.io_client___socket.io_client_2.2.0.tgz"; + path = fetchurl { + name = "socket.io_client___socket.io_client_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz"; + sha1 = "84e73ee3c43d5020ccc1a258faeeb9aec2723af7"; + }; + } + + { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + path = fetchurl { + name = "socket.io_parser___socket.io_parser_2.3.1.tgz"; + url = "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz"; + sha1 = "dd532025103ce429697326befd64005fcfe5b4a0"; + }; + } + + { + name = "socket.io_parser___socket.io_parser_3.3.0.tgz"; + path = fetchurl { + name = "socket.io_parser___socket.io_parser_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz"; + sha1 = "2b52a96a509fdf31440ba40fed6094c7d4f1262f"; + }; + } + + { + name = "socket.io___socket.io_1.7.3.tgz"; + path = fetchurl { + name = "socket.io___socket.io_1.7.3.tgz"; + url = "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz"; + sha1 = "b8af9caba00949e568e369f1327ea9be9ea2461b"; + }; + } + + { + name = "socket.io___socket.io_2.2.0.tgz"; + path = fetchurl { + name = "socket.io___socket.io_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz"; + sha1 = "f0f633161ef6712c972b307598ecd08c9b1b4d5b"; + }; + } + + { + name = "socks_proxy_agent___socks_proxy_agent_3.0.1.tgz"; + path = fetchurl { + name = "socks_proxy_agent___socks_proxy_agent_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz"; + sha1 = "2eae7cf8e2a82d34565761539a7f9718c5617659"; + }; + } + + { + name = "socks_proxy_agent___socks_proxy_agent_4.0.1.tgz"; + path = fetchurl { + name = "socks_proxy_agent___socks_proxy_agent_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz"; + sha1 = "5936bf8b707a993079c6f37db2091821bffa6473"; + }; + } + + { + name = "socks___socks_1.1.10.tgz"; + path = fetchurl { + name = "socks___socks_1.1.10.tgz"; + url = "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz"; + sha1 = "5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a"; + }; + } + + { + name = "socks___socks_2.2.2.tgz"; + path = fetchurl { + name = "socks___socks_2.2.2.tgz"; + url = "https://registry.yarnpkg.com/socks/-/socks-2.2.2.tgz"; + sha1 = "f061219fc2d4d332afb4af93e865c84d3fa26e2b"; + }; + } + + { + name = "sorted_object___sorted_object_2.0.1.tgz"; + path = fetchurl { + name = "sorted_object___sorted_object_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz"; + sha1 = "7d631f4bd3a798a24af1dffcfbfe83337a5df5fc"; + }; + } + + { + name = "sorted_union_stream___sorted_union_stream_2.1.3.tgz"; + path = fetchurl { + name = "sorted_union_stream___sorted_union_stream_2.1.3.tgz"; + url = "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz"; + sha1 = "c7794c7e077880052ff71a8d4a2dbb4a9a638ac7"; + }; + } + + { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + path = fetchurl { + name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; + url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz"; + sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259"; + }; + } + + { + name = "source_map_support___source_map_support_0.5.9.tgz"; + path = fetchurl { + name = "source_map_support___source_map_support_0.5.9.tgz"; + url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz"; + sha1 = "41bc953b2534267ea2d605bccfa7bfa3111ced5f"; + }; + } + + { + name = "source_map_url___source_map_url_0.4.0.tgz"; + path = fetchurl { + name = "source_map_url___source_map_url_0.4.0.tgz"; + url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; + sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; + }; + } + + { + name = "source_map___source_map_0.5.7.tgz"; + path = fetchurl { + name = "source_map___source_map_0.5.7.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + } + + { + name = "source_map___source_map_0.6.1.tgz"; + path = fetchurl { + name = "source_map___source_map_0.6.1.tgz"; + url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; + sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; + }; + } + + { + name = "spawn_command___spawn_command_0.0.2_1.tgz"; + path = fetchurl { + name = "spawn_command___spawn_command_0.0.2_1.tgz"; + url = "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz"; + sha1 = "62f5e9466981c1b796dc5929937e11c9c6921bd0"; + }; + } + + { + name = "spdx_correct___spdx_correct_3.0.2.tgz"; + path = fetchurl { + name = "spdx_correct___spdx_correct_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz"; + sha1 = "19bb409e91b47b1ad54159243f7312a858db3c2e"; + }; + } + + { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + path = fetchurl { + name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz"; + sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977"; + }; + } + + { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + path = fetchurl { + name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz"; + sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0"; + }; + } + + { + name = "spdx_license_ids___spdx_license_ids_3.0.2.tgz"; + path = fetchurl { + name = "spdx_license_ids___spdx_license_ids_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz"; + sha1 = "a59efc09784c2a5bada13cfeaf5c75dd214044d2"; + }; + } + + { + name = "speedometer___speedometer_1.1.0.tgz"; + path = fetchurl { + name = "speedometer___speedometer_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz"; + sha1 = "a30b13abda45687a1a76977012c060f2ac8a7934"; + }; + } + + { + name = "split_string___split_string_3.1.0.tgz"; + path = fetchurl { + name = "split_string___split_string_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; + sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; + }; + } + + { + name = "split2___split2_0.2.1.tgz"; + path = fetchurl { + name = "split2___split2_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/split2/-/split2-0.2.1.tgz"; + sha1 = "02ddac9adc03ec0bb78c1282ec079ca6e85ae900"; + }; + } + + { + name = "split___split_1.0.1.tgz"; + path = fetchurl { + name = "split___split_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz"; + sha1 = "605bd9be303aa59fb35f9229fbea0ddec9ea07d9"; + }; + } + + { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + path = fetchurl { + name = "sprintf_js___sprintf_js_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + } + + { + name = "srt_to_vtt___srt_to_vtt_1.1.3.tgz"; + path = fetchurl { + name = "srt_to_vtt___srt_to_vtt_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/srt-to-vtt/-/srt-to-vtt-1.1.3.tgz"; + sha1 = "a9bc16cde5412e000e59ffda469f3e9befed5dde"; + }; + } + + { + name = "sshpk___sshpk_1.15.2.tgz"; + path = fetchurl { + name = "sshpk___sshpk_1.15.2.tgz"; + url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz"; + sha1 = "c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"; + }; + } + + { + name = "ssri___ssri_5.3.0.tgz"; + path = fetchurl { + name = "ssri___ssri_5.3.0.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz"; + sha1 = "ba3872c9c6d33a0704a7d71ff045e5ec48999d06"; + }; + } + + { + name = "ssri___ssri_6.0.1.tgz"; + path = fetchurl { + name = "ssri___ssri_6.0.1.tgz"; + url = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz"; + sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8"; + }; + } + + { + name = "stack_trace___stack_trace_0.0.10.tgz"; + path = fetchurl { + name = "stack_trace___stack_trace_0.0.10.tgz"; + url = "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz"; + sha1 = "547c70b347e8d32b4e108ea1a2a159e5fdde19c0"; + }; + } + + { + name = "staged_git_files___staged_git_files_1.1.2.tgz"; + path = fetchurl { + name = "staged_git_files___staged_git_files_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz"; + sha1 = "4326d33886dc9ecfa29a6193bf511ba90a46454b"; + }; + } + + { + name = "static_extend___static_extend_0.1.2.tgz"; + path = fetchurl { + name = "static_extend___static_extend_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; + sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; + }; + } + + { + name = "statuses___statuses_1.5.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.5.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + } + + { + name = "statuses___statuses_1.3.1.tgz"; + path = fetchurl { + name = "statuses___statuses_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz"; + sha1 = "faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"; + }; + } + + { + name = "statuses___statuses_1.2.1.tgz"; + path = fetchurl { + name = "statuses___statuses_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz"; + sha1 = "dded45cc18256d51ed40aec142489d5c61026d28"; + }; + } + + { + name = "statuses___statuses_1.4.0.tgz"; + path = fetchurl { + name = "statuses___statuses_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz"; + sha1 = "bb73d446da2796106efcc1b601a253d6c46bd087"; + }; + } + + { + name = "stream_each___stream_each_1.2.3.tgz"; + path = fetchurl { + name = "stream_each___stream_each_1.2.3.tgz"; + url = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz"; + sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae"; + }; + } + + { + name = "stream_iterate___stream_iterate_1.2.0.tgz"; + path = fetchurl { + name = "stream_iterate___stream_iterate_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz"; + sha1 = "2bd7c77296c1702a46488b8ad41f79865eecd4e1"; + }; + } + + { + name = "stream_shift___stream_shift_1.0.0.tgz"; + path = fetchurl { + name = "stream_shift___stream_shift_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz"; + sha1 = "d5c752825e5367e786f78e18e445ea223a155952"; + }; + } + + { + name = "stream_splicer___stream_splicer_1.3.2.tgz"; + path = fetchurl { + name = "stream_splicer___stream_splicer_1.3.2.tgz"; + url = "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-1.3.2.tgz"; + sha1 = "3c0441be15b9bf4e226275e6dc83964745546661"; + }; + } + + { + name = "stream_to_blob_url___stream_to_blob_url_2.1.1.tgz"; + path = fetchurl { + name = "stream_to_blob_url___stream_to_blob_url_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/stream-to-blob-url/-/stream-to-blob-url-2.1.1.tgz"; + sha1 = "e1ac97f86ca8e9f512329a48e7830ce9a50beef2"; + }; + } + + { + name = "stream_to_blob___stream_to_blob_1.0.1.tgz"; + path = fetchurl { + name = "stream_to_blob___stream_to_blob_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/stream-to-blob/-/stream-to-blob-1.0.1.tgz"; + sha1 = "2dc1e09b71677a234d00445f8eb7ff70c4fe9948"; + }; + } + + { + name = "stream_with_known_length_to_buffer___stream_with_known_length_to_buffer_1.0.2.tgz"; + path = fetchurl { + name = "stream_with_known_length_to_buffer___stream_with_known_length_to_buffer_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/stream-with-known-length-to-buffer/-/stream-with-known-length-to-buffer-1.0.2.tgz"; + sha1 = "b8ea5a92086a1ed5d27fc4c529636682118c945b"; + }; + } + + { + name = "streamify___streamify_0.2.9.tgz"; + path = fetchurl { + name = "streamify___streamify_0.2.9.tgz"; + url = "https://registry.yarnpkg.com/streamify/-/streamify-0.2.9.tgz"; + sha1 = "8938b14db491e2b6be4f8d99cc4133c9f0384f0b"; + }; + } + + { + name = "streamsearch___streamsearch_0.1.2.tgz"; + path = fetchurl { + name = "streamsearch___streamsearch_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz"; + sha1 = "808b9d0e56fc273d809ba57338e929919a1a9f1a"; + }; + } + + { + name = "strict_uri_encode___strict_uri_encode_2.0.0.tgz"; + path = fetchurl { + name = "strict_uri_encode___strict_uri_encode_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz"; + sha1 = "b9c7330c7042862f6b142dc274bbcc5866ce3546"; + }; + } + + { + name = "string_argv___string_argv_0.0.2.tgz"; + path = fetchurl { + name = "string_argv___string_argv_0.0.2.tgz"; + url = "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz"; + sha1 = "dac30408690c21f3c3630a3ff3a05877bdcbd736"; + }; + } + + { + name = "string_width___string_width_1.0.2.tgz"; + path = fetchurl { + name = "string_width___string_width_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz"; + sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; + }; + } + + { + name = "string_width___string_width_2.1.1.tgz"; + path = fetchurl { + name = "string_width___string_width_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; + sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; + }; + } + + { + name = "string2compact___string2compact_1.3.0.tgz"; + path = fetchurl { + name = "string2compact___string2compact_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/string2compact/-/string2compact-1.3.0.tgz"; + sha1 = "22d946127b082d1203c51316af60117a337423c3"; + }; + } + + { + name = "string_decoder___string_decoder_1.2.0.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz"; + sha1 = "fe86e738b19544afe70469243b2a1ee9240eae8d"; + }; + } + + { + name = "string_decoder___string_decoder_0.10.31.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_0.10.31.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz"; + sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94"; + }; + } + + { + name = "string_decoder___string_decoder_1.1.1.tgz"; + path = fetchurl { + name = "string_decoder___string_decoder_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; + sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; + }; + } + + { + name = "stringify_object___stringify_object_3.3.0.tgz"; + path = fetchurl { + name = "stringify_object___stringify_object_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz"; + sha1 = "703065aefca19300d3ce88af4f5b3956d7556629"; + }; + } + + { + name = "stringify_package___stringify_package_1.0.0.tgz"; + path = fetchurl { + name = "stringify_package___stringify_package_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz"; + sha1 = "e02828089333d7d45cd8c287c30aa9a13375081b"; + }; + } + + { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + } + + { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + path = fetchurl { + name = "strip_ansi___strip_ansi_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; + sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; + }; + } + + { + name = "strip_eof___strip_eof_1.0.0.tgz"; + path = fetchurl { + name = "strip_eof___strip_eof_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz"; + sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf"; + }; + } + + { + name = "strip_json_comments___strip_json_comments_1.0.4.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_1.0.4.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz"; + sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"; + }; + } + + { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + path = fetchurl { + name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; + sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; + }; + } + + { + name = "summon_install___summon_install_0.4.6.tgz"; + path = fetchurl { + name = "summon_install___summon_install_0.4.6.tgz"; + url = "https://registry.yarnpkg.com/summon-install/-/summon-install-0.4.6.tgz"; + sha1 = "25673446e8b92f8bc0afabc464aa7b73fe946bd5"; + }; + } + + { + name = "superagent___superagent_3.8.3.tgz"; + path = fetchurl { + name = "superagent___superagent_3.8.3.tgz"; + url = "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz"; + sha1 = "460ea0dbdb7d5b11bc4f78deba565f86a178e128"; + }; + } + + { + name = "supertest___supertest_3.3.0.tgz"; + path = fetchurl { + name = "supertest___supertest_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/supertest/-/supertest-3.3.0.tgz"; + sha1 = "79b27bd7d34392974ab33a31fa51a3e23385987e"; + }; + } + + { + name = "supports_color___supports_color_5.4.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.4.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz"; + sha1 = "1c6b337402c2137605efe19f10fec390f6faab54"; + }; + } + + { + name = "supports_color___supports_color_2.0.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + } + + { + name = "supports_color___supports_color_4.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_4.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz"; + sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b"; + }; + } + + { + name = "supports_color___supports_color_5.5.0.tgz"; + path = fetchurl { + name = "supports_color___supports_color_5.5.0.tgz"; + url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz"; + sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f"; + }; + } + + { + name = "swagger_cli___swagger_cli_2.2.0.tgz"; + path = fetchurl { + name = "swagger_cli___swagger_cli_2.2.0.tgz"; + url = "https://registry.yarnpkg.com/swagger-cli/-/swagger-cli-2.2.0.tgz"; + sha1 = "837b01e1fd6cc6aa324f8884ec1151a3c17ca007"; + }; + } + + { + name = "swagger_methods___swagger_methods_1.0.6.tgz"; + path = fetchurl { + name = "swagger_methods___swagger_methods_1.0.6.tgz"; + url = "https://registry.yarnpkg.com/swagger-methods/-/swagger-methods-1.0.6.tgz"; + sha1 = "b91c2e4f7f9e5e2c4cd3b285b8be06ca76b3cc6a"; + }; + } + + { + name = "swagger_parser___swagger_parser_6.0.2.tgz"; + path = fetchurl { + name = "swagger_parser___swagger_parser_6.0.2.tgz"; + url = "https://registry.yarnpkg.com/swagger-parser/-/swagger-parser-6.0.2.tgz"; + sha1 = "ef3fe95ae17eab2ba04d2646007df106c7b542b9"; + }; + } + + { + name = "swagger_schema_official___swagger_schema_official_2.0.0_bab6bed.tgz"; + path = fetchurl { + name = "swagger_schema_official___swagger_schema_official_2.0.0_bab6bed.tgz"; + url = "https://registry.yarnpkg.com/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz"; + sha1 = "70070468d6d2977ca5237b2e519ca7d06a2ea3fd"; + }; + } + + { + name = "symbol_observable___symbol_observable_1.2.0.tgz"; + path = fetchurl { + name = "symbol_observable___symbol_observable_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz"; + sha1 = "c22688aed4eab3cdc2dfeacbb561660560a00804"; + }; + } + + { + name = "table___table_3.8.3.tgz"; + path = fetchurl { + name = "table___table_3.8.3.tgz"; + url = "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz"; + sha1 = "2bbc542f0fda9861a755d3947fefd8b3f513855f"; + }; + } + + { + name = "tar_fs___tar_fs_1.16.3.tgz"; + path = fetchurl { + name = "tar_fs___tar_fs_1.16.3.tgz"; + url = "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz"; + sha1 = "966a628841da2c4010406a82167cbd5e0c72d509"; + }; + } + + { + name = "tar_stream___tar_stream_1.6.2.tgz"; + path = fetchurl { + name = "tar_stream___tar_stream_1.6.2.tgz"; + url = "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz"; + sha1 = "8ea55dab37972253d9a9af90fdcd559ae435c555"; + }; + } + + { + name = "tar___tar_2.2.1.tgz"; + path = fetchurl { + name = "tar___tar_2.2.1.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz"; + sha1 = "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"; + }; + } + + { + name = "tar___tar_4.4.8.tgz"; + path = fetchurl { + name = "tar___tar_4.4.8.tgz"; + url = "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz"; + sha1 = "b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"; + }; + } + + { + name = "term_size___term_size_1.2.0.tgz"; + path = fetchurl { + name = "term_size___term_size_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz"; + sha1 = "458b83887f288fc56d6fffbfad262e26638efa69"; + }; + } + + { + name = "terraformer_wkt_parser___terraformer_wkt_parser_1.2.0.tgz"; + path = fetchurl { + name = "terraformer_wkt_parser___terraformer_wkt_parser_1.2.0.tgz"; + url = "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz"; + sha1 = "c9d6ac3dff25f4c0bd344e961f42694961834c34"; + }; + } + + { + name = "terraformer___terraformer_1.0.9.tgz"; + path = fetchurl { + name = "terraformer___terraformer_1.0.9.tgz"; + url = "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.9.tgz"; + sha1 = "77851fef4a49c90b345dc53cf26809fdf29dcda6"; + }; + } + + { + name = "text_hex___text_hex_1.0.0.tgz"; + path = fetchurl { + name = "text_hex___text_hex_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz"; + sha1 = "69dc9c1b17446ee79a92bf5b884bb4b9127506f5"; + }; + } + + { + name = "text_table___text_table_0.2.0.tgz"; + path = fetchurl { + name = "text_table___text_table_0.2.0.tgz"; + url = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + } + + { + name = "thirty_two___thirty_two_1.0.2.tgz"; + path = fetchurl { + name = "thirty_two___thirty_two_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz"; + sha1 = "4ca2fffc02a51290d2744b9e3f557693ca6b627a"; + }; + } + + { + name = "through2___through2_0.6.5.tgz"; + path = fetchurl { + name = "through2___through2_0.6.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz"; + sha1 = "41ab9c67b29d57209071410e1d7a7a968cd3ad48"; + }; + } + + { + name = "through2___through2_1.1.1.tgz"; + path = fetchurl { + name = "through2___through2_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz"; + sha1 = "0847cbc4449f3405574dbdccd9bb841b83ac3545"; + }; + } + + { + name = "through2___through2_2.0.5.tgz"; + path = fetchurl { + name = "through2___through2_2.0.5.tgz"; + url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz"; + sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd"; + }; + } + + { + name = "through___through_2.3.8.tgz"; + path = fetchurl { + name = "through___through_2.3.8.tgz"; + url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + } + + { + name = "thunky___thunky_1.0.3.tgz"; + path = fetchurl { + name = "thunky___thunky_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz"; + sha1 = "f5df732453407b09191dae73e2a8cc73f381a826"; + }; + } + + { + name = "timed_out___timed_out_4.0.1.tgz"; + path = fetchurl { + name = "timed_out___timed_out_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz"; + sha1 = "f32eacac5a175bea25d7fab565ab3ed8741ef56f"; + }; + } + + { + name = "timers_ext___timers_ext_0.1.7.tgz"; + path = fetchurl { + name = "timers_ext___timers_ext_0.1.7.tgz"; + url = "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz"; + sha1 = "6f57ad8578e07a3fb9f91d9387d65647555e25c6"; + }; + } + + { + name = "tiny_relative_date___tiny_relative_date_1.3.0.tgz"; + path = fetchurl { + name = "tiny_relative_date___tiny_relative_date_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz"; + sha1 = "fa08aad501ed730f31cc043181d995c39a935e07"; + }; + } + + { + name = "tmp___tmp_0.0.33.tgz"; + path = fetchurl { + name = "tmp___tmp_0.0.33.tgz"; + url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz"; + sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9"; + }; + } + + { + name = "to_array___to_array_0.1.4.tgz"; + path = fetchurl { + name = "to_array___to_array_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz"; + sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"; + }; + } + + { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + path = fetchurl { + name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; + sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; + }; + } + + { + name = "to_buffer___to_buffer_1.1.1.tgz"; + path = fetchurl { + name = "to_buffer___to_buffer_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz"; + sha1 = "493bd48f62d7c43fcded313a03dcadb2e1213a80"; + }; + } + + { + name = "to_object_path___to_object_path_0.3.0.tgz"; + path = fetchurl { + name = "to_object_path___to_object_path_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; + sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; + }; + } + + { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + path = fetchurl { + name = "to_regex_range___to_regex_range_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; + sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; + }; + } + + { + name = "to_regex___to_regex_3.0.2.tgz"; + path = fetchurl { + name = "to_regex___to_regex_3.0.2.tgz"; + url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; + sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; + }; + } + + { + name = "to_utf_8___to_utf_8_1.3.0.tgz"; + path = fetchurl { + name = "to_utf_8___to_utf_8_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/to-utf-8/-/to-utf-8-1.3.0.tgz"; + sha1 = "b2af7be9e003f4c3817cc116d3baed2a054993c9"; + }; + } + + { + name = "toposort_class___toposort_class_1.0.1.tgz"; + path = fetchurl { + name = "toposort_class___toposort_class_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz"; + sha1 = "7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988"; + }; + } + + { + name = "torrent_discovery___torrent_discovery_9.1.1.tgz"; + path = fetchurl { + name = "torrent_discovery___torrent_discovery_9.1.1.tgz"; + url = "https://registry.yarnpkg.com/torrent-discovery/-/torrent-discovery-9.1.1.tgz"; + sha1 = "56704e6747b24fe00dbb75b442d202051f78d37d"; + }; + } + + { + name = "torrent_piece___torrent_piece_2.0.0.tgz"; + path = fetchurl { + name = "torrent_piece___torrent_piece_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/torrent-piece/-/torrent-piece-2.0.0.tgz"; + sha1 = "6598ae67d93699e887f178db267ba16d89d7ec9b"; + }; + } + + { + name = "touch___touch_3.1.0.tgz"; + path = fetchurl { + name = "touch___touch_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz"; + sha1 = "fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"; + }; + } + + { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + path = fetchurl { + name = "tough_cookie___tough_cookie_2.4.3.tgz"; + url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz"; + sha1 = "53f36da3f47783b0925afa06ff9f3b165280f781"; + }; + } + + { + name = "traverse___traverse_0.6.6.tgz"; + path = fetchurl { + name = "traverse___traverse_0.6.6.tgz"; + url = "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz"; + sha1 = "cbdf560fd7b9af632502fed40f918c157ea97137"; + }; + } + + { + name = "tree_kill___tree_kill_1.2.1.tgz"; + path = fetchurl { + name = "tree_kill___tree_kill_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz"; + sha1 = "5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a"; + }; + } + + { + name = "triple_beam___triple_beam_1.3.0.tgz"; + path = fetchurl { + name = "triple_beam___triple_beam_1.3.0.tgz"; + url = "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz"; + sha1 = "a595214c7298db8339eeeee083e4d10bd8cb8dd9"; + }; + } + + { + name = "ts_node___ts_node_7.0.1.tgz"; + path = fetchurl { + name = "ts_node___ts_node_7.0.1.tgz"; + url = "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz"; + sha1 = "9562dc2d1e6d248d24bc55f773e3f614337d9baf"; + }; + } + + { + name = "tslib___tslib_1.9.0.tgz"; + path = fetchurl { + name = "tslib___tslib_1.9.0.tgz"; + url = "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz"; + sha1 = "e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"; + }; + } + + { + name = "tslib___tslib_1.9.3.tgz"; + path = fetchurl { + name = "tslib___tslib_1.9.3.tgz"; + url = "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz"; + sha1 = "d7e4dd79245d85428c4d7e4822a79917954ca286"; + }; + } + + { + name = "tslint_config_standard___tslint_config_standard_8.0.1.tgz"; + path = fetchurl { + name = "tslint_config_standard___tslint_config_standard_8.0.1.tgz"; + url = "https://registry.yarnpkg.com/tslint-config-standard/-/tslint-config-standard-8.0.1.tgz"; + sha1 = "e4dd3128e84b0e34b51990b68715a641f2b417e4"; + }; + } + + { + name = "tslint_eslint_rules___tslint_eslint_rules_5.4.0.tgz"; + path = fetchurl { + name = "tslint_eslint_rules___tslint_eslint_rules_5.4.0.tgz"; + url = "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz"; + sha1 = "e488cc9181bf193fe5cd7bfca213a7695f1737b5"; + }; + } + + { + name = "tslint___tslint_5.11.0.tgz"; + path = fetchurl { + name = "tslint___tslint_5.11.0.tgz"; + url = "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz"; + sha1 = "98f30c02eae3cde7006201e4c33cb08b48581eed"; + }; + } + + { + name = "tsutils___tsutils_2.29.0.tgz"; + path = fetchurl { + name = "tsutils___tsutils_2.29.0.tgz"; + url = "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz"; + sha1 = "32b488501467acbedd4b85498673a0812aca0b99"; + }; + } + + { + name = "tsutils___tsutils_3.5.2.tgz"; + path = fetchurl { + name = "tsutils___tsutils_3.5.2.tgz"; + url = "https://registry.yarnpkg.com/tsutils/-/tsutils-3.5.2.tgz"; + sha1 = "6fd3c2d5a731e83bb21b070a173ec0faf3a8f6d3"; + }; + } + + { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + path = fetchurl { + name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; + url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + } + + { + name = "tv4___tv4_1.2.7.tgz"; + path = fetchurl { + name = "tv4___tv4_1.2.7.tgz"; + url = "https://registry.yarnpkg.com/tv4/-/tv4-1.2.7.tgz"; + sha1 = "bd29389afc73ade49ae5f48142b5d544bf68d120"; + }; + } + + { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + path = fetchurl { + name = "tweetnacl___tweetnacl_0.14.5.tgz"; + url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + } + + { + name = "type_check___type_check_0.3.2.tgz"; + path = fetchurl { + name = "type_check___type_check_0.3.2.tgz"; + url = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + } + + { + name = "type_detect___type_detect_0.1.1.tgz"; + path = fetchurl { + name = "type_detect___type_detect_0.1.1.tgz"; + url = "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz"; + sha1 = "0ba5ec2a885640e470ea4e8505971900dac58822"; + }; + } + + { + name = "type_detect___type_detect_4.0.8.tgz"; + path = fetchurl { + name = "type_detect___type_detect_4.0.8.tgz"; + url = "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz"; + sha1 = "7646fb5f18871cfbb7749e69bd39a6388eb7450c"; + }; + } + + { + name = "type_is___type_is_1.6.15.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.15.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz"; + sha1 = "cab10fb4909e441c82842eafe1ad646c81804410"; + }; + } + + { + name = "type_is___type_is_1.6.16.tgz"; + path = fetchurl { + name = "type_is___type_is_1.6.16.tgz"; + url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz"; + sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194"; + }; + } + + { + name = "typedarray_to_buffer___typedarray_to_buffer_3.1.5.tgz"; + path = fetchurl { + name = "typedarray_to_buffer___typedarray_to_buffer_3.1.5.tgz"; + url = "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz"; + sha1 = "a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"; + }; + } + + { + name = "typedarray___typedarray_0.0.6.tgz"; + path = fetchurl { + name = "typedarray___typedarray_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + } + + { + name = "typescript___typescript_3.2.1.tgz"; + path = fetchurl { + name = "typescript___typescript_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/typescript/-/typescript-3.2.1.tgz"; + sha1 = "0b7a04b8cf3868188de914d9568bd030f0c56192"; + }; + } + + { + name = "uid_number___uid_number_0.0.6.tgz"; + path = fetchurl { + name = "uid_number___uid_number_0.0.6.tgz"; + url = "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz"; + sha1 = "0ea10e8035e8eb5b8e4449f06da1c730663baa81"; + }; + } + + { + name = "uint64be___uint64be_2.0.2.tgz"; + path = fetchurl { + name = "uint64be___uint64be_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/uint64be/-/uint64be-2.0.2.tgz"; + sha1 = "ef4a179752fe8f9ddaa29544ecfc13490031e8e5"; + }; + } + + { + name = "ultron___ultron_1.0.2.tgz"; + path = fetchurl { + name = "ultron___ultron_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz"; + sha1 = "ace116ab557cd197386a4e88f4685378c8b2e4fa"; + }; + } + + { + name = "umask___umask_1.1.0.tgz"; + path = fetchurl { + name = "umask___umask_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz"; + sha1 = "f29cebf01df517912bb58ff9c4e50fde8e33320d"; + }; + } + + { + name = "undefsafe___undefsafe_2.0.2.tgz"; + path = fetchurl { + name = "undefsafe___undefsafe_2.0.2.tgz"; + url = "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz"; + sha1 = "225f6b9e0337663e0d8e7cfd686fc2836ccace76"; + }; + } + + { + name = "underscore_keypath___underscore_keypath_0.0.22.tgz"; + path = fetchurl { + name = "underscore_keypath___underscore_keypath_0.0.22.tgz"; + url = "https://registry.yarnpkg.com/underscore-keypath/-/underscore-keypath-0.0.22.tgz"; + sha1 = "48a528392bb6efc424be1caa56da4b5faccf264d"; + }; + } + + { + name = "underscore___underscore_1.9.1.tgz"; + path = fetchurl { + name = "underscore___underscore_1.9.1.tgz"; + url = "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz"; + sha1 = "06dce34a0e68a7babc29b365b8e74b8925203961"; + }; + } + + { + name = "union_value___union_value_1.0.0.tgz"; + path = fetchurl { + name = "union_value___union_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz"; + sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"; + }; + } + + { + name = "uniq___uniq_1.0.1.tgz"; + path = fetchurl { + name = "uniq___uniq_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + } + + { + name = "unique_filename___unique_filename_1.1.1.tgz"; + path = fetchurl { + name = "unique_filename___unique_filename_1.1.1.tgz"; + url = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz"; + sha1 = "1d69769369ada0583103a1e6ae87681b56573230"; + }; + } + + { + name = "unique_slug___unique_slug_2.0.1.tgz"; + path = fetchurl { + name = "unique_slug___unique_slug_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz"; + sha1 = "5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"; + }; + } + + { + name = "unique_string___unique_string_1.0.0.tgz"; + path = fetchurl { + name = "unique_string___unique_string_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz"; + sha1 = "9e1057cca851abb93398f8b33ae187b99caec11a"; + }; + } + + { + name = "universalify___universalify_0.1.2.tgz"; + path = fetchurl { + name = "universalify___universalify_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz"; + sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66"; + }; + } + + { + name = "unordered_array_remove___unordered_array_remove_1.0.2.tgz"; + path = fetchurl { + name = "unordered_array_remove___unordered_array_remove_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz"; + sha1 = "c546e8f88e317a0cf2644c97ecb57dba66d250ef"; + }; + } + + { + name = "unpipe___unpipe_1.0.0.tgz"; + path = fetchurl { + name = "unpipe___unpipe_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + } + + { + name = "unset_value___unset_value_1.0.0.tgz"; + path = fetchurl { + name = "unset_value___unset_value_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; + sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; + }; + } + + { + name = "unzip_response___unzip_response_2.0.1.tgz"; + path = fetchurl { + name = "unzip_response___unzip_response_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz"; + sha1 = "d2f0f737d16b0615e72a6935ed04214572d56f97"; + }; + } + + { + name = "upath___upath_1.1.0.tgz"; + path = fetchurl { + name = "upath___upath_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz"; + sha1 = "35256597e46a581db4793d0ce47fa9aebfc9fabd"; + }; + } + + { + name = "update_notifier___update_notifier_2.5.0.tgz"; + path = fetchurl { + name = "update_notifier___update_notifier_2.5.0.tgz"; + url = "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz"; + sha1 = "d0744593e13f161e406acb1d9408b72cad08aff6"; + }; + } + + { + name = "uri_js___uri_js_4.2.2.tgz"; + path = fetchurl { + name = "uri_js___uri_js_4.2.2.tgz"; + url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; + sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; + }; + } + + { + name = "urix___urix_0.1.0.tgz"; + path = fetchurl { + name = "urix___urix_0.1.0.tgz"; + url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; + sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; + }; + } + + { + name = "url_join___url_join_4.0.0.tgz"; + path = fetchurl { + name = "url_join___url_join_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz"; + sha1 = "4d3340e807d3773bda9991f8305acdcc2a665d2a"; + }; + } + + { + name = "url_parse_lax___url_parse_lax_1.0.0.tgz"; + path = fetchurl { + name = "url_parse_lax___url_parse_lax_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz"; + sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73"; + }; + } + + { + name = "use___use_3.1.1.tgz"; + path = fetchurl { + name = "use___use_3.1.1.tgz"; + url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; + sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; + }; + } + + { + name = "user_home___user_home_2.0.0.tgz"; + path = fetchurl { + name = "user_home___user_home_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz"; + sha1 = "9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"; + }; + } + + { + name = "useragent___useragent_2.3.0.tgz"; + path = fetchurl { + name = "useragent___useragent_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz"; + sha1 = "217f943ad540cb2128658ab23fc960f6a88c9972"; + }; + } + + { + name = "ut_metadata___ut_metadata_3.3.0.tgz"; + path = fetchurl { + name = "ut_metadata___ut_metadata_3.3.0.tgz"; + url = "https://registry.yarnpkg.com/ut_metadata/-/ut_metadata-3.3.0.tgz"; + sha1 = "a0e0e861ebc39ed96e506601d1463ade3b548a7e"; + }; + } + + { + name = "ut_pex___ut_pex_1.2.1.tgz"; + path = fetchurl { + name = "ut_pex___ut_pex_1.2.1.tgz"; + url = "https://registry.yarnpkg.com/ut_pex/-/ut_pex-1.2.1.tgz"; + sha1 = "472ed0ea5e9bbc9148b833339d56d7b17cf3dad0"; + }; + } + + { + name = "utf_8_validate___utf_8_validate_5.0.1.tgz"; + path = fetchurl { + name = "utf_8_validate___utf_8_validate_5.0.1.tgz"; + url = "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.1.tgz"; + sha1 = "cef1f9011ba4b216f4d7c6ddf5189d750599ff8b"; + }; + } + + { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + path = fetchurl { + name = "util_deprecate___util_deprecate_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + } + + { + name = "util_extend___util_extend_1.0.3.tgz"; + path = fetchurl { + name = "util_extend___util_extend_1.0.3.tgz"; + url = "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz"; + sha1 = "a7c216d267545169637b3b6edc6ca9119e2ff93f"; + }; + } + + { + name = "util___util_0.10.4.tgz"; + path = fetchurl { + name = "util___util_0.10.4.tgz"; + url = "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz"; + sha1 = "3aa0125bfe668a4672de58857d3ace27ecb76901"; + }; + } + + { + name = "utile___utile_0.3.0.tgz"; + path = fetchurl { + name = "utile___utile_0.3.0.tgz"; + url = "https://registry.yarnpkg.com/utile/-/utile-0.3.0.tgz"; + sha1 = "1352c340eb820e4d8ddba039a4fbfaa32ed4ef3a"; + }; + } + + { + name = "utils_merge___utils_merge_1.0.0.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz"; + sha1 = "0294fb922bb9375153541c4f7096231f287c8af8"; + }; + } + + { + name = "utils_merge___utils_merge_1.0.1.tgz"; + path = fetchurl { + name = "utils_merge___utils_merge_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + } + + { + name = "uue___uue_3.1.2.tgz"; + path = fetchurl { + name = "uue___uue_3.1.2.tgz"; + url = "https://registry.yarnpkg.com/uue/-/uue-3.1.2.tgz"; + sha1 = "e99368414e87200012eb37de4dbaebaa1c742ad2"; + }; + } + + { + name = "uuid___uuid_3.3.2.tgz"; + path = fetchurl { + name = "uuid___uuid_3.3.2.tgz"; + url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz"; + sha1 = "1b4af4955eb3077c501c23872fc6513811587131"; + }; + } + + { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + path = fetchurl { + name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"; + sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"; + }; + } + + { + name = "validate_npm_package_name___validate_npm_package_name_3.0.0.tgz"; + path = fetchurl { + name = "validate_npm_package_name___validate_npm_package_name_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz"; + sha1 = "5fa912d81eb7d0c74afc140de7317f0ca7df437e"; + }; + } + + { + name = "validator___validator_10.9.0.tgz"; + path = fetchurl { + name = "validator___validator_10.9.0.tgz"; + url = "https://registry.yarnpkg.com/validator/-/validator-10.9.0.tgz"; + sha1 = "d10c11673b5061fb7ccf4c1114412411b2bac2a8"; + }; + } + + { + name = "vary___vary_1.1.2.tgz"; + path = fetchurl { + name = "vary___vary_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + } + + { + name = "vary___vary_1.0.1.tgz"; + path = fetchurl { + name = "vary___vary_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz"; + sha1 = "99e4981566a286118dfb2b817357df7993376d10"; + }; + } + + { + name = "vasync___vasync_1.6.4.tgz"; + path = fetchurl { + name = "vasync___vasync_1.6.4.tgz"; + url = "https://registry.yarnpkg.com/vasync/-/vasync-1.6.4.tgz"; + sha1 = "dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f"; + }; + } + + { + name = "verror___verror_1.10.0.tgz"; + path = fetchurl { + name = "verror___verror_1.10.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + } + + { + name = "verror___verror_1.6.0.tgz"; + path = fetchurl { + name = "verror___verror_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz"; + sha1 = "7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"; + }; + } + + { + name = "videostream___videostream_2.6.0.tgz"; + path = fetchurl { + name = "videostream___videostream_2.6.0.tgz"; + url = "https://registry.yarnpkg.com/videostream/-/videostream-2.6.0.tgz"; + sha1 = "7f0b2b84bc457c12cfe599aa2345f5cc06241ab6"; + }; + } + + { + name = "wcwidth___wcwidth_1.0.1.tgz"; + path = fetchurl { + name = "wcwidth___wcwidth_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz"; + sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; + }; + } + + { + name = "webfinger.js___webfinger.js_2.7.0.tgz"; + path = fetchurl { + name = "webfinger.js___webfinger.js_2.7.0.tgz"; + url = "https://registry.yarnpkg.com/webfinger.js/-/webfinger.js-2.7.0.tgz"; + sha1 = "403354a14a65aeeba64c1408c18a387487cea106"; + }; + } + + { + name = "webtorrent___webtorrent_0.102.4.tgz"; + path = fetchurl { + name = "webtorrent___webtorrent_0.102.4.tgz"; + url = "https://registry.yarnpkg.com/webtorrent/-/webtorrent-0.102.4.tgz"; + sha1 = "0902f5dddb244c4ca8137d5d678546b733adeb2f"; + }; + } + + { + name = "which_module___which_module_2.0.0.tgz"; + path = fetchurl { + name = "which_module___which_module_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + } + + { + name = "which_pm_runs___which_pm_runs_1.0.0.tgz"; + path = fetchurl { + name = "which_pm_runs___which_pm_runs_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz"; + sha1 = "670b3afbc552e0b55df6b7780ca74615f23ad1cb"; + }; + } + + { + name = "which___which_1.3.1.tgz"; + path = fetchurl { + name = "which___which_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; + sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; + }; + } + + { + name = "wide_align___wide_align_1.1.3.tgz"; + path = fetchurl { + name = "wide_align___wide_align_1.1.3.tgz"; + url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz"; + sha1 = "ae074e6bdc0c14a431e804e624549c633b000457"; + }; + } + + { + name = "widest_line___widest_line_2.0.1.tgz"; + path = fetchurl { + name = "widest_line___widest_line_2.0.1.tgz"; + url = "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz"; + sha1 = "7438764730ec7ef4381ce4df82fb98a53142a3fc"; + }; + } + + { + name = "wildstring___wildstring_1.0.8.tgz"; + path = fetchurl { + name = "wildstring___wildstring_1.0.8.tgz"; + url = "https://registry.yarnpkg.com/wildstring/-/wildstring-1.0.8.tgz"; + sha1 = "80b5f85b7f8aa98bc19cc230e60ac7f5e0dd226d"; + }; + } + + { + name = "winston_transport___winston_transport_4.2.0.tgz"; + path = fetchurl { + name = "winston_transport___winston_transport_4.2.0.tgz"; + url = "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.2.0.tgz"; + sha1 = "a20be89edf2ea2ca39ba25f3e50344d73e6520e5"; + }; + } + + { + name = "winston___winston_2.1.1.tgz"; + path = fetchurl { + name = "winston___winston_2.1.1.tgz"; + url = "https://registry.yarnpkg.com/winston/-/winston-2.1.1.tgz"; + sha1 = "3c9349d196207fd1bdff9d4bc43ef72510e3a12e"; + }; + } + + { + name = "winston___winston_3.1.0.tgz"; + path = fetchurl { + name = "winston___winston_3.1.0.tgz"; + url = "https://registry.yarnpkg.com/winston/-/winston-3.1.0.tgz"; + sha1 = "80724376aef164e024f316100d5b178d78ac5331"; + }; + } + + { + name = "wkx___wkx_0.4.5.tgz"; + path = fetchurl { + name = "wkx___wkx_0.4.5.tgz"; + url = "https://registry.yarnpkg.com/wkx/-/wkx-0.4.5.tgz"; + sha1 = "a85e15a6e69d1bfaec2f3c523be3dfa40ab861d0"; + }; + } + + { + name = "wordwrap___wordwrap_1.0.0.tgz"; + path = fetchurl { + name = "wordwrap___wordwrap_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz"; + sha1 = "27584810891456a4171c8d0226441ade90cbcaeb"; + }; + } + + { + name = "worker_farm___worker_farm_1.6.0.tgz"; + path = fetchurl { + name = "worker_farm___worker_farm_1.6.0.tgz"; + url = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz"; + sha1 = "aecc405976fab5a95526180846f0dba288f3a4a0"; + }; + } + + { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; + sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; + }; + } + + { + name = "wrap_ansi___wrap_ansi_3.0.1.tgz"; + path = fetchurl { + name = "wrap_ansi___wrap_ansi_3.0.1.tgz"; + url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz"; + sha1 = "288a04d87eda5c286e060dfe8f135ce8d007f8ba"; + }; + } + + { + name = "wrappy___wrappy_1.0.2.tgz"; + path = fetchurl { + name = "wrappy___wrappy_1.0.2.tgz"; + url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + } + + { + name = "write_file_atomic___write_file_atomic_2.3.0.tgz"; + path = fetchurl { + name = "write_file_atomic___write_file_atomic_2.3.0.tgz"; + url = "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz"; + sha1 = "1ff61575c2e2a4e8e510d6fa4e243cce183999ab"; + }; + } + + { + name = "write___write_0.2.1.tgz"; + path = fetchurl { + name = "write___write_0.2.1.tgz"; + url = "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz"; + sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757"; + }; + } + + { + name = "ws___ws_1.1.2.tgz"; + path = fetchurl { + name = "ws___ws_1.1.2.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz"; + sha1 = "8a244fa052401e08c9886cf44a85189e1fd4067f"; + }; + } + + { + name = "ws___ws_6.1.2.tgz"; + path = fetchurl { + name = "ws___ws_6.1.2.tgz"; + url = "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz"; + sha1 = "3cc7462e98792f0ac679424148903ded3b9c3ad8"; + }; + } + + { + name = "wtf_8___wtf_8_1.0.0.tgz"; + path = fetchurl { + name = "wtf_8___wtf_8_1.0.0.tgz"; + url = "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz"; + sha1 = "392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"; + }; + } + + { + name = "x_xss_protection___x_xss_protection_1.1.0.tgz"; + path = fetchurl { + name = "x_xss_protection___x_xss_protection_1.1.0.tgz"; + url = "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.1.0.tgz"; + sha1 = "4f1898c332deb1e7f2be1280efb3e2c53d69c1a7"; + }; + } + + { + name = "xdg_basedir___xdg_basedir_3.0.0.tgz"; + path = fetchurl { + name = "xdg_basedir___xdg_basedir_3.0.0.tgz"; + url = "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz"; + sha1 = "496b2cc109eca8dbacfe2dc72b603c17c5870ad4"; + }; + } + + { + name = "xhr2___xhr2_0.1.4.tgz"; + path = fetchurl { + name = "xhr2___xhr2_0.1.4.tgz"; + url = "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz"; + sha1 = "7f87658847716db5026323812f818cadab387a5f"; + }; + } + + { + name = "xliff___xliff_4.1.2.tgz"; + path = fetchurl { + name = "xliff___xliff_4.1.2.tgz"; + url = "https://registry.yarnpkg.com/xliff/-/xliff-4.1.2.tgz"; + sha1 = "eb6fae21346d82653febd44d478f5748ad79fbd2"; + }; + } + + { + name = "xml_js___xml_js_1.6.8.tgz"; + path = fetchurl { + name = "xml_js___xml_js_1.6.8.tgz"; + url = "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.8.tgz"; + sha1 = "e06419c54235f18f4c2cdda824cbd65a782330de"; + }; + } + + { + name = "xml2js___xml2js_0.4.19.tgz"; + path = fetchurl { + name = "xml2js___xml2js_0.4.19.tgz"; + url = "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz"; + sha1 = "686c20f213209e94abf0d1bcf1efaa291c7827a7"; + }; + } + + { + name = "xml___xml_1.0.1.tgz"; + path = fetchurl { + name = "xml___xml_1.0.1.tgz"; + url = "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz"; + sha1 = "78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"; + }; + } + + { + name = "xmlbuilder___xmlbuilder_10.1.1.tgz"; + path = fetchurl { + name = "xmlbuilder___xmlbuilder_10.1.1.tgz"; + url = "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz"; + sha1 = "8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"; + }; + } + + { + name = "xmlbuilder___xmlbuilder_9.0.7.tgz"; + path = fetchurl { + name = "xmlbuilder___xmlbuilder_9.0.7.tgz"; + url = "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz"; + sha1 = "132ee63d2ec5565c557e20f4c22df9aca686b10d"; + }; + } + + { + name = "xmldom___xmldom_0.1.19.tgz"; + path = fetchurl { + name = "xmldom___xmldom_0.1.19.tgz"; + url = "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz"; + sha1 = "631fc07776efd84118bf25171b37ed4d075a0abc"; + }; + } + + { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + path = fetchurl { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.3.tgz"; + url = "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz"; + sha1 = "185a888c04eca46c3e4070d99f7b49de3528992d"; + }; + } + + { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.5.tgz"; + path = fetchurl { + name = "xmlhttprequest_ssl___xmlhttprequest_ssl_1.5.5.tgz"; + url = "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz"; + sha1 = "c2876b06168aadc40e57d97e81191ac8f4398b3e"; + }; + } + + { + name = "xtend___xtend_4.0.1.tgz"; + path = fetchurl { + name = "xtend___xtend_4.0.1.tgz"; + url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz"; + sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; + }; + } + + { + name = "y18n___y18n_3.2.1.tgz"; + path = fetchurl { + name = "y18n___y18n_3.2.1.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz"; + sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41"; + }; + } + + { + name = "y18n___y18n_4.0.0.tgz"; + path = fetchurl { + name = "y18n___y18n_4.0.0.tgz"; + url = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz"; + sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b"; + }; + } + + { + name = "yallist___yallist_2.1.2.tgz"; + path = fetchurl { + name = "yallist___yallist_2.1.2.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + } + + { + name = "yallist___yallist_3.0.3.tgz"; + path = fetchurl { + name = "yallist___yallist_3.0.3.tgz"; + url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz"; + sha1 = "b4b049e314be545e3ce802236d6cd22cd91c3de9"; + }; + } + + { + name = "yargs_parser___yargs_parser_11.1.1.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_11.1.1.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz"; + sha1 = "879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"; + }; + } + + { + name = "yargs_parser___yargs_parser_8.1.0.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_8.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz"; + sha1 = "f1376a33b6629a5d063782944da732631e966950"; + }; + } + + { + name = "yargs_parser___yargs_parser_9.0.2.tgz"; + path = fetchurl { + name = "yargs_parser___yargs_parser_9.0.2.tgz"; + url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz"; + sha1 = "9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"; + }; + } + + { + name = "yargs___yargs_11.1.0.tgz"; + path = fetchurl { + name = "yargs___yargs_11.1.0.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz"; + sha1 = "90b869934ed6e871115ea2ff58b03f4724ed2d77"; + }; + } + + { + name = "yargs___yargs_12.0.5.tgz"; + path = fetchurl { + name = "yargs___yargs_12.0.5.tgz"; + url = "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz"; + sha1 = "05f5997b609647b64f66b81e3b4b10a368e7ad13"; + }; + } + + { + name = "yeast___yeast_0.1.2.tgz"; + path = fetchurl { + name = "yeast___yeast_0.1.2.tgz"; + url = "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz"; + sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419"; + }; + } + + { + name = "yn___yn_2.0.0.tgz"; + path = fetchurl { + name = "yn___yn_2.0.0.tgz"; + url = "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz"; + sha1 = "e5adabc8acf408f6385fc76495684c88e6af689a"; + }; + } + + { + name = "youtube_dl___youtube_dl_1.12.2.tgz"; + path = fetchurl { + name = "youtube_dl___youtube_dl_1.12.2.tgz"; + url = "https://registry.yarnpkg.com/youtube-dl/-/youtube-dl-1.12.2.tgz"; + sha1 = "11985268564c92b229f62b43d97374f86a605d1d"; + }; + } + + { + name = "z_schema___z_schema_3.24.2.tgz"; + path = fetchurl { + name = "z_schema___z_schema_3.24.2.tgz"; + url = "https://registry.yarnpkg.com/z-schema/-/z-schema-3.24.2.tgz"; + sha1 = "193560e718812d98fdc190c38871b634b92f2386"; + }; + } + + { + name = "zero_fill___zero_fill_2.2.3.tgz"; + path = fetchurl { + name = "zero_fill___zero_fill_2.2.3.tgz"; + url = "https://registry.yarnpkg.com/zero-fill/-/zero-fill-2.2.3.tgz"; + sha1 = "a3def06ba5e39ae644850bb4ca2ad4112b4855e9"; + }; + } + ]; +} diff --git a/pkgs/webapps/peertube/yarn_fix_bluebird.patch b/pkgs/webapps/peertube/yarn_fix_bluebird.patch new file mode 100644 index 00000000..8ac987dc --- /dev/null +++ b/pkgs/webapps/peertube/yarn_fix_bluebird.patch @@ -0,0 +1,53 @@ +--- a/yarn.lock 2019-05-09 11:59:32.199273420 +0200 ++++ b/yarn.lock 2019-05-09 12:02:46.270581238 +0200 +@@ -45,11 +45,16 @@ + dependencies: + "@types/node" "*" + +-"@types/bluebird@*", "@types/bluebird@3.5.18", "@types/bluebird@3.5.21": ++"@types/bluebird@*", "@types/bluebird@^3.5.18", "@types/bluebird@3.5.21": + version "3.5.21" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.21.tgz#567615589cc913e84a28ecf9edb031732bdf2634" + integrity sha512-6UNEwyw+6SGMC/WMI0ld0PS4st7Qq51qgguFrFizOSpGvZiqe9iswztFSdZvwJBEhLOy2JaxNE6VC7yMAlbfyQ== + ++"@types/bluebird@3.5.18": ++ version "3.5.18" ++ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6" ++ integrity sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w== ++ + "@types/body-parser@*", "@types/body-parser@^1.16.3": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" +@@ -4334,9 +4339,9 @@ + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +-"jsonld-signatures@https://github.com/Chocobozzz/jsonld-signatures#rsa2017": +- version "1.2.2-2" +- resolved "https://github.com/Chocobozzz/jsonld-signatures#77660963e722eb4541d2d255f9d9d4216329665f" ++jsonld-signatures@^1.2.2: ++ version "1.2.2" ++ resolved "https://github.com/Chocobozzz/jsonld-signatures/archive/77660963e722eb4541d2d255f9d9d4216329665f.tar.gz" + dependencies: + bitcore-message "github:CoMakery/bitcore-message#dist" + jsonld "^0.5.12" +@@ -7331,7 +7331,7 @@ + resolved "https://registry.yarnpkg.com/sequelize-typescript/-/sequelize-typescript-0.6.6.tgz#926037b542dae9f4eff20609d095cc5e3a3640f3" + integrity sha512-WGJTaNuHyYwUM8itxZvMVLeNEb7xSjisbVN1Q5rxLaIf2w67Xaf1GX6Jb+9840bjcNPvMsKgC2aR88zmw7UlcQ== + dependencies: +- "@types/bluebird" "3.5.18" ++ "@types/bluebird" "^3.5.18" + "@types/node" "6.0.41" + "@types/sequelize" "4.27.24" + es6-shim "0.35.3" +--- a/package.json 2019-05-09 13:26:34.784870603 +0200 ++++ b/package.json 2019-05-09 13:26:52.941348635 +0200 +@@ -124,7 +124,7 @@ + "iso-639-3": "^1.0.1", + "js-yaml": "^3.5.4", + "jsonld": "^1.0.1", +- "jsonld-signatures": "https://github.com/Chocobozzz/jsonld-signatures#rsa2017", ++ "jsonld-signatures": "^1.2.2", + "lodash": "^4.17.10", + "magnet-uri": "^5.1.4", + "memoizee": "^0.4.14", diff --git a/pkgs/webapps/peertube/yarn_fix_bluebird_ldap.patch b/pkgs/webapps/peertube/yarn_fix_bluebird_ldap.patch new file mode 100644 index 00000000..4e780cf7 --- /dev/null +++ b/pkgs/webapps/peertube/yarn_fix_bluebird_ldap.patch @@ -0,0 +1,53 @@ +--- a/yarn.lock 2019-05-09 11:59:32.199273420 +0200 ++++ b/yarn.lock 2019-05-09 12:02:46.270581238 +0200 +@@ -45,11 +45,16 @@ + dependencies: + "@types/node" "*" + +-"@types/bluebird@*", "@types/bluebird@3.5.18", "@types/bluebird@3.5.21": ++"@types/bluebird@*", "@types/bluebird@^3.5.18", "@types/bluebird@3.5.21": + version "3.5.21" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.21.tgz#567615589cc913e84a28ecf9edb031732bdf2634" + integrity sha512-6UNEwyw+6SGMC/WMI0ld0PS4st7Qq51qgguFrFizOSpGvZiqe9iswztFSdZvwJBEhLOy2JaxNE6VC7yMAlbfyQ== + ++"@types/bluebird@3.5.18": ++ version "3.5.18" ++ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6" ++ integrity sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w== ++ + "@types/body-parser@*", "@types/body-parser@^1.16.3": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" +@@ -4384,9 +4389,9 @@ + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +-"jsonld-signatures@https://github.com/Chocobozzz/jsonld-signatures#rsa2017": +- version "1.2.2-2" +- resolved "https://github.com/Chocobozzz/jsonld-signatures#77660963e722eb4541d2d255f9d9d4216329665f" ++jsonld-signatures@^1.2.2: ++ version "1.2.2" ++ resolved "https://github.com/Chocobozzz/jsonld-signatures/archive/77660963e722eb4541d2d255f9d9d4216329665f.tar.gz" + dependencies: + bitcore-message "github:CoMakery/bitcore-message#dist" + jsonld "^0.5.12" +@@ -7441,7 +7441,7 @@ + resolved "https://registry.yarnpkg.com/sequelize-typescript/-/sequelize-typescript-0.6.6.tgz#926037b542dae9f4eff20609d095cc5e3a3640f3" + integrity sha512-WGJTaNuHyYwUM8itxZvMVLeNEb7xSjisbVN1Q5rxLaIf2w67Xaf1GX6Jb+9840bjcNPvMsKgC2aR88zmw7UlcQ== + dependencies: +- "@types/bluebird" "3.5.18" ++ "@types/bluebird" "^3.5.18" + "@types/node" "6.0.41" + "@types/sequelize" "4.27.24" + es6-shim "0.35.3" +--- a/package.json 2019-05-09 13:26:34.784870603 +0200 ++++ b/package.json 2019-05-09 13:26:52.941348635 +0200 +@@ -124,7 +124,7 @@ + "iso-639-3": "^1.0.1", + "js-yaml": "^3.5.4", + "jsonld": "^1.0.1", +- "jsonld-signatures": "https://github.com/Chocobozzz/jsonld-signatures#rsa2017", ++ "jsonld-signatures": "^1.2.2", + "ldapjs": "^1.0.2", + "lodash": "^4.17.10", + "magnet-uri": "^5.1.4", diff --git a/pkgs/webapps/phpldapadmin/default.nix b/pkgs/webapps/phpldapadmin/default.nix new file mode 100644 index 00000000..70fd19af --- /dev/null +++ b/pkgs/webapps/phpldapadmin/default.nix @@ -0,0 +1,24 @@ +{ config ? "/etc/phpldapadmin/config.php", fetchurl, stdenv, optipng }: +stdenv.mkDerivation rec { + version = "1.2.3"; + name = "phpldapadmin-${version}"; + src = fetchurl { + url = "https://downloads.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/${version}/${name}.tgz"; + sha256 = "0n7dhp2a7n1krmnik3pb969jynsmhghmxviivnckifkprv1zijmf"; + }; + patches = [ + ./ldap-php5_5.patch + ./ldap-disable-mcrypt.patch + ./ldap-php7_2.patch + ./ldap-sort-in-templates.patch + ./ldap-align-button.patch + ]; + buildInputs = [ optipng ]; + buildPhase = '' + find -name '*.png' -exec optipng -quiet -force -fix {} \; + ''; + installPhase = '' + cp -a . $out + ln -sf ${config} $out/config/config.php + ''; +} diff --git a/pkgs/webapps/phpldapadmin/ldap-align-button.patch b/pkgs/webapps/phpldapadmin/ldap-align-button.patch new file mode 100644 index 00000000..d9a5504f --- /dev/null +++ b/pkgs/webapps/phpldapadmin/ldap-align-button.patch @@ -0,0 +1,11 @@ +--- a/htdocs/update_confirm.php 2012-10-01 08:54:14.000000000 +0200 ++++ b/htdocs/update_confirm.php 2018-06-06 15:47:44.122398888 +0200 +@@ -187,7 +187,7 @@ + + echo ''; + +- echo '
'; ++ echo '
'; + echo '
'; + // @todo cant use AJAX here, it affects file uploads. + printf('', diff --git a/pkgs/webapps/phpldapadmin/ldap-disable-mcrypt.patch b/pkgs/webapps/phpldapadmin/ldap-disable-mcrypt.patch new file mode 100644 index 00000000..8bc4e7b5 --- /dev/null +++ b/pkgs/webapps/phpldapadmin/ldap-disable-mcrypt.patch @@ -0,0 +1,36 @@ +diff -wbBur phpldapadmin-1.2.3/lib/functions.php phpldapadmin-1.2.3.my/lib/functions.php +--- phpldapadmin-1.2.3/lib/functions.php 2012-10-01 10:54:14.000000000 +0400 ++++ phpldapadmin-1.2.3.my/lib/functions.php 2017-02-02 20:02:14.424245233 +0300 +@@ -745,6 +745,7 @@ + if (! trim($secret)) + return $data; + ++/* + if (function_exists('mcrypt_module_open') && ! empty($data)) { + $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,''); + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM); +@@ -754,7 +755,7 @@ + + return $encrypted_data; + } +- ++*/ + if (file_exists(LIBDIR.'blowfish.php')) + require_once LIBDIR.'blowfish.php'; + else +@@ -801,6 +802,7 @@ + if (! trim($secret)) + return $encdata; + ++/* + if (function_exists('mcrypt_module_open') && ! empty($encdata)) { + $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,''); + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM); +@@ -810,6 +812,7 @@ + + return $decrypted_data; + } ++*/ + + if (file_exists(LIBDIR.'blowfish.php')) + require_once LIBDIR.'blowfish.php'; diff --git a/pkgs/webapps/phpldapadmin/ldap-php5_5.patch b/pkgs/webapps/phpldapadmin/ldap-php5_5.patch new file mode 100644 index 00000000..8545ad27 --- /dev/null +++ b/pkgs/webapps/phpldapadmin/ldap-php5_5.patch @@ -0,0 +1,88 @@ +diff -Nrbu phpldapadmin-1.2.3/lib/PageRender.php phpldapadmin-1.2.3-OK/lib/PageRender.php +--- phpldapadmin-1.2.3/lib/PageRender.php 2012-10-01 10:54:14.000000000 +0400 ++++ phpldapadmin-1.2.3-OK/lib/PageRender.php 2013-11-12 03:44:40.518144839 +0400 +@@ -287,7 +287,7 @@ + break; + + default: +- $vals[$i] = password_hash($passwordvalue,$enc); ++ $vals[$i] = pla_password_hash($passwordvalue,$enc); + } + + $vals = array_unique($vals); +diff -Nrbu phpldapadmin-1.2.3/lib/ds_ldap.php phpldapadmin-1.2.3-OK/lib/ds_ldap.php +--- phpldapadmin-1.2.3/lib/ds_ldap.php 2012-10-01 10:54:14.000000000 +0400 ++++ phpldapadmin-1.2.3-OK/lib/ds_ldap.php 2013-11-12 03:40:56.638343739 +0400 +@@ -1117,12 +1117,14 @@ + if (is_array($dn)) { + $a = array(); + foreach ($dn as $key => $rdn) +- $a[$key] = preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$rdn); ++ $a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', ++ function ($matches) { return chr(hexdec($matches[1])); }, $rdn); + + return $a; + + } else +- return preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$dn); ++ return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', ++ function ($matches) { return chr(hexdec($matches[1])); }, $dn); + } + + public function getRootDSE($method=null) { +diff -Nrbu phpldapadmin-1.2.3/lib/functions.php phpldapadmin-1.2.3-OK/lib/functions.php +--- phpldapadmin-1.2.3/lib/functions.php 2012-10-01 10:54:14.000000000 +0400 ++++ phpldapadmin-1.2.3-OK/lib/functions.php 2013-11-12 03:44:17.298065264 +0400 +@@ -2127,7 +2127,7 @@ + * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, sha512, or clear. + * @return string The hashed password. + */ +-function password_hash($password_clear,$enc_type) { ++function pla_password_hash($password_clear,$enc_type) { + if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS')) + debug_log('Entered (%%)',1,0,__FILE__,__LINE__,__METHOD__,$fargs); + +@@ -2318,7 +2318,7 @@ + + # SHA crypted passwords + case 'sha': +- if (strcasecmp(password_hash($plainpassword,'sha'),'{SHA}'.$cryptedpassword) == 0) ++ if (strcasecmp(pla_password_hash($plainpassword,'sha'),'{SHA}'.$cryptedpassword) == 0) + return true; + else + return false; +@@ -2327,7 +2327,7 @@ + + # MD5 crypted passwords + case 'md5': +- if( strcasecmp(password_hash($plainpassword,'md5'),'{MD5}'.$cryptedpassword) == 0) ++ if( strcasecmp(pla_password_hash($plainpassword,'md5'),'{MD5}'.$cryptedpassword) == 0) + return true; + else + return false; +@@ -2392,7 +2392,7 @@ + + # SHA512 crypted passwords + case 'sha512': +- if (strcasecmp(password_hash($plainpassword,'sha512'),'{SHA512}'.$cryptedpassword) == 0) ++ if (strcasecmp(pla_password_hash($plainpassword,'sha512'),'{SHA512}'.$cryptedpassword) == 0) + return true; + else + return false; +@@ -2565,12 +2565,14 @@ + $a = array(); + + foreach ($dn as $key => $rdn) +- $a[$key] = preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$rdn); ++ $a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', ++ function ($matches) { return chr(hexdec($matches[1])); }, $rdn ); + + return $a; + + } else { +- return preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$dn); ++ return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', ++ function ($matches) { return chr(hexdec($matches[1])); }, $dn); + } + } + diff --git a/pkgs/webapps/phpldapadmin/ldap-php7_2.patch b/pkgs/webapps/phpldapadmin/ldap-php7_2.patch new file mode 100644 index 00000000..40ee0555 --- /dev/null +++ b/pkgs/webapps/phpldapadmin/ldap-php7_2.patch @@ -0,0 +1,30 @@ +diff -wbBur phpldapadmin.org/lib/functions.php phpldapadmin/lib/functions.php +--- phpldapadmin.org/lib/functions.php 2017-02-02 10:03:58.000000000 -0700 ++++ phpldapadmin/lib/functions.php 2018-01-23 06:18:31.118312887 -0700 +@@ -51,7 +51,7 @@ + /** + * Loads class definition + */ +-function __autoload($className) { ++spl_autoload_register(function($className) { + if (file_exists(HOOKSDIR."classes/$className.php")) + require_once(HOOKSDIR."classes/$className.php"); + elseif (file_exists(LIBDIR."$className.php")) +@@ -64,7 +64,7 @@ + 'body'=>sprintf('%s: %s [%s]', + __METHOD__,_('Called to load a class that cant be found'),$className), + 'type'=>'error')); +-} ++}); + + /** + * Strips all slashes from the specified array in place (pass by ref). +@@ -1083,7 +1083,7 @@ + + $code .= 'return $c;'; + +- $CACHE[$sortby] = create_function('$a, $b',$code); ++ eval("\$CACHE[\$sortby] = function(\$a, \$b) { $code; };"); + } + + uasort($data,$CACHE[$sortby]); diff --git a/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch b/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch new file mode 100644 index 00000000..55a19748 --- /dev/null +++ b/pkgs/webapps/phpldapadmin/ldap-sort-in-templates.patch @@ -0,0 +1,12 @@ +diff -wbBur phpldapadmin-1.2.3.org/lib/TemplateRender.php phpldapadmin-1.2.3/lib/TemplateRender.php +--- phpldapadmin-1.2.3.org/lib/TemplateRender.php 2012-10-01 10:54:14.000000000 +0400 ++++ phpldapadmin-1.2.3/lib/TemplateRender.php 2018-02-02 19:06:45.674760057 +0300 +@@ -321,6 +321,8 @@ + + $vals = array(); + ++ asort($picklistvalues); ++ + foreach ($picklistvalues as $key => $values) { + $display = $args[3]; + diff --git a/pkgs/webapps/rompr/default.nix b/pkgs/webapps/rompr/default.nix new file mode 100644 index 00000000..2accf00c --- /dev/null +++ b/pkgs/webapps/rompr/default.nix @@ -0,0 +1,8 @@ +{ varDir ? "/var/lib/rompr", stdenv, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./rompr.json // { + installPhase = '' + cp -a . $out + ln -sf ${varDir}/prefs $out/prefs + ln -sf ${varDir}/albumart $out/albumart + ''; +}) diff --git a/pkgs/webapps/rompr/rompr.json b/pkgs/webapps/rompr/rompr.json new file mode 100644 index 00000000..778d9154 --- /dev/null +++ b/pkgs/webapps/rompr/rompr.json @@ -0,0 +1,15 @@ +{ + "tag": "1.24", + "meta": { + "name": "rompr", + "url": "https://github.com/fatg3erman/RompR", + "branch": "refs/tags/1.24" + }, + "github": { + "owner": "fatg3erman", + "repo": "RompR", + "rev": "0d8f597027ac71b320963fe3f33f461a136312ad", + "sha256": "13p3c4whhmvz1vvh9fva5gdx4xji288k108hjdi8b1yn506lzix2", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/roundcubemail/default.nix b/pkgs/webapps/roundcubemail/default.nix new file mode 100644 index 00000000..ba85f372 --- /dev/null +++ b/pkgs/webapps/roundcubemail/default.nix @@ -0,0 +1,61 @@ +{ varDir ? "/var/lib/roundcubemail" +, roundcube_config ? "/etc/roundcube/config.php" +, stdenv, fetchurl }: +let + defaultInstall = '' + mkdir -p $out + cp -R . $out/ + cd $out + if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then + ln -s larry skins/elastic + fi + ''; + buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: + stdenv.mkDerivation rec { + name = "roundcube-${appName}-${version}"; + inherit version; + phases = "unpackPhase installPhase"; + inherit installPhase; + src = fetchurl { inherit url sha256; }; + passthru.pluginName = appName; + }; + withPlugins = plugins: skins: package.overrideAttrs(old: { + name = "${old.name}${if builtins.length skins > 0 then "-with-skins" else ""}${if builtins.length plugins > 0 then "-with-plugins" else ""}"; + installPhase = old.installPhase + + builtins.concatStringsSep "\n" ( + map (value: "ln -s ${value} $out/plugins/${value.pluginName}") plugins + ) + + builtins.concatStringsSep "\n" ( + map (value: "ln -s ${value} $out/skins/${value.skinName}") skins + ); + passthru = old.passthru // { + inherit plugins skins; + withPlugins = morePlugins: moreSkins: old.withPlugins (morePlugins ++ plugins) (morePlugins ++ skins); + }; + }); + package = stdenv.mkDerivation rec { + version = "1.4-rc1"; + name = "roundcubemail-${version}"; + src= fetchurl { + url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; + sha256 = "0p18wffwi2prh6vxhx1bc69qd1vwybggm8gvg3shahfdknxci9i4"; + }; + buildPhase = '' + sed -i \ + -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ + config/defaults.inc.php + sed -i \ + -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ + config/defaults.inc.php + ''; + installPhase = '' + cp -a . $out + ln -s ${roundcube_config} $out/config/config.inc.php + ''; + passthru = { + plugins = []; + skins = []; + inherit withPlugins buildPlugin; + }; + }; +in package diff --git a/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix b/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix new file mode 100644 index 00000000..cd9efee6 --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/automatic_addressbook/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "automatic_addressbook"; + version = "0.4.3"; + url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz"; + sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/carddav/default.nix b/pkgs/webapps/roundcubemail/plugins/carddav/default.nix new file mode 100644 index 00000000..ad6856bf --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/carddav/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "carddav"; + version = "3.0.3"; + url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2"; + sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix b/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix new file mode 100644 index 00000000..c970007e --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/contextmenu/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "contextmenu"; + version = "2.3"; + url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz"; + sha256 = "1rb8n821ylfniiiccfskc534vd6rczhk3g82455ks3m09q6l8hif"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix b/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix new file mode 100644 index 00000000..e5cb46d7 --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/contextmenu_folder/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "contextmenu_folder"; + version = "1.3.3"; + url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz"; + sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix b/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix new file mode 100644 index 00000000..35bff069 --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/html5_notifier/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "html5_notifier"; + version = "v0.6.2"; + url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz"; + sha256 = "0s1wq9ira4bcd8jvhn93nhxiqzpp92i0za2kw37kf7ksyhr0xslq"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix b/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix new file mode 100644 index 00000000..1dfc4020 --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/ident_switch/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "ident_switch"; + version = "4.0.1"; + url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz"; + sha256 = "1zyy40lfq2kn7hkghbl8lgp18fb634zr4fxmmxvb1wqyvqdpdpyk"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix b/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix new file mode 100644 index 00000000..dc7138ac --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/message_highlight/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "message_highlight"; + version = "4.4"; + url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz"; + sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j"; +} diff --git a/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix b/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix new file mode 100644 index 00000000..ca7245f5 --- /dev/null +++ b/pkgs/webapps/roundcubemail/plugins/thunderbird_labels/default.nix @@ -0,0 +1,7 @@ +{ buildPlugin }: +buildPlugin rec { + appName = "thunderbird_labels"; + version = "v1.3.2"; + url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz"; + sha256 = "1q4x30w66m02v3lw2n8020g0158rmyfzs6gydfk89pa1hs28k9bg"; +} diff --git a/pkgs/webapps/spip/default.nix b/pkgs/webapps/spip/default.nix new file mode 100644 index 00000000..8099f53b --- /dev/null +++ b/pkgs/webapps/spip/default.nix @@ -0,0 +1,32 @@ +{ siteName ? "spip" +, siteDir ? runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out" +, environment ? "prod" +, ldap ? false +, varDir ? "/var/lib/${siteName}_${environment}" +, lib, fetchzip, runCommand, stdenv }: +let + app = stdenv.mkDerivation rec { + name = "${siteName}-${environment}-spip-${version}"; + version = "3.2.3"; + src = fetchzip { + url = "https://files.spip.net/spip/archives/SPIP-v${version}.zip"; + sha256 = "1r1mjvsnrp6mvkgjakvi3x4ms8m8k5mp93micbbg8r99fj7qlfkq"; + }; + paches = lib.optionals ldap [ ./spip_ldap_patch.patch ]; + buildPhase = '' + rm -rf IMG local tmp config/remove.txt + ln -sf ${./spip_mes_options.php} config/mes_options.php + echo "Require all denied" > "config/.htaccess" + ln -sf ${varDir}/{IMG,local} . + ''; + installPhase = '' + cp -a . $out + cp -a ${siteDir}/* $out + ''; + passthru = { + inherit siteName siteDir environment varDir; + webRoot = app; + spipConfig = ./spip_mes_options.php; + }; + }; +in app diff --git a/pkgs/webapps/spip/spip_ldap_patch.patch b/pkgs/webapps/spip/spip_ldap_patch.patch new file mode 100644 index 00000000..653c9098 --- /dev/null +++ b/pkgs/webapps/spip/spip_ldap_patch.patch @@ -0,0 +1,60 @@ +--- old/ecrire/auth/ldap.php 2017-06-08 21:58:17.000000000 +0200 ++++ new/ecrire/auth/ldap.php 2017-06-10 02:54:02.687954143 +0200 +@@ -171,24 +171,41 @@ + $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ; + + $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']); ++ if (isset($GLOBALS['ldap_search'])) { ++ $search_query = str_replace("%user%", $login_search, $GLOBALS['ldap_search']); ++ $result = @ldap_search($ldap_link, $ldap_base, $search_query, array("dn")); ++ $info = @ldap_get_entries($ldap_link, $result); ++ // Ne pas accepter les resultats si plus d'une entree ++ // (on veut un attribut unique) + +- // Tenter une recherche pour essayer de retrouver le DN +- foreach ($logins as $att) { +- $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); +- $info = @ldap_get_entries($ldap_link, $result); +- // Ne pas accepter les resultats si plus d'une entree +- // (on veut un attribut unique) ++ if (is_array($info) and $info['count'] == 1) { ++ $dn = $info[0]['dn']; ++ if (!$checkpass) { ++ return $dn; ++ } ++ if (@ldap_bind($ldap_link, $dn, $pass)) { ++ return $dn; ++ } ++ } ++ } else { ++ // Tenter une recherche pour essayer de retrouver le DN ++ foreach ($logins as $att) { ++ $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn")); ++ $info = @ldap_get_entries($ldap_link, $result); ++ // Ne pas accepter les resultats si plus d'une entree ++ // (on veut un attribut unique) + +- if (is_array($info) and $info['count'] == 1) { +- $dn = $info[0]['dn']; +- if (!$checkpass) { +- return $dn; +- } +- if (@ldap_bind($ldap_link, $dn, $pass)) { +- return $dn; +- } +- } +- } ++ if (is_array($info) and $info['count'] == 1) { ++ $dn = $info[0]['dn']; ++ if (!$checkpass) { ++ return $dn; ++ } ++ if (@ldap_bind($ldap_link, $dn, $pass)) { ++ return $dn; ++ } ++ } ++ } ++ } + + if ($checkpass and !isset($dn)) { + // Si echec, essayer de deviner le DN diff --git a/pkgs/webapps/spip/spip_mes_options.php b/pkgs/webapps/spip/spip_mes_options.php new file mode 100644 index 00000000..8db83893 --- /dev/null +++ b/pkgs/webapps/spip/spip_mes_options.php @@ -0,0 +1,18 @@ + diff --git a/pkgs/webapps/taskwarrior-web/Gemfile.lock b/pkgs/webapps/taskwarrior-web/Gemfile.lock new file mode 100644 index 00000000..1b2f5ba0 --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/Gemfile.lock @@ -0,0 +1,139 @@ +PATH + remote: . + specs: + taskwarrior-web (1.1.12) + activesupport (~> 3) + json (~> 1.8) + parseconfig + rack-flash3 + rinku + sinatra + sinatra-simple-navigation + vegas + versionomy + +GEM + remote: http://rubygems.org/ + specs: + activesupport (3.2.22.5) + i18n (~> 0.6, >= 0.6.4) + multi_json (~> 1.0) + blockenspiel (0.5.0) + coderay (1.1.2) + concurrent-ruby (1.1.4) + daemons (1.3.1) + diff-lcs (1.3) + docile (1.3.1) + eventmachine (1.2.7) + ffi (1.10.0) + formatador (0.2.5) + growl (1.0.3) + guard (2.15.0) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + lumberjack (>= 1.0.12, < 2.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-bundler (2.2.1) + bundler (>= 1.3.0, < 3) + guard (~> 2.2) + guard-compat (~> 1.1) + guard-compat (1.2.1) + guard-rspec (4.7.3) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + json (1.8.6) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + lumberjack (1.0.13) + method_source (0.9.2) + mini_portile2 (2.4.0) + multi_json (1.13.1) + mustermann (1.0.3) + nenv (0.3.0) + nokogiri (1.10.1) + mini_portile2 (~> 2.4.0) + notiffany (0.1.1) + nenv (~> 0.1) + shellany (~> 0.0) + parseconfig (1.0.8) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + rack (2.0.6) + rack-flash3 (1.0.5) + rack + rack-protection (2.0.5) + rack + rack-test (1.1.0) + rack (>= 1.0, < 3) + rake (10.5.0) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + rinku (2.0.5) + rspec (2.99.0) + rspec-core (~> 2.99.0) + rspec-expectations (~> 2.99.0) + rspec-mocks (~> 2.99.0) + rspec-core (2.99.2) + rspec-expectations (2.99.2) + diff-lcs (>= 1.1.3, < 2.0) + rspec-html-matchers (0.5.0) + nokogiri (~> 1) + rspec (~> 2, >= 2.11.0) + rspec-mocks (2.99.4) + ruby_dep (1.5.0) + shellany (0.0.1) + simple-navigation (4.0.5) + activesupport (>= 2.3.2) + simplecov (0.16.1) + docile (~> 1.1) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.2) + sinatra (2.0.5) + mustermann (~> 1.0) + rack (~> 2.0) + rack-protection (= 2.0.5) + tilt (~> 2.0) + sinatra-simple-navigation (4.1.0) + simple-navigation (~> 4.0) + sinatra (>= 1.0, < 3.0) + thin (1.7.2) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) + thor (0.20.3) + tilt (2.0.9) + vegas (0.1.11) + rack (>= 1.0.0) + versionomy (0.5.0) + blockenspiel (~> 0.5) + +PLATFORMS + ruby + +DEPENDENCIES + growl + guard-bundler + guard-rspec + rack-test + rake (< 11) + rb-fsevent + rspec (~> 2) + rspec-html-matchers + simplecov + taskwarrior-web! + thin + +BUNDLED WITH + 1.16.2 diff --git a/pkgs/webapps/taskwarrior-web/default.nix b/pkgs/webapps/taskwarrior-web/default.nix new file mode 100644 index 00000000..d5368c58 --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/default.nix @@ -0,0 +1,22 @@ +{ ruby_2_6, bundlerEnv, mylibs, stdenv }: +let + gems = bundlerEnv { + name = "taskwarrior-web-env"; + ruby = ruby_2_6; + pname = "taskwarrior-web"; + gemset = ./gemset.nix; + gemdir = package.out; + groups = [ "default" "local" "development" ]; + }; + package = stdenv.mkDerivation (mylibs.fetchedGithub ./taskwarrior-web.json // rec { + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + patches = [ ./fixes.patch ./thin.patch ]; + installPhase = '' + cp -a . $out + cp ${./Gemfile.lock} $out/Gemfile.lock + ''; + passthru = { + inherit gems; + }; + }); +in package diff --git a/pkgs/webapps/taskwarrior-web/fixes.patch b/pkgs/webapps/taskwarrior-web/fixes.patch new file mode 100644 index 00000000..851f9f05 --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/fixes.patch @@ -0,0 +1,56 @@ +diff --git a/lib/taskwarrior-web/helpers.rb b/lib/taskwarrior-web/helpers.rb +index 212aed7..94c57df 100644 +--- a/lib/taskwarrior-web/helpers.rb ++++ b/lib/taskwarrior-web/helpers.rb +@@ -1,6 +1,8 @@ + require 'active_support/core_ext/date/calculations' + + module TaskwarriorWeb::App::Helpers ++ include ERB::Util ++ + def format_date(timestamp) + format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y' + Time.parse(timestamp).localtime.strftime(format) +diff --git a/lib/taskwarrior-web/services/builder/base.rb b/lib/taskwarrior-web/services/builder/base.rb +index 58d246e..8f716ac 100644 +--- a/lib/taskwarrior-web/services/builder/base.rb ++++ b/lib/taskwarrior-web/services/builder/base.rb +@@ -10,7 +10,7 @@ module TaskwarriorWeb::CommandBuilder::Base + :complete => ':id done', + :annotate => ':id annotate', + :denotate => ':id denotate', +- :projects => '_projects', ++ :projects => '_unique project', + :tags => '_tags', + :sync => 'sync' + } +diff --git a/lib/taskwarrior-web/views/tasks/_form.erb b/lib/taskwarrior-web/views/tasks/_form.erb +index 789e7a1..fa08698 100644 +--- a/lib/taskwarrior-web/views/tasks/_form.erb ++++ b/lib/taskwarrior-web/views/tasks/_form.erb +@@ -1,14 +1,14 @@ +
+ +
+- ++ +
+
+ +
+ +
+- ++ +
+
+ +@@ -45,7 +45,7 @@ +
+ +
+- ++ + Enter tags separated by commas or spaces (e.g. each, word will,be a tag) +
+
diff --git a/pkgs/webapps/taskwarrior-web/gemset.nix b/pkgs/webapps/taskwarrior-web/gemset.nix new file mode 100644 index 00000000..35d13c69 --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/gemset.nix @@ -0,0 +1,567 @@ +{ + activesupport = { + dependencies = ["i18n" "multi_json"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0fyxqkkws4px4lzkbcqzp0bwai7nn7jk4p0bgfy0dny9cwm0qc9r"; + type = "gem"; + }; + version = "3.2.22.5"; + }; + blockenspiel = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1h701s45n5qprvcpc7fnr45n88p56x07pznkxqnhz1dbdbhb7xx8"; + type = "gem"; + }; + version = "0.5.0"; + }; + coderay = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"; + type = "gem"; + }; + version = "1.1.2"; + }; + concurrent-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1"; + type = "gem"; + }; + version = "1.1.4"; + }; + daemons = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w"; + type = "gem"; + }; + version = "1.3.1"; + }; + diff-lcs = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"; + type = "gem"; + }; + version = "1.3"; + }; + docile = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17"; + type = "gem"; + }; + version = "1.3.1"; + }; + eventmachine = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; + type = "gem"; + }; + version = "1.2.7"; + }; + ffi = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p"; + type = "gem"; + }; + version = "1.10.0"; + }; + formatador = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"; + type = "gem"; + }; + version = "0.2.5"; + }; + growl = { + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0s0y7maljnalpbv2q1j5j5hvb4wcc31y9af0n7x1q2l0fzxgc9n9"; + type = "gem"; + }; + version = "1.0.3"; + }; + guard = { + dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk"; + type = "gem"; + }; + version = "2.15.0"; + }; + guard-bundler = { + dependencies = ["guard" "guard-compat"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0lji8f8w7y4prmpr2lqmlljvkqgkgnlsiwqgwvq7b1y3sxlsvy62"; + type = "gem"; + }; + version = "2.2.1"; + }; + guard-compat = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"; + type = "gem"; + }; + version = "1.2.1"; + }; + guard-rspec = { + dependencies = ["guard" "guard-compat" "rspec"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"; + type = "gem"; + }; + version = "4.7.3"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3"; + type = "gem"; + }; + version = "0.9.5"; + }; + json = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5"; + type = "gem"; + }; + version = "1.8.6"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"; + type = "gem"; + }; + version = "3.1.5"; + }; + lumberjack = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"; + type = "gem"; + }; + version = "1.0.13"; + }; + method_source = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq"; + type = "gem"; + }; + version = "0.9.2"; + }; + mini_portile2 = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"; + type = "gem"; + }; + version = "2.4.0"; + }; + multi_json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv"; + type = "gem"; + }; + version = "1.13.1"; + }; + mustermann = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1"; + type = "gem"; + }; + version = "1.0.3"; + }; + nenv = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"; + type = "gem"; + }; + version = "0.3.0"; + }; + nokogiri = { + dependencies = ["mini_portile2"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184"; + type = "gem"; + }; + version = "1.10.1"; + }; + notiffany = { + dependencies = ["nenv" "shellany"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx"; + type = "gem"; + }; + version = "0.1.1"; + }; + parseconfig = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0br2g9k6zc4ygah52aa8cwvpnnkszia29bnvnr8bhpk3rdzi2vmq"; + type = "gem"; + }; + version = "1.0.8"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69"; + type = "gem"; + }; + version = "0.12.2"; + }; + rack = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm"; + type = "gem"; + }; + version = "2.0.6"; + }; + rack-flash3 = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0rim9afrns6s8zc4apiymncysyvijpdg18k57kdpz66p55jf4mqz"; + type = "gem"; + }; + version = "1.0.5"; + }; + rack-protection = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk"; + type = "gem"; + }; + version = "2.0.5"; + }; + rack-test = { + dependencies = ["rack"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m"; + type = "gem"; + }; + version = "1.1.0"; + }; + rake = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b"; + type = "gem"; + }; + version = "10.5.0"; + }; + rb-fsevent = { + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; + type = "gem"; + }; + version = "0.10.3"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4"; + type = "gem"; + }; + version = "0.10.0"; + }; + rinku = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1smkk299v18brk98gqbdnqrfwm3143kikl30scidqb5j3pzlbz91"; + type = "gem"; + }; + version = "2.0.5"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + groups = ["development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "14q3hxvngk4ks8h41yw50d5fqbf2dhzwi9rz5ccxvh5a53ak2as3"; + type = "gem"; + }; + version = "2.99.0"; + }; + rspec-core = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1wwz21lcz2lwd2jcp2pvq7n1677v23acf7wxsyszp8msb47mw38i"; + type = "gem"; + }; + version = "2.99.2"; + }; + rspec-expectations = { + dependencies = ["diff-lcs"]; + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "11a5pph3anp4xr591dnlcy8xfkdf54qi2lvg4ykpqhxk37si1py3"; + type = "gem"; + }; + version = "2.99.2"; + }; + rspec-html-matchers = { + dependencies = ["nokogiri" "rspec"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "148grzvk0cvh24avhl0shjzz7ldhj138svf48pc5h1fdsb0pnqcv"; + type = "gem"; + }; + version = "0.5.0"; + }; + rspec-mocks = { + groups = ["default" "development" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0bzhqahbiswq41nqi6y2dka1k42n0hl14jb6bldb206zp4hikz8r"; + type = "gem"; + }; + version = "2.99.4"; + }; + ruby_dep = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"; + type = "gem"; + }; + version = "1.5.0"; + }; + shellany = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"; + type = "gem"; + }; + version = "0.0.1"; + }; + simple-navigation = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk"; + type = "gem"; + }; + version = "4.0.5"; + }; + simplecov = { + dependencies = ["docile" "json" "simplecov-html"]; + groups = ["local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947"; + type = "gem"; + }; + version = "0.16.1"; + }; + simplecov-html = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"; + type = "gem"; + }; + version = "0.10.2"; + }; + sinatra = { + dependencies = ["mustermann" "rack" "rack-protection" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry"; + type = "gem"; + }; + version = "2.0.5"; + }; + sinatra-simple-navigation = { + dependencies = ["simple-navigation" "sinatra"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1gishxd23qw6bwsk7fkagkfc7ihqyvvvb98j9bmwc6wwpsfs4prs"; + type = "gem"; + }; + version = "4.1.0"; + }; + taskwarrior-web = { + dependencies = ["activesupport" "json" "parseconfig" "rack-flash3" "rinku" "sinatra" "sinatra-simple-navigation" "vegas" "versionomy"]; + groups = ["default"]; + platforms = []; + bundledByPath = true; + path = ./.; + source = { + path = ./.; + type = "path"; + }; + version = "1.1.12"; + }; + thin = { + dependencies = ["daemons" "eventmachine" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f"; + type = "gem"; + }; + version = "1.7.2"; + }; + thor = { + groups = ["default" "local"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29"; + type = "gem"; + }; + version = "0.20.3"; + }; + tilt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz"; + type = "gem"; + }; + version = "2.0.9"; + }; + vegas = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0kzv0v1zb8vvm188q4pqwahb6468bmiamn6wpsbiq6r5i69s1bs5"; + type = "gem"; + }; + version = "0.1.11"; + }; + versionomy = { + dependencies = ["blockenspiel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0i0l4pzrl1vyp4lpg2cxhgkk56spki3lld943d6h7168fj8qyv33"; + type = "gem"; + }; + version = "0.5.0"; + }; +} diff --git a/pkgs/webapps/taskwarrior-web/taskwarrior-web.json b/pkgs/webapps/taskwarrior-web/taskwarrior-web.json new file mode 100644 index 00000000..70f396de --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/taskwarrior-web.json @@ -0,0 +1,15 @@ +{ + "tag": "a79cfe2-master", + "meta": { + "name": "taskwarrior-web", + "url": "https://github.com/theunraveler/taskwarrior-web", + "branch": "master" + }, + "github": { + "owner": "theunraveler", + "repo": "taskwarrior-web", + "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8", + "sha256": "028rb4wry2an19707bvy4n305f3s0hipg214224p1m0mb61c3cq4", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/taskwarrior-web/thin.patch b/pkgs/webapps/taskwarrior-web/thin.patch new file mode 100644 index 00000000..a7df3e3b --- /dev/null +++ b/pkgs/webapps/taskwarrior-web/thin.patch @@ -0,0 +1,23 @@ +diff --git a/Gemfile b/Gemfile +index 8544e15..9c4279c 100644 +--- a/Gemfile ++++ b/Gemfile +@@ -3,6 +3,8 @@ source "http://rubygems.org" + # Specify your gem's dependencies in taskwarrior-web.gemspec + gemspec + ++gem 'thin' ++ + group :local do + gem 'rb-fsevent', :require => false + gem 'growl', :require => false +diff --git a/config.ru b/config.ru +index c3050c6..52387d8 100644 +--- a/config.ru ++++ b/config.ru +@@ -1,5 +1,4 @@ + require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web') + +-disable :run + TaskwarriorWeb::App.set({ :environment => :production }) + run TaskwarriorWeb::App diff --git a/pkgs/webapps/ttrss/default.nix b/pkgs/webapps/ttrss/default.nix new file mode 100644 index 00000000..0ce2f94f --- /dev/null +++ b/pkgs/webapps/ttrss/default.nix @@ -0,0 +1,30 @@ +{ ttrss_config ? "/etc/ttrss/config.php" +, varDir ? "/var/lib/ttrss" +, stdenv, mylibs }: +let + withPlugins = plugins: package.overrideAttrs(old: rec { + name = "${old.name}-with-plugins"; + installPhase = old.installPhase + + builtins.concatStringsSep "\n" ( + map (value: "ln -s ${value} $out/plugins/${value.pluginName}") plugins + ); + passthru = old.passthru // { + inherit plugins; + withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins); + }; + }); + package = stdenv.mkDerivation (mylibs.fetchedGit ./tt-rss.json // rec { + buildPhase = '' + rm -rf lock feed-icons cache + ln -sf ${varDir}/{lock,feed-icons,cache} . + ''; + installPhase = '' + cp -a . $out + ln -s ${ttrss_config} $out/config.php + ''; + passthru = { + plugins = []; + inherit withPlugins; + }; + }); +in package diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json b/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json new file mode 100644 index 00000000..e57fcce1 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/af_feedmod/af_feedmod.json @@ -0,0 +1,15 @@ +{ + "tag": "0ea2092-master", + "meta": { + "name": "ttrss-af_feedmod", + "url": "https://github.com/mbirth/ttrss_plugin-af_feedmod", + "branch": "master" + }, + "github": { + "owner": "mbirth", + "repo": "ttrss_plugin-af_feedmod", + "rev": "0ea2092dd34067ecd898802cfca3570023d1ecfe", + "sha256": "02ibf47zcrsc2rr45wsix8gxyyf371davj8n8i0gj1zdq95klvnv", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix b/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix new file mode 100644 index 00000000..8512be3d --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/af_feedmod/default.nix @@ -0,0 +1,9 @@ +{ patched ? false, stdenv, mylibs, lib }: +stdenv.mkDerivation (mylibs.fetchedGithub ./af_feedmod.json // { + patches = lib.optionals patched [ ./type_replace.patch ]; + installPhase = '' + mkdir $out + cp init.php $out + ''; + passthru.pluginName = "af_feedmod"; +}) diff --git a/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch b/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch new file mode 100644 index 00000000..d622577a --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/af_feedmod/type_replace.patch @@ -0,0 +1,12 @@ +--- a/init.php 2014-06-16 14:21:06.995480038 +0200 ++++ b/init.php 2014-06-16 14:22:00.151027654 +0200 +@@ -147,6 +147,9 @@ + } + } + break; ++ case 'replace': ++ $article['content'] = preg_replace("/".$config['pattern']."/",$config['replacement'],$article['content']); ++ break; + + default: + // unknown type or invalid config diff --git a/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json b/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json new file mode 100644 index 00000000..c8aaab5c --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/auth_ldap/auth-ldap.json @@ -0,0 +1,15 @@ +{ + "tag": "4d751b0-master", + "meta": { + "name": "ttrss-auth-ldap", + "url": "https://github.com/hydrian/TTRSS-Auth-LDAP", + "branch": "master" + }, + "github": { + "owner": "hydrian", + "repo": "TTRSS-Auth-LDAP", + "rev": "4d751b095c29a8dbe2dc7bb07777742956136e94", + "sha256": "0b9fl86acrzpcv41r7pj3bl8b3n72hpkdywzx9zjyfqv5pskxyim", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix b/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix new file mode 100644 index 00000000..424a9f7c --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/auth_ldap/default.nix @@ -0,0 +1,8 @@ +{ stdenv, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./auth-ldap.json // { + installPhase = '' + mkdir $out + cp plugins/auth_ldap/init.php $out + ''; + passthru.pluginName = "auth_ldap"; +}) diff --git a/pkgs/webapps/ttrss/plugins/feediron/default.nix b/pkgs/webapps/ttrss/plugins/feediron/default.nix new file mode 100644 index 00000000..80bfda4f --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/feediron/default.nix @@ -0,0 +1,9 @@ +{ patched ? false, stdenv, mylibs, lib }: +stdenv.mkDerivation (mylibs.fetchedGithub ./feediron.json // { + patches = lib.optionals patched [ ./json_reformat.patch ]; + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "feediron"; +}) diff --git a/pkgs/webapps/ttrss/plugins/feediron/feediron.json b/pkgs/webapps/ttrss/plugins/feediron/feediron.json new file mode 100644 index 00000000..5dbec923 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/feediron/feediron.json @@ -0,0 +1,15 @@ +{ + "tag": "407168c-master", + "meta": { + "name": "ttrss-feediron", + "url": "https://github.com/m42e/ttrss_plugin-feediron", + "branch": "master" + }, + "github": { + "owner": "m42e", + "repo": "ttrss_plugin-feediron", + "rev": "407168c628880b5ced572cc549db6d50e866d3c8", + "sha256": "17b95ifpcph6m03hjd1mhi8gi1hw9yd3fnffmw66fqr5c9l3zd9r", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch b/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch new file mode 100644 index 00000000..e1c44d95 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/feediron/json_reformat.patch @@ -0,0 +1,18 @@ +diff --git a/init.php b/init.php +index 3c0f2f9..1aad146 100644 +--- a/init.php ++++ b/init.php +@@ -600,10 +600,11 @@ class Feediron extends Plugin implements IHandler + return false; + } + +- $this->host->set($this, 'json_conf', Feediron_Json::format($json_conf)); ++ $new_conf = json_encode(json_decode($json_conf), JSON_PRETTY_PRINT); ++ $this->host->set($this, 'json_conf', $new_conf); + $json_reply['success'] = true; + $json_reply['message'] = __('Configuration saved.'); +- $json_reply['json_conf'] = Feediron_Json::format($json_conf); ++ $json_reply['json_conf'] = $new_conf; + echo json_encode($json_reply); + } + diff --git a/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix b/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix new file mode 100644 index 00000000..3540f737 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/ff_instagram/default.nix @@ -0,0 +1,8 @@ +{ stdenv, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./ff_instagram.json // { + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "ff_instagram"; +}) diff --git a/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json b/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json new file mode 100644 index 00000000..1f241b90 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/ff_instagram/ff_instagram.json @@ -0,0 +1,15 @@ +{ + "tag": "0366ffb-master", + "meta": { + "name": "ttrss-ff_instagram", + "url": "https://github.com/wltb/ff_instagram", + "branch": "master" + }, + "github": { + "owner": "wltb", + "repo": "ff_instagram", + "rev": "0366ffb18c4d490c8fbfba2f5f3367a5af23cfe8", + "sha256": "0vvzl6wi6jmrqknsfddvckjgsgfizz1d923d1nyrpzjfn6bda1vk", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix new file mode 100644 index 00000000..2cf3e051 --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/default.nix @@ -0,0 +1,8 @@ +{ stdenv, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./tumblr_gdpr_ua.json // { + installPhase = '' + mkdir $out + cp -a . $out + ''; + passthru.pluginName = "tumblr_gdpr_ua"; +}) diff --git a/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json new file mode 100644 index 00000000..eafbcfef --- /dev/null +++ b/pkgs/webapps/ttrss/plugins/tumblr_gdpr_ua/tumblr_gdpr_ua.json @@ -0,0 +1,15 @@ +{ + "tag": "287c584-master", + "meta": { + "name": "ttrss-tumblr_gdpr_ua", + "url": "https://github.com/hkockerbeck/ttrss-tumblr-gdpr-ua", + "branch": "master" + }, + "github": { + "owner": "hkockerbeck", + "repo": "ttrss-tumblr-gdpr-ua", + "rev": "287c584e68845d524f920156bff0b2eaa6f65117", + "sha256": "1fviawgcclqky4k4xv1sqzvpb8i74w9f0pclm09m78s8l85wh9py", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/ttrss/tt-rss.json b/pkgs/webapps/ttrss/tt-rss.json new file mode 100644 index 00000000..e2731b0f --- /dev/null +++ b/pkgs/webapps/ttrss/tt-rss.json @@ -0,0 +1,14 @@ +{ + "tag": "986ca25-master", + "meta": { + "name": "tt-rss", + "url": "https://git.tt-rss.org/fox/tt-rss.git", + "branch": "master" + }, + "git": { + "url": "https://git.tt-rss.org/fox/tt-rss.git", + "rev": "986ca251f995f7754a0470d3e0c44538a545081f", + "sha256": "0xkafkh7l9zazm5d6snlq03kdfxfhkb4c8fdsb32wn8b9bhdzf5s", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/wallabag/default.nix b/pkgs/webapps/wallabag/default.nix new file mode 100644 index 00000000..a437a311 --- /dev/null +++ b/pkgs/webapps/wallabag/default.nix @@ -0,0 +1,54 @@ +{ varDir ? "/var/lib/wallabag" +, wallabag_config ? "/etc/wallabag/parameters.yml" +, ldap ? false +, composerEnv, fetchurl, lib }: +composerEnv.buildPackage rec { + packages = { + "fr3d/ldap-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475"; + src = fetchurl { + url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475; + sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc"; + }; + }; + }; + "zendframework/zend-ldap" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49; + sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9"; + }; + }; + }; + }; + noDev = true; + doRemoveVendor = false; + # Beware when upgrading, I probably messed up with the migrations table + # (due to a psql bug in wallabag) + version = "2.3.6"; + name = "wallabag-${version}"; + src = fetchurl { + url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz"; + sha256 = "0m0dy3r94ks5pfxyb9vbgrsm0vrwdl3jd5wqwg4f5vd107lq90q1"; + }; + unpackPhase = '' + unpackFile "$src" + sourceRoot=${version} + src=$PWD/${version} + ''; + patches = lib.optionals ldap [ ./ldap.patch ]; + preInstall = '' + export SYMFONY_ENV="prod" + ''; + postInstall = '' + rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data + ln -sf ${wallabag_config} app/config/parameters.yml + ln -sf ${varDir}/var/{cache,logs,sessions} var + ln -sf ${varDir}/data data + ln -sf ${varDir}/assets web/assets + ''; +} diff --git a/pkgs/webapps/wallabag/ldap.patch b/pkgs/webapps/wallabag/ldap.patch new file mode 100644 index 00000000..9caf7dac --- /dev/null +++ b/pkgs/webapps/wallabag/ldap.patch @@ -0,0 +1,698 @@ +diff --git a/.travis.yml b/.travis.yml +index 04cea258..56b1f576 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -58,6 +58,7 @@ install: + + before_script: + - PHP=$TRAVIS_PHP_VERSION ++ - echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini + - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; + # xdebug isn't enable for PHP 7.1 + - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi +diff --git a/app/AppKernel.php b/app/AppKernel.php +index 40726f05..c4f465dc 100644 +--- a/app/AppKernel.php ++++ b/app/AppKernel.php +@@ -42,6 +42,10 @@ class AppKernel extends Kernel + new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(), + ]; + ++ if (class_exists('FR3D\\LdapBundle\\FR3DLdapBundle')) { ++ $bundles[] = new FR3D\LdapBundle\FR3DLdapBundle(); ++ } ++ + if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { + $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); + $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); +diff --git a/app/DoctrineMigrations/Version20170710113900.php b/app/DoctrineMigrations/Version20170710113900.php +new file mode 100644 +index 00000000..7be83110 +--- /dev/null ++++ b/app/DoctrineMigrations/Version20170710113900.php +@@ -0,0 +1,54 @@ ++container = $container; ++ } ++ ++ private function getTable($tableName) ++ { ++ return $this->container->getParameter('database_table_prefix').$tableName; ++ } ++ ++ /** ++ * @param Schema $schema ++ */ ++ public function up(Schema $schema) ++ { ++ $usersTable = $schema->getTable($this->getTable('user')); ++ ++ $this->skipIf($usersTable->hasColumn('dn'), 'It seems that you already played this migration.'); ++ ++ $usersTable->addColumn('dn', 'text', [ ++ 'default' => null, ++ 'notnull' => false, ++ ]); ++ } ++ ++ /** ++ * @param Schema $schema ++ */ ++ public function down(Schema $schema) ++ { ++ $usersTable = $schema->getTable($this->getTable('user')); ++ $usersTable->dropColumn('dn'); ++ } ++} ++ +diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist +index 6b0cb8e8..cfd41b69 100644 +--- a/app/config/parameters.yml.dist ++++ b/app/config/parameters.yml.dist +@@ -62,3 +62,23 @@ parameters: + redis_port: 6379 + redis_path: null + redis_password: null ++ ++ # ldap configuration ++ # To enable, you need to require fr3d/ldap-bundle ++ ldap_enabled: false ++ ldap_host: localhost ++ ldap_port: 389 ++ ldap_tls: false ++ ldap_ssl: false ++ ldap_bind_requires_dn: true ++ ldap_base: dc=example,dc=com ++ ldap_manager_dn: ou=Manager,dc=example,dc=com ++ ldap_manager_pw: password ++ ldap_filter: (&(ObjectClass=Person)) ++ # optional (if null: no ldap user is admin) ++ ldap_admin_filter: (&(memberOf=ou=admins,dc=example,dc=com)(uid=%s)) ++ ldap_username_attribute: uid ++ ldap_email_attribute: mail ++ ldap_name_attribute: cn ++ # optional (default sets user as enabled unconditionally) ++ ldap_enabled_attribute: ~ +diff --git a/app/config/security.yml b/app/config/security.yml +index 02afc9ea..48fbb553 100644 +--- a/app/config/security.yml ++++ b/app/config/security.yml +@@ -6,6 +6,7 @@ security: + ROLE_ADMIN: ROLE_USER + ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] + ++ # /!\ This list is modified in WallabagUserBundle when LDAP is enabled + providers: + administrators: + entity: +@@ -36,6 +37,7 @@ security: + pattern: ^/login$ + anonymous: ~ + ++ # /!\ This section is modified in WallabagUserBundle when LDAP is enabled + secured_area: + pattern: ^/ + form_login: +diff --git a/composer.json b/composer.json +index 68cfad05..32a3d1a4 100644 +--- a/composer.json ++++ b/composer.json +@@ -85,7 +85,11 @@ + "friendsofsymfony/jsrouting-bundle": "^1.6.3", + "bdunogier/guzzle-site-authenticator": "^1.0.0", + "defuse/php-encryption": "^2.1", +- "html2text/html2text": "^4.1" ++ "html2text/html2text": "^4.1", ++ "fr3d/ldap-bundle": "^3.0" ++ }, ++ "suggest": { ++ "fr3d/ldap-bundle": "If you want to authenticate via LDAP" + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "~2.2", +diff --git a/composer.lock b/composer.lock +index 251ee081..37795e0b 100644 +--- a/composer.lock ++++ b/composer.lock +@@ -4,7 +4,7 @@ + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], +- "content-hash": "d2a0bd8408dccdeb7a7455996519829b", ++ "content-hash": "4699d166d03a8e5f70d802d0bc3e6a20", + "packages": [ + { + "name": "bdunogier/guzzle-site-authenticator", +@@ -1346,6 +1346,65 @@ + ], + "time": "2018-12-14T19:44:53+00:00" + }, ++ { ++ "name": "fr3d/ldap-bundle", ++ "version": "v3.0.0", ++ "source": { ++ "type": "git", ++ "url": "https://github.com/Maks3w/FR3DLdapBundle.git", ++ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475" ++ }, ++ "dist": { ++ "type": "zip", ++ "url": "https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475", ++ "reference": "5a8927c11af45fa06331b97221c6da1a4a237475", ++ "shasum": "" ++ }, ++ "require": { ++ "php": ">=5.5", ++ "psr/log": "~1.0", ++ "symfony/config": "2.3 - 3", ++ "symfony/dependency-injection": "2.3 - 3", ++ "symfony/polyfill-php56": "^1.1", ++ "symfony/security": "2.3 - 3", ++ "symfony/security-bundle": "2.3 - 3", ++ "zendframework/zend-ldap": "2.5 - 3" ++ }, ++ "require-dev": { ++ "fabpot/php-cs-fixer": "1.11.*", ++ "fr3d/psr3-message-assertions": "0.1.*", ++ "friendsofsymfony/user-bundle": "~1.3", ++ "maks3w/phpunit-methods-trait": "^4.6", ++ "phpunit/phpunit": "^4.6", ++ "symfony/validator": "2.3 - 3" ++ }, ++ "suggest": { ++ "friendsofsymfony/user-bundle": "Integrate authentication and management for DB users, useful for unmanned LDAP servers", ++ "symfony/validator": "Allow pre-validate for existing users before register new ones" ++ }, ++ "type": "symfony-bundle", ++ "autoload": { ++ "psr-4": { ++ "FR3D\\LdapBundle\\": "" ++ } ++ }, ++ "notification-url": "https://packagist.org/downloads/", ++ "license": [ ++ "MIT" ++ ], ++ "authors": [ ++ { ++ "name": "Maks3w" ++ } ++ ], ++ "description": "This package provide users and authentication services based on LDAP directories for Symfony2 framework", ++ "homepage": "https://github.com/Maks3w/FR3DLdapBundle", ++ "keywords": [ ++ "Authentication", ++ "ldap" ++ ], ++ "time": "2016-02-12T17:45:14+00:00" ++ }, + { + "name": "friendsofsymfony/jsrouting-bundle", + "version": "1.6.3", +@@ -7027,6 +7086,59 @@ + "zf2" + ], + "time": "2018-04-25T15:33:34+00:00" ++ }, ++ { ++ "name": "zendframework/zend-ldap", ++ "version": "2.10.0", ++ "source": { ++ "type": "git", ++ "url": "https://github.com/zendframework/zend-ldap.git", ++ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49" ++ }, ++ "dist": { ++ "type": "zip", ++ "url": "https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", ++ "reference": "b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49", ++ "shasum": "" ++ }, ++ "require": { ++ "ext-ldap": "*", ++ "php": "^5.6 || ^7.0" ++ }, ++ "require-dev": { ++ "php-mock/php-mock-phpunit": "^1.1.2 || ^2.1.1", ++ "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", ++ "zendframework/zend-coding-standard": "~1.0.0", ++ "zendframework/zend-config": "^2.5", ++ "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", ++ "zendframework/zend-stdlib": "^2.7 || ^3.0" ++ }, ++ "suggest": { ++ "zendframework/zend-eventmanager": "Zend\\EventManager component" ++ }, ++ "type": "library", ++ "extra": { ++ "branch-alias": { ++ "dev-master": "2.10.x-dev", ++ "dev-develop": "2.11.x-dev" ++ } ++ }, ++ "autoload": { ++ "psr-4": { ++ "Zend\\Ldap\\": "src/" ++ } ++ }, ++ "notification-url": "https://packagist.org/downloads/", ++ "license": [ ++ "BSD-3-Clause" ++ ], ++ "description": "Provides support for LDAP operations including but not limited to binding, searching and modifying entries in an LDAP directory", ++ "keywords": [ ++ "ZendFramework", ++ "ldap", ++ "zf" ++ ], ++ "time": "2018-07-05T05:05:12+00:00" + } + ], + "packages-dev": [ +@@ -7561,12 +7673,12 @@ + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", +- "reference": "5dab0d4b2ac99ab22b447b615fdfdc10ec4af3d5" ++ "reference": "d61ec438634e0f234c6bda1c6ee97016bbb0e7a1" + }, + "dist": { + "type": "zip", +- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/5dab0d4b2ac99ab22b447b615fdfdc10ec4af3d5", +- "reference": "5dab0d4b2ac99ab22b447b615fdfdc10ec4af3d5", ++ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/d61ec438634e0f234c6bda1c6ee97016bbb0e7a1", ++ "reference": "d61ec438634e0f234c6bda1c6ee97016bbb0e7a1", + "shasum": "" + }, + "require": { +@@ -7619,7 +7731,7 @@ + ], + "description": "Symfony PHPUnit Bridge", + "homepage": "https://symfony.com", +- "time": "2019-01-01T13:45:19+00:00" ++ "time": "2019-01-16T13:27:11+00:00" + }, + { + "name": "symfony/polyfill-php72", +diff --git a/scripts/install.sh b/scripts/install.sh +index 8b7ea03f..3a4a33ab 100755 +--- a/scripts/install.sh ++++ b/scripts/install.sh +@@ -26,5 +26,8 @@ ENV=$1 + TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) + + git checkout $TAG ++if [ -n "$LDAP_ENABLED" ]; then ++ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle ++fi + SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist + php bin/console wallabag:install --env=$ENV +diff --git a/scripts/update.sh b/scripts/update.sh +index c62d104a..6259a431 100755 +--- a/scripts/update.sh ++++ b/scripts/update.sh +@@ -32,6 +32,9 @@ git fetch origin + git fetch --tags + TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) + git checkout $TAG --force ++if [ -n "$LDAP_ENABLED" ]; then ++ SYMFONY_ENV=$ENV $COMPOSER_COMMAND require --no-update fr3d/ldap-bundle ++fi + SYMFONY_ENV=$ENV $COMPOSER_COMMAND install --no-dev -o --prefer-dist + php bin/console doctrine:migrations:migrate --no-interaction --env=$ENV + php bin/console cache:clear --env=$ENV +diff --git a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php +index 5ca3482e..904a6af1 100644 +--- a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php ++++ b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php +@@ -6,9 +6,34 @@ use Symfony\Component\Config\FileLocator; + use Symfony\Component\DependencyInjection\ContainerBuilder; + use Symfony\Component\DependencyInjection\Loader; + use Symfony\Component\HttpKernel\DependencyInjection\Extension; ++use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; + +-class WallabagUserExtension extends Extension ++class WallabagUserExtension extends Extension implements PrependExtensionInterface + { ++ public function prepend(ContainerBuilder $container) ++ { ++ $ldap = $container->getParameter('ldap_enabled'); ++ ++ if ($ldap) { ++ $container->prependExtensionConfig('security', array( ++ 'providers' => array( ++ 'chain_provider' => array(), ++ ), ++ )); ++ $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); ++ $loader->load('ldap.yml'); ++ } elseif ($container->hasExtension('fr3d_ldap')) { ++ $container->prependExtensionConfig('fr3_d_ldap', array( ++ 'driver' => array( ++ 'host' => 'localhost', ++ ), ++ 'user' => array( ++ 'baseDn' => 'dc=example,dc=com', ++ ), ++ )); ++ } ++ } ++ + public function load(array $configs, ContainerBuilder $container) + { + $configuration = new Configuration(); +@@ -16,6 +41,9 @@ class WallabagUserExtension extends Extension + + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader->load('services.yml'); ++ if ($container->getParameter('ldap_enabled')) { ++ $loader->load('ldap_services.yml'); ++ } + $container->setParameter('wallabag_user.registration_enabled', $config['registration_enabled']); + } + +diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php +index 48446e3c..f93c59c7 100644 +--- a/src/Wallabag/UserBundle/Entity/User.php ++++ b/src/Wallabag/UserBundle/Entity/User.php +@@ -1,5 +1,15 @@ + clients->first(); + } + } ++ ++ /** ++ * Set dn. ++ * ++ * @param string $dn ++ * ++ * @return User ++ */ ++ public function setDn($dn) ++ { ++ $this->dn = $dn; ++ ++ return $this; ++ } ++ ++ /** ++ * Get dn. ++ * ++ * @return string ++ */ ++ public function getDn() ++ { ++ return $this->dn; ++ } ++ ++ public function isLdapUser() ++ { ++ return $this->dn !== null; ++ } + } +diff --git a/src/Wallabag/UserBundle/LdapHydrator.php b/src/Wallabag/UserBundle/LdapHydrator.php +new file mode 100644 +index 00000000..cea2450f +--- /dev/null ++++ b/src/Wallabag/UserBundle/LdapHydrator.php +@@ -0,0 +1,103 @@ ++userManager = $user_manager; ++ $this->eventDispatcher = $event_dispatcher; ++ ++ $this->attributesMap = array( ++ 'setUsername' => $attributes_map[0], ++ 'setEmail' => $attributes_map[1], ++ 'setName' => $attributes_map[2], ++ ); ++ $this->enabledAttribute = $attributes_map[3]; ++ ++ $this->ldapBaseDn = $ldap_base_dn; ++ $this->ldapAdminFilter = $ldap_admin_filter; ++ $this->ldapDriver = $ldap_driver; ++ } ++ ++ public function hydrate(array $ldapEntry) ++ { ++ $user = $this->userManager->findUserBy(array('dn' => $ldapEntry['dn'])); ++ ++ if (!$user) { ++ $user = $this->userManager->createUser(); ++ $user->setDn($ldapEntry['dn']); ++ $user->setPassword(''); ++ $user->setSalt(''); ++ $this->updateUserFields($user, $ldapEntry); ++ ++ $event = new UserEvent($user); ++ $this->eventDispatcher->dispatch(FOSUserEvents::USER_CREATED, $event); ++ ++ $this->userManager->reloadUser($user); ++ } else { ++ $this->updateUserFields($user, $ldapEntry); ++ } ++ ++ return $user; ++ } ++ ++ private function updateUserFields($user, $ldapEntry) ++ { ++ foreach ($this->attributesMap as $key => $value) { ++ if (is_array($ldapEntry[$value])) { ++ $ldap_value = $ldapEntry[$value][0]; ++ } else { ++ $ldap_value = $ldapEntry[$value]; ++ } ++ ++ call_user_func([$user, $key], $ldap_value); ++ } ++ ++ if ($this->enabledAttribute !== null) { ++ $user->setEnabled($ldapEntry[$this->enabledAttribute]); ++ } else { ++ $user->setEnabled(true); ++ } ++ ++ if ($this->isAdmin($user)) { ++ $user->addRole('ROLE_SUPER_ADMIN'); ++ } else { ++ $user->removeRole('ROLE_SUPER_ADMIN'); ++ } ++ ++ $this->userManager->updateUser($user, true); ++ } ++ ++ private function isAdmin($user) ++ { ++ if ($this->ldapAdminFilter === null) { ++ return false; ++ } ++ ++ $escaped_username = ldap_escape($user->getUsername(), '', LDAP_ESCAPE_FILTER); ++ $filter = sprintf($this->ldapAdminFilter, $escaped_username); ++ $entries = $this->ldapDriver->search($this->ldapBaseDn, $filter); ++ ++ return $entries['count'] == 1; ++ } ++} +diff --git a/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php +new file mode 100644 +index 00000000..8a851f12 +--- /dev/null ++++ b/src/Wallabag/UserBundle/OAuthStorageLdapWrapper.php +@@ -0,0 +1,43 @@ ++ldapManager = $ldap_manager; ++ } ++ ++ public function checkUserCredentials(IOAuth2Client $client, $username, $password) ++ { ++ try { ++ $user = $this->userProvider->loadUserByUsername($username); ++ } catch (AuthenticationException $e) { ++ return false; ++ } ++ ++ if ($user->isLdapUser()) { ++ return $this->checkLdapUserCredentials($user, $password); ++ } else { ++ return parent::checkUserCredentials($client, $username, $password); ++ } ++ } ++ ++ private function checkLdapUserCredentials($user, $password) ++ { ++ if ($this->ldapManager->bind($user, $password)) { ++ return array( ++ 'data' => $user, ++ ); ++ } else { ++ return false; ++ } ++ } ++} +diff --git a/src/Wallabag/UserBundle/Resources/config/ldap.yml b/src/Wallabag/UserBundle/Resources/config/ldap.yml +new file mode 100644 +index 00000000..5ec16088 +--- /dev/null ++++ b/src/Wallabag/UserBundle/Resources/config/ldap.yml +@@ -0,0 +1,28 @@ ++fr3d_ldap: ++ service: ++ user_hydrator: ldap_user_hydrator ++ driver: ++ host: "%ldap_host%" ++ port: "%ldap_port%" ++ useSsl: "%ldap_ssl%" ++ useStartTls: "%ldap_tls%" ++ bindRequiresDn: "%ldap_bind_requires_dn%" ++ username: "%ldap_manager_dn%" ++ password: "%ldap_manager_pw%" ++ user: ++ baseDn: "%ldap_base%" ++ filter: "%ldap_filter%" ++ usernameAttribute: "%ldap_username_attribute%" ++security: ++ providers: ++ chain_provider: ++ chain: ++ providers: [ fr3d_ldapbundle, fos_userbundle ] ++ fr3d_ldapbundle: ++ id: fr3d_ldap.security.user.provider ++ firewalls: ++ secured_area: ++ fr3d_ldap: ~ ++ form_login: ++ provider: chain_provider ++ +diff --git a/src/Wallabag/UserBundle/Resources/config/ldap_services.yml b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml +new file mode 100644 +index 00000000..b3e3fd8a +--- /dev/null ++++ b/src/Wallabag/UserBundle/Resources/config/ldap_services.yml +@@ -0,0 +1,22 @@ ++services: ++ fos_oauth_server.server: ++ class: OAuth2\OAuth2 ++ arguments: ++ - "@oauth_storage_ldap_wrapper" ++ - "%fos_oauth_server.server.options%" ++ oauth_storage_ldap_wrapper: ++ class: Wallabag\UserBundle\OAuthStorageLdapWrapper ++ parent: fos_oauth_server.storage ++ calls: ++ - [setLdapManager, ["@fr3d_ldap.ldap_manager"]] ++ ++ ldap_user_hydrator: ++ class: Wallabag\UserBundle\LdapHydrator ++ arguments: ++ - "@fos_user.user_manager" ++ - "@event_dispatcher" ++ - [ "%ldap_username_attribute%", "%ldap_email_attribute%", "%ldap_name_attribute%", "%ldap_enabled_attribute%" ] ++ - "%ldap_base%" ++ - "%ldap_admin_filter%" ++ - "@fr3d_ldap.ldap_driver" ++ diff --git a/pkgs/webapps/yourls/default.nix b/pkgs/webapps/yourls/default.nix new file mode 100644 index 00000000..4bcfa4cc --- /dev/null +++ b/pkgs/webapps/yourls/default.nix @@ -0,0 +1,26 @@ +{ yourls_config ? "/etc/yourls/config.php", mylibs, stdenv }: +let + withPlugins = plugins: package.overrideAttrs(old: { + name = "${old.name}-with-plugins"; + installPhase = old.installPhase + + builtins.concatStringsSep "\n" ( + map (value: "ln -s ${value} $out/user/plugins/${value.pluginName}") plugins + ); + passthru = old.passthru // { + inherit plugins; + withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins); + }; + }); + package = stdenv.mkDerivation (mylibs.fetchedGithub ./yourls.json // rec { + installPhase = '' + mkdir -p $out + cp -a */ *.php $out/ + cp sample-robots.txt $out/robots.txt + ln -sf ${yourls_config} $out/includes/config.php + ''; + passthru = { + plugins = []; + inherit withPlugins; + }; + }); +in package diff --git a/pkgs/webapps/yourls/plugins/ldap/default.nix b/pkgs/webapps/yourls/plugins/ldap/default.nix new file mode 100644 index 00000000..01dc6fb8 --- /dev/null +++ b/pkgs/webapps/yourls/plugins/ldap/default.nix @@ -0,0 +1,8 @@ +{ stdenv, mylibs }: +stdenv.mkDerivation (mylibs.fetchedGithub ./ldap.json // rec { + installPhase = '' + mkdir -p $out + cp plugin.php $out + ''; + passthru.pluginName = "ldap"; +}) diff --git a/pkgs/webapps/yourls/plugins/ldap/ldap.json b/pkgs/webapps/yourls/plugins/ldap/ldap.json new file mode 100644 index 00000000..9411e4a9 --- /dev/null +++ b/pkgs/webapps/yourls/plugins/ldap/ldap.json @@ -0,0 +1,15 @@ +{ + "tag": "2a3cb03-master", + "meta": { + "name": "yourls-ldap-plugin", + "url": "https://github.com/k3a/yourls-ldap-plugin", + "branch": "master" + }, + "github": { + "owner": "k3a", + "repo": "yourls-ldap-plugin", + "rev": "2a3cb0334b8a6b81b284a7196e614bbd2b2b1615", + "sha256": "0cchbnli77d295lzf7kjmn4dcxj2bmdqa9qc3f8l8qgmp4n5n0gh", + "fetchSubmodules": true + } +} diff --git a/pkgs/webapps/yourls/yourls.json b/pkgs/webapps/yourls/yourls.json new file mode 100644 index 00000000..0a79b186 --- /dev/null +++ b/pkgs/webapps/yourls/yourls.json @@ -0,0 +1,15 @@ +{ + "tag": "1.7.3", + "meta": { + "name": "yourls", + "url": "https://github.com/YOURLS/YOURLS", + "branch": "refs/tags/1.7.3" + }, + "github": { + "owner": "YOURLS", + "repo": "YOURLS", + "rev": "077018822d3594229daa8343310d0b40804b9ddc", + "sha256": "1av6h619rwqn0yn0kjn2s2h3gmrhmxaaa9hd5ns4ralxgg731imd", + "fetchSubmodules": true + } +} diff --git a/scripts/make-env b/scripts/make-env new file mode 100755 index 00000000..ebb1eed2 --- /dev/null +++ b/scripts/make-env @@ -0,0 +1,11 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +source $(dirname $DIR)/nix_path_env +nix-env -r -i -A myEnvironments.immae-eu -f "" "$@" + +cat >> $(dirname $DIR)/versions_log </dev/null 2>&1 && pwd )" + +source $(dirname $DIR)/nix_path_env +version=$(nix eval --raw nixpkgs.lib.version) +mainversion=$(echo $version | cut -d"." -f -2) + +echo "https://releases.nixos.org/nixos/$mainversion/nixos-$version/nixexprs.tar.xz" +nix eval --raw nixpkgs.bc.meta.position | cut -d"/" -f-4 -- 2.41.0