diff --git a/.ci/flake8_lint_include_list.txt b/.ci/flake8_lint_include_list.txt index 0746d6f8a6d..7f2cb903132 100644 --- a/.ci/flake8_lint_include_list.txt +++ b/.ci/flake8_lint_include_list.txt @@ -1,4 +1,5 @@ client/galaxy/style/source_material/circle.py +config/ contrib/ cron/ doc/parse_gx_xsd.py @@ -21,22 +22,13 @@ lib/galaxy/jobs/command_factory.py lib/galaxy/jobs/datasets.py lib/galaxy/jobs/deferred/ lib/galaxy/jobs/error_level.py +lib/galaxy/jobs/handler.py lib/galaxy/jobs/__init__.py lib/galaxy/jobs/manager.py lib/galaxy/jobs/metrics/ +lib/galaxy/jobs/output_checker.py lib/galaxy/jobs/rules/ -lib/galaxy/jobs/runners/cli.py -lib/galaxy/jobs/runners/condor.py -lib/galaxy/jobs/runners/drmaa.py -lib/galaxy/jobs/runners/godocker.py -lib/galaxy/jobs/runners/kubernetes.py -lib/galaxy/jobs/runners/local.py -lib/galaxy/jobs/runners/pbs.py -lib/galaxy/jobs/runners/pulsar.py -lib/galaxy/jobs/runners/slurm.py -lib/galaxy/jobs/runners/state_handlers/ -lib/galaxy/jobs/runners/tasks.py -lib/galaxy/jobs/runners/util/ +lib/galaxy/jobs/runners/ lib/galaxy/jobs/splitters/basic.py lib/galaxy/jobs/splitters/__init__.py lib/galaxy/jobs/stock_rules.py @@ -61,9 +53,7 @@ lib/galaxy/objectstore/s3_multipart_upload.py lib/galaxy/objectstore/s3.py lib/galaxy/openid/__init__.py lib/galaxy/quota/ -lib/galaxy/sample_tracking/data_transfer.py -lib/galaxy/sample_tracking/__init__.py -lib/galaxy/sample_tracking/sample.py +lib/galaxy/sample_tracking/ lib/galaxy/security/ lib/galaxy/tags/ lib/galaxy/tools/ @@ -71,6 +61,7 @@ lib/galaxy/util/ lib/galaxy/version.py lib/galaxy/visualization/data_providers/basic.py lib/galaxy/visualization/data_providers/cigar.py +lib/galaxy/visualization/data_providers/genome.py lib/galaxy/visualization/data_providers/__init__.py lib/galaxy/visualization/data_providers/phyloviz/baseparser.py lib/galaxy/visualization/genome/ @@ -99,14 +90,23 @@ lib/galaxy/web/framework/middleware/xforwardedhost.py lib/galaxy/web/framework/webapp.py lib/galaxy/web/__init__.py lib/galaxy/web/params.py +lib/galaxy/web/stack/ +lib/galaxy/webapps/galaxy/api/authenticate.py +lib/galaxy/webapps/galaxy/api/forms.py lib/galaxy/webapps/galaxy/api/genomes.py +lib/galaxy/webapps/galaxy/api/group_roles.py +lib/galaxy/webapps/galaxy/api/group_users.py +lib/galaxy/webapps/galaxy/api/groups.py lib/galaxy/webapps/galaxy/api/histories.py lib/galaxy/webapps/galaxy/api/__init__.py lib/galaxy/webapps/galaxy/api/jobs.py +lib/galaxy/webapps/galaxy/api/library_contents.py lib/galaxy/webapps/galaxy/api/library_datasets.py lib/galaxy/webapps/galaxy/api/requests.py +lib/galaxy/webapps/galaxy/api/request_types.py lib/galaxy/webapps/galaxy/api/roles.py lib/galaxy/webapps/galaxy/api/samples.py +lib/galaxy/webapps/galaxy/api/tool_data.py lib/galaxy/webapps/galaxy/api/tools.py lib/galaxy/webapps/galaxy/api/tours.py lib/galaxy/webapps/galaxy/api/users.py @@ -116,6 +116,7 @@ lib/galaxy/webapps/galaxy/config_watchers.py lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py lib/galaxy/webapps/galaxy/controllers/async.py lib/galaxy/webapps/galaxy/controllers/data_manager.py +lib/galaxy/webapps/galaxy/controllers/dataset.py lib/galaxy/webapps/galaxy/controllers/error.py lib/galaxy/webapps/galaxy/controllers/external_services.py lib/galaxy/webapps/galaxy/controllers/forms.py @@ -124,21 +125,29 @@ lib/galaxy/webapps/galaxy/controllers/__init__.py lib/galaxy/webapps/galaxy/controllers/library_common.py lib/galaxy/webapps/galaxy/controllers/mobile.py lib/galaxy/webapps/galaxy/controllers/page.py +lib/galaxy/webapps/galaxy/controllers/requests_admin.py +lib/galaxy/webapps/galaxy/controllers/requests_common.py lib/galaxy/webapps/galaxy/controllers/requests.py +lib/galaxy/webapps/galaxy/controllers/request_type.py +lib/galaxy/webapps/galaxy/controllers/root.py lib/galaxy/webapps/galaxy/controllers/search.py lib/galaxy/webapps/galaxy/controllers/tool_runner.py lib/galaxy/webapps/galaxy/controllers/userskeys.py lib/galaxy/webapps/galaxy/__init__.py lib/galaxy/webapps/__init__.py +lib/galaxy/webapps/reports/buildapp.py lib/galaxy/webapps/reports/config.py lib/galaxy/webapps/reports/controllers/__init__.py lib/galaxy/webapps/reports/controllers/query.py +lib/galaxy/webapps/reports/controllers/system.py lib/galaxy/webapps/reports/controllers/tools.py lib/galaxy/webapps/reports/__init__.py lib/galaxy/webapps/tool_shed/api/__init__.py +lib/galaxy/webapps/tool_shed/buildapp.py lib/galaxy/webapps/tool_shed/config.py lib/galaxy/webapps/tool_shed/controllers/groups.py lib/galaxy/webapps/tool_shed/controllers/__init__.py +lib/galaxy/webapps/tool_shed/controllers/repository.py lib/galaxy/webapps/tool_shed/controllers/user.py lib/galaxy/webapps/tool_shed/framework/__init__.py lib/galaxy/webapps/tool_shed/framework/middleware/__init__.py diff --git a/client/galaxy/scripts/apps/admin.js b/client/galaxy/scripts/apps/admin.js index 07c98165230..02cfc028c45 100644 --- a/client/galaxy/scripts/apps/admin.js +++ b/client/galaxy/scripts/apps/admin.js @@ -17,14 +17,14 @@ window.app = function app(options, bootstrapped) { /** Routes */ var AdminRouter = Router.extend({ routes: { - "(/)admin(/)users" : "show_users", - "(/)admin(/)roles" : "show_roles", - "(/)admin(/)groups" : "show_groups", - "(/)admin(/)tool_versions" : "show_tool_versions", - "(/)admin(/)quotas" : "show_quotas", - "(/)admin(/)repositories" : "show_repositories", - "(/)admin(/)forms" : "show_forms", - "(/)admin(/)form(/)(:form_id)" : "show_form" + "(/)admin(/)users": "show_users", + "(/)admin(/)roles": "show_roles", + "(/)admin(/)groups": "show_groups", + "(/)admin(/)tool_versions": "show_tool_versions", + "(/)admin(/)quotas": "show_quotas", + "(/)admin(/)repositories": "show_repositories", + "(/)admin(/)forms": "show_forms", + "(/)admin(/)form(/)(:form_id)": "show_form" }, authenticate: function(args, name) { @@ -64,7 +64,8 @@ window.app = function app(options, bootstrapped) { show_repositories: function() { this.page.display( new GridView({ - url_base: Galaxy.root + "admin_toolshed/browse_repositories", + url_base: + Galaxy.root + "admin_toolshed/browse_repositories", url_data: Galaxy.params, dict_format: true }) diff --git a/client/galaxy/scripts/apps/panels/admin-panel.js b/client/galaxy/scripts/apps/panels/admin-panel.js index 2c355a80c6a..977a9afc85e 100644 --- a/client/galaxy/scripts/apps/panels/admin-panel.js +++ b/client/galaxy/scripts/apps/panels/admin-panel.js @@ -12,177 +12,106 @@ var AdminPanel = Backbone.View.extend({ this.model = new Backbone.Model({ title: _l("Administration") }); - this.categories = new Backbone.Collection([ - { - title: "Server", - items: [ - { - title: "Data types registry", - url: "admin/view_datatypes_registry" - }, - { - title: "Data tables registry", - url: "admin/view_tool_data_tables" - }, - { - title: "Display applications", - url: "admin/display_applications" - }, - { - title: "Manage jobs", - url: "admin/jobs" - } - ] - }, - { - title: "Tools and Tool Shed", - items: [ - { - title: "Search Tool Shed", - url: "admin_toolshed/browse_tool_sheds", - enabled: self.settings.is_tool_shed_installed - }, - { - title: "Search Tool Shed (Beta)", - url: "admin_toolshed/browse_toolsheds", - enabled: - self.settings.is_tool_shed_installed && - self.config.enable_beta_ts_api_install - }, - { - title: "Monitor installing repositories", - url: "admin_toolshed/monitor_repository_installation" - }, - { - title: "Manage installed tools", - url: "admin/repositories", - enabled: self.settings.is_repo_installed, - target: "__use_router__" - }, - { - title: "Reset metadata", - url: - "admin_toolshed/reset_metadata_on_selected_installed_repositories", - enabled: self.settings.is_repo_installed - }, - { - title: "Download local tool", - url: "admin/package_tool" - }, - { - title: "Tool lineage", - url: "admin/tool_versions", - target: "__use_router__" - }, - { - title: "Reload a tool's configuration", - url: "admin/reload_tool" - }, - { - title: "Review tool migration stages", - url: "admin/review_tool_migration_stages" - }, - { - title: "View Tool Error Logs", - url: "admin/tool_errors" - }, - { - title: "Manage Display Whitelist", - url: "admin/sanitize_whitelist" - }, - { - title: "Manage Tool Dependencies", - url: "admin/manage_tool_dependencies" - } - ] - }, - { - title: "User Management", - items: [ - { - title: "Users", - url: "admin/users", - target: "__use_router__" - }, - { - title: "Groups", - url: "admin/groups", - target: "__use_router__" - }, - { - title: "Roles", - url: "admin/roles", - target: "__use_router__" - }, - { - title: "API keys", - url: "userskeys/all_users" - }, - { - title: "Impersonate a user", - url: "admin/impersonate", - enabled: self.config.allow_user_impersonation - } - ] - }, - { - title: "Data", - items: [ - { - title: "Quotas", - url: "admin/quotas", - target: "__use_router__", - enabled: self.config.enable_quotas - }, - { - title: "Data libraries", - url: "library_admin/browse_libraries" - }, - { - title: "Roles", - url: "admin/roles", - target: "__use_router__" - }, - { - title: "Local data", - url: "data_manager" - } - ] - }, - { - title: "Form Definitions", - items: [ - { - title: "Form definitions", - url: "admin/forms", - target: "__use_router__" - } - ] - }, - { - title: "Sample Tracking", - items: [ - { - title: "Sequencers and external services", - url: "external_service/browse_external_services" - }, - { - title: "Request types", - url: "request_type/browse_request_types" - }, - { - title: "Sequencing requests", - url: "requests_admin/browse_requests" - }, - { - title: "Find samples", - url: - "requests_common/find_samples?cntrller=requests_admin" - } - ] - } - ]); - this.setElement(this._template()); + this.categories = new Backbone.Collection([{ + title : "Server", + items : [ { + title : "Data types registry", + url : "admin/view_datatypes_registry" + },{ + title : "Data tables registry", + url : "admin/view_tool_data_tables" + },{ + title : "Data libraries", + url : "library_admin/browse_libraries" + },{ + title : "Display applications", + url : "admin/display_applications" + },{ + title : "Manage jobs", + url : "admin/jobs" + },{ + title : "Local data", + url : "data_manager" + } ] + },{ + title : "User Management", + items : [ { + title : "Users", + url : "admin/users", + target : "__use_router__" + },{ + title : "Quotas", + url : "admin/quotas", + target : "__use_router__", + enabled : self.config.enable_quotas + },{ + title : "Groups", + url : "admin/groups", + target : "__use_router__" + },{ + title : "Roles", + url : "admin/roles", + target : "__use_router__" + },{ + title : "Forms", + url : "admin/forms", + target : "__use_router__" + },{ + title : "API keys", + url : "userskeys/all_users" + },{ + title : "Impersonate a user", + url : "admin/impersonate", + enabled : self.config.allow_user_impersonation + }] + },{ + title : "Tools and Tool Shed", + items : [ { + title : "Search Tool Shed", + url : "admin_toolshed/browse_tool_sheds", + enabled : self.settings.is_tool_shed_installed + },{ + title : "Search Tool Shed (Beta)", + url : "admin_toolshed/browse_toolsheds", + enabled : self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install + },{ + title : "Monitor installing repositories", + url : "admin_toolshed/monitor_repository_installation", + enabled : self.settings.installing_repository_ids + },{ + title : "Manage installed tools", + url : "admin/repositories", + enabled : self.settings.is_repo_installed, + target : "__use_router__" + },{ + title : "Reset metadata", + url : "admin_toolshed/reset_metadata_on_selected_installed_repositories", + enabled : self.settings.is_repo_installed + },{ + title : "Download local tool", + url : "admin/package_tool" + },{ + title : "Tool lineage", + url : "admin/tool_versions", + target : "__use_router__" + },{ + title : "Reload a tool\"s configuration", + url : "admin/reload_tool" + },{ + title : "Review tool migration stages", + url : "admin/review_tool_migration_stages" + },{ + title : "View Tool Error Logs", + url : "admin/tool_errors" + },{ + title : "Manage Display Whitelist", + url : "admin/sanitize_whitelist" + },{ + title : "Manage Tool Dependencies", + url : "admin/manage_tool_dependencies" + } ] + }]); + this.setElement( this._template() ); }, render: function() { diff --git a/client/galaxy/scripts/galaxy.interactive_environments.js b/client/galaxy/scripts/galaxy.interactive_environments.js index ba242c34964..7a8aad6134b 100644 --- a/client/galaxy/scripts/galaxy.interactive_environments.js +++ b/client/galaxy/scripts/galaxy.interactive_environments.js @@ -111,8 +111,10 @@ function spin( type: "GET", timeout: spin_state.ajax_timeout, success: function(data, status, jqxhr) { - if (!success_callback(data, status, jqxhr)) + if (!success_callback(data, status, jqxhr)) { + spin_state.count++; spin_again(spin_state); + } }, error: function(jqxhr, status, error) { if (status == "timeout") { diff --git a/client/galaxy/scripts/layout/menu.js b/client/galaxy/scripts/layout/menu.js index e29d0a79859..4554ae189bd 100644 --- a/client/galaxy/scripts/layout/menu.js +++ b/client/galaxy/scripts/layout/menu.js @@ -78,29 +78,6 @@ define( ] }); - // - // Lab menu. - // - options.user_requests && - this.add({ - id: "lab", - title: "Lab", - menu: [ - { - title: "Sequencing Requests", - url: "requests/index" - }, - { - title: "Find Samples", - url: "requests/find_samples_index" - }, - { - title: "Help", - url: options.lims_doc_url - } - ] - }); - // // Visualization tab. // diff --git a/client/galaxy/scripts/mvc/library/library-dataset-view.js b/client/galaxy/scripts/mvc/library/library-dataset-view.js index 7a5ecae7352..9336068eded 100644 --- a/client/galaxy/scripts/mvc/library/library-dataset-view.js +++ b/client/galaxy/scripts/mvc/library/library-dataset-view.js @@ -541,7 +541,8 @@ define( } }, - copyToClipboard: function() { + copyToClipboard: function(e) { + e.preventDefault(); var href = Backbone.history.location.href; if (href.lastIndexOf("/permissions") !== -1) { href = href.substr(0, href.lastIndexOf("/permissions")); @@ -764,7 +765,7 @@ define( '<% if (item.get("is_unrestricted")) { %>', "
", - 'This dataset is unrestricted so everybody with the link can access it. Just share this page.', + 'This dataset is unrestricted so everybody with the link can access it. Just share this page.', "
", "<% } %>", @@ -853,8 +854,34 @@ define( '<%= _.escape(item.get("tags")) %>', "", "<% } %>", + '<% if ( item.get("uuid") !== "ok" ) { %>', + "", + 'UUID', + '<%= _.escape(item.get("uuid")) %>', + "", + "<% } %>", + '<% if ( item.get("state") !== "ok" ) { %>', + "", + 'State', + '<%= _.escape(item.get("state")) %>', + "", + "<% } %>", "", + '<% if (item.get("job_stderr")) { %>', + "

Job Standard Error

", + '
',
+                        '<%= _.escape(item.get("job_stderr")) %>',
+                        "
", + "<% } %>", + + '<% if (item.get("job_stdout")) { %>', + "

Job Standard Output

", + '
',
+                        '<%= _.escape(item.get("job_stdout")) %>',
+                        "
", + "<% } %>", + "
", '
',
                         "
", @@ -1154,9 +1181,9 @@ define( "

Dataset-related permissions

", '
Changes made below will affect every library item that was created from this dataset and also every history this dataset is part of.
', '<% if (!item.get("is_unrestricted")) { %>', - '

You can remove all access restrictions on this dataset.

', + '

You can remove all access restrictions on this dataset.

', "<% } else { %>", - '

You can make this dataset private to you.

', + '

You can make this dataset private to you.

', "<% } %>", "

Roles that can access the dataset

", '
', diff --git a/client/galaxy/scripts/mvc/library/library-folderlist-view.js b/client/galaxy/scripts/mvc/library/library-folderlist-view.js index 694de517443..4d7bfa86b65 100644 --- a/client/galaxy/scripts/mvc/library/library-folderlist-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderlist-view.js @@ -467,11 +467,12 @@ define( '', '', 'name ', - 'description', + 'description', 'data type', 'size', 'time updated (UTC)', - ' ', + 'state ', + ' ', "", '', '', @@ -485,6 +486,7 @@ define( "", "", "", + "", "", "", "", diff --git a/client/galaxy/scripts/mvc/library/library-folderrow-view.js b/client/galaxy/scripts/mvc/library/library-folderrow-view.js index 2cef1d8cc61..8a391714ce4 100644 --- a/client/galaxy/scripts/mvc/library/library-folderrow-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderrow-view.js @@ -17,10 +17,10 @@ define( defaults: { type: null, visibility_config: { - edit_folder_btn: true, + edit_folder_btn: false, save_folder_btn: false, cancel_folder_btn: false, - permission_folder_btn: true + permission_folder_btn: false }, edit_mode: false }, @@ -306,32 +306,31 @@ define( "", '<%- content_item.get("description") %>', "", + "", "<% } else if(edit_mode){ %>", '', '', "<% } %>", "folder", - "", "", '<%= _.escape(content_item.get("update_time")) %>', "", + "", "", "<% if(edit_mode) { %>", // start edit mode '", '", "<% } else if (!edit_mode){%>", // start no edit mode '", '', - '", "", "<% } %>", //end no edit mode @@ -361,6 +360,11 @@ define( '<%= _.escape(content_item.get("file_size")) %>', '<%= _.escape(content_item.get("update_time")) %>', "", + '<% if ( content_item.get("state") !== "ok" ) { %>', + '<%= _.escape(content_item.get("state")) %>', + "<% } %>", + "", + "", '<% if (content_item.get("is_unrestricted")) { %>', '', "<% } %>", @@ -372,8 +376,8 @@ define( "<% } %>", '<% if (content_item.get("can_manage")) { %>', '/datasets/<%- content_item.id %>/permissions">', - '", "", "<% } %>", @@ -407,10 +411,14 @@ define( '<%= _.escape(content_item.get("update_time")) %>', "", "", + '<% if ( content_item.get("state") !== "ok" ) { %>', + '<%= _.escape(content_item.get("state")) %>', + "<% } %>", + "", + "", '', - '", "", "" @@ -439,11 +447,11 @@ define( "", '<%= _.escape(content_item.get("update_time")) %>', "", + "", "", '', - '", "", "" diff --git a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js index fa3c358415a..c4ffaa5025d 100644 --- a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js +++ b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js @@ -112,7 +112,10 @@ define( show_page: parseInt(this.options.show_page), page_count: parseInt(this.options.page_count), total_items_count: this.options.total_items_count, - items_shown: this.options.items_shown + items_shown: this.options.items_shown, + folder_page_size: Galaxy.libraries.preferences.get( + "folder_page_size" + ) }) ); }, @@ -1432,7 +1435,8 @@ define( /** * Show user the prompt to change the number of items shown on page. */ - showPageSizePrompt: function() { + showPageSizePrompt: function(e) { + e.preventDefault(); var folder_page_size = prompt( "How many items per page do you want to see?", Galaxy.libraries.preferences.get("folder_page_size") @@ -1886,11 +1890,10 @@ define( "<% } %>", "", "", - " showing ", - '', - "<%- items_shown %>", - "", - " of <%- total_items_count %> items", + ' <%- items_shown %> items shown (change)', + "", + "", + " <%- total_items_count %> total", "" ].join("") ); diff --git a/client/galaxy/scripts/mvc/library/library-libraryrow-view.js b/client/galaxy/scripts/mvc/library/library-libraryrow-view.js index 951d395c6da..47531c39cfb 100644 --- a/client/galaxy/scripts/mvc/library/library-libraryrow-view.js +++ b/client/galaxy/scripts/mvc/library/library-libraryrow-view.js @@ -264,7 +264,7 @@ define(["layout/masthead", "utils/utils", "libs/toastr"], function( '" style="display:none;" data-id="<%- library.get("id") %>">', "<% if(!edit_mode) { %>", '<% if(library.get("deleted")) { %>', - ' <%- library.get("name") %>', + '<%- library.get("name") %>', "<% } else { %>", '"><%- library.get("name") %>', "<% } %>", @@ -293,14 +293,16 @@ define(["layout/masthead", "utils/utils", "libs/toastr"], function( "<% } %>", '', '<% if( (library.get("public")) && (library.get("deleted") === false) ) { %>', - ' ', + ' ', "<% }%>", - '', - '/permissions">', - '', - '', - '', - '', + '', + '/permissions">', + '', + '', + '', + // For deleted libraries + '" class="fa fa-ban fa-lg">', + '', "", "" ].join("") diff --git a/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js b/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js index 5d008d4bcca..ef599d1026a 100644 --- a/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js +++ b/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js @@ -17,7 +17,7 @@ define(["libs/toastr", "mvc/library/library-model"], function( "click #create_new_library_btn": "createLibraryFromModal", "click #include_deleted_chk": "includeDeletedChecked", "click #exclude_restricted_chk": "excludeRestrictedChecked", - "click #lib_page_size_prompt": "showPageSizePrompt", + "click .page_size_prompt": "showPageSizePrompt", "keyup .library-search-input": "searchLibraries" }, @@ -64,7 +64,10 @@ define(["libs/toastr", "mvc/library/library-model"], function( show_page: parseInt(this.options.show_page), page_count: parseInt(this.options.page_count), total_libraries_count: this.options.total_libraries_count, - libraries_shown: this.options.libraries_shown + libraries_shown: this.options.libraries_shown, + library_page_size: Galaxy.libraries.preferences.get( + "library_page_size" + ) }) ); }, @@ -128,7 +131,8 @@ define(["libs/toastr", "mvc/library/library-model"], function( /** * Show user the propmpt to change the number of libs shown on page. */ - showPageSizePrompt: function() { + showPageSizePrompt: function(e) { + e.preventDefault(); var library_page_size = prompt( "How many libraries per page do you want to see?", Galaxy.libraries.preferences.get("library_page_size") @@ -281,8 +285,11 @@ define(["libs/toastr", "mvc/library/library-model"], function( '
  • ', "<% } %>", "", - '', - ' showing <%- libraries_shown %> of <%- total_libraries_count %> libraries', + "", + ' <%- libraries_shown %> libraries shown (change)', + "", + "", + " <%- total_libraries_count %> total", "" ].join("") ); diff --git a/client/galaxy/scripts/utils/utils.js b/client/galaxy/scripts/utils/utils.js index 5f83e7e99e8..f4b85dcb49a 100644 --- a/client/galaxy/scripts/utils/utils.js +++ b/client/galaxy/scripts/utils/utils.js @@ -312,7 +312,7 @@ define(["utils/localization"], function(_l) { var d = new Date(); var hours = (d.getHours() < 10 ? "0" : "") + d.getHours(); var minutes = (d.getMinutes() < 10 ? "0" : "") + d.getMinutes(); - return (datetime = + return ( d.getDate() + "/" + (d.getMonth() + 1) + @@ -321,7 +321,8 @@ define(["utils/localization"], function(_l) { ", " + hours + ":" + - minutes); + minutes + ); } /** Append script and style tags to Galaxy main application */ diff --git a/client/galaxy/style/less/library.less b/client/galaxy/style/less/library.less index 91614c3a048..ccebc0e528c 100644 --- a/client/galaxy/style/less/library.less +++ b/client/galaxy/style/less/library.less @@ -11,7 +11,7 @@ overflow: auto !important; .fa{ font-size: 12px; } -.fa-globe{ +.fa-globe, .fa-shield, .fa-key, .fa-ban{ font-size: initial; margin-left: 0.6em; } diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index f4f353ee074..c726ff23fb3 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -245,6 +245,7 @@ + diff --git a/config/galaxy.ini.sample b/config/galaxy.ini.sample index acc1fb73d0a..da67d2e107a 100644 --- a/config/galaxy.ini.sample +++ b/config/galaxy.ini.sample @@ -447,10 +447,9 @@ paste.app_factory = galaxy.web.buildapp:app_factory # -- Mail and notification # Galaxy sends mail for various things: subscribing users to the mailing list -# if they request it, password resets, notifications from the Galaxy Sample -# Tracking system, reporting dataset errors, and sending activation emails. -# To do this, it needs to send mail through an SMTP server, which you may -# define here (host:port). +# if they request it, password resets, reporting dataset errors, and sending +# activation emails. To do this, it needs to send mail through an SMTP server, +# which you may define here (host:port). # Galaxy will automatically try STARTTLS but will continue upon failure. #smtp_server = None @@ -912,6 +911,14 @@ use_interactive = True # sub-directories of files contained in their directory. #user_library_import_dir = None +# For security reasons, users may not import any files that actually lie +# outside of their `user_library_import_dir` (e.g. using symbolic links). A +# list of directories can be allowed by setting the following option (the list +# is comma-separated). Be aware that *any* user with library import permissions +# can import from anywhere in these directories (assuming they are able to +# create symlinks to them). +#user_library_import_symlink_whitelist = None + # Allow admins to paste filesystem paths during upload. For libraries this # adds an option to the admin library upload tool allowing admins to paste # filesystem paths to files and directories in a box, and these paths will be @@ -1224,6 +1231,9 @@ use_interactive = True # Directory to store Data Manager based tool-data; defaults to tool_data_path. #galaxy_data_manager_data_path = tool-data +# Enable the API for sample tracking +#enable_legacy_sample_tracking_api = False + # -- Job Execution # To increase performance of job execution and the web interface, you can @@ -1325,16 +1335,16 @@ use_interactive = True #drmaa_external_killjob_script = sudo -E scripts/drmaa_external_killer.py #external_chown_script = sudo -E scripts/external_chown_script.py -# For the job submission as the actual system user, Galaxy can extract -# the user name from the email address (actually the local-part before the @) -# or the username which are both stored in the Galaxy data base. -# The latter option is particularly useful for installations that get the +# For the job submission as the actual system user, Galaxy can extract +# the user name from the email address (actually the local-part before the @) +# or the username which are both stored in the Galaxy data base. +# The latter option is particularly useful for installations that get the # authentication from LDAP. -# Also, Galaxy can accept the name of a common system user (eg. galaxy_worker) -# who can run every job being submitted. This user should not be the same user -# running the galaxy system. +# Also, Galaxy can accept the name of a common system user (eg. galaxy_worker) +# who can run every job being submitted. This user should not be the same user +# running the galaxy system. # Possible values are user_email (default), username or -#real_system_username = user_email +#real_system_username = user_email # File to source to set up the environment when running jobs. By default, the # environment in which the Galaxy server starts is used when running jobs diff --git a/config/plugins/interactive_environments/jupyter/static/js/jupyter.js b/config/plugins/interactive_environments/jupyter/static/js/jupyter.js index 3782117fa1f..d4407d1a712 100644 --- a/config/plugins/interactive_environments/jupyter/static/js/jupyter.js +++ b/config/plugins/interactive_environments/jupyter/static/js/jupyter.js @@ -53,7 +53,7 @@ function keep_alive(){ var count_max = 60; // we sleep 15 seconds between requests and the default timeout for the Jupyter container is 120 seconds, so start // with a pretty high ajax timeout. sleep starts low because we want to get the warning up pretty quickly - var spin_state = make_spin_state("IE keep alive", 8000, 16000, 2000, 5000, 15000, 5000, false); + var spin_state = make_spin_state("IE keepalive", 8000, 16000, 2000, 5000, 15000, 5000, false); var success = function(){ console.log("IE keepalive request succeeded"); toastr.clear() @@ -85,7 +85,7 @@ function keep_alive(){ return true; // stop spinning } } - console.log("IE keep alive worker starting"); + console.log("IE keepalive worker starting"); spin(notebook_access_url, false, success, timeout_error, timeout_error, spin_state); } diff --git a/config/plugins/webhooks/demo/tour_generator/helper/__init__.py b/config/plugins/webhooks/demo/tour_generator/helper/__init__.py index 54c5b6e2f57..932997f4a10 100644 --- a/config/plugins/webhooks/demo/tour_generator/helper/__init__.py +++ b/config/plugins/webhooks/demo/tour_generator/helper/__init__.py @@ -1,5 +1,5 @@ -import os import logging +import os from cgi import FieldStorage from galaxy.util import Params diff --git a/cron/add_manual_builds.py b/cron/add_manual_builds.py index 263a2fc284d..22a48029a61 100644 --- a/cron/add_manual_builds.py +++ b/cron/add_manual_builds.py @@ -19,7 +19,7 @@ def add_manual_builds(input_file, build_file, chr_dir): if line.startswith("#"): continue existing_builds.append(line.replace("\n", "").replace("\r", "").split("\t")[0]) - except: + except Exception: continue build_file_out = open(build_file, 'a') for line in open(input_file): @@ -31,7 +31,7 @@ def add_manual_builds(input_file, build_file, chr_dir): name = fields.pop(0) try: # get chrom lens if included in file, otherwise still add build chrs = fields.pop(0).split(",") - except: + except Exception: chrs = [] print>>build_file_out, build + "\t" + name + " (" + build + ")" if chrs: # create len file if provided chrom lens @@ -39,7 +39,7 @@ def add_manual_builds(input_file, build_file, chr_dir): for chr in chrs: print>>chr_len_out, chr.replace("=", "\t") chr_len_out.close() - except: + except Exception: continue build_file_out.close() diff --git a/cron/build_chrom_db.py b/cron/build_chrom_db.py index 60c79b27b9b..8ed49068976 100644 --- a/cron/build_chrom_db.py +++ b/cron/build_chrom_db.py @@ -60,13 +60,13 @@ if __name__ == "__main__": if line.startswith("#"): continue builds.append(line.split("\t")[0]) - except: + except Exception: sys.exit("Bad input file.") else: try: for build in parse_builds.getbuilds("http://genome.cse.ucsc.edu/cgi-bin/das/dsn"): builds.append(build[0]) - except: + except Exception: sys.exit("Unable to retrieve builds.") for build in builds: if build == "?": diff --git a/cron/parse_builds.py b/cron/parse_builds.py index 243440a331b..597c36f8066 100644 --- a/cron/parse_builds.py +++ b/cron/parse_builds.py @@ -15,14 +15,14 @@ import requests def getbuilds(url): try: text = requests.get(url).text - except: + except Exception: print("#Unable to open " + url) print("?\tunspecified (?)") sys.exit(1) try: tree = ElementTree.fromstring(text) - except: + except Exception: print("#Invalid xml passed back from " + url) print("?\tunspecified (?)") sys.exit(1) diff --git a/cron/parse_builds_3_sites.py b/cron/parse_builds_3_sites.py index 4ae43e52765..59bb5d1eae8 100644 --- a/cron/parse_builds_3_sites.py +++ b/cron/parse_builds_3_sites.py @@ -21,13 +21,13 @@ def main(): builds = [] try: text = requests.get(site).text - except: + except Exception: print("#Unable to connect to " + site) continue try: tree = ElementTree.fromstring(text) - except: + except Exception: print("#Invalid xml passed back from " + site) continue print("#Harvested from", site) diff --git a/doc/source/releases/17.09.rst b/doc/source/releases/17.09.rst new file mode 100644 index 00000000000..da30a7417c6 --- /dev/null +++ b/doc/source/releases/17.09.rst @@ -0,0 +1,1019 @@ + +.. to_doc + +17.09 +=============================== + +.. announce_start + +Enhancements +------------------------------- + +.. major_feature + + +.. feature + +* Galaxy Workflow support for GenomeSpace + (thanks to `@nuwang `__ and + `@gvlproject `__). + `Pull Request 1814`_ +* Support tags (including new "name" tags) in data libraries. + (thanks to `@bwlang `__). + `Pull Request 4262`_ +* HiCBrowser as Galaxy IE + (thanks to `@bgruening `__). + `Pull Request 3330`_ +* Synnefo/Pithos+ object store backend + (thanks to `@saxtouri `__). + `Pull Request 3611`_ +* Add job runner for `Chronos `__ + (thanks to `@theosotr `__). + `Pull Request 3946`_, `Pull Request 4120`_ +* Many improvements to the shell job runner (including a new Paramiko based + runner with retry support) + (thanks to `@mvdbeek `__). + `Pull Request 4358`_, `Pull Request 4599`_, `Pull Request 4343`_ +* Add entry for ``empty_extra_files_path`` validator + (thanks to `@gregvonkuster `__). + `Pull Request 3994`_ +* Extend async data sources to support dataset collections + (thanks to `@fabio-cumbo `__). + `Pull Request 4198`_ +* Add a repository uninstall endpoint to the tool dependency API + (thanks to `@mvdbeek `__). + `Pull Request 4248`_ +* Display preview feature for Bam datatype + (thanks to `@ashvark `__). + `Pull Request 4279`_ +* Add Unipept taxonomy viewer plugin + (thanks to `@caleb-easterly `__). + `Pull Request 4310`_ +* Created alphabetic and numerical sort tool for collection operations + (thanks to `@glormph `__). + `Pull Request 4329`_ +* Prevent loading tools that require a newer galaxy + (thanks to `@mvdbeek `__). + `Pull Request 4382`_ +* Add explicit support for gzipped VCF files + (thanks to `@ffinfo `__). + `Pull Request 4254`_ +* Add ptkscmp datatype + (thanks to `@gregvonkuster `__). + `Pull Request 4259`_ +* Add imzML datatype + (thanks to `@bgruening `__). + `Pull Request 4370`_ +* Add deepTools datatypes to Galaxy + (thanks to `@bgruening `__). + `Pull Request 4392`_ +* Add support for the MEME psp format + (thanks to `@gregvonkuster `__). + `Pull Request 4430`_ +* Add biom2 datatype + (thanks to `@shiltemann `__). + `Pull Request 4519`_ +* Add Excel97 Datatype + `Pull Request 4410`_ +* Add mz5 datatype + (thanks to `@bgruening `__). + `Pull Request 4466`_ +* Refactor tool error reporting into plugins and implement a new + plugin for `influxdb `__ + (thanks to `@erasche `__). + `Pull Request 4305`_, `Pull Request 4533`_ +* Implement second toolshed installation UX targetting the API. + `Pull Request 3626`_ +* Tool-Describing-Tours + (thanks to `@anatskiy `__). + `Pull Request 4019`_ + +.. enhancement + +* Revamp configuration and default server for tool shed and Galaxy reports application + (these now use a uwsgi server by default configured with a YAML configuration file). + `Pull Request 3179`_ +* Speed up and optimize the process of identifying public libraries. + `Pull Request 4640`_ +* Numerous data library fixes and improvements - both to the frontend and backend. + `Pull Request 4568`_, `Pull Request 4595`_, + `Pull Request 4594`_, `Pull Request 4579`_, `Pull Request 4560`_ + `Pull Request 4512`_, `Pull Request 4621`_, `Pull Request 4752`_ +* Enhance workflow import API endpoint to allow admins to install repositories corresponding + to a supplied workflow + (thanks to `@manabuishii `__). + `Pull Request 3064`_ +* GFF3 support in filter by attribute + (thanks to `@peterjc `__). + `Pull Request 3076`_ +* Add extension point for user preferences + (thanks to `@bgruening `__). + `Pull Request 3383`_ +* Respect ``expose_user_email`` configuration in data libraries permissions list. + `Pull Request 4611`_ +* Explicitly include PyPI as an ``--extra-index-url`` to pip. + `Pull Request 4674`_ +* Improved Kubernetes support (non-privileged filesystem access, updated k8s Job API target) + (thanks to `@phnmnl `__). + `Pull Request 3972`_ +* New Dependency resolver for the LMOD environment modules system + (thanks to `@arbernard `__). + `Pull Request 4489`_ +* Nicer tool click targets for toolbox + (thanks to `@erasche `__). + `Pull Request 4470`_ +* Implement a "plain" bootstrap theme for the UX + (thanks to `@erasche `__). + `Pull Request 4470`_ +* Add Selenium tests for the "saved histories", "published histories", and + "custom builds" + (thanks to `@anatskiy `__). + `Pull Request 4587`_, `Pull Request 4502`_, `Pull Request 4641`_, +* Dozens of Selenium functional test enhancements and fixes + `Pull Request 3993`_, `Pull Request 4523`_, `Pull Request 4524`_, `Pull Request 4549`_, + `Pull Request 4588`_, `Pull Request 4589`_, `Pull Request 4647`_, + `Pull Request 3992`_, `Pull Request 4003`_, `Pull Request 4053`_, + `Pull Request 4576`_, `Pull Request 4561`_, `Pull Request 4531`_, `Pull Request 4564`_, + `Pull Request 4582`_, `Pull Request 4586`_, `Pull Request 4592`_, `Pull Request 4042`_ +* Prevent graphite from dying loudly + (thanks to `@erasche `__). + `Pull Request 4036`_ +* Updated parameters check for OpenID + (thanks to `@VJalili `__). + `Pull Request 4039`_ +* Tooltip translation . Add Deutsch,Spanish + (thanks to `@ValentinChCloud `__). + `Pull Request 4045`_ +* New Workflow Management Screen UI using JavaScript + (thanks to `@bgruening `__). + `Pull Request 4047`_ +* Improve release checklist + `Pull Request 4077`_ +* Fix French translation errors + (thanks to `@yvanlebras `__). + `Pull Request 4080`_ +* remove the content alert from TS response + `Pull Request 4082`_ +* Touchup .gitignore to not ignore new bundles. + `Pull Request 4091`_ +* New Configure Workflow Menu UI + (thanks to `@bgruening `__). + `Pull Request 4092`_ +* get real user name from username and email (for submission as real user with + drmaa) + (thanks to `@bernt-matthias `__). + `Pull Request 4096`_ +* Security policy + (thanks to `@erasche `__). + `Pull Request 4113`_ +* Improved styling of workflow list. + `Pull Request 4138`_ +* Swap over all URLs to new wiki location + (thanks to `@erasche `__). + `Pull Request 4141`_ +* Documentation fixes and improvements + (thanks to `@nsoranzo `__). + `Pull Request 4146`_ +* Slider enhancement, shared event listeners + `Pull Request 4149`_ +* Add the ability to control job conf plugin loading from environment + variables. + `Pull Request 4154`_ +* Replace various mako templates with client side JavaScript rendering. + `Pull Request 4157`_, `Pull Request 4167`_, `Pull Request 4169`_, + `Pull Request 4201`_, `Pull Request 4311`_, `Pull Request 4377`_, + `Pull Request 4411`_, `Pull Request 4334`_, `Pull Request 4305`_, + `Pull Request 4067`_, `Pull Request 4327`_ +* Related to the above mako transition, rework various "grid" rendering code + to do more on the client side as well. + `Pull Request 4302`_, `Pull Request 4291`_, `Pull Request 4293`_, + `Pull Request 4385`_, `Pull Request 4405`_, + `Pull Request 4449`_, `Pull Request 4263`_, `Pull Request 4341`_, + `Pull Request 4163`_, `Pull Request 4101`_ +* Set content type to application/json for JSON text types. + `Pull Request 4160`_ +* Assorted enhancements for container support (both for mulled container generation + and fetching as well as to new Singularity support). + `Pull Request 4173`_, `Pull Request 4179`_, `Pull Request 4180`_, + `Pull Request 4185`_ +* Make updateucsc.sh.sample usable without any change + (thanks to `@nsoranzo `__). + `Pull Request 4192`_ +* deals with .xls older file extension + (thanks to `@FredericBGA `__). + `Pull Request 4200`_ +* add dev requirement + `Pull Request 4008`_ +* Improve search plugin + (thanks to `@bgruening `__). + `Pull Request 4213`_ +* Upgrading Neo4j IE to 3.1 + (thanks to `@thobalose `__). + `Pull Request 4216`_ +* Running a word count on a compressed fastq file now runs wc on the un… + (thanks to `@dpryan79 `__). + `Pull Request 4226`_ +* "Join two Datasets" (join1) preserve column headers + (thanks to `@lecorguille `__). + `Pull Request 4229`_ +* Add public-only filter for data libraries + (thanks to `@pvanheus `__). + `Pull Request 4232`_ +* Fix import order and Python3 compatibility for 51 files + (thanks to `@nsoranzo `__). + `Pull Request 4236`_ +* Sniff fastqsanger and prefer it over fastq if the quality scores match + (thanks to `@dpryan79 `__). + `Pull Request 4237`_ +* Enable skipping comment lines while sniffing files + (thanks to `@dpryan79 `__). + `Pull Request 4239`_ +* Expose 4 more rows from the galaxy_user table to help out sys admins + (thanks to `@XDtim `__). + `Pull Request 4255`_ +* Change 'register or login' to just 'login' if 'allow_user_creation=False' + (thanks to `@scholtalbers `__). + `Pull Request 4258`_ +* Keep tool parameters when rerunning a job + (thanks to `@mvdbeek `__). + `Pull Request 4271`_ +* More uniform backend code for generating page titles + (thanks to `@erasche `__). + `Pull Request 4272`_, `Pull Request 4578`_ +* Fix blockquote>p sizing + (thanks to `@erasche `__). + `Pull Request 4273`_ +* Expose more user properties to admins via the API. + `Pull Request 4274`_ +* Ensure tags are copied and presented when moving collections + (thanks to `@pvanheus `__). + `Pull Request 4277`_ +* Add ``test_errors`` to .gitignore. + `Pull Request 4278`_ +* Implement package locking for node modules. + `Pull Request 4283`_ +* Enhancement for Phylocanvas plugin + (thanks to `@bgruening `__). + `Pull Request 4284`_ +* Improve security via local network access restrictions + (thanks to `@erasche `__). + `Pull Request 4289`_ +* Enhancement for Phyloviz viz plugin + (thanks to `@bgruening `__). + `Pull Request 4292`_ +* Allow submitting the galaxy jobs as a predefined system user using + ``real_system_username`` + (thanks to `@ashvark `__). + `Pull Request 4294`_ +* Update Japanese translation + (thanks to `@manabuishii `__). + `Pull Request 4304`_ +* Allow localization of more UI strings + (thanks to `@manabuishii `__). + `Pull Request 4306`_, `Pull Request 4307`_ +* Allow import of history archives via simple file upload + (thanks to `@mvdbeek `__). + `Pull Request 4326`_ +* Fix some French errors + (thanks to `@loraine-gueguen `__). + `Pull Request 4337`_ +* Updated the version requirements + (thanks to `@VJalili `__). + `Pull Request 4342`_ +* CSRF protection for login, logout, and user registration (most parts of the + Galaxy UI still don't have explicit CSRF protection). + `Pull Request 4365`_, `Pull Request 4710`_ +* Implement ``default_identifier_source`` for tool collection outputs and sort + input keys by default + (thanks to `@mvdbeek `__). + `Pull Request 4368`_, `Pull Request 4380`_ +* Galactic Radio Telescope Update + (thanks to `@erasche `__). + `Pull Request 4376`_ +* Show minimum required galaxy version in tool shed and galaxy installation + process + (thanks to `@mvdbeek `__). + `Pull Request 4386`_ +* Cleanup of Unit Test Code for Loading Tools + `Pull Request 4387`_ +* Refactor ToolOutputCollectionStructure... + `Pull Request 4389`_ +* Slightly improve workflow warnings/errors logging. + `Pull Request 4396`_ +* Better Error Summaries for API Tests + `Pull Request 4397`_ +* Fix import order and Python3 compatibility for lib/galaxy/web/base/ + (thanks to `@nsoranzo `__). + `Pull Request 4403`_ +* Generalize allow_library_path_paste to allow_path_paste. + `Pull Request 4404`_ +* Small GRT bugfixes + (thanks to `@erasche `__). + `Pull Request 4408`_ +* Update conda channel order to sync with Bioconda + (thanks to `@nsoranzo `__). + `Pull Request 4409`_ +* Fixes and enhancements for the upload API + `Pull Request 4417`_ +* Avoid adding `(imported from API)` to workflows + (thanks to `@chambm `__). + `Pull Request 4434`_ +* Enhanced tool options for dataset discovery + `Pull Request 4437`_ +* Augment form module separation + `Pull Request 4438`_ +* Fix E201 and E202 style errors + (thanks to `@nsoranzo `__). + `Pull Request 4440`_ +* Add autopep8 script to help rebasing branches after `#4440 + `__. + `Pull Request 4447`_ +* Uniform indentation of multiline if conditionals + (thanks to `@nsoranzo `__). + `Pull Request 4455`_ +* Small logging improvements + (thanks to `@nsoranzo `__). + `Pull Request 4456`_ +* Improvements to `Sentry `__ integration + (thanks to `@erasche `__). + `Pull Request 4457`_, `Pull Request 4471`_ +* Fix for GIEs to not automatically uppercase environment variables + (thanks to `@xgaia `__). + `Pull Request 4458`_, `Pull Request 4454`_ +* Fix security checking of WorkflowInvocation for published workflows + (thanks to `@mvdbeek `__). + `Pull Request 4465`_ +* Show more items per page in saved history view and directly show tags + (thanks to `@mvdbeek `__). + `Pull Request 4467`_ +* A variety of usability improvements to the workflow index page (show tags, + allow import by drag-and-drop, and avoid unneeded page refreshs) + (thanks to `@mvdbeek `__). + `Pull Request 4476`_, `Pull Request 4369`_ +* Use pysam instead of samtools binary when discovering BAM metadata in one + place (samtools is still required by Galaxy) + (thanks to `@nsoranzo `__). + `Pull Request 4479`_ +* Replace exclamation with a clock icon for "new" datasets in the history panel. + `Pull Request 4485`_ +* Minor copy datasets dialog improvement. + `Pull Request 4486`_ +* 41% reduction in freiburg galaxy startup time + (thanks to `@erasche `__). + `Pull Request 4495`_ +* Allow paramiko cli to recover from ssh timeout + (thanks to `@mvdbeek `__). + `Pull Request 4503`_ +* Tests and clarifications for composite uploads. + `Pull Request 4505`_ +* Load tools with collection type source attributes into the workflow editor + `Pull Request 4514`_ +* Display d3 hierarchy datatype in upload interface + `Pull Request 4522`_ +* Sync non-CWL galaxy-lib changes. + `Pull Request 4535`_ +* Add a small howto on profiling galaxy code + (thanks to `@mvdbeek `__). + `Pull Request 4542`_ +* allow linking, posix and spaces conversions in datalib imports + `Pull Request 4547`_ +* Allow exporting workflows when tool is uninstalled + (thanks to `@mvdbeek `__). + `Pull Request 4553`_ +* Lower threshold for auto-matching dataset pairs in the collection builder + `Pull Request 4555`_ +* Allow working with pbzip2 compressed files + (thanks to `@mvdbeek `__). + `Pull Request 4559`_ +* add logging to ts index building + `Pull Request 4567`_ +* Add show/hide deleted/hidden links when history is filtered... + (thanks to `@chambm `__). + `Pull Request 4581`_ +* Python 3 fixes for set_metadata.py + `Pull Request 4607`_ +* Allow adding new data tables without restart + (thanks to `@mvdbeek `__). + `Pull Request 4617`_ +* remove .git and .hg from recursive file search + (thanks to `@bgruening `__). + `Pull Request 4636`_ +* Better handling of long id secrets when generating per-kind encryption keys. + `Pull Request 4713`_ + +.. small_enhancement + +* Add test case clarifying datasets do get "renamed" by rename PJA in + collections. + `Pull Request 3983`_ +* Add some test tools for collection job failures. + `Pull Request 4044`_ +* Merge ShedToolLineage and StockLineage to ToolLineage + (thanks to `@mvdbeek `__). + `Pull Request 4119`_ +* Move PlantTribes datatypes to a separate file with enhancements and fixes + (thanks to `@gregvonkuster `__). + `Pull Request 4137`_ +* Move ``galaxy.tools.toolbox.cache`` to ``galaxy.tools.cache``. + `Pull Request 4155`_ +* Small code style and error message fixes for data library code + (thanks to `@bwlang `__). + `Pull Request 4250`_ +* Refactors tag manager to not consume the unneeded ``app`` argument + (thanks to `@bwlang `__). + `Pull Request 4253`_ +* Use contextmanager when using ``compression_util.get_fileobj()`` + (thanks to `@mvdbeek `__). + `Pull Request 4270`_ +* Swap the deprecated ``unescape()`` for ``decodeURIComponent``. + `Pull Request 4321`_ +* More consistent formatting for model mapping code + (thanks to `@VJalili `__). + `Pull Request 4333`_ +* Merge configure menu with main workflow view + (thanks to `@bgruening `__). + `Pull Request 4353`_ +* Delete ``conda_exec_home`` instead of ``env['HOME']`` + (thanks to `@mvdbeek `__). + `Pull Request 4360`_ +* Replace list with generator when iterating headers in datatypes code + (thanks to `@mvdbeek `__). + `Pull Request 4388`_ +* Get tools with ``tool_version`` in more places + (thanks to `@mvdbeek `__). + `Pull Request 4391`_ +* Fix issues identified by the JavaScript linting application + `lgtm `__. + (thanks to `@xiemaisi `__). + `Pull Request 4421`_ +* Remove /mobile and associated templates (the code was unused and broken). + `Pull Request 4494`_ +* Workflow loading speedup + (thanks to `@mvdbeek `__). + `Pull Request 4500`_ +* Prevent transient job state API test failures from failing the build. + `Pull Request 4510`_ +* More robust workflow invocation testing. + `Pull Request 4530`_ +* Refactor history import/export tests to allow collection testing. + `Pull Request 4534`_ +* Refactor test modules toward cleaner dependencies + `Pull Request 4536`_ +* Prevent in-place editing of uploaded files if files are imported from the + FTP folder + (thanks to `@mvdbeek `__). + `Pull Request 4539`_ +* Speedup toolform building + (thanks to `@mvdbeek `__). + `Pull Request 4541`_ +* Check user roles only once if user has no roles + (thanks to `@mvdbeek `__). + `Pull Request 4546`_ +* Remove unused bam to bai converter + (thanks to `@mvdbeek `__). + `Pull Request 4598`_ +* Remove various unreachable statements + (thanks to `@erasche `__). + `Pull Request 4603`_ +* Refactored a dataset variable to HDA + (thanks to `@VJalili `__). + `Pull Request 4630`_ +* Disable MacOS tests on TravisCI. + `Pull Request 4631`_ + + +Fixes +------------------------------- + +.. major_bug + +.. bug + +* Various hashtag (or name tag) fixes (also backported to 17.05). + `Pull Request 4139`_, `Pull Request 4188`_ +* Simplify RC creation in Makefile. + `Pull Request 4011`_ +* Do not recurse in ``ensure_installed()`` + (thanks to `@bernt-matthias `__). + `Pull Request 4049`_ +* Minor fixes for new locales, rebuild of client. + `Pull Request 4050`_ +* French translation error + (thanks to `@yvanlebras `__). + `Pull Request 4051`_ +* Minor history tour tweaks. + `Pull Request 4061`_ +* Improve tour button logic + (thanks to `@bagnacan `__). + `Pull Request 4062`_ +* Bug fix to prevent fetching the file path of purged files + (thanks to `@dpryan79 `__). + `Pull Request 4066`_ +* ToolShed tool dependency install fixes + (thanks to `@nsoranzo `__). + `Pull Request 4105`_ +* Fix legacy Python path for genome diversity tools from miller lab. + `Pull Request 4117`_ +* Avoid locale specific string.letters for job_name + (thanks to `@peterjc `__). + `Pull Request 4121`_ +* Fix typo in job_conf.xml.sample + (thanks to `@manabuishii `__). + `Pull Request 4126`_ +* Hide error highlighting if user interacts with highlighted field + `Pull Request 4147`_ +* Fix webhooks loading URL. + `Pull Request 4158`_ +* Fix older GIE config sample description. + `Pull Request 4164`_ +* Fix `#3990 `__, don't + chown non-galaxy files + (thanks to `@dpryan79 `__). + `Pull Request 4186`_ +* Debug of script library_upload_dir.py + (thanks to `@FredericBGA `__). + `Pull Request 4199`_ +* Correct name of neo4j datatype class + (thanks to `@pvanheus `__). + `Pull Request 4223`_ +* Fix ``Registry.get_datatype_by_extension()`` to return ``None`` if ``ext`` is unknown + (thanks to `@nsoranzo `__). + `Pull Request 4224`_ +* Avoid broken version of Mercurial in conda + (thanks to `@bwlang `__). + `Pull Request 4227`_ +* Fix empty tabular output error when using discover_datasets. + (thanks to `@pkrog `__). + `Pull Request 4240`_ +* Fix importing old exported histories. + (thanks to `@cche `__). + `Pull Request 4268`_ +* Update ``tool_conf.xml.main`` to reflect usegalaxy.org's current state. + `Pull Request 4295`_ +* Fix ``TypeError`` when uploading large files from FTP to S3. + (thanks to `@jlhg `__). + `Pull Request 4315`_ +* Fix for loading tools when ``tool.lineage is None``. + `Pull Request 4317`_ +* Fix for the caching of location filenames when they are broken symlinks. + `Pull Request 4318`_ +* Remove print debug option from toolshed. + `Pull Request 4332`_ +* Fix default output labels for subworkflows + (thanks to `@mvdbeek `__). + `Pull Request 4346`_ +* Search overlay plugin bug fix + (thanks to `@bgruening `__). + `Pull Request 4348`_ +* Tool version and lineage fixes + (thanks to `@mvdbeek `__). + `Pull Request 4375`_ +* Fix bug in ``scripts/extract_dataset_part.py`` during task splitting. + `Pull Request 4383`_ +* Fix ``get_tool`` returning list when it shouldn't. + `Pull Request 4390`_ +* Bug fix for loading subworkflows from workflow descriptions. + `Pull Request 4394`_ +* Bug fix ``__str__`` method on tool parsers that previously would throw an ``Exception``. + `Pull Request 4395`_ +* Add missing chemical formats to ``datatypes_conf.xml.sample`` + (thanks to `@nsoranzo `__). + `Pull Request 4413`_ +* Don't cast ``tool_version`` to string if ``tool_version`` is None-type + (thanks to `@mvdbeek `__). + `Pull Request 4420`_ +* Some unicoding for local runner + (thanks to `@erasche `__). + `Pull Request 4426`_ +* Break connection in workflow editor if necessary + (thanks to `@mvdbeek `__). + `Pull Request 4431`_ +* Fix private role validation. + `Pull Request 4432`_ +* Remove print of non-existent attribute 'content' + (thanks to `@chambm `__). + `Pull Request 4439`_ +* Fix quota function name + `Pull Request 4469`_ +* Fixes for VCF/BCF datatypes + (thanks to `@nsoranzo `__). + `Pull Request 4477`_ +* Validate workflow step after step argument injection. + `Pull Request 4483`_ +* Fix drag and drop from history for Firefox + `Pull Request 4496`_ +* 2017-08 Security Patch + (thanks to `@erasche `__). + `Pull Request 4501`_ +* Fix history import if using symlink in database directory + (thanks to `@FredericBGA `__). + `Pull Request 4511`_ +* Fix missing tools in the workflow editor + (thanks to `@mvdbeek `__). + `Pull Request 4552`_ +* Prevent unbound variable error history controller. + `Pull Request 4557`_ +* Backport uwsgi fix from `#2836 + `__. + `Pull Request 4565`_ +* Bug fix startup of galaxy when webhooks dir is empty + (thanks to `@mvdbeek `__). + `Pull Request 4570`_ +* Fix delete option in history menu. + `Pull Request 4574`_ +* Cancel workflow invocations when histories are deleted. + `Pull Request 4580`_ +* Multiview missing histories fix + `Pull Request 4610`_ +* Fix virtualenv activation for some scripts + (thanks to `@nsoranzo `__). + `Pull Request 4616`_ +* Pulsar remote metadata fixes + `Pull Request 4622`_ +* Swap sanitize whitelist form to use a post. + `Pull Request 4625`_ +* Fix various spelling and grammatical error fixes. + `Pull Request 4626`_ +* Typo fix + (thanks to `@VJalili `__). + `Pull Request 4628`_ +* Updated function description and fix some typos + (thanks to `@VJalili `__). + `Pull Request 4629`_ +* Fix display of data in "custom builds" page + (thanks to `@anatskiy `__). + `Pull Request 4634`_ +* Do not wrap lines in the upload URL fetch. + `Pull Request 4639`_ +* Explicitly write registry.xml when creating a job for the upload tool + (thanks to `@mvdbeek `__). + `Pull Request 4644`_, `Pull Request 4600`_ +* Fix links on workflow, history items. + `Pull Request 4656`_ +* Fix for modules resolver. + `Pull Request 4663`_ +* Remove overly chatty debug statement. + `Pull Request 4671`_ +* Client side fixes for GIEs. + `Pull Request 4680`_ +* Update target versions of conda and conda-build + (thanks to `@nsoranzo `__). + `Pull Request 4701`_ +* Correct base route for workflows, allowing proxy-prefix to work. + `Pull Request 4705`_ +* Cachebust IE require'd files (jupyter.js, etc). + `Pull Request 4714`_ +* Add message (error and info) display to workflows display list. + `Pull Request 4716`_ +* If the newest version of a tool is hidden, load the newest older version, if + any, into the tool panel. + `Pull Request 4726`_ +* Fix missing support for command_inject when using containers lib in GIEs. + `Pull Request 4740`_ +* Fix t, a, g, s returned in to_dict() method + (thanks to `@mvdbeek `__). + `Pull Request 4742`_ +* Fix joiner tool to inherit datatype from the input format + `Pull Request 4745`_ +* Fix auth with ``ldaps://`` + (thanks to `@abretaud `__). + `Pull Request 4748`_ +* Force onload webhooks to wait for Galaxy object (and root) resolution. + `Pull Request 4750`_ +* GIEs: Grandfather automatic uppercasing of some env_override variables + `Pull Request 4760`_ + +.. github_links +.. _Pull Request 1814: https://github.com/galaxyproject/galaxy/pull/1814 +.. _Pull Request 3064: https://github.com/galaxyproject/galaxy/pull/3064 +.. _Pull Request 3076: https://github.com/galaxyproject/galaxy/pull/3076 +.. _Pull Request 3179: https://github.com/galaxyproject/galaxy/pull/3179 +.. _Pull Request 3330: https://github.com/galaxyproject/galaxy/pull/3330 +.. _Pull Request 3383: https://github.com/galaxyproject/galaxy/pull/3383 +.. _Pull Request 3611: https://github.com/galaxyproject/galaxy/pull/3611 +.. _Pull Request 3626: https://github.com/galaxyproject/galaxy/pull/3626 +.. _Pull Request 3946: https://github.com/galaxyproject/galaxy/pull/3946 +.. _Pull Request 3972: https://github.com/galaxyproject/galaxy/pull/3972 +.. _Pull Request 3983: https://github.com/galaxyproject/galaxy/pull/3983 +.. _Pull Request 3992: https://github.com/galaxyproject/galaxy/pull/3992 +.. _Pull Request 3993: https://github.com/galaxyproject/galaxy/pull/3993 +.. _Pull Request 3994: https://github.com/galaxyproject/galaxy/pull/3994 +.. _Pull Request 3995: https://github.com/galaxyproject/galaxy/pull/3995 +.. _Pull Request 4003: https://github.com/galaxyproject/galaxy/pull/4003 +.. _Pull Request 4008: https://github.com/galaxyproject/galaxy/pull/4008 +.. _Pull Request 4010: https://github.com/galaxyproject/galaxy/pull/4010 +.. _Pull Request 4011: https://github.com/galaxyproject/galaxy/pull/4011 +.. _Pull Request 4019: https://github.com/galaxyproject/galaxy/pull/4019 +.. _Pull Request 4036: https://github.com/galaxyproject/galaxy/pull/4036 +.. _Pull Request 4039: https://github.com/galaxyproject/galaxy/pull/4039 +.. _Pull Request 4042: https://github.com/galaxyproject/galaxy/pull/4042 +.. _Pull Request 4044: https://github.com/galaxyproject/galaxy/pull/4044 +.. _Pull Request 4045: https://github.com/galaxyproject/galaxy/pull/4045 +.. _Pull Request 4047: https://github.com/galaxyproject/galaxy/pull/4047 +.. _Pull Request 4049: https://github.com/galaxyproject/galaxy/pull/4049 +.. _Pull Request 4050: https://github.com/galaxyproject/galaxy/pull/4050 +.. _Pull Request 4051: https://github.com/galaxyproject/galaxy/pull/4051 +.. _Pull Request 4053: https://github.com/galaxyproject/galaxy/pull/4053 +.. _Pull Request 4061: https://github.com/galaxyproject/galaxy/pull/4061 +.. _Pull Request 4062: https://github.com/galaxyproject/galaxy/pull/4062 +.. _Pull Request 4066: https://github.com/galaxyproject/galaxy/pull/4066 +.. _Pull Request 4067: https://github.com/galaxyproject/galaxy/pull/4067 +.. _Pull Request 4077: https://github.com/galaxyproject/galaxy/pull/4077 +.. _Pull Request 4080: https://github.com/galaxyproject/galaxy/pull/4080 +.. _Pull Request 4081: https://github.com/galaxyproject/galaxy/pull/4081 +.. _Pull Request 4082: https://github.com/galaxyproject/galaxy/pull/4082 +.. _Pull Request 4087: https://github.com/galaxyproject/galaxy/pull/4087 +.. _Pull Request 4088: https://github.com/galaxyproject/galaxy/pull/4088 +.. _Pull Request 4091: https://github.com/galaxyproject/galaxy/pull/4091 +.. _Pull Request 4092: https://github.com/galaxyproject/galaxy/pull/4092 +.. _Pull Request 4093: https://github.com/galaxyproject/galaxy/pull/4093 +.. _Pull Request 4096: https://github.com/galaxyproject/galaxy/pull/4096 +.. _Pull Request 4098: https://github.com/galaxyproject/galaxy/pull/4098 +.. _Pull Request 4101: https://github.com/galaxyproject/galaxy/pull/4101 +.. _Pull Request 4105: https://github.com/galaxyproject/galaxy/pull/4105 +.. _Pull Request 4112: https://github.com/galaxyproject/galaxy/pull/4112 +.. _Pull Request 4113: https://github.com/galaxyproject/galaxy/pull/4113 +.. _Pull Request 4117: https://github.com/galaxyproject/galaxy/pull/4117 +.. _Pull Request 4119: https://github.com/galaxyproject/galaxy/pull/4119 +.. _Pull Request 4120: https://github.com/galaxyproject/galaxy/pull/4120 +.. _Pull Request 4121: https://github.com/galaxyproject/galaxy/pull/4121 +.. _Pull Request 4124: https://github.com/galaxyproject/galaxy/pull/4124 +.. _Pull Request 4126: https://github.com/galaxyproject/galaxy/pull/4126 +.. _Pull Request 4137: https://github.com/galaxyproject/galaxy/pull/4137 +.. _Pull Request 4138: https://github.com/galaxyproject/galaxy/pull/4138 +.. _Pull Request 4139: https://github.com/galaxyproject/galaxy/pull/4139 +.. _Pull Request 4141: https://github.com/galaxyproject/galaxy/pull/4141 +.. _Pull Request 4146: https://github.com/galaxyproject/galaxy/pull/4146 +.. _Pull Request 4147: https://github.com/galaxyproject/galaxy/pull/4147 +.. _Pull Request 4149: https://github.com/galaxyproject/galaxy/pull/4149 +.. _Pull Request 4154: https://github.com/galaxyproject/galaxy/pull/4154 +.. _Pull Request 4155: https://github.com/galaxyproject/galaxy/pull/4155 +.. _Pull Request 4156: https://github.com/galaxyproject/galaxy/pull/4156 +.. _Pull Request 4157: https://github.com/galaxyproject/galaxy/pull/4157 +.. _Pull Request 4158: https://github.com/galaxyproject/galaxy/pull/4158 +.. _Pull Request 4160: https://github.com/galaxyproject/galaxy/pull/4160 +.. _Pull Request 4163: https://github.com/galaxyproject/galaxy/pull/4163 +.. _Pull Request 4164: https://github.com/galaxyproject/galaxy/pull/4164 +.. _Pull Request 4167: https://github.com/galaxyproject/galaxy/pull/4167 +.. _Pull Request 4169: https://github.com/galaxyproject/galaxy/pull/4169 +.. _Pull Request 4173: https://github.com/galaxyproject/galaxy/pull/4173 +.. _Pull Request 4175: https://github.com/galaxyproject/galaxy/pull/4175 +.. _Pull Request 4179: https://github.com/galaxyproject/galaxy/pull/4179 +.. _Pull Request 4180: https://github.com/galaxyproject/galaxy/pull/4180 +.. _Pull Request 4185: https://github.com/galaxyproject/galaxy/pull/4185 +.. _Pull Request 4186: https://github.com/galaxyproject/galaxy/pull/4186 +.. _Pull Request 4188: https://github.com/galaxyproject/galaxy/pull/4188 +.. _Pull Request 4192: https://github.com/galaxyproject/galaxy/pull/4192 +.. _Pull Request 4198: https://github.com/galaxyproject/galaxy/pull/4198 +.. _Pull Request 4199: https://github.com/galaxyproject/galaxy/pull/4199 +.. _Pull Request 4200: https://github.com/galaxyproject/galaxy/pull/4200 +.. _Pull Request 4201: https://github.com/galaxyproject/galaxy/pull/4201 +.. _Pull Request 4207: https://github.com/galaxyproject/galaxy/pull/4207 +.. _Pull Request 4208: https://github.com/galaxyproject/galaxy/pull/4208 +.. _Pull Request 4210: https://github.com/galaxyproject/galaxy/pull/4210 +.. _Pull Request 4213: https://github.com/galaxyproject/galaxy/pull/4213 +.. _Pull Request 4216: https://github.com/galaxyproject/galaxy/pull/4216 +.. _Pull Request 4223: https://github.com/galaxyproject/galaxy/pull/4223 +.. _Pull Request 4224: https://github.com/galaxyproject/galaxy/pull/4224 +.. _Pull Request 4226: https://github.com/galaxyproject/galaxy/pull/4226 +.. _Pull Request 4227: https://github.com/galaxyproject/galaxy/pull/4227 +.. _Pull Request 4229: https://github.com/galaxyproject/galaxy/pull/4229 +.. _Pull Request 4232: https://github.com/galaxyproject/galaxy/pull/4232 +.. _Pull Request 4236: https://github.com/galaxyproject/galaxy/pull/4236 +.. _Pull Request 4237: https://github.com/galaxyproject/galaxy/pull/4237 +.. _Pull Request 4239: https://github.com/galaxyproject/galaxy/pull/4239 +.. _Pull Request 4240: https://github.com/galaxyproject/galaxy/pull/4240 +.. _Pull Request 4248: https://github.com/galaxyproject/galaxy/pull/4248 +.. _Pull Request 4250: https://github.com/galaxyproject/galaxy/pull/4250 +.. _Pull Request 4253: https://github.com/galaxyproject/galaxy/pull/4253 +.. _Pull Request 4254: https://github.com/galaxyproject/galaxy/pull/4254 +.. _Pull Request 4255: https://github.com/galaxyproject/galaxy/pull/4255 +.. _Pull Request 4258: https://github.com/galaxyproject/galaxy/pull/4258 +.. _Pull Request 4259: https://github.com/galaxyproject/galaxy/pull/4259 +.. _Pull Request 4262: https://github.com/galaxyproject/galaxy/pull/4262 +.. _Pull Request 4263: https://github.com/galaxyproject/galaxy/pull/4263 +.. _Pull Request 4268: https://github.com/galaxyproject/galaxy/pull/4268 +.. _Pull Request 4270: https://github.com/galaxyproject/galaxy/pull/4270 +.. _Pull Request 4271: https://github.com/galaxyproject/galaxy/pull/4271 +.. _Pull Request 4272: https://github.com/galaxyproject/galaxy/pull/4272 +.. _Pull Request 4273: https://github.com/galaxyproject/galaxy/pull/4273 +.. _Pull Request 4274: https://github.com/galaxyproject/galaxy/pull/4274 +.. _Pull Request 4277: https://github.com/galaxyproject/galaxy/pull/4277 +.. _Pull Request 4278: https://github.com/galaxyproject/galaxy/pull/4278 +.. _Pull Request 4279: https://github.com/galaxyproject/galaxy/pull/4279 +.. _Pull Request 4281: https://github.com/galaxyproject/galaxy/pull/4281 +.. _Pull Request 4283: https://github.com/galaxyproject/galaxy/pull/4283 +.. _Pull Request 4284: https://github.com/galaxyproject/galaxy/pull/4284 +.. _Pull Request 4285: https://github.com/galaxyproject/galaxy/pull/4285 +.. _Pull Request 4289: https://github.com/galaxyproject/galaxy/pull/4289 +.. _Pull Request 4291: https://github.com/galaxyproject/galaxy/pull/4291 +.. _Pull Request 4292: https://github.com/galaxyproject/galaxy/pull/4292 +.. _Pull Request 4293: https://github.com/galaxyproject/galaxy/pull/4293 +.. _Pull Request 4294: https://github.com/galaxyproject/galaxy/pull/4294 +.. _Pull Request 4295: https://github.com/galaxyproject/galaxy/pull/4295 +.. _Pull Request 4302: https://github.com/galaxyproject/galaxy/pull/4302 +.. _Pull Request 4304: https://github.com/galaxyproject/galaxy/pull/4304 +.. _Pull Request 4305: https://github.com/galaxyproject/galaxy/pull/4305 +.. _Pull Request 4306: https://github.com/galaxyproject/galaxy/pull/4306 +.. _Pull Request 4307: https://github.com/galaxyproject/galaxy/pull/4307 +.. _Pull Request 4309: https://github.com/galaxyproject/galaxy/pull/4309 +.. _Pull Request 4310: https://github.com/galaxyproject/galaxy/pull/4310 +.. _Pull Request 4311: https://github.com/galaxyproject/galaxy/pull/4311 +.. _Pull Request 4315: https://github.com/galaxyproject/galaxy/pull/4315 +.. _Pull Request 4317: https://github.com/galaxyproject/galaxy/pull/4317 +.. _Pull Request 4318: https://github.com/galaxyproject/galaxy/pull/4318 +.. _Pull Request 4321: https://github.com/galaxyproject/galaxy/pull/4321 +.. _Pull Request 4326: https://github.com/galaxyproject/galaxy/pull/4326 +.. _Pull Request 4327: https://github.com/galaxyproject/galaxy/pull/4327 +.. _Pull Request 4329: https://github.com/galaxyproject/galaxy/pull/4329 +.. _Pull Request 4332: https://github.com/galaxyproject/galaxy/pull/4332 +.. _Pull Request 4333: https://github.com/galaxyproject/galaxy/pull/4333 +.. _Pull Request 4334: https://github.com/galaxyproject/galaxy/pull/4334 +.. _Pull Request 4337: https://github.com/galaxyproject/galaxy/pull/4337 +.. _Pull Request 4341: https://github.com/galaxyproject/galaxy/pull/4341 +.. _Pull Request 4342: https://github.com/galaxyproject/galaxy/pull/4342 +.. _Pull Request 4343: https://github.com/galaxyproject/galaxy/pull/4343 +.. _Pull Request 4346: https://github.com/galaxyproject/galaxy/pull/4346 +.. _Pull Request 4348: https://github.com/galaxyproject/galaxy/pull/4348 +.. _Pull Request 4353: https://github.com/galaxyproject/galaxy/pull/4353 +.. _Pull Request 4357: https://github.com/galaxyproject/galaxy/pull/4357 +.. _Pull Request 4358: https://github.com/galaxyproject/galaxy/pull/4358 +.. _Pull Request 4360: https://github.com/galaxyproject/galaxy/pull/4360 +.. _Pull Request 4365: https://github.com/galaxyproject/galaxy/pull/4365 +.. _Pull Request 4368: https://github.com/galaxyproject/galaxy/pull/4368 +.. _Pull Request 4369: https://github.com/galaxyproject/galaxy/pull/4369 +.. _Pull Request 4370: https://github.com/galaxyproject/galaxy/pull/4370 +.. _Pull Request 4371: https://github.com/galaxyproject/galaxy/pull/4371 +.. _Pull Request 4373: https://github.com/galaxyproject/galaxy/pull/4373 +.. _Pull Request 4375: https://github.com/galaxyproject/galaxy/pull/4375 +.. _Pull Request 4376: https://github.com/galaxyproject/galaxy/pull/4376 +.. _Pull Request 4377: https://github.com/galaxyproject/galaxy/pull/4377 +.. _Pull Request 4380: https://github.com/galaxyproject/galaxy/pull/4380 +.. _Pull Request 4382: https://github.com/galaxyproject/galaxy/pull/4382 +.. _Pull Request 4383: https://github.com/galaxyproject/galaxy/pull/4383 +.. _Pull Request 4385: https://github.com/galaxyproject/galaxy/pull/4385 +.. _Pull Request 4386: https://github.com/galaxyproject/galaxy/pull/4386 +.. _Pull Request 4387: https://github.com/galaxyproject/galaxy/pull/4387 +.. _Pull Request 4388: https://github.com/galaxyproject/galaxy/pull/4388 +.. _Pull Request 4389: https://github.com/galaxyproject/galaxy/pull/4389 +.. _Pull Request 4390: https://github.com/galaxyproject/galaxy/pull/4390 +.. _Pull Request 4391: https://github.com/galaxyproject/galaxy/pull/4391 +.. _Pull Request 4392: https://github.com/galaxyproject/galaxy/pull/4392 +.. _Pull Request 4394: https://github.com/galaxyproject/galaxy/pull/4394 +.. _Pull Request 4395: https://github.com/galaxyproject/galaxy/pull/4395 +.. _Pull Request 4396: https://github.com/galaxyproject/galaxy/pull/4396 +.. _Pull Request 4397: https://github.com/galaxyproject/galaxy/pull/4397 +.. _Pull Request 4403: https://github.com/galaxyproject/galaxy/pull/4403 +.. _Pull Request 4404: https://github.com/galaxyproject/galaxy/pull/4404 +.. _Pull Request 4405: https://github.com/galaxyproject/galaxy/pull/4405 +.. _Pull Request 4408: https://github.com/galaxyproject/galaxy/pull/4408 +.. _Pull Request 4409: https://github.com/galaxyproject/galaxy/pull/4409 +.. _Pull Request 4410: https://github.com/galaxyproject/galaxy/pull/4410 +.. _Pull Request 4411: https://github.com/galaxyproject/galaxy/pull/4411 +.. _Pull Request 4413: https://github.com/galaxyproject/galaxy/pull/4413 +.. _Pull Request 4417: https://github.com/galaxyproject/galaxy/pull/4417 +.. _Pull Request 4420: https://github.com/galaxyproject/galaxy/pull/4420 +.. _Pull Request 4421: https://github.com/galaxyproject/galaxy/pull/4421 +.. _Pull Request 4426: https://github.com/galaxyproject/galaxy/pull/4426 +.. _Pull Request 4427: https://github.com/galaxyproject/galaxy/pull/4427 +.. _Pull Request 4430: https://github.com/galaxyproject/galaxy/pull/4430 +.. _Pull Request 4431: https://github.com/galaxyproject/galaxy/pull/4431 +.. _Pull Request 4432: https://github.com/galaxyproject/galaxy/pull/4432 +.. _Pull Request 4434: https://github.com/galaxyproject/galaxy/pull/4434 +.. _Pull Request 4437: https://github.com/galaxyproject/galaxy/pull/4437 +.. _Pull Request 4438: https://github.com/galaxyproject/galaxy/pull/4438 +.. _Pull Request 4439: https://github.com/galaxyproject/galaxy/pull/4439 +.. _Pull Request 4440: https://github.com/galaxyproject/galaxy/pull/4440 +.. _Pull Request 4445: https://github.com/galaxyproject/galaxy/pull/4445 +.. _Pull Request 4446: https://github.com/galaxyproject/galaxy/pull/4446 +.. _Pull Request 4447: https://github.com/galaxyproject/galaxy/pull/4447 +.. _Pull Request 4449: https://github.com/galaxyproject/galaxy/pull/4449 +.. _Pull Request 4454: https://github.com/galaxyproject/galaxy/pull/4454 +.. _Pull Request 4455: https://github.com/galaxyproject/galaxy/pull/4455 +.. _Pull Request 4456: https://github.com/galaxyproject/galaxy/pull/4456 +.. _Pull Request 4457: https://github.com/galaxyproject/galaxy/pull/4457 +.. _Pull Request 4458: https://github.com/galaxyproject/galaxy/pull/4458 +.. _Pull Request 4465: https://github.com/galaxyproject/galaxy/pull/4465 +.. _Pull Request 4466: https://github.com/galaxyproject/galaxy/pull/4466 +.. _Pull Request 4467: https://github.com/galaxyproject/galaxy/pull/4467 +.. _Pull Request 4469: https://github.com/galaxyproject/galaxy/pull/4469 +.. _Pull Request 4470: https://github.com/galaxyproject/galaxy/pull/4470 +.. _Pull Request 4471: https://github.com/galaxyproject/galaxy/pull/4471 +.. _Pull Request 4476: https://github.com/galaxyproject/galaxy/pull/4476 +.. _Pull Request 4477: https://github.com/galaxyproject/galaxy/pull/4477 +.. _Pull Request 4479: https://github.com/galaxyproject/galaxy/pull/4479 +.. _Pull Request 4483: https://github.com/galaxyproject/galaxy/pull/4483 +.. _Pull Request 4485: https://github.com/galaxyproject/galaxy/pull/4485 +.. _Pull Request 4486: https://github.com/galaxyproject/galaxy/pull/4486 +.. _Pull Request 4489: https://github.com/galaxyproject/galaxy/pull/4489 +.. _Pull Request 4492: https://github.com/galaxyproject/galaxy/pull/4492 +.. _Pull Request 4494: https://github.com/galaxyproject/galaxy/pull/4494 +.. _Pull Request 4495: https://github.com/galaxyproject/galaxy/pull/4495 +.. _Pull Request 4496: https://github.com/galaxyproject/galaxy/pull/4496 +.. _Pull Request 4500: https://github.com/galaxyproject/galaxy/pull/4500 +.. _Pull Request 4501: https://github.com/galaxyproject/galaxy/pull/4501 +.. _Pull Request 4502: https://github.com/galaxyproject/galaxy/pull/4502 +.. _Pull Request 4503: https://github.com/galaxyproject/galaxy/pull/4503 +.. _Pull Request 4505: https://github.com/galaxyproject/galaxy/pull/4505 +.. _Pull Request 4508: https://github.com/galaxyproject/galaxy/pull/4508 +.. _Pull Request 4510: https://github.com/galaxyproject/galaxy/pull/4510 +.. _Pull Request 4511: https://github.com/galaxyproject/galaxy/pull/4511 +.. _Pull Request 4512: https://github.com/galaxyproject/galaxy/pull/4512 +.. _Pull Request 4514: https://github.com/galaxyproject/galaxy/pull/4514 +.. _Pull Request 4515: https://github.com/galaxyproject/galaxy/pull/4515 +.. _Pull Request 4519: https://github.com/galaxyproject/galaxy/pull/4519 +.. _Pull Request 4522: https://github.com/galaxyproject/galaxy/pull/4522 +.. _Pull Request 4523: https://github.com/galaxyproject/galaxy/pull/4523 +.. _Pull Request 4524: https://github.com/galaxyproject/galaxy/pull/4524 +.. _Pull Request 4530: https://github.com/galaxyproject/galaxy/pull/4530 +.. _Pull Request 4531: https://github.com/galaxyproject/galaxy/pull/4531 +.. _Pull Request 4533: https://github.com/galaxyproject/galaxy/pull/4533 +.. _Pull Request 4534: https://github.com/galaxyproject/galaxy/pull/4534 +.. _Pull Request 4535: https://github.com/galaxyproject/galaxy/pull/4535 +.. _Pull Request 4536: https://github.com/galaxyproject/galaxy/pull/4536 +.. _Pull Request 4539: https://github.com/galaxyproject/galaxy/pull/4539 +.. _Pull Request 4541: https://github.com/galaxyproject/galaxy/pull/4541 +.. _Pull Request 4542: https://github.com/galaxyproject/galaxy/pull/4542 +.. _Pull Request 4546: https://github.com/galaxyproject/galaxy/pull/4546 +.. _Pull Request 4547: https://github.com/galaxyproject/galaxy/pull/4547 +.. _Pull Request 4549: https://github.com/galaxyproject/galaxy/pull/4549 +.. _Pull Request 4552: https://github.com/galaxyproject/galaxy/pull/4552 +.. _Pull Request 4553: https://github.com/galaxyproject/galaxy/pull/4553 +.. _Pull Request 4555: https://github.com/galaxyproject/galaxy/pull/4555 +.. _Pull Request 4556: https://github.com/galaxyproject/galaxy/pull/4556 +.. _Pull Request 4557: https://github.com/galaxyproject/galaxy/pull/4557 +.. _Pull Request 4559: https://github.com/galaxyproject/galaxy/pull/4559 +.. _Pull Request 4560: https://github.com/galaxyproject/galaxy/pull/4560 +.. _Pull Request 4561: https://github.com/galaxyproject/galaxy/pull/4561 +.. _Pull Request 4562: https://github.com/galaxyproject/galaxy/pull/4562 +.. _Pull Request 4564: https://github.com/galaxyproject/galaxy/pull/4564 +.. _Pull Request 4565: https://github.com/galaxyproject/galaxy/pull/4565 +.. _Pull Request 4567: https://github.com/galaxyproject/galaxy/pull/4567 +.. _Pull Request 4568: https://github.com/galaxyproject/galaxy/pull/4568 +.. _Pull Request 4570: https://github.com/galaxyproject/galaxy/pull/4570 +.. _Pull Request 4574: https://github.com/galaxyproject/galaxy/pull/4574 +.. _Pull Request 4576: https://github.com/galaxyproject/galaxy/pull/4576 +.. _Pull Request 4577: https://github.com/galaxyproject/galaxy/pull/4577 +.. _Pull Request 4578: https://github.com/galaxyproject/galaxy/pull/4578 +.. _Pull Request 4579: https://github.com/galaxyproject/galaxy/pull/4579 +.. _Pull Request 4580: https://github.com/galaxyproject/galaxy/pull/4580 +.. _Pull Request 4581: https://github.com/galaxyproject/galaxy/pull/4581 +.. _Pull Request 4582: https://github.com/galaxyproject/galaxy/pull/4582 +.. _Pull Request 4586: https://github.com/galaxyproject/galaxy/pull/4586 +.. _Pull Request 4587: https://github.com/galaxyproject/galaxy/pull/4587 +.. _Pull Request 4588: https://github.com/galaxyproject/galaxy/pull/4588 +.. _Pull Request 4589: https://github.com/galaxyproject/galaxy/pull/4589 +.. _Pull Request 4592: https://github.com/galaxyproject/galaxy/pull/4592 +.. _Pull Request 4594: https://github.com/galaxyproject/galaxy/pull/4594 +.. _Pull Request 4595: https://github.com/galaxyproject/galaxy/pull/4595 +.. _Pull Request 4598: https://github.com/galaxyproject/galaxy/pull/4598 +.. _Pull Request 4599: https://github.com/galaxyproject/galaxy/pull/4599 +.. _Pull Request 4600: https://github.com/galaxyproject/galaxy/pull/4600 +.. _Pull Request 4603: https://github.com/galaxyproject/galaxy/pull/4603 +.. _Pull Request 4607: https://github.com/galaxyproject/galaxy/pull/4607 +.. _Pull Request 4610: https://github.com/galaxyproject/galaxy/pull/4610 +.. _Pull Request 4611: https://github.com/galaxyproject/galaxy/pull/4611 +.. _Pull Request 4616: https://github.com/galaxyproject/galaxy/pull/4616 +.. _Pull Request 4617: https://github.com/galaxyproject/galaxy/pull/4617 +.. _Pull Request 4619: https://github.com/galaxyproject/galaxy/pull/4619 +.. _Pull Request 4621: https://github.com/galaxyproject/galaxy/pull/4621 +.. _Pull Request 4622: https://github.com/galaxyproject/galaxy/pull/4622 +.. _Pull Request 4625: https://github.com/galaxyproject/galaxy/pull/4625 +.. _Pull Request 4626: https://github.com/galaxyproject/galaxy/pull/4626 +.. _Pull Request 4628: https://github.com/galaxyproject/galaxy/pull/4628 +.. _Pull Request 4629: https://github.com/galaxyproject/galaxy/pull/4629 +.. _Pull Request 4630: https://github.com/galaxyproject/galaxy/pull/4630 +.. _Pull Request 4631: https://github.com/galaxyproject/galaxy/pull/4631 +.. _Pull Request 4632: https://github.com/galaxyproject/galaxy/pull/4632 +.. _Pull Request 4634: https://github.com/galaxyproject/galaxy/pull/4634 +.. _Pull Request 4636: https://github.com/galaxyproject/galaxy/pull/4636 +.. _Pull Request 4639: https://github.com/galaxyproject/galaxy/pull/4639 +.. _Pull Request 4640: https://github.com/galaxyproject/galaxy/pull/4640 +.. _Pull Request 4641: https://github.com/galaxyproject/galaxy/pull/4641 +.. _Pull Request 4644: https://github.com/galaxyproject/galaxy/pull/4644 +.. _Pull Request 4647: https://github.com/galaxyproject/galaxy/pull/4647 +.. _Pull Request 4648: https://github.com/galaxyproject/galaxy/pull/4648 +.. _Pull Request 4650: https://github.com/galaxyproject/galaxy/pull/4650 +.. _Pull Request 4652: https://github.com/galaxyproject/galaxy/pull/4652 +.. _Pull Request 4656: https://github.com/galaxyproject/galaxy/pull/4656 +.. _Pull Request 4663: https://github.com/galaxyproject/galaxy/pull/4663 +.. _Pull Request 4671: https://github.com/galaxyproject/galaxy/pull/4671 +.. _Pull Request 4674: https://github.com/galaxyproject/galaxy/pull/4674 +.. _Pull Request 4680: https://github.com/galaxyproject/galaxy/pull/4680 +.. _Pull Request 4701: https://github.com/galaxyproject/galaxy/pull/4701 +.. _Pull Request 4705: https://github.com/galaxyproject/galaxy/pull/4705 +.. _Pull Request 4710: https://github.com/galaxyproject/galaxy/pull/4710 +.. _Pull Request 4713: https://github.com/galaxyproject/galaxy/pull/4713 +.. _Pull Request 4714: https://github.com/galaxyproject/galaxy/pull/4714 +.. _Pull Request 4715: https://github.com/galaxyproject/galaxy/pull/4715 +.. _Pull Request 4716: https://github.com/galaxyproject/galaxy/pull/4716 +.. _Pull Request 4726: https://github.com/galaxyproject/galaxy/pull/4726 +.. _Pull Request 4740: https://github.com/galaxyproject/galaxy/pull/4740 +.. _Pull Request 4742: https://github.com/galaxyproject/galaxy/pull/4742 +.. _Pull Request 4743: https://github.com/galaxyproject/galaxy/pull/4743 +.. _Pull Request 4745: https://github.com/galaxyproject/galaxy/pull/4745 +.. _Pull Request 4748: https://github.com/galaxyproject/galaxy/pull/4748 +.. _Pull Request 4750: https://github.com/galaxyproject/galaxy/pull/4750 +.. _Pull Request 4752: https://github.com/galaxyproject/galaxy/pull/4752 +.. _Pull Request 4760: https://github.com/galaxyproject/galaxy/pull/4760 + diff --git a/doc/source/releases/17.09_announce.rst b/doc/source/releases/17.09_announce.rst index e32481ef240..74181f19aed 100644 --- a/doc/source/releases/17.09_announce.rst +++ b/doc/source/releases/17.09_announce.rst @@ -3,8 +3,149 @@ September 2017 Galaxy Release (v 17.09) =========================================================== +.. include:: _header.rst -Schedule +Highlights =========================================================== - * Planned Freeze Date: 2017-09-04 - * Planned Release Date: 2017-09-25 + +**Singularity** + Tool execution using the HPC-friendly container technology `Singularity `__ + is now supported. Custom containers can be specified by the Galaxy admin on a per job destination basis + or standardized containers corresponding to Conda requirements can be built or downloaded automatically + using the mulled toolkit built into Galaxy (just like is possible for Docker). For more information + checkout `this presentation `__ from the 2017 Galaxy Community Conference. + `Pull Request 4175`_ + +**Download entire collection** + Downloading whole colections is now possible from the history interface. `Pull Request 4098`_ + Thanks to `@mvdbeek `__. + +**Switch tool versions in workflows** + You can now select exactly what version of tool you want to use when building workflows. `Pull Request 4373`_ + Thanks to `@mvdbeek `__. + +Get Galaxy +========== + +The code lives at `Github `__ and you should have `Git `__ to obtain it. + +To get a new Galaxy repository run: + .. code-block:: shell + + $ git clone -b release_17.09 https://github.com/galaxyproject/galaxy.git + +To update an existing Galaxy repository run: + .. code-block:: shell + + $ git checkout release_17.09 && git pull --ff-only origin release_17.09 + +See `the community hub `__ for additional details regarding the source code locations. + + +Security +======== + +The 17.09 Galaxy version includes many security patches. Per our new `Security Policy +`__ some of these have been +applied to Galaxy releases going back 12 months. + +Details of the vulnerabilities that have been backported can be found in the `Security patch details`_ +section of these release notes. Some issues have only been addressed in 17.09, for this reason +if security is important to your Galaxy instance we strongly recommend upgrading to this latest release +as soon as possible. + +If you maintain a publicly accessible Galaxy please consider signing up for this `mailing list `__ to receive the future security patches in advance of the public disclosure. + +Deprecation Notices +=================== + +* The Galaxy Sample Tracking and External Services functionality is now considered deprecated. In future releases we will strip down the related + user interface and introduce configuration option to keep relevant API controllers active if desired. `Related PR `__. +* The deprecated admin-only interface for Galaxy Data Libraries is staged to be removed in the next release. +* Workflows API: When exposing WorkflowInvocationSteps ``state`` will no longer be available. +* The ``refresh_on_change`` attribute of a ```` tag in the tool syntax can no longer be set to a value of another parameter. Use boolean instead (e.g.``refresh_on_change="True"``). `Details `__ + + +Release Notes +=========================================================== + +.. include:: 17.09.rst + :start-after: announce_start + +Security patch details +====================== + +Limited Galaxy Data Library unauthorized filesystem access +---------------------------------------------------------- + +Tracked as `GX-2017-0001 `__ + +A medium severity security vulnerability in Galaxy Data Libraries was +recently discovered by `Jelle Scholtalbers `__. +This vulnerability allows the following unauthorized actions: + +1. Any user that has been granted the permission to add datasets to a + library, library folder, or to modify an existing library dataset (an + "authorized user"), is able to import any file on the system that is + readable by the user running the Galaxy server. + +2. Anyone can create libraries and library folders (but not add datasets to them) + +The fix for this issue has been applied to Galaxy releases back to 16.07 and can be found in this `commit `__ + +Arbitrary code execution for Galaxy servers with Galaxy Interactive Environments enabled +---------------------------------------------------------------------------------------- + +Tracked as `GX-2017-0002 `__ + +A high severity security vulnerability was recently discovered in Galaxy +Interactive Environments (GIEs) by the Galaxy Committers Team. Anyone with +a Galaxy account can exploit this vulnerability to execute arbitrary code +on the Galaxy server as the user running the Galaxy server process. + +The vulnerability only affects Galaxy servers on which Galaxy Interactive +Environments are enabled (by setting the +`interactive_environment_plugins_directory` +option in `galaxy.ini`). Because the vulnerability can be exploited to +execute arbitrary code, the impact for affected servers is severe. + +Administrators of Galaxy servers where GIEs *are* enabled should update +immediately. + +The fix for this issue has been applied to Galaxy releases back to 17.05 and can be found in this `commit `__ + +Unauthorized filesystem access via data source tools +---------------------------------------------------- + +Tracked as `GX-2017-0003 `__ + +A medium severity security vulnerability in tools utilizing the Galaxy data +source protocol was recently discovered by the Galaxy Committers Team. +Anyone who is able to run an external data source tool can access +any file that is readable by the user running Galaxy jobs +on the host where the job runs. + +Many such "external data source" tools are provided with the Galaxy +distribution and are enabled by default (most tools under the "Get Data" +section of the tool panel), meaning that its exploitability is fairly high, +as only one such tool needs to be enabled to be vulnerable, including any +custom data source tools (any tool that uses +`tools/data_source/data_source.py`). +What files are readable depends entirely upon what the job's user has +access to read on the host(s) where jobs run. + +The fix for this issue has been applied to Galaxy releases back to 16.07 and can be found in this `commit `__ + +Cross site scripting and session fixation +----------------------------------------- + +Disclosed on the `mailing list `__ in August 2017. + +Vulnerabilities were found by Eric Rasche and Manabu Ishii respectively. Detailed descriptions of these categories of vulnerabilities can be found at: + +- https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) +- https://www.owasp.org/index.php/Session_fixation + +The fix for these issues has been applied to Galaxy releases back to 16.10 and can be found in this `diff `__ + +.. include:: _thanks.rst diff --git a/doc/source/releases/18.01_announce.rst b/doc/source/releases/18.01_announce.rst new file mode 100644 index 00000000000..b62092b1e06 --- /dev/null +++ b/doc/source/releases/18.01_announce.rst @@ -0,0 +1,10 @@ + +=========================================================== +January 2018 Galaxy Release (v 18.01) +=========================================================== + + +Schedule +=========================================================== + * Planned Freeze Date: 2018-01-08 + * Planned Release Date: 2018-01-29 diff --git a/doc/source/releases/index.rst b/doc/source/releases/index.rst index c57cbc5e46d..448ab9bfbd0 100644 --- a/doc/source/releases/index.rst +++ b/doc/source/releases/index.rst @@ -4,6 +4,7 @@ Releases .. toctree:: :maxdepth: 1 + 17.09_announce 17.05_announce 17.01_announce 16.10_announce diff --git a/lib/galaxy/auth/providers/ldap_ad.py b/lib/galaxy/auth/providers/ldap_ad.py index e1ac031c5f1..1d0d2ecd691 100644 --- a/lib/galaxy/auth/providers/ldap_ad.py +++ b/lib/galaxy/auth/providers/ldap_ad.py @@ -95,7 +95,7 @@ class LDAP(AuthProvider): try: import ldap - except: + except ImportError: log.debug('LDAP authenticate: could not load ldap module') return (failure_mode, '', '') diff --git a/lib/galaxy/config.py b/lib/galaxy/config.py index 25a25afd7f2..9c24edb8445 100644 --- a/lib/galaxy/config.py +++ b/lib/galaxy/config.py @@ -212,7 +212,7 @@ class Configuration(object): self.hours_between_check = 12.0 else: self.hours_between_check = 12 - except: + except Exception: self.hours_between_check = 12 self.update_integrated_tool_panel = kwargs.get("update_integrated_tool_panel", True) self.enable_data_manager_user_view = string_as_bool(kwargs.get("enable_data_manager_user_view", "False")) @@ -338,6 +338,9 @@ class Configuration(object): # Beta containers interface used by GIEs self.enable_beta_containers_interface = string_as_bool(kwargs.get('enable_beta_containers_interface', 'False')) + # Deprecated API for sample tracking + self.enable_legacy_sample_tracking_api = string_as_bool(kwargs.get('enable_legacy_sample_tracking_api', 'False')) + # Certain modules such as the pause module will automatically cause # workflows to be scheduled in job handlers the way all workflows will # be someday - the following two properties can also be used to force this @@ -395,6 +398,7 @@ class Configuration(object): self.genomespace_ui_url = kwargs.get('genomespace_ui_url', 'https://gsui.genomespace.org/jsui/') self.library_import_dir = kwargs.get('library_import_dir', None) self.user_library_import_dir = kwargs.get('user_library_import_dir', None) + self.user_library_import_symlink_whitelist = listify(kwargs.get('user_library_import_symlink_whitelist', []), do_strip=True) # Searching data libraries self.enable_lucene_library_search = string_as_bool(kwargs.get('enable_lucene_library_search', False)) self.enable_whoosh_library_search = string_as_bool(kwargs.get('enable_whoosh_library_search', False)) @@ -793,7 +797,7 @@ class Configuration(object): try: port = config.getint('server:%s' % self.server_name, 'port') - except: + except Exception: # uWSGI galaxy installations don't use paster and only speak uWSGI not http port = None return port diff --git a/lib/galaxy/containers/docker_model.py b/lib/galaxy/containers/docker_model.py index 6ea288b590d..302708d48df 100644 --- a/lib/galaxy/containers/docker_model.py +++ b/lib/galaxy/containers/docker_model.py @@ -374,7 +374,7 @@ class DockerNode(object): @property def labels(self): - labels = self.inspect[0]['Spec'].get('Labels', {}) + labels = self.inspect[0]['Spec'].get('Labels', {}) or {} return DockerNodeLabels.from_label_dictionary(labels) def label_add(self, label, value): diff --git a/lib/galaxy/datatypes/annotation.py b/lib/galaxy/datatypes/annotation.py index 652e3bffd63..9a0717b5218 100644 --- a/lib/galaxy/datatypes/annotation.py +++ b/lib/galaxy/datatypes/annotation.py @@ -23,7 +23,7 @@ class SnapHmm(Text): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "SNAP HMM model (%s)" % (nice_size(dataset.get_size())) def sniff(self, filename): @@ -54,7 +54,7 @@ class Augustus(CompressedArchive): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Augustus model (%s)" % (nice_size(dataset.get_size())) def sniff(self, filename): diff --git a/lib/galaxy/datatypes/assembly.py b/lib/galaxy/datatypes/assembly.py index 669de6e35ed..1aad009a65c 100644 --- a/lib/galaxy/datatypes/assembly.py +++ b/lib/galaxy/datatypes/assembly.py @@ -63,7 +63,7 @@ class Amos(data.Text): if re.match(r'{(RED|CTG|TLE)$', line): isAmos = True fh.close() - except: + except Exception: pass return isAmos @@ -102,7 +102,7 @@ class Sequences(sequence.Fasta): else: break # we found a non-empty line, but it's not a fasta header fh.close() - except: + except Exception: pass return False @@ -138,7 +138,7 @@ class Roadmaps(data.Text): else: break # we found a non-empty line, but it's not a fasta header fh.close() - except: + except Exception: pass return False @@ -202,7 +202,7 @@ class Velvet(Html): gen_msg = gen_msg + ' Long Reads' if len(gen_msg) > 0: gen_msg = 'Uses: ' + gen_msg - except: + except Exception: log.debug("Velveth could not read Log file in %s" % efp) log.debug("Velveth log info %s" % gen_msg) rval = ['Velvet Galaxy Composite Dataset

    '] diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 164811b2e4e..f5814dff02c 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -106,7 +106,7 @@ class Ab1(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary ab1 sequence file (%s)" % (nice_size(dataset.get_size())) @@ -125,7 +125,7 @@ class Idat(Binary): if header == b'IDAT': return True return False - except: + except Exception: return False @@ -157,7 +157,7 @@ class Cel(Binary): if header == b';\x01\x00\x00': return True return False - except: + except Exception: return False @@ -183,7 +183,7 @@ class CompressedArchive(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Compressed binary file (%s)" % (nice_size(dataset.get_size())) @@ -208,7 +208,7 @@ class CompressedZipArchive(CompressedArchive): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Compressed zip file (%s)" % (nice_size(dataset.get_size())) @@ -425,7 +425,7 @@ class Bam(Binary): dataset.metadata.read_groups = [read_group['ID'] for read_group in dataset.metadata.bam_header.get('RG', []) if 'ID' in read_group] dataset.metadata.sort_order = dataset.metadata.bam_header.get('HD', {}).get('SO', None) dataset.metadata.bam_version = dataset.metadata.bam_header.get('HD', {}).get('VN', None) - except: + except Exception: # Per Dan, don't log here because doing so will cause datasets that # fail metadata to end in the error state pass @@ -438,7 +438,7 @@ class Bam(Binary): if header == b'BAM\1': return True return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -452,7 +452,7 @@ class Bam(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary bam alignments file (%s)" % (nice_size(dataset.get_size())) def to_archive(self, trans, dataset, name=""): @@ -664,7 +664,7 @@ class CRAM(Binary): if header == b"CRAM": return True return False - except: + except Exception: return False @@ -700,7 +700,7 @@ class Bcf(BaseBcf): if header == b'BCF': return True return False - except: + except Exception: return False def set_meta(self, dataset, overwrite=True, **kwd): @@ -756,7 +756,7 @@ class BcfUncompressed(Bcf): if header == b'BCF': return True return False - except: + except Exception: return False @@ -789,7 +789,7 @@ class H5(Binary): if header == self._magic: return True return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -803,7 +803,7 @@ class H5(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary HDF5 file (%s)" % (nice_size(dataset.get_size())) @@ -886,7 +886,7 @@ class Biom2(H5): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Biom2 (HDF5) file (%s)" % (nice_size(dataset.get_size())) @@ -911,7 +911,7 @@ class Scf(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary scf sequence file (%s)" % (nice_size(dataset.get_size())) @@ -932,7 +932,7 @@ class Sff(Binary): if header == b'.sff': return True return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -946,7 +946,7 @@ class Sff(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary sff file (%s)" % (nice_size(dataset.get_size())) @@ -976,7 +976,7 @@ class BigWig(Binary): try: magic = self._unpack("I", open(filename, 'rb')) return magic[0] == self._magic - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -990,7 +990,7 @@ class BigWig(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary UCSC %s file (%s)" % (self._name, nice_size(dataset.get_size())) @@ -1040,7 +1040,7 @@ class TwoBit(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary TwoBit format nucleotide file (%s)" % (nice_size(dataset.get_size())) @@ -1097,7 +1097,7 @@ class SQlite(Binary): if header == b'SQLite format 3\0': return True return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -1108,7 +1108,7 @@ class SQlite(Binary): for table in dataset.metadata.tables: try: lines.append('%s [%s]' % (table, dataset.metadata.table_row_count[table])) - except: + except Exception: continue dataset.peek = '\n'.join(lines) dataset.blurb = nice_size(dataset.get_size()) @@ -1119,7 +1119,7 @@ class SQlite(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "SQLite Database (%s)" % (nice_size(dataset.get_size())) @dataproviders.decorators.dataprovider_factory('sqlite', dataproviders.dataset.SQliteDataProvider.settings) @@ -1191,7 +1191,7 @@ class GeminiSQLite(SQlite): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Gemini SQLite Database, version %s" % (dataset.metadata.gemini_version or 'unknown') @@ -1265,7 +1265,7 @@ class IdpDB(SQlite): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "IDPickerDB SQLite file (%s)" % (nice_size(dataset.get_size())) @@ -1289,7 +1289,7 @@ class Xlsx(Binary): if "[Content_Types].xml" in tempzip.namelist() and tempzip.read("[Content_Types].xml").find(b'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml') != -1: return True return False - except: + except Exception: return False @@ -1320,7 +1320,7 @@ class ExcelXls(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Microsoft Excel XLS file (%s)" % (data.nice_size(dataset.get_size())) @@ -1341,7 +1341,7 @@ class Sra(Binary): return True else: return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -1355,7 +1355,7 @@ class Sra(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return 'Binary sra file (%s)' % (nice_size(dataset.get_size())) @@ -1376,7 +1376,7 @@ class RData(Binary): header = gzip.open(filename).read(7) if header == rdata_header: return True - except: + except Exception: return False @@ -1612,7 +1612,7 @@ class PostgresqlArchive(CompressedArchive): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "PostgreSQL Archive (%s)" % (nice_size(dataset.get_size())) @@ -1669,7 +1669,7 @@ class Fast5Archive(CompressedArchive): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "FAST5 Archive (%s)" % (nice_size(dataset.get_size())) @@ -1771,7 +1771,7 @@ class SearchGuiArchive(CompressedArchive): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "SearchGUI Archive, version %s" % (dataset.metadata.searchgui_version or 'unknown') @@ -1795,7 +1795,7 @@ class NetCDF(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Binary netCDF file (%s)" % (nice_size(dataset.get_size())) def sniff(self, filename): @@ -1805,7 +1805,7 @@ class NetCDF(Binary): if header == b'CDF': return True return False - except: + except Exception: return False @@ -1838,7 +1838,7 @@ class DMND(Binary): if header == self._magic: return True return False - except: + except Exception: return False diff --git a/lib/galaxy/datatypes/constructive_solid_geometry.py b/lib/galaxy/datatypes/constructive_solid_geometry.py index 4caae1ce11a..40325ffa5a0 100644 --- a/lib/galaxy/datatypes/constructive_solid_geometry.py +++ b/lib/galaxy/datatypes/constructive_solid_geometry.py @@ -111,7 +111,7 @@ class Ply(object): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Ply file (%s)" % (nice_size(dataset.get_size())) @@ -301,7 +301,7 @@ class Vtk(object): dataset.metadata.field_names.append(field_name) try: num_components = int(items[-1]) - except: + except Exception: num_components = 1 field_component_indexes = [str(i) for i in range(num_components)] field_components[field_name] = field_component_indexes @@ -319,7 +319,7 @@ class Vtk(object): float(items[0]) # Don't process the cell data. # 0.0123457 0.197531 - except: + except Exception: # Line consists of arrayName numComponents numTuples dataType. # Example: surface_field1 1 12 double field_name = items[0] @@ -438,7 +438,7 @@ class Vtk(object): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Vtk file (%s)" % (nice_size(dataset.get_size())) diff --git a/lib/galaxy/datatypes/converters/bed_to_gff_converter.py b/lib/galaxy/datatypes/converters/bed_to_gff_converter.py index 6507257d022..dab53f94a85 100644 --- a/lib/galaxy/datatypes/converters/bed_to_gff_converter.py +++ b/lib/galaxy/datatypes/converters/bed_to_gff_converter.py @@ -30,21 +30,21 @@ def __main__(): else: try: feature = elems[3] - except: + except Exception: feature = 'feature%d' % (i + 1) start = int(elems[1]) + 1 end = int(elems[2]) try: score = elems[4] - except: + except Exception: score = '0' try: strand = elems[5] - except: + except Exception: strand = '+' try: group = elems[3] - except: + except Exception: group = 'group%d' % (i + 1) if complete_bed: out.write('%s\tbed2gff\t%s\t%d\t%d\t%s\t%s\t.\t%s %s;\n' % (chrom, feature, start, end, score, strand, feature, group)) @@ -59,7 +59,7 @@ def __main__(): exon_start = int(start) + int(block_starts[j]) exon_end = exon_start + int(block_sizes[j]) - 1 out.write('%s\tbed2gff\texon\t%d\t%d\t%s\t%s\t.\texon %s;\n' % (chrom, exon_start, exon_end, score, strand, group)) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = i + 1 diff --git a/lib/galaxy/datatypes/converters/fastqsolexa_to_qual_converter.py b/lib/galaxy/datatypes/converters/fastqsolexa_to_qual_converter.py index 34ec1cbd67c..95e39e232e8 100644 --- a/lib/galaxy/datatypes/converters/fastqsolexa_to_qual_converter.py +++ b/lib/galaxy/datatypes/converters/fastqsolexa_to_qual_converter.py @@ -68,10 +68,10 @@ def __main__(): # peek: ascii or digits? val = line.split()[0] + fastq_integer = True try: int(val) - fastq_integer = True - except: + except ValueError: fastq_integer = False if fastq_integer: # digits diff --git a/lib/galaxy/datatypes/converters/gff_to_bed_converter.py b/lib/galaxy/datatypes/converters/gff_to_bed_converter.py index 9e9f767e80a..e7eb2b24d8a 100644 --- a/lib/galaxy/datatypes/converters/gff_to_bed_converter.py +++ b/lib/galaxy/datatypes/converters/gff_to_bed_converter.py @@ -28,7 +28,7 @@ def __main__(): # Replace any spaces in the name with underscores so UCSC will not complain name = elems[2].replace(" ", "_") out.write("%s\t%s\t%s\t%s\t0\t%s\n" % (elems[0], start, elems[4], name, strand)) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = i + 1 diff --git a/lib/galaxy/datatypes/converters/interval_to_bed_converter.py b/lib/galaxy/datatypes/converters/interval_to_bed_converter.py index da2bdd1b86f..8ea2a579c9b 100644 --- a/lib/galaxy/datatypes/converters/interval_to_bed_converter.py +++ b/lib/galaxy/datatypes/converters/interval_to_bed_converter.py @@ -19,23 +19,23 @@ def __main__(): input_name = sys.argv[2] try: chromCol = int(sys.argv[3]) - 1 - except: + except Exception: stop_err("'%s' is an invalid chrom column, correct the column settings before attempting to convert the data format." % str(sys.argv[3])) try: startCol = int(sys.argv[4]) - 1 - except: + except Exception: stop_err("'%s' is an invalid start column, correct the column settings before attempting to convert the data format." % str(sys.argv[4])) try: endCol = int(sys.argv[5]) - 1 - except: + except Exception: stop_err("'%s' is an invalid end column, correct the column settings before attempting to convert the data format." % str(sys.argv[5])) try: strandCol = int(sys.argv[6]) - 1 - except: + except Exception: strandCol = -1 try: nameCol = int(sys.argv[7]) - 1 - except: + except Exception: nameCol = -1 skipped_lines = 0 first_skipped_line = 0 @@ -47,12 +47,12 @@ def __main__(): name = region.fields[nameCol] else: raise IndexError - except: + except Exception: name = "region_%i" % count try: out.write("%s\t%i\t%i\t%s\t%i\t%s\n" % (region.chrom, region.start, region.end, name, 0, region.strand)) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = count + 1 diff --git a/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py b/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py index bde7292f8cf..a80e407063c 100644 --- a/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py +++ b/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py @@ -41,31 +41,31 @@ def __main__(): input_name = sys.argv[2] try: chromCol = int(sys.argv[3]) - 1 - except: + except Exception: stop_err("'%s' is an invalid chrom column, correct the column settings before attempting to convert the data format." % str(sys.argv[3])) try: startCol = int(sys.argv[4]) - 1 - except: + except Exception: stop_err("'%s' is an invalid start column, correct the column settings before attempting to convert the data format." % str(sys.argv[4])) try: endCol = int(sys.argv[5]) - 1 - except: + except Exception: stop_err("'%s' is an invalid end column, correct the column settings before attempting to convert the data format." % str(sys.argv[5])) try: strandCol = int(sys.argv[6]) - 1 - except: + except Exception: strandCol = -1 try: nameCol = int(sys.argv[7]) - 1 - except: + except Exception: nameCol = -1 try: extension = sys.argv[8] - except: + except IndexError: extension = 'interval' # default extension try: force_num_columns = int(sys.argv[9]) - except: + except Exception: force_num_columns = None skipped_lines = 0 @@ -116,7 +116,7 @@ def __main__(): fields2 = fields[11].rstrip(",").split(",") # remove trailing comma and split on comma for field in fields2: int(field) - except: + except Exception: strict_bed = False break if force_num_columns is not None and len(fields) != force_num_columns: @@ -137,14 +137,14 @@ def __main__(): name = region.fields[nameCol] else: raise IndexError - except: + except Exception: name = "region_%i" % count try: fields = [str(item) for item in (region.chrom, region.start, region.end, name, 0, region.strand)] if force_num_columns is not None and len(fields) != force_num_columns: fields = force_bed_field_count(fields, count, force_num_columns) out.write("%s\n" % '\t'.join(fields)) - except: + except Exception: skipped_lines += 1 if first_skipped_line is None: first_skipped_line = count + 1 diff --git a/lib/galaxy/datatypes/converters/interval_to_coverage.py b/lib/galaxy/datatypes/converters/interval_to_coverage.py index d4ddd98927b..ab9b5c58eef 100644 --- a/lib/galaxy/datatypes/converters/interval_to_coverage.py +++ b/lib/galaxy/datatypes/converters/interval_to_coverage.py @@ -127,7 +127,7 @@ if __name__ == "__main__": chr_col_1, start_col_1, end_col_1, strand_col_1 = [int(x) - 1 for x in options.cols1.split(',')] chr_col_2, position_col_2, forward_col_2, reverse_col_2 = [int(x) - 1 for x in options.cols2.split(',')] in_fname, out_fname = args - except: + except Exception: doc_optparse.exception() # Sort through a tempfile first diff --git a/lib/galaxy/datatypes/converters/interval_to_fli.py b/lib/galaxy/datatypes/converters/interval_to_fli.py index 1d5fd227846..4750b992975 100644 --- a/lib/galaxy/datatypes/converters/interval_to_fli.py +++ b/lib/galaxy/datatypes/converters/interval_to_fli.py @@ -48,7 +48,7 @@ def main(): try: float(val) continue - except: + except ValueError: convert_gff_coords_to_bed(feature) # Value is not a number, so it can be indexed. if val not in name_loc_dict: diff --git a/lib/galaxy/datatypes/converters/lped_to_fped_converter.py b/lib/galaxy/datatypes/converters/lped_to_fped_converter.py index 655219078c0..14a749b7721 100644 --- a/lib/galaxy/datatypes/converters/lped_to_fped_converter.py +++ b/lib/galaxy/datatypes/converters/lped_to_fped_converter.py @@ -41,17 +41,17 @@ def rgConv(inpedfilepath, outhtmlname, outfilepath): outfpath = os.path.join(outfilepath, outf) # where to write the fbat format file to try: mf = open(inmap, 'r') - except: + except Exception: sys.stderr.write('%s cannot open inmap file %s - do you have permission?\n' % (prog, inmap)) sys.exit(1) try: rsl = [x.split()[1] for x in mf] - except: + except Exception: sys.stderr.write('## cannot parse %s' % inmap) sys.exit(1) try: os.makedirs(outfilepath) - except: + except Exception: pass # already exists head = ' '.join(rsl) # list of rs numbers # TODO add anno to rs but fbat will prolly barf? @@ -64,7 +64,7 @@ def rgConv(inpedfilepath, outhtmlname, outfilepath): lrow = row.split() try: [int(x) for x in lrow[10:50]] # look for non numeric codes - except: + except Exception: dorecode = 1 if dorecode: lrow = row.strip().split() @@ -94,7 +94,7 @@ def main(): outfilepath = sys.argv[3] try: os.makedirs(outfilepath) - except: + except Exception: pass rgConv(inpedfilepath, outhtmlname, outfilepath) flist = os.listdir(outfilepath) diff --git a/lib/galaxy/datatypes/converters/lped_to_pbed_converter.py b/lib/galaxy/datatypes/converters/lped_to_pbed_converter.py index 83b8050e46a..68fc19bc9c3 100644 --- a/lib/galaxy/datatypes/converters/lped_to_pbed_converter.py +++ b/lib/galaxy/datatypes/converters/lped_to_pbed_converter.py @@ -42,13 +42,13 @@ def getMissval(inped=''): commonmissvals = {'N': 'N', '0': '0', 'n': 'n', '9': '9', '-': '-', '.': '.'} try: f = open(inped, 'r') - except: + except Exception: return None # signal no in file missval = None while missval is None: # doggedly continue until we solve the mystery try: l = f.readline() - except: + except Exception: break ll = l.split()[6:] # ignore pedigree stuff for c in ll: @@ -94,7 +94,7 @@ def main(): outfilepath = sys.argv[3] try: os.makedirs(outfilepath) - except: + except Exception: pass plink = sys.argv[4] rgConv(inpedfilepath, outhtmlname, outfilepath, plink) diff --git a/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py b/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py index fbe1834b8b1..e18e3f7232a 100644 --- a/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py +++ b/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py @@ -48,7 +48,7 @@ def pruneLD(plinktasks=[], cd='./', vclbase=[]): alog += lplog alog.append('\n') os.unlink(plog) # no longer needed - except: + except Exception: alog.append('### %s Strange - no std out from plink when running command line\n%s\n' % (timenow(), ' '.join(vcl))) return alog @@ -92,7 +92,7 @@ def main(): outfilepath = sys.argv[6] try: os.makedirs(outfilepath) - except: + except Exception: pass plink = sys.argv[7] makeLDreduced(base_name, infpath=inpedfilepath, outfpath=outfilepath, plinke=plink, forcerebuild=False, returnFname=False, diff --git a/lib/galaxy/datatypes/converters/pbed_to_lped_converter.py b/lib/galaxy/datatypes/converters/pbed_to_lped_converter.py index 24a052384a3..e61aba09556 100644 --- a/lib/galaxy/datatypes/converters/pbed_to_lped_converter.py +++ b/lib/galaxy/datatypes/converters/pbed_to_lped_converter.py @@ -60,7 +60,7 @@ def main(): outfilepath = sys.argv[3] try: os.makedirs(outfilepath) - except: + except Exception: pass plink = sys.argv[4] rgConv(inpedfilepath, outhtmlname, outfilepath, plink) diff --git a/lib/galaxy/datatypes/data.py b/lib/galaxy/datatypes/data.py index d3a35c7e2bf..54723f4cd51 100644 --- a/lib/galaxy/datatypes/data.py +++ b/lib/galaxy/datatypes/data.py @@ -179,7 +179,7 @@ class Data(object): def set_max_optional_metadata_filesize(self, max_value): try: max_value = int(max_value) - except: + except (TypeError, ValueError): return self.__class__._max_optional_metadata_filesize = max_value @@ -394,7 +394,7 @@ class Data(object): if not mime: try: mime = trans.app.datatypes_registry.get_mimetype_by_extension(".".split(file_path)[-1]) - except: + except Exception: mime = "text/plain" self._clean_and_set_mime_type(trans, mime) return self._yield_user_file_content(trans, data, file_path) @@ -490,7 +490,7 @@ class Data(object): info = unicodify(info, 'utf-8') return info - except: + except Exception: return "info unavailable" def validate(self, dataset): @@ -521,7 +521,7 @@ class Data(object): self.supported_display_apps = self.supported_display_apps.copy() try: del self.supported_display_apps[app_id] - except: + except Exception: log.exception('Tried to remove display app %s from datatype %s, but this display app is not declared.', type, self.__class__.__name__) def clear_display_apps(self): @@ -551,7 +551,7 @@ class Data(object): """Returns primary label for display app""" try: return self.supported_display_apps[type]['label'] - except: + except Exception: return 'unknown' def as_display_type(self, dataset, type, **kwd): @@ -559,7 +559,7 @@ class Data(object): try: if type in self.get_display_types(): return getattr(self, self.supported_display_apps[type]['file_function'])(dataset, **kwd) - except: + except Exception: log.exception('Function %s is referred to in datatype %s for displaying as type %s, but is not accessible', self.supported_display_apps[type]['file_function'], self.__class__.__name__, type) return "This display type (%s) is not implemented for this datatype (%s)." % (type, dataset.ext) @@ -573,7 +573,7 @@ class Data(object): try: if app.config.enable_old_display_applications and type in self.get_display_types(): return target_frame, getattr(self, self.supported_display_apps[type]['links_function'])(dataset, type, app, base_url, **kwd) - except: + except Exception: log.exception('Function %s is referred to in datatype %s for generating links for type %s, but is not accessible', self.supported_display_apps[type]['links_function'], self.__class__.__name__, type) return target_frame, [] diff --git a/lib/galaxy/datatypes/dataproviders/external.py b/lib/galaxy/datatypes/dataproviders/external.py index f932656ff4e..42136db4b3f 100644 --- a/lib/galaxy/datatypes/dataproviders/external.py +++ b/lib/galaxy/datatypes/dataproviders/external.py @@ -7,7 +7,7 @@ import logging import subprocess import tempfile -from six.moves.urllib.parse import urlencode +from six.moves.urllib.parse import urlencode, urlparse from six.moves.urllib.request import urlopen from . import ( @@ -112,6 +112,9 @@ class URLDataProvider(base.DataProvider): self.data = data or {} encoded_data = urlencode(self.data) + scheme = urlparse(url).scheme + assert scheme in ('http', 'https', 'ftp'), 'Invalid URL scheme: %s' % scheme + if method == 'GET': self.url += '?%s' % (encoded_data) opened = urlopen(url) diff --git a/lib/galaxy/datatypes/display_applications/application.py b/lib/galaxy/datatypes/display_applications/application.py index 1759241b73d..d9e6bbd9bbe 100644 --- a/lib/galaxy/datatypes/display_applications/application.py +++ b/lib/galaxy/datatypes/display_applications/application.py @@ -122,7 +122,7 @@ class DynamicDisplayApplicationBuilder(object): id_col = elem.get('id', None) try: id_col = int(id_col) - except: + except (TypeError, ValueError): if data_table: if id_col is None: id_col = data_table.columns.get('id', None) @@ -130,14 +130,14 @@ class DynamicDisplayApplicationBuilder(object): id_col = data_table.columns.get('value', None) try: id_col = int(id_col) - except: + except (TypeError, ValueError): # id is set to a string or None, use column by that name if available id_col = data_table.columns.get(id_col, None) id_col = int(id_col) name_col = elem.get('name', None) try: name_col = int(name_col) - except: + except (TypeError, ValueError): if data_table: if name_col is None: name_col = data_table.columns.get('name', None) diff --git a/lib/galaxy/datatypes/genetics.py b/lib/galaxy/datatypes/genetics.py index 22833fd50ad..d14da2823ed 100644 --- a/lib/galaxy/datatypes/genetics.py +++ b/lib/galaxy/datatypes/genetics.py @@ -126,7 +126,7 @@ class GenomeGraphs(Tabular): hasheader = 0 try: ['%f' % x for x in d[0][1:]] # first is name - see if starts all numerics - except: + except Exception: hasheader = 1 # Generate column header out.append('') @@ -158,7 +158,7 @@ class GenomeGraphs(Tabular): for j, x in enumerate(ll): try: x = float(x) - except: + except Exception: badvals.append('col%d:%s' % (j + 1, x)) if len(badvals) > 0: errors.append('row %d, %s' % (' '.join(badvals))) @@ -331,13 +331,13 @@ class Rgenetics(Html): return True try: efp = dataset.extra_files_path - except: + except Exception: if verbose: gal_Log.debug('@@@rgenetics set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0], dataset.name)) return False try: flist = os.listdir(efp) - except: + except Exception: if verbose: gal_Log.debug('@@@rgenetics set_meta failed %s - dataset %s has no efp ?' % (sys.exc_info()[0], dataset.name)) return False @@ -655,7 +655,7 @@ class RexpBase(Html): pp = os.path.join(dataset.extra_files_path, '%s.pheno' % dataset.metadata.base_name) try: p = open(pp, 'r').readlines() - except: + except Exception: p = ['##failed to find %s' % pp, ] dataset.peek = ''.join(p[:5]) dataset.blurb = 'Galaxy Rexpression composite file' @@ -670,7 +670,7 @@ class RexpBase(Html): pp = os.path.join(dataset.extra_files_path, '%s.pheno' % dataset.metadata.base_name) try: p = open(pp, 'r').readlines() - except: + except Exception: p = ['##failed to find %s' % pp] return ''.join(p[:5]) @@ -681,7 +681,7 @@ class RexpBase(Html): h = '## rexpression get_file_peek: no file found' try: h = open(filename, 'r').readlines() - except: + except Exception: pass return ''.join(h[:5]) @@ -713,7 +713,7 @@ class RexpBase(Html): Html.set_meta(self, dataset, **kwd) try: flist = os.listdir(dataset.extra_files_path) - except: + except Exception: if verbose: gal_Log.debug('@@@rexpression set_meta failed - no dataset?') return False @@ -731,7 +731,7 @@ class RexpBase(Html): dataset.metadata.pheno_path = pp try: pf = open(pp, 'r').readlines() # read the basename.phenodata in the extra_files_path - except: + except Exception: pf = None if pf: h = pf[0].strip() diff --git a/lib/galaxy/datatypes/images.py b/lib/galaxy/datatypes/images.py index f961df3ea78..6c7e457a9ee 100644 --- a/lib/galaxy/datatypes/images.py +++ b/lib/galaxy/datatypes/images.py @@ -225,7 +225,7 @@ class Gmaj(data.Data): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "peek unavailable" def get_mime(self): @@ -285,5 +285,5 @@ class Laj(data.Text): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "peek unavailable" diff --git a/lib/galaxy/datatypes/interval.py b/lib/galaxy/datatypes/interval.py index 9d9a86a1c01..dea3850b946 100644 --- a/lib/galaxy/datatypes/interval.py +++ b/lib/galaxy/datatypes/interval.py @@ -111,20 +111,20 @@ class Interval(Tabular): int(elems[1]) if overwrite or not dataset.metadata.element_is_set('startCol'): dataset.metadata.startCol = 2 - except: + except Exception: pass # Metadata default will be used try: int(elems[2]) if overwrite or not dataset.metadata.element_is_set('endCol'): dataset.metadata.endCol = 3 - except: + except Exception: pass # Metadata default will be used # we no longer want to guess that this column is the 'name', name must now be set manually for interval files # we will still guess at the strand, as we can make a more educated guess # if len( elems ) > 3: # try: # int( elems[3] ) - # except: + # except Exception: # if overwrite or not dataset.metadata.element_is_set( 'nameCol' ): # dataset.metadata.nameCol = 4 if len(elems) < 6 or elems[5] not in data.valid_strand: @@ -149,7 +149,7 @@ class Interval(Tabular): and dataset.metadata.chromCol \ and dataset.metadata.startCol \ and dataset.metadata.endCol - except: + except Exception: return False def get_estimated_display_viewport(self, dataset, chrom_col=None, start_col=None, end_col=None): @@ -331,10 +331,10 @@ class Interval(Tabular): # respectively ( for 0 based columns ) int(hdr[1]) int(hdr[2]) - except: + except Exception: return False return True - except: + except Exception: return False def get_track_resolution(self, dataset, start, end): @@ -458,14 +458,14 @@ class Bed(Interval): fields2 = fields[11].rstrip(",").split(",") # remove trailing comma and split on comma for field in fields2: int(field) - except: + except Exception: return Interval.as_ucsc_display_file(self, dataset) # only check first line for proper form break try: return open(dataset.file_name) - except: + except Exception: return "This item contains no content" def sniff(self, filename): @@ -510,7 +510,7 @@ class Bed(Interval): try: int(hdr[1]) int(hdr[2]) - except: + except Exception: return False if len(hdr) > 4: # hdr[3] is a string, 'name', which defines the name of the BED line - difficult to test for this. @@ -518,7 +518,7 @@ class Bed(Interval): try: if int(hdr[4]) < 0 or int(hdr[4]) > 1000: return False - except: + except Exception: return False if len(hdr) > 5: # hdr[5] is strand @@ -528,48 +528,48 @@ class Bed(Interval): # hdr[6] is thickStart, the starting position at which the feature is drawn thickly. try: int(hdr[6]) - except: + except Exception: return False if len(hdr) > 7: # hdr[7] is thickEnd, the ending position at which the feature is drawn thickly try: int(hdr[7]) - except: + except Exception: return False if len(hdr) > 8: # hdr[8] is itemRgb, an RGB value of the form R,G,B (e.g. 255,0,0). However, this could also be an int (e.g., 0) try: int(hdr[8]) - except: + except Exception: try: hdr[8].split(',') - except: + except Exception: return False if len(hdr) > 9: # hdr[9] is blockCount, the number of blocks (exons) in the BED line. try: block_count = int(hdr[9]) - except: + except Exception: return False if len(hdr) > 10: # hdr[10] is blockSizes - A comma-separated list of the block sizes. # Sometimes the blosck_sizes and block_starts lists end in extra commas try: block_sizes = hdr[10].rstrip(',').split(',') - except: + except Exception: return False if len(hdr) > 11: # hdr[11] is blockStarts - A comma-separated list of block starts. try: block_starts = hdr[11].rstrip(',').split(',') - except: + except Exception: return False if len(block_sizes) != block_count or len(block_starts) != block_count: return False else: return False return True - except: + except Exception: return False @@ -678,15 +678,15 @@ class Gff(Tabular, _RemoteCallMixin): # Try int. int(value) value_type = "int" - except: + except ValueError: try: # Try float. float(value) value_type = "float" - except: + except ValueError: pass attribute_types[name] = value_type - except: + except Exception: pass if i + 1 == num_lines: break @@ -708,7 +708,7 @@ class Gff(Tabular, _RemoteCallMixin): int(elems[3]) int(elems[4]) break - except: + except Exception: pass Tabular.set_meta(self, dataset, overwrite=overwrite, skip=i) @@ -771,7 +771,7 @@ class Gff(Tabular, _RemoteCallMixin): # Make sure we have not spanned chromosomes start = min(start, int(elems[3])) stop = max(stop, int(elems[4])) - except: + except Exception: # most likely start/stop is not an int or not enough fields pass # make sure we are at the next new line @@ -848,19 +848,19 @@ class Gff(Tabular, _RemoteCallMixin): try: int(hdr[3]) int(hdr[4]) - except: + except Exception: return False if hdr[5] != '.': try: float(hdr[5]) - except: + except Exception: return False if hdr[6] not in data.valid_strand: return False if hdr[7] not in self.valid_gff_frame: return False return True - except: + except Exception: return False # ------------- Dataproviders @@ -919,13 +919,13 @@ class Gff3(Gff): try: start = int(elems[3]) valid_start = True - except: + except Exception: if elems[3] == '.': valid_start = True try: end = int(elems[4]) valid_end = True - except: + except Exception: if elems[4] == '.': valid_end = True strand = elems[6] @@ -982,18 +982,18 @@ class Gff3(Gff): return False try: int(hdr[3]) - except: + except Exception: if hdr[3] != '.': return False try: int(hdr[4]) - except: + except Exception: if hdr[4] != '.': return False if hdr[5] != '.': try: float(hdr[5]) - except: + except Exception: return False if hdr[6] not in self.valid_gff3_strand: return False @@ -1001,7 +1001,7 @@ class Gff3(Gff): return False parse_gff3_attributes(hdr[8]) return True - except: + except Exception: return False @@ -1055,12 +1055,12 @@ class Gtf(Gff): try: int(hdr[3]) int(hdr[4]) - except: + except Exception: return False if hdr[5] != '.': try: float(hdr[5]) - except: + except Exception: return False if hdr[6] not in data.valid_strand: return False @@ -1077,7 +1077,7 @@ class Gtf(Gff): else: return False return True - except: + except Exception: return False @@ -1140,7 +1140,7 @@ class Wiggle(Tabular, _RemoteCallMixin): start = min(int(fields[0]), start) end = max(end, int(fields[0]) + span) viewport_feature_count -= 1 - except: + except Exception: pass # make sure we are at the next new line readline_count = VIEWPORT_MAX_READS_PER_LINE @@ -1199,7 +1199,7 @@ class Wiggle(Tabular, _RemoteCallMixin): try: float(elems[0]) # "Wiggle track data values can be integer or real, positive or negative values" break - except: + except Exception: do_break = False for col_startswith in data.col1_startswith: if elems[0].lower().startswith(col_startswith): @@ -1244,7 +1244,7 @@ class Wiggle(Tabular, _RemoteCallMixin): if len(hdr) > 1 and hdr[0] == 'track' and hdr[1].startswith('type=wiggle'): return True return False - except: + except Exception: return False def get_track_resolution(self, dataset, start, end): @@ -1394,7 +1394,7 @@ class CustomTrack (Tabular): return False else: return False - except: + except Exception: return False else: try: @@ -1404,9 +1404,9 @@ class CustomTrack (Tabular): try: int(hdr[1]) int(hdr[2]) - except: + except Exception: return False - except: + except Exception: return False return True @@ -1539,7 +1539,7 @@ class ScIdx(Tabular): count += 1 if count < 100 and count > 0: return True - except: + except Exception: return False finally: fh.close() diff --git a/lib/galaxy/datatypes/molecules.py b/lib/galaxy/datatypes/molecules.py index 21cc3b7e7c6..e7ee4734804 100644 --- a/lib/galaxy/datatypes/molecules.py +++ b/lib/galaxy/datatypes/molecules.py @@ -33,7 +33,7 @@ def count_special_lines(word, filename, invert=False): cmd.extend([word, filename]) out = subprocess.Popen(cmd, stdout=subprocess.PIPE) return int(out.communicate()[0].split()[0]) - except: + except Exception: pass return 0 @@ -48,7 +48,7 @@ def count_lines(filename, non_empty=False): else: out = subprocess.Popen(['wc', '-l', filename], stdout=subprocess.PIPE) return int(out.communicate()[0].split()[0]) - except: + except Exception: pass return 0 @@ -427,7 +427,7 @@ class OBFS(Binary): """Create HTML content, used for displaying peek.""" try: return dataset.peek - except: + except Exception: return "OpenBabel Fastsearch Index" def display_data(self, trans, data, preview=False, filename=None, @@ -702,7 +702,7 @@ class SMILES(Tabular): # if we have atoms, we have a molecule if not len(pybel.readstring('smi', smiles).atoms) > 0: return False - except: + except Exception: # if convert fails its not a smiles string return False return True diff --git a/lib/galaxy/datatypes/msa.py b/lib/galaxy/datatypes/msa.py index 0c95fd6d93c..cc26438ceca 100644 --- a/lib/galaxy/datatypes/msa.py +++ b/lib/galaxy/datatypes/msa.py @@ -26,7 +26,7 @@ class Hmmer(Text): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "HMMER database (%s)" % (nice_size(dataset.get_size())) @abc.abstractmethod @@ -77,7 +77,7 @@ class HmmerPress(Binary): """Create HTML content, used for displaying peek.""" try: return dataset.peek - except: + except Exception: return "HMMER3 database (multiple files)" def __init__(self, **kwd): diff --git a/lib/galaxy/datatypes/ngsindex.py b/lib/galaxy/datatypes/ngsindex.py index 77b5c3348d1..18ee180807e 100644 --- a/lib/galaxy/datatypes/ngsindex.py +++ b/lib/galaxy/datatypes/ngsindex.py @@ -55,7 +55,7 @@ class BowtieIndex(Html): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Bowtie index file" diff --git a/lib/galaxy/datatypes/plant_tribes.py b/lib/galaxy/datatypes/plant_tribes.py index 43e13e43d7a..d275e1aedf1 100644 --- a/lib/galaxy/datatypes/plant_tribes.py +++ b/lib/galaxy/datatypes/plant_tribes.py @@ -18,7 +18,7 @@ class Smat(Text): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "ESTScan scores matrices (%s)" % (nice_size(dataset.get_size())) def set_peek(self, dataset, is_multi_byte=False): @@ -98,7 +98,7 @@ class PlantTribesKsComponents(Tabular): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Significant components in the Ks distribution (%s)" % (nice_size(dataset.get_size())) def set_meta(self, dataset, **kwd): diff --git a/lib/galaxy/datatypes/proteomics.py b/lib/galaxy/datatypes/proteomics.py index 525ffb1daab..27e923c2b3b 100644 --- a/lib/galaxy/datatypes/proteomics.py +++ b/lib/galaxy/datatypes/proteomics.py @@ -285,7 +285,7 @@ class ThermoRAW(Binary): if header.find(finnigan) != -1: return True return False - except: + except Exception: return False def set_peek(self, dataset, is_multi_byte=False): @@ -299,7 +299,7 @@ class ThermoRAW(Binary): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Thermo Finnigan RAW file (%s)" % (nice_size(dataset.get_size())) @@ -464,3 +464,49 @@ class ImzML(Binary): rval.append('

  • %s%s
  • ' % (fn, fn, opt_text)) rval.append('
    ') return "\n".join(rval) + + +class Analyze75(Binary): + """ + Mayo Analyze 7.5 files + http://www.imzml.org + """ + file_ext = 'analyze75' + allow_datatype_change = False + composite_type = 'auto_primary_file' + + def __init__(self, **kwd): + Binary.__init__(self, **kwd) + + """The header file. Provides information about dimensions, identification, and processing history.""" + self.add_composite_file( + 'hdr', + description='The Analyze75 header file.', + is_binary=False) + + """The image file. Image data, whose data type and ordering are described by the header file.""" + self.add_composite_file( + 'img', + description='The Analyze75 image file.', + is_binary=True) + + """The optional t2m file.""" + self.add_composite_file( + 't2m', + description='The Analyze75 t2m file.', + optional='True', is_binary=True) + + def generate_primary_file(self, dataset=None): + rval = ['Analyze75 Composite Dataset.

    '] + rval.append('

    This composite dataset is composed of the following files:

    ') + return "\n".join(rval) diff --git a/lib/galaxy/datatypes/qualityscore.py b/lib/galaxy/datatypes/qualityscore.py index 770af6def39..8b55ff34870 100644 --- a/lib/galaxy/datatypes/qualityscore.py +++ b/lib/galaxy/datatypes/qualityscore.py @@ -56,7 +56,7 @@ class QualityScoreSOLiD (QualityScore): if not(readlen): readlen = len(line.split()) assert len(line.split()) == readlen # SOLiD reads should be of the same length - except: + except Exception: break goodblock += 1 if goodblock > 10: @@ -64,7 +64,7 @@ class QualityScoreSOLiD (QualityScore): else: break # we found a non-empty line, but it's not a header fh.close() - except: + except Exception: pass return False @@ -106,13 +106,13 @@ class QualityScore454 (QualityScore): break try: [int(x) for x in line.split()] - except: + except Exception: break return True else: break # we found a non-empty line, but it's not a header fh.close() - except: + except Exception: pass return False diff --git a/lib/galaxy/datatypes/sequence.py b/lib/galaxy/datatypes/sequence.py index ee47ad70bbd..a2083fab2b5 100644 --- a/lib/galaxy/datatypes/sequence.py +++ b/lib/galaxy/datatypes/sequence.py @@ -81,7 +81,7 @@ class SequenceSplitLocations(data.Text): if 'start' not in section or 'end' not in section or 'sequences' not in section: return False return True - except: + except Exception: pass return False @@ -376,7 +376,7 @@ class Fasta(Sequence): else: break # we found a non-empty line, but it's not a fasta header fh.close() - except: + except Exception: pass return False @@ -543,7 +543,7 @@ class csFasta(Sequence): else: break # we found a non-empty line, but it's not a header fh.close() - except: + except Exception: pass return False @@ -634,7 +634,7 @@ class BaseFastq (Sequence): return False return True return False - except: + except Exception: return False def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, **kwd): @@ -930,7 +930,7 @@ class Maf(Alignment): return True else: return False - except: + except Exception: return False @@ -968,7 +968,7 @@ class MafCustomTrack(data.Text): dataset.metadata.vp_chromosome = chrom dataset.metadata.vp_start = forward_strand_start dataset.metadata.vp_end = forward_strand_end - except: + except Exception: pass @@ -1019,7 +1019,7 @@ class Axt(data.Text): return False try: map(int, [hdr[0], hdr[2], hdr[3], hdr[5], hdr[6], hdr[8]]) - except: + except Exception: return False if hdr[7] not in data.valid_strand: return False @@ -1060,7 +1060,7 @@ class Lav(data.Text): return True else: return False - except: + except Exception: return False @@ -1205,7 +1205,7 @@ class Genbank(data.Text): try: with open(filename, 'r') as handle: return 'LOCUS ' == handle.read(6) - except: + except Exception: pass return False @@ -1236,7 +1236,7 @@ class MemePsp(Sequence): for item in l.split(): try: float(item) - except: + except ValueError: return False return True try: @@ -1269,7 +1269,7 @@ class MemePsp(Sequence): # We found a non-empty line, # but it's not a psp id width. return False - except: + except Exception: return False # We've reached EOF in less than 100 lines. return True diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py index 18b5ad1387f..970beefa63d 100644 --- a/lib/galaxy/datatypes/sniff.py +++ b/lib/galaxy/datatypes/sniff.py @@ -54,7 +54,7 @@ def stream_to_open_named_file(stream, fd, filename, source_encoding=None, source is_multi_byte = False try: codecs.lookup(target_encoding) - except: + except Exception: target_encoding = util.DEFAULT_ENCODING # utf-8 if not source_encoding: source_encoding = util.DEFAULT_ENCODING # sys.getdefaultencoding() would mimic old behavior (defaults to ascii) @@ -70,7 +70,7 @@ def stream_to_open_named_file(stream, fd, filename, source_encoding=None, source try: if text_type(chunk[:2]) == text_type(util.gzip_magic): is_compressed = True - except: + except Exception: pass if not is_compressed: # See if we have a multi-byte character file @@ -408,7 +408,7 @@ def guess_ext(fname, sniff_order, is_multi_byte=False): if datatype.sniff(fname): file_ext = datatype.file_ext break - except: + except Exception: pass # Ugly hack for tsv vs tabular sniffing, we want to prefer tabular # to tsv but it doesn't have a sniffer - is TSV was sniffed just check diff --git a/lib/galaxy/datatypes/tabular.py b/lib/galaxy/datatypes/tabular.py index 234a436a648..7858d28a638 100644 --- a/lib/galaxy/datatypes/tabular.py +++ b/lib/galaxy/datatypes/tabular.py @@ -62,7 +62,7 @@ class TabularData(data.Text): and dataset.state == dataset.states.OK \ and dataset.metadata.columns > 0 \ and dataset.metadata.data_lines != 0 - except: + except Exception: return False def get_chunk(self, trans, dataset, offset=0, ck_size=None): @@ -156,7 +156,7 @@ class TabularData(data.Text): if isinstance(spec.param, metadata.ColumnParameter): try: i = int(getattr(dataset.metadata, name)) - 1 - except: + except Exception: i = -1 if 0 <= i < columns and column_headers[i] is None: column_headers[i] = column_parameter_alias.get(name, name) @@ -294,14 +294,14 @@ class Tabular(TabularData): try: int(column_text) return True - except: + except ValueError: return False def is_float(column_text): try: float(column_text) return True - except: + except ValueError: if column_text.strip().lower() == 'na': return True # na is special cased to be a float return False @@ -488,7 +488,7 @@ class Sam(Tabular): fh.close() if count < 5 and count > 0: return True - except: + except Exception: pass return False @@ -650,10 +650,10 @@ class Pileup(Tabular): chrom = int(hdr[1]) assert chrom >= 0 assert hdr[2] in ['A', 'C', 'G', 'T', 'N', 'a', 'c', 'g', 't', 'n'] - except: + except Exception: return False return True - except: + except Exception: return False # Dataproviders @@ -919,14 +919,14 @@ class BaseCSV(TabularData): try: int(column_text) return True - except: + except ValueError: return False def is_float(self, column_text): try: float(column_text) return True - except: + except ValueError: if column_text.strip().lower() == 'na': return True # na is special cased to be a float return False @@ -990,7 +990,7 @@ class BaseCSV(TabularData): if not csv.Sniffer().has_header(open(filename, 'r').read(self.big_peek_size)): return False return True - except: + except Exception: # Not readable by Python's csv using this dialect return False @@ -1137,7 +1137,7 @@ class ConnectivityTable(Tabular): j += 1 i += 1 return False - except: + except Exception: return False def get_chunk(self, trans, dataset, chunk): diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py index add725de535..aca40c5e358 100644 --- a/lib/galaxy/datatypes/text.py +++ b/lib/galaxy/datatypes/text.py @@ -55,7 +55,7 @@ class Html(Text): if hdr and hdr[0].lower().find('') >= 0: return True return False - except: + except Exception: return True @@ -104,7 +104,7 @@ class Json(Text): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "JSON file (%s)" % (nice_size(dataset.get_size())) @@ -130,7 +130,7 @@ class Ipynb(Json): return True else: return False - except: + except Exception: return False def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, **kwd): @@ -420,7 +420,7 @@ class SnpEffDb(Text): if m: snpeff_version = m.groups()[0] + m.groups()[1] fh.close() - except: + except Exception: pass return snpeff_version @@ -465,7 +465,7 @@ class SnpEffDb(Text): fh.write("annotations: %s\n" % ','.join(annotations)) if regulations: fh.write("regulations: %s\n" % ','.join(regulations)) - except: + except Exception: pass diff --git a/lib/galaxy/datatypes/tracks.py b/lib/galaxy/datatypes/tracks.py index 6468737a49f..dbb9e04eb11 100644 --- a/lib/galaxy/datatypes/tracks.py +++ b/lib/galaxy/datatypes/tracks.py @@ -78,7 +78,7 @@ class UCSCTrackHub(Html): def display_peek(self, dataset): try: return dataset.peek - except: + except Exception: return "Track Hub structure: Visualization in UCSC Track Hub" def sniff(self, filename): diff --git a/lib/galaxy/datatypes/util/generic_util.py b/lib/galaxy/datatypes/util/generic_util.py index b285070b70f..3709992361f 100644 --- a/lib/galaxy/datatypes/util/generic_util.py +++ b/lib/galaxy/datatypes/util/generic_util.py @@ -14,6 +14,6 @@ def count_special_lines(word, filename, invert=False): cmd.extend([word, filename]) out = subprocess.Popen(cmd, stdout=subprocess.PIPE) return int(out.communicate()[0].split()[0]) - except: + except Exception: pass return 0 diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 29254585c80..091841db3e0 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -63,7 +63,7 @@ class ConditionalDependencies(object): try: name = name.replace('-', '_').replace('.', '_') return getattr(self, 'check_' + name)() - except: + except Exception: return False def check_psycopg2(self): diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index bb412fb559d..457ed0682db 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1166,7 +1166,7 @@ class JobWrapper(object, HasResourceParameters): # TODO: After failing here, consider returning from the function. try: self.reclaim_ownership() - except: + except Exception: log.exception('(%s) Failed to change ownership of %s, failing' % (job.id, self.working_directory)) return self.fail(job.info, stdout=stdout, stderr=stderr, exit_code=tool_exit_code) @@ -1316,7 +1316,7 @@ class JobWrapper(object, HasResourceParameters): dataset.set_peek(line_count=context['line_count'], is_multi_byte=True) else: dataset.set_peek(line_count=context['line_count']) - except: + except Exception: if (not dataset.datatype.composite_type and dataset.dataset.is_multi_byte()) or self.tool.is_multi_byte: dataset.set_peek(is_multi_byte=True) else: @@ -1467,7 +1467,7 @@ class JobWrapper(object, HasResourceParameters): galaxy.tools.imp_exp.JobImportHistoryArchiveWrapper(self.app, self.job_id).cleanup_after_job() if delete_files: self.app.object_store.delete(self.get_job(), base_dir='job_work', entire_dir=True, dir_only=True, obj_dir=True) - except: + except Exception: log.exception("Unable to cleanup job %d", self.job_id) def _collect_extra_files(self, dataset, job_working_directory): @@ -1765,7 +1765,7 @@ class JobWrapper(object, HasResourceParameters): if external_chown_script and job.user is not None: try: self._change_ownership(self.user_system_pwent[0], str(self.user_system_pwent[3])) - except: + except Exception: log.exception('(%s) Failed to change ownership of %s, making world-writable instead' % (job.id, self.working_directory)) os.chmod(self.working_directory, 0o777) diff --git a/lib/galaxy/jobs/deferred/__init__.py b/lib/galaxy/jobs/deferred/__init__.py index f8ab70a20a4..292fabd6483 100644 --- a/lib/galaxy/jobs/deferred/__init__.py +++ b/lib/galaxy/jobs/deferred/__init__.py @@ -39,7 +39,7 @@ class DeferredJobQueue(object): module_name = 'galaxy.jobs.deferred.' + name try: module = __import__(module_name) - except: + except ImportError: log.exception('Deferred job plugin appears to exist but is not loadable: %s', module_name) continue for comp in module_name.split(".")[1:]: @@ -76,7 +76,7 @@ class DeferredJobQueue(object): while self.running: try: self.__monitor_step() - except: + except Exception: log.exception('Exception in monitor_step') self.sleeper.sleep(1) log.info('job queue stopped') @@ -100,7 +100,7 @@ class DeferredJobQueue(object): # Recovered jobs are passed in by ID assert type(job) is int job = self.sa_session.query(model.DeferredJob).get(job) - except: + except Exception: pass if job.is_check_time: try: diff --git a/lib/galaxy/jobs/handler.py b/lib/galaxy/jobs/handler.py index 9818cdf7ba7..2acb8b15f85 100644 --- a/lib/galaxy/jobs/handler.py +++ b/lib/galaxy/jobs/handler.py @@ -1,20 +1,33 @@ """ Galaxy job handler, prepares, runs, tracks, and finishes Galaxy jobs """ - import datetime -import os -import time import logging +import os import threading -from Queue import Queue, Empty +import time +from Queue import ( + Empty, + Queue +) -from sqlalchemy.sql.expression import and_, or_, select, func, true, null +from sqlalchemy.sql.expression import ( + and_, + func, + null, + or_, + select, + true +) from galaxy import model -from galaxy.util.sleeper import Sleeper -from galaxy.jobs import JobWrapper, TaskWrapper, JobDestination +from galaxy.jobs import ( + JobDestination, + JobWrapper, + TaskWrapper +) from galaxy.jobs.mapper import JobNotReadyException +from galaxy.util.sleeper import Sleeper log = logging.getLogger(__name__) @@ -196,7 +209,7 @@ class JobHandlerQueue(object): # to the sleep. if not self.app.job_manager.job_lock: self.__monitor_step() - except: + except Exception: log.exception("Exception in monitor_step") # Sleep self.sleeper.sleep(1) @@ -703,7 +716,7 @@ class JobHandlerStopQueue(object): while self.running: try: self.monitor_step() - except: + except Exception: log.exception("Exception in monitor_step") # Sleep self.sleeper.sleep(1) diff --git a/lib/galaxy/jobs/output_checker.py b/lib/galaxy/jobs/output_checker.py index 14072957a65..7cd5549c58a 100644 --- a/lib/galaxy/jobs/output_checker.py +++ b/lib/galaxy/jobs/output_checker.py @@ -1,9 +1,9 @@ import re -from .error_level import StdioErrorLevel import traceback - from logging import getLogger +from .error_level import StdioErrorLevel + log = getLogger(__name__) @@ -126,7 +126,7 @@ def check_output(tool, stdout, stderr, tool_exit_code, job): success = True # On any exception, return True. - except: + except Exception: tb = traceback.format_exc() log.warning("Tool check encountered unexpected exception; " + "assuming tool was successful: " + tb) diff --git a/lib/galaxy/jobs/runners/__init__.py b/lib/galaxy/jobs/runners/__init__.py index dfbe125fcf6..675d7ba484b 100644 --- a/lib/galaxy/jobs/runners/__init__.py +++ b/lib/galaxy/jobs/runners/__init__.py @@ -1,28 +1,34 @@ """ Base classes for job runner plugins. """ - -import os -import time -import string -import logging import datetime -import threading +import logging +import os +import string import subprocess - -from Queue import Queue, Empty +import threading +import time +from Queue import ( + Empty, + Queue +) import galaxy.jobs -from galaxy.jobs.command_factory import build_command from galaxy import model -from galaxy.util import DATABASE_MAX_STRING_SIZE, shrink_stream_by_size -from galaxy.util import in_directory -from galaxy.util import ParamsWithSpecs -from galaxy.util import ExecutionTimer -from galaxy.util.bunch import Bunch -from galaxy.jobs.runners.util.job_script import write_script -from galaxy.jobs.runners.util.job_script import job_script +from galaxy.jobs.command_factory import build_command from galaxy.jobs.runners.util.env import env_to_statement +from galaxy.jobs.runners.util.job_script import ( + job_script, + write_script +) +from galaxy.util import ( + DATABASE_MAX_STRING_SIZE, + ExecutionTimer, + in_directory, + ParamsWithSpecs, + shrink_stream_by_size +) +from galaxy.util.bunch import Bunch from .state_handler_factory import build_state_handlers @@ -94,15 +100,15 @@ class BaseJobRunner(object): else: # arg should be a JobWrapper/TaskWrapper job_id = arg.get_id_tag() - except: + except Exception: job_id = 'unknown' try: name = method.__name__ - except: + except Exception: name = 'unknown' try: method(arg) - except: + except Exception: log.exception("(%s) Unhandled exception calling %s" % (job_id, name)) # Causes a runner's `queue_job` method to be called from a worker thread @@ -366,7 +372,7 @@ class BaseJobRunner(object): handler(self.app, self, job_state) if job_state.runner_state_handled: break - except: + except Exception: log.exception('Caught exception in runner state handler') def fail_job(self, job_state, exception=False): @@ -610,14 +616,14 @@ class AsynchronousJobRunner(BaseJobRunner): try: # This should be an 8-bit exit code, but read ahead anyway: exit_code_str = open(job_state.exit_code_file, "r").read(32) - except: + except Exception: # By default, the exit code is 0, which typically indicates success. exit_code_str = "0" try: # Decode the exit code. If it's bogus, then just use 0. exit_code = int(exit_code_str) - except: + except ValueError: log.warning("(%s/%s) Exit code '%s' invalid. Using 0." % (galaxy_id_tag, external_job_id, exit_code_str)) exit_code = 0 @@ -628,7 +634,7 @@ class AsynchronousJobRunner(BaseJobRunner): try: job_state.job_wrapper.finish(stdout, stderr, exit_code) - except: + except Exception: log.exception("(%s/%s) Job wrapper finish method failed" % (galaxy_id_tag, external_job_id)) job_state.job_wrapper.fail("Unable to finish job", exception=True) diff --git a/lib/galaxy/jobs/runners/cli.py b/lib/galaxy/jobs/runners/cli.py index c7e3cea179b..107dea18907 100644 --- a/lib/galaxy/jobs/runners/cli.py +++ b/lib/galaxy/jobs/runners/cli.py @@ -82,7 +82,7 @@ class ShellJobRunner(AsynchronousJobRunner): try: self.write_executable_script(ajs.job_file, script) - except: + except Exception: log.exception("(%s) failure writing job script" % galaxy_id_tag) job_wrapper.fail("failure preparing job script", exception=True) return diff --git a/lib/galaxy/jobs/runners/condor.py b/lib/galaxy/jobs/runners/condor.py index db3c821398f..5217034c7f6 100644 --- a/lib/galaxy/jobs/runners/condor.py +++ b/lib/galaxy/jobs/runners/condor.py @@ -105,7 +105,7 @@ class CondorJobRunner(AsynchronousJobRunner): ) try: self.write_executable_script(executable, script) - except: + except Exception: job_wrapper.fail("failure preparing job script", exception=True) log.exception("(%s) failure preparing job script" % galaxy_id_tag) return diff --git a/lib/galaxy/jobs/runners/drmaa.py b/lib/galaxy/jobs/runners/drmaa.py index 416c46f1578..c0df4839c16 100644 --- a/lib/galaxy/jobs/runners/drmaa.py +++ b/lib/galaxy/jobs/runners/drmaa.py @@ -110,7 +110,7 @@ class DRMAAJobRunner(AsynchronousJobRunner): """Get any native DRM arguments specified by the site configuration""" try: return url.split('/')[2] or None - except: + except Exception: return None def queue_job(self, job_wrapper): @@ -151,7 +151,7 @@ class DRMAAJobRunner(AsynchronousJobRunner): script = self.get_job_file(job_wrapper, exit_code_path=ajs.exit_code_file) try: self.write_executable_script(ajs.job_file, script) - except: + except Exception: job_wrapper.fail("failure preparing job script", exception=True) log.exception("(%s) failure writing job script" % galaxy_id_tag) return @@ -183,7 +183,7 @@ class DRMAAJobRunner(AsynchronousJobRunner): log.warning('(%s) drmaa.Session.runJob() failed, will retry: %s', galaxy_id_tag, e) fail_msg = "Unable to run this job due to a cluster error, please retry it later" time.sleep(5) - except: + except Exception: log.exception('(%s) drmaa.Session.runJob() failed unconditionally', galaxy_id_tag) trynum = 5 else: diff --git a/lib/galaxy/jobs/runners/godocker.py b/lib/galaxy/jobs/runners/godocker.py index f15774a6dd0..387c6436261 100644 --- a/lib/galaxy/jobs/runners/godocker.py +++ b/lib/galaxy/jobs/runners/godocker.py @@ -336,16 +336,16 @@ class GodockerJobRunner(AsynchronousJobRunner): job_destination = job_wrapper.job_destination try: docker_cpu = int(job_destination.params["docker_cpu"]) - except: + except Exception: docker_cpu = 1 try: docker_ram = int(job_destination.params["docker_memory"]) - except: + except Exception: docker_ram = 1 try: docker_image = self._find_container(job_wrapper).container_id log.debug("GoDocker runner using container %s.", docker_image) - except: + except Exception: log.error("Unable to find docker_image for job %s, failing." % job_wrapper.job_id) return False @@ -367,7 +367,7 @@ class GodockerJobRunner(AsynchronousJobRunner): for i in volume: temp = dict({"name": i}) volumes.append(temp) - except: + except Exception: log.debug("godocker_volume not set, using default.") dt = datetime.now() @@ -379,7 +379,7 @@ class GodockerJobRunner(AsynchronousJobRunner): command = "#!/bin/bash\n" + "cd " + job_wrapper.working_directory + "\n" + venv + "\n" + job_wrapper.runner_command_line else: command = "#!/bin/bash\n" + "cd " + job_wrapper.working_directory + "\n" + job_wrapper.runner_command_line - except: + except Exception: command = "#!/bin/bash\n" + "cd " + job_wrapper.working_directory + "\n" + job_wrapper.runner_command_line # GoDocker Job model schema diff --git a/lib/galaxy/jobs/runners/kubernetes.py b/lib/galaxy/jobs/runners/kubernetes.py index b6027437044..1c5e899a1a6 100644 --- a/lib/galaxy/jobs/runners/kubernetes.py +++ b/lib/galaxy/jobs/runners/kubernetes.py @@ -131,7 +131,7 @@ class KubernetesJobRunner(AsynchronousJobRunner): if "k8s_supplemental_group_id" in self.runner_params: try: return int(self.runner_params["k8s_supplemental_group_id"]) - except: + except Exception: log.warning("Supplemental group passed for Kubernetes runner needs to be an integer, value " + self.runner_params["k8s_supplemental_group_id"] + " passed is invalid") return None @@ -141,7 +141,7 @@ class KubernetesJobRunner(AsynchronousJobRunner): if "k8s_fs_group_id" in self.runner_params: try: return int(self.runner_params["k8s_fs_group_id"]) - except: + except Exception: log.warning("FS group passed for Kubernetes runner needs to be an integer, value " + self.runner_params["k8s_fs_group_id"] + " passed is invalid") return None diff --git a/lib/galaxy/jobs/runners/local.py b/lib/galaxy/jobs/runners/local.py index aed42306a4a..14dd9be9186 100644 --- a/lib/galaxy/jobs/runners/local.py +++ b/lib/galaxy/jobs/runners/local.py @@ -128,7 +128,7 @@ class LocalJobRunner(BaseJobRunner): # Finish the job! try: job_wrapper.finish(stdout, stderr, exit_code) - except: + except Exception: log.exception("Job wrapper finish method failed") self._fail_job_local(job_wrapper, "Unable to finish job") diff --git a/lib/galaxy/jobs/runners/pbs.py b/lib/galaxy/jobs/runners/pbs.py index 9961717b660..a3ea473d37f 100644 --- a/lib/galaxy/jobs/runners/pbs.py +++ b/lib/galaxy/jobs/runners/pbs.py @@ -143,7 +143,7 @@ class PBSJobRunner(AsynchronousJobRunner): # stripping the - comes later (in parse_destination_params) for i, opt in enumerate(opts): opts[i] = '-' + opt - except: + except Exception: opts = [] for opt in opts: param, value = opt.split(None, 1) @@ -168,7 +168,7 @@ class PBSJobRunner(AsynchronousJobRunner): arg = PBS_ARGMAP[arg] arg = arg.lstrip('-') args[arg] = value - except: + except Exception: log.warning('Unrecognized long argument in destination params: %s' % arg) return self.__args_to_attrs(args) @@ -371,7 +371,7 @@ class PBSJobRunner(AsynchronousJobRunner): self.check_single_job(pbs_server_name, job_id) log.warning("(%s/%s) PBS job was not in state check list, but was found with individual state check" % (galaxy_job_id, job_id)) new_watched.append(pbs_job_state) - except: + except Exception: errno, text = pbs.error() if errno == 15001: # 15001 == job not in queue @@ -525,7 +525,7 @@ class PBSJobRunner(AsynchronousJobRunner): pbs.pbs_deljob(c, job_id, '') log.debug("%s Removed from PBS queue before job completion" % job_tag) - except: + except Exception: e = traceback.format_exc() log.debug("%s Unable to stop job: %s" % (job_tag, e)) finally: diff --git a/lib/galaxy/jobs/runners/slurm.py b/lib/galaxy/jobs/runners/slurm.py index 1b9ca47e59b..f6a5fb7d808 100644 --- a/lib/galaxy/jobs/runners/slurm.py +++ b/lib/galaxy/jobs/runners/slurm.py @@ -104,7 +104,7 @@ class SlurmJobRunner(DRMAAJobRunner): try: self.queue_job(ajs.job_wrapper) return - except: + except Exception: ajs.fail_message = "This job failed due to a cluster node failure, and an attempt to resubmit the job failed." elif slurm_state == 'CANCELLED': # Check to see if the job was killed for exceeding memory consumption @@ -164,7 +164,7 @@ class SlurmJobRunner(DRMAAJobRunner): return 'This job was terminated because it used more memory than it was allocated.' elif any(_ in stripped_line for _ in SLURM_MEMORY_LIMIT_EXCEEDED_PARTIAL_WARNINGS): return 'This job was cancelled probably because it used more memory than it was allocated.' - except: + except Exception: log.exception('Error reading end of %s:', efile_path) return False diff --git a/lib/galaxy/jobs/runners/state_handler_factory.py b/lib/galaxy/jobs/runners/state_handler_factory.py index 6f1d24ddb72..844364c1e6b 100644 --- a/lib/galaxy/jobs/runners/state_handler_factory.py +++ b/lib/galaxy/jobs/runners/state_handler_factory.py @@ -1,9 +1,7 @@ import logging -from galaxy.util.submodules import submodules - import galaxy.jobs.runners.state_handlers - +from galaxy.util.submodules import submodules log = logging.getLogger(__name__) diff --git a/lib/galaxy/jobs/runners/tasks.py b/lib/galaxy/jobs/runners/tasks.py index b3685abeeab..63d29e17db7 100644 --- a/lib/galaxy/jobs/runners/tasks.py +++ b/lib/galaxy/jobs/runners/tasks.py @@ -52,7 +52,7 @@ class TaskedJobRunner(BaseJobRunner): parallelism = job_wrapper.get_parallelism() try: splitter = getattr(__import__('galaxy.jobs.splitters', globals(), locals(), [parallelism.method]), parallelism.method) - except: + except Exception: job_wrapper.change_state(model.Job.states.ERROR) job_wrapper.fail("Job Splitting Failed, no match for '%s'" % parallelism) return @@ -125,7 +125,7 @@ class TaskedJobRunner(BaseJobRunner): # Finish the job try: job_wrapper.finish(stdout, stderr, job_exit_code) - except: + except Exception: log.exception("Job wrapper finish method failed") job_wrapper.fail("Unable to finish job", exception=True) diff --git a/lib/galaxy/jobs/runners/util/cli/job/slurm.py b/lib/galaxy/jobs/runners/util/cli/job/slurm.py index a6a88ead1f3..9b3813ced72 100644 --- a/lib/galaxy/jobs/runners/util/cli/job/slurm.py +++ b/lib/galaxy/jobs/runners/util/cli/job/slurm.py @@ -41,7 +41,7 @@ class Slurm(BaseJobExec): if not k.startswith('-'): k = argmap[k] scriptargs[k] = v - except: + except Exception: log.warning('Unrecognized long argument passed to Slurm CLI plugin: %s' % k) # Generated template. diff --git a/lib/galaxy/jobs/runners/util/cli/job/torque.py b/lib/galaxy/jobs/runners/util/cli/job/torque.py index d4e0f49af32..2b2819dfc36 100644 --- a/lib/galaxy/jobs/runners/util/cli/job/torque.py +++ b/lib/galaxy/jobs/runners/util/cli/job/torque.py @@ -1,7 +1,7 @@ from logging import getLogger try: import xml.etree.cElementTree as et -except: +except ImportError: import xml.etree.ElementTree as et try: diff --git a/lib/galaxy/jobs/transfer_manager.py b/lib/galaxy/jobs/transfer_manager.py index 8e06024832c..3b85d7d5784 100644 --- a/lib/galaxy/jobs/transfer_manager.py +++ b/lib/galaxy/jobs/transfer_manager.py @@ -147,7 +147,7 @@ class TransferManager(object): # restart the transfer if socket communication fails repeatedly. try: os.kill(tj.pid, 0) - except: + except Exception: self.sa_session.refresh(tj) if tj.state == tj.states.RUNNING: log.error('Transfer job %s is marked as running but pid %s appears to be dead.' % (tj.id, tj.pid)) diff --git a/lib/galaxy/managers/context.py b/lib/galaxy/managers/context.py index 291cddc5b91..0bb24625b37 100644 --- a/lib/galaxy/managers/context.py +++ b/lib/galaxy/managers/context.py @@ -27,11 +27,11 @@ class ProvidesAppContext(object): action.user = user else: action.user = self.user - except: + except Exception: action.user = None try: action.session_id = self.galaxy_session.id - except: + except Exception: action.session_id = None self.sa_session.add(action) self.sa_session.flush() @@ -46,23 +46,23 @@ class ProvidesAppContext(object): event.tool_id = tool_id try: event.message = message % kwargs - except: + except Exception: event.message = message try: event.history = self.get_history() - except: + except Exception: event.history = None try: event.history_id = self.history.id - except: + except Exception: event.history_id = None try: event.user = self.user - except: + except Exception: event.user = None try: event.session_id = self.galaxy_session.id - except: + except Exception: event.session_id = None self.sa_session.add(event) self.sa_session.flush() diff --git a/lib/galaxy/managers/folders.py b/lib/galaxy/managers/folders.py index d681e6a78da..506518b0b2e 100644 --- a/lib/galaxy/managers/folders.py +++ b/lib/galaxy/managers/folders.py @@ -132,7 +132,7 @@ class FolderManager(object): """ parent_folder = self.get(trans, parent_folder_id) current_user_roles = trans.get_current_user_roles() - if not (trans.user_is_admin or trans.app.security_agent.can_add_library_item(current_user_roles, parent_folder)): + if not (trans.user_is_admin() or trans.app.security_agent.can_add_library_item(current_user_roles, parent_folder)): raise InsufficientPermissionsException('You do not have proper permission to create folders under given folder.') new_folder = trans.app.model.LibraryFolder(name=new_folder_name, description=new_folder_description) # We are associating the last used genome build with folders, so we will always @@ -230,7 +230,7 @@ class FolderManager(object): """ Return true if the user has permissions to add item to the given folder. """ - if trans.user_is_admin: + if trans.user_is_admin(): return True current_user_roles = trans.get_current_user_roles() add_roles = set(trans.app.security_agent.get_roles_for_action(folder, trans.app.security_agent.permitted_actions.LIBRARY_ADD)) diff --git a/lib/galaxy/managers/libraries.py b/lib/galaxy/managers/libraries.py index b94217ee53f..ed7ef58c39b 100644 --- a/lib/galaxy/managers/libraries.py +++ b/lib/galaxy/managers/libraries.py @@ -50,7 +50,7 @@ class LibraryManager(object): """ Create a new library. """ - if not trans.user_is_admin: + if not trans.user_is_admin(): raise exceptions.ItemAccessibilityException('Only administrators can create libraries.') else: library = trans.app.model.Library(name=name, description=description, synopsis=synopsis) diff --git a/lib/galaxy/managers/library_datasets.py b/lib/galaxy/managers/library_datasets.py index 20ce8c3789a..115f3cb66e8 100644 --- a/lib/galaxy/managers/library_datasets.py +++ b/lib/galaxy/managers/library_datasets.py @@ -195,17 +195,26 @@ class LibraryDatasetsManager(object): if len(expired_ldda_versions) > 0: rval['has_versions'] = True rval['expired_versions'] = expired_ldda_versions + + ldda = ld.library_dataset_dataset_association + if ldda.creating_job_associations: + if ldda.creating_job_associations[0].job.stdout: + rval['job_stdout'] = ldda.creating_job_associations[0].job.stdout.strip() + if ldda.creating_job_associations[0].job.stderr: + rval['job_stderr'] = ldda.creating_job_associations[0].job.stderr.strip() + if ldda.dataset.uuid: + rval['uuid'] = str(ldda.dataset.uuid) rval['deleted'] = ld.deleted rval['folder_id'] = 'F' + rval['folder_id'] rval['full_path'] = full_path - rval['file_size'] = util.nice_size(int(ld.library_dataset_dataset_association.get_size())) - rval['date_uploaded'] = ld.library_dataset_dataset_association.create_time.strftime("%Y-%m-%d %I:%M %p") - rval['can_user_modify'] = trans.app.security_agent.can_modify_library_item(current_user_roles, ld) or trans.user_is_admin() - rval['is_unrestricted'] = trans.app.security_agent.dataset_is_public(ld.library_dataset_dataset_association.dataset) - rval['tags'] = self.tag_manager.get_tags_str(ld.library_dataset_dataset_association.tags) + rval['file_size'] = util.nice_size(int(ldda.get_size())) + rval['date_uploaded'] = ldda.create_time.strftime("%Y-%m-%d %I:%M %p") + rval['can_user_modify'] = trans.user_is_admin() or trans.app.security_agent.can_modify_library_item(current_user_roles, ld) + rval['is_unrestricted'] = trans.app.security_agent.dataset_is_public(ldda.dataset) + rval['tags'] = self.tag_manager.get_tags_str(ldda.tags) # Manage dataset permission is always attached to the dataset itself, not the the ld or ldda to maintain consistency - rval['can_user_manage'] = trans.app.security_agent.can_manage_dataset(current_user_roles, ld.library_dataset_dataset_association.dataset) or trans.user_is_admin() + rval['can_user_manage'] = trans.user_is_admin() or trans.app.security_agent.can_manage_dataset(current_user_roles, ldda.dataset) return rval def _build_path(self, trans, folder): diff --git a/lib/galaxy/managers/users.py b/lib/galaxy/managers/users.py index 149836db847..a1b4009f4c5 100644 --- a/lib/galaxy/managers/users.py +++ b/lib/galaxy/managers/users.py @@ -233,14 +233,6 @@ class UserManager(base.ModelManager, deletable.PurgableManagerMixin): tags = [((name + ':' + val) if val else name) for name, val in tags] return sorted(tags) - def has_requests(self, user, trans): - """ - """ - if self.is_anonymous(user): - return False - request_types = self.app.security_agent.get_accessible_request_types(trans, user) - return bool(user.requests or request_types) - class UserSerializer(base.ModelSerializer, deletable.PurgableSerializerMixin): model_manager_class = UserManager @@ -292,7 +284,6 @@ class UserSerializer(base.ModelSerializer, deletable.PurgableSerializerMixin): 'quota' : lambda i, k, **c: self.user_manager.quota(i, total=True), 'tags_used' : lambda i, k, **c: self.user_manager.tags_used(i), - 'has_requests' : lambda i, k, trans=None, **c: self.user_manager.has_requests(i, trans) }) diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index 587b6049125..b680c4b7538 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -1172,7 +1172,7 @@ class DeferredJob(object): def set_last_check(self, seconds): try: self._last_check = int(seconds) - except: + except ValueError: self._last_check = time.time() last_check = property(get_last_check, set_last_check) @@ -4324,7 +4324,7 @@ class FormDefinition(object, Dictifiable): try: # This field has a saved value. value = str(contents[field['name']]) - except: + except Exception: # If there was an error getting the saved value, we'll still # display the widget, but it will be empty. if field_type == 'AddressField': diff --git a/lib/galaxy/model/custom_types.py b/lib/galaxy/model/custom_types.py index d5065420898..33cecd8371b 100644 --- a/lib/galaxy/model/custom_types.py +++ b/lib/galaxy/model/custom_types.py @@ -291,10 +291,10 @@ class MetadataType(JSONType): ret = metadata_pickler.loads(str(value)) if ret: ret = dict(ret.__dict__) - except: + except Exception: try: ret = json_decoder.decode(str(_sniffnfix_pg9_hex(value))) - except: + except Exception: ret = None return ret diff --git a/lib/galaxy/model/mapping.py b/lib/galaxy/model/mapping.py index b9b8c184265..97923d892cc 100644 --- a/lib/galaxy/model/mapping.py +++ b/lib/galaxy/model/mapping.py @@ -2534,7 +2534,7 @@ def db_next_hid(self, n=1): table.update(table.c.id == self.id).execute(hid_counter=(next_hid + n)) trans.commit() return next_hid - except: + except Exception: trans.rollback() raise diff --git a/lib/galaxy/model/metadata.py b/lib/galaxy/model/metadata.py index fa6e9b3537a..1cb3e508e3d 100644 --- a/lib/galaxy/model/metadata.py +++ b/lib/galaxy/model/metadata.py @@ -91,7 +91,7 @@ class MetadataCollection(object): def get(self, key, default=None): try: return self.__getattr__(key) or default - except: + except Exception: return default def items(self): diff --git a/lib/galaxy/model/migrate/check.py b/lib/galaxy/model/migrate/check.py index 9674b75c0cb..5a1729b1596 100644 --- a/lib/galaxy/model/migrate/check.py +++ b/lib/galaxy/model/migrate/check.py @@ -36,7 +36,7 @@ def create_or_verify_database(url, galaxy_config_file, engine_options={}, app=No try: # Declare the database to be under a repository's version control db_schema = schema.ControlledSchema.create(engine, migrate_repository) - except: + except Exception: # The database is already under version control db_schema = schema.ControlledSchema(engine, migrate_repository) # Apply all scripts to get to current version diff --git a/lib/galaxy/model/migrate/versions/0005_cleanup_datasets_fix.py b/lib/galaxy/model/migrate/versions/0005_cleanup_datasets_fix.py index 485a9904d07..4a86c22d983 100644 --- a/lib/galaxy/model/migrate/versions/0005_cleanup_datasets_fix.py +++ b/lib/galaxy/model/migrate/versions/0005_cleanup_datasets_fix.py @@ -692,7 +692,7 @@ def __guess_dataset_by_filename(filename): if fields: if fields[-1].startswith('dataset_') and fields[-1].endswith('.dat'): # dataset_%d.dat return Dataset.get(int(fields[-1][len('dataset_'): -len('.dat')])) - except: + except Exception: pass # some parsing error, we can't guess Dataset return None diff --git a/lib/galaxy/model/migrate/versions/0024_page_slug_unique_constraint.py b/lib/galaxy/model/migrate/versions/0024_page_slug_unique_constraint.py index 68c526937c8..dd19c219f12 100644 --- a/lib/galaxy/model/migrate/versions/0024_page_slug_unique_constraint.py +++ b/lib/galaxy/model/migrate/versions/0024_page_slug_unique_constraint.py @@ -29,7 +29,7 @@ def upgrade(migrate_engine): i = Index("ix_page_slug", Page_table.c.slug, unique=False) i.create() - except: + except Exception: # Mysql doesn't have a named index, but alter should work diff --git a/lib/galaxy/model/migrate/versions/0032_stored_workflow_slug_column.py b/lib/galaxy/model/migrate/versions/0032_stored_workflow_slug_column.py index a7ea25d6943..19c833666bc 100644 --- a/lib/galaxy/model/migrate/versions/0032_stored_workflow_slug_column.py +++ b/lib/galaxy/model/migrate/versions/0032_stored_workflow_slug_column.py @@ -30,7 +30,7 @@ def upgrade(migrate_engine): try: i = Index("ix_stored_workflow_slug", StoredWorkflow_table.c.slug, mysql_length=200) i.create() - except: + except Exception: # Mysql doesn't have a named index, but alter should work StoredWorkflow_table.c.slug.alter(unique=False) diff --git a/lib/galaxy/model/migrate/versions/0033_published_cols_for_histories_and_workflows.py b/lib/galaxy/model/migrate/versions/0033_published_cols_for_histories_and_workflows.py index 7e1f8e306c0..119f9f7b452 100644 --- a/lib/galaxy/model/migrate/versions/0033_published_cols_for_histories_and_workflows.py +++ b/lib/galaxy/model/migrate/versions/0033_published_cols_for_histories_and_workflows.py @@ -31,7 +31,7 @@ def upgrade(migrate_engine): try: i = Index("ix_history_published", History_table.c.published) i.create() - except: + except Exception: # Mysql doesn't have a named index, but alter should work History_table.c.published.alter(unique=False) @@ -49,7 +49,7 @@ def upgrade(migrate_engine): try: i = Index("ix_stored_workflow_published", StoredWorkflow_table.c.published) i.create() - except: + except Exception: # Mysql doesn't have a named index, but alter should work StoredWorkflow_table.c.published.alter(unique=False) @@ -67,7 +67,7 @@ def upgrade(migrate_engine): try: i = Index("ix_page_importable", Page_table.c.importable) i.create() - except: + except Exception: # Mysql doesn't have a named index, but alter should work Page_table.c.importable.alter(unique=False) diff --git a/lib/galaxy/model/migrate/versions/0041_workflow_invocation.py b/lib/galaxy/model/migrate/versions/0041_workflow_invocation.py index 1060e45e445..7ded92a29a3 100644 --- a/lib/galaxy/model/migrate/versions/0041_workflow_invocation.py +++ b/lib/galaxy/model/migrate/versions/0041_workflow_invocation.py @@ -38,7 +38,7 @@ def upgrade(migrate_engine): for table in tables: try: table.create() - except: + except Exception: log.warning("Failed to create table '%s', ignoring (might result in wrong schema)" % table.name) diff --git a/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py b/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py index 88ae7c478db..bfa0eb3ce80 100644 --- a/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py +++ b/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py @@ -25,7 +25,7 @@ def upgrade(migrate_engine): t = Table(table_name, metadata, autoload=True) t.drop() metadata.remove(t) - except: + except Exception: log.exception("Failed to drop table '%s', ignoring (might result in wrong schema)" % table_name) # 2) Readd @@ -46,7 +46,7 @@ def upgrade(migrate_engine): for table in [WorkflowInvocation_table, WorkflowInvocationStep_table]: try: table.create() - except: + except Exception: log.exception("Failed to create table '%s', ignoring (might result in wrong schema)" % table.name) diff --git a/lib/galaxy/model/migrate/versions/0056_workflow_outputs.py b/lib/galaxy/model/migrate/versions/0056_workflow_outputs.py index 9b354080ec2..a688dd18571 100644 --- a/lib/galaxy/model/migrate/versions/0056_workflow_outputs.py +++ b/lib/galaxy/model/migrate/versions/0056_workflow_outputs.py @@ -27,7 +27,7 @@ def upgrade(migrate_engine): for table in tables: try: table.create() - except: + except Exception: log.warning("Failed to create table '%s', ignoring (might result in wrong schema)" % table.name) diff --git a/lib/galaxy/model/migrate/versions/0061_tasks.py b/lib/galaxy/model/migrate/versions/0061_tasks.py index 6a067ee0ca0..eaf535bc0eb 100644 --- a/lib/galaxy/model/migrate/versions/0061_tasks.py +++ b/lib/galaxy/model/migrate/versions/0061_tasks.py @@ -39,7 +39,7 @@ def upgrade(migrate_engine): for table in tables: try: table.create() - except: + except Exception: log.warning("Failed to create table '%s', ignoring (might result in wrong schema)" % table.name) diff --git a/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py b/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py index 2b689e12ec9..c2d42a4502f 100644 --- a/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py +++ b/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py @@ -39,7 +39,7 @@ def upgrade(migrate_engine): # Encoding errors? Just to be safe. print("Attempting to fix row %s" % row['id']) print("Prior to replacement: %s" % field_values_str) - except: + except Exception: pass field_values_dict = {} # look for each field name in the values and extract its value (string) @@ -77,7 +77,7 @@ def upgrade(migrate_engine): migrate_engine.execute(cmd) try: print("Post replacement: %s" % json_values) - except: + except Exception: pass if corrupted_rows: print('Fixed %i corrupted rows.' % corrupted_rows) diff --git a/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py b/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py index 9e6f25a424c..c30f63f7189 100644 --- a/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py +++ b/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py @@ -13,7 +13,7 @@ def upgrade(migrate_engine): user = Table('galaxy_user', meta, autoload=True) try: user.c.password.alter(type=String(255)) - except: + except Exception: log.exception("Altering password column failed") diff --git a/lib/galaxy/model/tool_shed_install/migrate/check.py b/lib/galaxy/model/tool_shed_install/migrate/check.py index 36e40483c8d..7773146965e 100644 --- a/lib/galaxy/model/tool_shed_install/migrate/check.py +++ b/lib/galaxy/model/tool_shed_install/migrate/check.py @@ -30,7 +30,7 @@ def create_or_verify_database(url, engine_options={}, app=None): try: # Declare the database to be under a repository's version control db_schema = schema.ControlledSchema.create(engine, migrate_repository) - except: + except Exception: # The database is already under version control db_schema = schema.ControlledSchema(engine, migrate_repository) # Apply all scripts to get to current version diff --git a/lib/galaxy/sample_tracking/external_service_types.py b/lib/galaxy/sample_tracking/external_service_types.py index a1b04b88005..1bd4e50be42 100644 --- a/lib/galaxy/sample_tracking/external_service_types.py +++ b/lib/galaxy/sample_tracking/external_service_types.py @@ -1,10 +1,15 @@ -import os import logging -from galaxy.util.odict import odict -from galaxy import util, model -from galaxy.forms.forms import form_factory +import os + +from galaxy import ( + model, + util +) from galaxy.external_services.service import ExternalServiceActionsGroup +from galaxy.forms.forms import form_factory from galaxy.sample_tracking.data_transfer import data_transfer_factories +from galaxy.util.odict import odict + log = logging.getLogger(__name__) @@ -20,7 +25,7 @@ class ExternalServiceTypesCollection(object): self.app = app try: self.load_all(config_filename) - except: + except Exception: log.exception("ExternalServiceTypesCollection error reading %s", config_filename) def load_all(self, config_filename): @@ -37,7 +42,7 @@ class ExternalServiceTypesCollection(object): log.debug("Loaded external_service_type: %s %s" % (external_service_type.name, external_service_type.config_version)) if visible: self.visible_external_service_types.append(external_service_type.id) - except: + except Exception: log.exception("error reading external_service_type from path: %s", file_path) def load_external_service_type(self, config_file, visible=True): diff --git a/lib/galaxy/sample_tracking/request_types.py b/lib/galaxy/sample_tracking/request_types.py index 6ca651f3b22..dd05dd34786 100644 --- a/lib/galaxy/sample_tracking/request_types.py +++ b/lib/galaxy/sample_tracking/request_types.py @@ -2,7 +2,8 @@ RequestType """ from galaxy.model import RequestType -from sample import sample_state_factory + +from .sample import sample_state_factory RENAME_DATASET_OPTIONS = dict([(f_type.lower(), f_descript) for f_type, f_descript in RequestType.rename_dataset_options.items()]) diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index efe64712c45..1c607ada3ad 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -794,7 +794,7 @@ class Tool(object, Dictifiable): if tests_source: try: self.__tests = parse_tests(self, tests_source) - except: + except Exception: self.__tests = None log.exception("Failed to parse tool tests") else: @@ -1011,7 +1011,7 @@ class Tool(object, Dictifiable): group.cases.append(case) try: possible_cases.remove(case.value) - except: + except Exception: log.warning("Tool %s: a when tag has been defined for '%s (%s) --> %s', but does not appear to be selectable." % (self.id, group.name, group.test_param.name, case.value)) for unspecified_case in possible_cases: @@ -1131,8 +1131,8 @@ class Tool(object, Dictifiable): self.__help = Template(rst_to_html(help_text), input_encoding='utf-8', output_encoding='utf-8', default_filters=['decode.utf8'], encoding_errors='replace') - except: - log.exception("error in help for tool %s", self.name) + except Exception: + log.exception("Exception while parsing help for tool with id '%s'", self.id) # Handle deprecated multi-page help text in XML case. if hasattr(tool_source, "root"): @@ -1151,8 +1151,8 @@ class Tool(object, Dictifiable): default_filters=['decode.utf8'], encoding_errors='replace') for x in self.__help_by_page] - except: - log.exception("error in multi-page help for tool %s", self.name) + except Exception: + log.exception("Exception while parsing multi-page help for tool with id '%s'", self.id) # Pad out help pages to match npages ... could this be done better? while len(self.__help_by_page) < self.npages: self.__help_by_page.append(self.__help) @@ -1422,7 +1422,7 @@ class Tool(object, Dictifiable): if not prefixed_name.startswith('__'): messages[prefixed_name] = error if previous_value == value else '%s Using default: \'%s\'.' % (error, value) parent[input.name] = value - except: + except Exception: messages[prefixed_name] = 'Attempt to replace invalid value for \'%s\' failed.' % (prefixed_label) else: messages[prefixed_name] = error diff --git a/lib/galaxy/tools/actions/__init__.py b/lib/galaxy/tools/actions/__init__.py index a71581552f4..cc47db76e62 100644 --- a/lib/galaxy/tools/actions/__init__.py +++ b/lib/galaxy/tools/actions/__init__.py @@ -542,7 +542,7 @@ class DefaultToolAction(object): try: # For backward compatibility, some tools may not have versions yet. job.tool_version = tool.version - except: + except AttributeError: job.tool_version = "1.0.0" return job, galaxy_session @@ -837,7 +837,7 @@ def determine_output_format(output, parameter_context, input_datasets, input_dat check = '${%s}' % check if str(fill_template(check, context=parameter_context)) == when_elem.get('value', None): ext = when_elem.get('format', ext) - except: # bad tag input value; possibly referencing a param within a different conditional when block or other nonexistent grouping construct + except Exception: # bad tag input value; possibly referencing a param within a different conditional when block or other nonexistent grouping construct continue else: check = when_elem.get('input_dataset', None) diff --git a/lib/galaxy/tools/actions/metadata.py b/lib/galaxy/tools/actions/metadata.py index 34cbcce9c7b..e58ead289ae 100644 --- a/lib/galaxy/tools/actions/metadata.py +++ b/lib/galaxy/tools/actions/metadata.py @@ -60,7 +60,7 @@ class SetMetadataToolAction(ToolAction): try: # For backward compatibility, some tools may not have versions yet. job.tool_version = tool.version - except: + except AttributeError: job.tool_version = "1.0.1" job.state = job.states.WAITING # we need to set job state to something other than NEW, or else when tracking jobs in db it will be picked up before we have added input / output parameters job.set_handler(tool.get_job_handler(job_params)) diff --git a/lib/galaxy/tools/actions/upload_common.py b/lib/galaxy/tools/actions/upload_common.py index 09d6e988a99..6025d092fe7 100644 --- a/lib/galaxy/tools/actions/upload_common.py +++ b/lib/galaxy/tools/actions/upload_common.py @@ -176,7 +176,7 @@ def get_precreated_datasets(trans, params, data_obj, controller='root'): for id in async_datasets: try: data = trans.sa_session.query(data_obj).get(int(id)) - except: + except Exception: log.exception('Unable to load precreated dataset (%s) sent in upload form' % id) continue if data_obj is trans.app.model.HistoryDatasetAssociation: diff --git a/lib/galaxy/tools/deps/resolvers/unlinked_tool_shed_packages.py b/lib/galaxy/tools/deps/resolvers/unlinked_tool_shed_packages.py index b4d197188ad..60ae6ac8329 100644 --- a/lib/galaxy/tools/deps/resolvers/unlinked_tool_shed_packages.py +++ b/lib/galaxy/tools/deps/resolvers/unlinked_tool_shed_packages.py @@ -54,7 +54,7 @@ class UnlinkedToolShedPackageDependencyResolver(BaseGalaxyPackageDependencyResol else: # Pick the preferred one return self._select_preferred_dependency(possibles).dependency - except: + except Exception: log.exception("Unexpected error hunting for dependency '%s' '%s''%s'", name, version, type) return NullDependency(version=version, name=name) @@ -126,7 +126,7 @@ class UnlinkedToolShedPackageDependencyResolver(BaseGalaxyPackageDependencyResol else: #Pick the preferred one return self._select_preferred_dependency(possibles, by_owner=False).dependency - except: + except Exception: log.exception("Unexpected error hunting for dependency '%s' default '%s'", name, type) return NullDependency(version=None, name=name) """ diff --git a/lib/galaxy/tools/imp_exp/__init__.py b/lib/galaxy/tools/imp_exp/__init__.py index 2389f2c87ff..a4fc924d7d4 100644 --- a/lib/galaxy/tools/imp_exp/__init__.py +++ b/lib/galaxy/tools/imp_exp/__init__.py @@ -244,7 +244,7 @@ class JobImportHistoryArchiveWrapper(object, UsesAnnotations): try: imported_job.create_time = datetime.datetime.strptime(job_attrs["create_time"], "%Y-%m-%dT%H:%M:%S.%f") imported_job.update_time = datetime.datetime.strptime(job_attrs["update_time"], "%Y-%m-%dT%H:%M:%S.%f") - except: + except Exception: pass self.sa_session.add(imported_job) self.sa_session.flush() @@ -485,7 +485,7 @@ class JobExportHistoryArchiveWrapper(object, UsesAnnotations): # Get the job's parameters try: params_objects = job.get_param_values(trans.app) - except: + except Exception: # Could not get job params. continue diff --git a/lib/galaxy/tools/parameters/__init__.py b/lib/galaxy/tools/parameters/__init__.py index ea3f3b826b2..c0343ff2c47 100644 --- a/lib/galaxy/tools/parameters/__init__.py +++ b/lib/galaxy/tools/parameters/__init__.py @@ -100,7 +100,7 @@ def visit_input_values(inputs, input_values, callback, name_prefix='', label_pre case_error = None try: input.get_current_case(values[input.test_param.name]) - except: + except Exception: case_error = 'The selected case is unavailable/invalid.' pass callback_helper(input.test_param, values, new_name_prefix, label_prefix, parent_prefix=name_prefix, context=context, error=case_error) diff --git a/lib/galaxy/tools/parameters/basic.py b/lib/galaxy/tools/parameters/basic.py index 0a49164fe4d..74f74e03a90 100644 --- a/lib/galaxy/tools/parameters/basic.py +++ b/lib/galaxy/tools/parameters/basic.py @@ -153,7 +153,7 @@ class ToolParameter(object, Dictifiable): if ignore_errors: try: return self.to_python(value, app) - except: + except Exception: return value else: return self.to_python(value, app) @@ -313,7 +313,7 @@ class IntegerToolParameter(TextToolParameter): if self.value: try: int(self.value) - except: + except ValueError: raise ValueError("An integer is required") elif self.value is None and not self.optional: raise ValueError("The settings for the field named '%s' require a 'value' setting and optionally a default value which must be an integer" % self.name) @@ -322,12 +322,12 @@ class IntegerToolParameter(TextToolParameter): if self.min: try: self.min = int(self.min) - except: + except ValueError: raise ValueError("An integer is required") if self.max: try: self.max = int(self.max) - except: + except ValueError: raise ValueError("An integer is required") if self.min is not None or self.max is not None: self.validators.append(validation.InRangeValidator(None, self.min, self.max)) @@ -335,7 +335,7 @@ class IntegerToolParameter(TextToolParameter): def from_json(self, value, trans, other_values={}): try: return int(value) - except: + except (TypeError, ValueError): if contains_workflow_parameter(value) and trans.workflow_building_mode is workflow_building_modes.ENABLED: return value if not value and self.optional: @@ -348,7 +348,7 @@ class IntegerToolParameter(TextToolParameter): def to_python(self, value, app): try: return int(value) - except Exception as err: + except (TypeError, ValueError) as err: if contains_workflow_parameter(value): return value if not value and self.optional: @@ -391,19 +391,19 @@ class FloatToolParameter(TextToolParameter): if self.value: try: float(self.value) - except: + except ValueError: raise ValueError("A real number is required") elif self.value is None and not self.optional: raise ValueError("The settings for this field require a 'value' setting and optionally a default value which must be a real number") if self.min: try: self.min = float(self.min) - except: + except ValueError: raise ValueError("A real number is required") if self.max: try: self.max = float(self.max) - except: + except ValueError: raise ValueError("A real number is required") if self.min is not None or self.max is not None: self.validators.append(validation.InRangeValidator(None, self.min, self.max)) @@ -411,7 +411,7 @@ class FloatToolParameter(TextToolParameter): def from_json(self, value, trans, other_values={}): try: return float(value) - except: + except (TypeError, ValueError): if contains_workflow_parameter(value) and trans.workflow_building_mode is workflow_building_modes.ENABLED: return value if not value and self.optional: @@ -424,7 +424,7 @@ class FloatToolParameter(TextToolParameter): def to_python(self, value, app): try: return float(value) - except Exception as err: + except (TypeError, ValueError) as err: if contains_workflow_parameter(value): return value if not value and self.optional: @@ -434,7 +434,7 @@ class FloatToolParameter(TextToolParameter): def get_initial_value(self, trans, other_values): try: return float(self.value) - except: + except Exception: return None @@ -542,7 +542,7 @@ class FileToolParameter(ToolParameter): # or should we jsonify? try: return value['local_filename'] - except: + except KeyError: return None raise Exception("FileToolParameter cannot be persisted") @@ -912,7 +912,7 @@ class SelectToolParameter(ToolParameter): value = options[0][1] else: value = None - elif len(value) == 1: + elif len(value) == 1 or not self.multiple: value = value[0] return value @@ -1147,7 +1147,7 @@ class ColumnListParameter(SelectToolParameter): if len(dataset.metadata.column_types) >= len(cnames): numerics = [i for i, x in enumerate(dataset.metadata.column_types) if x in ['int', 'float']] column_list = [column_list[i] for i in numerics] - except: + except Exception: column_list = self.get_column_list(trans, other_values) else: column_list = self.get_column_list(trans, other_values) @@ -1582,12 +1582,12 @@ class DataToolParameter(BaseDataToolParameter): if self.min: try: self.min = int(self.min) - except: + except ValueError: raise ValueError("An integer is required for min property.") if self.max: try: self.max = int(self.max) - except: + except ValueError: raise ValueError("An integer is required for max property.") if not self.multiple and (self.min is not None): raise ValueError("Cannot specify min property on single data parameter '%s'. Set multiple=\"true\" to enable this option." % self.name) @@ -1696,7 +1696,7 @@ class DataToolParameter(BaseDataToolParameter): if value: try: return ", ".join(["%s: %s" % (item.hid, item.name) for item in value]) - except: + except Exception: pass return "No dataset." diff --git a/lib/galaxy/tools/parameters/dynamic_options.py b/lib/galaxy/tools/parameters/dynamic_options.py index aa5220db301..514f02b1feb 100644 --- a/lib/galaxy/tools/parameters/dynamic_options.py +++ b/lib/galaxy/tools/parameters/dynamic_options.py @@ -72,7 +72,7 @@ class StaticValueFilter(Filter): filter_value = self.value try: filter_value = User.expand_user_properties(trans.user, filter_value) - except: + except Exception: pass for fields in options: if (self.keep and fields[self.column] == filter_value) or (not self.keep and fields[self.column] != filter_value): diff --git a/lib/galaxy/tools/parameters/grouping.py b/lib/galaxy/tools/parameters/grouping.py index 5a7bc707dd3..91156d40fa7 100644 --- a/lib/galaxy/tools/parameters/grouping.py +++ b/lib/galaxy/tools/parameters/grouping.py @@ -322,7 +322,7 @@ class UploadDataset(Group): if not dataset_name and 'filename' in data_file: dataset_name = get_file_name(data_file['filename']) return Bunch(type='file', path=data_file['local_filename'], name=dataset_name, purge_source=purge) - except: + except Exception: # The uploaded file should've been persisted by the upload tool action return Bunch(type=None, path=None, name=None) @@ -401,6 +401,7 @@ class UploadDataset(Group): warnings.append("All FTP uploaded file selections were ignored.") elif ftp_files is not None and trans.user is not None: # look for files uploaded via FTP user_ftp_dir = trans.user_ftp_dir + assert not os.path.islink(user_ftp_dir), "User FTP directory cannot be a symbolic link" for (dirpath, dirnames, filenames) in os.walk(user_ftp_dir): for filename in filenames: for ftp_filename in ftp_files: @@ -486,6 +487,7 @@ class UploadDataset(Group): # TODO: warning to the user (could happen if session has become invalid) else: user_ftp_dir = trans.user_ftp_dir + assert not os.path.islink(user_ftp_dir), "User FTP directory cannot be a symbolic link" for (dirpath, dirnames, filenames) in os.walk(user_ftp_dir): for filename in filenames: path = relpath(os.path.join(dirpath, filename), user_ftp_dir) diff --git a/lib/galaxy/tools/parameters/validation.py b/lib/galaxy/tools/parameters/validation.py index 1189a8fd69f..895bc17b3ce 100644 --- a/lib/galaxy/tools/parameters/validation.py +++ b/lib/galaxy/tools/parameters/validation.py @@ -410,7 +410,7 @@ class MetadataInDataTableColumnValidator(Validator): metadata_column = elem.get("metadata_column", 0) try: metadata_column = int(metadata_column) - except: + except ValueError: pass message = elem.get("message", "Value for metadata %s was not found in %s." % (metadata_name, table_name)) line_startswith = elem.get("line_startswith", None) diff --git a/lib/galaxy/tools/parser/output_actions.py b/lib/galaxy/tools/parser/output_actions.py index 9dfacff74b5..35798452b5a 100644 --- a/lib/galaxy/tools/parser/output_actions.py +++ b/lib/galaxy/tools/parser/output_actions.py @@ -544,7 +544,7 @@ class BooleanFilter(ToolOutputActionOptionFilter): try: value = fields[self.column] value = self.cast(value) - except: + except Exception: value = False # unable to cast or access value; treat as false if self.keep == bool(value): rval.append(fields) diff --git a/lib/galaxy/tools/parser/xml.py b/lib/galaxy/tools/parser/xml.py index 42ad1c0bced..a38a45190a2 100644 --- a/lib/galaxy/tools/parser/xml.py +++ b/lib/galaxy/tools/parser/xml.py @@ -726,7 +726,7 @@ class StdioParser(object): else: try: exit_code.range_start = int(code_range) - except: + except Exception: log.error(code_range) log.warning("Invalid range start for tool's exit_code %s: exit_code ignored" % code_range) continue diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index 442be386cbf..d3fbb617043 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -655,7 +655,7 @@ class AbstractToolBox(Dictifiable, ManagesIntegratedToolPanelMixin, object): panel_dict[key] = workflow # Always load workflows into the integrated_panel_dict. integrated_panel_dict.update_or_append(index, key, workflow) - except: + except Exception: log.exception("Error loading workflow: %s", workflow_id) def _load_label_tag_set(self, item, panel_dict, integrated_panel_dict, load_panel_dict, index=None): diff --git a/lib/galaxy/tools/util/maf_utilities.py b/lib/galaxy/tools/util/maf_utilities.py index 2851cf2cac2..89c5705b51d 100644 --- a/lib/galaxy/tools/util/maf_utilities.py +++ b/lib/galaxy/tools/util/maf_utilities.py @@ -168,7 +168,7 @@ class RegionAlignment(object): for name in skip: try: names.remove(name) - except: + except ValueError: pass return names @@ -295,7 +295,7 @@ def maf_index_by_uid(maf_uid, index_location_file): return bx.align.maf.MultiIndexed(maf_files, keep_open=True, parse_e_rows=False) except Exception as e: raise Exception('MAF UID (%s) found, but configuration appears to be malformed: %s' % (maf_uid, e)) - except: + except Exception: pass return None @@ -304,7 +304,7 @@ def maf_index_by_uid(maf_uid, index_location_file): def open_or_build_maf_index(maf_file, index_filename, species=None): try: return (bx.align.maf.Indexed(maf_file, index_filename=index_filename, keep_open=True, parse_e_rows=False), None) - except: + except Exception: return build_maf_index(maf_file, species=species) @@ -675,7 +675,7 @@ def parse_species_option(species): def remove_temp_index_file(index_filename): try: os.unlink(index_filename) - except: + except Exception: pass # Below are methods to deal with FASTA files @@ -713,7 +713,7 @@ def get_attributes_from_fasta_header(header): region = region[1].lstrip(':').split('-') attributes['start'] = int(region[0]) attributes['end'] = int(region[1]) - except: + except Exception: # fields 0 is not a region coordinate pass if len(fields) > 2: diff --git a/lib/galaxy/tools/wrappers.py b/lib/galaxy/tools/wrappers.py index 1ff41a5eb29..257909e3aef 100644 --- a/lib/galaxy/tools/wrappers.py +++ b/lib/galaxy/tools/wrappers.py @@ -60,7 +60,7 @@ class RawObjectWrapper(ToolParameterValueWrapper): def __str__(self): try: return "%s:%s" % (self.obj.__module__, self.obj.__class__.__name__) - except: + except Exception: # Most likely None, which lacks __module__. return str(self.obj) @@ -212,7 +212,7 @@ class DatasetFilenameWrapper(ToolParameterValueWrapper): def get(self, key, default=None): try: return getattr(self, key) - except: + except Exception: return default def items(self): @@ -223,7 +223,7 @@ class DatasetFilenameWrapper(ToolParameterValueWrapper): try: # TODO: allow this to work when working with grouping ext = tool.inputs[name].extensions[0] - except: + except Exception: ext = 'data' self.dataset = wrap_with_safe_string(NoneDataset(datatypes_registry=datatypes_registry, ext=ext), no_wrap_classes=ToolParameterValueWrapper) else: diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index a04f37c0621..2b617cd558c 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -8,6 +8,7 @@ from __future__ import absolute_import import binascii import collections import errno +import importlib import json import os import random @@ -28,7 +29,7 @@ except ImportError: from datetime import datetime from hashlib import md5 -from os.path import normpath, relpath +from os.path import relpath from xml.etree import ElementInclude, ElementTree from xml.etree.ElementTree import ParseError @@ -49,6 +50,7 @@ except ImportError: from .inflection import English, Inflector from .logging import get_logger +from .path import safe_contains, safe_makedirs, safe_relpath # noqa: F401 inflector = Inflector(English) @@ -309,11 +311,11 @@ def get_file_size(value, default=None): try: # try built-in return os.path.getsize(value) - except: + except Exception: try: # try built-in one name attribute return os.path.getsize(value.name) - except: + except Exception: try: # try tell() of end of object offset = value.tell() @@ -321,7 +323,7 @@ def get_file_size(value, default=None): rval = value.tell() value.seek(offset) return rval - except: + except Exception: # return default value return default @@ -607,31 +609,38 @@ def which(file): return None -def safe_makedirs(path): - """ Safely make a directory, do not fail if it already exist or - is created during execution. - """ - if not os.path.exists(path): - try: - os.makedirs(path) - except OSError as e: - # review source for Python 2.7 this would only ever happen - # for the last path anyway so need to recurse - this exception - # means the last part of the path was already in existence. - if e.errno != errno.EEXIST: - raise - - def in_directory(file, directory, local_path_module=os.path): """ Return true, if the common prefix of both is equal to directory - e.g. /a/b/c/d.rst and directory is /a/b, the common prefix is /a/b - """ + e.g. /a/b/c/d.rst and directory is /a/b, the common prefix is /a/b. + This function isn't used exclusively for security checks, but if it is + used for such checks it is assumed that ``directory`` is a "trusted" path - + supplied by Galaxy or by the admin and ``file`` is something generated by + a tool, configuration, external web server, or user supplied input. - # Make both absolute. - directory = local_path_module.abspath(directory) - file = local_path_module.abspath(file) - return local_path_module.commonprefix([file, directory]) == directory + local_path_module is used by Pulsar to check Windows paths while running on + a POSIX-like system. + + >>> base_dir = tempfile.mkdtemp() + >>> safe_dir = os.path.join(base_dir, "user") + >>> os.mkdir(safe_dir) + >>> good_file = os.path.join(safe_dir, "1") + >>> with open(good_file, "w") as f: f.write("hello") + >>> in_directory(good_file, safe_dir) + True + >>> in_directory("/other/file/is/here.txt", safe_dir) + False + >>> unsafe_link = os.path.join(safe_dir, "2") + >>> os.symlink("/other/file/bad.fasta", unsafe_link) + >>> in_directory(unsafe_link, safe_dir) + False + """ + if local_path_module != os.path: + _safe_contains = importlib.import_module('galaxy.util.path.%s' % local_path_module.__name__).safe_contains + else: + directory = os.path.realpath(directory) + _safe_contains = safe_contains + return _safe_contains(directory, file) def merge_sorted_iterables(operator, *iterables): @@ -1039,7 +1048,7 @@ def read_dbnames(filename): try: # manual build (i.e. microbes) int(fields[0]) man_builds.append((fields[1], fields[0])) - except: # UCSC build + except Exception: # UCSC build db_base = fields[0].rstrip('0123456789') if db_base not in ucsc_builds: ucsc_builds[db_base] = [] @@ -1048,10 +1057,10 @@ def read_dbnames(filename): build_rev = re.compile(r'\d+$') try: build_rev = int(build_rev.findall(fields[0])[0]) - except: + except Exception: build_rev = 0 ucsc_builds[db_base].append((build_rev, fields[0], fields[1])) - except: + except Exception: continue sort_names = sorted(name_to_db_base.keys()) for name in sort_names: @@ -1089,9 +1098,9 @@ def read_build_sites(filename, check_builds=True): else: site_dict = {'name': site_name, 'url': site} build_sites.append(site_dict) - except: + except Exception: continue - except: + except Exception: log.error("ERROR: Unable to read builds for site file %s", filename) return build_sites @@ -1181,7 +1190,7 @@ def umask_fix_perms(path, umask, unmasked_perms, gid=None): try: desired_group = grp.getgrgid(gid) current_group = grp.getgrgid(st.st_gid) - except: + except Exception: desired_group = gid current_group = st.st_gid log.warning('Unable to honor primary group (%s) for %s, group remains %s, error was: %s' % (desired_group, @@ -1237,7 +1246,7 @@ def nice_size(size): if size < 0: size = abs(size) prefix = '-' - except: + except Exception: return '??? bytes' for ind, word in enumerate(words): step = 1024 ** (ind + 1) @@ -1256,7 +1265,7 @@ def size_to_bytes(size): # Assume input in bytes if we can convert directly to an int try: return int(size) - except: + except ValueError: pass # Otherwise it must have non-numeric characters size_re = re.compile('([\d\.]+)\s*([tgmk]b?|b|bytes?)$') @@ -1481,6 +1490,7 @@ def build_url(base_url, port=80, scheme='http', pathspec=None, params=None, dose parsed_url = urlparse.urlparse(base_url) if scheme != 'http': parsed_url.scheme = scheme + assert parsed_url.scheme in ('http', 'https', 'ftp'), 'Invalid URL scheme: %s' % scheme if port != 80: url = '%s://%s:%d/%s' % (parsed_url.scheme, parsed_url.netloc.rstrip('/'), int(port), parsed_url.path) else: @@ -1524,22 +1534,6 @@ def download_to_file(url, dest_file_path, timeout=30, chunk_size=2 ** 20): f.write(chunk) -def safe_relpath(path): - """ - Given what we expect to be a relative path, determine whether the path - would exist inside the current directory. - - :type path: string - :param path: a path to check - :rtype: bool - :returns: ``True`` if path is relative and does not reference a path - in a parent directory, ``False`` otherwise. - """ - if path.startswith(os.sep) or normpath(path).startswith(os.pardir): - return False - return True - - class ExecutionTimer(object): def __init__(self): diff --git a/lib/galaxy/util/checkers.py b/lib/galaxy/util/checkers.py index 467d136d6f8..f3ced9f08db 100644 --- a/lib/galaxy/util/checkers.py +++ b/lib/galaxy/util/checkers.py @@ -71,7 +71,7 @@ def check_gzip(file_path, check_content=True): temp.close() if magic_check != util.gzip_magic: return (False, False) - except: + except Exception: return (False, False) # We support some binary data types, so check if the compressed binary file is valid # If the file is Bam, it should already have been detected as such, so we'll just check @@ -80,7 +80,7 @@ def check_gzip(file_path, check_content=True): header = gzip.open(file_path).read(4) if header == b'.sff': return (True, True) - except: + except Exception: return(False, False) if not check_content: @@ -103,7 +103,7 @@ def check_bz2(file_path, check_content=True): temp.close() if magic_check != util.bz2_magic: return (False, False) - except: + except Exception: return(False, False) if not check_content: diff --git a/lib/galaxy/util/dictifiable.py b/lib/galaxy/util/dictifiable.py index 0046466474b..450a3a8b00e 100644 --- a/lib/galaxy/util/dictifiable.py +++ b/lib/galaxy/util/dictifiable.py @@ -23,7 +23,7 @@ class Dictifiable: # first and then default to to_dict? try: return item.to_dict(view=view, value_mapper=value_mapper) - except: + except Exception: if key in value_mapper: return value_mapper.get(key)(item) if type(item) == datetime.datetime: diff --git a/lib/galaxy/util/hash_util.py b/lib/galaxy/util/hash_util.py index a81d43aee42..9405b4b1df4 100644 --- a/lib/galaxy/util/hash_util.py +++ b/lib/galaxy/util/hash_util.py @@ -44,7 +44,7 @@ def hmac_new(key, value): def is_hashable(value): try: hash(value) - except: + except Exception: return False return True diff --git a/lib/galaxy/util/heartbeat.py b/lib/galaxy/util/heartbeat.py index 9bd8b3f7fc2..f474a0f8252 100644 --- a/lib/galaxy/util/heartbeat.py +++ b/lib/galaxy/util/heartbeat.py @@ -96,7 +96,7 @@ class Heartbeat(threading.Thread): self.file.write("End dump\n\n") self.file.flush() self.print_nonsleeping(threads) - except: + except Exception: self.file.write("Caught exception attempting to dump thread states:") traceback.print_exc(None, self.file) self.file.write("\n") diff --git a/lib/galaxy/util/image_util.py b/lib/galaxy/util/image_util.py index 16c64d60913..8eb3a18cff4 100644 --- a/lib/galaxy/util/image_util.py +++ b/lib/galaxy/util/image_util.py @@ -9,7 +9,7 @@ try: except ImportError: try: from PIL import Image as PIL - except: + except ImportError: PIL = None log = logging.getLogger(__name__) @@ -22,7 +22,7 @@ def image_type(filename): im = PIL.open(filename) fmt = im.format im.close() - except: + except Exception: # We continue to try with imghdr, so this is a rare case of an # exception we expect to happen frequently, so we're not logging pass diff --git a/lib/galaxy/util/object_wrapper.py b/lib/galaxy/util/object_wrapper.py index 5eac6719c6e..63f448bbbfb 100644 --- a/lib/galaxy/util/object_wrapper.py +++ b/lib/galaxy/util/object_wrapper.py @@ -155,7 +155,7 @@ def wrap_with_safe_string(value, no_wrap_classes=None): try: wrapped_class_name = value.__name__ wrapped_class = value - except: + except Exception: wrapped_class_name = value.__class__.__name__ wrapped_class = value.__class__ value_mod = inspect.getmodule(value) diff --git a/lib/galaxy/util/path/__init__.py b/lib/galaxy/util/path/__init__.py new file mode 100644 index 00000000000..3cde6fb0934 --- /dev/null +++ b/lib/galaxy/util/path/__init__.py @@ -0,0 +1,185 @@ +"""Path manipulation functions. +""" +from __future__ import absolute_import + +import errno +import imp +from functools import partial +from itertools import starmap +from operator import getitem +from os import ( + makedirs, + walk, +) +from os.path import ( + abspath, + exists, + isabs, + join, + normpath, + pardir, + realpath, + relpath, +) + +from six import string_types +from six.moves import filterfalse, map, zip + + +def safe_contains(prefix, path, whitelist=None): + """Ensure a path is contained within another path. + + Given any two filesystem paths, ensure that ``path`` is contained in ``prefix``. If ``path`` exists (either as an + absolute path or relative to ``prefix``), it is canonicalized with :func:`os.path.realpath` to ensure it is not a + symbolic link that points outside of ``prefix``. If it is a symbolic link and ``whitelist`` is set, the symbolic link + may also point inside a ``whitelist`` path. + + The ``path`` is checked against ``whitelist`` using either its absolute pathname (if passed in as absolute) or + relative to ``prefix`` and canonicalized (if applicable). It is *not* ``os.path.join()``ed with each ``whitelist`` + directory. + + :type prefix: string + :param prefix: a directory under which ``path`` is to be checked + :type path: string + :param path: a filename to check + :type whitelist: list of strings + :param whitelist: list of additional paths under which ``path`` may be located + :rtype: bool + :returns: ``True`` if ``path`` is contained within ``prefix`` or ``whitelist``, ``False`` otherwise. + """ + return any(__contains(prefix, path, whitelist=whitelist)) + + +def safe_makedirs(path): + """Safely make a directory, do not fail if it already exists or is created during execution. + + :type path: string + :param path: a directory to create + """ + # prechecking for existence is faster than try/except + if not exists(path): + try: + makedirs(path) + except OSError as e: + # reviewing the source for Python 2.7, this would only ever happen for the last path element anyway so no + # need to recurse - this exception means the last part of the path was already in existence. + if e.errno != errno.EEXIST: + raise + + +def safe_relpath(path): + """Determine whether a relative path references a path outside its root. + + This is a path computation: the filesystem is not accessed to confirm the existence or nature of ``path``. + + :type path: string + :param path: a path to check + :rtype: bool + :returns: ``True`` if path is relative and does not reference a path in a parent directory, ``False`` + otherwise. + """ + return not (isabs(path) or normpath(path).startswith(pardir)) + + +def unsafe_walk(path, whitelist=None): + """Walk a path and ensure that none of its contents are symlinks outside the path. + + It is assumed that ``path`` itself has already been validated e.g. with :func:`safe_relpath` or + :func:`safe_contains`. + + :type path: string + :param path: a directory to check for unsafe contents + :type whitelist: list of strings + :param whitelist: list of additional paths under which contents may be located + :rtype: iterator + :returns: Iterator of "bad" files found under ``path`` + """ + return filterfalse(partial(safe_contains, path, whitelist=whitelist), __walk(abspath(path))) + + +def __listify(item): + """A non-splitting version of :func:`galaxy.util.listify`. + """ + if not item: + return [] + elif isinstance(item, list) or isinstance(item, tuple): + return item + else: + return [item] + + +# helpers + + +def __walk(path): + for dirpath, dirnames, filenames in walk(path): + for name in dirnames + filenames: + yield join(dirpath, name) + + +def __contains(prefix, path, whitelist=None): + real = realpath(join(prefix, path)) + yield not relpath(real, prefix).startswith(pardir) + for wldir in whitelist or []: + yield not relpath(real, wldir).startswith(pardir) + + +# cross-platform support + + +def _build_self(target, path_module): + """Populate a module with the same exported functions as this module, but using the given os.path module. + + :type target: module + :param target: module on which to set ``galaxy.util.path`` functions + :type path_module: ``ntpath`` or ``posixpath`` module + :param path_module: module implementing ``os.path`` API to use for path functions + """ + __copy_self().__set_fxns_on(target, path_module) + + +def __copy_self(names=__name__, parent=None): + """Returns a copy of this module that can be modified without modifying `galaxy.util.path`` in ``sys.modules``. + """ + if isinstance(names, string_types): + names = iter(names.split('.')) + try: + name = names.next() + except StopIteration: + return parent + path = parent and parent.__path__ + parent = imp.load_module(name, *imp.find_module(name, path)) + return __copy_self(names, parent) + + +def __set_fxns_on(target, path_module): + """Overrides imported os.path functions with the ones from path_module and populates target with the global + functions from this module. + """ + for name in __pathfxns__: + globals()[name] = getattr(path_module, name) + __get = partial(getitem, globals()) + __set = partial(setattr, target) + # this is actually izip(..., imap(...)) + __fxns = zip(__all__, map(__get, __all__)) + # list() to execute + list(starmap(__set, __fxns)) + + +__pathfxns__ = ( + 'abspath', + 'exists', + 'isabs', + 'join', + 'normpath', + 'pardir', + 'realpath', + 'relpath', +) + +__all__ = ( + 'safe_contains', + 'safe_makedirs', + 'safe_relpath', + 'unsafe_walk', +) diff --git a/lib/galaxy/util/path/ntpath.py b/lib/galaxy/util/path/ntpath.py new file mode 100644 index 00000000000..3c86944963a --- /dev/null +++ b/lib/galaxy/util/path/ntpath.py @@ -0,0 +1,11 @@ +"""Galaxy "safe" path functions forced to work with Windows-style paths regardless of current platform +""" +from __future__ import absolute_import + +import ntpath # noqa: I100 See https://github.com/PyCQA/flake8-import-order/pull/115 +import sys + +from . import _build_self + + +_build_self(sys.modules[__name__], ntpath) diff --git a/lib/galaxy/util/path/posixpath.py b/lib/galaxy/util/path/posixpath.py new file mode 100644 index 00000000000..28232649b57 --- /dev/null +++ b/lib/galaxy/util/path/posixpath.py @@ -0,0 +1,11 @@ +"""Galaxy "safe" path functions forced to work with POSIX-style paths regardless of current platform +""" +from __future__ import absolute_import + +import posixpath +import sys + +from . import _build_self + + +_build_self(sys.modules[__name__], posixpath) diff --git a/lib/galaxy/util/sanitize_html.py b/lib/galaxy/util/sanitize_html.py index bc94574bef2..525c0d8ed4d 100644 --- a/lib/galaxy/util/sanitize_html.py +++ b/lib/galaxy/util/sanitize_html.py @@ -6,24 +6,10 @@ import re import sgmllib from six import unichr +from six.moves.html_entities import name2codepoint from galaxy.util import unicodify - -# reversable htmlentitydefs mappings for Python 2.2 -try: - from htmlentitydefs import name2codepoint, codepoint2name -except: - import htmlentitydefs - name2codepoint = {} - codepoint2name = {} - for (name, codepoint) in htmlentitydefs.entitydefs.iteritems(): - if codepoint.startswith('&#'): - codepoint = unichr(int(codepoint[2:-1])) - name2codepoint[name] = ord(codepoint) - codepoint2name[ord(codepoint)] = name - - _cp1252 = { unichr(128): unichr(8364), # euro sign unichr(130): unichr(8218), # single low-9 quotation mark @@ -363,7 +349,7 @@ class _HTMLSanitizer(_BaseHTMLProcessor): # declare xlink namespace, if needed if self.mathmlOK or self.svgOK: - if filter(lambda n, v: n.startswith('xlink:'), attrs): + if any(map(lambda n, v: n.startswith('xlink:'), attrs)): if not ('xmlns:xlink', 'http://www.w3.org/1999/xlink') in attrs: attrs.append(('xmlns:xlink', 'http://www.w3.org/1999/xlink')) diff --git a/lib/galaxy/visualization/data_providers/basic.py b/lib/galaxy/visualization/data_providers/basic.py index 8695db08464..15a3106c5a0 100644 --- a/lib/galaxy/visualization/data_providers/basic.py +++ b/lib/galaxy/visualization/data_providers/basic.py @@ -123,12 +123,12 @@ class ColumnDataProvider(BaseDataProvider): if type == 'int': try: val = int(val) - except: + except ValueError: return None elif type == 'float': try: val = float(val) - except: + except ValueError: return None return val diff --git a/lib/galaxy/visualization/data_providers/genome.py b/lib/galaxy/visualization/data_providers/genome.py index 460765eb3d5..3fe859599fd 100644 --- a/lib/galaxy/visualization/data_providers/genome.py +++ b/lib/galaxy/visualization/data_providers/genome.py @@ -11,9 +11,9 @@ import sys from json import loads import pysam -from bx.interval_index_file import Indexes from bx.bbi.bigbed_file import BigBedFile from bx.bbi.bigwig_file import BigWigFile +from bx.interval_index_file import Indexes from pysam import ctabix from galaxy.datatypes.interval import Bed, Gff, Gtf @@ -237,7 +237,7 @@ class GenomeDataProvider(BaseDataProvider): except AttributeError: try: column_names = range(self.original_dataset.metadata.columns) - except: # Give up + except Exception: # Give up return [] # Dataset must have column types; if not, cannot create filters. @@ -276,25 +276,6 @@ class GenomeDataProvider(BaseDataProvider): class FilterableMixin: def get_filters(self): """ Returns a dataset's filters. """ - - # is_ functions taken from Tabular.set_meta - def is_int(column_text): - try: - int(column_text) - return True - except: - return False - - def is_float(column_text): - try: - float(column_text) - return True - except: - if column_text.strip().lower() == 'na': - return True # na is special cased to be a float - return False - - # # Get filters. # TODOs: # (a) might be useful to move this into each datatype's set_meta method; @@ -449,7 +430,7 @@ class IntervalDataProvider(GenomeDataProvider): if length >= 5 and filter_cols and filter_cols[0] == "Score": try: payload.append(float(feature[4])) - except: + except Exception: payload.append(feature[4]) rval.append(payload) @@ -540,7 +521,7 @@ class BedDataProvider(GenomeDataProvider): try: payload.append(float(feature[4])) - except: + except Exception: payload.append(feature[4]) rval.append(payload) @@ -1697,7 +1678,7 @@ def package_gff_feature(feature, no_detail=False, filter_cols=[]): try: f = float(feature.score) payload.append(f) - except: + except Exception: payload.append(feature.score) elif col in feature.attributes: if feature.attributes[col] == 'nan': @@ -1706,7 +1687,7 @@ def package_gff_feature(feature, no_detail=False, filter_cols=[]): try: f = float(feature.attributes[col]) payload.append(f) - except: + except Exception: payload.append(feature.attributes[col]) else: # Dummy value. diff --git a/lib/galaxy/visualization/genomes.py b/lib/galaxy/visualization/genomes.py index 27dc2dfcd44..f4931a4afb3 100644 --- a/lib/galaxy/visualization/genomes.py +++ b/lib/galaxy/visualization/genomes.py @@ -166,7 +166,7 @@ class Genome(object): try: next(len_file_enumerate) next_chroms = True - except: + except StopIteration: # No more chroms to read. pass diff --git a/lib/galaxy/visualization/plugins/interactive_environments.py b/lib/galaxy/visualization/plugins/interactive_environments.py index c97f1508f28..edb108eb864 100644 --- a/lib/galaxy/visualization/plugins/interactive_environments.py +++ b/lib/galaxy/visualization/plugins/interactive_environments.py @@ -2,15 +2,17 @@ import json import logging import os import random +import shlex import stat import string import tempfile import uuid +from itertools import product from subprocess import PIPE, Popen from sys import platform as _platform import yaml -from six.moves import configparser +from six.moves import configparser, shlex_quote from galaxy import model, web from galaxy.containers import build_container_interfaces @@ -132,7 +134,7 @@ class InteractiveEnvironmentRequest(object): # their defaults dictionary instead. default_dict = { 'container_interface': None, - 'command': 'docker {docker_args}', + 'command': 'docker', 'command_inject': '-e DEBUG=false -e DEFAULT_CONTAINER_RUNTIME=120', 'docker_hostname': 'localhost', 'wx_tempdir': 'False', @@ -273,40 +275,40 @@ class InteractiveEnvironmentRequest(object): def _get_name_for_run(self): return CONTAINER_NAME_PREFIX + uuid.uuid4().hex + def base_docker_cmd(self, subcmd=None): + # This is the basic docker command such as "sudo -u docker docker" or just "docker" + # Previously, {docker_args} was required to be in the string, this is no longer the case + base = shlex.split(self.attr.viz_config.get("docker", "command").format(docker_args='').strip()) + if subcmd: + base.append(subcmd) + return base + def docker_cmd(self, image, env_override=None, volumes=None): """ Generate and return the docker command to execute """ - if volumes is None: - volumes = [] - env = self._get_env_for_run(env_override) - import_volume_def = self._get_import_volume_for_run() - env_str = ' '.join('-e "%s=%s"' % (key, item) for key, item in env.items()) - volume_str = ' '.join('-v "%s"' % volume for volume in volumes) if self.use_volumes else '' - import_volume_str = '-v "{import_volume}"'.format(import_volume=import_volume_def) if import_volume_def else '' - name = None - # This is the basic docker command such as "sudo -u docker docker {docker_args}" - # or just "docker {docker_args}" - command = self.attr.viz_config.get("docker", "command") - # Then we format in the entire docker command in place of - # {docker_args}, so as to let the admin not worry about which args are - # getting passed + def _flag_opts(flag, opts): + return [arg for pair in product((flag,), opts) for arg in pair] + command_inject = self.attr.viz_config.get("docker", "command_inject") # --name should really not be set, but we'll try to honor it anyway - if '--name' not in command_inject: - name = self._get_name_for_run() - command = command.format(docker_args='run {command_inject} {name} {environment} -d -P {import_volume_str} {volume_str} {image}') + name = ['--name=%s' % self._get_name_for_run()] if '--name' not in command_inject else [] + env = self._get_env_for_run(env_override) + import_volume_def = self._get_import_volume_for_run() + if volumes is None: + volumes = [] + if import_volume_def: + volumes.insert(0, import_volume_def) - # Once that's available, we format again with all of our arguments - command = command.format( - command_inject=command_inject, - name='--name=%s' % name if name is not None else '', - environment=env_str, - import_volume_str=import_volume_str, - volume_str=volume_str, - image=image, + return ( + self.base_docker_cmd('run') + + shlex.split(command_inject) + + name + + _flag_opts('-e', ['='.join(map(str, t)) for t in env.items()]) + + ['-d', '-P'] + + _flag_opts('-v', map(str, volumes)) + + [image] ) - return command @property def use_volumes(self): @@ -398,9 +400,9 @@ class InteractiveEnvironmentRequest(object): log.info("Starting docker container for IE {0} with command [{1}]".format( self.attr.viz_id, - raw_cmd + ' '.join([shlex_quote(x) for x in raw_cmd]) )) - p = Popen(raw_cmd, stdout=PIPE, stderr=PIPE, close_fds=True, shell=True) + p = Popen(raw_cmd, stdout=PIPE, stderr=PIPE, close_fds=True) stdout, stderr = p.communicate() if p.returncode != 0: log.error("Container Launch error\n\n%s\n%s" % (stdout, stderr)) @@ -504,14 +506,13 @@ class InteractiveEnvironmentRequest(object): :returns: inspect_data, a dict of docker inspect output """ - command = self.attr.viz_config.get("docker", "command") - command = command.format(docker_args="inspect %s" % container_id) + raw_cmd = self.base_docker_cmd('inspect') + [container_id] log.info("Inspecting docker container {0} with command [{1}]".format( container_id, - command + ' '.join([shlex_quote(x) for x in raw_cmd]) )) - p = Popen(command, stdout=PIPE, stderr=PIPE, close_fds=True, shell=True) + p = Popen(raw_cmd, stdout=PIPE, stderr=PIPE, close_fds=True) stdout, stderr = p.communicate() if p.returncode != 0: log.error("Container Launch error\n\n%s\n%s" % (stdout, stderr)) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index 82ccdd701fd..931ff694d48 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -268,7 +268,7 @@ class InteractiveEnvironmentPlugin(VisualizationPlugin): if self.config.get('plugin_type', 'visualization') == "interactive_environment": try: request = self.INTENV_REQUEST_FACTORY(trans, self) - except: + except Exception: log.exception("IE plugin request handling failed") return trans.fill_template('message.mako', message='Loading the interactive environment failed, please contact the {admin_tag} for assistance'.format( diff --git a/lib/galaxy/web/base/controller.py b/lib/galaxy/web/base/controller.py index db9f8be0c8a..1b610532438 100644 --- a/lib/galaxy/web/base/controller.py +++ b/lib/galaxy/web/base/controller.py @@ -185,7 +185,7 @@ class BaseUIController(BaseController): check_ownership=check_ownership, check_accessible=check_accessible, deleted=deleted) except exceptions.MessageException: raise # handled in the caller - except: + except Exception: log.exception("Exception in get_object check for %s %s:", class_name, str(id)) raise Exception('Server error retrieving %s id ( %s ).' % (class_name, str(id))) @@ -1084,7 +1084,7 @@ class UsesVisualizationMixin(UsesLibraryMixinItems): try: data = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(int(dataset_id)) - except: + except Exception: raise HTTPRequestRangeNotSatisfiable("Invalid dataset id: %s." % str(dataset_id)) if check_ownership: diff --git a/lib/galaxy/web/framework/decorators.py b/lib/galaxy/web/framework/decorators.py index 9d56f851995..ef23ed0a127 100644 --- a/lib/galaxy/web/framework/decorators.py +++ b/lib/galaxy/web/framework/decorators.py @@ -147,7 +147,7 @@ def expose_api(func, to_json=True, user_required=True): user = trans.sa_session.query(trans.app.model.User).get(decoded_user_id) trans.api_inherit_admin = trans.user_is_admin() trans.set_user(user) - except: + except Exception: trans.response.status = 400 return "That user does not exist." try: @@ -157,7 +157,7 @@ def expose_api(func, to_json=True, user_required=True): return rval except paste.httpexceptions.HTTPException: raise # handled - except: + except Exception: log.exception('Uncaught exception in exposed API method:') raise paste.httpexceptions.HTTPServerError() return expose(_save_orig_fn(decorator, func)) @@ -183,7 +183,7 @@ def __extract_payload_from_request(trans, func, kwargs): # 40000000000000e5 will be parsed as a scientific notation float. This is as opposed to hex strings # in larger JSON structures where quoting prevents this (further below) payload[k] = loads(v, parse_float=util.parse_non_hex_float) - except: + except Exception: # may not actually be json, just continue pass payload = util.recursively_stringify_dictionary_keys(payload) @@ -274,7 +274,7 @@ def _future_expose_api(func, to_json=True, user_required=True, user_or_session_r user = trans.sa_session.query(trans.app.model.User).get(decoded_user_id) trans.api_inherit_admin = trans.user_is_admin() trans.set_user(user) - except: + except Exception: error_code = error_codes.USER_INVALID_RUN_AS return __api_error_response(trans, err_code=error_code, status_code=400) try: diff --git a/lib/galaxy/web/framework/helpers/grids.py b/lib/galaxy/web/framework/helpers/grids.py index e28eb336ec4..fbfc11faf38 100644 --- a/lib/galaxy/web/framework/helpers/grids.py +++ b/lib/galaxy/web/framework/helpers/grids.py @@ -440,7 +440,7 @@ class Grid(object): # Ensure ids are integers try: id = list(map(int, id)) - except: + except Exception: decorators.error("Invalid id") return id diff --git a/lib/galaxy/web/framework/middleware/error.py b/lib/galaxy/web/framework/middleware/error.py index 581d9896f78..0c337164b2a 100644 --- a/lib/galaxy/web/framework/middleware/error.py +++ b/lib/galaxy/web/framework/middleware/error.py @@ -153,7 +153,7 @@ class ErrorMiddleware(object): sr_checker = ResponseStartChecker(start_response) app_iter = self.application(environ, sr_checker) return self.make_catching_iter(app_iter, environ, sr_checker) - except: + except Exception: exc_info = sys.exc_info() try: for expect in environ.get('paste.expected_exceptions', []): @@ -244,7 +244,7 @@ class CatchingIter(six.Iterator): return close_response else: raise StopIteration - except: + except Exception: self.closed = True close_response = self._close() exc_info = sys.exc_info() @@ -275,7 +275,7 @@ class CatchingIter(six.Iterator): try: self.app_iterable.close() return None - except: + except Exception: close_response = self.error_middleware.exception_handler( sys.exc_info(), self.environ) return close_response @@ -356,7 +356,7 @@ def handle_exception(exc_info, error_stream, html=True, from paste.exceptions.errormiddleware import handle_exception try: do stuff - except: + except Exception: handle_exception( sys.exc_info(), sys.stderr, html=False, ...other config...) @@ -440,7 +440,7 @@ def handle_exception(exc_info, error_stream, html=True, def send_report(rep, exc_data, html=True): try: rep.report(exc_data) - except: + except Exception: output = StringIO() traceback.print_exc(file=output) if html: diff --git a/lib/galaxy/web/framework/middleware/sentry.py b/lib/galaxy/web/framework/middleware/sentry.py index 0817fc5fbb3..4718e98a288 100644 --- a/lib/galaxy/web/framework/middleware/sentry.py +++ b/lib/galaxy/web/framework/middleware/sentry.py @@ -9,7 +9,7 @@ raven.middleware try: from raven import Client from raven.utils.wsgi import get_current_url, get_headers, get_environ -except: +except ImportError: Client = None from galaxy.web.stack import register_postfork_function diff --git a/lib/galaxy/web/framework/webapp.py b/lib/galaxy/web/framework/webapp.py index 3b185bb5a1f..a240f73aee9 100644 --- a/lib/galaxy/web/framework/webapp.py +++ b/lib/galaxy/web/framework/webapp.py @@ -340,7 +340,7 @@ class GalaxyWebTransaction(base.DefaultWebTransaction, return self.response.cookies[name].value else: return self.request.cookies[name].value - except: + except Exception: return None def set_cookie(self, value, name='galaxysession', path='/', age=90, version='1'): @@ -654,7 +654,7 @@ class GalaxyWebTransaction(base.DefaultWebTransaction, try: users_last_session = user.galaxy_sessions[0] last_accessed = True - except: + except Exception: users_last_session = None last_accessed = False if (prev_galaxy_session.current_history and not diff --git a/lib/galaxy/web/stack/__init__.py b/lib/galaxy/web/stack/__init__.py index 3b7689be4d5..e23899db6f5 100644 --- a/lib/galaxy/web/stack/__init__.py +++ b/lib/galaxy/web/stack/__init__.py @@ -16,7 +16,7 @@ except ImportError: try: from uwsgidecorators import postfork as uwsgi_postfork -except: +except (AttributeError, ImportError): uwsgi_postfork = lambda x: x # noqa: E731 if uwsgi is not None and hasattr(uwsgi, 'numproc'): print("WARNING: This is a uwsgi process but the uwsgidecorators library" diff --git a/lib/galaxy/webapps/galaxy/api/authenticate.py b/lib/galaxy/webapps/galaxy/api/authenticate.py index 3f24607b1bd..59995ef91e6 100644 --- a/lib/galaxy/webapps/galaxy/api/authenticate.py +++ b/lib/galaxy/webapps/galaxy/api/authenticate.py @@ -10,16 +10,15 @@ Returns: "api_key": "baa4d6e3a156d3033f05736255f195f9" } """ - +import logging from base64 import b64decode from urllib import unquote -from galaxy.web import _future_expose_api_anonymous_and_sessionless as expose_api_anonymous_and_sessionless -from galaxy.managers import api_keys from galaxy import exceptions +from galaxy.managers import api_keys +from galaxy.web import _future_expose_api_anonymous_and_sessionless as expose_api_anonymous_and_sessionless from galaxy.web.base.controller import BaseAPIController -import logging log = logging.getLogger(__name__) @@ -82,7 +81,7 @@ class AuthenticationController(BaseAPIController): if len(split) == 1: try: email, password = b64decode(split[0]).split(':') - except: + except Exception: raise exceptions.ActionInputError() # If there are only two elements, check the first and ensure it says @@ -92,7 +91,7 @@ class AuthenticationController(BaseAPIController): if split[0].strip().lower() == 'basic': try: email, password = b64decode(split[1]).split(':') - except: + except Exception: raise exceptions.ActionInputError() else: raise exceptions.ActionInputError() diff --git a/lib/galaxy/webapps/galaxy/api/folder_contents.py b/lib/galaxy/webapps/galaxy/api/folder_contents.py index 3ff8c2e0629..63ff60d4564 100644 --- a/lib/galaxy/webapps/galaxy/api/folder_contents.py +++ b/lib/galaxy/webapps/galaxy/api/folder_contents.py @@ -109,6 +109,7 @@ class FolderContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryM is_unrestricted=is_unrestricted, is_private=is_private, can_manage=can_manage, + state=library_dataset_dict['state'], file_size=nice_size)) if content_item.library_dataset_dataset_association.message: return_item.update(dict(message=content_item.library_dataset_dataset_association.message)) diff --git a/lib/galaxy/webapps/galaxy/api/forms.py b/lib/galaxy/webapps/galaxy/api/forms.py index 66ba15bcc8a..bd44665a150 100644 --- a/lib/galaxy/webapps/galaxy/api/forms.py +++ b/lib/galaxy/webapps/galaxy/api/forms.py @@ -2,10 +2,12 @@ API operations on FormDefinition objects. """ import logging -from galaxy.web.base.controller import BaseAPIController, url_for + +from xml.etree.ElementTree import XML + from galaxy import web from galaxy.forms.forms import form_factory -from xml.etree.ElementTree import XML +from galaxy.web.base.controller import BaseAPIController, url_for log = logging.getLogger(__name__) @@ -43,7 +45,7 @@ class FormDefinitionAPIController(BaseAPIController): return "Malformed form definition id ( %s ) specified, unable to decode." % str(form_definition_id) try: form_definition = trans.sa_session.query(trans.app.model.FormDefinition).get(decoded_form_definition_id) - except: + except Exception: form_definition = None if not form_definition or not trans.user_is_admin(): trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/group_roles.py b/lib/galaxy/webapps/galaxy/api/group_roles.py index a4d42cbbaf5..46372b7b021 100644 --- a/lib/galaxy/webapps/galaxy/api/group_roles.py +++ b/lib/galaxy/webapps/galaxy/api/group_roles.py @@ -2,8 +2,9 @@ API operations on Group objects. """ import logging -from galaxy.web.base.controller import BaseAPIController, url_for + from galaxy import web +from galaxy.web.base.controller import BaseAPIController, url_for log = logging.getLogger(__name__) @@ -20,7 +21,7 @@ class GroupRolesAPIController(BaseAPIController): decoded_group_id = trans.security.decode_id(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) - except: + except Exception: group = None if not group: trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/group_users.py b/lib/galaxy/webapps/galaxy/api/group_users.py index 04d47f4c0b9..ab0f3de4f88 100644 --- a/lib/galaxy/webapps/galaxy/api/group_users.py +++ b/lib/galaxy/webapps/galaxy/api/group_users.py @@ -2,8 +2,9 @@ API operations on Group objects. """ import logging -from galaxy.web.base.controller import BaseAPIController, url_for + from galaxy import web +from galaxy.web.base.controller import BaseAPIController, url_for log = logging.getLogger(__name__) @@ -20,7 +21,7 @@ class GroupUsersAPIController(BaseAPIController): decoded_group_id = trans.security.decode_id(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) - except: + except Exception: group = None if not group: trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/groups.py b/lib/galaxy/webapps/galaxy/api/groups.py index f398f865e5c..1798008b952 100644 --- a/lib/galaxy/webapps/galaxy/api/groups.py +++ b/lib/galaxy/webapps/galaxy/api/groups.py @@ -2,11 +2,11 @@ API operations on Group objects. """ import logging + from sqlalchemy import false -from galaxy.web.base.controller import BaseAPIController, url_for from galaxy import web - +from galaxy.web.base.controller import BaseAPIController, url_for log = logging.getLogger(__name__) @@ -86,7 +86,7 @@ class GroupAPIController(BaseAPIController): return "Malformed group id ( %s ) specified, unable to decode." % str(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) - except: + except Exception: group = None if not group: trans.response.status = 400 @@ -112,7 +112,7 @@ class GroupAPIController(BaseAPIController): return "Malformed group id ( %s ) specified, unable to decode." % str(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) - except: + except Exception: group = None if not group: trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/jobs.py b/lib/galaxy/webapps/galaxy/api/jobs.py index df2b0360efd..86f1ef415cb 100644 --- a/lib/galaxy/webapps/galaxy/api/jobs.py +++ b/lib/galaxy/webapps/galaxy/api/jobs.py @@ -94,7 +94,7 @@ class JobController(BaseAPIController, UsesLibraryMixinItems): try: decoded_history_id = self.decode_id(history_id) query = query.filter(trans.app.model.Job.history_id == decoded_history_id) - except: + except Exception: raise exceptions.ObjectAttributeInvalidException() out = [] diff --git a/lib/galaxy/webapps/galaxy/api/library_contents.py b/lib/galaxy/webapps/galaxy/api/library_contents.py index 5992a8e8432..56dc0e681ec 100644 --- a/lib/galaxy/webapps/galaxy/api/library_contents.py +++ b/lib/galaxy/webapps/galaxy/api/library_contents.py @@ -1,19 +1,36 @@ """ API operations on the contents of a data library. """ -from galaxy import util -from galaxy import web -from galaxy import exceptions -from galaxy import managers -from galaxy.web import _future_expose_api as expose_api -from galaxy.web.base.controller import BaseAPIController, UsesLibraryMixin, UsesLibraryMixinItems -from galaxy.web.base.controller import HTTPBadRequest, url_for -from galaxy.managers.collections_util import api_payload_to_create_params, dictify_dataset_collection_instance -from galaxy.model import ExtendedMetadata, ExtendedMetadataIndex -from sqlalchemy.orm.exc import MultipleResultsFound -from sqlalchemy.orm.exc import NoResultFound - import logging + +from sqlalchemy.orm.exc import ( + MultipleResultsFound, + NoResultFound, +) + +from galaxy import ( + exceptions, + managers, + util, + web +) +from galaxy.managers.collections_util import ( + api_payload_to_create_params, + dictify_dataset_collection_instance +) +from galaxy.model import ( + ExtendedMetadata, + ExtendedMetadataIndex +) +from galaxy.web import _future_expose_api as expose_api +from galaxy.web.base.controller import ( + BaseAPIController, + HTTPBadRequest, + url_for, + UsesLibraryMixin, + UsesLibraryMixinItems +) + log = logging.getLogger(__name__) @@ -384,7 +401,7 @@ class LibraryContentsController(BaseAPIController, UsesLibraryMixin, UsesLibrary try: ld.library_dataset_dataset_association.dataset.full_delete() trans.sa_session.add(ld.dataset) - except: + except Exception: pass # flush now to preserve deleted state in case of later interruption trans.sa_session.flush() diff --git a/lib/galaxy/webapps/galaxy/api/library_datasets.py b/lib/galaxy/webapps/galaxy/api/library_datasets.py index dc9f7287075..b4970a1aee3 100644 --- a/lib/galaxy/webapps/galaxy/api/library_datasets.py +++ b/lib/galaxy/webapps/galaxy/api/library_datasets.py @@ -24,6 +24,7 @@ from galaxy.managers import ( ) from galaxy.tools.actions import upload_common from galaxy.tools.parameters import populate_state +from galaxy.util.path import safe_contains, safe_relpath, unsafe_walk from galaxy.util.streamball import StreamBall from galaxy.web import ( _future_expose_api as expose_api, @@ -416,29 +417,45 @@ class LibraryDatasetsController(BaseAPIController, UsesVisualizationMixin): source = kwd.get('source', None) if source not in ['userdir_file', 'userdir_folder', 'importdir_file', 'importdir_folder', 'admin_path']: raise exceptions.RequestParameterMissingException('You have to specify "source" parameter. Possible values are "userdir_file", "userdir_folder", "admin_path", "importdir_file" and "importdir_folder". ') - if source in ['importdir_file', 'importdir_folder']: - if not trans.user_is_admin: + elif source in ['importdir_file', 'importdir_folder']: + if not trans.user_is_admin(): raise exceptions.AdminRequiredException('Only admins can import from importdir.') if not trans.app.config.library_import_dir: raise exceptions.ConfigDoesNotAllowException('The configuration of this Galaxy instance does not allow admins to import into library from importdir.') import_base_dir = trans.app.config.library_import_dir + if not safe_relpath(path): + # admins shouldn't be able to explicitly specify a path outside server_dir, but symlinks are allowed. + # the reasoning here is that galaxy admins may not have direct filesystem access or can only access + # library_import_dir via FTP (which cannot create symlinks), and may rely on sysadmins to set up the + # import directory. if they have filesystem access, all bets are off. + raise exceptions.RequestParameterInvalidException('The given path is invalid.') path = os.path.join(import_base_dir, path) - if source in ['userdir_file', 'userdir_folder']: + elif source in ['userdir_file', 'userdir_folder']: + unsafe = None user_login = trans.user.email user_base_dir = trans.app.config.user_library_import_dir if user_base_dir is None: raise exceptions.ConfigDoesNotAllowException('The configuration of this Galaxy instance does not allow upload from user directories.') full_dir = os.path.join(user_base_dir, user_login) - if not path.lower().startswith(full_dir.lower()): + if not safe_contains(full_dir, path, whitelist=trans.app.config.user_library_import_symlink_whitelist): + # the path is a symlink outside the user dir path = os.path.join(full_dir, path) + log.error('User attempted to import a path that resolves to a path outside of their import dir: %s -> %s', path, os.path.realpath(path)) + raise exceptions.RequestParameterInvalidException('The given path is invalid.') + path = os.path.join(full_dir, path) + for unsafe in unsafe_walk(path, whitelist=[full_dir] + trans.app.config.user_library_import_symlink_whitelist): + # the path is a dir and contains files that symlink outside the user dir + log.error('User attempted to import a directory containing a path that resolves to a path outside of their import dir: %s -> %s', unsafe, os.path.realpath(unsafe)) + if unsafe: + raise exceptions.RequestParameterInvalidException('The given path is invalid.') if not os.path.exists(path): raise exceptions.RequestParameterInvalidException('Given path does not exist on the host.') if not self.folder_manager.can_add_item(trans, folder): raise exceptions.InsufficientPermissionsException('You do not have proper permission to add items to the given folder.') - if source == 'admin_path': + elif source == 'admin_path': if not trans.app.config.allow_library_path_paste: raise exceptions.ConfigDoesNotAllowException('The configuration of this Galaxy instance does not allow admins to import into library from path.') - if not trans.user_is_admin: + if not trans.user_is_admin(): raise exceptions.AdminRequiredException('Only admins can import from path.') # Set up the traditional tool state/params @@ -457,12 +474,12 @@ class LibraryDatasetsController(BaseAPIController, UsesVisualizationMixin): if source in ['importdir_folder']: kwd['filesystem_paths'] = os.path.join(import_base_dir, path) # user wants to import one file only - if source in ["userdir_file", "importdir_file"]: + elif source in ["userdir_file", "importdir_file"]: file = os.path.abspath(path) abspath_datasets.append(trans.webapp.controllers['library_common'].make_library_uploaded_dataset( trans, 'api', kwd, os.path.basename(file), file, 'server_dir', library_bunch)) # user wants to import whole folder - if source == "userdir_folder": + elif source == "userdir_folder": uploaded_datasets_bunch = trans.webapp.controllers['library_common'].get_path_paste_uploaded_datasets( trans, 'api', kwd, library_bunch, 200, '') uploaded_datasets = uploaded_datasets_bunch[0] @@ -708,7 +725,7 @@ class LibraryDatasetsController(BaseAPIController, UsesVisualizationMixin): trans.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % fname try: return open(dataset.file_name) - except: + except Exception: raise exceptions.InternalServerError("This dataset contains no content.") else: raise exceptions.RequestParameterInvalidException("Wrong format parameter specified") diff --git a/lib/galaxy/webapps/galaxy/api/remote_files.py b/lib/galaxy/webapps/galaxy/api/remote_files.py index 9dc39fc8222..7360f8ec12d 100644 --- a/lib/galaxy/webapps/galaxy/api/remote_files.py +++ b/lib/galaxy/webapps/galaxy/api/remote_files.py @@ -107,7 +107,7 @@ class RemoteFilesAPIController(BaseAPIController): subfolders and returns a flat list. """ response = [] - if os.path.exists(directory): + if os.path.exists(directory) and not os.path.islink(directory): for (dirpath, dirnames, filenames) in os.walk(directory): for filename in filenames: path = os.path.relpath(os.path.join(dirpath, filename), directory) @@ -130,7 +130,7 @@ class RemoteFilesAPIController(BaseAPIController): """ userdir_jstree = None jstree_paths = [] - if os.path.exists(directory): + if os.path.exists(directory) and not os.path.islink(directory): for (dirpath, dirnames, filenames) in os.walk(directory): for dirname in dirnames: dir_path = os.path.relpath(os.path.join(dirpath, dirname), directory) diff --git a/lib/galaxy/webapps/galaxy/api/request_types.py b/lib/galaxy/webapps/galaxy/api/request_types.py index d6dba58acaa..7288266feb9 100644 --- a/lib/galaxy/webapps/galaxy/api/request_types.py +++ b/lib/galaxy/webapps/galaxy/api/request_types.py @@ -2,10 +2,12 @@ API operations on RequestType objects. """ import logging -from galaxy.web.base.controller import BaseAPIController, url_for + +from xml.etree.ElementTree import XML + from galaxy import web from galaxy.sample_tracking.request_types import request_type_factory -from xml.etree.ElementTree import XML +from galaxy.web.base.controller import BaseAPIController, url_for log = logging.getLogger(__name__) @@ -39,7 +41,7 @@ class RequestTypeAPIController(BaseAPIController): return "Malformed request type id ( %s ) specified, unable to decode." % str(request_type_id) try: request_type = trans.sa_session.query(trans.app.model.RequestType).get(decoded_request_type_id) - except: + except Exception: request_type = None if not request_type: # or not trans.user_is_admin(): trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/requests.py b/lib/galaxy/webapps/galaxy/api/requests.py index 7b35a54541d..bd59edb843c 100644 --- a/lib/galaxy/webapps/galaxy/api/requests.py +++ b/lib/galaxy/webapps/galaxy/api/requests.py @@ -23,6 +23,9 @@ class RequestsAPIController(BaseAPIController): GET /api/requests Displays a collection (list) of sequencing requests. """ + if not trans.app.config.enable_legacy_sample_tracking_api: + trans.response.status = 403 + return "The configuration of this Galaxy instance does not allow accessing this API." # if admin user then return all requests if trans.user_is_admin(): query = trans.sa_session.query(trans.app.model.Request) \ @@ -49,6 +52,9 @@ class RequestsAPIController(BaseAPIController): GET /api/requests/{encoded_request_id} Displays details of a sequencing request. """ + if not trans.app.config.enable_legacy_sample_tracking_api: + trans.response.status = 403 + return "The configuration of this Galaxy instance does not allow accessing this API." try: request_id = trans.security.decode_id(id) except TypeError: @@ -56,7 +62,7 @@ class RequestsAPIController(BaseAPIController): return "Malformed id ( %s ) specified, unable to decode." % (str(id)) try: request = trans.sa_session.query(trans.app.model.Request).get(request_id) - except: + except Exception: request = None if not request or not (trans.user_is_admin() or request.user.id == trans.user.id): trans.response.status = 400 @@ -75,6 +81,9 @@ class RequestsAPIController(BaseAPIController): Updates a request state, sample state or sample dataset transfer status depending on the update_type """ + if not trans.app.config.enable_legacy_sample_tracking_api: + trans.response.status = 403 + return "The configuration of this Galaxy instance does not allow accessing this API." update_type = None if 'update_type' not in payload: trans.response.status = 400 @@ -91,18 +100,41 @@ class RequestsAPIController(BaseAPIController): return "Malformed request id ( %s ) specified, unable to decode." % str(id) try: request = trans.sa_session.query(trans.app.model.Request).get(request_id) - except: + except Exception: request = None if not request or not (trans.user_is_admin() or request.user.id == trans.user.id): trans.response.status = 400 return "Invalid request id ( %s ) specified." % str(request_id) # check update type if update_type == 'request_state': - return self.__update_request_state(trans, encoded_request_id=id) - - def __update_request_state(self, trans, encoded_request_id): - requests_common_cntrller = trans.webapp.controllers['requests_common'] - status, output = requests_common_cntrller.update_request_state(trans, - cntrller='api', - request_id=encoded_request_id) - return status, output + # Make sure all the samples of the current request have the same state + common_state = request.samples_have_common_state + if not common_state: + # If the current request state is complete and one of its samples moved from + # the final sample state, then move the request state to In-progress + if request.is_complete: + message = "At least 1 sample state moved from the final sample state, so now the request's state is (%s)" % request.states.SUBMITTED + event = trans.model.RequestEvent(request, request.states.SUBMITTED, message) + trans.sa_session.add(event) + trans.sa_session.flush() + else: + final_state = False + request_type_state = request.type.final_sample_state + if common_state.id == request_type_state.id: + # since all the samples are in the final state, change the request state to 'Complete' + comment = "All samples of this sequencing request are in the final sample state (%s). " % request_type_state.name + state = request.states.COMPLETE + final_state = True + else: + comment = "All samples of this sequencing request are in the (%s) sample state. " % common_state.name + state = request.states.SUBMITTED + event = trans.model.RequestEvent(request, state, comment) + trans.sa_session.add(event) + trans.sa_session.flush() + # See if an email notification is configured to be sent when the samples are in this state. + retval = request.send_email_notification(trans, common_state, final_state) + if retval: + message = comment + retval + else: + message = comment + return 200, message diff --git a/lib/galaxy/webapps/galaxy/api/roles.py b/lib/galaxy/webapps/galaxy/api/roles.py index 2cf06a265f3..cbb2a0d1a6e 100644 --- a/lib/galaxy/webapps/galaxy/api/roles.py +++ b/lib/galaxy/webapps/galaxy/api/roles.py @@ -42,7 +42,7 @@ class RoleAPIController(BaseAPIController): return "Malformed role id ( %s ) specified, unable to decode." % str(role_id) try: role = trans.sa_session.query(trans.app.model.Role).get(decoded_role_id) - except: + except Exception: role = None if not role or not (trans.user_is_admin() or trans.app.security_agent.ok_to_display(trans.user, role)): trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/samples.py b/lib/galaxy/webapps/galaxy/api/samples.py index 356b194b9e2..44a2157946e 100644 --- a/lib/galaxy/webapps/galaxy/api/samples.py +++ b/lib/galaxy/webapps/galaxy/api/samples.py @@ -24,6 +24,9 @@ class SamplesAPIController(BaseAPIController): GET /api/requests/{encoded_request_id}/samples Displays a collection (list) of sample of a sequencing request. """ + if not trans.app.config.enable_legacy_sample_tracking_api: + trans.response.status = 403 + return "The configuration of this Galaxy instance does not allow accessing this API." try: request_id = trans.security.decode_id(kwd['request_id']) except TypeError: @@ -31,7 +34,7 @@ class SamplesAPIController(BaseAPIController): return "Malformed request id ( %s ) specified, unable to decode." % str(kwd['request_id']) try: request = trans.sa_session.query(trans.app.model.Request).get(request_id) - except: + except Exception: request = None if not request or not (trans.user_is_admin() or request.user.id == trans.user.id): trans.response.status = 400 @@ -52,6 +55,9 @@ class SamplesAPIController(BaseAPIController): PUT /api/samples/{encoded_sample_id} Updates a sample or objects related ( mapped ) to a sample. """ + if not trans.app.config.enable_legacy_sample_tracking_api: + trans.response.status = 403 + return "The configuration of this Galaxy instance does not allow accessing this API." update_type = None if 'update_type' not in payload: trans.response.status = 400 @@ -69,7 +75,7 @@ class SamplesAPIController(BaseAPIController): return "Malformed sample_id (%s) specified, unable to decode." % str(sample_id) try: sample = trans.sa_session.query(trans.app.model.Sample).get(decoded_sample_id) - except: + except Exception: sample = None if not sample: trans.response.status = 400 @@ -83,7 +89,7 @@ class SamplesAPIController(BaseAPIController): if deferred_plugin: try: trans.app.job_manager.deferred_job_queue.plugins[deferred_plugin].create_job(trans, sample=sample, **payload) - except: + except Exception: log.exception('update() called with a deferred job plugin (%s) but creating the deferred job failed:' % deferred_plugin) status, output = requests_admin_controller.edit_template_info(trans, cntrller='api', diff --git a/lib/galaxy/webapps/galaxy/api/tool_data.py b/lib/galaxy/webapps/galaxy/api/tool_data.py index 0fbf91c5f22..98b109d7bf9 100644 --- a/lib/galaxy/webapps/galaxy/api/tool_data.py +++ b/lib/galaxy/webapps/galaxy/api/tool_data.py @@ -1,11 +1,15 @@ import os -from galaxy import exceptions -from galaxy import web -from galaxy.web import _future_expose_api as expose_api -from galaxy.web import _future_expose_api_raw as expose_api_raw -from galaxy.web.base.controller import BaseAPIController import galaxy.queue_worker +from galaxy import ( + exceptions, + web +) +from galaxy.web import ( + _future_expose_api as expose_api, + _future_expose_api_raw as expose_api_raw +) +from galaxy.web.base.controller import BaseAPIController class ToolData(BaseAPIController): @@ -62,7 +66,7 @@ class ToolData(BaseAPIController): try: data_table = trans.app.tool_data_tables.data_tables.get(decoded_tool_data_id) - except: + except Exception: data_table = None if not data_table: trans.response.status = 400 diff --git a/lib/galaxy/webapps/galaxy/api/users.py b/lib/galaxy/webapps/galaxy/api/users.py index 63c9e3a78a0..4db33275697 100644 --- a/lib/galaxy/webapps/galaxy/api/users.py +++ b/lib/galaxy/webapps/galaxy/api/users.py @@ -179,7 +179,7 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre if not trans.user_is_admin(): assert trans.user == user assert not user.deleted - except: + except Exception: raise exceptions.RequestParameterInvalidException('Invalid user id specified', id=id) return self.user_serializer.serialize_to_view(user, view='detailed') @@ -283,7 +283,7 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre try: with open(path, 'r') as stream: config = yaml.safe_load(stream) - except: + except Exception: log.warning('Config file (%s) could not be found or is malformed.' % path) return {} @@ -889,7 +889,7 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre new_linecount = new_len.get_converted_dataset(trans, 'linecount') build_dict['len'] = new_len.id build_dict['linecount'] = new_linecount.id - except: + except Exception: raise MessageException('Failed to convert dataset.') dbkeys[key] = build_dict user.preferences['dbkeys'] = json.dumps(dbkeys) diff --git a/lib/galaxy/webapps/galaxy/api/workflows.py b/lib/galaxy/webapps/galaxy/api/workflows.py index b1cc2711906..ebf18f32da9 100644 --- a/lib/galaxy/webapps/galaxy/api/workflows.py +++ b/lib/galaxy/webapps/galaxy/api/workflows.py @@ -600,7 +600,7 @@ class WorkflowsAPIController(BaseAPIController, UsesStoredWorkflowMixin, UsesAnn def __api_import_shared_workflow(self, trans, workflow_id, payload, **kwd): try: stored_workflow = self.get_stored_workflow(trans, workflow_id, check_ownership=False) - except: + except Exception: raise exceptions.ObjectNotFound("Malformed workflow id ( %s ) specified." % workflow_id) if stored_workflow.importable is False: raise exceptions.ItemAccessibilityException('The owner of this workflow has disabled imports via this link.') diff --git a/lib/galaxy/webapps/galaxy/buildapp.py b/lib/galaxy/webapps/galaxy/buildapp.py index 00c63e0bf47..ba92d5b35e9 100644 --- a/lib/galaxy/webapps/galaxy/buildapp.py +++ b/lib/galaxy/webapps/galaxy/buildapp.py @@ -53,7 +53,7 @@ def paste_app_factory(global_conf, **kwargs): try: app = galaxy.app.UniverseApplication(global_conf=global_conf, **kwargs) galaxy.app.app = app - except: + except Exception: traceback.print_exc() sys.exit(1) # Call app's shutdown method when the interpeter exits, this cleanly stops @@ -145,13 +145,13 @@ def paste_app_factory(global_conf, **kwargs): # Close any pooled database connections before forking try: galaxy.model.mapping.metadata.bind.dispose() - except: + except Exception: log.exception("Unable to dispose of pooled galaxy model database connections.") try: # This model may not actually be bound. if galaxy.model.tool_shed_install.mapping.metadata.bind: galaxy.model.tool_shed_install.mapping.metadata.bind.dispose() - except: + except Exception: log.exception("Unable to dispose of pooled toolshed install model database connections.") app.application_stack.register_postfork_function(postfork_setup) diff --git a/lib/galaxy/webapps/galaxy/controllers/dataset.py b/lib/galaxy/webapps/galaxy/controllers/dataset.py index c93c37e28a6..cf7ffc324ff 100644 --- a/lib/galaxy/webapps/galaxy/controllers/dataset.py +++ b/lib/galaxy/webapps/galaxy/controllers/dataset.py @@ -2,17 +2,26 @@ import logging import os import urllib -from markupsafe import escape import paste.httpexceptions +from markupsafe import escape from six import string_types, text_type from sqlalchemy import false, true -from galaxy import datatypes, model, util, web -from galaxy import managers +from galaxy import ( + datatypes, + managers, + model, + util, + web +) from galaxy.datatypes.display_applications.util import decode_dataset_user, encode_dataset_user from galaxy.exceptions import RequestParameterInvalidException from galaxy.model.item_attrs import UsesAnnotations, UsesItemRatings -from galaxy.util import inflector, smart_str, sanitize_text +from galaxy.util import ( + inflector, + sanitize_text, + smart_str +) from galaxy.util.sanitize_html import sanitize_html from galaxy.web import form_builder from galaxy.web.base.controller import BaseUIController, ERROR, SUCCESS, url_for, UsesExtendedMetadataMixin @@ -131,7 +140,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE try: job = self._get_job_for_dataset(trans, dataset_id) stdout = job.stdout - except: + except Exception: stdout = "Invalid dataset ID or you are not allowed to access this dataset" return smart_str(stdout) @@ -143,7 +152,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE try: job = self._get_job_for_dataset(trans, dataset_id) stderr = job.stderr - except: + except Exception: stderr = "Invalid dataset ID or you are not allowed to access this dataset" return smart_str(stderr) @@ -154,7 +163,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE try: job = self._get_job_for_dataset(trans, dataset_id) exit_code = job.exit_code - except: + except Exception: exit_code = "Invalid dataset ID or you are not allowed to access this dataset" return exit_code @@ -182,10 +191,10 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE data = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(self.decode_id(hda_id)) if data is None: raise ValueError('Invalid reference dataset id: %s.' % hda_id) - except: + except Exception: try: data = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(int(hda_id)) - except: + except Exception: data = None if not data: raise paste.httpexceptions.HTTPRequestRangeNotSatisfiable("Invalid reference dataset id: %s." % str(hda_id)) @@ -722,7 +731,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE return trans.show_error_message('Invalid parameters specified for "display at" link, please contact a Galaxy administrator') try: redirect_url = kwd['redirect_url'] % urllib.quote_plus(kwd['display_url']) - except: + except Exception: redirect_url = kwd['redirect_url'] # not all will need custom text if trans.app.security_agent.dataset_is_public(data.dataset): return trans.response.send_redirect(redirect_url) # anon access already permitted by rbac @@ -901,7 +910,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE def _unhide(self, trans, dataset_id): try: id = self.decode_id(dataset_id) - except: + except Exception: return False history = trans.get_history() hda = trans.sa_session.query(self.app.model.HistoryDatasetAssociation).get(id) @@ -959,7 +968,7 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE hda.dataset.full_delete() trans.log_event("Dataset id %s has been purged upon the the purge of HDA id %s" % (hda.dataset.id, hda.id)) trans.sa_session.add(hda.dataset) - except: + except Exception: log.exception('Unable to purge dataset (%s) on purge of HDA (%s):' % (hda.dataset.id, hda.id)) trans.sa_session.flush() except Exception as exc: @@ -1061,14 +1070,14 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE # Load parameter objects, if a parameter type has changed, it's possible for the value to no longer be valid try: params_objects = job.get_param_values(trans.app, ignore_errors=False) - except: + except Exception: params_objects = job.get_param_values(trans.app, ignore_errors=True) # use different param_objects in the following line, since we want to display original values as much as possible upgrade_messages = tool.check_and_update_param_values(job.get_param_values(trans.app, ignore_errors=True), trans, update_values=False) has_parameter_errors = True - except: + except Exception: pass if job is None: return trans.show_error_message("Job information is not available for this dataset.") diff --git a/lib/galaxy/webapps/galaxy/controllers/external_service.py b/lib/galaxy/webapps/galaxy/controllers/external_service.py deleted file mode 100644 index bb78257241d..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/external_service.py +++ /dev/null @@ -1,369 +0,0 @@ -from __future__ import absolute_import - -import logging - -from galaxy import model, util -from markupsafe import escape -from galaxy.web.base.controller import BaseUIController, web, UsesFormDefinitionsMixin -from galaxy.web.form_builder import TextField, SelectField -from galaxy.web.framework.helpers import time_ago, iff, grids -from .requests_common import invalid_id_redirect - -log = logging.getLogger(__name__) - - -class ExternalServiceGrid(grids.Grid): - # Custom column types - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, external_service): - return escape(external_service.name) - - class ExternalServiceTypeColumn(grids.TextColumn): - def get_value(self, trans, grid, external_service): - try: - return trans.app.external_service_types.all_external_service_types[external_service.external_service_type_id].name - except KeyError: - return 'Error in loading external_service type: %s' % external_service.external_service_type_id - - # Grid definition - title = "External Services" - template = "admin/external_service/grid.mako" - model_class = model.ExternalService - default_sort_key = "-create_time" - num_rows_per_page = 50 - preserve_state = True - use_paging = True - default_filter = dict(deleted="False") - columns = [ - NameColumn("Name", - key="name", - link=(lambda item: iff(item.deleted, None, dict(operation="view", id=item.id))), - attach_popup=True, - filterable="advanced"), - grids.TextColumn("Description", - key='description', - filterable="advanced"), - ExternalServiceTypeColumn("External Service Type"), - grids.GridColumn("Last Updated", - key="update_time", - format=time_ago), - grids.DeletedColumn("Deleted", - key="deleted", - visible=False, - filterable="advanced") - ] - columns.append(grids.MulticolFilterColumn("Search", - cols_to_filter=[columns[0], columns[1]], - key="free-text-search", - visible=False, - filterable="standard")) - operations = [ - grids.GridOperation("Edit", allow_multiple=False, condition=(lambda item: not item.deleted)), - grids.GridOperation("Delete", allow_multiple=True, condition=(lambda item: not item.deleted)), - grids.GridOperation("Undelete", condition=(lambda item: item.deleted)), - ] - global_actions = [ - grids.GridAction("Reload external service types", dict(controller='external_service', action='reload_external_service_types')), - grids.GridAction("Create new external service", dict(controller='external_service', action='create_external_service')) - ] - - -class ExternalService(BaseUIController, UsesFormDefinitionsMixin): - external_service_grid = ExternalServiceGrid() - - @web.expose - @web.require_admin - def browse_external_services(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - if operation == "view": - return self.view_external_service(trans, **kwd) - elif operation == "edit": - return self.edit_external_service(trans, **kwd) - elif operation == "delete": - return self.delete_external_service(trans, **kwd) - elif operation == "undelete": - return self.undelete_external_service(trans, **kwd) - # Render the grid view - return self.external_service_grid(trans, **kwd) - - @web.expose - @web.require_admin - def create_external_service(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - external_service_type_id = params.get('external_service_type_id', 'none') - widgets = self.__build_external_service_widgets(trans, external_service=None, **kwd) - external_service_type = None - error = False - if not trans.app.external_service_types.visible_external_service_types: - error = True - message = 'There are no visible external_service types in the external_service types config file' - elif params.get('create_external_service_button', False): - if external_service_type_id == 'none': - error = True - message = 'Provide an external_service_type_id to create a new external service.' - else: - self.__save_external_service(trans, **kwd) - message = 'The external_service has been created.' - return trans.response.send_redirect(web.url_for(controller='external_service', - action='browse_external_services', - message=message, - status=status)) - elif external_service_type_id != 'none': - # Form submission via refresh_on_change - trans.app.external_service_types.reload(external_service_type_id) - external_service_type = self.get_external_service_type(trans, external_service_type_id) - widgets.extend(external_service_type.form_definition.get_widgets(trans.user, **kwd)) - if error: - return trans.response.send_redirect(web.url_for(controller='external_service', - action='browse_external_services', - message=message, - status='error')) - return trans.fill_template('/admin/external_service/create_external_service.mako', - widgets=widgets, - message=message, - status=status, - external_service_type=external_service_type) - - @web.expose - @web.require_admin - def view_external_service(self, trans, **kwd): - external_service_id = kwd.get('id', None) - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - external_service_type = self.get_external_service_type(trans, external_service.external_service_type_id) - return trans.fill_template('/admin/external_service/view_external_service.mako', - external_service=external_service, - external_service_type=external_service_type) - - @web.expose - @web.require_admin - def edit_external_service(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - external_service_id = params.get('id', None) - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - if params.get('edit_external_service_button', False): - external_service = self.__save_external_service(trans, **kwd) - trans.sa_session.refresh(external_service) - message = 'Changes made to external service (%s) have been saved' % external_service.name - widgets = self.__build_external_service_widgets(trans, external_service, **kwd) - widgets.extend(external_service.form_definition.get_widgets(trans.user, external_service.form_values.content, **kwd)) - external_service_type = self.get_external_service_type(trans, external_service.external_service_type_id) - return trans.fill_template('/admin/external_service/edit_external_service.mako', - external_service=external_service, - widgets=widgets, - message=message, - status=status, - external_service_type=external_service_type) - - def __save_external_service(self, trans, **kwd): - # Here we save a newly created external_service or save changed - # attributes of an existing external_service. - params = util.Params(kwd) - external_service_id = params.get('id', None) - name = util.restore_text(params.get('external_service_name', '')) - description = util.restore_text(params.get('external_service_description', '')) - version = util.restore_text(params.get('external_service_version', '')) - external_service_type_id = params.get('external_service_type_id', '') - if external_service_id: - # We're saving changed attributes of an existing external_service. - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - external_service.name = name - external_service.description = description - external_service.version = version - external_service.form_values.content = self.get_form_values(trans, trans.user, external_service.form_definition, **kwd) - trans.sa_session.add(external_service) - trans.sa_session.add(external_service.form_values) - trans.sa_session.flush() - else: - # We're saving a newly created external_service - external_service_type = self.get_external_service_type(trans, external_service_type_id) - external_service = trans.model.ExternalService(name, description, external_service_type_id, version) - external_service.form_definition = external_service_type.form_definition - # Get the form values from kwd, some of which may be different than the defaults in the external service - # type config because the user could have overwritten them. - values = self.get_form_values(trans, trans.user, external_service.form_definition, **kwd) - external_service.form_values = trans.model.FormValues(external_service.form_definition, values) - trans.sa_session.add(external_service) - trans.sa_session.add(external_service.form_definition) - trans.sa_session.add(external_service.form_values) - trans.sa_session.flush() - return external_service - - @web.expose - @web.require_admin - def edit_external_service_form_definition(self, trans, **kwd): - util.Params(kwd) - external_service_id = kwd.get('id', None) - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - vars = dict(id=trans.security.encode_id(external_service.form_definition.form_definition_current_id), - response_redirect=web.url_for(controller='external_service', - action='update_external_service_form_definition', - **kwd)) - return trans.response.send_redirect(web.url_for(controller='forms', action='edit_form_definition', **vars)) - - @web.expose - @web.require_admin - def update_external_service_form_definition(self, trans, **kwd): - util.Params(kwd) - external_service_id = kwd.get('id', None) - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - external_service.form_definition = external_service.form_definition.current.latest_form - trans.sa_session.add(external_service) - trans.sa_session.flush() - message = "The form definition for the '%s' external service has been updated with your changes." % external_service.name - return trans.response.send_redirect(web.url_for(controller='external_service', - action='edit_external_service', - message=message, - status='done', - **kwd)) - - @web.expose - @web.require_admin - def delete_external_service(self, trans, **kwd): - external_service_id = kwd.get('id', '') - external_service_id_list = util.listify(external_service_id) - for external_service_id in external_service_id_list: - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - external_service.deleted = True - trans.sa_session.add(external_service) - trans.sa_session.flush() - message = '%i external services has been deleted' % len(external_service_id_list) - return trans.response.send_redirect(web.url_for(controller='external_service', - action='browse_external_services', - message=message, - status='done')) - - @web.expose - @web.require_admin - def undelete_external_service(self, trans, **kwd): - external_service_id = kwd.get('id', '') - external_service_id_list = util.listify(external_service_id) - for external_service_id in external_service_id_list: - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - except: - return invalid_id_redirect(trans, 'external_service', external_service_id, 'external_service', action='browse_external_services') - external_service.deleted = False - trans.sa_session.add(external_service) - trans.sa_session.flush() - status = 'done' - message = '%i external services have been undeleted' % len(external_service_id_list) - return trans.response.send_redirect(web.url_for(controller='external_service', - action='browse_external_services', - message=message, - status=status)) - - @web.expose - @web.require_admin - def reload_external_service_types(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - external_service_type_id = params.get('external_service_type_id', 'none') - if params.get('reload_external_service_type_button', False): - new_external_service_type = trans.app.external_service_types.reload(external_service_type_id) - status = 'done' - message = 'Reloaded external service type: %s' % new_external_service_type.name - external_service_type_select_field = self.__build_external_service_type_select_field(trans, - external_service_type_id, - refresh_on_change=False, - visible_external_service_types_only=False) - if not trans.app.external_service_types.visible_external_service_types: - message = 'There are no visible external service types in the external service types config file.' - status = 'error' - return trans.response.send_redirect(web.url_for(controller='external_service', - action='browse_external_services', - message=message, - status=status)) - return trans.fill_template('/admin/external_service/reload_external_service_types.mako', - external_service_type_select_field=external_service_type_select_field, - message=message, - status=status) - - def get_external_service_type(self, trans, external_service_type_id, action='browse_external_services'): - try: - return trans.app.external_service_types.all_external_service_types[external_service_type_id] - except KeyError: - message = 'Error in loading external service type: %s' % external_service_type_id - return trans.response.send_redirect(web.url_for(controller='external_service', - action=action, - message=message, - status='error')) - - # ===== Methods for building SelectFields used on various admin_requests forms - def __build_external_service_widgets(self, trans, external_service=None, **kwd): - params = util.Params(kwd) - if external_service: - name = external_service.name - description = external_service.description - version = external_service.version - seq_type = external_service.external_service_type_id - else: - name = util.restore_text(params.get('external_service_name', '')) - description = util.restore_text(params.get('external_service_description', '')) - version = util.restore_text(params.get('external_service_version', '')) - selected_seq_type = params.get('external_service_type_id', '') - if selected_seq_type in trans.app.external_service_types.all_external_service_types: - seq_type = trans.app.external_service_types.all_external_service_types[selected_seq_type].id - else: - seq_type = 'none' - widgets = [dict(label='Name', - widget=TextField('external_service_name', 40, name), - helptext=''), - dict(label='Description', - widget=TextField('external_service_description', 40, description), - helptext=''), - dict(label='Version', - widget=TextField('external_service_version', 40, version), - helptext='')] - # Do not show the external_service_type selectfield when editing a external_service - if not external_service: - widgets.append(dict(label='External service type', - widget=self.__build_external_service_type_select_field(trans, seq_type, visible_external_service_types_only=True), - helptext='')) - return widgets - - def __build_external_service_type_select_field(self, trans, selected_value, refresh_on_change=True, visible_external_service_types_only=False): - external_service_types = trans.app.external_service_types.all_external_service_types - if visible_external_service_types_only: - objs_list = [external_service_types[seq_type_id] for seq_type_id in trans.app.external_service_types.visible_external_service_types] - else: - objs_list = external_service_types.values() - refresh_on_change_values = ['none'] - refresh_on_change_values.extend([trans.security.encode_id(obj.id) for obj in objs_list]) - select_external_service_type = SelectField('external_service_type_id', - refresh_on_change=refresh_on_change, - refresh_on_change_values=refresh_on_change_values) - if selected_value == 'none': - select_external_service_type.add_option('Select one', 'none', selected=True) - else: - select_external_service_type.add_option('Select one', 'none') - for seq_type in objs_list: - if seq_type.version: - option_name = " ".join([seq_type.name, "version", seq_type.version]) - else: - option_name = seq_type.name - if selected_value == seq_type.id: - select_external_service_type.add_option(option_name, seq_type.id, selected=True) - else: - select_external_service_type.add_option(option_name, seq_type.id) - return select_external_service_type diff --git a/lib/galaxy/webapps/galaxy/controllers/external_services.py b/lib/galaxy/webapps/galaxy/controllers/external_services.py deleted file mode 100644 index af51eb5ba23..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/external_services.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from galaxy import web -from galaxy.model import ExternalService, Sample -from galaxy.web.base.controller import BaseUIController - -log = logging.getLogger(__name__) - -class_name_to_class = {} - -for model_class in [Sample]: - class_name_to_class[model_class.__name__] = model_class - - -class ExternalServiceController(BaseUIController): - @web.expose - @web.require_admin - def access_action(self, trans, external_service_action, item, item_type, **kwd): - if item_type in class_name_to_class: - item_type = class_name_to_class.get(item_type) - item = item_type.get(item) - external_service_action_parsed = external_service_action.split('|') - populated_external_service = ExternalService.get(external_service_action_parsed.pop(0)).populate_actions(trans, item) - populated_action = populated_external_service.perform_action_by_name(external_service_action_parsed) - results = populated_action.handle_results(trans) - return results - else: - raise Exception('unknown item class type') diff --git a/lib/galaxy/webapps/galaxy/controllers/library.py b/lib/galaxy/webapps/galaxy/controllers/library.py index 7dbac8ca561..dacb9e8c6bf 100644 --- a/lib/galaxy/webapps/galaxy/controllers/library.py +++ b/lib/galaxy/webapps/galaxy/controllers/library.py @@ -91,6 +91,7 @@ class Library(BaseUIController): 'app': app}) @web.expose + @web.require_admin def index(self, trans, **kwd): message = escape(kwd.get('message', '')) status = escape(kwd.get('status', 'done')) @@ -101,6 +102,7 @@ class Library(BaseUIController): status=status) @web.expose + @web.require_admin def browse_libraries(self, trans, **kwd): if 'operation' in kwd: operation = kwd['operation'].lower() diff --git a/lib/galaxy/webapps/galaxy/controllers/library_common.py b/lib/galaxy/webapps/galaxy/controllers/library_common.py index a32c264b98a..c977f319600 100644 --- a/lib/galaxy/webapps/galaxy/controllers/library_common.py +++ b/lib/galaxy/webapps/galaxy/controllers/library_common.py @@ -26,6 +26,11 @@ from galaxy.util import ( inflector, unicodify ) +from galaxy.util.path import ( + safe_contains, + safe_relpath, + unsafe_walk +) from galaxy.util.streamball import StreamBall from galaxy.web.base.controller import ( BaseUIController, @@ -79,12 +84,13 @@ except ImportError: try: os.rmdir(tmpd) -except: +except Exception: pass class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMetadataMixin, UsesLibraryMixinItems): @web.json + @web.require_admin def library_item_updates(self, trans, ids=None, states=None): # Avoid caching trans.response.headers['Pragma'] = 'no-cache' @@ -108,6 +114,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta return rval @web.expose + @web.require_admin def browse_library(self, trans, cntrller='library', **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -124,7 +131,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except: + except Exception: # Protect against attempts to phish for valid keys that return libraries library = None # Most security for browsing libraries is handled in the template, but do a basic check here. @@ -180,6 +187,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=status)) @web.expose + @web.require_admin def library_info(self, trans, cntrller, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -190,7 +198,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta library_id = kwd.get('id', None) try: library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except: + except Exception: library = None self._check_access(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) if kwd.get('library_info_button', False): @@ -239,6 +247,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def library_permissions(self, trans, cntrller, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -249,7 +258,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta library_id = kwd.get('id', None) try: library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except: + except Exception: library = None self._check_access(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) self._check_manage(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) @@ -295,7 +304,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: parent_folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(parent_id)) - except: + except Exception: parent_folder = None # Check the library which actually contains the user-supplied parent folder, not the user-supplied # library, which could be anything. @@ -361,6 +370,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def folder_info(self, trans, cntrller, id, library_id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -370,7 +380,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(id)) - except: + except Exception: folder = None self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) if kwd.get('rename_folder_button', False): @@ -417,6 +427,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def folder_permissions(self, trans, cntrller, id, library_id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -426,7 +437,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(id)) - except: + except Exception: folder = None self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) self._check_manage(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) @@ -467,6 +478,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def ldda_edit_info(self, trans, cntrller, library_id, folder_id, id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -476,7 +488,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except: + except Exception: ldda = None self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) self._check_modify(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) @@ -618,6 +630,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def ldda_info(self, trans, cntrller, library_id, folder_id, id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -667,6 +680,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def ldda_permissions(self, trans, cntrller, library_id, folder_id, id, **kwd): message = str(escape(kwd.get('message', ''))) status = kwd.get('status', 'done') @@ -680,7 +694,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta for id in ids: try: ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except: + except Exception: ldda = None if ldda: library = ldda.library_dataset.folder.parent_library @@ -864,6 +878,9 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta elif upload_option == 'upload_paths' and not is_admin: error = True message = 'Uploading files via filesystem paths can only be performed by administrators' + elif upload_option not in ('upload_file', 'upload_directory', 'upload_paths'): + error = True + message = 'Invalid upload_option' elif roles: # Check to see if the user selected roles to associate with the DATASET_ACCESS permission # on the dataset that would cause accessibility issues. @@ -1079,17 +1096,26 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta if upload_option == 'upload_directory': if server_dir in [None, 'None', '']: response_code = 400 - if cntrller == 'library_admin' or (cntrller == 'api' and trans.user_is_admin): + if trans.user_is_admin() and cntrller in ('library_admin', 'api'): import_dir = trans.app.config.library_import_dir import_dir_desc = 'library_import_dir' - full_dir = os.path.join(import_dir, server_dir) else: import_dir = trans.app.config.user_library_import_dir + if server_dir != trans.user.email: + import_dir = os.path.join(import_dir, trans.user.email) import_dir_desc = 'user_library_import_dir' - if server_dir == trans.user.email: - full_dir = os.path.join(import_dir, server_dir) - else: - full_dir = os.path.join(import_dir, trans.user.email, server_dir) + full_dir = os.path.join(import_dir, server_dir) + unsafe = None + if safe_relpath(server_dir): + if import_dir_desc == 'user_library_import_dir' and safe_contains(import_dir, full_dir, whitelist=trans.app.config.user_library_import_symlink_whitelist): + for unsafe in unsafe_walk(full_dir, whitelist=[import_dir] + trans.app.config.user_library_import_symlink_whitelist): + log.error('User attempted to import a path that resolves to a path outside of their import dir: %s -> %s', unsafe, os.path.realpath(unsafe)) + else: + log.error('User attempted to import a directory path that resolves to a path outside of their import dir: %s -> %s', server_dir, os.path.realpath(full_dir)) + unsafe = True + if unsafe: + response_code = 403 + message = 'Invalid server_dir' if import_dir: message = 'Select a directory' else: @@ -1104,7 +1130,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta # FIXME: instead of passing params here ( which have been processed by util.Params(), the original kwd # should be passed so that complex objects that may have been included in the initial request remain. library_bunch = upload_common.handle_library_params(trans, kwd, folder_id, replace_dataset) - except: + except Exception: response_code = 500 message = "Unable to parse upload parameters, please report this error." # Proceed with (mostly) regular upload processing if we're still errorless @@ -1283,6 +1309,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta return None @web.expose + @web.require_admin def add_history_datasets_to_library(self, trans, cntrller, library_id, folder_id, hda_ids='', **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -1314,7 +1341,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta if replace_id not in [None, 'None']: try: replace_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(replace_id)) - except: + except Exception: replace_dataset = None self._check_access(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) self._check_modify(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) @@ -1350,7 +1377,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta for hda_id in hda_ids: try: hda = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(trans.security.decode_id(hda_id)) - except: + except Exception: hda = None self._check_access(trans, cntrller, is_admin, hda, current_user_roles, use_panels, library_id, show_deleted) if roles: @@ -1516,7 +1543,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta if not os.path.isdir(path): try: os.makedirs(path) - except: + except Exception: continue elif option_value == 'upload_paths': if not is_admin or not trans.app.config.allow_library_path_paste: @@ -1525,6 +1552,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta return upload_option_select_list @web.expose + @web.require_admin def download_dataset_from_folder(self, trans, cntrller, id, library_id=None, **kwd): """Catches the dataset id and displays file contents as directed""" show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) @@ -1533,7 +1561,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except: + except Exception: ldda = None self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) composite_extensions = trans.app.datatypes_registry.get_composite_extensions() @@ -1552,7 +1580,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta trans.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % fname try: return open(ldda.file_name) - except: + except Exception: message = 'This dataset contains no content' return trans.response.send_redirect(web.url_for(controller='library_common', action='browse_library', @@ -1564,6 +1592,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status='error')) @web.expose + @web.require_admin def library_dataset_info(self, trans, cntrller, id, library_id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -1573,7 +1602,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: library_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(id)) - except: + except Exception: library_dataset = None self._check_access(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) if kwd.get('edit_attributes_button', False): @@ -1612,6 +1641,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def library_dataset_permissions(self, trans, cntrller, id, library_id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -1621,7 +1651,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta current_user_roles = trans.get_current_user_roles() try: library_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(id)) - except: + except Exception: library_dataset = None self._check_access(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) self._check_manage(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) @@ -1660,6 +1690,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def make_library_item_public(self, trans, cntrller, library_id, item_type, id, **kwd): message = escape(kwd.get('message', '')) status = kwd.get('status', 'done') @@ -1702,6 +1733,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=status)) @web.expose + @web.require_admin def act_on_multiple_datasets(self, trans, cntrller, library_id=None, ldda_ids='', **kwd): # This method is called from 1 of 3 places: # - this controller's download_dataset_from_folder() method @@ -1785,7 +1817,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta ldda = self.get_library_dataset_dataset_association(trans, ldda_id) assert not ldda.dataset.purged lddas.append(ldda) - except: + except Exception: ldda = None message += "Invalid library dataset id (%s) specified. " % str(ldda_id) if not error: @@ -1877,7 +1909,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta log.exception("Unable to create archive for download") message = "Unable to create archive for download, please report this error" status = 'error' - except: + except Exception: error = True log.exception("Unexpected error in create archive for download") message = "Unable to create archive for download, please report - %s" % sys.exc_info()[0] @@ -1994,6 +2026,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def import_datasets_to_histories(self, trans, cntrller, library_id='', folder_id='', ldda_ids='', target_history_id='', target_history_ids='', new_history_name='', **kwd): # This method is called from one of the following places: # - a menu option for a library dataset ( ldda_ids is a single ldda id ) @@ -2124,6 +2157,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def manage_template_inheritance(self, trans, cntrller, item_type, library_id, folder_id=None, ldda_id=None, **kwd): show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) use_panels = util.string_as_bool(kwd.get('use_panels', False)) @@ -2169,6 +2203,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status='done')) @web.expose + @web.require_admin def move_library_item(self, trans, cntrller, item_type, item_id, source_library_id='', make_target_current=True, **kwd): # This method is called from one of the following places: # - a menu option for a library dataset ( item_type is 'ldda' and item_id is a single ldda id ) @@ -2386,6 +2421,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=escape(status)) @web.expose + @web.require_admin def delete_library_item(self, trans, cntrller, library_id, item_id, item_type, **kwd): # This action will handle deleting all types of library items. State is saved for libraries and # folders ( i.e., if undeleted, the state of contents of the library or folder will remain, so previously @@ -2418,7 +2454,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta for library_item_id in library_item_ids: try: library_item = trans.sa_session.query(item_types[item_type]).get(trans.security.decode_id(library_item_id)) - except: + except Exception: library_item = None if not library_item or not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, library_item, trans.user)): invalid_items += 1 @@ -2454,6 +2490,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta status=status)) @web.expose + @web.require_admin def undelete_library_item(self, trans, cntrller, library_id, item_id, item_type, **kwd): # This action will handle undeleting all types of library items status = kwd.get('status', 'done') @@ -2482,7 +2519,7 @@ class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMeta for library_item_id in library_item_ids: try: library_item = trans.sa_session.query(item_types[item_type]).get(trans.security.decode_id(library_item_id)) - except: + except Exception: library_item = None if not library_item or not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, library_item, trans.user)): invalid_items += 1 @@ -2735,7 +2772,7 @@ def get_comptypes(trans): # exception every time after the first time) try: comptypes_t.remove(comptype) - except: + except ValueError: pass return comptypes_t diff --git a/lib/galaxy/webapps/galaxy/controllers/request_type.py b/lib/galaxy/webapps/galaxy/controllers/request_type.py deleted file mode 100644 index 2534da88976..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/request_type.py +++ /dev/null @@ -1,477 +0,0 @@ -from __future__ import absolute_import - -import logging - -from sqlalchemy import false -from markupsafe import escape - -from galaxy import model, util -from galaxy.web.base.controller import BaseUIController, UsesFormDefinitionsMixin, web -from galaxy.web.form_builder import build_select_field, TextField -from galaxy.web.framework.helpers import iff, grids -from .requests_common import invalid_id_redirect - -log = logging.getLogger(__name__) - - -class RequestTypeGrid(grids.Grid): - # Custom column types - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, request_type): - return escape(request_type.name) - - class DescriptionColumn(grids.TextColumn): - def get_value(self, trans, grid, request_type): - return escape(request_type.desc) - - class RequestFormColumn(grids.TextColumn): - def get_value(self, trans, grid, request_type): - return escape(request_type.request_form.name) - - class SampleFormColumn(grids.TextColumn): - def get_value(self, trans, grid, request_type): - return escape(request_type.sample_form.name) - - class ExternalServiceColumn(grids.IntegerColumn): - def get_value(self, trans, grid, request_type): - if request_type.external_services: - return len(request_type.external_services) - return 'No external service assigned' - # Grid definition - title = "Request Types" - template = "admin/request_type/grid.mako" - model_class = model.RequestType - default_sort_key = "-create_time" - num_rows_per_page = 50 - preserve_state = True - use_paging = True - default_filter = dict(deleted="False") - columns = [ - NameColumn("Name", - key="name", - link=(lambda item: iff(item.deleted, None, dict(operation="view_request_type", id=item.id))), - attach_popup=True, - filterable="advanced"), - DescriptionColumn("Description", - key='desc', - filterable="advanced"), - RequestFormColumn("Request Form", - link=(lambda item: iff(item.deleted, None, dict(operation="view_form_definition", id=item.request_form.id)))), - SampleFormColumn("Sample Form", - link=(lambda item: iff(item.deleted, None, dict(operation="view_form_definition", id=item.sample_form.id)))), - ExternalServiceColumn("External Services"), - grids.DeletedColumn("Deleted", - key="deleted", - visible=False, - filterable="advanced") - ] - columns.append(grids.MulticolFilterColumn("Search", - cols_to_filter=[columns[0], columns[1]], - key="free-text-search", - visible=False, - filterable="standard")) - operations = [ - grids.GridOperation("Edit request type", allow_multiple=False, condition=(lambda item: not item.deleted)), - grids.GridOperation("Edit permissions", allow_multiple=False, condition=(lambda item: not item.deleted)), - grids.GridOperation("Use run details template", allow_multiple=False, condition=(lambda item: not item.deleted and not item.run_details)), - grids.GridOperation("Delete", allow_multiple=True, condition=(lambda item: not item.deleted)), - grids.GridOperation("Undelete", condition=(lambda item: item.deleted)), - ] - global_actions = [ - grids.GridAction("Create new request type", dict(controller='request_type', action='create_request_type')) - ] - - -class RequestType(BaseUIController, UsesFormDefinitionsMixin): - request_type_grid = RequestTypeGrid() - - @web.expose - @web.require_admin - def browse_request_types(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - obj_id = kwd.get('id', None) - if operation == "view_form_definition": - return self.view_form_definition(trans, **kwd) - elif operation == "view_request_type": - return self.view_request_type(trans, **kwd) - elif operation == "use run details template": - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='add_template', - cntrller='requests_admin', - item_type='request_type', - form_type=trans.model.FormDefinition.types.RUN_DETAILS_TEMPLATE, - request_type_id=obj_id)) - elif operation == "edit request type": - return self.view_editable_request_type(trans, **kwd) - elif operation == "delete": - return self.delete_request_type(trans, **kwd) - elif operation == "undelete": - return self.undelete_request_type(trans, **kwd) - elif operation == "edit permissions": - return self.request_type_permissions(trans, **kwd) - elif operation == "view_external_service": - return trans.response.send_redirect(web.url_for(controller='external_service', - action='view_external_service', - **kwd)) - # Render the grid view - return self.request_type_grid(trans, **kwd) - - @web.expose - @web.require_admin - def create_request_type(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - rt_info_widgets, rt_states_widgets = self.__get_populated_request_type_widgets(trans, **kwd) - external_service_select_fields_list = [] - # get all the external services selected till now - external_services_list = self.__get_external_services(trans, **kwd) - for index, external_service in enumerate(external_services_list): - external_service_select_field = self.__build_external_service_select_field(trans, - 'external_service_id_%i' % index, - external_service) - external_service_select_fields_list.append(external_service_select_field) - if params.get('add_state_button', False): - # Append a new tuple to the set of states which will result in - # empty state name and description TextFields being displayed on - # the form. - rt_states_widgets.append(("", "")) - elif params.get('remove_state_button', False): - index = int(params.get('remove_state_button', '').split(" ")[2]) - del rt_states_widgets[index - 1] - elif params.get('add_external_service_button', False): - # create a new one - external_service_select_field = self.__build_external_service_select_field(trans, - 'external_service_id_%i' % len(external_services_list)) - external_service_select_fields_list.append(external_service_select_field) - elif params.get('create_request_type_button', False): - self.__save_request_type(trans, action='create_request_type', **kwd) - message = 'The request type has been created.' - return trans.response.send_redirect(web.url_for(controller='request_type', - action='browse_request_types', - message=message, - status=status)) - # A request_type requires at least one possible sample state so that - # it can be used to create a sequencing request - if not len(rt_states_widgets): - rt_states_widgets.append(("New", "First sample state")) - return trans.fill_template('/admin/request_type/create_request_type.mako', - rt_info_widgets=rt_info_widgets, - rt_states_widgets=rt_states_widgets, - external_service_select_fields_list=external_service_select_fields_list, - message=message, - status=status) - - def __get_external_services(self, trans, request_type=None, **kwd): - params = util.Params(kwd) - external_services_list = [] - i = 0 - while True: - if 'external_service_id_%i' % i in kwd: - id = params.get('external_service_id_%i' % i, '') - try: - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(id)) - except: - return invalid_id_redirect(trans, 'request_type', id, 'external service', action='browse_request_types') - external_services_list.append(external_service) - i += 1 - else: - break - return external_services_list - - @web.expose - @web.require_admin - def view_editable_request_type(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_type_id = params.get('id', None) - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - # See if we have any associated templates - widgets = request_type.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - # get all the external services selected till now - external_service_select_fields_list = [] - for index, external_service in enumerate(request_type.external_services): - external_service_select_field = self.__build_external_service_select_field(trans, - 'external_service_id_%i' % index, - external_service) - external_service_select_fields_list.append(external_service_select_field) - return trans.fill_template('/admin/request_type/edit_request_type.mako', - request_type=request_type, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - external_service_select_fields_list=external_service_select_fields_list, - message=message, - status=status) - - @web.expose - @web.require_admin - def edit_request_type(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_type_id = params.get('id', None) - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - # See if we have any associated templates - widgets = request_type.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - # get all the external services selected till now - external_service_select_fields_list = [] - external_services_list = self.__get_external_services(trans, request_type, **kwd) - if params.get('edit_request_type_button', False): - request_type = self.__save_request_type(trans, action='edit_request_type', **kwd) - message = 'Changes made to request type (%s) have been saved' % request_type.name - elif params.get('add_external_service_button', False): - external_services_list.append(None) - elif params.get('remove_external_service_button', False): - index = int(kwd['remove_external_service_button'].split(' ')[3]) - 1 - del external_services_list[index] - for index, external_service in enumerate(external_services_list): - external_service_select_field = self.__build_external_service_select_field(trans, - 'external_service_id_%i' % index, - external_service) - external_service_select_fields_list.append(external_service_select_field) - return trans.fill_template('/admin/request_type/edit_request_type.mako', - request_type=request_type, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - external_service_select_fields_list=external_service_select_fields_list, - message=message, - status=status) - - def __save_request_type(self, trans, action, **kwd): - # Here we save a newly created request_type or save changed - # attributes of an existing request_type. - params = util.Params(kwd) - request_type_id = params.get('id', None) - name = util.restore_text(params.get('name', '')) - desc = util.restore_text(params.get('desc', '')) - request_form_id = params.get('request_form_id', 'none') - sample_form_id = params.get('sample_form_id', 'none') - # validate - if not name or request_form_id == 'none' or sample_form_id == 'none': - message = 'Enter the name, request form, sample form and at least one sample state associated with this request type.' - return trans.response.send_redirect(web.url_for(controller='request_type', - action=action, - message=message, - status='error')) - try: - request_form = trans.sa_session.query(trans.model.FormDefinition).get(trans.security.decode_id(request_form_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'form definition', action='browse_request_types') - - try: - sample_form = trans.sa_session.query(trans.model.FormDefinition).get(trans.security.decode_id(sample_form_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'form definition', action='browse_request_types') - if request_type_id: - # We're saving changed attributes of an existing request_type. - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - request_type.name = name - request_type.desc = desc - request_type.request_form = request_form - request_type.sample_form = sample_form - for sample_state in request_type.states: - sample_state_id = trans.security.encode_id(sample_state.id) - name = util.restore_text(params.get('state_name_%s' % sample_state_id, '')) - desc = util.restore_text(params.get('state_desc_%s' % sample_state_id, '')) - sample_state.name = name - sample_state.desc = desc - trans.sa_session.add(sample_state) - trans.sa_session.flush() - trans.sa_session.add(request_type) - trans.sa_session.flush() - else: - # We're saving a newly created request_type - request_type = trans.model.RequestType(name=name, - desc=desc, - request_form=request_form, - sample_form=sample_form) - trans.sa_session.add(request_type) - trans.sa_session.flush() - i = 0 - while True: - if 'state_name_%i' % i in kwd: - name = util.restore_text(params.get('state_name_%i' % i, '')) - desc = util.restore_text(params.get('state_desc_%i' % i, '')) - sample_state = trans.model.SampleState(name, desc, request_type) - trans.sa_session.add(sample_state) - trans.sa_session.flush() - i += 1 - else: - break - # delete existing associations - request_type.delete_external_service_associations(trans) - # save the external services associated with this request_type - external_services_list = self.__get_external_services(trans, **kwd) - for external_service in external_services_list: - request_type.add_external_service_association(trans, external_service) - return request_type - - def __get_populated_request_type_widgets(self, trans, **kwd): - request_form_definitions = self.get_all_forms(trans, - filter=dict(deleted=False), - form_type=trans.model.FormDefinition.types.REQUEST) - sample_form_definitions = self.get_all_forms(trans, - filter=dict(deleted=False), - form_type=trans.model.FormDefinition.types.SAMPLE) - if not request_form_definitions or not sample_form_definitions: - return [], [] - params = util.Params(kwd) - request_form_id = params.get('request_form_id', 'none') - sample_form_id = params.get('sample_form_id', 'none') - request_form_id_select_field = build_select_field(trans, - objs=request_form_definitions, - label_attr='name', - select_field_name='request_form_id', - selected_value=request_form_id, - refresh_on_change=False) - sample_form_id_select_field = build_select_field(trans, - objs=sample_form_definitions, - label_attr='name', - select_field_name='sample_form_id', - selected_value=sample_form_id, - refresh_on_change=False) - rt_info_widgets = [dict(label='Name', - widget=TextField('name', 40, util.restore_text(params.get('name', '')))), - dict(label='Description', - widget=TextField('desc', 40, util.restore_text(params.get('desc', '')))), - dict(label='Request form', - widget=request_form_id_select_field), - dict(label='Sample form', - widget=sample_form_id_select_field)] - # Unsaved sample states being defined for this request type - rt_states = [] - i = 0 - while True: - if 'state_name_%i' % i in kwd: - rt_states.append((util.restore_text(params.get('state_name_%i' % i, '')), - util.restore_text(params.get('state_desc_%i' % i, '')))) - i += 1 - else: - break - return rt_info_widgets, rt_states - - @web.expose - @web.require_admin - def view_request_type(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_type_id = kwd.get('id', None) - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - # See if we have any associated templates - widgets = request_type.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - return trans.fill_template('/admin/request_type/view_request_type.mako', - request_type=request_type, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - message=message, - status=status) - - @web.expose - @web.require_admin - def delete_request_type(self, trans, **kwd): - request_type_id = kwd.get('id', '') - request_type_id_list = util.listify(request_type_id) - for request_type_id in request_type_id_list: - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - request_type.deleted = True - trans.sa_session.add(request_type) - trans.sa_session.flush() - message = '%i request types has been deleted' % len(request_type_id_list) - return trans.response.send_redirect(web.url_for(controller='request_type', - action='browse_request_types', - message=message, - status='done')) - - @web.expose - @web.require_admin - def undelete_request_type(self, trans, **kwd): - request_type_id = kwd.get('id', '') - request_type_id_list = util.listify(request_type_id) - for request_type_id in request_type_id_list: - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - request_type.deleted = False - trans.sa_session.add(request_type) - trans.sa_session.flush() - status = 'done' - message = '%i request types have been undeleted' % len(request_type_id_list) - return trans.response.send_redirect(web.url_for(controller='request_type', - action='browse_request_types', - message=message, - status=status)) - - @web.expose - @web.require_admin - def request_type_permissions(self, trans, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_type_id = kwd.get('id', '') - try: - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - except: - return invalid_id_redirect(trans, 'request_type', request_type_id, 'request type', action='browse_request_types') - roles = trans.sa_session.query(trans.model.Role) \ - .filter(trans.model.Role.table.c.deleted == false()) \ - .order_by(trans.model.Role.table.c.name) - if params.get('update_roles_button', False): - permissions = {} - for k, v in trans.model.RequestType.permitted_actions.items(): - in_roles = [trans.sa_session.query(trans.model.Role).get(x) for x in util.listify(params.get(k + '_in', []))] - permissions[trans.app.security_agent.get_action(v.action)] = in_roles - trans.app.security_agent.set_request_type_permissions(request_type, permissions) - trans.sa_session.refresh(request_type) - message = "Permissions updated for request type '%s'" % request_type.name - return trans.fill_template('/admin/request_type/request_type_permissions.mako', - request_type=request_type, - roles=roles, - status=status, - message=message) - - @web.expose - @web.require_admin - def view_form_definition(self, trans, **kwd): - form_definition_id = kwd.get('id', None) - try: - form_definition = trans.sa_session.query(trans.model.FormDefinition).get(trans.security.decode_id(form_definition_id)) - except: - return invalid_id_redirect(trans, 'request_type', form_definition_id, 'form definition', action='browse_request_types') - return trans.fill_template('/admin/forms/view_form_definition.mako', - form_definition=form_definition) - - # ===== Methods for building SelectFields used on various admin_requests forms - def __build_external_service_select_field(self, trans, select_field_name, external_service=None): - if external_service: - selected_value = trans.security.encode_id(external_service.id) - else: - selected_value = 'none' - all_external_services = trans.sa_session.query(trans.model.ExternalService).filter(trans.model.ExternalService.table.c.deleted == false()).all() - for e in all_external_services: - external_service_type = e.get_external_service_type(trans) - e.label = '%s - %s' % (e.name, external_service_type.name) - return build_select_field(trans, - objs=all_external_services, - label_attr='label', - select_field_name=select_field_name, - selected_value=selected_value, - refresh_on_change=False) diff --git a/lib/galaxy/webapps/galaxy/controllers/requests.py b/lib/galaxy/webapps/galaxy/controllers/requests.py deleted file mode 100644 index ab4da8c3d92..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/requests.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import absolute_import - -import logging - -from sqlalchemy import false - -from galaxy.web.base.controller import BaseUIController, web -from galaxy.web.framework.helpers import grids -from .requests_common import RequestsGrid - -log = logging.getLogger(__name__) - - -class UserRequestsGrid(RequestsGrid): - operations = [operation for operation in RequestsGrid.operations] - operations.append(grids.GridOperation("Edit", allow_multiple=False, condition=(lambda item: item.is_unsubmitted and not item.deleted))) - operations.append(grids.GridOperation("Delete", allow_multiple=True, condition=(lambda item: item.is_new and not item.deleted))) - operations.append(grids.GridOperation("Undelete", allow_multiple=True, condition=(lambda item: item.deleted))) - - def apply_query_filter(self, trans, query, **kwd): - return query.filter_by(user=trans.user) - - -class Requests(BaseUIController): - request_grid = UserRequestsGrid() - - @web.expose - @web.require_login("view sequencing requests") - def index(self, trans): - return trans.fill_template("requests/index.mako") - - @web.expose - @web.require_login("create/submit sequencing requests") - def find_samples_index(self, trans): - return trans.fill_template("requests/find_samples_index.mako") - - @web.expose - def browse_requests(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - if operation == "edit": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_basic_request_info', - cntrller='requests', - **kwd)) - if operation == "add_samples": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='add_samples', - cntrller='requests', - **kwd)) - if operation == "edit_samples": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller='requests', - **kwd)) - if operation == "view_request": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request', - cntrller='requests', - **kwd)) - if operation == "delete": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='delete_request', - cntrller='requests', - **kwd)) - if operation == "undelete": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='undelete_request', - cntrller='requests', - **kwd)) - if operation == "view_request_history": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request_history', - cntrller='requests', - **kwd)) - - # If there are requests that have been rejected, show a message as a reminder to the user - rejected = 0 - for request in trans.sa_session.query(trans.app.model.Request) \ - .filter(trans.app.model.Request.table.c.deleted == false()) \ - .filter(trans.app.model.Request.table.c.user_id == trans.user.id): - if request.is_rejected: - rejected = rejected + 1 - if rejected: - status = 'warning' - message = "%d requests (highlighted in red) were rejected. Click on the request name for details." % rejected - kwd['status'] = status - kwd['message'] = message - # Allow the user to create a new request only if they have permission to access a request type. - accessible_request_types = trans.app.security_agent.get_accessible_request_types(trans, trans.user) - if accessible_request_types: - self.request_grid.global_actions = [grids.GridAction("Create new request", dict(controller='requests_common', - action='create_request', - cntrller='requests'))] - else: - self.request_grid.global_actions = [] - # Render the list view - return self.request_grid(trans, **kwd) diff --git a/lib/galaxy/webapps/galaxy/controllers/requests_admin.py b/lib/galaxy/webapps/galaxy/controllers/requests_admin.py deleted file mode 100644 index 2e375ff272a..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/requests_admin.py +++ /dev/null @@ -1,473 +0,0 @@ -from __future__ import absolute_import -import logging -import os - -from galaxy import model, util -from galaxy.web.base.controller import BaseUIController, UsesFormDefinitionsMixin, web -from galaxy.web.form_builder import build_select_field -from galaxy.web.framework.helpers import time_ago, grids -from .requests_common import RequestsGrid, invalid_id_redirect -from markupsafe import escape - - -log = logging.getLogger(__name__) - - -class AdminRequestsGrid(RequestsGrid): - class UserColumn(grids.TextColumn): - def get_value(self, trans, grid, request): - return escape(request.user.email) - # Grid definition - columns = [col for col in RequestsGrid.columns] - columns.append(UserColumn("User", - model_class=model.User, - key='username')) - operations = [operation for operation in RequestsGrid.operations] - operations.append(grids.GridOperation("Edit", allow_multiple=False, condition=(lambda item: not item.deleted))) - operations.append(grids.GridOperation("Reject", allow_multiple=False, condition=(lambda item: not item.deleted and item.is_submitted))) - operations.append(grids.GridOperation("Delete", allow_multiple=True, condition=(lambda item: not item.deleted))) - operations.append(grids.GridOperation("Undelete", condition=(lambda item: item.deleted))) - global_actions = [ - grids.GridAction("Create new request", dict(controller='requests_common', - action='create_request', - cntrller='requests_admin')) - ] - - -class DataTransferGrid(grids.Grid): - # Custom column types - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, sample_dataset): - return escape(sample_dataset.name) - - class SizeColumn(grids.TextColumn): - def get_value(self, trans, grid, sample_dataset): - return sample_dataset.size - - class StatusColumn(grids.TextColumn): - def get_value(self, trans, grid, sample_dataset): - return sample_dataset.status - - class ExternalServiceColumn(grids.TextColumn): - def get_value(self, trans, grid, sample_dataset): - try: - return escape(sample_dataset.external_service.name) - except: - return 'None' - # Grid definition - title = "Sample Datasets" - template = "admin/requests/sample_datasets_grid.mako" - model_class = model.SampleDataset - default_sort_key = "-create_time" - num_rows_per_page = 50 - preserve_state = True - use_paging = False - columns = [ - NameColumn("Name", - link=(lambda item: dict(operation="view", id=item.id)), - attach_popup=True, - filterable="advanced"), - SizeColumn("Size", - filterable="advanced"), - grids.GridColumn("Last Updated", - key="update_time", - format=time_ago), - ExternalServiceColumn('External service', - link=(lambda item: dict(operation="view_external_service", id=item.external_service.id)), ), - StatusColumn("Transfer Status", - filterable="advanced", - label_id_prefix='datasetTransferStatus-'), - ] - columns.append(grids.MulticolFilterColumn("Search", - cols_to_filter=[columns[0]], - key="free-text-search", - visible=False, - filterable="standard")) - operations = [ - grids.GridOperation("Transfer", - allow_multiple=True, - condition=(lambda item: item.status in [model.SampleDataset.transfer_status.NOT_STARTED])), - grids.GridOperation("Rename", - allow_multiple=True, - allow_popup=False, - condition=(lambda item: item.status in [model.SampleDataset.transfer_status.NOT_STARTED])), - grids.GridOperation("Delete", - allow_multiple=True, - condition=(lambda item: item.status in [model.SampleDataset.transfer_status.NOT_STARTED])) - ] - - def apply_query_filter(self, trans, query, **kwd): - sample_id = kwd.get('sample_id', None) - if not sample_id: - return query - return query.filter_by(sample_id=trans.security.decode_id(sample_id)) - - -class RequestsAdmin(BaseUIController, UsesFormDefinitionsMixin): - request_grid = AdminRequestsGrid() - datatx_grid = DataTransferGrid() - - @web.expose - @web.require_admin - def index(self, trans): - return trans.fill_template("/admin/requests/index.mako") - - @web.expose - @web.require_admin - def browse_requests(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - if operation == "edit": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_basic_request_info', - cntrller='requests_admin', - **kwd)) - if operation == "add_samples": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='add_samples', - cntrller='requests_admin', - **kwd)) - if operation == "edit_samples": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller='requests_admin', - **kwd)) - if operation == "view_request": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request', - cntrller='requests_admin', - **kwd)) - if operation == "view_request_history": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request_history', - cntrller='requests_admin', - **kwd)) - if operation == "reject": - return self.reject_request(trans, **kwd) - if operation == "view_type": - return trans.response.send_redirect(web.url_for(controller='request_type', - action='view_request_type', - **kwd)) - if operation == "delete": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='delete_request', - cntrller='requests_admin', - **kwd)) - if operation == "undelete": - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='undelete_request', - cntrller='requests_admin', - **kwd)) - # Render the list view - return self.request_grid(trans, **kwd) - - @web.expose - @web.require_admin - def reject_request(self, trans, **kwd): - params = util.Params(kwd) - request_id = params.get('id', '') - status = params.get('status', 'done') - message = params.get('message', 'done') - if params.get('cancel_reject_button', False): - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request', - cntrller='requests_admin', - id=request_id)) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, 'requests_admin', request_id) - # Validate - comment = util.restore_text(params.get('comment', '')) - if not comment: - status = 'error' - message = 'A reason for rejecting the request is required.' - return trans.fill_template('/admin/requests/reject.mako', - cntrller='requests_admin', - request=request, - status=status, - message=message) - # Create an event with state 'Rejected' for this request - event_comment = "Sequencing request marked rejected by %s. Reason: %s " % (trans.user.email, comment) - event = trans.model.RequestEvent(request, request.states.REJECTED, event_comment) - trans.sa_session.add(event) - trans.sa_session.flush() - message = 'Sequencing request (%s) has been rejected.' % request.name - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='browse_requests', - status=status, - message=message, - **kwd)) - - # Data transfer from sequencer/external_service - @web.expose - @web.require_admin - def manage_datasets(self, trans, **kwd): - def handle_error(**kwd): - kwd['status'] = 'error' - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='manage_datasets', - **kwd)) - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - # When this method is called due to a grid operation, the sample ID - # will be in the param 'id'. But when this method is called via a - # redirect from another method, the ID will be in 'sample_id'. So, - # check for 'id' if 'sample_id' is not provided. - sample_id = params.get('sample_id', None) - if sample_id is None: - sample_id = params.get('id', None) - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, 'requests_admin', sample_id, 'sample') - if 'operation' in kwd: - operation = kwd['operation'].lower() - sample_dataset_id = params.get('id', None) - if not sample_dataset_id: - message = 'Select at least 1 dataset to %s.' % operation - kwd['message'] = message - del kwd['operation'] - handle_error(**kwd) - id_list = util.listify(sample_dataset_id) - selected_sample_datasets = [] - for sample_dataset_id in id_list: - try: - sample_dataset = trans.sa_session.query(trans.model.SampleDataset).get(trans.security.decode_id(sample_dataset_id)) - except: - return invalid_id_redirect(trans, 'requests_admin', sample_dataset_id, 'sample dataset') - selected_sample_datasets.append(sample_dataset) - if operation == "view": - return trans.fill_template('/admin/requests/view_sample_dataset.mako', - cntrller='requests_admin', - sample_dataset=selected_sample_datasets[0]) - elif operation == "delete": - not_deleted = [] - for sample_dataset in selected_sample_datasets: - # Make sure the dataset has been transferred before deleting it. - if sample_dataset in sample_dataset.sample.untransferred_dataset_files: - # Save the sample dataset - sample = sample_dataset.sample - trans.sa_session.delete(sample_dataset) - trans.sa_session.flush() - else: - not_deleted.append(sample_dataset.name) - message = '%i datasets have been deleted.' % (len(id_list) - len(not_deleted)) - if not_deleted: - status = 'warning' - message = message + ' %s could not be deleted because their transfer status is not "Not Started". ' % str(not_deleted) - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='manage_datasets', - sample_id=trans.security.encode_id(sample.id), - status=status, - message=message)) - elif operation == "rename": - # If one of the selected sample datasets is in the NOT_STARTED state, - # then display an error message. A NOT_STARTED state implies the dataset - # has not yet been transferred. - no_datasets_transferred = True - for selected_sample_dataset in selected_sample_datasets: - if selected_sample_dataset in selected_sample_dataset.sample.untransferred_dataset_files: - no_datasets_transferred = False - break - if no_datasets_transferred: - status = 'error' - message = 'A dataset can be renamed only if it has been transferred.' - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='manage_datasets', - sample_id=trans.security.encode_id(selected_sample_datasets[0].sample.id), - status=status, - message=message)) - return trans.fill_template('/admin/requests/rename_datasets.mako', - sample=selected_sample_datasets[0].sample, - id_list=id_list) - elif operation == "transfer": - self.initiate_data_transfer(trans, - trans.security.encode_id(selected_sample_datasets[0].sample.id), - sample_datasets=selected_sample_datasets) - elif operation == "view_external_service": - return trans.response.send_redirect(web.url_for(controller='external_service', - action='view_external_service', - **kwd)) - - # Render the grid view - request_id = trans.security.encode_id(sample.request.id) - library_id = trans.security.encode_id(sample.library.id) - self.datatx_grid.title = 'Manage "%s" datasets' % sample.name - self.datatx_grid.global_actions = [grids.GridAction("Browse target data library", - dict(controller='library_common', - action='browse_library', - cntrller='library_admin', - id=library_id)), - grids.GridAction("Browse this request", - dict(controller='requests_common', - action='view_request', - cntrller='requests_admin', - id=request_id))] - return self.datatx_grid(trans, **kwd) - - @web.expose - @web.require_admin - def rename_datasets(self, trans, **kwd): - # This method is called from the DataTransferGrid when a user is renaming 1 or more - # SampleDatasets. - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - sample_id = kwd.get('sample_id', None) - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, 'requests_admin', sample_id, 'sample') - # id_list is list of SampleDataset ids, which is a subset of all - # of the SampleDatasets associated with the Sample. The user may - # or may not have selected all of the SampleDatasets for renaming. - id_list = util.listify(kwd.get('id_list', [])) - # Get all of the SampleDatasets - sample_datasets = [] - for sample_dataset_id in id_list: - sample_dataset = trans.sa_session.query(trans.app.model.SampleDataset).get(trans.security.decode_id(sample_dataset_id)) - sample_datasets.append(sample_dataset) - if params.get('rename_datasets_button', False): - incorrect_dataset_names = [] - for sample_dataset in sample_datasets: - encoded_id = trans.security.encode_id(sample_dataset.id) - selected_option = util.restore_text(params.get('rename_datasets_for_sample_%s' % encoded_id, '')) - new_name = util.restore_text(params.get('new_name_%s' % encoded_id, '')) - if not new_name: - incorrect_dataset_names.append(sample_dataset.name) - continue - new_name = util.sanitize_for_filename(new_name) - if selected_option == 'none': - sample_dataset.name = new_name - else: - sample_dataset.name = '%s_%s' % (selected_option, new_name) - trans.sa_session.add(sample_dataset) - trans.sa_session.flush() - if len(sample_datasets) == len(incorrect_dataset_names): - status = 'error' - message = 'All datasets renamed incorrectly.' - elif len(incorrect_dataset_names): - status = 'done' - message = 'Changes saved successfully. The following datasets were renamed incorrectly: %s.' % str(incorrect_dataset_names) - else: - message = 'Changes saved successfully.' - return trans.fill_template('/admin/requests/rename_datasets.mako', - sample=sample, - id_list=id_list, - message=message, - status=status) - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='manage_datasets', - sample_id=sample_id)) - - def __ensure_library_add_permission(self, trans, target_library, target_folder): - """ - Ensures the current admin user has ADD_LIBRARY permission on the target data library and folder. - """ - current_user_roles = trans.user.all_roles() - current_user_private_role = trans.app.security_agent.get_private_user_role(trans.user) - flush_needed = False - if not trans.app.security_agent.can_add_library_item(current_user_roles, target_library): - lp = trans.model.LibraryPermissions(trans.app.security_agent.permitted_actions.LIBRARY_ADD.action, - target_library, - current_user_private_role) - trans.sa_session.add(lp) - flush_needed = True - if not trans.app.security_agent.can_add_library_item(current_user_roles, target_folder): - lfp = trans.model.LibraryFolderPermissions(trans.app.security_agent.permitted_actions.LIBRARY_ADD.action, - target_folder, - current_user_private_role) - trans.sa_session.add(lfp) - flush_needed = True - if flush_needed: - trans.sa_session.flush() - - @web.expose - @web.require_admin - def initiate_data_transfer(self, trans, sample_id, sample_datasets=[], sample_dataset_id=''): - # Initiate the transfer of the datasets from the external service to the target Galaxy data library. - # The admin user must have LIBRARY_ADD permission for the target library and folder - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, 'requests_admin', sample_id, 'sample') - message = "" - status = "done" - # Make sure the current admin user has LIBRARY_ADD permission on the target data library and folder. - self.__ensure_library_add_permission(trans, sample.library, sample.folder) - if sample_dataset_id and not sample_datasets: - # Either a list of SampleDataset objects or a comma-separated string of - # encoded SampleDataset ids can be received. If the latter, parse the - # sample_dataset_id string to build the list of sample_datasets. - id_list = util.listify(sample_dataset_id) - for sample_dataset_id in id_list: - sample_dataset = trans.sa_session.query(trans.model.SampleDataset).get(trans.security.decode_id(sample_dataset_id)) - sample_datasets.append(sample_dataset) - if trans.app.config.enable_beta_job_managers: - # For now, assume that all SampleDatasets use the same external service ( this may not be optimal ). - if sample_datasets: - external_service_type_id = sample_datasets[0].external_service.external_service_type_id - # Here external_service_type_id will be something like '454_life_sciences' - external_service = sample.request.type.get_external_service(external_service_type_id) - external_service_type = external_service.get_external_service_type(trans) - external_service.load_data_transfer_settings(trans) - # For now only scp is supported. - scp_configs = external_service.data_transfer[trans.model.ExternalService.data_transfer_protocol.SCP] - if not scp_configs['automatic_transfer']: - deferred_plugin = 'ManualDataTransferPlugin' - else: - raise Exception("Automatic data transfer using scp is not yet supported.") - trans.app.job_manager.deferred_job_queue.plugins[deferred_plugin].create_job(trans, - sample=sample, - sample_datasets=sample_datasets, - external_service=external_service, - external_service_type=external_service_type) - else: - message = "Message queue transfer is no longer supported, please set enable_beta_job_managers = True in galaxy.ini" - status = "error" - return trans.response.send_redirect(web.url_for(controller='requests_admin', - action='manage_datasets', - sample_id=trans.security.encode_id(sample.id), - message=message, - status=status)) - - @web.expose - def update_sample_dataset_status(self, trans, cntrller, sample_dataset_ids, new_status, error_msg=None): - # check if the new status is a valid transfer status - possible_status_list = [v[1] for v in trans.app.model.SampleDataset.transfer_status.items()] - if new_status not in possible_status_list: - trans.response.status = 400 - return 400, "The requested transfer status ( %s ) is not a valid transfer status." % new_status - for id in util.listify(sample_dataset_ids): - try: - sd_id = trans.security.decode_id(id) - sample_dataset = trans.sa_session.query(trans.app.model.SampleDataset).get(sd_id) - except: - trans.response.status = 400 - return 400, "Invalid sample dataset id ( %s ) specified." % str(id) - sample_dataset.status = new_status - sample_dataset.error_msg = error_msg - trans.sa_session.add(sample_dataset) - trans.sa_session.flush() - return 200, 'Done' - # Methods for building SelectFields used on various admin_requests forms - - def __build_sample_id_select_field(self, trans, request, selected_value): - return build_select_field(trans, request.samples, 'name', 'sample_id', selected_value=selected_value, refresh_on_change=False) - - -# Methods for building SelectFields used on various admin_requests forms - used outside this controller ===== -def build_rename_datasets_for_sample_select_field(trans, sample_dataset, selected_value='none'): - options = [] - for option_index, option in enumerate(sample_dataset.file_path.split(os.sep)[:-1]): - option = option.strip() - if option: - options.append(option) - return build_select_field(trans, - objs=options, - label_attr='self', - select_field_name='rename_datasets_for_sample_%s' % trans.security.encode_id(sample_dataset.id), - selected_value=selected_value, - refresh_on_change=False) diff --git a/lib/galaxy/webapps/galaxy/controllers/requests_common.py b/lib/galaxy/webapps/galaxy/controllers/requests_common.py deleted file mode 100644 index db764265984..00000000000 --- a/lib/galaxy/webapps/galaxy/controllers/requests_common.py +++ /dev/null @@ -1,1959 +0,0 @@ -import csv -import logging -import re - -from sqlalchemy import and_, false, func, select -from markupsafe import escape - -from galaxy import model, util, web -from galaxy.util import unicodify -from galaxy.security.validate_user_input import validate_email -from galaxy.web.base.controller import BaseUIController, UsesFormDefinitionsMixin -from galaxy.web.form_builder import build_select_field, CheckboxField, SelectField, TextField -from galaxy.web.framework.helpers import grids, iff, time_ago - -log = logging.getLogger(__name__) - - -class RequestsGrid(grids.Grid): - # Custom column types - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, request): - return escape(request.name) - - class DescriptionColumn(grids.TextColumn): - def get_value(self, trans, grid, request): - return escape(request.desc) - - class SamplesColumn(grids.GridColumn): - def get_value(self, trans, grid, request): - return str(len(request.samples)) - - class TypeColumn(grids.TextColumn): - def get_value(self, trans, grid, request): - return request.type.name - - class StateColumn(grids.StateColumn): - def get_value(self, trans, grid, request): - state = request.state - if state == request.states.REJECTED: - state_color = 'error' - elif state == request.states.NEW: - state_color = 'new' - elif state == request.states.SUBMITTED: - state_color = 'running' - elif state == request.states.COMPLETE: - state_color = 'ok' - else: - state_color = state - return '
    %s
    ' % (state_color, state) - - def filter(self, trans, user, query, column_filter): - """ Modify query to filter request by state. """ - if column_filter == "All": - return query - if column_filter: - return query.join(model.RequestEvent.table) \ - .filter(self.model_class.table.c.id == model.RequestEvent.table.c.request_id) \ - .filter(model.RequestEvent.table.c.state == column_filter) \ - .filter(model.RequestEvent.table.c.id.in_(select(columns=[func.max(model.RequestEvent.table.c.id)], - from_obj=model.RequestEvent.table, - group_by=model.RequestEvent.table.c.request_id))) - - # Grid definition - title = "Sequencing Requests" - template = "requests/grid.mako" - model_class = model.Request - default_sort_key = "-update_time" - num_rows_per_page = 50 - use_paging = True - default_filter = dict(state="All", deleted="False") - columns = [ - NameColumn("Name", - key="name", - link=(lambda item: dict(operation="view_request", id=item.id)), - attach_popup=True, - filterable="advanced"), - DescriptionColumn("Description", - key='desc', - filterable="advanced"), - SamplesColumn("Samples", - link=(lambda item: iff(item.deleted, None, dict(operation="edit_samples", id=item.id)))), - TypeColumn("Type", - link=(lambda item: iff(item.deleted, None, dict(operation="view_type", id=item.type.id)))), - grids.GridColumn("Last Updated", key="update_time", format=time_ago), - grids.DeletedColumn("Deleted", - key="deleted", - visible=False, - filterable="advanced"), - StateColumn("State", - key='state', - filterable="advanced", - link=(lambda item: iff(item.deleted, None, dict(operation="view_request_history", id=item.id)))) - ] - columns.append(grids.MulticolFilterColumn("Search", - cols_to_filter=[columns[0], columns[1]], - key="free-text-search", - visible=False, - filterable="standard")) - operations = [ - grids.GridOperation("Submit", - allow_multiple=False, - condition=(lambda item: not item.deleted and item.is_unsubmitted and item.samples), - confirm="Samples cannot be added to this request after it is submitted. Click OK to submit.") - ] - - -class RequestsCommon(BaseUIController, UsesFormDefinitionsMixin): - @web.json - def sample_state_updates(self, trans, ids=None, states=None): - # Avoid caching - trans.response.headers['Pragma'] = 'no-cache' - trans.response.headers['Expires'] = '0' - # Create new HTML for any that have changed - rval = {} - if ids is not None and states is not None: - ids = map(int, ids.split(",")) - states = states.split(",") - for tup in zip(ids, states): - id, state = tup - if id and state: - sample = trans.sa_session.query(self.app.model.Sample).get(id) - if sample.state.name != state: - rval[id] = {"state": sample.state.name, - "html_state": unicodify(trans.fill_template("requests/common/sample_state.mako", - sample=sample), - 'utf-8')} - return rval - - @web.json - def sample_datasets_updates(self, trans, ids=None, datasets=None): - # Avoid caching - trans.response.headers['Pragma'] = 'no-cache' - trans.response.headers['Expires'] = '0' - # Create new HTML for any that have changed - rval = {} - if ids is not None and datasets is not None: - ids = map(int, ids.split(",")) - number_of_datasets_list = map(int, datasets.split(",")) - for tup in zip(ids, number_of_datasets_list): - id, number_of_datasets = tup - if id and number_of_datasets: - sample = trans.sa_session.query(self.app.model.Sample).get(id) - if len(sample.datasets) != number_of_datasets: - rval[id] = {"datasets": len(sample.datasets), - "html_datasets": unicodify(trans.fill_template("requests/common/sample_datasets.mako", - sample=sample), - 'utf-8')} - return rval - - @web.json - def dataset_transfer_status_updates(self, trans, ids=None, transfer_status_list=None): - # Avoid caching - trans.response.headers['Pragma'] = 'no-cache' - trans.response.headers['Expires'] = '0' - # Create new HTML for any that have changed - rval = {} - if ids is not None and transfer_status_list is not None: - ids = ids.split(",") - transfer_status_list = transfer_status_list.split(",") - for tup in zip(ids, transfer_status_list): - id, transfer_status = tup - if id and transfer_status: - sample_dataset = trans.sa_session.query(self.app.model.SampleDataset).get(trans.security.decode_id(id)) - if sample_dataset.status != transfer_status: - rval[id] = {"status": sample_dataset.status, - "html_status": unicodify(trans.fill_template("requests/common/sample_dataset_transfer_status.mako", - sample_dataset=sample_dataset), - 'utf-8')} - return rval - - @web.expose - @web.require_login("create sequencing requests") - def create_request(self, trans, cntrller, **kwd): - params = util.Params(kwd) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_type_id = params.get('request_type_id', 'none') - if request_type_id != 'none': - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - else: - request_type = None - # user_id will not be 'none' if an admin user is submitting this request on behalf of another user - # and they selected that user's id from the user_id SelectField. - user_id_encoded = True - user_id = params.get('user_id', 'none') - if user_id != 'none': - try: - user = trans.sa_session.query(trans.model.User).get(trans.security.decode_id(user_id)) - except TypeError: - # We must have an email address rather than an encoded user id - # This is because the galaxy.base.js creates a search+select box - # when there are more than 20 items in a SelectField. - user = trans.sa_session.query(trans.model.User) \ - .filter(trans.model.User.table.c.email == util.restore_text(user_id)) \ - .first() - user_id_encoded = False - - elif not is_admin: - user = trans.user - else: - user = None - if params.get('create_request_button', False) or params.get('add_sample_button', False): - name = util.restore_text(params.get('name', '')) - if is_admin and user_id == 'none': - message = 'Select the user on behalf of whom you are submitting this request.' - status = 'error' - elif user is None: - message = 'Invalid user ID (%s)' % str(user_id) - status = 'error' - # when creating a request from the user perspective, check if the - # user has access permission to this request_type - elif cntrller == 'requests' and not trans.app.security_agent.can_access_request_type(user.all_roles(), request_type): - message = '%s does not have access permission to the "%s" request type.' % (user.email, request_type.name) - status = 'error' - elif not name: - message = 'Enter the name of the request.' - status = 'error' - else: - request = self.__save_request(trans, cntrller, **kwd) - message = 'The sequencing request has been created.' - if params.get('create_request_button', False): - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_requests', - message=message, - status='done')) - elif params.get('add_sample_button', False): - request_id = trans.security.encode_id(request.id) - return self.add_sample(trans, cntrller, request_id, **kwd) - request_type_select_field = self.__build_request_type_id_select_field(trans, selected_value=request_type_id) - # Widgets to be rendered on the request form - widgets = [] - if request_type is not None or status == 'error': - # Either the user selected a request_type or an error exists on the form. - widgets.append(dict(label='Name of the Experiment', - widget=TextField('name', 40, util.restore_text(params.get('name', ''))), - helptext='(Required)')) - widgets.append(dict(label='Description', - widget=TextField('desc', 40, util.restore_text(params.get('desc', ''))), - helptext='(Optional)')) - if request_type is not None: - widgets += request_type.request_form.get_widgets(user, **kwd) - # In case there is an error on the form, make sure to populate widget fields with anything the user - # may have already entered. - widgets = self.populate_widgets_from_kwd(trans, widgets, **kwd) - if request_type is not None or status == 'error': - # Either the user selected a request_type or an error exists on the form. - if is_admin: - if not user_id_encoded and user: - selected_user_id = trans.security.encode_id(user.id) - else: - selected_user_id = user_id - user_widget = dict(label='Select user', - widget=self.__build_user_id_select_field(trans, selected_value=selected_user_id), - helptext='Submit the request on behalf of the selected user (Required)') - widgets = [user_widget] + widgets - return trans.fill_template('/requests/common/create_request.mako', - cntrller=cntrller, - request_type_select_field=request_type_select_field, - request_type_select_field_selected=request_type_id, - widgets=widgets, - message=message, - status=status) - - @web.expose - @web.require_login("view request") - def view_request(self, trans, cntrller, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - # Build a list of sample widgets (based on the attributes of each sample) for display. - displayable_sample_widgets = self.__get_sample_widgets(trans, request, request.samples, **kwd) - request_widgets = self.__get_request_widgets(trans, request.id) - return trans.fill_template('/requests/common/view_request.mako', - cntrller=cntrller, - request=request, - request_widgets=request_widgets, - displayable_sample_widgets=displayable_sample_widgets, - status=status, - message=message) - - @web.expose - @web.require_login("edit sequencing requests") - def edit_basic_request_info(self, trans, cntrller, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - name = util.restore_text(params.get('name', '')) - if params.get('edit_basic_request_info_button', False): - if not name: - status = 'error' - message = 'Enter the name of the request' - else: - request = self.__save_request(trans, cntrller, request=request, **kwd) - message = 'The changes made to request (%s) have been saved.' % request.name - # Widgets to be rendered on the request form - widgets = [] - widgets.append(dict(label='Name', - widget=TextField('name', 40, request.name), - helptext='(Required)')) - widgets.append(dict(label='Description', - widget=TextField('desc', 40, request.desc), - helptext='(Optional)')) - widgets = widgets + request.type.request_form.get_widgets(request.user, request.values.content, **kwd) - # In case there is an error on the form, make sure to populate widget fields with anything the user - # may have already entered. - widgets = self.populate_widgets_from_kwd(trans, widgets, **kwd) - return trans.fill_template('requests/common/edit_basic_request_info.mako', - cntrller=cntrller, - request_type=request.type, - request=request, - widgets=widgets, - message=message, - status=status) - - def __save_request(self, trans, cntrller, request=None, **kwd): - """ - Saves changes to an existing request, or creates a new - request if received request is None. - """ - params = util.Params(kwd) - request_type_id = params.get('request_type_id', None) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - if request is None: - # We're creating a new request, so we need the associated request_type - request_type = trans.sa_session.query(trans.model.RequestType).get(trans.security.decode_id(request_type_id)) - if is_admin: - # The admin user is creating a request on behalf of another user - user_id = params.get('user_id', '') - user = trans.sa_session.query(trans.model.User).get(trans.security.decode_id(user_id)) - else: - user = trans.user - else: - # We're saving changes to an existing request - user = request.user - request_type = request.type - name = util.restore_text(params.get('name', '')) - desc = util.restore_text(params.get('desc', '')) - notification = dict(email=[user.email], sample_states=[request_type.final_sample_state.id], body='', subject='') - values = self.get_form_values(trans, user, request_type.request_form, **kwd) - if request is None: - form_values = trans.model.FormValues(request_type.request_form, values) - trans.sa_session.add(form_values) - # We're creating a new request - request = trans.model.Request(name, desc, request_type, user, form_values, notification) - trans.sa_session.add(request) - trans.sa_session.flush() - trans.sa_session.refresh(request) - # Create an event with state 'New' for this new request - comment = "Sequencing request created by %s" % trans.user.email - if request.user != trans.user: - comment += " on behalf of %s." % request.user.email - event = trans.model.RequestEvent(request, request.states.NEW, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - else: - # We're saving changes to an existing request - request.name = name - request.desc = desc - request.type = request_type - request.user = user - request.notification = notification - request.values.content = values - trans.sa_session.add(request) - trans.sa_session.add(request.values) - trans.sa_session.flush() - return request - - @web.expose - @web.require_login("submit sequencing requests") - def submit_request(self, trans, cntrller, **kwd): - params = util.Params(kwd) - request_id = params.get('id', None) - message = util.restore_text(params.get('message', '')) - status = util.restore_text(params.get('status', 'done')) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - ok = True - if not request.samples: - message = 'Add at least 1 sample to this request before submitting.' - ok = False - if ok: - message = self.__validate_request(trans, cntrller, request) - if message or not ok: - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_basic_request_info', - cntrller=cntrller, - id=request_id, - status='error', - message=message)) - # Change the request state to 'Submitted' - comment = "Sequencing request submitted by %s" % trans.user.email - if request.user != trans.user: - comment += " on behalf of %s." % request.user.email - event = trans.model.RequestEvent(request, request.states.SUBMITTED, comment) - trans.sa_session.add(event) - # Change the state of each of the samples of this request - # request.type.states is the list of SampleState objects configured - # by the admin for this RequestType. - trans.sa_session.add(event) - trans.sa_session.flush() - # Samples will not have an associated SampleState until the request is submitted, at which - # time all samples of the request will be set to the first SampleState configured for the - # request's RequestType configured by the admin. - initial_sample_state_after_request_submitted = request.type.states[0] - for sample in request.samples: - event_comment = 'Sequencing request submitted and sample state set to %s.' % request.type.states[0].name - event = trans.model.SampleEvent(sample, - initial_sample_state_after_request_submitted, - event_comment) - trans.sa_session.add(event) - trans.sa_session.add(request) - trans.sa_session.flush() - request.send_email_notification(trans, initial_sample_state_after_request_submitted) - message = 'The sequencing request has been submitted.' - # show the request page after submitting the request - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='view_request', - cntrller=cntrller, - id=request_id, - status=status, - message=message)) - - @web.expose - @web.require_login("edit samples") - def edit_samples(self, trans, cntrller, **kwd): - params = util.Params(kwd) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - if params.get('cancel_changes_button', False): - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - id=request_id)) - libraries = trans.app.security_agent.get_accessible_libraries(trans, request.user) - # Build a list of sample widgets (based on the attributes of each sample) for display. - displayable_sample_widgets = self.__get_sample_widgets(trans, request, request.samples, **kwd) - encoded_selected_sample_ids = self.__get_encoded_selected_sample_ids(trans, request, **kwd) - sample_operation = params.get('sample_operation', 'none') - - def handle_error(**kwd): - kwd['status'] = 'error' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - **kwd)) - if not encoded_selected_sample_ids and sample_operation != 'none': - # Probably occurred due to refresh_on_change...is there a better approach? - kwd['sample_operation'] = 'none' - message = 'Select at least one sample before selecting an operation.' - kwd['message'] = message - handle_error(**kwd) - if params.get('save_samples_button', False): - if encoded_selected_sample_ids: - # We need the list of displayable_sample_widgets to include the same number - # of objects that that request.samples has so that we can enumerate over each - # list without problems. We have to be careful here since the user may have - # used the multi-select check boxes when editing sample widgets, but didn't - # select all of them. We'll first get the set of samples corresponding to the - # checked sample ids. - samples = [] - selected_samples = [] - for encoded_sample_id in encoded_selected_sample_ids: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(encoded_sample_id)) - selected_samples.append(sample) - # Now build the list of samples, inserting None for samples that have not been checked. - for sample in request.samples: - if sample in selected_samples: - samples.append(sample) - else: - samples.append(None) - # The __save_samples method requires sample_widgets, not sample objects, so we'll get what we - # need by calling __get_sample_widgets(). However, we need to take care here because __get_sample_widgets() - # is used to populate the sample widget dicts from kwd, and the method assumes that a None object in the - # received list of samples should be populated from the db. Since we're just re-using the method here to - # change our list of samples into a list of sample widgets, we'll need to make sure to keep track of our - # None objects. - sample_widgets = [obj for obj in samples] - sample_widgets = self.__get_sample_widgets(trans, request, sample_widgets, **kwd) - # Replace each sample widget dict with a None object if necessary - for index, obj in enumerate(samples): - if obj is None: - sample_widgets[index] = None - else: - sample_widgets = displayable_sample_widgets - return self.__save_samples(trans, cntrller, request, sample_widgets, saving_new_samples=False, **kwd) - request_widgets = self.__get_request_widgets(trans, request.id) - sample_copy_select_field = self.__build_copy_sample_select_field(trans, displayable_sample_widgets) - libraries_select_field, folders_select_field = self.__build_library_and_folder_select_fields(trans, - request.user, - 'sample_operation', - libraries, - None, - **kwd) - sample_operation_select_field = self.__build_sample_operation_select_field(trans, is_admin, request, sample_operation) - sample_state_id = params.get('sample_state_id', None) - sample_state_id_select_field = self.__build_sample_state_id_select_field(trans, request, sample_state_id) - return trans.fill_template('/requests/common/edit_samples.mako', - cntrller=cntrller, - request=request, - encoded_selected_sample_ids=encoded_selected_sample_ids, - request_widgets=request_widgets, - displayable_sample_widgets=displayable_sample_widgets, - sample_copy_select_field=sample_copy_select_field, - libraries=libraries, - sample_operation_select_field=sample_operation_select_field, - libraries_select_field=libraries_select_field, - folders_select_field=folders_select_field, - sample_state_id_select_field=sample_state_id_select_field, - status=status, - message=message) - - @web.expose - def update_sample_state(self, trans, cntrller, sample_ids, new_state, comment=None): - for sample_id in sample_ids: - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - if cntrller == 'api': - trans.response.status = 400 - return "Invalid sample id ( %s ) specified, unable to decode." % str(sample_id) - else: - return invalid_id_redirect(trans, cntrller, sample_id, 'sample') - if comment is None: - comment = 'Sample state set to %s' % str(new_state) - event = trans.model.SampleEvent(sample, new_state, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - if cntrller == 'api': - return 200, 'Done' - - @web.expose - @web.require_login("delete sequencing requests") - def delete_request(self, trans, cntrller, **kwd): - params = util.Params(kwd) - id_list = util.listify(kwd.get('id', '')) - message = util.restore_text(params.get('message', '')) - status = util.restore_text(params.get('status', 'done')) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - num_deleted = 0 - not_deleted = [] - for id in id_list: - ok_for_now = True - try: - # This block will handle bots that do not send valid request ids. - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(id)) - except: - ok_for_now = False - if ok_for_now: - # We will only allow the request to be deleted by a non-admin user if not request.submitted - if is_admin or not request.is_submitted: - request.deleted = True - trans.sa_session.add(request) - # Delete all the samples belonging to this request - for s in request.samples: - s.deleted = True - trans.sa_session.add(s) - comment = "Sequencing request marked deleted by %s." % trans.user.email - # There is no DELETED state for a request, so keep the current request state - event = trans.model.RequestEvent(request, request.state, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - num_deleted += 1 - else: - not_deleted.append(request) - message += '%i requests have been deleted.' % num_deleted - if not_deleted: - message += ' Contact the administrator to delete the following submitted requests: ' - for request in not_deleted: - message += '%s, ' % request.name - message = message.rstrip(', ') - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_requests', - status=status, - message=message)) - - @web.expose - @web.require_login("undelete sequencing requests") - def undelete_request(self, trans, cntrller, **kwd): - params = util.Params(kwd) - id_list = util.listify(kwd.get('id', '')) - message = util.restore_text(params.get('message', '')) - status = util.restore_text(params.get('status', 'done')) - num_undeleted = 0 - for id in id_list: - ok_for_now = True - try: - # This block will handle bots that do not send valid request ids. - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(id)) - except: - ok_for_now = False - if ok_for_now: - request.deleted = False - trans.sa_session.add(request) - # Undelete all the samples belonging to this request - for s in request.samples: - s.deleted = False - trans.sa_session.add(s) - comment = "Sequencing request marked undeleted by %s." % trans.user.email - event = trans.model.RequestEvent(request, request.state, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - num_undeleted += 1 - message += '%i requests have been undeleted.' % num_undeleted - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_requests', - status=status, - message=message)) - - @web.expose - @web.require_login("sequencing request history") - def view_request_history(self, trans, cntrller, **kwd): - params = util.Params(kwd) - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - return trans.fill_template('/requests/common/view_request_history.mako', - cntrller=cntrller, - request=request) - - @web.expose - @web.require_login("edit email notification settings") - def edit_email_settings(self, trans, cntrller, **kwd): - """ - Allow for changing the email notification settings where email is sent to a list of users - whenever the request state changes to one selected for notification. - """ - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - email_address = CheckboxField.is_checked(params.get('email_address', '')) - additional_email_addresses = params.get('additional_email_addresses', '') - # Get the list of checked sample state CheckBoxFields - checked_sample_states = [] - for index, sample_state in enumerate(request.type.states): - if CheckboxField.is_checked(params.get('sample_state_%i' % sample_state.id, '')): - checked_sample_states.append(sample_state.id) - if additional_email_addresses: - additional_email_addresses = additional_email_addresses.split('\r\n') - if email_address or additional_email_addresses: - # The user added 1 or more email addresses - email_addresses = [] - if email_address: - email_addresses.append(request.user.email) - for email_address in additional_email_addresses: - email_addresses.append(util.restore_text(email_address)) - # Make sure email addresses are valid - err_msg = '' - for email_address in email_addresses: - err_msg += validate_email(trans, email_address, check_dup=False) - if err_msg: - status = 'error' - message += err_msg - else: - request.notification = dict(email=email_addresses, - sample_states=checked_sample_states, - body='', - subject='') - else: - # The user may have eliminated email addresses that were previously set - request.notification = None - if checked_sample_states: - message = 'All sample states have been unchecked since no email addresses have been selected or entered. ' - trans.sa_session.add(request) - trans.sa_session.flush() - trans.sa_session.refresh(request) - message += 'The changes made to the email notification settings have been saved.' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_basic_request_info', - cntrller=cntrller, - id=request_id, - message=message, - status=status)) - - @web.expose - @web.require_login("update sequencing request state") - def update_request_state(self, trans, cntrller, **kwd): - params = util.Params(kwd) - message = params.get('message', '') - status = params.get('status', 'done') - request_id = params.get('request_id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - # Make sure all the samples of the current request have the same state - common_state = request.samples_have_common_state - if not common_state: - # If the current request state is complete and one of its samples moved from - # the final sample state, then move the request state to In-progress - if request.is_complete: - message = "At least 1 sample state moved from the final sample state, so now the request's state is (%s)" % request.states.SUBMITTED - event = trans.model.RequestEvent(request, request.states.SUBMITTED, message) - trans.sa_session.add(event) - trans.sa_session.flush() - if cntrller == 'api': - return 200, message - else: - final_state = False - request_type_state = request.type.final_sample_state - if common_state.id == request_type_state.id: - # since all the samples are in the final state, change the request state to 'Complete' - comment = "All samples of this sequencing request are in the final sample state (%s). " % request_type_state.name - state = request.states.COMPLETE - final_state = True - else: - comment = "All samples of this sequencing request are in the (%s) sample state. " % common_state.name - state = request.states.SUBMITTED - event = trans.model.RequestEvent(request, state, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - # See if an email notification is configured to be sent when the samples are in this state. - retval = request.send_email_notification(trans, common_state, final_state) - if retval: - message = comment + retval - else: - message = comment - if cntrller == 'api': - return 200, message - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - id=request_id, - status=status, - message=message)) - - @web.expose - @web.require_login("find samples") - def find_samples(self, trans, cntrller, **kwd): - params = util.Params(kwd) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - samples_list = [] - results = '' - if params.get('find_samples_button', False): - search_string = kwd.get('search_box', '') - search_type = params.get('search_type', '') - request_states = util.listify(params.get('request_states', '')) - samples = [] - if search_type == 'bar_code': - samples = trans.sa_session.query(trans.model.Sample) \ - .filter(and_(trans.model.Sample.table.c.deleted == false(), - func.lower(trans.model.Sample.table.c.bar_code).like("%" + search_string.lower() + "%"))) \ - .order_by(trans.model.Sample.table.c.create_time.desc()) - elif search_type == 'sample name': - samples = trans.sa_session.query(trans.model.Sample) \ - .filter(and_(trans.model.Sample.table.c.deleted == false(), - func.lower(trans.model.Sample.table.c.name).like("%" + search_string.lower() + "%"))) \ - .order_by(trans.model.Sample.table.c.create_time.desc()) - elif search_type == 'dataset': - samples = trans.sa_session.query(trans.model.Sample) \ - .filter(and_(trans.model.Sample.table.c.deleted == false(), - trans.model.SampleDataset.table.c.sample_id == trans.model.Sample.table.c.id, - func.lower(trans.model.SampleDataset.table.c.name).like("%" + search_string.lower() + "%"))) \ - .order_by(trans.model.Sample.table.c.create_time.desc()) - elif search_type == 'form value': - samples = [] - if search_string.find('=') != -1: - field_label, field_value = search_string.split('=') - all_samples = trans.sa_session.query(trans.model.Sample) \ - .filter(trans.model.Sample.table.c.deleted == false()) \ - .order_by(trans.model.Sample.table.c.create_time.desc()) - for sample in all_samples: - # find the field in the sample form with the given label - for field in sample.request.type.sample_form.fields: - if field_label == field['label']: - # check if the value is equal to the value in the search string - if sample.values.content[field['name']] == field_value: - samples.append(sample) - if is_admin: - for s in samples: - if not s.request.deleted and s.request.state in request_states: - samples_list.append(s) - else: - for s in samples: - if s.request.user.id == trans.user.id and s.request.state in request_states and not s.request.deleted: - samples_list.append(s) - results = 'There are %i samples matching the search parameters.' % len(samples_list) - # Build the request_states SelectField - selected_value = kwd.get('request_states', trans.model.Request.states.SUBMITTED) - states = [v for k, v in trans.model.Request.states.items()] - request_states = build_select_field(trans, - states, - 'self', - 'request_states', - selected_value=selected_value, - refresh_on_change=False, - multiple=True, - display='checkboxes') - # Build the search_type SelectField - selected_value = kwd.get('search_type', 'sample name') - types = ['sample name', 'bar_code', 'dataset', 'form value'] - search_type = build_select_field(trans, types, 'self', 'search_type', selected_value=selected_value, refresh_on_change=False) - # Build the search_box TextField - search_box = TextField('search_box', 50, kwd.get('search_box', '')) - return trans.fill_template('/requests/common/find_samples.mako', - cntrller=cntrller, - request_states=request_states, - samples=samples_list, - search_type=search_type, - results=results, - search_box=search_box) - - @web.expose - @web.require_login("sample events") - def view_sample_history(self, trans, cntrller, **kwd): - params = util.Params(kwd) - sample_id = params.get('sample_id', None) - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, cntrller, sample_id, 'sample') - return trans.fill_template('/requests/common/view_sample_history.mako', - cntrller=cntrller, - sample=sample) - - @web.expose - @web.require_login("add samples") - def add_samples(self, trans, cntrller, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - request_id = params.get('id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - libraries = trans.app.security_agent.get_accessible_libraries(trans, request.user) - # Build a list of sample widgets (based on the attributes of each sample) for display. - displayable_sample_widgets = self.__get_sample_widgets(trans, request, request.samples, **kwd) - if params.get('import_samples_button', False): - # Import sample field values from a csv file - # TODO: should this be a mapper? - workflows = [w.latest_workflow for w in trans.user.stored_workflows if not w.deleted] - return self.__import_samples(trans, cntrller, request, displayable_sample_widgets, libraries, workflows, **kwd) - elif params.get('add_sample_button', False): - return self.add_sample(trans, cntrller, request_id, **kwd) - elif params.get('save_samples_button', False): - return self.__save_samples(trans, cntrller, request, displayable_sample_widgets, saving_new_samples=True, **kwd) - request_widgets = self.__get_request_widgets(trans, request.id) - sample_copy_select_field = self.__build_copy_sample_select_field(trans, displayable_sample_widgets) - libraries_select_field, folders_select_field = self.__build_library_and_folder_select_fields(trans, - request.user, - 'sample_operation', - libraries, - None, - **kwd) - return trans.fill_template('/requests/common/add_samples.mako', - cntrller=cntrller, - request=request, - request_widgets=request_widgets, - displayable_sample_widgets=displayable_sample_widgets, - sample_copy_select_field=sample_copy_select_field, - libraries=libraries, - libraries_select_field=libraries_select_field, - folders_select_field=folders_select_field, - status=status, - message=message) - - @web.expose - @web.require_login("add sample") - def add_sample(self, trans, cntrller, request_id, **kwd): - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - # Get the widgets for rendering the request form - request_widgets = self.__get_request_widgets(trans, request.id) - displayable_sample_widgets = self.__get_sample_widgets(trans, request, request.samples, **kwd) - if params.get('add_sample_button', False): - libraries = trans.app.security_agent.get_accessible_libraries(trans, request.user) - num_samples_to_add = int(params.get('num_sample_to_copy', 1)) - # See if the user has selected a sample to copy. - copy_sample_index = int(params.get('copy_sample_index', -1)) - for index in range(num_samples_to_add): - field_values = {} - if copy_sample_index != -1: - # The user has selected a sample to copy. - library_id = displayable_sample_widgets[copy_sample_index]['library_select_field'].get_selected(return_value=True) - folder_id = displayable_sample_widgets[copy_sample_index]['folder_select_field'].get_selected(return_value=True) - name = displayable_sample_widgets[copy_sample_index]['name'] + '_%i' % (len(displayable_sample_widgets) + 1) - history_id = displayable_sample_widgets[copy_sample_index]['history_select_field'].get_selected(return_value=True) - workflow_id = displayable_sample_widgets[copy_sample_index]['workflow_select_field'][0].get_selected(return_value=True) - # DBTODO Do something nicer with the workflow fieldset. Remove [0] indexing and copy mappings as well. - for field_name in displayable_sample_widgets[copy_sample_index]['field_values']: - field_values[field_name] = '' - else: - # The user has not selected a sample to copy, just adding a new generic sample. - library_id = None - folder_id = None - history_id = None - workflow_id = None - name = 'Sample_%i' % (len(displayable_sample_widgets) + 1) - for field in request.type.sample_form.fields: - field_values[field['name']] = '' - # Build the library_select_field and folder_select_field for the new sample being added. - library_select_field, folder_select_field = self.__build_library_and_folder_select_fields(trans, - user=request.user, - sample_index=len(displayable_sample_widgets), - libraries=libraries, - sample=None, - library_id=library_id, - folder_id=folder_id, - **kwd) - history_select_field = self.__build_history_select_field(trans=trans, - user=request.user, - sample_index=len(displayable_sample_widgets), - history_id=history_id, - **kwd) - workflow_select_field = self.__build_workflow_select_field(trans=trans, - user=request.user, - request=request, - sample_index=len(displayable_sample_widgets), - workflow_id=workflow_id, - history_id=history_id, - **kwd) - # Append the new sample to the current list of samples for the request - displayable_sample_widgets.append(dict(id=None, - name=name, - bar_code='', - library=None, - library_id=library_id, - history=None, - workflow=None, - history_select_field=history_select_field, - workflow_select_field=workflow_select_field, - folder=None, - folder_id=folder_id, - field_values=field_values, - library_select_field=library_select_field, - folder_select_field=folder_select_field)) - sample_copy_select_field = self.__build_copy_sample_select_field(trans, displayable_sample_widgets) - return trans.fill_template('/requests/common/add_samples.mako', - cntrller=cntrller, - request=request, - request_widgets=request_widgets, - displayable_sample_widgets=displayable_sample_widgets, - sample_copy_select_field=sample_copy_select_field, - message=message, - status=status) - - @web.expose - @web.require_login("view request") - def view_sample(self, trans, cntrller, **kwd): - params = util.Params(kwd) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - sample_id = params.get('id', None) - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, cntrller, sample_id, 'sample') - # See if we have any associated templates - widgets = sample.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - if is_admin: - external_services = sample.populate_external_services(trans=trans) - else: - external_services = None - return trans.fill_template('/requests/common/view_sample.mako', - cntrller=cntrller, - sample=sample, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - status=status, - message=message, - external_services=external_services) - - @web.expose - @web.require_login("delete sample from sequencing request") - def delete_sample(self, trans, cntrller, **kwd): - params = util.Params(kwd) - status = params.get('status', 'done') - message = util.restore_text(params.get('message', '')) - request_id = params.get('request_id', None) - try: - request = trans.sa_session.query(trans.model.Request).get(trans.security.decode_id(request_id)) - except: - return invalid_id_redirect(trans, cntrller, request_id) - displayable_sample_widgets = self.__get_sample_widgets(trans, request, request.samples, **kwd) - sample_index = int(params.get('sample_id', 0)) - sample_name = displayable_sample_widgets[sample_index]['name'] - sample = request.get_sample(sample_name) - if sample: - trans.sa_session.delete(sample.values) - trans.sa_session.delete(sample) - trans.sa_session.flush() - message = 'Sample (%s) has been deleted.' % sample_name - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - id=trans.security.encode_id(request.id), - status=status, - message=message)) - - @web.expose - @web.require_login("view data transfer page") - def view_sample_datasets(self, trans, cntrller, **kwd): - # The link on the number of selected datasets will only appear if there is at least 1 selected dataset. - # If there are 0 selected datasets, there is no link, so this method will only be reached from the requests - # controller if there are selected datasets. - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - sample_id = params.get('sample_id', None) - try: - sample = trans.sa_session.query(trans.model.Sample).get(trans.security.decode_id(sample_id)) - except: - return invalid_id_redirect(trans, cntrller, sample_id, 'sample') - external_service_id = params.get('external_service_id', None) - external_service = trans.sa_session.query(trans.model.ExternalService).get(trans.security.decode_id(external_service_id)) - # See if a library and folder have been set for this sample. - if is_admin and not sample.library or not sample.folder: - status = 'error' - message = "Select a target data library and folder for the sample before selecting the datasets." - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - id=trans.security.encode_id(sample.request.id), - status=status, - message=message)) - transfer_status = params.get('transfer_status', None) - if transfer_status in [None, 'None']: - title = 'All selected datasets for "%s"' % sample.name - sample_datasets = sample.datasets - elif transfer_status == trans.model.SampleDataset.transfer_status.IN_QUEUE: - title = 'Datasets of "%s" that are in the transfer queue' % sample.name - sample_datasets = sample.queued_dataset_files - elif transfer_status == trans.model.SampleDataset.transfer_status.TRANSFERRING: - title = 'Datasets of "%s" that are being transferred' % sample.name - sample_datasets = sample.transferring_dataset_files - elif transfer_status == trans.model.SampleDataset.transfer_status.ADD_TO_LIBRARY: - title = 'Datasets of "%s" that are being added to the target data library' % sample.name - sample_datasets = sample.adding_to_library_dataset_files - elif transfer_status == trans.model.SampleDataset.transfer_status.COMPLETE: - title = 'Datasets of "%s" that are available in the target data library' % sample.name - sample_datasets = sample.transferred_dataset_files - elif transfer_status == trans.model.SampleDataset.transfer_status.ERROR: - title = 'Datasets of "%s" that resulted in a transfer error' % sample.name - sample_datasets = sample.transfer_error_dataset_files - return trans.fill_template('/requests/common/view_sample_datasets.mako', - cntrller=cntrller, - title=title, - external_service=external_service, - sample=sample, - sample_datasets=sample_datasets, - transfer_status=transfer_status, - message=message, - status=status) - - def __import_samples(self, trans, cntrller, request, displayable_sample_widgets, libraries, workflows, **kwd): - """ - Reads the samples csv file and imports all the samples. The csv file must be in the following format. The [:FieldValue] - is optional, the form field will contain the value after the ':' if included. - SampleName,DataLibraryName,DataLibraryFolderName,HistoryName,WorkflowName,Field1Name:Field1Value,Field2Name:Field2Value... - """ - params = util.Params(kwd) - file_obj = params.get('file_data', '') - try: - reader = csv.reader(file_obj.file) - for row in reader: - library_id = None - library = None - folder_id = None - folder = None - history_id = None - history = None - workflow_id = None - workflow = None - # Get the library - library = trans.sa_session.query(trans.model.Library) \ - .filter(and_(trans.model.Library.table.c.name == row[1], - trans.model.Library.table.c.deleted == false())) \ - .first() - if library: - # Get the folder - for folder in trans.sa_session.query(trans.model.LibraryFolder) \ - .filter(and_(trans.model.LibraryFolder.table.c.name == row[2], - trans.model.LibraryFolder.table.c.deleted == false())): - if folder.parent_library == library: - break - if folder: - library_id = trans.security.encode_id(library.id) - folder_id = trans.security.encode_id(folder.id) - library_select_field, folder_select_field = self.__build_library_and_folder_select_fields(trans, - request.user, - len(displayable_sample_widgets), - libraries, - None, - library_id, - folder_id, - **kwd) - # Get the history - history = trans.sa_session.query(trans.model.History) \ - .filter(and_(trans.model.History.table.c.name == row[3], - trans.model.History.table.c.deleted == false(), - trans.model.History.user_id == trans.user.id)) \ - .first() - if history: - history_id = trans.security.encode_id(history.id) - else: - history_id = 'none' - history_select_field = self.__build_history_select_field(trans=trans, - user=request.user, - sample_index=len(displayable_sample_widgets), - history_id=history_id) - # Get the workflow - workflow = trans.sa_session.query(trans.model.StoredWorkflow) \ - .filter(and_(trans.model.StoredWorkflow.table.c.name == row[4], - trans.model.StoredWorkflow.table.c.deleted == false(), - trans.model.StoredWorkflow.user_id == trans.user.id)) \ - .first() - if workflow: - workflow_id = trans.security.encode_id(workflow.id) - else: - workflow_id = 'none' - workflow_select_field = self.__build_workflow_select_field(trans=trans, - user=request.user, - request=request, - sample_index=len(displayable_sample_widgets), - workflow_id=workflow_id, - history_id=history_id) - field_values = {} - field_names = row[5:] - for field_name in field_names: - if field_name.find(':') >= 0: - field_list = field_name.split(':') - field_name = field_list[0] - field_value = field_list[1] - else: - field_value = '' - field_values[field_name] = field_value - displayable_sample_widgets.append(dict(id=None, - name=row[0], - bar_code='', - library=library, - library_id=library_id, - library_select_field=library_select_field, - folder=folder, - folder_id=folder_id, - folder_select_field=folder_select_field, - history=history, - history_id=history_id, - history_select_field=history_select_field, - workflow=workflow, - workflow_id=workflow_id, - workflow_select_field=workflow_select_field, - field_values=field_values)) - except Exception as e: - if str(e) == "'unicode' object has no attribute 'file'": - message = "Select a file" - else: - message = 'Error attempting to create samples from selected file: %s.' % str(e) - message += ' Make sure the selected csv file uses the format: SampleName,DataLibrary,DataLibraryFolder,FieldValue1,FieldValue2...' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='add_sample', - cntrller=cntrller, - request_id=trans.security.encode_id(request.id), - add_sample_button='Add sample', - status='error', - message=message)) - request_widgets = self.__get_request_widgets(trans, request.id) - sample_copy_select_field = self.__build_copy_sample_select_field(trans, displayable_sample_widgets) - return trans.fill_template('/requests/common/add_samples.mako', - cntrller=cntrller, - request=request, - request_widgets=request_widgets, - displayable_sample_widgets=displayable_sample_widgets, - sample_copy_select_field=sample_copy_select_field) - - def __save_samples(self, trans, cntrller, request, sample_widgets, saving_new_samples=False, **kwd): - # Here we handle saving all new samples added by the user as well as saving - # changes to any subset of the request's samples. A sample will not have an - # associated SampleState until the request is submitted, at which time the - # sample is automatically associated with the first SampleState configured by - # the admin for the request's RequestType. - params = util.Params(kwd) - message = util.restore_text(params.get('message', '')) - status = params.get('status', 'done') - sample_operation = params.get('sample_operation', 'none') - if saving_new_samples: - redirect_action = 'add_samples' - else: - redirect_action = 'edit_samples' - # Check for duplicate sample names within the request - self.__validate_sample_names(trans, cntrller, request, sample_widgets, **kwd) - log.debug("SAVING SAMPLES!") - log.debug("saving_new_samples is %s" % saving_new_samples) - if not saving_new_samples: - library = None - folder = None - - def handle_error(**kwd): - kwd['status'] = 'error' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action=redirect_action, - cntrller=cntrller, - **kwd)) - # Here we handle saving changes to single samples as well as saving changes to - # selected sets of samples. If samples are selected, the sample_operation param - # will have a value other than 'none', and the samples param will be a list of - # encoded sample ids. There are currently only 2 multi-select operations; - # model.Sample.bulk_operations.CHANGE_STATE and model.sample.bulk_operations.SELECT_LIBRARY. - # If sample_operation is 'none, then the samples param will be a list of sample objects. - if sample_operation == trans.model.Sample.bulk_operations.CHANGE_STATE: - sample_state_id = params.get('sample_state_id', None) - if sample_state_id in [None, 'none']: - message = "Select a new state from the Change current state list before clicking the Save button." - kwd['message'] = message - del kwd['save_samples_button'] - handle_error(**kwd) - sample_event_comment = util.restore_text(params.get('sample_event_comment', '')) - new_state = trans.sa_session.query(trans.model.SampleState).get(trans.security.decode_id(sample_state_id)) - # Send the encoded sample_ids to update_sample_state. - # TODO: make changes necessary to just send the samples... - encoded_selected_sample_ids = self.__get_encoded_selected_sample_ids(trans, request, **kwd) - # Make sure all samples have a unique bar_code if the state is changing - for sample_index in range(len(sample_widgets)): - current_sample = sample_widgets[sample_index] - if current_sample is None: - # We have a None value because the user did not select this sample - # on which to perform the action. - continue - request_sample = request.samples[sample_index] - bar_code = current_sample['bar_code'] - if bar_code: - # If the sample has a new bar_code, make sure it is unique. - bc_message = self.__validate_bar_code(trans, request_sample, bar_code) - if bc_message: - message += bc_message - kwd['message'] = message - del kwd['save_samples_button'] - handle_error(**kwd) - self.update_sample_state(trans, cntrller, encoded_selected_sample_ids, new_state, comment=sample_event_comment) - return trans.response.send_redirect(web.url_for(controller='requests_common', - cntrller=cntrller, - action='update_request_state', - request_id=trans.security.encode_id(request.id))) - elif sample_operation == trans.model.Sample.bulk_operations.SELECT_LIBRARY: - library_id = params.get('sample_operation_library_id', 'none') - folder_id = params.get('sample_operation_folder_id', 'none') - library, folder = self.__get_library_and_folder(trans, library_id, folder_id) - for sample_index in range(len(sample_widgets)): - current_sample = sample_widgets[sample_index] - if current_sample is None: - # We have a None value because the user did not select this sample - # on which to perform the action. - continue - current_sample['library'] = library - current_sample['folder'] = folder - self.__update_samples(trans, cntrller, request, sample_widgets, **kwd) - message = 'Changes made to the samples have been saved. ' - else: - # Saving a newly created sample. The sample will not have an associated SampleState - # until the request is submitted, at which time all samples of the request will be - # set to the first SampleState configured for the request's RequestType configured - # by the admin ( i.e., the sample's SampleState would be set to request.type.states[0] ). - new_samples = [] - for index in range(len(sample_widgets) - len(request.samples)): - sample_index = len(request.samples) - sample_widget = sample_widgets[sample_index] - form_values = trans.model.FormValues(request.type.sample_form, sample_widget['field_values']) - trans.sa_session.add(form_values) - trans.sa_session.flush() - if request.is_submitted: - bar_code = sample_widget['bar_code'] - else: - bar_code = '' - sample = trans.model.Sample(name=sample_widget['name'], - desc='', - request=request, - form_values=form_values, - bar_code=bar_code, - library=sample_widget['library'], - folder=sample_widget['folder'], - history=sample_widget['history'], - workflow=sample_widget['workflow_dict']) - trans.sa_session.add(sample) - trans.sa_session.flush() - new_samples.append(sample) - # If this sample is added when the request is already submitted then these new samples - # should be in the first sample state when saved - if request.is_submitted: - initial_sample_state_after_request_submitted = request.type.states[0] - for sample in new_samples: - event_comment = 'Sample added and sample state set to %s.' % request.type.states[0].name - event = trans.model.SampleEvent(sample, - initial_sample_state_after_request_submitted, - event_comment) - trans.sa_session.add(event) - trans.sa_session.flush() - return trans.response.send_redirect(web.url_for(controller='requests_common', - action=redirect_action, - cntrller=cntrller, - id=trans.security.encode_id(request.id), - status=status, - message=message)) - - def __update_samples(self, trans, cntrller, request, sample_widgets, **kwd): - # The list of sample_widgets must have the same number of objects as request.samples, - # but some of the objects can be None. Those that are not None correspond to samples - # selected by the user for performing an action on multiple samples simultaneously. - # The items in the sample_widgets list have already been populated with any changed - # param values (changed implies the value in kwd is different from the attribute value - # in the database) in kwd before this method is reached. - def handle_error(**kwd): - kwd['status'] = 'error' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - **kwd)) - for index, sample_widget in enumerate(sample_widgets): - if sample_widget is not None: - # sample_widget will be None if the user checked sample check boxes and selected an action - # to perform on multiple samples, but did not select certain samples. - sample = request.samples[index] - # Get the sample's form values to see if they have changed. - form_values = trans.sa_session.query(trans.model.FormValues).get(sample.values.id) - if sample.name != sample_widget['name'] or \ - sample.bar_code != sample_widget['bar_code'] or \ - sample.library != sample_widget['library'] or \ - sample.folder != sample_widget['folder'] or \ - sample.history != sample_widget['history'] or \ - sample.workflow != sample_widget['workflow_dict'] or \ - form_values.content != sample_widget['field_values']: - # Information about this sample has been changed. - sample.name = sample_widget['name'] - bar_code = sample_widget['bar_code'] - # If the sample has a new bar_code, make sure it is unique. - if bar_code: - bc_message = self.__validate_bar_code(trans, sample, bar_code) - if bc_message: - kwd['message'] = bc_message - del kwd['save_samples_button'] - handle_error(**kwd) - if not sample.bar_code: - # If the sample's associated SampleState is still the initial state - # configured by the admin for the request's RequestType, this must be - # the first time a bar code was added to the sample, so change its state - # to the next associated SampleState. - if sample.state.id == request.type.states[0].id: - # Change the sample state only if its request_type - # has at least 2 states - if len(request.type.states) >= 2: - next_sample_state = request.type.states[1] - else: - next_sample_state = request.type.states[0] - event = trans.model.SampleEvent(sample, - next_sample_state, - 'Bar code associated with the sample') - trans.sa_session.add(event) - trans.sa_session.flush() - # Next step is to update the request event history if bar codes - # have been assigned to all the samples of this request - common_state = request.samples_have_common_state - if request.is_submitted and common_state and len(request.type.states) >= 2: - comment = "All samples of this request are in the (%s) sample state. " % common_state.name - event = trans.model.RequestEvent(request, request.states.SUBMITTED, comment) - trans.sa_session.add(event) - trans.sa_session.flush() - request.send_email_notification(trans, next_sample_state) - - sample.bar_code = bar_code - sample.library = sample_widget['library'] - sample.folder = sample_widget['folder'] - sample.history = sample_widget['history'] - sample.workflow = sample_widget['workflow_dict'] - form_values.content = sample_widget['field_values'] - trans.sa_session.add_all((sample, form_values)) - trans.sa_session.flush() - - def __get_library_and_folder(self, trans, library_id, folder_id): - try: - library = trans.sa_session.query(trans.model.Library).get(trans.security.decode_id(library_id)) - except: - library = None - if library and folder_id == 'none': - folder = library.root_folder - elif library and folder_id != 'none': - try: - folder = trans.sa_session.query(trans.model.LibraryFolder).get(trans.security.decode_id(folder_id)) - except: - if library: - folder = library.root_folder - else: - folder = None - else: - folder = None - return library, folder - - def __get_history(self, trans, history_id): - try: - history = trans.sa_session.query(trans.model.History).get(trans.security.decode_id(history_id)) - return history - except: - return None - - def __get_workflow(self, trans, workflow_id): - try: - workflow = trans.sa_session.query(trans.model.Workflow).get(trans.security.decode_id(workflow_id)) - return workflow - except: - return None - - def __get_active_folders(self, folder, active_folders_list): - """Return all of the active folders for the received library""" - active_folders_list.extend(folder.active_folders) - for sub_folder in folder.active_folders: - self.__get_active_folders(sub_folder, active_folders_list) - return active_folders_list - - # ===== Methods for handling form definition widgets ===== - def __get_request_widgets(self, trans, id): - """Get the widgets for the request""" - request = trans.sa_session.query(trans.model.Request).get(id) - # The request_widgets list is a list of dictionaries - request_widgets = [] - for index, field in enumerate(request.type.request_form.fields): - field_value = request.values.content[field['name']] - if field['required']: - required_label = 'Required' - else: - required_label = 'Optional' - if field['type'] == 'AddressField': - if field_value: - request_widgets.append(dict(label=field['label'], - value=trans.sa_session.query(trans.model.UserAddress).get(int(field_value)).get_html(), - helptext=field['helptext'] + ' (' + required_label + ')')) - else: - request_widgets.append(dict(label=field['label'], - value=None, - helptext=field['helptext'] + ' (' + required_label + ')')) - else: - request_widgets.append(dict(label=field['label'], - value=field_value, - helptext=field['helptext'] + ' (' + required_label + ')')) - return request_widgets - - def __get_sample_widgets(self, trans, request, samples, **kwd): - """ - Returns a list of dictionaries, each representing the widgets that define a sample on a form. - The widgets are populated from kwd based on the set of samples received. The set of samples - corresponds to a request.samples list, but if the user checked specific check boxes on the form, - those samples that were not checked will have None objects in the list of samples. In this case, - the corresponding sample_widget is populated from the db rather than kwd. - """ - params = util.Params(kwd) - sample_operation = params.get('sample_operation', 'none') - sample_widgets = [] - if sample_operation != 'none': - # The sample_operatin param has a value other than 'none', and a specified - # set of samples was received. - library_id = util.restore_text(params.get('sample_operation_library_id', 'none')) - folder_id = util.restore_text(params.get('sample_operation_folder_id', 'none')) - # Build the list of widgets which will be used to render each sample row on the request page - if not request: - return sample_widgets - libraries = trans.app.security_agent.get_accessible_libraries(trans, request.user) - # Build the list if sample widgets, populating the values from kwd. - for index, sample in enumerate(samples): - if sample is None: - # Use the sample from the request object since it will not have updated values from kwd. - sample = request.samples[index] - sample_id = sample.id - name = sample.name - bar_code = sample.bar_code - library = sample.library - folder = sample.folder - history = sample.history - workflow = sample.workflow - field_values = sample.values.content - if not history: - history_id = 'none' - else: - history_id = history.id - if not workflow: - workflow_id = 'none' - else: - workflow_id = workflow.id - workflow_dict = sample.workflow - else: - # Update the sample attributes from kwd - sample_id = None - name = util.restore_text(params.get('sample_%i_name' % index, sample.name)) - bar_code = util.restore_text(params.get('sample_%i_bar_code' % index, sample.bar_code)) - library_id = util.restore_text(params.get('sample_%i_library_id' % index, '')) - if not library_id and sample.library: - library_id = trans.security.encode_id(sample.library.id) - folder_id = util.restore_text(params.get('sample_%i_folder_id' % index, '')) - if not folder_id and sample.folder: - folder_id = trans.security.encode_id(sample.folder.id) - library, folder = self.__get_library_and_folder(trans, library_id, folder_id) - history_id = util.restore_text(params.get('sample_%i_history_id' % index, '')) - if not history_id and sample.history: - history_id = trans.security.encode_id(sample.history.id) - history = self.__get_history(trans, history_id) - wf_tag = 'sample_%i_workflow_id' % index - workflow_id = util.restore_text(params.get(wf_tag, '')) - if not workflow_id and sample.workflow: - workflow_id = trans.security.encode_id(sample.workflow['id']) - workflow_dict = sample.workflow - workflow = self.__get_workflow(trans, workflow_id) - else: - workflow_dict = None - workflow = self.__get_workflow(trans, workflow_id) - if workflow: - workflow_dict = {'id': workflow.id, - 'name': workflow.name, - 'mappings': {}} - for k, v in kwd.iteritems(): - kwd_tag = "%s_" % wf_tag - if k.startswith(kwd_tag): - # DBTODO Don't need to store the whole mapping word in the dict, only the step. - workflow_dict['mappings'][int(k[len(kwd_tag):])] = {'ds_tag': v} - field_values = {} - for field_index, field in enumerate(request.type.sample_form.fields): - field_name = field['name'] - input_value = params.get('sample_%i_field_%i' % (index, field_index), sample.values.content[field_name]) - if field['type'] == CheckboxField.__name__: - field_value = CheckboxField.is_checked(input_value) - else: - field_value = util.restore_text(input_value) - field_values[field_name] = field_value - library_select_field, folder_select_field = self.__build_library_and_folder_select_fields(trans=trans, - user=request.user, - sample_index=index, - libraries=libraries, - sample=sample, - library_id=library_id, - folder_id=folder_id, - **kwd) - history_select_field = self.__build_history_select_field(trans=trans, - user=request.user, - sample_index=index, - sample=sample, - history_id=history_id, - **kwd) - workflow_select_field = self.__build_workflow_select_field(trans=trans, - user=request.user, - request=request, - sample_index=index, - sample=sample, - workflow_dict=workflow_dict, - history_id=history_id, - **kwd) - sample_widgets.append(dict(id=sample_id, - name=name, - bar_code=bar_code, - library=library, - folder=folder, - history=history, - workflow=workflow, - workflow_dict=workflow_dict, - field_values=field_values, - library_select_field=library_select_field, - folder_select_field=folder_select_field, - history_select_field=history_select_field, - workflow_select_field=workflow_select_field)) - # There may be additional new samples on the form that have not yet been associated with the request. - # TODO: factor this code so it is not duplicating what's above. - index = len(samples) - while True: - name = util.restore_text(params.get('sample_%i_name' % index, '')) - if not name: - break - bar_code = util.restore_text(params.get('sample_%i_bar_code' % index, '')) - library_id = util.restore_text(params.get('sample_%i_library_id' % index, '')) - folder_id = util.restore_text(params.get('sample_%i_folder_id' % index, '')) - library, folder = self.__get_library_and_folder(trans, library_id, folder_id) - history_id = util.restore_text(params.get('sample_%i_history_id' % index, '')) - if not history_id and sample.history: - history_id = trans.security.encode_id(sample.history.id) - history = self.__get_history(trans, history_id) - wf_tag = 'sample_%i_workflow_id' % index - workflow_id = util.restore_text(params.get(wf_tag, '')) - if not workflow_id and sample.workflow: - workflow_id = trans.security.encode_id(sample.workflow['id']) - workflow_dict = sample.workflow - workflow = self.__get_workflow(trans, workflow_id) - else: - workflow_dict = None - workflow = self.__get_workflow(trans, workflow_id) - if workflow: - workflow_dict = {'id': workflow.id, - 'name': workflow.name, - 'mappings': {}} - for k, v in kwd.iteritems(): - kwd_tag = "%s_" % wf_tag - if k.startswith(kwd_tag): - # DBTODO Change the key to include the dataset tag, not just the names. - workflow_dict['mappings'][int(k[len(kwd_tag):])] = {'ds_tag': v} - field_values = {} - for field_index, field in enumerate(request.type.sample_form.fields): - field_name = field['name'] - input_value = params.get('sample_%i_field_%i' % (index, field_index), '') - if field['type'] == CheckboxField.__name__: - field_value = CheckboxField.is_checked(input_value) - else: - field_value = util.restore_text(input_value) - field_values[field_name] = field_value - library_select_field, folder_select_field = self.__build_library_and_folder_select_fields(trans=trans, - user=request.user, - sample_index=index, - libraries=libraries, - sample=None, - library_id=library_id, - folder_id=folder_id, - **kwd) - history_select_field = self.__build_history_select_field(trans=trans, - user=request.user, - sample_index=index, - sample=None, - history_id=history_id, - **kwd) - - workflow_select_field = self.__build_workflow_select_field(trans=trans, - user=request.user, - request=request, - sample_index=index, - sample=None, - workflow_dict=workflow_dict, - history_id=history_id, - **kwd) - sample_widgets.append(dict(id=None, - name=name, - bar_code=bar_code, - library=library, - folder=folder, - field_values=field_values, - history=history, - workflow=workflow, - workflow_dict=workflow_dict, - history_select_field=history_select_field, - workflow_select_field=workflow_select_field, - library_select_field=library_select_field, - folder_select_field=folder_select_field)) - index += 1 - return sample_widgets - - # ===== Methods for building SelectFields used on various request forms ===== - def __build_copy_sample_select_field(self, trans, displayable_sample_widgets): - copy_sample_index_select_field = SelectField('copy_sample_index') - copy_sample_index_select_field.add_option('None', -1, selected=True) - for index, sample_dict in enumerate(displayable_sample_widgets): - copy_sample_index_select_field.add_option(sample_dict['name'], index) - return copy_sample_index_select_field - - def __build_request_type_id_select_field(self, trans, selected_value='none'): - accessible_request_types = trans.app.security_agent.get_accessible_request_types(trans, trans.user) - return build_select_field(trans, accessible_request_types, 'name', 'request_type_id', selected_value=selected_value, refresh_on_change=True) - - def __build_user_id_select_field(self, trans, selected_value='none'): - active_users = trans.sa_session.query(trans.model.User) \ - .filter(trans.model.User.table.c.deleted == false()) \ - .order_by(trans.model.User.email.asc()) - # A refresh_on_change is required so the user's set of addresses can be displayed. - return build_select_field(trans, active_users, 'email', 'user_id', selected_value=selected_value, refresh_on_change=True) - - def __build_sample_operation_select_field(self, trans, is_admin, request, selected_value): - # The sample_operation SelectField is displayed only after the request has been submitted. - # its label is "For selected samples" - if is_admin: - if request.is_complete: - bulk_operations = [trans.model.Sample.bulk_operations.CHANGE_STATE] - if request.is_rejected: - bulk_operations = [trans.model.Sample.bulk_operations.SELECT_LIBRARY] - else: - bulk_operations = [s for i, s in trans.model.Sample.bulk_operations.items()] - else: - if request.is_complete: - bulk_operations = [] - else: - bulk_operations = [trans.model.Sample.bulk_operations.SELECT_LIBRARY] - return build_select_field(trans, bulk_operations, 'self', 'sample_operation', selected_value=selected_value, refresh_on_change=True) - - def __build_library_and_folder_select_fields(self, trans, user, sample_index, libraries, sample=None, library_id=None, folder_id=None, **kwd): - # Create the library_id SelectField for a specific sample. The received libraries param is a list of all the libraries - # accessible to the current user, and we add them as options to the library_select_field. If the user has selected an - # existing library then display all the folders of the selected library in the folder_select_field. Library folders do - # not have ACCESS permissions associated with them (only LIBRARY_ADD, LIBRARY_MODIFY, LIBRARY_MANAGE), so all folders will - # be present in the folder_select_field for each library selected. - params = util.Params(kwd) - if sample_index == 'sample_operation': - # build the library selection widget for the bulk sample operation - library_select_field_name = "sample_operation_library_id" - folder_select_field_name = "sample_operation_folder_id" - else: - library_select_field_name = "sample_%i_library_id" % sample_index - folder_select_field_name = "sample_%i_folder_id" % sample_index - if not library_id: - library_id = params.get(library_select_field_name, None) - if not folder_id: - folder_id = params.get(folder_select_field_name, None) - selected_library = None - if library_id not in [None, 'none']: - for library in libraries: - encoded_id = trans.security.encode_id(library.id) - if encoded_id == str(library_id): - selected_library = library - break - elif sample and sample.library and library_id == 'none': - # The user previously selected a library but is now resetting the selection to 'none' - selected_library = None - elif sample and sample.library: - library_id = trans.security.encode_id(sample.library.id) - selected_library = sample.library - # Build the sample_%i_library_id SelectField with refresh on change enabled - library_select_field = build_select_field(trans, - libraries, - 'name', - library_select_field_name, - initial_value='none', - selected_value=str(library_id).lower(), - refresh_on_change=True) - # Get all folders for the selected library, if one is indeed selected - if selected_library: - folders = self.__get_active_folders(selected_library.root_folder, active_folders_list=[selected_library.root_folder]) - if folder_id: - selected_folder_id = folder_id - elif sample and sample.folder: - selected_folder_id = trans.security.encode_id(sample.folder.id) - else: - selected_folder_id = trans.security.encode_id(selected_library.root_folder.id) - else: - selected_folder_id = 'none' - folders = [] - # Change the name of the library root folder to clarify that it is the root - for folder in folders: - if not folder.parent: - folder.name = 'Data library root' - break - folder_select_field = build_select_field(trans, - folders, - 'name', - folder_select_field_name, - initial_value='none', - selected_value=selected_folder_id) - return library_select_field, folder_select_field - - def __build_history_select_field(self, trans, user, sample_index, sample=None, history_id=None, **kwd): - params = util.Params(kwd) - history_select_field_name = "sample_%i_history_id" % sample_index - if not history_id: - history_id = params.get(history_select_field_name, None) - if history_id not in [None, 'none', 'new']: - for history in user.histories: - if not history.deleted: - encoded_id = trans.security.encode_id(history.id) - if encoded_id == str(history_id): - break - elif sample and sample.history and history_id == 'none' or history_id == 'new': - # The user previously selected a history but is now resetting the selection to 'none' - pass - elif sample and sample.history: - history_id = trans.security.encode_id(sample.history.id) - # Build the sample_%i_history_id SelectField with refresh on change disabled - hsf = build_select_field(trans, - [h for h in user.histories if not h.deleted], - 'name', - history_select_field_name, - initial_value='none', - selected_value=str(history_id).lower(), - refresh_on_change=True) - # This is ugly, but allows for an explicit "New History", while still using build_select_field. - # hsf.options = hsf.options[:1] + [( "Create a New History", 'new', 'new'==str( history_id ).lower() )] + hsf.options[1:] - hsf.options = [("Select one", 'none', 'none' == str(history_id).lower())] + hsf.options[1:] - return hsf - - def __build_workflow_select_field(self, trans, user, request, sample_index, sample=None, workflow_id=None, workflow_dict=None, history_id=None, **kwd): - params = util.Params(kwd) - workflow_select_field_name = "sample_%i_workflow_id" % sample_index - selected_workflow = None - if not workflow_id: - workflow_id = params.get(workflow_select_field_name, None) - if workflow_id not in [None, 'none']: - selected_workflow = trans.sa_session.query(trans.model.Workflow).get(trans.security.decode_id(workflow_id)) - elif sample and sample.workflow and workflow_id == 'none': - selected_workflow = None - elif sample and sample.workflow: - workflow_id = sample.workflow['id'] - selected_workflow = trans.sa_session.query(trans.model.Workflow).get(sample.workflow['id']) - s_list = [w.latest_workflow for w in user.stored_workflows if not w.deleted] - if selected_workflow and selected_workflow not in s_list: - s_list.append(selected_workflow) - workflow_select_field = build_select_field(trans, - s_list, - 'name', - workflow_select_field_name, - initial_value='none', - selected_value=str(workflow_id).lower(), - refresh_on_change=True) - workflow_select_field.options = [("Select one", 'none', 'none' == str(workflow_id).lower())] + workflow_select_field.options[1:] - wf_fieldset = [workflow_select_field] - if selected_workflow and request.type.external_services: - # DBTODO This will work for now, but should be handled more rigorously. - ds_list = [] - external_service = request.type.external_services[0] - dataset_name_re = re.compile('(dataset\d+)_(name)') - for k, v in external_service.form_values.content.items(): - match = dataset_name_re.match(k) - if match: - ds_list.append(("ds|%s" % k[:-5], v)) - if history_id not in [None, 'none', 'new', '']: - hist = trans.sa_session.query(trans.model.History).get(trans.security.decode_id(history_id)) - h_inputs = [("hi|%s" % trans.security.encode_id(ds.id), ds.name) for ds in hist.datasets if not ds.deleted] - ds_list += h_inputs - for step in selected_workflow.steps: - if step.type == 'data_input': - if step.tool_inputs and "name" in step.tool_inputs: - sf_name = '%s_%s' % (workflow_select_field_name, step.id) - select_field = SelectField(name=sf_name) - sf = params.get(sf_name, None) - if not sf and sample and sample.workflow: - if str(step.id) in sample.workflow['mappings']: - sf = sample.workflow['mappings'][str(step.id)]['ds_tag'] - for value, label in ds_list: - if value == sf: - select_field.add_option(label, value, selected=True) - else: - select_field.add_option(label, value) - wf_fieldset.append((step.tool_inputs['name'], select_field)) - return wf_fieldset - - def __build_sample_state_id_select_field(self, trans, request, selected_value): - if selected_value == 'none': - if request.samples: - selected_value = trans.security.encode_id(request.samples[0].state.id) - else: - selected_value = trans.security.encode_id(request.type.states[0].id) - return build_select_field(trans, - objs=request.type.states, - label_attr='name', - select_field_name='sample_state_id', - selected_value=selected_value, - refresh_on_change=False) - - # ===== Methods for validation forms and fields ===== - def __validate_request(self, trans, cntrller, request): - """Validates the request entered by the user""" - # TODO: Add checks for required sample fields here. - empty_fields = [] - # Make sure required form fields are filled in. - for index, field in enumerate(request.type.request_form.fields): - if field['required'] == 'required' and request.values.content[field['name']] in ['', None]: - empty_fields.append(field['label']) - empty_sample_fields = [] - for s in request.samples: - for field in request.type.sample_form.fields: - log.debug("field: %s", field) - log.debug("svc: %s", s.values.content) - if field['required'] == 'required' and s.values.content[field['name']] in ['', None]: - empty_sample_fields.append((s.name, field['label'])) - if empty_fields or empty_sample_fields: - message = 'Complete the following fields of the request before submitting:
    ' - if empty_fields: - for ef in empty_fields: - message += '%s
    ' % ef - if empty_sample_fields: - for sname, ef in empty_sample_fields: - message = message + '%s field of sample %s
    ' % (ef, sname) - return message - return None - - def __validate_sample_names(self, trans, cntrller, request, displayable_sample_widgets, **kwd): - # Check for duplicate sample names for all samples of the request. - message = '' - for index in range(len(displayable_sample_widgets) - len(request.samples)): - sample_index = index + len(request.samples) - sample_widget = displayable_sample_widgets[sample_index] - sample_name = sample_widget['name'] - if not sample_name.strip(): - message = 'Enter the name of sample number %i' % sample_index - break - count = 0 - for i in range(len(displayable_sample_widgets)): - if sample_name == displayable_sample_widgets[i]['name']: - count += 1 - if count > 1: - message = "You tried to add %i samples with the name (%s). Samples belonging to a request must have unique names." % (count, sample_name) - break - if message: - del kwd['save_samples_button'] - kwd['message'] = message - kwd['status'] = 'error' - return trans.response.send_redirect(web.url_for(controller='requests_common', - action='edit_samples', - cntrller=cntrller, - **kwd)) - - def __validate_bar_code(self, trans, sample, bar_code): - """ - Make sure that the bar_code about to be assigned to a sample is globally unique. - That is, bar_codes must be unique across requests in Galaxy sample tracking. - Bar codes are not required, but if used, they can only be added to a sample after - the request is submitted. - """ - message = '' - unique = True - for index in range(len(sample.request.samples)): - # TODO: Add a unique constraint to sample.bar_code table column - # Make sure bar code is unique - for sample_with_bar_code in trans.sa_session.query(trans.model.Sample) \ - .filter(trans.model.Sample.table.c.bar_code == bar_code): - if sample_with_bar_code and sample_with_bar_code.id != sample.id: - message = '''The bar code (%s) associated with the sample (%s) belongs to another sample. - Bar codes must be unique across all samples, so use a different bar code - for this sample.''' % (bar_code, sample.name) - unique = False - break - if not unique: - break - return message - - # ===== Other miscellaneous utility methods ===== - def __get_encoded_selected_sample_ids(self, trans, request, **kwd): - encoded_selected_sample_ids = [] - for sample in request.samples: - if CheckboxField.is_checked(kwd.get('select_sample_%i' % sample.id, '')): - encoded_selected_sample_ids.append(trans.security.encode_id(sample.id)) - return encoded_selected_sample_ids - - -# ===== Miscellaneous utility methods outside of the RequestsCommon class ===== -def invalid_id_redirect(trans, cntrller, obj_id, item='sequencing request', action='browse_requests'): - status = 'error' - message = "Invalid %s id (%s)" % (item, str(obj_id)) - return trans.response.send_redirect(web.url_for(controller=cntrller, - action=action, - status=status, - message=message)) diff --git a/lib/galaxy/webapps/galaxy/controllers/root.py b/lib/galaxy/webapps/galaxy/controllers/root.py index 7cf6ae4689e..660f081d535 100644 --- a/lib/galaxy/webapps/galaxy/controllers/root.py +++ b/lib/galaxy/webapps/galaxy/controllers/root.py @@ -4,20 +4,28 @@ Contains the main interface in the Universe class from __future__ import absolute_import import cgi +import logging import os import requests -from paste.httpexceptions import HTTPNotFound, HTTPBadGateway +from paste.httpexceptions import ( + HTTPBadGateway, + HTTPNotFound +) -from galaxy import web -from galaxy import util -from galaxy.util import listify, string_as_bool, FILENAME_VALID_CHARS - -from galaxy.web.base import controller +from galaxy import ( + managers, + util, + web +) from galaxy.model.item_attrs import UsesAnnotations -from galaxy import managers +from galaxy.util import ( + FILENAME_VALID_CHARS, + listify, + string_as_bool +) +from galaxy.web.base import controller -import logging log = logging.getLogger(__name__) @@ -183,7 +191,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): if hid is not None: try: hid = int(hid) - except: + except ValueError: return "hid '%s' is invalid" % str(hid) history = trans.get_history() for dataset in history.datasets: @@ -197,7 +205,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): id = self.decode_id(encoded_id) try: data = trans.sa_session.query(self.app.model.HistoryDatasetAssociation).get(id) - except: + except Exception: return "Dataset id '%s' is invalid" % str(id) if data: current_user_roles = trans.get_current_user_roles() @@ -214,7 +222,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): trans.log_event("Display dataset id: %s" % str(id)) try: return open(data.file_name) - except: + except Exception: return "This dataset contains no content" else: return "You are not allowed to access this dataset" @@ -303,7 +311,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): association = trans.sa_session.query(trans.app.model.GalaxySessionToHistoryAssociation) \ .filter_by(session_id=galaxy_session.id, history_id=new_history.id) \ .first() - except: + except Exception: association = None new_history.add_galaxy_session(galaxy_session, association=association) trans.sa_session.add(new_history) @@ -323,7 +331,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): association = trans.sa_session.query(trans.app.model.GalaxySessionToHistoryAssociation) \ .filter_by(session_id=galaxy_session.id, history_id=new_history.id) \ .first() - except: + except Exception: association = None new_history.add_galaxy_session(galaxy_session, association=association) trans.sa_session.add(new_history) @@ -405,7 +413,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): trans.sa_session.add(new_data) trans.sa_session.flush() return trans.show_message("

    Secondary dataset has been made primary.

    ", refresh_frames=['history']) - except: + except Exception: return trans.show_error_message("

    Failed to make secondary dataset primary.

    ") @web.expose @@ -451,7 +459,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): rval[k] = string_as_bool(rval[k]) rval[k] = float(rval[k]) rval[k] = int(rval[k]) - except: + except Exception: pass return rval @@ -468,7 +476,7 @@ class RootController(controller.JSAppLauncher, UsesAnnotations): """ try: code = int(code) - except Exception: + except ValueError: code = 500 if code == 502: diff --git a/lib/galaxy/webapps/galaxy/controllers/tool_runner.py b/lib/galaxy/webapps/galaxy/controllers/tool_runner.py index 08ccd536953..5b88b017a18 100644 --- a/lib/galaxy/webapps/galaxy/controllers/tool_runner.py +++ b/lib/galaxy/webapps/galaxy/controllers/tool_runner.py @@ -94,11 +94,11 @@ class ToolRunner(BaseUIController): error("'id' parameter is required") try: id = int(id) - except: + except ValueError: # it's not an un-encoded id, try to parse as encoded try: id = trans.security.decode_id(id) - except: + except Exception: error("Invalid value for 'id' parameter") # Get the dataset object data = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(id) diff --git a/lib/galaxy/webapps/galaxy/controllers/visualization.py b/lib/galaxy/webapps/galaxy/controllers/visualization.py index 05effb3de37..924d63371f1 100644 --- a/lib/galaxy/webapps/galaxy/controllers/visualization.py +++ b/lib/galaxy/webapps/galaxy/controllers/visualization.py @@ -72,7 +72,8 @@ class HistoryDatasetsSelectionGrid(grids.Grid): def apply_query_filter(self, trans, query, **kwargs): if self.available_tracks is None: self.available_tracks = trans.app.datatypes_registry.get_available_tracks() - return query.filter(model.HistoryDatasetAssociation.extension.in_(self.available_tracks)) \ + return query.filter(model.History.user == trans.user) \ + .filter(model.HistoryDatasetAssociation.extension.in_(self.available_tracks)) \ .filter(model.Dataset.state == model.Dataset.states.OK) \ .filter(model.HistoryDatasetAssociation.deleted == false()) \ .filter(model.HistoryDatasetAssociation.visible == true()) @@ -100,7 +101,8 @@ class LibraryDatasetsSelectionGrid(grids.Grid): def apply_query_filter(self, trans, query, **kwargs): if self.available_tracks is None: self.available_tracks = trans.app.datatypes_registry.get_available_tracks() - return query.filter(model.LibraryDatasetDatasetAssociation.extension.in_(self.available_tracks)) \ + return query.filter(model.LibraryDatasetDatasetAssociation.user == trans.user) \ + .filter(model.LibraryDatasetDatasetAssociation.extension.in_(self.available_tracks)) \ .filter(model.Dataset.state == model.Dataset.states.OK) \ .filter(model.LibraryDatasetDatasetAssociation.deleted == false()) \ .filter(model.LibraryDatasetDatasetAssociation.visible == true()) diff --git a/lib/galaxy/webapps/reports/buildapp.py b/lib/galaxy/webapps/reports/buildapp.py index 743c14f63e8..40e92c2a00d 100644 --- a/lib/galaxy/webapps/reports/buildapp.py +++ b/lib/galaxy/webapps/reports/buildapp.py @@ -1,26 +1,24 @@ """ Provides factory methods to assemble the Galaxy web application """ - -import logging import atexit +import logging import os - from inspect import isclass from paste import httpexceptions -from galaxy.util import asbool -from galaxy.webapps.util import ( - MiddlewareWrapUnsupported, - build_template_error_formatters, - wrap_if_allowed, - wrap_if_allowed_or_fail -) import galaxy.model import galaxy.model.mapping import galaxy.web.framework.webapp +from galaxy.util import asbool from galaxy.util.properties import load_app_properties +from galaxy.webapps.util import ( + build_template_error_formatters, + MiddlewareWrapUnsupported, + wrap_if_allowed, + wrap_if_allowed_or_fail +) log = logging.getLogger(__name__) @@ -81,7 +79,7 @@ def app_factory(global_conf, load_app_kwds={}, **kwargs): # Close any pooled database connections before forking try: galaxy.model.mapping.metadata.bind.dispose() - except: + except Exception: log.exception("Unable to dispose of pooled galaxy model database connections.") # Return return webapp diff --git a/lib/galaxy/webapps/reports/controllers/system.py b/lib/galaxy/webapps/reports/controllers/system.py index 5c325c2239e..246aac7d199 100644 --- a/lib/galaxy/webapps/reports/controllers/system.py +++ b/lib/galaxy/webapps/reports/controllers/system.py @@ -7,8 +7,8 @@ from decimal import Decimal from sqlalchemy import and_, desc, false, null, true from sqlalchemy.orm import eagerload -from galaxy.web.base.controller import BaseUIController, web from galaxy import model, util +from galaxy.web.base.controller import BaseUIController, web log = logging.getLogger(__name__) @@ -96,7 +96,7 @@ class System(BaseUIController): dataset_count += 1 try: disk_space += hda.dataset.file_size - except: + except Exception: pass history_count += 1 message = "%d histories ( including a total of %d datasets ) were deleted more than %d days ago, but have not yet been purged, " \ @@ -121,7 +121,7 @@ class System(BaseUIController): dataset_count += 1 try: disk_space += dataset.file_size - except: + except Exception: pass message = "%d datasets were deleted more than %d days ago, but have not yet been purged," \ " disk space: %s." % (dataset_count, deleted_datasets_days, nice_size(disk_space, True)) @@ -166,13 +166,13 @@ class System(BaseUIController): try: disk_size, disk_used, disk_avail, disk_cap_pct, file_system = df_line.split() break - except: + except Exception: pass else: try: file_system, disk_size, disk_used, disk_avail, disk_cap_pct, mount = df_line.split() break - except: + except Exception: pass else: break # EOF @@ -208,6 +208,6 @@ def nice_size(size, include_bytes=False): niced = True if include_bytes and x != 'bytes': nice_string = "%s (%s bytes)" % (nice_string, size) - except: + except Exception: pass return nice_string diff --git a/lib/galaxy/webapps/tool_shed/buildapp.py b/lib/galaxy/webapps/tool_shed/buildapp.py index 1dd9dcf8f95..0477cb7e5ee 100644 --- a/lib/galaxy/webapps/tool_shed/buildapp.py +++ b/lib/galaxy/webapps/tool_shed/buildapp.py @@ -4,25 +4,25 @@ Provides factory methods to assemble the Galaxy web application import atexit import logging import os -import routes - -from six.moves.urllib.parse import parse_qs from inspect import isclass -from paste import httpexceptions -from galaxy.util import asbool +import routes +from paste import httpexceptions +from routes.middleware import RoutesMiddleware +from six.moves.urllib.parse import parse_qs + +import galaxy.web.framework.webapp import galaxy.webapps.tool_shed.model import galaxy.webapps.tool_shed.model.mapping -import galaxy.web.framework.webapp +from galaxy import util +from galaxy.util import asbool +from galaxy.util.properties import load_app_properties from galaxy.webapps.util import ( - MiddlewareWrapUnsupported, build_template_error_formatters, + MiddlewareWrapUnsupported, wrap_if_allowed, wrap_if_allowed_or_fail ) -from galaxy import util -from galaxy.util.properties import load_app_properties -from routes.middleware import RoutesMiddleware log = logging.getLogger(__name__) @@ -67,7 +67,7 @@ def app_factory(global_conf, load_app_kwds={}, **kwargs): try: from galaxy.webapps.tool_shed.app import UniverseApplication app = UniverseApplication(global_conf=global_conf, **kwargs) - except: + except Exception: import traceback import sys traceback.print_exc() @@ -204,7 +204,7 @@ def app_factory(global_conf, load_app_kwds={}, **kwargs): # Close any pooled database connections before forking try: galaxy.webapps.tool_shed.model.mapping.metadata.bind.dispose() - except: + except Exception: log.exception("Unable to dispose of pooled tool_shed model database connections.") # Return return webapp diff --git a/lib/galaxy/webapps/tool_shed/controllers/repository.py b/lib/galaxy/webapps/tool_shed/controllers/repository.py index c3736c43f77..e2ae53f3525 100644 --- a/lib/galaxy/webapps/tool_shed/controllers/repository.py +++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py @@ -5,16 +5,19 @@ import string import tempfile from datetime import date -from mercurial import mdiff -from mercurial import patch +from mercurial import ( + mdiff, + patch +) from sqlalchemy import and_, false, null import tool_shed.grids.repository_grids as repository_grids import tool_shed.grids.util as grids_util import tool_shed.repository_types.util as rt_util - -from galaxy import util -from galaxy import web +from galaxy import ( + util, + web +) from galaxy.web.base.controller import BaseUIController from galaxy.web.form_builder import CheckboxField from galaxy.web.framework.helpers import grids @@ -23,19 +26,23 @@ from tool_shed.capsule import capsule_manager from tool_shed.dependencies.repository import relation_builder from tool_shed.galaxy_install import dependency_display from tool_shed.metadata import repository_metadata_manager -from tool_shed.tools import tool_validator -from tool_shed.tools import tool_version_manager -from tool_shed.util import basic_util -from tool_shed.util import common_util -from tool_shed.util import encoding_util -from tool_shed.util import hg_util -from tool_shed.util import metadata_util -from tool_shed.util import readme_util -from tool_shed.util import repository_util -from tool_shed.util import search_util -from tool_shed.util import shed_util_common as suc -from tool_shed.util import tool_util -from tool_shed.util import workflow_util +from tool_shed.tools import ( + tool_validator, + tool_version_manager +) +from tool_shed.util import ( + basic_util, + common_util, + encoding_util, + hg_util, + metadata_util, + readme_util, + repository_util, + search_util, + shed_util_common as suc, + tool_util, + workflow_util +) from tool_shed.util.web_util import escape from tool_shed.utility_containers import ToolShedUtilityContainerManager @@ -103,7 +110,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): repository_name = kwd['id'] repository = repository_util.get_repository_by_name(trans.app, repository_name) kwd['id'] = trans.security.encode_id(repository.id) - except: + except Exception: pass return trans.response.send_redirect(web.url_for(controller='repository', action='browse_repositories', @@ -507,7 +514,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): name = kwd['id'] repository = repository_util.get_repository_by_name(trans.app, name) kwd['id'] = trans.security.encode_id(repository.id) - except: + except Exception: pass return self.browse_valid_repositories(trans, **kwd) if 'operation' in kwd: @@ -2519,7 +2526,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): """Support for sharable URL for each repository owner's tools, e.g. http://example.org/view/owner.""" try: user = common_util.get_user_by_username(trans, owner) - except: + except Exception: user = None if user: user_id = trans.security.encode_id(user.id) @@ -2535,7 +2542,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): """Support for sharable URL for a specified repository, e.g. http://example.org/view/owner/name.""" try: repository = repository_util.get_repository_by_name_and_owner(trans.app, name, owner) - except: + except Exception: repository = None if repository: repository_id = trans.security.encode_id(repository.id) @@ -2546,7 +2553,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): # If the owner is valid, then show all of their repositories. try: user = common_util.get_user_by_username(trans, owner) - except: + except Exception: user = None if user: user_id = trans.security.encode_id(user.id) @@ -2565,7 +2572,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): """Support for sharable URL for a specified repository revision, e.g. http://example.org/view/owner/name/changeset_revision.""" try: repository = repository_util.get_repository_by_name_and_owner(trans.app, name, owner) - except: + except Exception: repository = None if repository: repository_id = trans.security.encode_id(repository.id) diff --git a/lib/galaxy/webapps/tool_shed/model/migrate/check.py b/lib/galaxy/webapps/tool_shed/model/migrate/check.py index e6cc7cf5bcc..95780f995df 100644 --- a/lib/galaxy/webapps/tool_shed/model/migrate/check.py +++ b/lib/galaxy/webapps/tool_shed/model/migrate/check.py @@ -39,7 +39,7 @@ def create_or_verify_database(url, engine_options={}): try: # Declare the database to be under a repository's version control db_schema = schema.ControlledSchema.create(engine, migrate_repository) - except: + except Exception: # The database is already under version control db_schema = schema.ControlledSchema(engine, migrate_repository) # Apply all scripts to get to current version diff --git a/lib/galaxy_ext/metadata/set_metadata.py b/lib/galaxy_ext/metadata/set_metadata.py index d4573bff2dc..d1236020456 100644 --- a/lib/galaxy_ext/metadata/set_metadata.py +++ b/lib/galaxy_ext/metadata/set_metadata.py @@ -107,7 +107,7 @@ def set_metadata(): existing_job_metadata_dict[line['dataset_id']] = line elif line['type'] == 'new_primary_dataset': new_job_metadata_dict[line['filename']] = line - except: + except Exception: continue for filenames in sys.argv[1:]: diff --git a/lib/psyco_full.py b/lib/psyco_full.py index 7b648de06a0..f18ba8e0758 100644 --- a/lib/psyco_full.py +++ b/lib/psyco_full.py @@ -1,5 +1,5 @@ try: import psyco psyco.full() -except: +except Exception: pass diff --git a/lib/tool_shed/galaxy_install/metadata/installed_repository_metadata_manager.py b/lib/tool_shed/galaxy_install/metadata/installed_repository_metadata_manager.py index 4b35c2e77f2..fc2f50dc0a9 100644 --- a/lib/tool_shed/galaxy_install/metadata/installed_repository_metadata_manager.py +++ b/lib/tool_shed/galaxy_install/metadata/installed_repository_metadata_manager.py @@ -125,7 +125,7 @@ class InstalledRepositoryMetadataManager(metadata_generator.MetadataGenerator): log.debug("Successfully reset metadata on repository %s owned by %s" % (str(repository.name), str(repository.owner))) successful_count += 1 - except: + except Exception: log.exception("Error attempting to reset metadata on repository %s", str(repository.name)) unsuccessful_count += 1 message = "Successfully reset metadata on %d %s. " % \ diff --git a/lib/tool_shed/galaxy_install/repository_dependencies/repository_dependency_manager.py b/lib/tool_shed/galaxy_install/repository_dependencies/repository_dependency_manager.py index a86e85db326..ba1b606b664 100644 --- a/lib/tool_shed/galaxy_install/repository_dependencies/repository_dependency_manager.py +++ b/lib/tool_shed/galaxy_install/repository_dependencies/repository_dependency_manager.py @@ -6,7 +6,7 @@ import json import logging import os -from six.moves.urllib.parse import urlencode +from six.moves.urllib.parse import urlencode, urlparse from six.moves.urllib.request import Request, urlopen from galaxy.util import asbool, build_url, url_get @@ -354,7 +354,7 @@ class RepositoryDependencyInstallManager(object): for components_list in val: try: only_if_compiling_contained_td = components_list[5] - except: + except IndexError: only_if_compiling_contained_td = 'False' # Skip listing a repository dependency if it is required only to compile a tool dependency # defined for the dependent repository (see above comment). @@ -380,9 +380,8 @@ class RepositoryDependencyInstallManager(object): pathspec = ['repository', 'get_required_repo_info_dict'] url = build_url(tool_shed_url, pathspec=pathspec) # Fix for handling 307 redirect not being handled nicely by urlopen() when the Request() has data provided - url = urlopen(Request(url)).geturl() - request = Request(url, data=urlencode(dict(encoded_str=encoded_required_repository_str))) - response = urlopen(request).read() + url = _urlopen(url).geturl() + response = _urlopen(url, urlencode(dict(encoded_str=encoded_required_repository_str))).read() if response: try: required_repo_info_dict = json.loads(response) @@ -469,3 +468,9 @@ class RepositoryDependencyInstallManager(object): repository.error_message = None self.app.install_model.context.add(repository) self.app.install_model.context.flush() + + +def _urlopen(url, data=None): + scheme = urlparse(url).scheme + assert scheme in ('http', 'https', 'ftp'), 'Invalid URL scheme: %s' % scheme + return urlopen(Request(url, data)) diff --git a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py index ceb271b06ae..196a0178607 100644 --- a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py +++ b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/step_handler.py @@ -1766,7 +1766,7 @@ class SetupVirtualEnv(Download, RecipeStep): downloaded_filename = VIRTUALENV_URL.rsplit('/', 1)[-1] try: dir = self.url_download(work_dir, downloaded_filename, VIRTUALENV_URL) - except: + except Exception: log.error("Failed to download virtualenv: url_download( '%s', '%s', '%s' ) threw an exception", work_dir, downloaded_filename, VIRTUALENV_URL) return False diff --git a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/tag_handler.py b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/tag_handler.py index f4734b7240e..3cfed4fdce2 100644 --- a/lib/tool_shed/galaxy_install/tool_dependencies/recipe/tag_handler.py +++ b/lib/tool_shed/galaxy_install/tool_dependencies/recipe/tag_handler.py @@ -44,7 +44,7 @@ class SyncDatabase(object): try: log.debug("The value of app.config.running_functional_tests is: %s" % str(app.config.running_functional_tests)) - except: + except Exception: pass sa_session = app.install_model.context can_install_tool_dependency = False @@ -497,7 +497,7 @@ class Repository(RecipeTag, SyncDatabase): if os.path.exists(file_name): try: os.remove(file_name) - except: + except Exception: pass diff --git a/lib/tool_shed/grids/util.py b/lib/tool_shed/grids/util.py index d4e97fe2e73..810a0ab42b9 100644 --- a/lib/tool_shed/grids/util.py +++ b/lib/tool_shed/grids/util.py @@ -122,7 +122,7 @@ def get_latest_downloadable_repository_metadata(trans, repository): if repository_metadata is not None and repository_metadata.downloadable: return repository_metadata return None - except: + except Exception: latest_downloadable_revision = metadata_util.get_previous_metadata_changeset_revision(repository, repo, tip_ctx, @@ -161,7 +161,7 @@ def get_latest_repository_metadata(trans, repository): try: repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app, encoded_repository_id, tip_ctx) return repository_metadata - except: + except Exception: latest_downloadable_revision = metadata_util.get_previous_metadata_changeset_revision(repository, repo, tip_ctx, diff --git a/lib/tool_shed/managers/groups.py b/lib/tool_shed/managers/groups.py index f590850aeed..117a192169a 100644 --- a/lib/tool_shed/managers/groups.py +++ b/lib/tool_shed/managers/groups.py @@ -56,7 +56,7 @@ class GroupManager(object): """ Create a new group. """ - if not trans.user_is_admin: + if not trans.user_is_admin(): raise ItemAccessibilityException('Only administrators can create groups.') else: if self.get(trans, name=name): diff --git a/lib/tool_shed/metadata/metadata_generator.py b/lib/tool_shed/metadata/metadata_generator.py index 42954a4ea36..f6df6e9c7be 100644 --- a/lib/tool_shed/metadata/metadata_generator.py +++ b/lib/tool_shed/metadata/metadata_generator.py @@ -965,7 +965,7 @@ class MetadataGenerator(object): .filter(and_(self.app.model.Repository.table.c.name == name, self.app.model.Repository.table.c.user_id == user.id)) \ .one() - except: + except Exception: error_message = "Ignoring repository dependency definition for tool shed %s, name %s, owner %s, " % \ (toolshed, name, owner) error_message += "changeset revision %s because the name is invalid. " % changeset_revision diff --git a/lib/tool_shed/metadata/repository_metadata_manager.py b/lib/tool_shed/metadata/repository_metadata_manager.py index e35729c98bf..fb8c60a4f31 100644 --- a/lib/tool_shed/metadata/repository_metadata_manager.py +++ b/lib/tool_shed/metadata/repository_metadata_manager.py @@ -884,7 +884,7 @@ class RepositoryMetadataManager(metadata_generator.MetadataGenerator): log.debug("Successfully reset metadata on repository %s owned by %s" % (str(repository.name), str(repository.user.username))) successful_count += 1 - except: + except Exception: log.exception("Error attempting to reset metadata on repository %s", str(repository.name)) unsuccessful_count += 1 message = "Successfully reset metadata on %d %s. " % \ diff --git a/lib/tool_shed/tools/tool_validator.py b/lib/tool_shed/tools/tool_validator.py index 50453c65a1c..24b55e17d46 100644 --- a/lib/tool_shed/tools/tool_validator.py +++ b/lib/tool_shed/tools/tool_validator.py @@ -45,7 +45,7 @@ class ToolValidator(object): can_use_disk_file = filecmp.cmp(file_path, latest_version_of_file) try: os.unlink(latest_version_of_file) - except: + except Exception: pass return can_use_disk_file @@ -325,10 +325,10 @@ class ToolValidator(object): for tmp_code_file in tmp_code_files: try: os.unlink(tmp_code_file) - except: + except Exception: pass try: os.unlink(tmp_tool_config) - except: + except Exception: pass return tool, message diff --git a/lib/tool_shed/util/admin_util.py b/lib/tool_shed/util/admin_util.py index 93c976f7435..c46f479e77c 100644 --- a/lib/tool_shed/util/admin_util.py +++ b/lib/tool_shed/util/admin_util.py @@ -261,7 +261,7 @@ class Admin(object): library_dataset_actions[library] = {} try: library_dataset_actions[library][folder_path].append(dp.action) - except: + except Exception: library_dataset_actions[library][folder_path] = [dp.action] else: message = "Not showing associated datasets, there are too many." diff --git a/lib/tool_shed/util/basic_util.py b/lib/tool_shed/util/basic_util.py index 15fe58cd870..187174054d6 100644 --- a/lib/tool_shed/util/basic_util.py +++ b/lib/tool_shed/util/basic_util.py @@ -107,7 +107,7 @@ def remove_dir(dir): if os.path.exists(dir): try: shutil.rmtree(dir) - except: + except Exception: pass @@ -131,7 +131,7 @@ def strip_path(fpath): return fpath try: file_path, file_name = os.path.split(fpath) - except: + except Exception: file_name = fpath return file_name diff --git a/lib/tool_shed/util/shed_util_common.py b/lib/tool_shed/util/shed_util_common.py index 92658ba7963..2b0811cdbff 100644 --- a/lib/tool_shed/util/shed_util_common.py +++ b/lib/tool_shed/util/shed_util_common.py @@ -472,7 +472,7 @@ def handle_email_alerts(app, host, repository, content_alert_str='', new_repo_al ctx = repo.changectx(tip_changeset) try: username = ctx.user().split()[0] - except: + except Exception: username = ctx.user() # We'll use 2 template bodies because we only want to send content # alerts to tool shed admin users. diff --git a/lib/tool_shed/util/tool_util.py b/lib/tool_shed/util/tool_util.py index 8cd46f055d4..a6b93e6eb42 100644 --- a/lib/tool_shed/util/tool_util.py +++ b/lib/tool_shed/util/tool_util.py @@ -249,7 +249,7 @@ def new_state(trans, tool, invalid=False): for input in inputs.values(): try: state.inputs[input.name] = input.get_initial_value(trans, context) - except: + except Exception: # FIXME: not all values should be an empty list state.inputs[input.name] = [] return state diff --git a/lib/tool_shed/util/workflow_util.py b/lib/tool_shed/util/workflow_util.py index 17aa5de3eee..0a511c49f1c 100644 --- a/lib/tool_shed/util/workflow_util.py +++ b/lib/tool_shed/util/workflow_util.py @@ -85,7 +85,7 @@ class RepoToolModule(ToolModule): if self.tool: try: galaxy.tools.parameters.visit_input_values(self.tool.inputs, self.state.inputs, callback) - except: + except Exception: # TODO have this actually use default parameters? Fix at # refactor, needs to be discussed wrt: reproducibility though. log.exception("Tool parse failed for %s -- this indicates incompatibility of local tool version with expected version by the workflow.", self.tool.id) diff --git a/scripts/bootstrap_history.py b/scripts/bootstrap_history.py index 0fcad8574d7..49c1bfaad57 100644 --- a/scripts/bootstrap_history.py +++ b/scripts/bootstrap_history.py @@ -114,7 +114,7 @@ To update an existing Galaxy repository run: $$ git checkout release_${release} && git pull --ff-only origin release_${release} -See `our wiki `__ for additional details regarding the source code locations. +See the `community hub `__ for additional details regarding the source code locations. Release Notes =========================================================== @@ -221,8 +221,8 @@ RELEASE_ISSUE_TEMPLATE = string.Template(""" - [ ] Verify release included in https://docs.galaxyproject.org/en/master/releases/index.html - [ ] Review announcement in https://github.com/galaxyproject/galaxy/blob/dev/doc/source/releases/${version}_announce.rst - - [ ] Stage annoucement content (Wiki, Biostars, Bit.ly link) on annouce date to capture date tags. Note: all final content does not need to be completed to do this. - - [ ] Create wiki *highlights* and post to http://galaxyproject.org News (w/ RSS) and NewsBriefs. [An Example](https://galaxyproject.org/news/2016-04-galaxy-release). + - [ ] Stage annoucement content (Hub, Biostars, Bit.ly link) on annouce date to capture date tags. Note: all final content does not need to be completed to do this. + - [ ] Create hub *highlights* and post to http://galaxyproject.org News (w/ RSS) and NewsBriefs. [An Example](https://galaxyproject.org/news/2016-04-galaxy-release). - [ ] Tweet docs news *highlights* via bit.ly link to https://twitter.com/galaxyproject/ (As user ``galaxyproject``, password in Galaxy password store under ``twitter.com / galaxyproject`` ). [An Example](https://twitter.com/galaxyproject/status/733029921316986881). - [ ] Post *highlights* type News to Galaxy Biostars https://biostar.usegalaxy.org. [An Example](https://biostar.usegalaxy.org/p/17712/). - [ ] Email *highlights* to [galaxy-dev](http://dev.list.galaxyproject.org/) and [galaxy-announce](http://announce.list.galaxyproject.org/) @lists.galaxyproject.org. [An Example](http://dev.list.galaxyproject.org/The-Galaxy-release-16-04-is-out-tp4669419.html) diff --git a/scripts/build_toolbox.py b/scripts/build_toolbox.py index df7c64c5eb0..cfd2331e60c 100644 --- a/scripts/build_toolbox.py +++ b/scripts/build_toolbox.py @@ -22,7 +22,7 @@ def getfilenamelist(startdir): elif fn.endswith('.xml'): try: doc = ET.parse(fullfn) - except: + except Exception: print("An OOPS on", fullfn) raise rootelement = doc.getroot() diff --git a/scripts/check_galaxy.py b/scripts/check_galaxy.py index 7e0f4a258cf..6a6a8618015 100755 --- a/scripts/check_galaxy.py +++ b/scripts/check_galaxy.py @@ -87,7 +87,7 @@ if not os.access(var_dir, os.F_OK): login_file = os.path.join(var_dir, "login") try: f = open(login_file, 'r') -except: +except Exception: message = """Please create the file: %s This should contain a username and password to log in to Galaxy with, diff --git a/scripts/cleanup_datasets/cleanup_datasets.py b/scripts/cleanup_datasets/cleanup_datasets.py index a4257138e95..105fe3d1a59 100755 --- a/scripts/cleanup_datasets/cleanup_datasets.py +++ b/scripts/cleanup_datasets/cleanup_datasets.py @@ -371,7 +371,7 @@ def purge_datasets(app, cutoff_time, remove_from_disk, info_only=False, force_re dataset_count += 1 try: disk_space += file_size - except: + except Exception: pass stop = time.time() print('Purged %d datasets' % dataset_count) diff --git a/scripts/cleanup_datasets/pgcleanup.py b/scripts/cleanup_datasets/pgcleanup.py index 2d50a94c817..cdbda675e21 100755 --- a/scripts/cleanup_datasets/pgcleanup.py +++ b/scripts/cleanup_datasets/pgcleanup.py @@ -72,6 +72,7 @@ class Cleanup(object): parser.add_option('-U', '--no-update-time', action='store_false', dest='update_time', help="Don't set update_time on updated objects", default=True) parser.add_option('-s', '--sequence', dest='sequence', help='Comma-separated sequence of actions, chosen from: %s' % self.action_names, default='') parser.add_option('-w', '--work-mem', dest='work_mem', help='Set PostgreSQL work_mem for this connection', default=None) + parser.add_option('-l', '--log-dir', dest='log_dir', help='Log file directory', default=os.path.join(galaxy_root, 'scripts', 'cleanup_datasets')) (self.options, self.args) = parser.parse_args() self.options.sequence = [x.strip() for x in self.options.sequence.split(',')] @@ -117,7 +118,7 @@ class Cleanup(object): def _open_logfile(self): action_name = inspect.stack()[1][3] - logname = os.path.join(galaxy_root, 'scripts', 'cleanup_datasets', action_name + '.log') + logname = os.path.join(self.options.log_dir, action_name + '.log') if self.options.dry_run: log.debug('--dry-run specified, logging changes to stdout instead of log file: %s' % logname) @@ -775,6 +776,6 @@ if __name__ == '__main__': cleanup._run() if cleanup.disk_accounting_user_ids: cleanup._update_user_disk_usage() - except: + except Exception: log.exception('Caught exception in run sequence:') cleanup._shutdown() diff --git a/scripts/drmaa_external_runner.py b/scripts/drmaa_external_runner.py index 7254c5edf81..1e02d740dc3 100755 --- a/scripts/drmaa_external_runner.py +++ b/scripts/drmaa_external_runner.py @@ -30,7 +30,7 @@ def load_job_template_from_file(jt, filename): def valid_numeric_userid(userid): try: uid = int(userid) - except: + except ValueError: return False try: pwd.getpwuid(uid) diff --git a/scripts/helper.py b/scripts/helper.py index 0e287f90c45..e05f4e8a457 100644 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -28,7 +28,7 @@ parser.add_option('--ldda', dest='ldda_id', help='Display LibraryDatasetDatasetA try: assert options.encode_id or options.decode_id or options.hda_id or options.ldda_id -except: +except Exception: parser.print_help() sys.exit(1) @@ -51,7 +51,7 @@ if options.decode_id: if options.hda_id: try: hda_id = int(options.hda_id) - except: + except Exception: hda_id = int(helper.decode_id(options.hda_id)) hda = model.context.current.query(model.HistoryDatasetAssociation).get(hda_id) print('HDA "%s" is Dataset "%s" at: %s' % (hda.id, hda.dataset.id, hda.file_name)) @@ -59,7 +59,7 @@ if options.hda_id: if options.ldda_id: try: ldda_id = int(options.ldda_id) - except: + except Exception: ldda_id = int(helper.decode_id(options.ldda_id)) ldda = model.context.current.query(model.HistoryDatasetAssociation).get(ldda_id) print('LDDA "%s" is Dataset "%s" at: %s' % (ldda.id, ldda.dataset.id, ldda.file_name)) diff --git a/scripts/loc_files/create_all_fasta_loc.py b/scripts/loc_files/create_all_fasta_loc.py index badb03d27e9..300813abf3b 100644 --- a/scripts/loc_files/create_all_fasta_loc.py +++ b/scripts/loc_files/create_all_fasta_loc.py @@ -186,7 +186,7 @@ def __main__(): for ve in options.variant_exclusions.split(';'): v, e = ve.split(':') variant_exclusions[v] = e.split(',') - except: + except Exception: sys.stderr.write('Problem parsing the variant exclusion parameter (-n/--variant-exclusion). Make sure it follows the expected format\n') sys.exit(1) if options.append: diff --git a/scripts/microbes/BeautifulSoup.py b/scripts/microbes/BeautifulSoup.py index 8483f182246..a49381ae217 100644 --- a/scripts/microbes/BeautifulSoup.py +++ b/scripts/microbes/BeautifulSoup.py @@ -1544,9 +1544,7 @@ class SimplifyingSOAPParser(BeautifulSOAP): # Download from http://chardet.feedparser.org/ try: import chardet -# import chardet.constants -# chardet.constants._debug = 1 -except: +except ImportError: chardet = None chardet = None @@ -1710,7 +1708,7 @@ class UnicodeDammit: pass xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>')\ .match(xml_data) - except: + except Exception: xml_encoding_match = None if xml_encoding_match: xml_encoding = xml_encoding_match.groups()[0].lower() diff --git a/scripts/microbes/create_bacteria_loc_file.py b/scripts/microbes/create_bacteria_loc_file.py index 4eac7698ea0..e3bdffc8408 100644 --- a/scripts/microbes/create_bacteria_loc_file.py +++ b/scripts/microbes/create_bacteria_loc_file.py @@ -12,7 +12,7 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: pass organisms = {} @@ -44,7 +44,7 @@ def __main__(): # if no gpi, then must be a ncbi chr which corresponds to a UCSC org, w/o matching UCSC designation try: build = org['genome project id'] - except: + except KeyError: continue if 'build' in org: build = org['build'] diff --git a/scripts/microbes/create_bacteria_table.py b/scripts/microbes/create_bacteria_table.py index 5c117f78228..232bdfc9deb 100644 --- a/scripts/microbes/create_bacteria_table.py +++ b/scripts/microbes/create_bacteria_table.py @@ -12,7 +12,7 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: pass organisms = {} @@ -64,7 +64,7 @@ def __main__(): # if no gpi, then must be a ncbi chr which corresponds to a UCSC org, w/o matching UCSC designation try: org['genome project id'] - except: + except KeyError: continue if 'build' in org: at_ucsc = True diff --git a/scripts/microbes/create_nib_seq_loc_file.py b/scripts/microbes/create_nib_seq_loc_file.py index b3a53c398bc..a06446dd81d 100644 --- a/scripts/microbes/create_nib_seq_loc_file.py +++ b/scripts/microbes/create_nib_seq_loc_file.py @@ -12,13 +12,13 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: print("using default base_dir:", base_dir) loc_out = os.path.join(base_dir, "seq.loc") try: loc_out = os.path.join(base_dir, sys.argv[2]) - except: + except Exception: print("using default seq.loc:", loc_out) organisms = {} @@ -53,7 +53,7 @@ def __main__(): org = organisms[org] try: build = org['genome project id'] - except: + except KeyError: continue if 'build' in org: build = org['build'] @@ -64,7 +64,7 @@ def __main__(): # TODO: add better checking, i.e. for updating try: os.mkdir(seq_path) - except: + except Exception: print("Skipping", build) # continue diff --git a/scripts/microbes/get_builds_lengths.py b/scripts/microbes/get_builds_lengths.py index 6c311c1b27f..ee96cfebc3d 100644 --- a/scripts/microbes/get_builds_lengths.py +++ b/scripts/microbes/get_builds_lengths.py @@ -12,7 +12,7 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: pass organisms = {} @@ -44,7 +44,7 @@ def __main__(): # if no gpi, then must be a ncbi chr which corresponds to a UCSC org, w/o matching UCSC designation try: build = org['genome project id'] - except: + except KeyError: continue if 'build' in org: diff --git a/scripts/microbes/harvest_bacteria.py b/scripts/microbes/harvest_bacteria.py index 0ae3ffb04f3..db549fdf30c 100644 --- a/scripts/microbes/harvest_bacteria.py +++ b/scripts/microbes/harvest_bacteria.py @@ -57,7 +57,7 @@ def iter_genome_projects(url="http://www.ncbi.nlm.nih.gov/genomes/lproks.cgi?vie # seems some things donot have an ftp url, try and except it here: try: ftp_url = fields[22].split("href=\"")[1].split("\"")[0] - except: + except Exception: print("FAILED TO AQUIRE FTP ADDRESS:", org_num, info_url) ftp_url = None @@ -74,7 +74,7 @@ def get_chroms_by_project_id(org_num, base_url="http://www.ncbi.nlm.nih.gov/entr url = "%s%s" % (base_url, org_num) try: html = requests.get(url).text - except: + except Exception: print("GENOME PROJECT FAILED:", html_count, "org:", org_num, url) html = None time.sleep(1) # Throttle Connection @@ -104,7 +104,7 @@ def get_ftp_contents(ftp_url): ftp.cwd(ftp_url.split(ftp_url.split("/")[2])[-1]) ftp_contents = ftp.nlst() ftp.close() - except: + except Exception: ftp_contents = None time.sleep(1) # Throttle Connection return ftp_contents @@ -123,7 +123,7 @@ def scrape_ftp(ftp_contents, org_dir, org_num, refseq, ftp_url): url_count += 1 try: results = urlretrieve(url, target_filename) - except: + except Exception: results = None time.sleep(1) # Throttle Connection if results is None: @@ -152,15 +152,15 @@ def process_FASTA(filename, org_num, refseq): chrom_info_file.write("chromosome=%s\nname=%s\nlength=%s\norganism=%s\n" % (refseq, chr_name, len(fasta), org_num)) try: chrom_info_file.write("gi=%s\n" % accesions['gi']) - except: + except Exception: chrom_info_file.write("gi=None\n") try: chrom_info_file.write("gb=%s\n" % accesions['gb']) - except: + except Exception: chrom_info_file.write("gb=None\n") try: chrom_info_file.write("refseq=%s\n" % refseq) - except: + except Exception: chrom_info_file.write("refseq=None\n") chrom_info_file.close() @@ -213,13 +213,13 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: print("using default base_dir:", base_dir) try: os.mkdir(base_dir) print("path '%s' has been created" % base_dir) - except: + except Exception: print("path '%s' seems to already exist" % base_dir) for org_num, name, chroms, kingdom, group, org_genbank, org_refseq, info_url, ftp_url in iter_genome_projects(): @@ -229,7 +229,7 @@ def __main__(): try: org_dir = os.path.join(base_dir, org_num) os.mkdir(org_dir) - except: + except Exception: print("Organism %s already exists on disk, skipping" % org_num) continue diff --git a/scripts/microbes/ncbi_to_ucsc.py b/scripts/microbes/ncbi_to_ucsc.py index fb18d11b88a..522216df178 100644 --- a/scripts/microbes/ncbi_to_ucsc.py +++ b/scripts/microbes/ncbi_to_ucsc.py @@ -16,7 +16,7 @@ def __main__(): base_dir = os.path.join(os.getcwd(), "bacteria") try: base_dir = sys.argv[1] - except: + except IndexError: print("using default base_dir:", base_dir) organisms = {} @@ -47,7 +47,7 @@ def __main__(): try: page = urllib.urlopen(URL) - except: + except Exception: print("#Unable to open " + URL) print("?\tunspecified (?)") sys.exit(1) @@ -55,7 +55,7 @@ def __main__(): text = page.read() try: tree = ElementTree.fromstring(text) - except: + except Exception: print("#Invalid xml passed back from " + URL) print("?\tunspecified (?)") sys.exit(1) @@ -66,7 +66,7 @@ def __main__(): build = dsn.find("SOURCE").attrib['id'] try: org_page = urllib.urlopen("http://archaea.ucsc.edu/cgi-bin/hgGateway?db=" + build).read().replace("\n", "").split("")[1].split("
    ")[0].split("") - except: + except Exception: print("NO CHROMS FOR", build) continue org_page.pop(0) diff --git a/scripts/microbes/util.py b/scripts/microbes/util.py index 9114b151ada..91232098cd3 100644 --- a/scripts/microbes/util.py +++ b/scripts/microbes/util.py @@ -155,7 +155,7 @@ def get_bed_from_GeneMark(geneMark_filename, chr): avg_prob = float(fields.pop(0)) try: start_prob = float(fields.pop(0)) - except: + except Exception: start_prob = 0 name = "orf_" + str(ctr) + "_" + str(ctr2) if avg_prob >= best_block['avg_prob']: diff --git a/scripts/others/incorrect_gops_jobs.py b/scripts/others/incorrect_gops_jobs.py index 610e077f979..ba97281899b 100755 --- a/scripts/others/incorrect_gops_jobs.py +++ b/scripts/others/incorrect_gops_jobs.py @@ -74,7 +74,7 @@ def main(): job_output = cmd_line.split()[3] try: os.system(new_cmd_line) - except: + except Exception: pass diff_status = os.system('diff %s %s >> /dev/null' % (new_output.name, job_output)) if diff_status == 0: diff --git a/scripts/others/incorrect_gops_join_jobs.py b/scripts/others/incorrect_gops_join_jobs.py index 25e7ab0f4d1..ab0a2473dd1 100644 --- a/scripts/others/incorrect_gops_join_jobs.py +++ b/scripts/others/incorrect_gops_join_jobs.py @@ -64,7 +64,7 @@ def main(): job_output = cmd_line.split()[4] try: os.system(new_cmd_line) - except: + except Exception: pass diff_status = os.system('diff %s %s >> /dev/null' % (new_output.name, job_output)) if diff_status == 0: diff --git a/scripts/paster.py b/scripts/paster.py index 861a98075ae..0f99c9186c9 100755 --- a/scripts/paster.py +++ b/scripts/paster.py @@ -16,7 +16,7 @@ from check_python import check_python # noqa: I100 # ensure supported version try: check_python() -except: +except Exception: sys.exit(1) if 'LOG_TEMPFILES' in os.environ: diff --git a/scripts/rst2html.py b/scripts/rst2html.py index 409d8e26c2f..3c66a2bd1c7 100755 --- a/scripts/rst2html.py +++ b/scripts/rst2html.py @@ -13,7 +13,7 @@ A minimal front end to the Docutils Publisher, producing HTML. try: import locale locale.setlocale(locale.LC_ALL, '') -except: +except Exception: pass from docutils.core import ( diff --git a/scripts/runtime_stats.py b/scripts/runtime_stats.py index 522ae06391f..d5dc75ce4b3 100755 --- a/scripts/runtime_stats.py +++ b/scripts/runtime_stats.py @@ -35,13 +35,9 @@ import argparse import re import sys -try: - import configparser -except: - import ConfigParser as configparser - import numpy import psycopg2 +from six.moves import configparser from sqlalchemy.engine import url @@ -144,7 +140,7 @@ def query(tool_id=None, user=None, like=None, source='metrics', if user: try: user_id = int(user) - except: + except ValueError: if '@' not in user: field = 'username' else: diff --git a/scripts/tool_shed/migrate_tools_to_repositories.py b/scripts/tool_shed/migrate_tools_to_repositories.py index a5d5770922a..e585fb309b4 100644 --- a/scripts/tool_shed/migrate_tools_to_repositories.py +++ b/scripts/tool_shed/migrate_tools_to_repositories.py @@ -255,7 +255,7 @@ def tool_archive_extension(file_name): try: assert head[:2] == '\037\213' extension = 'tar.gz' - except: + except Exception: pass if extension is None: extension = 'tar' diff --git a/setup.cfg b/setup.cfg index 878ff9b7a14..5fe373008ed 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,13 @@ [flake8] # These are exceptions allowed by Galaxy style guidelines. -# 128 continuation line under-indented for visual indent -# 203 whitespace before ':' -# 402 module level import not at top of file # TODO, we would like to improve this. -# 501 is line length +# E128 continuation line under-indented for visual indent +# E203 whitespace before ':' +# E402 module level import not at top of file # TODO, we would like to improve this. +# E501 is line length +# E741 do not use variables named 'l', 'O' or 'I' # W503 is line breaks before binary operators, which has been reversed in PEP 8. # D** are docstring linting - which we mostly ignore except D302. (Hopefully we will solve more over time). -ignore = E128,E203,E501,E402,W503,D100,D101,D102,D103,D104,D105,D106,D107,D200,D201,D202,D204,D205,D206,D207,D208,D209,D210,D211,D300,D301,D400,D401,D402,D403,D412,D413 +ignore = E128,E203,E501,E402,E741,W503,D100,D101,D102,D103,D104,D105,D106,D107,D200,D201,D202,D204,D205,D206,D207,D208,D209,D210,D211,D300,D301,D400,D401,D402,D403,D412,D413 exclude = lib/galaxy/util/jstree.py # For flake8-import-order # https://github.com/PyCQA/flake8-import-order/blob/master/tests/test_cases/complete_smarkets.py diff --git a/static/maps/galaxy.interactive_environments.js.map b/static/maps/galaxy.interactive_environments.js.map index f8ddbdf0c63..e9caeabe7c4 100644 --- a/static/maps/galaxy.interactive_environments.js.map +++ b/static/maps/galaxy.interactive_environments.js.map @@ -1 +1 @@ -{"version":3,"sources":["galaxy.interactive_environments.js"],"names":["append_notebook","url","clear_main_area","$","remove","display_spinner","make_spin_state","s","type","ajax_timeout","sleep_step","log_attempts","count","ajax_timeout_max","ajax_timeout_step","sleep_init","sleep_max","user_msg","toastr","error","ajax_timeout_init","closeButton","timeOut","extendedTimeOut","tapToDismiss","sleep","console","spin_state","clear","log","console_msg","window","setTimeout","withCredentials","success","status","error_callback","jqxhr","bool_response","success_callback","timeout_callback","spinner","ajax_params","spin_until","warn_at","message_once","info","data","wrapped_success","messages","spin_again","ajax","warning","spin","message","load_when_ready","not_ready","unknown_response","waiting","spin_error","test_ie_availability","timeout_error","wait_warn"],"mappings":"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","file":"../scripts/galaxy.interactive_environments.js","sourcesContent":["/**\n * Internal function to remove content from the main area and add the notebook.\n * Not idempotent\n */\nfunction append_notebook(url) {\n clear_main_area();\n $(\"#main\").append(\n ''\n );\n}\n\nfunction clear_main_area() {\n $(\"#spinner\").remove();\n $(\"#main\")\n .children()\n .remove();\n}\n\nfunction display_spinner() {\n $(\"#main\").append(\n ''\n );\n}\n\n/* Create a spin_state object used by spin() and spin_again() */\nfunction make_spin_state(\n type,\n ajax_timeout_init,\n ajax_timeout_max,\n ajax_timeout_step,\n sleep_init,\n sleep_max,\n sleep_step,\n log_attempts\n) {\n var s = {\n type: typeof type !== \"undefined\" ? type : \"GIE spin\",\n ajax_timeout:\n typeof ajax_timeout_init !== \"undefined\" ? ajax_timeout_init : 2000,\n ajax_timeout_max:\n typeof ajax_timeout_max !== \"undefined\" ? ajax_timeout_max : 16000,\n ajax_timeout_step:\n typeof ajax_timeout_step !== \"undefined\" ? ajax_timeout_step : 500,\n sleep: typeof sleep_init !== \"undefined\" ? sleep_init : 500,\n sleep_max: typeof sleep_max !== \"undefined\" ? sleep_max : 8000,\n sleep_step: typeof sleep_step !== \"undefined\" ? sleep_step : 100,\n log_attempts: typeof log_attempts !== \"undefined\" ? log_attempts : true,\n count: 0\n };\n return s;\n}\n\n/* Log/display an error when spinning fails. */\nfunction spin_error(console_msg, user_msg, clear) {\n console.log(console_msg);\n if (clear) clear_main_area();\n if (typeof user_msg == \"string\") {\n toastr.clear();\n toastr.error(user_msg, \"Error\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n}\n\n/* Increase sleep time and spin again. */\nfunction spin_again(spin_state) {\n if (spin_state.sleep < spin_state.sleep_max) {\n spin_state.sleep += spin_state.sleep_step;\n }\n if (spin_state.log_attempts) {\n console.log(\n spin_state.type +\n \" request \" +\n spin_state.count +\n \" request timeout \" +\n spin_state.ajax_timeout +\n \"ms sleeping \" +\n spin_state.sleep / 1000 +\n \"s\"\n );\n }\n window.setTimeout(spin_state.spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL as long as it times out, otherwise, call the provided success or error callback. If the callback\n * returns `true`, the condition is considered \"resolved\" and spinning stops. Otherwise, continue spinning, increasing\n * AJAX timeouts and/or sleep values as configured in the spin_state.\n */\nfunction spin(\n url,\n bool_response,\n success_callback,\n timeout_callback,\n error_callback,\n spin_state\n) {\n var spinner = function() {\n var ajax_params = {\n url: url,\n xhrFields: {\n withCredentials: true\n },\n type: \"GET\",\n timeout: spin_state.ajax_timeout,\n success: function(data, status, jqxhr) {\n if (!success_callback(data, status, jqxhr))\n spin_again(spin_state);\n },\n error: function(jqxhr, status, error) {\n if (status == \"timeout\") {\n if (spin_state.ajax_timeout < spin_state.ajax_timeout_max) {\n spin_state.ajax_timeout += spin_state.ajax_timeout_step;\n }\n spin_state.count++;\n if (!timeout_callback(jqxhr, status, error))\n spin_again(spin_state);\n } else {\n spin_state.count++;\n if (!error_callback(jqxhr, status, error))\n spin_again(spin_state);\n }\n }\n };\n if (bool_response) ajax_params[\"dataType\"] = \"json\";\n $.ajax(ajax_params);\n };\n console.log(\"Setting up new spinner for \" + spin_state.type + \" on \" + url);\n spin_state.spinner = spinner;\n window.setTimeout(spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL forever until there is an acceptable response. \n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK).\n * @param {Boolean} bool_response: If set to `true`, do not stop spinning until the response is `true`. Otherwise, stop\n * as soon as a successful response is received.\n */\nfunction spin_until(\n url,\n bool_response,\n messages,\n success_callback,\n spin_state\n) {\n var warn_at = 40; // ~2 mins\n var message_once = function(message, spin_state) {\n if (spin_state.count == 1) {\n display_spinner();\n toastr.info(message, null, {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n };\n var wrapped_success = function(data) {\n if (!bool_response || (bool_response && data == true)) {\n console.log(messages[\"success\"]);\n clear_main_area();\n toastr.clear();\n success_callback();\n } else if (bool_response && data == false) {\n message_once(messages[\"not_ready\"], spin_state);\n return false; // keep spinning\n } else {\n spin_error(\n \"Invalid response to \" + spin_state.type + \" request\",\n messages[\"invalid_response\"],\n true\n );\n }\n return true; // stop spinning\n };\n var timeout_error = function(jqxhr, status, error) {\n message_once(messages[\"waiting\"], spin_state);\n if (spin_state.count == warn_at) {\n toastr.warning(messages[\"wait_warn\"], \"Warning\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n return false; // keep spinning\n };\n spin(\n url,\n bool_response,\n wrapped_success,\n timeout_error,\n timeout_error,\n spin_state\n );\n}\n\n/**\n * Test a boolean (json) response from a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK) and either `true` or `false`.\n * @param {String} callback: function to call once successfully connected.\n *\n */\nfunction load_when_ready(url, success_callback) {\n var messages = {\n success: \"Galaxy reports IE container ready, returning\",\n not_ready:\n \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n unknown_response:\n \"Galaxy failed to launch a container in which to run this interactive environment, contact a Galaxy administrator.\",\n waiting:\n \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to start a container. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"Galaxy encountered an error while attempting to determine the readiness of this interactive environment's container, contact a Galaxy administrator.\"\n };\n var spin_state = make_spin_state(\"IE container readiness\");\n spin_until(url, true, messages, success_callback, spin_state);\n}\n\n/**\n * Test availability of a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test availability of. Must return a 200 (302->200 is OK).\n * @param {String} callback: function to call once successfully connected.\n *\n */\nfunction test_ie_availability(url, success_callback) {\n var messages = {\n success: \"IE connection succeeded, returning\",\n waiting:\n \"Interactive environment container is running, attempting to connect to the IE. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to connect to the interactive environment. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"An error was encountered while attempting to connect to the interactive environment, contact your administrator.\"\n };\n var spin_state = make_spin_state(\"IE availability\");\n spin_until(url, false, messages, success_callback, spin_state);\n}\n"]} \ No newline at end of file +{"version":3,"sources":["galaxy.interactive_environments.js"],"names":["append_notebook","url","clear_main_area","$","remove","display_spinner","make_spin_state","s","type","ajax_timeout","sleep_step","log_attempts","count","ajax_timeout_max","ajax_timeout_step","sleep_init","sleep_max","user_msg","toastr","error","ajax_timeout_init","closeButton","timeOut","extendedTimeOut","tapToDismiss","sleep","console","spin_state","clear","log","console_msg","window","setTimeout","withCredentials","success","spin_again","timeout_callback","jqxhr","status","error_callback","spinner","ajax_params","xhrFields","warn_at","message_once","data","info","bool_response","messages","success_callback","ajax","timeout_error","spin_until","spin","message","load_when_ready","not_ready","unknown_response","warning","spin_error","test_ie_availability","wait_warn","waiting"],"mappings":"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","file":"../scripts/galaxy.interactive_environments.js","sourcesContent":["/**\n * Internal function to remove content from the main area and add the notebook.\n * Not idempotent\n */\nfunction append_notebook(url) {\n clear_main_area();\n $(\"#main\").append(\n ''\n );\n}\n\nfunction clear_main_area() {\n $(\"#spinner\").remove();\n $(\"#main\")\n .children()\n .remove();\n}\n\nfunction display_spinner() {\n $(\"#main\").append(\n ''\n );\n}\n\n/* Create a spin_state object used by spin() and spin_again() */\nfunction make_spin_state(\n type,\n ajax_timeout_init,\n ajax_timeout_max,\n ajax_timeout_step,\n sleep_init,\n sleep_max,\n sleep_step,\n log_attempts\n) {\n var s = {\n type: typeof type !== \"undefined\" ? type : \"GIE spin\",\n ajax_timeout:\n typeof ajax_timeout_init !== \"undefined\" ? ajax_timeout_init : 2000,\n ajax_timeout_max:\n typeof ajax_timeout_max !== \"undefined\" ? ajax_timeout_max : 16000,\n ajax_timeout_step:\n typeof ajax_timeout_step !== \"undefined\" ? ajax_timeout_step : 500,\n sleep: typeof sleep_init !== \"undefined\" ? sleep_init : 500,\n sleep_max: typeof sleep_max !== \"undefined\" ? sleep_max : 8000,\n sleep_step: typeof sleep_step !== \"undefined\" ? sleep_step : 100,\n log_attempts: typeof log_attempts !== \"undefined\" ? log_attempts : true,\n count: 0\n };\n return s;\n}\n\n/* Log/display an error when spinning fails. */\nfunction spin_error(console_msg, user_msg, clear) {\n console.log(console_msg);\n if (clear) clear_main_area();\n if (typeof user_msg == \"string\") {\n toastr.clear();\n toastr.error(user_msg, \"Error\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n}\n\n/* Increase sleep time and spin again. */\nfunction spin_again(spin_state) {\n if (spin_state.sleep < spin_state.sleep_max) {\n spin_state.sleep += spin_state.sleep_step;\n }\n if (spin_state.log_attempts) {\n console.log(\n spin_state.type +\n \" request \" +\n spin_state.count +\n \" request timeout \" +\n spin_state.ajax_timeout +\n \"ms sleeping \" +\n spin_state.sleep / 1000 +\n \"s\"\n );\n }\n window.setTimeout(spin_state.spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL as long as it times out, otherwise, call the provided success or error callback. If the callback\n * returns `true`, the condition is considered \"resolved\" and spinning stops. Otherwise, continue spinning, increasing\n * AJAX timeouts and/or sleep values as configured in the spin_state.\n */\nfunction spin(\n url,\n bool_response,\n success_callback,\n timeout_callback,\n error_callback,\n spin_state\n) {\n var spinner = function() {\n var ajax_params = {\n url: url,\n xhrFields: {\n withCredentials: true\n },\n type: \"GET\",\n timeout: spin_state.ajax_timeout,\n success: function(data, status, jqxhr) {\n if (!success_callback(data, status, jqxhr)) {\n spin_state.count++;\n spin_again(spin_state);\n }\n },\n error: function(jqxhr, status, error) {\n if (status == \"timeout\") {\n if (spin_state.ajax_timeout < spin_state.ajax_timeout_max) {\n spin_state.ajax_timeout += spin_state.ajax_timeout_step;\n }\n spin_state.count++;\n if (!timeout_callback(jqxhr, status, error))\n spin_again(spin_state);\n } else {\n spin_state.count++;\n if (!error_callback(jqxhr, status, error))\n spin_again(spin_state);\n }\n }\n };\n if (bool_response) ajax_params[\"dataType\"] = \"json\";\n $.ajax(ajax_params);\n };\n console.log(\"Setting up new spinner for \" + spin_state.type + \" on \" + url);\n spin_state.spinner = spinner;\n window.setTimeout(spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL forever until there is an acceptable response. \n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK).\n * @param {Boolean} bool_response: If set to `true`, do not stop spinning until the response is `true`. Otherwise, stop\n * as soon as a successful response is received.\n */\nfunction spin_until(\n url,\n bool_response,\n messages,\n success_callback,\n spin_state\n) {\n var warn_at = 40; // ~2 mins\n var message_once = function(message, spin_state) {\n if (spin_state.count == 1) {\n display_spinner();\n toastr.info(message, null, {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n };\n var wrapped_success = function(data) {\n if (!bool_response || (bool_response && data == true)) {\n console.log(messages[\"success\"]);\n clear_main_area();\n toastr.clear();\n success_callback();\n } else if (bool_response && data == false) {\n message_once(messages[\"not_ready\"], spin_state);\n return false; // keep spinning\n } else {\n spin_error(\n \"Invalid response to \" + spin_state.type + \" request\",\n messages[\"invalid_response\"],\n true\n );\n }\n return true; // stop spinning\n };\n var timeout_error = function(jqxhr, status, error) {\n message_once(messages[\"waiting\"], spin_state);\n if (spin_state.count == warn_at) {\n toastr.warning(messages[\"wait_warn\"], \"Warning\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n return false; // keep spinning\n };\n spin(\n url,\n bool_response,\n wrapped_success,\n timeout_error,\n timeout_error,\n spin_state\n );\n}\n\n/**\n * Test a boolean (json) response from a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK) and either `true` or `false`.\n * @param {String} callback: function to call once successfully connected.\n *\n */\nfunction load_when_ready(url, success_callback) {\n var messages = {\n success: \"Galaxy reports IE container ready, returning\",\n not_ready:\n \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n unknown_response:\n \"Galaxy failed to launch a container in which to run this interactive environment, contact a Galaxy administrator.\",\n waiting:\n \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to start a container. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"Galaxy encountered an error while attempting to determine the readiness of this interactive environment's container, contact a Galaxy administrator.\"\n };\n var spin_state = make_spin_state(\"IE container readiness\");\n spin_until(url, true, messages, success_callback, spin_state);\n}\n\n/**\n * Test availability of a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test availability of. Must return a 200 (302->200 is OK).\n * @param {String} callback: function to call once successfully connected.\n *\n */\nfunction test_ie_availability(url, success_callback) {\n var messages = {\n success: \"IE connection succeeded, returning\",\n waiting:\n \"Interactive environment container is running, attempting to connect to the IE. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to connect to the interactive environment. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"An error was encountered while attempting to connect to the interactive environment, contact your administrator.\"\n };\n var spin_state = make_spin_state(\"IE availability\");\n spin_until(url, false, messages, success_callback, spin_state);\n}\n"]} \ No newline at end of file diff --git a/static/maps/layout/menu.js.map b/static/maps/layout/menu.js.map index e9dc300b675..13d85143bae 100644 --- a/static/maps/layout/menu.js.map +++ b/static/maps/layout/menu.js.map @@ -1 +1 @@ -{"version":3,"sources":["layout/menu.js"],"names":["define","Collection","model","defaults","target","Webhooks","_l","Utils","Backbone","extend","Model","self","options","fetch","extendedNavItem","GenericNav","GenericNavView","this","add","render","id","title","url","tooltip","disabled","Galaxy","user","menu","lims_doc_url","webhook","obj","onclick","callback","webhooks","appendScriptStyle","$","each","models","index","toJSON","activate","name","icon","config","function","Function","page","masthead","collection","get","screencasts_url","terms_url","helpTab","support_url","biostar_url","search_url","mailing_lists","biostar_url_redirect","wiki_url","allow_user_creation","cls","citation_url","noscratchbook","userTab","unshift","setElement","$dropdown","_formatUrl","session_csrf_token","divider","show","hide","append","activeView","jQuery","Deferred","active_view","set","resolve","promise","Tab","View","_template","$menu","e","preventDefault","events","remove","_toggleClick","attr","css","trigger","m","removeClass","display","$toggle","buildLink","label","addClass","popover","content","setTimeout","placement","off","on","empty","_","menuItem","_buildMenuItem","html","frame","root","attributes","indexOf","charAt"],"mappings":"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","file":"../../scripts/layout/menu.js","sourcesContent":["/** Masthead Collection **/\ndefine(\n [\n \"layout/generic-nav-view\",\n \"mvc/webhooks\",\n \"utils/localization\",\n \"utils/utils\"\n ],\n function(GenericNav, Webhooks, _l, Utils) {\n var Collection = Backbone.Collection.extend({\n model: Backbone.Model.extend({\n defaults: {\n visible: true,\n target: \"_parent\"\n }\n }),\n fetch: function(options) {\n var self = this;\n options = options || {};\n this.reset();\n\n //\n // Chat server tab\n //\n var extendedNavItem = new GenericNav.GenericNavView();\n this.add(extendedNavItem.render());\n\n //\n // Analyze data tab.\n //\n this.add({\n id: \"analysis\",\n title: _l(\"Analyze Data\"),\n url: \"\",\n tooltip: _l(\"Analysis home view\")\n });\n\n //\n // Workflow tab.\n //\n this.add({\n id: \"workflow\",\n title: _l(\"Workflow\"),\n tooltip: _l(\"Chain tools into workflows\"),\n disabled: !Galaxy.user.id,\n url: \"workflow\"\n });\n\n //\n // 'Shared Items' or Libraries tab.\n //\n this.add({\n id: \"shared\",\n title: _l(\"Shared Data\"),\n url: \"library/index\",\n tooltip: _l(\"Access published resources\"),\n menu: [\n {\n title: _l(\"Data Libraries\"),\n url: \"library/list\"\n },\n {\n title: _l(\"Histories\"),\n url: \"histories/list_published\"\n },\n {\n title: _l(\"Workflows\"),\n url: \"workflows/list_published\"\n },\n {\n title: _l(\"Visualizations\"),\n url: \"visualizations/list_published\"\n },\n {\n title: _l(\"Pages\"),\n url: \"pages/list_published\"\n }\n ]\n });\n\n //\n // Lab menu.\n //\n options.user_requests &&\n this.add({\n id: \"lab\",\n title: \"Lab\",\n menu: [\n {\n title: \"Sequencing Requests\",\n url: \"requests/index\"\n },\n {\n title: \"Find Samples\",\n url: \"requests/find_samples_index\"\n },\n {\n title: \"Help\",\n url: options.lims_doc_url\n }\n ]\n });\n\n //\n // Visualization tab.\n //\n this.add({\n id: \"visualization\",\n title: _l(\"Visualization\"),\n url: \"visualizations/list\",\n tooltip: _l(\"Visualize datasets\"),\n disabled: !Galaxy.user.id,\n menu: [\n {\n title: _l(\"New Track Browser\"),\n url: \"visualization/trackster\",\n target: \"_frame\"\n },\n {\n title: _l(\"Saved Visualizations\"),\n url: \"visualizations/list\",\n target: \"_frame\"\n },\n {\n title: _l(\"Interactive Environments\"),\n url: \"visualization/gie_list\",\n target: \"galaxy_main\"\n }\n ]\n });\n\n //\n // Webhooks\n //\n Webhooks.add({\n url: \"api/webhooks/masthead/all\",\n callback: function(webhooks) {\n $(document).ready(function() {\n $.each(webhooks.models, function(index, model) {\n var webhook = model.toJSON();\n if (webhook.activate) {\n var obj = {\n id: webhook.name,\n icon: webhook.config.icon,\n url: webhook.config.url,\n tooltip: webhook.config.tooltip,\n onclick:\n webhook.config.function &&\n new Function(\n webhook.config.function\n )\n };\n\n // Galaxy.page is undefined for data libraries, workflows pages\n if (Galaxy.page) {\n Galaxy.page.masthead.collection.add(\n obj\n );\n } else if (Galaxy.masthead) {\n Galaxy.masthead.collection.add(obj);\n }\n\n // Append masthead script and styles to Galaxy main\n Utils.appendScriptStyle(webhook);\n }\n });\n });\n }\n });\n\n //\n // Admin.\n //\n Galaxy.user.get(\"is_admin\") &&\n this.add({\n id: \"admin\",\n title: _l(\"Admin\"),\n url: \"admin\",\n tooltip: _l(\"Administer this Galaxy\"),\n cls: \"admin-only\"\n });\n\n //\n // Help tab.\n //\n var helpTab = {\n id: \"help\",\n title: _l(\"Help\"),\n tooltip: _l(\"Support, contact, and community\"),\n menu: [\n {\n title: _l(\"Support\"),\n url: options.support_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Search\"),\n url: options.search_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Mailing Lists\"),\n url: options.mailing_lists,\n target: \"_blank\"\n },\n {\n title: _l(\"Videos\"),\n url: options.screencasts_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Wiki\"),\n url: options.wiki_url,\n target: \"_blank\"\n },\n {\n title: _l(\"How to Cite Galaxy\"),\n url: options.citation_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Interactive Tours\"),\n url: \"tours\"\n }\n ]\n };\n options.terms_url &&\n helpTab.menu.push({\n title: _l(\"Terms and Conditions\"),\n url: options.terms_url,\n target: \"_blank\"\n });\n options.biostar_url &&\n helpTab.menu.unshift({\n title: _l(\"Ask a question\"),\n url: \"biostar/biostar_question_redirect\",\n target: \"_blank\"\n });\n options.biostar_url &&\n helpTab.menu.unshift({\n title: _l(\"Galaxy Biostar\"),\n url: options.biostar_url_redirect,\n target: \"_blank\"\n });\n this.add(helpTab);\n\n //\n // User tab.\n //\n var userTab = {};\n if (!Galaxy.user.id) {\n if (options.allow_user_creation) {\n userTab = {\n id: \"user\",\n title: _l(\"Login or Register\"),\n cls: \"loggedout-only\",\n tooltip: _l(\"Account registration or login\"),\n menu: [\n {\n title: _l(\"Login\"),\n url: \"user/login\",\n target: \"galaxy_main\",\n noscratchbook: true\n },\n {\n title: _l(\"Register\"),\n url: \"user/create\",\n target: \"galaxy_main\",\n noscratchbook: true\n }\n ]\n };\n } else {\n userTab = {\n id: \"user\",\n title: _l(\"Login\"),\n cls: \"loggedout-only\",\n tooltip: _l(\"Login\"),\n url: \"user/login\",\n target: \"galaxy_main\",\n noscratchbook: true\n };\n }\n } else {\n userTab = {\n id: \"user\",\n title: _l(\"User\"),\n cls: \"loggedin-only\",\n tooltip: _l(\"Account and saved data\"),\n menu: [\n {\n title:\n _l(\"Logged in as\") +\n \" \" +\n Galaxy.user.get(\"email\")\n },\n {\n title: _l(\"Preferences\"),\n url: \"user\"\n },\n {\n title: _l(\"Custom Builds\"),\n url: \"custom_builds\"\n },\n {\n title: _l(\"Logout\"),\n url:\n \"user/logout?session_csrf_token=\" +\n Galaxy.session_csrf_token,\n target: \"_top\",\n divider: true\n },\n {\n title: _l(\"Saved Histories\"),\n url: \"histories/list\",\n target: \"_top\"\n },\n {\n title: _l(\"Saved Datasets\"),\n url: \"datasets/list\",\n target: \"_top\"\n },\n {\n title: _l(\"Saved Pages\"),\n url: \"pages/list\",\n target: \"_top\"\n }\n ]\n };\n }\n this.add(userTab);\n var activeView = this.get(options.active_view);\n activeView && activeView.set(\"active\", true);\n return new jQuery.Deferred().resolve().promise();\n }\n });\n\n /** Masthead tab **/\n var Tab = Backbone.View.extend({\n initialize: function(options) {\n this.model = options.model;\n this.setElement(this._template());\n this.$dropdown = this.$(\".dropdown\");\n this.$toggle = this.$(\".dropdown-toggle\");\n this.$menu = this.$(\".dropdown-menu\");\n this.$note = this.$(\".dropdown-note\");\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n events: {\n \"click .dropdown-toggle\": \"_toggleClick\"\n },\n\n render: function() {\n var self = this;\n $(\".tooltip\").remove();\n this.$el.attr(\"id\", this.model.id).css({\n visibility:\n (this.model.get(\"visible\") && \"visible\") || \"hidden\"\n });\n this.model.set(\"url\", this._formatUrl(this.model.get(\"url\")));\n this.$note\n .html(this.model.get(\"note\") || \"\")\n .removeClass()\n .addClass(\"dropdown-note\")\n .addClass(this.model.get(\"note_cls\"))\n .css({\n display:\n (this.model.get(\"show_note\") && \"block\") || \"none\"\n });\n this.$toggle\n .html(this.model.get(\"title\") || \"\")\n .removeClass()\n .addClass(\"dropdown-toggle\")\n .addClass(this.model.get(\"cls\"))\n .addClass(\n this.model.get(\"icon\") &&\n \"dropdown-icon fa \" + this.model.get(\"icon\")\n )\n .addClass(this.model.get(\"toggle\") && \"toggle\")\n .attr(\"target\", this.model.get(\"target\"))\n .attr(\"href\", this.model.get(\"url\"))\n .attr(\"title\", this.model.get(\"tooltip\"))\n .tooltip(\"destroy\");\n this.model.get(\"tooltip\") &&\n this.$toggle.tooltip({ placement: \"bottom\" });\n this.$dropdown\n .removeClass()\n .addClass(\"dropdown\")\n .addClass(this.model.get(\"disabled\") && \"disabled\")\n .addClass(this.model.get(\"active\") && \"active\");\n if (this.model.get(\"menu\") && this.model.get(\"show_menu\")) {\n this.$menu.show();\n $(\"#dd-helper\")\n .show()\n .off()\n .on(\"click\", function() {\n $(\"#dd-helper\").hide();\n self.model.set(\"show_menu\", false);\n });\n } else {\n self.$menu.hide();\n $(\"#dd-helper\").hide();\n }\n this.$menu.empty().removeClass(\"dropdown-menu\");\n if (this.model.get(\"menu\")) {\n _.each(this.model.get(\"menu\"), function(menuItem) {\n self.$menu.append(self._buildMenuItem(menuItem));\n menuItem.divider &&\n self.$menu.append($(\"
  • \").addClass(\"divider\"));\n });\n self.$menu.addClass(\"dropdown-menu\");\n self.$toggle.append($(\"\").addClass(\"caret\"));\n }\n return this;\n },\n\n /** Add new menu item */\n _buildMenuItem: function(options) {\n var self = this;\n options = _.defaults(options || {}, {\n title: \"\",\n url: \"\",\n target: \"_parent\",\n noscratchbook: false\n });\n options.url = self._formatUrl(options.url);\n return $(\"
  • \").append(\n $(\"\")\n .attr(\"href\", options.url)\n .attr(\"target\", options.target)\n .html(options.title)\n .on(\"click\", function(e) {\n e.preventDefault();\n self.model.set(\"show_menu\", false);\n if (options.onclick) {\n options.onclick();\n } else {\n Galaxy.frame.add(options);\n }\n })\n );\n },\n\n /** Handle click event */\n _toggleClick: function(e) {\n var self = this;\n var model = this.model;\n e.preventDefault();\n $(\".tooltip\").hide();\n model.trigger(\"dispatch\", function(m) {\n model.id !== m.id &&\n m.get(\"menu\") &&\n m.set(\"show_menu\", false);\n });\n if (!model.get(\"disabled\")) {\n if (!model.get(\"menu\")) {\n model.get(\"onclick\")\n ? model.get(\"onclick\")()\n : Galaxy.frame.add(model.attributes);\n } else {\n model.set(\"show_menu\", true);\n }\n } else {\n function buildLink(label, url) {\n return $(\"
    \")\n .append(\n $(\"\")\n .attr(\"href\", Galaxy.root + url)\n .html(label)\n )\n .html();\n }\n this.$toggle.popover && this.$toggle.popover(\"destroy\");\n this.$toggle\n .popover({\n html: true,\n placement: \"bottom\",\n content:\n \"Please \" +\n buildLink(\n \"login\",\n \"user/login?use_panels=True\"\n ) +\n \" or \" +\n buildLink(\n \"register\",\n \"user/create?use_panels=True\"\n ) +\n \" to use this feature.\"\n })\n .popover(\"show\");\n setTimeout(function() {\n self.$toggle.popover(\"destroy\");\n }, 5000);\n }\n },\n\n /** Url formatting */\n _formatUrl: function(url) {\n return typeof url == \"string\" &&\n url.indexOf(\"//\") === -1 &&\n url.charAt(0) != \"/\"\n ? Galaxy.root + url\n : url;\n },\n\n /** body tempate */\n _template: function() {\n return (\n '
      ' +\n '
    • ' +\n '' +\n '
        ' +\n '
        ' +\n \"\" +\n \"
      \"\n );\n }\n });\n\n return {\n Collection: Collection,\n Tab: Tab\n };\n }\n);\n"]} \ No newline at end of file +{"version":3,"sources":["layout/menu.js"],"names":["define","Collection","model","defaults","target","Webhooks","_l","Utils","Backbone","extend","Model","self","options","fetch","extendedNavItem","GenericNav","GenericNavView","this","add","render","id","title","url","tooltip","disabled","Galaxy","user","menu","webhook","obj","$","document","ready","masthead","collection","toJSON","activate","appendScriptStyle","icon","config","onclick","function","Function","page","cls","support_url","terms_url","helpTab","search_url","biostar_url","mailing_lists","screencasts_url","biostar_url_redirect","wiki_url","citation_url","allow_user_creation","noscratchbook","userTab","View","_template","get","session_csrf_token","divider","_formatUrl","show","hide","$menu","menuItem","active_view","activeView","set","addClass","resolve","promise","Tab","initialize","_buildMenuItem","events","e","frame","$el","attr","css","visibility","_toggleClick","preventDefault","trigger","display","removeClass","buildLink","$toggle","popover","html","placement","content","setTimeout","off","on","_","each","append","m","label","root","attributes","indexOf","charAt"],"mappings":"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","file":"../../scripts/layout/menu.js","sourcesContent":["/** Masthead Collection **/\ndefine(\n [\n \"layout/generic-nav-view\",\n \"mvc/webhooks\",\n \"utils/localization\",\n \"utils/utils\"\n ],\n function(GenericNav, Webhooks, _l, Utils) {\n var Collection = Backbone.Collection.extend({\n model: Backbone.Model.extend({\n defaults: {\n visible: true,\n target: \"_parent\"\n }\n }),\n fetch: function(options) {\n var self = this;\n options = options || {};\n this.reset();\n\n //\n // Chat server tab\n //\n var extendedNavItem = new GenericNav.GenericNavView();\n this.add(extendedNavItem.render());\n\n //\n // Analyze data tab.\n //\n this.add({\n id: \"analysis\",\n title: _l(\"Analyze Data\"),\n url: \"\",\n tooltip: _l(\"Analysis home view\")\n });\n\n //\n // Workflow tab.\n //\n this.add({\n id: \"workflow\",\n title: _l(\"Workflow\"),\n tooltip: _l(\"Chain tools into workflows\"),\n disabled: !Galaxy.user.id,\n url: \"workflow\"\n });\n\n //\n // 'Shared Items' or Libraries tab.\n //\n this.add({\n id: \"shared\",\n title: _l(\"Shared Data\"),\n url: \"library/index\",\n tooltip: _l(\"Access published resources\"),\n menu: [\n {\n title: _l(\"Data Libraries\"),\n url: \"library/list\"\n },\n {\n title: _l(\"Histories\"),\n url: \"histories/list_published\"\n },\n {\n title: _l(\"Workflows\"),\n url: \"workflows/list_published\"\n },\n {\n title: _l(\"Visualizations\"),\n url: \"visualizations/list_published\"\n },\n {\n title: _l(\"Pages\"),\n url: \"pages/list_published\"\n }\n ]\n });\n\n //\n // Visualization tab.\n //\n this.add({\n id: \"visualization\",\n title: _l(\"Visualization\"),\n url: \"visualizations/list\",\n tooltip: _l(\"Visualize datasets\"),\n disabled: !Galaxy.user.id,\n menu: [\n {\n title: _l(\"New Track Browser\"),\n url: \"visualization/trackster\",\n target: \"_frame\"\n },\n {\n title: _l(\"Saved Visualizations\"),\n url: \"visualizations/list\",\n target: \"_frame\"\n },\n {\n title: _l(\"Interactive Environments\"),\n url: \"visualization/gie_list\",\n target: \"galaxy_main\"\n }\n ]\n });\n\n //\n // Webhooks\n //\n Webhooks.add({\n url: \"api/webhooks/masthead/all\",\n callback: function(webhooks) {\n $(document).ready(function() {\n $.each(webhooks.models, function(index, model) {\n var webhook = model.toJSON();\n if (webhook.activate) {\n var obj = {\n id: webhook.name,\n icon: webhook.config.icon,\n url: webhook.config.url,\n tooltip: webhook.config.tooltip,\n onclick:\n webhook.config.function &&\n new Function(\n webhook.config.function\n )\n };\n\n // Galaxy.page is undefined for data libraries, workflows pages\n if (Galaxy.page) {\n Galaxy.page.masthead.collection.add(\n obj\n );\n } else if (Galaxy.masthead) {\n Galaxy.masthead.collection.add(obj);\n }\n\n // Append masthead script and styles to Galaxy main\n Utils.appendScriptStyle(webhook);\n }\n });\n });\n }\n });\n\n //\n // Admin.\n //\n Galaxy.user.get(\"is_admin\") &&\n this.add({\n id: \"admin\",\n title: _l(\"Admin\"),\n url: \"admin\",\n tooltip: _l(\"Administer this Galaxy\"),\n cls: \"admin-only\"\n });\n\n //\n // Help tab.\n //\n var helpTab = {\n id: \"help\",\n title: _l(\"Help\"),\n tooltip: _l(\"Support, contact, and community\"),\n menu: [\n {\n title: _l(\"Support\"),\n url: options.support_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Search\"),\n url: options.search_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Mailing Lists\"),\n url: options.mailing_lists,\n target: \"_blank\"\n },\n {\n title: _l(\"Videos\"),\n url: options.screencasts_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Wiki\"),\n url: options.wiki_url,\n target: \"_blank\"\n },\n {\n title: _l(\"How to Cite Galaxy\"),\n url: options.citation_url,\n target: \"_blank\"\n },\n {\n title: _l(\"Interactive Tours\"),\n url: \"tours\"\n }\n ]\n };\n options.terms_url &&\n helpTab.menu.push({\n title: _l(\"Terms and Conditions\"),\n url: options.terms_url,\n target: \"_blank\"\n });\n options.biostar_url &&\n helpTab.menu.unshift({\n title: _l(\"Ask a question\"),\n url: \"biostar/biostar_question_redirect\",\n target: \"_blank\"\n });\n options.biostar_url &&\n helpTab.menu.unshift({\n title: _l(\"Galaxy Biostar\"),\n url: options.biostar_url_redirect,\n target: \"_blank\"\n });\n this.add(helpTab);\n\n //\n // User tab.\n //\n var userTab = {};\n if (!Galaxy.user.id) {\n if (options.allow_user_creation) {\n userTab = {\n id: \"user\",\n title: _l(\"Login or Register\"),\n cls: \"loggedout-only\",\n tooltip: _l(\"Account registration or login\"),\n menu: [\n {\n title: _l(\"Login\"),\n url: \"user/login\",\n target: \"galaxy_main\",\n noscratchbook: true\n },\n {\n title: _l(\"Register\"),\n url: \"user/create\",\n target: \"galaxy_main\",\n noscratchbook: true\n }\n ]\n };\n } else {\n userTab = {\n id: \"user\",\n title: _l(\"Login\"),\n cls: \"loggedout-only\",\n tooltip: _l(\"Login\"),\n url: \"user/login\",\n target: \"galaxy_main\",\n noscratchbook: true\n };\n }\n } else {\n userTab = {\n id: \"user\",\n title: _l(\"User\"),\n cls: \"loggedin-only\",\n tooltip: _l(\"Account and saved data\"),\n menu: [\n {\n title:\n _l(\"Logged in as\") +\n \" \" +\n Galaxy.user.get(\"email\")\n },\n {\n title: _l(\"Preferences\"),\n url: \"user\"\n },\n {\n title: _l(\"Custom Builds\"),\n url: \"custom_builds\"\n },\n {\n title: _l(\"Logout\"),\n url:\n \"user/logout?session_csrf_token=\" +\n Galaxy.session_csrf_token,\n target: \"_top\",\n divider: true\n },\n {\n title: _l(\"Saved Histories\"),\n url: \"histories/list\",\n target: \"_top\"\n },\n {\n title: _l(\"Saved Datasets\"),\n url: \"datasets/list\",\n target: \"_top\"\n },\n {\n title: _l(\"Saved Pages\"),\n url: \"pages/list\",\n target: \"_top\"\n }\n ]\n };\n }\n this.add(userTab);\n var activeView = this.get(options.active_view);\n activeView && activeView.set(\"active\", true);\n return new jQuery.Deferred().resolve().promise();\n }\n });\n\n /** Masthead tab **/\n var Tab = Backbone.View.extend({\n initialize: function(options) {\n this.model = options.model;\n this.setElement(this._template());\n this.$dropdown = this.$(\".dropdown\");\n this.$toggle = this.$(\".dropdown-toggle\");\n this.$menu = this.$(\".dropdown-menu\");\n this.$note = this.$(\".dropdown-note\");\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n events: {\n \"click .dropdown-toggle\": \"_toggleClick\"\n },\n\n render: function() {\n var self = this;\n $(\".tooltip\").remove();\n this.$el.attr(\"id\", this.model.id).css({\n visibility:\n (this.model.get(\"visible\") && \"visible\") || \"hidden\"\n });\n this.model.set(\"url\", this._formatUrl(this.model.get(\"url\")));\n this.$note\n .html(this.model.get(\"note\") || \"\")\n .removeClass()\n .addClass(\"dropdown-note\")\n .addClass(this.model.get(\"note_cls\"))\n .css({\n display:\n (this.model.get(\"show_note\") && \"block\") || \"none\"\n });\n this.$toggle\n .html(this.model.get(\"title\") || \"\")\n .removeClass()\n .addClass(\"dropdown-toggle\")\n .addClass(this.model.get(\"cls\"))\n .addClass(\n this.model.get(\"icon\") &&\n \"dropdown-icon fa \" + this.model.get(\"icon\")\n )\n .addClass(this.model.get(\"toggle\") && \"toggle\")\n .attr(\"target\", this.model.get(\"target\"))\n .attr(\"href\", this.model.get(\"url\"))\n .attr(\"title\", this.model.get(\"tooltip\"))\n .tooltip(\"destroy\");\n this.model.get(\"tooltip\") &&\n this.$toggle.tooltip({ placement: \"bottom\" });\n this.$dropdown\n .removeClass()\n .addClass(\"dropdown\")\n .addClass(this.model.get(\"disabled\") && \"disabled\")\n .addClass(this.model.get(\"active\") && \"active\");\n if (this.model.get(\"menu\") && this.model.get(\"show_menu\")) {\n this.$menu.show();\n $(\"#dd-helper\")\n .show()\n .off()\n .on(\"click\", function() {\n $(\"#dd-helper\").hide();\n self.model.set(\"show_menu\", false);\n });\n } else {\n self.$menu.hide();\n $(\"#dd-helper\").hide();\n }\n this.$menu.empty().removeClass(\"dropdown-menu\");\n if (this.model.get(\"menu\")) {\n _.each(this.model.get(\"menu\"), function(menuItem) {\n self.$menu.append(self._buildMenuItem(menuItem));\n menuItem.divider &&\n self.$menu.append($(\"
    • \").addClass(\"divider\"));\n });\n self.$menu.addClass(\"dropdown-menu\");\n self.$toggle.append($(\"\").addClass(\"caret\"));\n }\n return this;\n },\n\n /** Add new menu item */\n _buildMenuItem: function(options) {\n var self = this;\n options = _.defaults(options || {}, {\n title: \"\",\n url: \"\",\n target: \"_parent\",\n noscratchbook: false\n });\n options.url = self._formatUrl(options.url);\n return $(\"
    • \").append(\n $(\"\")\n .attr(\"href\", options.url)\n .attr(\"target\", options.target)\n .html(options.title)\n .on(\"click\", function(e) {\n e.preventDefault();\n self.model.set(\"show_menu\", false);\n if (options.onclick) {\n options.onclick();\n } else {\n Galaxy.frame.add(options);\n }\n })\n );\n },\n\n /** Handle click event */\n _toggleClick: function(e) {\n var self = this;\n var model = this.model;\n e.preventDefault();\n $(\".tooltip\").hide();\n model.trigger(\"dispatch\", function(m) {\n model.id !== m.id &&\n m.get(\"menu\") &&\n m.set(\"show_menu\", false);\n });\n if (!model.get(\"disabled\")) {\n if (!model.get(\"menu\")) {\n model.get(\"onclick\")\n ? model.get(\"onclick\")()\n : Galaxy.frame.add(model.attributes);\n } else {\n model.set(\"show_menu\", true);\n }\n } else {\n function buildLink(label, url) {\n return $(\"
      \")\n .append(\n $(\"\")\n .attr(\"href\", Galaxy.root + url)\n .html(label)\n )\n .html();\n }\n this.$toggle.popover && this.$toggle.popover(\"destroy\");\n this.$toggle\n .popover({\n html: true,\n placement: \"bottom\",\n content:\n \"Please \" +\n buildLink(\n \"login\",\n \"user/login?use_panels=True\"\n ) +\n \" or \" +\n buildLink(\n \"register\",\n \"user/create?use_panels=True\"\n ) +\n \" to use this feature.\"\n })\n .popover(\"show\");\n setTimeout(function() {\n self.$toggle.popover(\"destroy\");\n }, 5000);\n }\n },\n\n /** Url formatting */\n _formatUrl: function(url) {\n return typeof url == \"string\" &&\n url.indexOf(\"//\") === -1 &&\n url.charAt(0) != \"/\"\n ? Galaxy.root + url\n : url;\n },\n\n /** body tempate */\n _template: function() {\n return (\n '
        ' +\n '
      • ' +\n '' +\n '
          ' +\n '
          ' +\n \"\" +\n \"
        \"\n );\n }\n });\n\n return {\n Collection: Collection,\n Tab: Tab\n };\n }\n);\n"]} \ No newline at end of file diff --git a/static/maps/libs/backbone.js.map b/static/maps/libs/backbone.js.map index 0dcb427c793..f1e1beaf144 100644 --- a/static/maps/libs/backbone.js.map +++ b/static/maps/libs/backbone.js.map @@ -1 +1 @@ -{"version":3,"sources":["libs/backbone.js"],"names":["factory","root","self","global","_typeof","define","amd","_","$","exports","Backbone","require","e","jQuery","Zepto","ender","previousBackbone","slice","Array","prototype","VERSION","noConflict","this","emulateHTTP","emulateJSON","addMethod","length","method","attribute","value","iteratee","context","cb","defaultVal","args","call","arguments","unshift","apply","addUnderscoreMethods","each","methods","Class","instance","isFunction","isObject","_isModel","modelMatcher","attrs","matcher","matches","model","attributes","Events","eventSplitter","eventsApi","events","name","callback","opts","names","i","keys","test","split","on","internalOn","obj","listening","ctx","id","listenTo","_listenId","uniqueId","listeningTo","_listeners","listeners","thisId","objId","count","onApi","options","handlers","push","off","_events","offApi","stopListening","_listeningTo","ids","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","trigger","Math","max","triggerApi","objEvents","allEvents","all","concat","triggerEvents","ev","a1","a2","a3","l","extend","Model","cid","cidPrefix","collection","defaults","result","set","changed","initialize","idAttribute","toJSON","sync","get","attr","escape","clone","val","key","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","isEmpty","has","changedAttributes","diff","old","size","previousAttributes","fetch","parse","success","resp","serverAttrs","wrapError","save","previous","validate","wait","isNew","patch","xhr","destroy","url","base","encodeURIComponent","constructor","defer","isValid","error","validationError","replace","values","pairs","invert","pick","omit","chain","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","modelMethods","tail","singular","isArray","removed","_removeModels","toAdd","toMerge","toRemove","modelMap","sort","merged","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","sortable","m","index","pop","shift","previousModels","_byId","first","findWhere","Error","modelId","sortBy","pluck","create","callbackOpts","indexOf","_removeReference","_onModelEvent","event","prevId","forEach","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","every","some","include","includes","contains","toArray","head","take","drop","last","without","difference","shuffle","lastIndexOf","partition","countBy","indexBy","findLastIndex","View","_ensureElement","initial","selector","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","match","eventName","listener","undelegate","_createElement","tagName","className","_setAttributes","type","methodMap","params","dataType","urlError","data","contentType","JSON","stringify","_method","beforeSend","processData","textStatus","errorThrown","update","delete","read","setRequestHeader","ajax","Router","routes","route","isRegExp","_routeToRegExp","router","_extractParameters","fragment","_bindRoutes","history","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","location","splatParam","started","interval","atRoot","pathname","getSearch","matchRoot","window","decodeFragment","decodeURI","href","getHash","getPath","path","charAt","getFragment","rootPath","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","document","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","routeStripper","createElement","style","display","iframe","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","addEventListener","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","title","_updateHash","protoProps","staticProps","child","parent","__super__"],"mappings":"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","file":"../../scripts/libs/backbone.js","sourcesContent":["// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n"]} \ No newline at end of file +{"version":3,"file":"backbone.js","sources":["../../src/libs/backbone.js"],"names":["factory","root","self","global","define","amd","_","$","exports","Backbone","require","e","jQuery","Zepto","ender","previousBackbone","slice","Array","prototype","VERSION","noConflict","this","emulateHTTP","emulateJSON","addMethod","length","method","attribute","value","iteratee","context","cb","defaultVal","args","call","arguments","unshift","apply","addUnderscoreMethods","Class","methods","each","instance","isFunction","isObject","_isModel","modelMatcher","isString","model","get","attrs","matcher","matches","attributes","Events","eventSplitter","eventsApi","events","name","callback","opts","names","i","keys","test","split","on","internalOn","obj","listening","_events","onApi","ctx","listeners","_listeners","id","listenTo","_listenId","uniqueId","listeningTo","_listeningTo","thisId","objId","count","options","handlers","push","off","offApi","stopListening","ids","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","trigger","Math","max","triggerApi","objEvents","allEvents","all","triggerEvents","concat","ev","l","a1","a2","a3","unbind","extend","Model","cid","cidPrefix","collection","parse","defaults","result","set","changed","initialize","validationError","idAttribute","toJSON","clone","sync","attr","escape","has","key","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","isEmpty","changedAttributes","diff","old","size","previous","previousAttributes","fetch","success","resp","serverAttrs","wrapError","save","validate","wait","isNew","patch","xhr","destroy","defer","url","base","urlError","replace","encodeURIComponent","constructor","isValid","error","modelMethods","values","pairs","invert","pick","omit","chain","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","tail","singular","isArray","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","some","m","index","_removeReference","previousModels","pop","shift","_byId","modelId","where","first","findWhere","Error","sortBy","pluck","create","callbackOpts","indexOf","_onModelEvent","event","prevId","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","match","delegate","eventName","listener","undelegate","_createElement","document","createElement","className","_setAttributes","type","methodMap","params","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","window","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","title","assign","_updateHash","protoProps","staticProps","child","parent","__super__"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/libs/bibtex.js.map b/static/maps/libs/bibtex.js.map index e493d15100c..8943efc2e12 100644 --- a/static/maps/libs/bibtex.js.map +++ b/static/maps/libs/bibtex.js.map @@ -1 +1 @@ -{"version":3,"sources":["libs/bibtex.js"],"names":["BibtexParser","arg0","entries","entry","push","tempStorage","accumulator","parser","call","errors","this","STATES_","ENTRY_OR_JUNK","OBJECT_TYPE","ENTRY_KEY","KV_KEY","DATA_","CALLBACK_","CHAR_","LINE_","CHAR_IN_LINE_","SKIPWS_","SKIPCOMMENT_","PARSETMP_","SKIPTILLEOL_","VALBRACES_","BRACETYPE_","inproceedings","BRACECOUNT_","proceedings","STATE_","article","ERRORS_","techreport","ENTRY_TYPES_","misc","mastersthesis","book","phdthesis","incollection","unpublished","inbook","manual","periodical","booklet","masterthesis","conference","online","data","MACROS_","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","getErrors","parse","chunk","i","length","processCharacter_","error_","text","processEntry_","f","Fields","CHARCONV_","re","raw","rep","replace","c","processed","len","skip","ObjectType","AnotherIteration","test","ot","toLowerCase","Key","EntryType","EntryKey","EQUALS","KV_VALUE","val","Value","doneParsingValue","delim","macro","trim","splice","exports","module"],"mappings":"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b,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,cAAe,MACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,YAAa,MACb,YAAa,MACb,QAAS,MACT,aAAc,MACd,eAAgB,MAChB,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,QAAS,MACT,QAAS,MACT,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,gBAAiB,MACjB,gBAAiB,MACjB,UAAW,MACX,qBAAsB,MACtB,YAAa,MACb,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MAChB,iBAAkB,MAClB,gBAAiB,MACjB,eAAgB,MAChB,cAAe,MACf,cAAe,MACf,cAA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MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MACl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","file":"../../scripts/libs/bibtex.js","sourcesContent":["/**\n * Parser.js\n * Copyright 2012-13 Mayank Lahiri\n * mlahiri@gmail.com\n * Released under the BSD License.\n *\n * A forgiving Bibtex parser that can:\n * \n * (1) operate in streaming or block mode, extracting entries as dictionaries. \n * (2) convert Latex special characters to UTF-8.\n * (3) best-effort parse malformed entries.\n * (4) run in a CommonJS environment or a browser, without any dependencies.\n * (5) be advanced-compiled by Google Closure Compiler.\n * \n * Handwritten as a labor of love, not auto-generated from a grammar. \n *\n * Modes of usage:\n *\n * (1) Synchronous, string\n *\n * var entries = BibtexParser(text);\n * console.log(entries);\n *\n * (2) Asynchronous, stream\n *\n * var entryCallback = function(entry) { console.log(entry); }\n * var parser = new BibtexParser(entryCallback);\n * parser.parse(chunk1);\n * parser.parse(chunk2);\n * ...\n * \n * @param {text|function(Object)} arg Either a Bibtex string or callback \n * function for processing parsed entries.\n * @constructor\n */\nfunction BibtexParser(arg0) {\n // Determine how this function is to be used\n if (typeof arg0 == 'string') {\n // Passed a string, synchronous call without 'new'\n var tempStorage = {};\n var entries = [];\n function accumulator(entry) {\n entries.push(entry);\n }\n var parser = BibtexParser.call(tempStorage, accumulator);\n parser.parse(arg0);\n return {\n 'entries': entries,\n 'errors': parser.getErrors()\n }\n }\n if (typeof arg0 != 'function') {\n throw 'Invalid parser construction.';\n }\n\n /** @enum {number} */\n this.STATES_ = {\n ENTRY_OR_JUNK: 0,\n OBJECT_TYPE: 1,\n ENTRY_KEY: 2, \n KV_KEY: 3, \n EQUALS: 4,\n KV_VALUE: 5 \n }\n /** @private */ this.DATA_ = {};\n /** @private */ this.CALLBACK_ = arg0;\n /** @private */ this.CHAR_ = 0;\n /** @private */ this.LINE_ = 1;\n /** @private */ this.CHAR_IN_LINE_ = 0;\n /** @private */ this.SKIPWS_ = true;\n /** @private */ this.SKIPCOMMENT_ = true;\n /** @private */ this.PARSETMP_ = {};\n /** @private */ this.SKIPTILLEOL_ = false;\n /** @private */ this.VALBRACES_ = null;\n /** @private */ this.BRACETYPE_ = null;\n /** @private */ this.BRACECOUNT_ = 0;\n /** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n /** @private */ this.ERRORS_ = [];\n /** @private */ this.ENTRY_TYPES_ = {\n 'inproceedings' : 1,\n 'proceedings' : 2,\n 'article' : 3,\n 'techreport' : 4,\n 'misc' : 5,\n 'mastersthesis' : 6,\n 'book' : 7,\n 'phdthesis' : 8,\n 'incollection' : 9,\n 'unpublished' : 10,\n 'inbook' : 11,\n 'manual' : 12,\n 'periodical' : 13,\n 'booklet' : 14,\n 'masterthesis' : 15,\n 'conference' : 16\n ,'online' : 998 // Galaxy MOD: Handle @online entries for preprints.\n ,'data' : 999 // Galaxy MOD: Handle @data citations coming from figshare.\n }\n /** @private */ this.MACROS_ = {\n 'jan' : 'January',\n 'feb' : 'February',\n 'mar' : 'March',\n 'apr' : 'April',\n 'may' : 'May',\n 'jun' : 'June',\n 'jul' : 'July',\n 'aug' : 'August',\n 'sep' : 'September',\n 'oct' : 'October',\n 'nov' : 'November',\n 'dec' : 'December',\n 'Jan' : 'January',\n 'Feb' : 'February',\n 'Mar' : 'March',\n 'Apr' : 'April',\n 'May' : 'May',\n 'Jun' : 'June',\n 'Jul' : 'July',\n 'Aug' : 'August',\n 'Sep' : 'September',\n 'Oct' : 'October',\n 'Nov' : 'November',\n 'Dec' : 'December'\n }\n\n /**\n * Gets an array of all errors encountered during parsing.\n * Array entries are of the format:\n * [ line number, character in line, character in stream, error text ]\n *\n * @returns Array\n * @public\n */\n this.getErrors = function() {\n return this.ERRORS_;\n }\n\n /**\n * Processes a chunk of data\n * @public\n */\n this.parse = function(chunk) {\n for (var i = 0; i < chunk.length; i++)\n this.processCharacter_(chunk[i]);\n }\n\n /**\n * Logs error at current stream position.\n *\n * @private\n */\n this.error_ = function(text) {\n this.ERRORS_.push([ this.LINE_, \n this.CHAR_IN_LINE_,\n this.CHAR_,\n text ])\n }\n\n /**\n * Called after an entire entry has been parsed from the stream.\n * Performs post-processing and invokes the entry callback pointed to by\n * this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.\n */\n this.processEntry_ = function() {\n var data = this.DATA_;\n if (data.Fields) \n for (var f in data.Fields) {\n var raw = data.Fields[f];\n\n // Convert Latex/Bibtex special characters to UTF-8 equivalents\n for (var i = 0; i < this.CHARCONV_.length; i++) {\n var re = this.CHARCONV_[i][0];\n var rep = this.CHARCONV_[i][1];\n raw = raw.replace(re, rep);\n }\n\n // Basic substitutions\n raw = raw.replace(/[\\n\\r\\t]/g, ' ')\n .replace(/\\s\\s+/g, ' ')\n .replace(/^\\s+|\\s+$/g, '')\n\n // Remove braces and backslashes\n var len = raw.length;\n var processed = '';\n for (var i = 0; i < len; i++) {\n var c = raw[i];\n var skip = false;\n if (c == '\\\\' && i < len-1) \n c = raw[++i];\n else {\n if (c == '{' || c == '}')\n skip = true;\n }\n if (!skip)\n processed += c;\n }\n data.Fields[f] = processed\n }\n\n if (data.ObjectType == 'string') {\n for (var f in data.Fields) { \n this.MACROS_[f] = data.Fields[f];\n }\n } else {\n // Parsed a new Bibtex entry\n this.CALLBACK_(data);\n }\n }\n\n\n /**\n * Processes next character in the stream, invoking the callback after \n * each entry has been found and processed.\n * \n * @private\n * @param {string} c Next character in input stream\n */\n this.processCharacter_ = function(c) {\n // Housekeeping\n this.CHAR_++;\n this.CHAR_IN_LINE_++;\n if (c == '\\n') {\n this.LINE_++;\n this.CHAR_IN_LINE_ = 1;\n }\n\n // Convenience states for skipping whitespace when needed\n if (this.SKIPTILLEOL_) {\n if (c == '\\n')\n this.SKIPTILLEOL_ = false;\n return;\n }\n if (this.SKIPCOMMENT_ && c == '%') {\n this.SKIPTILLEOL_ = true;\n return;\n }\n if (this.SKIPWS_ && /\\s/.test(c))\n return;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n this.SKIPTILLEOL_ = false;\n\n // Main state machine\n var AnotherIteration = true;\n while (AnotherIteration) {\n //console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)\n AnotherIteration = false;\n switch(this.STATE_) {\n // -- Scan for an object marker ('@')\n // -- Reset temporary data structure in case previous entry was garbled\n case this.STATES_.ENTRY_OR_JUNK:\n if (c == '@') {\n // SUCCESS: Parsed a valid start-of-object marker.\n // NEXT_STATE: OBJECT_TYPE\n this.STATE_ = this.STATES_.OBJECT_TYPE;\n this.DATA_ = {\n ObjectType : ''\n };\n }\n this.BRACETYPE_ = null;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n\n // Start at first non-whitespace character after start-of-object '@'\n // -- Accept [A-Za-z], break on non-matching character\n // -- Populate this.DATA_.EntryType and this.DATA_.ObjectType\n case this.STATES_.OBJECT_TYPE:\n if (/[A-Za-z]/.test(c)) {\n this.DATA_.ObjectType += c.toLowerCase();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // Break from state and validate object type\n var ot = this.DATA_.ObjectType;\n if (ot == 'comment') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot == 'string') {\n this.DATA_.ObjectType = ot;\n this.DATA_.Fields = {};\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.STATE_ = this.STATES_.KV_KEY;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.PARSETMP_ = {\n Key: ''\n }\n } else {\n if (ot == 'preamble') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot in this.ENTRY_TYPES_) {\n // SUCCESS: Parsed a valid object type.\n // NEXT_STATE: ENTRY_KEY\n this.DATA_.ObjectType = 'entry';\n this.DATA_.EntryType = ot;\n this.DATA_.EntryKey = '';\n this.STATE_ = this.STATES_.ENTRY_KEY;\n AnotherIteration = true;\n } else {\n // ERROR: Unrecognized object type.\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Unrecognized object type: \"' +\n this.DATA_.ObjectType + '\"')\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n }\n }\n }\n }\n }\n break;\n\n // Start at first non-alphabetic character after an entry type\n // -- Populate this.DATA_.EntryKey\n case this.STATES_.ENTRY_KEY:\n if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n }\n if (/[,%\\s]/.test(c)) {\n if (this.DATA_.EntryKey.length < 1) { \n // Skip comments and whitespace before entry key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n if (this.BRACETYPE_ == null) {\n // ERROR: No opening brace for object\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('No opening brace for object.');\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n // SUCCESS: Parsed an entry key\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n AnotherIteration = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.PARSETMP_.Key= '';\n this.DATA_.Fields = {};\n }\n }\n } else {\n this.DATA_.EntryKey += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n }\n break;\n\n // Start at first non-whitespace/comment character after entry key.\n // -- Populate this.PARSETMP_.Key\n case this.STATES_.KV_KEY:\n // Test for end of entry\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // SUCCESS: Parsed an entry, possible incomplete\n // NEXT_STATE: ENTRY_OR_JUNK\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (/[\\-A-Za-z:]/.test(c)) {\n // Add to key\n this.PARSETMP_.Key += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // Either end of key or we haven't encountered start of key\n if (this.PARSETMP_.Key.length < 1) {\n // Keep going till we see a key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // SUCCESS: Found full key in K/V pair\n // NEXT_STATE: EQUALS\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.EQUALS;\n AnotherIteration = true;\n }\n }\n break;\n\n // Start at first non-alphabetic character after K/V pair key.\n case this.STATES_.EQUALS:\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // ERROR: K/V pair with key but no value\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Key-value pair has key \"' +\n this.PARSETMP_.Key + '\", but no value.');\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (c == '=') {\n // SUCCESS: found an equal signs separating key and value\n // NEXT_STATE: KV_VALUE\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_VALUE;\n this.PARSETMP_.Value = '';\n this.VALBRACES_ = { '\"' : [], '{' : [] };\n }\n break;\n\n // Start at first non-whitespace/comment character after '=' \n // -- Populate this.PARSETMP_.Value\n case this.STATES_.KV_VALUE:\n var delim = this.VALBRACES_;\n var val = this.PARSETMP_.Value;\n var doneParsingValue = false;\n\n // Test for special characters\n if (c == '\"' || c == '{' || c == '}' || c == ',') {\n if (c == ',') {\n // This comma can mean:\n // (1) just another comma literal\n // (2) end of a macro reference\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of a macro reference\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n doneParsingValue = true;\n }\n }\n if (c == '\"') {\n // This quote can mean:\n // (1) opening delimiter\n // (2) closing delimiter\n // (3) literal, if we have a '{' on the stack\n if (0 === delim['\"'].length + delim['{'].length) {\n // opening delimiter\n delim['\"'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n break;\n }\n if (delim['\"'].length == 1 && delim['{'].length == 0 &&\n (val.length==0 || val[val.length-1] != '\\\\')) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // literal, add to value\n }\n }\n if (c == '{') {\n // This brace can mean:\n // (1) opening delimiter\n // (2) stacked verbatim delimiter\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n delim['{'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // literal, add to value\n }\n }\n if (c == '}') {\n // This brace can mean:\n // (1) closing delimiter\n // (2) closing stacked verbatim delimiter\n // (3) end of object definition if value was a macro\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of object definition, after macro\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n AnotherIteration = true;\n doneParsingValue = true;\n } else {\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n if (delim['{'].length > 0) {\n // pop stack for stacked verbatim delimiter\n delim['{'].splice(delim['{'].length-1, 1)\n if (0 == delim['{'].length + delim['\"'].length) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // end verbatim block\n }\n }\n } else {\n // literal, add to value\n }\n }\n }\n }\n\n // If here, then we are either done parsing the value or \n // have a literal that should be added to the value.\n if (doneParsingValue) {\n // SUCCESS: value parsed\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;\n this.PARSETMP_ = { Key: '' };\n this.VALBRACES_ = null;\n } else {\n this.PARSETMP_.Value += c;\n }\n break;\n } // end switch (this.STATE_)\n } // end while(AnotherIteration)\n } // end function processCharacter \n\n /** @private */ this.CHARCONV_ = [\n [ /\\\\space /g, '\\u0020' ],\n [ /\\\\textdollar /g, '\\u0024' ],\n [ /\\\\textquotesingle /g, '\\u0027' ],\n [ /\\\\ast /g, '\\u002A' ],\n [ /\\\\textbackslash /g, '\\u005C' ],\n [ /\\\\\\^\\{\\}/g, '\\u005E' ],\n [ /\\\\textasciigrave /g, '\\u0060' ],\n [ /\\\\lbrace /g, '\\u007B' ],\n [ /\\\\vert /g, '\\u007C' ],\n [ /\\\\rbrace /g, '\\u007D' ],\n [ /\\\\textasciitilde /g, '\\u007E' ],\n [ /\\\\textexclamdown /g, '\\u00A1' ],\n [ /\\\\textcent /g, '\\u00A2' ],\n [ /\\\\textsterling /g, '\\u00A3' ],\n [ /\\\\textcurrency /g, '\\u00A4' ],\n [ /\\\\textyen /g, '\\u00A5' ],\n [ /\\\\textbrokenbar /g, '\\u00A6' ],\n [ /\\\\textsection /g, '\\u00A7' ],\n [ /\\\\textasciidieresis /g, '\\u00A8' ],\n [ /\\\\textcopyright /g, '\\u00A9' ],\n [ /\\\\textordfeminine /g, '\\u00AA' ],\n [ /\\\\guillemotleft /g, '\\u00AB' ],\n [ /\\\\lnot /g, '\\u00AC' ],\n [ /\\\\textregistered /g, '\\u00AE' ],\n [ /\\\\textasciimacron /g, '\\u00AF' ],\n [ /\\\\textdegree /g, '\\u00B0' ],\n [ /\\\\pm /g, '\\u00B1' ],\n [ /\\\\textasciiacute /g, '\\u00B4' ],\n [ /\\\\mathrm\\{\\\\mu\\}/g, '\\u00B5' ],\n [ /\\\\textparagraph /g, '\\u00B6' ],\n [ /\\\\cdot /g, '\\u00B7' ],\n [ /\\\\c\\{\\}/g, '\\u00B8' ],\n [ /\\\\textordmasculine /g, '\\u00BA' ],\n [ /\\\\guillemotright /g, '\\u00BB' ],\n [ /\\\\textonequarter /g, '\\u00BC' ],\n [ /\\\\textonehalf /g, '\\u00BD' ],\n [ /\\\\textthreequarters /g, '\\u00BE' ],\n [ /\\\\textquestiondown /g, '\\u00BF' ],\n [ /\\\\`\\{A\\}/g, '\\u00C0' ],\n [ /\\\\'\\{A\\}/g, '\\u00C1' ],\n [ /\\\\\\^\\{A\\}/g, '\\u00C2' ],\n [ /\\\\~\\{A\\}/g, '\\u00C3' ],\n [ /\\\\\"\\{A\\}/g, '\\u00C4' ],\n [ /\\\\AA /g, '\\u00C5' ],\n [ /\\\\AE /g, '\\u00C6' ],\n [ /\\\\c\\{C\\}/g, '\\u00C7' ],\n [ /\\\\`\\{E\\}/g, '\\u00C8' ],\n [ /\\\\'\\{E\\}/g, '\\u00C9' ],\n [ /\\\\\\^\\{E\\}/g, '\\u00CA' ],\n [ /\\\\\"\\{E\\}/g, '\\u00CB' ],\n [ /\\\\`\\{I\\}/g, '\\u00CC' ],\n [ /\\\\'\\{I\\}/g, '\\u00CD' ],\n [ /\\\\\\^\\{I\\}/g, '\\u00CE' ],\n [ /\\\\\"\\{I\\}/g, '\\u00CF' ],\n [ /\\\\DH /g, '\\u00D0' ],\n [ /\\\\~\\{N\\}/g, '\\u00D1' ],\n [ /\\\\`\\{O\\}/g, '\\u00D2' ],\n [ /\\\\'\\{O\\}/g, '\\u00D3' ],\n [ /\\\\\\^\\{O\\}/g, '\\u00D4' ],\n [ /\\\\~\\{O\\}/g, '\\u00D5' ],\n [ /\\\\\"\\{O\\}/g, '\\u00D6' ],\n [ /\\\\texttimes /g, '\\u00D7' ],\n [ /\\\\O /g, '\\u00D8' ],\n [ /\\\\`\\{U\\}/g, '\\u00D9' ],\n [ /\\\\'\\{U\\}/g, '\\u00DA' ],\n [ /\\\\\\^\\{U\\}/g, '\\u00DB' ],\n [ /\\\\\"\\{U\\}/g, '\\u00DC' ],\n [ /\\\\'\\{Y\\}/g, '\\u00DD' ],\n [ /\\\\TH /g, '\\u00DE' ],\n [ /\\\\ss /g, '\\u00DF' ],\n [ /\\\\`\\{a\\}/g, '\\u00E0' ],\n [ /\\\\'\\{a\\}/g, '\\u00E1' ],\n [ /\\\\\\^\\{a\\}/g, '\\u00E2' ],\n [ /\\\\~\\{a\\}/g, '\\u00E3' ],\n [ /\\\\\"\\{a\\}/g, '\\u00E4' ],\n [ /\\\\aa /g, '\\u00E5' ],\n [ /\\\\ae /g, '\\u00E6' ],\n [ /\\\\c\\{c\\}/g, '\\u00E7' ],\n [ /\\\\`\\{e\\}/g, '\\u00E8' ],\n [ /\\\\'\\{e\\}/g, '\\u00E9' ],\n [ /\\\\\\^\\{e\\}/g, '\\u00EA' ],\n [ /\\\\\"\\{e\\}/g, '\\u00EB' ],\n [ /\\\\`\\{\\\\i\\}/g, '\\u00EC' ],\n [ /\\\\'\\{\\\\i\\}/g, '\\u00ED' ],\n [ /\\\\\\^\\{\\\\i\\}/g, '\\u00EE' ],\n [ /\\\\\"\\{\\\\i\\}/g, '\\u00EF' ],\n [ /\\\\dh /g, '\\u00F0' ],\n [ /\\\\~\\{n\\}/g, '\\u00F1' ],\n [ /\\\\`\\{o\\}/g, '\\u00F2' ],\n [ /\\\\'\\{o\\}/g, '\\u00F3' ],\n [ /\\\\\\^\\{o\\}/g, '\\u00F4' ],\n [ /\\\\~\\{o\\}/g, '\\u00F5' ],\n [ /\\\\\"\\{o\\}/g, '\\u00F6' ],\n [ /\\\\div /g, '\\u00F7' ],\n [ /\\\\o /g, '\\u00F8' ],\n [ /\\\\`\\{u\\}/g, '\\u00F9' ],\n [ /\\\\'\\{u\\}/g, '\\u00FA' ],\n [ /\\\\\\^\\{u\\}/g, '\\u00FB' ],\n [ /\\\\\"\\{u\\}/g, '\\u00FC' ],\n [ /\\\\'\\{y\\}/g, '\\u00FD' ],\n [ /\\\\th /g, '\\u00FE' ],\n [ /\\\\\"\\{y\\}/g, '\\u00FF' ],\n [ /\\\\=\\{A\\}/g, '\\u0100' ],\n [ /\\\\=\\{a\\}/g, '\\u0101' ],\n [ /\\\\u\\{A\\}/g, '\\u0102' ],\n [ /\\\\u\\{a\\}/g, '\\u0103' ],\n [ /\\\\k\\{A\\}/g, '\\u0104' ],\n [ /\\\\k\\{a\\}/g, '\\u0105' ],\n [ /\\\\'\\{C\\}/g, '\\u0106' ],\n [ /\\\\'\\{c\\}/g, '\\u0107' ],\n [ /\\\\\\^\\{C\\}/g, '\\u0108' ],\n [ /\\\\\\^\\{c\\}/g, '\\u0109' ],\n [ /\\\\.\\{C\\}/g, '\\u010A' ],\n [ /\\\\.\\{c\\}/g, '\\u010B' ],\n [ /\\\\v\\{C\\}/g, '\\u010C' ],\n [ /\\\\v\\{c\\}/g, '\\u010D' ],\n [ /\\\\v\\{D\\}/g, '\\u010E' ],\n [ /\\\\v\\{d\\}/g, '\\u010F' ],\n [ /\\\\DJ /g, '\\u0110' ],\n [ /\\\\dj /g, '\\u0111' ],\n [ /\\\\=\\{E\\}/g, '\\u0112' ],\n [ /\\\\=\\{e\\}/g, '\\u0113' ],\n [ /\\\\u\\{E\\}/g, '\\u0114' ],\n [ /\\\\u\\{e\\}/g, '\\u0115' ],\n [ /\\\\.\\{E\\}/g, '\\u0116' ],\n [ /\\\\.\\{e\\}/g, '\\u0117' ],\n [ /\\\\k\\{E\\}/g, '\\u0118' ],\n [ /\\\\k\\{e\\}/g, '\\u0119' ],\n [ /\\\\v\\{E\\}/g, '\\u011A' ],\n [ /\\\\v\\{e\\}/g, '\\u011B' ],\n [ /\\\\\\^\\{G\\}/g, '\\u011C' ],\n [ /\\\\\\^\\{g\\}/g, '\\u011D' ],\n [ /\\\\u\\{G\\}/g, '\\u011E' ],\n [ /\\\\u\\{g\\}/g, '\\u011F' ],\n [ /\\\\.\\{G\\}/g, '\\u0120' ],\n [ /\\\\.\\{g\\}/g, '\\u0121' ],\n [ /\\\\c\\{G\\}/g, '\\u0122' ],\n [ /\\\\c\\{g\\}/g, '\\u0123' ],\n [ /\\\\\\^\\{H\\}/g, '\\u0124' ],\n [ /\\\\\\^\\{h\\}/g, '\\u0125' ],\n [ /\\\\Elzxh /g, '\\u0127' ],\n [ /\\\\~\\{I\\}/g, '\\u0128' ],\n [ /\\\\~\\{\\\\i\\}/g, '\\u0129' ],\n [ /\\\\=\\{I\\}/g, '\\u012A' ],\n [ /\\\\=\\{\\\\i\\}/g, '\\u012B' ],\n [ /\\\\u\\{I\\}/g, '\\u012C' ],\n [ /\\\\u\\{\\\\i\\}/g, '\\u012D' ],\n [ /\\\\k\\{I\\}/g, '\\u012E' ],\n [ /\\\\k\\{i\\}/g, '\\u012F' ],\n [ /\\\\.\\{I\\}/g, '\\u0130' ],\n [ /\\\\i /g, '\\u0131' ],\n [ /\\\\\\^\\{J\\}/g, '\\u0134' ],\n [ /\\\\\\^\\{\\\\j\\}/g, '\\u0135' ],\n [ /\\\\c\\{K\\}/g, '\\u0136' ],\n [ /\\\\c\\{k\\}/g, '\\u0137' ],\n [ /\\\\'\\{L\\}/g, '\\u0139' ],\n [ /\\\\'\\{l\\}/g, '\\u013A' ],\n [ /\\\\c\\{L\\}/g, '\\u013B' ],\n [ /\\\\c\\{l\\}/g, '\\u013C' ],\n [ /\\\\v\\{L\\}/g, '\\u013D' ],\n [ /\\\\v\\{l\\}/g, '\\u013E' ],\n [ /\\\\L /g, '\\u0141' ],\n [ /\\\\l /g, '\\u0142' ],\n [ /\\\\'\\{N\\}/g, '\\u0143' ],\n [ /\\\\'\\{n\\}/g, '\\u0144' ],\n [ /\\\\c\\{N\\}/g, '\\u0145' ],\n [ /\\\\c\\{n\\}/g, '\\u0146' ],\n [ /\\\\v\\{N\\}/g, '\\u0147' ],\n [ /\\\\v\\{n\\}/g, '\\u0148' ],\n [ /\\\\NG /g, '\\u014A' ],\n [ /\\\\ng /g, '\\u014B' ],\n [ /\\\\=\\{O\\}/g, '\\u014C' ],\n [ /\\\\=\\{o\\}/g, '\\u014D' ],\n [ /\\\\u\\{O\\}/g, '\\u014E' ],\n [ /\\\\u\\{o\\}/g, '\\u014F' ],\n [ /\\\\H\\{O\\}/g, '\\u0150' ],\n [ /\\\\H\\{o\\}/g, '\\u0151' ],\n [ /\\\\OE /g, '\\u0152' ],\n [ /\\\\oe /g, '\\u0153' ],\n [ /\\\\'\\{R\\}/g, '\\u0154' ],\n [ /\\\\'\\{r\\}/g, '\\u0155' ],\n [ /\\\\c\\{R\\}/g, '\\u0156' ],\n [ /\\\\c\\{r\\}/g, '\\u0157' ],\n [ /\\\\v\\{R\\}/g, '\\u0158' ],\n [ /\\\\v\\{r\\}/g, '\\u0159' ],\n [ /\\\\'\\{S\\}/g, '\\u015A' ],\n [ /\\\\'\\{s\\}/g, '\\u015B' ],\n [ /\\\\\\^\\{S\\}/g, '\\u015C' ],\n [ /\\\\\\^\\{s\\}/g, '\\u015D' ],\n [ /\\\\c\\{S\\}/g, '\\u015E' ],\n [ /\\\\c\\{s\\}/g, '\\u015F' ],\n [ /\\\\v\\{S\\}/g, '\\u0160' ],\n [ /\\\\v\\{s\\}/g, '\\u0161' ],\n [ /\\\\c\\{T\\}/g, '\\u0162' ],\n [ /\\\\c\\{t\\}/g, '\\u0163' ],\n [ /\\\\v\\{T\\}/g, '\\u0164' ],\n [ /\\\\v\\{t\\}/g, '\\u0165' ],\n [ /\\\\~\\{U\\}/g, '\\u0168' ],\n [ /\\\\~\\{u\\}/g, '\\u0169' ],\n [ /\\\\=\\{U\\}/g, '\\u016A' ],\n [ /\\\\=\\{u\\}/g, '\\u016B' ],\n [ /\\\\u\\{U\\}/g, '\\u016C' ],\n [ /\\\\u\\{u\\}/g, '\\u016D' ],\n [ /\\\\r\\{U\\}/g, '\\u016E' ],\n [ /\\\\r\\{u\\}/g, '\\u016F' ],\n [ /\\\\H\\{U\\}/g, '\\u0170' ],\n [ /\\\\H\\{u\\}/g, '\\u0171' ],\n [ /\\\\k\\{U\\}/g, '\\u0172' ],\n [ /\\\\k\\{u\\}/g, '\\u0173' ],\n [ /\\\\\\^\\{W\\}/g, '\\u0174' ],\n [ /\\\\\\^\\{w\\}/g, '\\u0175' ],\n [ /\\\\\\^\\{Y\\}/g, '\\u0176' ],\n [ /\\\\\\^\\{y\\}/g, '\\u0177' ],\n [ /\\\\\"\\{Y\\}/g, '\\u0178' ],\n [ /\\\\'\\{Z\\}/g, '\\u0179' ],\n [ /\\\\'\\{z\\}/g, '\\u017A' ],\n [ /\\\\.\\{Z\\}/g, '\\u017B' ],\n [ /\\\\.\\{z\\}/g, '\\u017C' ],\n [ /\\\\v\\{Z\\}/g, '\\u017D' ],\n [ /\\\\v\\{z\\}/g, '\\u017E' ],\n [ /\\\\texthvlig /g, '\\u0195' ],\n [ /\\\\textnrleg /g, '\\u019E' ],\n [ /\\\\eth /g, '\\u01AA' ],\n [ /\\\\textdoublepipe /g, '\\u01C2' ],\n [ /\\\\'\\{g\\}/g, '\\u01F5' ],\n [ /\\\\Elztrna /g, '\\u0250' ],\n [ /\\\\Elztrnsa /g, '\\u0252' ],\n [ /\\\\Elzopeno /g, '\\u0254' ],\n [ /\\\\Elzrtld /g, '\\u0256' ],\n [ /\\\\Elzschwa /g, '\\u0259' ],\n [ /\\\\varepsilon /g, '\\u025B' ],\n [ /\\\\Elzpgamma /g, '\\u0263' ],\n [ /\\\\Elzpbgam /g, '\\u0264' ],\n [ /\\\\Elztrnh /g, '\\u0265' ],\n [ /\\\\Elzbtdl /g, '\\u026C' ],\n [ /\\\\Elzrtll /g, '\\u026D' ],\n [ /\\\\Elztrnm /g, '\\u026F' ],\n [ /\\\\Elztrnmlr /g, '\\u0270' ],\n [ /\\\\Elzltlmr /g, '\\u0271' ],\n [ /\\\\Elzltln /g, '\\u0272' ],\n [ /\\\\Elzrtln /g, '\\u0273' ],\n [ /\\\\Elzclomeg /g, '\\u0277' ],\n [ /\\\\textphi /g, '\\u0278' ],\n [ /\\\\Elztrnr /g, '\\u0279' ],\n [ /\\\\Elztrnrl /g, '\\u027A' ],\n [ /\\\\Elzrttrnr /g, '\\u027B' ],\n [ /\\\\Elzrl /g, '\\u027C' ],\n [ /\\\\Elzrtlr /g, '\\u027D' ],\n [ /\\\\Elzfhr /g, '\\u027E' ],\n [ /\\\\Elzrtls /g, '\\u0282' ],\n [ /\\\\Elzesh /g, '\\u0283' ],\n [ /\\\\Elztrnt /g, '\\u0287' ],\n [ /\\\\Elzrtlt /g, '\\u0288' ],\n [ /\\\\Elzpupsil /g, '\\u028A' ],\n [ /\\\\Elzpscrv /g, '\\u028B' ],\n [ /\\\\Elzinvv /g, '\\u028C' ],\n [ /\\\\Elzinvw /g, '\\u028D' ],\n [ /\\\\Elztrny /g, '\\u028E' ],\n [ /\\\\Elzrtlz /g, '\\u0290' ],\n [ /\\\\Elzyogh /g, '\\u0292' ],\n [ /\\\\Elzglst /g, '\\u0294' ],\n [ /\\\\Elzreglst /g, '\\u0295' ],\n [ /\\\\Elzinglst /g, '\\u0296' ],\n [ /\\\\textturnk /g, '\\u029E' ],\n [ /\\\\Elzdyogh /g, '\\u02A4' ],\n [ /\\\\Elztesh /g, '\\u02A7' ],\n [ /\\\\textasciicaron /g, '\\u02C7' ],\n [ /\\\\Elzverts /g, '\\u02C8' ],\n [ /\\\\Elzverti /g, '\\u02CC' ],\n [ /\\\\Elzlmrk /g, '\\u02D0' ],\n [ /\\\\Elzhlmrk /g, '\\u02D1' ],\n [ /\\\\Elzsbrhr /g, '\\u02D2' ],\n [ /\\\\Elzsblhr /g, '\\u02D3' ],\n [ /\\\\Elzrais /g, '\\u02D4' ],\n [ /\\\\Elzlow /g, '\\u02D5' ],\n [ /\\\\textasciibreve /g, '\\u02D8' ],\n [ /\\\\textperiodcentered /g, '\\u02D9' ],\n [ /\\\\r\\{\\}/g, '\\u02DA' ],\n [ /\\\\k\\{\\}/g, '\\u02DB' ],\n [ /\\\\texttildelow /g, '\\u02DC' ],\n [ /\\\\H\\{\\}/g, '\\u02DD' ],\n [ /\\\\tone\\{55\\}/g, '\\u02E5' ],\n [ /\\\\tone\\{44\\}/g, '\\u02E6' ],\n [ /\\\\tone\\{33\\}/g, '\\u02E7' ],\n [ /\\\\tone\\{22\\}/g, '\\u02E8' ],\n [ /\\\\tone\\{11\\}/g, '\\u02E9' ],\n [ /\\\\cyrchar\\\\C/g, '\\u030F' ],\n [ /\\\\Elzpalh /g, '\\u0321' ],\n [ /\\\\Elzrh /g, '\\u0322' ],\n [ /\\\\Elzsbbrg /g, '\\u032A' ],\n [ /\\\\Elzxl /g, '\\u0335' ],\n [ /\\\\Elzbar /g, '\\u0336' ],\n [ /\\\\'\\{A\\}/g, '\\u0386' ],\n [ /\\\\'\\{E\\}/g, '\\u0388' ],\n [ /\\\\'\\{H\\}/g, '\\u0389' ],\n [ /\\\\'\\{\\}\\{I\\}/g, '\\u038A' ],\n [ /\\\\'\\{\\}O/g, '\\u038C' ],\n [ /\\\\mathrm\\{'Y\\}/g, '\\u038E' ],\n [ /\\\\mathrm\\{'\\\\Omega\\}/g, '\\u038F' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/g, '\\u0390' ],\n [ /\\\\Alpha /g, '\\u0391' ],\n [ /\\\\Beta /g, '\\u0392' ],\n [ /\\\\Gamma /g, '\\u0393' ],\n [ /\\\\Delta /g, '\\u0394' ],\n [ /\\\\Epsilon /g, '\\u0395' ],\n [ /\\\\Zeta /g, '\\u0396' ],\n [ /\\\\Eta /g, '\\u0397' ],\n [ /\\\\Theta /g, '\\u0398' ],\n [ /\\\\Iota /g, '\\u0399' ],\n [ /\\\\Kappa /g, '\\u039A' ],\n [ /\\\\Lambda /g, '\\u039B' ],\n [ /\\\\Xi /g, '\\u039E' ],\n [ /\\\\Pi /g, '\\u03A0' ],\n [ /\\\\Rho /g, '\\u03A1' ],\n [ /\\\\Sigma /g, '\\u03A3' ],\n [ /\\\\Tau /g, '\\u03A4' ],\n [ /\\\\Upsilon /g, '\\u03A5' ],\n [ /\\\\Phi /g, '\\u03A6' ],\n [ /\\\\Chi /g, '\\u03A7' ],\n [ /\\\\Psi /g, '\\u03A8' ],\n [ /\\\\Omega /g, '\\u03A9' ],\n [ /\\\\mathrm\\{\\\\ddot\\{I\\}\\}/g, '\\u03AA' ],\n [ /\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/g, '\\u03AB' ],\n [ /\\\\'\\{\\$\\\\alpha\\$\\}/g, '\\u03AC' ],\n [ /\\\\acute\\{\\\\epsilon\\}/g, '\\u03AD' ],\n [ /\\\\acute\\{\\\\eta\\}/g, '\\u03AE' ],\n [ /\\\\acute\\{\\\\iota\\}/g, '\\u03AF' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/g, '\\u03B0' ],\n [ /\\\\alpha /g, '\\u03B1' ],\n [ /\\\\beta /g, '\\u03B2' ],\n [ /\\\\gamma /g, '\\u03B3' ],\n [ /\\\\delta /g, '\\u03B4' ],\n [ /\\\\epsilon /g, '\\u03B5' ],\n [ /\\\\zeta /g, '\\u03B6' ],\n [ /\\\\eta /g, '\\u03B7' ],\n [ /\\\\texttheta /g, '\\u03B8' ],\n [ /\\\\iota /g, '\\u03B9' ],\n [ /\\\\kappa /g, '\\u03BA' ],\n [ /\\\\lambda /g, '\\u03BB' ],\n [ /\\\\mu /g, '\\u03BC' ],\n [ /\\\\nu /g, '\\u03BD' ],\n [ /\\\\xi /g, '\\u03BE' ],\n [ /\\\\pi /g, '\\u03C0' ],\n [ /\\\\rho /g, '\\u03C1' ],\n [ /\\\\varsigma /g, '\\u03C2' ],\n [ /\\\\sigma /g, '\\u03C3' ],\n [ /\\\\tau /g, '\\u03C4' ],\n [ /\\\\upsilon /g, '\\u03C5' ],\n [ /\\\\varphi /g, '\\u03C6' ],\n [ /\\\\chi /g, '\\u03C7' ],\n [ /\\\\psi /g, '\\u03C8' ],\n [ /\\\\omega /g, '\\u03C9' ],\n [ /\\\\ddot\\{\\\\iota\\}/g, '\\u03CA' ],\n [ /\\\\ddot\\{\\\\upsilon\\}/g, '\\u03CB' ],\n [ /\\\\'\\{o\\}/g, '\\u03CC' ],\n [ /\\\\acute\\{\\\\upsilon\\}/g, '\\u03CD' ],\n [ /\\\\acute\\{\\\\omega\\}/g, '\\u03CE' ],\n [ /\\\\Pisymbol\\{ppi022\\}\\{87\\}/g, '\\u03D0' ],\n [ /\\\\textvartheta /g, '\\u03D1' ],\n [ /\\\\Upsilon /g, '\\u03D2' ],\n [ /\\\\phi /g, '\\u03D5' ],\n [ /\\\\varpi /g, '\\u03D6' ],\n [ /\\\\Stigma /g, '\\u03DA' ],\n [ /\\\\Digamma /g, '\\u03DC' ],\n [ /\\\\digamma /g, '\\u03DD' ],\n [ /\\\\Koppa /g, '\\u03DE' ],\n [ /\\\\Sampi /g, '\\u03E0' ],\n [ /\\\\varkappa /g, '\\u03F0' ],\n [ /\\\\varrho /g, '\\u03F1' ],\n [ /\\\\textTheta /g, '\\u03F4' ],\n [ /\\\\backepsilon /g, '\\u03F6' ],\n [ /\\\\cyrchar\\\\CYRYO /g, '\\u0401' ],\n [ /\\\\cyrchar\\\\CYRDJE /g, '\\u0402' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRG\\}/g, '\\u0403' ],\n [ /\\\\cyrchar\\\\CYRIE /g, '\\u0404' ],\n [ /\\\\cyrchar\\\\CYRDZE /g, '\\u0405' ],\n [ /\\\\cyrchar\\\\CYRII /g, '\\u0406' ],\n [ /\\\\cyrchar\\\\CYRYI /g, '\\u0407' ],\n [ /\\\\cyrchar\\\\CYRJE /g, '\\u0408' ],\n [ /\\\\cyrchar\\\\CYRLJE /g, '\\u0409' ],\n [ /\\\\cyrchar\\\\CYRNJE /g, '\\u040A' ],\n [ /\\\\cyrchar\\\\CYRTSHE /g, '\\u040B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRK\\}/g, '\\u040C' ],\n [ /\\\\cyrchar\\\\CYRUSHRT /g, '\\u040E' ],\n [ /\\\\cyrchar\\\\CYRDZHE /g, '\\u040F' ],\n [ /\\\\cyrchar\\\\CYRA /g, '\\u0410' ],\n [ /\\\\cyrchar\\\\CYRB /g, '\\u0411' ],\n [ /\\\\cyrchar\\\\CYRV /g, '\\u0412' ],\n [ /\\\\cyrchar\\\\CYRG /g, '\\u0413' ],\n [ /\\\\cyrchar\\\\CYRD /g, '\\u0414' ],\n [ /\\\\cyrchar\\\\CYRE /g, '\\u0415' ],\n [ /\\\\cyrchar\\\\CYRZH /g, '\\u0416' ],\n [ /\\\\cyrchar\\\\CYRZ /g, '\\u0417' ],\n [ /\\\\cyrchar\\\\CYRI /g, '\\u0418' ],\n [ /\\\\cyrchar\\\\CYRISHRT /g, '\\u0419' ],\n [ /\\\\cyrchar\\\\CYRK /g, '\\u041A' ],\n [ /\\\\cyrchar\\\\CYRL /g, '\\u041B' ],\n [ /\\\\cyrchar\\\\CYRM /g, '\\u041C' ],\n [ /\\\\cyrchar\\\\CYRN /g, '\\u041D' ],\n [ /\\\\cyrchar\\\\CYRO /g, '\\u041E' ],\n [ /\\\\cyrchar\\\\CYRP /g, '\\u041F' ],\n [ /\\\\cyrchar\\\\CYRR /g, '\\u0420' ],\n [ /\\\\cyrchar\\\\CYRS /g, '\\u0421' ],\n [ /\\\\cyrchar\\\\CYRT /g, '\\u0422' ],\n [ /\\\\cyrchar\\\\CYRU /g, '\\u0423' ],\n [ /\\\\cyrchar\\\\CYRF /g, '\\u0424' ],\n [ /\\\\cyrchar\\\\CYRH /g, '\\u0425' ],\n [ /\\\\cyrchar\\\\CYRC /g, '\\u0426' ],\n [ /\\\\cyrchar\\\\CYRCH /g, '\\u0427' ],\n [ /\\\\cyrchar\\\\CYRSH /g, '\\u0428' ],\n [ /\\\\cyrchar\\\\CYRSHCH /g, '\\u0429' ],\n [ /\\\\cyrchar\\\\CYRHRDSN /g, '\\u042A' ],\n [ /\\\\cyrchar\\\\CYRERY /g, '\\u042B' ],\n [ /\\\\cyrchar\\\\CYRSFTSN /g, '\\u042C' ],\n [ /\\\\cyrchar\\\\CYREREV /g, '\\u042D' ],\n [ /\\\\cyrchar\\\\CYRYU /g, '\\u042E' ],\n [ /\\\\cyrchar\\\\CYRYA /g, '\\u042F' ],\n [ /\\\\cyrchar\\\\cyra /g, '\\u0430' ],\n [ /\\\\cyrchar\\\\cyrb /g, '\\u0431' ],\n [ /\\\\cyrchar\\\\cyrv /g, '\\u0432' ],\n [ /\\\\cyrchar\\\\cyrg /g, '\\u0433' ],\n [ /\\\\cyrchar\\\\cyrd /g, '\\u0434' ],\n [ /\\\\cyrchar\\\\cyre /g, '\\u0435' ],\n [ /\\\\cyrchar\\\\cyrzh /g, '\\u0436' ],\n [ /\\\\cyrchar\\\\cyrz /g, '\\u0437' ],\n [ /\\\\cyrchar\\\\cyri /g, '\\u0438' ],\n [ /\\\\cyrchar\\\\cyrishrt /g, '\\u0439' ],\n [ /\\\\cyrchar\\\\cyrk /g, '\\u043A' ],\n [ /\\\\cyrchar\\\\cyrl /g, '\\u043B' ],\n [ /\\\\cyrchar\\\\cyrm /g, '\\u043C' ],\n [ /\\\\cyrchar\\\\cyrn /g, '\\u043D' ],\n [ /\\\\cyrchar\\\\cyro /g, '\\u043E' ],\n [ /\\\\cyrchar\\\\cyrp /g, '\\u043F' ],\n [ /\\\\cyrchar\\\\cyrr /g, '\\u0440' ],\n [ /\\\\cyrchar\\\\cyrs /g, '\\u0441' ],\n [ /\\\\cyrchar\\\\cyrt /g, '\\u0442' ],\n [ /\\\\cyrchar\\\\cyru /g, '\\u0443' ],\n [ /\\\\cyrchar\\\\cyrf /g, '\\u0444' ],\n [ /\\\\cyrchar\\\\cyrh /g, '\\u0445' ],\n [ /\\\\cyrchar\\\\cyrc /g, '\\u0446' ],\n [ /\\\\cyrchar\\\\cyrch /g, '\\u0447' ],\n [ /\\\\cyrchar\\\\cyrsh /g, '\\u0448' ],\n [ /\\\\cyrchar\\\\cyrshch /g, '\\u0449' ],\n [ /\\\\cyrchar\\\\cyrhrdsn /g, '\\u044A' ],\n [ /\\\\cyrchar\\\\cyrery /g, '\\u044B' ],\n [ /\\\\cyrchar\\\\cyrsftsn /g, '\\u044C' ],\n [ /\\\\cyrchar\\\\cyrerev /g, '\\u044D' ],\n [ /\\\\cyrchar\\\\cyryu /g, '\\u044E' ],\n [ /\\\\cyrchar\\\\cyrya /g, '\\u044F' ],\n [ /\\\\cyrchar\\\\cyryo /g, '\\u0451' ],\n [ /\\\\cyrchar\\\\cyrdje /g, '\\u0452' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrg\\}/g, '\\u0453' ],\n [ /\\\\cyrchar\\\\cyrie /g, '\\u0454' ],\n [ /\\\\cyrchar\\\\cyrdze /g, '\\u0455' ],\n [ /\\\\cyrchar\\\\cyrii /g, '\\u0456' ],\n [ /\\\\cyrchar\\\\cyryi /g, '\\u0457' ],\n [ /\\\\cyrchar\\\\cyrje /g, '\\u0458' ],\n [ /\\\\cyrchar\\\\cyrlje /g, '\\u0459' ],\n [ /\\\\cyrchar\\\\cyrnje /g, '\\u045A' ],\n [ /\\\\cyrchar\\\\cyrtshe /g, '\\u045B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrk\\}/g, '\\u045C' ],\n [ /\\\\cyrchar\\\\cyrushrt /g, '\\u045E' ],\n [ /\\\\cyrchar\\\\cyrdzhe /g, '\\u045F' ],\n [ /\\\\cyrchar\\\\CYROMEGA /g, '\\u0460' ],\n [ /\\\\cyrchar\\\\cyromega /g, '\\u0461' ],\n [ /\\\\cyrchar\\\\CYRYAT /g, '\\u0462' ],\n [ /\\\\cyrchar\\\\CYRIOTE /g, '\\u0464' ],\n [ /\\\\cyrchar\\\\cyriote /g, '\\u0465' ],\n [ /\\\\cyrchar\\\\CYRLYUS /g, '\\u0466' ],\n [ /\\\\cyrchar\\\\cyrlyus /g, '\\u0467' ],\n [ /\\\\cyrchar\\\\CYRIOTLYUS /g, '\\u0468' ],\n [ /\\\\cyrchar\\\\cyriotlyus /g, '\\u0469' ],\n [ /\\\\cyrchar\\\\CYRBYUS /g, '\\u046A' ],\n [ /\\\\cyrchar\\\\CYRIOTBYUS /g, '\\u046C' ],\n [ /\\\\cyrchar\\\\cyriotbyus /g, '\\u046D' ],\n [ /\\\\cyrchar\\\\CYRKSI /g, '\\u046E' ],\n [ /\\\\cyrchar\\\\cyrksi /g, '\\u046F' ],\n [ /\\\\cyrchar\\\\CYRPSI /g, '\\u0470' ],\n [ /\\\\cyrchar\\\\cyrpsi /g, '\\u0471' ],\n [ /\\\\cyrchar\\\\CYRFITA /g, '\\u0472' ],\n [ /\\\\cyrchar\\\\CYRIZH /g, '\\u0474' ],\n [ /\\\\cyrchar\\\\CYRUK /g, '\\u0478' ],\n [ /\\\\cyrchar\\\\cyruk /g, '\\u0479' ],\n [ /\\\\cyrchar\\\\CYROMEGARND /g, '\\u047A' ],\n [ /\\\\cyrchar\\\\cyromegarnd /g, '\\u047B' ],\n [ /\\\\cyrchar\\\\CYROMEGATITLO /g, '\\u047C' ],\n [ /\\\\cyrchar\\\\cyromegatitlo /g, '\\u047D' ],\n [ /\\\\cyrchar\\\\CYROT /g, '\\u047E' ],\n [ /\\\\cyrchar\\\\cyrot /g, '\\u047F' ],\n [ /\\\\cyrchar\\\\CYRKOPPA /g, '\\u0480' ],\n [ /\\\\cyrchar\\\\cyrkoppa /g, '\\u0481' ],\n [ /\\\\cyrchar\\\\cyrthousands /g, '\\u0482' ],\n [ /\\\\cyrchar\\\\cyrhundredthousands /g, '\\u0488' ],\n [ /\\\\cyrchar\\\\cyrmillions /g, '\\u0489' ],\n [ /\\\\cyrchar\\\\CYRSEMISFTSN /g, '\\u048C' ],\n [ /\\\\cyrchar\\\\cyrsemisftsn /g, '\\u048D' ],\n [ /\\\\cyrchar\\\\CYRRTICK /g, '\\u048E' ],\n [ /\\\\cyrchar\\\\cyrrtick /g, '\\u048F' ],\n [ /\\\\cyrchar\\\\CYRGUP /g, '\\u0490' ],\n [ /\\\\cyrchar\\\\cyrgup /g, '\\u0491' ],\n [ /\\\\cyrchar\\\\CYRGHCRS /g, '\\u0492' ],\n [ /\\\\cyrchar\\\\cyrghcrs /g, '\\u0493' ],\n [ /\\\\cyrchar\\\\CYRGHK /g, '\\u0494' ],\n [ /\\\\cyrchar\\\\cyrghk /g, '\\u0495' ],\n [ /\\\\cyrchar\\\\CYRZHDSC /g, '\\u0496' ],\n [ /\\\\cyrchar\\\\cyrzhdsc /g, '\\u0497' ],\n [ /\\\\cyrchar\\\\CYRZDSC /g, '\\u0498' ],\n [ /\\\\cyrchar\\\\cyrzdsc /g, '\\u0499' ],\n [ /\\\\cyrchar\\\\CYRKDSC /g, '\\u049A' ],\n [ /\\\\cyrchar\\\\cyrkdsc /g, '\\u049B' ],\n [ /\\\\cyrchar\\\\CYRKVCRS /g, '\\u049C' ],\n [ /\\\\cyrchar\\\\cyrkvcrs /g, '\\u049D' ],\n [ /\\\\cyrchar\\\\CYRKHCRS /g, '\\u049E' ],\n [ /\\\\cyrchar\\\\cyrkhcrs /g, '\\u049F' ],\n [ /\\\\cyrchar\\\\CYRKBEAK /g, '\\u04A0' ],\n [ /\\\\cyrchar\\\\cyrkbeak /g, '\\u04A1' ],\n [ /\\\\cyrchar\\\\CYRNDSC /g, '\\u04A2' ],\n [ /\\\\cyrchar\\\\cyrndsc /g, '\\u04A3' ],\n [ /\\\\cyrchar\\\\CYRNG /g, '\\u04A4' ],\n [ /\\\\cyrchar\\\\cyrng /g, '\\u04A5' ],\n [ /\\\\cyrchar\\\\CYRPHK /g, '\\u04A6' ],\n [ /\\\\cyrchar\\\\cyrphk /g, '\\u04A7' ],\n [ /\\\\cyrchar\\\\CYRABHHA /g, '\\u04A8' ],\n [ /\\\\cyrchar\\\\cyrabhha /g, '\\u04A9' ],\n [ /\\\\cyrchar\\\\CYRSDSC /g, '\\u04AA' ],\n [ /\\\\cyrchar\\\\cyrsdsc /g, '\\u04AB' ],\n [ /\\\\cyrchar\\\\CYRTDSC /g, '\\u04AC' ],\n [ /\\\\cyrchar\\\\cyrtdsc /g, '\\u04AD' ],\n [ /\\\\cyrchar\\\\CYRY /g, '\\u04AE' ],\n [ /\\\\cyrchar\\\\cyry /g, '\\u04AF' ],\n [ /\\\\cyrchar\\\\CYRYHCRS /g, '\\u04B0' ],\n [ /\\\\cyrchar\\\\cyryhcrs /g, '\\u04B1' ],\n [ /\\\\cyrchar\\\\CYRHDSC /g, '\\u04B2' ],\n [ /\\\\cyrchar\\\\cyrhdsc /g, '\\u04B3' ],\n [ /\\\\cyrchar\\\\CYRTETSE /g, '\\u04B4' ],\n [ /\\\\cyrchar\\\\cyrtetse /g, '\\u04B5' ],\n [ /\\\\cyrchar\\\\CYRCHRDSC /g, '\\u04B6' ],\n [ /\\\\cyrchar\\\\cyrchrdsc /g, '\\u04B7' ],\n [ /\\\\cyrchar\\\\CYRCHVCRS /g, '\\u04B8' ],\n [ /\\\\cyrchar\\\\cyrchvcrs /g, '\\u04B9' ],\n [ /\\\\cyrchar\\\\CYRSHHA /g, '\\u04BA' ],\n [ /\\\\cyrchar\\\\cyrshha /g, '\\u04BB' ],\n [ /\\\\cyrchar\\\\CYRABHCH /g, '\\u04BC' ],\n [ /\\\\cyrchar\\\\cyrabhch /g, '\\u04BD' ],\n [ /\\\\cyrchar\\\\CYRABHCHDSC /g, '\\u04BE' ],\n [ /\\\\cyrchar\\\\cyrabhchdsc /g, '\\u04BF' ],\n [ /\\\\cyrchar\\\\CYRpalochka /g, '\\u04C0' ],\n [ /\\\\cyrchar\\\\CYRKHK /g, '\\u04C3' ],\n [ /\\\\cyrchar\\\\cyrkhk /g, '\\u04C4' ],\n [ /\\\\cyrchar\\\\CYRNHK /g, '\\u04C7' ],\n [ /\\\\cyrchar\\\\cyrnhk /g, '\\u04C8' ],\n [ /\\\\cyrchar\\\\CYRCHLDSC /g, '\\u04CB' ],\n [ /\\\\cyrchar\\\\cyrchldsc /g, '\\u04CC' ],\n [ /\\\\cyrchar\\\\CYRAE /g, '\\u04D4' ],\n [ /\\\\cyrchar\\\\cyrae /g, '\\u04D5' ],\n [ /\\\\cyrchar\\\\CYRSCHWA /g, '\\u04D8' ],\n [ /\\\\cyrchar\\\\cyrschwa /g, '\\u04D9' ],\n [ /\\\\cyrchar\\\\CYRABHDZE /g, '\\u04E0' ],\n [ /\\\\cyrchar\\\\cyrabhdze /g, '\\u04E1' ],\n [ /\\\\cyrchar\\\\CYROTLD /g, '\\u04E8' ],\n [ /\\\\cyrchar\\\\cyrotld /g, '\\u04E9' ],\n [ /\\\\hspace\\{0.6em\\}/g, '\\u2002' ],\n [ /\\\\hspace\\{1em\\}/g, '\\u2003' ],\n [ /\\\\hspace\\{0.33em\\}/g, '\\u2004' ],\n [ /\\\\hspace\\{0.25em\\}/g, '\\u2005' ],\n [ /\\\\hspace\\{0.166em\\}/g, '\\u2006' ],\n [ /\\\\hphantom\\{0\\}/g, '\\u2007' ],\n [ /\\\\hphantom\\{,\\}/g, '\\u2008' ],\n [ /\\\\hspace\\{0.167em\\}/g, '\\u2009' ],\n [ /\\\\mkern1mu /g, '\\u200A' ],\n [ /\\\\textendash /g, '\\u2013' ],\n [ /\\\\textemdash /g, '\\u2014' ],\n [ /\\\\rule\\{1em\\}\\{1pt\\}/g, '\\u2015' ],\n [ /\\\\Vert /g, '\\u2016' ],\n [ /\\\\Elzreapos /g, '\\u201B' ],\n [ /\\\\textquotedblleft /g, '\\u201C' ],\n [ /\\\\textquotedblright /g, '\\u201D' ],\n [ /\\\\textdagger /g, '\\u2020' ],\n [ /\\\\textdaggerdbl /g, '\\u2021' ],\n [ /\\\\textbullet /g, '\\u2022' ],\n [ /\\\\ldots /g, '\\u2026' ],\n [ /\\\\textperthousand /g, '\\u2030' ],\n [ /\\\\textpertenthousand /g, '\\u2031' ],\n [ /\\\\backprime /g, '\\u2035' ],\n [ /\\\\guilsinglleft /g, '\\u2039' ],\n [ /\\\\guilsinglright /g, '\\u203A' ],\n [ /\\\\mkern4mu /g, '\\u205F' ],\n [ /\\\\nolinebreak /g, '\\u2060' ],\n [ /\\\\ensuremath\\{\\\\Elzpes\\}/g, '\\u20A7' ],\n [ /\\\\mbox\\{\\\\texteuro\\} /g, '\\u20AC' ],\n [ /\\\\dddot /g, '\\u20DB' ],\n [ /\\\\ddddot /g, '\\u20DC' ],\n [ /\\\\mathbb\\{C\\}/g, '\\u2102' ],\n [ /\\\\mathscr\\{g\\}/g, '\\u210A' ],\n [ /\\\\mathscr\\{H\\}/g, '\\u210B' ],\n [ /\\\\mathfrak\\{H\\}/g, '\\u210C' ],\n [ /\\\\mathbb\\{H\\}/g, '\\u210D' ],\n [ /\\\\hslash /g, '\\u210F' ],\n [ /\\\\mathscr\\{I\\}/g, '\\u2110' ],\n [ /\\\\mathfrak\\{I\\}/g, '\\u2111' ],\n [ /\\\\mathscr\\{L\\}/g, '\\u2112' ],\n [ /\\\\mathscr\\{l\\}/g, '\\u2113' ],\n [ /\\\\mathbb\\{N\\}/g, '\\u2115' ],\n [ /\\\\cyrchar\\\\textnumero /g, '\\u2116' ],\n [ /\\\\wp /g, '\\u2118' ],\n [ /\\\\mathbb\\{P\\}/g, '\\u2119' ],\n [ /\\\\mathbb\\{Q\\}/g, '\\u211A' ],\n [ /\\\\mathscr\\{R\\}/g, '\\u211B' ],\n [ /\\\\mathfrak\\{R\\}/g, '\\u211C' ],\n [ /\\\\mathbb\\{R\\}/g, '\\u211D' ],\n [ /\\\\Elzxrat /g, '\\u211E' ],\n [ /\\\\texttrademark /g, '\\u2122' ],\n [ /\\\\mathbb\\{Z\\}/g, '\\u2124' ],\n [ /\\\\Omega /g, '\\u2126' ],\n [ /\\\\mho /g, '\\u2127' ],\n [ /\\\\mathfrak\\{Z\\}/g, '\\u2128' ],\n [ /\\\\ElsevierGlyph\\{2129\\}/g, '\\u2129' ],\n [ /\\\\AA /g, '\\u212B' ],\n [ /\\\\mathscr\\{B\\}/g, '\\u212C' ],\n [ /\\\\mathfrak\\{C\\}/g, '\\u212D' ],\n [ /\\\\mathscr\\{e\\}/g, '\\u212F' ],\n [ /\\\\mathscr\\{E\\}/g, '\\u2130' ],\n [ /\\\\mathscr\\{F\\}/g, '\\u2131' ],\n [ /\\\\mathscr\\{M\\}/g, '\\u2133' ],\n [ /\\\\mathscr\\{o\\}/g, '\\u2134' ],\n [ /\\\\aleph /g, '\\u2135' ],\n [ /\\\\beth /g, '\\u2136' ],\n [ /\\\\gimel /g, '\\u2137' ],\n [ /\\\\daleth /g, '\\u2138' ],\n [ /\\\\textfrac\\{1\\}\\{3\\}/g, '\\u2153' ],\n [ /\\\\textfrac\\{2\\}\\{3\\}/g, '\\u2154' ],\n [ /\\\\textfrac\\{1\\}\\{5\\}/g, '\\u2155' ],\n [ /\\\\textfrac\\{2\\}\\{5\\}/g, '\\u2156' ],\n [ /\\\\textfrac\\{3\\}\\{5\\}/g, '\\u2157' ],\n [ /\\\\textfrac\\{4\\}\\{5\\}/g, '\\u2158' ],\n [ /\\\\textfrac\\{1\\}\\{6\\}/g, '\\u2159' ],\n [ /\\\\textfrac\\{5\\}\\{6\\}/g, '\\u215A' ],\n [ /\\\\textfrac\\{1\\}\\{8\\}/g, '\\u215B' ],\n [ /\\\\textfrac\\{3\\}\\{8\\}/g, '\\u215C' ],\n [ /\\\\textfrac\\{5\\}\\{8\\}/g, '\\u215D' ],\n [ /\\\\textfrac\\{7\\}\\{8\\}/g, '\\u215E' ],\n [ /\\\\leftarrow /g, '\\u2190' ],\n [ /\\\\uparrow /g, '\\u2191' ],\n [ /\\\\rightarrow /g, '\\u2192' ],\n [ /\\\\downarrow /g, '\\u2193' ],\n [ /\\\\leftrightarrow /g, '\\u2194' ],\n [ /\\\\updownarrow /g, '\\u2195' ],\n [ /\\\\nwarrow /g, '\\u2196' ],\n [ /\\\\nearrow /g, '\\u2197' ],\n [ /\\\\searrow /g, '\\u2198' ],\n [ /\\\\swarrow /g, '\\u2199' ],\n [ /\\\\nleftarrow /g, '\\u219A' ],\n [ /\\\\nrightarrow /g, '\\u219B' ],\n [ /\\\\arrowwaveright /g, '\\u219C' ],\n [ /\\\\arrowwaveright /g, '\\u219D' ],\n [ /\\\\twoheadleftarrow /g, '\\u219E' ],\n [ /\\\\twoheadrightarrow /g, '\\u21A0' ],\n [ /\\\\leftarrowtail /g, '\\u21A2' ],\n [ /\\\\rightarrowtail /g, '\\u21A3' ],\n [ /\\\\mapsto /g, '\\u21A6' ],\n [ /\\\\hookleftarrow /g, '\\u21A9' ],\n [ /\\\\hookrightarrow /g, '\\u21AA' ],\n [ /\\\\looparrowleft /g, '\\u21AB' ],\n [ /\\\\looparrowright /g, '\\u21AC' ],\n [ /\\\\leftrightsquigarrow /g, '\\u21AD' ],\n [ /\\\\nleftrightarrow /g, '\\u21AE' ],\n [ /\\\\Lsh /g, '\\u21B0' ],\n [ /\\\\Rsh /g, '\\u21B1' ],\n [ /\\\\ElsevierGlyph\\{21B3\\}/g, '\\u21B3' ],\n [ /\\\\curvearrowleft /g, '\\u21B6' ],\n [ /\\\\curvearrowright /g, '\\u21B7' ],\n [ /\\\\circlearrowleft /g, '\\u21BA' ],\n [ /\\\\circlearrowright /g, '\\u21BB' ],\n [ /\\\\leftharpoonup /g, '\\u21BC' ],\n [ /\\\\leftharpoondown /g, '\\u21BD' ],\n [ /\\\\upharpoonright /g, '\\u21BE' ],\n [ /\\\\upharpoonleft /g, '\\u21BF' ],\n [ /\\\\rightharpoonup /g, '\\u21C0' ],\n [ /\\\\rightharpoondown /g, '\\u21C1' ],\n [ /\\\\downharpoonright /g, '\\u21C2' ],\n [ /\\\\downharpoonleft /g, '\\u21C3' ],\n [ /\\\\rightleftarrows /g, '\\u21C4' ],\n [ /\\\\dblarrowupdown /g, '\\u21C5' ],\n [ /\\\\leftrightarrows /g, '\\u21C6' ],\n [ /\\\\leftleftarrows /g, '\\u21C7' ],\n [ /\\\\upuparrows /g, '\\u21C8' ],\n [ /\\\\rightrightarrows /g, '\\u21C9' ],\n [ /\\\\downdownarrows /g, '\\u21CA' ],\n [ /\\\\leftrightharpoons /g, '\\u21CB' ],\n [ /\\\\rightleftharpoons /g, '\\u21CC' ],\n [ /\\\\nLeftarrow /g, '\\u21CD' ],\n [ /\\\\nLeftrightarrow /g, '\\u21CE' ],\n [ /\\\\nRightarrow /g, '\\u21CF' ],\n [ /\\\\Leftarrow /g, '\\u21D0' ],\n [ /\\\\Uparrow /g, '\\u21D1' ],\n [ /\\\\Rightarrow /g, '\\u21D2' ],\n [ /\\\\Downarrow /g, '\\u21D3' ],\n [ /\\\\Leftrightarrow /g, '\\u21D4' ],\n [ /\\\\Updownarrow /g, '\\u21D5' ],\n [ /\\\\Lleftarrow /g, '\\u21DA' ],\n [ /\\\\Rrightarrow /g, '\\u21DB' ],\n [ /\\\\rightsquigarrow /g, '\\u21DD' ],\n [ /\\\\DownArrowUpArrow /g, '\\u21F5' ],\n [ /\\\\forall /g, '\\u2200' ],\n [ /\\\\complement /g, '\\u2201' ],\n [ /\\\\partial /g, '\\u2202' ],\n [ /\\\\exists /g, '\\u2203' ],\n [ /\\\\nexists /g, '\\u2204' ],\n [ /\\\\varnothing /g, '\\u2205' ],\n [ /\\\\nabla /g, '\\u2207' ],\n [ /\\\\in /g, '\\u2208' ],\n [ /\\\\not\\\\in /g, '\\u2209' ],\n [ /\\\\ni /g, '\\u220B' ],\n [ /\\\\not\\\\ni /g, '\\u220C' ],\n [ /\\\\prod /g, '\\u220F' ],\n [ /\\\\coprod /g, '\\u2210' ],\n [ /\\\\sum /g, '\\u2211' ],\n [ /\\\\mp /g, '\\u2213' ],\n [ /\\\\dotplus /g, '\\u2214' ],\n [ /\\\\setminus /g, '\\u2216' ],\n [ /\\\\circ /g, '\\u2218' ],\n [ /\\\\bullet /g, '\\u2219' ],\n [ /\\\\surd /g, '\\u221A' ],\n [ /\\\\propto /g, '\\u221D' ],\n [ /\\\\infty /g, '\\u221E' ],\n [ /\\\\rightangle /g, '\\u221F' ],\n [ /\\\\angle /g, '\\u2220' ],\n [ /\\\\measuredangle /g, '\\u2221' ],\n [ /\\\\sphericalangle /g, '\\u2222' ],\n [ /\\\\mid /g, '\\u2223' ],\n [ /\\\\nmid /g, '\\u2224' ],\n [ /\\\\parallel /g, '\\u2225' ],\n [ /\\\\nparallel /g, '\\u2226' ],\n [ /\\\\wedge /g, '\\u2227' ],\n [ /\\\\vee /g, '\\u2228' ],\n [ /\\\\cap /g, '\\u2229' ],\n [ /\\\\cup /g, '\\u222A' ],\n [ /\\\\int /g, '\\u222B' ],\n [ /\\\\int\\\\!\\\\int /g, '\\u222C' ],\n [ /\\\\int\\\\!\\\\int\\\\!\\\\int /g, '\\u222D' ],\n [ /\\\\oint /g, '\\u222E' ],\n [ /\\\\surfintegral /g, '\\u222F' ],\n [ /\\\\volintegral /g, '\\u2230' ],\n [ /\\\\clwintegral /g, '\\u2231' ],\n [ /\\\\ElsevierGlyph\\{2232\\}/g, '\\u2232' ],\n [ /\\\\ElsevierGlyph\\{2233\\}/g, '\\u2233' ],\n [ /\\\\therefore /g, '\\u2234' ],\n [ /\\\\because /g, '\\u2235' ],\n [ /\\\\Colon /g, '\\u2237' ],\n [ /\\\\ElsevierGlyph\\{2238\\}/g, '\\u2238' ],\n [ /\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{\\-\\}\\\\!\\\\!\\{:\\}\\}/g, '\\u223A' ],\n [ /\\\\homothetic /g, '\\u223B' ],\n [ /\\\\sim /g, '\\u223C' ],\n [ /\\\\backsim /g, '\\u223D' ],\n [ /\\\\lazysinv /g, '\\u223E' ],\n [ /\\\\wr /g, '\\u2240' ],\n [ /\\\\not\\\\sim /g, '\\u2241' ],\n [ /\\\\ElsevierGlyph\\{2242\\}/g, '\\u2242' ],\n [ /\\\\NotEqualTilde /g, '\\u2242-00338' ],\n [ /\\\\simeq /g, '\\u2243' ],\n [ /\\\\not\\\\simeq /g, '\\u2244' ],\n [ /\\\\cong /g, '\\u2245' ],\n [ /\\\\approxnotequal /g, '\\u2246' ],\n [ /\\\\not\\\\cong /g, '\\u2247' ],\n [ /\\\\approx /g, '\\u2248' ],\n [ /\\\\not\\\\approx /g, '\\u2249' ],\n [ /\\\\approxeq /g, '\\u224A' ],\n [ /\\\\tildetrpl /g, '\\u224B' ],\n [ /\\\\not\\\\apid /g, '\\u224B-00338' ],\n [ /\\\\allequal /g, '\\u224C' ],\n [ /\\\\asymp /g, '\\u224D' ],\n [ /\\\\Bumpeq /g, '\\u224E' ],\n [ /\\\\NotHumpDownHump /g, '\\u224E-00338' ],\n [ /\\\\bumpeq /g, '\\u224F' ],\n [ /\\\\NotHumpEqual /g, '\\u224F-00338' ],\n [ /\\\\doteq /g, '\\u2250' ],\n [ /\\\\not\\\\doteq/g, '\\u2250-00338' ],\n [ /\\\\doteqdot /g, '\\u2251' ],\n [ /\\\\fallingdotseq /g, '\\u2252' ],\n [ /\\\\risingdotseq /g, '\\u2253' ],\n [ /\\\\eqcirc /g, '\\u2256' ],\n [ /\\\\circeq /g, '\\u2257' ],\n [ /\\\\estimates /g, '\\u2259' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u225A' ],\n [ /\\\\starequal /g, '\\u225B' ],\n [ /\\\\triangleq /g, '\\u225C' ],\n [ /\\\\ElsevierGlyph\\{225F\\}/g, '\\u225F' ],\n [ /\\\\not =/g, '\\u2260' ],\n [ /\\\\equiv /g, '\\u2261' ],\n [ /\\\\not\\\\equiv /g, '\\u2262' ],\n [ /\\\\leq /g, '\\u2264' ],\n [ /\\\\geq /g, '\\u2265' ],\n [ /\\\\leqq /g, '\\u2266' ],\n [ /\\\\geqq /g, '\\u2267' ],\n [ /\\\\lneqq /g, '\\u2268' ],\n [ /\\\\lvertneqq /g, '\\u2268-0FE00' ],\n [ /\\\\gneqq /g, '\\u2269' ],\n [ /\\\\gvertneqq /g, '\\u2269-0FE00' ],\n [ /\\\\ll /g, '\\u226A' ],\n [ /\\\\NotLessLess /g, '\\u226A-00338' ],\n [ /\\\\gg /g, '\\u226B' ],\n [ /\\\\NotGreaterGreater /g, '\\u226B-00338' ],\n [ /\\\\between /g, '\\u226C' ],\n [ /\\\\not\\\\kern\\-0.3em\\\\times /g, '\\u226D' ],\n [ /\\\\not/g, '\\u226F' ],\n [ /\\\\not\\\\leq /g, '\\u2270' ],\n [ /\\\\not\\\\geq /g, '\\u2271' ],\n [ /\\\\lessequivlnt /g, '\\u2272' ],\n [ /\\\\greaterequivlnt /g, '\\u2273' ],\n [ /\\\\ElsevierGlyph\\{2274\\}/g, '\\u2274' ],\n [ /\\\\ElsevierGlyph\\{2275\\}/g, '\\u2275' ],\n [ /\\\\lessgtr /g, '\\u2276' ],\n [ /\\\\gtrless /g, '\\u2277' ],\n [ /\\\\notlessgreater /g, '\\u2278' ],\n [ /\\\\notgreaterless /g, '\\u2279' ],\n [ /\\\\prec /g, '\\u227A' ],\n [ /\\\\succ /g, '\\u227B' ],\n [ /\\\\preccurlyeq /g, '\\u227C' ],\n [ /\\\\succcurlyeq /g, '\\u227D' ],\n [ /\\\\precapprox /g, '\\u227E' ],\n [ /\\\\NotPrecedesTilde /g, '\\u227E-00338' ],\n [ /\\\\succapprox /g, '\\u227F' ],\n [ /\\\\NotSucceedsTilde /g, '\\u227F-00338' ],\n [ /\\\\not\\\\prec /g, '\\u2280' ],\n [ /\\\\not\\\\succ /g, '\\u2281' ],\n [ /\\\\subset /g, '\\u2282' ],\n [ /\\\\supset /g, '\\u2283' ],\n [ /\\\\not\\\\subset /g, '\\u2284' ],\n [ /\\\\not\\\\supset /g, '\\u2285' ],\n [ /\\\\subseteq /g, '\\u2286' ],\n [ /\\\\supseteq /g, '\\u2287' ],\n [ /\\\\not\\\\subseteq /g, '\\u2288' ],\n [ /\\\\not\\\\supseteq /g, '\\u2289' ],\n [ /\\\\subsetneq /g, '\\u228A' ],\n [ /\\\\varsubsetneqq /g, '\\u228A-0FE00' ],\n [ /\\\\supsetneq /g, '\\u228B' ],\n [ /\\\\varsupsetneq /g, '\\u228B-0FE00' ],\n [ /\\\\uplus /g, '\\u228E' ],\n [ /\\\\sqsubset /g, '\\u228F' ],\n [ /\\\\NotSquareSubset /g, '\\u228F-00338' ],\n [ /\\\\sqsupset /g, '\\u2290' ],\n [ /\\\\NotSquareSuperset /g, '\\u2290-00338' ],\n [ /\\\\sqsubseteq /g, '\\u2291' ],\n [ /\\\\sqsupseteq /g, '\\u2292' ],\n [ /\\\\sqcap /g, '\\u2293' ],\n [ /\\\\sqcup /g, '\\u2294' ],\n [ /\\\\oplus /g, '\\u2295' ],\n [ /\\\\ominus /g, '\\u2296' ],\n [ /\\\\otimes /g, '\\u2297' ],\n [ /\\\\oslash /g, '\\u2298' ],\n [ /\\\\odot /g, '\\u2299' ],\n [ /\\\\circledcirc /g, '\\u229A' ],\n [ /\\\\circledast /g, '\\u229B' ],\n [ /\\\\circleddash /g, '\\u229D' ],\n [ /\\\\boxplus /g, '\\u229E' ],\n [ /\\\\boxminus /g, '\\u229F' ],\n [ /\\\\boxtimes /g, '\\u22A0' ],\n [ /\\\\boxdot /g, '\\u22A1' ],\n [ /\\\\vdash /g, '\\u22A2' ],\n [ /\\\\dashv /g, '\\u22A3' ],\n [ /\\\\top /g, '\\u22A4' ],\n [ /\\\\perp /g, '\\u22A5' ],\n [ /\\\\truestate /g, '\\u22A7' ],\n [ /\\\\forcesextra /g, '\\u22A8' ],\n [ /\\\\Vdash /g, '\\u22A9' ],\n [ /\\\\Vvdash /g, '\\u22AA' ],\n [ /\\\\VDash /g, '\\u22AB' ],\n [ /\\\\nvdash /g, '\\u22AC' ],\n [ /\\\\nvDash /g, '\\u22AD' ],\n [ /\\\\nVdash /g, '\\u22AE' ],\n [ /\\\\nVDash /g, '\\u22AF' ],\n [ /\\\\vartriangleleft /g, '\\u22B2' ],\n [ /\\\\vartriangleright /g, '\\u22B3' ],\n [ /\\\\trianglelefteq /g, '\\u22B4' ],\n [ /\\\\trianglerighteq /g, '\\u22B5' ],\n [ /\\\\original /g, '\\u22B6' ],\n [ /\\\\image /g, '\\u22B7' ],\n [ /\\\\multimap /g, '\\u22B8' ],\n [ /\\\\hermitconjmatrix /g, '\\u22B9' ],\n [ /\\\\intercal /g, '\\u22BA' ],\n [ /\\\\veebar /g, '\\u22BB' ],\n [ /\\\\rightanglearc /g, '\\u22BE' ],\n [ /\\\\ElsevierGlyph\\{22C0\\}/g, '\\u22C0' ],\n [ /\\\\ElsevierGlyph\\{22C1\\}/g, '\\u22C1' ],\n [ /\\\\bigcap /g, '\\u22C2' ],\n [ /\\\\bigcup /g, '\\u22C3' ],\n [ /\\\\diamond /g, '\\u22C4' ],\n [ /\\\\cdot /g, '\\u22C5' ],\n [ /\\\\star /g, '\\u22C6' ],\n [ /\\\\divideontimes /g, '\\u22C7' ],\n [ /\\\\bowtie /g, '\\u22C8' ],\n [ /\\\\ltimes /g, '\\u22C9' ],\n [ /\\\\rtimes /g, '\\u22CA' ],\n [ /\\\\leftthreetimes /g, '\\u22CB' ],\n [ /\\\\rightthreetimes /g, '\\u22CC' ],\n [ /\\\\backsimeq /g, '\\u22CD' ],\n [ /\\\\curlyvee /g, '\\u22CE' ],\n [ /\\\\curlywedge /g, '\\u22CF' ],\n [ /\\\\Subset /g, '\\u22D0' ],\n [ /\\\\Supset /g, '\\u22D1' ],\n [ /\\\\Cap /g, '\\u22D2' ],\n [ /\\\\Cup /g, '\\u22D3' ],\n [ /\\\\pitchfork /g, '\\u22D4' ],\n [ /\\\\lessdot /g, '\\u22D6' ],\n [ /\\\\gtrdot /g, '\\u22D7' ],\n [ /\\\\verymuchless /g, '\\u22D8' ],\n [ /\\\\verymuchgreater /g, '\\u22D9' ],\n [ /\\\\lesseqgtr /g, '\\u22DA' ],\n [ /\\\\gtreqless /g, '\\u22DB' ],\n [ /\\\\curlyeqprec /g, '\\u22DE' ],\n [ /\\\\curlyeqsucc /g, '\\u22DF' ],\n [ /\\\\not\\\\sqsubseteq /g, '\\u22E2' ],\n [ /\\\\not\\\\sqsupseteq /g, '\\u22E3' ],\n [ /\\\\Elzsqspne /g, '\\u22E5' ],\n [ /\\\\lnsim /g, '\\u22E6' ],\n [ /\\\\gnsim /g, '\\u22E7' ],\n [ /\\\\precedesnotsimilar /g, '\\u22E8' ],\n [ /\\\\succnsim /g, '\\u22E9' ],\n [ /\\\\ntriangleleft /g, '\\u22EA' ],\n [ /\\\\ntriangleright /g, '\\u22EB' ],\n [ /\\\\ntrianglelefteq /g, '\\u22EC' ],\n [ /\\\\ntrianglerighteq /g, '\\u22ED' ],\n [ /\\\\vdots /g, '\\u22EE' ],\n [ /\\\\cdots /g, '\\u22EF' ],\n [ /\\\\upslopeellipsis /g, '\\u22F0' ],\n [ /\\\\downslopeellipsis /g, '\\u22F1' ],\n [ /\\\\barwedge /g, '\\u2305' ],\n [ /\\\\perspcorrespond /g, '\\u2306' ],\n [ /\\\\lceil /g, '\\u2308' ],\n [ /\\\\rceil /g, '\\u2309' ],\n [ /\\\\lfloor /g, '\\u230A' ],\n [ /\\\\rfloor /g, '\\u230B' ],\n [ /\\\\recorder /g, '\\u2315' ],\n [ /\\\\mathchar\"2208/g, '\\u2316' ],\n [ /\\\\ulcorner /g, '\\u231C' ],\n [ /\\\\urcorner /g, '\\u231D' ],\n [ /\\\\llcorner /g, '\\u231E' ],\n [ /\\\\lrcorner /g, '\\u231F' ],\n [ /\\\\frown /g, '\\u2322' ],\n [ /\\\\smile /g, '\\u2323' ],\n [ /\\\\langle /g, '\\u2329' ],\n [ /\\\\rangle /g, '\\u232A' ],\n [ /\\\\ElsevierGlyph\\{E838\\}/g, '\\u233D' ],\n [ /\\\\Elzdlcorn /g, '\\u23A3' ],\n [ /\\\\lmoustache /g, '\\u23B0' ],\n [ /\\\\rmoustache /g, '\\u23B1' ],\n [ /\\\\textvisiblespace /g, '\\u2423' ],\n [ /\\\\ding\\{172\\}/g, '\\u2460' ],\n [ /\\\\ding\\{173\\}/g, '\\u2461' ],\n [ /\\\\ding\\{174\\}/g, '\\u2462' ],\n [ /\\\\ding\\{175\\}/g, '\\u2463' ],\n [ /\\\\ding\\{176\\}/g, '\\u2464' ],\n [ /\\\\ding\\{177\\}/g, '\\u2465' ],\n [ /\\\\ding\\{178\\}/g, '\\u2466' ],\n [ /\\\\ding\\{179\\}/g, '\\u2467' ],\n [ /\\\\ding\\{180\\}/g, '\\u2468' ],\n [ /\\\\ding\\{181\\}/g, '\\u2469' ],\n [ /\\\\circledS /g, '\\u24C8' ],\n [ /\\\\Elzdshfnc /g, '\\u2506' ],\n [ /\\\\Elzsqfnw /g, '\\u2519' ],\n [ /\\\\diagup /g, '\\u2571' ],\n [ /\\\\ding\\{110\\}/g, '\\u25A0' ],\n [ /\\\\square /g, '\\u25A1' ],\n [ /\\\\blacksquare /g, '\\u25AA' ],\n [ /\\\\fbox\\{~~\\}/g, '\\u25AD' ],\n [ /\\\\Elzvrecto /g, '\\u25AF' ],\n [ /\\\\ElsevierGlyph\\{E381\\}/g, '\\u25B1' ],\n [ /\\\\ding\\{115\\}/g, '\\u25B2' ],\n [ /\\\\bigtriangleup /g, '\\u25B3' ],\n [ /\\\\blacktriangle /g, '\\u25B4' ],\n [ /\\\\vartriangle /g, '\\u25B5' ],\n [ /\\\\blacktriangleright /g, '\\u25B8' ],\n [ /\\\\triangleright /g, '\\u25B9' ],\n [ /\\\\ding\\{116\\}/g, '\\u25BC' ],\n [ /\\\\bigtriangledown /g, '\\u25BD' ],\n [ /\\\\blacktriangledown /g, '\\u25BE' ],\n [ /\\\\triangledown /g, '\\u25BF' ],\n [ /\\\\blacktriangleleft /g, '\\u25C2' ],\n [ /\\\\triangleleft /g, '\\u25C3' ],\n [ /\\\\ding\\{117\\}/g, '\\u25C6' ],\n [ /\\\\lozenge /g, '\\u25CA' ],\n [ /\\\\bigcirc /g, '\\u25CB' ],\n [ /\\\\ding\\{108\\}/g, '\\u25CF' ],\n [ /\\\\Elzcirfl /g, '\\u25D0' ],\n [ /\\\\Elzcirfr /g, '\\u25D1' ],\n [ /\\\\Elzcirfb /g, '\\u25D2' ],\n [ /\\\\ding\\{119\\}/g, '\\u25D7' ],\n [ /\\\\Elzrvbull /g, '\\u25D8' ],\n [ /\\\\Elzsqfl /g, '\\u25E7' ],\n [ /\\\\Elzsqfr /g, '\\u25E8' ],\n [ /\\\\Elzsqfse /g, '\\u25EA' ],\n [ /\\\\bigcirc /g, '\\u25EF' ],\n [ /\\\\ding\\{72\\}/g, '\\u2605' ],\n [ /\\\\ding\\{73\\}/g, '\\u2606' ],\n [ /\\\\ding\\{37\\}/g, '\\u260E' ],\n [ /\\\\ding\\{42\\}/g, '\\u261B' ],\n [ /\\\\ding\\{43\\}/g, '\\u261E' ],\n [ /\\\\rightmoon /g, '\\u263E' ],\n [ /\\\\mercury /g, '\\u263F' ],\n [ /\\\\venus /g, '\\u2640' ],\n [ /\\\\male /g, '\\u2642' ],\n [ /\\\\jupiter /g, '\\u2643' ],\n [ /\\\\saturn /g, '\\u2644' ],\n [ /\\\\uranus /g, '\\u2645' ],\n [ /\\\\neptune /g, '\\u2646' ],\n [ /\\\\pluto /g, '\\u2647' ],\n [ /\\\\aries /g, '\\u2648' ],\n [ /\\\\taurus /g, '\\u2649' ],\n [ /\\\\gemini /g, '\\u264A' ],\n [ /\\\\cancer /g, '\\u264B' ],\n [ /\\\\leo /g, '\\u264C' ],\n [ /\\\\virgo /g, '\\u264D' ],\n [ /\\\\libra /g, '\\u264E' ],\n [ /\\\\scorpio /g, '\\u264F' ],\n [ /\\\\sagittarius /g, '\\u2650' ],\n [ /\\\\capricornus /g, '\\u2651' ],\n [ /\\\\aquarius /g, '\\u2652' ],\n [ /\\\\pisces /g, '\\u2653' ],\n [ /\\\\ding\\{171\\}/g, '\\u2660' ],\n [ /\\\\diamond /g, '\\u2662' ],\n [ /\\\\ding\\{168\\}/g, '\\u2663' ],\n [ /\\\\ding\\{170\\}/g, '\\u2665' ],\n [ /\\\\ding\\{169\\}/g, '\\u2666' ],\n [ /\\\\quarternote /g, '\\u2669' ],\n [ /\\\\eighthnote /g, '\\u266A' ],\n [ /\\\\flat /g, '\\u266D' ],\n [ /\\\\natural /g, '\\u266E' ],\n [ /\\\\sharp /g, '\\u266F' ],\n [ /\\\\ding\\{33\\}/g, '\\u2701' ],\n [ /\\\\ding\\{34\\}/g, '\\u2702' ],\n [ /\\\\ding\\{35\\}/g, '\\u2703' ],\n [ /\\\\ding\\{36\\}/g, '\\u2704' ],\n [ /\\\\ding\\{38\\}/g, '\\u2706' ],\n [ /\\\\ding\\{39\\}/g, '\\u2707' ],\n [ /\\\\ding\\{40\\}/g, '\\u2708' ],\n [ /\\\\ding\\{41\\}/g, '\\u2709' ],\n [ /\\\\ding\\{44\\}/g, '\\u270C' ],\n [ /\\\\ding\\{45\\}/g, '\\u270D' ],\n [ /\\\\ding\\{46\\}/g, '\\u270E' ],\n [ /\\\\ding\\{47\\}/g, '\\u270F' ],\n [ /\\\\ding\\{48\\}/g, '\\u2710' ],\n [ /\\\\ding\\{49\\}/g, '\\u2711' ],\n [ /\\\\ding\\{50\\}/g, '\\u2712' ],\n [ /\\\\ding\\{51\\}/g, '\\u2713' ],\n [ /\\\\ding\\{52\\}/g, '\\u2714' ],\n [ /\\\\ding\\{53\\}/g, '\\u2715' ],\n [ /\\\\ding\\{54\\}/g, '\\u2716' ],\n [ /\\\\ding\\{55\\}/g, '\\u2717' ],\n [ /\\\\ding\\{56\\}/g, '\\u2718' ],\n [ /\\\\ding\\{57\\}/g, '\\u2719' ],\n [ /\\\\ding\\{58\\}/g, '\\u271A' ],\n [ /\\\\ding\\{59\\}/g, '\\u271B' ],\n [ /\\\\ding\\{60\\}/g, '\\u271C' ],\n [ /\\\\ding\\{61\\}/g, '\\u271D' ],\n [ /\\\\ding\\{62\\}/g, '\\u271E' ],\n [ /\\\\ding\\{63\\}/g, '\\u271F' ],\n [ /\\\\ding\\{64\\}/g, '\\u2720' ],\n [ /\\\\ding\\{65\\}/g, '\\u2721' ],\n [ /\\\\ding\\{66\\}/g, '\\u2722' ],\n [ /\\\\ding\\{67\\}/g, '\\u2723' ],\n [ /\\\\ding\\{68\\}/g, '\\u2724' ],\n [ /\\\\ding\\{69\\}/g, '\\u2725' ],\n [ /\\\\ding\\{70\\}/g, '\\u2726' ],\n [ /\\\\ding\\{71\\}/g, '\\u2727' ],\n [ /\\\\ding\\{73\\}/g, '\\u2729' ],\n [ /\\\\ding\\{74\\}/g, '\\u272A' ],\n [ /\\\\ding\\{75\\}/g, '\\u272B' ],\n [ /\\\\ding\\{76\\}/g, '\\u272C' ],\n [ /\\\\ding\\{77\\}/g, '\\u272D' ],\n [ /\\\\ding\\{78\\}/g, '\\u272E' ],\n [ /\\\\ding\\{79\\}/g, '\\u272F' ],\n [ /\\\\ding\\{80\\}/g, '\\u2730' ],\n [ /\\\\ding\\{81\\}/g, '\\u2731' ],\n [ /\\\\ding\\{82\\}/g, '\\u2732' ],\n [ /\\\\ding\\{83\\}/g, '\\u2733' ],\n [ /\\\\ding\\{84\\}/g, '\\u2734' ],\n [ /\\\\ding\\{85\\}/g, '\\u2735' ],\n [ /\\\\ding\\{86\\}/g, '\\u2736' ],\n [ /\\\\ding\\{87\\}/g, '\\u2737' ],\n [ /\\\\ding\\{88\\}/g, '\\u2738' ],\n [ /\\\\ding\\{89\\}/g, '\\u2739' ],\n [ /\\\\ding\\{90\\}/g, '\\u273A' ],\n [ /\\\\ding\\{91\\}/g, '\\u273B' ],\n [ /\\\\ding\\{92\\}/g, '\\u273C' ],\n [ /\\\\ding\\{93\\}/g, '\\u273D' ],\n [ /\\\\ding\\{94\\}/g, '\\u273E' ],\n [ /\\\\ding\\{95\\}/g, '\\u273F' ],\n [ /\\\\ding\\{96\\}/g, '\\u2740' ],\n [ /\\\\ding\\{97\\}/g, '\\u2741' ],\n [ /\\\\ding\\{98\\}/g, '\\u2742' ],\n [ /\\\\ding\\{99\\}/g, '\\u2743' ],\n [ /\\\\ding\\{100\\}/g, '\\u2744' ],\n [ /\\\\ding\\{101\\}/g, '\\u2745' ],\n [ /\\\\ding\\{102\\}/g, '\\u2746' ],\n [ /\\\\ding\\{103\\}/g, '\\u2747' ],\n [ /\\\\ding\\{104\\}/g, '\\u2748' ],\n [ /\\\\ding\\{105\\}/g, '\\u2749' ],\n [ /\\\\ding\\{106\\}/g, '\\u274A' ],\n [ /\\\\ding\\{107\\}/g, '\\u274B' ],\n [ /\\\\ding\\{109\\}/g, '\\u274D' ],\n [ /\\\\ding\\{111\\}/g, '\\u274F' ],\n [ /\\\\ding\\{112\\}/g, '\\u2750' ],\n [ /\\\\ding\\{113\\}/g, '\\u2751' ],\n [ /\\\\ding\\{114\\}/g, '\\u2752' ],\n [ /\\\\ding\\{118\\}/g, '\\u2756' ],\n [ /\\\\ding\\{120\\}/g, '\\u2758' ],\n [ /\\\\ding\\{121\\}/g, '\\u2759' ],\n [ /\\\\ding\\{122\\}/g, '\\u275A' ],\n [ /\\\\ding\\{123\\}/g, '\\u275B' ],\n [ /\\\\ding\\{124\\}/g, '\\u275C' ],\n [ /\\\\ding\\{125\\}/g, '\\u275D' ],\n [ /\\\\ding\\{126\\}/g, '\\u275E' ],\n [ /\\\\ding\\{161\\}/g, '\\u2761' ],\n [ /\\\\ding\\{162\\}/g, '\\u2762' ],\n [ /\\\\ding\\{163\\}/g, '\\u2763' ],\n [ /\\\\ding\\{164\\}/g, '\\u2764' ],\n [ /\\\\ding\\{165\\}/g, '\\u2765' ],\n [ /\\\\ding\\{166\\}/g, '\\u2766' ],\n [ /\\\\ding\\{167\\}/g, '\\u2767' ],\n [ /\\\\ding\\{182\\}/g, '\\u2776' ],\n [ /\\\\ding\\{183\\}/g, '\\u2777' ],\n [ /\\\\ding\\{184\\}/g, '\\u2778' ],\n [ /\\\\ding\\{185\\}/g, '\\u2779' ],\n [ /\\\\ding\\{186\\}/g, '\\u277A' ],\n [ /\\\\ding\\{187\\}/g, '\\u277B' ],\n [ /\\\\ding\\{188\\}/g, '\\u277C' ],\n [ /\\\\ding\\{189\\}/g, '\\u277D' ],\n [ /\\\\ding\\{190\\}/g, '\\u277E' ],\n [ /\\\\ding\\{191\\}/g, '\\u277F' ],\n [ /\\\\ding\\{192\\}/g, '\\u2780' ],\n [ /\\\\ding\\{193\\}/g, '\\u2781' ],\n [ /\\\\ding\\{194\\}/g, '\\u2782' ],\n [ /\\\\ding\\{195\\}/g, '\\u2783' ],\n [ /\\\\ding\\{196\\}/g, '\\u2784' ],\n [ /\\\\ding\\{197\\}/g, '\\u2785' ],\n [ /\\\\ding\\{198\\}/g, '\\u2786' ],\n [ /\\\\ding\\{199\\}/g, '\\u2787' ],\n [ /\\\\ding\\{200\\}/g, '\\u2788' ],\n [ /\\\\ding\\{201\\}/g, '\\u2789' ],\n [ /\\\\ding\\{202\\}/g, '\\u278A' ],\n [ /\\\\ding\\{203\\}/g, '\\u278B' ],\n [ /\\\\ding\\{204\\}/g, '\\u278C' ],\n [ /\\\\ding\\{205\\}/g, '\\u278D' ],\n [ /\\\\ding\\{206\\}/g, '\\u278E' ],\n [ /\\\\ding\\{207\\}/g, '\\u278F' ],\n [ /\\\\ding\\{208\\}/g, '\\u2790' ],\n [ /\\\\ding\\{209\\}/g, '\\u2791' ],\n [ /\\\\ding\\{210\\}/g, '\\u2792' ],\n [ /\\\\ding\\{211\\}/g, '\\u2793' ],\n [ /\\\\ding\\{212\\}/g, '\\u2794' ],\n [ /\\\\ding\\{216\\}/g, '\\u2798' ],\n [ /\\\\ding\\{217\\}/g, '\\u2799' ],\n [ /\\\\ding\\{218\\}/g, '\\u279A' ],\n [ /\\\\ding\\{219\\}/g, '\\u279B' ],\n [ /\\\\ding\\{220\\}/g, '\\u279C' ],\n [ /\\\\ding\\{221\\}/g, '\\u279D' ],\n [ /\\\\ding\\{222\\}/g, '\\u279E' ],\n [ /\\\\ding\\{223\\}/g, '\\u279F' ],\n [ /\\\\ding\\{224\\}/g, '\\u27A0' ],\n [ /\\\\ding\\{225\\}/g, '\\u27A1' ],\n [ /\\\\ding\\{226\\}/g, '\\u27A2' ],\n [ /\\\\ding\\{227\\}/g, '\\u27A3' ],\n [ /\\\\ding\\{228\\}/g, '\\u27A4' ],\n [ /\\\\ding\\{229\\}/g, '\\u27A5' ],\n [ /\\\\ding\\{230\\}/g, '\\u27A6' ],\n [ /\\\\ding\\{231\\}/g, '\\u27A7' ],\n [ /\\\\ding\\{232\\}/g, '\\u27A8' ],\n [ /\\\\ding\\{233\\}/g, '\\u27A9' ],\n [ /\\\\ding\\{234\\}/g, '\\u27AA' ],\n [ /\\\\ding\\{235\\}/g, '\\u27AB' ],\n [ /\\\\ding\\{236\\}/g, '\\u27AC' ],\n [ /\\\\ding\\{237\\}/g, '\\u27AD' ],\n [ /\\\\ding\\{238\\}/g, '\\u27AE' ],\n [ /\\\\ding\\{239\\}/g, '\\u27AF' ],\n [ /\\\\ding\\{241\\}/g, '\\u27B1' ],\n [ /\\\\ding\\{242\\}/g, '\\u27B2' ],\n [ /\\\\ding\\{243\\}/g, '\\u27B3' ],\n [ /\\\\ding\\{244\\}/g, '\\u27B4' ],\n [ /\\\\ding\\{245\\}/g, '\\u27B5' ],\n [ /\\\\ding\\{246\\}/g, '\\u27B6' ],\n [ /\\\\ding\\{247\\}/g, '\\u27B7' ],\n [ /\\\\ding\\{248\\}/g, '\\u27B8' ],\n [ /\\\\ding\\{249\\}/g, '\\u27B9' ],\n [ /\\\\ding\\{250\\}/g, '\\u27BA' ],\n [ /\\\\ding\\{251\\}/g, '\\u27BB' ],\n [ /\\\\ding\\{252\\}/g, '\\u27BC' ],\n [ /\\\\ding\\{253\\}/g, '\\u27BD' ],\n [ /\\\\ding\\{254\\}/g, '\\u27BE' ],\n [ /\\\\longleftarrow /g, '\\u27F5' ],\n [ /\\\\longrightarrow /g, '\\u27F6' ],\n [ /\\\\longleftrightarrow /g, '\\u27F7' ],\n [ /\\\\Longleftarrow /g, '\\u27F8' ],\n [ /\\\\Longrightarrow /g, '\\u27F9' ],\n [ /\\\\Longleftrightarrow /g, '\\u27FA' ],\n [ /\\\\longmapsto /g, '\\u27FC' ],\n [ /\\\\sim\\\\joinrel\\\\leadsto/g, '\\u27FF' ],\n [ /\\\\ElsevierGlyph\\{E212\\}/g, '\\u2905' ],\n [ /\\\\UpArrowBar /g, '\\u2912' ],\n [ /\\\\DownArrowBar /g, '\\u2913' ],\n [ /\\\\ElsevierGlyph\\{E20C\\}/g, '\\u2923' ],\n [ /\\\\ElsevierGlyph\\{E20D\\}/g, '\\u2924' ],\n [ /\\\\ElsevierGlyph\\{E20B\\}/g, '\\u2925' ],\n [ /\\\\ElsevierGlyph\\{E20A\\}/g, '\\u2926' ],\n [ /\\\\ElsevierGlyph\\{E211\\}/g, '\\u2927' ],\n [ /\\\\ElsevierGlyph\\{E20E\\}/g, '\\u2928' ],\n [ /\\\\ElsevierGlyph\\{E20F\\}/g, '\\u2929' ],\n [ /\\\\ElsevierGlyph\\{E210\\}/g, '\\u292A' ],\n [ /\\\\ElsevierGlyph\\{E21C\\}/g, '\\u2933' ],\n [ /\\\\ElsevierGlyph\\{E21D\\}/g, '\\u2933-00338' ],\n [ /\\\\ElsevierGlyph\\{E21A\\}/g, '\\u2936' ],\n [ /\\\\ElsevierGlyph\\{E219\\}/g, '\\u2937' ],\n [ /\\\\Elolarr /g, '\\u2940' ],\n [ /\\\\Elorarr /g, '\\u2941' ],\n [ /\\\\ElzRlarr /g, '\\u2942' ],\n [ /\\\\ElzrLarr /g, '\\u2944' ],\n [ /\\\\Elzrarrx /g, '\\u2947' ],\n [ /\\\\LeftRightVector /g, '\\u294E' ],\n [ /\\\\RightUpDownVector /g, '\\u294F' ],\n [ /\\\\DownLeftRightVector /g, '\\u2950' ],\n [ /\\\\LeftUpDownVector /g, '\\u2951' ],\n [ /\\\\LeftVectorBar /g, '\\u2952' ],\n [ /\\\\RightVectorBar /g, '\\u2953' ],\n [ /\\\\RightUpVectorBar /g, '\\u2954' ],\n [ /\\\\RightDownVectorBar /g, '\\u2955' ],\n [ /\\\\DownLeftVectorBar /g, '\\u2956' ],\n [ /\\\\DownRightVectorBar /g, '\\u2957' ],\n [ /\\\\LeftUpVectorBar /g, '\\u2958' ],\n [ /\\\\LeftDownVectorBar /g, '\\u2959' ],\n [ /\\\\LeftTeeVector /g, '\\u295A' ],\n [ /\\\\RightTeeVector /g, '\\u295B' ],\n [ /\\\\RightUpTeeVector /g, '\\u295C' ],\n [ /\\\\RightDownTeeVector /g, '\\u295D' ],\n [ /\\\\DownLeftTeeVector /g, '\\u295E' ],\n [ /\\\\DownRightTeeVector /g, '\\u295F' ],\n [ /\\\\LeftUpTeeVector /g, '\\u2960' ],\n [ /\\\\LeftDownTeeVector /g, '\\u2961' ],\n [ /\\\\UpEquilibrium /g, '\\u296E' ],\n [ /\\\\ReverseUpEquilibrium /g, '\\u296F' ],\n [ /\\\\RoundImplies /g, '\\u2970' ],\n [ /\\\\ElsevierGlyph\\{E214\\}/g, '\\u297C' ],\n [ /\\\\ElsevierGlyph\\{E215\\}/g, '\\u297D' ],\n [ /\\\\Elztfnc /g, '\\u2980' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u2985' ],\n [ /\\\\Elroang /g, '\\u2986' ],\n [ /\\\\ElsevierGlyph\\{E291\\}/g, '\\u2994' ],\n [ /\\\\Elzddfnc /g, '\\u2999' ],\n [ /\\\\Angle /g, '\\u299C' ],\n [ /\\\\Elzlpargt /g, '\\u29A0' ],\n [ /\\\\ElsevierGlyph\\{E260\\}/g, '\\u29B5' ],\n [ /\\\\ElsevierGlyph\\{E61B\\}/g, '\\u29B6' ],\n [ /\\\\ElzLap /g, '\\u29CA' ],\n [ /\\\\Elzdefas /g, '\\u29CB' ],\n [ /\\\\LeftTriangleBar /g, '\\u29CF' ],\n [ /\\\\NotLeftTriangleBar /g, '\\u29CF-00338' ],\n [ /\\\\RightTriangleBar /g, '\\u29D0' ],\n [ /\\\\NotRightTriangleBar /g, '\\u29D0-00338' ],\n [ /\\\\ElsevierGlyph\\{E372\\}/g, '\\u29DC' ],\n [ /\\\\blacklozenge /g, '\\u29EB' ],\n [ /\\\\RuleDelayed /g, '\\u29F4' ],\n [ /\\\\Elxuplus /g, '\\u2A04' ],\n [ /\\\\ElzThr /g, '\\u2A05' ],\n [ /\\\\Elxsqcup /g, '\\u2A06' ],\n [ /\\\\ElzInf /g, '\\u2A07' ],\n [ /\\\\ElzSup /g, '\\u2A08' ],\n [ /\\\\ElzCint /g, '\\u2A0D' ],\n [ /\\\\clockoint /g, '\\u2A0F' ],\n [ /\\\\ElsevierGlyph\\{E395\\}/g, '\\u2A10' ],\n [ /\\\\sqrint /g, '\\u2A16' ],\n [ /\\\\ElsevierGlyph\\{E25A\\}/g, '\\u2A25' ],\n [ /\\\\ElsevierGlyph\\{E25B\\}/g, '\\u2A2A' ],\n [ /\\\\ElsevierGlyph\\{E25C\\}/g, '\\u2A2D' ],\n [ /\\\\ElsevierGlyph\\{E25D\\}/g, '\\u2A2E' ],\n [ /\\\\ElzTimes /g, '\\u2A2F' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A34' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A35' ],\n [ /\\\\ElsevierGlyph\\{E259\\}/g, '\\u2A3C' ],\n [ /\\\\amalg /g, '\\u2A3F' ],\n [ /\\\\ElzAnd /g, '\\u2A53' ],\n [ /\\\\ElzOr /g, '\\u2A54' ],\n [ /\\\\ElsevierGlyph\\{E36E\\}/g, '\\u2A55' ],\n [ /\\\\ElOr /g, '\\u2A56' ],\n [ /\\\\perspcorrespond /g, '\\u2A5E' ],\n [ /\\\\Elzminhat /g, '\\u2A5F' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u2A63' ],\n [ /\\\\stackrel\\{*\\}\\{=\\}/g, '\\u2A6E' ],\n [ /\\\\Equal /g, '\\u2A75' ],\n [ /\\\\leqslant /g, '\\u2A7D' ],\n [ /\\\\nleqslant /g, '\\u2A7D-00338' ],\n [ /\\\\geqslant /g, '\\u2A7E' ],\n [ /\\\\ngeqslant /g, '\\u2A7E-00338' ],\n [ /\\\\lessapprox /g, '\\u2A85' ],\n [ /\\\\gtrapprox /g, '\\u2A86' ],\n [ /\\\\lneq /g, '\\u2A87' ],\n [ /\\\\gneq /g, '\\u2A88' ],\n [ /\\\\lnapprox /g, '\\u2A89' ],\n [ /\\\\gnapprox /g, '\\u2A8A' ],\n [ /\\\\lesseqqgtr /g, '\\u2A8B' ],\n [ /\\\\gtreqqless /g, '\\u2A8C' ],\n [ /\\\\eqslantless /g, '\\u2A95' ],\n [ /\\\\eqslantgtr /g, '\\u2A96' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{117\\}/g, '\\u2A9D' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{105\\}/g, '\\u2A9E' ],\n [ /\\\\NestedLessLess /g, '\\u2AA1' ],\n [ /\\\\NotNestedLessLess /g, '\\u2AA1-00338' ],\n [ /\\\\NestedGreaterGreater /g, '\\u2AA2' ],\n [ /\\\\NotNestedGreaterGreater /g, '\\u2AA2-00338' ],\n [ /\\\\preceq /g, '\\u2AAF' ],\n [ /\\\\not\\\\preceq /g, '\\u2AAF-00338' ],\n [ /\\\\succeq /g, '\\u2AB0' ],\n [ /\\\\not\\\\succeq /g, '\\u2AB0-00338' ],\n [ /\\\\precneqq /g, '\\u2AB5' ],\n [ /\\\\succneqq /g, '\\u2AB6' ],\n [ /\\\\precapprox /g, '\\u2AB7' ],\n [ /\\\\succapprox /g, '\\u2AB8' ],\n [ /\\\\precnapprox /g, '\\u2AB9' ],\n [ /\\\\succnapprox /g, '\\u2ABA' ],\n [ /\\\\subseteqq /g, '\\u2AC5' ],\n [ /\\\\nsubseteqq /g, '\\u2AC5-00338' ],\n [ /\\\\supseteqq /g, '\\u2AC6' ],\n [ /\\\\nsupseteqq/g, '\\u2AC6-00338' ],\n [ /\\\\subsetneqq /g, '\\u2ACB' ],\n [ /\\\\supsetneqq /g, '\\u2ACC' ],\n [ /\\\\ElsevierGlyph\\{E30D\\}/g, '\\u2AEB' ],\n [ /\\\\Elztdcol /g, '\\u2AF6' ],\n [ /\\\\ElsevierGlyph\\{300A\\}/g, '\\u300A' ],\n [ /\\\\ElsevierGlyph\\{300B\\}/g, '\\u300B' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u3018' ],\n [ /\\\\ElsevierGlyph\\{3019\\}/g, '\\u3019' ],\n [ /\\\\openbracketleft /g, '\\u301A' ],\n [ /\\\\openbracketright /g, '\\u301B' ]\n ]\n\n return this;\n} // end function BibtexParser\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = BibtexParser;\n}\n"]} \ No newline at end of file +{"version":3,"file":"bibtex.js","sources":["../../src/libs/bibtex.js"],"names":["BibtexParser","arg0","accumulator","entry","entries","push","tempStorage","parser","call","parse","errors","getErrors","this","STATES_","ENTRY_OR_JUNK","OBJECT_TYPE","ENTRY_KEY","KV_KEY","EQUALS","KV_VALUE","DATA_","CALLBACK_","CHAR_","LINE_","CHAR_IN_LINE_","SKIPWS_","SKIPCOMMENT_","PARSETMP_","SKIPTILLEOL_","VALBRACES_","BRACETYPE_","BRACECOUNT_","STATE_","ERRORS_","ENTRY_TYPES_","inproceedings","proceedings","article","techreport","misc","mastersthesis","book","phdthesis","incollection","unpublished","inbook","manual","periodical","booklet","masterthesis","conference","MACROS_","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","chunk","i","length","processCharacter_","error_","text","processEntry_","data","Fields","f","raw","CHARCONV_","re","rep","replace","len","processed","c","skip","ObjectType","test","AnotherIteration","toLowerCase","ot","Key","EntryType","EntryKey","Value","\"","{","delim","val","doneParsingValue","macro","trim","splice","module","exports"],"mappings":"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MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,cAAe,MACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,YAAa,MACb,YAAa,MACb,QAAS,MACT,aAAc,MACd,eAAgB,MAChB,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,QAAS,MACT,QAAS,MACT,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,SAAU,MACV,SAAU,MACV,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,YAAa,MACb,gBAAiB,MACjB,gBAAiB,MACjB,UAAW,MACX,qBAAsB,MACtB,YAAa,MACb,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MACh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CjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,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"} \ No newline at end of file diff --git a/static/maps/libs/d3.js.map b/static/maps/libs/d3.js.map index 42b0346e93d..c52f3abb688 100644 --- a/static/maps/libs/d3.js.map +++ b/static/maps/libs/d3.js.map @@ -1 +1 @@ -{"version":3,"sources":["libs/d3.js"],"names":["d3_arraySlice","node","d3_array","ownerDocument","document","documentElement","d3_window","d3_document","defaultView","d3_element_setAttribute","a","b","NaN","d3_number","x","f","array","d3_numeric","isNaN","s","compare","left","lo","hi","arguments","length","n","mid","i","right","j","values","h","Math","d3_transposeLength","d","d3_range_integerScale","d3","permute","indexes","permutes","properties","Object","defineProperty","ctor","prototype","key","pairs","this","_","create","d3_map_proto","d3_map_zero","merged","slice","m","d3_map_escape","d3_map_remove","d3_map_keys","abs","range","start","keys","stop","step","size","k","entries","d3_map_unescape","d3_identity","source","method","value","push","d3_map_size","object","name","charAt","toUpperCase","d3_vendorPrefixes","prefixName","d3_noop","sortValues","d3_dispatch_event","dispatch","event","l","z","listeners","mapType","on","apply","valuesByKey","set","d3_Map","keyValue","listener","listenerByName","get","setter","map","depth","concat","remove","forEach","d3_eventSource","e","sortKey","sort","d3_eventDispatch","target","nest","d3_dispatch","of","thiz","argumentz","e1","e0","sourceEvent","type","sortKeys","groups","d3_subclass","add","selector","indexOf","attrNull","removeAttribute","removeAttributeNS","space","local","d3_eventPreventDefault","preventDefault","setAttribute","setAttributeNS","attrNullNS","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","trim","replace","d3_selection_classedRe","property","requote","d3_selection_classes","split","d3_selectionPrototype","d3_select","querySelector","querySelectorAll","d3_selectMatches","d3_selection_classedName","classedFunction","classedConstant","re","c","Sizzle","classList","getAttribute","lastIndex","d3_selectAll","d3_collapse","subgroup","priority","styleNull","style","removeProperty","d3_selection","setProperty","styleFunction","selectAll","styleConstant","d3_selection_property","propertyNull","propertyConstant","d3_selection_selectorAll","d3_nsPrefix","propertyFunction","d3_selection_creator","d3_selection_attr","namespaceURI","namespace","d3_nsXhtml","createElement","createElementNS","ns","qualify","createNS","parent","parentNode","data","__data__","each","d3_selection_filter","comparator","textContent","d3_ascending","innerHTML","callback","group","d3_selectionRemove","selection","d3_selection_enterInsertBefore","enter","i0","j0","exitNodes","update","keyValues","nodeByKeyValue","exit","capture","onRemove","bind","removeEventListener","$","onAdd","wrap","addEventListener","match","RegExp","d3_selection_dataNode","d3_selection_onListener","d3_selection_enter","d3_selection_onFilter","removeAll","subgroups","related","compareDocumentPosition","call","next","d3_event_dragSuppress","d3_event_dragId","click","w","select","d3_selection_sortComparator","d3_event_dragSelect","order","suppressClick","off","d3_selection_each","setTimeout","args","changedTouches","svg","container","ownerSVGElement","createSVGPoint","d3_mouse_bug44083","window","scrollY","position","margin","padding","border","getScreenCTM","ctm","point","pageX","y","pageY","clientX","clientY","inverse","d3_selection_enterPrototype","rect","getBoundingClientRect","clientLeft","top","clientTop","d3_behavior_dragTouchId","nodes","d3_sgn","d3_cross2d","d3_selection_on","π","acos","d3_asin","halfπ","asin","filter","d3_selection_onFilters","d3_tanh","d3_haversin","d3_color","g","mousedown","mousedowned","d3_hsl","d3_rgb_parse","d3_rgb_hsl","d3_hsl_rgb","v","__chart__","m1","m2","vv","round","cx","center0","dx","cy","dy","interpolateZoom","d3_hcl","view","d3_lab","d3_lab_hcl","d3_rgb_lab","rgb","r","rescale","zoom","cos","d3_radians","sin","d3_hcl_lab","d3_rgb","center","d3_lab_X","d3_lab_xyz","d3_lab_Y","d3_lab_Z","d3_xyz_rgb","atan2","d3_degrees","sqrt","duration","d3_xyz_lab","pow","x1","d3_rgbNumber","d3_rgbString","max","toString","min","that","format","hsl","color","exec","toLowerCase","scaleTo","translateTo","parseFloat","transition","d3_rgb_parseNumber","invert","zooming","parseInt","translate","dragged","subject","dragRestore","d3_selection_interrupt","moved","mouse","zoomed","d3_rgb_xyz","ended","mousemove","mouseup","locations0","d3_functor","d3_hclPrototype","darker","mimeType","d3_xhr","url","response","d3_labPrototype","result","brighter","status","d3_xhrHasResponse","request","d3_lab_K","xhr","error","load","headers","XMLHttpRequest","responseType","test","XDomainRequest","onload","onerror","respond","onreadystatechange","progress","o","header","d3_rgbPrototype","send","overrideMimeType","abort","d3_rgb_hex","rebind","d3_xhr_fixCallback","responseText","floralwhite","delay","then","forestgreen","fuchsia","gainsboro","Date","now","ghostwhite","timer","gold","goldenrod","gray","khaki","greenyellow","d3_timer_queueTail","d3_timer_queueHead","grey","honeydew","hotpink","clearTimeout","d3_timer_timeout","indianred","indigo","d3_timer_step","lavenderblush","lawngreen","d3_timer_sweep","lemonchiffon","lightblue","lightcoral","lightcyan","lightgray","lightgrey","lightpink","lightyellow","limegreen","lime","linen","t","magenta","mediumaquamarine","mediumorchid","mediumseagreen","mediumpurple","time","Infinity","mediumslateblue","mediumspringgreen","t1","mediumturquoise","midnightblue","t0","navajowhite","moccasin","oldlace","p","olive","ceil","log","LN10","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seashell","skyblue","locale","slateblue","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","slategrey","slategray","springgreen","substring","steelblue","tan","thistle","reverse","join","tomato","turquoise","specifier","violet","d3_format_re","fill","align","sign","symbol","zfill","comma","precision","scale","prefix","suffix","integer","exponent","wheat","white","whitesmoke","yellow","d3_rgb_names","functor","readyState","onprogress","d3_format_typeDefault","fullSuffix","negative","unit","formatPrefix","before","after","lastIndexOf","zcomma","Array","d3_date_utc","reFormat","delimiter","UTC","eol","number","text","d0","delimiterCode","date","d1","d3_date","offset","rows","times","dt","fields","fieldSet","utc","dsv","formatRows","formatRow","d3_time_interval_utc","floor","formatValue","range_utc","d3_timer_interval","d3_timer_frame","d3_timer","template","charCodeAt","d3_time_formatPads","d3_time_formats","d3_format_precision","string","H","S","L","d3_formatPrefixes","Z","d3_formatPrefix","localZ","setFullYear","W","getDay","U","setHours","M","locale_decimal","d3_time_parsers","d3_time_parseWeekdayAbbrev","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_dayRe","d3_time","d3_time_dayLookup","d3_time_parseMonthAbbrev","d3_time_monthAbbrevRe","getDate","d3_time_monthAbbrevLookup","d3_time_parseMonth","d3_time_monthRe","d3_time_monthLookup","d3_time_parseLocaleFull","d3_time_parse","d3_time_parseLocaleDate","d3_time_parseLocaleTime","getUTCMilliseconds","X","d3_time_parseAmPm","getUTCMinutes","d3_time_periodLookup","getMonth","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","multi","d3_time_formatMulti","d3_time_formatRe","d3_time_formatLookup","B","d3_time_formatPad","getHours","d3_format_types","getMinutes","getSeconds","sundayOfYear","Y","%","d3_time_parseWeekday","d3_time_parseDay","d3_time_parseHour24","I","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","getTimezoneOffset","names","d3_time_prototype","setUTCDate","setDay","setUTCFullYear","d3_time_numberRe","setMilliseconds","setUTCMilliseconds","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","d3_time_expandYear","zs","zh","zm","formats","interval","day","bv","d3_locale_timeFormat","hasOwnProperty","geometry","d3_geo_streamGeometryType","d3_geo_streamLine","coordinates","lineStart","coordinate","polygonStart","polygonEnd","nextPoint","λ","φ","dλ","λ0","sdλ","adλ","cosφ","sinφ","sinφ0","u","cosφ0","λ00","φ00","d3_geo_area","d3_geo_cartesian","spherical","d3_geo_cartesianDot","vector","A","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","ε","d3_geo_centroidPoint","d3_geo_centroidPointXYZ","d3_geo_centroidW0","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","y0","z0","x0","d3_geo_centroidW1","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroid","d3_geo_centroidLineEnd","d3_time_zone","cz","d3_acos","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_time_percentRe","lineEnd","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","d3_adder","segment","numberFormat","d3_locale_numberFormat","timeFormat","p0","p1","d3_locale_enUS","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","d3_adderSum","points","d3_adderTemp","current","isSubject","reset","valueOf","av","stream","d3_geo_streamObjectType","d3_geo_streamGeometry","Feature","FeatureCollection","features","other","Sphere","Point","d3_geo_clip","pointVisible","clipLine","clipStart","MultiPoint","rotate","closed","d3_geo_streamPolygon","d3_geo_areaSum","geo","ringListener","d3_geo_areaRingSum","sphere","ringEnd","ring","clean","ringSegments","buffer","area","d3_geo_areaRingStart","polygonStarted","pop","shift","d3_geo_clipSegmentLength1","polygon","pointRing","LineString","ringStart","MultiLineString","merge","d3_geo_pointInPolygon","rotatedClipStart","d3_geo_clipSort","geometries","d3_geo_clipBufferListener","lines","rejoin","d3_geo_cartesianAdd","d3_geo_clipAntimeridianLine","φ0","sλ0","d3_geo_cartesianNormalize","λ1","φ1","sλ1","λ__","φ__","dλSum","bound","ringPoint","d3_geo_clipAntimeridianIntersect","ranges","atan","cosφ1","sinλ0_λ1","d3_geo_clipAntimeridianInterpolate","from","to","direction","normal","d3_geo_cartesianCross","equatorial","inflection","λ_","λi","antimeridian","φi","meridian","parallel","meridianNormal","polarAngle","winding","angle","point0","arc","intersection","φarc","linePoint","d3_geo_clipCircle","radius","visible","cr","v00","point2","smallRadius","code","v0","point1","withinRange","intersect","feature","compareRanges","notHemisphere","best","centroid","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c2","uu","t2","d3_geo_centroidLineStart","q","polar","δλ","q1","d3_geo_circleInterpolate","d3_geom_clipLine","y1","line","ax","ay","bx","by","d3_geo_centroidRingStart","d3_geo_clipExtent","corner","ca","cb","insidePolygon","wn","a1","comparePoints","first","x_","y_","v_","d3_geo_clipExtentMAX","x__","v__","listener_","bufferListener","d3_true","inside","projectAt","d3_geo_projectionMutator","d3_geo_conicEqualArea","ρ","C","pointLine","ρ0","ρ0_y","d3_geo_pathArea","x00","y00","d3_geo_pathBoundsPoint","d3_geo_pathBoundsX0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","pointCircle","pointLineStart","lineEndPolygon","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidPoint","d3_geo_pathCentroid","d3_geo_pathCentroidLineEnd","context","τ","moveTo","lineTo","closePath","pointRadius","c0","d3_geo_resample","project","resampleNone","c1","resample","resampleLineTo","b0","d3_geo_cartesianScale","a00","a0","b00","c00","maxDepth","n1xn2","b1","d2","φ2","λ2","x2","y2","dx2","dy2","dz","δ2","cosMinDistance","d3_geo_pathProjectStream","extent","d3_geo_transformPoint","d3_geo_projection","δx","δy","projectRotate","d3_geo_compose","d3_geo_rotation","δφ","δγ","invalidate","projectResample","preclip","d3_geo_clipAntimeridian","postclip","clipAngle","clipExtent","projection","output","valid","y__","d3_geo_equirectangular","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_identityRotation","d3_geo_forwardRotationλ","rotation","forward","cosδφ","sinδφ","cosδγ","sinδγ","conicEqualArea","d3_geo_conic","raw","lower48Stream","sr","alaskaStream","hawaiiStream","PI","d3_geo_pathBufferCircle","sy0","cy1","sy1","kx0","cy0","ky0","kx1","ky1","distance","d3_geo_pathCentroidRingStart","cosΔλ","d3_geo_length","d3_geo_azimuthal","cosλ","sinc","cosc","F","d3_geo_conicEquidistant","G","clipAuto","d3_geo_transverseMercator","d3_geom_pointX","d3_geo_pathAreaSum","hull","projectStream","hs","path","d3_geom_hullOrder","bounds","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","d3_geom_voronoiBeach","beach","d3_geom_voronoiBeaches","vertex","N","disappearing","d3_geom_voronoiDetachBeach","lArc","previous","projectionMutator","unshift","d3_geom_voronoiDetachCircle","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","dxl","dxr","directrix","d3_geom_voronoiRightBreakPoint","d3_geo_projectionRadians","P","newArc","insert","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","plby2","hl","aby2","lfocy","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiCell","edges","d3_geom_voronoiCloseCells","cell","iHalfEdge","halfEdges","nHalfEdges","end","cells","d3_geom_voronoiCells","iCell","prepare","cSite","ε2","ha","d3_geom_voronoiCirclePool","d3_geom_voronoiCircle","origin","R","d3_geom_voronoiClipEdges","d3_geom_voronoiEdges","d3_geo_circleAngle","vb","fm","fb","va","lx","ly","rx","ry","fx","fy","Δλ","sinφ1","graticule","DX","DY","Y1","minorExtent","d3_geom_voronoiEdge","X0","Y0","d3_geom_voronoiHalfEdge","X1","d3_geom_voronoiCreateBorderEdge","majorStep","d3_geom_voronoiRedBlackRotateLeft","tree","conicConformal","d3_geo_conicConformal","d3_geo_gnomonic","cosλcosφ","d3_geo_mercator","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","d3_geo_mercatorProjection","d3_geom_voronoiCircles","d3_geom_voronoiRemoveBeach","diagram","skipLeft","lower","skipRight","d3_geom_quadtreeCompatY","d3_geom_voronoiFirstCircle","d3_geom_voronoiBeachPool","sy","children","d3_geom_quadtreeVisit","sx","closestPoint","minDistance2","distance2","ym","xm","below","find","root","br","ar","bg","ag","bb","ab","d3_interpolate","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","d3_interpolateNumber","interpolators","na","nb","n0","splice","d3_ease_cubic","d3_ease_cubicInOut","t3","d3_ease_poly","d3_ease_sin","d3_geom_voronoiHalfEdgeOrder","d3_ease_exp","d3_ease_circle","al","bh","ah","bc","ac","bl","as","d3_interpolateLab","lab","ba","aa","d3_transform","r0","r1","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","d3_geom_voronoiConnectEdge","d3_interpolateTransformPop","ta","tb","ra","rb","wa","wb","d3_interpolateScale","ka","kb","d3_interpolateTransform","transform","d3_interpolateTranslate","d3_interpolateRotate","d3_uninterpolateNumber","link","d3_layout_bundleLeastCommonAncestor","lca","d3_geom_voronoiRedBlackTree","d3_layout_bundleAncestors","ancestors","aNodes","bNodes","aNode","bNode","sharedNode","d3_layout_forceDragstart","fixed","x2_","x1_","y2_","compat","d3_layout_forceAccumulate","quad","alpha","charges","y1_","charge","ys","xs","leaf","random","pointCharge","ny","nx","hierarchy","quadtree","d3_layout_hierarchyLinks","d3_geom_quadtreeNode","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","child","d3_ease_default","d3_ease","linear","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackMaxIndex","d3_ease_elastic","d3_layout_stackReduceSum","reduce","d3_layout_stackSum","d3_layout_histogramBinFixed","LN2","interpolateRound","d3_interpolateRound","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","d3_transformIdentity","d3_layout_packSplice","interpolateTransform","dr","xMin","yMin","yMax","xMax","d3_layout_packLink","d3_layout_packPlace","_pack_prev","s1","isect","d3_layout_packIntersects","s2","d3_interpolateSkew","d3_layout_packUnlink","d3_layout_packTransform","d3_uninterpolateClamp","db","paths","links","dc","da","d3_layout_treeSeparation","d3_layout_treeLeft","sortChords","resort","d3_layout_treeMove","change","wp","wm","chord","matrix","chords","d3_layout_treeShift","sortGroups","vim","ancestor","d3_layout_clusterY","d3_layout_clusterX","dw","chargeDistance2","py","d3_layout_clusterLeft","d3_layout_clusterRight","dn","force","neighbors","weight","d3_scaleExtent","domain","candidates","dimension","d3_scaleRange","rangeExtent","resume","uninterpolate","drag","nice","i1","behavior","d3_scale_niceStep","bisect","clamp","d3_scale_polylinear","d3_scale_bilinear","input","d3_layout_forceLinkStrength","d3_layout_forceChargeDistance2","layout","Number","d3_layout_hierarchyValue","stack","childs","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearNice","copy","d3_scale_linearRebind","d3_scale_nice","d3_scale_linearTickRange","span","err","revalue","d3_layout_hierarchyVisitBefore","d3_scale_linearTickFormat","d3_layout_hierarchyRebind","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","base","positive","d3_layout_hierarchySort","partition","niced","d3_scale_logNiceNegative","isFinite","d3_scale_logFormat","padAngle","powp","pie","powb","d3_scale_powPow","startAngle","sum","arcs","index","endAngle","d3_scale_pow","ranger","rangeBand","d3_layout_pieSortByValue","d3_layout_stackOffsetZero","has","xi","d3_layout_stackX","series","orders","offsets","out","steps","d3_layout_stackOrders","outerPadding","d3_scale_ordinal","bottoms","thresholds","quantile","wiggle","silhouette","sums","quantiles","d3_scale_quantize","o0","invertExtent","expand","d3_scale_threshold","identity","valuer","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcEndAngle","d3_svg_arcCornerTangents","rc","cw","y01","x01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","tension","d3_geom_pointY","defined","d3_svg_lineLinear","interpolateKey","d3_svg_lineInterpolators","d3_svg_lineStep","d3_svg_lineStepAfter","d3_svg_lineHermite","d3_svg_lineCardinalTangents","tangents","pi","separation","nodeSize","root1","wrapTree","root0","firstWalk","lp","bottom","p2","px","d3_svg_lineDot4","d3_svg_lineBasisBezier3","queue","node1","siblings","midpoint","d3_svg_lineBasisBezier","secondWalk","vop","sip","vip","d3_svg_lineBundle","som","vom","d3_layout_treeRight","sim","sop","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","d3_layout_treeAncestor","points1","interpolateReverse","points0","fx0","fy0","fx1","fy1","cluster","previousNode","d3_svg_chordRadius","row","d3_svg_symbolSize","stickies","stickify","squarify","active","d3_layout_treemapPad","interrupt","id","d3_transitionPrototype","tween","d3_scale_linear","d3_transitionNode","inherit","elapsed","activeId","lock","cancelId","cancel","count","tick","tweens","ease","schedule","attr","innerRadius","methods","d3_svg_arcStartAngle","d3_time_scaleSteps","year","d3_time_scaleMilliseconds","d3_svg_arcPadAngle","d3_time_scaleDate","skip","tickMethod","d3_json","d3_svg_lineBasisOpen","JSON","parse","d3_svg_lineBasisClosed","monotone","d3_svg_lineMonotone","createRange","version","list","childNodes","nodeType","Element","d3_element_prototype","d3_element_setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","ascending","descending","median","numbers","variance","deviation","d3_bisect","d3_bisector","bisector","shuffle","transpose","zip","arrays","bisectLeft","Error","d3_class","d3_map_has","empty","rollup","enumerable","isArray","keyMap","d3_Set","d3_map_empty","d3_rebind","d3_requote_re","__proto__","matches","d3_vendorSymbol","subnode","d3_selection_selector","xhtml","xlink","xml","xmlns","getAttributeNS","contains","d3_selection_classed","d3_selection_style","getPropertyValue","appendChild","insertBefore","nodeData","groupData","updateNodes","enterNodes","datum","nextSibling","html","append","upgroup","d3_documentElement","mouseenter","mouseleave","navigator","userAgent","touches","touchstart","move","dragId","position1","position0","dragOffset","dragSubject","dragName","correspondingElement","dragstart","touch","d3_mousePoint","identifier","τε","SQRT2","ux0","uy1","w1","ux1","uy0","w0","exp","d3_cosh","coshr0","d3_sinh","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","zoomTo","location0","location","zoomstarted","relocate","scale0","touchmove","touchend","targets","changed","l0","l1","distance1","scale1","distance0","ρ4","touchtime","zoomName","zoomended","started","scaleExtent","d3_behavior_zoomInfinity","translate0","mousewheelTimer","d3_behavior_zoomDelta","shiftKey","deltaY","deltaMode","detail","view1","d3_transitionInheritId","d3_hslPrototype","hcl","d3_lab_rgb","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","blue","blueviolet","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","darkblue","darkcyan","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkred","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","green","lightgoldenrodyellow","lightgreen","lightsalmon","lightseagreen","mediumvioletred","mintcream","navy","olivedrab","orangered","palegoldenrod","palegreen","palevioletred","papayawhip","peachpuff","peru","powderblue","purple","seagreen","snow","teal","yellowgreen","d3_xhrType","typedResponse","darkorange","darkorchid","darksalmon","stringify","parseRows","EOF","EOL","token","black","brown","burlywood","field","darkgoldenrod","darkviolet","lightskyblue","lightslategray","lightslategrey","orange","paleturquoise","pink","open","setRequestHeader","beforesend","toPrecision","toExponential","toFixed","getUTCDay","getFullYear","getMilliseconds","Function","getUTCSeconds","getTime","setDate","setUTCDay","d3_timer_mark","dayOfYear","week","sunday","weeks","-","0","years","GeometryCollection","albers","parallels","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","d3_geo_pathAreaPolygon","d3_geo_pathBoundsY0","d3_geo_pathAreaRingStart","d3_geo_pathBounds","contextStream","cacheStream","d3_geo_transform","equirectangular","sinΔλ","minorStep","d3_geo_graticuleX","d3_geo_graticuleY","majorExtent","greatArc","source_","target_","d3_target","d3_geo_lengthSum","d3_geo_lengthLineStart","azimuthalEqualArea","d3_geo_pathContext","d3_geo_azimuthalEqualArea","d3_geo_azimuthalEquidistant","azimuthalEquidistant","conicEquidistant","resampleRecursive","gnomonic","d3_geo_orthographic","d3_geo_stereographic","geom","vertices","flippedPoints","d3_geom_hullUpper","upper","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","grandpa","uncle","d3_geom_voronoiRedBlackFirst","d3_source","d3_geo_interpolate","sibling","azimuthal","d3_geom_voronoiRedBlackRotateRight","voronoi","polygons","orthographic","stereographic","mercator","d3_geom_voronoiClipExtent","transverseMercator","triangles","s0","d3_geom_voronoiTriangleArea","delaunay","insertChild","nPoint","d3_geom_quadtreeCompatX","interpolateObject","d3_geom_voronoiAddBeach","interpolateString","d3_interpolateRgb","d3_interpolateArray","d3_interpolateObject","interpolateArray","poly","d3_ease_quad","cubic","elastic","back","d3_ease_back","d3_ease_mode","in","d3_ease_reverse","in-out","out-in","interpolateHcl","d3_interpolateHcl","interpolateHsl","interpolateLab","baseVal","consolidate","skew","bundle","groupSums","groupIndex","subgroupIndex","sortSubgroups","di","dj","subindex","theta2","dragmove","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","gravity","repulse","theta","d3_layout_forceDragend","d3_layout_forceMouseover","d3_layout_forceMouseout","visit","d3_geom_quadtreeFind","interpolateRgb","interpolateNumber","d3_layout_stackY","d3_layout_stackOffsets","inside-out","tops","default","d3_ease_reflect","d3_ease_clamp","s3","zero","histogram","d3_ease_bounce","bin","bins","binner","frequency","d3_layout_histogramBinSturges","d3_interpolateHsl","pack","d3_layout_packSiblings","sizeNode","tx","relayout","score","pad","remaining","mode","worst","rmax","rmin","ratio","flush","sticky","d3_layout_treemapPadNull","treemap","chargeDistance","_typeof","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_niceIdentity","ordinal","d3_category10","category20b","d3_category20b","d3_category20c","d3_scale_quantile","threshold","d3_scale_identity","circleSegment","rp","ap","padRadius","h1","h0","cornerRadius","rc1","rc0","oc","kc","lc","t30","t12","d3_svg_arcSweep","t21","t03","d3_svg_arcOuterRadius","d3_zero","d3_svg_arcAuto","d3_svg_lineLinearClosed","step-before","d3_svg_lineStepBefore","step-after","basis","d3_svg_lineBasis","basis-open","basis-closed","cardinal","d3_svg_lineCardinal","d3_svg_lineCardinalOpen","d3_svg_lineCardinalClosed","d3_svg_area","d3_svg_lineRadial","equals","curve","self","diagonal","p3","d3_svg_diagonalProjection","projection_","d3_svg_diagonalRadialProjection","d3_svg_symbols","d3_svg_symbolCircle","d3_svg_symbolType","diamond","d3_svg_symbolTan30","square","triangle-down","d3_svg_symbolSqrt3","triangle-up","symbolTypes","d3_transitionNamespace","d3_transitionInherit","d3_transition","d3_selection_interruptNS","d3_transitionId","subnodes","nameNS","attrTween","d3_transition_tween","attrTweenNS","rangeRound","getComputedStyle","styleString","styleTween","d3_transition_text","inheritId","id0","id1","axis","tickTransform","tickValues","tickArguments_","tickFormat_","tickEnter","tickExit","tickUpdate","tickSpacing","innerTickSize","tickPadding","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","orient","outerTickSize","d3_svg_axisY","d3_svg_axisDefaultOrient","d3_svg_axisOrients","tickSize","tickSubdivide","brush","background","rangeRoundBands","resizes","resize","backgroundUpdate","redrawY","gUpdate","redraw","quantize","xExtent","yExtent","redrawX","brushstart","keydown","keyCode","dragging","brushmove","altKey","resizingY","move1","event_","yExtentDomain","xExtentDomain","brushend","eventTarget","resizing","resizingX","classed","keyup","ey","ex","xClamp","yClamp","d3_svg_brushResizes","category10","category20","extent1","category20c","extent0","d3_category20","yi","clear","d3_svg_brushCursor","nw","se","sw","d3_time_formatUtc","d3_time_formatIso","iso","toISOString","d3_time_formatIsoNative","second","seconds","minutes","minute","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scale","d3_time_scaleUtcMethods","getUTCHours","getUTCDate","d3_time_scaleUtcFormat","json","define","amd","module","exports"],"mappings":"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","file":"../../scripts/libs/d3.js","sourcesContent":["!function() {\n var d3 = {\n version: \"3.5.17\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = this.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.transpose = function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n };\n function d3_transposeLength(d) {\n return d.length;\n }\n d3.zip = function() {\n return d3.transpose(arguments);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: d3_nsXhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (node = group[i]) {\n if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var j = 0, m = groups.length; j < m; j++) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n if (node = group[i]) callback(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = d3_array(nodes);\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n if (d2 < ε2) {\n S = Math.log(w1 / w0) / ρ;\n i = function(t) {\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n };\n } else {\n var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / ρ;\n i = function(t) {\n var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n };\n }\n i.duration = S * 1e3;\n return i;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: null\n };\n scaleTo(+_);\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n }), center0 = null;\n }\n function mousedowned() {\n var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format)) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function() {\n d3_timer.apply(this, arguments);\n };\n function d3_timer(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n return timer;\n }\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now(), timer = d3_timer_queueHead;\n while (timer) {\n if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n timer = timer.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.c) {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n } else {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n function d3_format_precision(x, p) {\n return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n d3.formatPrefix = function(value, precision) {\n var i = 0;\n if (value = +value) {\n if (value < 0) value *= -1;\n if (precision) value = d3.round(value, d3_format_precision(value, precision));\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n return d3_formatPrefixes[8 + i / 3];\n };\n function d3_formatPrefix(d, i) {\n var k = Math.pow(10, abs(8 - i) * 3);\n return {\n scale: i > 8 ? function(d) {\n return d / k;\n } : function(d) {\n return d * k;\n },\n symbol: d\n };\n }\n function d3_locale_numberFormat(locale) {\n var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = locale_grouping[j = (j + 1) % locale_grouping.length];\n }\n return t.reverse().join(locale_thousands);\n } : d3_identity;\n return function(specifier) {\n var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n }\n switch (type) {\n case \"n\":\n comma = true;\n type = \"g\";\n break;\n\n case \"%\":\n scale = 100;\n suffix = \"%\";\n type = \"f\";\n break;\n\n case \"p\":\n scale = 100;\n suffix = \"%\";\n type = \"r\";\n break;\n\n case \"b\":\n case \"o\":\n case \"x\":\n case \"X\":\n if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n case \"c\":\n exponent = false;\n\n case \"d\":\n integer = true;\n precision = 0;\n break;\n\n case \"s\":\n scale = -1;\n type = \"r\";\n break;\n }\n if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n if (type == \"r\" && !precision) type = \"g\";\n if (precision != null) {\n if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n }\n type = d3_format_types.get(type) || d3_format_typeDefault;\n var zcomma = zfill && comma;\n return function(value) {\n var fullSuffix = suffix;\n if (integer && value % 1) return \"\";\n var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n if (scale < 0) {\n var unit = d3.formatPrefix(value, precision);\n value = unit.scale(value);\n fullSuffix = unit.symbol + suffix;\n } else {\n value *= scale;\n }\n value = type(value, precision);\n var i = value.lastIndexOf(\".\"), before, after;\n if (i < 0) {\n var j = exponent ? value.lastIndexOf(\"e\") : -1;\n if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n } else {\n before = value.substring(0, i);\n after = locale_decimal + value.substring(i + 1);\n }\n if (!zfill && comma) before = formatGroup(before, Infinity);\n var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n negative += prefix;\n value = before + after;\n return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n };\n };\n }\n var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n var d3_format_types = d3.map({\n b: function(x) {\n return x.toString(2);\n },\n c: function(x) {\n return String.fromCharCode(x);\n },\n o: function(x) {\n return x.toString(8);\n },\n x: function(x) {\n return x.toString(16);\n },\n X: function(x) {\n return x.toString(16).toUpperCase();\n },\n g: function(x, p) {\n return x.toPrecision(p);\n },\n e: function(x, p) {\n return x.toExponential(p);\n },\n f: function(x, p) {\n return x.toFixed(p);\n },\n r: function(x, p) {\n return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n }\n });\n function d3_format_typeDefault(x) {\n return x + \"\";\n }\n var d3_time = d3.time = {}, d3_date = Date;\n function d3_date_utc() {\n this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n }\n d3_date_utc.prototype = {\n getDate: function() {\n return this._.getUTCDate();\n },\n getDay: function() {\n return this._.getUTCDay();\n },\n getFullYear: function() {\n return this._.getUTCFullYear();\n },\n getHours: function() {\n return this._.getUTCHours();\n },\n getMilliseconds: function() {\n return this._.getUTCMilliseconds();\n },\n getMinutes: function() {\n return this._.getUTCMinutes();\n },\n getMonth: function() {\n return this._.getUTCMonth();\n },\n getSeconds: function() {\n return this._.getUTCSeconds();\n },\n getTime: function() {\n return this._.getTime();\n },\n getTimezoneOffset: function() {\n return 0;\n },\n valueOf: function() {\n return this._.valueOf();\n },\n setDate: function() {\n d3_time_prototype.setUTCDate.apply(this._, arguments);\n },\n setDay: function() {\n d3_time_prototype.setUTCDay.apply(this._, arguments);\n },\n setFullYear: function() {\n d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n },\n setHours: function() {\n d3_time_prototype.setUTCHours.apply(this._, arguments);\n },\n setMilliseconds: function() {\n d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n },\n setMinutes: function() {\n d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n },\n setMonth: function() {\n d3_time_prototype.setUTCMonth.apply(this._, arguments);\n },\n setSeconds: function() {\n d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n },\n setTime: function() {\n d3_time_prototype.setTime.apply(this._, arguments);\n }\n };\n var d3_time_prototype = Date.prototype;\n function d3_time_interval(local, step, number) {\n function round(date) {\n var d0 = local(date), d1 = offset(d0, 1);\n return date - d0 < d1 - date ? d0 : d1;\n }\n function ceil(date) {\n step(date = local(new d3_date(date - 1)), 1);\n return date;\n }\n function offset(date, k) {\n step(date = new d3_date(+date), k);\n return date;\n }\n function range(t0, t1, dt) {\n var time = ceil(t0), times = [];\n if (dt > 1) {\n while (time < t1) {\n if (!(number(time) % dt)) times.push(new Date(+time));\n step(time, 1);\n }\n } else {\n while (time < t1) times.push(new Date(+time)), step(time, 1);\n }\n return times;\n }\n function range_utc(t0, t1, dt) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = t0;\n return range(utc, t1, dt);\n } finally {\n d3_date = Date;\n }\n }\n local.floor = local;\n local.round = round;\n local.ceil = ceil;\n local.offset = offset;\n local.range = range;\n var utc = local.utc = d3_time_interval_utc(local);\n utc.floor = utc;\n utc.round = d3_time_interval_utc(round);\n utc.ceil = d3_time_interval_utc(ceil);\n utc.offset = d3_time_interval_utc(offset);\n utc.range = range_utc;\n return local;\n }\n function d3_time_interval_utc(method) {\n return function(date, k) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = date;\n return method(utc, k)._;\n } finally {\n d3_date = Date;\n }\n };\n }\n d3_time.year = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setMonth(0, 1);\n return date;\n }, function(date, offset) {\n date.setFullYear(date.getFullYear() + offset);\n }, function(date) {\n return date.getFullYear();\n });\n d3_time.years = d3_time.year.range;\n d3_time.years.utc = d3_time.year.utc.range;\n d3_time.day = d3_time_interval(function(date) {\n var day = new d3_date(2e3, 0);\n day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return day;\n }, function(date, offset) {\n date.setDate(date.getDate() + offset);\n }, function(date) {\n return date.getDate() - 1;\n });\n d3_time.days = d3_time.day.range;\n d3_time.days.utc = d3_time.day.utc.range;\n d3_time.dayOfYear = function(date) {\n var year = d3_time.year(date);\n return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n };\n [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n i = 7 - i;\n var interval = d3_time[day] = d3_time_interval(function(date) {\n (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n return date;\n }, function(date, offset) {\n date.setDate(date.getDate() + Math.floor(offset) * 7);\n }, function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n });\n d3_time[day + \"s\"] = interval.range;\n d3_time[day + \"s\"].utc = interval.utc.range;\n d3_time[day + \"OfYear\"] = function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n };\n });\n d3_time.week = d3_time.sunday;\n d3_time.weeks = d3_time.sunday.range;\n d3_time.weeks.utc = d3_time.sunday.utc.range;\n d3_time.weekOfYear = d3_time.sundayOfYear;\n function d3_locale_timeFormat(locale) {\n var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n function d3_time_format(template) {\n var n = template.length;\n function format(date) {\n var string = [], i = -1, j = 0, c, p, f;\n while (++i < n) {\n if (template.charCodeAt(i) === 37) {\n string.push(template.slice(j, i));\n if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(template.slice(j, i));\n return string.join(\"\");\n }\n format.parse = function(string) {\n var d = {\n y: 1900,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0,\n Z: null\n }, i = d3_time_parse(d, template, string, 0);\n if (i != string.length) return null;\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n date.setFullYear(d.y, 0, 1);\n date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n } else date.setFullYear(d.y, d.m, d.d);\n date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n return localZ ? date._ : date;\n };\n format.toString = function() {\n return template;\n };\n return format;\n }\n function d3_time_parse(date, template, string, j) {\n var c, p, t, i = 0, n = template.length, m = string.length;\n while (i < n) {\n if (j >= m) return -1;\n c = template.charCodeAt(i++);\n if (c === 37) {\n t = template.charAt(i++);\n p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n if (!p || (j = p(date, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n d3_time_format.utc = function(template) {\n var local = d3_time_format(template);\n function format(date) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date();\n utc._ = date;\n return local(utc);\n } finally {\n d3_date = Date;\n }\n }\n format.parse = function(string) {\n try {\n d3_date = d3_date_utc;\n var date = local.parse(string);\n return date && date._;\n } finally {\n d3_date = Date;\n }\n };\n format.toString = local.toString;\n return format;\n };\n d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n locale_periods.forEach(function(p, i) {\n d3_time_periodLookup.set(p.toLowerCase(), i);\n });\n var d3_time_formats = {\n a: function(d) {\n return locale_shortDays[d.getDay()];\n },\n A: function(d) {\n return locale_days[d.getDay()];\n },\n b: function(d) {\n return locale_shortMonths[d.getMonth()];\n },\n B: function(d) {\n return locale_months[d.getMonth()];\n },\n c: d3_time_format(locale_dateTime),\n d: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n e: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n H: function(d, p) {\n return d3_time_formatPad(d.getHours(), p, 2);\n },\n I: function(d, p) {\n return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n },\n j: function(d, p) {\n return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n },\n L: function(d, p) {\n return d3_time_formatPad(d.getMilliseconds(), p, 3);\n },\n m: function(d, p) {\n return d3_time_formatPad(d.getMonth() + 1, p, 2);\n },\n M: function(d, p) {\n return d3_time_formatPad(d.getMinutes(), p, 2);\n },\n p: function(d) {\n return locale_periods[+(d.getHours() >= 12)];\n },\n S: function(d, p) {\n return d3_time_formatPad(d.getSeconds(), p, 2);\n },\n U: function(d, p) {\n return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n },\n w: function(d) {\n return d.getDay();\n },\n W: function(d, p) {\n return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n },\n x: d3_time_format(locale_date),\n X: d3_time_format(locale_time),\n y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n },\n Y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n },\n Z: d3_time_zone,\n \"%\": function() {\n return \"%\";\n }\n };\n var d3_time_parsers = {\n a: d3_time_parseWeekdayAbbrev,\n A: d3_time_parseWeekday,\n b: d3_time_parseMonthAbbrev,\n B: d3_time_parseMonth,\n c: d3_time_parseLocaleFull,\n d: d3_time_parseDay,\n e: d3_time_parseDay,\n H: d3_time_parseHour24,\n I: d3_time_parseHour24,\n j: d3_time_parseDayOfYear,\n L: d3_time_parseMilliseconds,\n m: d3_time_parseMonthNumber,\n M: d3_time_parseMinutes,\n p: d3_time_parseAmPm,\n S: d3_time_parseSeconds,\n U: d3_time_parseWeekNumberSunday,\n w: d3_time_parseWeekdayNumber,\n W: d3_time_parseWeekNumberMonday,\n x: d3_time_parseLocaleDate,\n X: d3_time_parseLocaleTime,\n y: d3_time_parseYear,\n Y: d3_time_parseFullYear,\n Z: d3_time_parseZone,\n \"%\": d3_time_parseLiteralPercent\n };\n function d3_time_parseWeekdayAbbrev(date, string, i) {\n d3_time_dayAbbrevRe.lastIndex = 0;\n var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseWeekday(date, string, i) {\n d3_time_dayRe.lastIndex = 0;\n var n = d3_time_dayRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonthAbbrev(date, string, i) {\n d3_time_monthAbbrevRe.lastIndex = 0;\n var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonth(date, string, i) {\n d3_time_monthRe.lastIndex = 0;\n var n = d3_time_monthRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseLocaleFull(date, string, i) {\n return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n }\n function d3_time_parseLocaleDate(date, string, i) {\n return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n }\n function d3_time_parseLocaleTime(date, string, i) {\n return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n }\n function d3_time_parseAmPm(date, string, i) {\n var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (date.p = n, i);\n }\n return d3_time_format;\n }\n var d3_time_formatPads = {\n \"-\": \"\",\n _: \" \",\n \"0\": \"0\"\n }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n function d3_time_formatPad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function d3_time_formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n }\n function d3_time_formatLookup(names) {\n var map = new d3_Map(), i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n function d3_time_parseWeekdayNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n return n ? (date.w = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberSunday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.U = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberMonday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.W = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseFullYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n return n ? (date.y = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n }\n function d3_time_parseZone(date, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n i + 5) : -1;\n }\n function d3_time_expandYear(d) {\n return d + (d > 68 ? 1900 : 2e3);\n }\n function d3_time_parseMonthNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n }\n function d3_time_parseDay(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.d = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseDayOfYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.j = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseHour24(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.H = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMinutes(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.M = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseSeconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.S = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMilliseconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.L = +n[0], i + n[0].length) : -1;\n }\n function d3_time_zone(d) {\n var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n }\n function d3_time_parseLiteralPercent(date, string, i) {\n d3_time_percentRe.lastIndex = 0;\n var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function d3_time_formatMulti(formats) {\n var n = formats.length, i = -1;\n while (++i < n) formats[i][0] = this(formats[i][0]);\n return function(date) {\n var i = 0, f = formats[i];\n while (!f[1](date)) f = formats[++i];\n return f[0](date);\n };\n }\n d3.locale = function(locale) {\n return {\n numberFormat: d3_locale_numberFormat(locale),\n timeFormat: d3_locale_timeFormat(locale)\n };\n };\n var d3_locale_enUS = d3.locale({\n decimal: \".\",\n thousands: \",\",\n grouping: [ 3 ],\n currency: [ \"$\", \"\" ],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [ \"AM\", \"PM\" ],\n days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n });\n d3.format = d3_locale_enUS.numberFormat;\n d3.geo = {};\n function d3_adder() {}\n d3_adder.prototype = {\n s: 0,\n t: 0,\n add: function(y) {\n d3_adderSum(y, this.t, d3_adderTemp);\n d3_adderSum(d3_adderTemp.s, this.s, this);\n if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n },\n reset: function() {\n this.s = this.t = 0;\n },\n valueOf: function() {\n return this.s;\n }\n };\n var d3_adderTemp = new d3_adder();\n function d3_adderSum(a, b, o) {\n var x = o.s = a + b, bv = x - a, av = x - bv;\n o.t = a - av + (b - bv);\n }\n d3.geo.stream = function(object, listener) {\n if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n d3_geo_streamObjectType[object.type](object, listener);\n } else {\n d3_geo_streamGeometry(object, listener);\n }\n };\n function d3_geo_streamGeometry(geometry, listener) {\n if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n d3_geo_streamGeometryType[geometry.type](geometry, listener);\n }\n }\n var d3_geo_streamObjectType = {\n Feature: function(feature, listener) {\n d3_geo_streamGeometry(feature.geometry, listener);\n },\n FeatureCollection: function(object, listener) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n }\n };\n var d3_geo_streamGeometryType = {\n Sphere: function(object, listener) {\n listener.sphere();\n },\n Point: function(object, listener) {\n object = object.coordinates;\n listener.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n },\n LineString: function(object, listener) {\n d3_geo_streamLine(object.coordinates, listener, 0);\n },\n MultiLineString: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n },\n Polygon: function(object, listener) {\n d3_geo_streamPolygon(object.coordinates, listener);\n },\n MultiPolygon: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n },\n GeometryCollection: function(object, listener) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n }\n };\n function d3_geo_streamLine(coordinates, listener, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n listener.lineStart();\n while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n listener.lineEnd();\n }\n function d3_geo_streamPolygon(coordinates, listener) {\n var i = -1, n = coordinates.length;\n listener.polygonStart();\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n listener.polygonEnd();\n }\n d3.geo.area = function(object) {\n d3_geo_areaSum = 0;\n d3.geo.stream(object, d3_geo_area);\n return d3_geo_areaSum;\n };\n var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n var d3_geo_area = {\n sphere: function() {\n d3_geo_areaSum += 4 * π;\n },\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_areaRingSum.reset();\n d3_geo_area.lineStart = d3_geo_areaRingStart;\n },\n polygonEnd: function() {\n var area = 2 * d3_geo_areaRingSum;\n d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n }\n };\n function d3_geo_areaRingStart() {\n var λ00, φ00, λ0, cosφ0, sinφ0;\n d3_geo_area.point = function(λ, φ) {\n d3_geo_area.point = nextPoint;\n λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n sinφ0 = Math.sin(φ);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n φ = φ * d3_radians / 2 + π / 4;\n var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n d3_geo_areaRingSum.add(Math.atan2(v, u));\n λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n }\n d3_geo_area.lineEnd = function() {\n nextPoint(λ00, φ00);\n };\n }\n function d3_geo_cartesian(spherical) {\n var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n }\n function d3_geo_cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function d3_geo_cartesianCross(a, b) {\n return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n }\n function d3_geo_cartesianAdd(a, b) {\n a[0] += b[0];\n a[1] += b[1];\n a[2] += b[2];\n }\n function d3_geo_cartesianScale(vector, k) {\n return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n }\n function d3_geo_cartesianNormalize(d) {\n var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l;\n d[1] /= l;\n d[2] /= l;\n }\n function d3_geo_spherical(cartesian) {\n return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n }\n function d3_geo_sphericalEqual(a, b) {\n return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n }\n d3.geo.bounds = function() {\n var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n var bound = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n bound.point = ringPoint;\n bound.lineStart = ringStart;\n bound.lineEnd = ringEnd;\n dλSum = 0;\n d3_geo_area.polygonStart();\n },\n polygonEnd: function() {\n d3_geo_area.polygonEnd();\n bound.point = point;\n bound.lineStart = lineStart;\n bound.lineEnd = lineEnd;\n if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n range[0] = λ0, range[1] = λ1;\n }\n };\n function point(λ, φ) {\n ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n function linePoint(λ, φ) {\n var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n if (p0) {\n var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n d3_geo_cartesianNormalize(inflection);\n inflection = d3_geo_spherical(inflection);\n var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = inflection[1] * d3_degrees;\n if (φi > φ1) φ1 = φi;\n } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = -inflection[1] * d3_degrees;\n if (φi < φ0) φ0 = φi;\n } else {\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n if (antimeridian) {\n if (λ < λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n } else {\n if (λ1 >= λ0) {\n if (λ < λ0) λ0 = λ;\n if (λ > λ1) λ1 = λ;\n } else {\n if (λ > λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n }\n }\n } else {\n point(λ, φ);\n }\n p0 = p, λ_ = λ;\n }\n function lineStart() {\n bound.point = linePoint;\n }\n function lineEnd() {\n range[0] = λ0, range[1] = λ1;\n bound.point = point;\n p0 = null;\n }\n function ringPoint(λ, φ) {\n if (p0) {\n var dλ = λ - λ_;\n dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n } else λ__ = λ, φ__ = φ;\n d3_geo_area.point(λ, φ);\n linePoint(λ, φ);\n }\n function ringStart() {\n d3_geo_area.lineStart();\n }\n function ringEnd() {\n ringPoint(λ__, φ__);\n d3_geo_area.lineEnd();\n if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n range[0] = λ0, range[1] = λ1;\n p0 = null;\n }\n function angle(λ0, λ1) {\n return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n }\n function compareRanges(a, b) {\n return a[0] - b[0];\n }\n function withinRange(x, range) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n return function(feature) {\n φ1 = λ1 = -(λ0 = φ0 = Infinity);\n ranges = [];\n d3.geo.stream(feature, bound);\n var n = ranges.length;\n if (n) {\n ranges.sort(compareRanges);\n for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n b = ranges[i];\n if (withinRange(b[0], a) || withinRange(b[1], a)) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n var best = -Infinity, dλ;\n for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n b = merged[i];\n if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n }\n }\n ranges = range = null;\n return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n };\n }();\n d3.geo.centroid = function(object) {\n d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, d3_geo_centroid);\n var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n if (m < ε2) {\n x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n m = x * x + y * y + z * z;\n if (m < ε2) return [ NaN, NaN ];\n }\n return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n };\n var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n var d3_geo_centroid = {\n sphere: d3_noop,\n point: d3_geo_centroidPoint,\n lineStart: d3_geo_centroidLineStart,\n lineEnd: d3_geo_centroidLineEnd,\n polygonStart: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n }\n };\n function d3_geo_centroidPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n }\n function d3_geo_centroidPointXYZ(x, y, z) {\n ++d3_geo_centroidW0;\n d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n }\n function d3_geo_centroidLineStart() {\n var x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroid.point = nextPoint;\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_centroidLineEnd() {\n d3_geo_centroid.point = d3_geo_centroidPoint;\n }\n function d3_geo_centroidRingStart() {\n var λ00, φ00, x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ00 = λ, φ00 = φ;\n d3_geo_centroid.point = nextPoint;\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n d3_geo_centroid.lineEnd = function() {\n nextPoint(λ00, φ00);\n d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n d3_geo_centroid.point = d3_geo_centroidPoint;\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n d3_geo_centroidX2 += v * cx;\n d3_geo_centroidY2 += v * cy;\n d3_geo_centroidZ2 += v * cz;\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function d3_true() {\n return true;\n }\n function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n var subject = [], clip = [];\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n];\n if (d3_geo_sphericalEqual(p0, p1)) {\n listener.lineStart();\n for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n listener.lineEnd();\n return;\n }\n var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n a.o = b;\n subject.push(a);\n clip.push(b);\n a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n a.o = b;\n subject.push(a);\n clip.push(b);\n });\n clip.sort(compare);\n d3_geo_clipPolygonLinkCircular(subject);\n d3_geo_clipPolygonLinkCircular(clip);\n if (!subject.length) return;\n for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n clip[i].e = entry = !entry;\n }\n var start = subject[0], points, point;\n while (1) {\n var current = start, isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n listener.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, listener);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, listener);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n listener.lineEnd();\n }\n }\n function d3_geo_clipPolygonLinkCircular(array) {\n if (!(n = array.length)) return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other;\n this.e = entry;\n this.v = false;\n this.n = this.p = null;\n }\n function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n return function(rotate, listener) {\n var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3.merge(segments);\n var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n if (segments.length) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n } else if (clipStartInside) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n listener.polygonStart();\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n listener.polygonEnd();\n }\n };\n function point(λ, φ) {\n var point = rotate(λ, φ);\n if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n }\n function pointLine(λ, φ) {\n var point = rotate(λ, φ);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n var segments;\n var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n function pointRing(λ, φ) {\n ring.push([ λ, φ ]);\n var point = rotate(λ, φ);\n ringListener.point(point[0], point[1]);\n }\n function ringStart() {\n ringListener.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringListener.lineEnd();\n var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return;\n if (clean & 1) {\n segment = ringSegments[0];\n var n = segment.length - 1, i = -1, point;\n if (n > 0) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n while (++i < n) listener.point((point = segment[i])[0], point[1]);\n listener.lineEnd();\n }\n return;\n }\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n }\n return clip;\n };\n }\n function d3_geo_clipSegmentLength1(segment) {\n return segment.length > 1;\n }\n function d3_geo_clipBufferListener() {\n var lines = [], line;\n return {\n lineStart: function() {\n lines.push(line = []);\n },\n point: function(λ, φ) {\n line.push([ λ, φ ]);\n },\n lineEnd: d3_noop,\n buffer: function() {\n var buffer = lines;\n lines = [];\n line = null;\n return buffer;\n },\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n }\n };\n }\n function d3_geo_clipSort(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n }\n var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n function d3_geo_clipAntimeridianLine(listener) {\n var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n return {\n lineStart: function() {\n listener.lineStart();\n clean = 1;\n },\n point: function(λ1, φ1) {\n var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n if (abs(dλ - π) < ε) {\n listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n listener.point(λ1, φ0);\n clean = 0;\n } else if (sλ0 !== sλ1 && dλ >= π) {\n if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n clean = 0;\n }\n listener.point(λ0 = λ1, φ0 = φ1);\n sλ0 = sλ1;\n },\n lineEnd: function() {\n listener.lineEnd();\n λ0 = φ0 = NaN;\n },\n clean: function() {\n return 2 - clean;\n }\n };\n }\n function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n }\n function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n var φ;\n if (from == null) {\n φ = direction * halfπ;\n listener.point(-π, φ);\n listener.point(0, φ);\n listener.point(π, φ);\n listener.point(π, 0);\n listener.point(π, -φ);\n listener.point(0, -φ);\n listener.point(-π, -φ);\n listener.point(-π, 0);\n listener.point(-π, φ);\n } else if (abs(from[0] - to[0]) > ε) {\n var s = from[0] < to[0] ? π : -π;\n φ = direction * s / 2;\n listener.point(-s, φ);\n listener.point(0, φ);\n listener.point(s, φ);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function d3_geo_pointInPolygon(point, polygon) {\n var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n d3_geo_areaRingSum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n var ring = polygon[i], m = ring.length;\n if (!m) continue;\n var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n while (true) {\n if (j === m) j = 0;\n point = ring[j];\n var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n d3_geo_cartesianNormalize(arc);\n var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n d3_geo_cartesianNormalize(intersection);\n var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n }\n }\n if (!j++) break;\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n }\n }\n return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;\n }\n function d3_geo_clipCircle(radius) {\n var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n function visible(λ, φ) {\n return Math.cos(λ) * Math.cos(φ) > cr;\n }\n function clipLine(listener) {\n var point0, c0, v0, v00, clean;\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(λ, φ) {\n var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n if (!point0 && (v00 = v0 = v)) listener.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n point1[0] += ε;\n point1[1] += ε;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n listener.lineStart();\n point2 = intersect(point1, point0);\n listener.point(point2[0], point2[1]);\n } else {\n point2 = intersect(point0, point1);\n listener.point(point2[0], point2[1]);\n listener.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n } else {\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n listener.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) listener.lineEnd();\n point0 = null;\n },\n clean: function() {\n return clean | (v00 && v0) << 1;\n }\n };\n }\n function intersect(a, b, two) {\n var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n d3_geo_cartesianAdd(A, B);\n var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n d3_geo_cartesianAdd(q, A);\n q = d3_geo_spherical(q);\n if (!two) return q;\n var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n d3_geo_cartesianAdd(q1, A);\n return [ q, d3_geo_spherical(q1) ];\n }\n }\n function code(λ, φ) {\n var r = smallRadius ? radius : π - radius, code = 0;\n if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n return code;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n var d3_geo_clipExtentMAX = 1e9;\n d3.geo.clipExtent = function() {\n var x0, y0, x1, y1, stream, clip, clipExtent = {\n stream: function(output) {\n if (stream) stream.valid = false;\n stream = clip(output);\n stream.valid = true;\n return stream;\n },\n extent: function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n if (stream) stream.valid = false, stream = null;\n return clipExtent;\n }\n };\n return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n };\n function d3_geo_clipExtent(x0, y0, x1, y1) {\n return function(listener) {\n var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n listener = bufferListener;\n segments = [];\n polygon = [];\n clean = true;\n },\n polygonEnd: function() {\n listener = listener_;\n segments = d3.merge(segments);\n var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n if (inside || visible) {\n listener.polygonStart();\n if (inside) {\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (visible) {\n d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n }\n listener.polygonEnd();\n }\n segments = polygon = ring = null;\n }\n };\n function insidePolygon(p) {\n var wn = 0, n = polygon.length, y = p[1];\n for (var i = 0; i < n; ++i) {\n for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n b = v[j];\n if (a[1] <= y) {\n if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n } else {\n if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n }\n a = b;\n }\n }\n return wn !== 0;\n }\n function interpolate(from, to, direction, listener) {\n var a = 0, a1 = 0;\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n do {\n listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function pointVisible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function point(x, y) {\n if (pointVisible(x, y)) listener.point(x, y);\n }\n var x__, y__, v__, x_, y_, v_, first, clean;\n function lineStart() {\n clip.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferListener.rejoin();\n segments.push(bufferListener.buffer());\n }\n clip.point = point;\n if (v_) listener.lineEnd();\n }\n function linePoint(x, y) {\n x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n var v = pointVisible(x, y);\n if (polygon) ring.push([ x, y ]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n listener.lineStart();\n listener.point(x, y);\n }\n } else {\n if (v && v_) listener.point(x, y); else {\n var l = {\n a: {\n x: x_,\n y: y_\n },\n b: {\n x: x,\n y: y\n }\n };\n if (clipLine(l)) {\n if (!v_) {\n listener.lineStart();\n listener.point(l.a.x, l.a.y);\n }\n listener.point(l.b.x, l.b.y);\n if (!v) listener.lineEnd();\n clean = false;\n } else if (v) {\n listener.lineStart();\n listener.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clip;\n };\n function corner(p, direction) {\n return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n }\n function compare(a, b) {\n return comparePoints(a.x, b.x);\n }\n function comparePoints(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n }\n function d3_geo_conic(projectAt) {\n var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n p.parallels = function(_) {\n if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n };\n return p;\n }\n function d3_geo_conicEqualArea(φ0, φ1) {\n var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n function forward(λ, φ) {\n var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = ρ0 - y;\n return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n };\n return forward;\n }\n (d3.geo.conicEqualArea = function() {\n return d3_geo_conic(d3_geo_conicEqualArea);\n }).raw = d3_geo_conicEqualArea;\n d3.geo.albers = function() {\n return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n };\n d3.geo.albersUsa = function() {\n var lower48 = d3.geo.albers();\n var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n var point, pointStream = {\n point: function(x, y) {\n point = [ x, y ];\n }\n }, lower48Point, alaskaPoint, hawaiiPoint;\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n point = null;\n (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n return point;\n }\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n };\n albersUsa.stream = function(stream) {\n var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n return {\n point: function(x, y) {\n lower48Stream.point(x, y);\n alaskaStream.point(x, y);\n hawaiiStream.point(x, y);\n },\n sphere: function() {\n lower48Stream.sphere();\n alaskaStream.sphere();\n hawaiiStream.sphere();\n },\n lineStart: function() {\n lower48Stream.lineStart();\n alaskaStream.lineStart();\n hawaiiStream.lineStart();\n },\n lineEnd: function() {\n lower48Stream.lineEnd();\n alaskaStream.lineEnd();\n hawaiiStream.lineEnd();\n },\n polygonStart: function() {\n lower48Stream.polygonStart();\n alaskaStream.polygonStart();\n hawaiiStream.polygonStart();\n },\n polygonEnd: function() {\n lower48Stream.polygonEnd();\n alaskaStream.polygonEnd();\n hawaiiStream.polygonEnd();\n }\n };\n };\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n return albersUsa;\n };\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_);\n alaska.scale(_ * .35);\n hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n return albersUsa;\n };\n return albersUsa.scale(1070);\n };\n var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_pathAreaPolygon = 0;\n d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n }\n };\n function d3_geo_pathAreaRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathArea.point = function(x, y) {\n d3_geo_pathArea.point = nextPoint;\n x00 = x0 = x, y00 = y0 = y;\n };\n function nextPoint(x, y) {\n d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n x0 = x, y0 = y;\n }\n d3_geo_pathArea.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n var d3_geo_pathBounds = {\n point: d3_geo_pathBoundsPoint,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_pathBoundsPoint(x, y) {\n if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n }\n function d3_geo_pathBuffer() {\n var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointCircle = d3_geo_pathBufferCircle(_);\n return stream;\n },\n result: function() {\n if (buffer.length) {\n var result = buffer.join(\"\");\n buffer = [];\n return result;\n }\n }\n };\n function point(x, y) {\n buffer.push(\"M\", x, \",\", y, pointCircle);\n }\n function pointLineStart(x, y) {\n buffer.push(\"M\", x, \",\", y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n buffer.push(\"L\", x, \",\", y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n buffer.push(\"Z\");\n }\n return stream;\n }\n function d3_geo_pathBufferCircle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n }\n var d3_geo_pathCentroid = {\n point: d3_geo_pathCentroidPoint,\n lineStart: d3_geo_pathCentroidLineStart,\n lineEnd: d3_geo_pathCentroidLineEnd,\n polygonStart: function() {\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n }\n };\n function d3_geo_pathCentroidPoint(x, y) {\n d3_geo_centroidX0 += x;\n d3_geo_centroidY0 += y;\n ++d3_geo_centroidZ0;\n }\n function d3_geo_pathCentroidLineStart() {\n var x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n }\n function d3_geo_pathCentroidLineEnd() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n }\n function d3_geo_pathCentroidRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n z = y0 * x - x0 * y;\n d3_geo_centroidX2 += z * (x0 + x);\n d3_geo_centroidY2 += z * (y0 + y);\n d3_geo_centroidZ2 += z * 3;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n d3_geo_pathCentroid.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n function d3_geo_pathContext(context) {\n var pointRadius = 4.5;\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointRadius = _;\n return stream;\n },\n result: d3_noop\n };\n function point(x, y) {\n context.moveTo(x + pointRadius, y);\n context.arc(x, y, pointRadius, 0, τ);\n }\n function pointLineStart(x, y) {\n context.moveTo(x, y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n context.lineTo(x, y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n context.closePath();\n }\n return stream;\n }\n function d3_geo_resample(project) {\n var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n function resample(stream) {\n return (maxDepth ? resampleRecursive : resampleNone)(stream);\n }\n function resampleNone(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n });\n }\n function resampleRecursive(stream) {\n var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n var resample = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.polygonStart();\n resample.lineStart = ringStart;\n },\n polygonEnd: function() {\n stream.polygonEnd();\n resample.lineStart = lineStart;\n }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resample.point = linePoint;\n stream.lineStart();\n }\n function linePoint(λ, φ) {\n var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resample.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resample.point = ringPoint;\n resample.lineEnd = ringEnd;\n }\n function ringPoint(λ, φ) {\n linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resample.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n resample.lineEnd = lineEnd;\n lineEnd();\n }\n return resample;\n }\n function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * δ2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n }\n }\n }\n resample.precision = function(_) {\n if (!arguments.length) return Math.sqrt(δ2);\n maxDepth = (δ2 = _ * _) > 0 && 16;\n return resample;\n };\n return resample;\n }\n d3.geo.path = function() {\n var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n d3.geo.stream(object, cacheStream);\n }\n return contextStream.result();\n }\n path.area = function(object) {\n d3_geo_pathAreaSum = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathArea));\n return d3_geo_pathAreaSum;\n };\n path.centroid = function(object) {\n d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n };\n path.bounds = function(object) {\n d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n };\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n return reset();\n };\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return reset();\n };\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n function reset() {\n cacheStream = null;\n return path;\n }\n return path.projection(d3.geo.albersUsa()).context(null);\n };\n function d3_geo_pathProjectStream(project) {\n var resample = d3_geo_resample(function(x, y) {\n return project([ x * d3_degrees, y * d3_degrees ]);\n });\n return function(stream) {\n return d3_geo_projectionRadians(resample(stream));\n };\n }\n d3.geo.transform = function(methods) {\n return {\n stream: function(stream) {\n var transform = new d3_geo_transform(stream);\n for (var k in methods) transform[k] = methods[k];\n return transform;\n }\n };\n };\n function d3_geo_transform(stream) {\n this.stream = stream;\n }\n d3_geo_transform.prototype = {\n point: function(x, y) {\n this.stream.point(x, y);\n },\n sphere: function() {\n this.stream.sphere();\n },\n lineStart: function() {\n this.stream.lineStart();\n },\n lineEnd: function() {\n this.stream.lineEnd();\n },\n polygonStart: function() {\n this.stream.polygonStart();\n },\n polygonEnd: function() {\n this.stream.polygonEnd();\n }\n };\n function d3_geo_transformPoint(stream, point) {\n return {\n point: point,\n sphere: function() {\n stream.sphere();\n },\n lineStart: function() {\n stream.lineStart();\n },\n lineEnd: function() {\n stream.lineEnd();\n },\n polygonStart: function() {\n stream.polygonStart();\n },\n polygonEnd: function() {\n stream.polygonEnd();\n }\n };\n }\n d3.geo.projection = d3_geo_projection;\n d3.geo.projectionMutator = d3_geo_projectionMutator;\n function d3_geo_projection(project) {\n return d3_geo_projectionMutator(function() {\n return project;\n })();\n }\n function d3_geo_projectionMutator(projectAt) {\n var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n x = project(x, y);\n return [ x[0] * k + δx, δy - x[1] * k ];\n }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n function projection(point) {\n point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n return [ point[0] * k + δx, δy - point[1] * k ];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n }\n projection.stream = function(output) {\n if (stream) stream.valid = false;\n stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n stream.valid = true;\n return stream;\n };\n projection.clipAngle = function(_) {\n if (!arguments.length) return clipAngle;\n preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n return invalidate();\n };\n projection.clipExtent = function(_) {\n if (!arguments.length) return clipExtent;\n clipExtent = _;\n postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n return invalidate();\n };\n projection.scale = function(_) {\n if (!arguments.length) return k;\n k = +_;\n return reset();\n };\n projection.translate = function(_) {\n if (!arguments.length) return [ x, y ];\n x = +_[0];\n y = +_[1];\n return reset();\n };\n projection.center = function(_) {\n if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n λ = _[0] % 360 * d3_radians;\n φ = _[1] % 360 * d3_radians;\n return reset();\n };\n projection.rotate = function(_) {\n if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n δλ = _[0] % 360 * d3_radians;\n δφ = _[1] % 360 * d3_radians;\n δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n return reset();\n };\n d3.rebind(projection, projectResample, \"precision\");\n function reset() {\n projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n var center = project(λ, φ);\n δx = x - center[0] * k;\n δy = y + center[1] * k;\n return invalidate();\n }\n function invalidate() {\n if (stream) stream.valid = false, stream = null;\n return projection;\n }\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return reset();\n };\n }\n function d3_geo_projectionRadians(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n stream.point(x * d3_radians, y * d3_radians);\n });\n }\n function d3_geo_equirectangular(λ, φ) {\n return [ λ, φ ];\n }\n (d3.geo.equirectangular = function() {\n return d3_geo_projection(d3_geo_equirectangular);\n }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n d3.geo.rotation = function(rotate) {\n rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n }\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n };\n return forward;\n };\n function d3_geo_identityRotation(λ, φ) {\n return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n }\n d3_geo_identityRotation.invert = d3_geo_equirectangular;\n function d3_geo_rotation(δλ, δφ, δγ) {\n return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n }\n function d3_geo_forwardRotationλ(δλ) {\n return function(λ, φ) {\n return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n };\n }\n function d3_geo_rotationλ(δλ) {\n var rotation = d3_geo_forwardRotationλ(δλ);\n rotation.invert = d3_geo_forwardRotationλ(-δλ);\n return rotation;\n }\n function d3_geo_rotationφγ(δφ, δγ) {\n var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n function rotation(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n }\n rotation.invert = function(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n };\n return rotation;\n }\n d3.geo.circle = function() {\n var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n function circle() {\n var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n interpolate(null, null, 1, {\n point: function(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= d3_degrees, x[1] *= d3_degrees;\n }\n });\n return {\n type: \"Polygon\",\n coordinates: [ ring ]\n };\n }\n circle.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return circle;\n };\n circle.angle = function(x) {\n if (!arguments.length) return angle;\n interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n return circle;\n };\n circle.precision = function(_) {\n if (!arguments.length) return precision;\n interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n return circle;\n };\n return circle.angle(90);\n };\n function d3_geo_circleInterpolate(radius, precision) {\n var cr = Math.cos(radius), sr = Math.sin(radius);\n return function(from, to, direction, listener) {\n var step = direction * precision;\n if (from != null) {\n from = d3_geo_circleAngle(cr, from);\n to = d3_geo_circleAngle(cr, to);\n if (direction > 0 ? from < to : from > to) from += direction * τ;\n } else {\n from = radius + direction * τ;\n to = radius - .5 * step;\n }\n for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n }\n };\n }\n function d3_geo_circleAngle(cr, point) {\n var a = d3_geo_cartesian(point);\n a[0] -= cr;\n d3_geo_cartesianNormalize(a);\n var angle = d3_acos(-a[1]);\n return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n }\n d3.geo.distance = function(a, b) {\n var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n };\n d3.geo.graticule = function() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n function lines() {\n return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n return abs(x % DX) > ε;\n }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n return abs(y % DY) > ε;\n }).map(y));\n }\n graticule.lines = function() {\n return lines().map(function(coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n };\n };\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.minorExtent();\n return graticule.majorExtent(_).minorExtent(_);\n };\n graticule.majorExtent = function(_) {\n if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.minorExtent = function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function(_) {\n if (!arguments.length) return graticule.minorStep();\n return graticule.majorStep(_).minorStep(_);\n };\n graticule.majorStep = function(_) {\n if (!arguments.length) return [ DX, DY ];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.minorStep = function(_) {\n if (!arguments.length) return [ dx, dy ];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = d3_geo_graticuleX(y0, y1, 90);\n y = d3_geo_graticuleY(x0, x1, precision);\n X = d3_geo_graticuleX(Y0, Y1, 90);\n Y = d3_geo_graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n };\n function d3_geo_graticuleX(y0, y1, dy) {\n var y = d3.range(y0, y1 - ε, dy).concat(y1);\n return function(x) {\n return y.map(function(y) {\n return [ x, y ];\n });\n };\n }\n function d3_geo_graticuleY(x0, x1, dx) {\n var x = d3.range(x0, x1 - ε, dx).concat(x1);\n return function(y) {\n return x.map(function(x) {\n return [ x, y ];\n });\n };\n }\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.geo.greatArc = function() {\n var source = d3_source, source_, target = d3_target, target_;\n function greatArc() {\n return {\n type: \"LineString\",\n coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n };\n }\n greatArc.distance = function() {\n return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n };\n greatArc.source = function(_) {\n if (!arguments.length) return source;\n source = _, source_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.target = function(_) {\n if (!arguments.length) return target;\n target = _, target_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.precision = function() {\n return arguments.length ? greatArc : 0;\n };\n return greatArc;\n };\n d3.geo.interpolate = function(source, target) {\n return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n };\n function d3_geo_interpolate(x0, y0, x1, y1) {\n var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n var interpolate = d ? function(t) {\n var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n } : function() {\n return [ x0 * d3_degrees, y0 * d3_degrees ];\n };\n interpolate.distance = d;\n return interpolate;\n }\n d3.geo.length = function(object) {\n d3_geo_lengthSum = 0;\n d3.geo.stream(object, d3_geo_length);\n return d3_geo_lengthSum;\n };\n var d3_geo_lengthSum;\n var d3_geo_length = {\n sphere: d3_noop,\n point: d3_noop,\n lineStart: d3_geo_lengthLineStart,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_lengthLineStart() {\n var λ0, sinφ0, cosφ0;\n d3_geo_length.point = function(λ, φ) {\n λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n d3_geo_length.point = nextPoint;\n };\n d3_geo_length.lineEnd = function() {\n d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n };\n function nextPoint(λ, φ) {\n var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n }\n }\n function d3_geo_azimuthal(scale, angle) {\n function azimuthal(λ, φ) {\n var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n }\n azimuthal.invert = function(x, y) {\n var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n };\n return azimuthal;\n }\n var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n return Math.sqrt(2 / (1 + cosλcosφ));\n }, function(ρ) {\n return 2 * Math.asin(ρ / 2);\n });\n (d3.geo.azimuthalEqualArea = function() {\n return d3_geo_projection(d3_geo_azimuthalEqualArea);\n }).raw = d3_geo_azimuthalEqualArea;\n var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n var c = Math.acos(cosλcosφ);\n return c && c / Math.sin(c);\n }, d3_identity);\n (d3.geo.azimuthalEquidistant = function() {\n return d3_geo_projection(d3_geo_azimuthalEquidistant);\n }).raw = d3_geo_azimuthalEquidistant;\n function d3_geo_conicConformal(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), t = function(φ) {\n return Math.tan(π / 4 + φ / 2);\n }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n if (!n) return d3_geo_mercator;\n function forward(λ, φ) {\n if (F > 0) {\n if (φ < -halfπ + ε) φ = -halfπ + ε;\n } else {\n if (φ > halfπ - ε) φ = halfπ - ε;\n }\n var ρ = F / Math.pow(t(φ), n);\n return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n };\n return forward;\n }\n (d3.geo.conicConformal = function() {\n return d3_geo_conic(d3_geo_conicConformal);\n }).raw = d3_geo_conicConformal;\n function d3_geo_conicEquidistant(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n if (abs(n) < ε) return d3_geo_equirectangular;\n function forward(λ, φ) {\n var ρ = G - φ;\n return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = G - y;\n return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n };\n return forward;\n }\n (d3.geo.conicEquidistant = function() {\n return d3_geo_conic(d3_geo_conicEquidistant);\n }).raw = d3_geo_conicEquidistant;\n var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / cosλcosφ;\n }, Math.atan);\n (d3.geo.gnomonic = function() {\n return d3_geo_projection(d3_geo_gnomonic);\n }).raw = d3_geo_gnomonic;\n function d3_geo_mercator(λ, φ) {\n return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n }\n d3_geo_mercator.invert = function(x, y) {\n return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n };\n function d3_geo_mercatorProjection(project) {\n var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n m.scale = function() {\n var v = scale.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.translate = function() {\n var v = translate.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.clipExtent = function(_) {\n var v = clipExtent.apply(m, arguments);\n if (v === m) {\n if (clipAuto = _ == null) {\n var k = π * scale(), t = translate();\n clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n }\n } else if (clipAuto) {\n v = null;\n }\n return v;\n };\n return m.clipExtent(null);\n }\n (d3.geo.mercator = function() {\n return d3_geo_mercatorProjection(d3_geo_mercator);\n }).raw = d3_geo_mercator;\n var d3_geo_orthographic = d3_geo_azimuthal(function() {\n return 1;\n }, Math.asin);\n (d3.geo.orthographic = function() {\n return d3_geo_projection(d3_geo_orthographic);\n }).raw = d3_geo_orthographic;\n var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / (1 + cosλcosφ);\n }, function(ρ) {\n return 2 * Math.atan(ρ);\n });\n (d3.geo.stereographic = function() {\n return d3_geo_projection(d3_geo_stereographic);\n }).raw = d3_geo_stereographic;\n function d3_geo_transverseMercator(λ, φ) {\n return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n }\n d3_geo_transverseMercator.invert = function(x, y) {\n return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n };\n (d3.geo.transverseMercator = function() {\n var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n projection.center = function(_) {\n return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n };\n projection.rotate = function(_) {\n return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n [ _[0], _[1], _[2] - 90 ]);\n };\n return rotate([ 0, 0, 90 ]);\n }).raw = d3_geo_transverseMercator;\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return b;\n } : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfπ);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransformPop(s) {\n return s.length ? s.pop() + \",\" : \"\";\n }\n function d3_interpolateTranslate(ta, tb, s, q) {\n if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n var i = s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n }\n }\n function d3_interpolateRotate(ra, rb, s, q) {\n if (ra !== rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n }\n }\n function d3_interpolateSkew(wa, wb, s, q) {\n if (wa !== wb) {\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n }\n }\n function d3_interpolateScale(ka, kb, s, q) {\n if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] !== 1 || kb[1] !== 1) {\n s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n }\n }\n function d3_interpolateTransform(a, b) {\n var s = [], q = [];\n a = d3.transform(a), b = d3.transform(b);\n d3_interpolateTranslate(a.translate, b.translate, s, q);\n d3_interpolateRotate(a.rotate, b.rotate, s, q);\n d3_interpolateSkew(a.skew, b.skew, s, q);\n d3_interpolateScale(a.scale, b.scale, s, q);\n a = b = null;\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n }\n function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (τ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) {\n alpha = x;\n } else {\n timer.c = null, timer.t = NaN, timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n }\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n timer = d3_timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = root.y = 0;\n if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n return domain;\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n function d3_scale_linearTickFormat(domain, m, format) {\n var range = d3_scale_linearTickRange(domain, m);\n if (format) {\n var match = d3_format_re.exec(format);\n match.shift();\n if (match[8] === \"s\") {\n var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n match[8] = \"f\";\n format = d3.format(match.join(\"\"));\n return function(d) {\n return format(prefix.scale(d)) + prefix.symbol;\n };\n }\n if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n format = match.join(\"\");\n } else {\n format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n }\n return d3.format(format);\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.tickFormat = function(n, format) {\n if (!arguments.length) return d3_scale_logFormat;\n if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n var k = Math.max(1, base * n / scale.ticks().length);\n return function(d) {\n var i = d / pow(Math.round(log(d)));\n if (i * base < base - .5) i *= base;\n return i <= k ? format(d) : \"\";\n };\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var rc1 = rc, rc0 = rc;\n if (da < π) {\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n if (x1 != null) {\n var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n }\n function d3_svg_lineLinearClosed(points) {\n return points.join(\"L\") + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfπ;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / π);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, activeId, active;\n if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n active.timer.c = null;\n active.timer.t = NaN;\n if (--lock.count) delete lock[activeId]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id], time, timer, duration, ease, tweens;\n function schedule(elapsed) {\n var delay = transition.delay;\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n }\n function start(elapsed) {\n var activeId = lock.active, active = lock[activeId];\n if (active) {\n active.timer.c = null;\n active.timer.t = NaN;\n --lock.count;\n delete lock[activeId];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n for (var cancelId in lock) {\n if (+cancelId < id) {\n var cancel = lock[cancelId];\n cancel.timer.c = null;\n cancel.timer.t = NaN;\n --lock.count;\n delete lock[cancelId];\n }\n }\n timer.c = tick;\n d3_timer(function() {\n if (timer.c && tick(elapsed || 1)) {\n timer.c = null;\n timer.t = NaN;\n }\n return 1;\n }, 0, time);\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n tweens = [];\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweens.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n }\n function tick(elapsed) {\n var t = elapsed / duration, e = ease(t), n = tweens.length;\n while (n > 0) {\n tweens[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }\n if (!transition) {\n time = inherit.time;\n timer = d3_timer(schedule, 0, time);\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n timer: timer,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = d3_array(arguments);\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n };\n var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n var d3_time_formatUtc = d3_time_format.utc;\n var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n function d3_time_formatIsoNative(date) {\n return date.toISOString();\n }\n d3_time_formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n d3_time.second = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 1e3) * 1e3);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n }, function(date) {\n return date.getSeconds();\n });\n d3_time.seconds = d3_time.second.range;\n d3_time.seconds.utc = d3_time.second.utc.range;\n d3_time.minute = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 6e4) * 6e4);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n }, function(date) {\n return date.getMinutes();\n });\n d3_time.minutes = d3_time.minute.range;\n d3_time.minutes.utc = d3_time.minute.utc.range;\n d3_time.hour = d3_time_interval(function(date) {\n var timezone = date.getTimezoneOffset() / 60;\n return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n }, function(date) {\n return date.getHours();\n });\n d3_time.hours = d3_time.hour.range;\n d3_time.hours.utc = d3_time.hour.utc.range;\n d3_time.month = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setDate(1);\n return date;\n }, function(date, offset) {\n date.setMonth(date.getMonth() + offset);\n }, function(date) {\n return date.getMonth();\n });\n d3_time.months = d3_time.month.range;\n d3_time.months.utc = d3_time.month.utc.range;\n function d3_time_scale(linear, methods, format) {\n function scale(x) {\n return linear(x);\n }\n scale.invert = function(x) {\n return d3_time_scaleDate(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n linear.domain(x);\n return scale;\n };\n function tickMethod(extent, count) {\n var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n return d / 31536e6;\n }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n }\n scale.nice = function(interval, skip) {\n var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n if (method) interval = method[0], skip = method[1];\n function skipped(date) {\n return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n }\n return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n floor: function(date) {\n while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n return date;\n },\n ceil: function(date) {\n while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n return date;\n }\n } : interval));\n };\n scale.ticks = function(interval, skip) {\n var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n range: interval\n }, skip ];\n if (method) interval = method[0], skip = method[1];\n return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n };\n scale.tickFormat = function() {\n return format;\n };\n scale.copy = function() {\n return d3_time_scale(linear.copy(), methods, format);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_time_scaleDate(t) {\n return new Date(t);\n }\n var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n return d.getMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getHours();\n } ], [ \"%a %d\", function(d) {\n return d.getDay() && d.getDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getMonth();\n } ], [ \"%Y\", d3_true ] ]);\n var d3_time_scaleMilliseconds = {\n range: function(start, stop, step) {\n return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n },\n floor: d3_identity,\n ceil: d3_identity\n };\n d3_time_scaleLocalMethods.year = d3_time.year;\n d3_time.scale = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n };\n var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n return [ m[0].utc, m[1] ];\n });\n var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n return d.getUTCMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getUTCSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getUTCMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getUTCHours();\n } ], [ \"%a %d\", function(d) {\n return d.getUTCDay() && d.getUTCDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getUTCDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getUTCMonth();\n } ], [ \"%Y\", d3_true ] ]);\n d3_time_scaleUtcMethods.year = d3_time.year.utc;\n d3_time.scale.utc = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n };\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();"]} \ No newline at end of file +{"version":3,"file":"d3.js","sources":["../../src/libs/d3.js"],"names":["d3_documentElement","node","ownerDocument","document","documentElement","d3_window","defaultView","d3_ascending","a","b","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","length","mid","right","d3_transposeLength","d","d3_range_integerScale","k","d3_class","ctor","properties","key","Object","defineProperty","prototype","value","enumerable","d3_Map","this","_","create","d3_map_escape","d3_map_proto","d3_map_zero","d3_map_unescape","slice","d3_map_has","d3_map_remove","d3_map_keys","keys","push","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","apply","d3_vendorSymbol","object","name","charAt","toUpperCase","i","n","d3_vendorPrefixes","prefixName","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","event","l","z","listeners","on","listenerByName","listener","get","indexOf","concat","remove","set","d3_eventPreventDefault","d3","preventDefault","d3_eventSource","s","e","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","d3_selection","groups","d3_subclass","d3_selectionPrototype","d3_selection_selector","selector","d3_select","d3_selection_selectorAll","d3_selectAll","d3_selection_attr","attrNull","removeAttribute","attrNullNS","removeAttributeNS","space","local","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","ns","qualify","d3_collapse","trim","replace","d3_selection_classedRe","RegExp","requote","d3_selection_classes","split","d3_selection_classed","classedConstant","classedFunction","map","d3_selection_classedName","re","c","classList","add","getAttribute","lastIndex","test","d3_selection_style","priority","styleNull","style","removeProperty","styleConstant","setProperty","styleFunction","d3_selection_property","propertyNull","propertyConstant","propertyFunction","d3_selection_creator","namespace","namespaceURI","d3_nsXhtml","createElement","createElementNS","createNS","d3_selectionRemove","parent","parentNode","removeChild","d3_selection_dataNode","data","__data__","d3_selection_filter","d3_selectMatches","d3_selection_sortComparator","comparator","d3_selection_each","callback","j","m","group","d3_selection_enter","selection","d3_selection_enterPrototype","d3_selection_enterInsertBefore","enter","i0","j0","update","d3_selection_on","capture","onRemove","removeEventListener","$","onAdd","wrap","d3_array","call","addEventListener","removeAll","match","d3_selection_onListener","filter","d3_selection_onFilters","d3_selection_onFilter","o","related","relatedTarget","compareDocumentPosition","d3_event_dragSuppress","d3_event_dragId","click","w","select","d3_event_dragSelect","suppressClick","off","setTimeout","d3_mousePoint","container","changedTouches","svg","ownerSVGElement","createSVGPoint","point","d3_mouse_bug44083","window","scrollX","scrollY","append","position","top","margin","padding","border","ctm","getScreenCTM","f","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","d3_sgn","d3_cross2d","d3_acos","π","Math","acos","d3_asin","halfπ","asin","d3_sinh","exp","d3_cosh","d3_tanh","d3_haversin","sin","d3_color","d3_hsl","h","d3_rgb_parse","d3_rgb_hsl","d3_hsl_rgb","v","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab","d3_lab_hcl","d3_rgb_lab","rgb","r","g","d3_hcl_lab","cos","d3_radians","d3_lab_rgb","d3_lab_xyz","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_xyz_rgb","atan2","d3_degrees","sqrt","d3_xyz_lab","pow","d3_rgbNumber","d3_rgbString","d3_rgb_hex","max","toString","min","format","hsl","color","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","respond","result","status","request","d3_xhrHasResponse","xhr","error","load","headers","XMLHttpRequest","responseType","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","forEach","send","open","setRequestHeader","overrideMimeType","beforesend","abort","rebind","d3_xhr_fixCallback","responseText","d3_timer","delay","then","Date","now","time","timer","t","d3_timer_queueTail","d3_timer_queueHead","d3_timer_interval","d3_timer_timeout","clearTimeout","d3_timer_frame","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","p","ceil","log","LN10","d3_formatPrefix","abs","scale","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","join","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","prefix","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","before","after","lastIndexOf","Array","d3_date_utc","UTC","d3_time_interval","step","number","date","d0","d1","offset","d3_date","range","dt","times","range_utc","utc","floor","d3_time_interval_utc","d3_locale_timeFormat","d3_time_format","template","string","charCodeAt","d3_time_formatPads","d3_time_formats","parse","H","M","S","L","Z","d3_time_parse","localZ","setFullYear","W","getDay","U","setHours","d3_time_parsers","d3_time_parseWeekdayAbbrev","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_parseWeekday","d3_time_dayRe","d3_time_dayLookup","d3_time_parseMonthAbbrev","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","d3_time_parseMonth","d3_time_monthRe","d3_time_monthLookup","d3_time_parseLocaleFull","d3_time_parseLocaleDate","d3_time_parseLocaleTime","X","d3_time_parseAmPm","d3_time_periodLookup","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","multi","d3_time_formatMulti","d3_time_formatRe","d3_time_formatLookup","A","getMonth","B","d3_time_formatPad","getDate","getHours","I","d3_time","dayOfYear","getMilliseconds","getMinutes","getSeconds","sundayOfYear","mondayOfYear","getFullYear","Y","d3_time_zone","%","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","names","d3_time_numberRe","d3_time_expandYear","getTimezoneOffset","zs","zh","zm","d3_time_percentRe","formats","d3_adder","d3_adderSum","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","hasOwnProperty","d3_geo_streamLine","coordinates","closed","coordinate","lineStart","lineEnd","d3_geo_streamPolygon","polygonStart","polygonEnd","d3_geo_areaRingStart","nextPoint","λ","φ","dλ","λ0","sdλ","adλ","cosφ","sinφ","sinφ0","u","cosφ0","d3_geo_areaRingSum","λ00","φ00","d3_geo_area","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","ε","d3_geo_centroidPoint","d3_geo_centroidPointXYZ","d3_geo_centroidW0","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidLineStart","y0","z0","x0","d3_geo_centroidW1","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroid","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","cx","cy","cz","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_compose","compose","invert","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","subject","clip","segment","p0","p1","d3_geo_clipPolygonIntersection","sort","d3_geo_clipPolygonLinkCircular","entry","points","start","current","isSubject","array","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","pointLine","line","pointRing","ring","ringListener","ringStart","ringEnd","clean","ringSegments","buffer","pop","polygon","polygonStarted","shift","d3_geo_clipSegmentLength1","rotatedClipStart","merge","d3_geo_pointInPolygon","d3_geo_clipSort","sphere","d3_geo_clipBufferListener","lines","rejoin","d3_geo_clipAntimeridianLine","φ0","sλ0","λ1","φ1","sλ1","d3_geo_clipAntimeridianIntersect","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianInterpolate","from","to","direction","meridian","parallel","meridianNormal","polarAngle","winding","reset","point0","antimeridian","τ","arc","intersection","φarc","d3_geo_clipCircle","radius","visible","cr","c0","v0","v00","point2","point1","smallRadius","code","intersect","notHemisphere","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","q","δλ","polar","q1","d3_geo_circleInterpolate","d3_geom_clipLine","x1","y1","ax","ay","bx","by","dx","dy","d3_geo_clipExtent","corner","comparePoints","ca","cb","insidePolygon","wn","a1","linePoint","first","v_","x_","y_","x__","y__","v__","bufferListener","d3_geo_clipExtentMAX","listener_","inside","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","forward","ρ","C","ρ0","ρ0_y","d3_geo_pathAreaRingStart","d3_geo_pathAreaPolygon","x00","y00","d3_geo_pathArea","d3_geo_pathBoundsPoint","d3_geo_pathBoundsX0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY0","d3_geo_pathBoundsY1","d3_geo_pathBuffer","pointCircle","pointLineStart","stream","lineEndPolygon","d3_geo_pathBufferCircle","pointRadius","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroid","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","resample","maxDepth","resampleRecursive","resampleNone","d3_geo_transformPoint","resampleLineTo","a0","b0","ringPoint","a00","b00","c00","b1","depth","d2","δ2","φ2","λ2","x2","y2","dx2","dy2","dz","cosMinDistance","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projection","projectRotate","δx","δy","d3_geo_rotation","δφ","δγ","center","invalidate","valid","projectResample","preclip","d3_geo_clipAntimeridian","postclip","clipAngle","clipExtent","output","translate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","angle","PI","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","d3_geo_interpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","distance","d3_geo_lengthLineStart","cosΔλ","d3_geo_lengthSum","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_conicConformal","F","tan","d3_geo_mercator","d3_geo_conicEquidistant","G","d3_geo_mercatorProjection","clipAuto","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiBeachPool","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiBeaches","d3_geom_voronoiRemoveBeach","vertex","previous","P","next","N","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","insert","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiCloseCells","extent","cell","iHalfEdge","halfEdges","nHalfEdges","end","cells","d3_geom_voronoiCells","iCell","prepare","splice","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ε2","ha","d3_geom_voronoiCirclePool","d3_geom_voronoiCircles","d3_geom_voronoiFirstCircle","d3_geom_voronoiClipEdges","d3_geom_voronoiEdges","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","fx","fy","d3_geom_voronoiEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","diagram","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeNode","leaf","nodes","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","below","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","interpolators","d3_interpolateArray","na","nb","n0","d3_ease_clamp","d3_ease_reverse","d3_ease_reflect","d3_ease_quad","d3_ease_cubic","d3_ease_cubicInOut","t3","d3_ease_poly","d3_ease_sin","d3_ease_exp","d3_ease_circle","d3_ease_elastic","d3_ease_back","d3_ease_bounce","d3_interpolateHcl","hcl","ah","ac","al","bh","bc","bl","d3_interpolateHsl","as","d3_interpolateLab","lab","aa","ba","d3_interpolateRound","d3_transform","r0","r1","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","d3_interpolateTransformPop","d3_interpolateTranslate","ta","tb","d3_interpolateRotate","ra","rb","d3_interpolateSkew","wa","wb","d3_interpolateScale","ka","kb","d3_interpolateTransform","transform","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","d3_layout_bundleLeastCommonAncestor","d3_layout_bundleAncestors","ancestors","aNodes","bNodes","aNode","bNode","sharedNode","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","quad","alpha","charges","charge","random","pointCharge","d3_layout_hierarchyRebind","hierarchy","links","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","d3_layout_stackMaxIndex","d3_layout_stackReduceSum","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","values","d3_layout_histogramBinFixed","LN2","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","bound","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","s1","s2","d3_layout_packUnlink","d3_layout_packTransform","db","da","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeShift","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterY","d3_layout_clusterX","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","domain","stop","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","i1","d3_scale_niceStep","d3_scale_niceIdentity","d3_scale_polylinear","bisect","d3_scale_linear","clamp","rescale","linear","input","Number","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","copy","d3_scale_linearRebind","d3_scale_linearTickRange","span","err","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","ranger","steps","rangeBand","xi","has","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_scale_quantile","thresholds","quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","d3_svg_arcInnerRadius","innerRadius","d3_svg_arcOuterRadius","outerRadius","d3_svg_arcStartAngle","startAngle","d3_svg_arcEndAngle","endAngle","d3_svg_arcPadAngle","padAngle","d3_svg_arcSweep","d3_svg_arcCornerTangents","rc","cw","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","tension","defined","d3_svg_lineLinear","interpolateKey","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStep","path","d3_svg_lineStepBefore","d3_svg_lineStepAfter","d3_svg_lineCardinalOpen","d3_svg_lineHermite","d3_svg_lineCardinalTangents","d3_svg_lineCardinalClosed","d3_svg_lineCardinal","tangents","pi","lp","p2","d3_svg_lineBasis","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","d3_svg_lineBasisOpen","d3_svg_lineBasisClosed","d3_svg_lineBundle","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","d3_svg_lineMonotone","d3_svg_lineRadial","d3_svg_area","area","points1","interpolateReverse","points0","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","d3_selection_interruptNS","lock","activeId","active","count","interrupt","d3_transition","id","d3_transitionPrototype","d3_transition_tween","tween","d3_transition_text","textContent","d3_transitionNamespace","d3_transitionNode","inherit","schedule","elapsed","transition","cancelId","cancel","tick","tweens","ease","duration","d3_svg_axisX","attr","d3_svg_axisY","d3_time_formatIsoNative","toISOString","d3_time_scale","methods","tickMethod","d3_time_scaleSteps","year","d3_time_scaleMilliseconds","d3_time_scaleDate","interval","skip","skipped","d3_json","JSON","d3_html","d3_document","createRange","selectNode","body","createContextualFragment","version","d3_arraySlice","list","childNodes","nodeType","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","ascending","descending","sum","mean","median","numbers","variance","deviation","d3_bisect","bisectLeft","bisectRight","bisector","shuffle","permute","indexes","permutes","pairs","transpose","matrix","row","zip","entries","arrays","merged","Error","isArray","empty","nest","mapType","rollup","sortValues","keyValue","setter","valuesByKey","sortKey","sortKeys","keyMap","order","behavior","d3_requote_re","__proto__","property","querySelector","querySelectorAll","d3_selectMatcher","matches","Sizzle","matchesSelector","subgroup","subnode","subgroups","selectAll","d3_nsPrefix","xhtml","xlink","xml","xmlns","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","html","innerHTML","appendChild","insertBefore","bind","groupData","nodeData","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","exit","datum","nextSibling","args","upgroup","mouseenter","mouseleave","mouse","navigator","userAgent","touch","touches","drag","mousedown","touchstart","dragstart","move","moved","position1","dragId","position0","dragged","dragOffset","ended","dragSubject","dragName","dragRestore","that","correspondingElement","origin","τε","SQRT2","ρ2","ρ4","interpolateZoom","ux0","uy0","w0","ux1","uy1","w1","coshr0","zoom","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","view","scaleTo","scaleExtent","translateTo","zoomTo","__chart__","center0","zoomstarted","zooming","zoomed","zoomended","location0","mousemove","mouseup","d3_selection_interrupt","relocate","scale0","locations0","started","touchmove","touchend","targets","changed","touchtime","distance0","l0","l1","distance1","scale1","zoomName","mousewheelTimer","translate0","d3_behavior_zoomDelta","shiftKey","d3_behavior_zoomInfinity","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","d3_hslPrototype","brighter","darker","d3_hclPrototype","d3_lab_K","d3_labPrototype","d3_rgbPrototype","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","functor","dsv","delimiter","typedResponse","formatRow","formatValue","reFormat","delimiterCode","parseRows","Function","stringify","token","EOF","eol","EOL","rows","formatRows","fieldSet","fields","field","csv","tsv","flush","d3_formatPrefixes","String","fromCharCode","toPrecision","toExponential","toFixed","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getTime","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setUTCFullYear","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","day","years","week","sunday","weeks","weekOfYear","-","0","numberFormat","timeFormat","d3_locale_enUS","geo","d3_adderTemp","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","d3_geo_areaSum","bounds","ranges","normal","equatorial","inflection","λ_","λi","φi","dλSum","λ__","φ__","compareRanges","withinRange","best","centroid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathBounds","contextStream","cacheStream","projectStream","projectionMutator","equirectangular","Δλ","sinΔλ","sinφ1","graticule","X0","DX","X1","Y0","DY","Y1","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","stereographic","transverseMercator","geom","vertices","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","grandpa","uncle","sibling","voronoi","polygons","d3_geom_voronoiClipExtent","triangles","s0","delaunay","quadtree","nx","ny","insertChild","nPoint","xs","ys","x1_","y1_","x2_","y2_","compat","visit","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolateArray","d3_ease_default","d3_ease","poly","cubic","elastic","back","bounce","d3_ease_mode","in","out","in-out","out-in","interpolateHcl","interpolateHsl","interpolateLab","interpolateRound","baseVal","consolidate","d3_transformIdentity","interpolateTransform","layout","bundle","paths","chord","relayout","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","di","dj","subindex","sortChords","resort","force","repulse","dw","dn","theta2","chargeDistance2","dragmove","resume","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","d3_layout_forceChargeDistance2","gravity","weight","chargeDistance","theta","dimension","neighbors","candidates","stack","childs","revalue","partition","pie","arcs","d3_layout_pieSortByValue","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","inside-out","sums","bottom","tops","bottoms","default","silhouette","wiggle","s3","o0","expand","zero","histogram","bin","bins","valuer","binner","frequency","pack","root0","root1","wrapTree","firstWalk","secondWalk","nodeSize","sizeNode","tx","separation","node1","queue","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","cluster","previousNode","treemap","squarify","score","pad","remaining","mode","worst","stickify","rmax","rmin","ratio","stickies","sticky","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","quantize","threshold","circleSegment","rp","ap","padRadius","d3_svg_arcAuto","h1","h0","cornerRadius","rc1","rc0","oc","kc","lc","t30","t12","t03","t21","linear-closed","step-before","step-after","basis","basis-open","basis-closed","cardinal","cardinal-open","cardinal-closed","monotone","radial","equals","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","triangle-down","d3_svg_symbolSqrt3","triangle-up","symbolTypes","d3_transitionId","d3_transitionInherit","subnodes","nameNS","attrTween","attrTweenNS","styleString","styleTween","inheritId","id0","id1","axis","tickTransform","tickValues","tickArguments_","tickFormat_","tickEnter","tickExit","tickUpdate","tickSpacing","innerTickSize","tickPadding","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","orient","outerTickSize","d3_svg_axisDefaultOrient","d3_svg_axisOrients","tickSize","tickSubdivide","brush","brushstart","background","resize","resizes","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","xExtent","yExtent","keydown","keyCode","dragging","keyup","brushmove","altKey","resizingX","move1","resizingY","event_","yClamp","xClamp","yExtentDomain","xExtentDomain","brushend","eventTarget","resizing","ex","ey","d3_svg_brushResizes","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","json","responseXML","define","amd","module","exports"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/libs/jquery/jquery.complexify.js.map b/static/maps/libs/jquery/jquery.complexify.js.map new file mode 100644 index 00000000000..21d14ae3f53 --- /dev/null +++ b/static/maps/libs/jquery/jquery.complexify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jquery.complexify.js","sources":["../../../src/libs/jquery/jquery.complexify.js"],"names":["$","fn","extend","complexify","options","callback","additionalComplexityForCharset","str","charset","i","length","charCodeAt","inBanlist","banMode","bannedPasswords","toLowerCase","indexOf","inArray","evaluateSecurity","password","this","val","complexity","valid","CHARSETS","Math","log","pow","strengthScaleFactor","MIN_COMPLEXITY","minimumChars","MAX_COMPLEXITY","call","defaults","window","COMPLEXIFY_BANLIST","isFunction","each","apply","bind","jQuery"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/libs/jquery/jquery.cookie.js.map b/static/maps/libs/jquery/jquery.cookie.js.map index 59f42e002b9..a9dd7850a4b 100644 --- a/static/maps/libs/jquery/jquery.cookie.js.map +++ b/static/maps/libs/jquery/jquery.cookie.js.map @@ -1 +1 @@ -{"version":3,"sources":["libs/jquery/jquery.cookie.js"],"names":["jQuery","cookie","name","value","options","secure","document","encodeURIComponent","cookies","split","i","length","cookieValue","trim","substring","$","expires","toUTCString","date","Date","setTime","getTime","path","domain","join"],"mappings":"YAuDAA,QAAOC,OAAS,SAASC,EAAMC,EAAOC,GAClC,OAAoB,KAATD,EAsBP,CACA,GAAIE,GAASD,IACbE,IAAAA,SAASL,QAAqBM,IAAZD,SAAYC,OACzB,IAAA,GAAFC,GAAAF,SAAAL,OAAAQ,MAAA,KAAEC,EAAA,EAAAA,EAAAF,EAAAG,OAAAD,IAAA,CACDE,GAAAA,GAAcZ,OAAlBa,KAAAL,EAAAE,GAEQF,IAAAA,EAAUF,UAASL,EAAAA,EAAOQ,OAA9B,IAAAP,EAAA,IAAA,CACKU,EAAeJ,mBAAqBP,EAAAa,UAAAZ,EAAAS,OAAA,GACjCV,QAIA,MAAAW,GAnCbX,EAASG,MACR,OAAAD,IAA+BA,EAAA,GAC/BC,EAAUA,EAAAA,UAAVA,GACID,EAAAA,SAAgB,EAEhBC,IAAAA,GAAUW,EACVX,IAAAA,EAAQY,UAAR,gBAAAZ,GAAAY,SAAAZ,EAAAY,QAAAC,aAAA,CACH,GAAAC,EACD,iBAAcd,GAAdY,SACIZ,EAAQY,GAARG,MACID,EAAJE,QAAAF,EAAAG,UAAA,GAAAjB,EAAAY,QAAA,GAAA,GAAA,MAEIE,EAAOd,EAAAY,QAEVA,EAAM,aAAAE,EAAAD,cAKX,GAAAK,GAAAlB,EAAAkB,KAAA,UAAAlB,EAAAkB,KAAA,GACAC,EAAAnB,EAAAmB,OAAA,YAAAnB,EAAAmB,OAAA,GACAlB,EAAAD,EAAAC,OAAA,WAAA,EACAC,UAAIgB,QAAeA,EAAR,IAAef,mBAAqBe,GAA/CN,EAAAM,EAAAC,EAAAlB,GAAAmB,KAAA","file":"../../../scripts/libs/jquery/jquery.cookie.js","sourcesContent":["/**\n * Cookie plugin\n *\n * Copyright (c) 2006 Klaus Hartl (stilbuero.de)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n/**\n * Create a cookie with the given name and value and other optional parameters.\n *\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Set the value of a cookie.\n * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });\n * @desc Create a cookie with all available options.\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Create a session cookie.\n * @example $.cookie('the_cookie', null);\n * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain\n * used when the cookie was set.\n *\n * @param String name The name of the cookie.\n * @param String value The value of the cookie.\n * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.\n * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.\n * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.\n * If set to null or omitted, the cookie will be a session cookie and will not be retained\n * when the the browser exits.\n * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).\n * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).\n * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will\n * require a secure protocol (like HTTPS).\n * @type undefined\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\n\n/**\n * Get the value of a cookie with the given name.\n *\n * @example $.cookie('the_cookie');\n * @desc Get the value of a cookie.\n *\n * @param String name The name of the cookie.\n * @return The value of the cookie.\n * @type String\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\njQuery.cookie = function(name, value, options) {\n if (typeof value != 'undefined') { // name and value given, set cookie\n options = options || {};\n if (value === null) {\n value = '';\n options = $.extend({}, options); // clone object since it's unexpected behavior if the expired property were changed\n options.expires = -1;\n }\n var expires = '';\n if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n var date;\n if (typeof options.expires == 'number') {\n date = new Date();\n date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n } else {\n date = options.expires;\n }\n expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE\n }\n // NOTE Needed to parenthesize options.path and options.domain\n // in the following expressions, otherwise they evaluate to undefined\n // in the packed version for some reason...\n var path = options.path ? '; path=' + (options.path) : '';\n var domain = options.domain ? '; domain=' + (options.domain) : '';\n var secure = options.secure ? '; secure' : '';\n document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n } else { // only name given, get cookie\n var cookieValue = null;\n if (document.cookie && document.cookie != '') {\n var cookies = document.cookie.split(';');\n for (var i = 0; i < cookies.length; i++) {\n var cookie = jQuery.trim(cookies[i]);\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) == (name + '=')) {\n cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n break;\n }\n }\n }\n return cookieValue;\n }\n};"]} \ No newline at end of file +{"version":3,"file":"jquery.cookie.js","sources":["../../../src/libs/jquery/jquery.cookie.js"],"names":["factory","define","amd","exports","require","jQuery","$","encode","s","config","raw","encodeURIComponent","decode","decodeURIComponent","stringifyCookieValue","value","json","JSON","stringify","String","parseCookieValue","indexOf","slice","replace","pluses","parse","e","read","converter","isFunction","cookie","key","options","undefined","extend","defaults","expires","days","t","Date","setTime","document","toUTCString","path","domain","secure","join","result","cookies","split","i","l","length","parts","name","shift","removeCookie"],"mappings":"CAOC,SAAUA,GACY,kBAAXC,SAAyBA,OAAOC,IAE1CD,QAAQ,UAAWD,GAGnBA,EAF6B,gBAAZG,SAETC,QAAQ,UAGRC,SAER,SAAUC,GAIX,QAASC,GAAOC,GACf,MAAOC,GAAOC,IAAMF,EAAIG,mBAAmBH,GAG5C,QAASI,GAAOJ,GACf,MAAOC,GAAOC,IAAMF,EAAIK,mBAAmBL,GAG5C,QAASM,GAAqBC,GAC7B,MAAOR,GAAOE,EAAOO,KAAOC,KAAKC,UAAUH,GAASI,OAAOJ,IAG5D,QAASK,GAAiBZ,GACF,IAAnBA,EAAEa,QAAQ,OAEbb,EAAIA,EAAEc,MAAM,EAAG,IAAIC,QAAQ,OAAQ,KAAKA,QAAQ,QAAS,MAG1D,KAKC,MADAf,GAAIK,mBAAmBL,EAAEe,QAAQC,EAAQ,MAClCf,EAAOO,KAAOC,KAAKQ,MAAMjB,GAAKA,EACpC,MAAMkB,KAGT,QAASC,GAAKnB,EAAGoB,GAChB,GAAIb,GAAQN,EAAOC,IAAMF,EAAIY,EAAiBZ,EAC9C,OAAOF,GAAEuB,WAAWD,GAAaA,EAAUb,GAASA,EA/BrD,GAAIS,GAAS,MAkCTf,EAASH,EAAEwB,OAAS,SAAUC,EAAKhB,EAAOiB,GAI7C,GAAcC,SAAVlB,IAAwBT,EAAEuB,WAAWd,GAAQ,CAGhD,GAFAiB,EAAU1B,EAAE4B,UAAWzB,EAAO0B,SAAUH,GAET,gBAApBA,GAAQI,QAAsB,CACxC,GAAIC,GAAOL,EAAQI,QAASE,EAAIN,EAAQI,QAAU,GAAIG,KACtDD,GAAEE,SAASF,EAAW,MAAPD,GAGhB,MAAQI,UAASX,QAChBvB,EAAOwB,GAAM,IAAKjB,EAAqBC,GACvCiB,EAAQI,QAAU,aAAeJ,EAAQI,QAAQM,cAAgB,GACjEV,EAAQW,KAAU,UAAYX,EAAQW,KAAO,GAC7CX,EAAQY,OAAU,YAAcZ,EAAQY,OAAS,GACjDZ,EAAQa,OAAU,WAAa,IAC9BC,KAAK,IAYR,IAAK,GAPDC,GAAShB,EAAME,UAKfe,EAAUP,SAASX,OAASW,SAASX,OAAOmB,MAAM,SAE7CC,EAAI,EAAGC,EAAIH,EAAQI,OAAYD,EAAJD,EAAOA,IAAK,CAC/C,GAAIG,GAAQL,EAAQE,GAAGD,MAAM,KACzBK,EAAO1C,EAAOyC,EAAME,SACpBzB,EAASuB,EAAMP,KAAK,IAExB,IAAIf,GAAOA,IAAQuB,EAAM,CAExBP,EAASpB,EAAKG,EAAQf,EACtB,OAIIgB,GAAmCE,UAA3BH,EAASH,EAAKG,MAC1BiB,EAAOO,GAAQxB,GAIjB,MAAOiB,GAGRtC,GAAO0B,YAEP7B,EAAEkD,aAAe,SAAUzB,EAAKC,GAC/B,MAAsBC,UAAlB3B,EAAEwB,OAAOC,IACL,GAIRzB,EAAEwB,OAAOC,EAAK,GAAIzB,EAAE4B,UAAWF,GAAWI,QAAS,OAC3C9B,EAAEwB,OAAOC"} \ No newline at end of file diff --git a/static/maps/libs/jquery/jquery.js.map b/static/maps/libs/jquery/jquery.js.map index dce429a3ca9..6e62d0fb595 100644 --- a/static/maps/libs/jquery/jquery.js.map +++ b/static/maps/libs/jquery/jquery.js.map @@ -1 +1 @@ -{"version":3,"sources":["libs/jquery/jquery.js"],"names":["global","factory","module","_typeof","exports","document","w","window","undefined","noGlobal","isArrayLike","obj","length","type","jQuery","isWindow","Sizzle","winnow","elements","qualifier","not","match","isFunction","selector","grep","elem","i","call","nodeType","context","risSimple","test","rsingleTag","isPlainObject","filter","inArray","sibling","cur","dir","firingIndex","createOptions","options","object","remove","each","rnotwhite","_","flag","support","addEventListener","div","completed","removeEventListener","detachEvent","event","noData","readyState","detach","rmultiDash","name","key","data","thisCache","replace","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","pvt","internalData","acceptData","ret","internalKey","expando","isNode","cache","id","extend","deletedIds","pop","guid","noop","internalRemoveData","attrs","camelCase","indexOf","dataAttr","removeData","concat","map","split","queue","dequeue","fn","empty","deleteExpando","_queueHooks","input","setAttribute","prop","valueParts","tween","maxIterations","css","initial","currentValue","cloneNode","lastChild","checked","initialInUnit","cssNumber","unit","noCloneEvent","option","area","thead","scale","td","style","wrapMap","adjusted","found","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","j","getAll","tag","elems","rformElems","getElementsByTagName","rmouseEvent","rfocusMorph","rtypenamespace","childNodes","nodeName","push","merge","setGlobalEval","refElements","_data","fixDefaultChecked","buildFragment","scripts","selection","ignored","contains","l","returnFalse","one","origFn","nodes","rhtml","tmp","safe","appendChild","exec","types","innerHTML","wrap","htmlPrefilter","leadingWhitespace","rleadingWhitespace","add","createTextNode","handleObjIn","tbody","handleObj","rtbody","origType","elemData","handlers","handler","firstChild","events","eventHandle","removeChild","appendChecked","ownerDocument","needsContext","expr","namespace","namespaces","returnTrue","safeActiveElement","special","activeElement","t","on","origCount","off","removeEvent","this","arguments","content","html","rxhtmlTag","node","find","attr","inPage","rscriptTypeMasked","removeAttribute","cloneCopyEvent","src","dest","hasData","destElements","srcElements","curData","oldData","handle","fixCloneNodeIssues","clone","text","disableScript","restoreScript","attributes","forceAcceptData","parentNode","trim","defaultChecked","value","defaultSelected","selected","defaultValue","domManip","collection","args","callback","apply","first","hasScripts","index","self","eq","access","fragment","target","manipulationTarget","before","insertBefore","doc","cleanData","rscriptType","_evalUrl","globalEval","textContent","rcleanScript","keepData","actualDisplay","appendTo","body","display","getStyles","view","elemdisplay","minWidth","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","origName","hooks","emptyStyle","capName","charAt","toUpperCase","slice","cssPrefixes","showHide","show","hidden","values","cssHooks","isHidden","val","cssNormalTransform","defaultDisplay","num","parseFloat","extra","rdisplayswap","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","isBorderBox","styles","set","cssExpand","computed","swap","curCSS","getWidthOrHeight","valueIsBorderBox","getBoundingClientRect","boxSizing","margin","prefix","suffix","expand","rnumnonpx","boxSizingReliable","Tween","prototype","init","end","easing","createFxNow","result","propFilter","animation","fxNow","Animation","prefilters","genFx","includeWidth","which","height","opts","start","anim","width","createTween","tweeners","adjustCSS","rcssNum","props","oldfire","orig","dataShow","unqueued","fire","defaultPrefilter","always","speed","opt","complete","duration","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","fadeTo","animate","optall","doAnimation","finish","toggle","stop","gotoEnd","clearQueue","timers","done","specialEasing","splice","properties","stopped","slideDown","slideUp","Deferred","fadeOut","opacity","tick","currentTime","remaining","startTime","temp","percent","tweens","timer","run","deferred","fx","promise","_default","originalOptions","timerId","setInterval","slow","time","speeds","select","proxy","a","progress","getClass","ajaxExtend","deep","addToPrefiltersOrTransports","structure","dataTypeExpression","func","s","callbackContext","dataTypes","globalEventContext","dataType","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","prefilterOrFactory","dataTypeOrTransport","getResponseHeader","seekingTransport","inspected","responseHeaders","strAbort","transports","setRequestHeader","flatOptions","lname","requestHeadersNames","requestHeaders","mimeType","code","responses","statusCode","firstDataType","ct","finalDataType","contents","state","shift","abort","success","converters","parts","url","crossDomain","conv2","current","conv","prev","fireGlobals","cacheURL","responseFields","hasContent","rnoContent","response","dataFilter","rts","nonce","ifModified","beforeSend","getDisplay","filterHidden","script","head","send","traditional","isArray","v","buildParams","oldCallbacks","jsonp","createStandardXHR","position","XMLHttpRequest","offsetParent","parentOffset","left","getWindow","defaultView","parentWindow","class2type","toString","hasOwn","fcamelCase","all","letter","constructor","toArray","pushStack","prevObject","last","len","sort","copyIsArray","copy","random","error","msg","Error","isReady","Array","isNumeric","realStringObj","ownFirst","execScript","string","makeArray","arr","results","Object","second","invert","callbackExpect","callbackInverse","arg","now","Date","iterator","Symbol","seed","m","nid","nidselect","groups","newSelector","newContext","setDocument","preferredDoc","documentIsHTML","rquickExpr","getElementById","getElementsByClassName","qsa","compilerCache","rbuggyQSA","ridentifier","toSelector","tokenize","join","testContext","querySelectorAll","rtrim","createCache","keys","Expr","cacheLength","markFunction","assert","addHandle","diff","b","sourceIndex","MAX_NEGATIVE","createInputPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","matchers","contexts","combinator","base","checkNonElements","doneName","newUnmatched","xml","unmatched","mapped","uniqueCache","outerCache","newCache","dirruns","matcher","postFinder","uniqueID","postMap","oldCache","preexisting","matcherOut","elementMatcher","matcherIn","postFilter","setMatcher","preFilter","postSelector","preMap","multipleContexts","leadingRelative","relative","condense","implicitRelative","matchContext","addCombinator","setMatchers","matchedCount","setMatched","dirrunsUnique","elementMatchers","outermost","checkContext","matchAnyContext","outermostContext","bySet","matcherFromTokens","matcherFromGroupMatchers","superMatcher","uniqueSort","contextBackup","byElement","compile","cached","compiled","getText","isXML","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","sortOrder","hasOwnProperty","push_native","booleans","whitespace","identifier","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","rheader","rsibling","rnative","runescape","high","rescape","escaped","funescape","escapedWhitespace","String","fromCharCode","unloadHandler","els","parent","hasCompare","attachEvent","top","className","getElementsByName","attrId","getById","getAttributeNode","matchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","bup","compareDocumentPosition","adown","compare","aup","siblingCheck","ap","bp","attrHandle","disconnectedMatch","specified","duplicates","detectDuplicates","sortStable","selectors","createPseudo","nextSibling","nodeValue",">"," ","excess","+","unquoted","~","nodeNameSelector","pattern","operator","what","forward","ofType","useCache","check","nodeIndex","simple","pseudo","matched","innerText","lang","idx","elemLang","disabled","selectedIndex","hash","location","root","focus","hasFocus","href","tabIndex","enabled","header","createButtonPseudo","rinputs","button","soFar","preFilters","parseOnly","even","lt","radio","checkbox","file","password","image","submit","reset","token","unique","truncate","until","n","rneedsContext","sortDetached","div1","isXMLDoc","is","siblings","rootjQuery","guaranteedUnique","children","targets","jquery","parseHTML","addBack","parentsUntil","ready","nextUntil","rparentsprev","has","closest","pos","prevAll","fired","locked","parents","firing","memory","next","nextAll","reverse","Callbacks","once","stopOnFalse","tuples","returned","tuple","disable","when","lock","fireWith","progressValues","resolveContexts","resolveValues","fail","then","fns","newDefer","readyWait","hold","notify","resolve","reject","wait","triggerHandler","stateString","readyList","subordinate","frameElement","setTimeout","updateFunc","notifyWith","resolveWith","doScrollCheck","progressContexts","doScroll","container","cssText","offsetWidth","applet ","object ","setter","_removeData","defer","count","shrinkWrapBlocksVal","pnum","startLength","bulk","chainable","raw","shrinkWrapBlocks","rcheckableType","htmlSerialize","source","el","emptyGet","rtagName","html5Clone","outerHTML","noCloneChecked","legend","param","eventName","tr","col","tfoot","colgroup","caption","th","change","focusin","rkeyEvent","trigger","bubbleType","triggered","dispatch","delegateType","bindType","eventPath","delegateCount","setup","ontype","preventDefault","mappedTypes","handlerQueue","currentTarget","teardown","sel","isTrigger","rnamespace","onlyHandlers","fix","noBubble","originalEvent","fixHook","fixHooks","Event","isPropagationStopped","metaKey","isDefaultPrevented","original","eventDoc","relatedTarget","load","delegateTarget","preDispatch","blur","click","stopPropagation","postDispatch","beforeunload","returnValue","isNaN","defaultPrevented","keyHooks","timeStamp","srcElement","isImmediatePropagationStopped","charCode","keyCode","mouseHooks","fromElement","pageX","clientX","cancelBubble","stopImmediatePropagation","scrollLeft","clientLeft","scrollTop","clientTop","toElement","pointerleave","related","_submitBubble","simulate","isSimulated","_justChanged","mouseenter","pointerenter","rnoshimcache","form","propertyName","iNoClone","attaches","rchecked","safeFragment","dataAndEvents","deepDataAndEvents","fragmentDiv","insert","HTML","BODY","old","append","prepend","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","after","cssFloat","pixelPositionVal","computeStyleTests","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","replaceWith","getComputedStyle","divStyle","replaceChild","prependTo","replaceAll","rmargin","maxWidth","currentStyle","vendorPropName","pixelMarginRightVal","marginLeft","marginRight","getClientRects","offsetHeight","rsLeft","backgroundClip","clearCloneStyle","MozBoxSizing","ropacity","fontWeight","cssShow","rposition","getPropertyValue","rs","runtimeStyle","pixelLeft","letterSpacing","animationIterationCount","fillOpacity","flexGrow","flexShrink","lineHeight","orphans","zIndex","cssProps","float","propHooks","eased","step","linear","rfxtypes","rrun","isFinite","$1","checkDisplay","ralpha","expanded","hide","p","swing","cos","PI","hrefNormalized","enctype","optDisabled","prefilter","valHooks","to","stopQueue","optionSet","scrollHeight","checkOn","cssFn","ruseDefault","getSetAttribute","getSetInput","slideToggle","fadeToggle","removeAttr","interval","clearInterval","fast","attrHooks","delay","timeout","clearTimeout","attrNames","optSelected","propFix","nodeHook","rclickable","nType","boolHook","rclass","curValue","clazz","radioValue","propName","finalValue","getter","stateVal","classNames","setAttributeNode","createAttribute","coords","contenteditable","hover","fnOut","rquery","rvalidtokens","JSON","str","rfocusable","requireNonComma","open","comma","removeProp","Function","DOMParser","ActiveXObject","rhash","rurl","tabindex","parseInt","for","ajaxLocParts","ajaxLocation","addClass","classes","ajaxHandleResponses","removeClass","toggleClass","hasClass","active","fnOver","mouseleave","ajaxSettings","parse","accepts","depth","allTypes","parseXML","parseFromString","async","loadXML","ajaxSetup","ajaxPrefilter","rheaders","lastModified","etag","timeoutTimer","processData","contentType","*","json","modified","statusText","* text","transport","responseHeadersString","settings","ajaxTransport","createActiveXHR","headers","isSuccess","nativeStatusText","status","xhrSupported","xhr","xhrCallbacks","cors","xhrId","xhrFields","overrideMimeType","rejectWith","isAbort","completeDeferred","method","finalText","wrapInner","wrapAll","r20","rsubmittable","encodeURIComponent","serialize","serializeArray","getJSON","getScript","ajax","throws","unwrap","scriptCharset","reliableHiddenOffsets","filters","visible","onload","onreadystatechange","rbracket","rsubmitterTypes","jsonProp","callbackName","responseContainer","isLocal","parsed","documentMode","params","username","curPosition","curLeft","curOffset","curElem","curCSSTop","curCSSLeft","calculatePosition","responseText","offset","getAllResponseHeaders","win","charset","scrollTo","funcName","rjsonp","jsonpCallback","originalSettings","bind","delegate","andSelf","overwritten","_jQuery","keepScripts","_load","animated","setOffset","curTop","using","box","pageYOffset","pageXOffset","Height","Width","padding","","defaultExtra","unbind","undelegate","size","define","amd","_$","$","noConflict"],"mappings":"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","file":"../../../scripts/libs/jquery/jquery.js","sourcesContent":["/*!\n * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:17Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar deletedIds = [];\n\nvar document = window.document;\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.12.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type( obj ) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( !support.ownFirst ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"
        \" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// init accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof root.ready !== \"undefined\" ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.uniqueSort( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = true;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener ||\n\t\twindow.event.type === \"load\" ||\n\t\tdocument.readyState === \"complete\" ) {\n\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE6-10\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\n\t\t// If IE event model is used\n\t\t} else {\n\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch ( e ) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t( function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t} )();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownFirst = i === \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery( function() {\n\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n} );\n\n\n( function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Support: IE<9\n\tsupport.deleteExpando = true;\n\ttry {\n\t\tdelete div.test;\n\t} catch ( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\nvar acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\n};\n\n\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n\t\tdata === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[ i ] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, undefined\n\t} else {\n\t\tcache[ id ] = undefined;\n\t}\n}\n\njQuery.extend( {\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each( function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t} ) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object,\n\t// or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\n\n( function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n} )();\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ],\n\t\t\t\t\tkey,\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\nvar rleadingWhitespace = ( /^\\s+/ );\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\n\n( function() {\n\tvar div = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment(),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Setup\n\tdiv.innerHTML = \"
        a\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n\tsupport.noCloneEvent = !!div.addEventListener;\n\n\t// Support: IE<9\n\t// Since attributes and properties are the same in IE,\n\t// cleanData must set properties to undefined rather than use removeAttribute\n\tdiv[ jQuery.expando ] = 1;\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\toption: [ 1, \"\" ],\n\tlegend: [ 1, \"
        \", \"
        \" ],\n\tarea: [ 1, \"\", \"\" ],\n\n\t// Support: IE8\n\tparam: [ 1, \"\", \"\" ],\n\tthead: [ 1, \"\", \"
        \" ],\n\ttr: [ 2, \"\", \"
        \" ],\n\tcol: [ 2, \"\", \"
        \" ],\n\ttd: [ 3, \"\", \"
        \" ],\n\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t// unless wrapped in a div with non-breaking characters in front of it.\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X
        \", \"
        \" ]\n};\n\n// Support: IE8-IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context;\n\t\t\t( elem = elems[ i ] ) != null;\n\t\t\ti++\n\t\t) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\tjQuery._data(\n\t\t\telem,\n\t\t\t\"globalEval\",\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/,\n\trtbody = / from table fragments\n\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t// String was a , *may* have spurious \n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t// String was a bare or \n\t\t\t\t\t\twrap[ 1 ] === \"
        \" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t0;\n\n\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n\n\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t}\n\n\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\ttmp = safe.lastChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fix #11356: Clear elements from fragment\n\tif ( tmp ) {\n\t\tsafe.removeChild( tmp );\n\t}\n\n\t// Reset defaultChecked for any radios and checkboxes\n\t// about to be appended to the DOM in IE 6/7 (#8060)\n\tif ( !support.appendChecked ) {\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t}\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttmp = null;\n\n\treturn safe;\n}\n\n\n( function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !( support[ i ] = eventName in window ) ) {\n\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n\t\t\t// with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tjQuery._data( cur, \"handle\" );\n\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif (\n\t\t\t\t( !special._default ||\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n\t\t\t\t) && acceptData( elem )\n\t\t\t) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Safari 6-8+\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n\t\t\t\t\toriginal.toElement :\n\t\t\t\t\tfromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n\t\t\t\t// since `originalEvent` should point to the original event for the\n\t\t\t\t// constancy with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event,\n\t\t\t// to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( !e || this.isSimulated ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\n// IE submit delegation\nif ( !support.submit ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\n\n\t\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\n\t\t\t\t\t\tundefined;\n\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submitBubble = true;\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submitBubble ) {\n\t\t\t\tdelete event._submitBubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.change ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._justChanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._justChanged = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\n\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g,\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar first, node, hasScripts,\n\t\tscripts, doc, fragment,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval(\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[ i ] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tattributes = support.attributes,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n\t\t\t\t\t\t// IE creates expando attributes along with the property\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append(\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n\t\t\t\t);\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[ i ] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"")}),a.show({backdrop:!0})}var s=t,r=function(t){this.$overlay=t.overlay,this.$dialog=t.dialog,this.$header=this.$dialog.find(".modal-header"),this.$body=this.$dialog.find(".modal-body"),this.$footer=this.$dialog.find(".modal-footer"),this.$backdrop=t.backdrop,this.$header.find(".close").on("click",s.proxy(this.hide,this))};s.extend(r.prototype,{setContent:function(t){this.$header.hide(),t.title&&(this.$header.find(".title").html(t.title),this.$header.show()),t.closeButton?(this.$header.find(".close").show(),this.$header.show()):this.$header.find(".close").hide(),this.$footer.hide();var e=this.$footer.find(".buttons").html("");t.buttons&&(s.each(t.buttons,function(t,i){e.append(s(" ").text(t).click(i)).append(" ")}),this.$footer.show());var i=this.$footer.find(".extra_buttons").html("");t.extra_buttons&&(s.each(t.extra_buttons,function(t,e){i.append(s("").text(t).click(e)).append(" ")}),this.$footer.show());var n=t.body;"progress"==n&&(n=s("
        ")),this.$body.html(n)},show:function(t,e){this.$dialog.is(":visible")||(t.backdrop?this.$backdrop.addClass("in"):this.$backdrop.removeClass("in"),this.$overlay.show(),this.$dialog.show(),this.$overlay.addClass("in"),this.$body.css("min-width",this.$body.width()),this.$body.css("max-height",s(window).height()-this.$footer.outerHeight()-this.$header.outerHeight()-parseInt(this.$dialog.css("padding-top"),10)-parseInt(this.$dialog.css("padding-bottom"),10))),e&&e()},hide:function(){var t=this;t.$dialog.fadeOut(function(){t.$overlay.hide(),t.$backdrop.removeClass("in"),t.$body.children().remove(),t.$body.css("min-width",void 0)})}});var a;return s(function(){a=new r({overlay:s("#top-modal"),dialog:s("#top-modal-dialog"),backdrop:s("#top-modal-backdrop")})}),{Modal:r,hide_modal:e,show_modal:i,show_message:n,show_in_overlay:o}}.apply(e,o))&&(t.exports=s)}).call(e,i(0))},function(t,e,i){"use strict";(function(n,o,s){var r,a;r=[i(66)],void 0!==(a=function(t){var e="undefined"==typeof Galaxy?"/":Galaxy.root,i={storage:window.sessionStorage,onEnd:function(){sessionStorage.removeItem("activeGalaxyTour")},delay:150,orphan:!0},r=function(t){return n.each(t.steps,function(t){t.preclick&&(t.onShow=function(){n.each(t.preclick,function(t){o(t).click()})}),t.postclick&&(t.onHide=function(){n.each(t.postclick,function(t){o(t).click()})}),t.textinsert&&(t.onShown=function(){o(t.element).val(t.textinsert).trigger("change")})}),t},a=s.Model.extend({urlRoot:e+"api/tours"}),l=s.Collection.extend({url:e+"api/tours",model:a}),u=function(t){var s=e+"api/tours/"+t;o.getJSON(s,function(t){var e=r(t);sessionStorage.setItem("activeGalaxyTour",JSON.stringify(t));var o=new Tour(n.extend({steps:e.steps},i));o.init(),o.goTo(0),o.restart()})};return{ToursView:s.View.extend({title:"Tours",initialize:function(){var t=this;this.setElement("
        "),this.model=new l,this.model.fetch({success:function(){t.render()},error:function(){console.error("Failed to fetch tours.")}})},render:function(){var t=n.template('

        Galaxy Tours

        \n

        This page presents a list of interactive tours available on this Galaxy server.\nSelect any tour to get started (and remember, you can click \'End Tour\' at any time).

        \n');this.$el.html(t({tours:this.model.models})).on("click",".tourItem",function(t){t.preventDefault(),u(o(this).data("tour.id"))})}}),hooked_tour_from_data:r,tour_opts:i,giveTour:u}}.apply(e,r))&&(t.exports=a)}).call(e,i(2),i(0),i(1))},function(t,e,i){"use strict";var n,o;n=[],void 0!==(o=function(){function t(t,i){var n=void 0!==t.prototype?t.prototype:t;return void 0!==i&&(n._logNamespace=i),e.forEach(function(t){n[t]=function(){if(this.logger)return this.logger.emit?this.logger.emit(t,this._logNamespace,arguments):this.logger[t]?this.logger[t].apply(this.logger,arguments):void 0}}),t}var e=["log","debug","info","warn","error","metric"];return t}.apply(e,n))&&(t.exports=o)},function(t,e,i){"use strict";var n,o;n=[i(2),i(1),i(6),i(4)],void 0!==(o=function(t,e,i,n){var o=e.Model.extend(i.LoggableMixin).extend({_logNamespace:"user",urlRoot:function(){return Galaxy.root+"api/users"},defaults:{id:null,username:"("+n("anonymous user")+")",email:"",total_disk_usage:0,nice_total_disk_usage:"",quota_percent:null,is_admin:!1},initialize:function(t){this.log("User.initialize:",t),this.on("loaded",function(t,e){this.log(this+" has loaded:",t,e)}),this.on("change",function(t,e){this.log(this+" has changed:",t,e.changes)})},isAnonymous:function(){return!this.get("email")},isAdmin:function(){return this.get("is_admin")},loadFromApi:function(t,i){t=t||o.CURRENT_ID_STR,i=i||{};var n=this,s=i.success;return i.success=function(t,e){n.trigger("loaded",t,e),s&&s(t,e)},t===o.CURRENT_ID_STR&&(i.url=this.urlRoot+"/"+o.CURRENT_ID_STR),e.Model.prototype.fetch.call(this,i)},clearSessionStorage:function(){for(var t in sessionStorage)0===t.indexOf("history:")?sessionStorage.removeItem(t):"history-panel"===t&&sessionStorage.removeItem(t)},toString:function(){var t=[this.get("username")];return this.get("id")&&(t.unshift(this.get("id")),t.push(this.get("email"))),"User("+t.join(":")+")"}});o.CURRENT_ID_STR="current",o.getCurrentUserFromApi=function(t){var e=new o;return e.loadFromApi(o.CURRENT_ID_STR,t),e};e.Collection.extend(i.LoggableMixin).extend({model:o,urlRoot:function(){return Galaxy.root+"api/users"}});return{User:o}}.apply(e,n))&&(t.exports=o)},,,,,,,,,,,,,,,,,,,,,,,function(t,e,i){(function(t){!function(t){function e(i){function n(){e(o)}var o=i.data||i;switch(i.type){case"mouseenter":o.dist2=0,o.event=i,i.type="hoverstart",!1!==t.event.dispatch.call(this,i)&&(o.elem=this,t.event.add(this,"mousemove",e,o),o.timer=setTimeout(n,o.delay));break;case"mousemove":o.dist2+=Math.pow(i.pageX-o.event.pageX,2)+Math.pow(i.pageY-o.event.pageY,2),o.event=i;break;case"mouseleave":clearTimeout(o.timer),o.hovered?(i.type="hoverend",t.event.dispatch.call(this,i),o.hovered--):t.event.remove(o.elem,"mousemove",e);break;default:o.dist2<=Math.pow(o.speed*(o.delay/1e3),2)?(t.event.remove(o.elem,"mousemove",e),o.event.type="hover",!1!==t.event.dispatch.call(o.elem,o.event)&&o.hovered++):o.timer=setTimeout(n,o.delay),o.dist2=0}}t.fn._hover=t.fn.hover,t.fn.hover=function(t,e,i){return i&&this.bind("hoverstart",t),e&&this.bind("hoverend",i||e),t?this.bind("hover",i?e:t):this.trigger("hover")};var i=t.event.special.hover={delay:100,speed:100,setup:function(n){n=t.extend({speed:i.speed,delay:i.delay,hovered:0},n||{}),t.event.add(this,"mouseenter mouseleave",e,n)},teardown:function(){t.event.remove(this,"mouseenter mouseleave",e)}}}(t)}).call(e,i(0))},function(t,e,i){(function(t){!function(t){t.fn.drag=function(e,i,n){var o="string"==typeof e?e:"",s=t.isFunction(e)?e:t.isFunction(i)?i:null;return 0!==o.indexOf("drag")&&(o="drag"+o),n=(e==s?i:n)||{},s?this.bind(o,n,s):this.trigger(o)};var e=t.event,i=e.special,n=i.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:!1,drop:!0,click:!1},datakey:"dragdata",noBubble:!0,add:function(e){var i=t.data(this,n.datakey),o=e.data||{};i.related+=1,t.each(n.defaults,function(t,e){void 0!==o[t]&&(i[t]=o[t])})},remove:function(){t.data(this,n.datakey).related-=1},setup:function(){if(!t.data(this,n.datakey)){var i=t.extend({related:0},n.defaults);t.data(this,n.datakey,i),e.add(this,"touchstart mousedown",n.init,i),this.attachEvent&&this.attachEvent("ondragstart",n.dontstart)}},teardown:function(){(t.data(this,n.datakey)||{}).related||(t.removeData(this,n.datakey),e.remove(this,"touchstart mousedown",n.init),n.textselect(!0),this.detachEvent&&this.detachEvent("ondragstart",n.dontstart))},init:function(o){if(!n.touched){var s,r=o.data;if(!(0!=o.which&&r.which>0&&o.which!=r.which)&&!t(o.target).is(r.not)&&(!r.handle||t(o.target).closest(r.handle,o.currentTarget).length)&&(n.touched="touchstart"==o.type?this:null,r.propagates=1,r.mousedown=this,r.interactions=[n.interaction(this,r)],r.target=o.target,r.pageX=o.pageX,r.pageY=o.pageY,r.dragging=null,s=n.hijack(o,"draginit",r),r.propagates))return s=n.flatten(s),s&&s.length&&(r.interactions=[],t.each(s,function(){r.interactions.push(n.interaction(this,r))})),r.propagates=r.interactions.length,!1!==r.drop&&i.drop&&i.drop.handler(o,r),n.textselect(!1),n.touched?e.add(n.touched,"touchmove touchend",n.handler,r):e.add(document,"mousemove mouseup",n.handler,r),!(!n.touched||r.live)&&void 0}},interaction:function(e,i){var o=t(e)[i.relative?"position":"offset"]()||{top:0,left:0};return{drag:e,callback:new n.callback,droppable:[],offset:o}},handler:function(o){var s=o.data;switch(o.type){case!s.dragging&&"touchmove":o.preventDefault();case!s.dragging&&"mousemove":if(Math.pow(o.pageX-s.pageX,2)+Math.pow(o.pageY-s.pageY,2)0?void t.removeData(this,"suppress."+e.type):o.apply(this,arguments)};var s=e.fixHooks.touchstart=e.fixHooks.touchmove=e.fixHooks.touchend=e.fixHooks.touchcancel={props:"clientX clientY pageX pageY screenX screenY".split(" "),filter:function(e,i){if(i){var n=i.touches&&i.touches[0]||i.changedTouches&&i.changedTouches[0]||null;n&&t.each(s.props,function(t,i){e[i]=n[i]})}return e}};i.draginit=i.dragstart=i.dragend=n}(t)}).call(e,i(0))},function(t,e,i){var n,o,s;/*! +function(t){function e(t,e,i,n){var o,s,r,a,u,h,d,p,f=e&&e.ownerDocument,g=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==g&&9!==g&&11!==g)return i;if(!n&&((e?e.ownerDocument||e:H)!==O&&D(e),e=e||O,P)){if(11!==g&&(h=gt.exec(t)))if(o=h[1]){if(9===g){if(!(r=e.getElementById(o)))return i;if(r.id===o)return i.push(r),i}else if(f&&(r=f.getElementById(o))&&I(e,r)&&r.id===o)return i.push(r),i}else{if(h[2])return J.apply(i,e.getElementsByTagName(t)),i;if((o=h[3])&&b.getElementsByClassName&&e.getElementsByClassName)return J.apply(i,e.getElementsByClassName(o)),i}if(b.qsa&&!z[t+" "]&&(!j||!j.test(t))){if(1!==g)f=e,p=t;else if("object"!==e.nodeName.toLowerCase()){for((a=e.getAttribute("id"))?a=a.replace(vt,"\\$&"):e.setAttribute("id",a=L),d=C(t),s=d.length,u=ct.test(a)?"#"+a:"[id='"+a+"']";s--;)d[s]=u+" "+c(d[s]);p=d.join(","),f=mt.test(t)&&l(e.parentNode)||e}if(p)try{return J.apply(i,f.querySelectorAll(p)),i}catch(t){}finally{a===L&&e.removeAttribute("id")}}}return k(t.replace(st,"$1"),e,i,n)}function i(){function t(i,n){return e.push(i+" ")>w.cacheLength&&delete t[e.shift()],t[i+" "]=n}var e=[];return t}function n(t){return t[L]=!0,t}function o(t){var e=O.createElement("div");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function s(t,e){for(var i=t.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=e}function r(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||U)-(~t.sourceIndex||U);if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function a(t){return n(function(e){return e=+e,n(function(i,n){for(var o,s=t([],i.length,e),r=s.length;r--;)i[o=s[r]]&&(i[o]=!(n[o]=i[o]))})})}function l(t){return t&&void 0!==t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,i=t.length,n="";e1?function(e,i,n){for(var o=t.length;o--;)if(!t[o](e,i,n))return!1;return!0}:t[0]}function p(t,i,n){for(var o=0,s=i.length;o-1&&(n[u]=!(r[u]=h))}}else b=f(b===r?b.splice(m,b.length):b),s?s(null,r,b,l):J.apply(r,b)})}function m(t){for(var e,i,n,o=t.length,s=w.relative[t[0].type],r=s||w.relative[" "],a=s?1:0,l=h(function(t){return t===e},r,!0),u=h(function(t){return Q(e,t)>-1},r,!0),p=[function(t,i,n){var o=!s&&(n||i!==T)||((e=i).nodeType?l(t,i,n):u(t,i,n));return e=null,o}];a1&&d(p),a>1&&c(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(st,"$1"),i,a0,s=t.length>0,r=function(n,r,a,l,u){var c,h,d,p=0,g="0",m=n&&[],v=[],y=T,b=n||s&&w.find.TAG("*",u),_=$+=null==y?1:Math.random()||.1,x=b.length;for(u&&(T=r===O||r||u);g!==x&&null!=(c=b[g]);g++){if(s&&c){for(h=0,r||c.ownerDocument===O||(D(c),a=!P);d=t[h++];)if(d(c,r||O,a)){l.push(c);break}u&&($=_)}o&&((c=!d&&c)&&p--,n&&m.push(c))}if(p+=g,o&&g!==p){for(h=0;d=i[h++];)d(m,v,r,a);if(n){if(p>0)for(;g--;)m[g]||v[g]||(v[g]=X.call(l));v=f(v)}J.apply(l,v),u&&!n&&v.length>0&&p+i.length>1&&e.uniqueSort(l)}return u&&($=_,T=y),m};return o?n(r):r}var y,b,w,_,x,C,S,k,T,E,A,D,O,M,P,j,R,N,I,L="sizzle"+1*new Date,H=t.document,$=0,F=0,q=i(),W=i(),z=i(),B=function(t,e){return t===e&&(A=!0),0},U=1<<31,V={}.hasOwnProperty,G=[],X=G.pop,Y=G.push,J=G.push,K=G.slice,Q=function(t,e){for(var i=0,n=t.length;i+~]|"+tt+")"+tt+"*"),lt=new RegExp("="+tt+"*([^\\]'\"]*?)"+tt+"*\\]","g"),ut=new RegExp(nt),ct=new RegExp("^"+et+"$"),ht={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),TAG:new RegExp("^("+et+"|[*])"),ATTR:new RegExp("^"+it),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,pt=/^h\d$/i,ft=/^[^{]+\{\s*\[native \w/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/[+~]/,vt=/'|\\/g,yt=new RegExp("\\\\([\\da-f]{1,6}"+tt+"?|("+tt+")|.)","ig"),bt=function(t,e,i){var n="0x"+e-65536;return n!==n||i?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},wt=function(){D()};try{J.apply(G=K.call(H.childNodes),H.childNodes),G[H.childNodes.length].nodeType}catch(t){J={apply:G.length?function(t,e){Y.apply(t,K.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}b=e.support={},x=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},D=e.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:H;return n!==O&&9===n.nodeType&&n.documentElement?(O=n,M=O.documentElement,P=!x(O),(i=O.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",wt,!1):i.attachEvent&&i.attachEvent("onunload",wt)),b.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),b.getElementsByTagName=o(function(t){return t.appendChild(O.createComment("")),!t.getElementsByTagName("*").length}),b.getElementsByClassName=ft.test(O.getElementsByClassName),b.getById=o(function(t){return M.appendChild(t).id=L,!O.getElementsByName||!O.getElementsByName(L).length}),b.getById?(w.find.ID=function(t,e){if(void 0!==e.getElementById&&P){var i=e.getElementById(t);return i?[i]:[]}},w.filter.ID=function(t){var e=t.replace(yt,bt);return function(t){return t.getAttribute("id")===e}}):(delete w.find.ID,w.filter.ID=function(t){var e=t.replace(yt,bt);return function(t){var i=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return i&&i.value===e}}),w.find.TAG=b.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):b.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],o=0,s=e.getElementsByTagName(t);if("*"===t){for(;i=s[o++];)1===i.nodeType&&n.push(i);return n}return s},w.find.CLASS=b.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&P)return e.getElementsByClassName(t)},R=[],j=[],(b.qsa=ft.test(O.querySelectorAll))&&(o(function(t){M.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&j.push("[*^$]="+tt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||j.push("\\["+tt+"*(?:value|"+Z+")"),t.querySelectorAll("[id~="+L+"-]").length||j.push("~="),t.querySelectorAll(":checked").length||j.push(":checked"),t.querySelectorAll("a#"+L+"+*").length||j.push(".#.+[+~]")}),o(function(t){var e=O.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&j.push("name"+tt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||j.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),j.push(",.*:")})),(b.matchesSelector=ft.test(N=M.matches||M.webkitMatchesSelector||M.mozMatchesSelector||M.oMatchesSelector||M.msMatchesSelector))&&o(function(t){b.disconnectedMatch=N.call(t,"div"),N.call(t,"[s!='']:x"),R.push("!=",nt)}),j=j.length&&new RegExp(j.join("|")),R=R.length&&new RegExp(R.join("|")),e=ft.test(M.compareDocumentPosition),I=e||ft.test(M.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&&e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&&16&t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},B=e?function(t,e){if(t===e)return A=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&i||!b.sortDetached&&e.compareDocumentPosition(t)===i?t===O||t.ownerDocument===H&&I(H,t)?-1:e===O||e.ownerDocument===H&&I(H,e)?1:E?Q(E,t)-Q(E,e):0:4&i?-1:1)}:function(t,e){if(t===e)return A=!0,0;var i,n=0,o=t.parentNode,s=e.parentNode,a=[t],l=[e];if(!o||!s)return t===O?-1:e===O?1:o?-1:s?1:E?Q(E,t)-Q(E,e):0;if(o===s)return r(t,e);for(i=t;i=i.parentNode;)a.unshift(i);for(i=e;i=i.parentNode;)l.unshift(i);for(;a[n]===l[n];)n++;return n?r(a[n],l[n]):a[n]===H?-1:l[n]===H?1:0},O):O},e.matches=function(t,i){return e(t,null,null,i)},e.matchesSelector=function(t,i){if((t.ownerDocument||t)!==O&&D(t),i=i.replace(lt,"='$1']"),b.matchesSelector&&P&&!z[i+" "]&&(!R||!R.test(i))&&(!j||!j.test(i)))try{var n=N.call(t,i);if(n||b.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){}return e(i,O,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==O&&D(t),I(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==O&&D(t);var i=w.attrHandle[e.toLowerCase()],n=i&&V.call(w.attrHandle,e.toLowerCase())?i(t,e,!P):void 0;return void 0!==n?n:b.attributes||!P?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,i=[],n=0,o=0;if(A=!b.detectDuplicates,E=!b.sortStable&&t.slice(0),t.sort(B),A){for(;e=t[o++];)e===t[o]&&(n=i.push(o));for(;n--;)t.splice(i[n],1)}return E=null,t},_=e.getText=function(t){var e,i="",n=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=_(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[n++];)i+=_(e);return i},w=e.selectors={cacheLength:50,createPseudo:n,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(yt,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(yt,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ut.test(i)&&(e=C(i,!0))&&(e=i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(yt,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=q[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&q(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,i,n){return function(o){var s=e.attr(o,t);return null==s?"!="===i:!i||(s+="","="===i?s===n:"!="===i?s!==n:"^="===i?n&&0===s.indexOf(n):"*="===i?n&&s.indexOf(n)>-1:"$="===i?n&&s.slice(-n.length)===n:"~="===i?(" "+s.replace(ot," ")+" ").indexOf(n)>-1:"|="===i&&(s===n||s.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,i,n,o){var s="nth"!==t.slice(0,3),r="last"!==t.slice(-4),a="of-type"===e;return 1===n&&0===o?function(t){return!!t.parentNode}:function(e,i,l){var u,c,h,d,p,f,g=s!==r?"nextSibling":"previousSibling",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(m){if(s){for(;g;){for(d=e;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;f=g="only"===t&&!f&&"nextSibling"}return!0}if(f=[r?m.firstChild:m.lastChild],r&&y){for(d=m,h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[t]||[],p=u[0]===$&&u[1],b=p&&u[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(b=p=0)||f.pop();)if(1===d.nodeType&&++b&&d===e){c[t]=[$,p,b];break}}else if(y&&(d=e,h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[t]||[],p=u[0]===$&&u[1],b=p),!1===b)for(;(d=++p&&d&&d[g]||(b=p=0)||f.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&(h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),c[t]=[$,b]),d!==e)););return(b-=o)===n||b%n==0&&b/n>=0}}},PSEUDO:function(t,i){var o,s=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return s[L]?s(i):s.length>1?(o=[t,t,"",i],w.setFilters.hasOwnProperty(t.toLowerCase())?n(function(t,e){for(var n,o=s(t,i),r=o.length;r--;)n=Q(t,o[r]),t[n]=!(e[n]=o[r])}):function(t){return s(t,0,o)}):s}},pseudos:{not:n(function(t){var e=[],i=[],o=S(t.replace(st,"$1"));return o[L]?n(function(t,e,i,n){for(var s,r=o(t,null,n,[]),a=t.length;a--;)(s=r[a])&&(t[a]=!(e[a]=s))}):function(t,n,s){return e[0]=t,o(e,null,s,i),e[0]=null,!i.pop()}}),has:n(function(t){return function(i){return e(t,i).length>0}}),contains:n(function(t){return t=t.replace(yt,bt),function(e){return(e.textContent||e.innerText||_(e)).indexOf(t)>-1}}),lang:n(function(t){return ct.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(yt,bt).toLowerCase(),function(e){var i;do{if(i=P?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(i=i.toLowerCase())===t||0===i.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var i=t.location&&t.location.hash;return i&&i.slice(1)===e.id},root:function(t){return t===M},focus:function(t){return t===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return!1===t.disabled},disabled:function(t){return!0===t.disabled},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return pt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:a(function(){return[0]}),last:a(function(t,e){return[e-1]}),eq:a(function(t,e,i){return[i<0?i+e:i]}),even:a(function(t,e){for(var i=0;i=0;)t.push(n);return t}),gt:a(function(t,e,i){for(var n=i<0?i+e:i;++n2&&"ID"===(r=s[0]).type&&b.getById&&9===e.nodeType&&P&&w.relative[s[1].type]){if(!(e=(w.find.ID(r.matches[0].replace(yt,bt),e)||[])[0]))return i;h&&(e=e.parentNode),t=t.slice(s.shift().value.length)}for(o=ht.needsContext.test(t)?0:s.length;o--&&(r=s[o],!w.relative[a=r.type]);)if((u=w.find[a])&&(n=u(r.matches[0].replace(yt,bt),mt.test(s[0].type)&&l(e.parentNode)||e))){if(s.splice(o,1),!(t=n.length&&c(s)))return J.apply(i,n),i;break}}return(h||S(t,d))(n,e,!P,i,!e||mt.test(t)&&l(e.parentNode)||e),i},b.sortStable=L.split("").sort(B).join("")===L,b.detectDuplicates=!!A,D(),b.sortDetached=o(function(t){return 1&t.compareDocumentPosition(O.createElement("div"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||s("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),b.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||s("value",function(t,e,i){if(!i&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||s(Z,function(t,e,i){var n;if(!i)return!0===t[e]?e.toLowerCase():(n=t.getAttributeNode(e))&&n.specified?n.value:null}),e}(i);lt.find=pt,lt.expr=pt.selectors,lt.expr[":"]=lt.expr.pseudos,lt.uniqueSort=lt.unique=pt.uniqueSort,lt.text=pt.getText,lt.isXMLDoc=pt.isXML,lt.contains=pt.contains;var ft=function(t,e,i){for(var n=[],o=void 0!==i;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&<(t).is(i))break;n.push(t)}return n},gt=function(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&i.push(t);return i},mt=lt.expr.match.needsContext,vt=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,yt=/^.[^:#\[\.,]*$/;lt.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?lt.find.matchesSelector(n,t)?[n]:[]:lt.find.matches(t,lt.grep(e,function(t){return 1===t.nodeType}))},lt.fn.extend({find:function(t){var e,i=this.length,n=[],o=this;if("string"!=typeof t)return this.pushStack(lt(t).filter(function(){for(e=0;e1?lt.unique(n):n),n.selector=this.selector?this.selector+" "+t:t,n},filter:function(t){return this.pushStack(a(this,t||[],!1))},not:function(t){return this.pushStack(a(this,t||[],!0))},is:function(t){return!!a(this,"string"==typeof t&&mt.test(t)?lt(t):t||[],!1).length}});var bt,wt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(lt.fn.init=function(t,e,i){var n,o;if(!t)return this;if(i=i||bt,"string"==typeof t){if(!(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:wt.exec(t))||!n[1]&&e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof lt?e[0]:e,lt.merge(this,lt.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:Z,!0)),vt.test(n[1])&<.isPlainObject(e))for(n in e)lt.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return o=Z.getElementById(n[2]),o&&o.parentNode&&(this.length=1,this[0]=o),this.context=Z,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):lt.isFunction(t)?void 0!==i.ready?i.ready(t):t(lt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),lt.makeArray(t,this))}).prototype=lt.fn,bt=lt(Z);var _t=/^(?:parents|prev(?:Until|All))/,xt={children:!0,contents:!0,next:!0,prev:!0};lt.fn.extend({has:function(t){var e=lt(t,this),i=e.length;return this.filter(function(){for(var t=0;t-1:1===i.nodeType&<.find.matchesSelector(i,t))){s.push(i);break}return this.pushStack(s.length>1?lt.uniqueSort(s):s)},index:function(t){return t?"string"==typeof t?nt.call(lt(t),this[0]):nt.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(lt.uniqueSort(lt.merge(this.get(),lt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),lt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return ft(t,"parentNode")},parentsUntil:function(t,e,i){return ft(t,"parentNode",i)},next:function(t){return l(t,"nextSibling")},prev:function(t){return l(t,"previousSibling")},nextAll:function(t){return ft(t,"nextSibling")},prevAll:function(t){return ft(t,"previousSibling")},nextUntil:function(t,e,i){return ft(t,"nextSibling",i)},prevUntil:function(t,e,i){return ft(t,"previousSibling",i)},siblings:function(t){return gt((t.parentNode||{}).firstChild,t)},children:function(t){return gt(t.firstChild)},contents:function(t){return t.contentDocument||lt.merge([],t.childNodes)}},function(t,e){lt.fn[t]=function(i,n){var o=lt.map(this,e,i);return"Until"!==t.slice(-5)&&(n=i),n&&"string"==typeof n&&(o=lt.filter(n,o)),this.length>1&&(xt[t]||lt.uniqueSort(o),_t.test(t)&&o.reverse()),this.pushStack(o)}});var Ct=/\S+/g;lt.Callbacks=function(t){t="string"==typeof t?u(t):lt.extend({},t);var e,i,n,o,s=[],r=[],a=-1,l=function(){for(o=t.once,n=e=!0;r.length;a=-1)for(i=r.shift();++a-1;)s.splice(i,1),i<=a&&a--}),this},has:function(t){return t?lt.inArray(t,s)>-1:s.length>0},empty:function(){return s&&(s=[]),this},disable:function(){return o=r=[],s=i="",this},disabled:function(){return!s},lock:function(){return o=r=[],i||(s=i=""),this},locked:function(){return!!o},fireWith:function(t,i){return o||(i=i||[],i=[t,i.slice?i.slice():i],r.push(i),e||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},lt.extend({Deferred:function(t){var e=[["resolve","done",lt.Callbacks("once memory"),"resolved"],["reject","fail",lt.Callbacks("once memory"),"rejected"],["notify","progress",lt.Callbacks("memory")]],i="pending",n={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var t=arguments;return lt.Deferred(function(i){lt.each(e,function(e,s){var r=lt.isFunction(t[e])&&t[e];o[s[1]](function(){var t=r&&r.apply(this,arguments);t&<.isFunction(t.promise)?t.promise().progress(i.notify).done(i.resolve).fail(i.reject):i[s[0]+"With"](this===n?i.promise():this,r?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?lt.extend(t,n):n}},o={};return n.pipe=n.then,lt.each(e,function(t,s){var r=s[2],a=s[3];n[s[1]]=r.add,a&&r.add(function(){i=a},e[1^t][2].disable,e[2][2].lock),o[s[0]]=function(){return o[s[0]+"With"](this===o?n:this,arguments),this},o[s[0]+"With"]=r.fireWith}),n.promise(o),t&&t.call(o,o),o},when:function(t){var e,i,n,o=0,s=tt.call(arguments),r=s.length,a=1!==r||t&<.isFunction(t.promise)?r:0,l=1===a?t:lt.Deferred(),u=function(t,i,n){return function(o){i[t]=this,n[t]=arguments.length>1?tt.call(arguments):o,n===e?l.notifyWith(i,n):--a||l.resolveWith(i,n)}};if(r>1)for(e=new Array(r),i=new Array(r),n=new Array(r);o0||(St.resolveWith(Z,[lt]),lt.fn.triggerHandler&&(lt(Z).triggerHandler("ready"),lt(Z).off("ready"))))}}),lt.ready.promise=function(t){return St||(St=lt.Deferred(),"complete"===Z.readyState||"loading"!==Z.readyState&&!Z.documentElement.doScroll?i.setTimeout(lt.ready):(Z.addEventListener("DOMContentLoaded",c),i.addEventListener("load",c))),St.promise(t)},lt.ready.promise();var kt=function(t,e,i,n,o,s,r){var a=0,l=t.length,u=null==i;if("object"===lt.type(i)){o=!0;for(a in i)kt(t,e,a,i[a],!0,s,r)}else if(void 0!==n&&(o=!0,lt.isFunction(n)||(r=!0),u&&(r?(e.call(t,n),e=null):(u=e,e=function(t,e,i){return u.call(lt(t),i)})),e))for(;a-1&&void 0!==i&&At.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){At.remove(this,t)})}}),lt.extend({queue:function(t,e,i){var n;if(t)return e=(e||"fx")+"queue",n=Et.get(t,e),i&&(!n||lt.isArray(i)?n=Et.access(t,e,lt.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=lt.queue(t,e),n=i.length,o=i.shift(),s=lt._queueHooks(t,e),r=function(){lt.dequeue(t,e)};"inprogress"===o&&(o=i.shift(),n--),o&&("fx"===e&&i.unshift("inprogress"),delete s.stop,o.call(t,r,s)),!n&&s&&s.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return Et.get(t,i)||Et.access(t,i,{empty:lt.Callbacks("once memory").add(function(){Et.remove(t,[e+"queue",i])})})}}),lt.fn.extend({queue:function(t,e){var i=2;return"string"!=typeof t&&(e=t,t="fx",i--),arguments.length",""],thead:[1,"
        ","
        "],col:[2,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],_default:[0,"",""]};Ht.optgroup=Ht.option,Ht.tbody=Ht.tfoot=Ht.colgroup=Ht.caption=Ht.thead,Ht.th=Ht.td;var $t=/<|&#?\w+;/;!function(){var t=Z.createDocumentFragment(),e=t.appendChild(Z.createElement("div")),i=Z.createElement("input");i.setAttribute("type","radio"),i.setAttribute("checked","checked"),i.setAttribute("name","t"),e.appendChild(i),at.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",at.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Ft=/^key/,qt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Wt=/^([^.]*)(?:\.(.+)|)/;lt.event={global:{},add:function(t,e,i,n,o){var s,r,a,l,u,c,h,d,p,f,g,m=Et.get(t);if(m)for(i.handler&&(s=i,i=s.handler,o=s.selector),i.guid||(i.guid=lt.guid++),(l=m.events)||(l=m.events={}),(r=m.handle)||(r=m.handle=function(e){return void 0!==lt&<.event.triggered!==e.type?lt.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(Ct)||[""],u=e.length;u--;)a=Wt.exec(e[u])||[],p=g=a[1],f=(a[2]||"").split(".").sort(),p&&(h=lt.event.special[p]||{},p=(o?h.delegateType:h.bindType)||p,h=lt.event.special[p]||{},c=lt.extend({type:p,origType:g,data:n,handler:i,guid:i.guid,selector:o,needsContext:o&<.expr.match.needsContext.test(o),namespace:f.join(".")},s),(d=l[p])||(d=l[p]=[],d.delegateCount=0,h.setup&&!1!==h.setup.call(t,n,f,r)||t.addEventListener&&t.addEventListener(p,r)),h.add&&(h.add.call(t,c),c.handler.guid||(c.handler.guid=i.guid)),o?d.splice(d.delegateCount++,0,c):d.push(c),lt.event.global[p]=!0)},remove:function(t,e,i,n,o){var s,r,a,l,u,c,h,d,p,f,g,m=Et.hasData(t)&&Et.get(t);if(m&&(l=m.events)){for(e=(e||"").match(Ct)||[""],u=e.length;u--;)if(a=Wt.exec(e[u])||[],p=g=a[1],f=(a[2]||"").split(".").sort(),p){for(h=lt.event.special[p]||{},p=(n?h.delegateType:h.bindType)||p,d=l[p]||[],a=a[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),r=s=d.length;s--;)c=d[s],!o&&g!==c.origType||i&&i.guid!==c.guid||a&&!a.test(c.namespace)||n&&n!==c.selector&&("**"!==n||!c.selector)||(d.splice(s,1),c.selector&&d.delegateCount--,h.remove&&h.remove.call(t,c));r&&!d.length&&(h.teardown&&!1!==h.teardown.call(t,f,m.handle)||lt.removeEvent(t,p,m.handle),delete l[p])}else for(p in l)lt.event.remove(t,p+e[u],i,n,!0);lt.isEmptyObject(l)&&Et.remove(t,"handle events")}},dispatch:function(t){t=lt.event.fix(t);var e,i,n,o,s,r=[],a=tt.call(arguments),l=(Et.get(this,"events")||{})[t.type]||[],u=lt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,t)){for(r=lt.event.handlers.call(this,t,l),e=0;(o=r[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,i=0;(s=o.handlers[i++])&&!t.isImmediatePropagationStopped();)t.rnamespace&&!t.rnamespace.test(s.namespace)||(t.handleObj=s,t.data=s.data,void 0!==(n=((lt.event.special[s.origType]||{}).handle||s.handler).apply(o.elem,a))&&!1===(t.result=n)&&(t.preventDefault(),t.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,t),t.result}},handlers:function(t,e){var i,n,o,s,r=[],a=e.delegateCount,l=t.target;if(a&&l.nodeType&&("click"!==t.type||isNaN(t.button)||t.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(!0!==l.disabled||"click"!==t.type)){for(n=[],i=0;i-1:lt.find(o,this,null,[l]).length),n[o]&&n.push(s);n.length&&r.push({elem:l,handlers:n})}return a]*)\/>/gi,Bt=/\s*$/g;lt.extend({htmlPrefilter:function(t){return t.replace(zt,"<$1>")},clone:function(t,e,i){var n,o,s,r,a=t.cloneNode(!0),l=lt.contains(t.ownerDocument,t);if(!(at.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||lt.isXMLDoc(t)))for(r=f(a),s=f(t),n=0,o=s.length;n0&&g(r,!l&&f(t,"script")),a},cleanData:function(t){for(var e,i,n,o=lt.event.special,s=0;void 0!==(i=t[s]);s++)if(Tt(i)){if(e=i[Et.expando]){if(e.events)for(n in e.events)o[n]?lt.event.remove(i,n):lt.removeEvent(i,n,e.handle);i[Et.expando]=void 0}i[At.expando]&&(i[At.expando]=void 0)}}}),lt.fn.extend({domManip:T,detach:function(t){return E(this,t,!0)},remove:function(t){return E(this,t)},text:function(t){return kt(this,function(t){return void 0===t?lt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){_(this,t).appendChild(t)}})},prepend:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=_(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(lt.cleanData(f(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return lt.clone(this,t,e)})},html:function(t){return kt(this,function(t){var e=this[0]||{},i=0,n=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Bt.test(t)&&!Ht[(It.exec(t)||["",""])[1].toLowerCase()]){t=lt.htmlPrefilter(t);try{for(;i1)},show:function(){return I(this,!0)},hide:function(){return I(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Rt(this)?lt(this).show():lt(this).hide()})}}),lt.Tween=L,L.prototype={constructor:L,init:function(t,e,i,n,o,s){this.elem=t,this.prop=i,this.easing=o||lt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=n,this.unit=s||(lt.cssNumber[i]?"":"px")},cur:function(){var t=L.propHooks[this.prop];return t&&t.get?t.get(this):L.propHooks._default.get(this)},run:function(t){var e,i=L.propHooks[this.prop];return this.options.duration?this.pos=e=lt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),i&&i.set?i.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=lt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){lt.fx.step[t.prop]?lt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[lt.cssProps[t.prop]]&&!lt.cssHooks[t.prop]?t.elem[t.prop]=t.now:lt.style(t.elem,t.prop,t.now+t.unit)}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},lt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},lt.fx=L.prototype.init,lt.fx.step={};var re,ae,le=/^(?:toggle|show|hide)$/,ue=/queueHooks$/;lt.Animation=lt.extend(z,{tweeners:{"*":[function(t,e){var i=this.createTween(t,e);return p(i.elem,t,Pt.exec(e),i),i}]},tweener:function(t,e){lt.isFunction(t)?(e=t,t=["*"]):t=t.match(Ct);for(var i,n=0,o=t.length;n1)},removeAttr:function(t){return this.each(function(){lt.removeAttr(this,t)})}}),lt.extend({attr:function(t,e,i){var n,o,s=t.nodeType;if(3!==s&&8!==s&&2!==s)return void 0===t.getAttribute?lt.prop(t,e,i):(1===s&<.isXMLDoc(t)||(e=e.toLowerCase(),o=lt.attrHooks[e]||(lt.expr.match.bool.test(e)?ce:void 0)),void 0!==i?null===i?void lt.removeAttr(t,e):o&&"set"in o&&void 0!==(n=o.set(t,i,e))?n:(t.setAttribute(e,i+""),i):o&&"get"in o&&null!==(n=o.get(t,e))?n:(n=lt.find.attr(t,e),null==n?void 0:n))},attrHooks:{type:{set:function(t,e){if(!at.radioValue&&"radio"===e&<.nodeName(t,"input")){var i=t.value;return t.setAttribute("type",e),i&&(t.value=i),e}}}},removeAttr:function(t,e){var i,n,o=0,s=e&&e.match(Ct);if(s&&1===t.nodeType)for(;i=s[o++];)n=lt.propFix[i]||i,lt.expr.match.bool.test(i)&&(t[n]=!1),t.removeAttribute(i)}}),ce={set:function(t,e,i){return!1===e?lt.removeAttr(t,i):t.setAttribute(i,i),i}},lt.each(lt.expr.match.bool.source.match(/\w+/g),function(t,e){var i=he[e]||lt.find.attr;he[e]=function(t,e,n){var o,s;return n||(s=he[e],he[e]=o,o=null!=i(t,e,n)?e.toLowerCase():null,he[e]=s),o}});var de=/^(?:input|select|textarea|button)$/i,pe=/^(?:a|area)$/i;lt.fn.extend({prop:function(t,e){return kt(this,lt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[lt.propFix[t]||t]})}}),lt.extend({prop:function(t,e,i){var n,o,s=t.nodeType;if(3!==s&&8!==s&&2!==s)return 1===s&<.isXMLDoc(t)||(e=lt.propFix[e]||e,o=lt.propHooks[e]),void 0!==i?o&&"set"in o&&void 0!==(n=o.set(t,i,e))?n:t[e]=i:o&&"get"in o&&null!==(n=o.get(t,e))?n:t[e]},propHooks:{tabIndex:{get:function(t){var e=lt.find.attr(t,"tabindex");return e?parseInt(e,10):de.test(t.nodeName)||pe.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),at.optSelected||(lt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),lt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){lt.propFix[this.toLowerCase()]=this});var fe=/[\t\r\n\f]/g;lt.fn.extend({addClass:function(t){var e,i,n,o,s,r,a,l=0;if(lt.isFunction(t))return this.each(function(e){lt(this).addClass(t.call(this,e,B(this)))});if("string"==typeof t&&t)for(e=t.match(Ct)||[];i=this[l++];)if(o=B(i),n=1===i.nodeType&&(" "+o+" ").replace(fe," ")){for(r=0;s=e[r++];)n.indexOf(" "+s+" ")<0&&(n+=s+" ");a=lt.trim(n),o!==a&&i.setAttribute("class",a)}return this},removeClass:function(t){var e,i,n,o,s,r,a,l=0;if(lt.isFunction(t))return this.each(function(e){lt(this).removeClass(t.call(this,e,B(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(Ct)||[];i=this[l++];)if(o=B(i),n=1===i.nodeType&&(" "+o+" ").replace(fe," ")){for(r=0;s=e[r++];)for(;n.indexOf(" "+s+" ")>-1;)n=n.replace(" "+s+" "," ");a=lt.trim(n),o!==a&&i.setAttribute("class",a)}return this},toggleClass:function(t,e){var i=typeof t;return"boolean"==typeof e&&"string"===i?e?this.addClass(t):this.removeClass(t):lt.isFunction(t)?this.each(function(i){lt(this).toggleClass(t.call(this,i,B(this),e),e)}):this.each(function(){var e,n,o,s;if("string"===i)for(n=0,o=lt(this),s=t.match(Ct)||[];e=s[n++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==i||(e=B(this),e&&Et.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":Et.get(this,"__className__")||""))})},hasClass:function(t){var e,i,n=0;for(e=" "+t+" ";i=this[n++];)if(1===i.nodeType&&(" "+B(i)+" ").replace(fe," ").indexOf(e)>-1)return!0;return!1}});var ge=/\r/g,me=/[\x20\t\r\n\f]+/g;lt.fn.extend({val:function(t){var e,i,n,o=this[0];{if(arguments.length)return n=lt.isFunction(t),this.each(function(i){var o;1===this.nodeType&&(o=n?t.call(this,i,lt(this).val()):t,null==o?o="":"number"==typeof o?o+="":lt.isArray(o)&&(o=lt.map(o,function(t){return null==t?"":t+""})),(e=lt.valHooks[this.type]||lt.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return(e=lt.valHooks[o.type]||lt.valHooks[o.nodeName.toLowerCase()])&&"get"in e&&void 0!==(i=e.get(o,"value"))?i:(i=o.value,"string"==typeof i?i.replace(ge,""):null==i?"":i)}}}),lt.extend({valHooks:{option:{get:function(t){var e=lt.find.attr(t,"value");return null!=e?e:lt.trim(lt.text(t)).replace(me," ")}},select:{get:function(t){for(var e,i,n=t.options,o=t.selectedIndex,s="select-one"===t.type||o<0,r=s?null:[],a=s?o+1:n.length,l=o<0?a:s?o:0;l-1)&&(i=!0);return i||(t.selectedIndex=-1),s}}}}),lt.each(["radio","checkbox"],function(){lt.valHooks[this]={set:function(t,e){if(lt.isArray(e))return t.checked=lt.inArray(lt(t).val(),e)>-1}},at.checkOn||(lt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var ve=/^(?:focusinfocus|focusoutblur)$/;lt.extend(lt.event,{trigger:function(t,e,n,o){var s,r,a,l,u,c,h,d=[n||Z],p=rt.call(t,"type")?t.type:t,f=rt.call(t,"namespace")?t.namespace.split("."):[];if(r=a=n=n||Z,3!==n.nodeType&&8!==n.nodeType&&!ve.test(p+lt.event.triggered)&&(p.indexOf(".")>-1&&(f=p.split("."),p=f.shift(),f.sort()),u=p.indexOf(":")<0&&"on"+p,t=t[lt.expando]?t:new lt.Event(p,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=f.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:lt.makeArray(e,[t]),h=lt.event.special[p]||{},o||!h.trigger||!1!==h.trigger.apply(n,e))){if(!o&&!h.noBubble&&!lt.isWindow(n)){for(l=h.delegateType||p,ve.test(l+p)||(r=r.parentNode);r;r=r.parentNode)d.push(r),a=r;a===(n.ownerDocument||Z)&&d.push(a.defaultView||a.parentWindow||i)}for(s=0;(r=d[s++])&&!t.isPropagationStopped();)t.type=s>1?l:h.bindType||p,c=(Et.get(r,"events")||{})[t.type]&&Et.get(r,"handle"),c&&c.apply(r,e),(c=u&&r[u])&&c.apply&&Tt(r)&&(t.result=c.apply(r,e),!1===t.result&&t.preventDefault());return t.type=p,o||t.isDefaultPrevented()||h._default&&!1!==h._default.apply(d.pop(),e)||!Tt(n)||u&<.isFunction(n[p])&&!lt.isWindow(n)&&(a=n[u],a&&(n[u]=null),lt.event.triggered=p,n[p](),lt.event.triggered=void 0,a&&(n[u]=a)),t.result}},simulate:function(t,e,i){var n=lt.extend(new lt.Event,i,{type:t,isSimulated:!0});lt.event.trigger(n,null,e)}}),lt.fn.extend({trigger:function(t,e){return this.each(function(){lt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var i=this[0];if(i)return lt.event.trigger(t,e,i,!0)}}),lt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){lt.fn[e]=function(t,i){return arguments.length>0?this.on(e,null,t,i):this.trigger(e)}}),lt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),at.focusin="onfocusin"in i,at.focusin||lt.each({focus:"focusin",blur:"focusout"},function(t,e){var i=function(t){lt.event.simulate(e,t.target,lt.event.fix(t))};lt.event.special[e]={setup:function(){var n=this.ownerDocument||this,o=Et.access(n,e);o||n.addEventListener(t,i,!0),Et.access(n,e,(o||0)+1)},teardown:function(){var n=this.ownerDocument||this,o=Et.access(n,e)-1;o?Et.access(n,e,o):(n.removeEventListener(t,i,!0),Et.remove(n,e))}}});var ye=i.location,be=lt.now(),we=/\?/;lt.parseJSON=function(t){return JSON.parse(t+"")},lt.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new i.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||lt.error("Invalid XML: "+t),e};var _e=/#.*$/,xe=/([?&])_=[^&]*/,Ce=/^(.*?):[ \t]*([^\r\n]*)$/gm,Se=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ke=/^(?:GET|HEAD)$/,Te=/^\/\//,Ee={},Ae={},De="*/".concat("*"),Oe=Z.createElement("a");Oe.href=ye.href,lt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ye.href,type:"GET",isLocal:Se.test(ye.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":De,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":lt.parseJSON,"text xml":lt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?G(G(t,lt.ajaxSettings),e):G(lt.ajaxSettings,t)},ajaxPrefilter:U(Ee),ajaxTransport:U(Ae),ajax:function(t,e){function n(t,e,n,a){var u,h,y,b,_,C=e;2!==w&&(w=2,l&&i.clearTimeout(l),o=void 0,r=a||"",x.readyState=t>0?4:0,u=t>=200&&t<300||304===t,n&&(b=X(d,x,n)),b=Y(d,b,x,u),u?(d.ifModified&&(_=x.getResponseHeader("Last-Modified"),_&&(lt.lastModified[s]=_),(_=x.getResponseHeader("etag"))&&(lt.etag[s]=_)),204===t||"HEAD"===d.type?C="nocontent":304===t?C="notmodified":(C=b.state,h=b.data,y=b.error,u=!y)):(y=C,!t&&C||(C="error",t<0&&(t=0))),x.status=t,x.statusText=(e||C)+"",u?g.resolveWith(p,[h,C,x]):g.rejectWith(p,[x,C,y]),x.statusCode(v),v=void 0,c&&f.trigger(u?"ajaxSuccess":"ajaxError",[x,d,u?h:y]),m.fireWith(p,[x,C]),c&&(f.trigger("ajaxComplete",[x,d]),--lt.active||lt.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var o,s,r,a,l,u,c,h,d=lt.ajaxSetup({},e),p=d.context||d,f=d.context&&(p.nodeType||p.jquery)?lt(p):lt.event,g=lt.Deferred(),m=lt.Callbacks("once memory"),v=d.statusCode||{},y={},b={},w=0,_="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(2===w){if(!a)for(a={};e=Ce.exec(r);)a[e[1].toLowerCase()]=e[2];e=a[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===w?r:null},setRequestHeader:function(t,e){var i=t.toLowerCase();return w||(t=b[i]=b[i]||t,y[t]=e),this},overrideMimeType:function(t){return w||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(w<2)for(e in t)v[e]=[v[e],t[e]];else x.always(t[x.status]);return this},abort:function(t){var e=t||_;return o&&o.abort(e),n(0,e),this}};if(g.promise(x).complete=m.add,x.success=x.done,x.error=x.fail,d.url=((t||d.url||ye.href)+"").replace(_e,"").replace(Te,ye.protocol+"//"),d.type=e.method||e.type||d.method||d.type,d.dataTypes=lt.trim(d.dataType||"*").toLowerCase().match(Ct)||[""],null==d.crossDomain){u=Z.createElement("a");try{u.href=d.url,u.href=u.href,d.crossDomain=Oe.protocol+"//"+Oe.host!=u.protocol+"//"+u.host}catch(t){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=lt.param(d.data,d.traditional)),V(Ee,d,e,x),2===w)return x;c=lt.event&&d.global,c&&0==lt.active++&<.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!ke.test(d.type),s=d.url,d.hasContent||(d.data&&(s=d.url+=(we.test(s)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=xe.test(s)?s.replace(xe,"$1_="+be++):s+(we.test(s)?"&":"?")+"_="+be++)),d.ifModified&&(lt.lastModified[s]&&x.setRequestHeader("If-Modified-Since",lt.lastModified[s]),lt.etag[s]&&x.setRequestHeader("If-None-Match",lt.etag[s])),(d.data&&d.hasContent&&!1!==d.contentType||e.contentType)&&x.setRequestHeader("Content-Type",d.contentType),x.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+De+"; q=0.01":""):d.accepts["*"]);for(h in d.headers)x.setRequestHeader(h,d.headers[h]);if(d.beforeSend&&(!1===d.beforeSend.call(p,x,d)||2===w))return x.abort();_="abort";for(h in{success:1,error:1,complete:1})x[h](d[h]);if(o=V(Ae,d,e,x)){if(x.readyState=1,c&&f.trigger("ajaxSend",[x,d]),2===w)return x;d.async&&d.timeout>0&&(l=i.setTimeout(function(){x.abort("timeout")},d.timeout));try{w=1,o.send(y,n)}catch(t){if(!(w<2))throw t;n(-1,t)}}else n(-1,"No Transport");return x},getJSON:function(t,e,i){return lt.get(t,e,i,"json")},getScript:function(t,e){return lt.get(t,void 0,e,"script")}}),lt.each(["get","post"],function(t,e){lt[e]=function(t,i,n,o){return lt.isFunction(i)&&(o=o||n,n=i,i=void 0),lt.ajax(lt.extend({url:t,type:e,dataType:o,data:i,success:n},lt.isPlainObject(t)&&t))}}),lt._evalUrl=function(t){return lt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},lt.fn.extend({wrapAll:function(t){var e;return lt.isFunction(t)?this.each(function(e){lt(this).wrapAll(t.call(this,e))}):(this[0]&&(e=lt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return lt.isFunction(t)?this.each(function(e){lt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=lt(this),i=e.contents();i.length?i.wrapAll(t):e.append(t)})},wrap:function(t){var e=lt.isFunction(t);return this.each(function(i){lt(this).wrapAll(e?t.call(this,i):t)})},unwrap:function(){return this.parent().each(function(){lt.nodeName(this,"body")||lt(this).replaceWith(this.childNodes)}).end()}}),lt.expr.filters.hidden=function(t){return!lt.expr.filters.visible(t)},lt.expr.filters.visible=function(t){return t.offsetWidth>0||t.offsetHeight>0||t.getClientRects().length>0};var Me=/%20/g,Pe=/\[\]$/,je=/\r?\n/g,Re=/^(?:submit|button|image|reset|file)$/i,Ne=/^(?:input|select|textarea|keygen)/i;lt.param=function(t,e){var i,n=[],o=function(t,e){e=lt.isFunction(e)?e():null==e?"":e,n[n.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=lt.ajaxSettings&<.ajaxSettings.traditional),lt.isArray(t)||t.jquery&&!lt.isPlainObject(t))lt.each(t,function(){o(this.name,this.value)});else for(i in t)J(i,t[i],e,o);return n.join("&").replace(Me,"+")},lt.fn.extend({serialize:function(){return lt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=lt.prop(this,"elements");return t?lt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!lt(this).is(":disabled")&&Ne.test(this.nodeName)&&!Re.test(t)&&(this.checked||!Nt.test(t))}).map(function(t,e){var i=lt(this).val();return null==i?null:lt.isArray(i)?lt.map(i,function(t){return{name:e.name,value:t.replace(je,"\r\n")}}):{name:e.name,value:i.replace(je,"\r\n")}}).get()}}),lt.ajaxSettings.xhr=function(){try{return new i.XMLHttpRequest}catch(t){}};var Ie={0:200,1223:204},Le=lt.ajaxSettings.xhr();at.cors=!!Le&&"withCredentials"in Le,at.ajax=Le=!!Le,lt.ajaxTransport(function(t){var e,n;if(at.cors||Le&&!t.crossDomain)return{send:function(o,s){var r,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(r in t.xhrFields)a[r]=t.xhrFields[r];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(r in o)a.setRequestHeader(r,o[r]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?s(0,"error"):s(a.status,a.statusText):s(Ie[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=e("error"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&i.setTimeout(function(){e&&n()})},e=e("abort");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),lt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return lt.globalEval(t),t}}}),lt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),lt.ajaxTransport("script",function(t){if(t.crossDomain){var e,i;return{send:function(n,o){e=lt(" - -<% form_type = trans.model.FormDefinition.types.RUN_DETAILS_TEMPLATE %> - -

        - - -%if message: - ${render_msg( message, status )} -%endif - -
        -
        Manage access permissions on request type "${request_type.name | h}"
        -
        -
        -
        - <% - current_actions = request_type.actions - action = trans.app.security_agent.permitted_actions.REQUEST_TYPE_ACCESS - all_roles = roles - action_key = 'REQUEST_TYPE_ACCESS' - - import sets - in_roles = sets.Set() - for a in current_actions: - if a.action == action.action: - in_roles.add( a.role ) - out_roles = filter( lambda x: x not in in_roles, all_roles ) - %> - ${action.description | h}

        -
        -
        - Roles associated:
        -
        -
        -
        -
        - Roles not associated:
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        diff --git a/templates/admin/request_type/view_request_type.mako b/templates/admin/request_type/view_request_type.mako deleted file mode 100644 index cc659097f29..00000000000 --- a/templates/admin/request_type/view_request_type.mako +++ /dev/null @@ -1,83 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> - -<% form_type = trans.model.FormDefinition.types.RUN_DETAILS_TEMPLATE %> - -

        - - -%if message: - ${render_msg( message, status )} -%endif - -
        -
        "${request_type.name | h}" request type
        -
        - - ${request_type.name | h} -
        -
        -
        - - ${request_type.desc | h} -
        -
        -
        - - ${request_type.request_form.name | h} -
        -
        - - ${request_type.sample_form.name | h} -
        -
        -

        -

        -
        Sample states defined for this request type
        - %for state in request_type.states: -
        - - ${state.desc | h} -
        -
        - %endfor -
        -

        -

        -
        External services
        - %if request_type.external_services: - %for index, external_service in enumerate( request_type.external_services ): -
        - - ${external_service.get_external_service_type( trans ).name | h} -
        - %endfor - %else: -
        - External service login information is not set. Select the Edit request type option in the Request type actions menu. -
        - %endif -
        - -%if widgets: - ${render_template_fields( cntrller='requests_admin', item_type='request_type', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, request_type_id=trans.security.encode_id( request_type.id ), editable=False )} -%endif diff --git a/templates/admin/requests/grid.mako b/templates/admin/requests/grid.mako deleted file mode 100644 index 6a41b688c5e..00000000000 --- a/templates/admin/requests/grid.mako +++ /dev/null @@ -1 +0,0 @@ -<%inherit file="/grid_base.mako"/> diff --git a/templates/admin/requests/reject.mako b/templates/admin/requests/reject.mako deleted file mode 100644 index d742b9f7a26..00000000000 --- a/templates/admin/requests/reject.mako +++ /dev/null @@ -1,36 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -%if message: - ${render_msg( message, status )} -%endif -

        - - -
        -
        Reject sequencing request "${request.name | h}"
        -
        -
        - Rejecting this request will move the request state to Rejected. -
        -
        - - -
        - Required -
        -
        -
        - - -
        -
        -
        -
      diff --git a/templates/admin/requests/rename_datasets.mako b/templates/admin/requests/rename_datasets.mako deleted file mode 100644 index c9d6174abca..00000000000 --- a/templates/admin/requests/rename_datasets.mako +++ /dev/null @@ -1,59 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<% from galaxy.webapps.galaxy.controllers.requests_admin import build_rename_datasets_for_sample_select_field %> - -

      Rename datasets for Sample "${sample.name | h}"

      - - - -%if message: - ${render_msg( message, status )} -%endif - -
      -
      - - - - - - - - - - - %for id in id_list: - <% sample_dataset = trans.sa_session.query( trans.model.SampleDataset ).get( trans.security.decode_id( id ) ) %> - %if sample_dataset.status == trans.app.model.SampleDataset.transfer_status.NOT_STARTED: - - - - - - %endif - %endfor - -
      Prepend directory nameNamePath on external service
      - <% rename_datasets_for_sample_select_field = build_rename_datasets_for_sample_select_field( trans, sample_dataset ) %> - ${rename_datasets_for_sample_select_field.get_html()} - - - ${sample_dataset.file_path}
      -
      -
      -
      - A dataset name should only contain the alphanumeric characters or underscore(_). - If a dataset name contains any other character, it would be replaced by an underscore(_). -
      -
      -
      - - -
      -
      - -
      diff --git a/templates/admin/requests/sample_datasets_grid.mako b/templates/admin/requests/sample_datasets_grid.mako deleted file mode 100644 index 7a0f35bfdce..00000000000 --- a/templates/admin/requests/sample_datasets_grid.mako +++ /dev/null @@ -1,9 +0,0 @@ -<%inherit file="/grid_base.mako"/> -<%namespace file="/requests/common/common.mako" import="common_javascripts" /> -<%namespace file="/requests/common/common.mako" import="transfer_status_updater" /> - -<%def name="load()"> - ${parent.load()} - ${common_javascripts()} - ${transfer_status_updater()} - diff --git a/templates/admin/requests/view_sample_dataset.mako b/templates/admin/requests/view_sample_dataset.mako deleted file mode 100644 index 6b16824211e..00000000000 --- a/templates/admin/requests/view_sample_dataset.mako +++ /dev/null @@ -1,79 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -%if message: - ${render_msg( message, status )} -%endif - -

      - -<% - sample = sample_dataset.sample - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - can_manage_datasets = is_admin and sample.untransferred_dataset_files -%> - - - -
      -
      "${sample.name | h}" Dataset
      -
      -
      - -
      - ${sample_dataset.name | h} -
      -
      -
      -
      - -
      - ${sample_dataset.external_service.name | h} (${sample_dataset.external_service.get_external_service_type( trans ).name | h}) -
      -
      -
      -
      - -
      - ${sample_dataset.file_path} -
      -
      - This file is contained in a sub-directory of the data directory configured for the external service. -
      -
      -
      -
      - -
      - ${sample_dataset.size} -
      -
      -
      -
      - -
      - ${sample_dataset.create_time} -
      -
      -
      -
      - -
      - ${sample_dataset.status} -
      -
      -
      - %if sample_dataset.status == trans.app.model.SampleDataset.transfer_status.ERROR: -
      - - ${sample_dataset.error_msg} -
      -
      - %endif -
      -
      diff --git a/templates/webapps/galaxy/admin/center.mako b/templates/webapps/galaxy/admin/center.mako index 8bed99c55e9..2bfc9e07dc2 100644 --- a/templates/webapps/galaxy/admin/center.mako +++ b/templates/webapps/galaxy/admin/center.mako @@ -16,12 +16,48 @@ Please visit the Galax
    • Data tables registry - See all data tables available in this Galaxy.
    • +
    • + Data libraries - Data libraries enable authorized Galaxy users to share datasets with other groups or users. Only administrators can create data libraries. See wiki for details. +
    • Display applications - See all display applications configured in this Galaxy.
    • - Manage jobs - Display all jobs that are currently not finished (i.e., their state is new, waiting, queued, or running). Administrators are able to cleanly stop long-running jobs. + Manage jobs - Display all jobs that are currently not finished (i.e., their state is new, waiting, queued, or running). Administrators are able to cleanly stop long-running jobs.
    • +
    • + Local data - Manage the reference (and other) data that is stored within Tool Data Tables. See wiki for details. +
    • +
    + +

    User Management

    +
      +
    • + Users - A view of all users and all groups and non-private roles associated with each user. +
    • + %if trans.app.config.enable_quotas: +
    • + Quotas - Manage user space quotas. See wiki for details. +
    • + %endif +
    • + Groups - A view of all groups along with the members of the group and the roles associated with each group. +
    • +
    • + Roles - A view of all non-private roles along with the role type, and the users and groups that are associated with the role. + Also includes a view of the data library datasets that are associated with the role and the permissions applied to each dataset. +
    • +
    • + Form definitions - Manage local form definitions. +
    • +
    • + API keys - A view of all generated API keys with an option to re-generate. +
    • + %if trans.app.config.allow_user_impersonation: +
    • + Impersonate a user - Allows to view Galaxy as another user in order to help troubleshoot issues. +
    • + %endif

    Tools and Tool Shed

    @@ -48,63 +84,13 @@ Please visit the Galax Download local tool - Download a tarball with a tool from this Galaxy.
  • - Reload a tool's configuration - Allows a new version of a tool to be loaded while the server is running. + Tool lineage - A view of a version lineages for all installed tools. Useful for debugging.
  • - Tool lineage - A view of a version lineages for all installed tools. Useful for debugging. + Reload a tool's configuration - Allows a new version of a tool to be loaded while the server is running.
  • Review tool migration stages - See the list of migration stages that moved sets of tools from the distribution to the Tool Shed.
  • - -

    User Management

    -
      -
    • - Users - A view of all users and all groups and non-private roles associated with each user. -
    • -
    • - Groups - A view of all groups along with the members of the group and the roles associated with each group. -
    • -
    • - Roles - A view of all non-private roles along with the role type, and the users and groups that are associated with the role. - Also includes a view of the data library datasets that are associated with the role and the permissions applied to each dataset. -
    • -
    • - API keys - A view of all generated API keys with an option to re-generate. -
    • - %if trans.app.config.allow_user_impersonation: -
    • - Impersonate a user - Allows to view Galaxy as another user in order to help troubleshoot issues. -
    • - %endif -
    - -

    Data

    -
    -

    Form definitions

    -
      -
    • - Form definitions - Manage local form definitions. -
    • -
    - -

    Sample tracking

    - %endif diff --git a/templates/webapps/galaxy/requests/common/add_samples.mako b/templates/webapps/galaxy/requests/common/add_samples.mako deleted file mode 100644 index e79584124c7..00000000000 --- a/templates/webapps/galaxy/requests/common/add_samples.mako +++ /dev/null @@ -1,128 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/requests/common/common.mako" import="common_javascripts" /> -<%namespace file="/requests/common/common.mako" import="render_samples_grid" /> -<%namespace file="/requests/common/common.mako" import="render_request_type_sample_form_grids" /> -<%namespace file="/requests/common/common.mako" import="render_samples_messages" /> - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${common_javascripts()} - - -<% - from galaxy.web.framework.helpers import time_ago - - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - if is_admin: - can_add_samples = not is_complete - else: - can_add_samples = is_unsubmitted - can_delete_samples = request.samples and not is_complete - can_edit_samples = request.samples and ( is_admin or not is_complete ) - can_edit_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted - can_reject = is_admin and is_submitted - can_submit = request.samples and is_unsubmitted -%> - -

    - - - -${render_samples_messages(request, is_admin, is_submitted, message, status)} - -
    -
    - %if displayable_sample_widgets: - <% - grid_header = '

    Add samples to sequencing request "%s"

    ' % request.name - %> - ${render_samples_grid( cntrller, request, displayable_sample_widgets, action='edit_samples', adding_new_samples=True, encoded_selected_sample_ids=[], render_buttons=False, grid_header=grid_header )} -
    - For each sample, select the data library and folder in which you would like the run datasets deposited. - To automatically run a workflow on run datastets, select a history first and then the desired workflow. -
    - ## Render the other grids - <% trans.sa_session.refresh( request.type.sample_form ) %> - %for grid_index, grid_name in enumerate( request.type.sample_form.layout ): - ${render_request_type_sample_form_grids( grid_index, grid_name, request.type.sample_form.grid_fields( grid_index ), displayable_sample_widgets=displayable_sample_widgets, show_saved_samples_read_only=True )} - %endfor - %else: - - %endif - %if can_add_samples: - ## The user is adding a new sample - %if displayable_sample_widgets: -

    -

    - -
    - Select the sample from which the new sample should be copied or leave selection as None to add a new "generic" sample. -
    -
    - %endif -

    -

    - - %if ( request.samples or displayable_sample_widgets ) and len( displayable_sample_widgets ) > len( request.samples ): - - - -
    - Click the Add sample button for each new sample and click the Save button when you have finished adding samples. -
    - %else: - -
    - Click the Add sample button for each new sample. -
    - %endif -
    - %endif -
    -
    -%if is_unsubmitted: -

    -

    HideImport samples from csv file

    -
    -
    -
    -
    - - -
    - The csv file must be in the following format.
    - The [:FieldValue] is optional, the named form field will contain the value after the ':' if included.
    - SampleName,DataLibraryName,FolderName,HistoryName,WorkflowName,Field1Name:Field1Value,Field2Name:Field2Value... -
    -
    -
    -
    -
    -%endif diff --git a/templates/webapps/galaxy/requests/common/common.mako b/templates/webapps/galaxy/requests/common/common.mako deleted file mode 100644 index 24284aea109..00000000000 --- a/templates/webapps/galaxy/requests/common/common.mako +++ /dev/null @@ -1,727 +0,0 @@ -<%namespace file="/requests/common/sample_state.mako" import="render_sample_state" /> -<%namespace file="/message.mako" import="render_msg" /> - -<%def name="javascripts()"> - ${self.common_javascripts()} - - -<%def name="common_javascripts()"> - - - -<%def name="transfer_status_updater()"> - <% - can_update = False - if query.count(): - # Get the first sample dataset to get to the parent sample - sample_dataset = query[0] - sample = sample_dataset.sample - is_complete = sample.request.is_complete - is_submitted = sample.request.is_submitted - can_update = is_complete or is_submitted and sample.untransferred_dataset_files - %> - %if can_update: - - %endif - - -<%def name="render_editable_sample_row( cntrller, request, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids, adding_new_samples=False )"> - <% - trans.sa_session.refresh( request ) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_rejected = request.is_rejected - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - if sample: - can_delete_samples = not adding_new_samples and request.samples and ( ( is_admin and not is_complete ) or is_unsubmitted ) - display_checkboxes = not adding_new_samples and ( is_complete or is_rejected or is_submitted ) - display_datasets = request.samples and ( is_complete or is_submitted ) - else: - can_delete_samples = False - display_checkboxes = False - display_datasets = False - display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted ) - %> - <% - if display_checkboxes and trans.security.encode_id( sample.id ) in encoded_selected_sample_ids: - checked_str = "checked" - else: - checked_str = "" - %> - %if display_checkboxes: - - %endif - - -
    - (required) -
    - - %if display_bar_code: - - %if is_admin and is_submitted: - - %else: - ${sample_widget['bar_code'] | h} - - %endif - - %endif - %if sample: - %if is_unsubmitted: - Unsubmitted - %else: - ${sample.state.name} - %endif - %else: - - %endif - ${sample_widget['library_select_field'].get_html()} - ${sample_widget['folder_select_field'].get_html()} - ${sample_widget['history_select_field'].get_html()} - - ${sample_widget['workflow_select_field'][0].get_html()} - %if len(sample_widget['workflow_select_field']) > 1: -
    - ${'
    '.join(["%s:
    %s" % (w_l, w_i.get_html()) for w_l, w_i in sample_widget['workflow_select_field'][1:]])} - %endif - - %if display_datasets: - - ## An admin can select the datasets to transfer, while a non-admin can only view what has been selected - %if is_admin: - ## This link will direct the admin to a page allowing them to manage datasets. - ${len( sample.datasets )} - %elif sample.datasets: - <% - # Get an external_service from one of the sample datasets. This assumes all sample datasets are associated with - # the same external service - hopefully this is a good assumption. - external_service = sample.datasets[0].external_service - %> - ## Since this is a regular user, only display a link if there is at least 1 - ## selected dataset for the sample. - ${len( sample.datasets )} - %else: - ## Since this is a regular user, do not display a link if there are no datasets. - ${len( sample.datasets )} - %endif - - %endif - %if can_delete_samples: - ## Delete button - - %endif - - -<%def name="render_samples_grid( cntrller, request, displayable_sample_widgets, action, adding_new_samples=False, encoded_selected_sample_ids=[], render_buttons=False, grid_header='

    Samples

    ' )"> - ## Displays the "Samples" grid -<% - trans.sa_session.refresh( request ) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_rejected = request.is_rejected - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - if is_admin: - can_add_samples = not is_complete - else: - can_add_samples = is_unsubmitted - can_delete_samples = not adding_new_samples and request.samples and ( ( is_admin and not is_complete ) or is_unsubmitted ) - can_edit_samples = request.samples and ( is_admin or not is_complete ) - can_transfer_datasets = is_admin and request.samples and not request.is_rejected - display_checkboxes = not adding_new_samples and ( is_complete or is_rejected or is_submitted ) - display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted ) - display_datasets = request.samples and ( is_complete or is_submitted ) -%> - ${grid_header} - %if render_buttons and ( can_add_samples or can_edit_samples ): - - %endif - - - - %if display_checkboxes: - - %endif - - %if display_bar_code: - - %endif - - - - - - %if display_datasets: - - %endif - - - - - <% trans.sa_session.refresh( request ) %> - ## displayable_sample_widgets is a dictionary whose keys are: - ## id, name, bar_code, library, folder, field_values, library_select_field, folder_select_field - ## A displayable_sample_widget will have an id == None if the widget's associated sample has not - ## yet been saved (i.e., the use clicked the "Add sample" button but has not yet clicked the - ## "Save" button. - %for sample_widget_index, sample_widget in enumerate( displayable_sample_widgets ): - <% - sample_widget_name = sample_widget[ 'name' ] - sample_widget_bar_code = sample_widget[ 'bar_code' ] - sample_widget_library = sample_widget[ 'library' ] - sample_widget_history = sample_widget[ 'history' ] - sample_widget_workflow = sample_widget[ 'workflow' ] - if sample_widget_library: - if cntrller == 'requests': - library_cntrller = 'library' - elif is_admin: - library_cntrller = 'library_admin' - else: - library_cntrller = None - sample_widget_folder = sample_widget[ 'folder' ] - try: - sample = request.samples[ sample_widget_index ] - except: - sample = None - %> - %if not adding_new_samples: - ${render_editable_sample_row( cntrller, request, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids, adding_new_samples=False )} - %elif sample: - - - %if display_bar_code: - - %endif - %if is_unsubmitted: - - %else: - - %endif - %if sample_widget_library and library_cntrller is not None: - - %else: - - %endif - %if sample_widget_folder: - - %else: - - %endif - %if sample_widget_history: - %if trans.user == sample_widget_history.user: - - %else: - - %endif - %else: - - %endif - %if sample_widget_workflow: - %if trans.user == sample_widget_workflow.stored_workflow.user: - - %else: - - %endif - %else: - - %endif - %if is_submitted or is_complete: - - %endif - - %else: - ## The Add sample button was clicked for this sample_widget - ${render_editable_sample_row( cntrller, request, None, sample_widget_index, sample_widget, encoded_selected_sample_ids, adding_new_samples=True )} - %endif - %endfor - -
    NameBarcodeStateData LibraryFolderHistoryWorkflowRun Datasets - %if can_delete_samples: - Delete - %endif -
    - %if sample.state and can_transfer_datasets: - ## A sample will have a state only after the request has been submitted. - <% - encoded_id = trans.security.encode_id( sample.id ) - transferred_dataset_files = sample.transferred_dataset_files - if not transferred_dataset_files: - transferred_dataset_files = [] - %> - -
    - %if sample.datasets and len( sample.datasets ) > len( transferred_dataset_files ) and sample.library and sample.folder: -
  • Manage selected datasets
  • - %elif sample.datasets and len( sample.datasets ) == len( transferred_dataset_files ): - <% - # Get an external_service from one of the sample datasets. This assumes all sample datasets are associated with - # the same external service - hopefully this is a good assumption. - external_service = sample.datasets[0].external_service - %> -
  • View transferred datasets
  • - %endif -
    - %else: - ${sample_widget_name | h} - %endif -
    ${sample_widget_bar_code | h}Unsubmitted${render_sample_state( sample )}${sample_widget_library.name | h}${sample_widget_folder.name | h} - - ${sample_widget_history.name | h} - - ${sample_widget_history.name | h} - - ${sample_widget_workflow.name | h} - - ${sample_widget_workflow.name | h} - ## An admin can select the datasets to transfer, while a non-admin can only view what has been selected - %if sample.library and is_admin: - ## This link will direct the admin to a page allowing them to manage datasets. - ${len( sample.datasets )} - %elif sample.library and sample.datasets: - <% - # Get an external_service from one of the sample datasets. This assumes all sample datasets are associated with - # the same external service - hopefully this is a good assumption. - external_service = sample.datasets[0].external_service - %> - ## Since this is a regular user, only display a link if there is at least 1 - ## selected dataset for the sample. - ${len( sample.datasets )} - %else: - ## Since this is a regular user, do not display a link if there are no datasets. - ${len( sample.datasets )} - %endif -
    - - -<%def name="render_sample_form( index, sample_name, sample_values, fields_dict, display_only )"> - - ${sample_name | h} - %for field_index, field in fields_dict.items(): - <% - field_type = field[ 'type' ] - field_name = field[ 'name' ] - field_value = sample_values[ field_name ] - %> - - %if display_only: - %if field_value: - %if field_type == 'WorkflowField': - %if str( field_value ) != 'none': - <% workflow = trans.sa_session.query( trans.app.model.StoredWorkflow ).get( int( field_value ) ) %> - ${workflow.name | h} - %endif - %else: - ${field_value | h} - %endif - %else: - None - %endif - %else: - %if field_type == 'TextField': - - %elif field_type == 'SelectField': - - %elif field_type == 'WorkflowField': - - %elif field_type == 'WorkflowMappingField': - ##DBTODO Make this useful, use form_builder approach to displaying this stuff. - - %elif field_type == 'HistoryField': - - %elif field_type == 'CheckboxField': - %if field_value is True: - - %else: - - %endif - %endif -
    - ${'('+field['required']+')' } -
    - %endif - - %endfor - - - -<%def name="render_request_type_sample_form_grids( grid_index, grid_name, fields_dict, displayable_sample_widgets, show_saved_samples_read_only )"> - <% - if not grid_name: - grid_name = "Sample form layout %s" % str( grid_index ) - %> -

    Hide ${grid_name}

    -
    - - - - - %for index, field in fields_dict.items(): - - %endfor - - - - - <% trans.sa_session.refresh( request ) %> - %for sample_index, sample in enumerate( displayable_sample_widgets ): - <% - if not show_saved_samples_read_only or sample_index >= len( request.samples ): - display_only = False - else: - display_only = True - %> - ${render_sample_form( sample_index, sample['name'], sample['field_values'], fields_dict, display_only )} - %endfor - -
    Name - ${field['label']} -
    -
    - - -<%def name="render_sample_datasets( cntrller, sample, sample_datasets, title )"> - ## The list of sample_datasets may not be the same as sample.datasets because it may be - ## filtered by a transfer_status value. The value of title changes based on this filter. - %if sample_datasets: - <% - trans.sa_session.refresh( sample ) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = sample.request.is_complete - is_submitted = sample.request.is_submitted - can_transfer_datasets = is_admin and sample.untransferred_dataset_files - %> - ## The transfer status should update only when the request has been submitted or complete - ## and when the sample has in-progress datasets. - %if ( is_complete or is_submitted ) and sample.inprogress_dataset_files: - - %endif -

    ${title}

    - - - - - - - - - - - - %for dataset in sample_datasets: - <% encoded_id = trans.security.encode_id( dataset.id ) %> - - - - - - - - %endfor - -
    NameSizeData libraryFolderTransfer status
    - %if is_admin: - - - -
    - %if can_transfer_datasets and dataset in sample.untransferred_dataset_files: -
  • Transfer
  • - %endif -
    - %else: - ${dataset.name | h} - %endif -
    ${dataset.size}${dataset.sample.library.name | h}${dataset.sample.folder.name | h}${dataset.status}
    - %else: - No datasets for this sample. - %endif - - -<%def name="render_samples_messages( request, is_admin=False, is_submitted=False, message=None, status=None)"> - %if request.is_rejected: -
    - ${request.last_comment | h} -

    - %endif - %if is_admin and is_submitted and request.samples_without_library_destinations: -
    - Select a target data library and folder for a sample before selecting its datasets to transfer from the external service. -

    - %endif - %if message: - ${render_msg( message, status )} - %endif - diff --git a/templates/webapps/galaxy/requests/common/create_request.mako b/templates/webapps/galaxy/requests/common/create_request.mako deleted file mode 100644 index d7265e3da47..00000000000 --- a/templates/webapps/galaxy/requests/common/create_request.mako +++ /dev/null @@ -1,60 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jquery.autocomplete")} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "autocomplete_tagging" )} - - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Create a new sequencing request
    - %if len( request_type_select_field.options ) < 1: - There are no request types available for ${trans.user.email | h} to create sequencing requests. - %else: -
    -
    -
    - - ## The request_type_select_field is a SelectField named request_type_id - ${request_type_select_field.get_html()} - %if cntrller != 'requests_admin': -
    - Contact the lab manager if you are not sure about the request type configuration. -
    - %endif -
    - %if request_type_select_field_selected != 'none': - ## If a request_type has been selected, display the associated form using received widgets. - %for i, field in enumerate( widgets ): -
    - - ${field['widget'].get_html()} -
    - ${field['helptext']} -
    -
    -
    - %endfor -
    - - -
    - %endif -
    -
    - %endif -
    diff --git a/templates/webapps/galaxy/requests/common/edit_basic_request_info.mako b/templates/webapps/galaxy/requests/common/edit_basic_request_info.mako deleted file mode 100644 index 592044e4d1a..00000000000 --- a/templates/webapps/galaxy/requests/common/edit_basic_request_info.mako +++ /dev/null @@ -1,102 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<% - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - can_add_samples = is_unsubmitted - can_reject = is_admin and is_submitted - can_submit_request = request.samples and is_unsubmitted -%> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Edit sequencing request "${request.name | h}"
    -
    -
    - %for i, field in enumerate( widgets ): -
    - - ${field['widget'].get_html()} -
    - ${field['helptext']} -
    -
    -
    - %endfor -
    - -
    -
    -
    -
    -

    -

    -
    Email notification settings
    -
    -
    - <% - email_address = '' - emails = '' - additional_email_addresses = [] - if request.notification: - for e in request.notification[ 'email' ]: - if e == request.user.email: - email_address = 'checked' - else: - additional_email_addresses.append( e ) - if additional_email_addresses: - emails = '\r\n'.join( additional_email_addresses ) - %> -
    - - ${request.user.email | h} (sequencing request owner) -
    -
    - - -
    - Enter one email address per line -
    -
    -
    - - %for sample_state in request.type.states: - <% - email_state = '' - if request.notification and sample_state.id in request.notification[ 'sample_states' ]: - email_state = 'checked' - %> - ${sample_state.name} -
    - %endfor -
    - Email notification will be sent when all the samples of this sequencing request are in the selected states. -
    -
    -
    - -
    -
    -
    -
    diff --git a/templates/webapps/galaxy/requests/common/edit_samples.mako b/templates/webapps/galaxy/requests/common/edit_samples.mako deleted file mode 100644 index 12c5c165cdd..00000000000 --- a/templates/webapps/galaxy/requests/common/edit_samples.mako +++ /dev/null @@ -1,145 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/requests/common/common.mako" import="common_javascripts" /> -<%namespace file="/requests/common/common.mako" import="render_samples_grid" /> -<%namespace file="/requests/common/common.mako" import="render_request_type_sample_form_grids" /> -<%namespace file="/requests/common/common.mako" import="render_samples_messages" /> - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${common_javascripts()} - ${local_javascripts()} - - -<%def name="local_javascripts()"> - - - -<% - from galaxy.web.framework.helpers import time_ago - - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - if is_admin: - can_add_samples = not is_complete - else: - can_add_samples = is_unsubmitted - can_delete_samples = request.samples and not is_complete - can_edit_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted - can_reject = is_admin and is_submitted - can_submit = request.samples and is_unsubmitted -%> - -

    - - - -${render_samples_messages(request, is_admin, is_submitted, message, status)} - -
    -
    - %if displayable_sample_widgets: - <% - grid_header = '

    Edit Current Samples of Sequencing Request "%s"

    ' % request.name - %> - ${render_samples_grid( cntrller, request, displayable_sample_widgets, action='edit_samples', encoded_selected_sample_ids=encoded_selected_sample_ids, render_buttons=False, grid_header=grid_header )} - %if len( sample_operation_select_field.options ) >= 1 and not is_unsubmitted: -
    - For selected samples: - ${sample_operation_select_field.get_html()} -
    - <% sample_operation_selected_value = sample_operation_select_field.get_selected( return_value=True ) %> - %if ( is_admin or not is_complete ) and sample_operation_selected_value != 'none' and encoded_selected_sample_ids: -
    - %if sample_operation_selected_value == trans.model.Sample.bulk_operations.CHANGE_STATE: - ## sample_operation_selected_value == 'Change state' -
    - - ${sample_state_id_select_field.get_html()} - - -
    - Optional -
    -
    - %elif sample_operation_selected_value == trans.app.model.Sample.bulk_operations.SELECT_LIBRARY: - <% libraries_selected_value = libraries_select_field.get_selected( return_value=True ) %> -
    - - ${libraries_select_field.get_html()} -
    - %if libraries_selected_value != 'none': -
    - - ${folders_select_field.get_html()} -
    - %endif - %endif -
    - %endif - %endif -
    - For each sample, select the data library and folder in which you would like the run datasets deposited. - To automatically run a workflow on run datastets, select a history first and then the desired workflow. -
    - ## Render the other grids - <% trans.sa_session.refresh( request.type.sample_form ) %> - %for grid_index, grid_name in enumerate( request.type.sample_form.layout ): - ${render_request_type_sample_form_grids( grid_index, grid_name, request.type.sample_form.grid_fields( grid_index ), displayable_sample_widgets=displayable_sample_widgets, show_saved_samples_read_only=False )} - %endfor - %else: - - %endif -

    -

    - ## hidden element to make twill work. - ## Greg will fix this - - - -
    - Click the Save button when you have finished editing the samples -
    - %if request.samples and request.is_submitted: - - %endif - -
    diff --git a/templates/webapps/galaxy/requests/common/find_samples.mako b/templates/webapps/galaxy/requests/common/find_samples.mako deleted file mode 100644 index fd6ff61dfed..00000000000 --- a/templates/webapps/galaxy/requests/common/find_samples.mako +++ /dev/null @@ -1,100 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jquery.autocomplete")} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "autocomplete_tagging" )} - - -<% is_admin = cntrller == 'requests_admin' and trans.user_is_admin() %> - -
    -
    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Find samples
    -
    -
    -
    - - ${search_type.get_html()} -
    - Select a sample attribute for searching. To search
    - for a sample with a dataset name, select the dataset
    - option above. This will return all the samples that
    - are associated with a dataset with that name.
    -
    -
    -
    - - ${request_states.get_html()} -
    -
    - ${search_box.get_html()} - -
    -

    - Wildcard search (%) can be used as placeholder for any sequence of characters or words.
    - For example, to search for samples starting with 'mysample' use 'mysample%' as the search string. -

    -

    - When 'form value' search type is selected, then enter the search string in 'field label=value' format. -
    For example, when searching for all samples whose 'Volume' field is 1.3mL, then the search string - should be 'Volume=1.3mL' (without qoutes). -

    -
    -
    - %if results: -
    - - %if samples: -
    - The search results are sorted by the date the samples where created. -
    - %endif -
    - %endif -
    - %if samples: - %for sample in samples: -
    - Sample: ${sample.name | h} | Barcode: ${sample.bar_code | h}
    - %if sample.request.is_new or not sample.state: - State: Unsubmitted
    - %else: - State: ${sample.state.name}
    - %endif - <% - # Get an external_service from one of the sample datasets. This assumes all sample datasets are associated with - # the same external service - hopefully this is a good assumption. - external_service = sample.datasets[0].external_service - %> - Datasets: ${len( sample.datasets )}
    - %if is_admin: - User: ${sample.request.user.email | h} - %endif - -
    -
    - %endfor - %endif -
    -
    -
    -
    diff --git a/templates/webapps/galaxy/requests/common/index.mako b/templates/webapps/galaxy/requests/common/index.mako deleted file mode 100644 index f80997ed92f..00000000000 --- a/templates/webapps/galaxy/requests/common/index.mako +++ /dev/null @@ -1,16 +0,0 @@ -<%inherit file="/webapps/galaxy/base_panels.mako"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.active_view="requests" - self.message_box_visible=False -%> - - -<%def name="center_panel()"> - - - - diff --git a/templates/webapps/galaxy/requests/common/sample_dataset_transfer_status.mako b/templates/webapps/galaxy/requests/common/sample_dataset_transfer_status.mako deleted file mode 100644 index dbd0cac134a..00000000000 --- a/templates/webapps/galaxy/requests/common/sample_dataset_transfer_status.mako +++ /dev/null @@ -1,5 +0,0 @@ -<%def name="render_sample_dataset_transfer_status( sample_dataset )"> - ${sample_dataset.status} - - -${render_sample_dataset_transfer_status( sample_dataset )} diff --git a/templates/webapps/galaxy/requests/common/sample_datasets.mako b/templates/webapps/galaxy/requests/common/sample_datasets.mako deleted file mode 100644 index b98dec42eb5..00000000000 --- a/templates/webapps/galaxy/requests/common/sample_datasets.mako +++ /dev/null @@ -1,5 +0,0 @@ -<%def name="render_sample_datasets( sample )"> - ${len( sample.datasets )} - - -${render_sample_datasets( sample )} diff --git a/templates/webapps/galaxy/requests/common/sample_state.mako b/templates/webapps/galaxy/requests/common/sample_state.mako deleted file mode 100644 index 001956aba7c..00000000000 --- a/templates/webapps/galaxy/requests/common/sample_state.mako +++ /dev/null @@ -1,5 +0,0 @@ -<%def name="render_sample_state( sample )"> - ${sample.state.name} - - -${render_sample_state( sample )} diff --git a/templates/webapps/galaxy/requests/common/view_request.mako b/templates/webapps/galaxy/requests/common/view_request.mako deleted file mode 100644 index 98fdc644a8b..00000000000 --- a/templates/webapps/galaxy/requests/common/view_request.mako +++ /dev/null @@ -1,174 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/requests/common/common.mako" import="common_javascripts" /> -<%namespace file="/requests/common/common.mako" import="render_samples_grid" /> -<%namespace file="/requests/common/common.mako" import="render_request_type_sample_form_grids" /> -<%namespace file="/requests/common/common.mako" import="render_samples_messages" /> - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${common_javascripts()} - - -<% - from galaxy.web.framework.helpers import time_ago - - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - can_edit_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted - can_delete_samples = request.samples and not is_complete - can_edit_samples = request.samples and ( is_admin or not is_complete ) - can_reject = is_admin and is_submitted - can_submit = request.samples and is_unsubmitted - can_undelete = request.deleted - if is_admin: - can_add_samples = not is_complete - else: - can_add_samples = is_unsubmitted -%> - -

    - - - -${render_samples_messages(request, is_admin, is_submitted, message, status)} - -
    -
    Sequencing request "${request.name | h}"
    -
    -
    - - ${request.state} -
    -
    -
    - - ${request.desc | h} -
    -
    -
    - - ${request.user.email | h} -
    -
    -
    - - %if is_admin: - ${request.type.name} - %else: - ${request.type.name} - %endif -
    -
    -
    -

    Show More

    -
    - %for index, rd in enumerate( request_widgets ): - <% - field_label = rd[ 'label' ] - field_value = rd[ 'value' ] - %> -
    - - ${field_value | h} -
    -
    - %endfor -
    - - ${request.create_time} -
    -
    -
    - - ${time_ago( request.update_time )} -
    -
    -
    - - <% - if request.notification: - emails = ', '.join( request.notification[ 'email' ] ) - else: - emails = '' - %> - ${emails | h} -
    -
    -
    - - <% - if request.notification: - states = [] - for ss in request.type.states: - if ss.id in request.notification[ 'sample_states' ]: - states.append( ss.name ) - states = ', '.join( states ) - else: - states = '' - %> - ${states} -
    -
    - ## Sample state updater - %if request.samples and request.is_submitted and request.samples_with_bar_code: - - %endif - ## Number of sample datasets updater - %if request.samples and request.is_submitted: - - %endif -
    -
    -
    -
    -

    -%if displayable_sample_widgets: - <% - grid_header = '

    Samples

    ' - render_buttons = can_edit_samples - %> - ${render_samples_grid( cntrller, request, displayable_sample_widgets=displayable_sample_widgets, action='view_request', adding_new_samples=True, encoded_selected_sample_ids=[], render_buttons=render_buttons, grid_header=grid_header )} - ## Render the other grids - <% trans.sa_session.refresh( request.type.sample_form ) %> - %for grid_index, grid_name in enumerate( request.type.sample_form.layout ): - ${render_request_type_sample_form_grids( grid_index, grid_name, request.type.sample_form.grid_fields( grid_index ), displayable_sample_widgets=displayable_sample_widgets, show_saved_samples_read_only=True )} - %endfor -%else: - There are no samples. - %if can_add_samples: - - %endif -%endif diff --git a/templates/webapps/galaxy/requests/common/view_request_history.mako b/templates/webapps/galaxy/requests/common/view_request_history.mako deleted file mode 100644 index 913914ddf80..00000000000 --- a/templates/webapps/galaxy/requests/common/view_request_history.mako +++ /dev/null @@ -1,59 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<% - from galaxy.web.framework.helpers import time_ago - - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - can_add_samples = is_unsubmitted - can_edit_request = ( is_admin and not is_complete ) or is_unsubmitted - can_reject = is_admin and is_submitted - can_submit_request = request.samples and is_unsubmitted -%> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -

    History of sequencing request "${request.name | h}"

    - -
    - - - - - - - - - - %for event in request.events: - - - - - - %endfor - -
    StateLast UpdatedComments
    ${event.state}${time_ago( event.update_time )}${event.comment | h}
    -
    diff --git a/templates/webapps/galaxy/requests/common/view_sample.mako b/templates/webapps/galaxy/requests/common/view_sample.mako deleted file mode 100644 index 8d4eede464f..00000000000 --- a/templates/webapps/galaxy/requests/common/view_sample.mako +++ /dev/null @@ -1,122 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> - -<%def name="render_external_service_actions( external_service )"> -%if external_service: -

    -

    -
    Available External Service Actions for ${sample.name | h} at ${external_service.name | h}
    -
    -
    - %for item in external_service.actions: - ${ render_external_service_action_group( item ) } - %endfor -
    -
    -
    -

    -%endif - - -<%def name="render_external_service_action_group( external_service_group )"> - %if external_service_group.has_action(): - %if external_service_group.label: -
    -
    -
    - ${external_service_group.label | h} -
    -
    -
    - %endif - %for item in external_service_group: - %if isinstance( item, list ): - ${ render_external_service_action_group( item ) } - %else: - ${ render_external_service_action( item ) } - %endif - %endfor - %if external_service_group.label: -
    -
    -
    -
    - %endif - %endif - - -<%def name="render_external_service_action( external_service_action )"> - <% - if hasattr( external_service_action.action, 'target' ): - target = external_service_action.action.target - else: - target = 'galaxy_main' - %> - - - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Sample "${sample.name | h}"
    -
    -
    - - ${sample.name | h} -
    -
    -
    - - ${sample.desc | h} -
    -
    -
    - - ${sample.bar_code | h} -
    -
    - %if sample.library: -
    - - ${sample.library.name | h} -
    -
    -
    - - ${sample.folder.name | h} -
    -
    - %endif -
    - - ${sample.request.name | h} -
    -
    -
    -
    - -%if widgets: - ${render_template_fields( cntrller=cntrller, item_type='sample', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, sample_id=trans.security.encode_id( sample.id ), editable=False )} -%endif -%if external_services: - %for external_service in external_services: - ${ render_external_service_actions( external_service ) } - %endfor -%endif diff --git a/templates/webapps/galaxy/requests/common/view_sample_datasets.mako b/templates/webapps/galaxy/requests/common/view_sample_datasets.mako deleted file mode 100644 index 9f4210f9ed5..00000000000 --- a/templates/webapps/galaxy/requests/common/view_sample_datasets.mako +++ /dev/null @@ -1,45 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/requests/common/common.mako" import="render_sample_datasets" /> -<%namespace file="/requests/common/common.mako" import="common_javascripts" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${common_javascripts()} - - -<% - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = sample.request.is_complete - is_submitted = sample.request.is_submitted - can_transfer_datasets = is_admin and sample.untransferred_dataset_files and sample.library and sample.folder -%> - -

    - - - -%if message: - ${render_msg( message, status )} -%endif - -%if sample and sample_datasets: - ## The list of sample_datasets may not be the same as sample.datasets because it may be - ## filtered by a transfer_status value. The value of title changes based on this filter. - ${render_sample_datasets( cntrller, sample, sample_datasets, title )} -%else: - %if transfer_status: - No datasets with status "${transfer_status}" belong to this sample - %else: - No datasets have been selected for this sample. - %endif -%endif diff --git a/templates/webapps/galaxy/requests/common/view_sample_history.mako b/templates/webapps/galaxy/requests/common/view_sample_history.mako deleted file mode 100644 index 902fcffecf0..00000000000 --- a/templates/webapps/galaxy/requests/common/view_sample_history.mako +++ /dev/null @@ -1,38 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -<% from galaxy.web.framework.helpers import time_ago %> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -

    History of sample "${sample.name | h}"

    - -
    - - - - - - - - - - - %for event in sample.events: - - - - - - - %endfor - -
    StateDescriptionLast UpdatedComments
    ${event.state.name | h}${event.state.desc | h}${time_ago( event.update_time )}${event.comment | h}
    -
    diff --git a/templates/webapps/galaxy/requests/find_samples_index.mako b/templates/webapps/galaxy/requests/find_samples_index.mako deleted file mode 100644 index 34065cef105..00000000000 --- a/templates/webapps/galaxy/requests/find_samples_index.mako +++ /dev/null @@ -1,14 +0,0 @@ -<%inherit file="/webapps/galaxy/base_panels.mako"/> - -<%def name="init()"> - <% - self.has_left_panel=False - self.has_right_panel=False - self.active_view="requests" - self.message_box_visible=False - %> - - -<%def name="center_panel()"> - - diff --git a/templates/webapps/galaxy/requests/grid.mako b/templates/webapps/galaxy/requests/grid.mako deleted file mode 100644 index 6a41b688c5e..00000000000 --- a/templates/webapps/galaxy/requests/grid.mako +++ /dev/null @@ -1 +0,0 @@ -<%inherit file="/grid_base.mako"/> diff --git a/templates/webapps/galaxy/requests/index.mako b/templates/webapps/galaxy/requests/index.mako deleted file mode 100644 index 1c438031624..00000000000 --- a/templates/webapps/galaxy/requests/index.mako +++ /dev/null @@ -1,14 +0,0 @@ -<%inherit file="/webapps/galaxy/base_panels.mako"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.active_view="requests" - self.message_box_visible=False -%> - - -<%def name="center_panel()"> - - diff --git a/test/base/testcase.py b/test/base/testcase.py index 8eaac18f2ca..df35ec268c7 100644 --- a/test/base/testcase.py +++ b/test/base/testcase.py @@ -40,7 +40,7 @@ class FunctionalTestCase(unittest.TestCase): if self.keepOutdir > '': try: os.makedirs(self.keepOutdir) - except: + except Exception: pass @classmethod diff --git a/test/functional/twilltestcase.py b/test/functional/twilltestcase.py index 56c0aea45b8..f2765366f92 100644 --- a/test/functional/twilltestcase.py +++ b/test/functional/twilltestcase.py @@ -49,7 +49,7 @@ class TwillTestCase(FunctionalTestCase): self.visit_url("/history") try: tc.find(string) - except: + except Exception: fname = self.write_temp_file(tc.browser.get_html()) errmsg = "no match to '%s'\npage content written to '%s'" % (string, fname) raise AssertionError(errmsg) @@ -108,21 +108,21 @@ class TwillTestCase(FunctionalTestCase): invalid_username = False try: self.check_page_for_string("Created new user account") - except: + except Exception: try: # May have created the account in a previous test run... self.check_page_for_string("User with that email already exists") previously_created = True - except: + except Exception: try: self.check_page_for_string('Public name is taken; please choose another') username_taken = True - except: + except Exception: try: # Note that we're only checking if the usr name is >< 4 chars here... self.check_page_for_string('Public name must be at least 4 characters in length') invalid_username = True - except: + except Exception: pass return previously_created, username_taken, invalid_username @@ -244,7 +244,7 @@ class TwillTestCase(FunctionalTestCase): formcontrols = self.get_form_controls(f) try: control = f.find_control(name=control_name) - except: + except Exception: log.debug('\n'.join(formcontrols)) # This assumes we always want the first control of the given name, which may not be ideal... control = f.find_control(name=control_name, nr=0) diff --git a/test/shed_functional/base/twilltestcase.py b/test/shed_functional/base/twilltestcase.py index d3987c5d62d..61b71d10ad8 100644 --- a/test/shed_functional/base/twilltestcase.py +++ b/test/shed_functional/base/twilltestcase.py @@ -339,21 +339,21 @@ class ShedTwillTestCase(TwillTestCase): invalid_username = False try: self.check_page_for_string("Created new user account") - except: + except Exception: try: # May have created the account in a previous test run... self.check_page_for_string("User with that email already exists") previously_created = True - except: + except Exception: try: self.check_page_for_string('Public name is taken; please choose another') username_taken = True - except: + except Exception: try: # Note that we're only checking if the usr name is >< 4 chars here... self.check_page_for_string('Public name must be at least 4 characters in length') invalid_username = True - except: + except Exception: pass return previously_created, username_taken, invalid_username @@ -740,7 +740,7 @@ class ShedTwillTestCase(TwillTestCase): lhs = "repos/%s/%s" % (repository.user.username, repository.name) try: return self.hgweb_config_manager.get_entry(lhs) - except: + except Exception: raise Exception("Entry for repository %s missing in hgweb config file %s." % (lhs, self.hgweb_config_manager.hgweb_config)) def get_repository_changelog_tuples(self, repository): diff --git a/test/unit/managers/test_UserManager.py b/test/unit/managers/test_UserManager.py index 445a292e1b4..2ba7ba2408e 100644 --- a/test/unit/managers/test_UserManager.py +++ b/test/unit/managers/test_UserManager.py @@ -180,7 +180,6 @@ class UserSerializerTestCase(BaseTestCase): self.assertIsInstance(serialized['nice_total_disk_usage'], string_types) self.assertIsInstance(serialized['quota_percent'], (type(None), float)) self.assertIsInstance(serialized['tags_used'], list) - self.assertIsInstance(serialized['has_requests'], bool) self.log('serialized should jsonify well') self.assertIsJsonifyable(serialized) diff --git a/test/unit/tools/test_tool_deps.py b/test/unit/tools/test_tool_deps.py index 8301895e248..00d0561bc13 100644 --- a/test/unit/tools/test_tool_deps.py +++ b/test/unit/tools/test_tool_deps.py @@ -36,7 +36,7 @@ def test_tool_dependencies(): p = os.path.join(base_path, name, version) try: makedirs(p) - except: + except Exception: pass if sub == "env.sh": __touch(os.path.join(p, "env.sh")) diff --git a/tools/data_source/data_source.py b/tools/data_source/data_source.py index 0417be67477..93a2c62bee5 100644 --- a/tools/data_source/data_source.py +++ b/tools/data_source/data_source.py @@ -6,7 +6,7 @@ import socket import sys from json import dumps, loads -from six.moves.urllib.parse import urlencode +from six.moves.urllib.parse import urlencode, urlparse from six.moves.urllib.request import urlopen from galaxy.datatypes import sniff @@ -29,14 +29,14 @@ def load_input_parameters(filename, erase_file=True): try: json_params = loads(open(filename, 'r').read()) datasource_params = json_params.get('param_dict') - except: + except Exception: json_params = None for line in open(filename, 'r'): try: line = line.strip() fields = line.split('\t') datasource_params[fields[0]] = fields[1] - except: + except Exception: continue if erase_file: open(filename, 'w').close() # open file for writing, then close, removes params from file @@ -47,7 +47,7 @@ def __main__(): filename = sys.argv[1] try: max_file_size = int(sys.argv[2]) - except: + except Exception: max_file_size = 0 job_params, params = load_input_parameters(filename) @@ -80,7 +80,7 @@ def __main__(): for data_dict in job_params['output_data']: cur_filename = data_dict.get('file_name', filename) cur_URL = params.get('%s|%s|URL' % (GALAXY_PARAM_PREFIX, data_dict['out_data_name']), URL) - if not cur_URL: + if not cur_URL or urlparse(cur_URL).scheme not in ('http', 'https', 'ftp'): open(cur_filename, 'w').write("") stop_err('The remote data source application has not sent back a URL parameter in the request.') diff --git a/tools/data_source/import.py b/tools/data_source/import.py index 4a4c2bf0616..64bf1d43230 100644 --- a/tools/data_source/import.py +++ b/tools/data_source/import.py @@ -46,7 +46,7 @@ inp_name = os.path.join('database', 'import', fname) try: inp = open(inp_name, 'rt') -except: +except Exception: print('Could not find file %s' % inp_name) sys.exit() diff --git a/tools/data_source/microbial_import.py b/tools/data_source/microbial_import.py index 196a60a7ae8..ce9c10d999c 100644 --- a/tools/data_source/microbial_import.py +++ b/tools/data_source/microbial_import.py @@ -20,7 +20,7 @@ have_none = True while have_none: try: uids.remove('None') - except: + except ValueError: have_none = False @@ -48,11 +48,11 @@ try: description = uid else: continue - except: + except Exception: continue available_files[uid] = (description, path, build, file_type, chr_acc) -except: +except Exception: print("It appears that the configuration file for this tool is missing.", file=sys.stderr) # create list of tuples of (displayName,FileName,build) for desired files @@ -60,7 +60,7 @@ desired_files = [] for uid in uids: try: desired_files.append(available_files[uid]) - except: + except Exception: continue # copy first file to contents of given output file @@ -68,7 +68,7 @@ file1_copied = False while not file1_copied: try: first_file = desired_files.pop(0) - except: + except IndexError: print("There were no valid files requested.", file=sys.stderr) sys.exit() file1_desc, file1_path, file1_build, file1_type, file1_chr_acc = first_file @@ -76,7 +76,7 @@ while not file1_copied: copyfile(file1_path, out_file1) print("#File1\t" + file1_desc + "\t" + file1_chr_acc + "\t" + file1_build + "\t" + file1_type) file1_copied = True - except: + except Exception: print("The file specified is missing.", file=sys.stderr) continue diff --git a/tools/data_source/microbial_import_code.py b/tools/data_source/microbial_import_code.py index 422d09fd8d5..f9f53b6427a 100644 --- a/tools/data_source/microbial_import_code.py +++ b/tools/data_source/microbial_import_code.py @@ -77,7 +77,7 @@ def load_microbial_data(GALAXY_DATA_INDEX_DIR, sep='\t'): orgs[org_num]['chrs'][chr_acc]['data'][uid] = data else: continue - except: + except Exception: continue for org_num in orgs: org = orgs[org_num] @@ -149,7 +149,7 @@ def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr copyfile(filepath, newdata.file_name) newdata.info = newdata.name newdata.state = newdata.states.OK - except: + except Exception: newdata.info = "The requested file is missing from the system." newdata.state = newdata.states.ERROR newdata.dbkey = dbkey diff --git a/tools/data_source/upload.py b/tools/data_source/upload.py index a0445f3b491..03d57ae7d15 100644 --- a/tools/data_source/upload.py +++ b/tools/data_source/upload.py @@ -49,7 +49,7 @@ def file_err(msg, dataset, json_file): return try: os.remove(dataset.path) - except: + except Exception: pass diff --git a/tools/evolution/codingSnps_filter.py b/tools/evolution/codingSnps_filter.py index f11cb24e347..4055d4287c1 100755 --- a/tools/evolution/codingSnps_filter.py +++ b/tools/evolution/codingSnps_filter.py @@ -2,11 +2,6 @@ # runs after the job (and after the default post-filter) from galaxy.tools.parameters import DataToolParameter -# Older py compatibility -try: - set() -except: - from sets import Set as set def validate_input(trans, error_map, param_values, page_param_map): @@ -27,7 +22,7 @@ def validate_input(trans, error_map, param_values, page_param_map): int(param.metadata.chromCol) if param.metadata.strandCol is not None: int(param.metadata.strandCol) - except: + except Exception: error_msg = ("The attributes of this dataset are not properly set. " "Click the pencil icon in the history item to set the chrom, start, end and strand columns.") error_map[name] = error_msg diff --git a/tools/extract/extract_genomic_dna.py b/tools/extract/extract_genomic_dna.py index 24d4a5ed6e8..47279dd18ea 100755 --- a/tools/extract/extract_genomic_dna.py +++ b/tools/extract/extract_genomic_dna.py @@ -83,7 +83,7 @@ def __main__(): GALAXY_DATA_INDEX_DIR = options.GALAXY_DATA_INDEX_DIR fasta_file = options.fasta input_filename, output_filename = args - except: + except Exception: doc_optparse.exception() includes_strand_col = strand_col >= 0 @@ -180,7 +180,7 @@ def __main__(): start, end = gff_util.convert_gff_coords_to_bed([start, end]) if includes_strand_col: strand = fields[strand_col] - except: + except Exception: warning = "Invalid chrom, start or end column values. " warnings.append(warning) if not invalid_lines: @@ -231,7 +231,7 @@ def __main__(): sequence += twobitfile[interval.chrom][interval.start:interval.end] else: sequence = twobitfile[chrom][start:end] - except: + except Exception: warning = "Unable to fetch the sequence from '%d' to '%d' for chrom '%s'. " % (start, end - start, chrom) warnings.append(warning) if not invalid_lines: diff --git a/tools/extract/liftOver_wrapper.py b/tools/extract/liftOver_wrapper.py index a79463dc389..3f118a992b7 100644 --- a/tools/extract/liftOver_wrapper.py +++ b/tools/extract/liftOver_wrapper.py @@ -60,7 +60,7 @@ if multiple: try: assert float(minMatch) -except: +except Exception: minMatch = 0.1 # ensure dbkey is set if in_dbkey == "?": diff --git a/tools/filters/axt_to_lav.py b/tools/filters/axt_to_lav.py index 5c764cc0c6b..511cb3b15bc 100644 --- a/tools/filters/axt_to_lav.py +++ b/tools/filters/axt_to_lav.py @@ -86,12 +86,12 @@ def main(): try: (primaryFile, primary, primaryLengths) = parse_spec(primary) - except: + except Exception: usage("bad primary spec (must be seq_file[:species_name]:lengths_file") try: (secondaryFile, secondary, secondaryLengths) = parse_spec(secondary) - except: + except Exception: usage("bad secondary spec (must be seq_file[:species_name]:lengths_file") # read the lengths @@ -163,7 +163,7 @@ def read_lengths(fileName): chrom = fields[0] try: length = int(fields[1]) - except: + except Exception: raise Exception("bad lengths line (%s:%d): %s" % (fileName, lineNumber, line)) if chrom in chromToLength: diff --git a/tools/filters/bed_to_gff_converter.py b/tools/filters/bed_to_gff_converter.py index 6507257d022..dab53f94a85 100644 --- a/tools/filters/bed_to_gff_converter.py +++ b/tools/filters/bed_to_gff_converter.py @@ -30,21 +30,21 @@ def __main__(): else: try: feature = elems[3] - except: + except Exception: feature = 'feature%d' % (i + 1) start = int(elems[1]) + 1 end = int(elems[2]) try: score = elems[4] - except: + except Exception: score = '0' try: strand = elems[5] - except: + except Exception: strand = '+' try: group = elems[3] - except: + except Exception: group = 'group%d' % (i + 1) if complete_bed: out.write('%s\tbed2gff\t%s\t%d\t%d\t%s\t%s\t.\t%s %s;\n' % (chrom, feature, start, end, score, strand, feature, group)) @@ -59,7 +59,7 @@ def __main__(): exon_start = int(start) + int(block_starts[j]) exon_end = exon_start + int(block_sizes[j]) - 1 out.write('%s\tbed2gff\texon\t%d\t%d\t%s\t%s\t.\texon %s;\n' % (chrom, exon_start, exon_end, score, strand, group)) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = i + 1 diff --git a/tools/filters/catWrapper.py b/tools/filters/catWrapper.py index e45553f7a75..62888688032 100644 --- a/tools/filters/catWrapper.py +++ b/tools/filters/catWrapper.py @@ -24,7 +24,7 @@ def main(): cmdline = cmdline + ">" + outfile try: os.system(cmdline) - except: + except Exception: stop_err("Error encountered with cat.") diff --git a/tools/filters/convert_characters.py b/tools/filters/convert_characters.py index efbb1543b5b..7ff1cce07a1 100644 --- a/tools/filters/convert_characters.py +++ b/tools/filters/convert_characters.py @@ -43,7 +43,7 @@ def __main__(): line = line.rstrip('\n') try: fout.write("%s\n" % (re.sub(from_ch, '\t', line))) - except: + except Exception: skipped += 1 if skipped: diff --git a/tools/filters/gff/extract_GFF_Features.py b/tools/filters/gff/extract_GFF_Features.py index 7102792c51b..ba93fafcc3f 100644 --- a/tools/filters/gff/extract_GFF_Features.py +++ b/tools/filters/gff/extract_GFF_Features.py @@ -23,11 +23,11 @@ def main(): try: inp_file, out_file, column, features = args - except: + except ValueError: stop_err("One or more arguments is missing or invalid.\nUsage: prog input output column features") try: column = int(column) - except: + except ValueError: stop_err("Column %s is an invalid column." % column) if features is None: @@ -43,7 +43,7 @@ def main(): try: if line.split('\t')[column] in features.split(','): fo.write("%s\n" % line) - except: + except Exception: pass fo.close() diff --git a/tools/filters/gff/gff_filter_by_attribute.py b/tools/filters/gff/gff_filter_by_attribute.py index 8cf7b08663b..f0e762b4bc2 100644 --- a/tools/filters/gff/gff_filter_by_attribute.py +++ b/tools/filters/gff/gff_filter_by_attribute.py @@ -179,7 +179,7 @@ def check_for_executable(text, description=''): for operand in operands: try: int(operand) - except: + except ValueError: if operand in secured: stop_err("Illegal value '%s' in %s '%s'" % (operand, description, text)) diff --git a/tools/filters/gff/gff_filter_by_feature_count.py b/tools/filters/gff/gff_filter_by_feature_count.py index 493e988ef56..d672c77b472 100644 --- a/tools/filters/gff/gff_filter_by_feature_count.py +++ b/tools/filters/gff/gff_filter_by_feature_count.py @@ -137,7 +137,7 @@ def __main__(): empty, number_str = condition.split(op) try: number = float(number_str) - except: + except ValueError: number = None if empty != "" or not number: print("Invalid condition: %s, cannot filter." % condition, file=sys.stderr) diff --git a/tools/filters/gff_to_bed_converter.py b/tools/filters/gff_to_bed_converter.py index 5bf56511332..1326188dd9b 100644 --- a/tools/filters/gff_to_bed_converter.py +++ b/tools/filters/gff_to_bed_converter.py @@ -112,7 +112,7 @@ def __main__(): cur_transcript_strand = strand cur_transcripts_blocks = [] cur_transcripts_blocks.append(coords) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = i + 1 diff --git a/tools/filters/gtf_to_bedgraph_converter.py b/tools/filters/gtf_to_bedgraph_converter.py index 4dc7a1802fa..711ebfeb73e 100644 --- a/tools/filters/gtf_to_bedgraph_converter.py +++ b/tools/filters/gtf_to_bedgraph_converter.py @@ -49,7 +49,7 @@ def __main__(): # GTF format: chrom source, name, chromStart, chromEnd, score, strand, frame, attributes. # BedGraph format: chrom, chromStart, chromEnd, value out.write("%s\t%s\t%s\t%s\n" % (elems[0], start, elems[4], value)) - except: + except Exception: skipped_lines += 1 if not first_skipped_line: first_skipped_line = i + 1 diff --git a/tools/filters/join.py b/tools/filters/join.py index 0d13ec19f96..75fd2af482a 100644 --- a/tools/filters/join.py +++ b/tools/filters/join.py @@ -392,7 +392,7 @@ def main(): column1 = int(args[2]) - 1 column2 = int(args[3]) - 1 out_filename = args[4] - except: + except Exception: print("Error parsing command line.", file=sys.stderr) sys.exit() diff --git a/tools/filters/lav_to_bed_code.py b/tools/filters/lav_to_bed_code.py index 14c158328c6..10a8e217895 100644 --- a/tools/filters/lav_to_bed_code.py +++ b/tools/filters/lav_to_bed_code.py @@ -15,5 +15,5 @@ def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr data.name = "%s (%s)" % (data.name, data.dbkey) app.model.context.add(data) app.model.context.flush() - except: + except Exception: continue diff --git a/tools/filters/mergeCols.py b/tools/filters/mergeCols.py index a4c6381d9c2..8b713e1b630 100644 --- a/tools/filters/mergeCols.py +++ b/tools/filters/mergeCols.py @@ -12,7 +12,7 @@ def __main__(): try: infile = open(sys.argv[1], 'r') outfile = open(sys.argv[2], 'w') - except: + except Exception: stop_err('Cannot open or create a file\n') if len(sys.argv) < 4: @@ -30,7 +30,7 @@ def __main__(): for col in cols: try: line += fields[int(col) - 1] - except: + except Exception: skipped_lines += 1 print(line, file=outfile) diff --git a/tools/filters/sff_extract.py b/tools/filters/sff_extract.py index bf318073b63..cfb0cb53afa 100644 --- a/tools/filters/sff_extract.py +++ b/tools/filters/sff_extract.py @@ -860,7 +860,7 @@ def extract_reads_from_sff(config, sff_files): qual_fh = None try: os.remove(config['qual_fname']) - except: + except Exception: pass else: qual_fh = open(config['qual_fname'], openmode) @@ -1101,7 +1101,7 @@ def tests_for_ssaha(): subprocess.call(["ssaha2"], stdout=fh) fh.close() print("ok.") - except: + except Exception: print("nope? Uh oh ...\n\n") raise RuntimeError('Could not launch ssaha2. Have you installed it? Is it in your path?') @@ -1137,7 +1137,7 @@ def launch_ssaha(linker_fname, query_fname, output_fh): raise RuntimeError('Ups.') else: print("ok.") - except: + except Exception: print("\n") raise RuntimeError('An error occured during the SSAHA2 execution, aborting.') diff --git a/tools/filters/ucsc_gene_bed_to_exon_bed.py b/tools/filters/ucsc_gene_bed_to_exon_bed.py index 10fe200f231..dbeae5006b8 100755 --- a/tools/filters/ucsc_gene_bed_to_exon_bed.py +++ b/tools/filters/ucsc_gene_bed_to_exon_bed.py @@ -38,13 +38,13 @@ def main(): try: out_file = open(options.output, "w") - except: + except Exception: print("Bad output file.", file=sys.stderr) sys.exit(0) try: in_file = open(options.input) - except: + except Exception: print("Bad input file.", file=sys.stderr) sys.exit(0) @@ -120,7 +120,7 @@ def main(): print_tab_sep(out_file, chrom, start, end, name, "0", strand) else: print_tab_sep(out_file, chrom, start, end) - except: + except Exception: continue diff --git a/tools/filters/ucsc_gene_bed_to_intron_bed.py b/tools/filters/ucsc_gene_bed_to_intron_bed.py index b6818a8757d..91bd49b30be 100755 --- a/tools/filters/ucsc_gene_bed_to_intron_bed.py +++ b/tools/filters/ucsc_gene_bed_to_intron_bed.py @@ -33,13 +33,13 @@ def main(): try: out_file = open(options.output, "w") - except: + except Exception: print("Bad output file.", file=sys.stderr) sys.exit(0) try: in_file = open(options.input) - except: + except Exception: print("Bad input file.", file=sys.stderr) sys.exit(0) @@ -72,7 +72,7 @@ def main(): else: print_tab_sep(out_file, chrom, intron_starts, intron_ends) i += 1 - except: + except Exception: continue diff --git a/tools/filters/ucsc_gene_table_to_intervals.py b/tools/filters/ucsc_gene_table_to_intervals.py index 4c10404f24c..aec59641659 100755 --- a/tools/filters/ucsc_gene_table_to_intervals.py +++ b/tools/filters/ucsc_gene_table_to_intervals.py @@ -38,13 +38,13 @@ def main(): try: out_file = open(options.output, "w") - except: + except Exception: print("Bad output file.", file=sys.stderr) sys.exit(0) try: in_file = open(options.input) - except: + except Exception: print("Bad input file.", file=sys.stderr) sys.exit(0) @@ -104,7 +104,7 @@ def main(): print_tab_sep(out_file, chrom, region_start, region_end, name, "0", strand) else: print_tab_sep(out_file, chrom, region_start, region_end) - except: + except Exception: continue diff --git a/tools/genomespace/genomespace_importer.py b/tools/genomespace/genomespace_importer.py index f6851a69aa2..6e73f7c1eeb 100644 --- a/tools/genomespace/genomespace_importer.py +++ b/tools/genomespace/genomespace_importer.py @@ -124,7 +124,7 @@ def sniff_and_handle_data_type(json_params, output_file): output_file, datatypes_registry) return file_type - except: + except Exception: return None diff --git a/tools/maf/maf_by_block_number.py b/tools/maf/maf_by_block_number.py index 450acb2607d..326cb5260c4 100644 --- a/tools/maf/maf_by_block_number.py +++ b/tools/maf/maf_by_block_number.py @@ -29,7 +29,7 @@ def __main__(): for ctr, line in enumerate(open(input_block_filename, 'r')): try: block_wanted = int(line.split("\t")[block_col].strip()) - except: + except Exception: failed_lines.append(str(ctr)) continue try: @@ -39,7 +39,7 @@ def __main__(): block = block.limit_to_species(species) maf_writer.write(block) break - except: + except Exception: print("Your MAF file appears to be malformed.", file=sys.stderr) sys.exit() if len(failed_lines) > 0: diff --git a/tools/maf/maf_filter.py b/tools/maf/maf_filter.py index 23afe2e72a1..3937355d734 100644 --- a/tools/maf/maf_filter.py +++ b/tools/maf/maf_filter.py @@ -30,7 +30,7 @@ def main(): num_species = len(species) else: num_species = len(sys.argv.pop(1).split(',')) - except: + except Exception: print("One or more arguments is missing.\nUsage: maf_filter.py maf_filter_file input_maf output_maf path_to_save_debug species_to_keep", file=sys.stderr) sys.exit() @@ -38,7 +38,7 @@ def main(): try: maf_reader = bx.align.maf.Reader(open(maf_file, 'r')) maf_writer = bx.align.maf.Writer(open(out_file, 'w')) - except: + except Exception: print("Your MAF file appears to be malformed.", file=sys.stderr) sys.exit() diff --git a/tools/maf/maf_limit_size.py b/tools/maf/maf_limit_size.py index 3ce157c248b..41347ccd66d 100644 --- a/tools/maf/maf_limit_size.py +++ b/tools/maf/maf_limit_size.py @@ -20,7 +20,7 @@ def __main__(): maf_writer = bx.align.maf.Writer(open(output_filename1, 'w')) try: maf_reader = bx.align.maf.Reader(open(input_maf_filename, 'r')) - except: + except Exception: print("Your MAF file appears to be malformed.", file=sys.stderr) sys.exit() diff --git a/tools/maf/maf_limit_to_species.py b/tools/maf/maf_limit_to_species.py index 6e3f0474932..bcc4936d876 100644 --- a/tools/maf/maf_limit_to_species.py +++ b/tools/maf/maf_limit_to_species.py @@ -25,7 +25,7 @@ def main(): try: maf_reader = bx.align.maf.Reader(open(sys.argv[2], 'r')) maf_writer = bx.align.maf.Writer(open(sys.argv[3], 'w')) - except: + except Exception: print("Your MAF file appears to be malformed.", file=sys.stderr) sys.exit() allow_partial = False diff --git a/tools/maf/maf_reverse_complement.py b/tools/maf/maf_reverse_complement.py index ab3fa692a3f..e8543d62a6f 100644 --- a/tools/maf/maf_reverse_complement.py +++ b/tools/maf/maf_reverse_complement.py @@ -23,7 +23,7 @@ def __main__(): try: maf_writer = bx.align.maf.Writer(open(output_file, 'w')) - except: + except Exception: print(sys.stderr, "Unable to open output file") sys.exit() try: @@ -33,7 +33,7 @@ def __main__(): if species: maf = maf.limit_to_species(species) maf_writer.write(maf) - except: + except Exception: print("Your MAF file appears to be malformed.", file=sys.stderr) sys.exit() print("%i regions were reverse complemented." % count) diff --git a/tools/maf/maf_stats.py b/tools/maf/maf_stats.py index f2b1ad13702..d1b66e74492 100644 --- a/tools/maf/maf_stats.py +++ b/tools/maf/maf_stats.py @@ -23,7 +23,7 @@ def __main__(): chr_col = int(sys.argv[5].strip()) - 1 start_col = int(sys.argv[6].strip()) - 1 end_col = int(sys.argv[7].strip()) - 1 - except: + except Exception: print("You appear to be missing metadata. You can specify your metadata by clicking on the pencil icon associated with your interval file.", file=sys.stderr) sys.exit() summary = sys.argv[8].strip() @@ -35,7 +35,7 @@ def __main__(): mafIndexFile = "%s/maf_index.loc" % sys.argv[9] try: maf_index_filename = sys.argv[10].strip() - except: + except Exception: maf_index_filename = None index = index_filename = None if maf_source_type == "user": diff --git a/tools/maf/maf_thread_for_species.py b/tools/maf/maf_thread_for_species.py index 7f07377a00b..342efbb6fa2 100644 --- a/tools/maf/maf_thread_for_species.py +++ b/tools/maf/maf_thread_for_species.py @@ -24,12 +24,12 @@ def main(): try: maf_reader = bx.align.maf.Reader(open(input_file)) - except: + except Exception: print("Unable to open source MAF file", file=sys.stderr) sys.exit() try: maf_writer = FusingAlignmentWriter(bx.align.maf.Writer(open(output_file, 'w'))) - except: + except Exception: print("Unable to open output file", file=sys.stderr) sys.exit() try: diff --git a/tools/maf/maf_to_bed.py b/tools/maf/maf_to_bed.py index faef14981c6..f05d468b7eb 100644 --- a/tools/maf/maf_to_bed.py +++ b/tools/maf/maf_to_bed.py @@ -31,7 +31,7 @@ def __main__(): if not spec or not chrom: spec = chrom = c.src species.add(spec) - except: + except Exception: print("Invalid MAF file specified", file=sys.stderr) return diff --git a/tools/maf/vcf_to_maf_customtrack.py b/tools/maf/vcf_to_maf_customtrack.py index bdf290f539d..5c7a2bce376 100644 --- a/tools/maf/vcf_to_maf_customtrack.py +++ b/tools/maf/vcf_to_maf_customtrack.py @@ -47,7 +47,7 @@ class SampleVCFParser(Iterator): for i in sample_value[gt_index].replace('|', '/').replace('\\', '/').split('/'): # Do we need to consider phase here? try: gt_indexes.append(int(i)) - except: + except Exception: gt_indexes.append(None) for i, allele_i in enumerate(gt_indexes): if allele_i is not None: diff --git a/tools/metag_tools/blat_wrapper.py b/tools/metag_tools/blat_wrapper.py index ee652d51133..b815e6dcf55 100644 --- a/tools/metag_tools/blat_wrapper.py +++ b/tools/metag_tools/blat_wrapper.py @@ -57,19 +57,19 @@ def __main__(): try: float(min_iden) - except: + except ValueError: stop_err('Invalid value for minimal identity.') try: test = int(tile_size) assert test >= 6 and test <= 18 - except: + except Exception: stop_err('Invalid value for tile size. DNA word size must be between 6 and 18.') try: test = int(one_off) assert test >= 0 and test <= int(tile_size) - except: + except Exception: stop_err('Invalid value for mismatch numbers in the word') GALAXY_DATA_INDEX_DIR = sys.argv[8] diff --git a/tools/metag_tools/shrimp_color_wrapper.py b/tools/metag_tools/shrimp_color_wrapper.py index 658a8e415a5..257d099c000 100644 --- a/tools/metag_tools/shrimp_color_wrapper.py +++ b/tools/metag_tools/shrimp_color_wrapper.py @@ -52,7 +52,7 @@ def __main__(): spaced_seed = sys.argv[4] else: stop_err('Error in assigning parameter: Spaced seed.') - except: + except Exception: stop_err('Spaced seed must be a combination of 1s and 0s.') seed_matches_per_window = sys.argv[5] diff --git a/tools/metag_tools/shrimp_wrapper.py b/tools/metag_tools/shrimp_wrapper.py index 632033a08e0..15de176c86b 100644 --- a/tools/metag_tools/shrimp_wrapper.py +++ b/tools/metag_tools/shrimp_wrapper.py @@ -442,10 +442,10 @@ def convert_fastqsolexa_to_fasta_qual(infile_name, query_fasta, query_qual): fastq_integer = True # peek: ascii or digits? val = line.split()[0] + fastq_integer = True try: int(val) - fastq_integer = True - except: + except ValueError: fastq_integer = False if fastq_integer: @@ -529,7 +529,7 @@ def __main__(): spaced_seed = sys.argv[5] else: stop_err('Error in assigning parameter: Spaced seed.') - except: + except Exception: stop_err('Spaced seed must be a combination of 1s and 0s.') seed_matches_per_window = sys.argv[6] diff --git a/tools/next_gen_conversion/solid2fastq.py b/tools/next_gen_conversion/solid2fastq.py index f9c999292bf..cd7e66ec279 100644 --- a/tools/next_gen_conversion/solid2fastq.py +++ b/tools/next_gen_conversion/solid2fastq.py @@ -25,7 +25,7 @@ def solid2sanger(quality_string, min_qual=0): return False break sanger += chr(int(qv) + 33) - except: + except Exception: pass return sanger @@ -178,7 +178,7 @@ def main(): try: con = sqlite3.connect(db.name) cur = con.cursor() - except: + except Exception: stop_err('Cannot connect to %s\n') % db.name merge_reads_qual(fr, fq, con, trim_name=options.trim_name, out='db', double_encode=options.de, trim_first_base=options.trim_first_base, min_qual=options.min_qual, table_name="f3") diff --git a/tools/plotting/bar_chart.py b/tools/plotting/bar_chart.py index 2143b257794..b544c08f5b7 100644 --- a/tools/plotting/bar_chart.py +++ b/tools/plotting/bar_chart.py @@ -50,12 +50,12 @@ def main(tmpFileName): ymax = sys.argv[7] img_file = sys.argv[8] img_size = sys.argv[9] - except: + except Exception: stop_err("Check arguments\n") try: int(col_list[0]) - except: + except Exception: stop_err('You forgot to set columns for plotting\n') for i, line in enumerate(in_file): @@ -67,7 +67,7 @@ def main(tmpFileName): fields = line.split('\t') for col in col_list: row.append(str(float(fields[int(col) - 1]))) - except: + except Exception: valid = False skipped_lines_count += 1 skipped_lines_index.append(i) @@ -123,7 +123,7 @@ def main(tmpFileName): g(g_out) g('set style data histograms') g.plot(g_plot_command) - except: + except Exception: stop_err("Gnuplot error: Data cannot be plotted") else: sys.stderr.write('Column(s) %s of your dataset do not contain valid numeric data' % sys.argv[3]) diff --git a/tools/solid_tools/maq_cs_wrapper.py b/tools/solid_tools/maq_cs_wrapper.py index 9dbf1564d72..9e5dd35db17 100644 --- a/tools/solid_tools/maq_cs_wrapper.py +++ b/tools/solid_tools/maq_cs_wrapper.py @@ -141,7 +141,7 @@ def __main__(): os.system(cmd1) os.system('gunzip -c %s >> %s' % (tmpf.name, tmpfastq.name)) tmpf.close() - except: + except Exception: stop_err("Error converting data to fastq format.") # Make a temp directory where the split fastq files will be stored @@ -203,7 +203,7 @@ def __main__(): g += 1 else: c += 1 - except: + except Exception: pass print("%s\t%s\t%s\t%s\t%s\t%s" % ("\t".join(elems[:4]), coverage - ref_nt_count, a, t, g, c), file=out_f2) except Exception as er2: @@ -246,7 +246,7 @@ def __main__(): t = int(elems[6]) g = int(elems[7]) c = int(elems[8]) - except: + except Exception: continue fcov.write("%s\t%s\n" % (pos, cov)) try: diff --git a/tools/solid_tools/solid_qual_stats.py b/tools/solid_tools/solid_qual_stats.py index eb5cb8356ee..bc172e29f50 100644 --- a/tools/solid_tools/solid_qual_stats.py +++ b/tools/solid_tools/solid_qual_stats.py @@ -71,7 +71,7 @@ def __main__(): try: item = int(item) position_dict[ind][item] += 1 - except: + except Exception: pass invalid_positions = 0 @@ -125,7 +125,7 @@ def __main__(): right_whisker = min(q3 + 1.5 * iqr, highest) print("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (pos + 1, total, lowest, highest, qsum, mean, q1, median, q3, iqr, left_whisker, right_whisker), file=fout) - except: + except Exception: invalid_positions += 1 nullvals = ['NA'] * 11 print("%s\t%s" % (pos + 1, '\t'.join(nullvals)), file=fout) diff --git a/tools/sr_mapping/bfast_wrapper.py b/tools/sr_mapping/bfast_wrapper.py index a7c8ed05379..6cddd62521c 100644 --- a/tools/sr_mapping/bfast_wrapper.py +++ b/tools/sr_mapping/bfast_wrapper.py @@ -104,7 +104,7 @@ def __main__(): sys.stdout.write('%s\n' % stdout) else: raise Exception - except: + except Exception: sys.stdout.write('Could not determine BFAST version\n') buffsize = 1048576 diff --git a/tools/stats/aggregate_scores_in_intervals.py b/tools/stats/aggregate_scores_in_intervals.py index df025e91c33..b03bfc9282c 100755 --- a/tools/stats/aggregate_scores_in_intervals.py +++ b/tools/stats/aggregate_scores_in_intervals.py @@ -146,7 +146,7 @@ def main(): out_file = sys.stdout binned = bool(options.binned) mask_fname = options.mask - except: + except Exception: doc_optparse.exit() if score_fname == 'None': @@ -156,7 +156,7 @@ def main(): chrom_col = int(chrom_col) - 1 start_col = int(start_col) - 1 stop_col = int(stop_col) - 1 - except: + except Exception: stop_err('Chrom, start & end column not properly set, click the pencil icon in your history item to set these values.') if chrom_col < 0 or start_col < 0 or stop_col < 0: @@ -167,7 +167,7 @@ def main(): else: try: chrom_buffer = int(options.chrom_buffer) - except: + except Exception: chrom_buffer = 3 scores_by_chrom = load_scores_wiggle(score_fname, chrom_buffer) @@ -188,7 +188,7 @@ def main(): try: chrom, start, stop = fields[chrom_col], int(fields[start_col]), int(fields[stop_col]) - except: + except Exception: valid = False skipped_lines += 1 if not invalid_line: @@ -213,7 +213,7 @@ def main(): count += 1 max_score = max(score, max_score) min_score = min(score, min_score) - except: + except Exception: continue if count > 0: avg = total / count diff --git a/tools/stats/filtering.py b/tools/stats/filtering.py index 82a57dde889..81963e42309 100644 --- a/tools/stats/filtering.py +++ b/tools/stats/filtering.py @@ -147,7 +147,7 @@ try: in_columns = int(sys.argv[4]) assert sys.argv[5] # check to see that the column types variable isn't null in_column_types = sys.argv[5].split(',') -except: +except Exception: stop_err("Data does not appear to be tabular. This tool can only be used with tab-delimited data.") num_header_lines = int(sys.argv[6]) @@ -173,7 +173,7 @@ operands = get_operands(cond_text) for operand in operands: try: check = int(operand) - except: + except ValueError: if operand in secured: stop_err("Illegal value '%s' in condition '%s'" % (operand, cond_text)) @@ -232,7 +232,7 @@ for i, line in enumerate( open( in_fname ) ): if %s: lines_kept += 1 print( line, file=out ) - except: + except Exception: invalid_lines += 1 if not invalid_line: first_invalid_line = i + 1 diff --git a/tools/stats/grouping.py b/tools/stats/grouping.py index 00a6692586c..c2ecde15e43 100644 --- a/tools/stats/grouping.py +++ b/tools/stats/grouping.py @@ -69,7 +69,7 @@ def main(): try: group_col = int(sys.argv[3]) - 1 - except: + except Exception: stop_err("Group column not specified.") tmpfile = tempfile.NamedTemporaryFile() diff --git a/tools/stats/gsummary.py b/tools/stats/gsummary.py index 00c5f31519b..44ea737d672 100755 --- a/tools/stats/gsummary.py +++ b/tools/stats/gsummary.py @@ -6,7 +6,7 @@ import sys import tempfile try: from rpy2.rpy_classic import BASIC_CONVERSION, NO_CONVERSION, r, RException, set_default_mode -except: +except ImportError: # RPy isn't maintained, and doesn't work with R>3.0, use it as a fallback from rpy import BASIC_CONVERSION, NO_CONVERSION, r, RException, set_default_mode @@ -31,7 +31,7 @@ def main(): datafile = sys.argv[1] outfile_name = sys.argv[2] expression = sys.argv[3] - except: + except Exception: stop_err('Usage: python gsummary.py input_file ouput_file expression') math_allowed = S3_METHODS()['Math'] @@ -56,7 +56,7 @@ def main(): for col in re.compile('c[0-9]+').findall(expression): try: cols.append(int(col[1:]) - 1) - except: + except Exception: pass tmp_file = tempfile.NamedTemporaryFile('w+b') @@ -75,7 +75,7 @@ def main(): for col in cols: try: float(fields[col]) - except: + except Exception: skipped_lines += 1 if not first_invalid_line: first_invalid_line = i + 1