TypeError: 'get(...) projectAreas is not null after M5a
After migrating from Beta 2a to M5a, I get "TypeError: 'get(...).projectAreas' is not null or not an object" when trying to view project areas with the web ui.
WAS SystemOut.log shows many errors: -bash-3.00$ tail -f SystemOut.log at com.ibm.db2.jcc.b.zc.n(zc.java:1186) at com.ibm.db2.jcc.b.ad.db(ad.java:1761) at com.ibm.db2.jcc.b.ad.d(ad.java:2203) at com.ibm.db2.jcc.b.ad.U(ad.java:489) at com.ibm.db2.jcc.b.ad.executeQuery(ad.java:472) at com.ibm.team.repository.service.internal.db.jdbcwrappers.stat.PreparedStatementStatWrapper.executeQuery(PreparedStatementStatWrapper.java:58) at com.ibm.team.repository.service.internal.db.jdbcwrappers.errlog.PreparedStatementErrLogWrapper.executeQuery(PreparedStatementErrLogWrapper.java:75) at com.ibm.team.repository.service.internal.db.jdbcwrappers.leak.PreparedStatementLeakWrapper.executeQuery(PreparedStatementLeakWrapper.java:55) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:212) ... 80 more 00000023 SystemOut O 14:00:29,834 WARN sqlExceptionLogger - Syntax error or access rule violation SQL: select t1.ITEM_ID, t1.STATE_ID from REPOSITORY.ROLE_ASSIGNMENT t1 where (t1.CONTRIBUTOR_ITEM_ID = ?) SQL Exception #1 SQL Message: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: REPOSITORY.ROLE_ASSIGNMENT SQL State: 42704 Error Code: -204 SQL Exception #2 SQL Message: DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-204;42704;REPOSITORY.ROLE_ASSIGNMENT SQL State: 56098 Error Code: -727 Exception Details: Vendor specific exception SQL Exception #3 SQL Message: DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-204;42704;REPOSITORY.ROLE_ASSIGNMENT SQL State: 56098 Error Code: -727 Exception Details: Vendor specific exception com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: REPOSITORY.ROLE_ASSIGNMENT ... 00000023 SystemOut O 14:00:29,837 ERROR ository.service.internal.RdbRepositoryDataMediator - Failing ast query ----------- RoleAssignmentQueryModel r = RoleAssignmentQueryModel.ROOT; AstQuery q = (AstQuery) IItemQuery.FACTORY.newInstance(r); q.filter(r.contributor().itemId()._eq(q.newUUIDArg())); ----------- IDynamicQueryModel d = ItemUtil.itemTypeFor("RoleAssignment", "com.ibm.team.repository").getQueryModel(); IItemQuery q = IItemQuery.FACTORY.newInstance((IDynamicItemQueryModel) d); q.filter(((IUUIDField) d.getReference("contributor").getReference("itemId"))._eq(q.newUUIDArg())); ----------- parm1: select t1.ITEM_ID, t1.STATE_ID from REPOSITORY.ROLE_ASSIGNMENT t1 where (t1.CONTRIBUTOR_ITEM_ID = ?) 00000023 SystemOut O 14:00:29,840 ERROR ository.service.internal.RdbRepositoryDataMediator - InternalRepositoryException processing query com.ibm.team.repository.common.InternalRepositoryException: Error executing query stmt = select t1.ITEM_ID, t1.STATE_ID from REPOSITORY.ROLE_ASSIGNMENT t1 where (t1.CONTRIBUTOR_ITEM_ID = ?) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:215) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:183) at com.ibm.team.repository.service.internal.dataaccess.MediatorUtils.fetchData(MediatorUtils.java:59) at com.ibm.team.repository.service.internal.RdbRepositoryDataMediator.queryData(RdbRepositoryDataMediator.java:742) at com.ibm.team.repository.service.internal.QueryService.performQuery(QueryService.java:448) at com.ibm.team.repository.service.internal.QueryService.doExecuteItemQuery(QueryService.java:341) at com.ibm.team.repository.service.internal.QueryService.access$0(QueryService.java:338) at com.ibm.team.repository.service.internal.QueryService$1.run(QueryService.java:175) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runTransaction(RepositoryDatabase.java:289) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runInTransaction(RepositoryDatabase.java:218) at com.ibm.team.repository.service.internal.TransactionService.runInTransaction(TransactionService.java:77) at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy25.runInTransaction(Unknown Source) at com.ibm.team.repository.service.internal.QueryService.executeItemQuery(QueryService.java:166) at com.ibm.team.repository.service.internal.QueryService.queryItems(QueryService.java:777) at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy40.queryItems(Unknown Source) at com.ibm.team.repository.service.internal.permission.PermissionService.initializeRoleAssignmentForContributor(PermissionService.java:794) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermissionUsingOldRepositoryRoles(PermissionService.java:581) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermissionWithMessage(PermissionService.java:572) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermission(PermissionService.java:562) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy45.assertPermission(Unknown Source) at com.ibm.team.repository.service.internal.RepositoryItemService.assertPermission(RepositoryItemService.java:227) at com.ibm.team.repository.service.internal.RepositoryItemService.doSaveSimpleItem(RepositoryItemService.java:1562) at com.ibm.team.repository.service.internal.RepositoryItemService.doSaveItem(RepositoryItemService.java:1390) at com.ibm.team.repository.service.internal.RepositoryItemService.access$14(RepositoryItemService.java:1366) at com.ibm.team.repository.service.internal.RepositoryItemService$24.run(RepositoryItemService.java:1360) at com.ibm.team.repository.service.internal.RepositoryItemService$24.run(RepositoryItemService.java:1) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase$Transaction.run(RepositoryDatabase.java:449) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runTransaction(RepositoryDatabase.java:263) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runInTransaction(RepositoryDatabase.java:218) at com.ibm.team.repository.service.internal.TransactionService.runInTransaction(TransactionService.java:77) at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy25.runInTransaction(Unknown Source) at com.ibm.team.repository.service.internal.RepositoryItemService.saveItem(RepositoryItemService.java:1357) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy50.saveItem(Unknown Source) at com.ibm.team.repository.service.internal.ComponentRepositoryItemService.saveItem(ComponentRepositoryItemService.java:222) at com.ibm.team.repository.service.internal.ChangeEventService.save(ChangeEventService.java:160) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy53.save(Unknown Source) at com.ibm.team.repository.service.internal.LogChangeEventAppenderTask.saveChangeEventsForLogEntries(LogChangeEventAppenderTask.java:61) at com.ibm.team.repository.service.internal.LogChangeEventAppenderTask.runTask(LogChangeEventAppenderTask.java:82) at com.ibm.team.repository.service.async.AbstractAutoScheduledTask.executeTask(AbstractAutoScheduledTask.java:116) at com.ibm.team.repository.service.internal.scheduler.InstrumentedAsynchronousTask.executeTask(InstrumentedAsynchronousTask.java:63) at com.ibm.team.repository.service.internal.scheduler.AsynchronousTaskRunner.run(AsynchronousTaskRunner.java:147) at java.lang.Thread.run(Thread.java:810) Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: REPOSITORY.ROLE_ASSIGNMENT at com.ibm.db2.jcc.b.zc.e(zc.java:1606) at com.ibm.db2.jcc.b.zc.a(zc.java:1206) at com.ibm.db2.jcc.a.db.h(db.java:149) at com.ibm.db2.jcc.a.db.a(db.java:43) at com.ibm.db2.jcc.a.r.a(r.java:30) at com.ibm.db2.jcc.a.sb.g(sb.java:152) at com.ibm.db2.jcc.b.zc.n(zc.java:1186) at com.ibm.db2.jcc.b.ad.db(ad.java:1761) at com.ibm.db2.jcc.b.ad.d(ad.java:2203) at com.ibm.db2.jcc.b.ad.U(ad.java:489) at com.ibm.db2.jcc.b.ad.executeQuery(ad.java:472) at com.ibm.team.repository.service.internal.db.jdbcwrappers.stat.PreparedStatementStatWrapper.executeQuery(PreparedStatementStatWrapper.java:58) at com.ibm.team.repository.service.internal.db.jdbcwrappers.errlog.PreparedStatementErrLogWrapper.executeQuery(PreparedStatementErrLogWrapper.java:75) at com.ibm.team.repository.service.internal.db.jdbcwrappers.leak.PreparedStatementLeakWrapper.executeQuery(PreparedStatementLeakWrapper.java:55) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:212) ... 80 more 00000023 SystemOut O 14:00:29,843 WARN com.ibm.team.repository - An exception occurred while trying to add some log entries to the feed com.ibm.team.repository.common.TeamRepositoryException: Failed to create change event for log entry at com.ibm.team.repository.service.internal.LogChangeEventAppenderTask.saveChangeEventsForLogEntries(LogChangeEventAppenderTask.java:67) at com.ibm.team.repository.service.internal.LogChangeEventAppenderTask.runTask(LogChangeEventAppenderTask.java:82) at com.ibm.team.repository.service.async.AbstractAutoScheduledTask.executeTask(AbstractAutoScheduledTask.java:116) at com.ibm.team.repository.service.internal.scheduler.InstrumentedAsynchronousTask.executeTask(InstrumentedAsynchronousTask.java:63) at com.ibm.team.repository.service.internal.scheduler.AsynchronousTaskRunner.run(AsynchronousTaskRunner.java:147) at java.lang.Thread.run(Thread.java:810) Caused by: com.ibm.team.repository.common.PermissionDeniedException: Cannot retrieve permission information at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermissionUsingOldRepositoryRoles(PermissionService.java:583) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermissionWithMessage(PermissionService.java:572) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermission(PermissionService.java:562) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy45.assertPermission(Unknown Source) at com.ibm.team.repository.service.internal.RepositoryItemService.assertPermission(RepositoryItemService.java:227) at com.ibm.team.repository.service.internal.RepositoryItemService.doSaveSimpleItem(RepositoryItemService.java:1562) at com.ibm.team.repository.service.internal.RepositoryItemService.doSaveItem(RepositoryItemService.java:1390) at com.ibm.team.repository.service.internal.RepositoryItemService.access$14(RepositoryItemService.java:1366) at com.ibm.team.repository.service.internal.RepositoryItemService$24.run(RepositoryItemService.java:1360) at com.ibm.team.repository.service.internal.RepositoryItemService$24.run(RepositoryItemService.java:1) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase$Transaction.run(RepositoryDatabase.java:449) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runTransaction(RepositoryDatabase.java:263) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runInTransaction(RepositoryDatabase.java:218) at com.ibm.team.repository.service.internal.TransactionService.runInTransaction(TransactionService.java:77) at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy25.runInTransaction(Unknown Source) at com.ibm.team.repository.service.internal.RepositoryItemService.saveItem(RepositoryItemService.java:1357) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy50.saveItem(Unknown Source) at com.ibm.team.repository.service.internal.ComponentRepositoryItemService.saveItem(ComponentRepositoryItemService.java:222) at com.ibm.team.repository.service.internal.ChangeEventService.save(ChangeEventService.java:160) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy53.save(Unknown Source) at com.ibm.team.repository.service.internal.LogChangeEventAppenderTask.saveChangeEventsForLogEntries(LogChangeEventAppenderTask.java:61) ... 5 more Caused by: com.ibm.team.repository.common.InternalRepositoryException: Failing query -> RoleAssignmentQueryModel r = RoleAssignmentQueryModel.ROOT; AstQuery q = (AstQuery) IItemQuery.FACTORY.newInstance(r); q.filter(r.contributor().itemId()._eq(q.newUUIDArg())); at com.ibm.team.repository.service.internal.RdbRepositoryDataMediator.queryData(RdbRepositoryDataMediator.java:747) at com.ibm.team.repository.service.internal.QueryService.performQuery(QueryService.java:448) at com.ibm.team.repository.service.internal.QueryService.doExecuteItemQuery(QueryService.java:341) at com.ibm.team.repository.service.internal.QueryService.access$0(QueryService.java:338) at com.ibm.team.repository.service.internal.QueryService$1.run(QueryService.java:175) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runTransaction(RepositoryDatabase.java:289) at com.ibm.team.repository.service.internal.rdb.RepositoryDatabase.runInTransaction(RepositoryDatabase.java:218) at com.ibm.team.repository.service.internal.TransactionService.runInTransaction(TransactionService.java:77) at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy25.runInTransaction(Unknown Source) at com.ibm.team.repository.service.internal.QueryService.executeItemQuery(QueryService.java:166) at com.ibm.team.repository.service.internal.QueryService.queryItems(QueryService.java:777) at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(ExportProxyServiceRecord.java:324) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(ExportProxyServiceRecord.java:316) at org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$1.invoke(ExportProxyServiceRecord.java:106) at $Proxy40.queryItems(Unknown Source) at com.ibm.team.repository.service.internal.permission.PermissionService.initializeRoleAssignmentForContributor(PermissionService.java:794) at com.ibm.team.repository.service.internal.permission.PermissionService.assertPermissionUsingOldRepositoryRoles(PermissionService.java:581) ... 52 more Caused by: com.ibm.team.repository.common.InternalRepositoryException: Error executing query stmt = select t1.ITEM_ID, t1.STATE_ID from REPOSITORY.ROLE_ASSIGNMENT t1 where (t1.CONTRIBUTOR_ITEM_ID = ?) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:215) at com.ibm.team.repository.service.internal.dataaccess.FetchRows.execute(FetchRows.java:183) at com.ibm.team.repository.service.internal.dataaccess.MediatorUtils.fetchData(MediatorUtils.java:59) at com.ibm.team.repository.service.internal.RdbRepositoryDataMediator.queryData(RdbRepositoryDataMediator.java:742) ... 77 more |
2 answers
The role assignments no longer exist in the repository database in M5a, per
the change to permissions described at https://jazz.net/wiki/bin/view/Main/RoleMigrationAndLdapConfiguration. The stack trace in the log suggests the server is running old code. If you are using Websphere I'd suggest unintalling the WAR completely and re-install M5a. Also be sure to review the topic above and ensure you have updated your LDAP registry to include the old repository roles. -- Ritchie ********************************************** Ritchie Schacher Jazz Repository/Server Team "mmartin" <Mark_Martin@ca.ibm-dot-com.no-spam.invalid> wrote in message news:frrlvc$sgi$1@localhost.localdomain... After migrating from Beta 2a to M5a, I get "TypeError: |
The role assignments no longer exist in the repository database in M5a, per |
Your answer
Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.