diff --git a/resources/sql/patches/migrate-maniphest-dependencies.php b/resources/sql/patches/migrate-maniphest-dependencies.php
new file mode 100644
index 0000000000..cfa93d7e5c
--- /dev/null
+++ b/resources/sql/patches/migrate-maniphest-dependencies.php
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * Copyright 2012 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+echo "Migrating task dependencies to edges...\n";
+foreach (new LiskMigrationIterator(new ManiphestTask()) as $task) {
+  $id = $task->getID();
+  echo "Task {$id}: ";
+
+  $deps = $task->getAttachedPHIDs(PhabricatorPHIDConstants::PHID_TYPE_TASK);
+  if (!$deps) {
+    echo "-\n";
+    continue;
+  }
+
+  $editor = new PhabricatorEdgeEditor();
+  $editor->setSuppressEvents(true);
+  foreach ($deps as $dep) {
+    $editor->addEdge(
+      $task->getPHID(),
+      PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK,
+      $dep);
+  }
+  $editor->save();
+  echo "OKAY\n";
+}
+
+echo "Done.\n";
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index 4206c02e6e..f36d58484b 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,2076 +1,2074 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'arc liberate' to rebuild it.
  * @generated
  * @phutil-library-version 2
  */
 
 phutil_register_library_map(array(
   '__library_version__' => 2,
   'class' =>
   array(
     'Aphront304Response' => 'aphront/response/Aphront304Response.php',
     'Aphront400Response' => 'aphront/response/Aphront400Response.php',
     'Aphront403Response' => 'aphront/response/Aphront403Response.php',
     'Aphront404Response' => 'aphront/response/Aphront404Response.php',
     'AphrontAjaxResponse' => 'aphront/response/AphrontAjaxResponse.php',
     'AphrontApplicationConfiguration' => 'aphront/configuration/AphrontApplicationConfiguration.php',
     'AphrontAttachedFileView' => 'view/control/AphrontAttachedFileView.php',
     'AphrontCSRFException' => 'aphront/exception/AphrontCSRFException.php',
     'AphrontCalendarEventView' => 'applications/calendar/view/AphrontCalendarEventView.php',
     'AphrontCalendarMonthView' => 'applications/calendar/view/AphrontCalendarMonthView.php',
     'AphrontContextBarView' => 'view/layout/AphrontContextBarView.php',
     'AphrontController' => 'aphront/AphrontController.php',
     'AphrontCrumbsView' => 'view/layout/AphrontCrumbsView.php',
     'AphrontDatabaseConnection' => 'infrastructure/storage/connection/AphrontDatabaseConnection.php',
     'AphrontDatabaseTransactionState' => 'infrastructure/storage/connection/AphrontDatabaseTransactionState.php',
     'AphrontDefaultApplicationConfiguration' => 'aphront/configuration/AphrontDefaultApplicationConfiguration.php',
     'AphrontDialogResponse' => 'aphront/response/AphrontDialogResponse.php',
     'AphrontDialogView' => 'view/AphrontDialogView.php',
     'AphrontErrorView' => 'view/form/AphrontErrorView.php',
     'AphrontException' => 'aphront/exception/AphrontException.php',
     'AphrontFilePreviewView' => 'view/layout/AphrontFilePreviewView.php',
     'AphrontFileResponse' => 'aphront/response/AphrontFileResponse.php',
     'AphrontFormCheckboxControl' => 'view/form/control/AphrontFormCheckboxControl.php',
     'AphrontFormControl' => 'view/form/control/AphrontFormControl.php',
     'AphrontFormDateControl' => 'view/form/control/AphrontFormDateControl.php',
     'AphrontFormDividerControl' => 'view/form/control/AphrontFormDividerControl.php',
     'AphrontFormDragAndDropUploadControl' => 'view/form/control/AphrontFormDragAndDropUploadControl.php',
     'AphrontFormFileControl' => 'view/form/control/AphrontFormFileControl.php',
     'AphrontFormImageControl' => 'view/form/control/AphrontFormImageControl.php',
     'AphrontFormInsetView' => 'view/form/AphrontFormInsetView.php',
     'AphrontFormLayoutView' => 'view/form/AphrontFormLayoutView.php',
     'AphrontFormMarkupControl' => 'view/form/control/AphrontFormMarkupControl.php',
     'AphrontFormPasswordControl' => 'view/form/control/AphrontFormPasswordControl.php',
     'AphrontFormPolicyControl' => 'view/form/control/AphrontFormPolicyControl.php',
     'AphrontFormRadioButtonControl' => 'view/form/control/AphrontFormRadioButtonControl.php',
     'AphrontFormRecaptchaControl' => 'view/form/control/AphrontFormRecaptchaControl.php',
     'AphrontFormSelectControl' => 'view/form/control/AphrontFormSelectControl.php',
     'AphrontFormStaticControl' => 'view/form/control/AphrontFormStaticControl.php',
     'AphrontFormSubmitControl' => 'view/form/control/AphrontFormSubmitControl.php',
     'AphrontFormTextAreaControl' => 'view/form/control/AphrontFormTextAreaControl.php',
     'AphrontFormTextControl' => 'view/form/control/AphrontFormTextControl.php',
     'AphrontFormToggleButtonsControl' => 'view/form/control/AphrontFormToggleButtonsControl.php',
     'AphrontFormTokenizerControl' => 'view/form/control/AphrontFormTokenizerControl.php',
     'AphrontFormView' => 'view/form/AphrontFormView.php',
     'AphrontHTTPSink' => 'aphront/sink/AphrontHTTPSink.php',
     'AphrontHTTPSinkTestCase' => 'aphront/sink/__tests__/AphrontHTTPSinkTestCase.php',
     'AphrontHeadsupActionListView' => 'view/layout/headsup/AphrontHeadsupActionListView.php',
     'AphrontHeadsupActionView' => 'view/layout/headsup/AphrontHeadsupActionView.php',
     'AphrontHeadsupView' => 'view/layout/headsup/AphrontHeadsupView.php',
     'AphrontIDPagerView' => 'view/control/AphrontIDPagerView.php',
     'AphrontIsolatedDatabaseConnection' => 'infrastructure/storage/connection/AphrontIsolatedDatabaseConnection.php',
     'AphrontIsolatedDatabaseConnectionTestCase' => 'infrastructure/storage/connection/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php',
     'AphrontIsolatedHTTPSink' => 'aphront/sink/AphrontIsolatedHTTPSink.php',
     'AphrontJSONResponse' => 'aphront/response/AphrontJSONResponse.php',
     'AphrontJavelinView' => 'view/AphrontJavelinView.php',
     'AphrontKeyboardShortcutsAvailableView' => 'view/widget/AphrontKeyboardShortcutsAvailableView.php',
     'AphrontListFilterView' => 'view/layout/AphrontListFilterView.php',
     'AphrontMiniPanelView' => 'view/layout/AphrontMiniPanelView.php',
     'AphrontMoreView' => 'view/layout/AphrontMoreView.php',
     'AphrontMySQLDatabaseConnection' => 'infrastructure/storage/connection/mysql/AphrontMySQLDatabaseConnection.php',
     'AphrontMySQLDatabaseConnectionBase' => 'infrastructure/storage/connection/mysql/AphrontMySQLDatabaseConnectionBase.php',
     'AphrontMySQLDatabaseConnectionTestCase' => 'infrastructure/storage/connection/__tests__/AphrontMySQLDatabaseConnectionTestCase.php',
     'AphrontMySQLiDatabaseConnection' => 'infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php',
     'AphrontNullView' => 'view/AphrontNullView.php',
     'AphrontPHPHTTPSink' => 'aphront/sink/AphrontPHPHTTPSink.php',
     'AphrontPageView' => 'view/page/AphrontPageView.php',
     'AphrontPagerView' => 'view/control/AphrontPagerView.php',
     'AphrontPanelView' => 'view/layout/AphrontPanelView.php',
     'AphrontPlainTextResponse' => 'aphront/response/AphrontPlainTextResponse.php',
     'AphrontProxyResponse' => 'aphront/response/AphrontProxyResponse.php',
     'AphrontQueryAccessDeniedException' => 'infrastructure/storage/exception/AphrontQueryAccessDeniedException.php',
     'AphrontQueryConnectionException' => 'infrastructure/storage/exception/AphrontQueryConnectionException.php',
     'AphrontQueryConnectionLostException' => 'infrastructure/storage/exception/AphrontQueryConnectionLostException.php',
     'AphrontQueryCountException' => 'infrastructure/storage/exception/AphrontQueryCountException.php',
     'AphrontQueryDeadlockException' => 'infrastructure/storage/exception/AphrontQueryDeadlockException.php',
     'AphrontQueryDuplicateKeyException' => 'infrastructure/storage/exception/AphrontQueryDuplicateKeyException.php',
     'AphrontQueryException' => 'infrastructure/storage/exception/AphrontQueryException.php',
     'AphrontQueryObjectMissingException' => 'infrastructure/storage/exception/AphrontQueryObjectMissingException.php',
     'AphrontQueryParameterException' => 'infrastructure/storage/exception/AphrontQueryParameterException.php',
     'AphrontQueryRecoverableException' => 'infrastructure/storage/exception/AphrontQueryRecoverableException.php',
     'AphrontQuerySchemaException' => 'infrastructure/storage/exception/AphrontQuerySchemaException.php',
     'AphrontRedirectException' => 'aphront/exception/AphrontRedirectException.php',
     'AphrontRedirectResponse' => 'aphront/response/AphrontRedirectResponse.php',
     'AphrontReloadResponse' => 'aphront/response/AphrontReloadResponse.php',
     'AphrontRequest' => 'aphront/AphrontRequest.php',
     'AphrontRequestFailureView' => 'view/page/AphrontRequestFailureView.php',
     'AphrontRequestTestCase' => 'aphront/__tests__/AphrontRequestTestCase.php',
     'AphrontResponse' => 'aphront/response/AphrontResponse.php',
     'AphrontScopedUnguardedWriteCapability' => 'aphront/writeguard/AphrontScopedUnguardedWriteCapability.php',
     'AphrontSideNavFilterView' => 'view/layout/AphrontSideNavFilterView.php',
     'AphrontSideNavView' => 'view/layout/AphrontSideNavView.php',
     'AphrontTableView' => 'view/control/AphrontTableView.php',
     'AphrontTokenizerTemplateView' => 'view/control/AphrontTokenizerTemplateView.php',
     'AphrontTypeaheadTemplateView' => 'view/control/AphrontTypeaheadTemplateView.php',
     'AphrontURIMapper' => 'aphront/AphrontURIMapper.php',
     'AphrontUsageException' => 'aphront/exception/AphrontUsageException.php',
     'AphrontView' => 'view/AphrontView.php',
     'AphrontWebpageResponse' => 'aphront/response/AphrontWebpageResponse.php',
     'AphrontWriteGuard' => 'aphront/writeguard/AphrontWriteGuard.php',
     'CelerityAPI' => 'infrastructure/celerity/CelerityAPI.php',
     'CelerityResourceController' => 'infrastructure/celerity/CelerityResourceController.php',
     'CelerityResourceGraph' => 'infrastructure/celerity/CelerityResourceGraph.php',
     'CelerityResourceMap' => 'infrastructure/celerity/CelerityResourceMap.php',
     'CelerityResourceTransformer' => 'infrastructure/celerity/CelerityResourceTransformer.php',
     'CelerityResourceTransformerTestCase' => 'infrastructure/celerity/__tests__/CelerityResourceTransformerTestCase.php',
     'CelerityStaticResourceResponse' => 'infrastructure/celerity/CelerityStaticResourceResponse.php',
     'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php',
     'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php',
     'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php',
     'ConduitAPI_arcanist_Method' => 'applications/conduit/method/arcanist/ConduitAPI_arcanist_Method.php',
     'ConduitAPI_arcanist_projectinfo_Method' => 'applications/conduit/method/arcanist/ConduitAPI_arcanist_projectinfo_Method.php',
     'ConduitAPI_audit_Method' => 'applications/conduit/method/audit/ConduitAPI_audit_Method.php',
     'ConduitAPI_audit_query_Method' => 'applications/conduit/method/audit/ConduitAPI_audit_query_Method.php',
     'ConduitAPI_chatlog_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_Method.php',
     'ConduitAPI_chatlog_query_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_query_Method.php',
     'ConduitAPI_chatlog_record_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_record_Method.php',
     'ConduitAPI_conduit_connect_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_connect_Method.php',
     'ConduitAPI_conduit_getcertificate_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_getcertificate_Method.php',
     'ConduitAPI_conduit_ping_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_ping_Method.php',
     'ConduitAPI_daemon_launched_Method' => 'applications/conduit/method/daemon/ConduitAPI_daemon_launched_Method.php',
     'ConduitAPI_daemon_log_Method' => 'applications/conduit/method/daemon/ConduitAPI_daemon_log_Method.php',
     'ConduitAPI_differential_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_Method.php',
     'ConduitAPI_differential_close_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_close_Method.php',
     'ConduitAPI_differential_createcomment_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createcomment_Method.php',
     'ConduitAPI_differential_creatediff_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_creatediff_Method.php',
     'ConduitAPI_differential_createinline_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createinline_Method.php',
     'ConduitAPI_differential_createrawdiff_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createrawdiff_Method.php',
     'ConduitAPI_differential_createrevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createrevision_Method.php',
     'ConduitAPI_differential_find_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_find_Method.php',
     'ConduitAPI_differential_finishpostponedlinters_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_finishpostponedlinters_Method.php',
     'ConduitAPI_differential_getalldiffs_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getalldiffs_Method.php',
     'ConduitAPI_differential_getcommitmessage_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getcommitmessage_Method.php',
     'ConduitAPI_differential_getcommitpaths_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getcommitpaths_Method.php',
     'ConduitAPI_differential_getdiff_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getdiff_Method.php',
     'ConduitAPI_differential_getrevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevision_Method.php',
     'ConduitAPI_differential_getrevisioncomments_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php',
     'ConduitAPI_differential_getrevisionfeedback_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevisionfeedback_Method.php',
     'ConduitAPI_differential_markcommitted_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_markcommitted_Method.php',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_parsecommitmessage_Method.php',
     'ConduitAPI_differential_query_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_query_Method.php',
     'ConduitAPI_differential_setdiffproperty_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_setdiffproperty_Method.php',
     'ConduitAPI_differential_updaterevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updaterevision_Method.php',
     'ConduitAPI_differential_updatetaskrevisionassoc_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updatetaskrevisionassoc_Method.php',
     'ConduitAPI_differential_updateunitresults_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updateunitresults_Method.php',
     'ConduitAPI_diffusion_findsymbols_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_findsymbols_Method.php',
     'ConduitAPI_diffusion_getcommits_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_getcommits_Method.php',
     'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_getrecentcommitsbypath_Method.php',
     'ConduitAPI_feed_publish_Method' => 'applications/conduit/method/feed/ConduitAPI_feed_publish_Method.php',
     'ConduitAPI_feed_query_Method' => 'applications/conduit/method/feed/ConduitAPI_feed_query_Method.php',
     'ConduitAPI_file_download_Method' => 'applications/conduit/method/file/ConduitAPI_file_download_Method.php',
     'ConduitAPI_file_info_Method' => 'applications/conduit/method/file/ConduitAPI_file_info_Method.php',
     'ConduitAPI_file_upload_Method' => 'applications/conduit/method/file/ConduitAPI_file_upload_Method.php',
     'ConduitAPI_flag_Method' => 'applications/conduit/method/flag/ConduitAPI_flag_Method.php',
     'ConduitAPI_flag_query_Method' => 'applications/conduit/method/flag/ConduitAPI_flag_query_Method.php',
     'ConduitAPI_macro_Method' => 'applications/conduit/method/macro/ConduitAPI_macro_Method.php',
     'ConduitAPI_macro_query_Method' => 'applications/conduit/method/macro/ConduitAPI_macro_query_Method.php',
     'ConduitAPI_maniphest_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_Method.php',
     'ConduitAPI_maniphest_createtask_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_createtask_Method.php',
     'ConduitAPI_maniphest_find_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_find_Method.php',
     'ConduitAPI_maniphest_gettasktransactions_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_gettasktransactions_Method.php',
     'ConduitAPI_maniphest_info_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_info_Method.php',
     'ConduitAPI_maniphest_query_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_query_Method.php',
     'ConduitAPI_maniphest_update_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_update_Method.php',
     'ConduitAPI_owners_query_Method' => 'applications/conduit/method/owners/ConduitAPI_owners_query_Method.php',
     'ConduitAPI_paste_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_Method.php',
     'ConduitAPI_paste_create_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_create_Method.php',
     'ConduitAPI_paste_info_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_info_Method.php',
     'ConduitAPI_path_getowners_Method' => 'applications/conduit/method/path/ConduitAPI_path_getowners_Method.php',
     'ConduitAPI_phid_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_Method.php',
     'ConduitAPI_phid_info_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_info_Method.php',
     'ConduitAPI_phid_query_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_query_Method.php',
     'ConduitAPI_phriction_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_Method.php',
     'ConduitAPI_phriction_edit_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_edit_Method.php',
     'ConduitAPI_phriction_history_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_history_Method.php',
     'ConduitAPI_phriction_info_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_info_Method.php',
     'ConduitAPI_project_Method' => 'applications/conduit/method/project/ConduitAPI_project_Method.php',
     'ConduitAPI_project_query_Method' => 'applications/conduit/method/project/ConduitAPI_project_query_Method.php',
     'ConduitAPI_remarkup_process_Method' => 'applications/conduit/method/remarkup/ConduitAPI_remarkup_process_Method.php',
     'ConduitAPI_repository_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_Method.php',
     'ConduitAPI_repository_create_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_create_Method.php',
     'ConduitAPI_repository_query_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_query_Method.php',
     'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/ConduitAPI_slowvote_info_Method.php',
     'ConduitAPI_user_Method' => 'applications/conduit/method/user/ConduitAPI_user_Method.php',
     'ConduitAPI_user_addstatus_Method' => 'applications/conduit/method/user/ConduitAPI_user_addstatus_Method.php',
     'ConduitAPI_user_disable_Method' => 'applications/conduit/method/user/ConduitAPI_user_disable_Method.php',
     'ConduitAPI_user_enable_Method' => 'applications/conduit/method/user/ConduitAPI_user_enable_Method.php',
     'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/ConduitAPI_user_find_Method.php',
     'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/ConduitAPI_user_info_Method.php',
     'ConduitAPI_user_query_Method' => 'applications/conduit/method/user/ConduitAPI_user_query_Method.php',
     'ConduitAPI_user_removestatus_Method' => 'applications/conduit/method/user/ConduitAPI_user_removestatus_Method.php',
     'ConduitAPI_user_whoami_Method' => 'applications/conduit/method/user/ConduitAPI_user_whoami_Method.php',
     'ConduitCall' => 'applications/conduit/call/ConduitCall.php',
     'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
     'ConduitException' => 'applications/conduit/protocol/ConduitException.php',
     'DarkConsoleConfigPlugin' => 'aphront/console/plugin/DarkConsoleConfigPlugin.php',
     'DarkConsoleController' => 'aphront/console/DarkConsoleController.php',
     'DarkConsoleCore' => 'aphront/console/DarkConsoleCore.php',
     'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/DarkConsoleErrorLogPlugin.php',
     'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php',
     'DarkConsoleEventPlugin' => 'aphront/console/plugin/DarkConsoleEventPlugin.php',
     'DarkConsoleEventPluginAPI' => 'aphront/console/plugin/event/DarkConsoleEventPluginAPI.php',
     'DarkConsolePlugin' => 'aphront/console/plugin/DarkConsolePlugin.php',
     'DarkConsoleRequestPlugin' => 'aphront/console/plugin/DarkConsoleRequestPlugin.php',
     'DarkConsoleServicesPlugin' => 'aphront/console/plugin/DarkConsoleServicesPlugin.php',
     'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/DarkConsoleXHProfPlugin.php',
     'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php',
     'DatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DatabaseConfigurationProvider.php',
     'DefaultDatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php',
     'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php',
     'DifferentialActionHasNoEffectException' => 'applications/differential/exception/DifferentialActionHasNoEffectException.php',
     'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php',
     'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php',
     'DifferentialApplyPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php',
     'DifferentialArcanistProjectFieldSpecification' => 'applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php',
     'DifferentialAuditorsFieldSpecification' => 'applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php',
     'DifferentialAuthorFieldSpecification' => 'applications/differential/field/specification/DifferentialAuthorFieldSpecification.php',
     'DifferentialAuxiliaryField' => 'applications/differential/storage/DifferentialAuxiliaryField.php',
     'DifferentialBlameRevisionFieldSpecification' => 'applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php',
     'DifferentialBranchFieldSpecification' => 'applications/differential/field/specification/DifferentialBranchFieldSpecification.php',
     'DifferentialCCWelcomeMail' => 'applications/differential/mail/DifferentialCCWelcomeMail.php',
     'DifferentialCCsFieldSpecification' => 'applications/differential/field/specification/DifferentialCCsFieldSpecification.php',
     'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php',
     'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php',
     'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php',
     'DifferentialChangesetListView' => 'applications/differential/view/DifferentialChangesetListView.php',
     'DifferentialChangesetParser' => 'applications/differential/parser/DifferentialChangesetParser.php',
     'DifferentialChangesetParserTestCase' => 'applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php',
     'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php',
     'DifferentialComment' => 'applications/differential/storage/DifferentialComment.php',
     'DifferentialCommentEditor' => 'applications/differential/editor/DifferentialCommentEditor.php',
     'DifferentialCommentMail' => 'applications/differential/mail/DifferentialCommentMail.php',
     'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php',
     'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php',
     'DifferentialCommitsFieldSpecification' => 'applications/differential/field/specification/DifferentialCommitsFieldSpecification.php',
     'DifferentialController' => 'applications/differential/controller/DifferentialController.php',
     'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php',
     'DifferentialDateCreatedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateCreatedFieldSpecification.php',
     'DifferentialDateModifiedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php',
     'DifferentialDefaultFieldSelector' => 'applications/differential/field/selector/DifferentialDefaultFieldSelector.php',
     'DifferentialDependenciesFieldSpecification' => 'applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php',
     'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php',
     'DifferentialDiffContentMail' => 'applications/differential/mail/DifferentialDiffContentMail.php',
     'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php',
     'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php',
     'DifferentialDiffTableOfContentsView' => 'applications/differential/view/DifferentialDiffTableOfContentsView.php',
     'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php',
     'DifferentialException' => 'applications/differential/exception/DifferentialException.php',
     'DifferentialExceptionMail' => 'applications/differential/mail/DifferentialExceptionMail.php',
     'DifferentialExportPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php',
     'DifferentialFieldDataNotAvailableException' => 'applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php',
     'DifferentialFieldParseException' => 'applications/differential/field/exception/DifferentialFieldParseException.php',
     'DifferentialFieldSelector' => 'applications/differential/field/selector/DifferentialFieldSelector.php',
     'DifferentialFieldSpecification' => 'applications/differential/field/specification/DifferentialFieldSpecification.php',
     'DifferentialFieldSpecificationIncompleteException' => 'applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php',
     'DifferentialFieldValidationException' => 'applications/differential/field/exception/DifferentialFieldValidationException.php',
     'DifferentialGitSVNIDFieldSpecification' => 'applications/differential/field/specification/DifferentialGitSVNIDFieldSpecification.php',
     'DifferentialHostFieldSpecification' => 'applications/differential/field/specification/DifferentialHostFieldSpecification.php',
     'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php',
     'DifferentialHunkTestCase' => 'applications/differential/storage/__tests__/DifferentialHunkTestCase.php',
     'DifferentialInlineComment' => 'applications/differential/storage/DifferentialInlineComment.php',
     'DifferentialInlineCommentEditController' => 'applications/differential/controller/DifferentialInlineCommentEditController.php',
     'DifferentialInlineCommentEditView' => 'applications/differential/view/DifferentialInlineCommentEditView.php',
     'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/DifferentialInlineCommentPreviewController.php',
     'DifferentialInlineCommentView' => 'applications/differential/view/DifferentialInlineCommentView.php',
     'DifferentialLinesFieldSpecification' => 'applications/differential/field/specification/DifferentialLinesFieldSpecification.php',
     'DifferentialLintFieldSpecification' => 'applications/differential/field/specification/DifferentialLintFieldSpecification.php',
     'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php',
     'DifferentialLocalCommitsView' => 'applications/differential/view/DifferentialLocalCommitsView.php',
     'DifferentialMail' => 'applications/differential/mail/DifferentialMail.php',
     'DifferentialMailPhase' => 'applications/differential/constants/DifferentialMailPhase.php',
     'DifferentialManiphestTasksFieldSpecification' => 'applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php',
     'DifferentialNewDiffMail' => 'applications/differential/mail/DifferentialNewDiffMail.php',
     'DifferentialPathFieldSpecification' => 'applications/differential/field/specification/DifferentialPathFieldSpecification.php',
     'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php',
     'DifferentialReplyHandler' => 'applications/differential/DifferentialReplyHandler.php',
     'DifferentialResultsTableView' => 'applications/differential/view/DifferentialResultsTableView.php',
     'DifferentialRevertPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php',
     'DifferentialReviewRequestMail' => 'applications/differential/mail/DifferentialReviewRequestMail.php',
     'DifferentialReviewedByFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php',
     'DifferentialReviewersFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewersFieldSpecification.php',
     'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php',
     'DifferentialRevisionCommentListView' => 'applications/differential/view/DifferentialRevisionCommentListView.php',
     'DifferentialRevisionCommentView' => 'applications/differential/view/DifferentialRevisionCommentView.php',
     'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php',
     'DifferentialRevisionDetailRenderer' => 'applications/differential/controller/DifferentialRevisionDetailRenderer.php',
     'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php',
     'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
     'DifferentialRevisionEditor' => 'applications/differential/editor/DifferentialRevisionEditor.php',
     'DifferentialRevisionIDFieldParserTestCase' => 'applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php',
     'DifferentialRevisionIDFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php',
     'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php',
     'DifferentialRevisionListData' => 'applications/differential/data/DifferentialRevisionListData.php',
     'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php',
     'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
     'DifferentialRevisionStatsController' => 'applications/differential/controller/DifferentialRevisionStatsController.php',
     'DifferentialRevisionStatsView' => 'applications/differential/view/DifferentialRevisionStatsView.php',
     'DifferentialRevisionStatusFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php',
     'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php',
     'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php',
     'DifferentialSubscribeController' => 'applications/differential/controller/DifferentialSubscribeController.php',
     'DifferentialSummaryFieldSpecification' => 'applications/differential/field/specification/DifferentialSummaryFieldSpecification.php',
     'DifferentialTasksAttacher' => 'applications/differential/DifferentialTasksAttacher.php',
     'DifferentialTestPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php',
     'DifferentialTitleFieldSpecification' => 'applications/differential/field/specification/DifferentialTitleFieldSpecification.php',
     'DifferentialUnitFieldSpecification' => 'applications/differential/field/specification/DifferentialUnitFieldSpecification.php',
     'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php',
     'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php',
     'DiffusionBranchInformation' => 'applications/diffusion/data/DiffusionBranchInformation.php',
     'DiffusionBranchQuery' => 'applications/diffusion/query/branch/DiffusionBranchQuery.php',
     'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php',
     'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php',
     'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php',
     'DiffusionBrowseFileController' => 'applications/diffusion/controller/DiffusionBrowseFileController.php',
     'DiffusionBrowseQuery' => 'applications/diffusion/query/browse/DiffusionBrowseQuery.php',
     'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php',
     'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php',
     'DiffusionCommentListView' => 'applications/diffusion/view/DiffusionCommentListView.php',
     'DiffusionCommentView' => 'applications/diffusion/view/DiffusionCommentView.php',
     'DiffusionCommitChangeTableView' => 'applications/diffusion/view/DiffusionCommitChangeTableView.php',
     'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php',
     'DiffusionCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionCommitParentsQuery.php',
     'DiffusionCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionCommitTagsQuery.php',
     'DiffusionContainsQuery' => 'applications/diffusion/query/contains/DiffusionContainsQuery.php',
     'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php',
     'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php',
     'DiffusionDiffQuery' => 'applications/diffusion/query/diff/DiffusionDiffQuery.php',
     'DiffusionEmptyResultView' => 'applications/diffusion/view/DiffusionEmptyResultView.php',
     'DiffusionExternalController' => 'applications/diffusion/controller/DiffusionExternalController.php',
     'DiffusionFileContent' => 'applications/diffusion/data/DiffusionFileContent.php',
     'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php',
     'DiffusionGitBranchQuery' => 'applications/diffusion/query/branch/DiffusionGitBranchQuery.php',
     'DiffusionGitBranchQueryTestCase' => 'applications/diffusion/query/branch/__tests__/DiffusionGitBranchQueryTestCase.php',
     'DiffusionGitBrowseQuery' => 'applications/diffusion/query/browse/DiffusionGitBrowseQuery.php',
     'DiffusionGitCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionGitCommitParentsQuery.php',
     'DiffusionGitCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionGitCommitTagsQuery.php',
     'DiffusionGitContainsQuery' => 'applications/diffusion/query/contains/DiffusionGitContainsQuery.php',
     'DiffusionGitDiffQuery' => 'applications/diffusion/query/diff/DiffusionGitDiffQuery.php',
     'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php',
     'DiffusionGitHistoryQuery' => 'applications/diffusion/query/history/DiffusionGitHistoryQuery.php',
     'DiffusionGitLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionGitLastModifiedQuery.php',
     'DiffusionGitMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionGitMergedCommitsQuery.php',
     'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php',
     'DiffusionGitRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionGitRenameHistoryQuery.php',
     'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php',
     'DiffusionGitTagListQuery' => 'applications/diffusion/query/taglist/DiffusionGitTagListQuery.php',
     'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php',
     'DiffusionHistoryQuery' => 'applications/diffusion/query/history/DiffusionHistoryQuery.php',
     'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php',
     'DiffusionHomeController' => 'applications/diffusion/controller/DiffusionHomeController.php',
     'DiffusionInlineCommentController' => 'applications/diffusion/controller/DiffusionInlineCommentController.php',
     'DiffusionLastModifiedController' => 'applications/diffusion/controller/DiffusionLastModifiedController.php',
     'DiffusionLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionLastModifiedQuery.php',
     'DiffusionMercurialBranchQuery' => 'applications/diffusion/query/branch/DiffusionMercurialBranchQuery.php',
     'DiffusionMercurialBrowseQuery' => 'applications/diffusion/query/browse/DiffusionMercurialBrowseQuery.php',
     'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php',
     'DiffusionMercurialCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionMercurialCommitTagsQuery.php',
     'DiffusionMercurialContainsQuery' => 'applications/diffusion/query/contains/DiffusionMercurialContainsQuery.php',
     'DiffusionMercurialDiffQuery' => 'applications/diffusion/query/diff/DiffusionMercurialDiffQuery.php',
     'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php',
     'DiffusionMercurialHistoryQuery' => 'applications/diffusion/query/history/DiffusionMercurialHistoryQuery.php',
     'DiffusionMercurialLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionMercurialLastModifiedQuery.php',
     'DiffusionMercurialMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMercurialMergedCommitsQuery.php',
     'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php',
     'DiffusionMercurialRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionMercurialRenameHistoryQuery.php',
     'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php',
     'DiffusionMercurialTagListQuery' => 'applications/diffusion/query/taglist/DiffusionMercurialTagListQuery.php',
     'DiffusionMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMergedCommitsQuery.php',
     'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php',
     'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php',
     'DiffusionPathCompleteController' => 'applications/diffusion/controller/DiffusionPathCompleteController.php',
     'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/DiffusionPathIDQuery.php',
     'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
     'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
     'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
     'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
     'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
     'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionRenameHistoryQuery.php',
     'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
     'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
     'DiffusionRepositoryTag' => 'applications/diffusion/DiffusionRepositoryTag.php',
     'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php',
     'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php',
     'DiffusionSvnBrowseQuery' => 'applications/diffusion/query/browse/DiffusionSvnBrowseQuery.php',
     'DiffusionSvnCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionSvnCommitParentsQuery.php',
     'DiffusionSvnCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionSvnCommitTagsQuery.php',
     'DiffusionSvnContainsQuery' => 'applications/diffusion/query/contains/DiffusionSvnContainsQuery.php',
     'DiffusionSvnDiffQuery' => 'applications/diffusion/query/diff/DiffusionSvnDiffQuery.php',
     'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php',
     'DiffusionSvnHistoryQuery' => 'applications/diffusion/query/history/DiffusionSvnHistoryQuery.php',
     'DiffusionSvnLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionSvnLastModifiedQuery.php',
     'DiffusionSvnMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionSvnMergedCommitsQuery.php',
     'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php',
     'DiffusionSvnRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionSvnRenameHistoryQuery.php',
     'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php',
     'DiffusionSvnTagListQuery' => 'applications/diffusion/query/taglist/DiffusionSvnTagListQuery.php',
     'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php',
     'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php',
     'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php',
     'DiffusionTagListQuery' => 'applications/diffusion/query/taglist/DiffusionTagListQuery.php',
     'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php',
     'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php',
     'DiffusionView' => 'applications/diffusion/view/DiffusionView.php',
     'DrydockAllocator' => 'applications/drydock/allocator/DrydockAllocator.php',
     'DrydockAllocatorWorker' => 'applications/drydock/allocator/DrydockAllocatorWorker.php',
     'DrydockApacheWebrootBlueprint' => 'applications/drydock/blueprint/webroot/DrydockApacheWebrootBlueprint.php',
     'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
     'DrydockBlueprint' => 'applications/drydock/blueprint/DrydockBlueprint.php',
     'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php',
     'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php',
     'DrydockController' => 'applications/drydock/controller/DrydockController.php',
     'DrydockDAO' => 'applications/drydock/storage/DrydockDAO.php',
     'DrydockEC2HostBlueprint' => 'applications/drydock/blueprint/DrydockEC2HostBlueprint.php',
     'DrydockInterface' => 'applications/drydock/interface/DrydockInterface.php',
     'DrydockLease' => 'applications/drydock/storage/DrydockLease.php',
     'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php',
     'DrydockLeaseStatus' => 'applications/drydock/constants/DrydockLeaseStatus.php',
     'DrydockLocalCommandInterface' => 'applications/drydock/interface/command/DrydockLocalCommandInterface.php',
     'DrydockLocalHostBlueprint' => 'applications/drydock/blueprint/DrydockLocalHostBlueprint.php',
     'DrydockLog' => 'applications/drydock/storage/DrydockLog.php',
     'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php',
     'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php',
     'DrydockPhabricatorApplicationBlueprint' => 'applications/drydock/blueprint/application/DrydockPhabricatorApplicationBlueprint.php',
     'DrydockRemoteHostBlueprint' => 'applications/drydock/blueprint/DrydockRemoteHostBlueprint.php',
     'DrydockResource' => 'applications/drydock/storage/DrydockResource.php',
     'DrydockResourceAllocateController' => 'applications/drydock/controller/DrydockResourceAllocateController.php',
     'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php',
     'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
     'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
     'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
     'HarbormasterDAO' => 'applications/harbormaster/storage/HarbormasterDAO.php',
     'HarbormasterObject' => 'applications/harbormaster/storage/HarbormasterObject.php',
     'HarbormasterScratchTable' => 'applications/harbormaster/storage/HarbormasterScratchTable.php',
     'HeraldAction' => 'applications/herald/storage/HeraldAction.php',
     'HeraldActionConfig' => 'applications/herald/config/HeraldActionConfig.php',
     'HeraldApplyTranscript' => 'applications/herald/storage/transcript/HeraldApplyTranscript.php',
     'HeraldCommitAdapter' => 'applications/herald/adapter/HeraldCommitAdapter.php',
     'HeraldCondition' => 'applications/herald/storage/HeraldCondition.php',
     'HeraldConditionConfig' => 'applications/herald/config/HeraldConditionConfig.php',
     'HeraldConditionTranscript' => 'applications/herald/storage/transcript/HeraldConditionTranscript.php',
     'HeraldContentTypeConfig' => 'applications/herald/config/HeraldContentTypeConfig.php',
     'HeraldController' => 'applications/herald/controller/HeraldController.php',
     'HeraldDAO' => 'applications/herald/storage/HeraldDAO.php',
     'HeraldDeleteController' => 'applications/herald/controller/HeraldDeleteController.php',
     'HeraldDifferentialRevisionAdapter' => 'applications/herald/adapter/HeraldDifferentialRevisionAdapter.php',
     'HeraldDryRunAdapter' => 'applications/herald/adapter/HeraldDryRunAdapter.php',
     'HeraldEditLogQuery' => 'applications/herald/query/HeraldEditLogQuery.php',
     'HeraldEffect' => 'applications/herald/engine/HeraldEffect.php',
     'HeraldEngine' => 'applications/herald/engine/HeraldEngine.php',
     'HeraldFieldConfig' => 'applications/herald/config/HeraldFieldConfig.php',
     'HeraldHomeController' => 'applications/herald/controller/HeraldHomeController.php',
     'HeraldInvalidConditionException' => 'applications/herald/engine/engine/HeraldInvalidConditionException.php',
     'HeraldInvalidFieldException' => 'applications/herald/engine/engine/HeraldInvalidFieldException.php',
     'HeraldNewController' => 'applications/herald/controller/HeraldNewController.php',
     'HeraldObjectAdapter' => 'applications/herald/adapter/HeraldObjectAdapter.php',
     'HeraldObjectTranscript' => 'applications/herald/storage/transcript/HeraldObjectTranscript.php',
     'HeraldRecursiveConditionsException' => 'applications/herald/engine/engine/HeraldRecursiveConditionsException.php',
     'HeraldRepetitionPolicyConfig' => 'applications/herald/config/HeraldRepetitionPolicyConfig.php',
     'HeraldRule' => 'applications/herald/storage/HeraldRule.php',
     'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php',
     'HeraldRuleEdit' => 'applications/herald/storage/HeraldRuleEdit.php',
     'HeraldRuleEditHistoryController' => 'applications/herald/controller/HeraldRuleEditHistoryController.php',
     'HeraldRuleEditHistoryView' => 'applications/herald/view/HeraldRuleEditHistoryView.php',
     'HeraldRuleListView' => 'applications/herald/view/HeraldRuleListView.php',
     'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
     'HeraldRuleTranscript' => 'applications/herald/storage/transcript/HeraldRuleTranscript.php',
     'HeraldRuleTypeConfig' => 'applications/herald/config/HeraldRuleTypeConfig.php',
     'HeraldTestConsoleController' => 'applications/herald/controller/HeraldTestConsoleController.php',
     'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php',
     'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php',
     'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php',
     'HeraldValueTypeConfig' => 'applications/herald/config/HeraldValueTypeConfig.php',
     'Javelin' => 'infrastructure/javelin/Javelin.php',
     'JavelinReactorExample' => 'applications/uiexample/examples/JavelinReactorExample.php',
     'JavelinViewExample' => 'applications/uiexample/examples/JavelinViewExample.php',
     'JavelinViewExampleServerView' => 'applications/uiexample/examples/JavelinViewExampleServerView.php',
     'LiskDAO' => 'infrastructure/storage/lisk/LiskDAO.php',
     'LiskDAOSet' => 'infrastructure/storage/lisk/LiskDAOSet.php',
     'LiskEphemeralObjectException' => 'infrastructure/storage/lisk/LiskEphemeralObjectException.php',
     'LiskFixtureTestCase' => 'infrastructure/storage/lisk/__tests__/LiskFixtureTestCase.php',
     'LiskIsolationTestCase' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestCase.php',
     'LiskIsolationTestDAO' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAO.php',
     'LiskIsolationTestDAOException' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAOException.php',
     'LiskMigrationIterator' => 'infrastructure/storage/lisk/LiskMigrationIterator.php',
     'ManiphestAction' => 'applications/maniphest/constants/ManiphestAction.php',
     'ManiphestAuxiliaryFieldDefaultSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldDefaultSpecification.php',
     'ManiphestAuxiliaryFieldSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldSpecification.php',
     'ManiphestAuxiliaryFieldTypeException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldTypeException.php',
     'ManiphestAuxiliaryFieldValidationException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldValidationException.php',
     'ManiphestBatchEditController' => 'applications/maniphest/controller/ManiphestBatchEditController.php',
     'ManiphestConstants' => 'applications/maniphest/constants/ManiphestConstants.php',
     'ManiphestController' => 'applications/maniphest/controller/ManiphestController.php',
     'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
     'ManiphestDefaultTaskExtensions' => 'applications/maniphest/extensions/ManiphestDefaultTaskExtensions.php',
     'ManiphestEdgeEventListener' => 'applications/maniphest/event/ManiphestEdgeEventListener.php',
     'ManiphestExportController' => 'applications/maniphest/controller/ManiphestExportController.php',
     'ManiphestReplyHandler' => 'applications/maniphest/ManiphestReplyHandler.php',
     'ManiphestReportController' => 'applications/maniphest/controller/ManiphestReportController.php',
     'ManiphestSavedQuery' => 'applications/maniphest/storage/ManiphestSavedQuery.php',
     'ManiphestSavedQueryDeleteController' => 'applications/maniphest/controller/ManiphestSavedQueryDeleteController.php',
     'ManiphestSavedQueryEditController' => 'applications/maniphest/controller/ManiphestSavedQueryEditController.php',
     'ManiphestSavedQueryListController' => 'applications/maniphest/controller/ManiphestSavedQueryListController.php',
     'ManiphestSubpriorityController' => 'applications/maniphest/controller/ManiphestSubpriorityController.php',
     'ManiphestTask' => 'applications/maniphest/storage/ManiphestTask.php',
     'ManiphestTaskAuxiliaryStorage' => 'applications/maniphest/storage/ManiphestTaskAuxiliaryStorage.php',
     'ManiphestTaskDescriptionChangeController' => 'applications/maniphest/controller/ManiphestTaskDescriptionChangeController.php',
     'ManiphestTaskDescriptionPreviewController' => 'applications/maniphest/controller/ManiphestTaskDescriptionPreviewController.php',
     'ManiphestTaskDetailController' => 'applications/maniphest/controller/ManiphestTaskDetailController.php',
     'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
     'ManiphestTaskExtensions' => 'applications/maniphest/extensions/ManiphestTaskExtensions.php',
     'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php',
     'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php',
     'ManiphestTaskOwner' => 'applications/maniphest/constants/ManiphestTaskOwner.php',
     'ManiphestTaskPriority' => 'applications/maniphest/constants/ManiphestTaskPriority.php',
     'ManiphestTaskProject' => 'applications/maniphest/storage/ManiphestTaskProject.php',
     'ManiphestTaskProjectsView' => 'applications/maniphest/view/ManiphestTaskProjectsView.php',
     'ManiphestTaskQuery' => 'applications/maniphest/ManiphestTaskQuery.php',
     'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
     'ManiphestTaskSubscriber' => 'applications/maniphest/storage/ManiphestTaskSubscriber.php',
     'ManiphestTaskSummaryView' => 'applications/maniphest/view/ManiphestTaskSummaryView.php',
     'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php',
     'ManiphestTransactionDetailView' => 'applications/maniphest/view/ManiphestTransactionDetailView.php',
     'ManiphestTransactionEditor' => 'applications/maniphest/editor/ManiphestTransactionEditor.php',
     'ManiphestTransactionListView' => 'applications/maniphest/view/ManiphestTransactionListView.php',
     'ManiphestTransactionPreviewController' => 'applications/maniphest/controller/ManiphestTransactionPreviewController.php',
     'ManiphestTransactionSaveController' => 'applications/maniphest/controller/ManiphestTransactionSaveController.php',
     'ManiphestTransactionType' => 'applications/maniphest/constants/ManiphestTransactionType.php',
     'ManiphestView' => 'applications/maniphest/view/ManiphestView.php',
     'MetaMTAConstants' => 'applications/metamta/constants/MetaMTAConstants.php',
     'MetaMTANotificationType' => 'applications/metamta/constants/MetaMTANotificationType.php',
     'OwnersPackageReplyHandler' => 'applications/owners/OwnersPackageReplyHandler.php',
     'PackageCreateMail' => 'applications/owners/mail/PackageCreateMail.php',
     'PackageDeleteMail' => 'applications/owners/mail/PackageDeleteMail.php',
     'PackageMail' => 'applications/owners/mail/PackageMail.php',
     'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php',
     'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
     'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php',
     'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
     'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php',
     'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php',
     'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
     'PhabricatorAuditCommitListView' => 'applications/audit/view/PhabricatorAuditCommitListView.php',
     'PhabricatorAuditCommitQuery' => 'applications/audit/query/PhabricatorAuditCommitQuery.php',
     'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php',
     'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
     'PhabricatorAuditDAO' => 'applications/audit/storage/PhabricatorAuditDAO.php',
     'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
     'PhabricatorAuditListController' => 'applications/audit/controller/PhabricatorAuditListController.php',
     'PhabricatorAuditListView' => 'applications/audit/view/PhabricatorAuditListView.php',
     'PhabricatorAuditPreviewController' => 'applications/audit/controller/PhabricatorAuditPreviewController.php',
     'PhabricatorAuditQuery' => 'applications/audit/query/PhabricatorAuditQuery.php',
     'PhabricatorAuditReplyHandler' => 'applications/audit/PhabricatorAuditReplyHandler.php',
     'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php',
     'PhabricatorAuthController' => 'applications/auth/controller/PhabricatorAuthController.php',
     'PhabricatorBaseEnglishTranslation' => 'infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php',
     'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php',
     'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php',
     'PhabricatorCalendarBrowseController' => 'applications/calendar/controller/PhabricatorCalendarBrowseController.php',
     'PhabricatorCalendarController' => 'applications/calendar/controller/PhabricatorCalendarController.php',
     'PhabricatorCalendarDAO' => 'applications/calendar/storage/PhabricatorCalendarDAO.php',
     'PhabricatorCalendarHoliday' => 'applications/calendar/storage/PhabricatorCalendarHoliday.php',
     'PhabricatorCalendarHolidayTestCase' => 'applications/calendar/storage/__tests__/PhabricatorCalendarHolidayTestCase.php',
     'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php',
     'PhabricatorChatLogChannelListController' => 'applications/chatlog/controller/PhabricatorChatLogChannelListController.php',
     'PhabricatorChatLogChannelLogController' => 'applications/chatlog/controller/PhabricatorChatLogChannelLogController.php',
     'PhabricatorChatLogConstants' => 'applications/chatlog/constants/PhabricatorChatLogConstants.php',
     'PhabricatorChatLogController' => 'applications/chatlog/controller/PhabricatorChatLogController.php',
     'PhabricatorChatLogDAO' => 'applications/chatlog/storage/PhabricatorChatLogDAO.php',
     'PhabricatorChatLogEvent' => 'applications/chatlog/storage/PhabricatorChatLogEvent.php',
     'PhabricatorChatLogEventType' => 'applications/chatlog/constants/PhabricatorChatLogEventType.php',
     'PhabricatorChatLogQuery' => 'applications/chatlog/PhabricatorChatLogQuery.php',
     'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php',
     'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php',
     'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/PhabricatorConduitConnectionLog.php',
     'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
     'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
     'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
     'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
     'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
     'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/PhabricatorConduitMethodCallLog.php',
     'PhabricatorConduitTokenController' => 'applications/conduit/controller/PhabricatorConduitTokenController.php',
     'PhabricatorContentSource' => 'applications/metamta/contentsource/PhabricatorContentSource.php',
     'PhabricatorContentSourceView' => 'applications/metamta/contentsource/PhabricatorContentSourceView.php',
     'PhabricatorController' => 'applications/base/controller/PhabricatorController.php',
     'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php',
     'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php',
     'PhabricatorCountdownDeleteController' => 'applications/countdown/controller/PhabricatorCountdownDeleteController.php',
     'PhabricatorCountdownEditController' => 'applications/countdown/controller/PhabricatorCountdownEditController.php',
     'PhabricatorCountdownListController' => 'applications/countdown/controller/PhabricatorCountdownListController.php',
     'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php',
     'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php',
     'PhabricatorDaemonCombinedLogController' => 'applications/daemon/controller/PhabricatorDaemonCombinedLogController.php',
     'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/PhabricatorDaemonConsoleController.php',
     'PhabricatorDaemonControl' => 'infrastructure/daemon/PhabricatorDaemonControl.php',
     'PhabricatorDaemonController' => 'applications/daemon/controller/PhabricatorDaemonController.php',
     'PhabricatorDaemonDAO' => 'infrastructure/daemon/storage/PhabricatorDaemonDAO.php',
     'PhabricatorDaemonLog' => 'infrastructure/daemon/storage/PhabricatorDaemonLog.php',
     'PhabricatorDaemonLogEvent' => 'infrastructure/daemon/storage/PhabricatorDaemonLogEvent.php',
     'PhabricatorDaemonLogEventsView' => 'applications/daemon/view/PhabricatorDaemonLogEventsView.php',
     'PhabricatorDaemonLogListController' => 'applications/daemon/controller/PhabricatorDaemonLogListController.php',
     'PhabricatorDaemonLogListView' => 'applications/daemon/view/PhabricatorDaemonLogListView.php',
     'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/PhabricatorDaemonLogViewController.php',
     'PhabricatorDaemonReference' => 'infrastructure/daemon/control/PhabricatorDaemonReference.php',
     'PhabricatorDaemonTimelineConsoleController' => 'applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php',
     'PhabricatorDaemonTimelineEventController' => 'applications/daemon/controller/PhabricatorDaemonTimelineEventController.php',
     'PhabricatorDefaultFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorDefaultFileStorageEngineSelector.php',
     'PhabricatorDefaultSearchEngineSelector' => 'applications/search/selector/PhabricatorDefaultSearchEngineSelector.php',
     'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php',
     'PhabricatorDirectoryController' => 'applications/directory/controller/PhabricatorDirectoryController.php',
     'PhabricatorDirectoryMainController' => 'applications/directory/controller/PhabricatorDirectoryMainController.php',
     'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php',
     'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php',
     'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php',
     'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php',
     'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php',
     'PhabricatorEdgeCycleException' => 'infrastructure/edges/exception/PhabricatorEdgeCycleException.php',
     'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php',
     'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php',
     'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php',
     'PhabricatorEdgeTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeTestCase.php',
     'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php',
     'PhabricatorEmailTokenController' => 'applications/auth/controller/PhabricatorEmailTokenController.php',
     'PhabricatorEmailVerificationController' => 'applications/people/controller/PhabricatorEmailVerificationController.php',
     'PhabricatorEnglishTranslation' => 'infrastructure/internationalization/PhabricatorEnglishTranslation.php',
     'PhabricatorEnv' => 'infrastructure/PhabricatorEnv.php',
     'PhabricatorEnvTestCase' => 'infrastructure/__tests__/PhabricatorEnvTestCase.php',
     'PhabricatorErrorExample' => 'applications/uiexample/examples/PhabricatorErrorExample.php',
     'PhabricatorEvent' => 'infrastructure/events/PhabricatorEvent.php',
     'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php',
     'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php',
     'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php',
     'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php',
     'PhabricatorFeedConstants' => 'applications/feed/constants/PhabricatorFeedConstants.php',
     'PhabricatorFeedController' => 'applications/feed/controller/PhabricatorFeedController.php',
     'PhabricatorFeedDAO' => 'applications/feed/storage/PhabricatorFeedDAO.php',
     'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/PhabricatorFeedPublicStreamController.php',
     'PhabricatorFeedQuery' => 'applications/feed/PhabricatorFeedQuery.php',
     'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php',
     'PhabricatorFeedStoryAggregate' => 'applications/feed/story/PhabricatorFeedStoryAggregate.php',
     'PhabricatorFeedStoryAudit' => 'applications/feed/story/PhabricatorFeedStoryAudit.php',
     'PhabricatorFeedStoryCommit' => 'applications/feed/story/PhabricatorFeedStoryCommit.php',
     'PhabricatorFeedStoryData' => 'applications/feed/storage/PhabricatorFeedStoryData.php',
     'PhabricatorFeedStoryDifferential' => 'applications/feed/story/PhabricatorFeedStoryDifferential.php',
     'PhabricatorFeedStoryManiphest' => 'applications/feed/story/PhabricatorFeedStoryManiphest.php',
     'PhabricatorFeedStoryManiphestAggregate' => 'applications/feed/story/PhabricatorFeedStoryManiphestAggregate.php',
     'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php',
     'PhabricatorFeedStoryPhriction' => 'applications/feed/story/PhabricatorFeedStoryPhriction.php',
     'PhabricatorFeedStoryProject' => 'applications/feed/story/PhabricatorFeedStoryProject.php',
     'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php',
     'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
     'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php',
     'PhabricatorFeedStoryTypeConstants' => 'applications/feed/constants/PhabricatorFeedStoryTypeConstants.php',
     'PhabricatorFeedStoryUnknown' => 'applications/feed/story/PhabricatorFeedStoryUnknown.php',
     'PhabricatorFeedStoryView' => 'applications/feed/view/PhabricatorFeedStoryView.php',
     'PhabricatorFeedView' => 'applications/feed/view/PhabricatorFeedView.php',
     'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
     'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
     'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
     'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php',
     'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
     'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
     'PhabricatorFileImageMacro' => 'applications/files/storage/PhabricatorFileImageMacro.php',
     'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php',
     'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php',
     'PhabricatorFileMacroDeleteController' => 'applications/files/controller/PhabricatorFileMacroDeleteController.php',
     'PhabricatorFileMacroEditController' => 'applications/files/controller/PhabricatorFileMacroEditController.php',
     'PhabricatorFileMacroListController' => 'applications/files/controller/PhabricatorFileMacroListController.php',
     'PhabricatorFileProxyController' => 'applications/files/controller/PhabricatorFileProxyController.php',
     'PhabricatorFileProxyImage' => 'applications/files/storage/PhabricatorFileProxyImage.php',
     'PhabricatorFileShortcutController' => 'applications/files/controller/PhabricatorFileShortcutController.php',
     'PhabricatorFileSideNavView' => 'applications/files/view/PhabricatorFileSideNavView.php',
     'PhabricatorFileStorageBlob' => 'applications/files/storage/PhabricatorFileStorageBlob.php',
     'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php',
     'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php',
     'PhabricatorFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorFileStorageEngineSelector.php',
     'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php',
     'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php',
     'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php',
     'PhabricatorFileUploadView' => 'applications/files/view/PhabricatorFileUploadView.php',
     'PhabricatorFlag' => 'applications/flag/storage/PhabricatorFlag.php',
     'PhabricatorFlagColor' => 'applications/flag/constants/PhabricatorFlagColor.php',
     'PhabricatorFlagConstants' => 'applications/flag/constants/PhabricatorFlagConstants.php',
     'PhabricatorFlagController' => 'applications/flag/controller/PhabricatorFlagController.php',
     'PhabricatorFlagDAO' => 'applications/flag/storage/PhabricatorFlagDAO.php',
     'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php',
     'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php',
     'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php',
     'PhabricatorFlagListView' => 'applications/flag/view/PhabricatorFlagListView.php',
     'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php',
     'PhabricatorFormExample' => 'applications/uiexample/examples/PhabricatorFormExample.php',
     'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/PhabricatorGarbageCollectorDaemon.php',
     'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
     'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php',
     'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/PhabricatorGoodForNothingWorker.php',
     'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
     'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
     'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
     'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
     'PhabricatorIDPagedPolicyQuery' => 'infrastructure/query/policy/PhabricatorIDPagedPolicyQuery.php',
     'PhabricatorIRCBot' => 'infrastructure/daemon/irc/PhabricatorIRCBot.php',
     'PhabricatorIRCDifferentialNotificationHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCDifferentialNotificationHandler.php',
     'PhabricatorIRCHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCHandler.php',
     'PhabricatorIRCLogHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCLogHandler.php',
     'PhabricatorIRCMacroHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCMacroHandler.php',
     'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/PhabricatorIRCMessage.php',
     'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCObjectNameHandler.php',
     'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCProtocolHandler.php',
     'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCWhatsNewHandler.php',
     'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
     'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php',
     'PhabricatorInlineCommentController' => 'infrastructure/diff/PhabricatorInlineCommentController.php',
     'PhabricatorInlineCommentInterface' => 'infrastructure/diff/interface/PhabricatorInlineCommentInterface.php',
     'PhabricatorInlineSummaryView' => 'infrastructure/diff/view/PhabricatorInlineSummaryView.php',
     'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/PhabricatorJavelinLinter.php',
     'PhabricatorJumpNavHandler' => 'applications/search/engine/PhabricatorJumpNavHandler.php',
     'PhabricatorLDAPLoginController' => 'applications/auth/controller/PhabricatorLDAPLoginController.php',
     'PhabricatorLDAPProvider' => 'applications/auth/ldap/PhabricatorLDAPProvider.php',
     'PhabricatorLDAPRegistrationController' => 'applications/auth/controller/PhabricatorLDAPRegistrationController.php',
     'PhabricatorLDAPUnlinkController' => 'applications/auth/controller/PhabricatorLDAPUnlinkController.php',
     'PhabricatorLintEngine' => 'infrastructure/lint/PhabricatorLintEngine.php',
     'PhabricatorLiskDAO' => 'infrastructure/storage/lisk/PhabricatorLiskDAO.php',
     'PhabricatorLocalDiskFileStorageEngine' => 'applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php',
     'PhabricatorLocalTimeTestCase' => 'view/__tests__/PhabricatorLocalTimeTestCase.php',
     'PhabricatorLoginController' => 'applications/auth/controller/PhabricatorLoginController.php',
     'PhabricatorLoginValidateController' => 'applications/auth/controller/PhabricatorLoginValidateController.php',
     'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php',
     'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php',
     'PhabricatorMailImplementationSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationSendGridAdapter.php',
     'PhabricatorMailImplementationTestAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationTestAdapter.php',
     'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php',
     'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
     'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
     'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
     'PhabricatorMercurialGraphStream' => 'applications/repository/daemon/PhabricatorMercurialGraphStream.php',
     'PhabricatorMetaMTAAttachment' => 'applications/metamta/storage/PhabricatorMetaMTAAttachment.php',
     'PhabricatorMetaMTAController' => 'applications/metamta/controller/PhabricatorMetaMTAController.php',
     'PhabricatorMetaMTADAO' => 'applications/metamta/storage/PhabricatorMetaMTADAO.php',
     'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/PhabricatorMetaMTAEmailBodyParser.php',
     'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php',
     'PhabricatorMetaMTAListController' => 'applications/metamta/controller/PhabricatorMetaMTAListController.php',
     'PhabricatorMetaMTAMail' => 'applications/metamta/storage/PhabricatorMetaMTAMail.php',
     'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php',
     'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php',
     'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php',
     'PhabricatorMetaMTAMailingList' => 'applications/metamta/storage/PhabricatorMetaMTAMailingList.php',
     'PhabricatorMetaMTAMailingListEditController' => 'applications/metamta/controller/PhabricatorMetaMTAMailingListEditController.php',
     'PhabricatorMetaMTAMailingListsController' => 'applications/metamta/controller/PhabricatorMetaMTAMailingListsController.php',
     'PhabricatorMetaMTAReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAReceiveController.php',
     'PhabricatorMetaMTAReceivedListController' => 'applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php',
     'PhabricatorMetaMTAReceivedMail' => 'applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php',
     'PhabricatorMetaMTASendController' => 'applications/metamta/controller/PhabricatorMetaMTASendController.php',
     'PhabricatorMetaMTASendGridReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php',
     'PhabricatorMetaMTAViewController' => 'applications/metamta/controller/PhabricatorMetaMTAViewController.php',
     'PhabricatorMetaMTAWorker' => 'applications/metamta/PhabricatorMetaMTAWorker.php',
     'PhabricatorMustVerifyEmailController' => 'applications/auth/controller/PhabricatorMustVerifyEmailController.php',
     'PhabricatorMySQLFileStorageEngine' => 'applications/files/engine/PhabricatorMySQLFileStorageEngine.php',
     'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php',
     'PhabricatorNotificationClearController' => 'applications/notification/controller/PhabricatorNotificationClearController.php',
     'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php',
     'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php',
     'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php',
     'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
     'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php',
     'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
     'PhabricatorNotificationStoryView' => 'applications/notification/view/PhabricatorNotificationStoryView.php',
     'PhabricatorNotificationView' => 'applications/notification/view/PhabricatorNotificationView.php',
     'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
     'PhabricatorOAuthClientAuthorizationBaseController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationBaseController.php',
     'PhabricatorOAuthClientAuthorizationDeleteController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationDeleteController.php',
     'PhabricatorOAuthClientAuthorizationEditController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationEditController.php',
     'PhabricatorOAuthClientAuthorizationListController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationListController.php',
     'PhabricatorOAuthClientAuthorizationQuery' => 'applications/oauthserver/query/PhabricatorOAuthClientAuthorizationQuery.php',
     'PhabricatorOAuthClientBaseController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientBaseController.php',
     'PhabricatorOAuthClientDeleteController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDeleteController.php',
     'PhabricatorOAuthClientEditController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientEditController.php',
     'PhabricatorOAuthClientListController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php',
     'PhabricatorOAuthClientViewController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientViewController.php',
     'PhabricatorOAuthDefaultRegistrationController' => 'applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php',
     'PhabricatorOAuthDiagnosticsController' => 'applications/auth/controller/PhabricatorOAuthDiagnosticsController.php',
     'PhabricatorOAuthFailureView' => 'applications/auth/view/PhabricatorOAuthFailureView.php',
     'PhabricatorOAuthLoginController' => 'applications/auth/controller/PhabricatorOAuthLoginController.php',
     'PhabricatorOAuthProvider' => 'applications/auth/oauth/provider/PhabricatorOAuthProvider.php',
     'PhabricatorOAuthProviderDisqus' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderDisqus.php',
     'PhabricatorOAuthProviderException' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderException.php',
     'PhabricatorOAuthProviderFacebook' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderFacebook.php',
     'PhabricatorOAuthProviderGitHub' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderGitHub.php',
     'PhabricatorOAuthProviderGoogle' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php',
     'PhabricatorOAuthProviderPhabricator' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderPhabricator.php',
     'PhabricatorOAuthRegistrationController' => 'applications/auth/controller/oauthregistration/PhabricatorOAuthRegistrationController.php',
     'PhabricatorOAuthResponse' => 'applications/oauthserver/PhabricatorOAuthResponse.php',
     'PhabricatorOAuthServer' => 'applications/oauthserver/PhabricatorOAuthServer.php',
     'PhabricatorOAuthServerAccessToken' => 'applications/oauthserver/storage/PhabricatorOAuthServerAccessToken.php',
     'PhabricatorOAuthServerAuthController' => 'applications/oauthserver/controller/PhabricatorOAuthServerAuthController.php',
     'PhabricatorOAuthServerAuthorizationCode' => 'applications/oauthserver/storage/PhabricatorOAuthServerAuthorizationCode.php',
     'PhabricatorOAuthServerClient' => 'applications/oauthserver/storage/PhabricatorOAuthServerClient.php',
     'PhabricatorOAuthServerClientQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerClientQuery.php',
     'PhabricatorOAuthServerController' => 'applications/oauthserver/controller/PhabricatorOAuthServerController.php',
     'PhabricatorOAuthServerDAO' => 'applications/oauthserver/storage/PhabricatorOAuthServerDAO.php',
     'PhabricatorOAuthServerScope' => 'applications/oauthserver/PhabricatorOAuthServerScope.php',
     'PhabricatorOAuthServerTestCase' => 'applications/oauthserver/__tests__/PhabricatorOAuthServerTestCase.php',
     'PhabricatorOAuthServerTestController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTestController.php',
     'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php',
     'PhabricatorOAuthUnlinkController' => 'applications/auth/controller/PhabricatorOAuthUnlinkController.php',
     'PhabricatorObjectAttachmentEditor' => 'applications/search/editor/PhabricatorObjectAttachmentEditor.php',
-    'PhabricatorObjectGraph' => 'applications/phid/PhabricatorObjectGraph.php',
     'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php',
     'PhabricatorObjectHandleConstants' => 'applications/phid/handle/const/PhabricatorObjectHandleConstants.php',
     'PhabricatorObjectHandleData' => 'applications/phid/handle/PhabricatorObjectHandleData.php',
     'PhabricatorObjectHandleStatus' => 'applications/phid/handle/const/PhabricatorObjectHandleStatus.php',
     'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
     'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
     'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php',
     'PhabricatorOwnersController' => 'applications/owners/controller/PhabricatorOwnersController.php',
     'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php',
     'PhabricatorOwnersDeleteController' => 'applications/owners/controller/PhabricatorOwnersDeleteController.php',
     'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php',
     'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php',
     'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php',
     'PhabricatorOwnersOwner' => 'applications/owners/storage/PhabricatorOwnersOwner.php',
     'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
     'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
     'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php',
     'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php',
     'PhabricatorPHIDController' => 'applications/phid/controller/PhabricatorPHIDController.php',
     'PhabricatorPHIDLookupController' => 'applications/phid/controller/PhabricatorPHIDLookupController.php',
     'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
     'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
     'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
     'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
     'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
     'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
     'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
     'PhabricatorPeopleEditController' => 'applications/people/controller/PhabricatorPeopleEditController.php',
     'PhabricatorPeopleLdapController' => 'applications/people/controller/PhabricatorPeopleLdapController.php',
     'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php',
     'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
     'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
     'PhabricatorPeopleQuery' => 'applications/people/PhabricatorPeopleQuery.php',
     'PhabricatorPolicies' => 'applications/policy/constants/PhabricatorPolicies.php',
     'PhabricatorPolicyCapability' => 'applications/policy/constants/PhabricatorPolicyCapability.php',
     'PhabricatorPolicyConstants' => 'applications/policy/constants/PhabricatorPolicyConstants.php',
     'PhabricatorPolicyException' => 'applications/policy/exception/PhabricatorPolicyException.php',
     'PhabricatorPolicyFilter' => 'applications/policy/filter/PhabricatorPolicyFilter.php',
     'PhabricatorPolicyInterface' => 'applications/policy/interface/PhabricatorPolicyInterface.php',
     'PhabricatorPolicyQuery' => 'infrastructure/query/policy/PhabricatorPolicyQuery.php',
     'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php',
     'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php',
     'PhabricatorPolicyTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyTestQuery.php',
     'PhabricatorProfileHeaderView' => 'view/layout/PhabricatorProfileHeaderView.php',
     'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php',
     'PhabricatorProjectAffiliation' => 'applications/project/storage/PhabricatorProjectAffiliation.php',
     'PhabricatorProjectConstants' => 'applications/project/constants/PhabricatorProjectConstants.php',
     'PhabricatorProjectController' => 'applications/project/controller/PhabricatorProjectController.php',
     'PhabricatorProjectCreateController' => 'applications/project/controller/PhabricatorProjectCreateController.php',
     'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php',
     'PhabricatorProjectEditor' => 'applications/project/editor/PhabricatorProjectEditor.php',
     'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
     'PhabricatorProjectNameCollisionException' => 'applications/project/exception/PhabricatorProjectNameCollisionException.php',
     'PhabricatorProjectProfile' => 'applications/project/storage/PhabricatorProjectProfile.php',
     'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php',
     'PhabricatorProjectProfileEditController' => 'applications/project/controller/PhabricatorProjectProfileEditController.php',
     'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php',
     'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php',
     'PhabricatorProjectSubproject' => 'applications/project/storage/PhabricatorProjectSubproject.php',
     'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
     'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php',
     'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
     'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
     'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
     'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
     'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleDifferential.php',
     'PhabricatorRemarkupRuleDifferentialHandle' => 'infrastructure/markup/rule/handle/PhabricatorRemarkupRuleDifferentialHandle.php',
     'PhabricatorRemarkupRuleDiffusion' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleDiffusion.php',
     'PhabricatorRemarkupRuleEmbedFile' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php',
     'PhabricatorRemarkupRuleImageMacro' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleImageMacro.php',
     'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleManiphest.php',
     'PhabricatorRemarkupRuleManiphestHandle' => 'infrastructure/markup/rule/handle/PhabricatorRemarkupRuleManiphestHandle.php',
     'PhabricatorRemarkupRuleMention' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleMention.php',
     'PhabricatorRemarkupRuleObjectHandle' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleObjectHandle.php',
     'PhabricatorRemarkupRuleObjectName' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleObjectName.php',
     'PhabricatorRemarkupRulePaste' => 'infrastructure/markup/rule/PhabricatorRemarkupRulePaste.php',
     'PhabricatorRemarkupRulePhriction' => 'infrastructure/markup/rule/PhabricatorRemarkupRulePhriction.php',
     'PhabricatorRemarkupRuleProxyImage' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleProxyImage.php',
     'PhabricatorRemarkupRuleYoutube' => 'infrastructure/markup/rule/PhabricatorRemarkupRuleYoutube.php',
     'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php',
     'PhabricatorRepositoryArcanistProject' => 'applications/repository/storage/PhabricatorRepositoryArcanistProject.php',
     'PhabricatorRepositoryArcanistProjectEditController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectEditController.php',
     'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php',
     'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php',
     'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php',
     'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php',
     'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php',
     'PhabricatorRepositoryCommitMessageDetailParser' => 'applications/repository/parser/PhabricatorRepositoryCommitMessageDetailParser.php',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php',
     'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php',
     'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php',
     'PhabricatorRepositoryController' => 'applications/repository/controller/PhabricatorRepositoryController.php',
     'PhabricatorRepositoryCreateController' => 'applications/repository/controller/PhabricatorRepositoryCreateController.php',
     'PhabricatorRepositoryDAO' => 'applications/repository/storage/PhabricatorRepositoryDAO.php',
     'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'applications/repository/parser/PhabricatorRepositoryDefaultCommitMessageDetailParser.php',
     'PhabricatorRepositoryDeleteController' => 'applications/repository/controller/PhabricatorRepositoryDeleteController.php',
     'PhabricatorRepositoryEditController' => 'applications/repository/controller/PhabricatorRepositoryEditController.php',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php',
     'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
     'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
     'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
     'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
     'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php',
     'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php',
     'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php',
     'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php',
     'PhabricatorRepositoryPullLocalDaemonTestCase' => 'applications/repository/daemon/__tests__/PhabricatorRepositoryPullLocalDaemonTestCase.php',
     'PhabricatorRepositoryShortcut' => 'applications/repository/storage/PhabricatorRepositoryShortcut.php',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php',
     'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php',
     'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php',
     'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php',
     'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php',
     'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php',
     'PhabricatorScopedEnv' => 'infrastructure/PhabricatorScopedEnv.php',
     'PhabricatorSearchAbstractDocument' => 'applications/search/index/PhabricatorSearchAbstractDocument.php',
     'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php',
     'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php',
     'PhabricatorSearchCommitIndexer' => 'applications/search/index/indexer/PhabricatorSearchCommitIndexer.php',
     'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php',
     'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php',
     'PhabricatorSearchDifferentialIndexer' => 'applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php',
     'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php',
     'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php',
     'PhabricatorSearchDocumentIndexer' => 'applications/search/index/indexer/PhabricatorSearchDocumentIndexer.php',
     'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php',
     'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php',
     'PhabricatorSearchEngineElastic' => 'applications/search/engine/PhabricatorSearchEngineElastic.php',
     'PhabricatorSearchEngineMySQL' => 'applications/search/engine/PhabricatorSearchEngineMySQL.php',
     'PhabricatorSearchEngineSelector' => 'applications/search/selector/PhabricatorSearchEngineSelector.php',
     'PhabricatorSearchField' => 'applications/search/constants/PhabricatorSearchField.php',
     'PhabricatorSearchIndexController' => 'applications/search/controller/PhabricatorSearchIndexController.php',
     'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/PhabricatorSearchManiphestIndexer.php',
     'PhabricatorSearchPhrictionIndexer' => 'applications/search/index/indexer/PhabricatorSearchPhrictionIndexer.php',
     'PhabricatorSearchQuery' => 'applications/search/storage/PhabricatorSearchQuery.php',
     'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
     'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
     'PhabricatorSearchScope' => 'applications/search/constants/PhabricatorSearchScope.php',
     'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
     'PhabricatorSearchUserIndexer' => 'applications/search/index/indexer/PhabricatorSearchUserIndexer.php',
     'PhabricatorSetup' => 'infrastructure/PhabricatorSetup.php',
     'PhabricatorSlowvoteChoice' => 'applications/slowvote/storage/PhabricatorSlowvoteChoice.php',
     'PhabricatorSlowvoteComment' => 'applications/slowvote/storage/PhabricatorSlowvoteComment.php',
     'PhabricatorSlowvoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteController.php',
     'PhabricatorSlowvoteCreateController' => 'applications/slowvote/controller/PhabricatorSlowvoteCreateController.php',
     'PhabricatorSlowvoteDAO' => 'applications/slowvote/storage/PhabricatorSlowvoteDAO.php',
     'PhabricatorSlowvoteListController' => 'applications/slowvote/controller/PhabricatorSlowvoteListController.php',
     'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php',
     'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php',
     'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php',
     'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
     'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
     'PhabricatorSortTableExample' => 'applications/uiexample/examples/PhabricatorSortTableExample.php',
     'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
     'PhabricatorStatusController' => 'applications/status/PhabricatorStatusController.php',
     'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
     'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php',
     'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php',
     'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php',
     'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php',
     'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php',
     'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementUpgradeWorkflow.php',
     'PhabricatorStorageManagementWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php',
     'PhabricatorStoragePatch' => 'infrastructure/storage/management/PhabricatorStoragePatch.php',
     'PhabricatorSymbolNameLinter' => 'infrastructure/lint/hook/PhabricatorSymbolNameLinter.php',
     'PhabricatorSyntaxHighlighter' => 'infrastructure/markup/PhabricatorSyntaxHighlighter.php',
     'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php',
     'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php',
     'PhabricatorTimelineCursor' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineCursor.php',
     'PhabricatorTimelineDAO' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineDAO.php',
     'PhabricatorTimelineEvent' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineEvent.php',
     'PhabricatorTimelineEventData' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineEventData.php',
     'PhabricatorTimelineIterator' => 'infrastructure/daemon/timeline/cursor/PhabricatorTimelineIterator.php',
     'PhabricatorTimer' => 'applications/countdown/storage/PhabricatorTimer.php',
     'PhabricatorTransactionView' => 'view/layout/PhabricatorTransactionView.php',
     'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
     'PhabricatorTranslation' => 'infrastructure/internationalization/PhabricatorTranslation.php',
     'PhabricatorTrivialTestCase' => 'infrastructure/testing/__tests__/PhabricatorTrivialTestCase.php',
     'PhabricatorTypeaheadCommonDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php',
     'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php',
     'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php',
     'PhabricatorUIExampleController' => 'applications/uiexample/controller/PhabricatorUIExampleController.php',
     'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php',
     'PhabricatorUIListFilterExample' => 'applications/uiexample/examples/PhabricatorUIListFilterExample.php',
     'PhabricatorUINotificationExample' => 'applications/uiexample/examples/PhabricatorUINotificationExample.php',
     'PhabricatorUIPagerExample' => 'applications/uiexample/examples/PhabricatorUIPagerExample.php',
     'PhabricatorUITooltipExample' => 'applications/uiexample/examples/PhabricatorUITooltipExample.php',
     'PhabricatorUnitsTestCase' => 'view/__tests__/PhabricatorUnitsTestCase.php',
     'PhabricatorUser' => 'applications/people/storage/PhabricatorUser.php',
     'PhabricatorUserAccountSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserAccountSettingsPanelController.php',
     'PhabricatorUserConduitSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserConduitSettingsPanelController.php',
     'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
     'PhabricatorUserEditor' => 'applications/people/PhabricatorUserEditor.php',
     'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
     'PhabricatorUserEmailPreferenceSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserEmailPreferenceSettingsPanelController.php',
     'PhabricatorUserEmailSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserEmailSettingsPanelController.php',
     'PhabricatorUserLDAPInfo' => 'applications/people/storage/PhabricatorUserLDAPInfo.php',
     'PhabricatorUserLDAPSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserLDAPSettingsPanelController.php',
     'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php',
     'PhabricatorUserOAuthInfo' => 'applications/people/storage/PhabricatorUserOAuthInfo.php',
     'PhabricatorUserOAuthSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserOAuthSettingsPanelController.php',
     'PhabricatorUserPasswordSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserPasswordSettingsPanelController.php',
     'PhabricatorUserPreferenceSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserPreferenceSettingsPanelController.php',
     'PhabricatorUserPreferences' => 'applications/people/storage/PhabricatorUserPreferences.php',
     'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
     'PhabricatorUserProfileSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserProfileSettingsPanelController.php',
     'PhabricatorUserSSHKey' => 'applications/people/storage/PhabricatorUserSSHKey.php',
     'PhabricatorUserSSHKeysSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSSHKeysSettingsPanelController.php',
     'PhabricatorUserSearchSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSearchSettingsPanelController.php',
     'PhabricatorUserSettingsController' => 'applications/people/controller/PhabricatorUserSettingsController.php',
     'PhabricatorUserSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSettingsPanelController.php',
     'PhabricatorUserStatus' => 'applications/people/storage/PhabricatorUserStatus.php',
     'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
     'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php',
     'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerDAO.php',
     'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php',
     'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTaskData.php',
     'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/PhabricatorWorkerTaskDetailController.php',
     'PhabricatorWorkerTaskUpdateController' => 'applications/daemon/controller/PhabricatorWorkerTaskUpdateController.php',
     'PhabricatorXHPASTViewController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewController.php',
     'PhabricatorXHPASTViewDAO' => 'applications/xhpastview/storage/PhabricatorXHPASTViewDAO.php',
     'PhabricatorXHPASTViewFrameController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewFrameController.php',
     'PhabricatorXHPASTViewFramesetController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewFramesetController.php',
     'PhabricatorXHPASTViewInputController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewInputController.php',
     'PhabricatorXHPASTViewPanelController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewPanelController.php',
     'PhabricatorXHPASTViewParseTree' => 'applications/xhpastview/storage/PhabricatorXHPASTViewParseTree.php',
     'PhabricatorXHPASTViewRunController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewRunController.php',
     'PhabricatorXHPASTViewStreamController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewStreamController.php',
     'PhabricatorXHPASTViewTreeController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewTreeController.php',
     'PhabricatorXHProfController' => 'applications/xhprof/controller/PhabricatorXHProfController.php',
     'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/PhabricatorXHProfProfileController.php',
     'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php',
     'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php',
     'PhabricatorXHProfProfileView' => 'applications/xhprof/view/PhabricatorXHProfProfileView.php',
     'PhameAllBloggersPostListController' => 'applications/phame/controller/post/list/PhameAllBloggersPostListController.php',
     'PhameBloggerPostListController' => 'applications/phame/controller/post/list/PhameBloggerPostListController.php',
     'PhameController' => 'applications/phame/controller/PhameController.php',
     'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
     'PhameDraftListController' => 'applications/phame/controller/post/list/PhameDraftListController.php',
     'PhamePost' => 'applications/phame/storage/PhamePost.php',
     'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
     'PhamePostDetailView' => 'applications/phame/view/PhamePostDetailView.php',
     'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
     'PhamePostListBaseController' => 'applications/phame/controller/post/list/PhamePostListBaseController.php',
     'PhamePostListView' => 'applications/phame/view/PhamePostListView.php',
     'PhamePostPreviewController' => 'applications/phame/controller/post/PhamePostPreviewController.php',
     'PhamePostQuery' => 'applications/phame/query/PhamePostQuery.php',
     'PhamePostViewController' => 'applications/phame/controller/post/PhamePostViewController.php',
     'PhameUserPostListController' => 'applications/phame/controller/post/list/PhameUserPostListController.php',
     'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
     'PhortuneStripeBaseController' => 'applications/phortune/stripe/controller/PhortuneStripeBaseController.php',
     'PhortuneStripePaymentFormView' => 'applications/phortune/stripe/view/PhortuneStripePaymentFormView.php',
     'PhortuneStripeTestPaymentFormController' => 'applications/phortune/stripe/controller/PhortuneStripeTestPaymentFormController.php',
     'PhrictionActionConstants' => 'applications/phriction/constants/PhrictionActionConstants.php',
     'PhrictionChangeType' => 'applications/phriction/constants/PhrictionChangeType.php',
     'PhrictionConstants' => 'applications/phriction/constants/PhrictionConstants.php',
     'PhrictionContent' => 'applications/phriction/storage/PhrictionContent.php',
     'PhrictionController' => 'applications/phriction/controller/PhrictionController.php',
     'PhrictionDAO' => 'applications/phriction/storage/PhrictionDAO.php',
     'PhrictionDeleteController' => 'applications/phriction/controller/PhrictionDeleteController.php',
     'PhrictionDiffController' => 'applications/phriction/controller/PhrictionDiffController.php',
     'PhrictionDocument' => 'applications/phriction/storage/PhrictionDocument.php',
     'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
     'PhrictionDocumentEditor' => 'applications/phriction/editor/PhrictionDocumentEditor.php',
     'PhrictionDocumentPreviewController' => 'applications/phriction/controller/PhrictionDocumentPreviewController.php',
     'PhrictionDocumentStatus' => 'applications/phriction/constants/PhrictionDocumentStatus.php',
     'PhrictionDocumentTestCase' => 'applications/phriction/storage/__tests__/PhrictionDocumentTestCase.php',
     'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
     'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
     'PhrictionListController' => 'applications/phriction/controller/PhrictionListController.php',
     'QueryFormattingTestCase' => 'infrastructure/storage/query/__tests__/QueryFormattingTestCase.php',
   ),
   'function' =>
   array(
     '_phabricator_date_format' => 'view/viewutils.php',
     '_qsprintf_check_scalar_type' => 'infrastructure/storage/query/qsprintf.php',
     '_qsprintf_check_type' => 'infrastructure/storage/query/qsprintf.php',
     'celerity_generate_unique_node_id' => 'infrastructure/celerity/api.php',
     'celerity_get_resource_uri' => 'infrastructure/celerity/api.php',
     'celerity_register_resource_map' => 'infrastructure/celerity/map.php',
     'javelin_render_tag' => 'infrastructure/javelin/markup.php',
     'phabricator_date' => 'view/viewutils.php',
     'phabricator_datetime' => 'view/viewutils.php',
     'phabricator_format_bytes' => 'view/viewutils.php',
     'phabricator_format_local_time' => 'view/viewutils.php',
     'phabricator_format_relative_time' => 'view/viewutils.php',
     'phabricator_format_relative_time_detailed' => 'view/viewutils.php',
     'phabricator_format_units_generic' => 'view/viewutils.php',
     'phabricator_on_relative_date' => 'view/viewutils.php',
     'phabricator_parse_bytes' => 'view/viewutils.php',
     'phabricator_relative_date' => 'view/viewutils.php',
     'phabricator_render_form' => 'infrastructure/javelin/markup.php',
     'phabricator_time' => 'view/viewutils.php',
     'phid_get_type' => 'applications/phid/utils.php',
     'phid_group_by_type' => 'applications/phid/utils.php',
     'qsprintf' => 'infrastructure/storage/query/qsprintf.php',
     'queryfx' => 'infrastructure/storage/query/queryfx.php',
     'queryfx_all' => 'infrastructure/storage/query/queryfx.php',
     'queryfx_one' => 'infrastructure/storage/query/queryfx.php',
     'require_celerity_resource' => 'infrastructure/celerity/api.php',
     'vqsprintf' => 'infrastructure/storage/query/qsprintf.php',
     'vqueryfx' => 'infrastructure/storage/query/queryfx.php',
     'vqueryfx_all' => 'infrastructure/storage/query/queryfx.php',
     'xsprintf_query' => 'infrastructure/storage/query/qsprintf.php',
   ),
   'xmap' =>
   array(
     'Aphront304Response' => 'AphrontResponse',
     'Aphront400Response' => 'AphrontResponse',
     'Aphront403Response' => 'AphrontWebpageResponse',
     'Aphront404Response' => 'AphrontWebpageResponse',
     'AphrontAjaxResponse' => 'AphrontResponse',
     'AphrontAttachedFileView' => 'AphrontView',
     'AphrontCSRFException' => 'AphrontException',
     'AphrontCalendarEventView' => 'AphrontView',
     'AphrontCalendarMonthView' => 'AphrontView',
     'AphrontContextBarView' => 'AphrontView',
     'AphrontCrumbsView' => 'AphrontView',
     'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
     'AphrontDialogResponse' => 'AphrontResponse',
     'AphrontDialogView' => 'AphrontView',
     'AphrontErrorView' => 'AphrontView',
     'AphrontException' => 'Exception',
     'AphrontFilePreviewView' => 'AphrontView',
     'AphrontFileResponse' => 'AphrontResponse',
     'AphrontFormCheckboxControl' => 'AphrontFormControl',
     'AphrontFormControl' => 'AphrontView',
     'AphrontFormDateControl' => 'AphrontFormControl',
     'AphrontFormDividerControl' => 'AphrontFormControl',
     'AphrontFormDragAndDropUploadControl' => 'AphrontFormControl',
     'AphrontFormFileControl' => 'AphrontFormControl',
     'AphrontFormImageControl' => 'AphrontFormControl',
     'AphrontFormInsetView' => 'AphrontView',
     'AphrontFormLayoutView' => 'AphrontView',
     'AphrontFormMarkupControl' => 'AphrontFormControl',
     'AphrontFormPasswordControl' => 'AphrontFormControl',
     'AphrontFormPolicyControl' => 'AphrontFormControl',
     'AphrontFormRadioButtonControl' => 'AphrontFormControl',
     'AphrontFormRecaptchaControl' => 'AphrontFormControl',
     'AphrontFormSelectControl' => 'AphrontFormControl',
     'AphrontFormStaticControl' => 'AphrontFormControl',
     'AphrontFormSubmitControl' => 'AphrontFormControl',
     'AphrontFormTextAreaControl' => 'AphrontFormControl',
     'AphrontFormTextControl' => 'AphrontFormControl',
     'AphrontFormToggleButtonsControl' => 'AphrontFormControl',
     'AphrontFormTokenizerControl' => 'AphrontFormControl',
     'AphrontFormView' => 'AphrontView',
     'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase',
     'AphrontHeadsupActionListView' => 'AphrontView',
     'AphrontHeadsupActionView' => 'AphrontView',
     'AphrontHeadsupView' => 'AphrontView',
     'AphrontIDPagerView' => 'AphrontView',
     'AphrontIsolatedDatabaseConnection' => 'AphrontDatabaseConnection',
     'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase',
     'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink',
     'AphrontJSONResponse' => 'AphrontResponse',
     'AphrontJavelinView' => 'AphrontView',
     'AphrontKeyboardShortcutsAvailableView' => 'AphrontView',
     'AphrontListFilterView' => 'AphrontView',
     'AphrontMiniPanelView' => 'AphrontView',
     'AphrontMoreView' => 'AphrontView',
     'AphrontMySQLDatabaseConnection' => 'AphrontMySQLDatabaseConnectionBase',
     'AphrontMySQLDatabaseConnectionBase' => 'AphrontDatabaseConnection',
     'AphrontMySQLDatabaseConnectionTestCase' => 'PhabricatorTestCase',
     'AphrontMySQLiDatabaseConnection' => 'AphrontMySQLDatabaseConnectionBase',
     'AphrontNullView' => 'AphrontView',
     'AphrontPHPHTTPSink' => 'AphrontHTTPSink',
     'AphrontPageView' => 'AphrontView',
     'AphrontPagerView' => 'AphrontView',
     'AphrontPanelView' => 'AphrontView',
     'AphrontPlainTextResponse' => 'AphrontResponse',
     'AphrontProxyResponse' => 'AphrontResponse',
     'AphrontQueryAccessDeniedException' => 'AphrontQueryRecoverableException',
     'AphrontQueryConnectionException' => 'AphrontQueryException',
     'AphrontQueryConnectionLostException' => 'AphrontQueryRecoverableException',
     'AphrontQueryCountException' => 'AphrontQueryException',
     'AphrontQueryDeadlockException' => 'AphrontQueryRecoverableException',
     'AphrontQueryDuplicateKeyException' => 'AphrontQueryException',
     'AphrontQueryException' => 'Exception',
     'AphrontQueryObjectMissingException' => 'AphrontQueryException',
     'AphrontQueryParameterException' => 'AphrontQueryException',
     'AphrontQueryRecoverableException' => 'AphrontQueryException',
     'AphrontQuerySchemaException' => 'AphrontQueryException',
     'AphrontRedirectException' => 'AphrontException',
     'AphrontRedirectResponse' => 'AphrontResponse',
     'AphrontReloadResponse' => 'AphrontRedirectResponse',
     'AphrontRequestFailureView' => 'AphrontView',
     'AphrontRequestTestCase' => 'PhabricatorTestCase',
     'AphrontSideNavFilterView' => 'AphrontView',
     'AphrontSideNavView' => 'AphrontView',
     'AphrontTableView' => 'AphrontView',
     'AphrontTokenizerTemplateView' => 'AphrontView',
     'AphrontTypeaheadTemplateView' => 'AphrontView',
     'AphrontUsageException' => 'AphrontException',
     'AphrontWebpageResponse' => 'AphrontResponse',
     'CelerityResourceController' => 'AphrontController',
     'CelerityResourceGraph' => 'AbstractDirectedGraph',
     'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase',
     'ConduitAPI_arcanist_Method' => 'ConduitAPIMethod',
     'ConduitAPI_arcanist_projectinfo_Method' => 'ConduitAPI_arcanist_Method',
     'ConduitAPI_audit_Method' => 'ConduitAPIMethod',
     'ConduitAPI_audit_query_Method' => 'ConduitAPI_audit_Method',
     'ConduitAPI_chatlog_Method' => 'ConduitAPIMethod',
     'ConduitAPI_chatlog_query_Method' => 'ConduitAPI_chatlog_Method',
     'ConduitAPI_chatlog_record_Method' => 'ConduitAPI_chatlog_Method',
     'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_getcertificate_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_ping_Method' => 'ConduitAPIMethod',
     'ConduitAPI_daemon_launched_Method' => 'ConduitAPIMethod',
     'ConduitAPI_daemon_log_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_close_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_createcomment_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_creatediff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_createinline_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_createrawdiff_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_createrevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_find_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_finishpostponedlinters_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getalldiffs_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getrevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getrevisioncomments_Method' => 'ConduitAPI_differential_Method',
     'ConduitAPI_differential_getrevisionfeedback_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_query_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updatetaskrevisionassoc_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updateunitresults_Method' => 'ConduitAPIMethod',
     'ConduitAPI_diffusion_findsymbols_Method' => 'ConduitAPIMethod',
     'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPIMethod',
     'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPIMethod',
     'ConduitAPI_feed_publish_Method' => 'ConduitAPIMethod',
     'ConduitAPI_feed_query_Method' => 'ConduitAPIMethod',
     'ConduitAPI_file_download_Method' => 'ConduitAPIMethod',
     'ConduitAPI_file_info_Method' => 'ConduitAPIMethod',
     'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod',
     'ConduitAPI_flag_Method' => 'ConduitAPIMethod',
     'ConduitAPI_flag_query_Method' => 'ConduitAPI_flag_Method',
     'ConduitAPI_macro_Method' => 'ConduitAPIMethod',
     'ConduitAPI_macro_query_Method' => 'ConduitAPI_macro_Method',
     'ConduitAPI_maniphest_Method' => 'ConduitAPIMethod',
     'ConduitAPI_maniphest_createtask_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_find_Method' => 'ConduitAPI_maniphest_query_Method',
     'ConduitAPI_maniphest_gettasktransactions_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_info_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_query_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_maniphest_update_Method' => 'ConduitAPI_maniphest_Method',
     'ConduitAPI_owners_query_Method' => 'ConduitAPIMethod',
     'ConduitAPI_paste_Method' => 'ConduitAPIMethod',
     'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method',
     'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method',
     'ConduitAPI_path_getowners_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phid_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phid_info_Method' => 'ConduitAPI_phid_Method',
     'ConduitAPI_phid_query_Method' => 'ConduitAPI_phid_Method',
     'ConduitAPI_phriction_Method' => 'ConduitAPIMethod',
     'ConduitAPI_phriction_edit_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_phriction_history_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_phriction_info_Method' => 'ConduitAPI_phriction_Method',
     'ConduitAPI_project_Method' => 'ConduitAPIMethod',
     'ConduitAPI_project_query_Method' => 'ConduitAPI_project_Method',
     'ConduitAPI_remarkup_process_Method' => 'ConduitAPIMethod',
     'ConduitAPI_repository_Method' => 'ConduitAPIMethod',
     'ConduitAPI_repository_create_Method' => 'ConduitAPI_repository_Method',
     'ConduitAPI_repository_query_Method' => 'ConduitAPI_repository_Method',
     'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod',
     'ConduitAPI_user_Method' => 'ConduitAPIMethod',
     'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_disable_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_enable_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_query_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method',
     'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method',
     'ConduitCallTestCase' => 'PhabricatorTestCase',
     'ConduitException' => 'Exception',
     'DarkConsoleConfigPlugin' => 'DarkConsolePlugin',
     'DarkConsoleController' => 'PhabricatorController',
     'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
     'DarkConsoleEventPlugin' => 'DarkConsolePlugin',
     'DarkConsoleEventPluginAPI' => 'PhutilEventListener',
     'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
     'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
     'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
     'DefaultDatabaseConfigurationProvider' => 'DatabaseConfigurationProvider',
     'DifferentialActionHasNoEffectException' => 'DifferentialException',
     'DifferentialAddCommentView' => 'AphrontView',
     'DifferentialAffectedPath' => 'DifferentialDAO',
     'DifferentialApplyPatchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialArcanistProjectFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuditorsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuthorFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialAuxiliaryField' => 'DifferentialDAO',
     'DifferentialBlameRevisionFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail',
     'DifferentialCCsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialChangeset' => 'DifferentialDAO',
     'DifferentialChangesetDetailView' => 'AphrontView',
     'DifferentialChangesetListView' => 'AphrontView',
     'DifferentialChangesetParserTestCase' => 'ArcanistPhutilTestCase',
     'DifferentialChangesetViewController' => 'DifferentialController',
     'DifferentialComment' => 'DifferentialDAO',
     'DifferentialCommentMail' => 'DifferentialMail',
     'DifferentialCommentPreviewController' => 'DifferentialController',
     'DifferentialCommentSaveController' => 'DifferentialController',
     'DifferentialCommitsFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialController' => 'PhabricatorController',
     'DifferentialDAO' => 'PhabricatorLiskDAO',
     'DifferentialDateCreatedFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDateModifiedFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDefaultFieldSelector' => 'DifferentialFieldSelector',
     'DifferentialDependenciesFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialDiff' => 'DifferentialDAO',
     'DifferentialDiffContentMail' => 'DifferentialMail',
     'DifferentialDiffCreateController' => 'DifferentialController',
     'DifferentialDiffProperty' => 'DifferentialDAO',
     'DifferentialDiffTableOfContentsView' => 'AphrontView',
     'DifferentialDiffViewController' => 'DifferentialController',
     'DifferentialException' => 'Exception',
     'DifferentialExceptionMail' => 'DifferentialMail',
     'DifferentialExportPatchFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialFieldDataNotAvailableException' => 'Exception',
     'DifferentialFieldParseException' => 'Exception',
     'DifferentialFieldSpecificationIncompleteException' => 'Exception',
     'DifferentialFieldValidationException' => 'Exception',
     'DifferentialGitSVNIDFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialHostFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialHunk' => 'DifferentialDAO',
     'DifferentialHunkTestCase' => 'ArcanistPhutilTestCase',
     'DifferentialInlineComment' =>
     array(
       0 => 'DifferentialDAO',
       1 => 'PhabricatorInlineCommentInterface',
     ),
     'DifferentialInlineCommentEditController' => 'PhabricatorInlineCommentController',
     'DifferentialInlineCommentEditView' => 'AphrontView',
     'DifferentialInlineCommentPreviewController' => 'DifferentialController',
     'DifferentialInlineCommentView' => 'AphrontView',
     'DifferentialLinesFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialLintFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialLocalCommitsView' => 'AphrontView',
     'DifferentialManiphestTasksFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail',
     'DifferentialPathFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialPrimaryPaneView' => 'AphrontView',
     'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler',
     'DifferentialResultsTableView' => 'AphrontView',
     'DifferentialRevertPlanFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialReviewRequestMail' => 'DifferentialMail',
     'DifferentialReviewedByFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialReviewersFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevision' => 'DifferentialDAO',
     'DifferentialRevisionCommentListView' => 'AphrontView',
     'DifferentialRevisionCommentView' => 'AphrontView',
     'DifferentialRevisionDetailView' => 'AphrontView',
     'DifferentialRevisionEditController' => 'DifferentialController',
     'DifferentialRevisionIDFieldParserTestCase' => 'PhabricatorTestCase',
     'DifferentialRevisionIDFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevisionListController' => 'DifferentialController',
     'DifferentialRevisionListView' => 'AphrontView',
     'DifferentialRevisionStatsController' => 'DifferentialController',
     'DifferentialRevisionStatsView' => 'AphrontView',
     'DifferentialRevisionStatusFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
     'DifferentialRevisionViewController' => 'DifferentialController',
     'DifferentialSubscribeController' => 'DifferentialController',
     'DifferentialSummaryFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialTestPlanFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialTitleFieldSpecification' => 'DifferentialFieldSpecification',
     'DifferentialUnitFieldSpecification' => 'DifferentialFieldSpecification',
     'DiffusionBranchTableController' => 'DiffusionController',
     'DiffusionBranchTableView' => 'DiffusionView',
     'DiffusionBrowseController' => 'DiffusionController',
     'DiffusionBrowseFileController' => 'DiffusionController',
     'DiffusionBrowseTableView' => 'DiffusionView',
     'DiffusionChangeController' => 'DiffusionController',
     'DiffusionCommentListView' => 'AphrontView',
     'DiffusionCommentView' => 'AphrontView',
     'DiffusionCommitChangeTableView' => 'DiffusionView',
     'DiffusionCommitController' => 'DiffusionController',
     'DiffusionCommitParentsQuery' => 'DiffusionQuery',
     'DiffusionCommitTagsQuery' => 'DiffusionQuery',
     'DiffusionContainsQuery' => 'DiffusionQuery',
     'DiffusionController' => 'PhabricatorController',
     'DiffusionDiffController' => 'DiffusionController',
     'DiffusionDiffQuery' => 'DiffusionQuery',
     'DiffusionEmptyResultView' => 'DiffusionView',
     'DiffusionExternalController' => 'DiffusionController',
     'DiffusionFileContentQuery' => 'DiffusionQuery',
     'DiffusionGitBranchQuery' => 'DiffusionBranchQuery',
     'DiffusionGitBranchQueryTestCase' => 'PhabricatorTestCase',
     'DiffusionGitBrowseQuery' => 'DiffusionBrowseQuery',
     'DiffusionGitCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionGitCommitTagsQuery' => 'DiffusionCommitTagsQuery',
     'DiffusionGitContainsQuery' => 'DiffusionContainsQuery',
     'DiffusionGitDiffQuery' => 'DiffusionDiffQuery',
     'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionGitHistoryQuery' => 'DiffusionHistoryQuery',
     'DiffusionGitLastModifiedQuery' => 'DiffusionLastModifiedQuery',
     'DiffusionGitMergedCommitsQuery' => 'DiffusionMergedCommitsQuery',
     'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionGitRenameHistoryQuery' => 'DiffusionRenameHistoryQuery',
     'DiffusionGitRequest' => 'DiffusionRequest',
     'DiffusionGitTagListQuery' => 'DiffusionTagListQuery',
     'DiffusionHistoryController' => 'DiffusionController',
     'DiffusionHistoryQuery' => 'DiffusionQuery',
     'DiffusionHistoryTableView' => 'DiffusionView',
     'DiffusionHomeController' => 'DiffusionController',
     'DiffusionInlineCommentController' => 'PhabricatorInlineCommentController',
     'DiffusionLastModifiedController' => 'DiffusionController',
     'DiffusionLastModifiedQuery' => 'DiffusionQuery',
     'DiffusionMercurialBranchQuery' => 'DiffusionBranchQuery',
     'DiffusionMercurialBrowseQuery' => 'DiffusionBrowseQuery',
     'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionMercurialCommitTagsQuery' => 'DiffusionCommitTagsQuery',
     'DiffusionMercurialContainsQuery' => 'DiffusionContainsQuery',
     'DiffusionMercurialDiffQuery' => 'DiffusionDiffQuery',
     'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionMercurialHistoryQuery' => 'DiffusionHistoryQuery',
     'DiffusionMercurialLastModifiedQuery' => 'DiffusionLastModifiedQuery',
     'DiffusionMercurialMergedCommitsQuery' => 'DiffusionMergedCommitsQuery',
     'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionMercurialRenameHistoryQuery' => 'DiffusionRenameHistoryQuery',
     'DiffusionMercurialRequest' => 'DiffusionRequest',
     'DiffusionMercurialTagListQuery' => 'DiffusionTagListQuery',
     'DiffusionMergedCommitsQuery' => 'DiffusionQuery',
     'DiffusionPathCompleteController' => 'DiffusionController',
     'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
     'DiffusionPathValidateController' => 'DiffusionController',
     'DiffusionRawDiffQuery' => 'DiffusionQuery',
     'DiffusionRenameHistoryQuery' => 'DiffusionQuery',
     'DiffusionRepositoryController' => 'DiffusionController',
     'DiffusionSetupException' => 'AphrontUsageException',
     'DiffusionSvnBrowseQuery' => 'DiffusionBrowseQuery',
     'DiffusionSvnCommitParentsQuery' => 'DiffusionCommitParentsQuery',
     'DiffusionSvnCommitTagsQuery' => 'DiffusionCommitTagsQuery',
     'DiffusionSvnContainsQuery' => 'DiffusionContainsQuery',
     'DiffusionSvnDiffQuery' => 'DiffusionDiffQuery',
     'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionSvnHistoryQuery' => 'DiffusionHistoryQuery',
     'DiffusionSvnLastModifiedQuery' => 'DiffusionLastModifiedQuery',
     'DiffusionSvnMergedCommitsQuery' => 'DiffusionMergedCommitsQuery',
     'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery',
     'DiffusionSvnRenameHistoryQuery' => 'DiffusionRenameHistoryQuery',
     'DiffusionSvnRequest' => 'DiffusionRequest',
     'DiffusionSvnTagListQuery' => 'DiffusionTagListQuery',
     'DiffusionSymbolController' => 'DiffusionController',
     'DiffusionTagListController' => 'DiffusionController',
     'DiffusionTagListQuery' => 'DiffusionQuery',
     'DiffusionTagListView' => 'DiffusionView',
     'DiffusionURITestCase' => 'ArcanistPhutilTestCase',
     'DiffusionView' => 'AphrontView',
     'DrydockAllocatorWorker' => 'PhabricatorWorker',
     'DrydockApacheWebrootBlueprint' => 'DrydockBlueprint',
     'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',
     'DrydockCommandInterface' => 'DrydockInterface',
     'DrydockController' => 'PhabricatorController',
     'DrydockDAO' => 'PhabricatorLiskDAO',
     'DrydockEC2HostBlueprint' => 'DrydockRemoteHostBlueprint',
     'DrydockLease' => 'DrydockDAO',
     'DrydockLeaseListController' => 'DrydockController',
     'DrydockLeaseStatus' => 'DrydockConstants',
     'DrydockLocalCommandInterface' => 'DrydockCommandInterface',
     'DrydockLocalHostBlueprint' => 'DrydockBlueprint',
     'DrydockLog' => 'DrydockDAO',
     'DrydockLogController' => 'DrydockController',
     'DrydockLogQuery' => 'PhabricatorOffsetPagedQuery',
     'DrydockPhabricatorApplicationBlueprint' => 'DrydockBlueprint',
     'DrydockRemoteHostBlueprint' => 'DrydockBlueprint',
     'DrydockResource' => 'DrydockDAO',
     'DrydockResourceAllocateController' => 'DrydockController',
     'DrydockResourceListController' => 'DrydockController',
     'DrydockResourceStatus' => 'DrydockConstants',
     'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
     'DrydockWebrootInterface' => 'DrydockInterface',
     'HarbormasterDAO' => 'PhabricatorLiskDAO',
     'HarbormasterObject' => 'HarbormasterDAO',
     'HarbormasterScratchTable' => 'HarbormasterDAO',
     'HeraldAction' => 'HeraldDAO',
     'HeraldApplyTranscript' => 'HeraldDAO',
     'HeraldCommitAdapter' => 'HeraldObjectAdapter',
     'HeraldCondition' => 'HeraldDAO',
     'HeraldController' => 'PhabricatorController',
     'HeraldDAO' => 'PhabricatorLiskDAO',
     'HeraldDeleteController' => 'HeraldController',
     'HeraldDifferentialRevisionAdapter' => 'HeraldObjectAdapter',
     'HeraldDryRunAdapter' => 'HeraldObjectAdapter',
     'HeraldEditLogQuery' => 'PhabricatorOffsetPagedQuery',
     'HeraldHomeController' => 'HeraldController',
     'HeraldInvalidConditionException' => 'Exception',
     'HeraldInvalidFieldException' => 'Exception',
     'HeraldNewController' => 'HeraldController',
     'HeraldRecursiveConditionsException' => 'Exception',
     'HeraldRule' => 'HeraldDAO',
     'HeraldRuleController' => 'HeraldController',
     'HeraldRuleEdit' => 'HeraldDAO',
     'HeraldRuleEditHistoryController' => 'HeraldController',
     'HeraldRuleEditHistoryView' => 'AphrontView',
     'HeraldRuleListView' => 'AphrontView',
     'HeraldRuleQuery' => 'PhabricatorOffsetPagedQuery',
     'HeraldTestConsoleController' => 'HeraldController',
     'HeraldTranscript' => 'HeraldDAO',
     'HeraldTranscriptController' => 'HeraldController',
     'HeraldTranscriptListController' => 'HeraldController',
     'JavelinReactorExample' => 'PhabricatorUIExample',
     'JavelinViewExample' => 'PhabricatorUIExample',
     'JavelinViewExampleServerView' => 'AphrontView',
     'LiskEphemeralObjectException' => 'Exception',
     'LiskFixtureTestCase' => 'PhabricatorTestCase',
     'LiskIsolationTestCase' => 'PhabricatorTestCase',
     'LiskIsolationTestDAO' => 'LiskDAO',
     'LiskIsolationTestDAOException' => 'Exception',
     'LiskMigrationIterator' => 'Iterator',
     'ManiphestAction' => 'ManiphestConstants',
     'ManiphestAuxiliaryFieldDefaultSpecification' => 'ManiphestAuxiliaryFieldSpecification',
     'ManiphestAuxiliaryFieldTypeException' => 'Exception',
     'ManiphestAuxiliaryFieldValidationException' => 'Exception',
     'ManiphestBatchEditController' => 'ManiphestController',
     'ManiphestController' => 'PhabricatorController',
     'ManiphestDAO' => 'PhabricatorLiskDAO',
     'ManiphestDefaultTaskExtensions' => 'ManiphestTaskExtensions',
     'ManiphestEdgeEventListener' => 'PhutilEventListener',
     'ManiphestExportController' => 'ManiphestController',
     'ManiphestReplyHandler' => 'PhabricatorMailReplyHandler',
     'ManiphestReportController' => 'ManiphestController',
     'ManiphestSavedQuery' => 'ManiphestDAO',
     'ManiphestSavedQueryDeleteController' => 'ManiphestController',
     'ManiphestSavedQueryEditController' => 'ManiphestController',
     'ManiphestSavedQueryListController' => 'ManiphestController',
     'ManiphestSubpriorityController' => 'ManiphestController',
     'ManiphestTask' =>
     array(
       0 => 'ManiphestDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'ManiphestTaskAuxiliaryStorage' => 'ManiphestDAO',
     'ManiphestTaskDescriptionChangeController' => 'ManiphestController',
     'ManiphestTaskDescriptionPreviewController' => 'ManiphestController',
     'ManiphestTaskDetailController' => 'ManiphestController',
     'ManiphestTaskEditController' => 'ManiphestController',
     'ManiphestTaskListController' => 'ManiphestController',
     'ManiphestTaskListView' => 'ManiphestView',
     'ManiphestTaskOwner' => 'ManiphestConstants',
     'ManiphestTaskPriority' => 'ManiphestConstants',
     'ManiphestTaskProject' => 'ManiphestDAO',
     'ManiphestTaskProjectsView' => 'ManiphestView',
     'ManiphestTaskStatus' => 'ManiphestConstants',
     'ManiphestTaskSubscriber' => 'ManiphestDAO',
     'ManiphestTaskSummaryView' => 'ManiphestView',
     'ManiphestTransaction' =>
     array(
       0 => 'ManiphestDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'ManiphestTransactionDetailView' => 'ManiphestView',
     'ManiphestTransactionListView' => 'ManiphestView',
     'ManiphestTransactionPreviewController' => 'ManiphestController',
     'ManiphestTransactionSaveController' => 'ManiphestController',
     'ManiphestTransactionType' => 'ManiphestConstants',
     'ManiphestView' => 'AphrontView',
     'MetaMTANotificationType' => 'MetaMTAConstants',
     'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler',
     'PackageCreateMail' => 'PackageMail',
     'PackageDeleteMail' => 'PackageMail',
     'PackageModifyMail' => 'PackageMail',
     'Phabricator404Controller' => 'PhabricatorController',
     'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
     'PhabricatorAuditComment' => 'PhabricatorAuditDAO',
     'PhabricatorAuditCommitListView' => 'AphrontView',
     'PhabricatorAuditController' => 'PhabricatorController',
     'PhabricatorAuditDAO' => 'PhabricatorLiskDAO',
     'PhabricatorAuditInlineComment' =>
     array(
       0 => 'PhabricatorAuditDAO',
       1 => 'PhabricatorInlineCommentInterface',
     ),
     'PhabricatorAuditListController' => 'PhabricatorAuditController',
     'PhabricatorAuditListView' => 'AphrontView',
     'PhabricatorAuditPreviewController' => 'PhabricatorAuditController',
     'PhabricatorAuditReplyHandler' => 'PhabricatorMailReplyHandler',
     'PhabricatorAuthController' => 'PhabricatorController',
     'PhabricatorBaseEnglishTranslation' => 'PhabricatorTranslation',
     'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList',
     'PhabricatorCacheDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCalendarBrowseController' => 'PhabricatorCalendarController',
     'PhabricatorCalendarController' => 'PhabricatorController',
     'PhabricatorCalendarDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCalendarHoliday' => 'PhabricatorCalendarDAO',
     'PhabricatorCalendarHolidayTestCase' => 'PhabricatorTestCase',
     'PhabricatorChangesetResponse' => 'AphrontProxyResponse',
     'PhabricatorChatLogChannelListController' => 'PhabricatorChatLogController',
     'PhabricatorChatLogChannelLogController' => 'PhabricatorChatLogController',
     'PhabricatorChatLogController' => 'PhabricatorController',
     'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO',
     'PhabricatorChatLogEvent' =>
     array(
       0 => 'PhabricatorChatLogDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorChatLogEventType' => 'PhabricatorChatLogConstants',
     'PhabricatorChatLogQuery' => 'PhabricatorIDPagedPolicyQuery',
     'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
     'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO',
     'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
     'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
     'PhabricatorConduitController' => 'PhabricatorController',
     'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
     'PhabricatorConduitListController' => 'PhabricatorConduitController',
     'PhabricatorConduitLogController' => 'PhabricatorConduitController',
     'PhabricatorConduitMethodCallLog' => 'PhabricatorConduitDAO',
     'PhabricatorConduitTokenController' => 'PhabricatorConduitController',
     'PhabricatorContentSourceView' => 'AphrontView',
     'PhabricatorController' => 'AphrontController',
     'PhabricatorCountdownController' => 'PhabricatorController',
     'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO',
     'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController',
     'PhabricatorCountdownEditController' => 'PhabricatorCountdownController',
     'PhabricatorCountdownListController' => 'PhabricatorCountdownController',
     'PhabricatorCountdownViewController' => 'PhabricatorCountdownController',
     'PhabricatorDaemon' => 'PhutilDaemon',
     'PhabricatorDaemonCombinedLogController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonController' => 'PhabricatorController',
     'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
     'PhabricatorDaemonLog' => 'PhabricatorDaemonDAO',
     'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
     'PhabricatorDaemonLogEventsView' => 'AphrontView',
     'PhabricatorDaemonLogListController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonLogListView' => 'AphrontView',
     'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonTimelineConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonTimelineEventController' => 'PhabricatorDaemonController',
     'PhabricatorDefaultFileStorageEngineSelector' => 'PhabricatorFileStorageEngineSelector',
     'PhabricatorDefaultSearchEngineSelector' => 'PhabricatorSearchEngineSelector',
     'PhabricatorDirectoryController' => 'PhabricatorController',
     'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController',
     'PhabricatorDisabledUserController' => 'PhabricatorAuthController',
     'PhabricatorDraft' => 'PhabricatorDraftDAO',
     'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
     'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants',
     'PhabricatorEdgeCycleException' => 'Exception',
     'PhabricatorEdgeGraph' => 'AbstractDirectedGraph',
     'PhabricatorEdgeQuery' => 'PhabricatorQuery',
     'PhabricatorEdgeTestCase' => 'PhabricatorTestCase',
     'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
     'PhabricatorEmailTokenController' => 'PhabricatorAuthController',
     'PhabricatorEmailVerificationController' => 'PhabricatorPeopleController',
     'PhabricatorEnglishTranslation' => 'PhabricatorBaseEnglishTranslation',
     'PhabricatorEnvTestCase' => 'PhabricatorTestCase',
     'PhabricatorErrorExample' => 'PhabricatorUIExample',
     'PhabricatorEvent' => 'PhutilEvent',
     'PhabricatorEventType' => 'PhutilEventType',
     'PhabricatorExampleEventListener' => 'PhutilEventListener',
     'PhabricatorFeedController' => 'PhabricatorController',
     'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController',
     'PhabricatorFeedQuery' => 'PhabricatorIDPagedPolicyQuery',
     'PhabricatorFeedStory' => 'PhabricatorPolicyInterface',
     'PhabricatorFeedStoryAggregate' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryAudit' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryCommit' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryDifferential' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryManiphest' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryManiphestAggregate' => 'PhabricatorFeedStoryAggregate',
     'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryPhriction' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryProject' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
     'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants',
     'PhabricatorFeedStoryUnknown' => 'PhabricatorFeedStory',
     'PhabricatorFeedStoryView' => 'PhabricatorFeedView',
     'PhabricatorFeedView' => 'AphrontView',
     'PhabricatorFile' => 'PhabricatorFileDAO',
     'PhabricatorFileController' => 'PhabricatorController',
     'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFileDataController' => 'PhabricatorFileController',
     'PhabricatorFileDeleteController' => 'PhabricatorFileController',
     'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
     'PhabricatorFileImageMacro' => 'PhabricatorFileDAO',
     'PhabricatorFileInfoController' => 'PhabricatorFileController',
     'PhabricatorFileListController' => 'PhabricatorFileController',
     'PhabricatorFileMacroDeleteController' => 'PhabricatorFileController',
     'PhabricatorFileMacroEditController' => 'PhabricatorFileController',
     'PhabricatorFileMacroListController' => 'PhabricatorFileController',
     'PhabricatorFileProxyController' => 'PhabricatorFileController',
     'PhabricatorFileProxyImage' => 'PhabricatorFileDAO',
     'PhabricatorFileShortcutController' => 'PhabricatorFileController',
     'PhabricatorFileSideNavView' => 'AphrontView',
     'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
     'PhabricatorFileStorageConfigurationException' => 'Exception',
     'PhabricatorFileTransformController' => 'PhabricatorFileController',
     'PhabricatorFileUploadController' => 'PhabricatorFileController',
     'PhabricatorFileUploadException' => 'Exception',
     'PhabricatorFileUploadView' => 'AphrontView',
     'PhabricatorFlag' => 'PhabricatorFlagDAO',
     'PhabricatorFlagColor' => 'PhabricatorFlagConstants',
     'PhabricatorFlagController' => 'PhabricatorController',
     'PhabricatorFlagDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
     'PhabricatorFlagEditController' => 'PhabricatorFlagController',
     'PhabricatorFlagListController' => 'PhabricatorFlagController',
     'PhabricatorFlagListView' => 'AphrontView',
     'PhabricatorFormExample' => 'PhabricatorUIExample',
     'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon',
     'PhabricatorGlobalLock' => 'PhutilLock',
     'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker',
     'PhabricatorHelpController' => 'PhabricatorController',
     'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
     'PhabricatorIDPagedPolicyQuery' => 'PhabricatorPolicyQuery',
     'PhabricatorIRCBot' => 'PhabricatorDaemon',
     'PhabricatorIRCDifferentialNotificationHandler' => 'PhabricatorIRCHandler',
     'PhabricatorIRCLogHandler' => 'PhabricatorIRCHandler',
     'PhabricatorIRCMacroHandler' => 'PhabricatorIRCHandler',
     'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler',
     'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler',
     'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler',
     'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
     'PhabricatorInlineCommentController' => 'PhabricatorController',
     'PhabricatorInlineSummaryView' => 'AphrontView',
     'PhabricatorJavelinLinter' => 'ArcanistLinter',
     'PhabricatorLDAPLoginController' => 'PhabricatorAuthController',
     'PhabricatorLDAPRegistrationController' => 'PhabricatorAuthController',
     'PhabricatorLDAPUnlinkController' => 'PhabricatorAuthController',
     'PhabricatorLintEngine' => 'PhutilLintEngine',
     'PhabricatorLiskDAO' => 'LiskDAO',
     'PhabricatorLocalDiskFileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorLocalTimeTestCase' => 'PhabricatorTestCase',
     'PhabricatorLoginController' => 'PhabricatorAuthController',
     'PhabricatorLoginValidateController' => 'PhabricatorAuthController',
     'PhabricatorLogoutController' => 'PhabricatorAuthController',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMailImplementationTestAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
     'PhabricatorMetaMTAController' => 'PhabricatorController',
     'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
     'PhabricatorMetaMTAEmailBodyParserTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAListController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase',
     'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailingListEditController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAMailingListsController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAReceiveController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAReceivedListController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAReceivedMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTASendController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTASendGridReceiveController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAViewController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAWorker' => 'PhabricatorWorker',
     'PhabricatorMustVerifyEmailController' => 'PhabricatorAuthController',
     'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorNotificationClearController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationController' => 'PhabricatorController',
     'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationListController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
     'PhabricatorNotificationStoryView' => 'PhabricatorNotificationView',
     'PhabricatorNotificationView' => 'AphrontView',
     'PhabricatorOAuthClientAuthorization' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthClientAuthorizationBaseController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthClientAuthorizationDeleteController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationEditController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationListController' => 'PhabricatorOAuthClientAuthorizationBaseController',
     'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorOAuthClientBaseController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientBaseController',
     'PhabricatorOAuthDefaultRegistrationController' => 'PhabricatorOAuthRegistrationController',
     'PhabricatorOAuthDiagnosticsController' => 'PhabricatorAuthController',
     'PhabricatorOAuthFailureView' => 'AphrontView',
     'PhabricatorOAuthLoginController' => 'PhabricatorAuthController',
     'PhabricatorOAuthProviderDisqus' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthProviderException' => 'Exception',
     'PhabricatorOAuthProviderFacebook' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthProviderGitHub' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthProviderGoogle' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthProviderPhabricator' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthRegistrationController' => 'PhabricatorAuthController',
     'PhabricatorOAuthResponse' => 'AphrontResponse',
     'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerAuthController' => 'PhabricatorAuthController',
     'PhabricatorOAuthServerAuthorizationCode' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerClient' => 'PhabricatorOAuthServerDAO',
     'PhabricatorOAuthServerClientQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorOAuthServerController' => 'PhabricatorController',
     'PhabricatorOAuthServerDAO' => 'PhabricatorLiskDAO',
     'PhabricatorOAuthServerTestCase' => 'PhabricatorTestCase',
     'PhabricatorOAuthServerTestController' => 'PhabricatorOAuthServerController',
     'PhabricatorOAuthServerTokenController' => 'PhabricatorAuthController',
     'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController',
-    'PhabricatorObjectGraph' => 'AbstractDirectedGraph',
     'PhabricatorObjectHandleStatus' => 'PhabricatorObjectHandleConstants',
     'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
     'PhabricatorOwnersController' => 'PhabricatorController',
     'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO',
     'PhabricatorOwnersDeleteController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersEditController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersListController' => 'PhabricatorOwnersController',
     'PhabricatorOwnersOwner' => 'PhabricatorOwnersDAO',
     'PhabricatorOwnersPackage' => 'PhabricatorOwnersDAO',
     'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
     'PhabricatorPHIDController' => 'PhabricatorController',
     'PhabricatorPHIDLookupController' => 'PhabricatorPHIDController',
     'PhabricatorPaste' =>
     array(
       0 => 'PhabricatorPasteDAO',
       1 => 'PhabricatorPolicyInterface',
     ),
     'PhabricatorPasteController' => 'PhabricatorController',
     'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
     'PhabricatorPasteListController' => 'PhabricatorPasteController',
     'PhabricatorPasteQuery' => 'PhabricatorIDPagedPolicyQuery',
     'PhabricatorPasteViewController' => 'PhabricatorPasteController',
     'PhabricatorPeopleController' => 'PhabricatorController',
     'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleQuery' => 'PhabricatorOffsetPagedQuery',
     'PhabricatorPolicies' => 'PhabricatorPolicyConstants',
     'PhabricatorPolicyCapability' => 'PhabricatorPolicyConstants',
     'PhabricatorPolicyException' => 'Exception',
     'PhabricatorPolicyQuery' => 'PhabricatorQuery',
     'PhabricatorPolicyTestCase' => 'PhabricatorTestCase',
     'PhabricatorPolicyTestObject' => 'PhabricatorPolicyInterface',
     'PhabricatorPolicyTestQuery' => 'PhabricatorPolicyQuery',
     'PhabricatorProfileHeaderView' => 'AphrontView',
     'PhabricatorProject' => 'PhabricatorProjectDAO',
     'PhabricatorProjectAffiliation' => 'PhabricatorProjectDAO',
     'PhabricatorProjectController' => 'PhabricatorController',
     'PhabricatorProjectCreateController' => 'PhabricatorProjectController',
     'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
     'PhabricatorProjectListController' => 'PhabricatorProjectController',
     'PhabricatorProjectNameCollisionException' => 'Exception',
     'PhabricatorProjectProfile' => 'PhabricatorProjectDAO',
     'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
     'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController',
     'PhabricatorProjectSubproject' => 'PhabricatorProjectDAO',
     'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO',
     'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants',
     'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
     'PhabricatorRedirectController' => 'PhabricatorController',
     'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
     'PhabricatorRemarkupRuleDifferential' => 'PhabricatorRemarkupRuleObjectName',
     'PhabricatorRemarkupRuleDifferentialHandle' => 'PhabricatorRemarkupRuleObjectHandle',
     'PhabricatorRemarkupRuleDiffusion' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleEmbedFile' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleImageMacro' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleManiphest' => 'PhabricatorRemarkupRuleObjectName',
     'PhabricatorRemarkupRuleManiphestHandle' => 'PhabricatorRemarkupRuleObjectHandle',
     'PhabricatorRemarkupRuleMention' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleObjectHandle' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleObjectName' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRulePaste' => 'PhabricatorRemarkupRuleObjectName',
     'PhabricatorRemarkupRulePhriction' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleProxyImage' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule',
     'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryAuditRequest' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
     'PhabricatorRepositoryController' => 'PhabricatorController',
     'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
     'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'PhabricatorRepositoryCommitMessageDetailParser',
     'PhabricatorRepositoryDeleteController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
     'PhabricatorRepositoryManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon',
     'PhabricatorRepositoryPullLocalDaemonTestCase' => 'PhabricatorTestCase',
     'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase',
     'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine',
     'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchBaseController' => 'PhabricatorController',
     'PhabricatorSearchCommitIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
     'PhabricatorSearchDifferentialIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
     'PhabricatorSearchEngineElastic' => 'PhabricatorSearchEngine',
     'PhabricatorSearchEngineMySQL' => 'PhabricatorSearchEngine',
     'PhabricatorSearchIndexController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchPhrictionIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
     'PhabricatorSearchResultView' => 'AphrontView',
     'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchUserIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSlowvoteChoice' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvoteComment' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvoteController' => 'PhabricatorController',
     'PhabricatorSlowvoteCreateController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlowvoteDAO' => 'PhabricatorLiskDAO',
     'PhabricatorSlowvoteListController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlowvoteOption' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvotePoll' => 'PhabricatorSlowvoteDAO',
     'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
     'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
     'PhabricatorSortTableExample' => 'PhabricatorUIExample',
     'PhabricatorStandardPageView' => 'AphrontPageView',
     'PhabricatorStatusController' => 'PhabricatorController',
     'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementStatusWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementUpgradeWorkflow' => 'PhabricatorStorageManagementWorkflow',
     'PhabricatorStorageManagementWorkflow' => 'PhutilArgumentWorkflow',
     'PhabricatorSymbolNameLinter' => 'ArcanistXHPASTLintNamingHook',
     'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
     'PhabricatorTestCase' => 'ArcanistPhutilTestCase',
     'PhabricatorTimelineCursor' => 'PhabricatorTimelineDAO',
     'PhabricatorTimelineDAO' => 'PhabricatorLiskDAO',
     'PhabricatorTimelineEvent' => 'PhabricatorTimelineDAO',
     'PhabricatorTimelineEventData' => 'PhabricatorTimelineDAO',
     'PhabricatorTimelineIterator' => 'Iterator',
     'PhabricatorTimer' => 'PhabricatorCountdownDAO',
     'PhabricatorTransactionView' => 'AphrontView',
     'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
     'PhabricatorTrivialTestCase' => 'PhabricatorTestCase',
     'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
     'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
     'PhabricatorUIExampleController' => 'PhabricatorController',
     'PhabricatorUIExampleRenderController' => 'PhabricatorUIExampleController',
     'PhabricatorUIListFilterExample' => 'PhabricatorUIExample',
     'PhabricatorUINotificationExample' => 'PhabricatorUIExample',
     'PhabricatorUIPagerExample' => 'PhabricatorUIExample',
     'PhabricatorUITooltipExample' => 'PhabricatorUIExample',
     'PhabricatorUnitsTestCase' => 'PhabricatorTestCase',
     'PhabricatorUser' =>
     array(
       0 => 'PhabricatorUserDAO',
       1 => 'PhutilPerson',
     ),
     'PhabricatorUserAccountSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserConduitSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
     'PhabricatorUserEmail' => 'PhabricatorUserDAO',
     'PhabricatorUserEmailPreferenceSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserEmailSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserLDAPInfo' => 'PhabricatorUserDAO',
     'PhabricatorUserLDAPSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserLog' => 'PhabricatorUserDAO',
     'PhabricatorUserOAuthInfo' => 'PhabricatorUserDAO',
     'PhabricatorUserOAuthSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserPasswordSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserPreferenceSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserPreferences' => 'PhabricatorUserDAO',
     'PhabricatorUserProfile' => 'PhabricatorUserDAO',
     'PhabricatorUserProfileSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserSSHKey' => 'PhabricatorUserDAO',
     'PhabricatorUserSSHKeysSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserSearchSettingsPanelController' => 'PhabricatorUserSettingsPanelController',
     'PhabricatorUserSettingsController' => 'PhabricatorPeopleController',
     'PhabricatorUserSettingsPanelController' => 'PhabricatorPeopleController',
     'PhabricatorUserStatus' => 'PhabricatorUserDAO',
     'PhabricatorUserTestCase' => 'PhabricatorTestCase',
     'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
     'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
     'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
     'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
     'PhabricatorWorkerTaskUpdateController' => 'PhabricatorDaemonController',
     'PhabricatorXHPASTViewController' => 'PhabricatorController',
     'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
     'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewFramesetController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewInputController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHPASTViewPanelController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewParseTree' => 'PhabricatorXHPASTViewDAO',
     'PhabricatorXHPASTViewRunController' => 'PhabricatorXHPASTViewController',
     'PhabricatorXHPASTViewStreamController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHPASTViewTreeController' => 'PhabricatorXHPASTViewPanelController',
     'PhabricatorXHProfController' => 'PhabricatorController',
     'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
     'PhabricatorXHProfProfileSymbolView' => 'PhabricatorXHProfProfileView',
     'PhabricatorXHProfProfileTopLevelView' => 'PhabricatorXHProfProfileView',
     'PhabricatorXHProfProfileView' => 'AphrontView',
     'PhameAllBloggersPostListController' => 'PhamePostListBaseController',
     'PhameBloggerPostListController' => 'PhamePostListBaseController',
     'PhameController' => 'PhabricatorController',
     'PhameDAO' => 'PhabricatorLiskDAO',
     'PhameDraftListController' => 'PhamePostListBaseController',
     'PhamePost' => 'PhameDAO',
     'PhamePostDeleteController' => 'PhameController',
     'PhamePostDetailView' => 'AphrontView',
     'PhamePostEditController' => 'PhameController',
     'PhamePostListBaseController' => 'PhameController',
     'PhamePostListView' => 'AphrontView',
     'PhamePostPreviewController' => 'PhameController',
     'PhamePostQuery' => 'PhabricatorOffsetPagedQuery',
     'PhamePostViewController' => 'PhameController',
     'PhameUserPostListController' => 'PhamePostListBaseController',
     'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
     'PhortuneStripeBaseController' => 'PhabricatorController',
     'PhortuneStripePaymentFormView' => 'AphrontView',
     'PhortuneStripeTestPaymentFormController' => 'PhortuneStripeBaseController',
     'PhrictionActionConstants' => 'PhrictionConstants',
     'PhrictionChangeType' => 'PhrictionConstants',
     'PhrictionContent' =>
     array(
       0 => 'PhrictionDAO',
       1 => 'PhabricatorMarkupInterface',
     ),
     'PhrictionController' => 'PhabricatorController',
     'PhrictionDAO' => 'PhabricatorLiskDAO',
     'PhrictionDeleteController' => 'PhrictionController',
     'PhrictionDiffController' => 'PhrictionController',
     'PhrictionDocument' => 'PhrictionDAO',
     'PhrictionDocumentController' => 'PhrictionController',
     'PhrictionDocumentPreviewController' => 'PhrictionController',
     'PhrictionDocumentStatus' => 'PhrictionConstants',
     'PhrictionDocumentTestCase' => 'PhabricatorTestCase',
     'PhrictionEditController' => 'PhrictionController',
     'PhrictionHistoryController' => 'PhrictionController',
     'PhrictionListController' => 'PhrictionController',
     'QueryFormattingTestCase' => 'PhabricatorTestCase',
   ),
 ));
diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
index 311e537f13..ec0e10003d 100644
--- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
@@ -1,537 +1,554 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 /**
  * @group maniphest
  */
 final class ManiphestTaskDetailController extends ManiphestController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $e_title = null;
 
     $priority_map = ManiphestTaskPriority::getTaskPriorityMap();
 
     $task = id(new ManiphestTask())->load($this->id);
     if (!$task) {
       return new Aphront404Response();
     }
 
     $workflow = $request->getStr('workflow');
     $parent_task = null;
     if ($workflow && is_numeric($workflow)) {
       $parent_task = id(new ManiphestTask())->load($workflow);
     }
 
     $transactions = id(new ManiphestTransaction())->loadAllWhere(
       'taskID = %d ORDER BY id ASC',
       $task->getID());
 
-    $commit_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
-      $task->getPHID(),
-      PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT);
+    $e_commit = PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT;
+    $e_dep_on = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
+    $e_dep_by = PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK;
+
+    $phid = $task->getPHID();
+
+    $query = id(new PhabricatorEdgeQuery())
+      ->withSourcePHIDs(array($phid))
+      ->withEdgeTypes(
+        array(
+          $e_commit,
+          $e_dep_on,
+          $e_dep_by,
+        ));
+    $edges = $query->execute();
+
+    $commit_phids = array_keys($edges[$phid][$e_commit]);
+    $dep_on_tasks = array_keys($edges[$phid][$e_dep_on]);
+    $dep_by_tasks = array_keys($edges[$phid][$e_dep_by]);
+
+    $phids = array_fill_keys($query->getDestinationPHIDs(), true);
 
-    $phids = array_fill_keys($commit_phids, true);
     foreach ($transactions as $transaction) {
       foreach ($transaction->extractPHIDs() as $phid) {
         $phids[$phid] = true;
       }
     }
     foreach ($task->getCCPHIDs() as $phid) {
       $phids[$phid] = true;
     }
     foreach ($task->getProjectPHIDs() as $phid) {
       $phids[$phid] = true;
     }
     if ($task->getOwnerPHID()) {
       $phids[$task->getOwnerPHID()] = true;
     }
     $phids[$task->getAuthorPHID()] = true;
 
     $attached = $task->getAttached();
     foreach ($attached as $type => $list) {
       foreach ($list as $phid => $info) {
         $phids[$phid] = true;
       }
     }
 
     if ($parent_task) {
       $phids[$parent_task->getPHID()] = true;
     }
 
     $phids = array_keys($phids);
 
     $handles = id(new PhabricatorObjectHandleData($phids))
       ->loadHandles();
 
     $dict = array();
     $dict['Status'] =
       '<strong>'.
         ManiphestTaskStatus::getTaskStatusFullName($task->getStatus()).
       '</strong>';
 
     $dict['Assigned To'] = $task->getOwnerPHID()
       ? $handles[$task->getOwnerPHID()]->renderLink()
       : '<em>None</em>';
 
     $dict['Priority'] = ManiphestTaskPriority::getTaskPriorityName(
       $task->getPriority());
 
     $cc = $task->getCCPHIDs();
     if ($cc) {
       $cc_links = array();
       foreach ($cc as $phid) {
         $cc_links[] = $handles[$phid]->renderLink();
       }
       $dict['CC'] = implode(', ', $cc_links);
     } else {
       $dict['CC'] = '<em>None</em>';
     }
 
     $dict['Author'] = $handles[$task->getAuthorPHID()]->renderLink();
 
     $source = $task->getOriginalEmailSource();
     if ($source) {
       $subject = '[T'.$task->getID().'] '.$task->getTitle();
       $dict['From Email'] = phutil_render_tag(
         'a',
         array(
           'href' => 'mailto:'.$source.'?subject='.$subject
         ),
         phutil_escape_html($source));
     }
 
     $projects = $task->getProjectPHIDs();
     if ($projects) {
       $project_links = array();
       foreach ($projects as $phid) {
         $project_links[] = $handles[$phid]->renderLink();
       }
       $dict['Projects'] = implode(', ', $project_links);
     } else {
       $dict['Projects'] = '<em>None</em>';
     }
 
     $extensions = ManiphestTaskExtensions::newExtensions();
     $aux_fields = $extensions->getAuxiliaryFieldSpecifications();
     if ($aux_fields) {
       $task->loadAndAttachAuxiliaryAttributes();
       foreach ($aux_fields as $aux_field) {
         $aux_key = $aux_field->getAuxiliaryKey();
         $aux_field->setValue($task->getAuxiliaryAttribute($aux_key));
         $value = $aux_field->renderForDetailView();
         if (strlen($value)) {
           $dict[$aux_field->getLabel()] = $value;
         }
       }
     }
 
-    $dtasks = idx($attached, PhabricatorPHIDConstants::PHID_TYPE_TASK);
-    if ($dtasks) {
-      $dtask_links = array();
-      foreach ($dtasks as $dtask => $info) {
-        $dtask_links[] = $handles[$dtask]->renderLink();
-      }
-      $dtask_links = implode('<br />', $dtask_links);
-      $dict['Depends On'] = $dtask_links;
+    if ($dep_by_tasks) {
+      $dict['Dependent Tasks'] = $this->renderHandleList(
+        array_select_keys($handles, $dep_by_tasks));
+    }
+
+    if ($dep_on_tasks) {
+      $dict['Depends On'] = $this->renderHandleList(
+        array_select_keys($handles, $dep_on_tasks));
     }
 
     $revs = idx($attached, PhabricatorPHIDConstants::PHID_TYPE_DREV);
     if ($revs) {
-      $rev_links = array();
-      foreach ($revs as $rev => $info) {
-        $rev_links[] = $handles[$rev]->renderLink();
-      }
-      $rev_links = implode('<br />', $rev_links);
-      $dict['Revisions'] = $rev_links;
+      $dict['Revisions'] = $this->renderHandleList(
+        array_select_keys($handles, $revs));
     }
 
     if ($commit_phids) {
-      $commit_links = array();
-      foreach ($commit_phids as $phid) {
-        $commit_links[] = $handles[$phid]->renderLink();
-      }
-      $commit_links = implode('<br />', $commit_links);
-      $dict['Commits'] = $commit_links;
+      $dict['Commits'] = $this->renderHandleList(
+        array_select_keys($handles, $commit_phids));
     }
 
     $file_infos = idx($attached, PhabricatorPHIDConstants::PHID_TYPE_FILE);
     if ($file_infos) {
       $file_phids = array_keys($file_infos);
 
       $files = id(new PhabricatorFile())->loadAllWhere(
         'phid IN (%Ls)',
         $file_phids);
 
       $views = array();
       foreach ($files as $file) {
         $view = new AphrontFilePreviewView();
         $view->setFile($file);
         $views[] = $view->render();
       }
       $dict['Files'] = implode('', $views);
     }
 
     $context_bar = null;
 
     if ($parent_task) {
       $context_bar = new AphrontContextBarView();
       $context_bar->addButton(
          phutil_render_tag(
          'a',
          array(
            'href' => '/maniphest/task/create/?parent='.$parent_task->getID(),
            'class' => 'green button',
          ),
         'Create Another Subtask'));
       $context_bar->appendChild(
         'Created a subtask of <strong>'.
         $handles[$parent_task->getPHID()]->renderLink().
         '</strong>');
     } else if ($workflow == 'create') {
       $context_bar = new AphrontContextBarView();
       $context_bar->addButton('<label>Create Another:</label>');
       $context_bar->addButton(
          phutil_render_tag(
          'a',
          array(
            'href' => '/maniphest/task/create/?template='.$task->getID(),
            'class' => 'green button',
          ),
         'Similar Task'));
       $context_bar->addButton(
          phutil_render_tag(
          'a',
          array(
            'href' => '/maniphest/task/create/',
            'class' => 'green button',
          ),
         'Empty Task'));
       $context_bar->appendChild('New task created.');
     }
 
     $actions = array();
 
     $action = new AphrontHeadsupActionView();
     $action->setName('Edit Task');
     $action->setURI('/maniphest/task/edit/'.$task->getID().'/');
     $action->setClass('action-edit');
     $actions[] = $action;
 
     require_celerity_resource('phabricator-flag-css');
     $flag = PhabricatorFlagQuery::loadUserFlag($user, $task->getPHID());
     if ($flag) {
       $class = PhabricatorFlagColor::getCSSClass($flag->getColor());
       $color = PhabricatorFlagColor::getColorName($flag->getColor());
 
       $action = new AphrontHeadsupActionView();
       $action->setClass('flag-clear '.$class);
       $action->setURI('/flag/delete/'.$flag->getID().'/');
       $action->setName('Remove '.$color.' Flag');
       $action->setWorkflow(true);
       $actions[] = $action;
     } else {
       $action = new AphrontHeadsupActionView();
       $action->setClass('phabricator-flag-ghost');
       $action->setURI('/flag/edit/'.$task->getPHID().'/');
       $action->setName('Flag Task');
       $action->setWorkflow(true);
       $actions[] = $action;
     }
 
     require_celerity_resource('phabricator-object-selector-css');
     require_celerity_resource('javelin-behavior-phabricator-object-selector');
 
     $action = new AphrontHeadsupActionView();
     $action->setName('Merge Duplicates');
     $action->setURI('/search/attach/'.$task->getPHID().'/TASK/merge/');
     $action->setWorkflow(true);
     $action->setClass('action-merge');
     $actions[] = $action;
 
     $action = new AphrontHeadsupActionView();
     $action->setName('Create Subtask');
     $action->setURI('/maniphest/task/create/?parent='.$task->getID());
     $action->setClass('action-branch');
     $actions[] = $action;
 
 
     $action = new AphrontHeadsupActionView();
     $action->setName('Edit Dependencies');
     $action->setURI('/search/attach/'.$task->getPHID().'/TASK/dependencies/');
     $action->setWorkflow(true);
     $action->setClass('action-dependencies');
     $actions[] = $action;
 
     $action = new AphrontHeadsupActionView();
     $action->setName('Edit Differential Revisions');
     $action->setURI('/search/attach/'.$task->getPHID().'/DREV/');
     $action->setWorkflow(true);
     $action->setClass('action-attach');
     $actions[] = $action;
 
     $action_list = new AphrontHeadsupActionListView();
     $action_list->setActions($actions);
 
     $headsup_panel = new AphrontHeadsupView();
     $headsup_panel->setObjectName('T'.$task->getID());
     $headsup_panel->setHeader($task->getTitle());
     $headsup_panel->setActionList($action_list);
     $headsup_panel->setProperties($dict);
 
     $engine = new PhabricatorMarkupEngine();
     $engine->addObject($task, ManiphestTask::MARKUP_FIELD_DESCRIPTION);
     foreach ($transactions as $xaction) {
       if ($xaction->hasComments()) {
         $engine->addObject($xaction, ManiphestTransaction::MARKUP_FIELD_BODY);
       }
     }
     $engine->process();
 
     $headsup_panel->appendChild(
       '<div class="phabricator-remarkup">'.
         $engine->getOutput($task, ManiphestTask::MARKUP_FIELD_DESCRIPTION).
       '</div>');
 
     $transaction_types = ManiphestTransactionType::getTransactionTypeMap();
     $resolution_types = ManiphestTaskStatus::getTaskStatusMap();
 
     if ($task->getStatus() == ManiphestTaskStatus::STATUS_OPEN) {
       $resolution_types = array_select_keys(
         $resolution_types,
         array(
           ManiphestTaskStatus::STATUS_CLOSED_RESOLVED,
           ManiphestTaskStatus::STATUS_CLOSED_WONTFIX,
           ManiphestTaskStatus::STATUS_CLOSED_INVALID,
           ManiphestTaskStatus::STATUS_CLOSED_SPITE,
         ));
     } else {
       $resolution_types = array(
         ManiphestTaskStatus::STATUS_OPEN => 'Reopened',
       );
       $transaction_types[ManiphestTransactionType::TYPE_STATUS] =
         'Reopen Task';
       unset($transaction_types[ManiphestTransactionType::TYPE_PRIORITY]);
       unset($transaction_types[ManiphestTransactionType::TYPE_OWNER]);
     }
 
     $default_claim = array(
       $user->getPHID() => $user->getUsername().' ('.$user->getRealName().')',
     );
 
     $draft = id(new PhabricatorDraft())->loadOneWhere(
       'authorPHID = %s AND draftKey = %s',
       $user->getPHID(),
       $task->getPHID());
     if ($draft) {
       $draft_text = $draft->getDraft();
     } else {
       $draft_text = null;
     }
 
     $panel_id = celerity_generate_unique_node_id();
 
     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
 
     if ($is_serious) {
       // Prevent tasks from being closed "out of spite" in serious business
       // installs.
       unset($resolution_types[ManiphestTaskStatus::STATUS_CLOSED_SPITE]);
     }
 
     $remarkup_href = PhabricatorEnv::getDoclink(
       'article/Remarkup_Reference.html');
 
     $comment_form = new AphrontFormView();
     $comment_form
       ->setUser($user)
       ->setAction('/maniphest/transaction/save/')
       ->setEncType('multipart/form-data')
       ->addHiddenInput('taskID', $task->getID())
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Action')
           ->setName('action')
           ->setOptions($transaction_types)
           ->setID('transaction-action'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Resolution')
           ->setName('resolution')
           ->setControlID('resolution')
           ->setControlStyle('display: none')
           ->setOptions($resolution_types))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel('Assign To')
           ->setName('assign_to')
           ->setControlID('assign_to')
           ->setControlStyle('display: none')
           ->setID('assign-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel('CCs')
           ->setName('ccs')
           ->setControlID('ccs')
           ->setControlStyle('display: none')
           ->setID('cc-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Priority')
           ->setName('priority')
           ->setOptions($priority_map)
           ->setControlID('priority')
           ->setControlStyle('display: none')
           ->setValue($task->getPriority()))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel('Projects')
           ->setName('projects')
           ->setControlID('projects')
           ->setControlStyle('display: none')
           ->setID('projects-tokenizer')
           ->setDisableBehavior(true))
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel('File')
           ->setName('file')
           ->setControlID('file')
           ->setControlStyle('display: none'))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel('Comments')
           ->setName('comments')
           ->setValue($draft_text)
           ->setCaption(
             phutil_render_tag(
               'a',
               array(
                 'href' => $remarkup_href,
                 'tabindex' => '-1',
                 'target' => '_blank',
               ),
               'Formatting Reference'))
           ->setID('transaction-comments'))
       ->appendChild(
         id(new AphrontFormDragAndDropUploadControl())
           ->setLabel('Attached Files')
           ->setName('files')
           ->setDragAndDropTarget($panel_id)
           ->setActivatedClass('aphront-panel-view-drag-and-drop'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($is_serious ? 'Submit' : 'Avast!'));
 
     $control_map = array(
       ManiphestTransactionType::TYPE_STATUS   => 'resolution',
       ManiphestTransactionType::TYPE_OWNER    => 'assign_to',
       ManiphestTransactionType::TYPE_CCS      => 'ccs',
       ManiphestTransactionType::TYPE_PRIORITY => 'priority',
       ManiphestTransactionType::TYPE_PROJECTS => 'projects',
       ManiphestTransactionType::TYPE_ATTACH   => 'file',
     );
 
     $tokenizer_map = array(
       ManiphestTransactionType::TYPE_PROJECTS => array(
         'id'          => 'projects-tokenizer',
         'src'         => '/typeahead/common/projects/',
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => 'Type a project name...',
       ),
       ManiphestTransactionType::TYPE_OWNER => array(
         'id'          => 'assign-tokenizer',
         'src'         => '/typeahead/common/users/',
         'value'       => $default_claim,
         'limit'       => 1,
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => 'Type a user name...',
       ),
       ManiphestTransactionType::TYPE_CCS => array(
         'id'          => 'cc-tokenizer',
         'src'         => '/typeahead/common/mailable/',
         'ondemand'    => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
         'placeholder' => 'Type a user or mailing list...',
       ),
     );
 
     Javelin::initBehavior('maniphest-transaction-controls', array(
       'select'     => 'transaction-action',
       'controlMap' => $control_map,
       'tokenizers' => $tokenizer_map,
     ));
 
     Javelin::initBehavior('maniphest-transaction-preview', array(
       'uri'        => '/maniphest/transaction/preview/'.$task->getID().'/',
       'preview'    => 'transaction-preview',
       'comments'   => 'transaction-comments',
       'action'     => 'transaction-action',
       'map'        => $control_map,
       'tokenizers' => $tokenizer_map,
     ));
 
     $comment_panel = new AphrontPanelView();
     $comment_panel->appendChild($comment_form);
     $comment_panel->setID($panel_id);
     $comment_panel->addClass('aphront-panel-accent');
     $comment_panel->setHeader($is_serious ? 'Add Comment' : 'Weigh In');
 
     $preview_panel =
       '<div class="aphront-panel-preview">
         <div id="transaction-preview">
           <div class="aphront-panel-preview-loading-text">
             Loading preview...
           </div>
         </div>
       </div>';
 
     $transaction_view = new ManiphestTransactionListView();
     $transaction_view->setTransactions($transactions);
     $transaction_view->setHandles($handles);
     $transaction_view->setUser($user);
     $transaction_view->setAuxiliaryFields($aux_fields);
     $transaction_view->setMarkupEngine($engine);
 
     PhabricatorFeedStoryNotification::updateObjectNotificationViews(
       $user, $task->getPHID());
 
     return $this->buildStandardPageResponse(
       array(
         $context_bar,
         $headsup_panel,
         $transaction_view,
         $comment_panel,
         $preview_panel,
       ),
       array(
         'title' => 'T'.$task->getID().' '.$task->getTitle(),
         'pageObjects' => array($task->getPHID()),
       ));
   }
 
