diff --git a/SqlMergeUserAccounts.wiki b/SqlMergeUserAccounts.wiki
index b29817a..14b3d1e 100644
--- a/SqlMergeUserAccounts.wiki
+++ b/SqlMergeUserAccounts.wiki
@@ -1,235 +1 @@
-#summary Merging Gerrit User Accounts
-
-= Introduction =
-
-Sometimes users wind up with two accounts on a Gerrit server, this is especially common with OpenID installations when the user forgets which OpenID provider he had used, and opens yet another account with a different OpenID identity... but the site administrator knows they are the same person.
-
-Unfortunately this has happened often enough on review.source.android.com that I've developed a set of PostgreSQL scripts to handle merging the accounts.
-
-The first script, load_merge.sql, creates a temporary table called "links" which contains a mapping of source account_id to destination account_id.  This mapping tries to map the most recently created account for a user to the oldest account for the same user, by comparing email addresses and registration dates.  Administrators can (and probably should) edit this temporary table before running the second script.  The second script, merge_accounts.sql, performs the merge by updating all records in the database in a transaction, but does not commit it at the end.  This allows the administrator to double check any records by query before committing the merge result for good.
-
-= load_merge.sql  =
-
-{{{
-CREATE TEMP TABLE links
-(from_id INT NOT NULL
-,to_id INT NOT NULL);
-
-DELETE FROM links;
-
-INSERT INTO links (from_id, to_id)
-SELECT
- f.account_id
-,t.account_id
-FROM
- accounts f
-,accounts t
-WHERE
-     f.preferred_email is not null
- AND t.preferred_email is not null
- AND f.account_id <> t.account_id
- AND f.preferred_email = t.preferred_email
- AND f.registered_on > t.registered_on
- AND NOT EXISTS (SELECT 1 FROM links l
-                 WHERE l.from_id = f.account_id
-                   AND l.to_id = t.account_id);
-
-INSERT INTO links (from_id, to_id)
-SELECT DISTINCT
- f.account_id
-,t.account_id
-FROM
- account_external_ids e_t
-,account_external_ids e_f
-,accounts f
-,accounts t
-WHERE
-     e_t.external_id = 'Google Account ' || e_f.email_address
- AND e_f.account_id <> e_t.account_id
- AND e_f.account_id = f.account_id
- AND e_t.account_id = t.account_id
- AND f.registered_on > t.registered_on
- AND NOT EXISTS (SELECT 1 FROM links l
-                 WHERE l.from_id = f.account_id
-                   AND l.to_id = t.account_id);
-
-SELECT
- l.from_id
-,l.to_id
-,f.registered_on
-,t.registered_on
-,t.preferred_email
-FROM
- links l
-,accounts f
-,accounts t
-WHERE
-    f.account_id = l.from_id
-AND t.account_id = l.to_id
-ORDER BY t.preferred_email;
-}}}
-
-= merge_accounts.sql =
-
-{{{
-DROP TABLE to_del;
-CREATE TEMP TABLE to_del (old_id INT);
-
-CREATE TEMP TABLE tmp_ids
-(email_address VARCHAR(255)
-,account_id INT NOT NULL
-,from_account_id INT NOT NULL
-,external_id VARCHAR(255) NOT NULL
-);
-
-BEGIN TRANSACTION;
-
-DELETE FROM tmp_ids;
-INSERT INTO tmp_ids
-(account_id
-,from_account_id
-,email_address
-,external_id)
-SELECT
- l.to_id
-,l.from_id
-,e.email_address
-,e.external_id
-FROM links l, account_external_ids e
-WHERE e.account_id = l.from_id
-AND NOT EXISTS (SELECT 1 FROM account_external_ids q
-  WHERE q.account_id = l.to_id
-  AND q.external_id = e.external_id);
-
-DELETE FROM account_external_ids
-WHERE EXISTS (SELECT 1 FROM tmp_ids t
-  WHERE account_external_ids.external_id = t.external_id
-  AND account_external_ids.account_id = t.from_account_id);
-
-INSERT INTO account_external_ids
-(account_id
-,email_address
-,external_id)
-SELECT
- account_id
-,email_address
-,external_id
-FROM tmp_ids;
-
-INSERT INTO account_ssh_keys
-(ssh_public_key
-,valid
-,account_id
-,seq)
-SELECT
- k.ssh_public_key
-,k.valid
-,l.to_id
-,100 + k.seq
-FROM links l, account_ssh_keys k
-WHERE k.account_id = l.from_id
-AND NOT EXISTS (SELECT 1 FROM account_ssh_keys p
-  WHERE p.account_id = l.to_id
-    AND p.ssh_public_key = k.ssh_public_key);
-
-INSERT INTO starred_changes
-(account_id, change_id)
-SELECT l.to_id, s.change_id
-FROM links l, starred_changes s
-WHERE l.from_id IS NOT NULL
-  AND l.to_id IS NOT NULL
-  AND s.account_id = l.from_id
-  AND NOT EXISTS (SELECT 1 FROM starred_changes e
-                  WHERE e.account_id = l.to_id
-                  AND e.change_id = s.change_id);
-
-INSERT INTO account_project_watches
-(account_id, project_name)
-SELECT l.to_id, s.project_name
-FROM links l, account_project_watches s
-WHERE l.from_id IS NOT NULL
-  AND l.to_id IS NOT NULL
-  AND s.account_id = l.from_id
-  AND NOT EXISTS (SELECT 1 FROM account_project_watches e
-                  WHERE e.account_id = l.to_id
-                  AND e.project_name = s.project_name);
-
-INSERT INTO account_group_members
-(account_id, group_id)
-SELECT l.to_id, s.group_id
-FROM links l, account_group_members s
-WHERE l.from_id IS NOT NULL
-  AND l.to_id IS NOT NULL
-  AND s.account_id = l.from_id
-  AND NOT EXISTS (SELECT 1 FROM account_group_members e
-                  WHERE e.account_id = l.to_id
-                  AND e.group_id = s.group_id);
-
-UPDATE changes
-SET owner_account_id = (SELECT l.to_id
-                        FROM links l
-                        WHERE l.from_id = owner_account_id)
-WHERE EXISTS (SELECT 1 FROM links l
-              WHERE l.to_id IS NOT NULL
-                AND l.from_id IS NOT NULL
-                AND l.from_id = owner_account_id);
-
-UPDATE patch_sets
-SET uploader_account_id = (SELECT l.to_id
-                           FROM links l
-                           WHERE l.from_id = uploader_account_id)
-WHERE EXISTS (SELECT 1 FROM links l
-              WHERE l.to_id IS NOT NULL
-                AND l.from_id IS NOT NULL
-                AND l.from_id = uploader_account_id);
-
-UPDATE patch_set_approvals
-SET account_id = (SELECT l.to_id
-                  FROM links l
-                  WHERE l.from_id = account_id)
-WHERE EXISTS (SELECT 1 FROM links l
-              WHERE l.to_id IS NOT NULL
-                AND l.from_id IS NOT NULL
-                AND l.from_id = account_id)
- AND NOT EXISTS (SELECT 1 FROM patch_set_approvals e, links l
-                 WHERE e.change_id = patch_set_approvals.change_id
-                   AND e.patch_set_id = patch_set_approvals.patch_set_id
-                   AND e.account_id = l.to_id
-                   AND e.category_id = patch_set_approvals.category_id
-                   AND l.from_id = patch_set_approvals.account_id);
-
-UPDATE change_messages
-SET author_id = (SELECT l.to_id
-                 FROM links l
-                 WHERE l.from_id = author_id)
-WHERE EXISTS (SELECT 1 FROM links l
-              WHERE l.to_id IS NOT NULL
-                AND l.from_id IS NOT NULL
-                AND l.from_id = author_id);
-
-UPDATE patch_comments
-SET author_id = (SELECT l.to_id
-                 FROM links l
-                 WHERE l.from_id = author_id)
-WHERE EXISTS (SELECT 1 FROM links l
-              WHERE l.to_id IS NOT NULL
-                AND l.from_id IS NOT NULL
-                AND l.from_id = author_id);
-
-
--- Destroy the from account
---
-INSERT INTO to_del
-SELECT from_id FROM links
-WHERE to_id IS NOT NULL
-AND from_id IS NOT NULL;
-
-DELETE FROM account_agreements WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM account_external_ids WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM account_group_members WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM account_project_watches WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM account_ssh_keys WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM accounts WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM starred_changes WHERE account_id IN (SELECT old_id FROM to_del);
-DELETE FROM patch_set_approvals WHERE account_id IN (SELECT old_id FROM to_del);
-}}}
\ No newline at end of file
+[https://gerrit.googlesource.com/homepage/+/md-pages/docs/SqlMergeUserAccounts.md moved]
\ No newline at end of file