+  private function renderHandleList(array $handles) {
+    $links = array();
+    foreach ($handles as $handle) {
+      $links[] = $handle->renderLink();
+    }
+    return implode('<br />', $links);
+  }
+
 }
diff --git a/src/applications/maniphest/storage/ManiphestTask.php b/src/applications/maniphest/storage/ManiphestTask.php
index 97a269d4f7..32d9c618b3 100644
--- a/src/applications/maniphest/storage/ManiphestTask.php
+++ b/src/applications/maniphest/storage/ManiphestTask.php
@@ -1,268 +1,280 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 /**
  * @group maniphest
  */
 final class ManiphestTask extends ManiphestDAO
   implements PhabricatorMarkupInterface {
 
   const MARKUP_FIELD_DESCRIPTION = 'markup:desc';
 
   protected $phid;
   protected $authorPHID;
   protected $ownerPHID;
   protected $ccPHIDs = array();
 
   protected $status;
   protected $priority;
   protected $subpriority;
 
   protected $title;
   protected $originalTitle;
   protected $description;
   protected $originalEmailSource;
   protected $mailKey;
 
   protected $attached = array();
   protected $projectPHIDs = array();
   private $projectsNeedUpdate;
   private $subscribersNeedUpdate;
 
   protected $ownerOrdering;
 
   private $auxiliaryAttributes;
   private $auxiliaryDirty = array();
 
   public function getConfiguration() {
     return array(
       self::CONFIG_AUX_PHID => true,
       self::CONFIG_SERIALIZATION => array(
         'ccPHIDs' => self::SERIALIZATION_JSON,
         'attached' => self::SERIALIZATION_JSON,
         'projectPHIDs' => self::SERIALIZATION_JSON,
       ),
     ) + parent::getConfiguration();
   }
 
+  public function loadDependsOnTaskPHIDs() {
+    return PhabricatorEdgeQuery::loadDestinationPHIDs(
+      $this->getPHID(),
+      PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK);
+  }
+
+  public function loadDependedOnByTaskPHIDs() {
+    return PhabricatorEdgeQuery::loadDestinationPHIDs(
+      $this->getPHID(),
+      PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK);
+  }
+
   public function getAttachedPHIDs($type) {
     return array_keys(idx($this->attached, $type, array()));
   }
 
   public function generatePHID() {
     return PhabricatorPHID::generateNewPHID(
       PhabricatorPHIDConstants::PHID_TYPE_TASK);
   }
 
   public function getCCPHIDs() {
     return array_values(nonempty($this->ccPHIDs, array()));
   }
 
   public function setProjectPHIDs(array $phids) {
     $this->projectPHIDs = array_values($phids);
     $this->projectsNeedUpdate = true;
     return $this;
   }
 
   public function getProjectPHIDs() {
     return array_values(nonempty($this->projectPHIDs, array()));
   }
 
   public function setCCPHIDs(array $phids) {
     $this->ccPHIDs = array_values($phids);
     $this->subscribersNeedUpdate = true;
     return $this;
   }
 
   public function setOwnerPHID($phid) {
     $this->ownerPHID = $phid;
     $this->subscribersNeedUpdate = true;
     return $this;
   }
 
   public function getAuxiliaryAttribute($key, $default = null) {
     if ($this->auxiliaryAttributes === null) {
       throw new Exception("Attach auxiliary attributes before getting them!");
     }
     return idx($this->auxiliaryAttributes, $key, $default);
   }
 
   public function setAuxiliaryAttribute($key, $val) {
     if ($this->auxiliaryAttributes === null) {
       throw new Exception("Attach auxiliary attributes before setting them!");
     }
     $this->auxiliaryAttributes[$key] = $val;
     $this->auxiliaryDirty[$key] = true;
     return $this;
   }
 
   public function setTitle($title) {
     $this->title = $title;
     if (!$this->getID()) {
       $this->originalTitle = $title;
     }
     return $this;
   }
 
   public function attachAuxiliaryAttributes(array $attrs) {
     if ($this->auxiliaryDirty) {
       throw new Exception(
         "This object has dirty attributes, you can not attach new attributes ".
         "without writing or discarding the dirty attributes.");
     }
     $this->auxiliaryAttributes = $attrs;
     return $this;
   }
 
   public function loadAndAttachAuxiliaryAttributes() {
     if (!$this->getPHID()) {
       $this->auxiliaryAttributes = array();
       return $this;
     }
 
     $storage = id(new ManiphestTaskAuxiliaryStorage())->loadAllWhere(
       'taskPHID = %s',
       $this->getPHID());
 
     $this->auxiliaryAttributes = mpull($storage, 'getValue', 'getName');
 
     return $this;
   }
 
 
   public function save() {
     if (!$this->mailKey) {
       $this->mailKey = Filesystem::readRandomCharacters(20);
     }
 
     $result = parent::save();
 
     if ($this->projectsNeedUpdate) {
       // If we've changed the project PHIDs for this task, update the link
       // table.
       ManiphestTaskProject::updateTaskProjects($this);
       $this->projectsNeedUpdate = false;
     }
 
     if ($this->subscribersNeedUpdate) {
       // If we've changed the subscriber PHIDs for this task, update the link
       // table.
       ManiphestTaskSubscriber::updateTaskSubscribers($this);
       $this->subscribersNeedUpdate = false;
     }
 
     if ($this->auxiliaryDirty) {
       $this->writeAuxiliaryUpdates();
       $this->auxiliaryDirty = array();
     }
 
     return $result;
   }
 
   private function writeAuxiliaryUpdates() {
     $table = new ManiphestTaskAuxiliaryStorage();
     $conn_w = $table->establishConnection('w');
     $update = array();
     $remove = array();
 
     foreach ($this->auxiliaryDirty as $key => $dirty) {
       $value = $this->getAuxiliaryAttribute($key);
       if ($value === null) {
         $remove[$key] = true;
       } else {
         $update[$key] = $value;
       }
     }
 
     if ($remove) {
       queryfx(
         $conn_w,
         'DELETE FROM %T WHERE taskPHID = %s AND name IN (%Ls)',
         $table->getTableName(),
         $this->getPHID(),
         array_keys($remove));
     }
 
     if ($update) {
       $sql = array();
       foreach ($update as $key => $val) {
         $sql[] = qsprintf(
           $conn_w,
           '(%s, %s, %s)',
           $this->getPHID(),
           $key,
           $val);
       }
       queryfx(
         $conn_w,
         'INSERT INTO %T (taskPHID, name, value) VALUES %Q
           ON DUPLICATE KEY UPDATE value = VALUES(value)',
         $table->getTableName(),
         implode(', ', $sql));
     }
   }
 
 
 /* -(  Markup Interface  )--------------------------------------------------- */
 
 
   /**
    * @task markup
    */
   public function getMarkupFieldKey($field) {
     $hash = PhabricatorHash::digest($this->getMarkupText($field));
     $id = $this->getID();
     return "maniphest:T{$id}:{$field}:{$hash}";
   }
 
 
   /**
    * @task markup
    */
   public function getMarkupText($field) {
     return $this->getDescription();
   }
 
 
   /**
    * @task markup
    */
   public function newMarkupEngine($field) {
     return PhabricatorMarkupEngine::newManiphestMarkupEngine();
   }
 
 
   /**
    * @task markup
    */
   public function didMarkupText(
     $field,
     $output,
     PhutilMarkupEngine $engine) {
     return $output;
   }
 
 
   /**
    * @task markup
    */
   public function shouldUseMarkupCache($field) {
     return (bool)$this->getID();
   }
 
 }
diff --git a/src/applications/maniphest/view/ManiphestTransactionDetailView.php b/src/applications/maniphest/view/ManiphestTransactionDetailView.php
index ccb4c7444f..ddaf8092a5 100644
--- a/src/applications/maniphest/view/ManiphestTransactionDetailView.php
+++ b/src/applications/maniphest/view/ManiphestTransactionDetailView.php
@@ -1,766 +1,810 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 /**
  * @group maniphest
  */
 final class ManiphestTransactionDetailView extends ManiphestView {
 
   private $transactions;
   private $handles;
   private $markupEngine;
   private $forEmail;
   private $preview;
   private $commentNumber;
   private $rangeSpecification;
 
   private $renderSummaryOnly;
   private $renderFullSummary;
   private $user;
 
   private $auxiliaryFields;
 
   public function setAuxiliaryFields(array $fields) {
     assert_instances_of($fields, 'ManiphestAuxiliaryFieldSpecification');
     $this->auxiliaryFields = mpull($fields, null, 'getAuxiliaryKey');
     return $this;
   }
 
   public function getAuxiliaryField($key) {
     return idx($this->auxiliaryFields, $key);
   }
 
   public function setTransactionGroup(array $transactions) {
     assert_instances_of($transactions, 'ManiphestTransaction');
     $this->transactions = $transactions;
     return $this;
   }
 
   public function setHandles(array $handles) {
     assert_instances_of($handles, 'PhabricatorObjectHandle');
     $this->handles = $handles;
     return $this;
   }
 
   public function setMarkupEngine(PhabricatorMarkupEngine $engine) {
     $this->markupEngine = $engine;
     return $this;
   }
 
   public function setPreview($preview) {
     $this->preview = $preview;
     return $this;
   }
 
   public function setRenderSummaryOnly($render_summary_only) {
     $this->renderSummaryOnly = $render_summary_only;
     return $this;
   }
 
   public function getRenderSummaryOnly() {
     return $this->renderSummaryOnly;
   }
 
   public function setRenderFullSummary($render_full_summary) {
     $this->renderFullSummary = $render_full_summary;
     return $this;
   }
 
   public function getRenderFullSummary() {
     return $this->renderFullSummary;
   }
 
   public function setCommentNumber($comment_number) {
     $this->commentNumber = $comment_number;
     return $this;
   }
 
   public function setUser(PhabricatorUser $user) {
     $this->user = $user;
     return $this;
   }
 
   public function setRangeSpecification($range) {
     $this->rangeSpecification = $range;
     return $this;
   }
 
   public function getRangeSpecification() {
     return $this->rangeSpecification;
   }
 
   public function renderForEmail($with_date) {
     $this->forEmail = true;
 
     $transaction = reset($this->transactions);
     $author = $this->renderHandles(array($transaction->getAuthorPHID()));
 
     $action = null;
     $descs = array();
     $comments = null;
     foreach ($this->transactions as $transaction) {
       list($verb, $desc, $classes) = $this->describeAction($transaction);
       if ($desc === null) {
         continue;
       }
       if ($action === null) {
         $action = $verb;
       }
       $desc = $author.' '.$desc.'.';
       if ($with_date) {
         // NOTE: This is going into a (potentially multi-recipient) email so
         // we can't use a single user's timezone preferences. Use the server's
         // instead, but make the timezone explicit.
         $datetime = date('M jS \a\t g:i A T', $transaction->getDateCreated());
         $desc = "On {$datetime}, {$desc}";
       }
       $descs[] = $desc;
       if ($transaction->hasComments()) {
         $comments = $transaction->getComments();
       }
     }
 
     $descs = implode("\n", $descs);
 
     if ($comments) {
       $descs .= "\n".$comments;
     }
 
     foreach ($this->transactions as $transaction) {
       $supplemental = $this->renderSupplementalInfoForEmail($transaction);
       if ($supplemental) {
         $descs .= "\n\n".$supplemental;
       }
     }
 
     $this->forEmail = false;
     return array($action, $descs);
   }
 
   public function render() {
 
     if (!$this->user) {
       throw new Exception("Call setUser() before render()!");
     }
 
     $handles = $this->handles;
     $transactions = $this->transactions;
 
     require_celerity_resource('maniphest-transaction-detail-css');
 
     $comment_transaction = null;
     foreach ($this->transactions as $transaction) {
       if ($transaction->hasComments()) {
         $comment_transaction = $transaction;
         break;
       }
     }
     $any_transaction = reset($transactions);
 
     $author = $this->handles[$any_transaction->getAuthorPHID()];
 
     $more_classes = array();
     $descs = array();
     foreach ($transactions as $transaction) {
       list($verb, $desc, $classes) = $this->describeAction($transaction);
       if ($desc === null) {
         continue;
       }
       $more_classes = array_merge($more_classes, $classes);
       $full_summary = null;
       if ($this->getRenderFullSummary()) {
         $full_summary = $this->renderFullSummary($transaction);
       }
       $descs[] = javelin_render_tag(
         'div',
         array(
           'sigil' => 'maniphest-transaction-description',
         ),
         $author->renderLink().' '.$desc.'.'.$full_summary);
     }
 
     if ($this->getRenderSummaryOnly()) {
       return implode("\n", $descs);
     }
 
     if ($comment_transaction && $comment_transaction->hasComments()) {
       $comment_block = $this->markupEngine->getOutput(
         $comment_transaction,
         ManiphestTransaction::MARKUP_FIELD_BODY);
       $comment_block =
         '<div class="maniphest-transaction-comments phabricator-remarkup">'.
           $comment_block.
         '</div>';
     } else {
       $comment_block = null;
     }
 
     $source_transaction = nonempty($comment_transaction, $any_transaction);
 
     $xaction_view = id(new PhabricatorTransactionView())
       ->setUser($this->user)
       ->setImageURI($author->getImageURI())
       ->setContentSource($source_transaction->getContentSource())
       ->setActions($descs);
 
     foreach ($more_classes as $class) {
       $xaction_view->addClass($class);
     }
 
     if ($this->preview) {
       $xaction_view->setIsPreview($this->preview);
     } else {
       $xaction_view->setEpoch($any_transaction->getDateCreated());
       if ($this->commentNumber) {
         $anchor_name = 'comment-'.$this->commentNumber;
         $anchor_text = 'T'.$any_transaction->getTaskID().'#'.$anchor_name;
 
         $xaction_view->setAnchor($anchor_name, $anchor_text);
       }
     }
 
     $xaction_view->appendChild($comment_block);
 
     return $xaction_view->render();
   }
 
   private function renderSupplementalInfoForEmail($transaction) {
     $handles = $this->handles;
 
     $type = $transaction->getTransactionType();
     $new = $transaction->getNewValue();
     $old = $transaction->getOldValue();
 
     switch ($type) {
       case ManiphestTransactionType::TYPE_DESCRIPTION:
         return "NEW DESCRIPTION\n  ".trim($new)."\n\n".
                "PREVIOUS DESCRIPTION\n  ".trim($old);
       case ManiphestTransactionType::TYPE_ATTACH:
         $old_raw = nonempty($old, array());
         $new_raw = nonempty($new, array());
 
         $attach_types = array(
           PhabricatorPHIDConstants::PHID_TYPE_DREV,
           PhabricatorPHIDConstants::PHID_TYPE_FILE,
         );
 
         foreach ($attach_types as $attach_type) {
           $old = array_keys(idx($old_raw, $attach_type, array()));
           $new = array_keys(idx($new_raw, $attach_type, array()));
           if ($old != $new) {
             break;
           }
         }
 
         $added = array_diff($new, $old);
         if (!$added) {
           break;
         }
 
         $links = array();
         foreach (array_select_keys($handles, $added) as $handle) {
           $links[] = '  '.PhabricatorEnv::getProductionURI($handle->getURI());
         }
         $links = implode("\n", $links);
 
         switch ($attach_type) {
           case PhabricatorPHIDConstants::PHID_TYPE_DREV:
             $title = 'ATTACHED REVISIONS';
             break;
           case PhabricatorPHIDConstants::PHID_TYPE_FILE:
             $title = 'ATTACHED FILES';
             break;
         }
 
         return $title."\n".$links;
       case ManiphestTransactionType::TYPE_EDGE:
         $add = array_diff_key($new, $old);
         if (!$add) {
           break;
         }
 
         $links = array();
         foreach ($add as $phid => $ignored) {
           $handle = $handles[$phid];
           $links[] = '  '.PhabricatorEnv::getProductionURI($handle->getURI());
         }
         $links = implode("\n", $links);
 
         $edge_type = $transaction->getMetadataValue('edge:type');
         $title = $this->getEdgeEmailTitle($edge_type, $add);
 
         return $title."\n".$links;
       default:
         break;
     }
 
     return null;
   }
 
   private function describeAction($transaction) {
     $verb = null;
     $desc = null;
     $classes = array();
 
     $handles = $this->handles;
 
     $type = $transaction->getTransactionType();
     $author_phid = $transaction->getAuthorPHID();
     $new = $transaction->getNewValue();
     $old = $transaction->getOldValue();
     switch ($type) {
       case ManiphestTransactionType::TYPE_TITLE:
         $verb = 'Retitled';
         $desc = 'changed the title from '.$this->renderString($old).
                                    ' to '.$this->renderString($new);
         break;
       case ManiphestTransactionType::TYPE_DESCRIPTION:
         $verb = 'Edited';
         if ($this->forEmail || $this->getRenderFullSummary()) {
           $desc = 'updated the task description';
         } else {
           $desc = 'updated the task description; '.
                   $this->renderExpandLink($transaction);
         }
         break;
       case ManiphestTransactionType::TYPE_NONE:
         $verb = 'Commented On';
         $desc = 'added a comment';
         break;
       case ManiphestTransactionType::TYPE_OWNER:
         if ($transaction->getAuthorPHID() == $new) {
           $verb = 'Claimed';
           $desc = 'claimed this task';
           $classes[] = 'claimed';
         } else if (!$new) {
           $verb = 'Up For Grabs';
           $desc = 'placed this task up for grabs';
           $classes[] = 'upforgrab';
         } else if (!$old) {
           $verb = 'Assigned';
           $desc = 'assigned this task to '.$this->renderHandles(array($new));
           $classes[] = 'assigned';
         } else {
           $verb = 'Reassigned';
           $desc = 'reassigned this task from '.
                   $this->renderHandles(array($old)).
                   ' to '.
                   $this->renderHandles(array($new));
           $classes[] = 'reassigned';
         }
         break;
       case ManiphestTransactionType::TYPE_CCS:
         $added   = array_diff($new, $old);
         $removed = array_diff($old, $new);
         // can only add in preview so just show placeholder if nothing to add
         if ($this->preview && empty($added)) {
           $verb = 'Changed CC';
           $desc = 'changed CCs..';
           break;
         }
         if ($added && !$removed) {
           $verb = 'Added CC';
           if (count($added) == 1) {
             $desc = 'added '.$this->renderHandles($added).' to CC';
           } else {
             $desc = 'added CCs: '.$this->renderHandles($added);
           }
         } else if ($removed && !$added) {
           $verb = 'Removed CC';
           if (count($removed) == 1) {
             $desc = 'removed '.$this->renderHandles($removed).' from CC';
           } else {
             $desc = 'removed CCs: '.$this->renderHandles($removed);
           }
         } else {
           $verb = 'Changed CC';
           $desc = 'changed CCs, added: '.$this->renderHandles($added).'; '.
                              'removed: '.$this->renderHandles($removed);
         }
         break;
       case ManiphestTransactionType::TYPE_EDGE:
         $edge_type = $transaction->getMetadataValue('edge:type');
 
         $add = array_diff_key($new, $old);
         $rem = array_diff_key($old, $new);
 
         if ($add && !$rem) {
           $verb = $this->getEdgeAddVerb($edge_type);
           $desc = $this->getEdgeAddList($edge_type, $add);
         } else if ($rem && !$add) {
           $verb = $this->getEdgeRemVerb($edge_type);
           $desc = $this->getEdgeRemList($edge_type, $rem);
         } else {
           $verb = $this->getEdgeEditVerb($edge_type);
           $desc = $this->getEdgeEditList($edge_type, $add, $rem);
         }
         break;
       case ManiphestTransactionType::TYPE_PROJECTS:
         $added   = array_diff($new, $old);
         $removed = array_diff($old, $new);
         // can only add in preview so just show placeholder if nothing to add
         if ($this->preview && empty($added)) {
           $verb = 'Changed Projects';
           $desc = 'changed projects..';
           break;
         }
         if ($added && !$removed) {
           $verb = 'Added Project';
           if (count($added) == 1) {
             $desc = 'added project '.$this->renderHandles($added);
           } else {
             $desc = 'added projects: '.$this->renderHandles($added);
           }
         } else if ($removed && !$added) {
           $verb = 'Removed Project';
           if (count($removed) == 1) {
             $desc = 'removed project '.$this->renderHandles($removed);
           } else {
             $desc = 'removed projects: '.$this->renderHandles($removed);
           }
         } else {
           $verb = 'Changed Projects';
           $desc = 'changed projects, added: '.$this->renderHandles($added).'; '.
                                   'removed: '.$this->renderHandles($removed);
         }
         break;
       case ManiphestTransactionType::TYPE_STATUS:
         if ($new == ManiphestTaskStatus::STATUS_OPEN) {
           if ($old) {
             $verb = 'Reopened';
             $desc = 'reopened this task';
             $classes[] = 'reopened';
           } else {
             $verb = 'Created';
             $desc = 'created this task';
             $classes[] = 'created';
           }
         } else if ($new == ManiphestTaskStatus::STATUS_CLOSED_SPITE) {
           $verb = 'Spited';
           $desc = 'closed this task out of spite';
           $classes[] = 'spited';
         } else if ($new == ManiphestTaskStatus::STATUS_CLOSED_DUPLICATE) {
           $verb = 'Merged';
           $desc = 'closed this task as a duplicate';
           $classes[] = 'duplicate';
         } else {
           $verb = 'Closed';
           $full = idx(ManiphestTaskStatus::getTaskStatusMap(), $new, '???');
           $desc = 'closed this task as "'.$full.'"';
           $classes[] = 'closed';
         }
         break;
       case ManiphestTransactionType::TYPE_PRIORITY:
         $old_name = ManiphestTaskPriority::getTaskPriorityName($old);
         $new_name = ManiphestTaskPriority::getTaskPriorityName($new);
 
         if ($old == ManiphestTaskPriority::PRIORITY_TRIAGE) {
           $verb = 'Triaged';
           $desc = 'triaged this task as "'.$new_name.'" priority';
         } else if ($old > $new) {
           $verb = 'Lowered Priority';
           $desc = 'lowered the priority of this task from "'.$old_name.'" to '.
                   '"'.$new_name.'"';
         } else {
           $verb = 'Raised Priority';
           $desc = 'raised the priority of this task from "'.$old_name.'" to '.
                   '"'.$new_name.'"';
         }
         if ($new == ManiphestTaskPriority::PRIORITY_UNBREAK_NOW) {
           $classes[] = 'unbreaknow';
         }
         break;
       case ManiphestTransactionType::TYPE_ATTACH:
         if ($this->preview) {
           $verb = 'Changed Attached';
           $desc = 'changed attachments..';
           break;
         }
 
         $old_raw = nonempty($old, array());
         $new_raw = nonempty($new, array());
 
         foreach (array(
           PhabricatorPHIDConstants::PHID_TYPE_DREV,
           PhabricatorPHIDConstants::PHID_TYPE_TASK,
           PhabricatorPHIDConstants::PHID_TYPE_FILE) as $attach_type) {
           $old = array_keys(idx($old_raw, $attach_type, array()));
           $new = array_keys(idx($new_raw, $attach_type, array()));
           if ($old != $new) {
             break;
           }
         }
 
         $added = array_diff($new, $old);
         $removed = array_diff($old, $new);
 
         $add_desc = $this->renderHandles($added);
         $rem_desc = $this->renderHandles($removed);
 
         if ($added && !$removed) {
           $verb = 'Attached';
           $desc =
             'attached '.
             $this->getAttachName($attach_type, count($added)).': '.
             $add_desc;
         } else if ($removed && !$added) {
           $verb = 'Detached';
           $desc =
             'detached '.
             $this->getAttachName($attach_type, count($removed)).': '.
             $rem_desc;
         } else {
           $verb = 'Changed Attached';
           $desc =
             'changed attached '.
             $this->getAttachName($attach_type, count($added) + count($removed)).
             ', added: '.$add_desc.'; '.
             'removed: '.$rem_desc;
         }
         break;
       case ManiphestTransactionType::TYPE_AUXILIARY:
         $aux_key = $transaction->getMetadataValue('aux:key');
         $aux_field = $this->getAuxiliaryField($aux_key);
 
         $verb = null;
         if ($aux_field) {
           $verb = $aux_field->renderTransactionEmailVerb($transaction);
         }
         if ($verb === null) {
           if ($old === null) {
             $verb = "Set Field";
           } else if ($new === null) {
             $verb = "Removed Field";
           } else {
             $verb = "Updated Field";
           }
         }
 
         $desc = null;
         if ($aux_field) {
           $use_field = $aux_field;
         } else {
           $use_field = id(new ManiphestAuxiliaryFieldDefaultSpecification())
             ->setFieldType(
               ManiphestAuxiliaryFieldDefaultSpecification::TYPE_STRING);
         }
 
         $desc = $use_field->renderTransactionDescription(
           $transaction,
           $this->forEmail
             ? ManiphestAuxiliaryFieldSpecification::RENDER_TARGET_TEXT
             : ManiphestAuxiliaryFieldSpecification::RENDER_TARGET_HTML);
 
         break;
       default:
         return array($type, ' brazenly '.$type."'d", $classes);
     }
 
     return array($verb, $desc, $classes);
   }
 
   private function renderFullSummary($transaction) {
     switch ($transaction->getTransactionType()) {
       case ManiphestTransactionType::TYPE_DESCRIPTION:
         $id = $transaction->getID();
 
         $old_text = wordwrap($transaction->getOldValue(), 80);
         $new_text = wordwrap($transaction->getNewValue(), 80);
 
         $engine = new PhabricatorDifferenceEngine();
         $changeset = $engine->generateChangesetFromFileContent($old_text,
                                                                $new_text);
 
         $whitespace_mode = DifferentialChangesetParser::WHITESPACE_SHOW_ALL;
 
         $parser = new DifferentialChangesetParser();
         $parser->setChangeset($changeset);
         $parser->setRenderingReference($id);
         $parser->setWhitespaceMode($whitespace_mode);
 
         $spec = $this->getRangeSpecification();
         list($range_s, $range_e, $mask) =
           DifferentialChangesetParser::parseRangeSpecification($spec);
         $output = $parser->render($range_s, $range_e, $mask);
 
         return $output;
     }
 
     return null;
   }
 
   private function renderExpandLink($transaction) {
     $id = $transaction->getID();
 
     Javelin::initBehavior('maniphest-transaction-expand');
 
     return javelin_render_tag(
       'a',
       array(
         'href'          => '/maniphest/task/descriptionchange/'.$id.'/',
         'sigil'         => 'maniphest-expand-transaction',
         'mustcapture'   => true,
       ),
       'show details');
   }
 
   private function renderHandles($phids) {
     $links = array();
     foreach ($phids as $phid) {
       if ($this->forEmail) {
         $links[] = $this->handles[$phid]->getName();
       } else {
         $links[] = $this->handles[$phid]->renderLink();
       }
     }
     return implode(', ', $links);
   }
 
   private function renderString($string) {
     if ($this->forEmail) {
       return '"'.$string.'"';
     } else {
       return '"'.phutil_escape_html($string).'"';
     }
   }
 
 
 /* -(  Strings  )------------------------------------------------------------ */
 
 
   /**
    * @task strings
    */
   private function getAttachName($attach_type, $count) {
     switch ($attach_type) {
       case PhabricatorPHIDConstants::PHID_TYPE_DREV:
         return pht('Differential Revision(s)', $count);
       case PhabricatorPHIDConstants::PHID_TYPE_FILE:
         return pht('file(s)', $count);
       case PhabricatorPHIDConstants::PHID_TYPE_TASK:
         return pht('Maniphest Task(s)', $count);
     }
   }
 
+
+  /**
+   * @task strings
+   */
   private function getEdgeEmailTitle($type, $count) {
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('DEPENDS ON %d TASK(S)', $count);
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('DEPENDENT %d TASK(s)', $count);
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('ATTACHED %d COMMIT(S)', $count);
       default:
         return pht('ATTACHED %d OBJECT(S)', $count);
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeAddVerb($type) {
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('Added Dependency');
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('Added Dependent Task');
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('Added Commit');
       default:
         return pht('Added Object');
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeRemVerb($type) {
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('Removed Dependency');
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('Removed Dependent Task');
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('Removed Commit');
       default:
         return pht('Removed Object');
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeEditVerb($type) {
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('Changed Dependencies');
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('Changed Dependent Tasks');
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('Changed Commits');
       default:
         return pht('Changed Objects');
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeAddList($type, array $add) {
     $list = $this->renderHandles(array_keys($add));
 
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('added %d dependencie(s): %s', $add, $list);
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('added %d dependent task(s): %s', $add, $list);
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('added %d commit(s): %s', $add, $list);
       default:
         return pht('added %d object(s): %s', $add, $list);
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeRemList($type, array $rem) {
     $list = $this->renderHandles(array_keys($rem));
 
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht('removed %d dependencie(s): %s', $rem, $list);
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht('removed %d dependent task(s): %s', $rem, $list);
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht('removed %d commit(s): %s', $rem, $list);
       default:
         return pht('removed %d object(s): %s', $rem, $list);
     }
   }
 
 
   /**
    * @task strings
    */
   private function getEdgeEditList($type, array $add, array $rem) {
     $add_list = $this->renderHandles(array_keys($add));
     $rem_list = $this->renderHandles(array_keys($rem));
 
     switch ($type) {
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK:
+        return pht(
+          'changed %d dependencie(s), added %d: %s; removed %d: %s',
+          count($add) + count($rem),
+          $add,
+          $add_list,
+          $rem,
+          $rem_list);
+      case PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK:
+        return pht(
+          'changed %d dependent task(s), added %d: %s; removed %d: %s',
+          count($add) + count($rem),
+          $add,
+          $add_list,
+          $rem,
+          $rem_list);
       case PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT:
         return pht(
           'changed %d commit(s), added %d: %s; removed %d: %s',
           count($add) + count($rem),
           $add,
           $add_list,
           $rem,
           $rem_list);
       default:
         return pht(
           'changed %d object(s), added %d: %s; removed %d: %s',
           count($add) + count($rem),
           $add,
           $add_list,
           $rem,
           $rem_list);
     }
   }
 
 }
diff --git a/src/applications/phid/PhabricatorObjectGraph.php b/src/applications/phid/PhabricatorObjectGraph.php
deleted file mode 100644
index 4eedc42321..0000000000
--- a/src/applications/phid/PhabricatorObjectGraph.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * Copyright 2011 Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-final class PhabricatorObjectGraph extends AbstractDirectedGraph {
-
-  private $edgeType;
-
-  public function setEdgeType($edge_type) {
-    $this->edgeType = $edge_type;
-    return $this;
-  }
-
-  protected function loadEdges(array $nodes) {
-    if (!$this->edgeType) {
-      throw new Exception("Set edge type before loading graph!");
-    }
-
-    $handle_data = new PhabricatorObjectHandleData($nodes);
-    $objects = $handle_data->loadObjects();
-
-    $result = array();
-    foreach ($nodes as $phid) {
-      $object = idx($objects, $phid);
-      if ($object) {
-        $result[$phid] = $object->getAttachedPHIDs($this->edgeType);
-      } else {
-        $result[$phid] = array();
-      }
-    }
-
-    return $result;
-  }
-
-}
diff --git a/src/applications/search/controller/PhabricatorSearchAttachController.php b/src/applications/search/controller/PhabricatorSearchAttachController.php
index 670e2103ff..ff9d1815b1 100644
--- a/src/applications/search/controller/PhabricatorSearchAttachController.php
+++ b/src/applications/search/controller/PhabricatorSearchAttachController.php
@@ -1,327 +1,310 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 /**
  * @group search
  */
 final class PhabricatorSearchAttachController
   extends PhabricatorSearchBaseController {
 
   private $phid;
   private $type;
   private $action;
 
   const ACTION_ATTACH       = 'attach';
   const ACTION_MERGE        = 'merge';
   const ACTION_DEPENDENCIES = 'dependencies';
   const ACTION_EDGE         = 'edge';
 
   public function willProcessRequest(array $data) {
     $this->phid = $data['phid'];
     $this->type = $data['type'];
     $this->action = idx($data, 'action', self::ACTION_ATTACH);
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $handle_data = new PhabricatorObjectHandleData(array($this->phid));
     $handles = $handle_data->loadHandles();
     $handle = $handles[$this->phid];
 
     $object_type = $handle->getType();
     $attach_type = $this->type;
 
     $objects = $handle_data->loadObjects();
     $object = idx($objects, $this->phid);
 
     if (!$object) {
       return new Aphront404Response();
     }
 
+    $edge_type = null;
+    switch ($this->action) {
+      case self::ACTION_EDGE:
+      case self::ACTION_DEPENDENCIES:
+        $edge_type = $this->getEdgeType($object_type, $attach_type);
+        break;
+    }
+
     if ($request->isFormPost()) {
       $phids = explode(';', $request->getStr('phids'));
       $phids = array_filter($phids);
       $phids = array_values($phids);
 
-      switch ($this->action) {
-        case self::ACTION_MERGE:
-          return $this->performMerge($object, $handle, $phids);
-
-        case self::ACTION_EDGE:
-          $edge_type = $this->getEdgeType($object_type, $attach_type);
-
-          $old_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
-            $this->phid,
-            $edge_type);
-          $add_phids = $phids;
-          $rem_phids = array_diff($old_phids, $add_phids);
-          $editor = id(new PhabricatorEdgeEditor());
-          $editor->setUser($user);
-          foreach ($add_phids as $phid) {
-            $editor->addEdge($this->phid, $edge_type, $phid);
-          }
-          foreach ($rem_phids as $phid) {
-            $editor->removeEdge($this->phid, $edge_type, $phid);
-          }
+      if ($edge_type) {
+        $old_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
+          $this->phid,
+          $edge_type);
+        $add_phids = $phids;
+        $rem_phids = array_diff($old_phids, $add_phids);
+
+        $editor = id(new PhabricatorEdgeEditor());
+        $editor->setUser($user);
+        foreach ($add_phids as $phid) {
+          $editor->addEdge($this->phid, $edge_type, $phid);
+        }
+        foreach ($rem_phids as $phid) {
+          $editor->removeEdge($this->phid, $edge_type, $phid);
+        }
+
+        try {
           $editor->save();
-
-          return id(new AphrontReloadResponse())->setURI($handle->getURI());
-        case self::ACTION_DEPENDENCIES:
-        case self::ACTION_ATTACH:
-          $two_way = true;
-          if ($this->action == self::ACTION_DEPENDENCIES) {
-            $two_way = false;
-            $this->detectGraphCycles(
-              $object,
+        } catch (PhabricatorEdgeCycleException $ex) {
+          $this->raiseGraphCycleException($ex);
+        }
+
+        return id(new AphrontReloadResponse())->setURI($handle->getURI());
+      } else {
+        switch ($this->action) {
+          case self::ACTION_MERGE:
+            return $this->performMerge($object, $handle, $phids);
+          case self::ACTION_ATTACH:
+            $editor = new PhabricatorObjectAttachmentEditor(
+              $object_type,
+              $object);
+            $editor->setUser($this->getRequest()->getUser());
+            $editor->attachObjects(
               $attach_type,
-              $phids);
-          }
-
-          $editor = new PhabricatorObjectAttachmentEditor(
-            $object_type,
-            $object);
-          $editor->setUser($this->getRequest()->getUser());
-          $editor->attachObjects(
-            $attach_type,
-            $phids,
-            $two_way);
-
-          return id(new AphrontReloadResponse())->setURI($handle->getURI());
-        default:
-          throw new Exception("Unsupported attach action.");
+              $phids,
+              $two_way = false);
+
+            return id(new AphrontReloadResponse())->setURI($handle->getURI());
+          default:
+            throw new Exception("Unsupported attach action.");
+        }
       }
     } else {
-      switch ($this->action) {
-        case self::ACTION_ATTACH:
-        case self::ACTION_DEPENDENCIES:
-          $phids = $object->getAttachedPHIDs($attach_type);
-          break;
-        case self::ACTION_EDGE:
-          $edge_type = $this->getEdgeType($object_type, $attach_type);
-
-          $phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
-            $this->phid,
-            $edge_type);
-          break;
-        default:
-          $phids = array();
-          break;
+      if ($edge_type) {
+        $phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
+          $this->phid,
+          $edge_type);
+      } else {
+        switch ($this->action) {
+          case self::ACTION_ATTACH:
+          case self::ACTION_DEPENDENCIES:
+            $phids = $object->getAttachedPHIDs($attach_type);
+            break;
+          default:
+            $phids = array();
+            break;
+        }
       }
     }
 
     $strings = $this->getStrings();
 
     $handles = id(new PhabricatorObjectHandleData($phids))
       ->loadHandles();
 
     $obj_dialog = new PhabricatorObjectSelectorDialog();
     $obj_dialog
       ->setUser($user)
       ->setHandles($handles)
       ->setFilters(array(
         'assigned' => 'Assigned to Me',
         'created'  => 'Created By Me',
         'open'     => 'All Open '.$strings['target_plural_noun'],
         'all'      => 'All '.$strings['target_plural_noun'],
       ))
       ->setSelectedFilter($strings['selected'])
       ->setExcluded($this->phid)
       ->setCancelURI($handle->getURI())
       ->setSearchURI('/search/select/'.$attach_type.'/')
       ->setTitle($strings['title'])
       ->setHeader($strings['header'])
       ->setButtonText($strings['button'])
       ->setInstructions($strings['instructions']);
 
     $dialog = $obj_dialog->buildDialog();
 
     return id(new AphrontDialogResponse())->setDialog($dialog);
   }
 
   private function performMerge(
     ManiphestTask $task,
     PhabricatorObjectHandle $handle,
     array $phids) {
 
     $user = $this->getRequest()->getUser();
     $response = id(new AphrontReloadResponse())->setURI($handle->getURI());
 
     $phids = array_fill_keys($phids, true);
     unset($phids[$task->getPHID()]); // Prevent merging a task into itself.
 
     if (!$phids) {
       return $response;
     }
 
     $targets = id(new ManiphestTask())->loadAllWhere(
       'phid in (%Ls) ORDER BY id ASC',
       array_keys($phids));
 
     if (empty($targets)) {
       return $response;
     }
 
     $editor = new ManiphestTransactionEditor();
 
     $task_names = array();
 
     $merge_into_name = 'T'.$task->getID();
 
     $cc_vector = array();
     $cc_vector[] = $task->getCCPHIDs();
     foreach ($targets as $target) {
       $cc_vector[] = $target->getCCPHIDs();
       $cc_vector[] = array(
         $target->getAuthorPHID(),
         $target->getOwnerPHID());
 
       $close_task = id(new ManiphestTransaction())
         ->setAuthorPHID($user->getPHID())
         ->setTransactionType(ManiphestTransactionType::TYPE_STATUS)
         ->setNewValue(ManiphestTaskStatus::STATUS_CLOSED_DUPLICATE)
         ->setComments("\xE2\x9C\x98 Merged into {$merge_into_name}.");
 
       $editor->applyTransactions($target, array($close_task));
 
       $task_names[] = 'T'.$target->getID();
     }
     $all_ccs = array_mergev($cc_vector);
     $all_ccs = array_filter($all_ccs);
     $all_ccs = array_unique($all_ccs);
 
     $task_names = implode(', ', $task_names);
 
     $add_ccs = id(new ManiphestTransaction())
       ->setAuthorPHID($user->getPHID())
       ->setTransactionType(ManiphestTransactionType::TYPE_CCS)
       ->setNewValue($all_ccs)
       ->setComments("\xE2\x97\x80 Merged tasks: {$task_names}.");
     $editor->applyTransactions($task, array($add_ccs));
 
     return $response;
   }
 
   private function getStrings() {
     switch ($this->type) {
       case PhabricatorPHIDConstants::PHID_TYPE_DREV:
         $noun = 'Revisions';
         $selected = 'created';
         break;
       case PhabricatorPHIDConstants::PHID_TYPE_TASK:
         $noun = 'Tasks';
         $selected = 'assigned';
         break;
       case PhabricatorPHIDConstants::PHID_TYPE_CMIT:
         $noun = 'Commits';
         $selected = 'created';
         break;
     }
 
     switch ($this->action) {
       case self::ACTION_EDGE:
       case self::ACTION_ATTACH:
         $dialog_title = "Manage Attached {$noun}";
         $header_text = "Currently Attached {$noun}";
         $button_text = "Save {$noun}";
         $instructions = null;
         break;
       case self::ACTION_MERGE:
         $dialog_title = "Merge Duplicate Tasks";
         $header_text = "Tasks To Merge";
         $button_text = "Merge {$noun}";
         $instructions =
           "These tasks will be merged into the current task and then closed. ".
           "The current task will grow stronger.";
         break;
       case self::ACTION_DEPENDENCIES:
         $dialog_title = "Edit Dependencies";
         $header_text = "Current Dependencies";
         $button_text = "Save Dependencies";
         $instructions = null;
         break;
     }
 
     return array(
       'target_plural_noun'    => $noun,
       'selected'              => $selected,
       'title'                 => $dialog_title,
       'header'                => $header_text,
       'button'                => $button_text,
       'instructions'          => $instructions,
     );
   }
 
-  private function detectGraphCycles(
-    $object,
-    $attach_type,
-    array $phids) {
-
-    // Detect graph cycles.
-    $graph = new PhabricatorObjectGraph();
-    $graph->setEdgeType($attach_type);
-    $graph->addNodes(array(
-      $object->getPHID() => $phids,
-    ));
-    $graph->loadGraph();
-
-    foreach ($phids as $phid) {
-      $cycle = $graph->detectCycles($phid);
-      if (!$cycle) {
-        continue;
-      }
-
-      // TODO: Improve this behavior so it's not all-or-nothing?
-
-      $handles = id(new PhabricatorObjectHandleData($cycle))
-        ->loadHandles();
-      $names = array();
-      foreach ($cycle as $cycle_phid) {
-        $names[] = $handles[$cycle_phid]->getFullName();
-      }
-      $names = implode(" \xE2\x86\x92 ", $names);
-      $which = $handles[$phid]->getFullName();
-      throw new Exception(
-        "You can not create a dependency on '{$which}' because it ".
-        "would create a circular dependency: {$names}.");
-    }
-  }
-
   private function getEdgeType($src_type, $dst_type) {
     $t_cmit = PhabricatorPHIDConstants::PHID_TYPE_CMIT;
     $t_task = PhabricatorPHIDConstants::PHID_TYPE_TASK;
 
     $map = array(
       $t_cmit => array(
         $t_task => PhabricatorEdgeConfig::TYPE_COMMIT_HAS_TASK,
       ),
       $t_task => array(
         $t_cmit => PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT,
+        $t_task => PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK,
       ),
     );
 
     if (empty($map[$src_type][$dst_type])) {
-      throw new Exception("Unknown edge type!");
+      return null;
     }
 
     return $map[$src_type][$dst_type];
   }
 
+  private function raiseGraphCycleException(PhabricatorEdgeCycleException $ex) {
+    $cycle = $ex->getCycle();
+
+    $handles = id(new PhabricatorObjectHandleData($cycle))
+      ->loadHandles();
+    $names = array();
+    foreach ($cycle as $cycle_phid) {
+      $names[] = $handles[$cycle_phid]->getFullName();
+    }
+    $names = implode(" \xE2\x86\x92 ", $names);
+    throw new Exception(
+      "You can not create that dependency, because it would create a ".
+      "circular dependency: {$names}.");
+  }
+
 }
diff --git a/src/infrastructure/edges/constants/PhabricatorEdgeConfig.php b/src/infrastructure/edges/constants/PhabricatorEdgeConfig.php
index 627aa2277a..77a5ba78f1 100644
--- a/src/infrastructure/edges/constants/PhabricatorEdgeConfig.php
+++ b/src/infrastructure/edges/constants/PhabricatorEdgeConfig.php
@@ -1,69 +1,75 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 final class PhabricatorEdgeConfig extends PhabricatorEdgeConstants {
 
   const TABLE_NAME_EDGE       = 'edge';
   const TABLE_NAME_EDGEDATA   = 'edgedata';
 
-  const TYPE_TASK_HAS_COMMIT  = 1;
-  const TYPE_COMMIT_HAS_TASK  = 2;
+  const TYPE_TASK_HAS_COMMIT            = 1;
+  const TYPE_COMMIT_HAS_TASK            = 2;
+  const TYPE_TASK_DEPENDS_ON_TASK       = 3;
+  const TYPE_TASK_DEPENDED_ON_BY_TASK   = 4;
 
-  const TYPE_TEST_NO_CYCLE    = 9000;
+  const TYPE_TEST_NO_CYCLE              = 9000;
 
   public static function getInverse($edge_type) {
     static $map = array(
       self::TYPE_TASK_HAS_COMMIT => self::TYPE_COMMIT_HAS_TASK,
       self::TYPE_COMMIT_HAS_TASK => self::TYPE_TASK_HAS_COMMIT,
+
+      self::TYPE_TASK_DEPENDS_ON_TASK => self::TYPE_TASK_DEPENDED_ON_BY_TASK,
+      self::TYPE_TASK_DEPENDED_ON_BY_TASK => self::TYPE_TASK_DEPENDS_ON_TASK,
     );
 
     return idx($map, $edge_type);
   }
 
   public static function shouldPreventCycles($edge_type) {
     static $map = array(
-      self::TYPE_TEST_NO_CYCLE  => true,
+      self::TYPE_TEST_NO_CYCLE          => true,
+      self::TYPE_TASK_DEPENDS_ON_TASK   => true,
     );
     return isset($map[$edge_type]);
   }
 
   public static function establishConnection($phid_type, $conn_type) {
     static $class_map = array(
       PhabricatorPHIDConstants::PHID_TYPE_TASK  => 'ManiphestTask',
       PhabricatorPHIDConstants::PHID_TYPE_CMIT  => 'PhabricatorRepository',
       PhabricatorPHIDConstants::PHID_TYPE_DREV  => 'DifferentialRevision',
       PhabricatorPHIDConstants::PHID_TYPE_FILE  => 'PhabricatorFile',
       PhabricatorPHIDConstants::PHID_TYPE_USER  => 'PhabricatorUser',
       PhabricatorPHIDConstants::PHID_TYPE_PROJ  => 'PhabricatorProject',
       PhabricatorPHIDConstants::PHID_TYPE_MLST  =>
         'PhabricatorMetaMTAMailingList',
       PhabricatorPHIDConstants::PHID_TYPE_TOBJ  => 'HarbormasterObject',
     );
 
     $class = idx($class_map, $phid_type);
 
     if (!$class) {
       throw new Exception(
         "Edges are not available for objects of type '{$phid_type}'!");
     }
 
     return newv($class, array())->establishConnection($conn_type);
   }
 
 
 }
diff --git a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
index f4f7c811c3..aa3400a3a4 100644
--- a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
+++ b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php
@@ -1,439 +1,460 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 /**
  * Add and remove edges between objects. You can use
  * @{class:PhabricatorEdgeQuery} to load object edges. For more information
  * on edges, see @{article:Using Edges}.
  *
  *    name=Adding Edges
  *    $src  = $earth_phid;
  *    $type = PhabricatorEdgeConfig::TYPE_BODY_HAS_SATELLITE;
  *    $dst  = $moon_phid;
  *
  *    id(new PhabricatorEdgeEditor())
  *      ->addEdge($src, $type, $dst)
  *      ->setUser($user)
  *      ->save();
  *
  * @task edit     Editing Edges
  * @task cycles   Cycle Prevention
  * @task internal Internals
  */
 final class PhabricatorEdgeEditor {
 
   private $addEdges = array();
   private $remEdges = array();
   private $openTransactions = array();
   private $user;
+  private $suppressEvents;
 
   public function setUser(PhabricatorUser $user) {
     $this->user = $user;
     return $this;
   }
 
 
 /* -(  Editing Edges  )------------------------------------------------------ */
 
 
   /**
    * Add a new edge (possibly also adding its inverse). Changes take effect when
    * you call @{method:save()}. If the edge already exists, it will not be
    * overwritten. Removals queued with @{method:removeEdge} are executed before
    * adds, so the effect of removing and adding the same edge is to overwrite
    * any existing edge.
    *
    * The `$options` parameter accepts these values:
    *
    *   - `data` Optional, data to write onto the edge.
    *   - `inverse_data` Optional, data to write on the inverse edge. If not
    *     provided, `data` will be written.
    *
    * @param phid  Source object PHID.
    * @param const Edge type constant.
    * @param phid  Destination object PHID.
    * @param map   Options map (see documentation).
    * @return this
    *
    * @task edit
    */
   public function addEdge($src, $type, $dst, array $options = array()) {
     foreach ($this->buildEdgeSpecs($src, $type, $dst, $options) as $spec) {
       $this->addEdges[] = $spec;
     }
     return $this;
   }
 
 
   /**
    * Remove an edge (possibly also removing its inverse). Changes take effect
    * when you call @{method:save()}. If an edge does not exist, the removal
    * will be ignored. Edges are added after edges are removed, so the effect of
    * a remove plus an add is to overwrite.
    *
    * @param phid  Source object PHID.
    * @param const Edge type constant.
    * @param phid  Destination object PHID.
    * @return this
    *
    * @task edit
    */
   public function removeEdge($src, $type, $dst) {
     foreach ($this->buildEdgeSpecs($src, $type, $dst) as $spec) {
       $this->remEdges[] = $spec;
     }
     return $this;
   }
 
 
   /**
    * Apply edge additions and removals queued by @{method:addEdge} and
    * @{method:removeEdge}. Note that transactions are opened, all additions and
    * removals are executed, and then transactions are saved. Thus, in some cases
    * it may be slightly more efficient to perform multiple edit operations
    * (e.g., adds followed by removals) if their outcomes are not dependent,
    * since transactions will not be held open as long.
    *
    * @return this
    * @task edit
    */
   public function save() {
 
     $cycle_types = $this->getPreventCyclesEdgeTypes();
 
     $locks = array();
     $caught = null;
     try {
 
       // NOTE: We write edge data first, before doing any transactions, since
       // it's OK if we just leave it hanging out in space unattached to
       // anything.
       $this->writeEdgeData();
 
       // If we're going to perform cycle detection, lock the edge type before
       // doing edits.
       if ($cycle_types) {
         $src_phids = ipull($this->addEdges, 'src');
         foreach ($cycle_types as $cycle_type) {
           $key = 'edge.cycle:'.$cycle_type;
           $locks[] = PhabricatorGlobalLock::newLock($key)->lock(15);
         }
       }
 
       static $id = 0;
       $id++;
 
       $this->sendEvent($id, PhabricatorEventType::TYPE_EDGE_WILLEDITEDGES);
 
       // NOTE: Removes first, then adds, so that "remove + add" is a useful
       // operation meaning "overwrite".
 
       $this->executeRemoves();
       $this->executeAdds();
 
       foreach ($cycle_types as $cycle_type) {
         $this->detectCycles($src_phids, $cycle_type);
       }
 
       $this->sendEvent($id, PhabricatorEventType::TYPE_EDGE_DIDEDITEDGES);
 
       $this->saveTransactions();
     } catch (Exception $ex) {
       $caught = $ex;
     }
 
 
     if ($caught) {
       $this->killTransactions();
     }
 
     foreach ($locks as $lock) {
       $lock->unlock();
     }
 
     if ($caught) {
       throw $caught;
     }
   }
 
 
 /* -(  Internals  )---------------------------------------------------------- */
 
 
   /**
    * Build the specification for an edge operation, and possibly build its
    * inverse as well.
    *
    * @task internal
    */
   private function buildEdgeSpecs($src, $type, $dst, array $options = array()) {
     $data = array();
     if (!empty($options['data'])) {
       $data['data'] = $options['data'];
     }
 
     $src_type = phid_get_type($src);
     $dst_type = phid_get_type($dst);
 
     $specs = array();
     $specs[] = array(
       'src'       => $src,
       'src_type'  => $src_type,
       'dst'       => $dst,
       'dst_type'  => $dst_type,
       'type'      => $type,
       'data'      => $data,
     );
 
     $inverse = PhabricatorEdgeConfig::getInverse($type);
     if ($inverse) {
 
       // If `inverse_data` is set, overwrite the edge data. Normally, just
       // write the same data to the inverse edge.
       if (array_key_exists('inverse_data', $options)) {
         $data['data'] = $options['inverse_data'];
       }
 
       $specs[] = array(
         'src'       => $dst,
         'src_type'  => $dst_type,
         'dst'       => $src,
         'dst_type'  => $src_type,
         'type'      => $inverse,
         'data'      => $data,
       );
     }
 
     return $specs;
   }
 
 
   /**
    * Write edge data.
    *
    * @task internal
    */
   private function writeEdgeData() {
     $adds = $this->addEdges;
 
     $writes = array();
     foreach ($adds as $key => $edge) {
       if ($edge['data']) {
         $writes[] = array($key, $edge['src_type'], json_encode($edge['data']));
       }
     }
 
     foreach ($writes as $write) {
       list($key, $src_type, $data) = $write;
       $conn_w = PhabricatorEdgeConfig::establishConnection($src_type, 'w');
       queryfx(
         $conn_w,
         'INSERT INTO %T (data) VALUES (%s)',
         PhabricatorEdgeConfig::TABLE_NAME_EDGEDATA,
         $data);
       $this->addEdges[$key]['data_id'] = $conn_w->getInsertID();
     }
   }
 
 
   /**
    * Add queued edges.
    *
    * @task internal
    */
   private function executeAdds() {
     $adds = $this->addEdges;
     $adds = igroup($adds, 'src_type');
 
     // Assign stable sequence numbers to each edge, so we have a consistent
     // ordering across edges by source and type.
     foreach ($adds as $src_type => $edges) {
       $edges_by_src = igroup($edges, 'src');
       foreach ($edges_by_src as $src => $src_edges) {
         $seq = 0;
         foreach ($src_edges as $key => $edge) {
           $src_edges[$key]['seq'] = $seq++;
           $src_edges[$key]['dateCreated'] = time();
         }
         $edges_by_src[$src] = $src_edges;
       }
       $adds[$src_type] = array_mergev($edges_by_src);
     }
 
     $inserts = array();
     foreach ($adds as $src_type => $edges) {
       $conn_w = PhabricatorEdgeConfig::establishConnection($src_type, 'w');
       $sql = array();
       foreach ($edges as $edge) {
         $sql[] = qsprintf(
           $conn_w,
           '(%s, %d, %s, %d, %d, %nd)',
           $edge['src'],
           $edge['type'],
           $edge['dst'],
           $edge['dateCreated'],
           $edge['seq'],
           idx($edge, 'data_id'));
       }
       $inserts[] = array($conn_w, $sql);
     }
 
     foreach ($inserts as $insert) {
       list($conn_w, $sql) = $insert;
       $conn_w->openTransaction();
       $this->openTransactions[] = $conn_w;
 
       foreach (array_chunk($sql, 256) as $chunk) {
         queryfx(
           $conn_w,
           'INSERT IGNORE INTO %T (src, type, dst, dateCreated, seq, dataID)
             VALUES %Q',
           PhabricatorEdgeConfig::TABLE_NAME_EDGE,
           implode(', ', $chunk));
       }
     }
   }
 
 
   /**
    * Remove queued edges.
    *
    * @task internal
    */
   private function executeRemoves() {
     $rems = $this->remEdges;
     $rems = igroup($rems, 'src_type');
 
     $deletes = array();
     foreach ($rems as $src_type => $edges) {
       $conn_w = PhabricatorEdgeConfig::establishConnection($src_type, 'w');
       $sql = array();
       foreach ($edges as $edge) {
         $sql[] = qsprintf(
           $conn_w,
           '(%s, %d, %s)',
           $edge['src'],
           $edge['type'],
           $edge['dst']);
       }
       $deletes[] = array($conn_w, $sql);
     }
 
     foreach ($deletes as $delete) {
       list($conn_w, $sql) = $delete;
 
       $conn_w->openTransaction();
       $this->openTransactions[] = $conn_w;
 
       foreach (array_chunk($sql, 256) as $chunk) {
         queryfx(
           $conn_w,
           'DELETE FROM %T WHERE (src, type, dst) IN (%Q)',
           PhabricatorEdgeConfig::TABLE_NAME_EDGE,
           implode(', ', $chunk));
       }
     }
   }
 
 
   /**
    * Save open transactions.
    *
    * @task internal
    */
   private function saveTransactions() {
     foreach ($this->openTransactions as $key => $conn_w) {
       $conn_w->saveTransaction();
       unset($this->openTransactions[$key]);
     }
   }
 
   private function killTransactions() {
     foreach ($this->openTransactions as $key => $conn_w) {
       $conn_w->killTransaction();
       unset($this->openTransactions[$key]);
     }
   }
 
+  /**
+   * Suppress edge edit events. This prevents listeners from making updates in
+   * response to edits, and is primarily useful when performing migrations. You
+   * should not normally need to use it.
+   *
+   * @param bool True to supress events related to edits.
+   * @return this
+   * @task internal
+   */
+  public function setSuppressEvents($suppress) {
+    $this->suppressEvents = $suppress;
+    return $this;
+  }
+
+
   private function sendEvent($edit_id, $event_type) {
+    if ($this->suppressEvents) {
+      return;
+    }
+
     $event = new PhabricatorEvent(
       $event_type,
       array(
         'id'    => $edit_id,
         'add'   => $this->addEdges,
         'rem'   => $this->remEdges,
       ));
     $event->setUser($this->user);
     PhutilEventEngine::dispatchEvent($event);
   }
 
 
 /* -(  Cycle Prevention  )--------------------------------------------------- */
 
 
   /**
    * Get a list of all edge types which are being added, and which we should
    * prevent cycles on.
    *
    * @return list<const> List of edge types which should have cycles prevented.
    * @task cycle
    */
   private function getPreventCyclesEdgeTypes() {
     $edge_types = array();
     foreach ($this->addEdges as $edge) {
       $edge_types[$edge['type']] = true;
     }
     foreach ($edge_types as $type => $ignored) {
       if (!PhabricatorEdgeConfig::shouldPreventCycles($type)) {
         unset($edge_types[$type]);
       }
     }
     return array_keys($edge_types);
   }
 
 
   /**
    * Detect graph cycles of a given edge type. If the edit introduces a cycle,
    * a @{class:PhabricatorEdgeCycleException} is thrown with details.
    *
    * @return void
    * @task cycle
    */
   private function detectCycles(array $phids, $edge_type) {
     // For simplicity, we just seed the graph with the affected nodes rather
     // than seeding it with their edges. To do this, we just add synthetic
     // edges from an imaginary '<seed>' node to the known edges.
 
 
     $graph = id(new PhabricatorEdgeGraph())
       ->setEdgeType($edge_type)
       ->addNodes(
         array(
           '<seed>' => $phids,
         ))
       ->loadGraph();
 
     foreach ($phids as $phid) {
       $cycle = $graph->detectCycles($phid);
       if ($cycle) {
         throw new PhabricatorEdgeCycleException($edge_type, $cycle);
       }
     }
   }
 
+
 }
diff --git a/src/infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php b/src/infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php
index d044dc1c29..17ec42e321 100644
--- a/src/infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php
+++ b/src/infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php
@@ -1,72 +1,109 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 abstract class PhabricatorBaseEnglishTranslation
   extends PhabricatorTranslation {
 
   final public function getLanguage() {
     return 'en';
   }
 
   public function getTranslations() {
     return array(
       'Differential Revision(s)' => array(
         'Differential Revision',
         'Differential Revisions',
       ),
       'file(s)' => array('file', 'files'),
       'Maniphest Task(s)' => array('Maniphest Task', 'Maniphest Tasks'),
 
       'Please fix these errors and try again.' => array(
         'Please fix this error and try again.',
         'Please fix these errors and try again.',
       ),
 
       '%d Error(s)' => array('%d Error', '%d Errors'),
       '%d Warning(s)' => array('%d Warning', '%d Warnings'),
       '%d Auto-Fix(es)' => array('%d Auto-Fix', '%d Auto-Fixes'),
       '%d Advice(s)' => array('%d Advice', '%d Pieces of Advice'),
       '%d Detail(s)' => array('%d Detail', '%d Details'),
 
       '(%d line(s))' => array('(%d line)', '(%d lines)'),
 
       'COMMIT(S)' => array('COMMIT', 'COMMITS'),
 
       '%d line(s)' => array('%d line', '%d lines'),
 
       'added %d commit(s): %s' => array(
         'added commits: %2$s',
         'added commit: %2$s',
       ),
 
       'removed %d commit(s): %s' => array(
         'removed commits: %2$s',
         'removed commit: %2$s',
       ),
 
       'changed %d commit(s), added %d: %s; removed %d: %s' =>
         'changed commits, added: %3$s; removed: %5$s',
 
       'ATTACHED %d COMMIT(S)' => array(
         'ATTACHED COMMITS',
         'ATTACHED COMMIT',
       ),
+
+      'added %d dependencie(s): %s' => array(
+        'added dependencies: %2$s',
+        'added dependency: %2$s',
+      ),
+
+      'added %d dependent task(s): %s' => array(
+        'added dependent tasks: %2$s',
+        'added dependent task: %2$s',
+      ),
+
+      'removed %d dependencie(s): %s' => array(
+        'removed dependencies: %2$s',
+        'removed dependency: %2$s',
+      ),
+
+      'removed %d dependent task(s): %s' => array(
+        'removed dependent tasks: %2$s',
+        'removed dependent task: %2$s',
+      ),
+
+      'changed %d dependencie(s), added %d: %s; removed %d: %s' =>
+        'changed dependencies, added: %3$s; removed: %5$s',
+
+      'changed %d dependent task(s), added %d: %s; removed %d: %s',
+        'changed dependent tasks, added: %3$s; removed: %5$s',
+
+      'DEPENDENT %d TASK(s)' => array(
+        'DEPENDENT TASKS',
+        'DEPENDENT TASK',
+      ),
+
+      'DEPENDS ON %d TASK(S)' => array(
+        'DEPENDS ON TASKS',
+        'DEPENDS ON TASK',
+      ),
+
     );
   }
 
 }
diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
index e4138845b8..4311367798 100644
--- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
+++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
@@ -1,921 +1,925 @@
 <?php
 
 /*
  * Copyright 2012 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 final class PhabricatorBuiltinPatchList extends PhabricatorSQLPatchList {
 
   public function getNamespace() {
     return 'phabricator';
   }
 
   private function getPatchPath($file) {
     $root = dirname(phutil_get_library_root('phabricator'));
     $path = $root.'/resources/sql/patches/'.$file;
 
     // Make sure it exists.
     Filesystem::readFile($path);
 
     return $path;
   }
 
   public function getPatches() {
     return array(
       'db.audit' => array(
         'type'  => 'db',
         'name'  => 'audit',
         'after' => array( /* First Patch */ ),
       ),
       'db.calendar' => array(
         'type'  => 'db',
         'name'  => 'calendar',
       ),
       'db.chatlog' => array(
         'type'  => 'db',
         'name'  => 'chatlog',
       ),
       'db.conduit' => array(
         'type'  => 'db',
         'name'  => 'conduit',
       ),
       'db.countdown' => array(
         'type'  => 'db',
         'name'  => 'countdown',
       ),
       'db.daemon' => array(
         'type'  => 'db',
         'name'  => 'daemon',
       ),
       'db.differential' => array(
         'type'  => 'db',
         'name'  => 'differential',
       ),
       'db.draft' => array(
         'type'  => 'db',
         'name'  => 'draft',
       ),
       'db.drydock' => array(
         'type'  => 'db',
         'name'  => 'drydock',
       ),
       'db.feed' => array(
         'type'  => 'db',
         'name'  => 'feed',
       ),
       'db.file' => array(
         'type'  => 'db',
         'name'  => 'file',
       ),
       'db.flag' => array(
         'type'  => 'db',
         'name'  => 'flag',
       ),
       'db.harbormaster' => array(
         'type'  => 'db',
         'name'  => 'harbormaster',
       ),
       'db.herald' => array(
         'type'  => 'db',
         'name'  => 'herald',
       ),
       'db.maniphest' => array(
         'type'  => 'db',
         'name'  => 'maniphest',
       ),
       'db.meta_data' => array(
         'type'  => 'db',
         'name'  => 'meta_data',
       ),
       'db.metamta' => array(
         'type'  => 'db',
         'name'  => 'metamta',
       ),
       'db.oauth_server' => array(
         'type'  => 'db',
         'name'  => 'oauth_server',
       ),
       'db.owners' => array(
         'type'  => 'db',
         'name'  => 'owners',
       ),
       'db.pastebin' => array(
         'type'  => 'db',
         'name'  => 'pastebin',
       ),
       'db.phame' => array(
         'type'  => 'db',
         'name'  => 'phame',
       ),
       'db.phriction' => array(
         'type'  => 'db',
         'name'  => 'phriction',
       ),
       'db.project' => array(
         'type'  => 'db',
         'name'  => 'project',
       ),
       'db.repository' => array(
         'type'  => 'db',
         'name'  => 'repository',
       ),
       'db.search' => array(
         'type'  => 'db',
         'name'  => 'search',
       ),
       'db.slowvote' => array(
         'type'  => 'db',
         'name'  => 'slowvote',
       ),
       'db.timeline' => array(
         'type'  => 'db',
         'name'  => 'timeline',
       ),
       'db.user' => array(
         'type'  => 'db',
         'name'  => 'user',
       ),
       'db.worker' => array(
         'type'  => 'db',
         'name'  => 'worker',
       ),
       'db.xhpastview' => array(
         'type'  => 'db',
         'name'  => 'xhpastview',
       ),
       'db.cache' => array(
         'type'  => 'db',
         'name'  => 'cache',
       ),
       '0000.legacy.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('0000.legacy.sql'),
         'legacy'  => 0,
       ),
       '000.project.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('000.project.sql'),
         'legacy'  => 0,
       ),
       '001.maniphest_projects.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('001.maniphest_projects.sql'),
         'legacy'  => 1,
       ),
       '002.oauth.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('002.oauth.sql'),
         'legacy'  => 2,
       ),
       '003.more_oauth.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('003.more_oauth.sql'),
         'legacy'  => 3,
       ),
       '004.daemonrepos.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('004.daemonrepos.sql'),
         'legacy'  => 4,
       ),
       '005.workers.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('005.workers.sql'),
         'legacy'  => 5,
       ),
       '006.repository.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('006.repository.sql'),
         'legacy'  => 6,
       ),
       '007.daemonlog.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('007.daemonlog.sql'),
         'legacy'  => 7,
       ),
       '008.repoopt.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('008.repoopt.sql'),
         'legacy'  => 8,
       ),
       '009.repo_summary.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('009.repo_summary.sql'),
         'legacy'  => 9,
       ),
       '010.herald.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('010.herald.sql'),
         'legacy'  => 10,
       ),
       '011.badcommit.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('011.badcommit.sql'),
         'legacy'  => 11,
       ),
       '012.dropphidtype.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('012.dropphidtype.sql'),
         'legacy'  => 12,
       ),
       '013.commitdetail.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('013.commitdetail.sql'),
         'legacy'  => 13,
       ),
       '014.shortcuts.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('014.shortcuts.sql'),
         'legacy'  => 14,
       ),
       '015.preferences.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('015.preferences.sql'),
         'legacy'  => 15,
       ),
       '016.userrealnameindex.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('016.userrealnameindex.sql'),
         'legacy'  => 16,
       ),
       '017.sessionkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('017.sessionkeys.sql'),
         'legacy'  => 17,
       ),
       '018.owners.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('018.owners.sql'),
         'legacy'  => 18,
       ),
       '019.arcprojects.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('019.arcprojects.sql'),
         'legacy'  => 19,
       ),
       '020.pathcapital.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('020.pathcapital.sql'),
         'legacy'  => 20,
       ),
       '021.xhpastview.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('021.xhpastview.sql'),
         'legacy'  => 21,
       ),
       '022.differentialcommit.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('022.differentialcommit.sql'),
         'legacy'  => 22,
       ),
       '023.dxkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('023.dxkeys.sql'),
         'legacy'  => 23,
       ),
       '024.mlistkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('024.mlistkeys.sql'),
         'legacy'  => 24,
       ),
       '025.commentopt.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('025.commentopt.sql'),
         'legacy'  => 25,
       ),
       '026.diffpropkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('026.diffpropkey.sql'),
         'legacy'  => 26,
       ),
       '027.metamtakeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('027.metamtakeys.sql'),
         'legacy'  => 27,
       ),
       '028.systemagent.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('028.systemagent.sql'),
         'legacy'  => 28,
       ),
       '029.cursors.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('029.cursors.sql'),
         'legacy'  => 29,
       ),
       '030.imagemacro.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('030.imagemacro.sql'),
         'legacy'  => 30,
       ),
       '031.workerrace.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('031.workerrace.sql'),
         'legacy'  => 31,
       ),
       '032.viewtime.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('032.viewtime.sql'),
         'legacy'  => 32,
       ),
       '033.privtest.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('033.privtest.sql'),
         'legacy'  => 33,
       ),
       '034.savedheader.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('034.savedheader.sql'),
         'legacy'  => 34,
       ),
       '035.proxyimage.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('035.proxyimage.sql'),
         'legacy'  => 35,
       ),
       '036.mailkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('036.mailkey.sql'),
         'legacy'  => 36,
       ),
       '037.setuptest.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('037.setuptest.sql'),
         'legacy'  => 37,
       ),
       '038.admin.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('038.admin.sql'),
         'legacy'  => 38,
       ),
       '039.userlog.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('039.userlog.sql'),
         'legacy'  => 39,
       ),
       '040.transform.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('040.transform.sql'),
         'legacy'  => 40,
       ),
       '041.heraldrepetition.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('041.heraldrepetition.sql'),
         'legacy'  => 41,
       ),
       '042.commentmetadata.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('042.commentmetadata.sql'),
         'legacy'  => 42,
       ),
       '043.pastebin.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('043.pastebin.sql'),
         'legacy'  => 43,
       ),
       '044.countdown.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('044.countdown.sql'),
         'legacy'  => 44,
       ),
       '045.timezone.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('045.timezone.sql'),
         'legacy'  => 45,
       ),
       '046.conduittoken.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('046.conduittoken.sql'),
         'legacy'  => 46,
       ),
       '047.projectstatus.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('047.projectstatus.sql'),
         'legacy'  => 47,
       ),
       '048.relationshipkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('048.relationshipkeys.sql'),
         'legacy'  => 48,
       ),
       '049.projectowner.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('049.projectowner.sql'),
         'legacy'  => 49,
       ),
       '050.taskdenormal.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('050.taskdenormal.sql'),
         'legacy'  => 50,
       ),
       '051.projectfilter.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('051.projectfilter.sql'),
         'legacy'  => 51,
       ),
       '052.pastelanguage.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('052.pastelanguage.sql'),
         'legacy'  => 52,
       ),
       '053.feed.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('053.feed.sql'),
         'legacy'  => 53,
       ),
       '054.subscribers.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('054.subscribers.sql'),
         'legacy'  => 54,
       ),
       '055.add_author_to_files.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('055.add_author_to_files.sql'),
         'legacy'  => 55,
       ),
       '056.slowvote.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('056.slowvote.sql'),
         'legacy'  => 56,
       ),
       '057.parsecache.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('057.parsecache.sql'),
         'legacy'  => 57,
       ),
       '058.missingkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('058.missingkeys.sql'),
         'legacy'  => 58,
       ),
       '059.engines.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('059.engines.php'),
         'legacy'  => 59,
       ),
       '060.phriction.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('060.phriction.sql'),
         'legacy'  => 60,
       ),
       '061.phrictioncontent.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('061.phrictioncontent.sql'),
         'legacy'  => 61,
       ),
       '062.phrictionmenu.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('062.phrictionmenu.sql'),
         'legacy'  => 62,
       ),
       '063.pasteforks.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('063.pasteforks.sql'),
         'legacy'  => 63,
       ),
       '064.subprojects.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('064.subprojects.sql'),
         'legacy'  => 64,
       ),
       '065.sshkeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('065.sshkeys.sql'),
         'legacy'  => 65,
       ),
       '066.phrictioncontent.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('066.phrictioncontent.sql'),
         'legacy'  => 66,
       ),
       '067.preferences.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('067.preferences.sql'),
         'legacy'  => 67,
       ),
       '068.maniphestauxiliarystorage.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('068.maniphestauxiliarystorage.sql'),
         'legacy'  => 68,
       ),
       '069.heraldxscript.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('069.heraldxscript.sql'),
         'legacy'  => 69,
       ),
       '070.differentialaux.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('070.differentialaux.sql'),
         'legacy'  => 70,
       ),
       '071.contentsource.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('071.contentsource.sql'),
         'legacy'  => 71,
       ),
       '072.blamerevert.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('072.blamerevert.sql'),
         'legacy'  => 72,
       ),
       '073.reposymbols.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('073.reposymbols.sql'),
         'legacy'  => 73,
       ),
       '074.affectedpath.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('074.affectedpath.sql'),
         'legacy'  => 74,
       ),
       '075.revisionhash.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('075.revisionhash.sql'),
         'legacy'  => 75,
       ),
       '076.indexedlanguages.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('076.indexedlanguages.sql'),
         'legacy'  => 76,
       ),
       '077.originalemail.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('077.originalemail.sql'),
         'legacy'  => 77,
       ),
       '078.nametoken.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('078.nametoken.sql'),
         'legacy'  => 78,
       ),
       '079.nametokenindex.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('079.nametokenindex.php'),
         'legacy'  => 79,
       ),
       '080.filekeys.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('080.filekeys.sql'),
         'legacy'  => 80,
       ),
       '081.filekeys.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('081.filekeys.php'),
         'legacy'  => 81,
       ),
       '082.xactionkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('082.xactionkey.sql'),
         'legacy'  => 82,
       ),
       '083.dxviewtime.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('083.dxviewtime.sql'),
         'legacy'  => 83,
       ),
       '084.pasteauthorkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('084.pasteauthorkey.sql'),
         'legacy'  => 84,
       ),
       '085.packagecommitrelationship.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('085.packagecommitrelationship.sql'),
         'legacy'  => 85,
       ),
       '086.formeraffil.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('086.formeraffil.sql'),
         'legacy'  => 86,
       ),
       '087.phrictiondelete.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('087.phrictiondelete.sql'),
         'legacy'  => 87,
       ),
       '088.audit.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('088.audit.sql'),
         'legacy'  => 88,
       ),
       '089.projectwiki.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('089.projectwiki.sql'),
         'legacy'  => 89,
       ),
       '090.forceuniqueprojectnames.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('090.forceuniqueprojectnames.php'),
         'legacy'  => 90,
       ),
       '091.uniqueslugkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('091.uniqueslugkey.sql'),
         'legacy'  => 91,
       ),
       '092.dropgithubnotification.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('092.dropgithubnotification.sql'),
         'legacy'  => 92,
       ),
       '093.gitremotes.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('093.gitremotes.php'),
         'legacy'  => 93,
       ),
       '094.phrictioncolumn.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('094.phrictioncolumn.sql'),
         'legacy'  => 94,
       ),
       '095.directory.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('095.directory.sql'),
         'legacy'  => 95,
       ),
       '096.filename.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('096.filename.sql'),
         'legacy'  => 96,
       ),
       '097.heraldruletypes.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('097.heraldruletypes.sql'),
         'legacy'  => 97,
       ),
       '098.heraldruletypemigration.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('098.heraldruletypemigration.php'),
         'legacy'  => 98,
       ),
       '099.drydock.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('099.drydock.sql'),
         'legacy'  => 99,
       ),
       '100.projectxaction.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('100.projectxaction.sql'),
         'legacy'  => 100,
       ),
       '101.heraldruleapplied.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('101.heraldruleapplied.sql'),
         'legacy'  => 101,
       ),
       '102.heraldcleanup.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('102.heraldcleanup.php'),
         'legacy'  => 102,
       ),
       '103.heraldedithistory.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('103.heraldedithistory.sql'),
         'legacy'  => 103,
       ),
       '104.searchkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('104.searchkey.sql'),
         'legacy'  => 104,
       ),
       '105.mimetype.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('105.mimetype.sql'),
         'legacy'  => 105,
       ),
       '106.chatlog.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('106.chatlog.sql'),
         'legacy'  => 106,
       ),
       '107.oauthserver.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('107.oauthserver.sql'),
         'legacy'  => 107,
       ),
       '108.oauthscope.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('108.oauthscope.sql'),
         'legacy'  => 108,
       ),
       '109.oauthclientphidkey.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('109.oauthclientphidkey.sql'),
         'legacy'  => 109,
       ),
       '110.commitaudit.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('110.commitaudit.sql'),
         'legacy'  => 110,
       ),
       '111.commitauditmigration.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('111.commitauditmigration.php'),
         'legacy'  => 111,
       ),
       '112.oauthaccesscoderedirecturi.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('112.oauthaccesscoderedirecturi.sql'),
         'legacy'  => 112,
       ),
       '113.lastreviewer.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('113.lastreviewer.sql'),
         'legacy'  => 113,
       ),
       '114.auditrequest.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('114.auditrequest.sql'),
         'legacy'  => 114,
       ),
       '115.prepareutf8.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('115.prepareutf8.sql'),
         'legacy'  => 115,
       ),
       '116.utf8-backup-first-expect-wait.sql' => array(
         'type'    => 'sql',
         'name'    =>
           $this->getPatchPath('116.utf8-backup-first-expect-wait.sql'),
         'legacy'  => 116,
       ),
       '117.repositorydescription.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('117.repositorydescription.php'),
         'legacy'  => 117,
       ),
       '118.auditinline.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('118.auditinline.sql'),
         'legacy'  => 118,
       ),
       '119.filehash.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('119.filehash.sql'),
         'legacy'  => 119,
       ),
       '120.noop.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('120.noop.sql'),
         'legacy'  => 120,
       ),
       '121.drydocklog.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('121.drydocklog.sql'),
         'legacy'  => 121,
       ),
       '122.flag.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('122.flag.sql'),
         'legacy'  => 122,
       ),
       '123.heraldrulelog.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('123.heraldrulelog.sql'),
         'legacy'  => 123,
       ),
       '124.subpriority.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('124.subpriority.sql'),
         'legacy'  => 124,
       ),
       '125.ipv6.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('125.ipv6.sql'),
         'legacy'  => 125,
       ),
       '126.edges.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('126.edges.sql'),
         'legacy'  => 126,
       ),
       '127.userkeybody.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('127.userkeybody.sql'),
         'legacy'  => 127,
       ),
       '128.phabricatorcom.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('128.phabricatorcom.sql'),
         'legacy'  => 128,
       ),
       '129.savedquery.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('129.savedquery.sql'),
         'legacy'  => 129,
       ),
       '130.denormalrevisionquery.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('130.denormalrevisionquery.sql'),
         'legacy'  => 130,
       ),
       '131.migraterevisionquery.php' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('131.migraterevisionquery.php'),
         'legacy'  => 131,
       ),
       '132.phame.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('132.phame.sql'),
         'legacy'  => 132,
       ),
       '133.imagemacro.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('133.imagemacro.sql'),
         'legacy'  => 133,
       ),
       '134.emptysearch.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('134.emptysearch.sql'),
         'legacy'  => 134,
       ),
       '135.datecommitted.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('135.datecommitted.sql'),
         'legacy'  => 135,
       ),
       '136.sex.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('136.sex.sql'),
         'legacy'  => 136,
       ),
       '137.auditmetadata.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('137.auditmetadata.sql'),
         'legacy'  => 137,
       ),
       '138.notification.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('138.notification.sql'),
       ),
       'holidays.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('holidays.sql'),
       ),
       'userstatus.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('userstatus.sql'),
       ),
       'emailtable.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('emailtable.sql'),
       ),
       'emailtableport.sql' => array(
         'type'    => 'php',
         'name'    => $this->getPatchPath('emailtableport.php'),
       ),
       'emailtableremove.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('emailtableremove.sql'),
       ),
       'phiddrop.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('phiddrop.sql'),
       ),
       'testdatabase.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('testdatabase.sql'),
       ),
       'ldapinfo.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('ldapinfo.sql'),
       ),
       'threadtopic.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('threadtopic.sql'),
       ),
       'usertranslation.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('usertranslation.sql'),
       ),
       'differentialbookmarks.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('differentialbookmarks.sql'),
       ),
       'harbormasterobject.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('harbormasterobject.sql'),
       ),
       'markupcache.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('markupcache.sql'),
       ),
       'maniphestxcache.sql' => array(
         'type'    => 'sql',
         'name'    => $this->getPatchPath('maniphestxcache.sql'),
       ),
+      'migrate-maniphest-dependencies.php' => array(
+        'type'    => 'php',
+        'name'    => $this->getPatchPath('migrate-maniphest-dependencies.php'),
+      ),
     );
   }
 
 }